twining-mcp 1.3.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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/dist/config.d.ts +8 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +78 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/dashboard/api-routes.d.ts +21 -0
  8. package/dist/dashboard/api-routes.d.ts.map +1 -0
  9. package/dist/dashboard/api-routes.js +516 -0
  10. package/dist/dashboard/api-routes.js.map +1 -0
  11. package/dist/dashboard/dashboard-config.d.ts +19 -0
  12. package/dist/dashboard/dashboard-config.d.ts.map +1 -0
  13. package/dist/dashboard/dashboard-config.js +17 -0
  14. package/dist/dashboard/dashboard-config.js.map +1 -0
  15. package/dist/dashboard/http-server.d.ts +29 -0
  16. package/dist/dashboard/http-server.d.ts.map +1 -0
  17. package/dist/dashboard/http-server.js +177 -0
  18. package/dist/dashboard/http-server.js.map +1 -0
  19. package/dist/dashboard/public/app.js +2396 -0
  20. package/dist/dashboard/public/assets/favicon.svg +44 -0
  21. package/dist/dashboard/public/assets/icon-512.png +0 -0
  22. package/dist/dashboard/public/assets/logo.svg +45 -0
  23. package/dist/dashboard/public/favicon.ico +0 -0
  24. package/dist/dashboard/public/index.html +338 -0
  25. package/dist/dashboard/public/style.css +858 -0
  26. package/dist/dashboard/public/vendor/cytoscape.min.js +1 -0
  27. package/dist/dashboard/public/vendor/vis-timeline-graph2d.min.css +2 -0
  28. package/dist/dashboard/public/vendor/vis-timeline-graph2d.min.js +48 -0
  29. package/dist/embeddings/embedder.d.ts +24 -0
  30. package/dist/embeddings/embedder.d.ts.map +1 -0
  31. package/dist/embeddings/embedder.js +109 -0
  32. package/dist/embeddings/embedder.js.map +1 -0
  33. package/dist/embeddings/index-manager.d.ts +27 -0
  34. package/dist/embeddings/index-manager.d.ts.map +1 -0
  35. package/dist/embeddings/index-manager.js +115 -0
  36. package/dist/embeddings/index-manager.js.map +1 -0
  37. package/dist/embeddings/search.d.ts +52 -0
  38. package/dist/embeddings/search.d.ts.map +1 -0
  39. package/dist/embeddings/search.js +170 -0
  40. package/dist/embeddings/search.js.map +1 -0
  41. package/dist/engine/archiver.d.ts +28 -0
  42. package/dist/engine/archiver.d.ts.map +1 -0
  43. package/dist/engine/archiver.js +153 -0
  44. package/dist/engine/archiver.js.map +1 -0
  45. package/dist/engine/blackboard.d.ts +55 -0
  46. package/dist/engine/blackboard.d.ts.map +1 -0
  47. package/dist/engine/blackboard.js +90 -0
  48. package/dist/engine/blackboard.js.map +1 -0
  49. package/dist/engine/context-assembler.d.ts +50 -0
  50. package/dist/engine/context-assembler.d.ts.map +1 -0
  51. package/dist/engine/context-assembler.js +483 -0
  52. package/dist/engine/context-assembler.js.map +1 -0
  53. package/dist/engine/coordination.d.ts +53 -0
  54. package/dist/engine/coordination.d.ts.map +1 -0
  55. package/dist/engine/coordination.js +239 -0
  56. package/dist/engine/coordination.js.map +1 -0
  57. package/dist/engine/decisions.d.ts +147 -0
  58. package/dist/engine/decisions.d.ts.map +1 -0
  59. package/dist/engine/decisions.js +540 -0
  60. package/dist/engine/decisions.js.map +1 -0
  61. package/dist/engine/exporter.d.ts +30 -0
  62. package/dist/engine/exporter.d.ts.map +1 -0
  63. package/dist/engine/exporter.js +192 -0
  64. package/dist/engine/exporter.js.map +1 -0
  65. package/dist/engine/graph.d.ts +55 -0
  66. package/dist/engine/graph.d.ts.map +1 -0
  67. package/dist/engine/graph.js +119 -0
  68. package/dist/engine/graph.js.map +1 -0
  69. package/dist/engine/planning-bridge.d.ts +53 -0
  70. package/dist/engine/planning-bridge.d.ts.map +1 -0
  71. package/dist/engine/planning-bridge.js +170 -0
  72. package/dist/engine/planning-bridge.js.map +1 -0
  73. package/dist/index.d.ts +3 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +32 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/server.d.ts +7 -0
  78. package/dist/server.d.ts.map +1 -0
  79. package/dist/server.js +82 -0
  80. package/dist/server.js.map +1 -0
  81. package/dist/storage/agent-store.d.ts +36 -0
  82. package/dist/storage/agent-store.d.ts.map +1 -0
  83. package/dist/storage/agent-store.js +119 -0
  84. package/dist/storage/agent-store.js.map +1 -0
  85. package/dist/storage/blackboard-store.d.ts +21 -0
  86. package/dist/storage/blackboard-store.d.ts.map +1 -0
  87. package/dist/storage/blackboard-store.js +56 -0
  88. package/dist/storage/blackboard-store.js.map +1 -0
  89. package/dist/storage/decision-store.d.ts +23 -0
  90. package/dist/storage/decision-store.d.ts.map +1 -0
  91. package/dist/storage/decision-store.js +179 -0
  92. package/dist/storage/decision-store.js.map +1 -0
  93. package/dist/storage/file-store.d.ts +20 -0
  94. package/dist/storage/file-store.d.ts.map +1 -0
  95. package/dist/storage/file-store.js +108 -0
  96. package/dist/storage/file-store.js.map +1 -0
  97. package/dist/storage/graph-store.d.ts +39 -0
  98. package/dist/storage/graph-store.d.ts.map +1 -0
  99. package/dist/storage/graph-store.js +143 -0
  100. package/dist/storage/graph-store.js.map +1 -0
  101. package/dist/storage/handoff-store.d.ts +44 -0
  102. package/dist/storage/handoff-store.d.ts.map +1 -0
  103. package/dist/storage/handoff-store.js +136 -0
  104. package/dist/storage/handoff-store.js.map +1 -0
  105. package/dist/storage/init.d.ts +10 -0
  106. package/dist/storage/init.d.ts.map +1 -0
  107. package/dist/storage/init.js +48 -0
  108. package/dist/storage/init.js.map +1 -0
  109. package/dist/tools/blackboard-tools.d.ts +4 -0
  110. package/dist/tools/blackboard-tools.d.ts.map +1 -0
  111. package/dist/tools/blackboard-tools.js +131 -0
  112. package/dist/tools/blackboard-tools.js.map +1 -0
  113. package/dist/tools/context-tools.d.ts +4 -0
  114. package/dist/tools/context-tools.d.ts.map +1 -0
  115. package/dist/tools/context-tools.js +76 -0
  116. package/dist/tools/context-tools.js.map +1 -0
  117. package/dist/tools/coordination-tools.d.ts +6 -0
  118. package/dist/tools/coordination-tools.d.ts.map +1 -0
  119. package/dist/tools/coordination-tools.js +220 -0
  120. package/dist/tools/coordination-tools.js.map +1 -0
  121. package/dist/tools/decision-tools.d.ts +4 -0
  122. package/dist/tools/decision-tools.d.ts.map +1 -0
  123. package/dist/tools/decision-tools.js +265 -0
  124. package/dist/tools/decision-tools.js.map +1 -0
  125. package/dist/tools/export-tools.d.ts +4 -0
  126. package/dist/tools/export-tools.d.ts.map +1 -0
  127. package/dist/tools/export-tools.js +30 -0
  128. package/dist/tools/export-tools.js.map +1 -0
  129. package/dist/tools/graph-tools.d.ts +4 -0
  130. package/dist/tools/graph-tools.d.ts.map +1 -0
  131. package/dist/tools/graph-tools.js +127 -0
  132. package/dist/tools/graph-tools.js.map +1 -0
  133. package/dist/tools/lifecycle-tools.d.ts +9 -0
  134. package/dist/tools/lifecycle-tools.d.ts.map +1 -0
  135. package/dist/tools/lifecycle-tools.js +142 -0
  136. package/dist/tools/lifecycle-tools.js.map +1 -0
  137. package/dist/utils/errors.d.ts +24 -0
  138. package/dist/utils/errors.d.ts.map +1 -0
  139. package/dist/utils/errors.js +31 -0
  140. package/dist/utils/errors.js.map +1 -0
  141. package/dist/utils/ids.d.ts +2 -0
  142. package/dist/utils/ids.d.ts.map +1 -0
  143. package/dist/utils/ids.js +10 -0
  144. package/dist/utils/ids.js.map +1 -0
  145. package/dist/utils/liveness.d.ts +14 -0
  146. package/dist/utils/liveness.d.ts.map +1 -0
  147. package/dist/utils/liveness.js +19 -0
  148. package/dist/utils/liveness.js.map +1 -0
  149. package/dist/utils/tags.d.ts +9 -0
  150. package/dist/utils/tags.d.ts.map +1 -0
  151. package/dist/utils/tags.js +12 -0
  152. package/dist/utils/tags.js.map +1 -0
  153. package/dist/utils/tokens.d.ts +6 -0
  154. package/dist/utils/tokens.d.ts.map +1 -0
  155. package/dist/utils/tokens.js +8 -0
  156. package/dist/utils/tokens.js.map +1 -0
  157. package/dist/utils/types.d.ts +308 -0
  158. package/dist/utils/types.d.ts.map +1 -0
  159. package/dist/utils/types.js +18 -0
  160. package/dist/utils/types.js.map +1 -0
  161. package/package.json +60 -0
  162. package/src/dashboard/public/app.js +2396 -0
  163. package/src/dashboard/public/assets/favicon.svg +44 -0
  164. package/src/dashboard/public/assets/icon-512.png +0 -0
  165. package/src/dashboard/public/assets/logo.svg +45 -0
  166. package/src/dashboard/public/favicon.ico +0 -0
  167. package/src/dashboard/public/index.html +338 -0
  168. package/src/dashboard/public/style.css +858 -0
  169. package/src/dashboard/public/vendor/cytoscape.min.js +1 -0
  170. package/src/dashboard/public/vendor/vis-timeline-graph2d.min.css +2 -0
  171. package/src/dashboard/public/vendor/vis-timeline-graph2d.min.js +48 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * MCP tool handlers for blackboard operations.
3
+ * Registers twining_post, twining_read, and twining_recent.
4
+ */
5
+ import { z } from "zod";
6
+ import { ENTRY_TYPES } from "../utils/types.js";
7
+ import { toolResult, toolError, TwiningError } from "../utils/errors.js";
8
+ export function registerBlackboardTools(server, engine) {
9
+ // twining_post — Post an entry to the shared blackboard
10
+ server.registerTool("twining_post", {
11
+ description: "Post an entry to the shared blackboard. Use this to share findings, needs, warnings, decisions, and other coordination messages with other agents.",
12
+ inputSchema: {
13
+ entry_type: z.enum(ENTRY_TYPES).describe("Type of blackboard entry"),
14
+ summary: z
15
+ .string()
16
+ .max(200)
17
+ .describe("One-line summary (max 200 chars)"),
18
+ detail: z.string().optional().describe("Full context and details"),
19
+ tags: z
20
+ .array(z.string())
21
+ .optional()
22
+ .describe("Domain tags for filtering"),
23
+ scope: z
24
+ .string()
25
+ .optional()
26
+ .describe('File path, module name, or "project"'),
27
+ relates_to: z
28
+ .array(z.string())
29
+ .optional()
30
+ .describe("IDs of related entries"),
31
+ agent_id: z
32
+ .string()
33
+ .optional()
34
+ .describe("Identifier for the posting agent"),
35
+ },
36
+ }, async (args) => {
37
+ try {
38
+ const result = await engine.post(args);
39
+ return toolResult(result);
40
+ }
41
+ catch (e) {
42
+ if (e instanceof TwiningError) {
43
+ return toolError(e.message, e.code);
44
+ }
45
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
46
+ }
47
+ });
48
+ // twining_read — Read blackboard entries with optional filters
49
+ server.registerTool("twining_read", {
50
+ description: "Read blackboard entries with optional filters. Use this to check what other agents have posted, find relevant context, or review recent activity.",
51
+ inputSchema: {
52
+ entry_types: z
53
+ .array(z.string())
54
+ .optional()
55
+ .describe("Filter by entry type(s)"),
56
+ tags: z
57
+ .array(z.string())
58
+ .optional()
59
+ .describe("Filter by tags (OR match)"),
60
+ scope: z
61
+ .string()
62
+ .optional()
63
+ .describe("Filter by scope (prefix match)"),
64
+ since: z
65
+ .string()
66
+ .optional()
67
+ .describe("Only entries after this ISO 8601 timestamp"),
68
+ limit: z
69
+ .number()
70
+ .optional()
71
+ .describe("Max entries to return (default: 50)"),
72
+ },
73
+ }, async (args) => {
74
+ try {
75
+ const result = await engine.read(args);
76
+ return toolResult(result);
77
+ }
78
+ catch (e) {
79
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
80
+ }
81
+ });
82
+ // twining_query — Semantic search across blackboard entries
83
+ server.registerTool("twining_query", {
84
+ description: "Semantic search across blackboard entries. Uses embeddings when available, falls back to keyword search. Returns entries ranked by relevance.",
85
+ inputSchema: {
86
+ query: z.string().describe("Natural language query"),
87
+ entry_types: z
88
+ .array(z.string())
89
+ .optional()
90
+ .describe("Optional type filter"),
91
+ limit: z
92
+ .number()
93
+ .optional()
94
+ .describe("Max results (default: 10)"),
95
+ },
96
+ }, async (args) => {
97
+ try {
98
+ const result = await engine.query(args.query, {
99
+ entry_types: args.entry_types,
100
+ limit: args.limit,
101
+ });
102
+ return toolResult(result);
103
+ }
104
+ catch (e) {
105
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
106
+ }
107
+ });
108
+ // twining_recent — Quick access to latest entries
109
+ server.registerTool("twining_recent", {
110
+ description: "Get the most recent blackboard entries. Quick way to see latest activity without specifying filters.",
111
+ inputSchema: {
112
+ n: z
113
+ .number()
114
+ .optional()
115
+ .describe("Number of entries to return (default: 20)"),
116
+ entry_types: z
117
+ .array(z.string())
118
+ .optional()
119
+ .describe("Optional type filter"),
120
+ },
121
+ }, async (args) => {
122
+ try {
123
+ const result = await engine.recent(args.n, args.entry_types);
124
+ return toolResult(result);
125
+ }
126
+ catch (e) {
127
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
128
+ }
129
+ });
130
+ }
131
+ //# sourceMappingURL=blackboard-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackboard-tools.js","sourceRoot":"","sources":["../../src/tools/blackboard-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ContextAssembler } from "../engine/context-assembler.js";
3
+ export declare function registerContextTools(server: McpServer, contextAssembler: ContextAssembler): void;
4
+ //# sourceMappingURL=context-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tools.d.ts","sourceRoot":"","sources":["../../src/tools/context-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGvE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,gBAAgB,GACjC,IAAI,CAkGN"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * MCP tool handlers for context assembly operations.
3
+ * Registers twining_assemble, twining_summarize, and twining_what_changed.
4
+ */
5
+ import { z } from "zod";
6
+ import { toolResult, toolError, TwiningError } from "../utils/errors.js";
7
+ export function registerContextTools(server, contextAssembler) {
8
+ // twining_assemble — Build tailored context for a specific task
9
+ server.registerTool("twining_assemble", {
10
+ description: "Build tailored context for a specific task. Returns relevant decisions, warnings, needs, findings, and questions within a token budget. Call this before starting any task to get shared context from other agents.",
11
+ inputSchema: {
12
+ task: z.string().describe("Description of what the agent is about to do"),
13
+ scope: z
14
+ .string()
15
+ .describe('File path, module, or area of codebase (e.g., "src/auth/" or "project")'),
16
+ max_tokens: z
17
+ .number()
18
+ .optional()
19
+ .describe("Token budget (default: from config, typically 4000)"),
20
+ },
21
+ }, async (args) => {
22
+ try {
23
+ const result = await contextAssembler.assemble(args.task, args.scope, args.max_tokens);
24
+ return toolResult(result);
25
+ }
26
+ catch (e) {
27
+ if (e instanceof TwiningError) {
28
+ return toolError(e.message, e.code);
29
+ }
30
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
31
+ }
32
+ });
33
+ // twining_summarize — High-level summary of project or scope state
34
+ server.registerTool("twining_summarize", {
35
+ description: "Get a high-level summary of project or scope state. Returns counts of active decisions, open needs, warnings, and a recent activity narrative.",
36
+ inputSchema: {
37
+ scope: z
38
+ .string()
39
+ .optional()
40
+ .describe('Optional scope filter (default: "project")'),
41
+ },
42
+ }, async (args) => {
43
+ try {
44
+ const result = await contextAssembler.summarize(args.scope);
45
+ return toolResult(result);
46
+ }
47
+ catch (e) {
48
+ if (e instanceof TwiningError) {
49
+ return toolError(e.message, e.code);
50
+ }
51
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
52
+ }
53
+ });
54
+ // twining_what_changed — Report changes since a given point in time
55
+ server.registerTool("twining_what_changed", {
56
+ description: "Report what changed since a given point in time. Returns new decisions, new entries, overridden decisions, and reconsidered decisions. Use this to catch up on changes since you last checked.",
57
+ inputSchema: {
58
+ since: z
59
+ .string()
60
+ .describe("ISO 8601 timestamp (e.g., 2024-01-15T10:00:00Z)"),
61
+ scope: z.string().optional().describe("Optional scope filter"),
62
+ },
63
+ }, async (args) => {
64
+ try {
65
+ const result = await contextAssembler.whatChanged(args.since, args.scope);
66
+ return toolResult(result);
67
+ }
68
+ catch (e) {
69
+ if (e instanceof TwiningError) {
70
+ return toolError(e.message, e.code);
71
+ }
72
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
73
+ }
74
+ });
75
+ }
76
+ //# sourceMappingURL=context-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tools.js","sourceRoot":"","sources":["../../src/tools/context-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { AgentStore } from "../storage/agent-store.js";
3
+ import type { CoordinationEngine } from "../engine/coordination.js";
4
+ import type { TwiningConfig } from "../utils/types.js";
5
+ export declare function registerCoordinationTools(server: McpServer, agentStore: AgentStore, coordinationEngine: CoordinationEngine, config: TwiningConfig): void;
6
+ //# sourceMappingURL=coordination-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-tools.d.ts","sourceRoot":"","sources":["../../src/tools/coordination-tools.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOvD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,aAAa,GACpB,IAAI,CAuQN"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * MCP tool handlers for agent coordination operations.
3
+ * Registers twining_agents, twining_discover, twining_delegate,
4
+ * twining_handoff, and twining_acknowledge.
5
+ */
6
+ import { z } from "zod";
7
+ import { computeLiveness, DEFAULT_LIVENESS_THRESHOLDS, } from "../utils/liveness.js";
8
+ import { toolResult, toolError } from "../utils/errors.js";
9
+ export function registerCoordinationTools(server, agentStore, coordinationEngine, config) {
10
+ // twining_agents — List all registered agents with liveness status
11
+ server.registerTool("twining_agents", {
12
+ description: "List all registered agents with their capabilities and liveness status.",
13
+ inputSchema: {
14
+ include_gone: z
15
+ .boolean()
16
+ .optional()
17
+ .describe("Whether to include gone agents (default: true)"),
18
+ },
19
+ }, async (args) => {
20
+ try {
21
+ const includeGone = args.include_gone ?? true;
22
+ const agents = await agentStore.getAll();
23
+ const thresholds = config.agents?.liveness ?? DEFAULT_LIVENESS_THRESHOLDS;
24
+ const now = new Date();
25
+ const mapped = agents.map((agent) => ({
26
+ agent_id: agent.agent_id,
27
+ capabilities: agent.capabilities,
28
+ role: agent.role,
29
+ description: agent.description,
30
+ registered_at: agent.registered_at,
31
+ last_active: agent.last_active,
32
+ liveness: computeLiveness(agent.last_active, now, thresholds),
33
+ }));
34
+ const filtered = includeGone
35
+ ? mapped
36
+ : mapped.filter((a) => a.liveness !== "gone");
37
+ const activeCount = mapped.filter((a) => a.liveness === "active").length;
38
+ return toolResult({
39
+ agents: filtered,
40
+ total_registered: agents.length,
41
+ active_count: activeCount,
42
+ });
43
+ }
44
+ catch (e) {
45
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
46
+ }
47
+ });
48
+ // twining_discover — Find agents matching required capabilities
49
+ server.registerTool("twining_discover", {
50
+ description: "Find agents matching required capabilities, ranked by capability overlap and liveness. Returns scored agent list for delegation decisions.",
51
+ inputSchema: {
52
+ required_capabilities: z
53
+ .array(z.string())
54
+ .describe("Capabilities the agent must have (e.g. ['testing', 'typescript'])"),
55
+ include_gone: z
56
+ .boolean()
57
+ .optional()
58
+ .describe("Whether to include gone agents (default: true)"),
59
+ min_score: z
60
+ .number()
61
+ .optional()
62
+ .describe("Minimum total_score threshold (default: 0)"),
63
+ },
64
+ }, async (args) => {
65
+ try {
66
+ const result = await coordinationEngine.discover({
67
+ required_capabilities: args.required_capabilities,
68
+ include_gone: args.include_gone,
69
+ min_score: args.min_score,
70
+ });
71
+ return toolResult(result);
72
+ }
73
+ catch (e) {
74
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
75
+ }
76
+ });
77
+ // twining_delegate — Post a delegation request to the blackboard
78
+ server.registerTool("twining_delegate", {
79
+ description: "Post a delegation request to the blackboard as a 'need' entry with capability requirements. Returns suggested agents ranked by match quality.",
80
+ inputSchema: {
81
+ summary: z
82
+ .string()
83
+ .describe("Description of the task to delegate (max 200 chars)"),
84
+ required_capabilities: z
85
+ .array(z.string())
86
+ .describe("Capabilities needed for this task"),
87
+ urgency: z
88
+ .enum(["high", "normal", "low"])
89
+ .optional()
90
+ .describe("Urgency level affecting timeout (default: 'normal')"),
91
+ timeout_ms: z
92
+ .number()
93
+ .optional()
94
+ .describe("Custom timeout in ms (overrides urgency-based default)"),
95
+ scope: z
96
+ .string()
97
+ .optional()
98
+ .describe("Scope for the delegation (default: 'project')"),
99
+ tags: z
100
+ .array(z.string())
101
+ .optional()
102
+ .describe("Additional tags for the delegation entry"),
103
+ agent_id: z
104
+ .string()
105
+ .optional()
106
+ .describe("ID of the delegating agent (default: 'main')"),
107
+ },
108
+ }, async (args) => {
109
+ try {
110
+ const result = await coordinationEngine.postDelegation({
111
+ summary: args.summary,
112
+ required_capabilities: args.required_capabilities,
113
+ urgency: args.urgency,
114
+ timeout_ms: args.timeout_ms,
115
+ scope: args.scope,
116
+ tags: args.tags,
117
+ agent_id: args.agent_id,
118
+ });
119
+ return toolResult(result);
120
+ }
121
+ catch (e) {
122
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
123
+ }
124
+ });
125
+ // twining_handoff — Create a handoff between agents
126
+ server.registerTool("twining_handoff", {
127
+ description: "Create a handoff record from one agent to another, capturing work results and auto-assembling context snapshot. Posts a status entry to the blackboard.",
128
+ inputSchema: {
129
+ source_agent: z
130
+ .string()
131
+ .describe("ID of the agent handing off work"),
132
+ target_agent: z
133
+ .string()
134
+ .optional()
135
+ .describe("ID of the target agent (omit for open handoff to any agent)"),
136
+ scope: z
137
+ .string()
138
+ .optional()
139
+ .describe("Scope of the handoff (default: 'project')"),
140
+ summary: z
141
+ .string()
142
+ .describe("Summary of work being handed off"),
143
+ results: z
144
+ .array(z.object({
145
+ description: z.string().describe("What was done"),
146
+ status: z
147
+ .enum(["completed", "partial", "blocked", "failed"])
148
+ .describe("Result status"),
149
+ artifacts: z
150
+ .array(z.string())
151
+ .optional()
152
+ .describe("File paths or artifact IDs produced"),
153
+ notes: z
154
+ .string()
155
+ .optional()
156
+ .describe("Additional notes"),
157
+ }))
158
+ .describe("Results of the work being handed off"),
159
+ auto_snapshot: z
160
+ .boolean()
161
+ .optional()
162
+ .describe("Auto-assemble context snapshot from decisions/warnings (default: true)"),
163
+ },
164
+ }, async (args) => {
165
+ try {
166
+ const record = await coordinationEngine.createHandoff({
167
+ source_agent: args.source_agent,
168
+ target_agent: args.target_agent,
169
+ scope: args.scope,
170
+ summary: args.summary,
171
+ results: args.results,
172
+ auto_snapshot: args.auto_snapshot,
173
+ });
174
+ return toolResult({
175
+ id: record.id,
176
+ created_at: record.created_at,
177
+ source_agent: record.source_agent,
178
+ target_agent: record.target_agent,
179
+ scope: record.scope,
180
+ summary: record.summary,
181
+ result_count: record.results.length,
182
+ context_snapshot_size: {
183
+ decisions: record.context_snapshot.decision_ids.length,
184
+ warnings: record.context_snapshot.warning_ids.length,
185
+ findings: record.context_snapshot.finding_ids.length,
186
+ },
187
+ });
188
+ }
189
+ catch (e) {
190
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
191
+ }
192
+ });
193
+ // twining_acknowledge — Acknowledge receipt of a handoff
194
+ server.registerTool("twining_acknowledge", {
195
+ description: "Acknowledge receipt of a handoff, recording which agent picked it up.",
196
+ inputSchema: {
197
+ handoff_id: z
198
+ .string()
199
+ .describe("ID of the handoff to acknowledge"),
200
+ agent_id: z
201
+ .string()
202
+ .describe("ID of the agent acknowledging the handoff"),
203
+ },
204
+ }, async (args) => {
205
+ try {
206
+ const record = await coordinationEngine.acknowledgeHandoff(args.handoff_id, args.agent_id);
207
+ return toolResult({
208
+ id: record.id,
209
+ acknowledged_by: record.acknowledged_by,
210
+ acknowledged_at: record.acknowledged_at,
211
+ summary: record.summary,
212
+ source_agent: record.source_agent,
213
+ });
214
+ }
215
+ catch (e) {
216
+ return toolError(e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR");
217
+ }
218
+ });
219
+ }
220
+ //# sourceMappingURL=coordination-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-tools.js","sourceRoot":"","sources":["../../src/tools/coordination-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { DecisionEngine } from "../engine/decisions.js";
3
+ export declare function registerDecisionTools(server: McpServer, engine: DecisionEngine): void;
4
+ //# sourceMappingURL=decision-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-tools.d.ts","sourceRoot":"","sources":["../../src/tools/decision-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,IAAI,CA2VN"}