@agents-ensemble/core 0.7.0 → 0.9.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 (112) hide show
  1. package/dist/conductor/conductor-auth.d.ts +36 -6
  2. package/dist/conductor/conductor-auth.d.ts.map +1 -1
  3. package/dist/conductor/conductor-auth.js +59 -7
  4. package/dist/conductor/conductor-auth.js.map +1 -1
  5. package/dist/conductor/conductor-pi-auth.d.ts +75 -0
  6. package/dist/conductor/conductor-pi-auth.d.ts.map +1 -0
  7. package/dist/conductor/conductor-pi-auth.js +656 -0
  8. package/dist/conductor/conductor-pi-auth.js.map +1 -0
  9. package/dist/conductor/conductor-session-driver.d.ts +2 -0
  10. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  11. package/dist/conductor/conductor-session-driver.js +18 -1
  12. package/dist/conductor/conductor-session-driver.js.map +1 -1
  13. package/dist/conductor/conductor-session.d.ts.map +1 -1
  14. package/dist/conductor/conductor-session.js +69 -7
  15. package/dist/conductor/conductor-session.js.map +1 -1
  16. package/dist/conductor/conductor-tool-pi-adapter.d.ts +6 -8
  17. package/dist/conductor/conductor-tool-pi-adapter.d.ts.map +1 -1
  18. package/dist/conductor/conductor-tool-pi-adapter.js +5 -8
  19. package/dist/conductor/conductor-tool-pi-adapter.js.map +1 -1
  20. package/dist/conductor/index.d.ts +7 -8
  21. package/dist/conductor/index.d.ts.map +1 -1
  22. package/dist/conductor/index.js +4 -4
  23. package/dist/conductor/index.js.map +1 -1
  24. package/dist/conductor/list-conductor-models.d.ts +7 -2
  25. package/dist/conductor/list-conductor-models.d.ts.map +1 -1
  26. package/dist/conductor/list-conductor-models.js +9 -1
  27. package/dist/conductor/list-conductor-models.js.map +1 -1
  28. package/dist/conductor/pi-conductor-agent.d.ts +23 -6
  29. package/dist/conductor/pi-conductor-agent.d.ts.map +1 -1
  30. package/dist/conductor/pi-conductor-agent.js +317 -130
  31. package/dist/conductor/pi-conductor-agent.js.map +1 -1
  32. package/dist/conductor/pi-resource-loader.d.ts +7 -4
  33. package/dist/conductor/pi-resource-loader.d.ts.map +1 -1
  34. package/dist/conductor/pi-resource-loader.js +6 -4
  35. package/dist/conductor/pi-resource-loader.js.map +1 -1
  36. package/dist/conductor/session/dispatch-hold.d.ts +14 -0
  37. package/dist/conductor/session/dispatch-hold.d.ts.map +1 -1
  38. package/dist/conductor/session/dispatch-hold.js +30 -0
  39. package/dist/conductor/session/dispatch-hold.js.map +1 -1
  40. package/dist/conductor/session/events/index.d.ts +1 -1
  41. package/dist/conductor/session/events/index.d.ts.map +1 -1
  42. package/dist/conductor/session/events/index.js.map +1 -1
  43. package/dist/conductor/session/events/session-log-event-groups.d.ts +2 -2
  44. package/dist/conductor/session/events/session-log-event-groups.d.ts.map +1 -1
  45. package/dist/conductor/session/events/session-log-event-groups.js +1 -0
  46. package/dist/conductor/session/events/session-log-event-groups.js.map +1 -1
  47. package/dist/conductor/session/events/session-log-event.d.ts +10 -1
  48. package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
  49. package/dist/conductor/session/format-session-event.js +3 -0
  50. package/dist/conductor/session/format-session-event.js.map +1 -1
  51. package/dist/conductor/session/session-logger.d.ts.map +1 -1
  52. package/dist/conductor/session/session-logger.js +1 -0
  53. package/dist/conductor/session/session-logger.js.map +1 -1
  54. package/dist/github/fetch-github-updates.d.ts.map +1 -1
  55. package/dist/github/fetch-github-updates.js +109 -80
  56. package/dist/github/fetch-github-updates.js.map +1 -1
  57. package/dist/github/github-client.d.ts.map +1 -1
  58. package/dist/github/github-client.js +8 -0
  59. package/dist/github/github-client.js.map +1 -1
  60. package/dist/github/github-monitor-cursor.d.ts +19 -8
  61. package/dist/github/github-monitor-cursor.d.ts.map +1 -1
  62. package/dist/github/github-monitor-cursor.js +8 -52
  63. package/dist/github/github-monitor-cursor.js.map +1 -1
  64. package/dist/github/github-monitor.d.ts +2 -0
  65. package/dist/github/github-monitor.d.ts.map +1 -1
  66. package/dist/github/github-monitor.js +13 -0
  67. package/dist/github/github-monitor.js.map +1 -1
  68. package/dist/github/github-test-fixtures.d.ts +9 -0
  69. package/dist/github/github-test-fixtures.d.ts.map +1 -1
  70. package/dist/github/github-test-fixtures.js +6 -0
  71. package/dist/github/github-test-fixtures.js.map +1 -1
  72. package/dist/github/github-update-types.d.ts +10 -0
  73. package/dist/github/github-update-types.d.ts.map +1 -1
  74. package/dist/github/index.d.ts +3 -1
  75. package/dist/github/index.d.ts.map +1 -1
  76. package/dist/github/index.js +1 -0
  77. package/dist/github/index.js.map +1 -1
  78. package/dist/github/register-github-watch-tool.d.ts +5 -0
  79. package/dist/github/register-github-watch-tool.d.ts.map +1 -1
  80. package/dist/github/register-github-watch-tool.js +30 -24
  81. package/dist/github/register-github-watch-tool.js.map +1 -1
  82. package/dist/github/unregister-github-watch-tool.d.ts +11 -0
  83. package/dist/github/unregister-github-watch-tool.d.ts.map +1 -0
  84. package/dist/github/unregister-github-watch-tool.js +52 -0
  85. package/dist/github/unregister-github-watch-tool.js.map +1 -0
  86. package/dist/mcp/load-mcp-config.d.ts +8 -0
  87. package/dist/mcp/load-mcp-config.d.ts.map +1 -1
  88. package/dist/mcp/load-mcp-config.js +24 -0
  89. package/dist/mcp/load-mcp-config.js.map +1 -1
  90. package/dist/prompt/modules/ensemble/base-module.d.ts.map +1 -1
  91. package/dist/prompt/modules/ensemble/base-module.js +2 -1
  92. package/dist/prompt/modules/ensemble/base-module.js.map +1 -1
  93. package/dist/prompt/modules/ensemble/conductor-base-module.d.ts.map +1 -1
  94. package/dist/prompt/modules/ensemble/conductor-base-module.js +4 -1
  95. package/dist/prompt/modules/ensemble/conductor-base-module.js.map +1 -1
  96. package/dist/runtime/worker-session.d.ts +5 -0
  97. package/dist/runtime/worker-session.d.ts.map +1 -1
  98. package/dist/runtime/worker-session.js +5 -1
  99. package/dist/runtime/worker-session.js.map +1 -1
  100. package/dist/session/session-sidecar.d.ts +6 -0
  101. package/dist/session/session-sidecar.d.ts.map +1 -1
  102. package/dist/session/session-sidecar.js +17 -0
  103. package/dist/session/session-sidecar.js.map +1 -1
  104. package/package.json +4 -4
  105. package/dist/conductor/pi-conductor-session.d.ts +0 -20
  106. package/dist/conductor/pi-conductor-session.d.ts.map +0 -1
  107. package/dist/conductor/pi-conductor-session.js +0 -60
  108. package/dist/conductor/pi-conductor-session.js.map +0 -1
  109. package/dist/conductor/pi-mcp-bridge.d.ts +0 -65
  110. package/dist/conductor/pi-mcp-bridge.d.ts.map +0 -1
  111. package/dist/conductor/pi-mcp-bridge.js +0 -259
  112. package/dist/conductor/pi-mcp-bridge.js.map +0 -1
@@ -1,259 +0,0 @@
1
- /** The bridge dependency is intentionally exact-pinned in packages/core. */
2
- export const PI_MCP_SDK_VERSION = '1.30.0';
3
- /**
4
- * Load the harness-owned in-process Pi MCP bridge for one resolved mcp.json
5
- * snapshot. This is not a Pi ExtensionAPI extension.
6
- *
7
- * The bridge is deliberately in-memory: it does not write `.pi/mcp.json` or
8
- * mutate Pi settings. The Pi resource loader resolves user/project Pi
9
- * resources separately; this bridge remains the harness-owned connection for
10
- * the already-resolved ensemble MCP map.
11
- */
12
- export async function createPiMcpBridge(mcpServers, options, dependencies = {}) {
13
- if (!mcpServers || Object.keys(mcpServers).length === 0) {
14
- return undefined;
15
- }
16
- const sdk = dependencies.sdk ?? (await loadMcpSdk(dependencies.loadSdk));
17
- const connectedServers = [];
18
- const tools = [];
19
- const usedToolNames = new Set();
20
- try {
21
- for (const [serverName, config] of Object.entries(mcpServers)) {
22
- const client = new sdk.Client({
23
- name: 'agents-ensemble-pi-conductor',
24
- version: PI_MCP_SDK_VERSION,
25
- });
26
- connectedServers.push({ name: serverName, client });
27
- const transport = createTransport(sdk, serverName, config, options);
28
- await client.connect(transport);
29
- const listed = await client.listTools();
30
- for (const tool of listed.tools) {
31
- const exposedName = uniqueToolName(serverName, tool.name, usedToolNames);
32
- tools.push(createPiMcpTool(client, serverName, tool, exposedName));
33
- }
34
- }
35
- }
36
- catch (error) {
37
- await closeClients(connectedServers);
38
- throw new Error(`Pi MCP bridge failed while loading server configuration: ${errorMessage(error)}`, { cause: error });
39
- }
40
- return new LoadedPiMcpBridge(tools, connectedServers);
41
- }
42
- class LoadedPiMcpBridge {
43
- tools;
44
- connectedServers;
45
- closed = false;
46
- constructor(tools, connectedServers) {
47
- this.tools = tools;
48
- this.connectedServers = connectedServers;
49
- }
50
- async close() {
51
- if (this.closed) {
52
- return;
53
- }
54
- this.closed = true;
55
- await closeClients(this.connectedServers);
56
- }
57
- }
58
- async function loadMcpSdk(loader = importMcpSdk) {
59
- try {
60
- return await loader();
61
- }
62
- catch (error) {
63
- throw new Error(`Pi MCP bridge is unavailable. Install @modelcontextprotocol/sdk@${PI_MCP_SDK_VERSION} and reinstall @agents-ensemble/core.`, { cause: error });
64
- }
65
- }
66
- async function importMcpSdk() {
67
- const [client, stdio, streamableHttp, sse] = await Promise.all([
68
- import('@modelcontextprotocol/sdk/client/index.js'),
69
- import('@modelcontextprotocol/sdk/client/stdio.js'),
70
- import('@modelcontextprotocol/sdk/client/streamableHttp.js'),
71
- import('@modelcontextprotocol/sdk/client/sse.js'),
72
- ]);
73
- return {
74
- Client: client.Client,
75
- StdioClientTransport: stdio.StdioClientTransport,
76
- StreamableHTTPClientTransport: streamableHttp.StreamableHTTPClientTransport,
77
- SSEClientTransport: sse.SSEClientTransport,
78
- };
79
- }
80
- function createTransport(sdk, serverName, config, options) {
81
- if (config.auth) {
82
- throw new Error(`MCP server "${serverName}" uses OAuth auth, which the Pi bridge does not support yet. Remove auth from the definition or use the Cursor backend.`);
83
- }
84
- const env = options.env ?? process.env;
85
- const type = config.type ?? (config.command ? 'stdio' : 'http');
86
- if (type === 'stdio') {
87
- if (!config.command) {
88
- throw new Error(`MCP server "${serverName}" is missing command.`);
89
- }
90
- return new sdk.StdioClientTransport({
91
- command: expand(config.command, options.cwd, env),
92
- ...(config.args
93
- ? { args: config.args.map((value) => expand(value, options.cwd, env)) }
94
- : {}),
95
- env: mergeProcessEnvironment(config.env, options.cwd, env),
96
- cwd: config.cwd
97
- ? expand(config.cwd, options.cwd, env)
98
- : options.cwd,
99
- });
100
- }
101
- if (!config.url) {
102
- throw new Error(`MCP server "${serverName}" is missing url.`);
103
- }
104
- const requestInit = config.headers
105
- ? { headers: expandRecord(config.headers, options.cwd, env) }
106
- : undefined;
107
- const url = new URL(expand(config.url, options.cwd, env));
108
- if (type === 'sse') {
109
- return new sdk.SSEClientTransport(url, requestInit ? { requestInit } : undefined);
110
- }
111
- if (type === 'http') {
112
- return new sdk.StreamableHTTPClientTransport(url, requestInit ? { requestInit } : undefined);
113
- }
114
- throw new Error(`MCP server "${serverName}" uses unsupported transport type "${type}".`);
115
- }
116
- function createPiMcpTool(client, serverName, tool, exposedName) {
117
- return {
118
- name: exposedName,
119
- label: exposedName,
120
- description: tool.description
121
- ? `[MCP ${serverName}] ${tool.description}`
122
- : `MCP tool ${serverName}/${tool.name}`,
123
- // MCP input schemas are JSON Schema objects and are structurally
124
- // compatible with the TypeBox schema consumed by pi-agent-core.
125
- parameters: tool.inputSchema,
126
- execute: async (_toolCallId, params, signal) => {
127
- const result = toMcpToolResult(await client.callTool({
128
- name: tool.name,
129
- arguments: isRecord(params) ? params : {},
130
- }, undefined, signal ? { signal } : undefined));
131
- if (result.isError) {
132
- throw new Error(`MCP tool ${serverName}/${tool.name} returned an error: ${mcpErrorDetail(result)}`);
133
- }
134
- return {
135
- content: toPiContent(result),
136
- details: {
137
- mcpServer: serverName,
138
- mcpTool: tool.name,
139
- ...(result.structuredContent
140
- ? { structuredContent: result.structuredContent }
141
- : {}),
142
- },
143
- };
144
- },
145
- };
146
- }
147
- function toPiContent(result) {
148
- const content = [];
149
- for (const item of result.content ?? []) {
150
- if (item.type === 'text') {
151
- content.push({ type: 'text', text: item.text });
152
- }
153
- else if (item.type === 'image') {
154
- content.push({ type: 'image', data: item.data, mimeType: item.mimeType });
155
- }
156
- else if (item.type === 'resource') {
157
- content.push({ type: 'text', text: resourceText(item) });
158
- }
159
- else if (item.type === 'resource_link') {
160
- content.push({
161
- type: 'text',
162
- text: `${item.name}: ${item.uri}${item.description ? ` (${item.description})` : ''}`,
163
- });
164
- }
165
- else if (item.type === 'audio') {
166
- content.push({
167
- type: 'text',
168
- text: `[MCP audio ${item.mimeType}] ${item.data}`,
169
- });
170
- }
171
- }
172
- if (content.length === 0 && result.structuredContent) {
173
- content.push({
174
- type: 'text',
175
- text: JSON.stringify(result.structuredContent),
176
- });
177
- }
178
- if (content.length === 0) {
179
- content.push({ type: 'text', text: '(MCP tool returned no content.)' });
180
- }
181
- return content;
182
- }
183
- function resourceText(item) {
184
- if ('text' in item.resource) {
185
- return item.resource.text;
186
- }
187
- return `[MCP resource ${item.resource.uri}] ${item.resource.blob}`;
188
- }
189
- function uniqueToolName(serverName, toolName, usedNames) {
190
- const base = `mcp_${sanitizeToolNamePart(serverName)}_${sanitizeToolNamePart(toolName)}`;
191
- let candidate = base;
192
- let suffix = 2;
193
- while (usedNames.has(candidate)) {
194
- candidate = `${base}_${suffix}`;
195
- suffix += 1;
196
- }
197
- usedNames.add(candidate);
198
- return candidate;
199
- }
200
- function sanitizeToolNamePart(value) {
201
- const sanitized = value.replace(/[^a-zA-Z0-9_]/g, '_');
202
- if (!sanitized)
203
- return 'tool';
204
- return /^[a-zA-Z_]/.test(sanitized) ? sanitized : `_${sanitized}`;
205
- }
206
- function mergeProcessEnvironment(configured, cwd, env) {
207
- const inherited = Object.fromEntries(Object.entries(env)
208
- .filter((entry) => entry[1] !== undefined));
209
- return {
210
- ...inherited,
211
- ...(configured ? expandRecord(configured, cwd, env) : {}),
212
- };
213
- }
214
- function expandRecord(record, cwd, env) {
215
- return Object.fromEntries(Object.entries(record).map(([key, value]) => [
216
- key,
217
- expand(value, cwd, env),
218
- ]));
219
- }
220
- function expand(value, cwd, env) {
221
- return value
222
- .replace(/\$\{env:([^}]+)\}/g, (_match, name) => env[name] ?? '')
223
- .replace(/\$\{workspaceFolder\}/g, cwd);
224
- }
225
- async function closeClients(servers) {
226
- await Promise.allSettled(servers.map(({ client }) => client.close()));
227
- }
228
- function isRecord(value) {
229
- return typeof value === 'object' && value !== null && !Array.isArray(value);
230
- }
231
- function toMcpToolResult(value) {
232
- if (!isRecord(value)) {
233
- return {};
234
- }
235
- return {
236
- ...(Array.isArray(value.content)
237
- ? { content: value.content }
238
- : {}),
239
- ...(isRecord(value.structuredContent)
240
- ? { structuredContent: value.structuredContent }
241
- : {}),
242
- ...(value.isError === true ? { isError: true } : {}),
243
- };
244
- }
245
- function mcpErrorDetail(result) {
246
- const text = (result.content ?? [])
247
- .filter((item) => item.type === 'text')
248
- .map((item) => item.text)
249
- .join('\n');
250
- if (text)
251
- return text;
252
- if (result.structuredContent)
253
- return JSON.stringify(result.structuredContent);
254
- return 'the MCP server reported an error';
255
- }
256
- function errorMessage(error) {
257
- return error instanceof Error ? error.message : String(error);
258
- }
259
- //# sourceMappingURL=pi-mcp-bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pi-mcp-bridge.js","sourceRoot":"","sources":["../../src/conductor/pi-mcp-bridge.ts"],"names":[],"mappings":"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"}