@cline/shared 0.0.69 → 0.0.70

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/agent.d.ts CHANGED
@@ -91,6 +91,8 @@ export interface AgentRuntimeStateSnapshot {
91
91
  pendingToolCalls: readonly string[];
92
92
  usage: AgentUsage;
93
93
  lastError?: string;
94
+ /** Classification of `lastError` when it came from a provider stream. */
95
+ lastErrorClass?: ProviderErrorClass;
94
96
  }
95
97
  export interface AgentToolDefinition {
96
98
  name: string;
@@ -147,6 +149,12 @@ export interface AgentRuntimePrepareTurnContext {
147
149
  info?: ModelInfo;
148
150
  };
149
151
  signal?: AbortSignal;
152
+ /**
153
+ * Set when the previous model request was rejected as exceeding the
154
+ * model's context window; asks the prepare-turn pipeline to force a
155
+ * compaction rather than trust its token estimates.
156
+ */
157
+ overflowRecovery?: boolean;
150
158
  emitStatusNotice?: (message: string, metadata?: Record<string, unknown>) => void;
151
159
  }
152
160
  export interface AgentRuntimePrepareTurnResult {
@@ -154,6 +162,13 @@ export interface AgentRuntimePrepareTurnResult {
154
162
  systemPrompt?: string;
155
163
  }
156
164
  export type AgentModelFinishReason = "stop" | "tool-calls" | "max-tokens" | "aborted" | "error";
165
+ /**
166
+ * Coarse classification of a provider error, derived from the raw provider
167
+ * error object before it is flattened into a display string. Shared by the
168
+ * runtime's recovery policy and telemetry (`error_class`). Extend with new
169
+ * classes (auth, rate_limit, billing, ...) as consumers need them.
170
+ */
171
+ export type ProviderErrorClass = "context_window_exceeded" | "unknown";
157
172
  export type AgentModelEvent = {
158
173
  type: "text-delta";
159
174
  text: string;
@@ -170,6 +185,17 @@ export type AgentModelEvent = {
170
185
  inputText?: string;
171
186
  input?: unknown;
172
187
  metadata?: unknown;
188
+ } | {
189
+ /**
190
+ * A model-generated file (e.g. an image from an image-output
191
+ * model). `data` is base64-encoded file data (or a URL for
192
+ * URL-referenced files). Runtimes assemble it into the assistant
193
+ * message (`AgentImagePart` for `image/*`, `AgentFilePart`
194
+ * otherwise) so a file-only turn is not treated as empty.
195
+ */
196
+ type: "file";
197
+ data: string;
198
+ mediaType: string;
173
199
  } | {
174
200
  type: "usage";
175
201
  usage: Partial<AgentUsage>;
@@ -177,6 +203,16 @@ export type AgentModelEvent = {
177
203
  type: "finish";
178
204
  reason: AgentModelFinishReason;
179
205
  error?: string;
206
+ errorClass?: ProviderErrorClass;
207
+ /**
208
+ * The model layer already recorded `sdk.error` telemetry for this
209
+ * failure at its own error boundary. `error` is a flattened string,
210
+ * so this bit carries reporting ownership across the boundary: the
211
+ * agent loop skips re-reporting when it is set, and still reports
212
+ * failures from model implementations that do not record their own
213
+ * telemetry.
214
+ */
215
+ errorReported?: boolean;
180
216
  };
181
217
  export interface AgentModel {
182
218
  stream: (request: AgentModelRequest) => AsyncIterable<AgentModelEvent> | Promise<AsyncIterable<AgentModelEvent>>;
@@ -379,6 +415,8 @@ export type AgentRuntimeEvent = {
379
415
  type: "run-failed";
380
416
  snapshot: AgentRuntimeStateSnapshot;
381
417
  error: Error;
418
+ /** Classification of the provider error that failed the run. */
419
+ errorClass?: ProviderErrorClass;
382
420
  };
383
421
  export interface AgentRunResult {
384
422
  agentId: string;
@@ -10,7 +10,7 @@
10
10
  * and is used directly.
11
11
  */
12
12
  import { z } from "zod";
13
- import type { AgentRuntimeHooks, AgentTool } from "../agent";
13
+ import type { AgentRuntimeHooks, AgentTool, ProviderErrorClass } from "../agent";
14
14
  import type { ExtensionContext } from "../extensions/context";
15
15
  import type { AgentExtensionApi, AgentExtensionHooks, AgentExtensionRegistry as AgentExtensionRegistryGeneric, ContributionRegistryExtension, PluginManifest, PluginSetupContext } from "../extensions/contribution-registry";
16
16
  import type { HookControl } from "../hooks/contracts";
@@ -137,6 +137,8 @@ export interface AgentErrorEvent extends AgentEventMetadata {
137
137
  type: "error";
138
138
  /** The error that occurred */
139
139
  error: Error;
140
+ /** Classification of the provider error, when known. */
141
+ errorClass?: ProviderErrorClass;
140
142
  /** Whether the error is recoverable */
141
143
  recoverable: boolean;
142
144
  /** Current iteration when error occurred */
@@ -472,6 +474,12 @@ export interface AgentPrepareTurnContext {
472
474
  provider: string;
473
475
  info?: ModelInfo;
474
476
  };
477
+ /**
478
+ * Set when the previous model request was rejected as exceeding the
479
+ * model's context window; asks the prepare-turn pipeline to force a
480
+ * compaction rather than trust its token estimates.
481
+ */
482
+ overflowRecovery?: boolean;
475
483
  emitStatusNotice?: (message: string, metadata?: Record<string, unknown>) => void;
476
484
  }
477
485
  export interface AgentPrepareTurnResult {
@@ -78,6 +78,8 @@ export type ConnectSlackOptions = {
78
78
  baseUrl?: string;
79
79
  };
80
80
  export type SlackConnectorState = {
81
+ /** Absent in state files written by CLI versions that predate claiming. */
82
+ claimId?: string;
81
83
  userName: string;
82
84
  connectionMode?: "webhook" | "socket";
83
85
  pid: number;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Types for hub-owned connector supervision.
3
+ *
4
+ * A connector is a separate process holding third-party credentials (a Slack
5
+ * socket, a Telegram poll loop). The hub supervises those processes: it is the
6
+ * single authority on which instances may run, it reaps their state when they
7
+ * die, and it restarts them with backoff. These records are what it reports
8
+ * about that work.
9
+ */
10
+ /** How a supervised connector process came under the hub's watch. */
11
+ export type SupervisedConnectorOrigin =
12
+ /** The current hub spawned it, so it has a live child handle. */
13
+ "spawned"
14
+ /** It predates the current hub, which adopted it by pid from its state file. */
15
+ | "adopted";
16
+ export type SupervisedConnectorState =
17
+ /** Process is alive as far as the hub can tell. */
18
+ "running"
19
+ /** Died and is waiting out its restart backoff. */
20
+ | "backoff"
21
+ /** Died too many times in a row; the hub has given up restarting it. */
22
+ | "failed"
23
+ /** Stopped on request; the hub will not restart it. */
24
+ | "stopped";
25
+ export type SupervisedConnectorRecord = {
26
+ channel: string;
27
+ instanceId: string;
28
+ state: SupervisedConnectorState;
29
+ origin: SupervisedConnectorOrigin;
30
+ pid?: number;
31
+ startedAt?: string;
32
+ /** Consecutive restarts that have not yet been cleared by a stable run. */
33
+ restarts: number;
34
+ /** When the next restart attempt is due, while in "backoff". */
35
+ nextRestartAt?: string;
36
+ lastExitCode?: number;
37
+ lastExitSignal?: string;
38
+ lastError?: string;
39
+ };
40
+ export type ConnectorStartRequest = {
41
+ channel: string;
42
+ instanceId: string;
43
+ /** Connector CLI arguments, excluding the channel name itself. */
44
+ args: string[];
45
+ /**
46
+ * Replace a running instance instead of reporting it as already running.
47
+ * Used by `connect --restart`.
48
+ */
49
+ restart?: boolean;
50
+ };
51
+ export type ConnectorStartResult = {
52
+ /** False when an instance was already running and `restart` was not set. */
53
+ started: boolean;
54
+ record: SupervisedConnectorRecord;
55
+ /** Why `started` is false, when it is. */
56
+ reason?: "already_running";
57
+ };
58
+ export type ConnectorStopRequest = {
59
+ channel: string;
60
+ instanceId: string;
61
+ /** Stop auto-restarting this instance as well. Defaults to true. */
62
+ disableAutostart?: boolean;
63
+ };
64
+ export type ConnectorStopResultPayload = {
65
+ stopped: boolean;
66
+ channel: string;
67
+ instanceId: string;
68
+ };
package/dist/db/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var UK=Object.defineProperty;var FK=(K)=>K;function GK(K,Z){this[K]=FK.bind(null,Z)}var rK=(K,Z)=>{for(var $ in Z)UK(K,$,{get:Z[$],enumerable:!0,configurable:!0,set:GK.bind(Z,$)})};import{existsSync as lK,readFileSync as cK,renameSync as iK}from"node:fs";import{appendFileSync as YK,existsSync as U,mkdirSync as v,readdirSync as OK,readFileSync as HK,statSync as A}from"node:fs";import{homedir as LK}from"node:os";import{dirname as g,join as Q,resolve as T}from"node:path";var I="workspaces",S="chat";function JK(K){let Z=K.trim(),$=/^[A-Za-z]:[\\/]/.test(Z)||Z.startsWith("\\\\"),j=Z.startsWith("/");if(!$&&!j)return!1;let X=Z.split($?/[\\/]+/:/\/+/).filter(Boolean),W=X.at(-1)??"",V=X.at(-2)??"",z=X.at(-3)??"";return(X.at(-4)??"")===".cline"&&z==="data"&&V==="workspaces"&&W==="chat"}var b=".clinerules",C=".cline",m=".agents",i="agents",E="hooks",k="skills",h="rules",R="workflows",l="plugins",o="AGENTS.md";function jZ(){return Q(G(),I,S)}var BK="cline_mcp_settings.json",MK="settings.json";function qK(){let K=process?.env?.HOME?.trim();if(K&&K!=="~")return K;let Z=process?.env?.USERPROFILE?.trim();if(Z)return Z;let $=process?.env?.HOMEDRIVE?.trim(),j=process?.env?.HOMEPATH?.trim();if($&&j)return`${$}${j}`;let X=LK().trim();if(X&&X!=="~")return X;return"~"}var M=qK(),s=!1;function XZ(K){let Z=K.trim();if(!Z)return;M=Z,s=!0}function QZ(K){if(s)return;let Z=K.trim();if(!Z)return;M=Z}var _,n=!1;function WZ(K){let Z=K.trim();if(!Z)return;_=Z,n=!0}function zZ(K){if(n)return;let Z=K.trim();if(!Z)return;_=Z}function J(){if(_)return _;let K=process.env.CLINE_DIR?.trim();if(K)return K;return Q(M,".cline")}function NK(){return Q(M,"Documents","Cline")}function D(K){return Q(NK(),K)}function G(){let K=process.env.CLINE_DATA_DIR?.trim();if(K)return K;return Q(J(),"data")}function VZ(){let K=process.env.CLINE_SESSION_DATA_DIR?.trim();if(K)return K;return Q(G(),"sessions")}function UZ(){let K=process.env.CLINE_TEAM_DATA_DIR?.trim();if(K)return K;return Q(G(),"teams")}function AK(){let K=process.env.CLINE_CONNECTOR_DATA_DIR?.trim();if(K)return K;return Q(G(),"connectors")}function r(){let K=process.env.CLINE_CONNECTOR_SETTINGS_PATH?.trim();if(K)return K;return Q(AK(),MK)}function t(){let K=process.env.CLINE_DB_DATA_DIR?.trim();if(K)return K;return Q(G(),"db")}function a(){let K=process.env.CLINE_CONNECTORS_DB_PATH?.trim();if(K)return K;return Q(t(),"connectors.db")}function FZ(){let K=process.env.CLINE_CRON_DB_PATH?.trim();if(K)return K;return Q(t(),"cron.db")}function TK(){return Q(J(),"cron")}function c(K){return Q(K,".cline","cron")}function e(K){if(typeof K==="string")return c(K);if(K?.cronSpecsDir?.trim())return K.cronSpecsDir.trim();if(K?.scope==="workspace"){let Z=K.workspaceRoot?.trim();if(!Z)throw Error("workspaceRoot is required for workspace cron scope");return c(Z)}return TK()}function GZ(K){return Q(e(K),"reports")}function JZ(K){return Q(e(K),"events")}function YZ(){let K=process.env.CLINE_PROVIDER_SETTINGS_PATH?.trim();if(K)return K;return Q(G(),"settings","providers.json")}function OZ(){let K=process.env.CLINE_GLOBAL_SETTINGS_PATH?.trim();if(K)return K;return Q(G(),"settings","global-settings.json")}function HZ(){let K=process.env.CLINE_MCP_SETTINGS_PATH?.trim();if(K)return K;return Q(G(),"settings",BK)}function q(K){let Z=new Set,$=[];for(let j of K){if(!j||Z.has(j))continue;Z.add(j),$.push(j)}return $}function xK(K){if(!K)return[];return[b,C,m].map((Z)=>Q(K,Z,k))}function _K(){return Q(J(),i)}function LZ(K){return q([K?Q(K,C,i):"",_K()])}function BZ(K){let Z=[D("Hooks"),Q(J(),E)];if(K)Z.push(Q(K,b,E),Q(K,C,E));return q(Z)}function MZ(K){return q([...xK(K),Q(J(),k),Q(M,m,k)])}function fK(){return Q(M,m,o)}function qZ(K){let Z=K?[Q(K,b),Q(K,C,h)]:[],$=K?[Q(K,o)]:[];return q([...$,...Z,fK(),Q(J(),h),D("Rules")])}function NZ(K){return q([K?Q(K,".clinerules",R):"",D("Workflows"),Q(J(),R),K?Q(K,".cline",R):""])}function AZ(K){return q([K?Q(K,".cline",l):"",Q(J(),l),D("Plugins")])}var KK=new Set([".js",".ts"]),ZK="package.json",CK=["index.ts","index.js"];function f(K){let Z=K.lastIndexOf(".");if(Z===-1)return!1;return KK.has(K.slice(Z))}function $K(K){try{let Z=JSON.parse(HK(K,"utf8"));if(!Z.cline||typeof Z.cline!=="object")return null;return Z.cline}catch{return null}}function jK(K){let Z=K?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap(($)=>$.paths??[])}function DK(K){let Z=T(K);if(!U(Z)||!A(Z).isDirectory())return null;let $=Q(Z,ZK);if(U($)){let j=$K($),X=jK(j).map((W)=>T(Z,W)).filter((W)=>U(W)&&A(W).isFile()&&f(W));if(X.length>0)return X}for(let j of CK){let X=Q(Z,j);if(U(X)&&A(X).isFile())return[X]}return null}function IK(K){let Z=T(K);if(!U(Z))return[];let $=[],j=[Z];while(j.length>0){let X=j.pop();if(!X)continue;let W;try{W=OK(X,{withFileTypes:!0})}catch{continue}for(let V of W){let z=Q(X,V.name);if(V.isDirectory()){let O=Q(z,ZK);if(U(O)){let H=$K(O),d=jK(H).map((N)=>T(z,N)).filter((N)=>U(N)&&A(N).isFile()&&f(N));if(d.length>0){$.push(...d);continue}}j.push(z);continue}if(V.name.startsWith("."))continue;if(V.isFile()&&f(z))$.push(z)}}return $.sort((X,W)=>X.localeCompare(W))}function TZ(K,Z){let $=[];for(let j of K){let X=j.trim();if(!X)continue;let W=T(Z,X);if(!U(W))throw Error(`Plugin path does not exist: ${W}`);if(A(W).isDirectory()){let z=DK(W);if(z){$.push(...z);continue}$.push(...IK(W));continue}if(!f(W))throw Error(`Plugin file must use a supported extension (${[...KK].join(", ")}): ${W}`);$.push(W)}return $}function SK(K){let Z=g(K);if(!U(Z))v(Z,{recursive:!0})}function xZ(K){v(g(K),{recursive:!0}),YK(K,"")}function _Z(K){if(K?.trim())return SK(K),g(K);let Z=Q(G(),"logs");if(!U(Z))v(Z,{recursive:!0});return Z}import{mkdirSync as EK}from"node:fs";import{createRequire as RK}from"node:module";import{dirname as kK}from"node:path";function XK(K){if(K instanceof Error)return K.message;return String(K)}function QK(K){if(K&&typeof K==="object"&&"code"in K&&typeof K.code==="string")return K.code;return""}var vK=3,gK=50;function L(){return new Date().toISOString()}function x(K){return K?1:0}function F(K){return typeof K==="string"?K:""}function y(K){if(typeof K!=="string")return;let Z=K.trim();return Z.length>0?Z:void 0}function bK(K){return K===1||K===!0}function mK(K){if(K<=0)return;try{let Z=new SharedArrayBuffer(4),$=new Int32Array(Z);Atomics.wait($,0,0,K)}catch{}}function yK(K){if(!K||typeof K!=="object")return!1;let Z=XK(K),$=QK(K);return $==="SQLITE_BUSY"||$==="SQLITE_LOCKED"||Z.includes("SQLITE_BUSY")||Z.includes("SQLITE_LOCKED")||Z.includes("database is locked")}function Y(K){let Z=0;for(;;)try{return K()}catch($){if(!yK($)||Z>=vK)throw $;Z+=1,mK(gK*2**(Z-1))}}function uK(K){return{prepare:(Z)=>{let $=K.query(Z);return{run:(...j)=>Y(()=>$.run(...j)),get:(...j)=>Y(()=>$.get(...j)),all:(...j)=>Y(()=>$.all(...j))}},exec:(Z)=>Y(()=>K.exec(Z)),close:()=>K.close?.()}}function PK(K){return{prepare:(Z)=>{let $=K.prepare(Z);return{run:(...j)=>Y(()=>$.run(...j)),get:(...j)=>Y(()=>$.get(...j)??null),all:(...j)=>Y(()=>$.all(...j))}},exec:(Z)=>Y(()=>K.exec(Z)),close:()=>K.close?.()}}function u(K){EK(kK(K),{recursive:!0});let Z=RK(import.meta.url);if(typeof globalThis.Bun<"u"){let{Database:j}=Z("bun:sqlite");return uK(new j(K,{create:!0}))}let $=process.emitWarning;process.emitWarning=(j,...X)=>{if((typeof j==="string"?j:j?.message??"").includes("SQLite"))return;return $.call(process,j,...X)};try{let{DatabaseSync:j}=Z(["node",":sqlite"].join(""));return PK(new j(K))}finally{process.emitWarning=$}}var wK=[`CREATE TABLE IF NOT EXISTS sessions (
1
+ var FZ=Object.defineProperty;var GZ=(Z)=>Z;function YZ(Z,$){this[Z]=GZ.bind(null,$)}var j0=(Z,$)=>{for(var j in $)FZ(Z,j,{get:$[j],enumerable:!0,configurable:!0,set:YZ.bind($,j)})};import{existsSync as rZ,readFileSync as tZ,renameSync as aZ}from"node:fs";import{appendFileSync as HZ,existsSync as U,mkdirSync as b,readdirSync as LZ,readFileSync as o,statSync as T}from"node:fs";import{homedir as BZ}from"node:os";import{basename as JZ,dirname as D,extname as MZ,isAbsolute as qZ,join as Q,relative as NZ,resolve as Y}from"node:path";var f="workspaces",E="chat";function OZ(Z){let $=Z.trim(),j=/^[A-Za-z]:[\\/]/.test($)||$.startsWith("\\\\"),X=$.startsWith("/");if(!j&&!X)return!1;let K=$.split(j?/[\\/]+/:/\/+/).filter(Boolean),W=K.at(-1)??"",z=K.at(-2)??"",V=K.at(-3)??"";return(K.at(-4)??"")===".cline"&&V==="data"&&z==="workspaces"&&W==="chat"}var g=".clinerules",I=".cline",m=".agents",s="agents",R="hooks",k="skills",l="rules",v="workflows",c="plugins",n="AGENTS.md";function U0(){return Q(F(),f,E)}var AZ="cline_mcp_settings.json",TZ="settings.json";function xZ(){let Z=process?.env?.HOME?.trim();if(Z&&Z!=="~")return Z;let $=process?.env?.USERPROFILE?.trim();if($)return $;let j=process?.env?.HOMEDRIVE?.trim(),X=process?.env?.HOMEPATH?.trim();if(j&&X)return`${j}${X}`;let K=BZ().trim();if(K&&K!=="~")return K;return"~"}var q=xZ(),r=!1;function F0(Z){let $=Z.trim();if(!$)return;q=$,r=!0}function G0(Z){if(r)return;let $=Z.trim();if(!$)return;q=$}var _,t=!1;function Y0(Z){let $=Z.trim();if(!$)return;_=$,t=!0}function O0(Z){if(t)return;let $=Z.trim();if(!$)return;_=$}function O(){if(_)return _;let Z=process.env.CLINE_DIR?.trim();if(Z)return Z;return Q(q,".cline")}function _Z(){return Q(q,"Documents","Cline")}function S(Z){return Q(_Z(),Z)}function F(){let Z=process.env.CLINE_DATA_DIR?.trim();if(Z)return Z;return Q(O(),"data")}function H0(){let Z=process.env.CLINE_SESSION_DATA_DIR?.trim();if(Z)return Z;return Q(F(),"sessions")}function L0(){let Z=process.env.CLINE_TEAM_DATA_DIR?.trim();if(Z)return Z;return Q(F(),"teams")}function CZ(){let Z=process.env.CLINE_CONNECTOR_DATA_DIR?.trim();if(Z)return Z;return Q(F(),"connectors")}function B0(Z,$){let j=Z.replace(/[^a-zA-Z0-9._-]+/g,"_"),X=$.replace(/[^a-zA-Z0-9._-]+/g,"_");return Q(F(),"logs","connectors",j,`${X}.log`)}function a(){let Z=process.env.CLINE_CONNECTOR_SETTINGS_PATH?.trim();if(Z)return Z;return Q(CZ(),TZ)}function e(){let Z=process.env.CLINE_DB_DATA_DIR?.trim();if(Z)return Z;return Q(F(),"db")}function ZZ(){let Z=process.env.CLINE_CONNECTORS_DB_PATH?.trim();if(Z)return Z;return Q(e(),"connectors.db")}function J0(){let Z=process.env.CLINE_CRON_DB_PATH?.trim();if(Z)return Z;return Q(e(),"cron.db")}function DZ(){return Q(O(),"cron")}function i(Z){return Q(Z,".cline","cron")}function $Z(Z){if(typeof Z==="string")return i(Z);if(Z?.cronSpecsDir?.trim())return Z.cronSpecsDir.trim();if(Z?.scope==="workspace"){let $=Z.workspaceRoot?.trim();if(!$)throw Error("workspaceRoot is required for workspace cron scope");return i($)}return DZ()}function M0(Z){return Q($Z(Z),"reports")}function q0(Z){return Q($Z(Z),"events")}function N0(){let Z=process.env.CLINE_PROVIDER_SETTINGS_PATH?.trim();if(Z)return Z;return Q(F(),"settings","providers.json")}function A0(){let Z=process.env.CLINE_GLOBAL_SETTINGS_PATH?.trim();if(Z)return Z;return Q(F(),"settings","global-settings.json")}function T0(){let Z=process.env.CLINE_MCP_SETTINGS_PATH?.trim();if(Z)return Z;return Q(F(),"settings",AZ)}function N(Z){let $=new Set,j=[];for(let X of Z){if(!X||$.has(X))continue;$.add(X),j.push(X)}return j}function IZ(Z){if(!Z)return[];return[g,I,m].map(($)=>Q(Z,$,k))}function SZ(){return Q(O(),s)}function x0(Z){return N([Z?Q(Z,I,s):"",SZ()])}function _0(Z){let $=[S("Hooks"),Q(O(),R)];if(Z)$.push(Q(Z,g,R),Q(Z,I,R));return N($)}function C0(Z){return N([...IZ(Z),Q(O(),k),Q(q,m,k)])}function fZ(){return Q(q,m,n)}function D0(Z){let $=Z?[Q(Z,g),Q(Z,I,l)]:[],j=Z?[Q(Z,n)]:[];return N([...j,...$,fZ(),Q(O(),l),S("Rules")])}function I0(Z){return N([Z?Q(Z,".clinerules",v):"",S("Workflows"),Q(O(),v),Z?Q(Z,".cline",v):""])}function S0(Z){return N([Z?Q(Z,".cline",c):"",Q(O(),c),S("Plugins")])}var jZ=new Set([".js",".ts"]),y="package.json",EZ=["index.ts","index.js"];function C(Z){let $=Z.lastIndexOf(".");if($===-1)return!1;return jZ.has(Z.slice($))}function XZ(Z){try{let $=JSON.parse(o(Z,"utf8"));if(!$.cline||typeof $.cline!=="object")return null;return $.cline}catch{return null}}function KZ(Z){let $=Z?.plugins;if(!Array.isArray($))return[];return $.flatMap((j)=>j.paths??[])}function RZ(Z){let $=Y(Z);if(!U($)||!T($).isDirectory())return null;let j=Q($,y);if(U(j)){let X=XZ(j),K=KZ(X).map((W)=>Y($,W)).filter((W)=>U(W)&&T(W).isFile()&&C(W));if(K.length>0)return K}for(let X of EZ){let K=Q($,X);if(U(K)&&T(K).isFile())return[K]}return null}function vZ(Z){try{let $=JSON.parse(o(Z,"utf8"));return typeof $.name==="string"&&$.name.trim()?$.name.trim():void 0}catch{return}}function kZ(Z,$){let j=NZ(Y(Z),Y($));return j===""||!j.startsWith("..")&&!qZ(j)}function f0(Z,$){let j=D(Z),X=Y($);while(kZ(X,j)){let K=Q(j,y);if(U(K)){let z=vZ(K);if(z)return z;break}let W=Y(j,"..");if(W===j)break;j=W}return JZ(Z,MZ(Z))}function bZ(Z){let $=Y(Z);if(!U($))return[];let j=[],X=[$];while(X.length>0){let K=X.pop();if(!K)continue;let W;try{W=LZ(K,{withFileTypes:!0})}catch{continue}for(let z of W){let V=Q(K,z.name);if(z.isDirectory()){let L=Q(V,y);if(U(L)){let B=XZ(L),h=KZ(B).map((A)=>Y(V,A)).filter((A)=>U(A)&&T(A).isFile()&&C(A));if(h.length>0){j.push(...h);continue}}X.push(V);continue}if(z.name.startsWith("."))continue;if(z.isFile()&&C(V))j.push(V)}}return j.sort((K,W)=>K.localeCompare(W))}function E0(Z,$){let j=[];for(let X of Z){let K=X.trim();if(!K)continue;let W=Y($,K);if(!U(W))throw Error(`Plugin path does not exist: ${W}`);if(T(W).isDirectory()){let V=RZ(W);if(V){j.push(...V);continue}j.push(...bZ(W));continue}if(!C(W))throw Error(`Plugin file must use a supported extension (${[...jZ].join(", ")}): ${W}`);j.push(W)}return j}function gZ(Z){let $=D(Z);if(!U($))b($,{recursive:!0})}function R0(Z){b(D(Z),{recursive:!0}),HZ(Z,"")}function v0(Z){if(Z?.trim())return gZ(Z),D(Z);let $=Q(F(),"logs");if(!U($))b($,{recursive:!0});return $}import{mkdirSync as mZ}from"node:fs";import{createRequire as yZ}from"node:module";import{dirname as uZ}from"node:path";function QZ(Z){if(Z instanceof Error)return Z.message;return String(Z)}function WZ(Z){if(Z&&typeof Z==="object"&&"code"in Z&&typeof Z.code==="string")return Z.code;return""}var wZ=3,PZ=50;function J(){return new Date().toISOString()}function x(Z){return Z?1:0}function G(Z){return typeof Z==="string"?Z:""}function u(Z){if(typeof Z!=="string")return;let $=Z.trim();return $.length>0?$:void 0}function pZ(Z){return Z===1||Z===!0}function dZ(Z){if(Z<=0)return;try{let $=new SharedArrayBuffer(4),j=new Int32Array($);Atomics.wait(j,0,0,Z)}catch{}}function hZ(Z){if(!Z||typeof Z!=="object")return!1;let $=QZ(Z),j=WZ(Z);return j==="SQLITE_BUSY"||j==="SQLITE_LOCKED"||$.includes("SQLITE_BUSY")||$.includes("SQLITE_LOCKED")||$.includes("database is locked")}function H(Z){let $=0;for(;;)try{return Z()}catch(j){if(!hZ(j)||$>=wZ)throw j;$+=1,dZ(PZ*2**($-1))}}function lZ(Z){return{prepare:($)=>{let j=Z.query($);return{run:(...X)=>H(()=>j.run(...X)),get:(...X)=>H(()=>j.get(...X)),all:(...X)=>H(()=>j.all(...X))}},exec:($)=>H(()=>Z.exec($)),close:()=>Z.close?.()}}function cZ(Z){return{prepare:($)=>{let j=Z.prepare($);return{run:(...X)=>H(()=>j.run(...X)),get:(...X)=>H(()=>j.get(...X)??null),all:(...X)=>H(()=>j.all(...X))}},exec:($)=>H(()=>Z.exec($)),close:()=>Z.close?.()}}function w(Z){mZ(uZ(Z),{recursive:!0});let $=yZ(import.meta.url);if(typeof globalThis.Bun<"u"){let{Database:X}=$("bun:sqlite");return lZ(new X(Z,{create:!0}))}let j=process.emitWarning;process.emitWarning=(X,...K)=>{if((typeof X==="string"?X:X?.message??"").includes("SQLite"))return;return j.call(process,X,...K)};try{let{DatabaseSync:X}=$(["node",":sqlite"].join(""));return cZ(new X(Z))}finally{process.emitWarning=j}}var iZ=[`CREATE TABLE IF NOT EXISTS sessions (
2
2
  session_id TEXT PRIMARY KEY,
3
3
  source TEXT NOT NULL,
4
4
  pid INTEGER NOT NULL,
@@ -77,7 +77,7 @@ var UK=Object.defineProperty;var FK=(K)=>K;function GK(K,Z){this[K]=FK.bind(null
77
77
  FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE SET NULL
78
78
  );`,`CREATE INDEX IF NOT EXISTS idx_schedule_executions_schedule
79
79
  ON schedule_executions(schedule_id, triggered_at DESC);`,`CREATE INDEX IF NOT EXISTS idx_schedules_next_run
80
- ON schedules(enabled, next_run_at);`],pK=[{table:"sessions",column:"workspace_root",sql:"ALTER TABLE sessions ADD COLUMN workspace_root TEXT;"},{table:"sessions",column:"parent_session_id",sql:"ALTER TABLE sessions ADD COLUMN parent_session_id TEXT;"},{table:"sessions",column:"parent_agent_id",sql:"ALTER TABLE sessions ADD COLUMN parent_agent_id TEXT;"},{table:"sessions",column:"agent_id",sql:"ALTER TABLE sessions ADD COLUMN agent_id TEXT;"},{table:"sessions",column:"conversation_id",sql:"ALTER TABLE sessions ADD COLUMN conversation_id TEXT;"},{table:"sessions",column:"is_subagent",sql:"ALTER TABLE sessions ADD COLUMN is_subagent INTEGER NOT NULL DEFAULT 0;"},{table:"sessions",column:"messages_path",sql:"ALTER TABLE sessions ADD COLUMN messages_path TEXT;"},{table:"sessions",column:"metadata_json",sql:"ALTER TABLE sessions ADD COLUMN metadata_json TEXT;"},{table:"sessions",column:"transcript_path",sql:"ALTER TABLE sessions ADD COLUMN transcript_path TEXT NOT NULL DEFAULT '';"},{table:"schedules",column:"claim_token",sql:"ALTER TABLE schedules ADD COLUMN claim_token TEXT;"},{table:"schedules",column:"claim_started_at",sql:"ALTER TABLE schedules ADD COLUMN claim_started_at TEXT;"},{table:"schedules",column:"claim_until_at",sql:"ALTER TABLE schedules ADD COLUMN claim_until_at TEXT;"}];function dK(K,Z){return new Set(K.prepare(`PRAGMA table_info(${Z});`).all().map(($)=>$.name))}function hK(K,Z={}){K.exec("PRAGMA journal_mode = WAL;"),K.exec("PRAGMA busy_timeout = 5000;");for(let X of wK)K.exec(X);if(!Z.includeLegacyMigrations)return;let $=new Map,j=(X)=>{let W=$.get(X);if(!W)W=dK(K,X),$.set(X,W);return W};for(let X of pK)if(!j(X.table).has(X.column)){if(K.exec(X.sql),X.column==="workspace_root")K.exec("UPDATE sessions SET workspace_root = cwd WHERE workspace_root IS NULL OR workspace_root = '';");$.delete(X.table)}}var oK=`CREATE TABLE IF NOT EXISTS connector_configs (
80
+ ON schedules(enabled, next_run_at);`],oZ=[{table:"sessions",column:"workspace_root",sql:"ALTER TABLE sessions ADD COLUMN workspace_root TEXT;"},{table:"sessions",column:"parent_session_id",sql:"ALTER TABLE sessions ADD COLUMN parent_session_id TEXT;"},{table:"sessions",column:"parent_agent_id",sql:"ALTER TABLE sessions ADD COLUMN parent_agent_id TEXT;"},{table:"sessions",column:"agent_id",sql:"ALTER TABLE sessions ADD COLUMN agent_id TEXT;"},{table:"sessions",column:"conversation_id",sql:"ALTER TABLE sessions ADD COLUMN conversation_id TEXT;"},{table:"sessions",column:"is_subagent",sql:"ALTER TABLE sessions ADD COLUMN is_subagent INTEGER NOT NULL DEFAULT 0;"},{table:"sessions",column:"messages_path",sql:"ALTER TABLE sessions ADD COLUMN messages_path TEXT;"},{table:"sessions",column:"metadata_json",sql:"ALTER TABLE sessions ADD COLUMN metadata_json TEXT;"},{table:"sessions",column:"transcript_path",sql:"ALTER TABLE sessions ADD COLUMN transcript_path TEXT NOT NULL DEFAULT '';"},{table:"schedules",column:"claim_token",sql:"ALTER TABLE schedules ADD COLUMN claim_token TEXT;"},{table:"schedules",column:"claim_started_at",sql:"ALTER TABLE schedules ADD COLUMN claim_started_at TEXT;"},{table:"schedules",column:"claim_until_at",sql:"ALTER TABLE schedules ADD COLUMN claim_until_at TEXT;"}];function sZ(Z,$){return new Set(Z.prepare(`PRAGMA table_info(${$});`).all().map((j)=>j.name))}function nZ(Z,$={}){Z.exec("PRAGMA journal_mode = WAL;"),Z.exec("PRAGMA busy_timeout = 5000;");for(let K of iZ)Z.exec(K);if(!$.includeLegacyMigrations)return;let j=new Map,X=(K)=>{let W=j.get(K);if(!W)W=sZ(Z,K),j.set(K,W);return W};for(let K of oZ)if(!X(K.table).has(K.column)){if(Z.exec(K.sql),K.column==="workspace_root")Z.exec("UPDATE sessions SET workspace_root = cwd WHERE workspace_root IS NULL OR workspace_root = '';");j.delete(K.table)}}var eZ=`CREATE TABLE IF NOT EXISTS connector_configs (
81
81
  channel TEXT PRIMARY KEY,
82
82
  type TEXT NOT NULL,
83
83
  values_json TEXT NOT NULL DEFAULT '{}',
@@ -85,7 +85,7 @@ var UK=Object.defineProperty;var FK=(K)=>K;function GK(K,Z){this[K]=FK.bind(null
85
85
  security_values_json TEXT NOT NULL DEFAULT '{}',
86
86
  configured_at TEXT NOT NULL,
87
87
  updated_at TEXT NOT NULL
88
- );`,sK=`CREATE TABLE IF NOT EXISTS connector_connections (
88
+ );`,Z0=`CREATE TABLE IF NOT EXISTS connector_connections (
89
89
  channel TEXT NOT NULL,
90
90
  instance_id TEXT NOT NULL,
91
91
  connect_args_json TEXT NOT NULL,
@@ -94,11 +94,11 @@ var UK=Object.defineProperty;var FK=(K)=>K;function GK(K,Z){this[K]=FK.bind(null
94
94
  updated_at TEXT NOT NULL,
95
95
  last_connected_at TEXT NOT NULL,
96
96
  PRIMARY KEY (channel, instance_id)
97
- );`;function VK(K){K.exec("PRAGMA journal_mode = WAL;"),K.exec("PRAGMA busy_timeout = 5000;"),K.exec(oK),K.exec(sK)}function B(K){return typeof K==="object"&&K!==null&&!Array.isArray(K)}function WK(K){if(typeof K!=="string"||!K)return{};try{let Z=JSON.parse(K);if(!B(Z))return{};let $={};for(let[j,X]of Object.entries(Z))if(typeof X==="string")$[j]=X;return $}catch{return{}}}function zK(K){if(typeof K!=="string"||!K)return;try{let Z=JSON.parse(K);if(!Array.isArray(Z))return;return Z.filter(($)=>typeof $==="string")}catch{return}}class p{dbPath;db;constructor(K={}){this.dbPath=K.dbPath??a()}getRawDb(){if(this.db)return this.db;let K=u(this.dbPath);return VK(K),this.db=K,this.importLegacyJsonSettings(),K}close(){this.db?.close?.(),this.db=void 0}getConfig(K){let Z=this.getRawDb().prepare("SELECT * FROM connector_configs WHERE channel = ?").get(K);return Z?P(Z):void 0}listConfigs(){return this.getRawDb().prepare("SELECT * FROM connector_configs ORDER BY channel ASC").all().map(P)}getConnection(K,Z){let $=this.getRawDb().prepare(`SELECT * FROM connector_connections
98
- WHERE channel = ? AND instance_id = ?`).get(K,Z);return $?w($):void 0}listConnections(K){return(K?this.getRawDb().prepare(`SELECT * FROM connector_connections
97
+ );`;function UZ(Z){Z.exec("PRAGMA journal_mode = WAL;"),Z.exec("PRAGMA busy_timeout = 5000;"),Z.exec(eZ),Z.exec(Z0)}function M(Z){return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)}function zZ(Z){if(typeof Z!=="string"||!Z)return{};try{let $=JSON.parse(Z);if(!M($))return{};let j={};for(let[X,K]of Object.entries($))if(typeof K==="string")j[X]=K;return j}catch{return{}}}function VZ(Z){if(typeof Z!=="string"||!Z)return;try{let $=JSON.parse(Z);if(!Array.isArray($))return;return $.filter((j)=>typeof j==="string")}catch{return}}class d{dbPath;db;constructor(Z={}){this.dbPath=Z.dbPath??ZZ()}getRawDb(){if(this.db)return this.db;let Z=w(this.dbPath);return UZ(Z),this.db=Z,this.importLegacyJsonSettings(),Z}close(){this.db?.close?.(),this.db=void 0}getConfig(Z){let $=this.getRawDb().prepare("SELECT * FROM connector_configs WHERE channel = ?").get(Z);return $?P($):void 0}listConfigs(){return this.getRawDb().prepare("SELECT * FROM connector_configs ORDER BY channel ASC").all().map(P)}getConnection(Z,$){let j=this.getRawDb().prepare(`SELECT * FROM connector_connections
98
+ WHERE channel = ? AND instance_id = ?`).get(Z,$);return j?p(j):void 0}listConnections(Z){return(Z?this.getRawDb().prepare(`SELECT * FROM connector_connections
99
99
  WHERE channel = ?
100
- ORDER BY instance_id ASC`).all(K):this.getRawDb().prepare(`SELECT * FROM connector_connections
101
- ORDER BY channel ASC, instance_id ASC`).all()).map(w)}upsertConfig(K){let Z=L(),$=this.getRawDb();$.exec("BEGIN IMMEDIATE;");try{let j=$.prepare("SELECT * FROM connector_configs WHERE channel = ?").get(K.channel),X=j?P(j):void 0,V=$.prepare("SELECT * FROM connector_connections WHERE channel = ?").all(K.channel).map(w),z=K.updateConnectArgs&&V.length===1&&V[0]?K.updateConnectArgs({config:X,connection:V[0]}):void 0;if($.prepare(`INSERT INTO connector_configs (
100
+ ORDER BY instance_id ASC`).all(Z):this.getRawDb().prepare(`SELECT * FROM connector_connections
101
+ ORDER BY channel ASC, instance_id ASC`).all()).map(p)}upsertConfig(Z){let $=J(),j=this.getRawDb();j.exec("BEGIN IMMEDIATE;");try{let X=j.prepare("SELECT * FROM connector_configs WHERE channel = ?").get(Z.channel),K=X?P(X):void 0,z=j.prepare("SELECT * FROM connector_connections WHERE channel = ?").all(Z.channel).map(p),V=Z.updateConnectArgs&&z.length===1&&z[0]?Z.updateConnectArgs({config:K,connection:z[0]}):void 0;if(j.prepare(`INSERT INTO connector_configs (
102
102
  channel, type, values_json, security_enabled,
103
103
  security_values_json, configured_at, updated_at
104
104
  ) VALUES (?, ?, ?, ?, ?, ?, ?)
@@ -108,9 +108,9 @@ var UK=Object.defineProperty;var FK=(K)=>K;function GK(K,Z){this[K]=FK.bind(null
108
108
  security_enabled = excluded.security_enabled,
109
109
  security_values_json = excluded.security_values_json,
110
110
  configured_at = excluded.configured_at,
111
- updated_at = excluded.updated_at`).run(K.channel,K.type??K.channel,JSON.stringify(K.values),x(K.security?.enabled===!0),JSON.stringify(K.security?.values??{}),K.configuredAt??X?.configuredAt??Z,K.updatedAt??Z),z&&V[0])$.prepare(`UPDATE connector_connections
111
+ updated_at = excluded.updated_at`).run(Z.channel,Z.type??Z.channel,JSON.stringify(Z.values),x(Z.security?.enabled===!0),JSON.stringify(Z.security?.values??{}),Z.configuredAt??K?.configuredAt??$,Z.updatedAt??$),V&&z[0])j.prepare(`UPDATE connector_connections
112
112
  SET connect_args_json = ?, updated_at = ?
113
- WHERE channel = ? AND instance_id = ?`).run(JSON.stringify(z),Z,K.channel,V[0].instanceId);$.exec("COMMIT;")}catch(j){try{$.exec("ROLLBACK;")}catch{}throw j}}recordConnected(K,Z,$){let j=L();this.getRawDb().prepare(`INSERT INTO connector_connections (
113
+ WHERE channel = ? AND instance_id = ?`).run(JSON.stringify(V),$,Z.channel,z[0].instanceId);j.exec("COMMIT;")}catch(X){try{j.exec("ROLLBACK;")}catch{}throw X}}recordConnected(Z,$,j){let X=J();this.getRawDb().prepare(`INSERT INTO connector_connections (
114
114
  channel, instance_id, connect_args_json,
115
115
  last_successful_args_json, enabled, updated_at, last_connected_at
116
116
  ) VALUES (?, ?, ?, ?, 1, ?, ?)
@@ -119,9 +119,9 @@ var UK=Object.defineProperty;var FK=(K)=>K;function GK(K,Z){this[K]=FK.bind(null
119
119
  last_successful_args_json = excluded.last_successful_args_json,
120
120
  enabled = 1,
121
121
  updated_at = excluded.updated_at,
122
- last_connected_at = excluded.last_connected_at`).run(K,Z,JSON.stringify($),JSON.stringify($),j,j)}setEnabled(K,Z,$){if($){this.getRawDb().prepare(`UPDATE connector_connections
122
+ last_connected_at = excluded.last_connected_at`).run(Z,$,JSON.stringify(j),JSON.stringify(j),X,X)}setEnabled(Z,$,j){if(j){this.getRawDb().prepare(`UPDATE connector_connections
123
123
  SET enabled = ?, updated_at = ?
124
- WHERE channel = ? AND instance_id = ?`).run(x(Z),L(),K,$);return}this.getRawDb().prepare(`UPDATE connector_connections
124
+ WHERE channel = ? AND instance_id = ?`).run(x($),J(),Z,j);return}this.getRawDb().prepare(`UPDATE connector_connections
125
125
  SET enabled = ?, updated_at = ?
126
- WHERE channel = ?`).run(x(Z),L(),K)}deleteConnection(K,Z){return(this.getRawDb().prepare(`DELETE FROM connector_connections
127
- WHERE channel = ? AND instance_id = ?`).run(K,Z).changes??0)>0}disableAll(){this.getRawDb().prepare("UPDATE connector_connections SET enabled = 0, updated_at = ?").run(L())}deleteConfig(K){return(this.getRawDb().prepare("DELETE FROM connector_configs WHERE channel = ?").run(K).changes??0)>0}importLegacyJsonSettings(){let K=r();if(!lK(K))return;try{let Z=JSON.parse(cK(K,"utf8")),$=B(Z)&&B(Z.connectors)?Z.connectors:{};for(let[j,X]of Object.entries($)){if(!B(X)||this.getConfig(j))continue;let W={};if(B(X.values)){for(let[O,H]of Object.entries(X.values))if(typeof H==="string")W[O]=H}let V={},z=B(X.security)?X.security:void 0;if(z&&B(z.values)){for(let[O,H]of Object.entries(z.values))if(typeof H==="string")V[O]=H}this.upsertConfig({channel:j,type:typeof X.type==="string"?X.type:j,values:W,security:z?{enabled:z.enabled===!0,values:V}:void 0,configuredAt:typeof X.configuredAt==="string"?X.configuredAt:void 0,updatedAt:typeof X.updatedAt==="string"?X.updatedAt:void 0})}iK(K,`${K}.migrated`)}catch{}}}function P(K){let Z=K.security_enabled===1,$=WK(K.security_values_json),j=Z||Object.keys($).length>0;return{channel:F(K.channel),type:F(K.type),values:WK(K.values_json),security:j?{enabled:Z,values:$}:void 0,configuredAt:F(K.configured_at),updatedAt:F(K.updated_at)}}function w(K){return{channel:F(K.channel),instanceId:F(K.instance_id),connectArgs:zK(K.connect_args_json)??[],lastSuccessfulArgs:zK(K.last_successful_args_json)??[],enabled:K.enabled===1,updatedAt:F(K.updated_at),lastConnectedAt:y(K.last_connected_at)??F(K.updated_at)}}function nK(K){let Z=new p;try{return K(Z)}finally{Z.close()}}export{nK as withConnectorStore,x as toBoolInt,L as nowIso,u as loadSqliteDb,hK as ensureSessionSchema,VK as ensureConnectorSchema,F as asString,y as asOptionalString,bK as asBool,p as SqliteConnectorStore};
126
+ WHERE channel = ?`).run(x($),J(),Z)}deleteConnection(Z,$){return(this.getRawDb().prepare(`DELETE FROM connector_connections
127
+ WHERE channel = ? AND instance_id = ?`).run(Z,$).changes??0)>0}disableAll(){this.getRawDb().prepare("UPDATE connector_connections SET enabled = 0, updated_at = ?").run(J())}deleteConfig(Z){return(this.getRawDb().prepare("DELETE FROM connector_configs WHERE channel = ?").run(Z).changes??0)>0}importLegacyJsonSettings(){let Z=a();if(!rZ(Z))return;try{let $=JSON.parse(tZ(Z,"utf8")),j=M($)&&M($.connectors)?$.connectors:{};for(let[X,K]of Object.entries(j)){if(!M(K)||this.getConfig(X))continue;let W={};if(M(K.values)){for(let[L,B]of Object.entries(K.values))if(typeof B==="string")W[L]=B}let z={},V=M(K.security)?K.security:void 0;if(V&&M(V.values)){for(let[L,B]of Object.entries(V.values))if(typeof B==="string")z[L]=B}this.upsertConfig({channel:X,type:typeof K.type==="string"?K.type:X,values:W,security:V?{enabled:V.enabled===!0,values:z}:void 0,configuredAt:typeof K.configuredAt==="string"?K.configuredAt:void 0,updatedAt:typeof K.updatedAt==="string"?K.updatedAt:void 0})}aZ(Z,`${Z}.migrated`)}catch{}}}function P(Z){let $=Z.security_enabled===1,j=zZ(Z.security_values_json),X=$||Object.keys(j).length>0;return{channel:G(Z.channel),type:G(Z.type),values:zZ(Z.values_json),security:X?{enabled:$,values:j}:void 0,configuredAt:G(Z.configured_at),updatedAt:G(Z.updated_at)}}function p(Z){return{channel:G(Z.channel),instanceId:G(Z.instance_id),connectArgs:VZ(Z.connect_args_json)??[],lastSuccessfulArgs:VZ(Z.last_successful_args_json)??[],enabled:Z.enabled===1,updatedAt:G(Z.updated_at),lastConnectedAt:u(Z.last_connected_at)??G(Z.updated_at)}}function $0(Z){let $=new d;try{return Z($)}finally{$.close()}}export{$0 as withConnectorStore,x as toBoolInt,J as nowIso,w as loadSqliteDb,nZ as ensureSessionSchema,UZ as ensureConnectorSchema,G as asString,u as asOptionalString,pZ as asBool,d as SqliteConnectorStore};
package/dist/hub.d.ts CHANGED
@@ -6,7 +6,7 @@ export type HubProtocolVersion = "v1";
6
6
  export declare const CURRENT_HUB_PROTOCOL_VERSION: HubProtocolVersion;
7
7
  export declare const MIN_CLIENT_HUB_PROTOCOL_VERSION: HubProtocolVersion;
8
8
  export declare const MAX_CLIENT_HUB_PROTOCOL_VERSION: HubProtocolVersion;
9
- export type HubCapabilityName = "client.register" | "client.list" | "session.create" | "session.list" | "session.get" | "session.run" | "session.abort" | "schedule.create" | "schedule.list" | "settings.get" | "settings.set";
9
+ export type HubCapabilityName = "client.register" | "client.list" | "session.create" | "session.list" | "session.get" | "session.run" | "session.abort" | "schedule.create" | "schedule.list" | "settings.get" | "settings.set" | "connector.start" | "connector.stop" | "connector.supervised";
10
10
  export declare const HUB_CAPABILITIES: readonly HubCapabilityName[];
11
11
  export interface HubProtocolMetadata {
12
12
  protocolVersion: string;
@@ -263,7 +263,7 @@ export interface HubScheduleUpdateInput {
263
263
  runtimeOptions?: HubSessionRuntimeOptions;
264
264
  metadata?: Record<string, JsonValue | undefined>;
265
265
  }
266
- export type HubCommandName = "client.register" | "client.update" | "client.unregister" | "client.list" | "cline.account.get_current" | "prompt_commands.list" | "prompt_commands.execute" | "mention_files.search" | "catalog.list" | "session.list" | "session.create" | "session.attach" | "session.detach" | "session.get" | "session.messages" | "session.restore" | "session.delete" | "session.update" | "session.update_connection" | "session.compaction.get" | "session.compaction.update" | "session.pending_prompts" | "session.update_pending_prompt" | "session.remove_pending_prompt" | "session.fork" | "session.hook" | "run.start" | "session.send_input" | "run.abort" | "approval.request" | "approval.respond" | "capability.request" | "capability.progress" | "capability.respond" | "peer.register" | "peer.list_sessions" | "peer.attach_session" | "peer.detach_session" | "peer.proxy_command" | "schedule.create" | "schedule.list" | "schedule.get" | "schedule.update" | "schedule.delete" | "schedule.enable" | "schedule.disable" | "schedule.trigger" | "schedule.list_executions" | "schedule.stats" | "schedule.active" | "schedule.upcoming" | "settings.list" | "settings.get" | "settings.patch" | "settings.toggle" | "connector.channels" | "connector.configure" | "connector.delete_config" | "cron.event.ingest" | "cron.event.list" | "cron.event.get" | "ui.notify" | "ui.show_window";
266
+ export type HubCommandName = "client.register" | "client.update" | "client.unregister" | "client.list" | "cline.account.get_current" | "prompt_commands.list" | "prompt_commands.execute" | "mention_files.search" | "catalog.list" | "session.list" | "session.create" | "session.attach" | "session.detach" | "session.get" | "session.messages" | "session.restore" | "session.delete" | "session.update" | "session.update_connection" | "session.compaction.get" | "session.compaction.update" | "session.pending_prompts" | "session.update_pending_prompt" | "session.remove_pending_prompt" | "session.fork" | "session.hook" | "run.start" | "session.send_input" | "run.abort" | "approval.request" | "approval.respond" | "capability.request" | "capability.progress" | "capability.respond" | "peer.register" | "peer.list_sessions" | "peer.attach_session" | "peer.detach_session" | "peer.proxy_command" | "schedule.create" | "schedule.list" | "schedule.get" | "schedule.update" | "schedule.delete" | "schedule.enable" | "schedule.disable" | "schedule.trigger" | "schedule.list_executions" | "schedule.stats" | "schedule.active" | "schedule.upcoming" | "settings.list" | "settings.get" | "settings.patch" | "settings.toggle" | "connector.channels" | "connector.configure" | "connector.delete_config" | "connector.start" | "connector.stop" | "connector.supervised" | "cron.event.ingest" | "cron.event.list" | "cron.event.get" | "ui.notify" | "ui.show_window";
267
267
  export declare const HUB_DEFAULT_COMMAND_TIMEOUT_MS = 30000;
268
268
  export declare const HUB_COMMAND_SLOW_LOG_MS = 5000;
269
269
  export declare function getDefaultHubCommandTimeoutMs(command: HubCommandName): number | null;
@@ -18,7 +18,7 @@ export * from "./hub";
18
18
  export type { AiSdkFormatterMessage, AiSdkFormatterMessageRole, AiSdkFormatterPart, AiSdkMessage, AiSdkMessagePart, } from "./llms/ai-sdk-format";
19
19
  export { EMPTY_CONTENT_TEXT, formatMessagesForAiSdk, sanitizeSurrogates, toAiSdkToolResultOutput, } from "./llms/ai-sdk-format";
20
20
  export * from "./llms/gateway";
21
- export { createMediaBudgetState, DEFAULT_MAX_IMAGE_BASE64_BYTES, DEFAULT_MAX_IMAGE_DECODED_BYTES, DEFAULT_MAX_IMAGE_ENCODED_BYTES, DEFAULT_MAX_TOTAL_MEDIA_BYTES, IMAGE_OMITTED_PLACEHOLDER, type ImageMediaLimits, type ImageMediaValidationFailure, type ImageMediaValidationResult, type ImageMediaValidationSuccess, imageBase64DecodedByteLength, imageBase64EncodedByteLength, imageBase64LengthForDecodedBytes, imageFileMaxDecodedBytesForBase64Limit, isBase64Char, isCanonicalBase64, type MediaBudgetOptions, type MediaBudgetState, type ResolvedMediaBudget, reserveImageMediaBytes, resolveMediaBudget, SUPPORTED_IMAGE_MEDIA_TYPES, validateAndReserveImageMedia, validateImageMedia, } from "./llms/media";
21
+ export { createMediaBudgetState, DEFAULT_MAX_IMAGE_BASE64_BYTES, DEFAULT_MAX_IMAGE_DECODED_BYTES, DEFAULT_MAX_IMAGE_ENCODED_BYTES, DEFAULT_MAX_TOTAL_MEDIA_BYTES, IMAGE_OMITTED_PLACEHOLDER, IMAGE_UNSUPPORTED_PLACEHOLDER, type ImageMediaLimits, type ImageMediaValidationFailure, type ImageMediaValidationResult, type ImageMediaValidationSuccess, imageBase64DecodedByteLength, imageBase64EncodedByteLength, imageBase64LengthForDecodedBytes, imageFileMaxDecodedBytesForBase64Limit, isBase64Char, isCanonicalBase64, type MediaBudgetOptions, type MediaBudgetState, type ResolvedMediaBudget, reserveImageMediaBytes, resolveMediaBudget, SUPPORTED_IMAGE_MEDIA_TYPES, validateAndReserveImageMedia, validateImageMedia, } from "./llms/media";
22
22
  export type { ContentBlock, FileContent, ImageContent, Message, MessageRole, MessageWithMetadata, RedactedThinkingContent, TextContent, ThinkingContent, ToolDefinition, ToolResultContent, ToolUseContent, } from "./llms/messages";
23
23
  export { ApiFormat, ApiFormatSchema, type ModelCapability, ModelCapabilitySchema, type ModelInfo, ModelInfoSchema, type ModelMetadata, ModelMetadataSchema, type ModelPricing, ModelPricingSchema, type ModelStatus, ModelStatusSchema, type ThinkingConfig, ThinkingConfigSchema, } from "./llms/model-info";
24
24
  export { mergeModelOptions } from "./llms/model-options";
@@ -39,7 +39,7 @@ export { maskSecret, sanitizeFileName, stripUtf8Bom, trimNonEmpty, truncateSplit
39
39
  export { formatHumanReadableDate, formatUptime } from "./parse/time";
40
40
  export { validateWithZod, zodToJsonSchema } from "./parse/zod";
41
41
  export type { ClineSystemPromptOptions } from "./prompt/cline";
42
- export { buildClineSystemPrompt, MODE_TAG_INSTRUCTIONS, PLAN_MODE_INSTRUCTIONS, } from "./prompt/cline";
42
+ export { buildClineSystemPrompt, MODE_TAG_INSTRUCTIONS, PLAN_MODE_INSTRUCTIONS, PLAN_MODE_INSTRUCTIONS_MANUAL_SWITCH, } from "./prompt/cline";
43
43
  export type { ModeSwitchNotice, ModeSwitchNoticeTracker, } from "./prompt/format";
44
44
  export { createModeSwitchNoticeTracker, formatDisplayUserInput, formatFileContentBlock, formatModeSwitchNotice, formatUserCommandBlock, formatUserInputBlock, normalizeUserInput, parseUserCommandEnvelope, stripModeNotices, xmlTagsRemoval, } from "./prompt/format";
45
45
  export { CLINE_DEFAULT_MODEL_ID } from "./providers/defaults";
@@ -55,7 +55,7 @@ export { TEAM_LIFECYCLE_EVENT_TYPE, TEAM_PROGRESS_EVENT_TYPE, } from "./rpc/team
55
55
  export type { ClineEnvironment, ClineEnvironmentConfig, ResolveClineEnvironmentOptions, } from "./runtime/cline-environment";
56
56
  export { CLINE_ENVIRONMENT_ENV, CLINE_ENVIRONMENT_OVERRIDE_ENV, CLINE_ENVIRONMENTS, DEFAULT_CLINE_ENVIRONMENT, getClineEnvironmentConfig, resolveClineEnvironment, } from "./runtime/cline-environment";
57
57
  export type { CaptureAgentUnexpectedReasoningTokensInput, CaptureSdkErrorInput, CaptureTaskLifecycleEventInput, ITelemetryService, OpenTelemetryClientConfig, SdkTelemetryErrorComponent, SdkTelemetryErrorSeverity, TelemetryArray, TelemetryMetadata, TelemetryObject, TelemetryPrimitive, TelemetryProperties, TelemetryValue, } from "./services/telemetry";
58
- export { AGENT_UNEXPECTED_REASONING_TOKENS_EVENT, buildSdkErrorProperties, captureAgentUnexpectedReasoningTokens, captureSdkError, captureTaskLifecycleEvent, normalizeSdkError, SDK_ERROR_TELEMETRY_EVENT, TASK_CANCELLED_EVENT, TASK_FIRST_CHUNK_RECEIVED_EVENT, TASK_PROVIDER_REQUEST_STARTED_EVENT, TASK_PROVIDER_STREAM_FAILED_EVENT, TASK_PROVIDER_STREAM_STARTED_EVENT, } from "./services/telemetry";
58
+ export { AGENT_UNEXPECTED_REASONING_TOKENS_EVENT, buildSdkErrorProperties, captureAgentUnexpectedReasoningTokens, captureSdkError, captureTaskLifecycleEvent, normalizeSdkError, resetSdkErrorRateLimiterForTests, SDK_ERROR_TELEMETRY_EVENT, TASK_CANCELLED_EVENT, TASK_FIRST_CHUNK_RECEIVED_EVENT, TASK_PROVIDER_REQUEST_STARTED_EVENT, TASK_PROVIDER_STREAM_FAILED_EVENT, TASK_PROVIDER_STREAM_STARTED_EVENT, } from "./services/telemetry";
59
59
  export type { ClineTelemetryServiceConfig } from "./services/telemetry-config";
60
60
  export { createClineTelemetryServiceConfig, createClineTelemetryServiceMetadata, } from "./services/telemetry-config";
61
61
  export type { HookSessionContext, HookSessionContextLookup, HookSessionContextProvider, } from "./session/hook-context";