@adhd/agent-mcp 0.0.1

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 (196) hide show
  1. package/drizzle/0000_nifty_sasquatch.sql +55 -0
  2. package/drizzle/meta/0000_snapshot.json +387 -0
  3. package/drizzle/meta/_journal.json +13 -0
  4. package/package.json +51 -0
  5. package/src/clients/http-client.d.ts +24 -0
  6. package/src/clients/http-client.d.ts.map +1 -0
  7. package/src/clients/http-client.js +96 -0
  8. package/src/clients/http-client.js.map +1 -0
  9. package/src/clients/in-process.d.ts +27 -0
  10. package/src/clients/in-process.d.ts.map +1 -0
  11. package/src/clients/in-process.js +32 -0
  12. package/src/clients/in-process.js.map +1 -0
  13. package/src/clients/index.d.ts +7 -0
  14. package/src/clients/index.d.ts.map +1 -0
  15. package/src/clients/index.js +5 -0
  16. package/src/clients/index.js.map +1 -0
  17. package/src/clients/registry.d.ts +37 -0
  18. package/src/clients/registry.d.ts.map +1 -0
  19. package/src/clients/registry.js +125 -0
  20. package/src/clients/registry.js.map +1 -0
  21. package/src/clients/stdio-client.d.ts +16 -0
  22. package/src/clients/stdio-client.d.ts.map +1 -0
  23. package/src/clients/stdio-client.js +90 -0
  24. package/src/clients/stdio-client.js.map +1 -0
  25. package/src/clients/types.d.ts +14 -0
  26. package/src/clients/types.d.ts.map +1 -0
  27. package/src/clients/types.js +2 -0
  28. package/src/clients/types.js.map +1 -0
  29. package/src/db/client.d.ts +6 -0
  30. package/src/db/client.d.ts.map +1 -0
  31. package/src/db/client.js +19 -0
  32. package/src/db/client.js.map +1 -0
  33. package/src/db/migrate.d.ts +6 -0
  34. package/src/db/migrate.d.ts.map +1 -0
  35. package/src/db/migrate.js +12 -0
  36. package/src/db/migrate.js.map +1 -0
  37. package/src/db/schema.d.ts +733 -0
  38. package/src/db/schema.d.ts.map +1 -0
  39. package/src/db/schema.js +100 -0
  40. package/src/db/schema.js.map +1 -0
  41. package/src/engine/orchestrator.d.ts +24 -0
  42. package/src/engine/orchestrator.d.ts.map +1 -0
  43. package/src/engine/orchestrator.js +231 -0
  44. package/src/engine/orchestrator.js.map +1 -0
  45. package/src/engine/policy.d.ts +42 -0
  46. package/src/engine/policy.d.ts.map +1 -0
  47. package/src/engine/policy.js +45 -0
  48. package/src/engine/policy.js.map +1 -0
  49. package/src/engine/queue.d.ts +23 -0
  50. package/src/engine/queue.d.ts.map +1 -0
  51. package/src/engine/queue.js +45 -0
  52. package/src/engine/queue.js.map +1 -0
  53. package/src/index.d.ts +3 -0
  54. package/src/index.d.ts.map +1 -0
  55. package/src/index.js +51 -0
  56. package/src/index.js.map +1 -0
  57. package/src/logger.d.ts +11 -0
  58. package/src/logger.d.ts.map +1 -0
  59. package/src/logger.js +17 -0
  60. package/src/logger.js.map +1 -0
  61. package/src/providers/anthropic.d.ts +11 -0
  62. package/src/providers/anthropic.d.ts.map +1 -0
  63. package/src/providers/anthropic.js +133 -0
  64. package/src/providers/anthropic.js.map +1 -0
  65. package/src/providers/factory.d.ts +7 -0
  66. package/src/providers/factory.d.ts.map +1 -0
  67. package/src/providers/factory.js +21 -0
  68. package/src/providers/factory.js.map +1 -0
  69. package/src/providers/index.d.ts +6 -0
  70. package/src/providers/index.d.ts.map +1 -0
  71. package/src/providers/index.js +5 -0
  72. package/src/providers/index.js.map +1 -0
  73. package/src/providers/lmstudio.d.ts +8 -0
  74. package/src/providers/lmstudio.d.ts.map +1 -0
  75. package/src/providers/lmstudio.js +15 -0
  76. package/src/providers/lmstudio.js.map +1 -0
  77. package/src/providers/openai.d.ts +12 -0
  78. package/src/providers/openai.d.ts.map +1 -0
  79. package/src/providers/openai.js +129 -0
  80. package/src/providers/openai.js.map +1 -0
  81. package/src/providers/types.d.ts +32 -0
  82. package/src/providers/types.d.ts.map +1 -0
  83. package/src/providers/types.js +2 -0
  84. package/src/providers/types.js.map +1 -0
  85. package/src/server.d.ts +23 -0
  86. package/src/server.d.ts.map +1 -0
  87. package/src/server.js +539 -0
  88. package/src/server.js.map +1 -0
  89. package/src/store/agent-store.d.ts +12 -0
  90. package/src/store/agent-store.d.ts.map +1 -0
  91. package/src/store/agent-store.js +97 -0
  92. package/src/store/agent-store.js.map +1 -0
  93. package/src/store/index.d.ts +4 -0
  94. package/src/store/index.d.ts.map +1 -0
  95. package/src/store/index.js +4 -0
  96. package/src/store/index.js.map +1 -0
  97. package/src/store/session-store.d.ts +23 -0
  98. package/src/store/session-store.d.ts.map +1 -0
  99. package/src/store/session-store.js +152 -0
  100. package/src/store/session-store.js.map +1 -0
  101. package/src/store/task-store.d.ts +49 -0
  102. package/src/store/task-store.d.ts.map +1 -0
  103. package/src/store/task-store.js +154 -0
  104. package/src/store/task-store.js.map +1 -0
  105. package/src/tools/agent-crud.d.ts +13 -0
  106. package/src/tools/agent-crud.d.ts.map +1 -0
  107. package/src/tools/agent-crud.js +17 -0
  108. package/src/tools/agent-crud.js.map +1 -0
  109. package/src/tools/session.d.ts +21 -0
  110. package/src/tools/session.d.ts.map +1 -0
  111. package/src/tools/session.js +41 -0
  112. package/src/tools/session.js.map +1 -0
  113. package/src/tools/task.d.ts +38 -0
  114. package/src/tools/task.d.ts.map +1 -0
  115. package/src/tools/task.js +136 -0
  116. package/src/tools/task.js.map +1 -0
  117. package/src/types/agent.d.ts +2 -0
  118. package/src/types/agent.d.ts.map +1 -0
  119. package/src/types/agent.js +3 -0
  120. package/src/types/agent.js.map +1 -0
  121. package/src/types/execution.d.ts +2 -0
  122. package/src/types/execution.d.ts.map +1 -0
  123. package/src/types/execution.js +3 -0
  124. package/src/types/execution.js.map +1 -0
  125. package/src/types/index.d.ts +2 -0
  126. package/src/types/index.d.ts.map +1 -0
  127. package/src/types/index.js +2 -0
  128. package/src/types/index.js.map +1 -0
  129. package/src/types/mcp.d.ts +2 -0
  130. package/src/types/mcp.d.ts.map +1 -0
  131. package/src/types/mcp.js +3 -0
  132. package/src/types/mcp.js.map +1 -0
  133. package/src/types/message.d.ts +2 -0
  134. package/src/types/message.d.ts.map +1 -0
  135. package/src/types/message.js +3 -0
  136. package/src/types/message.js.map +1 -0
  137. package/src/types/session.d.ts +2 -0
  138. package/src/types/session.d.ts.map +1 -0
  139. package/src/types/session.js +3 -0
  140. package/src/types/session.js.map +1 -0
  141. package/src/types/task.d.ts +2 -0
  142. package/src/types/task.d.ts.map +1 -0
  143. package/src/types/task.js +3 -0
  144. package/src/types/task.js.map +1 -0
  145. package/src/utils/ids.d.ts +2 -0
  146. package/src/utils/ids.d.ts.map +1 -0
  147. package/src/utils/ids.js +5 -0
  148. package/src/utils/ids.js.map +1 -0
  149. package/src/utils/logger.d.ts +2 -0
  150. package/src/utils/logger.d.ts.map +1 -0
  151. package/src/utils/logger.js +5 -0
  152. package/src/utils/logger.js.map +1 -0
  153. package/src/utils/timestamps.d.ts +2 -0
  154. package/src/utils/timestamps.d.ts.map +1 -0
  155. package/src/utils/timestamps.js +4 -0
  156. package/src/utils/timestamps.js.map +1 -0
  157. package/src/validation/agent.d.ts +276 -0
  158. package/src/validation/agent.d.ts.map +1 -0
  159. package/src/validation/agent.js +94 -0
  160. package/src/validation/agent.js.map +1 -0
  161. package/src/validation/agents.d.ts +2 -0
  162. package/src/validation/agents.d.ts.map +1 -0
  163. package/src/validation/agents.js +3 -0
  164. package/src/validation/agents.js.map +1 -0
  165. package/src/validation/errors.d.ts +23 -0
  166. package/src/validation/errors.d.ts.map +1 -0
  167. package/src/validation/errors.js +33 -0
  168. package/src/validation/errors.js.map +1 -0
  169. package/src/validation/execution.d.ts +83 -0
  170. package/src/validation/execution.d.ts.map +1 -0
  171. package/src/validation/execution.js +23 -0
  172. package/src/validation/execution.js.map +1 -0
  173. package/src/validation/index.d.ts +8 -0
  174. package/src/validation/index.d.ts.map +1 -0
  175. package/src/validation/index.js +8 -0
  176. package/src/validation/index.js.map +1 -0
  177. package/src/validation/mcp.d.ts +43 -0
  178. package/src/validation/mcp.d.ts.map +1 -0
  179. package/src/validation/mcp.js +28 -0
  180. package/src/validation/mcp.js.map +1 -0
  181. package/src/validation/message.d.ts +46 -0
  182. package/src/validation/message.d.ts.map +1 -0
  183. package/src/validation/message.js +23 -0
  184. package/src/validation/message.js.map +1 -0
  185. package/src/validation/session.d.ts +49 -0
  186. package/src/validation/session.d.ts.map +1 -0
  187. package/src/validation/session.js +34 -0
  188. package/src/validation/session.js.map +1 -0
  189. package/src/validation/task.d.ts +94 -0
  190. package/src/validation/task.d.ts.map +1 -0
  191. package/src/validation/task.js +60 -0
  192. package/src/validation/task.js.map +1 -0
  193. package/src/validation/tasks.d.ts +2 -0
  194. package/src/validation/tasks.d.ts.map +1 -0
  195. package/src/validation/tasks.js +3 -0
  196. package/src/validation/tasks.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/schema.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMtB,CAAC;AAKH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBxB,CAAC;AAKH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAexB,CAAC;AAKH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBrB,CAAC;AAKH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoB1B,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
2
+ // ──────────────────────────────────────────────
3
+ // agents
4
+ // ──────────────────────────────────────────────
5
+ export const agentsTable = sqliteTable("agents", {
6
+ name: text("name").primaryKey(),
7
+ version: integer("version").notNull().default(1),
8
+ data: text("data").notNull(), // JSON blob: AgentDefinition
9
+ createdAt: text("created_at").notNull(),
10
+ updatedAt: text("updated_at").notNull(),
11
+ });
12
+ // ──────────────────────────────────────────────
13
+ // sessions
14
+ // ──────────────────────────────────────────────
15
+ export const sessionsTable = sqliteTable("sessions", {
16
+ id: text("id").primaryKey(),
17
+ agentName: text("agent_name")
18
+ .notNull()
19
+ .references(() => agentsTable.name, {
20
+ onDelete: "cascade"
21
+ }),
22
+ agentVersion: integer("agent_version").notNull(),
23
+ // Full JSON snapshot of AgentDefinition at session creation time.
24
+ // Not exposed in the public Session type — accessed only via
25
+ // SessionStore.getAgentDefinition(sessionId).
26
+ agentData: text("agent_data").notNull(),
27
+ status: text("status", {
28
+ enum: ["active", "closed"]
29
+ }).notNull().default("active"),
30
+ createdAt: text("created_at").notNull(),
31
+ updatedAt: text("updated_at").notNull(),
32
+ closedAt: text("closed_at"),
33
+ });
34
+ // ──────────────────────────────────────────────
35
+ // messages
36
+ // ──────────────────────────────────────────────
37
+ export const messagesTable = sqliteTable("messages", {
38
+ id: text("id").primaryKey(),
39
+ sessionId: text("session_id")
40
+ .notNull()
41
+ .references(() => sessionsTable.id, {
42
+ onDelete: "cascade"
43
+ }),
44
+ role: text("role", {
45
+ enum: ["system", "user", "assistant", "tool"]
46
+ }).notNull(),
47
+ content: text("content"),
48
+ // JSON blobs for tool call / result payloads
49
+ toolCalls: text("tool_calls"),
50
+ toolResults: text("tool_results"),
51
+ createdAt: text("created_at").notNull(),
52
+ });
53
+ // ──────────────────────────────────────────────
54
+ // tasks
55
+ // ──────────────────────────────────────────────
56
+ export const tasksTable = sqliteTable("tasks", {
57
+ id: text("id").primaryKey(),
58
+ sessionId: text("session_id")
59
+ .notNull()
60
+ .references(() => sessionsTable.id, {
61
+ onDelete: "cascade"
62
+ }),
63
+ parentTaskId: text("parent_task_id"),
64
+ recursionDepth: integer("recursion_depth").notNull().default(0),
65
+ status: text("status", {
66
+ enum: ["pending", "running", "completed", "failed", "cancelled"]
67
+ }).notNull().default("pending"),
68
+ prompt: text("prompt").notNull(),
69
+ result: text("result"),
70
+ error: text("error"),
71
+ createdAt: text("created_at").notNull(),
72
+ updatedAt: text("updated_at").notNull(),
73
+ completedAt: text("completed_at"),
74
+ cancelledAt: text("cancelled_at"),
75
+ });
76
+ // ──────────────────────────────────────────────
77
+ // task_events
78
+ // ──────────────────────────────────────────────
79
+ export const taskEventsTable = sqliteTable("task_events", {
80
+ id: text("id").primaryKey(),
81
+ taskId: text("task_id")
82
+ .notNull()
83
+ .references(() => tasksTable.id, {
84
+ onDelete: "cascade"
85
+ }),
86
+ type: text("type", {
87
+ enum: [
88
+ "MODEL_REQUEST",
89
+ "MODEL_RESPONSE",
90
+ "TOOL_CALL",
91
+ "TOOL_RESULT",
92
+ "TASK_COMPLETED",
93
+ "TASK_FAILED",
94
+ "TASK_CANCELLED"
95
+ ]
96
+ }).notNull(),
97
+ payload: text("payload"), // JSON
98
+ createdAt: text("created_at").notNull(),
99
+ });
100
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { LLMProvider } from "../providers/types.js";
2
+ import type { ExecutionContext, Message } from "../validation/index.js";
3
+ import type { McpClientRegistry } from "../clients/registry.js";
4
+ import type { PolicyEngine } from "./policy.js";
5
+ import type { TaskStore } from "../store/task-store.js";
6
+ import type { SessionStore } from "../store/session-store.js";
7
+ export interface OrchestratorRunInput {
8
+ executionContext: ExecutionContext;
9
+ messages: Message[];
10
+ registry: McpClientRegistry;
11
+ provider: LLMProvider;
12
+ policy: PolicyEngine;
13
+ taskStore: TaskStore;
14
+ sessionStore: SessionStore;
15
+ signal: AbortSignal;
16
+ taskId: string;
17
+ }
18
+ export interface OrchestratorRunResult {
19
+ result: string;
20
+ }
21
+ export declare class Orchestrator {
22
+ run(input: OrchestratorRunInput): Promise<OrchestratorRunResult>;
23
+ }
24
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAKxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACf,GAAG,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA2SzE"}
@@ -0,0 +1,231 @@
1
+ import { logger } from "../logger.js";
2
+ import { ToolError } from "../validation/errors.js";
3
+ import { generateId } from "../utils/ids.js";
4
+ import { nowIso } from "../utils/timestamps.js";
5
+ export class Orchestrator {
6
+ async run(input) {
7
+ const { executionContext, registry, provider, policy, taskStore, sessionStore, signal, taskId, } = input;
8
+ // Working copy of messages — we append to this as the loop progresses
9
+ const currentMessages = [...input.messages];
10
+ try {
11
+ // Mark task as running
12
+ taskStore.updateStatus(taskId, "running");
13
+ let finalContent = "";
14
+ // Tool-use loop — break on "completed" stop reason, throw on cancellation/policy
15
+ let looping = true;
16
+ while (looping) {
17
+ // Check for cancellation at the top of each iteration
18
+ if (signal.aborted) {
19
+ throw new ToolError("PROVIDER_ERROR", "Task was cancelled");
20
+ }
21
+ // Compose per-iteration signal: task cancellation OR provider timeout
22
+ const composedSignal = AbortSignal.any([
23
+ signal,
24
+ AbortSignal.timeout(executionContext.agentDefinition.provider.timeoutMs ?? 60_000),
25
+ ]);
26
+ // Gather available tools from the registry
27
+ const tools = await registry.listAllTools();
28
+ // Emit MODEL_REQUEST event
29
+ taskStore.appendEvent({
30
+ taskId,
31
+ type: "MODEL_REQUEST",
32
+ payload: { messageCount: currentMessages.length, toolCount: tools.length },
33
+ });
34
+ logger.debug({
35
+ taskId,
36
+ sessionId: executionContext.sessionId,
37
+ agentName: executionContext.agentName,
38
+ messageCount: currentMessages.length,
39
+ }, "MODEL_REQUEST");
40
+ // Call the LLM provider
41
+ let providerResponse;
42
+ try {
43
+ providerResponse = await provider.chat({
44
+ messages: currentMessages,
45
+ tools: tools.length > 0 ? tools : undefined,
46
+ signal: composedSignal,
47
+ });
48
+ }
49
+ catch (error) {
50
+ if (signal.aborted) {
51
+ throw new ToolError("PROVIDER_ERROR", "Task was cancelled during provider call");
52
+ }
53
+ if (composedSignal.aborted ||
54
+ (error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError"))) {
55
+ const ms = executionContext.agentDefinition.provider.timeoutMs ?? 60_000;
56
+ throw new ToolError("PROVIDER_ERROR", `Provider call timed out after ${ms}ms. Increase timeoutMs on the agent's provider config.`);
57
+ }
58
+ throw new ToolError("PROVIDER_ERROR", `Provider call failed: ${error instanceof Error ? error.message : String(error)}`);
59
+ }
60
+ const assistantMessage = {
61
+ ...providerResponse.message,
62
+ sessionId: executionContext.sessionId,
63
+ };
64
+ // Persist and append the assistant message
65
+ await sessionStore.appendMessage(executionContext.sessionId, assistantMessage);
66
+ currentMessages.push(assistantMessage);
67
+ // Emit MODEL_RESPONSE event
68
+ taskStore.appendEvent({
69
+ taskId,
70
+ type: "MODEL_RESPONSE",
71
+ payload: {
72
+ stopReason: providerResponse.stopReason,
73
+ hasContent: !!assistantMessage.content,
74
+ toolCallCount: assistantMessage.toolCalls?.length ?? 0,
75
+ },
76
+ });
77
+ logger.debug({
78
+ taskId,
79
+ agentName: executionContext.agentName,
80
+ stopReason: providerResponse.stopReason,
81
+ }, "MODEL_RESPONSE");
82
+ if (providerResponse.stopReason === "completed") {
83
+ finalContent = assistantMessage.content ?? "";
84
+ looping = false;
85
+ continue;
86
+ }
87
+ // Process tool calls
88
+ const toolCalls = assistantMessage.toolCalls ?? [];
89
+ for (const toolCall of toolCalls) {
90
+ // Check for cancellation before each tool call
91
+ if (signal.aborted) {
92
+ throw new ToolError("PROVIDER_ERROR", "Task was cancelled before tool call");
93
+ }
94
+ const qualifiedToolName = `${toolCall.server}__${toolCall.tool}`;
95
+ // Policy check before executing the tool
96
+ policy.check({
97
+ executionContext,
98
+ targetTool: qualifiedToolName,
99
+ targetAgentName: qualifiedToolName === "agent-mcp__agent"
100
+ ? toolCall.arguments?.name
101
+ : undefined,
102
+ });
103
+ // Emit TOOL_CALL event
104
+ taskStore.appendEvent({
105
+ taskId,
106
+ type: "TOOL_CALL",
107
+ payload: {
108
+ tool: qualifiedToolName,
109
+ callId: toolCall.id,
110
+ },
111
+ });
112
+ logger.info({
113
+ taskId,
114
+ agentName: executionContext.agentName,
115
+ tool: qualifiedToolName,
116
+ callId: toolCall.id,
117
+ }, "TOOL_CALL");
118
+ let toolResult;
119
+ let isError = false;
120
+ try {
121
+ const client = await registry.getClient(toolCall.server);
122
+ toolResult = await client.callTool(toolCall.tool, toolCall.arguments);
123
+ }
124
+ catch (error) {
125
+ isError = true;
126
+ toolResult = error instanceof Error ? error.message : String(error);
127
+ logger.warn({
128
+ taskId,
129
+ tool: qualifiedToolName,
130
+ error: toolResult,
131
+ }, "TOOL_RESULT error");
132
+ // Re-throw policy violations and cancellation — these are fatal
133
+ if (error instanceof ToolError) {
134
+ const fatalCodes = [
135
+ "MAX_DEPTH_EXCEEDED",
136
+ "MAX_TOOL_LOOPS_EXCEEDED",
137
+ "DELEGATION_NOT_ALLOWED",
138
+ ];
139
+ if (fatalCodes.includes(error.code)) {
140
+ throw error;
141
+ }
142
+ }
143
+ }
144
+ // Emit TOOL_RESULT event
145
+ taskStore.appendEvent({
146
+ taskId,
147
+ type: "TOOL_RESULT",
148
+ payload: {
149
+ callId: toolCall.id,
150
+ tool: qualifiedToolName,
151
+ isError,
152
+ },
153
+ });
154
+ logger.debug({
155
+ taskId,
156
+ tool: qualifiedToolName,
157
+ isError,
158
+ }, "TOOL_RESULT");
159
+ // Append tool result message
160
+ const toolResultMessage = {
161
+ id: generateId(),
162
+ sessionId: executionContext.sessionId,
163
+ role: "tool",
164
+ toolResults: [
165
+ {
166
+ toolCallId: toolCall.id,
167
+ result: toolResult,
168
+ isError,
169
+ },
170
+ ],
171
+ createdAt: nowIso(),
172
+ };
173
+ await sessionStore.appendMessage(executionContext.sessionId, toolResultMessage);
174
+ currentMessages.push(toolResultMessage);
175
+ // Increment toolCallCount AFTER the result is appended
176
+ // so the next policy check sees the updated value
177
+ executionContext.toolCallCount++;
178
+ }
179
+ }
180
+ // Task completed successfully
181
+ taskStore.updateStatus(taskId, "completed", {
182
+ result: finalContent,
183
+ completedAt: nowIso(),
184
+ });
185
+ taskStore.appendEvent({
186
+ taskId,
187
+ type: "TASK_COMPLETED",
188
+ payload: { result: finalContent },
189
+ });
190
+ logger.info({ taskId, agentName: executionContext.agentName }, "TASK_COMPLETED");
191
+ return { result: finalContent };
192
+ }
193
+ catch (error) {
194
+ // Determine if this is a cancellation or a real failure
195
+ const isCancelled = signal.aborted ||
196
+ (error instanceof ToolError && error.code === "PROVIDER_ERROR" && error.message.includes("cancelled"));
197
+ if (isCancelled) {
198
+ // Status update handled by TaskStore.cancel() in most cases;
199
+ // update here only if not already cancelled
200
+ try {
201
+ taskStore.updateStatus(taskId, "cancelled", {
202
+ cancelledAt: nowIso(),
203
+ });
204
+ }
205
+ catch {
206
+ // already cancelled — ignore
207
+ }
208
+ taskStore.appendEvent({ taskId, type: "TASK_CANCELLED" });
209
+ }
210
+ else {
211
+ const errorMessage = error instanceof Error ? error.message : String(error);
212
+ taskStore.updateStatus(taskId, "failed", {
213
+ error: errorMessage,
214
+ });
215
+ taskStore.appendEvent({
216
+ taskId,
217
+ type: "TASK_FAILED",
218
+ payload: { error: errorMessage },
219
+ });
220
+ logger.error({ taskId, agentName: executionContext.agentName, error }, "TASK_FAILED");
221
+ }
222
+ throw error;
223
+ }
224
+ finally {
225
+ // Per-task registry teardown — always runs
226
+ await registry.closeAll();
227
+ taskStore.unregisterCancellation(taskId);
228
+ }
229
+ }
230
+ }
231
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ExecutionContext } from "../validation/index.js";
2
+ export interface PolicyConfig {
3
+ /** Absolute maximum recursion depth. Agent definitions cannot exceed this. */
4
+ serverMaxDepth: number;
5
+ /** Absolute maximum tool call loops per task. Agent definitions cannot exceed this. */
6
+ serverMaxToolLoops: number;
7
+ /**
8
+ * Server-level allowed agents allowlist.
9
+ * - undefined → unrestricted (any agent may be called)
10
+ * - string[] → only agents in this list may be called
11
+ * Per-agent allowedAgents takes full precedence over this when defined.
12
+ */
13
+ serverAllowedAgents?: string[];
14
+ }
15
+ export interface PolicyCheckInput {
16
+ executionContext: ExecutionContext;
17
+ /**
18
+ * The fully-qualified tool name being invoked: "<server>__<tool>".
19
+ * The allowedAgents check only applies when this is "agent-mcp__agent".
20
+ */
21
+ targetTool: string;
22
+ /**
23
+ * When targetTool === "agent-mcp__agent", the name of the target agent.
24
+ * Used for the allowedAgents check (#3).
25
+ */
26
+ targetAgentName?: string;
27
+ }
28
+ /**
29
+ * PolicyEngine enforces the three SPEC §9 safety invariants:
30
+ *
31
+ * 1. Recursion depth limit
32
+ * 2. Tool call loop limit
33
+ * 3. AllowedAgents list (per-agent override takes full precedence over server default)
34
+ *
35
+ * Throws ToolError on any violation. Does not mutate state.
36
+ */
37
+ export declare class PolicyEngine {
38
+ private readonly config;
39
+ constructor(config: PolicyConfig);
40
+ check(input: PolicyCheckInput): void;
41
+ }
42
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,MAAM,WAAW,YAAY;IACzB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAEjD,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;CAkDvC"}
@@ -0,0 +1,45 @@
1
+ import { ToolError } from "../validation/errors.js";
2
+ /**
3
+ * PolicyEngine enforces the three SPEC §9 safety invariants:
4
+ *
5
+ * 1. Recursion depth limit
6
+ * 2. Tool call loop limit
7
+ * 3. AllowedAgents list (per-agent override takes full precedence over server default)
8
+ *
9
+ * Throws ToolError on any violation. Does not mutate state.
10
+ */
11
+ export class PolicyEngine {
12
+ config;
13
+ constructor(config) {
14
+ this.config = config;
15
+ }
16
+ check(input) {
17
+ const { executionContext, targetTool, targetAgentName } = input;
18
+ const callingAgent = executionContext.agentDefinition;
19
+ // ── Check 1: Recursion depth ──────────────────────────────────────
20
+ const effectiveMaxDepth = Math.min(callingAgent.maxToolLoops ?? this.config.serverMaxDepth, this.config.serverMaxDepth);
21
+ if (executionContext.recursionDepth >= effectiveMaxDepth) {
22
+ throw new ToolError("MAX_DEPTH_EXCEEDED", `Recursion depth ${executionContext.recursionDepth} has reached or exceeded the maximum of ${effectiveMaxDepth}`);
23
+ }
24
+ // ── Check 2: Tool call loop limit ─────────────────────────────────
25
+ const effectiveMaxToolLoops = Math.min(callingAgent.maxToolLoops ?? this.config.serverMaxToolLoops, this.config.serverMaxToolLoops);
26
+ if (executionContext.toolCallCount >= effectiveMaxToolLoops) {
27
+ throw new ToolError("MAX_TOOL_LOOPS_EXCEEDED", `Tool call count ${executionContext.toolCallCount} has reached or exceeded the maximum of ${effectiveMaxToolLoops}`);
28
+ }
29
+ // ── Check 3: AllowedAgents (only for agent delegation) ────────────
30
+ if (targetTool === "agent-mcp__agent" && targetAgentName !== undefined) {
31
+ // Per-agent allowedAgents takes FULL precedence over server default.
32
+ const agentAllowedAgents = callingAgent.permissions.allowedAgents;
33
+ const effectiveAllowedAgents = agentAllowedAgents !== undefined
34
+ ? agentAllowedAgents // agent-level: always wins
35
+ : this.config.serverAllowedAgents; // fall back to server default
36
+ // If effectiveAllowedAgents is undefined → unrestricted
37
+ if (effectiveAllowedAgents !== undefined) {
38
+ if (!effectiveAllowedAgents.includes(targetAgentName)) {
39
+ throw new ToolError("DELEGATION_NOT_ALLOWED", `Agent '${executionContext.agentName}' is not allowed to delegate to '${targetAgentName}'`);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AA8BpD;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;IACQ;IAA7B,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAErD,KAAK,CAAC,KAAuB;QACzB,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;QAChE,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC;QAEtD,qEAAqE;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAC9B,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EACvD,IAAI,CAAC,MAAM,CAAC,cAAc,CAC7B,CAAC;QAEF,IAAI,gBAAgB,CAAC,cAAc,IAAI,iBAAiB,EAAE,CAAC;YACvD,MAAM,IAAI,SAAS,CACf,oBAAoB,EACpB,mBAAmB,gBAAgB,CAAC,cAAc,2CAA2C,iBAAiB,EAAE,CACnH,CAAC;QACN,CAAC;QAED,qEAAqE;QACrE,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAClC,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAC3D,IAAI,CAAC,MAAM,CAAC,kBAAkB,CACjC,CAAC;QAEF,IAAI,gBAAgB,CAAC,aAAa,IAAI,qBAAqB,EAAE,CAAC;YAC1D,MAAM,IAAI,SAAS,CACf,yBAAyB,EACzB,mBAAmB,gBAAgB,CAAC,aAAa,2CAA2C,qBAAqB,EAAE,CACtH,CAAC;QACN,CAAC;QAED,qEAAqE;QACrE,IAAI,UAAU,KAAK,kBAAkB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACrE,qEAAqE;YACrE,MAAM,kBAAkB,GAAG,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC;YAClE,MAAM,sBAAsB,GACxB,kBAAkB,KAAK,SAAS;gBAC5B,CAAC,CAAC,kBAAkB,CAAS,2BAA2B;gBACxD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,8BAA8B;YAEzE,wDAAwD;YACxD,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,SAAS,CACf,wBAAwB,EACxB,UAAU,gBAAgB,CAAC,SAAS,oCAAoC,eAAe,GAAG,CAC7F,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,23 @@
1
+ export type BackgroundTaskFn = () => Promise<void>;
2
+ /**
3
+ * BackgroundQueue wraps p-queue to run async tasks with concurrency limiting.
4
+ *
5
+ * TaskStore is NOT a dependency of BackgroundQueue's constructor — it is
6
+ * injected into each enqueue call to avoid circular dependencies. The queue
7
+ * only knows how to run tasks; the caller controls persistence.
8
+ */
9
+ export declare class BackgroundQueue {
10
+ private readonly queue;
11
+ constructor(concurrency?: number);
12
+ /**
13
+ * Enqueue a background task.
14
+ *
15
+ * The task function is responsible for calling
16
+ * `taskStore.updateStatus(taskId, ...)` on completion or failure.
17
+ * The orchestrator handles this internally via try/catch/finally.
18
+ */
19
+ enqueue(taskId: string, runFn: BackgroundTaskFn): void;
20
+ get pending(): number;
21
+ get size(): number;
22
+ }
23
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/queue.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,WAAW,CAAC,EAAE,MAAM;IAQhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAetD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
@@ -0,0 +1,45 @@
1
+ import PQueue from "p-queue";
2
+ import { logger } from "../logger.js";
3
+ /**
4
+ * BackgroundQueue wraps p-queue to run async tasks with concurrency limiting.
5
+ *
6
+ * TaskStore is NOT a dependency of BackgroundQueue's constructor — it is
7
+ * injected into each enqueue call to avoid circular dependencies. The queue
8
+ * only knows how to run tasks; the caller controls persistence.
9
+ */
10
+ export class BackgroundQueue {
11
+ queue;
12
+ constructor(concurrency) {
13
+ const resolvedConcurrency = concurrency ??
14
+ parseInt(process.env["QUEUE_CONCURRENCY"] ?? "5", 10);
15
+ this.queue = new PQueue({ concurrency: resolvedConcurrency });
16
+ }
17
+ /**
18
+ * Enqueue a background task.
19
+ *
20
+ * The task function is responsible for calling
21
+ * `taskStore.updateStatus(taskId, ...)` on completion or failure.
22
+ * The orchestrator handles this internally via try/catch/finally.
23
+ */
24
+ enqueue(taskId, runFn) {
25
+ this.queue.add(async () => {
26
+ logger.debug({ taskId }, "Background task dequeued");
27
+ try {
28
+ await runFn();
29
+ }
30
+ catch (error) {
31
+ // The orchestrator's try/catch already updates the task status.
32
+ // Log here for observability, but don't rethrow (would crash the queue).
33
+ logger.error({ taskId, error }, "Background task failed");
34
+ }
35
+ });
36
+ logger.debug({ taskId, pending: this.queue.pending, size: this.queue.size }, "Background task enqueued");
37
+ }
38
+ get pending() {
39
+ return this.queue.pending;
40
+ }
41
+ get size() {
42
+ return this.queue.size;
43
+ }
44
+ }
45
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/queue.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IACP,KAAK,CAAS;IAE/B,YAAY,WAAoB;QAC5B,MAAM,mBAAmB,GACrB,WAAW;YACX,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,MAAc,EAAE,KAAuB;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACrD,IAAI,CAAC;gBACD,MAAM,KAAK,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,gEAAgE;gBAChE,yEAAyE;gBACzE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;CACJ"}
package/src/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/agent-mcp/src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC"}
package/src/index.js ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ import { db } from "./db/client.js";
4
+ import { runMigrations } from "./db/migrate.js";
5
+ import { logger } from "./logger.js";
6
+ import { AgentStore, SessionStore, TaskStore } from "./store/index.js";
7
+ import { BackgroundQueue } from "./engine/queue.js";
8
+ import { Orchestrator } from "./engine/orchestrator.js";
9
+ import { PolicyEngine } from "./engine/policy.js";
10
+ import { startServer } from "./server.js";
11
+ async function main() {
12
+ // Run DB migrations synchronously before advertising tools
13
+ runMigrations();
14
+ // Instantiate stores
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ const dbAny = db;
17
+ const agentStore = new AgentStore(dbAny);
18
+ const sessionStore = new SessionStore(dbAny);
19
+ const taskStore = new TaskStore(dbAny);
20
+ // Instantiate engine components
21
+ const queue = new BackgroundQueue();
22
+ const orchestrator = new Orchestrator();
23
+ const policy = new PolicyEngine({
24
+ serverMaxDepth: parseInt(process.env["MAX_DEPTH"] ?? "5", 10),
25
+ serverMaxToolLoops: parseInt(process.env["MAX_TOOL_LOOPS"] ?? "10", 10),
26
+ serverAllowedAgents: process.env["ALLOWED_AGENTS"]
27
+ ?.split(",")
28
+ .map(s => s.trim())
29
+ .filter(Boolean),
30
+ });
31
+ const { close } = await startServer({
32
+ agentStore,
33
+ sessionStore,
34
+ taskStore,
35
+ queue,
36
+ orchestrator,
37
+ policy,
38
+ });
39
+ const shutdown = async (signal) => {
40
+ logger.info({ signal }, "Server shutdown");
41
+ await close();
42
+ process.exit(0);
43
+ };
44
+ process.on("SIGTERM", () => void shutdown("SIGTERM"));
45
+ process.on("SIGINT", () => void shutdown("SIGINT"));
46
+ }
47
+ main().catch(err => {
48
+ logger.fatal({ err }, "Fatal startup error");
49
+ process.exit(1);
50
+ });
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ai/agent-mcp/src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,UAAU,IAAI;IACf,2DAA2D;IAC3D,aAAa,EAAE,CAAC;IAEhB,qBAAqB;IACrB,8DAA8D;IAC9D,MAAM,KAAK,GAAG,EAAS,CAAC;IACxB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;IAEvC,gCAAgC;IAChC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC5B,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QAC7D,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACvE,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC9C,EAAE,KAAK,CAAC,GAAG,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAClB,MAAM,CAAC,OAAO,CAAC;KACvB,CAAC,CAAC;IAEH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC;QAChC,UAAU;QACV,YAAY;QACZ,SAAS;QACT,KAAK;QACL,YAAY;QACZ,MAAM;KACT,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACtC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC3C,MAAM,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import pino from "pino";
2
+ /**
3
+ * Application logger.
4
+ *
5
+ * CRITICAL: All output goes to fd 2 (stderr).
6
+ * When TRANSPORT=stdio, stdout is the MCP JSON-RPC stream — any write
7
+ * to stdout would corrupt the framing. Never use console.log or pino's
8
+ * default stdout destination.
9
+ */
10
+ export declare const logger: pino.Logger<never, boolean>;
11
+ //# sourceMappingURL=logger.d.ts.map