@lloyal-labs/lloyal-agents 1.0.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/README.md +280 -0
- package/dist/Tool.d.ts +65 -0
- package/dist/Tool.d.ts.map +1 -0
- package/dist/Tool.js +59 -0
- package/dist/Tool.js.map +1 -0
- package/dist/agent-pool.d.ts +114 -0
- package/dist/agent-pool.d.ts.map +1 -0
- package/dist/agent-pool.js +528 -0
- package/dist/agent-pool.js.map +1 -0
- package/dist/context.d.ts +33 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +33 -0
- package/dist/context.js.map +1 -0
- package/dist/diverge.d.ts +39 -0
- package/dist/diverge.d.ts.map +1 -0
- package/dist/diverge.js +148 -0
- package/dist/diverge.js.map +1 -0
- package/dist/generate.d.ts +30 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +58 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +58 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +57 -0
- package/dist/init.js.map +1 -0
- package/dist/run-agents.d.ts +39 -0
- package/dist/run-agents.d.ts.map +1 -0
- package/dist/run-agents.js +46 -0
- package/dist/run-agents.js.map +1 -0
- package/dist/shared-root.d.ts +55 -0
- package/dist/shared-root.d.ts.map +1 -0
- package/dist/shared-root.js +62 -0
- package/dist/shared-root.js.map +1 -0
- package/dist/toolkit.d.ts +38 -0
- package/dist/toolkit.d.ts.map +1 -0
- package/dist/toolkit.js +31 -0
- package/dist/toolkit.js.map +1 -0
- package/dist/types.d.ts +380 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContextPressure = void 0;
|
|
4
|
+
exports.useAgentPool = useAgentPool;
|
|
5
|
+
const effection_1 = require("effection");
|
|
6
|
+
const sdk_1 = require("@lloyal-labs/sdk");
|
|
7
|
+
const context_1 = require("./context");
|
|
8
|
+
const sdk_2 = require("@lloyal-labs/sdk");
|
|
9
|
+
/**
|
|
10
|
+
* Immutable KV budget snapshot for one tick of the agent loop
|
|
11
|
+
*
|
|
12
|
+
* Created from `SessionContext._storeKvPressure()` which returns
|
|
13
|
+
* `{ nCtx, cellsUsed, remaining }` where `remaining = nCtx - cellsUsed`.
|
|
14
|
+
* `cellsUsed` is a monotonic counter in `BranchStore` — it increments on
|
|
15
|
+
* every `decode_each` / `decode_scatter` but does **not** decrement on
|
|
16
|
+
* individual branch prune (only resets on bulk ops like `retainOnly` and
|
|
17
|
+
* `drain`). This means `remaining` is a conservative lower bound that
|
|
18
|
+
* becomes increasingly pessimistic as branches are pruned mid-run.
|
|
19
|
+
*
|
|
20
|
+
* Two thresholds partition `remaining` into three zones:
|
|
21
|
+
*
|
|
22
|
+
* ```
|
|
23
|
+
* ┌──────────────────────────────────────────────────────┐
|
|
24
|
+
* │ nCtx │
|
|
25
|
+
* │ ┌──────────┬───────────────────┬──────────────────┐ │
|
|
26
|
+
* │ │cellsUsed │ headroom > 0 │ softLimit │ │
|
|
27
|
+
* │ │ (in use) │ (new work OK) │ (reserved) │ │
|
|
28
|
+
* │ └──────────┴───────────────────┴──────────────────┘ │
|
|
29
|
+
* │ ◄── remaining ──► │ │
|
|
30
|
+
* │ │ │
|
|
31
|
+
* │ headroom = remaining - softLimit │
|
|
32
|
+
* │ critical = remaining < hardLimit │
|
|
33
|
+
* └──────────────────────────────────────────────────────┘
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* - **headroom > 0** — room for new work (tool results, generation)
|
|
37
|
+
* - **headroom ≤ 0** — over budget. SETTLE rejects tool results, PRODUCE
|
|
38
|
+
* hard-cuts non-terminal tool calls. Terminal tools still pass.
|
|
39
|
+
* - **critical** — remaining below hardLimit. Agents killed before
|
|
40
|
+
* `produceSync()` to prevent llama_decode crashes.
|
|
41
|
+
*
|
|
42
|
+
* @category Agents
|
|
43
|
+
*/
|
|
44
|
+
class ContextPressure {
|
|
45
|
+
/** Default softLimit: 1024 tokens reserved for downstream work */
|
|
46
|
+
static DEFAULT_SOFT_LIMIT = 1024;
|
|
47
|
+
/** Default hardLimit: 128 tokens crash-prevention floor */
|
|
48
|
+
static DEFAULT_HARD_LIMIT = 128;
|
|
49
|
+
/**
|
|
50
|
+
* KV slots remaining (`nCtx - cellsUsed`).
|
|
51
|
+
* Infinity when nCtx ≤ 0 (no context limit).
|
|
52
|
+
* Conservative: may undercount actual free space when branches have been
|
|
53
|
+
* pruned, since `cellsUsed` is monotonic.
|
|
54
|
+
*/
|
|
55
|
+
remaining;
|
|
56
|
+
/** Remaining KV floor — tokens reserved for downstream work */
|
|
57
|
+
softLimit;
|
|
58
|
+
/** Crash-prevention floor — agents killed when remaining drops below */
|
|
59
|
+
hardLimit;
|
|
60
|
+
constructor(ctx, opts) {
|
|
61
|
+
const p = ctx._storeKvPressure();
|
|
62
|
+
this.remaining = p.nCtx <= 0 ? Infinity : p.remaining;
|
|
63
|
+
this.softLimit = opts?.softLimit ?? ContextPressure.DEFAULT_SOFT_LIMIT;
|
|
64
|
+
this.hardLimit = opts?.hardLimit ?? ContextPressure.DEFAULT_HARD_LIMIT;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Tokens available for new work: `remaining - softLimit`.
|
|
68
|
+
* Positive means room to accept tool results or continue generating.
|
|
69
|
+
* Negative means over budget — SETTLE rejects, PRODUCE hard-cuts.
|
|
70
|
+
*/
|
|
71
|
+
get headroom() { return this.remaining - this.softLimit; }
|
|
72
|
+
/** `remaining < hardLimit` — agent must not call `produceSync()`. */
|
|
73
|
+
get critical() { return this.remaining < this.hardLimit; }
|
|
74
|
+
/** Can `tokenCount` tokens fit while staying above softLimit? */
|
|
75
|
+
canFit(tokenCount) { return tokenCount <= this.headroom; }
|
|
76
|
+
}
|
|
77
|
+
exports.ContextPressure = ContextPressure;
|
|
78
|
+
/**
|
|
79
|
+
* Fork an agent from a parent branch with its own system prompt and task.
|
|
80
|
+
*
|
|
81
|
+
* Generator — uses sync native calls so Effection sees everything.
|
|
82
|
+
* On scope exit (error, cancellation), `ensure()` prunes the branch
|
|
83
|
+
* automatically — the orphaned-branch leak is structurally impossible.
|
|
84
|
+
*/
|
|
85
|
+
function* setupAgent(parent, task, ctx) {
|
|
86
|
+
const messages = [
|
|
87
|
+
{ role: 'system', content: task.systemPrompt },
|
|
88
|
+
{ role: 'user', content: task.content },
|
|
89
|
+
];
|
|
90
|
+
const fmtOpts = task.tools ? { tools: task.tools } : {};
|
|
91
|
+
const fmt = ctx.formatChatSync(JSON.stringify(messages), fmtOpts);
|
|
92
|
+
if (task.tools && (fmt.format === sdk_1.CHAT_FORMAT_CONTENT_ONLY || fmt.format === sdk_1.CHAT_FORMAT_GENERIC)) {
|
|
93
|
+
// Error before fork — no branch to clean up
|
|
94
|
+
throw new Error('Model does not support tool calling. Please use a model with native tool support (e.g. Qwen3, Llama 3.x, Mistral).');
|
|
95
|
+
}
|
|
96
|
+
const branch = parent.forkSync();
|
|
97
|
+
yield* (0, effection_1.ensure)(() => { if (!branch.disposed)
|
|
98
|
+
branch.pruneSync(); });
|
|
99
|
+
const sep = ctx.getTurnSeparator();
|
|
100
|
+
const suffixTokens = [...sep, ...ctx.tokenizeSync(fmt.prompt, false)];
|
|
101
|
+
if (task.seed != null)
|
|
102
|
+
branch.reseedSampler(task.seed);
|
|
103
|
+
return {
|
|
104
|
+
agent: {
|
|
105
|
+
id: branch.handle,
|
|
106
|
+
parentId: parent.handle,
|
|
107
|
+
branch,
|
|
108
|
+
state: 'generating',
|
|
109
|
+
fmt: {
|
|
110
|
+
format: fmt.format,
|
|
111
|
+
reasoningFormat: fmt.reasoningFormat,
|
|
112
|
+
thinkingForcedOpen: fmt.thinkingForcedOpen,
|
|
113
|
+
parser: fmt.parser,
|
|
114
|
+
grammar: fmt.grammar,
|
|
115
|
+
grammarLazy: fmt.grammarLazy,
|
|
116
|
+
grammarTriggers: fmt.grammarTriggers,
|
|
117
|
+
},
|
|
118
|
+
rawOutput: '',
|
|
119
|
+
tokenCount: 0,
|
|
120
|
+
toolCallCount: 0,
|
|
121
|
+
turns: 0,
|
|
122
|
+
findings: null,
|
|
123
|
+
traceBuffer: [],
|
|
124
|
+
},
|
|
125
|
+
suffixTokens,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Concurrent agent generation loop as an Effection resource
|
|
130
|
+
*
|
|
131
|
+
* Runs N agents in parallel using a three-phase tick loop over shared
|
|
132
|
+
* {@link BranchStore} infrastructure. Each agent forks from a parent
|
|
133
|
+
* branch, generates tokens, invokes tools, and reports findings.
|
|
134
|
+
*
|
|
135
|
+
* **Three-phase tick loop:**
|
|
136
|
+
* 1. **PRODUCE** — sample all active agents via `produceSync()` (no async gap)
|
|
137
|
+
* 2. **COMMIT** — single GPU call via `store.commit()` for all produced tokens
|
|
138
|
+
* 3. **SETTLE** — drain settled tool results, batch prefill, reset grammars
|
|
139
|
+
*
|
|
140
|
+
* Tool dispatch uses `scope.run()` for eager start — tool executions run as
|
|
141
|
+
* children of the agent pool scope and are cancelled if the scope exits.
|
|
142
|
+
*
|
|
143
|
+
* **Resource semantics:** `provide()` suspends after all agents complete,
|
|
144
|
+
* keeping branches alive so the caller can fork from them (e.g. for
|
|
145
|
+
* verification). Branches are pruned when the scope exits — each branch's
|
|
146
|
+
* `ensure()` from `setupAgent` handles cleanup automatically.
|
|
147
|
+
*
|
|
148
|
+
* For automatic branch cleanup on return, use {@link runAgents} instead.
|
|
149
|
+
*
|
|
150
|
+
* @param opts - Pool configuration: tasks, tools, sampling params, max turns
|
|
151
|
+
* @returns Agent pool result with per-agent findings and aggregate statistics
|
|
152
|
+
*
|
|
153
|
+
* @example Shared root with agent pool
|
|
154
|
+
* ```typescript
|
|
155
|
+
* const pool = yield* withSharedRoot(
|
|
156
|
+
* { systemPrompt: RESEARCH_PROMPT, tools: toolsJson },
|
|
157
|
+
* function*(root) {
|
|
158
|
+
* return yield* useAgentPool({
|
|
159
|
+
* tasks: questions.map(q => ({
|
|
160
|
+
* systemPrompt: RESEARCH_PROMPT,
|
|
161
|
+
* content: q,
|
|
162
|
+
* tools: toolsJson,
|
|
163
|
+
* parent: root,
|
|
164
|
+
* })),
|
|
165
|
+
* tools: toolMap,
|
|
166
|
+
* maxTurns: 6,
|
|
167
|
+
* });
|
|
168
|
+
* },
|
|
169
|
+
* );
|
|
170
|
+
* ```
|
|
171
|
+
*
|
|
172
|
+
* @category Agents
|
|
173
|
+
*/
|
|
174
|
+
function useAgentPool(opts) {
|
|
175
|
+
return (0, effection_1.resource)(function* (provide) {
|
|
176
|
+
const ctx = yield* context_1.Ctx.expect();
|
|
177
|
+
const store = yield* context_1.Store.expect();
|
|
178
|
+
const events = yield* context_1.Events.expect();
|
|
179
|
+
const scope = yield* (0, effection_1.useScope)();
|
|
180
|
+
// Bridge for onProgress callbacks — Signal is correct here (external callback).
|
|
181
|
+
// A spawned forwarder drains the bridge into the Channel with proper scope context.
|
|
182
|
+
const progressBridge = (0, effection_1.createSignal)();
|
|
183
|
+
yield* (0, effection_1.spawn)(function* () {
|
|
184
|
+
for (const ev of yield* (0, effection_1.each)(progressBridge)) {
|
|
185
|
+
yield* events.send(ev);
|
|
186
|
+
yield* effection_1.each.next();
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
const { tasks, tools, maxTurns = 100, terminalTool, trace = false, pressure: pressureOpts } = opts;
|
|
190
|
+
// Whether the pool's tool registry contains tools besides the terminal tool.
|
|
191
|
+
// When false, agents are allowed to call the terminal tool as their first
|
|
192
|
+
// action (e.g. reporter sub-agents that only have `report()`). When true,
|
|
193
|
+
// the first tool call must be a non-terminal tool to prevent agents from
|
|
194
|
+
// immediately reporting without doing any work.
|
|
195
|
+
//
|
|
196
|
+
// IMPORTANT: this checks the pool's `tools` registry, not individual task
|
|
197
|
+
// schemas (`task.tools`). A reporter pool must pass only the terminal tool
|
|
198
|
+
// in its registry — passing the full tool map makes this flag true and
|
|
199
|
+
// traps reporters in an infinite rejection loop.
|
|
200
|
+
const hasNonTerminalTools = terminalTool ? [...tools.keys()].some(k => k !== terminalTool) : tools.size > 0;
|
|
201
|
+
// ── Setup: fork branches, collect suffix tokens ──────────
|
|
202
|
+
// setupAgent is now a generator — each branch registers its own ensure()
|
|
203
|
+
// for cleanup. No manual try/finally needed here.
|
|
204
|
+
const agents = [];
|
|
205
|
+
const prefillSetup = [];
|
|
206
|
+
for (const task of tasks) {
|
|
207
|
+
const parent = task.parent;
|
|
208
|
+
if (!parent)
|
|
209
|
+
throw new Error('useAgentPool: each task must have a parent branch');
|
|
210
|
+
const { agent, suffixTokens } = yield* setupAgent(parent, task, ctx);
|
|
211
|
+
agents.push(agent);
|
|
212
|
+
prefillSetup.push([agent.branch, suffixTokens]);
|
|
213
|
+
}
|
|
214
|
+
// Batch prefill all agent suffixes — pressure-gated.
|
|
215
|
+
// Each suffix is the full formatted chat (system prompt + tools JSON +
|
|
216
|
+
// user message + generation prompt), tokenized via formatChatSync().
|
|
217
|
+
// Suffix cost is model-dependent: ~250-400 tokens per agent depending
|
|
218
|
+
// on chat template verbosity and tool schema size.
|
|
219
|
+
const initPressure = new ContextPressure(ctx, pressureOpts);
|
|
220
|
+
const totalSuffix = prefillSetup.reduce((s, [, t]) => s + t.length, 0);
|
|
221
|
+
if (!initPressure.canFit(totalSuffix)) {
|
|
222
|
+
// Not enough room — drop agents from the end until it fits
|
|
223
|
+
while (prefillSetup.length > 0) {
|
|
224
|
+
const needed = prefillSetup.reduce((s, [, t]) => s + t.length, 0);
|
|
225
|
+
if (initPressure.canFit(needed))
|
|
226
|
+
break;
|
|
227
|
+
prefillSetup.pop();
|
|
228
|
+
const dropped = agents.pop();
|
|
229
|
+
dropped.state = 'done';
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (prefillSetup.length > 0) {
|
|
233
|
+
yield* (0, effection_1.call)(() => store.prefill(prefillSetup));
|
|
234
|
+
}
|
|
235
|
+
// Emit spawn events — TUI uses parentAgentId to detect sub-agents
|
|
236
|
+
for (const a of agents) {
|
|
237
|
+
yield* events.send({ type: 'agent:spawn', agentId: a.id, parentAgentId: a.parentId });
|
|
238
|
+
}
|
|
239
|
+
// ── Lazy grammar setup ───────────────────────────────────
|
|
240
|
+
const applyLazyGrammar = (a) => {
|
|
241
|
+
if (a.fmt.grammar && a.fmt.grammarLazy && a.fmt.grammarTriggers.length > 0) {
|
|
242
|
+
const triggers = a.fmt.grammarTriggers.map(t => {
|
|
243
|
+
if (t.type === sdk_1.GrammarTriggerType.WORD) {
|
|
244
|
+
const nlIdx = t.value.indexOf('\n');
|
|
245
|
+
if (nlIdx >= 0 && nlIdx < t.value.length - 1) {
|
|
246
|
+
return { ...t, value: t.value.slice(0, nlIdx + 1) };
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return t;
|
|
250
|
+
});
|
|
251
|
+
a.branch.setGrammarLazy(a.fmt.grammar, triggers);
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
for (const a of agents)
|
|
255
|
+
applyLazyGrammar(a);
|
|
256
|
+
// ── Tool dispatch coordination ───────────────────────────
|
|
257
|
+
// Plain JS buffer: spawned tool tasks push synchronously on completion.
|
|
258
|
+
// SETTLE drains with splice(0). Safe because generators are synchronous
|
|
259
|
+
// between yields — spawns can only push at yield points (during COMMIT's
|
|
260
|
+
// yield* call()), and SETTLE runs after COMMIT in the same tick.
|
|
261
|
+
const settledBuffer = [];
|
|
262
|
+
const agentById = new Map(agents.map(a => [a.id, a]));
|
|
263
|
+
// Track pending tool count for idle detection
|
|
264
|
+
let pendingToolCount = 0;
|
|
265
|
+
// Resolve function for idle wake — set when all agents stall
|
|
266
|
+
let wakeIdle = null;
|
|
267
|
+
let steps = 0;
|
|
268
|
+
let totalToolCalls = 0;
|
|
269
|
+
const counters = {
|
|
270
|
+
warmPrefillCalls: 0,
|
|
271
|
+
warmPrefillBranches: 0,
|
|
272
|
+
stalledTicks: 0,
|
|
273
|
+
maxConcurrentTools: 0,
|
|
274
|
+
idleTicks: 0,
|
|
275
|
+
};
|
|
276
|
+
function* dispatchTool(agent, tc) {
|
|
277
|
+
let toolArgs;
|
|
278
|
+
try {
|
|
279
|
+
toolArgs = JSON.parse(tc.arguments);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
toolArgs = {};
|
|
283
|
+
}
|
|
284
|
+
const callId = tc.id || `call_${agent.toolCallCount}`;
|
|
285
|
+
agent.toolCallCount++;
|
|
286
|
+
totalToolCalls++;
|
|
287
|
+
agent.turns++;
|
|
288
|
+
agent.state = 'awaiting_tool';
|
|
289
|
+
yield* events.send({ type: 'agent:tool_call', agentId: agent.id, tool: tc.name, args: tc.arguments });
|
|
290
|
+
const tool = tools.get(tc.name);
|
|
291
|
+
pendingToolCount++;
|
|
292
|
+
counters.maxConcurrentTools = Math.max(counters.maxConcurrentTools, pendingToolCount);
|
|
293
|
+
// scope.run() — eager start, child of agent pool scope, cancelled if scope exits.
|
|
294
|
+
// spawn() is lazy (Operation), but we're in a generator — scope.run() is eager.
|
|
295
|
+
scope.run(function* () {
|
|
296
|
+
try {
|
|
297
|
+
const toolContext = {
|
|
298
|
+
onProgress: (p) => {
|
|
299
|
+
// Signal bridge — onProgress is an external callback, Signal.send() is correct here.
|
|
300
|
+
progressBridge.send({ type: 'agent:tool_progress', agentId: agent.id, tool: tc.name, filled: p.filled, total: p.total });
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
const result = yield* (0, effection_1.call)(() => tool ? tool.execute(toolArgs, toolContext) : Promise.resolve({ error: `Unknown tool: ${tc.name}` }));
|
|
304
|
+
const resultStr = JSON.stringify(result);
|
|
305
|
+
yield* events.send({ type: 'agent:tool_result', agentId: agent.id, tool: tc.name, result: resultStr });
|
|
306
|
+
const prefillTokens = (0, sdk_2.buildToolResultDelta)(ctx, resultStr, callId);
|
|
307
|
+
settledBuffer.push({ agentId: agent.id, prefillTokens, toolName: tc.name });
|
|
308
|
+
}
|
|
309
|
+
catch (err) {
|
|
310
|
+
agent.state = 'done';
|
|
311
|
+
agent.findings = `Tool error: ${err.message}`;
|
|
312
|
+
}
|
|
313
|
+
finally {
|
|
314
|
+
pendingToolCount--;
|
|
315
|
+
if (wakeIdle) {
|
|
316
|
+
wakeIdle();
|
|
317
|
+
wakeIdle = null;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
// ── Three-phase tick loop ────────────────────────────────
|
|
323
|
+
for (;;) {
|
|
324
|
+
// -- Phase 1: PRODUCE -- sample from active agents
|
|
325
|
+
const pressure = new ContextPressure(ctx, pressureOpts);
|
|
326
|
+
if (trace && (pressure.critical || pressure.headroom < 0)) {
|
|
327
|
+
const p = ctx._storeKvPressure();
|
|
328
|
+
try {
|
|
329
|
+
process.stderr.write(`[PRODUCE] ${pressure.critical ? 'CRITICAL' : 'SOFT_LIMIT'} remaining=${p.remaining} headroom=${pressure.headroom} cellsUsed=${p.cellsUsed} nCtx=${p.nCtx}\n`);
|
|
330
|
+
}
|
|
331
|
+
catch { }
|
|
332
|
+
}
|
|
333
|
+
const entries = [];
|
|
334
|
+
for (const a of agents) {
|
|
335
|
+
if (a.state !== 'generating')
|
|
336
|
+
continue;
|
|
337
|
+
if (pressure.critical) {
|
|
338
|
+
a.state = 'done';
|
|
339
|
+
yield* events.send({ type: 'agent:done', agentId: a.id });
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
const { token, text, isStop } = a.branch.produceSync();
|
|
343
|
+
if (isStop) {
|
|
344
|
+
const parsed = ctx.parseChatOutput(a.rawOutput, a.fmt.format, {
|
|
345
|
+
reasoningFormat: a.fmt.reasoningFormat,
|
|
346
|
+
thinkingForcedOpen: a.fmt.thinkingForcedOpen,
|
|
347
|
+
parser: a.fmt.parser,
|
|
348
|
+
});
|
|
349
|
+
const tc = parsed.toolCalls[0];
|
|
350
|
+
if (!tc) {
|
|
351
|
+
a.state = 'done';
|
|
352
|
+
if (!a.findings && a.toolCallCount > 0 && parsed.content) {
|
|
353
|
+
a.findings = parsed.content;
|
|
354
|
+
yield* events.send({ type: 'agent:report', agentId: a.id, findings: a.findings });
|
|
355
|
+
}
|
|
356
|
+
yield* events.send({ type: 'agent:done', agentId: a.id });
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
// Over budget: deny non-terminal tool calls when the agent has
|
|
360
|
+
// exceeded maxTurns or KV headroom is negative. Terminal tools
|
|
361
|
+
// (e.g. `report()`) are always allowed through — an agent that has
|
|
362
|
+
// done research and wants to report should never be blocked by
|
|
363
|
+
// pressure, since the report call itself consumes minimal KV.
|
|
364
|
+
const overBudget = (a.turns >= maxTurns || pressure.headroom < 0)
|
|
365
|
+
&& (!terminalTool || tc.name !== terminalTool);
|
|
366
|
+
if (overBudget) {
|
|
367
|
+
a.state = 'done';
|
|
368
|
+
yield* events.send({ type: 'agent:done', agentId: a.id });
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
// Terminal tool — intercept, extract findings, mark done.
|
|
372
|
+
if (terminalTool && tc.name === terminalTool) {
|
|
373
|
+
if (a.toolCallCount === 0 && hasNonTerminalTools) {
|
|
374
|
+
const callId = tc.id || `call_${a.toolCallCount}`;
|
|
375
|
+
const errorMsg = 'You must perform research before reporting. Call at least one tool first.';
|
|
376
|
+
a.turns++;
|
|
377
|
+
a.state = 'awaiting_tool';
|
|
378
|
+
pendingToolCount++;
|
|
379
|
+
scope.run(function* () {
|
|
380
|
+
try {
|
|
381
|
+
const prefillTokens = (0, sdk_2.buildToolResultDelta)(ctx, JSON.stringify({ error: errorMsg }), callId);
|
|
382
|
+
settledBuffer.push({ agentId: a.id, prefillTokens, toolName: tc.name });
|
|
383
|
+
}
|
|
384
|
+
finally {
|
|
385
|
+
pendingToolCount--;
|
|
386
|
+
if (wakeIdle) {
|
|
387
|
+
wakeIdle();
|
|
388
|
+
wakeIdle = null;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
a.rawOutput = '';
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
try {
|
|
396
|
+
a.findings = JSON.parse(tc.arguments).findings;
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
a.findings = tc.arguments;
|
|
400
|
+
}
|
|
401
|
+
a.state = 'done';
|
|
402
|
+
a.toolCallCount++;
|
|
403
|
+
totalToolCalls++;
|
|
404
|
+
yield* events.send({ type: 'agent:tool_call', agentId: a.id, tool: tc.name, args: tc.arguments });
|
|
405
|
+
yield* events.send({ type: 'agent:report', agentId: a.id, findings: a.findings });
|
|
406
|
+
yield* events.send({ type: 'agent:done', agentId: a.id });
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
// Fire-and-forget — dispatch tool without blocking the decode loop
|
|
410
|
+
yield* dispatchTool(a, tc);
|
|
411
|
+
a.rawOutput = '';
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
entries.push([a.branch, token]);
|
|
415
|
+
a.rawOutput += text;
|
|
416
|
+
a.tokenCount++;
|
|
417
|
+
if (trace) {
|
|
418
|
+
const entropy = a.branch.modelEntropy();
|
|
419
|
+
const surprisal = a.branch.modelSurprisal(token);
|
|
420
|
+
a.traceBuffer.push({ text, entropy, surprisal });
|
|
421
|
+
yield* events.send({
|
|
422
|
+
type: 'agent:produce', agentId: a.id, text, tokenCount: a.tokenCount,
|
|
423
|
+
entropy, surprisal,
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
yield* events.send({ type: 'agent:produce', agentId: a.id, text, tokenCount: a.tokenCount });
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// -- Phase 2: COMMIT -- batch-decode produced tokens
|
|
431
|
+
if (entries.length > 0) {
|
|
432
|
+
yield* (0, effection_1.call)(() => store.commit(entries));
|
|
433
|
+
steps++;
|
|
434
|
+
}
|
|
435
|
+
// -- Phase 3: SETTLE -- drain settled tool buffer, batch prefill
|
|
436
|
+
const settled = settledBuffer.splice(0);
|
|
437
|
+
if (settled.length > 0) {
|
|
438
|
+
// Fresh snapshot — Phase 2 commits may have advanced positions
|
|
439
|
+
const settlePressure = new ContextPressure(ctx, pressureOpts);
|
|
440
|
+
let headroom = settlePressure.headroom;
|
|
441
|
+
if (trace) {
|
|
442
|
+
const p = ctx._storeKvPressure();
|
|
443
|
+
const items = settled.map(s => `${s.toolName}:${s.prefillTokens.length}`).join(', ');
|
|
444
|
+
try {
|
|
445
|
+
process.stderr.write(`[SETTLE] remaining=${p.remaining} headroom=${headroom} cellsUsed=${p.cellsUsed} nCtx=${p.nCtx} items=[${items}]\n`);
|
|
446
|
+
}
|
|
447
|
+
catch { }
|
|
448
|
+
}
|
|
449
|
+
const prefillPairs = [];
|
|
450
|
+
const settledAgents = [];
|
|
451
|
+
for (const item of settled) {
|
|
452
|
+
const a = agentById.get(item.agentId);
|
|
453
|
+
if (!a || a.state === 'done')
|
|
454
|
+
continue;
|
|
455
|
+
if (item.prefillTokens.length > headroom) {
|
|
456
|
+
if (trace) {
|
|
457
|
+
try {
|
|
458
|
+
process.stderr.write(`[SETTLE] REJECT ${item.toolName}:${item.prefillTokens.length} > headroom=${headroom}\n`);
|
|
459
|
+
}
|
|
460
|
+
catch { }
|
|
461
|
+
}
|
|
462
|
+
a.state = 'done';
|
|
463
|
+
yield* events.send({ type: 'agent:done', agentId: a.id });
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
prefillPairs.push([a.branch, item.prefillTokens]);
|
|
467
|
+
settledAgents.push(a);
|
|
468
|
+
headroom -= item.prefillTokens.length;
|
|
469
|
+
}
|
|
470
|
+
if (prefillPairs.length > 0) {
|
|
471
|
+
if (trace) {
|
|
472
|
+
const totalPrefill = prefillPairs.reduce((s, [, t]) => s + t.length, 0);
|
|
473
|
+
try {
|
|
474
|
+
process.stderr.write(`[SETTLE] PREFILL ${prefillPairs.length} branches, ${totalPrefill} tokens, headroom_after=${headroom}\n`);
|
|
475
|
+
}
|
|
476
|
+
catch { }
|
|
477
|
+
}
|
|
478
|
+
yield* (0, effection_1.call)(() => store.prefill(prefillPairs));
|
|
479
|
+
counters.warmPrefillCalls++;
|
|
480
|
+
counters.warmPrefillBranches += prefillPairs.length;
|
|
481
|
+
// Only NOW transition state + reset grammar
|
|
482
|
+
for (const a of settledAgents) {
|
|
483
|
+
a.state = 'generating';
|
|
484
|
+
a.rawOutput = '';
|
|
485
|
+
applyLazyGrammar(a);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// -- Termination + idle yield
|
|
490
|
+
const allDone = agents.every(a => a.state === 'done') && pendingToolCount === 0;
|
|
491
|
+
if (allDone)
|
|
492
|
+
break;
|
|
493
|
+
if (entries.length === 0 && pendingToolCount > 0) {
|
|
494
|
+
counters.stalledTicks++;
|
|
495
|
+
if (settled.length === 0) {
|
|
496
|
+
// Nothing produced, nothing settled — yield until a tool resolves
|
|
497
|
+
yield* (0, effection_1.action)((resolve) => {
|
|
498
|
+
wakeIdle = resolve;
|
|
499
|
+
return () => { wakeIdle = null; };
|
|
500
|
+
});
|
|
501
|
+
counters.idleTicks++;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
// ── Provide result — suspends, branches stay alive ───────
|
|
506
|
+
// Branch cleanup is handled by each branch's ensure() from setupAgent —
|
|
507
|
+
// when this resource's scope exits, all ensure() callbacks fire.
|
|
508
|
+
const result = {
|
|
509
|
+
agents: agents.map(a => ({
|
|
510
|
+
agentId: a.id,
|
|
511
|
+
parentAgentId: a.parentId,
|
|
512
|
+
branch: a.branch,
|
|
513
|
+
findings: a.findings,
|
|
514
|
+
toolCallCount: a.toolCallCount,
|
|
515
|
+
tokenCount: a.tokenCount,
|
|
516
|
+
ppl: a.branch.perplexity,
|
|
517
|
+
samplingPpl: a.branch.samplingPerplexity,
|
|
518
|
+
trace: trace ? a.traceBuffer : undefined,
|
|
519
|
+
})),
|
|
520
|
+
totalTokens: agents.reduce((s, a) => s + a.tokenCount, 0),
|
|
521
|
+
totalToolCalls,
|
|
522
|
+
steps,
|
|
523
|
+
counters,
|
|
524
|
+
};
|
|
525
|
+
yield* provide(result);
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
//# sourceMappingURL=agent-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-pool.js","sourceRoot":"","sources":["../src/agent-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SessionContext } from '@lloyal-labs/sdk';
|
|
2
|
+
import type { BranchStore } from '@lloyal-labs/sdk';
|
|
3
|
+
import type { Channel } from 'effection';
|
|
4
|
+
import type { AgentEvent } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Effection context holding the active {@link SessionContext}
|
|
7
|
+
*
|
|
8
|
+
* Set by {@link initAgents} in the caller's scope. All agent operations
|
|
9
|
+
* (`generate`, `diverge`, `useAgentPool`, `withSharedRoot`) read from this
|
|
10
|
+
* context via `yield* Ctx.expect()`.
|
|
11
|
+
*
|
|
12
|
+
* @category Agents
|
|
13
|
+
*/
|
|
14
|
+
export declare const Ctx: import("effection").Context<SessionContext>;
|
|
15
|
+
/**
|
|
16
|
+
* Effection context holding the active {@link BranchStore}
|
|
17
|
+
*
|
|
18
|
+
* Set by {@link initAgents}. Used by {@link diverge} and {@link useAgentPool}
|
|
19
|
+
* for batched commit/prefill across multiple branches.
|
|
20
|
+
*
|
|
21
|
+
* @category Agents
|
|
22
|
+
*/
|
|
23
|
+
export declare const Store: import("effection").Context<BranchStore>;
|
|
24
|
+
/**
|
|
25
|
+
* Effection context holding the agent event channel
|
|
26
|
+
*
|
|
27
|
+
* Set by {@link initAgents}. {@link useAgentPool} emits {@link AgentEvent}
|
|
28
|
+
* values through this channel via `yield* channel.send()`.
|
|
29
|
+
*
|
|
30
|
+
* @category Agents
|
|
31
|
+
*/
|
|
32
|
+
export declare const Events: import("effection").Context<Channel<AgentEvent, void>>;
|
|
33
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,GAAG,6CAA8C,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,0CAA6C,CAAC;AAEhE;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,wDAA4D,CAAC"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Events = exports.Store = exports.Ctx = void 0;
|
|
4
|
+
const effection_1 = require("effection");
|
|
5
|
+
/**
|
|
6
|
+
* Effection context holding the active {@link SessionContext}
|
|
7
|
+
*
|
|
8
|
+
* Set by {@link initAgents} in the caller's scope. All agent operations
|
|
9
|
+
* (`generate`, `diverge`, `useAgentPool`, `withSharedRoot`) read from this
|
|
10
|
+
* context via `yield* Ctx.expect()`.
|
|
11
|
+
*
|
|
12
|
+
* @category Agents
|
|
13
|
+
*/
|
|
14
|
+
exports.Ctx = (0, effection_1.createContext)('lloyal.ctx');
|
|
15
|
+
/**
|
|
16
|
+
* Effection context holding the active {@link BranchStore}
|
|
17
|
+
*
|
|
18
|
+
* Set by {@link initAgents}. Used by {@link diverge} and {@link useAgentPool}
|
|
19
|
+
* for batched commit/prefill across multiple branches.
|
|
20
|
+
*
|
|
21
|
+
* @category Agents
|
|
22
|
+
*/
|
|
23
|
+
exports.Store = (0, effection_1.createContext)('lloyal.store');
|
|
24
|
+
/**
|
|
25
|
+
* Effection context holding the agent event channel
|
|
26
|
+
*
|
|
27
|
+
* Set by {@link initAgents}. {@link useAgentPool} emits {@link AgentEvent}
|
|
28
|
+
* values through this channel via `yield* channel.send()`.
|
|
29
|
+
*
|
|
30
|
+
* @category Agents
|
|
31
|
+
*/
|
|
32
|
+
exports.Events = (0, effection_1.createContext)('lloyal.events');
|
|
33
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAM1C;;;;;;;;GAQG;AACU,QAAA,GAAG,GAAG,IAAA,yBAAa,EAAiB,YAAY,CAAC,CAAC;AAE/D;;;;;;;GAOG;AACU,QAAA,KAAK,GAAG,IAAA,yBAAa,EAAc,cAAc,CAAC,CAAC;AAEhE;;;;;;;GAOG;AACU,QAAA,MAAM,GAAG,IAAA,yBAAa,EAA4B,eAAe,CAAC,CAAC"}
|