@cline/shared 0.0.92 → 0.0.93
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 +4 -0
- package/dist/automation/index.js +12 -12
- package/dist/db/index.js +5 -5
- package/dist/extensions/contribution-registry.d.ts +18 -0
- package/dist/hub.d.ts +81 -3
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.js +19 -19
- package/dist/index.d.ts +1 -1
- package/dist/index.js +42 -42
- package/dist/llms/tokens.d.ts +23 -0
- package/dist/providers/defaults.d.ts +6 -2
- package/dist/remote-config/index.js +26 -26
- package/dist/rpc/runtime.d.ts +5 -1
- package/dist/storage/index.js +1 -1
- package/package.json +1 -1
package/dist/db/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{existsSync as
|
|
1
|
+
import{existsSync as sn,readFileSync as on,renameSync as cn}from"node:fs";import{appendFileSync as ge,existsSync as u,mkdirSync as M,readdirSync as de,readFileSync as J,statSync as S}from"node:fs";import{homedir as Te}from"node:os";import{basename as _e,dirname as O,extname as fe,isAbsolute as Ne,join as o,relative as Ce,resolve as g}from"node:path";var v="workspaces",b="chat";function Ee(e){let n=e.trim(),t=/^[A-Za-z]:[\\/]/.test(n)||n.startsWith("\\\\"),r=n.startsWith("/");if(!t&&!r)return!1;let s=n.split(t?/[\\/]+/:/\/+/).filter(Boolean),i=s.at(-1)??"",c=s.at(-2)??"",a=s.at(-3)??"";return(s.at(-4)??"")===".cline"&&a==="data"&&c==="workspaces"&&i==="chat"}var X=".clinerules",h=".cline",Re=".claude",I=".agents",Se=I,Q="agents",y="hooks",P="skills",V="rules",k="workflows",w="plugins",z="AGENTS.md",Le="plugin.json";function _n(){return o(p(),v,b)}var De="cline_mcp_settings.json",Ae="settings.json";function me(){let e=process?.env?.HOME?.trim();if(e&&e!=="~")return e;let n=process?.env?.USERPROFILE?.trim();if(n)return n;let t=process?.env?.HOMEDRIVE?.trim(),r=process?.env?.HOMEPATH?.trim();if(t&&r)return`${t}${r}`;let s=Te().trim();if(s&&s!=="~")return s;return"~"}var d=me(),Z=!1;function fn(e){let n=e.trim();if(!n)return;d=n,Z=!0}function Nn(e){if(Z)return;let n=e.trim();if(!n)return;d=n}var A,ee=!1;function Cn(e){let n=e.trim();if(!n)return;A=n,ee=!0}function Rn(e){if(ee)return;let n=e.trim();if(!n)return;A=n}function l(){if(A)return A;let e=process.env.CLINE_DIR?.trim();if(e)return e;return o(d,".cline")}function Oe(){return o(d,"Documents","Cline")}function x(e){return o(Oe(),e)}function p(){let e=process.env.CLINE_DATA_DIR?.trim();if(e)return e;return o(l(),"data")}function Sn(){let e=process.env.CLINE_SESSION_DATA_DIR?.trim();if(e)return e;return o(p(),"sessions")}function Ln(){let e=process.env.CLINE_TEAM_DATA_DIR?.trim();if(e)return e;return o(p(),"teams")}function he(){let e=process.env.CLINE_CONNECTOR_DATA_DIR?.trim();if(e)return e;return o(p(),"connectors")}function Dn(e,n){let t=e.replace(/[^a-zA-Z0-9._-]+/g,"_"),r=n.replace(/[^a-zA-Z0-9._-]+/g,"_");return o(p(),"logs","connectors",t,`${r}.log`)}function ne(){let e=process.env.CLINE_CONNECTOR_SETTINGS_PATH?.trim();if(e)return e;return o(he(),Ae)}function G(){let e=process.env.CLINE_DB_DATA_DIR?.trim();if(e)return e;return o(p(),"db")}function te(){let e=process.env.CLINE_CONNECTORS_DB_PATH?.trim();if(e)return e;return o(G(),"connectors.db")}function An(){let e=process.env.CLINE_CRON_DB_PATH?.trim();if(e)return e;return o(G(),"cron.db")}function mn(){let e=process.env.CLINE_TASKS_DB_PATH?.trim();if(e)return e;return o(G(),"tasks.db")}function On(){return o(l(),"schedules")}function Ie(){return o(l(),"tasks")}function xe(e){let n=e.trim();if(!n)throw Error("workspaceRoot is required for workspace task scope");return o(n,".cline","tasks")}function hn(e){let n=e.taskSpecsDir?.trim();if(n)return n;if(e.scope==="workspace")return xe(e.workspaceRoot??"");return Ie()}function ve(){return o(l(),"cron")}function K(e){return o(e,".cline","cron")}function re(e){if(typeof e==="string")return K(e);if(e?.cronSpecsDir?.trim())return e.cronSpecsDir.trim();if(e?.scope==="workspace"){let n=e.workspaceRoot?.trim();if(!n)throw Error("workspaceRoot is required for workspace cron scope");return K(n)}return ve()}function In(e){return o(re(e),"reports")}function xn(e){return o(re(e),"events")}function vn(){let e=process.env.CLINE_PROVIDER_SETTINGS_PATH?.trim();if(e)return e;return o(p(),"settings","providers.json")}function bn(){let e=process.env.CLINE_GLOBAL_SETTINGS_PATH?.trim();if(e)return e;return o(p(),"settings","global-settings.json")}function yn(){let e=process.env.CLINE_MCP_SETTINGS_PATH?.trim();if(e)return e;return o(p(),"settings",De)}function N(e){let n=new Set,t=[];for(let r of e){if(!r||n.has(r))continue;n.add(r),t.push(r)}return t}function be(e){if(!e)return[];return[X,h,Re,I].map((n)=>o(e,n,P))}function ye(){return o(l(),Q)}function kn(e){return N([e?o(e,h,Q):"",ye()])}function Pn(e){let n=[x("Hooks"),o(l(),y)];if(e)n.push(o(e,X,y),o(e,h,y));return N(n)}function wn(e){return N([...be(e),o(l(),P),o(d,I,P)])}function ke(){return o(d,I,z)}function Pe(e){return[o(e,X),o(e,h,V)]}function we(){let e=[];for(let n of["OneDrive","OneDriveConsumer","OneDriveCommercial"]){let t=process.env[n]?.trim();if(t)e.push(o(t,"Documents"))}return e}function Ue(){return N([o(l(),V),o(d,"Cline","Rules"),x("Rules"),...we().map((e)=>o(e,"Cline","Rules"))])}function Un(e){let n=e?Pe(e):[],t=e?[o(e,z)]:[];return N([...t,...n,ke(),...Ue()])}function Mn(e){return N([e?o(e,".clinerules",k):"",x("Workflows"),o(l(),k),e?o(e,".cline",k):""])}function Xn(e){return N([e?o(e,".cline",w):"",o(l(),w),x("Plugins")])}function Gn(){return[o(d,Se,w)]}var se=new Set([".js",".ts"]),F="package.json",Me=["index.ts","index.js"],Xe=new Set(["node_modules"]);function U(e){try{return S(o(e,Le)).isFile()}catch{return!1}}function m(e){let n=e.lastIndexOf(".");if(n===-1)return!1;return se.has(e.slice(n))}function oe(e){try{let n=JSON.parse(J(e,"utf8"));if(!n.cline||typeof n.cline!=="object")return null;return n.cline}catch{return null}}function ie(e){let n=e?.plugins;if(!Array.isArray(n))return[];return n.flatMap((t)=>t.paths??[])}function Ge(e){let n=g(e);if(!u(n)||!S(n).isDirectory())return null;if(U(n))return null;let t=o(n,F);if(u(t)){let r=oe(t),s=ie(r).map((i)=>g(n,i)).filter((i)=>u(i)&&S(i).isFile()&&m(i));if(s.length>0)return s}for(let r of Me){let s=o(n,r);if(u(s)&&S(s).isFile())return[s]}return null}function Fe(e){try{let n=JSON.parse(J(e,"utf8"));return typeof n.name==="string"&&n.name.trim()?n.name.trim():void 0}catch{return}}function qe(e,n){let t=Ce(g(e),g(n));return t===""||!t.startsWith("..")&&!Ne(t)}function Fn(e,n){let t=O(e),r=g(n);while(qe(r,t)){let s=o(t,F);if(u(s)){let c=Fe(s);if(c)return c;break}let i=g(t,"..");if(i===t)break;t=i}return _e(e,fe(e))}function Ye(e){let n=g(e);if(!u(n))return[];if(U(n))return[];let t=[],r=[n];while(r.length>0){let s=r.pop();if(!s)continue;let i;try{i=de(s,{withFileTypes:!0})}catch{continue}for(let c of i){let a=o(s,c.name);if(c.isDirectory()){if(U(a))continue;if(Xe.has(c.name)||c.name.startsWith("."))continue;let _=o(a,F);if(u(_)){let f=oe(_),H=ie(f).map((L)=>g(a,L)).filter((L)=>u(L)&&S(L).isFile()&&m(L));if(H.length>0){t.push(...H);continue}}r.push(a);continue}if(c.name.startsWith("."))continue;if(c.isFile()&&m(a))t.push(a)}}return t.sort((s,i)=>s.localeCompare(i))}function qn(e,n){let t=[];for(let r of e){let s=r.trim();if(!s)continue;let i=g(n,s);if(!u(i))throw Error(`Plugin path does not exist: ${i}`);if(S(i).isDirectory()){let a=Ge(i);if(a){t.push(...a);continue}t.push(...Ye(i));continue}if(!m(i))throw Error(`Plugin file must use a supported extension (${[...se].join(", ")}): ${i}`);t.push(i)}return t}function je(e){let n=O(e);if(!u(n))M(n,{recursive:!0})}function Yn(e){M(O(e),{recursive:!0}),ge(e,"")}function jn(e){if(e?.trim())return je(e),O(e);let n=o(p(),"logs");if(!u(n))M(n,{recursive:!0});return n}import{mkdirSync as Be}from"node:fs";import{createRequire as We}from"node:module";import{dirname as He}from"node:path";function ce(e){if(e instanceof Error)return e.message;return String(e)}function ae(e){if(e&&typeof e==="object"&&"code"in e&&typeof e.code==="string")return e.code;return""}var Ke=3,Je=50;function C(){return new Date().toISOString()}function D(e){return e?1:0}function E(e){return typeof e==="string"?e:""}function q(e){if(typeof e!=="string")return;let n=e.trim();return n.length>0?n:void 0}function $e(e){return e===1||e===!0}function Qe(e){if(e<=0)return;try{let n=new SharedArrayBuffer(4),t=new Int32Array(n);Atomics.wait(t,0,0,e)}catch{}}function Ve(e){if(!e||typeof e!=="object")return!1;let n=ce(e),t=ae(e);return t==="SQLITE_BUSY"||t==="SQLITE_LOCKED"||n.includes("SQLITE_BUSY")||n.includes("SQLITE_LOCKED")||n.includes("database is locked")}function T(e){let n=0;for(;;)try{return e()}catch(t){if(!Ve(t)||n>=Ke)throw t;n+=1,Qe(Je*2**(n-1))}}function ze(e){return{prepare:(n)=>{let t=e.query(n);return{run:(...r)=>T(()=>t.run(...r)),get:(...r)=>T(()=>t.get(...r)),all:(...r)=>T(()=>t.all(...r))}},exec:(n)=>T(()=>e.exec(n)),close:()=>e.close?.()}}function Ze(e){return{prepare:(n)=>{let t=e.prepare(n);return{run:(...r)=>T(()=>t.run(...r)),get:(...r)=>T(()=>t.get(...r)??null),all:(...r)=>T(()=>t.all(...r))}},exec:(n)=>T(()=>e.exec(n)),close:()=>e.close?.()}}function Y(e){Be(He(e),{recursive:!0});let n=We(import.meta.url);if(typeof globalThis.Bun<"u"){let{Database:r}=n("bun:sqlite");return ze(new r(e,{create:!0}))}let t=process.emitWarning;process.emitWarning=(r,...s)=>{if((typeof r==="string"?r:r?.message??"").includes("SQLite"))return;return t.call(process,r,...s)};try{let{DatabaseSync:r}=n(["node",":sqlite"].join(""));return Ze(new r(e))}finally{process.emitWarning=t}}var en=[`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 @@ import{existsSync as rn,readFileSync as sn,renameSync as on}from"node:fs";import
|
|
|
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);`],nn=[{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 tn(e,n){return new Set(e.prepare(`PRAGMA table_info(${n});`).all().map((t)=>t.name))}function rn(e,n={}){e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;");for(let s of en)e.exec(s);if(!n.includeLegacyMigrations)return;let t=new Map,r=(s)=>{let i=t.get(s);if(!i)i=tn(e,s),t.set(s,i);return i};for(let s of nn)if(!r(s.table).has(s.column)){if(e.exec(s.sql),s.column==="workspace_root")e.exec("UPDATE sessions SET workspace_root = cwd WHERE workspace_root IS NULL OR workspace_root = '';");t.delete(s.table)}}var an=`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 @@ import{existsSync as rn,readFileSync as sn,renameSync as on}from"node:fs";import
|
|
|
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
|
+
);`,un=`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,7 +94,7 @@ import{existsSync as rn,readFileSync as sn,renameSync as on}from"node:fs";import
|
|
|
94
94
|
updated_at TEXT NOT NULL,
|
|
95
95
|
last_connected_at TEXT NOT NULL,
|
|
96
96
|
PRIMARY KEY (channel, instance_id)
|
|
97
|
-
);`;function pe(e){e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec(
|
|
97
|
+
);`;function pe(e){e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec(an),e.exec(un)}function R(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function ue(e){if(typeof e!=="string"||!e)return{};try{let n=JSON.parse(e);if(!R(n))return{};let t={};for(let[r,s]of Object.entries(n))if(typeof s==="string")t[r]=s;return t}catch{return{}}}function le(e){if(typeof e!=="string"||!e)return;try{let n=JSON.parse(e);if(!Array.isArray(n))return;return n.filter((t)=>typeof t==="string")}catch{return}}class W{dbPath;db;constructor(e={}){this.dbPath=e.dbPath??te()}getRawDb(){if(this.db)return this.db;let e=Y(this.dbPath);return pe(e),this.db=e,this.importLegacyJsonSettings(),e}close(){this.db?.close?.(),this.db=void 0}getConfig(e){let n=this.getRawDb().prepare("SELECT * FROM connector_configs WHERE channel = ?").get(e);return n?j(n):void 0}listConfigs(){return this.getRawDb().prepare("SELECT * FROM connector_configs ORDER BY channel ASC").all().map(j)}getConnection(e,n){let t=this.getRawDb().prepare(`SELECT * FROM connector_connections
|
|
98
98
|
WHERE channel = ? AND instance_id = ?`).get(e,n);return t?B(t):void 0}listConnections(e){return(e?this.getRawDb().prepare(`SELECT * FROM connector_connections
|
|
99
99
|
WHERE channel = ?
|
|
100
100
|
ORDER BY instance_id ASC`).all(e):this.getRawDb().prepare(`SELECT * FROM connector_connections
|
|
@@ -124,4 +124,4 @@ import{existsSync as rn,readFileSync as sn,renameSync as on}from"node:fs";import
|
|
|
124
124
|
WHERE channel = ? AND instance_id = ?`).run(D(n),C(),e,t);return}this.getRawDb().prepare(`UPDATE connector_connections
|
|
125
125
|
SET enabled = ?, updated_at = ?
|
|
126
126
|
WHERE channel = ?`).run(D(n),C(),e)}deleteConnection(e,n){return(this.getRawDb().prepare(`DELETE FROM connector_connections
|
|
127
|
-
WHERE channel = ? AND instance_id = ?`).run(e,n).changes??0)>0}disableAll(){this.getRawDb().prepare("UPDATE connector_connections SET enabled = 0, updated_at = ?").run(C())}deleteConfig(e){return(this.getRawDb().prepare("DELETE FROM connector_configs WHERE channel = ?").run(e).changes??0)>0}importLegacyJsonSettings(){let e=ne();if(!
|
|
127
|
+
WHERE channel = ? AND instance_id = ?`).run(e,n).changes??0)>0}disableAll(){this.getRawDb().prepare("UPDATE connector_connections SET enabled = 0, updated_at = ?").run(C())}deleteConfig(e){return(this.getRawDb().prepare("DELETE FROM connector_configs WHERE channel = ?").run(e).changes??0)>0}importLegacyJsonSettings(){let e=ne();if(!sn(e))return;try{let n=JSON.parse(on(e,"utf8")),t=R(n)&&R(n.connectors)?n.connectors:{};for(let[r,s]of Object.entries(t)){if(!R(s)||this.getConfig(r))continue;let i={};if(R(s.values)){for(let[_,f]of Object.entries(s.values))if(typeof f==="string")i[_]=f}let c={},a=R(s.security)?s.security:void 0;if(a&&R(a.values)){for(let[_,f]of Object.entries(a.values))if(typeof f==="string")c[_]=f}this.upsertConfig({channel:r,type:typeof s.type==="string"?s.type:r,values:i,security:a?{enabled:a.enabled===!0,values:c}:void 0,configuredAt:typeof s.configuredAt==="string"?s.configuredAt:void 0,updatedAt:typeof s.updatedAt==="string"?s.updatedAt:void 0})}cn(e,`${e}.migrated`)}catch{}}}function j(e){let n=e.security_enabled===1,t=ue(e.security_values_json),r=n||Object.keys(t).length>0;return{channel:E(e.channel),type:E(e.type),values:ue(e.values_json),security:r?{enabled:n,values:t}:void 0,configuredAt:E(e.configured_at),updatedAt:E(e.updated_at)}}function B(e){return{channel:E(e.channel),instanceId:E(e.instance_id),connectArgs:le(e.connect_args_json)??[],lastSuccessfulArgs:le(e.last_successful_args_json)??[],enabled:e.enabled===1,updatedAt:E(e.updated_at),lastConnectedAt:q(e.last_connected_at)??E(e.updated_at)}}function ln(e){let n=new W;try{return e(n)}finally{n.close()}}export{W as SqliteConnectorStore,$e as asBool,q as asOptionalString,E as asString,pe as ensureConnectorSchema,rn as ensureSessionSchema,Y as loadSqliteDb,C as nowIso,D as toBoolInt,ln as withConnectorStore};
|
|
@@ -162,6 +162,24 @@ export interface PluginSetupContext {
|
|
|
162
162
|
* it); identity and common-property setters are no-ops.
|
|
163
163
|
*/
|
|
164
164
|
telemetry?: ITelemetryService;
|
|
165
|
+
/**
|
|
166
|
+
* The session's working directory. Use it instead of `process.cwd()`:
|
|
167
|
+
* plugins loaded in the Hub share one process across sessions.
|
|
168
|
+
*/
|
|
169
|
+
cwd?: string;
|
|
170
|
+
/**
|
|
171
|
+
* Sends a plugin event (for example `steer_message`) to the session that
|
|
172
|
+
* set the plugin up. Replaces `globalThis.__clinePluginHost.emitEvent`,
|
|
173
|
+
* which is kept as a shim.
|
|
174
|
+
*/
|
|
175
|
+
emitEvent?: (name: string, payload?: unknown) => void;
|
|
176
|
+
/**
|
|
177
|
+
* Registers cleanup to run when the session that set the plugin up ends.
|
|
178
|
+
* Plugins loaded in the Hub share its process, so anything a plugin starts
|
|
179
|
+
* for a session (timers, child processes, sockets, listeners on shared
|
|
180
|
+
* emitters) must be stopped here.
|
|
181
|
+
*/
|
|
182
|
+
onDispose?: (cleanup: () => void | Promise<void>) => void;
|
|
165
183
|
}
|
|
166
184
|
declare const ExtensionCapabilityOptions: readonly ["hooks", "tools", "commands", "rules", "skills", "messageBuilders", "providers", "automationEvents", "mcp"];
|
|
167
185
|
export type AgentExtensionCapability = (typeof ExtensionCapabilityOptions)[number];
|
package/dist/hub.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type HubProtocolVersion = "v1";
|
|
|
7
7
|
export declare const CURRENT_HUB_PROTOCOL_VERSION: HubProtocolVersion;
|
|
8
8
|
export declare const MIN_CLIENT_HUB_PROTOCOL_VERSION: HubProtocolVersion;
|
|
9
9
|
export declare const MAX_CLIENT_HUB_PROTOCOL_VERSION: HubProtocolVersion;
|
|
10
|
-
export type HubCapabilityName = "client.register" | "client.list" | "session.create" | "session.list" | "session.get" | "session.run" | "session.abort" | "schedule.create" | "schedule.list" | "task.create" | "task.list" | "task.get" | "task.update" | "task.approve" | "task.cancel" | "task.run" | "task.automation.get" | "task.automation.set" | "settings.get" | "settings.set" | "connector.start" | "connector.stop" | "connector.supervised" | "run.enqueue" | "run.list" | "hub.drain" | "hub.status" | "stream.replay";
|
|
10
|
+
export type HubCapabilityName = "client.register" | "client.list" | "session.create" | "session.list" | "session.get" | "session.run" | "session.abort" | "schedule.create" | "schedule.list" | "task.create" | "task.list" | "task.get" | "task.update" | "task.approve" | "task.cancel" | "task.run" | "task.automation.get" | "task.automation.set" | "settings.get" | "settings.set" | "connector.start" | "connector.stop" | "connector.supervised" | "run.enqueue" | "run.list" | "hub.drain" | "hub.status" | "plugins.list" | "plugins.status" | "plugins.reload" | "stream.replay";
|
|
11
11
|
export declare const HUB_CAPABILITIES: readonly HubCapabilityName[];
|
|
12
12
|
export interface HubProtocolMetadata {
|
|
13
13
|
protocolVersion: string;
|
|
@@ -299,6 +299,72 @@ export interface HubSessionSearchHit {
|
|
|
299
299
|
snippet: string;
|
|
300
300
|
score: number;
|
|
301
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Lifecycle state of one plugin module loaded by a host (normally the Hub).
|
|
304
|
+
*
|
|
305
|
+
* - `loading`: the module is being imported.
|
|
306
|
+
* - `ready`: imported and set up without errors.
|
|
307
|
+
* - `degraded`: a hook or tool call failed; the plugin is still called.
|
|
308
|
+
* - `failed`: the last setup failed, or the plugin is off for every session
|
|
309
|
+
* because its import failed, a stray error was attributed to it, or calls
|
|
310
|
+
* kept failing. Only a setup failure lets the next session try again.
|
|
311
|
+
* - `disabled`: turned off in settings; never imported.
|
|
312
|
+
*/
|
|
313
|
+
export type PluginRuntimeState = "loading" | "ready" | "degraded" | "failed" | "disabled";
|
|
314
|
+
/**
|
|
315
|
+
* Where a plugin error happened: `discover`, `import`, `setup`, `dispose`,
|
|
316
|
+
* `hook:<name>`, `tool:<name>`, `command:<name>`, `rule:<id>`,
|
|
317
|
+
* `messageBuilder:<name>`, or `uncaught` for a stray exception or rejection
|
|
318
|
+
* the host attributed to the plugin from its stack.
|
|
319
|
+
*/
|
|
320
|
+
export type PluginErrorPhase = "discover" | "import" | "setup" | "dispose" | "uncaught" | `hook:${string}` | `tool:${string}` | `command:${string}` | `rule:${string}` | `messageBuilder:${string}`;
|
|
321
|
+
export interface PluginErrorRecord {
|
|
322
|
+
phase: PluginErrorPhase;
|
|
323
|
+
message: string;
|
|
324
|
+
stack?: string;
|
|
325
|
+
pluginPath: string;
|
|
326
|
+
/** Epoch milliseconds. */
|
|
327
|
+
timestamp: number;
|
|
328
|
+
sessionId?: string;
|
|
329
|
+
timedOut?: boolean;
|
|
330
|
+
}
|
|
331
|
+
export interface PluginStatusRecord {
|
|
332
|
+
/** Plugin `name` export, or a name derived from the path before import. */
|
|
333
|
+
name: string;
|
|
334
|
+
pluginPath: string;
|
|
335
|
+
state: PluginRuntimeState;
|
|
336
|
+
lastError?: PluginErrorRecord;
|
|
337
|
+
errorCount: number;
|
|
338
|
+
timeoutCount: number;
|
|
339
|
+
/** Live sessions that set this plugin up. */
|
|
340
|
+
sessionIds: string[];
|
|
341
|
+
capabilities?: string[];
|
|
342
|
+
hooks?: string[];
|
|
343
|
+
/** Epoch milliseconds of the last state or error change. */
|
|
344
|
+
updatedAt: number;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Per-session plugin selection, shaped like `toolPolicies`: `"*"` sets the
|
|
348
|
+
* default and named entries override it for one plugin. Plugins are enabled
|
|
349
|
+
* unless a policy says otherwise.
|
|
350
|
+
*/
|
|
351
|
+
export interface PluginPolicy {
|
|
352
|
+
enabled?: boolean;
|
|
353
|
+
}
|
|
354
|
+
export type PluginPolicies = Record<string, PluginPolicy>;
|
|
355
|
+
/** A plugin a session asked for but does not have, reported at session start. */
|
|
356
|
+
export interface SessionPluginIssue {
|
|
357
|
+
name: string;
|
|
358
|
+
pluginPath: string;
|
|
359
|
+
state: PluginRuntimeState;
|
|
360
|
+
/** `session_policy` when the session's `plugins` policy turned it off. */
|
|
361
|
+
reason?: "session_policy" | "settings" | "error";
|
|
362
|
+
lastError?: PluginErrorRecord;
|
|
363
|
+
}
|
|
364
|
+
export interface HubPluginsReloadInput {
|
|
365
|
+
/** Plugin name or absolute module path. */
|
|
366
|
+
plugin: string;
|
|
367
|
+
}
|
|
302
368
|
/**
|
|
303
369
|
* Strongly typed task command payloads. This map is intentionally extensible so
|
|
304
370
|
* other Hub command families can adopt typed payloads without changing the wire
|
|
@@ -315,6 +381,9 @@ export interface HubCommandInputMap {
|
|
|
315
381
|
"task.run": HubTaskRevisionInput;
|
|
316
382
|
"task.automation.get": Record<string, never>;
|
|
317
383
|
"task.automation.set": HubTaskAutomationSetInput;
|
|
384
|
+
"plugins.list": Record<string, never>;
|
|
385
|
+
"plugins.status": Record<string, never>;
|
|
386
|
+
"plugins.reload": HubPluginsReloadInput;
|
|
318
387
|
}
|
|
319
388
|
/** Typed task command results returned in {@link HubReplyEnvelope.payload}. */
|
|
320
389
|
export interface HubCommandOutputMap {
|
|
@@ -349,11 +418,20 @@ export interface HubCommandOutputMap {
|
|
|
349
418
|
"task.automation.set": {
|
|
350
419
|
policy: AgendaAutomationPolicy;
|
|
351
420
|
};
|
|
421
|
+
"plugins.list": {
|
|
422
|
+
plugins: PluginStatusRecord[];
|
|
423
|
+
};
|
|
424
|
+
"plugins.status": {
|
|
425
|
+
plugins: PluginStatusRecord[];
|
|
426
|
+
};
|
|
427
|
+
"plugins.reload": {
|
|
428
|
+
plugins: PluginStatusRecord[];
|
|
429
|
+
};
|
|
352
430
|
}
|
|
353
431
|
export type HubTypedCommandName = keyof HubCommandInputMap & HubCommandName;
|
|
354
432
|
export type HubCommandInput<TCommand extends HubTypedCommandName> = HubCommandInputMap[TCommand];
|
|
355
433
|
export type HubCommandOutput<TCommand extends HubTypedCommandName> = HubCommandOutputMap[TCommand];
|
|
356
|
-
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.search" | "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.steer_first_pending_prompt" | "session.update_pending_prompt" | "session.remove_pending_prompt" | "session.fork" | "session.hook" | "run.start" | "session.send_input" | "run.enqueue" | "run.list" | "run.abort" | "run.proceed_while_running" | "hub.drain" | "hub.status" | "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" | "task.create" | "task.list" | "task.get" | "task.update" | "task.approve" | "task.cancel" | "task.run" | "task.automation.get" | "task.automation.set" | "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";
|
|
434
|
+
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.search" | "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.steer_first_pending_prompt" | "session.update_pending_prompt" | "session.remove_pending_prompt" | "session.fork" | "session.hook" | "run.start" | "session.send_input" | "run.enqueue" | "run.list" | "run.abort" | "run.proceed_while_running" | "hub.drain" | "hub.status" | "plugins.list" | "plugins.status" | "plugins.reload" | "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" | "task.create" | "task.list" | "task.get" | "task.update" | "task.approve" | "task.cancel" | "task.run" | "task.automation.get" | "task.automation.set" | "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";
|
|
357
435
|
export declare const HUB_DEFAULT_COMMAND_TIMEOUT_MS = 30000;
|
|
358
436
|
export declare const HUB_COMMAND_SLOW_LOG_MS = 5000;
|
|
359
437
|
export declare function getDefaultHubCommandTimeoutMs(command: HubCommandName): number | null;
|
|
@@ -378,7 +456,7 @@ export interface HubReplyEnvelope {
|
|
|
378
456
|
details?: Record<string, unknown>;
|
|
379
457
|
};
|
|
380
458
|
}
|
|
381
|
-
export type HubEventName = "hub.client.registered" | "hub.client.disconnected" | "session.created" | "session.updated" | "session.attached" | "session.detached" | "session.forked" | "session.pending_prompts" | "session.pending_prompt_submitted" | "run.started" | "run.heartbeat" | "run.aborted" | "run.completed" | "run.failed" | "run.enqueued" | "run.interrupted" | "hub.drain_changed" | "iteration.started" | "iteration.finished" | "assistant.delta" | "assistant.media" | "assistant.finished" | "session.notice" | "reasoning.delta" | "reasoning.finished" | "agent.done" | "usage.updated" | "tool.started" | "tool.updated" | "tool.finished" | "approval.requested" | "approval.resolved" | "capability.requested" | "capability.resolved" | "team.progress" | "artifact.created" | "diff.created" | "spoke.started" | "spoke.failed" | "spoke.stopped" | "peer.registered" | "peer.session_attached" | "peer.session_detached" | "schedule.created" | "schedule.updated" | "schedule.deleted" | "schedule.triggered" | "schedule.execution_completed" | "schedule.execution_failed" | "task.created" | "task.updated" | "task.deleted" | "task.run.started" | "task.run.completed" | "task.run.failed" | "task.automation.updated" | "settings.changed" | "ui.notify" | "ui.show_window" | "hub.client.updated";
|
|
459
|
+
export type HubEventName = "hub.client.registered" | "hub.client.disconnected" | "session.created" | "session.updated" | "session.attached" | "session.detached" | "session.forked" | "session.pending_prompts" | "session.pending_prompt_submitted" | "run.started" | "run.heartbeat" | "run.aborted" | "run.completed" | "run.failed" | "run.enqueued" | "run.interrupted" | "hub.drain_changed" | "iteration.started" | "iteration.finished" | "assistant.delta" | "assistant.media" | "assistant.finished" | "session.notice" | "reasoning.delta" | "reasoning.finished" | "agent.done" | "usage.updated" | "tool.started" | "tool.updated" | "tool.finished" | "approval.requested" | "approval.resolved" | "capability.requested" | "capability.resolved" | "team.progress" | "artifact.created" | "diff.created" | "spoke.started" | "spoke.failed" | "spoke.stopped" | "peer.registered" | "peer.session_attached" | "peer.session_detached" | "schedule.created" | "schedule.updated" | "schedule.deleted" | "schedule.triggered" | "schedule.execution_completed" | "schedule.execution_failed" | "task.created" | "task.updated" | "task.deleted" | "task.run.started" | "task.run.completed" | "task.run.failed" | "task.automation.updated" | "settings.changed" | "plugin.status_changed" | "ui.notify" | "ui.show_window" | "hub.client.updated";
|
|
382
460
|
export interface HubEventEnvelope {
|
|
383
461
|
version: HubProtocolVersion;
|
|
384
462
|
event: HubEventName;
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export * from "./llms/model-tools";
|
|
|
26
26
|
export { DEFAULT_REASONING_EFFORT, REASONING_EFFORT_RATIOS, resolveEffectiveReasoningEffort, resolveReasoningBudgetFromRatio, resolveReasoningEffortRatio, } from "./llms/reasoning-effort";
|
|
27
27
|
export { type ModelReasoningOption, ModelReasoningOptionSchema, REASONING_LEVELS, type ReasoningEffort, ReasoningEffortSchema, type ReasoningLevel, ReasoningLevelSchema, } from "./llms/reasoning-options";
|
|
28
28
|
export { serializeAbortReason } from "./llms/requests";
|
|
29
|
-
export { CHARS_PER_TOKEN, estimateRequestInputTokens, estimateTokens, type TokenEstimatedRequest, } from "./llms/tokens";
|
|
29
|
+
export { CHARS_PER_TOKEN, createImageAwareReplacer, ESTIMATED_TOKENS_PER_IMAGE, estimateRequestInputTokens, estimateTokens, type TokenEstimatedRequest, } from "./llms/tokens";
|
|
30
30
|
export type { ToolApprovalRequest, ToolApprovalResult, ToolCallRecord, ToolPolicy, } from "./llms/tools";
|
|
31
31
|
export { TOOL_REJECTION_SUFFIX, ToolCallRecordSchema, USER_REJECTED_TOOL_REASON, } from "./llms/tools";
|
|
32
32
|
export type { StreamingAudioTranscriptionSession } from "./llms/transcription";
|