p-spore 0.1.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 (261) hide show
  1. package/README.md +97 -0
  2. package/dist/agents/agent-manager.d.ts +57 -0
  3. package/dist/agents/agent-manager.d.ts.map +1 -0
  4. package/dist/agents/agent-manager.js +559 -0
  5. package/dist/agents/agent-manager.js.map +1 -0
  6. package/dist/agents/agent-tools.d.ts +4 -0
  7. package/dist/agents/agent-tools.d.ts.map +1 -0
  8. package/dist/agents/agent-tools.js +111 -0
  9. package/dist/agents/agent-tools.js.map +1 -0
  10. package/dist/agents/types.d.ts +52 -0
  11. package/dist/agents/types.d.ts.map +1 -0
  12. package/dist/agents/types.js +2 -0
  13. package/dist/agents/types.js.map +1 -0
  14. package/dist/application/agent-application.d.ts +89 -0
  15. package/dist/application/agent-application.d.ts.map +1 -0
  16. package/dist/application/agent-application.js +542 -0
  17. package/dist/application/agent-application.js.map +1 -0
  18. package/dist/automation/automation-tools.d.ts +4 -0
  19. package/dist/automation/automation-tools.d.ts.map +1 -0
  20. package/dist/automation/automation-tools.js +35 -0
  21. package/dist/automation/automation-tools.js.map +1 -0
  22. package/dist/automation/cron-adapter.d.ts +11 -0
  23. package/dist/automation/cron-adapter.d.ts.map +1 -0
  24. package/dist/automation/cron-adapter.js +48 -0
  25. package/dist/automation/cron-adapter.js.map +1 -0
  26. package/dist/automation/daemon-run-executor.d.ts +18 -0
  27. package/dist/automation/daemon-run-executor.d.ts.map +1 -0
  28. package/dist/automation/daemon-run-executor.js +69 -0
  29. package/dist/automation/daemon-run-executor.js.map +1 -0
  30. package/dist/automation/job-store.d.ts +12 -0
  31. package/dist/automation/job-store.d.ts.map +1 -0
  32. package/dist/automation/job-store.js +185 -0
  33. package/dist/automation/job-store.js.map +1 -0
  34. package/dist/automation/run-ledger.d.ts +25 -0
  35. package/dist/automation/run-ledger.d.ts.map +1 -0
  36. package/dist/automation/run-ledger.js +148 -0
  37. package/dist/automation/run-ledger.js.map +1 -0
  38. package/dist/automation/scheduler.d.ts +36 -0
  39. package/dist/automation/scheduler.d.ts.map +1 -0
  40. package/dist/automation/scheduler.js +300 -0
  41. package/dist/automation/scheduler.js.map +1 -0
  42. package/dist/automation/types.d.ts +81 -0
  43. package/dist/automation/types.d.ts.map +1 -0
  44. package/dist/automation/types.js +2 -0
  45. package/dist/automation/types.js.map +1 -0
  46. package/dist/cli/main.d.ts +4 -0
  47. package/dist/cli/main.d.ts.map +1 -0
  48. package/dist/cli/main.js +768 -0
  49. package/dist/cli/main.js.map +1 -0
  50. package/dist/config/config.d.ts +52 -0
  51. package/dist/config/config.d.ts.map +1 -0
  52. package/dist/config/config.js +345 -0
  53. package/dist/config/config.js.map +1 -0
  54. package/dist/daemon/daemon.d.ts +30 -0
  55. package/dist/daemon/daemon.d.ts.map +1 -0
  56. package/dist/daemon/daemon.js +437 -0
  57. package/dist/daemon/daemon.js.map +1 -0
  58. package/dist/daemon/supervisor.d.ts +18 -0
  59. package/dist/daemon/supervisor.d.ts.map +1 -0
  60. package/dist/daemon/supervisor.js +37 -0
  61. package/dist/daemon/supervisor.js.map +1 -0
  62. package/dist/desktop/daemon-bridge.d.ts +32 -0
  63. package/dist/desktop/daemon-bridge.d.ts.map +1 -0
  64. package/dist/desktop/daemon-bridge.js +204 -0
  65. package/dist/desktop/daemon-bridge.js.map +1 -0
  66. package/dist/desktop/daemon-supervisor.d.ts +2 -0
  67. package/dist/desktop/daemon-supervisor.d.ts.map +1 -0
  68. package/dist/desktop/daemon-supervisor.js +2 -0
  69. package/dist/desktop/daemon-supervisor.js.map +1 -0
  70. package/dist/desktop/ipc-contract.d.ts +153 -0
  71. package/dist/desktop/ipc-contract.d.ts.map +1 -0
  72. package/dist/desktop/ipc-contract.js +219 -0
  73. package/dist/desktop/ipc-contract.js.map +1 -0
  74. package/dist/desktop/main.d.ts +2 -0
  75. package/dist/desktop/main.d.ts.map +1 -0
  76. package/dist/desktop/main.js +594 -0
  77. package/dist/desktop/main.js.map +1 -0
  78. package/dist/desktop/preload.cjs +32 -0
  79. package/dist/desktop/renderer/index.html +284 -0
  80. package/dist/desktop/renderer/renderer.d.ts +2 -0
  81. package/dist/desktop/renderer/renderer.d.ts.map +1 -0
  82. package/dist/desktop/renderer/renderer.js +895 -0
  83. package/dist/desktop/renderer/renderer.js.map +1 -0
  84. package/dist/desktop/renderer/store.d.ts +33 -0
  85. package/dist/desktop/renderer/store.d.ts.map +1 -0
  86. package/dist/desktop/renderer/store.js +144 -0
  87. package/dist/desktop/renderer/store.js.map +1 -0
  88. package/dist/desktop/renderer/styles.css +540 -0
  89. package/dist/desktop/security.d.ts +5 -0
  90. package/dist/desktop/security.d.ts.map +1 -0
  91. package/dist/desktop/security.js +49 -0
  92. package/dist/desktop/security.js.map +1 -0
  93. package/dist/desktop/smoke-fixture.d.ts +3 -0
  94. package/dist/desktop/smoke-fixture.d.ts.map +1 -0
  95. package/dist/desktop/smoke-fixture.js +223 -0
  96. package/dist/desktop/smoke-fixture.js.map +1 -0
  97. package/dist/desktop/validation.d.ts +8 -0
  98. package/dist/desktop/validation.d.ts.map +1 -0
  99. package/dist/desktop/validation.js +341 -0
  100. package/dist/desktop/validation.js.map +1 -0
  101. package/dist/domain/runtime.d.ts +116 -0
  102. package/dist/domain/runtime.d.ts.map +1 -0
  103. package/dist/domain/runtime.js +2 -0
  104. package/dist/domain/runtime.js.map +1 -0
  105. package/dist/gateway/local-gateway.d.ts +23 -0
  106. package/dist/gateway/local-gateway.d.ts.map +1 -0
  107. package/dist/gateway/local-gateway.js +265 -0
  108. package/dist/gateway/local-gateway.js.map +1 -0
  109. package/dist/kernel/loop.d.ts +10 -0
  110. package/dist/kernel/loop.d.ts.map +1 -0
  111. package/dist/kernel/loop.js +41 -0
  112. package/dist/kernel/loop.js.map +1 -0
  113. package/dist/kernel/reducer.d.ts +3 -0
  114. package/dist/kernel/reducer.d.ts.map +1 -0
  115. package/dist/kernel/reducer.js +102 -0
  116. package/dist/kernel/reducer.js.map +1 -0
  117. package/dist/kernel/state.d.ts +93 -0
  118. package/dist/kernel/state.d.ts.map +1 -0
  119. package/dist/kernel/state.js +15 -0
  120. package/dist/kernel/state.js.map +1 -0
  121. package/dist/mcp/mcp-manager.d.ts +55 -0
  122. package/dist/mcp/mcp-manager.d.ts.map +1 -0
  123. package/dist/mcp/mcp-manager.js +591 -0
  124. package/dist/mcp/mcp-manager.js.map +1 -0
  125. package/dist/mcp/mcp-tools.d.ts +4 -0
  126. package/dist/mcp/mcp-tools.d.ts.map +1 -0
  127. package/dist/mcp/mcp-tools.js +53 -0
  128. package/dist/mcp/mcp-tools.js.map +1 -0
  129. package/dist/mcp/types.d.ts +73 -0
  130. package/dist/mcp/types.d.ts.map +1 -0
  131. package/dist/mcp/types.js +2 -0
  132. package/dist/mcp/types.js.map +1 -0
  133. package/dist/memory/bm25.d.ts +14 -0
  134. package/dist/memory/bm25.d.ts.map +1 -0
  135. package/dist/memory/bm25.js +40 -0
  136. package/dist/memory/bm25.js.map +1 -0
  137. package/dist/memory/context-loader.d.ts +26 -0
  138. package/dist/memory/context-loader.d.ts.map +1 -0
  139. package/dist/memory/context-loader.js +97 -0
  140. package/dist/memory/context-loader.js.map +1 -0
  141. package/dist/memory/memory-service.d.ts +30 -0
  142. package/dist/memory/memory-service.d.ts.map +1 -0
  143. package/dist/memory/memory-service.js +133 -0
  144. package/dist/memory/memory-service.js.map +1 -0
  145. package/dist/memory/memory-tools.d.ts +4 -0
  146. package/dist/memory/memory-tools.d.ts.map +1 -0
  147. package/dist/memory/memory-tools.js +49 -0
  148. package/dist/memory/memory-tools.js.map +1 -0
  149. package/dist/memory/search-service.d.ts +38 -0
  150. package/dist/memory/search-service.d.ts.map +1 -0
  151. package/dist/memory/search-service.js +463 -0
  152. package/dist/memory/search-service.js.map +1 -0
  153. package/dist/memory/tokenizer.d.ts +5 -0
  154. package/dist/memory/tokenizer.d.ts.map +1 -0
  155. package/dist/memory/tokenizer.js +42 -0
  156. package/dist/memory/tokenizer.js.map +1 -0
  157. package/dist/notifications/notification-service.d.ts +47 -0
  158. package/dist/notifications/notification-service.d.ts.map +1 -0
  159. package/dist/notifications/notification-service.js +163 -0
  160. package/dist/notifications/notification-service.js.map +1 -0
  161. package/dist/notifications/notification-tools.d.ts +4 -0
  162. package/dist/notifications/notification-tools.d.ts.map +1 -0
  163. package/dist/notifications/notification-tools.js +31 -0
  164. package/dist/notifications/notification-tools.js.map +1 -0
  165. package/dist/pi/pi-runtime-adapter.d.ts +38 -0
  166. package/dist/pi/pi-runtime-adapter.d.ts.map +1 -0
  167. package/dist/pi/pi-runtime-adapter.js +483 -0
  168. package/dist/pi/pi-runtime-adapter.js.map +1 -0
  169. package/dist/plugins/extension-manager.d.ts +32 -0
  170. package/dist/plugins/extension-manager.d.ts.map +1 -0
  171. package/dist/plugins/extension-manager.js +562 -0
  172. package/dist/plugins/extension-manager.js.map +1 -0
  173. package/dist/plugins/resource-inspector.d.ts +18 -0
  174. package/dist/plugins/resource-inspector.d.ts.map +1 -0
  175. package/dist/plugins/resource-inspector.js +386 -0
  176. package/dist/plugins/resource-inspector.js.map +1 -0
  177. package/dist/plugins/types.d.ts +96 -0
  178. package/dist/plugins/types.d.ts.map +1 -0
  179. package/dist/plugins/types.js +2 -0
  180. package/dist/plugins/types.js.map +1 -0
  181. package/dist/policy/approval-service.d.ts +68 -0
  182. package/dist/policy/approval-service.d.ts.map +1 -0
  183. package/dist/policy/approval-service.js +349 -0
  184. package/dist/policy/approval-service.js.map +1 -0
  185. package/dist/policy/policy.d.ts +26 -0
  186. package/dist/policy/policy.d.ts.map +1 -0
  187. package/dist/policy/policy.js +228 -0
  188. package/dist/policy/policy.js.map +1 -0
  189. package/dist/protocol/client.d.ts +25 -0
  190. package/dist/protocol/client.d.ts.map +1 -0
  191. package/dist/protocol/client.js +188 -0
  192. package/dist/protocol/client.js.map +1 -0
  193. package/dist/protocol/errors.d.ts +5 -0
  194. package/dist/protocol/errors.d.ts.map +1 -0
  195. package/dist/protocol/errors.js +9 -0
  196. package/dist/protocol/errors.js.map +1 -0
  197. package/dist/protocol/schema.d.ts +71 -0
  198. package/dist/protocol/schema.d.ts.map +1 -0
  199. package/dist/protocol/schema.js +155 -0
  200. package/dist/protocol/schema.js.map +1 -0
  201. package/dist/settings/llm-settings-service.d.ts +9 -0
  202. package/dist/settings/llm-settings-service.d.ts.map +1 -0
  203. package/dist/settings/llm-settings-service.js +199 -0
  204. package/dist/settings/llm-settings-service.js.map +1 -0
  205. package/dist/settings/llm-settings.d.ts +29 -0
  206. package/dist/settings/llm-settings.d.ts.map +1 -0
  207. package/dist/settings/llm-settings.js +113 -0
  208. package/dist/settings/llm-settings.js.map +1 -0
  209. package/dist/shell/shell-service.d.ts +88 -0
  210. package/dist/shell/shell-service.d.ts.map +1 -0
  211. package/dist/shell/shell-service.js +459 -0
  212. package/dist/shell/shell-service.js.map +1 -0
  213. package/dist/storage/atomic.d.ts +4 -0
  214. package/dist/storage/atomic.d.ts.map +1 -0
  215. package/dist/storage/atomic.js +49 -0
  216. package/dist/storage/atomic.js.map +1 -0
  217. package/dist/storage/daemon-lock.d.ts +17 -0
  218. package/dist/storage/daemon-lock.d.ts.map +1 -0
  219. package/dist/storage/daemon-lock.js +97 -0
  220. package/dist/storage/daemon-lock.js.map +1 -0
  221. package/dist/storage/home.d.ts +29 -0
  222. package/dist/storage/home.d.ts.map +1 -0
  223. package/dist/storage/home.js +108 -0
  224. package/dist/storage/home.js.map +1 -0
  225. package/dist/storage/jsonl.d.ts +2 -0
  226. package/dist/storage/jsonl.d.ts.map +1 -0
  227. package/dist/storage/jsonl.js +45 -0
  228. package/dist/storage/jsonl.js.map +1 -0
  229. package/dist/tools/core-tools.d.ts +16 -0
  230. package/dist/tools/core-tools.d.ts.map +1 -0
  231. package/dist/tools/core-tools.js +283 -0
  232. package/dist/tools/core-tools.js.map +1 -0
  233. package/dist/ui/shared/presentation.d.ts +46 -0
  234. package/dist/ui/shared/presentation.d.ts.map +1 -0
  235. package/dist/ui/shared/presentation.js +81 -0
  236. package/dist/ui/shared/presentation.js.map +1 -0
  237. package/dist/ui/shared/protocol-state.d.ts +30 -0
  238. package/dist/ui/shared/protocol-state.d.ts.map +1 -0
  239. package/dist/ui/shared/protocol-state.js +165 -0
  240. package/dist/ui/shared/protocol-state.js.map +1 -0
  241. package/dist/ui/tui/commands.d.ts +2 -0
  242. package/dist/ui/tui/commands.d.ts.map +1 -0
  243. package/dist/ui/tui/commands.js +33 -0
  244. package/dist/ui/tui/commands.js.map +1 -0
  245. package/dist/ui/tui/store.d.ts +32 -0
  246. package/dist/ui/tui/store.d.ts.map +1 -0
  247. package/dist/ui/tui/store.js +62 -0
  248. package/dist/ui/tui/store.js.map +1 -0
  249. package/dist/ui/tui/tui-app.d.ts +21 -0
  250. package/dist/ui/tui/tui-app.d.ts.map +1 -0
  251. package/dist/ui/tui/tui-app.js +643 -0
  252. package/dist/ui/tui/tui-app.js.map +1 -0
  253. package/dist/ui/tui/view.d.ts +29 -0
  254. package/dist/ui/tui/view.d.ts.map +1 -0
  255. package/dist/ui/tui/view.js +255 -0
  256. package/dist/ui/tui/view.js.map +1 -0
  257. package/dist/version.d.ts +5 -0
  258. package/dist/version.d.ts.map +1 -0
  259. package/dist/version.js +5 -0
  260. package/dist/version.js.map +1 -0
  261. package/package.json +62 -0
@@ -0,0 +1,591 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { mkdir } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
4
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
5
+ import { StdioClientTransport, getDefaultEnvironment, } from "@modelcontextprotocol/sdk/client/stdio.js";
6
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
7
+ import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
8
+ import { appendJsonLine, atomicWriteFile } from "../storage/atomic.js";
9
+ import { PSPORE_VERSION } from "../version.js";
10
+ const MAX_TOOL_COUNT = 256;
11
+ const MAX_TOOL_PAGES = 16;
12
+ const MAX_SCHEMA_BYTES = 65_536;
13
+ const MAX_ARGUMENT_BYTES = 262_144;
14
+ export class McpManager {
15
+ #artifactDirectory;
16
+ #auditPath;
17
+ #environment;
18
+ #factory;
19
+ #maxResultBytes;
20
+ #initialBackoffMs;
21
+ #maxBackoffMs;
22
+ #connectTimeoutMs;
23
+ #clock;
24
+ #idFactory;
25
+ #onHealth;
26
+ #onError;
27
+ #servers = new Map();
28
+ #stopping = false;
29
+ constructor(options) {
30
+ this.#artifactDirectory = join(options.artifactRoot, "mcp");
31
+ this.#auditPath = options.auditPath;
32
+ this.#environment = options.environment ?? process.env;
33
+ this.#factory = options.connectionFactory ?? createSdkConnection;
34
+ this.#maxResultBytes = positiveInteger(options.maxResultBytes ?? 65_536, "maxResultBytes");
35
+ this.#initialBackoffMs = positiveInteger(options.initialBackoffMs ?? 1_000, "initialBackoffMs");
36
+ this.#maxBackoffMs = positiveInteger(options.maxBackoffMs ?? 30_000, "maxBackoffMs");
37
+ if (this.#maxBackoffMs < this.#initialBackoffMs)
38
+ throw new Error("maxBackoffMs cannot be below initialBackoffMs");
39
+ this.#connectTimeoutMs = positiveInteger(options.connectTimeoutMs ?? 15_000, "connectTimeoutMs");
40
+ this.#clock = options.clock ?? (() => new Date());
41
+ this.#idFactory = options.idFactory ?? randomUUID;
42
+ this.#onHealth = options.onHealth;
43
+ this.#onError = options.onError;
44
+ for (const config of options.configs) {
45
+ if (this.#servers.has(config.id))
46
+ throw new Error(`Duplicate MCP server id: ${config.id}`);
47
+ const status = !config.enabled
48
+ ? "disabled"
49
+ : config.trust === "sandboxed"
50
+ ? "untrusted"
51
+ : "idle";
52
+ this.#servers.set(config.id, {
53
+ config: structuredClone(config),
54
+ status,
55
+ tools: new Map(),
56
+ connection: undefined,
57
+ connecting: undefined,
58
+ connectController: undefined,
59
+ idleTimer: undefined,
60
+ activeCalls: 0,
61
+ generation: 0,
62
+ failureCount: 0,
63
+ connectedAt: undefined,
64
+ retryAtMs: undefined,
65
+ lastError: undefined,
66
+ });
67
+ }
68
+ }
69
+ static async create(options) {
70
+ const manager = new McpManager(options);
71
+ await mkdir(dirname(options.auditPath), { recursive: true, mode: 0o700 });
72
+ for (const entry of manager.#servers.values())
73
+ manager.#publish(entry);
74
+ return manager;
75
+ }
76
+ listServers() {
77
+ return [...this.#servers.values()]
78
+ .sort((left, right) => left.config.id.localeCompare(right.config.id))
79
+ .map((entry) => this.#health(entry));
80
+ }
81
+ listTools() {
82
+ return [...this.#servers.values()]
83
+ .flatMap((entry) => [...entry.tools.values()])
84
+ .sort((left, right) => left.serverId.localeCompare(right.serverId) || left.normalizedName.localeCompare(right.normalizedName))
85
+ .map((tool) => structuredClone(tool));
86
+ }
87
+ async discover(serverId, signal) {
88
+ const entry = this.#available(serverId);
89
+ const connection = await this.#connection(entry, signal);
90
+ const remote = [];
91
+ let cursor;
92
+ try {
93
+ for (let page = 0; page < MAX_TOOL_PAGES; page++) {
94
+ throwIfAborted(signal);
95
+ const result = await connection.listTools(cursor, signal, entry.config.requestTimeoutMs);
96
+ remote.push(...result.tools);
97
+ if (remote.length > MAX_TOOL_COUNT)
98
+ throw new Error(`MCP server ${serverId} exposes more than ${MAX_TOOL_COUNT} tools`);
99
+ cursor = result.nextCursor;
100
+ if (!cursor)
101
+ break;
102
+ if (page === MAX_TOOL_PAGES - 1)
103
+ throw new Error(`MCP server ${serverId} tool pagination exceeds ${MAX_TOOL_PAGES} pages`);
104
+ }
105
+ }
106
+ catch (error) {
107
+ const original = toError(error);
108
+ const normalized = new Error(this.#redact(original.message));
109
+ if (!signal?.aborted && isConnectionFailure(original))
110
+ this.#markFailure(entry, normalized);
111
+ throw normalized;
112
+ }
113
+ const next = this.#validateTools(entry, remote);
114
+ entry.tools = new Map(next.map((tool) => [tool.name, tool]));
115
+ entry.status = "ready";
116
+ entry.lastError = undefined;
117
+ entry.retryAtMs = undefined;
118
+ this.#publish(entry);
119
+ this.#scheduleIdle(entry);
120
+ return next.map((tool) => structuredClone(tool));
121
+ }
122
+ async ping(serverId, signal) {
123
+ const entry = this.#available(serverId);
124
+ const connection = await this.#connection(entry, signal);
125
+ try {
126
+ await connection.ping(signal, entry.config.requestTimeoutMs);
127
+ }
128
+ catch (error) {
129
+ const original = toError(error);
130
+ const normalized = new Error(this.#redact(original.message));
131
+ if (!signal?.aborted && isConnectionFailure(original))
132
+ this.#markFailure(entry, normalized);
133
+ throw normalized;
134
+ }
135
+ this.#scheduleIdle(entry);
136
+ return this.#health(entry);
137
+ }
138
+ async call(serverId, toolName, args, signal) {
139
+ throwIfAborted(signal);
140
+ const argumentJson = JSON.stringify(args);
141
+ if (Buffer.byteLength(argumentJson) > MAX_ARGUMENT_BYTES) {
142
+ throw new Error(`MCP tool arguments exceed ${MAX_ARGUMENT_BYTES} bytes`);
143
+ }
144
+ const entry = this.#available(serverId);
145
+ let descriptor = findTool(entry.tools, toolName);
146
+ if (!descriptor) {
147
+ await this.discover(serverId, signal);
148
+ descriptor = findTool(entry.tools, toolName);
149
+ }
150
+ if (!descriptor)
151
+ throw new Error(`MCP tool is not allowed or does not exist: ${serverId}/${toolName}`);
152
+ const startedAt = this.#clock();
153
+ entry.activeCalls += 1;
154
+ this.#clearIdle(entry);
155
+ let outcome = "failed";
156
+ let connectionAcquired = false;
157
+ try {
158
+ const connection = await this.#connection(entry, signal);
159
+ connectionAcquired = true;
160
+ const raw = await connection.callTool(descriptor.name, args, signal, entry.config.requestTimeoutMs);
161
+ const isError = isRecord(raw) && raw["isError"] === true;
162
+ outcome = isError ? "tool_error" : "succeeded";
163
+ return await this.#boundedResult(descriptor, raw, isError);
164
+ }
165
+ catch (error) {
166
+ const original = toError(error);
167
+ const normalized = new Error(this.#redact(original.message));
168
+ outcome = signal?.aborted ? "aborted" : "failed";
169
+ if (connectionAcquired && !signal?.aborted && isConnectionFailure(original) && entry.status !== "backoff") {
170
+ this.#markFailure(entry, normalized);
171
+ }
172
+ throw normalized;
173
+ }
174
+ finally {
175
+ entry.activeCalls -= 1;
176
+ this.#scheduleIdle(entry);
177
+ await this.#audit({
178
+ serverId,
179
+ toolName: descriptor.name,
180
+ normalizedName: descriptor.normalizedName,
181
+ argumentSha256: createHash("sha256").update(argumentJson).digest("hex"),
182
+ outcome,
183
+ durationMs: Math.max(0, this.#clock().getTime() - startedAt.getTime()),
184
+ });
185
+ }
186
+ }
187
+ async stop() {
188
+ if (this.#stopping)
189
+ return;
190
+ this.#stopping = true;
191
+ const closes = [];
192
+ for (const entry of this.#servers.values()) {
193
+ this.#clearIdle(entry);
194
+ entry.connectController?.abort(new Error("MCP manager shutdown"));
195
+ entry.generation += 1;
196
+ const connection = entry.connection;
197
+ entry.connection = undefined;
198
+ if (connection)
199
+ closes.push(connection.close().catch((error) => this.#error(error)));
200
+ entry.status = "stopped";
201
+ entry.connectedAt = undefined;
202
+ entry.retryAtMs = undefined;
203
+ this.#publish(entry);
204
+ }
205
+ await Promise.allSettled(closes);
206
+ }
207
+ #available(serverId) {
208
+ if (this.#stopping)
209
+ throw new Error("MCP manager is stopping");
210
+ const entry = this.#servers.get(serverId);
211
+ if (!entry)
212
+ throw new Error(`Unknown MCP server: ${serverId}`);
213
+ if (!entry.config.enabled)
214
+ throw new Error(`MCP server is disabled: ${serverId}`);
215
+ if (entry.config.trust !== "trusted-local") {
216
+ throw new Error(`MCP server ${serverId} requires a sandbox executor, which is not available in v1`);
217
+ }
218
+ return entry;
219
+ }
220
+ async #connection(entry, signal) {
221
+ throwIfAborted(signal);
222
+ if (entry.connection)
223
+ return entry.connection;
224
+ if (entry.connecting)
225
+ return withAbort(entry.connecting, signal);
226
+ const now = this.#clock().getTime();
227
+ if (entry.retryAtMs !== undefined && now < entry.retryAtMs) {
228
+ throw new Error(`MCP server ${entry.config.id} is in backoff until ${new Date(entry.retryAtMs).toISOString()}`);
229
+ }
230
+ const controller = new AbortController();
231
+ const relayAbort = () => controller.abort(signal?.reason);
232
+ signal?.addEventListener("abort", relayAbort, { once: true });
233
+ entry.connectController = controller;
234
+ entry.status = "connecting";
235
+ entry.lastError = undefined;
236
+ entry.retryAtMs = undefined;
237
+ const generation = ++entry.generation;
238
+ this.#publish(entry);
239
+ const task = this.#factory(entry.config, {
240
+ signal: controller.signal,
241
+ timeoutMs: Math.min(this.#connectTimeoutMs, entry.config.requestTimeoutMs),
242
+ environment: this.#environment,
243
+ onClose: () => {
244
+ if (entry.generation === generation && entry.connection)
245
+ this.#markFailure(entry, new Error("MCP transport closed"));
246
+ },
247
+ onError: (error) => {
248
+ if (entry.generation === generation && entry.connection)
249
+ this.#markFailure(entry, error);
250
+ },
251
+ }).then((connection) => {
252
+ if (this.#stopping || controller.signal.aborted) {
253
+ void connection.close().catch(() => undefined);
254
+ throw controller.signal.reason instanceof Error ? controller.signal.reason : new Error("MCP connection aborted");
255
+ }
256
+ entry.connection = connection;
257
+ entry.failureCount = 0;
258
+ entry.connectedAt = this.#clock().toISOString();
259
+ entry.status = "ready";
260
+ entry.lastError = undefined;
261
+ this.#publish(entry);
262
+ this.#scheduleIdle(entry);
263
+ return connection;
264
+ }).catch((error) => {
265
+ const normalized = new Error(this.#redact(toError(error).message));
266
+ if (!controller.signal.aborted || !signal?.aborted)
267
+ this.#markFailure(entry, normalized);
268
+ throw normalized;
269
+ }).finally(() => {
270
+ signal?.removeEventListener("abort", relayAbort);
271
+ if (entry.connecting === task)
272
+ entry.connecting = undefined;
273
+ if (entry.connectController === controller)
274
+ entry.connectController = undefined;
275
+ });
276
+ entry.connecting = task;
277
+ return withAbort(task, signal);
278
+ }
279
+ #validateTools(entry, tools) {
280
+ const allowed = new Set(entry.config.allowedTools);
281
+ const denied = new Set(entry.config.deniedTools);
282
+ const normalized = new Set();
283
+ const existing = new Set([...this.#servers.values()]
284
+ .filter((candidate) => candidate !== entry)
285
+ .flatMap((candidate) => [...candidate.tools.values()].map((tool) => tool.normalizedName)));
286
+ const result = [];
287
+ for (const tool of tools) {
288
+ if (!tool.name.trim() || tool.name.length > 128)
289
+ throw new Error(`MCP server ${entry.config.id} returned an invalid tool name`);
290
+ if (denied.has(tool.name) || (allowed.size > 0 && !allowed.has(tool.name)))
291
+ continue;
292
+ if (!isRecord(tool.inputSchema) || tool.inputSchema["type"] !== "object") {
293
+ throw new Error(`MCP tool ${entry.config.id}/${tool.name} inputSchema must be an object schema`);
294
+ }
295
+ if (Buffer.byteLength(JSON.stringify(tool.inputSchema)) > MAX_SCHEMA_BYTES) {
296
+ throw new Error(`MCP tool ${entry.config.id}/${tool.name} schema exceeds ${MAX_SCHEMA_BYTES} bytes`);
297
+ }
298
+ const normalizedName = normalizeMcpToolName(entry.config.id, tool.name);
299
+ if (normalized.has(normalizedName) || existing.has(normalizedName)) {
300
+ throw new Error(`MCP normalized tool name collision: ${normalizedName}`);
301
+ }
302
+ normalized.add(normalizedName);
303
+ result.push({
304
+ version: 1,
305
+ serverId: entry.config.id,
306
+ name: tool.name,
307
+ normalizedName,
308
+ ...(tool.title === undefined ? {} : { title: bounded(tool.title, 256) }),
309
+ ...(tool.description === undefined ? {} : { description: bounded(tool.description, 4_096) }),
310
+ inputSchema: structuredClone(tool.inputSchema),
311
+ ...(tool.annotations === undefined ? {} : { annotations: structuredClone(tool.annotations) }),
312
+ });
313
+ }
314
+ return result.sort((left, right) => left.normalizedName.localeCompare(right.normalizedName));
315
+ }
316
+ async #boundedResult(descriptor, raw, isError) {
317
+ const json = `${JSON.stringify(raw, null, 2)}\n`;
318
+ const content = Buffer.from(json, "utf8");
319
+ if (content.byteLength <= this.#maxResultBytes) {
320
+ return {
321
+ text: json.trimEnd(),
322
+ details: {
323
+ serverId: descriptor.serverId,
324
+ toolName: descriptor.name,
325
+ normalizedName: descriptor.normalizedName,
326
+ isError,
327
+ bytes: content.byteLength,
328
+ truncated: false,
329
+ },
330
+ };
331
+ }
332
+ const artifactSha256 = createHash("sha256").update(content).digest("hex");
333
+ const artifactPath = join(this.#artifactDirectory, `${this.#clock().toISOString().replaceAll(":", "-")}-${createHash("sha256").update(this.#idFactory()).digest("hex").slice(0, 16)}.json`);
334
+ await mkdir(this.#artifactDirectory, { recursive: true, mode: 0o700 });
335
+ await atomicWriteFile(artifactPath, content, 0o600);
336
+ const prefix = content.subarray(0, this.#maxResultBytes).toString("utf8");
337
+ return {
338
+ text: `${prefix}\n\n[MCP result truncated; full artifact: ${artifactPath}; sha256: ${artifactSha256}]`,
339
+ details: {
340
+ serverId: descriptor.serverId,
341
+ toolName: descriptor.name,
342
+ normalizedName: descriptor.normalizedName,
343
+ isError,
344
+ bytes: content.byteLength,
345
+ truncated: true,
346
+ artifactPath,
347
+ artifactSha256,
348
+ },
349
+ };
350
+ }
351
+ #markFailure(entry, error) {
352
+ if (this.#stopping)
353
+ return;
354
+ this.#clearIdle(entry);
355
+ const connection = entry.connection;
356
+ entry.connection = undefined;
357
+ entry.generation += 1;
358
+ if (connection)
359
+ void connection.close().catch(() => undefined);
360
+ entry.failureCount += 1;
361
+ const delay = Math.min(this.#initialBackoffMs * 2 ** Math.max(0, entry.failureCount - 1), this.#maxBackoffMs);
362
+ entry.retryAtMs = this.#clock().getTime() + delay;
363
+ entry.connectedAt = undefined;
364
+ entry.status = "backoff";
365
+ entry.lastError = this.#redact(error.message);
366
+ this.#publish(entry);
367
+ this.#error(new Error(`MCP ${entry.config.id}: ${entry.lastError}`));
368
+ }
369
+ #scheduleIdle(entry) {
370
+ this.#clearIdle(entry);
371
+ if (!entry.connection || entry.activeCalls > 0 || this.#stopping)
372
+ return;
373
+ entry.idleTimer = setTimeout(() => void this.#closeIdle(entry), entry.config.idleTimeoutMs);
374
+ entry.idleTimer.unref();
375
+ }
376
+ async #closeIdle(entry) {
377
+ entry.idleTimer = undefined;
378
+ if (!entry.connection || entry.activeCalls > 0 || this.#stopping)
379
+ return;
380
+ const connection = entry.connection;
381
+ entry.connection = undefined;
382
+ entry.generation += 1;
383
+ await connection.close().catch((error) => this.#error(error));
384
+ entry.status = "idle";
385
+ entry.connectedAt = undefined;
386
+ entry.lastError = undefined;
387
+ this.#publish(entry);
388
+ }
389
+ #clearIdle(entry) {
390
+ if (entry.idleTimer)
391
+ clearTimeout(entry.idleTimer);
392
+ entry.idleTimer = undefined;
393
+ }
394
+ #health(entry) {
395
+ return {
396
+ version: 1,
397
+ serverId: entry.config.id,
398
+ status: entry.status,
399
+ transport: entry.config.transport.type,
400
+ toolCount: entry.tools.size,
401
+ failureCount: entry.failureCount,
402
+ updatedAt: this.#clock().toISOString(),
403
+ ...(entry.connectedAt === undefined ? {} : { connectedAt: entry.connectedAt }),
404
+ ...(entry.retryAtMs === undefined ? {} : { retryAt: new Date(entry.retryAtMs).toISOString() }),
405
+ ...(entry.lastError === undefined ? {} : { lastError: entry.lastError }),
406
+ };
407
+ }
408
+ #publish(entry) {
409
+ try {
410
+ this.#onHealth?.(this.#health(entry));
411
+ }
412
+ catch {
413
+ // Health observers do not own MCP lifecycle.
414
+ }
415
+ }
416
+ async #audit(value) {
417
+ try {
418
+ await appendJsonLine(this.#auditPath, {
419
+ version: 1,
420
+ id: this.#idFactory(),
421
+ ...value,
422
+ ts: this.#clock().toISOString(),
423
+ }, 0o600);
424
+ }
425
+ catch (error) {
426
+ this.#error(new Error(`MCP audit write failed: ${this.#redact(toError(error).message)}`));
427
+ }
428
+ }
429
+ #redact(message) {
430
+ let redacted = message;
431
+ for (const config of [...this.#servers.values()].map((entry) => entry.config)) {
432
+ const refs = config.transport.type === "stdio"
433
+ ? Object.values(config.transport.envRefs)
434
+ : Object.values(config.transport.headerRefs).map((ref) => ref.env);
435
+ for (const ref of refs) {
436
+ const secret = this.#environment[ref];
437
+ if (secret && secret.length >= 4)
438
+ redacted = redacted.replaceAll(secret, "[REDACTED]");
439
+ }
440
+ }
441
+ return bounded(redacted, 2_000);
442
+ }
443
+ #error(error) {
444
+ try {
445
+ this.#onError?.(new Error(this.#redact(toError(error).message)));
446
+ }
447
+ catch {
448
+ // Error observers cannot break lifecycle cleanup.
449
+ }
450
+ }
451
+ }
452
+ export function normalizeMcpToolName(serverId, toolName) {
453
+ const normalize = (value) => value.toLowerCase().replace(/[^a-z0-9_-]+/g, "_").replace(/^_+|_+$/g, "");
454
+ const server = normalize(serverId);
455
+ const tool = normalize(toolName);
456
+ if (!server || !tool)
457
+ throw new Error(`MCP name cannot be normalized: ${serverId}/${toolName}`);
458
+ const name = `mcp__${server}__${tool}`;
459
+ if (name.length > 128)
460
+ throw new Error(`MCP normalized tool name exceeds 128 characters: ${name}`);
461
+ return name;
462
+ }
463
+ async function createSdkConnection(config, context) {
464
+ const client = new Client({ name: "pspore", version: PSPORE_VERSION }, { enforceStrictCapabilities: true });
465
+ client.onclose = context.onClose;
466
+ client.onerror = context.onError;
467
+ const transport = config.transport.type === "stdio"
468
+ ? new StdioClientTransport({
469
+ command: config.transport.command,
470
+ args: [...config.transport.args],
471
+ ...(config.transport.cwd === undefined ? {} : { cwd: config.transport.cwd }),
472
+ env: resolveStdioEnvironment(config, context.environment),
473
+ stderr: "ignore",
474
+ maxBufferSize: 1_048_576,
475
+ })
476
+ : new StreamableHTTPClientTransport(new URL(config.transport.url), {
477
+ requestInit: { headers: resolveHttpHeaders(config, context.environment) },
478
+ reconnectionOptions: {
479
+ initialReconnectionDelay: 1_000,
480
+ maxReconnectionDelay: 30_000,
481
+ reconnectionDelayGrowFactor: 2,
482
+ maxRetries: 2,
483
+ },
484
+ });
485
+ await client.connect(transport, {
486
+ signal: context.signal,
487
+ timeout: context.timeoutMs,
488
+ maxTotalTimeout: context.timeoutMs,
489
+ });
490
+ return {
491
+ listTools: async (cursor, signal, timeoutMs) => {
492
+ const result = await client.listTools(cursor === undefined ? undefined : { cursor }, requestOptions(signal, timeoutMs));
493
+ return {
494
+ tools: result.tools.map((tool) => ({
495
+ name: tool.name,
496
+ ...(tool.title === undefined ? {} : { title: tool.title }),
497
+ ...(tool.description === undefined ? {} : { description: tool.description }),
498
+ inputSchema: structuredClone(tool.inputSchema),
499
+ ...(tool.annotations === undefined ? {} : { annotations: normalizeAnnotations(tool.annotations) }),
500
+ })),
501
+ ...(result.nextCursor === undefined ? {} : { nextCursor: result.nextCursor }),
502
+ };
503
+ },
504
+ callTool: async (name, args, signal, timeoutMs) => client.callTool({ name, arguments: { ...args } }, undefined, requestOptions(signal, timeoutMs)),
505
+ ping: async (signal, timeoutMs) => {
506
+ await client.ping(requestOptions(signal, timeoutMs));
507
+ },
508
+ close: async () => client.close(),
509
+ };
510
+ }
511
+ function resolveStdioEnvironment(config, environment) {
512
+ if (config.transport.type !== "stdio")
513
+ throw new Error("Expected stdio MCP config");
514
+ const resolved = getDefaultEnvironment();
515
+ for (const [target, source] of Object.entries(config.transport.envRefs)) {
516
+ const value = environment[source];
517
+ if (value === undefined)
518
+ throw new Error(`MCP ${config.id} is missing environment reference ${source}`);
519
+ resolved[target] = value;
520
+ }
521
+ return resolved;
522
+ }
523
+ function resolveHttpHeaders(config, environment) {
524
+ if (config.transport.type !== "streamable-http")
525
+ throw new Error("Expected HTTP MCP config");
526
+ const headers = {};
527
+ for (const [header, ref] of Object.entries(config.transport.headerRefs)) {
528
+ const value = environment[ref.env];
529
+ if (value === undefined)
530
+ throw new Error(`MCP ${config.id} is missing environment reference ${ref.env}`);
531
+ headers[header] = `${ref.prefix ?? ""}${value}`;
532
+ }
533
+ return headers;
534
+ }
535
+ function requestOptions(signal, timeoutMs) {
536
+ return {
537
+ ...(signal === undefined ? {} : { signal }),
538
+ timeout: timeoutMs,
539
+ maxTotalTimeout: timeoutMs,
540
+ };
541
+ }
542
+ function normalizeAnnotations(value) {
543
+ return {
544
+ ...(value.readOnlyHint === undefined ? {} : { readOnlyHint: value.readOnlyHint }),
545
+ ...(value.destructiveHint === undefined ? {} : { destructiveHint: value.destructiveHint }),
546
+ ...(value.idempotentHint === undefined ? {} : { idempotentHint: value.idempotentHint }),
547
+ ...(value.openWorldHint === undefined ? {} : { openWorldHint: value.openWorldHint }),
548
+ };
549
+ }
550
+ function findTool(tools, name) {
551
+ return tools.get(name) ?? [...tools.values()].find((tool) => tool.normalizedName === name);
552
+ }
553
+ function isConnectionFailure(error) {
554
+ return !(error instanceof McpError) || error.code === ErrorCode.ConnectionClosed || error.code === ErrorCode.RequestTimeout;
555
+ }
556
+ function bounded(value, maximum) {
557
+ return value.length <= maximum ? value : `${value.slice(0, maximum - 1)}…`;
558
+ }
559
+ function positiveInteger(value, path) {
560
+ if (!Number.isSafeInteger(value) || value < 1)
561
+ throw new Error(`${path} must be a positive safe integer`);
562
+ return value;
563
+ }
564
+ function throwIfAborted(signal) {
565
+ if (signal?.aborted)
566
+ throw signal.reason instanceof Error ? signal.reason : new Error("MCP operation aborted");
567
+ }
568
+ async function withAbort(task, signal) {
569
+ if (!signal)
570
+ return task;
571
+ throwIfAborted(signal);
572
+ let abort;
573
+ const interrupted = new Promise((_resolve, reject) => {
574
+ abort = () => reject(signal.reason instanceof Error ? signal.reason : new Error("MCP operation aborted"));
575
+ signal.addEventListener("abort", abort, { once: true });
576
+ });
577
+ try {
578
+ return await Promise.race([task, interrupted]);
579
+ }
580
+ finally {
581
+ if (abort)
582
+ signal.removeEventListener("abort", abort);
583
+ }
584
+ }
585
+ function isRecord(value) {
586
+ return typeof value === "object" && value !== null && !Array.isArray(value);
587
+ }
588
+ function toError(error) {
589
+ return error instanceof Error ? error : new Error(String(error));
590
+ }
591
+ //# sourceMappingURL=mcp-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-manager.js","sourceRoot":"","sources":["../../src/mcp/mcp-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ToolDefinition } from "@earendil-works/pi-coding-agent";
2
+ import type { McpManager } from "./mcp-manager.js";
3
+ export declare function createMcpTools(manager: () => McpManager): readonly ToolDefinition[];
4
+ //# sourceMappingURL=mcp-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGlF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,UAAU,GAAG,SAAS,cAAc,EAAE,CAgCnF"}