@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 +38 -0
- package/dist/agents/types.d.ts +9 -1
- package/dist/connectors/options.d.ts +2 -0
- package/dist/connectors/supervision.d.ts +68 -0
- package/dist/db/index.js +13 -13
- package/dist/hub.d.ts +2 -2
- package/dist/index.browser.d.ts +3 -3
- package/dist/index.browser.js +23 -21
- package/dist/index.d.ts +6 -5
- package/dist/index.js +58 -56
- package/dist/llms/ai-sdk-format.d.ts +12 -1
- package/dist/llms/gateway.d.ts +1 -1
- package/dist/llms/media.d.ts +6 -0
- package/dist/prompt/cline.d.ts +14 -6
- package/dist/rpc/runtime.d.ts +1 -0
- package/dist/runtime/hub-daemon-env.d.ts +73 -0
- package/dist/services/telemetry.d.ts +28 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/paths.d.ts +15 -0
- package/package.json +1 -1
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;
|
package/dist/agents/types.d.ts
CHANGED
|
@@ -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
|
|
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);`],
|
|
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
|
-
);`,
|
|
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
|
|
98
|
-
WHERE channel = ? AND instance_id = ?`).get(
|
|
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(
|
|
101
|
-
ORDER BY channel ASC, instance_id ASC`).all()).map(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
127
|
-
WHERE channel = ? AND instance_id = ?`).run(
|
|
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;
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -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";
|