@corenel/tools-web 0.1.0
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/core/protocol.d.ts +144 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/protocol.js +2 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/idb.d.ts +12 -0
- package/dist/idb.d.ts.map +1 -0
- package/dist/idb.js +100 -0
- package/dist/idb.js.map +1 -0
- package/dist/memory/index.d.ts +11 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +21 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/local.d.ts +16 -0
- package/dist/memory/local.d.ts.map +1 -0
- package/dist/memory/local.js +51 -0
- package/dist/memory/local.js.map +1 -0
- package/dist/memory/prompdApi.d.ts +20 -0
- package/dist/memory/prompdApi.d.ts.map +1 -0
- package/dist/memory/prompdApi.js +68 -0
- package/dist/memory/prompdApi.js.map +1 -0
- package/dist/prompts/history.d.ts +27 -0
- package/dist/prompts/history.d.ts.map +1 -0
- package/dist/prompts/history.js +82 -0
- package/dist/prompts/history.js.map +1 -0
- package/dist/sessions/store.d.ts +10 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +37 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/storageHealth.d.ts +16 -0
- package/dist/storageHealth.d.ts.map +1 -0
- package/dist/storageHealth.js +64 -0
- package/dist/storageHealth.js.map +1 -0
- package/dist/tools/result-store.d.ts +20 -0
- package/dist/tools/result-store.d.ts.map +1 -0
- package/dist/tools/result-store.js +52 -0
- package/dist/tools/result-store.js.map +1 -0
- package/dist/workerClient.d.ts +81 -0
- package/dist/workerClient.d.ts.map +1 -0
- package/dist/workerClient.js +192 -0
- package/dist/workerClient.js.map +1 -0
- package/dist/workerHandler.d.ts +6 -0
- package/dist/workerHandler.d.ts.map +1 -0
- package/dist/workerHandler.js +442 -0
- package/dist/workerHandler.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
/* Kernel worker handler: runs the agent loop off the main thread. Host-agnostic
|
|
2
|
+
* — it talks to the outside world ONLY through a WorkerTransport (post/on), so
|
|
3
|
+
* the same handler binds to a browser Web Worker's `self` (the app-owned entry
|
|
4
|
+
* src/prompd/worker.ts) or a Node `worker_threads` parentPort. It registers no
|
|
5
|
+
* product tools and binds no `self`; the app entry registers prompd's tools and
|
|
6
|
+
* supplies the transport, then calls startWorker(). IndexedDB + fetch + the
|
|
7
|
+
* OpenAI SDK all work here; the worker can't read the Clerk session, so it
|
|
8
|
+
* requests a token from the main thread per call (token-request/response). */
|
|
9
|
+
import { createChatClient } from '@corenel/harness/providers/gateway';
|
|
10
|
+
import { runAgent } from '@corenel/harness/core/loop';
|
|
11
|
+
import { allTools } from '@corenel/harness/tools/builtins';
|
|
12
|
+
import { createProviders } from './memory';
|
|
13
|
+
import { LocalSessionStore } from './sessions/store';
|
|
14
|
+
import { setIdbScope } from './idb';
|
|
15
|
+
import { alog, setAgentLogging } from '@corenel/harness/log';
|
|
16
|
+
import { PermissionService, STANDARD_POLICY } from '@corenel/harness/guardrail';
|
|
17
|
+
import { IdbRecallStore } from './tools/result-store';
|
|
18
|
+
import { runNode } from '@corenel/harness/dag/executeNode';
|
|
19
|
+
import { ROOT_NODE_ID } from '@corenel/protocol';
|
|
20
|
+
/** Provider risk for the current run, used to phrase write permission prompts. */
|
|
21
|
+
let currentFileMeta;
|
|
22
|
+
/** Approval summary by tool — mirrors the main-thread copy in index.ts. */
|
|
23
|
+
function summarizePermission(tool, input) {
|
|
24
|
+
const o = (input && typeof input === 'object' ? input : {});
|
|
25
|
+
const s = (k) => (typeof o[k] === 'string' ? o[k] : '');
|
|
26
|
+
const disk = currentFileMeta?.isLocalDisk;
|
|
27
|
+
const where = disk ? `LOCAL DISK${currentFileMeta?.label ? ` (${currentFileMeta.label})` : ''}` : 'the virtual workspace';
|
|
28
|
+
switch (tool) {
|
|
29
|
+
case 'save_memory':
|
|
30
|
+
return `Remember: "${s('text').slice(0, 80)}"`;
|
|
31
|
+
case 'kv_set':
|
|
32
|
+
return `Write key "${s('key')}"`;
|
|
33
|
+
case 'write_file':
|
|
34
|
+
case 'create_file':
|
|
35
|
+
return `Write "${s('path')}" to ${where}`;
|
|
36
|
+
case 'delete_file':
|
|
37
|
+
return `Delete "${s('path')}" from ${where}`;
|
|
38
|
+
case 'rename_file':
|
|
39
|
+
return `Rename "${s('from')}" -> "${s('to')}" in ${where}`;
|
|
40
|
+
default: {
|
|
41
|
+
const mcp = mcpToolMeta.get(tool);
|
|
42
|
+
if (mcp)
|
|
43
|
+
return `Call "${mcp.tool}" on MCP server "${mcp.server}"`;
|
|
44
|
+
return `Run ${tool}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Outbound channel — bound by startWorker() to the host transport. Until then a
|
|
49
|
+
// no-op, so module-level bridge helpers can reference it safely.
|
|
50
|
+
let post = () => { };
|
|
51
|
+
/* token bridge: getToken() -> ask main thread -> resolve when it replies.
|
|
52
|
+
* Times out to null after 8s so a dropped/slow reply can never deadlock the run
|
|
53
|
+
* (the request then proceeds unauthenticated and surfaces a real 401, not a hang). */
|
|
54
|
+
let tokenSeq = 0;
|
|
55
|
+
const pendingToken = new Map();
|
|
56
|
+
const auth = {
|
|
57
|
+
getToken: () => new Promise((resolve) => {
|
|
58
|
+
const id = ++tokenSeq;
|
|
59
|
+
const timer = setTimeout(() => {
|
|
60
|
+
if (pendingToken.has(id)) {
|
|
61
|
+
pendingToken.delete(id);
|
|
62
|
+
resolve(null);
|
|
63
|
+
}
|
|
64
|
+
}, 8000);
|
|
65
|
+
pendingToken.set(id, (t) => { clearTimeout(timer); resolve(t); });
|
|
66
|
+
post({ kind: 'token-request', id });
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
const client = createChatClient(auth);
|
|
70
|
+
const { memory, kv, search } = createProviders(auth.getToken);
|
|
71
|
+
const sessions = new LocalSessionStore();
|
|
72
|
+
const recall = new IdbRecallStore();
|
|
73
|
+
const runs = new Map();
|
|
74
|
+
/* file bridge: ctx.files ops -> ask the main-thread WorkspaceService -> resolve
|
|
75
|
+
* on reply. The active provider (virtual or a real folder) lives on the main
|
|
76
|
+
* thread; the worker only proxies. */
|
|
77
|
+
let fileSeq = 0;
|
|
78
|
+
const pendingFile = new Map();
|
|
79
|
+
function fileRequest(op, args) {
|
|
80
|
+
return new Promise((resolve, reject) => {
|
|
81
|
+
const id = ++fileSeq;
|
|
82
|
+
pendingFile.set(id, { resolve, reject });
|
|
83
|
+
post({ kind: 'file-request', id, op, args });
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** A FileService that proxies every op to the main thread; metadata (write risk)
|
|
87
|
+
* comes from the run's fileMeta. onChange is a no-op in the worker (the UI on the
|
|
88
|
+
* main thread owns refresh). */
|
|
89
|
+
function makeFileProxy(meta) {
|
|
90
|
+
const call = (op, ...args) => fileRequest(op, args);
|
|
91
|
+
return {
|
|
92
|
+
kind: meta?.kind ?? 'memory',
|
|
93
|
+
label: meta?.label ?? 'Workspace',
|
|
94
|
+
isLocalDisk: meta?.isLocalDisk ?? false,
|
|
95
|
+
writable: meta?.writable ?? true,
|
|
96
|
+
list: (dir) => call('list', dir),
|
|
97
|
+
read: (path) => call('read', path),
|
|
98
|
+
stat: (path) => call('stat', path),
|
|
99
|
+
write: (path, content) => call('write', path, content),
|
|
100
|
+
create: (path, content) => call('create', path, content),
|
|
101
|
+
remove: (path) => call('remove', path),
|
|
102
|
+
rename: (from, to) => call('rename', from, to),
|
|
103
|
+
search: (query) => call('search', query),
|
|
104
|
+
onChange: () => () => { },
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/* sidecar tool bridge: a connected sidecar's tools run on the MAIN thread (which
|
|
108
|
+
* holds the WS connection and GATES the call before it crosses), so the worker
|
|
109
|
+
* exposes them as proxies that forward the call out — same shape as the file
|
|
110
|
+
* bridge above. */
|
|
111
|
+
let toolSeq = 0;
|
|
112
|
+
const pendingTool = new Map();
|
|
113
|
+
function toolRequest(name, args, runId) {
|
|
114
|
+
return new Promise((resolve, reject) => {
|
|
115
|
+
const id = ++toolSeq;
|
|
116
|
+
pendingTool.set(id, { resolve, reject });
|
|
117
|
+
post({ kind: 'tool-request', id, runId, name, args });
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/** Build proxy AgentTools from a sidecar's advertised decls — each `run` forwards
|
|
121
|
+
* to the main thread. The model sees them like any other tool; it never knows the
|
|
122
|
+
* implementation lives on a sidecar. */
|
|
123
|
+
function makeRemoteTools(decls, runId) {
|
|
124
|
+
return decls.map((decl) => ({ ...decl, run: (args) => toolRequest(decl.name, args, runId) }));
|
|
125
|
+
}
|
|
126
|
+
/* authed backend calls (the web_search tool + the MCP proxy) — reuse the chat
|
|
127
|
+
* token bridge so secrets stay server-side. */
|
|
128
|
+
const ENV_BASE = (import.meta.env.VITE_API_BASE_URL || '/api').replace(/\/$/, '');
|
|
129
|
+
function backendBase() {
|
|
130
|
+
return /^https?:\/\//.test(ENV_BASE) ? ENV_BASE : `${globalThis.location.origin}${ENV_BASE}`;
|
|
131
|
+
}
|
|
132
|
+
async function backendFetch(path, init) {
|
|
133
|
+
const token = await auth.getToken().catch(() => null);
|
|
134
|
+
const headers = new Headers(init.headers);
|
|
135
|
+
headers.set('Content-Type', 'application/json');
|
|
136
|
+
if (token)
|
|
137
|
+
headers.set('Authorization', `Bearer ${token}`);
|
|
138
|
+
const res = await fetch(backendBase() + path, { ...init, headers });
|
|
139
|
+
const j = await res.json().catch(() => ({}));
|
|
140
|
+
if (!res.ok) {
|
|
141
|
+
if (res.status === 401 || res.status === 403)
|
|
142
|
+
throw new Error('Sign in to use this tool.');
|
|
143
|
+
throw new Error(j?.error || `HTTP ${res.status}`);
|
|
144
|
+
}
|
|
145
|
+
return j;
|
|
146
|
+
}
|
|
147
|
+
const backendHttp = {
|
|
148
|
+
post: (path, body) => backendFetch(path, { method: 'POST', body: JSON.stringify(body ?? {}) }),
|
|
149
|
+
get: (path) => backendFetch(path, { method: 'GET' }),
|
|
150
|
+
};
|
|
151
|
+
/** proxy-tool-name -> { tool, server } so summarizePermission can describe an MCP call. */
|
|
152
|
+
const mcpToolMeta = new Map();
|
|
153
|
+
/** Fetch the user's MCP tools and wrap each as a proxy AgentTool. Guarded so an
|
|
154
|
+
* MCP outage (or no servers / signed out) never breaks a run. Tools are gated
|
|
155
|
+
* through the policy/permission layer (mutating unless annotated read-only), so a
|
|
156
|
+
* call prompts unless the policy allows it. */
|
|
157
|
+
async function loadMcpTools() {
|
|
158
|
+
try {
|
|
159
|
+
const j = await backendHttp.get('/mcp/tools');
|
|
160
|
+
const list = Array.isArray(j?.tools) ? j.tools : [];
|
|
161
|
+
mcpToolMeta.clear();
|
|
162
|
+
const used = new Set();
|
|
163
|
+
const out = [];
|
|
164
|
+
for (const t of list) {
|
|
165
|
+
if (!t || !t.name || t.error)
|
|
166
|
+
continue;
|
|
167
|
+
const base = `mcp_${String(t.name).replace(/[^a-zA-Z0-9_-]/g, '_')}`.slice(0, 60);
|
|
168
|
+
let name = base;
|
|
169
|
+
let i = 2;
|
|
170
|
+
while (used.has(name))
|
|
171
|
+
name = `${base}_${i++}`.slice(0, 64);
|
|
172
|
+
used.add(name);
|
|
173
|
+
const serverId = t.serverId;
|
|
174
|
+
const toolName = t.name;
|
|
175
|
+
const serverLabel = t.serverLabel || serverId;
|
|
176
|
+
const readOnly = t.annotations?.readOnlyHint === true;
|
|
177
|
+
mcpToolMeta.set(name, { tool: toolName, server: serverLabel });
|
|
178
|
+
out.push({
|
|
179
|
+
name,
|
|
180
|
+
// The wire name is `mcp_<tool>`, so policy addressing must be told the
|
|
181
|
+
// namespace explicitly — without this they resolve to `other:` and
|
|
182
|
+
// `mcp:*` policy globs silently match nothing (a deny that never fires).
|
|
183
|
+
namespace: 'mcp',
|
|
184
|
+
description: `[MCP: ${serverLabel}] ${t.description || toolName}`,
|
|
185
|
+
parameters: t.inputSchema && typeof t.inputSchema === 'object' ? t.inputSchema : { type: 'object', properties: {} },
|
|
186
|
+
// Gate non-read-only MCP tools through the policy (it can allow them).
|
|
187
|
+
mutates: !readOnly,
|
|
188
|
+
async run(args) {
|
|
189
|
+
const r = await backendHttp.post('/mcp/call', { serverId, name: toolName, args });
|
|
190
|
+
const d = r?.data || {};
|
|
191
|
+
return typeof d.text === 'string' ? d.text : JSON.stringify(d);
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return out;
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/* permission bridge: confirm() -> ask main thread -> resolve on reply */
|
|
202
|
+
let permSeq = 0;
|
|
203
|
+
const pendingPerm = new Map();
|
|
204
|
+
function confirmFor(runId) {
|
|
205
|
+
return (req) => new Promise((resolve) => {
|
|
206
|
+
const id = ++permSeq;
|
|
207
|
+
pendingPerm.set(id, resolve);
|
|
208
|
+
// Forward the raw input too: for file writes the main thread re-builds the
|
|
209
|
+
// summary from the LIVE workspace, so the prompt's risk (LOCAL DISK vs
|
|
210
|
+
// virtual) is accurate even if the source was swapped after the run began.
|
|
211
|
+
post({ kind: 'permission-request', id, runId, tool: req.tool, summary: req.summary, input: req.input });
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/* ask bridge: ctx.ask(questions) -> ask the main thread -> resolve on reply. */
|
|
215
|
+
let askSeq = 0;
|
|
216
|
+
const pendingAsk = new Map();
|
|
217
|
+
function askFor(runId) {
|
|
218
|
+
return (questions) => new Promise((resolve) => {
|
|
219
|
+
const id = ++askSeq;
|
|
220
|
+
pendingAsk.set(id, resolve);
|
|
221
|
+
post({ kind: 'ask-request', id, runId, questions });
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/* edit-review bridge: ctx.reviewEdit(callId) -> the main thread awaits the
|
|
225
|
+
* user's verdict on that propose_edit (editDecisions store) -> resolve on reply.
|
|
226
|
+
* No timeout by design — a review may take as long as the user wants; aborting
|
|
227
|
+
* the run is the escape hatch (the tool races ctx.signal). */
|
|
228
|
+
let reviewSeq = 0;
|
|
229
|
+
const pendingReview = new Map();
|
|
230
|
+
function reviewEditFor(runId) {
|
|
231
|
+
return (callId) => new Promise((resolve) => {
|
|
232
|
+
const id = ++reviewSeq;
|
|
233
|
+
pendingReview.set(id, resolve);
|
|
234
|
+
post({ kind: 'edit-review-request', id, runId, callId });
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const DEFAULT_SYSTEM = 'You are a Prompd assistant running in the browser. You help author, compile, and ' +
|
|
238
|
+
'discover .prmd/.md prompts. Use compile_prompd to preview prompt output, ' +
|
|
239
|
+
'search_packages to find registry packages, and the memory/kv tools to remember ' +
|
|
240
|
+
'useful facts across turns. You can read and edit the user\'s files in the active ' +
|
|
241
|
+
'workspace: list_files, read_file, search_files, stat_file (read-only), and ' +
|
|
242
|
+
'write_file, create_file, delete_file, rename_file (these ask the user for ' +
|
|
243
|
+
'permission first). Prefer reading a file before editing it, and prefer calling a ' +
|
|
244
|
+
'tool over guessing.';
|
|
245
|
+
/* Sub-agent spawn primitive (Phase 1/2). A tool can delegate a focused subtask to
|
|
246
|
+
* a fresh runAgent loop with its own message history (isolation), running IN this
|
|
247
|
+
* worker (work is network-bound, so concurrent loops interleave fine). Governance:
|
|
248
|
+
* a depth cap (how deep delegation nests) and a per-run count cap (total spawns)
|
|
249
|
+
* guard runaway recursion. Children reuse the parent's bridges, so a sub-agent's
|
|
250
|
+
* write still surfaces the same permission prompt; at the depth cap a child's
|
|
251
|
+
* ctx.spawn is undefined and runNode drops the spawn_* tools. */
|
|
252
|
+
const SUB_MAX_DEPTH = 2;
|
|
253
|
+
const SUB_MAX_COUNT = 8;
|
|
254
|
+
function makeSpawn(deps) {
|
|
255
|
+
return async (req) => {
|
|
256
|
+
if (deps.depth >= SUB_MAX_DEPTH)
|
|
257
|
+
throw new Error(`Sub-agent depth limit (${SUB_MAX_DEPTH}) reached.`);
|
|
258
|
+
if (deps.counter.n >= SUB_MAX_COUNT)
|
|
259
|
+
throw new Error(`Sub-agent limit (${SUB_MAX_COUNT}) reached for this run.`);
|
|
260
|
+
deps.counter.n++;
|
|
261
|
+
const seq = deps.counter.n;
|
|
262
|
+
const childId = `sub-${seq}`;
|
|
263
|
+
// Child abort is linked to the parent: aborting the parent run aborts every
|
|
264
|
+
// in-flight sub-agent beneath it.
|
|
265
|
+
const childAc = new AbortController();
|
|
266
|
+
const onAbort = () => childAc.abort();
|
|
267
|
+
deps.parentSignal.addEventListener('abort', onAbort);
|
|
268
|
+
const childDepth = deps.depth + 1;
|
|
269
|
+
const childCtx = {
|
|
270
|
+
...deps.toolCtxBase,
|
|
271
|
+
signal: childAc.signal,
|
|
272
|
+
// Nested spawns parent onto THIS child (its id), keeping the same run.
|
|
273
|
+
spawn: childDepth < SUB_MAX_DEPTH ? makeSpawn({ ...deps, depth: childDepth, parentSignal: childAc.signal, nodeId: childId }) : undefined,
|
|
274
|
+
};
|
|
275
|
+
// Label the node by its task (the canvas falls back to the id otherwise).
|
|
276
|
+
const label = req.task.trim().slice(0, 48) || childId;
|
|
277
|
+
try {
|
|
278
|
+
const node = {
|
|
279
|
+
id: childId, type: 'agent',
|
|
280
|
+
task: req.task, system: req.system, model: req.model, tools: req.tools, maxTurns: req.maxTurns,
|
|
281
|
+
};
|
|
282
|
+
const out = await runNode({
|
|
283
|
+
node, inputs: {}, signal: childAc.signal,
|
|
284
|
+
// Forward the child's node-event stream to the canvas, tagging its
|
|
285
|
+
// node-start with the parent + label so the DAG grows an edge.
|
|
286
|
+
onEvent: (event) => {
|
|
287
|
+
const tagged = event.type === 'node-start'
|
|
288
|
+
? { ...event, parentId: deps.nodeId, label, nodeType: 'agent' }
|
|
289
|
+
: event;
|
|
290
|
+
post({ kind: 'node-event', runId: deps.runId, event: tagged });
|
|
291
|
+
},
|
|
292
|
+
}, { client, defaultModel: req.model || deps.defaultModel, tools: deps.tools, toolCtx: childCtx, policy: deps.policy, permission: deps.permission, compression: deps.compression });
|
|
293
|
+
return { text: out.text, usage: out.usage, stopReason: out.stopReason, turns: out.turns };
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
deps.parentSignal.removeEventListener('abort', onAbort);
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/** Per-run setup shared by `run` (chat) and `run-node` (one DAG node): registers
|
|
301
|
+
* the abort controller, builds the permission service, loads tools, and assembles
|
|
302
|
+
* the spawn-enabled ToolContext. Returns everything both entry points need. */
|
|
303
|
+
async function setupRun(m, rootNodeId) {
|
|
304
|
+
currentFileMeta = m.fileMeta;
|
|
305
|
+
const ac = new AbortController();
|
|
306
|
+
runs.set(m.runId, ac);
|
|
307
|
+
const confirm = confirmFor(m.runId);
|
|
308
|
+
const policy = m.policy ?? STANDARD_POLICY;
|
|
309
|
+
const permission = new PermissionService({
|
|
310
|
+
policy,
|
|
311
|
+
ceiling: m.ceiling,
|
|
312
|
+
prompt: {
|
|
313
|
+
ask: async ({ tool, input }) => (await confirm({ tool, summary: summarizePermission(tool, input), input })) ? 'allow' : 'deny',
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
// Pull in the user's MCP tools (guarded; never blocks the run on failure).
|
|
317
|
+
const tools = [...allTools(), ...(await loadMcpTools()), ...makeRemoteTools(m.remoteTools ?? [], m.runId)];
|
|
318
|
+
const toolCtxBase = { memory, kv, search, sessions, recall, files: makeFileProxy(m.fileMeta), fileMeta: m.fileMeta, http: { post: backendHttp.post }, confirm, ask: askFor(m.runId) };
|
|
319
|
+
const defaultModel = m.model || 'gpt-4o-mini';
|
|
320
|
+
const counter = { n: 0 };
|
|
321
|
+
const spawn = makeSpawn({ depth: 0, counter, parentSignal: ac.signal, tools, toolCtxBase, defaultModel, policy, permission, compression: m.compression, runId: m.runId, nodeId: rootNodeId });
|
|
322
|
+
const toolCtx = { ...toolCtxBase, signal: ac.signal, spawn };
|
|
323
|
+
return { ac, policy, permission, tools, toolCtx, defaultModel };
|
|
324
|
+
}
|
|
325
|
+
async function handleMessage(m) {
|
|
326
|
+
if (m.kind === 'token-response') {
|
|
327
|
+
pendingToken.get(m.id)?.(m.token);
|
|
328
|
+
pendingToken.delete(m.id);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
if (m.kind === 'permission-response') {
|
|
332
|
+
pendingPerm.get(m.id)?.(m.allow);
|
|
333
|
+
pendingPerm.delete(m.id);
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
if (m.kind === 'ask-response') {
|
|
337
|
+
pendingAsk.get(m.id)?.(m.answers);
|
|
338
|
+
pendingAsk.delete(m.id);
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
if (m.kind === 'edit-review-response') {
|
|
342
|
+
pendingReview.get(m.id)?.(m.outcome);
|
|
343
|
+
pendingReview.delete(m.id);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (m.kind === 'file-response') {
|
|
347
|
+
const p = pendingFile.get(m.id);
|
|
348
|
+
if (p) {
|
|
349
|
+
pendingFile.delete(m.id);
|
|
350
|
+
if (m.ok)
|
|
351
|
+
p.resolve(m.data);
|
|
352
|
+
else
|
|
353
|
+
p.reject(new Error(m.error || 'file operation failed'));
|
|
354
|
+
}
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
if (m.kind === 'tool-response') {
|
|
358
|
+
const p = pendingTool.get(m.id);
|
|
359
|
+
if (p) {
|
|
360
|
+
pendingTool.delete(m.id);
|
|
361
|
+
if (m.ok)
|
|
362
|
+
p.resolve(m.result ?? '');
|
|
363
|
+
else
|
|
364
|
+
p.reject(new Error(m.error || 'sidecar tool failed'));
|
|
365
|
+
}
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (m.kind === 'abort') {
|
|
369
|
+
runs.get(m.runId)?.abort();
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
if (m.kind === 'run') {
|
|
373
|
+
const { runId } = m;
|
|
374
|
+
if (m.debug)
|
|
375
|
+
setAgentLogging(true); // mirror the main thread's logging flag into the worker
|
|
376
|
+
setIdbScope(m.scope ?? 'anon'); // read/write THIS identity's IndexedDB (memory/kv/sessions/recall)
|
|
377
|
+
alog('worker:run', runId, 'model', m.model);
|
|
378
|
+
const { ac, policy, permission, tools, toolCtx, defaultModel } = await setupRun(m, ROOT_NODE_ID);
|
|
379
|
+
// Chat runs whose caller wired a reviewer block propose_edit on the user's
|
|
380
|
+
// review. Assigned AFTER setupRun so spawned sub-agents (whose ctx derives
|
|
381
|
+
// from toolCtxBase) and run-node executions — which have no review UI —
|
|
382
|
+
// keep the non-blocking fallback instead of deadlocking on a card nobody
|
|
383
|
+
// can see.
|
|
384
|
+
if (m.reviewEdits)
|
|
385
|
+
toolCtx.reviewEdit = reviewEditFor(runId);
|
|
386
|
+
// The root session is node 0 of the DAG (§9.3/§10.3): emit its start/done so the
|
|
387
|
+
// canvas shows root status. Per-turn events stay on the plain `event` channel —
|
|
388
|
+
// the root's chat is the live AgentPanel, not a reconstructed transcript.
|
|
389
|
+
post({ kind: 'node-event', runId, event: { type: 'node-start', nodeId: ROOT_NODE_ID, label: 'Session', nodeType: 'agent' } });
|
|
390
|
+
try {
|
|
391
|
+
const result = await runAgent({
|
|
392
|
+
client,
|
|
393
|
+
model: defaultModel,
|
|
394
|
+
system: m.system || DEFAULT_SYSTEM,
|
|
395
|
+
messages: m.messages,
|
|
396
|
+
tools,
|
|
397
|
+
toolCtx,
|
|
398
|
+
policy,
|
|
399
|
+
permission,
|
|
400
|
+
compression: m.compression,
|
|
401
|
+
signal: ac.signal,
|
|
402
|
+
onEvent: (event) => post({ kind: 'event', runId, event }),
|
|
403
|
+
});
|
|
404
|
+
post({ kind: 'node-event', runId, event: { type: 'node-done', nodeId: ROOT_NODE_ID, output: { text: result.text, usage: result.usage, stopReason: result.stopReason } } });
|
|
405
|
+
post({ kind: 'result', runId, result });
|
|
406
|
+
}
|
|
407
|
+
catch (e) {
|
|
408
|
+
const message = String(e?.message || e);
|
|
409
|
+
post({ kind: 'node-event', runId, event: { type: 'node-error', nodeId: ROOT_NODE_ID, message } });
|
|
410
|
+
post({ kind: 'error', runId, message });
|
|
411
|
+
}
|
|
412
|
+
finally {
|
|
413
|
+
runs.delete(runId);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (m.kind === 'run-node') {
|
|
417
|
+
const { runId } = m;
|
|
418
|
+
if (m.debug)
|
|
419
|
+
setAgentLogging(true);
|
|
420
|
+
setIdbScope(m.scope ?? 'anon');
|
|
421
|
+
alog('worker:run-node', runId, m.node?.id, 'model', m.model);
|
|
422
|
+
const { ac, policy, permission, tools, toolCtx, defaultModel } = await setupRun(m, m.node.id);
|
|
423
|
+
try {
|
|
424
|
+
const result = await runNode({ node: m.node, inputs: m.inputs, signal: ac.signal, onEvent: (event) => post({ kind: 'node-event', runId, event }) }, { client, defaultModel, tools, toolCtx, policy, permission, compression: m.compression });
|
|
425
|
+
post({ kind: 'node-result', runId, result });
|
|
426
|
+
}
|
|
427
|
+
catch (e) {
|
|
428
|
+
post({ kind: 'error', runId, message: String(e?.message || e) });
|
|
429
|
+
}
|
|
430
|
+
finally {
|
|
431
|
+
runs.delete(runId);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/** Start the kernel worker against a host transport. The app-owned entry binds
|
|
436
|
+
* the transport to its runtime (browser `self`, Node `parentPort`) and registers
|
|
437
|
+
* any product tools BEFORE calling this. */
|
|
438
|
+
export function startWorker(transport) {
|
|
439
|
+
post = transport.post;
|
|
440
|
+
transport.on(handleMessage);
|
|
441
|
+
}
|
|
442
|
+
//# sourceMappingURL=workerHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerHandler.js","sourceRoot":"","sources":["../workerHandler.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@corenel/tools-web",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Corenel browser capabilities: IndexedDB stores (memory/sessions/recall), storage-health, the prompt-config history, and the Web Worker transport (handler + client). The node twin is @corenel/tools-node.",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./index.ts",
|
|
8
|
+
"./memory": "./memory/index.ts",
|
|
9
|
+
"./*": "./*.ts"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"typecheck": "tsc --noEmit",
|
|
13
|
+
"build": "tsc -p tsconfig.build.json",
|
|
14
|
+
"prepublishOnly": "tsc -p tsconfig.build.json"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@corenel/protocol": "workspace:*",
|
|
18
|
+
"@corenel/harness": "workspace:*",
|
|
19
|
+
"openai": "^4.77.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.9.3"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"default": "./dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"./memory": {
|
|
32
|
+
"types": "./dist/memory/index.d.ts",
|
|
33
|
+
"default": "./dist/memory/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./*": {
|
|
36
|
+
"types": "./dist/*.d.ts",
|
|
37
|
+
"default": "./dist/*.js"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist"
|
|
43
|
+
]
|
|
44
|
+
}
|