@lloyal-labs/lloyal-agents 1.5.6 → 1.7.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.
Files changed (55) hide show
  1. package/dist/Agent.d.ts +34 -1
  2. package/dist/Agent.d.ts.map +1 -1
  3. package/dist/Agent.js +65 -1
  4. package/dist/Agent.js.map +1 -1
  5. package/dist/AgentPolicy.d.ts +51 -8
  6. package/dist/AgentPolicy.d.ts.map +1 -1
  7. package/dist/AgentPolicy.js +105 -63
  8. package/dist/AgentPolicy.js.map +1 -1
  9. package/dist/Tool.d.ts +5 -7
  10. package/dist/Tool.d.ts.map +1 -1
  11. package/dist/Tool.js +5 -7
  12. package/dist/Tool.js.map +1 -1
  13. package/dist/agent-pool.d.ts +9 -3
  14. package/dist/agent-pool.d.ts.map +1 -1
  15. package/dist/agent-pool.js +446 -407
  16. package/dist/agent-pool.js.map +1 -1
  17. package/dist/combinators.d.ts +29 -0
  18. package/dist/combinators.d.ts.map +1 -0
  19. package/dist/combinators.js +37 -0
  20. package/dist/combinators.js.map +1 -0
  21. package/dist/create-agent-pool.d.ts +78 -0
  22. package/dist/create-agent-pool.d.ts.map +1 -0
  23. package/dist/create-agent-pool.js +60 -0
  24. package/dist/create-agent-pool.js.map +1 -0
  25. package/dist/index.d.ts +6 -5
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +8 -8
  28. package/dist/index.js.map +1 -1
  29. package/dist/source.d.ts.map +1 -1
  30. package/dist/source.js.map +1 -1
  31. package/dist/trace-types.d.ts +4 -2
  32. package/dist/trace-types.d.ts.map +1 -1
  33. package/dist/trace-writer.d.ts +4 -1
  34. package/dist/trace-writer.d.ts.map +1 -1
  35. package/dist/trace-writer.js +6 -2
  36. package/dist/trace-writer.js.map +1 -1
  37. package/dist/types.d.ts +9 -0
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/use-agent.d.ts +92 -0
  40. package/dist/use-agent.d.ts.map +1 -0
  41. package/dist/use-agent.js +131 -0
  42. package/dist/use-agent.js.map +1 -0
  43. package/package.json +2 -2
  44. package/dist/generate.d.ts +0 -77
  45. package/dist/generate.d.ts.map +0 -1
  46. package/dist/generate.js +0 -166
  47. package/dist/generate.js.map +0 -1
  48. package/dist/run-agents.d.ts +0 -39
  49. package/dist/run-agents.d.ts.map +0 -1
  50. package/dist/run-agents.js +0 -46
  51. package/dist/run-agents.js.map +0 -1
  52. package/dist/spawn-agents.d.ts +0 -104
  53. package/dist/spawn-agents.d.ts.map +0 -1
  54. package/dist/spawn-agents.js +0 -255
  55. package/dist/spawn-agents.js.map +0 -1
@@ -1,104 +0,0 @@
1
- import type { Operation } from 'effection';
2
- import type { Branch } from '@lloyal-labs/sdk';
3
- import { Tool } from './Tool';
4
- import type { JsonSchema } from './types';
5
- import type { AgentPoolResult } from './types';
6
- import type { AgentPolicy } from './AgentPolicy';
7
- import type { EntailmentScorer } from './source';
8
- /**
9
- * Configuration for the self-referential recursive tool.
10
- *
11
- * @category Agents
12
- */
13
- export interface RecursiveOpts {
14
- /** Tool name agents see in their toolkit. @default "delegate" */
15
- name?: string;
16
- /** Tool description shown in the agent's tool schema. */
17
- description?: string;
18
- /**
19
- * JSON schema for the recursive tool's arguments.
20
- * @default `{ type: 'object', properties: { tasks: { type: 'array', items: { type: 'string' } } }, required: ['tasks'] }`
21
- */
22
- argsSchema?: JsonSchema;
23
- /**
24
- * Extract task strings from parsed tool arguments.
25
- * @default `(args) => args.tasks as string[]`
26
- */
27
- extractTasks?: (args: Record<string, unknown>) => string[];
28
- }
29
- /**
30
- * Options for {@link spawnAgents}.
31
- *
32
- * @category Agents
33
- */
34
- export interface SpawnAgentsOpts {
35
- /** Data access tools (from a Source or custom). */
36
- tools: Tool[];
37
- /** System prompt for spawned agents. */
38
- systemPrompt: string;
39
- /** One task per agent — content string for each. */
40
- tasks: string[];
41
- /** Terminal tool name + instance. Pool intercepts calls to this tool and extracts results. */
42
- terminalTool?: {
43
- name: string;
44
- tool: Tool;
45
- };
46
- /** Max tool-use turns per agent before hard cut. @default 100 */
47
- maxTurns?: number;
48
- /**
49
- * Enable self-referential recursion. When truthy, a wrapper tool is
50
- * added to the toolkit that calls `spawnAgents()` recursively with
51
- * the same config. Agents can delegate sub-tasks at arbitrary depth,
52
- * bounded by KV pressure.
53
- *
54
- * Pass `true` for defaults, or an object to configure the tool's
55
- * name, description, args schema, and task extraction.
56
- */
57
- recursive?: boolean | RecursiveOpts;
58
- /** Prune agent branches immediately on report, freeing KV mid-pool. */
59
- pruneOnReport?: boolean;
60
- /** Custom agent policy. @default DefaultAgentPolicy */
61
- policy?: AgentPolicy;
62
- /** Enable structured trace events. */
63
- trace?: boolean;
64
- /** Parent branch for warm path (Continuous Context). Sub-agents inherit full attention state. */
65
- parent?: Branch;
66
- /** Entailment scorer for semantic coherence across recursive depths.
67
- * Created via {@link Source.createScorer}. Propagated to all inner pools. */
68
- scorer?: EntailmentScorer;
69
- /** Similarity threshold for echo detection. If all proposed sub-questions
70
- * score above this against the agent's own task, the delegation is rejected
71
- * as a paraphrase rather than a decomposition. @default 0.8 */
72
- echoThreshold?: number;
73
- /** When true, also check proposed questions against ancestor tasks via
74
- * walkAncestors(). Disabled by default to avoid false positives on
75
- * genuine narrowing. Enable after observing local echo check behaviour. */
76
- checkAncestorEcho?: boolean;
77
- }
78
- /**
79
- * Spawn parallel agents with tools, optionally self-referential.
80
- *
81
- * Creates a shared root, forks one agent per task, runs the four-phase
82
- * tick loop, and returns results. When `recursive` is enabled, a
83
- * delegate tool is added to the toolkit that calls `spawnAgents()`
84
- * again — enabling agents to delegate sub-tasks at arbitrary depth.
85
- *
86
- * This is the general-purpose orchestration primitive. The harness
87
- * controls the prompt, tools, recursion shape, and policy. Sources
88
- * just provide data access tools.
89
- *
90
- * @example Research harness
91
- * ```typescript
92
- * const result = yield* spawnAgents({
93
- * tools: source.tools,
94
- * systemPrompt: RESEARCH_PROMPT,
95
- * tasks: questions,
96
- * terminalTool: { name: 'report', tool: reportTool },
97
- * recursive: { name: 'web_research', extractTasks: (a) => a.questions as string[] },
98
- * });
99
- * ```
100
- *
101
- * @category Agents
102
- */
103
- export declare function spawnAgents(opts: SpawnAgentsOpts): Operation<AgentPoolResult>;
104
- //# sourceMappingURL=spawn-agents.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn-agents.d.ts","sourceRoot":"","sources":["../src/spawn-agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,SAAS,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAWjD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;CAC5D;AAID;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8FAA8F;IAC9F,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAC5C,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IACpC,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uDAAuD;IACvD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;kFAC8E;IAC9E,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;oEAEgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;gFAE4E;IAC5E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA8MD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAiB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,CAgD9E"}
@@ -1,255 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.spawnAgents = spawnAgents;
4
- const effection_1 = require("effection");
5
- const Tool_1 = require("./Tool");
6
- const context_1 = require("./context");
7
- const trace_scope_1 = require("./trace-scope");
8
- const toolkit_1 = require("./toolkit");
9
- const shared_root_1 = require("./shared-root");
10
- const agent_pool_1 = require("./agent-pool");
11
- // ── Recursive tool ───────────────────────────────────────────
12
- const DEFAULT_ARGS_SCHEMA = {
13
- type: 'object',
14
- properties: {
15
- tasks: {
16
- type: 'array',
17
- items: { type: 'string' },
18
- description: 'Sub-tasks to delegate to parallel agents',
19
- },
20
- },
21
- required: ['tasks'],
22
- };
23
- /**
24
- * Internal tool that calls spawnAgents() recursively.
25
- * Created by spawnAgents() when `recursive` is enabled.
26
- */
27
- class DelegateTool extends Tool_1.Tool {
28
- name;
29
- description;
30
- parameters;
31
- _spawnOpts;
32
- _extractTasks;
33
- _toolkit = null;
34
- constructor(name, description, argsSchema, extractTasks, spawnOpts) {
35
- super();
36
- this.name = name;
37
- this.description = description;
38
- this.parameters = argsSchema;
39
- this._extractTasks = extractTasks;
40
- this._spawnOpts = spawnOpts;
41
- }
42
- /** Wire the circular toolkit reference. Called after createToolkit(). */
43
- setToolkit(toolkit) {
44
- this._toolkit = toolkit;
45
- }
46
- *execute(args, context) {
47
- let tasks;
48
- try {
49
- tasks = this._extractTasks(args);
50
- }
51
- catch {
52
- return { error: 'Failed to extract tasks from arguments.' };
53
- }
54
- if (!Array.isArray(tasks) || tasks.length === 0) {
55
- return { error: 'Tasks must be a non-empty array of strings.' };
56
- }
57
- if (!this._toolkit) {
58
- throw new Error(`${this.name}: toolkit not wired. Internal error.`);
59
- }
60
- const tw = yield* context_1.Trace.expect();
61
- // Entailment gate: filter drifted/echoed tasks before spawning
62
- const scorer = context?.scorer;
63
- let filtered;
64
- if (scorer) {
65
- const allTasks = [...tasks];
66
- const scores = yield* (0, effection_1.call)(() => scorer.scoreEntailmentBatch(tasks));
67
- const surviving = [];
68
- const rejected = [];
69
- for (let i = 0; i < tasks.length; i++) {
70
- if (scorer.shouldProceed(scores[i])) {
71
- surviving.push(tasks[i]);
72
- }
73
- else {
74
- rejected.push({ task: tasks[i], score: scores[i] });
75
- }
76
- }
77
- if (rejected.length > 0)
78
- filtered = rejected;
79
- // Read calling agent for diagnostic — same read the echo guard will do
80
- let _diagAgent;
81
- try {
82
- _diagAgent = yield* context_1.CallingAgent.get();
83
- }
84
- catch { /* top-level */ }
85
- tw.write({
86
- traceId: tw.nextId(), parentTraceId: null, ts: performance.now(),
87
- type: 'entailment:delegate',
88
- tool: this.name,
89
- callingAgentId: _diagAgent?.id,
90
- callingAgentTaskLength: _diagAgent?.task?.length,
91
- callingAgentTask: _diagAgent?.task?.slice(0, 200),
92
- tasks: allTasks.map((text, i) => ({
93
- text: text.slice(0, 200),
94
- score: scores[i],
95
- kept: scorer.shouldProceed(scores[i]),
96
- })),
97
- });
98
- if (surviving.length === 0) {
99
- return { filtered, error: 'All proposed tasks drifted from the original query.' };
100
- }
101
- tasks = surviving;
102
- // Echo guard: reject if all surviving questions are paraphrases of the agent's task
103
- const echoThreshold = this._spawnOpts.echoThreshold ?? 0.8;
104
- let callingAgent;
105
- try {
106
- callingAgent = yield* context_1.CallingAgent.get();
107
- }
108
- catch { /* top-level */ }
109
- if (callingAgent?.task) {
110
- const echoScores = yield* (0, effection_1.call)(() => scorer.scoreSimilarityBatch(callingAgent.task, tasks));
111
- const minEchoScore = Math.min(...echoScores);
112
- const echoRejected = minEchoScore > echoThreshold;
113
- tw.write({
114
- traceId: tw.nextId(), parentTraceId: null, ts: performance.now(),
115
- type: 'entailment:delegate:echo',
116
- tool: this.name,
117
- agentTask: callingAgent.task.slice(0, 200),
118
- tasks: tasks.map((text, i) => ({ text: text.slice(0, 200), echoScore: echoScores[i] })),
119
- threshold: echoThreshold,
120
- rejected: echoRejected,
121
- });
122
- if (echoRejected) {
123
- return {
124
- filtered,
125
- echoRejected: true,
126
- error: 'Your sub-questions are too similar to your own task. You have already searched and read content on this topic. Call report() with what you found, including what you checked but could not find.',
127
- };
128
- }
129
- // Optional: check ancestor tasks
130
- if (this._spawnOpts.checkAncestorEcho) {
131
- const ancestorTasks = callingAgent.walkAncestors(a => a.task ? [a.task] : [])
132
- .filter(t => t !== callingAgent.task);
133
- for (const ancestorTask of ancestorTasks) {
134
- const ancestorScores = yield* (0, effection_1.call)(() => scorer.scoreSimilarityBatch(ancestorTask, tasks));
135
- if (Math.min(...ancestorScores) > echoThreshold) {
136
- tw.write({
137
- traceId: tw.nextId(), parentTraceId: null, ts: performance.now(),
138
- type: 'entailment:delegate:echo',
139
- tool: this.name,
140
- agentTask: ancestorTask.slice(0, 200),
141
- tasks: tasks.map((text, i) => ({ text: text.slice(0, 200), echoScore: ancestorScores[i] })),
142
- threshold: echoThreshold,
143
- rejected: true,
144
- });
145
- return {
146
- filtered,
147
- echoRejected: true,
148
- error: 'Your sub-questions echo an ancestor task. Report what you found instead of re-delegating.',
149
- };
150
- }
151
- }
152
- }
153
- }
154
- }
155
- const opts = this._spawnOpts;
156
- const toolkit = this._toolkit;
157
- const scope = (0, trace_scope_1.traceScope)(tw, null, `delegate:${this.name}`, { taskCount: tasks.length, filtered: filtered?.length ?? 0 });
158
- // Scorer propagation: same immutable scorer reaches all descendant pools
159
- const pool = yield* (0, shared_root_1.withSharedRoot)({ systemPrompt: opts.systemPrompt, tools: toolkit.toolsJson, parent: context?.branch }, function* (root) {
160
- return yield* (0, agent_pool_1.useAgentPool)({
161
- tasks: tasks.map((t) => ({
162
- systemPrompt: opts.systemPrompt,
163
- content: t,
164
- tools: toolkit.toolsJson,
165
- parent: root,
166
- })),
167
- tools: toolkit.toolMap,
168
- terminalTool: opts.terminalTool?.name,
169
- pruneOnReport: opts.pruneOnReport ?? true,
170
- maxTurns: opts.maxTurns,
171
- trace: opts.trace,
172
- policy: opts.policy,
173
- scorer: context?.scorer,
174
- });
175
- });
176
- const result = {
177
- results: pool.agents.map((a) => a.result).filter(Boolean),
178
- nestedResults: pool.agents.flatMap((a) => a.nestedResults ?? []),
179
- agentCount: pool.agents.length,
180
- totalTokens: pool.totalTokens,
181
- totalToolCalls: pool.totalToolCalls,
182
- ...(filtered ? { filtered } : {}),
183
- };
184
- scope.close();
185
- return result;
186
- }
187
- }
188
- // ── spawnAgents ──────────────────────────────────────────────
189
- /**
190
- * Spawn parallel agents with tools, optionally self-referential.
191
- *
192
- * Creates a shared root, forks one agent per task, runs the four-phase
193
- * tick loop, and returns results. When `recursive` is enabled, a
194
- * delegate tool is added to the toolkit that calls `spawnAgents()`
195
- * again — enabling agents to delegate sub-tasks at arbitrary depth.
196
- *
197
- * This is the general-purpose orchestration primitive. The harness
198
- * controls the prompt, tools, recursion shape, and policy. Sources
199
- * just provide data access tools.
200
- *
201
- * @example Research harness
202
- * ```typescript
203
- * const result = yield* spawnAgents({
204
- * tools: source.tools,
205
- * systemPrompt: RESEARCH_PROMPT,
206
- * tasks: questions,
207
- * terminalTool: { name: 'report', tool: reportTool },
208
- * recursive: { name: 'web_research', extractTasks: (a) => a.questions as string[] },
209
- * });
210
- * ```
211
- *
212
- * @category Agents
213
- */
214
- function* spawnAgents(opts) {
215
- // Build the recursive delegate tool if enabled
216
- let delegateTool;
217
- if (opts.recursive) {
218
- const rc = typeof opts.recursive === 'object' ? opts.recursive : {};
219
- const name = rc.name ?? 'delegate';
220
- const description = rc.description ?? `Delegate sub-tasks to parallel agents. Each task gets its own agent.`;
221
- const argsSchema = rc.argsSchema ?? DEFAULT_ARGS_SCHEMA;
222
- const extractTasks = rc.extractTasks ?? ((args) => args.tasks);
223
- delegateTool = new DelegateTool(name, description, argsSchema, extractTasks, opts);
224
- }
225
- // Compose toolkit: data tools + terminal tool + optional delegate tool
226
- const allTools = [
227
- ...opts.tools,
228
- ...(opts.terminalTool ? [opts.terminalTool.tool] : []),
229
- ...(delegateTool ? [delegateTool] : []),
230
- ];
231
- const toolkit = (0, toolkit_1.createToolkit)(allTools);
232
- // Wire circular reference: delegate tool needs the toolkit that contains it
233
- if (delegateTool) {
234
- delegateTool.setToolkit(toolkit);
235
- }
236
- // Run the pool
237
- return yield* (0, shared_root_1.withSharedRoot)({ systemPrompt: opts.systemPrompt, tools: toolkit.toolsJson, parent: opts.parent }, function* (root) {
238
- return yield* (0, agent_pool_1.useAgentPool)({
239
- tasks: opts.tasks.map((t) => ({
240
- systemPrompt: opts.systemPrompt,
241
- content: t,
242
- tools: toolkit.toolsJson,
243
- parent: root,
244
- })),
245
- tools: toolkit.toolMap,
246
- terminalTool: opts.terminalTool?.name,
247
- pruneOnReport: opts.pruneOnReport,
248
- maxTurns: opts.maxTurns,
249
- trace: opts.trace,
250
- policy: opts.policy,
251
- scorer: opts.scorer,
252
- });
253
- });
254
- }
255
- //# sourceMappingURL=spawn-agents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn-agents.js","sourceRoot":"","sources":["../src/spawn-agents.ts"],"names":[],"mappings":"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"}