@nodetool-ai/agents 0.7.0-rc.11
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-executor.d.ts +62 -0
- package/dist/agent-executor.d.ts.map +1 -0
- package/dist/agent-executor.js +324 -0
- package/dist/agent-executor.js.map +1 -0
- package/dist/agent-step-executor.d.ts +28 -0
- package/dist/agent-step-executor.d.ts.map +1 -0
- package/dist/agent-step-executor.js +99 -0
- package/dist/agent-step-executor.js.map +1 -0
- package/dist/agent-workflow-runner.d.ts +31 -0
- package/dist/agent-workflow-runner.d.ts.map +1 -0
- package/dist/agent-workflow-runner.js +124 -0
- package/dist/agent-workflow-runner.js.map +1 -0
- package/dist/agent.d.ts +115 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +587 -0
- package/dist/agent.js.map +1 -0
- package/dist/base-agent.d.ts +42 -0
- package/dist/base-agent.d.ts.map +1 -0
- package/dist/base-agent.js +29 -0
- package/dist/base-agent.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/graph-builder.d.ts +49 -0
- package/dist/graph-builder.d.ts.map +1 -0
- package/dist/graph-builder.js +206 -0
- package/dist/graph-builder.js.map +1 -0
- package/dist/graph-planner.d.ts +56 -0
- package/dist/graph-planner.d.ts.map +1 -0
- package/dist/graph-planner.js +311 -0
- package/dist/graph-planner.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/js-sandbox.d.ts +84 -0
- package/dist/js-sandbox.d.ts.map +1 -0
- package/dist/js-sandbox.js +654 -0
- package/dist/js-sandbox.js.map +1 -0
- package/dist/multi-mode-agent.d.ts +86 -0
- package/dist/multi-mode-agent.d.ts.map +1 -0
- package/dist/multi-mode-agent.js +476 -0
- package/dist/multi-mode-agent.js.map +1 -0
- package/dist/output-format.d.ts +10 -0
- package/dist/output-format.d.ts.map +1 -0
- package/dist/output-format.js +17 -0
- package/dist/output-format.js.map +1 -0
- package/dist/parallel-task-executor.d.ts +87 -0
- package/dist/parallel-task-executor.d.ts.map +1 -0
- package/dist/parallel-task-executor.js +332 -0
- package/dist/parallel-task-executor.js.map +1 -0
- package/dist/prompts/graph-planner-prompt.d.ts +48 -0
- package/dist/prompts/graph-planner-prompt.d.ts.map +1 -0
- package/dist/prompts/graph-planner-prompt.js +180 -0
- package/dist/prompts/graph-planner-prompt.js.map +1 -0
- package/dist/reject-agentic-provider.d.ts +21 -0
- package/dist/reject-agentic-provider.d.ts.map +1 -0
- package/dist/reject-agentic-provider.js +32 -0
- package/dist/reject-agentic-provider.js.map +1 -0
- package/dist/simple-agent.d.ts +29 -0
- package/dist/simple-agent.d.ts.map +1 -0
- package/dist/simple-agent.js +54 -0
- package/dist/simple-agent.js.map +1 -0
- package/dist/step-executor.d.ts +162 -0
- package/dist/step-executor.d.ts.map +1 -0
- package/dist/step-executor.js +1114 -0
- package/dist/step-executor.js.map +1 -0
- package/dist/sub-agent-planner.d.ts +33 -0
- package/dist/sub-agent-planner.d.ts.map +1 -0
- package/dist/sub-agent-planner.js +203 -0
- package/dist/sub-agent-planner.js.map +1 -0
- package/dist/task-executor.d.ts +89 -0
- package/dist/task-executor.d.ts.map +1 -0
- package/dist/task-executor.js +359 -0
- package/dist/task-executor.js.map +1 -0
- package/dist/task-planner.d.ts +44 -0
- package/dist/task-planner.d.ts.map +1 -0
- package/dist/task-planner.js +532 -0
- package/dist/task-planner.js.map +1 -0
- package/dist/team/db-task-board.d.ts +54 -0
- package/dist/team/db-task-board.d.ts.map +1 -0
- package/dist/team/db-task-board.js +361 -0
- package/dist/team/db-task-board.js.map +1 -0
- package/dist/team/edge-message-bus.d.ts +51 -0
- package/dist/team/edge-message-bus.d.ts.map +1 -0
- package/dist/team/edge-message-bus.js +169 -0
- package/dist/team/edge-message-bus.js.map +1 -0
- package/dist/team/edge-task-board.d.ts +77 -0
- package/dist/team/edge-task-board.d.ts.map +1 -0
- package/dist/team/edge-task-board.js +140 -0
- package/dist/team/edge-task-board.js.map +1 -0
- package/dist/team/index.d.ts +16 -0
- package/dist/team/index.d.ts.map +1 -0
- package/dist/team/index.js +17 -0
- package/dist/team/index.js.map +1 -0
- package/dist/team/message-bus.d.ts +58 -0
- package/dist/team/message-bus.d.ts.map +1 -0
- package/dist/team/message-bus.js +151 -0
- package/dist/team/message-bus.js.map +1 -0
- package/dist/team/task-board.d.ts +106 -0
- package/dist/team/task-board.d.ts.map +1 -0
- package/dist/team/task-board.js +370 -0
- package/dist/team/task-board.js.map +1 -0
- package/dist/team/team-executor.d.ts +72 -0
- package/dist/team/team-executor.d.ts.map +1 -0
- package/dist/team/team-executor.js +466 -0
- package/dist/team/team-executor.js.map +1 -0
- package/dist/team/team-tools.d.ts +252 -0
- package/dist/team/team-tools.d.ts.map +1 -0
- package/dist/team/team-tools.js +412 -0
- package/dist/team/team-tools.js.map +1 -0
- package/dist/team/types.d.ts +198 -0
- package/dist/team/types.d.ts.map +1 -0
- package/dist/team/types.js +8 -0
- package/dist/team/types.js.map +1 -0
- package/dist/tools/add-edge-tool.d.ts +18 -0
- package/dist/tools/add-edge-tool.d.ts.map +1 -0
- package/dist/tools/add-edge-tool.js +92 -0
- package/dist/tools/add-edge-tool.js.map +1 -0
- package/dist/tools/add-node-tool.d.ts +22 -0
- package/dist/tools/add-node-tool.d.ts.map +1 -0
- package/dist/tools/add-node-tool.js +128 -0
- package/dist/tools/add-node-tool.js.map +1 -0
- package/dist/tools/asset-tools.d.ts +58 -0
- package/dist/tools/asset-tools.d.ts.map +1 -0
- package/dist/tools/asset-tools.js +191 -0
- package/dist/tools/asset-tools.js.map +1 -0
- package/dist/tools/base-tool.d.ts +25 -0
- package/dist/tools/base-tool.d.ts.map +1 -0
- package/dist/tools/base-tool.js +24 -0
- package/dist/tools/base-tool.js.map +1 -0
- package/dist/tools/browser-tools.d.ts +32 -0
- package/dist/tools/browser-tools.d.ts.map +1 -0
- package/dist/tools/browser-tools.js +208 -0
- package/dist/tools/browser-tools.js.map +1 -0
- package/dist/tools/calculator-tool.d.ts +24 -0
- package/dist/tools/calculator-tool.d.ts.map +1 -0
- package/dist/tools/calculator-tool.js +64 -0
- package/dist/tools/calculator-tool.js.map +1 -0
- package/dist/tools/claude-code-tools.d.ts +96 -0
- package/dist/tools/claude-code-tools.d.ts.map +1 -0
- package/dist/tools/claude-code-tools.js +463 -0
- package/dist/tools/claude-code-tools.js.map +1 -0
- package/dist/tools/code-tools.d.ts +26 -0
- package/dist/tools/code-tools.d.ts.map +1 -0
- package/dist/tools/code-tools.js +82 -0
- package/dist/tools/code-tools.js.map +1 -0
- package/dist/tools/control-tool.d.ts +47 -0
- package/dist/tools/control-tool.d.ts.map +1 -0
- package/dist/tools/control-tool.js +101 -0
- package/dist/tools/control-tool.js.map +1 -0
- package/dist/tools/create-plan-tool.d.ts +29 -0
- package/dist/tools/create-plan-tool.d.ts.map +1 -0
- package/dist/tools/create-plan-tool.js +355 -0
- package/dist/tools/create-plan-tool.js.map +1 -0
- package/dist/tools/create-task-tool.d.ts +28 -0
- package/dist/tools/create-task-tool.d.ts.map +1 -0
- package/dist/tools/create-task-tool.js +254 -0
- package/dist/tools/create-task-tool.js.map +1 -0
- package/dist/tools/dataseo-tools.d.ts +38 -0
- package/dist/tools/dataseo-tools.d.ts.map +1 -0
- package/dist/tools/dataseo-tools.js +329 -0
- package/dist/tools/dataseo-tools.js.map +1 -0
- package/dist/tools/email-tools.d.ts +76 -0
- package/dist/tools/email-tools.d.ts.map +1 -0
- package/dist/tools/email-tools.js +259 -0
- package/dist/tools/email-tools.js.map +1 -0
- package/dist/tools/filesystem-tools.d.ts +77 -0
- package/dist/tools/filesystem-tools.d.ts.map +1 -0
- package/dist/tools/filesystem-tools.js +334 -0
- package/dist/tools/filesystem-tools.js.map +1 -0
- package/dist/tools/find-model-tool.d.ts +25 -0
- package/dist/tools/find-model-tool.d.ts.map +1 -0
- package/dist/tools/find-model-tool.js +236 -0
- package/dist/tools/find-model-tool.js.map +1 -0
- package/dist/tools/finish-graph-tool.d.ts +23 -0
- package/dist/tools/finish-graph-tool.d.ts.map +1 -0
- package/dist/tools/finish-graph-tool.js +46 -0
- package/dist/tools/finish-graph-tool.js.map +1 -0
- package/dist/tools/finish-step-tool.d.ts +16 -0
- package/dist/tools/finish-step-tool.d.ts.map +1 -0
- package/dist/tools/finish-step-tool.js +68 -0
- package/dist/tools/finish-step-tool.js.map +1 -0
- package/dist/tools/google-tools.d.ts +44 -0
- package/dist/tools/google-tools.d.ts.map +1 -0
- package/dist/tools/google-tools.js +176 -0
- package/dist/tools/google-tools.js.map +1 -0
- package/dist/tools/http-tools.d.ts +56 -0
- package/dist/tools/http-tools.d.ts.map +1 -0
- package/dist/tools/http-tools.js +180 -0
- package/dist/tools/http-tools.js.map +1 -0
- package/dist/tools/js-code-tool.d.ts +30 -0
- package/dist/tools/js-code-tool.d.ts.map +1 -0
- package/dist/tools/js-code-tool.js +98 -0
- package/dist/tools/js-code-tool.js.map +1 -0
- package/dist/tools/local-get-node-info-tool.d.ts +19 -0
- package/dist/tools/local-get-node-info-tool.d.ts.map +1 -0
- package/dist/tools/local-get-node-info-tool.js +75 -0
- package/dist/tools/local-get-node-info-tool.js.map +1 -0
- package/dist/tools/local-list-nodes-tool.d.ts +19 -0
- package/dist/tools/local-list-nodes-tool.d.ts.map +1 -0
- package/dist/tools/local-list-nodes-tool.js +69 -0
- package/dist/tools/local-list-nodes-tool.js.map +1 -0
- package/dist/tools/local-search-nodes-tool.d.ts +21 -0
- package/dist/tools/local-search-nodes-tool.d.ts.map +1 -0
- package/dist/tools/local-search-nodes-tool.js +111 -0
- package/dist/tools/local-search-nodes-tool.js.map +1 -0
- package/dist/tools/math-tools.d.ts +156 -0
- package/dist/tools/math-tools.d.ts.map +1 -0
- package/dist/tools/math-tools.js +422 -0
- package/dist/tools/math-tools.js.map +1 -0
- package/dist/tools/mcp-tools.d.ts +413 -0
- package/dist/tools/mcp-tools.d.ts.map +1 -0
- package/dist/tools/mcp-tools.js +618 -0
- package/dist/tools/mcp-tools.js.map +1 -0
- package/dist/tools/media-tools.d.ts +277 -0
- package/dist/tools/media-tools.d.ts.map +1 -0
- package/dist/tools/media-tools.js +682 -0
- package/dist/tools/media-tools.js.map +1 -0
- package/dist/tools/model-tools.d.ts +25 -0
- package/dist/tools/model-tools.d.ts.map +1 -0
- package/dist/tools/model-tools.js +48 -0
- package/dist/tools/model-tools.js.map +1 -0
- package/dist/tools/openai-tools.d.ts +73 -0
- package/dist/tools/openai-tools.d.ts.map +1 -0
- package/dist/tools/openai-tools.js +193 -0
- package/dist/tools/openai-tools.js.map +1 -0
- package/dist/tools/pdf-tools.d.ts +152 -0
- package/dist/tools/pdf-tools.d.ts.map +1 -0
- package/dist/tools/pdf-tools.js +339 -0
- package/dist/tools/pdf-tools.js.map +1 -0
- package/dist/tools/plan-builder-tools.d.ts +72 -0
- package/dist/tools/plan-builder-tools.d.ts.map +1 -0
- package/dist/tools/plan-builder-tools.js +438 -0
- package/dist/tools/plan-builder-tools.js.map +1 -0
- package/dist/tools/search-tools.d.ts +39 -0
- package/dist/tools/search-tools.d.ts.map +1 -0
- package/dist/tools/search-tools.js +218 -0
- package/dist/tools/search-tools.js.map +1 -0
- package/dist/tools/serp-providers/dataforseo-provider.d.ts +14 -0
- package/dist/tools/serp-providers/dataforseo-provider.d.ts.map +1 -0
- package/dist/tools/serp-providers/dataforseo-provider.js +114 -0
- package/dist/tools/serp-providers/dataforseo-provider.js.map +1 -0
- package/dist/tools/serp-providers/index.d.ts +35 -0
- package/dist/tools/serp-providers/index.d.ts.map +1 -0
- package/dist/tools/serp-providers/index.js +14 -0
- package/dist/tools/serp-providers/index.js.map +1 -0
- package/dist/tools/serp-providers/serpapi-provider.d.ts +18 -0
- package/dist/tools/serp-providers/serpapi-provider.d.ts.map +1 -0
- package/dist/tools/serp-providers/serpapi-provider.js +66 -0
- package/dist/tools/serp-providers/serpapi-provider.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +9 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +17 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/vector-tools.d.ts +224 -0
- package/dist/tools/vector-tools.d.ts.map +1 -0
- package/dist/tools/vector-tools.js +582 -0
- package/dist/tools/vector-tools.js.map +1 -0
- package/dist/tools/workspace-tools.d.ts +58 -0
- package/dist/tools/workspace-tools.d.ts.map +1 -0
- package/dist/tools/workspace-tools.js +152 -0
- package/dist/tools/workspace-tools.js.map +1 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/json-parser.d.ts +15 -0
- package/dist/utils/json-parser.d.ts.map +1 -0
- package/dist/utils/json-parser.js +78 -0
- package/dist/utils/json-parser.js.map +1 -0
- package/dist/utils/remove-base64-images.d.ts +12 -0
- package/dist/utils/remove-base64-images.d.ts.map +1 -0
- package/dist/utils/remove-base64-images.js +20 -0
- package/dist/utils/remove-base64-images.js.map +1 -0
- package/dist/utils/wrap-generators-parallel.d.ts +11 -0
- package/dist/utils/wrap-generators-parallel.d.ts.map +1 -0
- package/dist/utils/wrap-generators-parallel.js +38 -0
- package/dist/utils/wrap-generators-parallel.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EdgeTaskBoard — ITaskBoard implementation that wraps a TaskBoard
|
|
3
|
+
* and bridges task operations through the workflow kernel.
|
|
4
|
+
*
|
|
5
|
+
* When running inside a workflow, task operations (create, claim, complete)
|
|
6
|
+
* are sent as control events to a TaskBoardNode, which holds the actual
|
|
7
|
+
* board state and processes operations synchronously. This ensures the
|
|
8
|
+
* board state is visible to other nodes in the graph.
|
|
9
|
+
*
|
|
10
|
+
* When no workflow context is available, delegates to the inner TaskBoard
|
|
11
|
+
* directly (same behavior as programmatic use).
|
|
12
|
+
*/
|
|
13
|
+
import type { ProcessingContext } from "@nodetool-ai/runtime";
|
|
14
|
+
import { TaskBoard } from "./task-board.js";
|
|
15
|
+
import type { AgentIdentity, BoardTask, ITaskBoard, TeamEvent } from "./types.js";
|
|
16
|
+
export declare class EdgeTaskBoard implements ITaskBoard {
|
|
17
|
+
private inner;
|
|
18
|
+
private context;
|
|
19
|
+
/** Node ID of the TaskBoardNode in the workflow graph. */
|
|
20
|
+
private boardNodeId;
|
|
21
|
+
constructor(opts?: {
|
|
22
|
+
context?: ProcessingContext;
|
|
23
|
+
boardNodeId?: string;
|
|
24
|
+
inner?: TaskBoard;
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* If a board node is configured and context supports control events,
|
|
28
|
+
* route the operation through the workflow kernel. Otherwise, use
|
|
29
|
+
* the inner board directly.
|
|
30
|
+
*/
|
|
31
|
+
private canRouteToNode;
|
|
32
|
+
/**
|
|
33
|
+
* Send a task operation to the board node as a control event.
|
|
34
|
+
* The board node processes it and returns the result.
|
|
35
|
+
*/
|
|
36
|
+
private routeOperation;
|
|
37
|
+
create(opts: {
|
|
38
|
+
title: string;
|
|
39
|
+
description: string;
|
|
40
|
+
createdBy: string;
|
|
41
|
+
dependsOn?: string[];
|
|
42
|
+
requiredSkills?: string[];
|
|
43
|
+
priority?: number;
|
|
44
|
+
parentTaskId?: string;
|
|
45
|
+
}): BoardTask;
|
|
46
|
+
claim(taskId: string, agentId: string): boolean;
|
|
47
|
+
startWork(taskId: string, agentId: string): boolean;
|
|
48
|
+
complete(taskId: string, opts?: {
|
|
49
|
+
result?: unknown;
|
|
50
|
+
artifacts?: unknown[];
|
|
51
|
+
}): boolean;
|
|
52
|
+
fail(taskId: string, reason: string): boolean;
|
|
53
|
+
block(taskId: string): boolean;
|
|
54
|
+
unblock(taskId: string): boolean;
|
|
55
|
+
decompose(parentTaskId: string, subtasks: Array<{
|
|
56
|
+
title: string;
|
|
57
|
+
description: string;
|
|
58
|
+
createdBy: string;
|
|
59
|
+
requiredSkills?: string[];
|
|
60
|
+
priority?: number;
|
|
61
|
+
dependsOn?: string[];
|
|
62
|
+
}>): BoardTask[];
|
|
63
|
+
getAvailable(agent?: AgentIdentity): BoardTask[];
|
|
64
|
+
get(taskId: string): BoardTask | undefined;
|
|
65
|
+
getSnapshot(): BoardTask[];
|
|
66
|
+
getSubtasks(parentTaskId: string): BoardTask[];
|
|
67
|
+
isComplete(): boolean;
|
|
68
|
+
detectDeadlock(): string[] | null;
|
|
69
|
+
resolveParents(): void;
|
|
70
|
+
onEvent(handler: (event: TeamEvent) => void): () => void;
|
|
71
|
+
/**
|
|
72
|
+
* Fire-and-forget notification to the board node in the workflow graph.
|
|
73
|
+
* Non-blocking — if it fails, the inner board is still consistent.
|
|
74
|
+
*/
|
|
75
|
+
private notifyNode;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=edge-task-board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-task-board.d.ts","sourceRoot":"","sources":["../../src/team/edge-task-board.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAS,EACV,MAAM,YAAY,CAAC;AAIpB,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAA2B;IAC1C,0DAA0D;IAC1D,OAAO,CAAC,WAAW,CAAgB;gBAEvB,IAAI,CAAC,EAAE;QACjB,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB;IAMD;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAItB;;;OAGG;YACW,cAAc;IAyB5B,MAAM,CAAC,IAAI,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,SAAS;IAMb,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAM/C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAMnD,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GACjD,OAAO;IAMV,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAM7C,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI9B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC,SAAS,CACP,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC,GACD,SAAS,EAAE;IASd,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,EAAE;IAIhD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,WAAW,IAAI,SAAS,EAAE;IAI1B,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE;IAI9C,UAAU,IAAI,OAAO;IAIrB,cAAc,IAAI,MAAM,EAAE,GAAG,IAAI;IAIjC,cAAc,IAAI,IAAI;IAItB,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAMxD;;;OAGG;IACH,OAAO,CAAC,UAAU;CAUnB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EdgeTaskBoard — ITaskBoard implementation that wraps a TaskBoard
|
|
3
|
+
* and bridges task operations through the workflow kernel.
|
|
4
|
+
*
|
|
5
|
+
* When running inside a workflow, task operations (create, claim, complete)
|
|
6
|
+
* are sent as control events to a TaskBoardNode, which holds the actual
|
|
7
|
+
* board state and processes operations synchronously. This ensures the
|
|
8
|
+
* board state is visible to other nodes in the graph.
|
|
9
|
+
*
|
|
10
|
+
* When no workflow context is available, delegates to the inner TaskBoard
|
|
11
|
+
* directly (same behavior as programmatic use).
|
|
12
|
+
*/
|
|
13
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
14
|
+
import { TaskBoard } from "./task-board.js";
|
|
15
|
+
const log = createLogger("agents:edge-task-board");
|
|
16
|
+
export class EdgeTaskBoard {
|
|
17
|
+
inner;
|
|
18
|
+
context;
|
|
19
|
+
/** Node ID of the TaskBoardNode in the workflow graph. */
|
|
20
|
+
boardNodeId;
|
|
21
|
+
constructor(opts) {
|
|
22
|
+
this.inner = opts?.inner ?? new TaskBoard();
|
|
23
|
+
this.context = opts?.context ?? null;
|
|
24
|
+
this.boardNodeId = opts?.boardNodeId ?? null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* If a board node is configured and context supports control events,
|
|
28
|
+
* route the operation through the workflow kernel. Otherwise, use
|
|
29
|
+
* the inner board directly.
|
|
30
|
+
*/
|
|
31
|
+
canRouteToNode() {
|
|
32
|
+
return !!(this.boardNodeId && this.context?.hasControlEventSupport);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Send a task operation to the board node as a control event.
|
|
36
|
+
* The board node processes it and returns the result.
|
|
37
|
+
*/
|
|
38
|
+
async routeOperation(operation, params) {
|
|
39
|
+
if (!this.boardNodeId || !this.context) {
|
|
40
|
+
throw new Error("Cannot route: no board node configured");
|
|
41
|
+
}
|
|
42
|
+
return ((await this.context.sendControlEvent(this.boardNodeId, {
|
|
43
|
+
__task_board_op__: true,
|
|
44
|
+
operation,
|
|
45
|
+
params
|
|
46
|
+
})) ?? {});
|
|
47
|
+
}
|
|
48
|
+
// All methods delegate to inner board directly.
|
|
49
|
+
// When canRouteToNode() is true AND we want to notify the workflow graph
|
|
50
|
+
// of state changes, we also fire-and-forget a control event so the board
|
|
51
|
+
// node can broadcast updates to connected nodes.
|
|
52
|
+
//
|
|
53
|
+
// The inner board is the source of truth — the board node is a mirror
|
|
54
|
+
// that the visual graph can observe. This "dual write" approach keeps
|
|
55
|
+
// programmatic and edge-native usage consistent.
|
|
56
|
+
create(opts) {
|
|
57
|
+
const task = this.inner.create(opts);
|
|
58
|
+
this.notifyNode("task_created", { task });
|
|
59
|
+
return task;
|
|
60
|
+
}
|
|
61
|
+
claim(taskId, agentId) {
|
|
62
|
+
const result = this.inner.claim(taskId, agentId);
|
|
63
|
+
if (result)
|
|
64
|
+
this.notifyNode("task_claimed", { taskId, agentId });
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
startWork(taskId, agentId) {
|
|
68
|
+
const result = this.inner.startWork(taskId, agentId);
|
|
69
|
+
if (result)
|
|
70
|
+
this.notifyNode("task_working", { taskId, agentId });
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
complete(taskId, opts) {
|
|
74
|
+
const result = this.inner.complete(taskId, opts);
|
|
75
|
+
if (result)
|
|
76
|
+
this.notifyNode("task_completed", { taskId, ...opts });
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
fail(taskId, reason) {
|
|
80
|
+
const result = this.inner.fail(taskId, reason);
|
|
81
|
+
if (result)
|
|
82
|
+
this.notifyNode("task_failed", { taskId, reason });
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
block(taskId) {
|
|
86
|
+
return this.inner.block(taskId);
|
|
87
|
+
}
|
|
88
|
+
unblock(taskId) {
|
|
89
|
+
return this.inner.unblock(taskId);
|
|
90
|
+
}
|
|
91
|
+
decompose(parentTaskId, subtasks) {
|
|
92
|
+
const result = this.inner.decompose(parentTaskId, subtasks);
|
|
93
|
+
this.notifyNode("task_decomposed", {
|
|
94
|
+
parentTaskId,
|
|
95
|
+
subtaskIds: result.map((t) => t.id)
|
|
96
|
+
});
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
getAvailable(agent) {
|
|
100
|
+
return this.inner.getAvailable(agent);
|
|
101
|
+
}
|
|
102
|
+
get(taskId) {
|
|
103
|
+
return this.inner.get(taskId);
|
|
104
|
+
}
|
|
105
|
+
getSnapshot() {
|
|
106
|
+
return this.inner.getSnapshot();
|
|
107
|
+
}
|
|
108
|
+
getSubtasks(parentTaskId) {
|
|
109
|
+
return this.inner.getSubtasks(parentTaskId);
|
|
110
|
+
}
|
|
111
|
+
isComplete() {
|
|
112
|
+
return this.inner.isComplete();
|
|
113
|
+
}
|
|
114
|
+
detectDeadlock() {
|
|
115
|
+
return this.inner.detectDeadlock();
|
|
116
|
+
}
|
|
117
|
+
resolveParents() {
|
|
118
|
+
this.inner.resolveParents();
|
|
119
|
+
}
|
|
120
|
+
onEvent(handler) {
|
|
121
|
+
return this.inner.onEvent(handler);
|
|
122
|
+
}
|
|
123
|
+
// ─── Internal ───
|
|
124
|
+
/**
|
|
125
|
+
* Fire-and-forget notification to the board node in the workflow graph.
|
|
126
|
+
* Non-blocking — if it fails, the inner board is still consistent.
|
|
127
|
+
*/
|
|
128
|
+
notifyNode(operation, params) {
|
|
129
|
+
if (!this.canRouteToNode())
|
|
130
|
+
return;
|
|
131
|
+
this.routeOperation(operation, params).catch((err) => {
|
|
132
|
+
// Intentional: board node notification failed — inner board is still correct
|
|
133
|
+
log.warn("Edge task board notification failed", {
|
|
134
|
+
operation,
|
|
135
|
+
error: String(err)
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=edge-task-board.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-task-board.js","sourceRoot":"","sources":["../../src/team/edge-task-board.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-agent team system — agents collaborate via shared task board
|
|
3
|
+
* and message bus.
|
|
4
|
+
*/
|
|
5
|
+
export type { AgentIdentity, AgentMessage, MessageType, BoardTask, TaskStatus, TeamEvent, TeamConfig, TeamStrategy, IMessageBus, ITaskBoard } from "./types.js";
|
|
6
|
+
export { MessageBus } from "./message-bus.js";
|
|
7
|
+
export type { MessageHandler } from "./message-bus.js";
|
|
8
|
+
export { TaskBoard } from "./task-board.js";
|
|
9
|
+
export type { BoardEventHandler } from "./task-board.js";
|
|
10
|
+
export { EdgeMessageBus } from "./edge-message-bus.js";
|
|
11
|
+
export { EdgeTaskBoard } from "./edge-task-board.js";
|
|
12
|
+
export { DbTaskBoard } from "./db-task-board.js";
|
|
13
|
+
export { SendMessageTool, BroadcastTool, CheckMessagesTool, CreateTaskTool, ListTasksTool, ClaimTaskTool, CompleteTaskTool, FailTaskTool, DecomposeTaskTool, createTeamTools } from "./team-tools.js";
|
|
14
|
+
export { TeamExecutor } from "./team-executor.js";
|
|
15
|
+
export type { TeamExecutorOptions } from "./team-executor.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/team/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-agent team system — agents collaborate via shared task board
|
|
3
|
+
* and message bus.
|
|
4
|
+
*/
|
|
5
|
+
// In-memory implementations (programmatic use)
|
|
6
|
+
export { MessageBus } from "./message-bus.js";
|
|
7
|
+
export { TaskBoard } from "./task-board.js";
|
|
8
|
+
// Edge-native implementations (workflow node use)
|
|
9
|
+
export { EdgeMessageBus } from "./edge-message-bus.js";
|
|
10
|
+
export { EdgeTaskBoard } from "./edge-task-board.js";
|
|
11
|
+
// DB-backed implementation (production use — tasks persisted in SQLite)
|
|
12
|
+
export { DbTaskBoard } from "./db-task-board.js";
|
|
13
|
+
// Team tools
|
|
14
|
+
export { SendMessageTool, BroadcastTool, CheckMessagesTool, CreateTaskTool, ListTasksTool, ClaimTaskTool, CompleteTaskTool, FailTaskTool, DecomposeTaskTool, createTeamTools } from "./team-tools.js";
|
|
15
|
+
// Orchestration
|
|
16
|
+
export { TeamExecutor } from "./team-executor.js";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/team/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,+CAA+C;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,kDAAkD;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,wEAAwE;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,aAAa;AACb,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageBus — In-process pub/sub for agent-to-agent communication.
|
|
3
|
+
*
|
|
4
|
+
* Each agent has an inbox. Messages can be sent to a specific agent
|
|
5
|
+
* or broadcast to all. Subscribers get real-time notifications.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentMessage, IMessageBus, MessageType } from "./types.js";
|
|
8
|
+
export type MessageHandler = (msg: AgentMessage) => void;
|
|
9
|
+
export declare class MessageBus implements IMessageBus {
|
|
10
|
+
/** Per-agent inbox queues. */
|
|
11
|
+
private inboxes;
|
|
12
|
+
/** Per-agent subscribers for real-time push. */
|
|
13
|
+
private subscribers;
|
|
14
|
+
/** Full message log for history/debugging (bounded). */
|
|
15
|
+
private log;
|
|
16
|
+
/**
|
|
17
|
+
* Register an agent so it has an inbox.
|
|
18
|
+
*/
|
|
19
|
+
register(agentId: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Send a message. Delivers to target inbox(es) and notifies subscribers.
|
|
22
|
+
*/
|
|
23
|
+
send(opts: {
|
|
24
|
+
from: string;
|
|
25
|
+
to: string | "all";
|
|
26
|
+
type: MessageType;
|
|
27
|
+
subject: string;
|
|
28
|
+
body: string;
|
|
29
|
+
replyTo?: string;
|
|
30
|
+
taskId?: string;
|
|
31
|
+
}): AgentMessage;
|
|
32
|
+
/**
|
|
33
|
+
* Pull all pending messages for an agent (drains the inbox).
|
|
34
|
+
*/
|
|
35
|
+
receive(agentId: string): AgentMessage[];
|
|
36
|
+
/**
|
|
37
|
+
* Peek at pending messages without consuming them.
|
|
38
|
+
*/
|
|
39
|
+
peek(agentId: string): AgentMessage[];
|
|
40
|
+
/**
|
|
41
|
+
* Subscribe to real-time message delivery for an agent.
|
|
42
|
+
*/
|
|
43
|
+
subscribe(agentId: string, handler: MessageHandler): () => void;
|
|
44
|
+
/**
|
|
45
|
+
* Get the full conversation thread starting from a message.
|
|
46
|
+
*/
|
|
47
|
+
getThread(messageId: string): AgentMessage[];
|
|
48
|
+
/**
|
|
49
|
+
* Get full message history.
|
|
50
|
+
*/
|
|
51
|
+
getHistory(): AgentMessage[];
|
|
52
|
+
/**
|
|
53
|
+
* Get message count for an agent's inbox.
|
|
54
|
+
*/
|
|
55
|
+
pendingCount(agentId: string): number;
|
|
56
|
+
private notify;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=message-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-bus.d.ts","sourceRoot":"","sources":["../../src/team/message-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;AAKzD,qBAAa,UAAW,YAAW,WAAW;IAC5C,8BAA8B;IAC9B,OAAO,CAAC,OAAO,CAAqC;IACpD,gDAAgD;IAChD,OAAO,CAAC,WAAW,CAA0C;IAC7D,wDAAwD;IACxD,OAAO,CAAC,GAAG,CAAsB;IAEjC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM/B;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,EAAE,WAAW,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,YAAY;IAqChB;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAQxC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAIrC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI;IAU/D;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAiC5C;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrC,OAAO,CAAC,MAAM;CAYf"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageBus — In-process pub/sub for agent-to-agent communication.
|
|
3
|
+
*
|
|
4
|
+
* Each agent has an inbox. Messages can be sent to a specific agent
|
|
5
|
+
* or broadcast to all. Subscribers get real-time notifications.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
8
|
+
/** Maximum number of messages retained in the history log. */
|
|
9
|
+
const MAX_LOG_SIZE = 10_000;
|
|
10
|
+
export class MessageBus {
|
|
11
|
+
/** Per-agent inbox queues. */
|
|
12
|
+
inboxes = new Map();
|
|
13
|
+
/** Per-agent subscribers for real-time push. */
|
|
14
|
+
subscribers = new Map();
|
|
15
|
+
/** Full message log for history/debugging (bounded). */
|
|
16
|
+
log = [];
|
|
17
|
+
/**
|
|
18
|
+
* Register an agent so it has an inbox.
|
|
19
|
+
*/
|
|
20
|
+
register(agentId) {
|
|
21
|
+
if (!this.inboxes.has(agentId)) {
|
|
22
|
+
this.inboxes.set(agentId, []);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Send a message. Delivers to target inbox(es) and notifies subscribers.
|
|
27
|
+
*/
|
|
28
|
+
send(opts) {
|
|
29
|
+
const msg = {
|
|
30
|
+
id: randomUUID(),
|
|
31
|
+
from: opts.from,
|
|
32
|
+
to: opts.to,
|
|
33
|
+
type: opts.type,
|
|
34
|
+
subject: opts.subject,
|
|
35
|
+
body: opts.body,
|
|
36
|
+
replyTo: opts.replyTo,
|
|
37
|
+
taskId: opts.taskId,
|
|
38
|
+
timestamp: Date.now()
|
|
39
|
+
};
|
|
40
|
+
this.log.push(msg);
|
|
41
|
+
if (this.log.length > MAX_LOG_SIZE) {
|
|
42
|
+
this.log = this.log.slice(-Math.floor(MAX_LOG_SIZE * 0.75));
|
|
43
|
+
}
|
|
44
|
+
if (opts.to === "all") {
|
|
45
|
+
// Broadcast to all registered agents except sender
|
|
46
|
+
for (const [agentId, inbox] of this.inboxes) {
|
|
47
|
+
if (agentId !== opts.from) {
|
|
48
|
+
inbox.push(msg);
|
|
49
|
+
this.notify(agentId, msg);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const inbox = this.inboxes.get(opts.to);
|
|
55
|
+
if (inbox) {
|
|
56
|
+
inbox.push(msg);
|
|
57
|
+
this.notify(opts.to, msg);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return msg;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Pull all pending messages for an agent (drains the inbox).
|
|
64
|
+
*/
|
|
65
|
+
receive(agentId) {
|
|
66
|
+
const inbox = this.inboxes.get(agentId);
|
|
67
|
+
if (!inbox || inbox.length === 0)
|
|
68
|
+
return [];
|
|
69
|
+
const messages = [...inbox];
|
|
70
|
+
inbox.length = 0;
|
|
71
|
+
return messages;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Peek at pending messages without consuming them.
|
|
75
|
+
*/
|
|
76
|
+
peek(agentId) {
|
|
77
|
+
return [...(this.inboxes.get(agentId) ?? [])];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Subscribe to real-time message delivery for an agent.
|
|
81
|
+
*/
|
|
82
|
+
subscribe(agentId, handler) {
|
|
83
|
+
let handlers = this.subscribers.get(agentId);
|
|
84
|
+
if (!handlers) {
|
|
85
|
+
handlers = new Set();
|
|
86
|
+
this.subscribers.set(agentId, handlers);
|
|
87
|
+
}
|
|
88
|
+
handlers.add(handler);
|
|
89
|
+
return () => handlers.delete(handler);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the full conversation thread starting from a message.
|
|
93
|
+
*/
|
|
94
|
+
getThread(messageId) {
|
|
95
|
+
// Find the root of the thread
|
|
96
|
+
let rootId = messageId;
|
|
97
|
+
const msgMap = new Map(this.log.map((m) => [m.id, m]));
|
|
98
|
+
let current = msgMap.get(rootId);
|
|
99
|
+
while (current?.replyTo) {
|
|
100
|
+
rootId = current.replyTo;
|
|
101
|
+
current = msgMap.get(rootId);
|
|
102
|
+
}
|
|
103
|
+
// Collect all messages in the thread
|
|
104
|
+
const thread = [];
|
|
105
|
+
const visited = new Set();
|
|
106
|
+
const queue = [rootId];
|
|
107
|
+
while (queue.length > 0) {
|
|
108
|
+
const id = queue.shift();
|
|
109
|
+
if (visited.has(id))
|
|
110
|
+
continue;
|
|
111
|
+
visited.add(id);
|
|
112
|
+
const msg = msgMap.get(id);
|
|
113
|
+
if (msg) {
|
|
114
|
+
thread.push(msg);
|
|
115
|
+
// Find replies to this message
|
|
116
|
+
for (const m of this.log) {
|
|
117
|
+
if (m.replyTo === id && !visited.has(m.id)) {
|
|
118
|
+
queue.push(m.id);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return thread.sort((a, b) => a.timestamp - b.timestamp);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get full message history.
|
|
127
|
+
*/
|
|
128
|
+
getHistory() {
|
|
129
|
+
return [...this.log];
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get message count for an agent's inbox.
|
|
133
|
+
*/
|
|
134
|
+
pendingCount(agentId) {
|
|
135
|
+
return this.inboxes.get(agentId)?.length ?? 0;
|
|
136
|
+
}
|
|
137
|
+
notify(agentId, msg) {
|
|
138
|
+
const handlers = this.subscribers.get(agentId);
|
|
139
|
+
if (handlers) {
|
|
140
|
+
for (const handler of handlers) {
|
|
141
|
+
try {
|
|
142
|
+
handler(msg);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Don't let subscriber errors break delivery
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=message-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-bus.js","sourceRoot":"","sources":["../../src/team/message-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskBoard — Shared task pool with atomic claiming, dependency DAG,
|
|
3
|
+
* and skill-based matching.
|
|
4
|
+
*
|
|
5
|
+
* Follows the A2A task lifecycle: open → claimed → working → done/failed.
|
|
6
|
+
* Agents pull tasks (claim-based) rather than being assigned (push-based).
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentIdentity, BoardTask, ITaskBoard, TeamEvent } from "./types.js";
|
|
9
|
+
export type BoardEventHandler = (event: TeamEvent) => void;
|
|
10
|
+
export declare class TaskBoard implements ITaskBoard {
|
|
11
|
+
private tasks;
|
|
12
|
+
private listeners;
|
|
13
|
+
/** Lock set for atomic claiming — taskId currently being claimed. */
|
|
14
|
+
private claimLocks;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new task on the board.
|
|
17
|
+
*/
|
|
18
|
+
create(opts: {
|
|
19
|
+
title: string;
|
|
20
|
+
description: string;
|
|
21
|
+
createdBy: string;
|
|
22
|
+
dependsOn?: string[];
|
|
23
|
+
requiredSkills?: string[];
|
|
24
|
+
priority?: number;
|
|
25
|
+
parentTaskId?: string;
|
|
26
|
+
}): BoardTask;
|
|
27
|
+
/**
|
|
28
|
+
* Atomically claim an open task. Returns true if successful.
|
|
29
|
+
* Fails if task is not open, dependencies aren't met, or another agent claimed it first.
|
|
30
|
+
*/
|
|
31
|
+
claim(taskId: string, agentId: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Mark a claimed task as actively being worked on.
|
|
34
|
+
*/
|
|
35
|
+
startWork(taskId: string, agentId: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Complete a task with optional result and artifacts.
|
|
38
|
+
*/
|
|
39
|
+
complete(taskId: string, opts?: {
|
|
40
|
+
result?: unknown;
|
|
41
|
+
artifacts?: unknown[];
|
|
42
|
+
}): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Mark a task as failed.
|
|
45
|
+
*/
|
|
46
|
+
fail(taskId: string, reason: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Mark a task as blocked (waiting on external input or another agent).
|
|
49
|
+
*/
|
|
50
|
+
block(taskId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Unblock a task back to open (so it can be reclaimed).
|
|
53
|
+
*/
|
|
54
|
+
unblock(taskId: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Decompose a task into subtasks. Parent task is marked blocked
|
|
57
|
+
* until all subtasks complete.
|
|
58
|
+
*/
|
|
59
|
+
decompose(parentTaskId: string, subtasks: Array<{
|
|
60
|
+
title: string;
|
|
61
|
+
description: string;
|
|
62
|
+
createdBy: string;
|
|
63
|
+
requiredSkills?: string[];
|
|
64
|
+
priority?: number;
|
|
65
|
+
dependsOn?: string[];
|
|
66
|
+
}>): BoardTask[];
|
|
67
|
+
/**
|
|
68
|
+
* Get tasks available for an agent to claim.
|
|
69
|
+
* Filters by: open status, dependencies met, skill match.
|
|
70
|
+
* Sorted by priority (lower number = higher priority).
|
|
71
|
+
*/
|
|
72
|
+
getAvailable(agent?: AgentIdentity): BoardTask[];
|
|
73
|
+
/**
|
|
74
|
+
* Get a single task by ID.
|
|
75
|
+
*/
|
|
76
|
+
get(taskId: string): BoardTask | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Get full board snapshot.
|
|
79
|
+
*/
|
|
80
|
+
getSnapshot(): BoardTask[];
|
|
81
|
+
/**
|
|
82
|
+
* Get subtasks of a parent task.
|
|
83
|
+
*/
|
|
84
|
+
getSubtasks(parentTaskId: string): BoardTask[];
|
|
85
|
+
/**
|
|
86
|
+
* Check if all tasks are in terminal states (done/failed).
|
|
87
|
+
*/
|
|
88
|
+
isComplete(): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Check if there's a deadlock (no progress possible).
|
|
91
|
+
* Deadlock = tasks exist that aren't done/failed, but none are claimable or in-progress.
|
|
92
|
+
*/
|
|
93
|
+
detectDeadlock(): string[] | null;
|
|
94
|
+
/**
|
|
95
|
+
* Auto-complete parent tasks when all subtasks are done.
|
|
96
|
+
*/
|
|
97
|
+
resolveParents(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Subscribe to board events.
|
|
100
|
+
*/
|
|
101
|
+
onEvent(handler: BoardEventHandler): () => void;
|
|
102
|
+
private dependenciesMet;
|
|
103
|
+
private hasCycle;
|
|
104
|
+
private emit;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=task-board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-board.d.ts","sourceRoot":"","sources":["../../src/team/task-board.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,UAAU,EAEV,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAE3D,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,SAAS,CAA2B;IAC5C,qEAAqE;IACrE,OAAO,CAAC,UAAU,CAAqB;IAEvC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,SAAS;IAyCb;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IA4B/C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAgBnD;;OAEG;IACH,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GACjD,OAAO;IAqBV;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAkB7C;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAU9B;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAShC;;;OAGG;IACH,SAAS,CACP,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC,GACD,SAAS,EAAE;IAsBd;;;;OAIG;IACH,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,EAAE;IAoBhD;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAK1C;;OAEG;IACH,WAAW,IAAI,SAAS,EAAE;IAI1B;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE;IAM9C;;OAEG;IACH,UAAU,IAAI,OAAO;IAQrB;;;OAGG;IACH,cAAc,IAAI,MAAM,EAAE,GAAG,IAAI;IA2BjC;;OAEG;IACH,cAAc,IAAI,IAAI;IAqCtB;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAU/C,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,QAAQ;IAyBhB,OAAO,CAAC,IAAI;CASb"}
|