@cline/shared 0.0.65 → 0.0.66-nightly.1785294853
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/connectors/platforms.d.ts +24 -0
- package/dist/db/connector-store.d.ts +89 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.js +49 -2
- package/dist/hub.d.ts +9 -2
- package/dist/index.browser.d.ts +4 -2
- package/dist/index.browser.js +20 -20
- package/dist/index.d.ts +7 -4
- package/dist/index.js +67 -67
- package/dist/providers/defaults.d.ts +2 -0
- package/dist/runtime/hub-daemon-env.d.ts +8 -0
- package/dist/services/telemetry.d.ts +29 -1
- package/dist/storage/chat-workspace-paths.d.ts +10 -0
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/paths.d.ts +14 -1
- package/package.json +1 -1
|
@@ -10,10 +10,16 @@ export interface ConnectorPlatformDef {
|
|
|
10
10
|
type: "polling" | "webhook" | "hybrid";
|
|
11
11
|
hint: string;
|
|
12
12
|
fields: ConnectorFieldDef[];
|
|
13
|
+
/**
|
|
14
|
+
* Adapter-derived flags that may be persisted for fast reconnects but must
|
|
15
|
+
* be regenerated whenever dashboard-managed configuration changes.
|
|
16
|
+
*/
|
|
17
|
+
derivedReconnectFlags?: string[];
|
|
13
18
|
security?: ConnectorSecurityDef;
|
|
14
19
|
}
|
|
15
20
|
export interface ConnectorFieldDef {
|
|
16
21
|
flag: string;
|
|
22
|
+
aliases?: string[];
|
|
17
23
|
label: string;
|
|
18
24
|
placeholder?: string;
|
|
19
25
|
required?: boolean;
|
|
@@ -42,6 +48,7 @@ export interface ConnectorSecurityFieldDef {
|
|
|
42
48
|
export interface ConnectorSecurityDef {
|
|
43
49
|
prompt: string;
|
|
44
50
|
fields: ConnectorSecurityFieldDef[];
|
|
51
|
+
argumentFlags: string[];
|
|
45
52
|
buildArgs: (values: Record<string, string>) => string[];
|
|
46
53
|
}
|
|
47
54
|
export type ConnectorChannel = {
|
|
@@ -58,6 +65,7 @@ export type ConnectorChannel = {
|
|
|
58
65
|
export type ActiveConnectorRecord = {
|
|
59
66
|
id: string;
|
|
60
67
|
type: string;
|
|
68
|
+
instanceId: string;
|
|
61
69
|
pid: number;
|
|
62
70
|
hubUrl: string;
|
|
63
71
|
startedAt?: string;
|
|
@@ -81,6 +89,22 @@ export type ConnectorChannelsResponse = {
|
|
|
81
89
|
configured: ConfiguredConnectorRecord[];
|
|
82
90
|
};
|
|
83
91
|
export declare function shouldIncludeConnectorField(field: ConnectorFieldDef, values: Record<string, string>): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Build the non-interactive CLI arguments for a validated connector
|
|
94
|
+
* configuration. The channel name itself is intentionally omitted so the
|
|
95
|
+
* arguments can be persisted and reused by any host.
|
|
96
|
+
*/
|
|
97
|
+
export declare function buildConnectorConnectArgs(platform: ConnectorPlatformDef, values: Record<string, string>, security?: {
|
|
98
|
+
enabled: boolean;
|
|
99
|
+
values: Record<string, string>;
|
|
100
|
+
}): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Replace dashboard-owned connector and security flags while retaining
|
|
103
|
+
* CLI-only runtime options such as provider, model, cwd, and tool settings.
|
|
104
|
+
*/
|
|
105
|
+
export declare function mergeConnectorConnectArgs(platform: ConnectorPlatformDef, existingArgs: string[], configuredArgs: string[], options: {
|
|
106
|
+
replaceSecurityArgs: boolean;
|
|
107
|
+
}): string[];
|
|
84
108
|
export declare function connectorChannelsFromPlatforms(platforms?: ConnectorPlatformDef[]): ConnectorChannel[];
|
|
85
109
|
export declare const CONNECTOR_PLATFORMS: ConnectorPlatformDef[];
|
|
86
110
|
export declare const PLATFORMS: ConnectorPlatformDef[];
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type SqliteDb } from "./sqlite-db";
|
|
2
|
+
export interface ConnectorSecurityConfig {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
values: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
/** Dashboard-managed configuration for a connector channel. */
|
|
7
|
+
export interface ConnectorConfigRecord {
|
|
8
|
+
channel: string;
|
|
9
|
+
type: string;
|
|
10
|
+
values: Record<string, string>;
|
|
11
|
+
security?: ConnectorSecurityConfig;
|
|
12
|
+
configuredAt: string;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
}
|
|
15
|
+
/** A successfully launched connector instance eligible for auto-reconnect. */
|
|
16
|
+
export interface ConnectorConnectionRecord {
|
|
17
|
+
channel: string;
|
|
18
|
+
instanceId: string;
|
|
19
|
+
connectArgs: string[];
|
|
20
|
+
lastSuccessfulArgs: string[];
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
lastConnectedAt: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function ensureConnectorSchema(db: SqliteDb): void;
|
|
26
|
+
export interface SqliteConnectorStoreOptions {
|
|
27
|
+
dbPath?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* SQLite-backed store for connector configuration and credentials.
|
|
31
|
+
* Replaces the legacy `~/.cline/data/connectors/settings.json` file; any
|
|
32
|
+
* existing legacy file is imported on first open and renamed so the two
|
|
33
|
+
* stores cannot diverge.
|
|
34
|
+
*/
|
|
35
|
+
export declare class SqliteConnectorStore {
|
|
36
|
+
private readonly dbPath;
|
|
37
|
+
private db;
|
|
38
|
+
constructor(options?: SqliteConnectorStoreOptions);
|
|
39
|
+
private getRawDb;
|
|
40
|
+
close(): void;
|
|
41
|
+
getConfig(channel: string): ConnectorConfigRecord | undefined;
|
|
42
|
+
listConfigs(): ConnectorConfigRecord[];
|
|
43
|
+
getConnection(channel: string, instanceId: string): ConnectorConnectionRecord | undefined;
|
|
44
|
+
listConnections(channel?: string): ConnectorConnectionRecord[];
|
|
45
|
+
/**
|
|
46
|
+
* Create or update dashboard configuration. If exactly one persisted
|
|
47
|
+
* instance exists, its desired reconnect arguments may be updated
|
|
48
|
+
* atomically. With multiple instances, only the channel-wide dashboard
|
|
49
|
+
* configuration is updated because choosing reconnect args is ambiguous.
|
|
50
|
+
*/
|
|
51
|
+
upsertConfig(entry: {
|
|
52
|
+
channel: string;
|
|
53
|
+
type?: string;
|
|
54
|
+
values: Record<string, string>;
|
|
55
|
+
security?: ConnectorSecurityConfig;
|
|
56
|
+
updateConnectArgs?: (existing: {
|
|
57
|
+
config?: ConnectorConfigRecord;
|
|
58
|
+
connection: ConnectorConnectionRecord;
|
|
59
|
+
}) => string[];
|
|
60
|
+
configuredAt?: string;
|
|
61
|
+
updatedAt?: string;
|
|
62
|
+
}): void;
|
|
63
|
+
/**
|
|
64
|
+
* Record a successful `cline connect <channel>` start: keep the exact args
|
|
65
|
+
* (auth flags included) for auto-reconnect and re-enable the channel.
|
|
66
|
+
*/
|
|
67
|
+
recordConnected(channel: string, instanceId: string, connectArgs: string[]): void;
|
|
68
|
+
/** Toggle auto-reconnect for one instance or every instance in a channel. */
|
|
69
|
+
setEnabled(channel: string, enabled: boolean, instanceId?: string): void;
|
|
70
|
+
deleteConnection(channel: string, instanceId: string): boolean;
|
|
71
|
+
disableAll(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Remove only dashboard-managed configuration. Persisted CLI instances live
|
|
74
|
+
* in a separate table and are intentionally unaffected.
|
|
75
|
+
*/
|
|
76
|
+
deleteConfig(channel: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* One-time import of the legacy JSON settings file. Existing DB rows win;
|
|
79
|
+
* the file is renamed (not deleted) afterwards so older builds cannot keep
|
|
80
|
+
* writing to a store that is no longer read.
|
|
81
|
+
*/
|
|
82
|
+
private importLegacyJsonSettings;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Convenience wrapper that opens the store, runs `fn`, and always closes the
|
|
86
|
+
* DB handle. Suitable for the infrequent configure/connect/stop operations;
|
|
87
|
+
* long-lived processes that poll the store should hold their own instance.
|
|
88
|
+
*/
|
|
89
|
+
export declare function withConnectorStore<T>(fn: (store: SqliteConnectorStore) => T): T;
|
package/dist/db/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
+
export type { ConnectorConfigRecord, ConnectorConnectionRecord, ConnectorSecurityConfig, SqliteConnectorStoreOptions, } from "./connector-store";
|
|
2
|
+
export { ensureConnectorSchema, SqliteConnectorStore, withConnectorStore, } from "./connector-store";
|
|
1
3
|
export type { SessionSchemaOptions, SqliteDb, SqliteStatement, } from "./sqlite-db";
|
|
2
4
|
export { asBool, asOptionalString, asString, ensureSessionSchema, loadSqliteDb, nowIso, toBoolInt, } from "./sqlite-db";
|
package/dist/db/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
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 (
|
|
2
2
|
session_id TEXT PRIMARY KEY,
|
|
3
3
|
source TEXT NOT NULL,
|
|
4
4
|
pid INTEGER NOT NULL,
|
|
@@ -77,4 +77,51 @@ var V=Object.defineProperty;var X=(x)=>x;function Z(x,f){this[x]=X.bind(null,f)}
|
|
|
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);`],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 (
|
|
81
|
+
channel TEXT PRIMARY KEY,
|
|
82
|
+
type TEXT NOT NULL,
|
|
83
|
+
values_json TEXT NOT NULL DEFAULT '{}',
|
|
84
|
+
security_enabled INTEGER NOT NULL DEFAULT 0,
|
|
85
|
+
security_values_json TEXT NOT NULL DEFAULT '{}',
|
|
86
|
+
configured_at TEXT NOT NULL,
|
|
87
|
+
updated_at TEXT NOT NULL
|
|
88
|
+
);`,sK=`CREATE TABLE IF NOT EXISTS connector_connections (
|
|
89
|
+
channel TEXT NOT NULL,
|
|
90
|
+
instance_id TEXT NOT NULL,
|
|
91
|
+
connect_args_json TEXT NOT NULL,
|
|
92
|
+
last_successful_args_json TEXT NOT NULL,
|
|
93
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
94
|
+
updated_at TEXT NOT NULL,
|
|
95
|
+
last_connected_at TEXT NOT NULL,
|
|
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
|
|
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 (
|
|
102
|
+
channel, type, values_json, security_enabled,
|
|
103
|
+
security_values_json, configured_at, updated_at
|
|
104
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
105
|
+
ON CONFLICT(channel) DO UPDATE SET
|
|
106
|
+
type = excluded.type,
|
|
107
|
+
values_json = excluded.values_json,
|
|
108
|
+
security_enabled = excluded.security_enabled,
|
|
109
|
+
security_values_json = excluded.security_values_json,
|
|
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
|
|
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 (
|
|
114
|
+
channel, instance_id, connect_args_json,
|
|
115
|
+
last_successful_args_json, enabled, updated_at, last_connected_at
|
|
116
|
+
) VALUES (?, ?, ?, ?, 1, ?, ?)
|
|
117
|
+
ON CONFLICT(channel, instance_id) DO UPDATE SET
|
|
118
|
+
connect_args_json = excluded.connect_args_json,
|
|
119
|
+
last_successful_args_json = excluded.last_successful_args_json,
|
|
120
|
+
enabled = 1,
|
|
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
|
|
123
|
+
SET enabled = ?, updated_at = ?
|
|
124
|
+
WHERE channel = ? AND instance_id = ?`).run(x(Z),L(),K,$);return}this.getRawDb().prepare(`UPDATE connector_connections
|
|
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};
|
package/dist/hub.d.ts
CHANGED
|
@@ -219,6 +219,13 @@ export interface ScheduleExecutionRecord {
|
|
|
219
219
|
tokensUsed?: number;
|
|
220
220
|
costUsd?: number;
|
|
221
221
|
}
|
|
222
|
+
export declare const ONE_TIME_SCHEDULE_CRON_PATTERN = "0";
|
|
223
|
+
export declare const ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY = "__hubScheduleRunAt";
|
|
224
|
+
export declare const HUB_SCHEDULE_MODES: readonly ["act", "plan", "yolo"];
|
|
225
|
+
export type HubScheduleMode = (typeof HUB_SCHEDULE_MODES)[number];
|
|
226
|
+
export declare function isHubScheduleMode(value: unknown): value is HubScheduleMode;
|
|
227
|
+
export declare function readHubScheduleMode(payload: Record<string, unknown> | undefined, defaultWhenAbsent: HubScheduleMode): HubScheduleMode;
|
|
228
|
+
export declare function readHubScheduleMode(payload: Record<string, unknown> | undefined): HubScheduleMode | undefined;
|
|
222
229
|
export interface HubScheduleCreateInput {
|
|
223
230
|
name: string;
|
|
224
231
|
cronPattern: string;
|
|
@@ -227,7 +234,7 @@ export interface HubScheduleCreateInput {
|
|
|
227
234
|
cwd?: string;
|
|
228
235
|
modelSelection?: GatewayModelSelection;
|
|
229
236
|
enabled?: boolean;
|
|
230
|
-
mode?:
|
|
237
|
+
mode?: HubScheduleMode;
|
|
231
238
|
systemPrompt?: string;
|
|
232
239
|
maxIterations?: number;
|
|
233
240
|
timeoutSeconds?: number;
|
|
@@ -246,7 +253,7 @@ export interface HubScheduleUpdateInput {
|
|
|
246
253
|
cwd?: string;
|
|
247
254
|
modelSelection?: GatewayModelSelection;
|
|
248
255
|
enabled?: boolean;
|
|
249
|
-
mode?:
|
|
256
|
+
mode?: HubScheduleMode;
|
|
250
257
|
systemPrompt?: string | null;
|
|
251
258
|
maxIterations?: number | null;
|
|
252
259
|
timeoutSeconds?: number | null;
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export type { ClineSystemPromptOptions } from "./prompt/cline";
|
|
|
39
39
|
export { buildClineSystemPrompt, MODE_TAG_INSTRUCTIONS, PLAN_MODE_INSTRUCTIONS, } from "./prompt/cline";
|
|
40
40
|
export type { ModeSwitchNotice, ModeSwitchNoticeTracker, } from "./prompt/format";
|
|
41
41
|
export { createModeSwitchNoticeTracker, formatDisplayUserInput, formatFileContentBlock, formatModeSwitchNotice, formatUserCommandBlock, formatUserInputBlock, normalizeUserInput, parseUserCommandEnvelope, stripModeNotices, xmlTagsRemoval, } from "./prompt/format";
|
|
42
|
+
export { CLINE_DEFAULT_MODEL_ID } from "./providers/defaults";
|
|
42
43
|
export { isClineProvider } from "./providers/utils";
|
|
43
44
|
export { REMOTE_URI_SCHEME } from "./remote-config/constants";
|
|
44
45
|
export type { AnthropicModel, AnthropicSettings, APIKeySettings, AwsBedrockCustomModel, AwsBedrockModel, AwsBedrockSettings, EnterpriseTelemetry, GlobalInstructionsFile, LiteLLMModel, LiteLLMSettings, MCPServer, OpenAiCompatible, OpenAiCompatibleModel, PromptUploading, ProviderSettings, RemoteConfig, RemoteMCPServer, S3AccessKeySettings, VertexModel, VertexSettings, } from "./remote-config/schema";
|
|
@@ -50,8 +51,8 @@ export type { TeamProgressCounts, TeamProgressLifecycleEvent, TeamProgressMember
|
|
|
50
51
|
export { TEAM_LIFECYCLE_EVENT_TYPE, TEAM_PROGRESS_EVENT_TYPE, } from "./rpc/team-progress";
|
|
51
52
|
export type { ClineEnvironment, ClineEnvironmentConfig, ResolveClineEnvironmentOptions, } from "./runtime/cline-environment";
|
|
52
53
|
export { CLINE_ENVIRONMENT_ENV, CLINE_ENVIRONMENT_OVERRIDE_ENV, CLINE_ENVIRONMENTS, DEFAULT_CLINE_ENVIRONMENT, getClineEnvironmentConfig, resolveClineEnvironment, } from "./runtime/cline-environment";
|
|
53
|
-
export type { CaptureAgentUnexpectedReasoningTokensInput, CaptureSdkErrorInput, ITelemetryService, OpenTelemetryClientConfig, SdkTelemetryErrorComponent, SdkTelemetryErrorSeverity, TelemetryArray, TelemetryMetadata, TelemetryObject, TelemetryPrimitive, TelemetryProperties, TelemetryValue, } from "./services/telemetry";
|
|
54
|
-
export { AGENT_UNEXPECTED_REASONING_TOKENS_EVENT, buildSdkErrorProperties, captureAgentUnexpectedReasoningTokens, captureSdkError, normalizeSdkError, SDK_ERROR_TELEMETRY_EVENT, } from "./services/telemetry";
|
|
54
|
+
export type { CaptureAgentUnexpectedReasoningTokensInput, CaptureSdkErrorInput, CaptureTaskLifecycleEventInput, ITelemetryService, OpenTelemetryClientConfig, SdkTelemetryErrorComponent, SdkTelemetryErrorSeverity, TelemetryArray, TelemetryMetadata, TelemetryObject, TelemetryPrimitive, TelemetryProperties, TelemetryValue, } from "./services/telemetry";
|
|
55
|
+
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";
|
|
55
56
|
export type { ClineTelemetryServiceConfig } from "./services/telemetry-config";
|
|
56
57
|
export { createClineTelemetryServiceConfig, createClineTelemetryServiceMetadata, } from "./services/telemetry-config";
|
|
57
58
|
export type { HookSessionContext, HookSessionContextLookup, HookSessionContextProvider, } from "./session/hook-context";
|
|
@@ -63,6 +64,7 @@ export type { AgentMode, RuntimeConfigExtensionKind, SessionExecutionConfig, Ses
|
|
|
63
64
|
export { DEFAULT_RUNTIME_CONFIG_EXTENSIONS, hasRuntimeConfigExtension, isRuntimeConfigExtensionKind, parseRuntimeConfigExtensions, RUNTIME_CONFIG_EXTENSION_KINDS, } from "./session/runtime-config";
|
|
64
65
|
export type { RuntimeEnv } from "./session/runtime-env";
|
|
65
66
|
export * from "./session/workspace";
|
|
67
|
+
export { CLINE_CHAT_WORKSPACE_DIRECTORY_NAME, CLINE_WORKSPACES_DIRECTORY_NAME, isChatWorkspacePath, } from "./storage/chat-workspace-paths";
|
|
66
68
|
export * from "./team";
|
|
67
69
|
export { createTool } from "./tools/create";
|
|
68
70
|
export { AUTH_ERROR_PATTERNS, isLikelyAuthError } from "./types/auth";
|