@agents-ensemble/core 0.6.5 → 0.8.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 (214) hide show
  1. package/dist/conductor/conductor-agent.d.ts +50 -14
  2. package/dist/conductor/conductor-agent.d.ts.map +1 -1
  3. package/dist/conductor/conductor-agent.js +1 -96
  4. package/dist/conductor/conductor-agent.js.map +1 -1
  5. package/dist/conductor/conductor-auth.d.ts +36 -6
  6. package/dist/conductor/conductor-auth.d.ts.map +1 -1
  7. package/dist/conductor/conductor-auth.js +59 -7
  8. package/dist/conductor/conductor-auth.js.map +1 -1
  9. package/dist/conductor/conductor-pi-auth.d.ts +75 -0
  10. package/dist/conductor/conductor-pi-auth.d.ts.map +1 -0
  11. package/dist/conductor/conductor-pi-auth.js +524 -0
  12. package/dist/conductor/conductor-pi-auth.js.map +1 -0
  13. package/dist/conductor/conductor-send-reconnect.d.ts +10 -6
  14. package/dist/conductor/conductor-send-reconnect.d.ts.map +1 -1
  15. package/dist/conductor/conductor-send-reconnect.js +6 -4
  16. package/dist/conductor/conductor-send-reconnect.js.map +1 -1
  17. package/dist/conductor/conductor-session-driver.d.ts +4 -4
  18. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  19. package/dist/conductor/conductor-session-driver.js +47 -29
  20. package/dist/conductor/conductor-session-driver.js.map +1 -1
  21. package/dist/conductor/conductor-session.d.ts +5 -1
  22. package/dist/conductor/conductor-session.d.ts.map +1 -1
  23. package/dist/conductor/conductor-session.js +138 -32
  24. package/dist/conductor/conductor-session.js.map +1 -1
  25. package/dist/conductor/conductor-tool-pi-adapter.d.ts +13 -0
  26. package/dist/conductor/conductor-tool-pi-adapter.d.ts.map +1 -0
  27. package/dist/conductor/conductor-tool-pi-adapter.js +30 -0
  28. package/dist/conductor/conductor-tool-pi-adapter.js.map +1 -0
  29. package/dist/conductor/conductor-tool-sdk-adapter.d.ts +6 -0
  30. package/dist/conductor/conductor-tool-sdk-adapter.d.ts.map +1 -0
  31. package/dist/conductor/conductor-tool-sdk-adapter.js +16 -0
  32. package/dist/conductor/conductor-tool-sdk-adapter.js.map +1 -0
  33. package/dist/conductor/conductor-tool.d.ts +35 -0
  34. package/dist/conductor/conductor-tool.d.ts.map +1 -0
  35. package/dist/conductor/conductor-tool.js +41 -0
  36. package/dist/conductor/conductor-tool.js.map +1 -0
  37. package/dist/conductor/cursor-sdk-conductor-agent.d.ts +18 -0
  38. package/dist/conductor/cursor-sdk-conductor-agent.d.ts.map +1 -0
  39. package/dist/conductor/cursor-sdk-conductor-agent.js +134 -0
  40. package/dist/conductor/cursor-sdk-conductor-agent.js.map +1 -0
  41. package/dist/conductor/index.d.ts +21 -7
  42. package/dist/conductor/index.d.ts.map +1 -1
  43. package/dist/conductor/index.js +11 -4
  44. package/dist/conductor/index.js.map +1 -1
  45. package/dist/conductor/list-conductor-models.d.ts +7 -2
  46. package/dist/conductor/list-conductor-models.d.ts.map +1 -1
  47. package/dist/conductor/list-conductor-models.js +9 -1
  48. package/dist/conductor/list-conductor-models.js.map +1 -1
  49. package/dist/conductor/pi-conductor-agent.d.ts +47 -0
  50. package/dist/conductor/pi-conductor-agent.d.ts.map +1 -0
  51. package/dist/conductor/pi-conductor-agent.js +479 -0
  52. package/dist/conductor/pi-conductor-agent.js.map +1 -0
  53. package/dist/conductor/pi-conductor-session.d.ts +20 -0
  54. package/dist/conductor/pi-conductor-session.d.ts.map +1 -0
  55. package/dist/conductor/pi-conductor-session.js +60 -0
  56. package/dist/conductor/pi-conductor-session.js.map +1 -0
  57. package/dist/conductor/pi-mcp-bridge.d.ts +65 -0
  58. package/dist/conductor/pi-mcp-bridge.d.ts.map +1 -0
  59. package/dist/conductor/pi-mcp-bridge.js +259 -0
  60. package/dist/conductor/pi-mcp-bridge.js.map +1 -0
  61. package/dist/conductor/pi-resource-loader.d.ts +148 -0
  62. package/dist/conductor/pi-resource-loader.d.ts.map +1 -0
  63. package/dist/conductor/pi-resource-loader.js +675 -0
  64. package/dist/conductor/pi-resource-loader.js.map +1 -0
  65. package/dist/conductor/session/dispatch-hold.d.ts +14 -0
  66. package/dist/conductor/session/dispatch-hold.d.ts.map +1 -1
  67. package/dist/conductor/session/dispatch-hold.js +30 -0
  68. package/dist/conductor/session/dispatch-hold.js.map +1 -1
  69. package/dist/conductor/session/events/index.d.ts +1 -1
  70. package/dist/conductor/session/events/index.d.ts.map +1 -1
  71. package/dist/conductor/session/events/index.js.map +1 -1
  72. package/dist/conductor/session/events/session-log-event-groups.d.ts +2 -2
  73. package/dist/conductor/session/events/session-log-event-groups.d.ts.map +1 -1
  74. package/dist/conductor/session/events/session-log-event-groups.js +1 -0
  75. package/dist/conductor/session/events/session-log-event-groups.js.map +1 -1
  76. package/dist/conductor/session/events/session-log-event.d.ts +10 -1
  77. package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
  78. package/dist/conductor/session/format-session-event.js +3 -0
  79. package/dist/conductor/session/format-session-event.js.map +1 -1
  80. package/dist/conductor/session/session-logger.d.ts.map +1 -1
  81. package/dist/conductor/session/session-logger.js +1 -0
  82. package/dist/conductor/session/session-logger.js.map +1 -1
  83. package/dist/config/defaults.d.ts +2 -1
  84. package/dist/config/defaults.d.ts.map +1 -1
  85. package/dist/config/defaults.js +2 -0
  86. package/dist/config/defaults.js.map +1 -1
  87. package/dist/config/index.d.ts +3 -3
  88. package/dist/config/index.d.ts.map +1 -1
  89. package/dist/config/index.js +2 -2
  90. package/dist/config/index.js.map +1 -1
  91. package/dist/config/parse-config.d.ts.map +1 -1
  92. package/dist/config/parse-config.js +29 -1
  93. package/dist/config/parse-config.js.map +1 -1
  94. package/dist/config/resolve-settings.d.ts +25 -1
  95. package/dist/config/resolve-settings.d.ts.map +1 -1
  96. package/dist/config/resolve-settings.js +38 -1
  97. package/dist/config/resolve-settings.js.map +1 -1
  98. package/dist/config/types.d.ts +11 -0
  99. package/dist/config/types.d.ts.map +1 -1
  100. package/dist/dispatch/prompt-worker-tool.d.ts +2 -2
  101. package/dist/dispatch/prompt-worker-tool.d.ts.map +1 -1
  102. package/dist/dispatch/prompt-worker-tool.js +1 -0
  103. package/dist/dispatch/prompt-worker-tool.js.map +1 -1
  104. package/dist/dispatch/session-usage-tool.d.ts +2 -2
  105. package/dist/dispatch/session-usage-tool.d.ts.map +1 -1
  106. package/dist/dispatch/session-usage-tool.js +2 -0
  107. package/dist/dispatch/session-usage-tool.js.map +1 -1
  108. package/dist/dispatch/set-dispatch-hold-tool.d.ts +2 -2
  109. package/dist/dispatch/set-dispatch-hold-tool.d.ts.map +1 -1
  110. package/dist/dispatch/set-dispatch-hold-tool.js +1 -0
  111. package/dist/dispatch/set-dispatch-hold-tool.js.map +1 -1
  112. package/dist/dispatch/worker-status-tool.d.ts +2 -2
  113. package/dist/dispatch/worker-status-tool.d.ts.map +1 -1
  114. package/dist/dispatch/worker-status-tool.js +2 -0
  115. package/dist/dispatch/worker-status-tool.js.map +1 -1
  116. package/dist/dispatch/yaml-tool-result.d.ts +3 -9
  117. package/dist/dispatch/yaml-tool-result.d.ts.map +1 -1
  118. package/dist/dispatch/yaml-tool-result.js.map +1 -1
  119. package/dist/escalation/answer-open-question-tool.d.ts +2 -2
  120. package/dist/escalation/answer-open-question-tool.d.ts.map +1 -1
  121. package/dist/escalation/answer-open-question-tool.js +1 -0
  122. package/dist/escalation/answer-open-question-tool.js.map +1 -1
  123. package/dist/escalation/ask-human-tool.d.ts +2 -2
  124. package/dist/escalation/ask-human-tool.d.ts.map +1 -1
  125. package/dist/escalation/ask-human-tool.js +1 -0
  126. package/dist/escalation/ask-human-tool.js.map +1 -1
  127. package/dist/escalation/open-question-list-tools.d.ts +2 -2
  128. package/dist/escalation/open-question-list-tools.d.ts.map +1 -1
  129. package/dist/escalation/open-question-list-tools.js +2 -0
  130. package/dist/escalation/open-question-list-tools.js.map +1 -1
  131. package/dist/github/fetch-github-updates.d.ts +0 -6
  132. package/dist/github/fetch-github-updates.d.ts.map +1 -1
  133. package/dist/github/fetch-github-updates.js +119 -135
  134. package/dist/github/fetch-github-updates.js.map +1 -1
  135. package/dist/github/github-client.d.ts.map +1 -1
  136. package/dist/github/github-client.js +8 -0
  137. package/dist/github/github-client.js.map +1 -1
  138. package/dist/github/github-monitor-cursor.d.ts +36 -9
  139. package/dist/github/github-monitor-cursor.d.ts.map +1 -1
  140. package/dist/github/github-monitor-cursor.js +9 -19
  141. package/dist/github/github-monitor-cursor.js.map +1 -1
  142. package/dist/github/github-monitor.d.ts +2 -0
  143. package/dist/github/github-monitor.d.ts.map +1 -1
  144. package/dist/github/github-monitor.js +13 -0
  145. package/dist/github/github-monitor.js.map +1 -1
  146. package/dist/github/github-test-fixtures.d.ts +9 -0
  147. package/dist/github/github-test-fixtures.d.ts.map +1 -1
  148. package/dist/github/github-test-fixtures.js +6 -0
  149. package/dist/github/github-test-fixtures.js.map +1 -1
  150. package/dist/github/github-update-types.d.ts +11 -1
  151. package/dist/github/github-update-types.d.ts.map +1 -1
  152. package/dist/github/index.d.ts +4 -2
  153. package/dist/github/index.d.ts.map +1 -1
  154. package/dist/github/index.js +1 -0
  155. package/dist/github/index.js.map +1 -1
  156. package/dist/github/register-github-watch-tool.d.ts +7 -2
  157. package/dist/github/register-github-watch-tool.d.ts.map +1 -1
  158. package/dist/github/register-github-watch-tool.js +31 -24
  159. package/dist/github/register-github-watch-tool.js.map +1 -1
  160. package/dist/github/unregister-github-watch-tool.d.ts +11 -0
  161. package/dist/github/unregister-github-watch-tool.d.ts.map +1 -0
  162. package/dist/github/unregister-github-watch-tool.js +52 -0
  163. package/dist/github/unregister-github-watch-tool.js.map +1 -0
  164. package/dist/mcp/index.d.ts +2 -3
  165. package/dist/mcp/index.d.ts.map +1 -1
  166. package/dist/mcp/index.js +1 -1
  167. package/dist/mcp/index.js.map +1 -1
  168. package/dist/mcp/load-mcp-config.d.ts +29 -5
  169. package/dist/mcp/load-mcp-config.d.ts.map +1 -1
  170. package/dist/mcp/load-mcp-config.js +9 -2
  171. package/dist/mcp/load-mcp-config.js.map +1 -1
  172. package/dist/permission/resolve-permission-tool.d.ts +2 -2
  173. package/dist/permission/resolve-permission-tool.d.ts.map +1 -1
  174. package/dist/permission/resolve-permission-tool.js +1 -0
  175. package/dist/permission/resolve-permission-tool.js.map +1 -1
  176. package/dist/profile/index.d.ts +1 -1
  177. package/dist/profile/index.d.ts.map +1 -1
  178. package/dist/profile/index.js.map +1 -1
  179. package/dist/profile/load-profile.d.ts.map +1 -1
  180. package/dist/profile/load-profile.js +19 -0
  181. package/dist/profile/load-profile.js.map +1 -1
  182. package/dist/profile/types.d.ts +7 -0
  183. package/dist/profile/types.d.ts.map +1 -1
  184. package/dist/profile/types.js.map +1 -1
  185. package/dist/prompt/modules/ensemble/base-module.d.ts.map +1 -1
  186. package/dist/prompt/modules/ensemble/base-module.js +2 -1
  187. package/dist/prompt/modules/ensemble/base-module.js.map +1 -1
  188. package/dist/prompt/modules/ensemble/conductor-base-module.d.ts.map +1 -1
  189. package/dist/prompt/modules/ensemble/conductor-base-module.js +4 -1
  190. package/dist/prompt/modules/ensemble/conductor-base-module.js.map +1 -1
  191. package/dist/runtime/worker-session.d.ts +5 -0
  192. package/dist/runtime/worker-session.d.ts.map +1 -1
  193. package/dist/runtime/worker-session.js +5 -1
  194. package/dist/runtime/worker-session.js.map +1 -1
  195. package/dist/session/session-sidecar.d.ts +4 -0
  196. package/dist/session/session-sidecar.d.ts.map +1 -1
  197. package/dist/session/session-sidecar.js +16 -0
  198. package/dist/session/session-sidecar.js.map +1 -1
  199. package/dist/testing/mock-conductor-get-usage.d.ts +2 -1
  200. package/dist/testing/mock-conductor-get-usage.d.ts.map +1 -1
  201. package/dist/testing/mock-conductor-get-usage.js +1 -10
  202. package/dist/testing/mock-conductor-get-usage.js.map +1 -1
  203. package/dist/usage/enrich-session-usage-cost.d.ts +2 -2
  204. package/dist/usage/enrich-session-usage-cost.d.ts.map +1 -1
  205. package/dist/usage/session-usage-tracker.d.ts +2 -2
  206. package/dist/usage/session-usage-tracker.d.ts.map +1 -1
  207. package/dist/usage/session-usage-tracker.js +2 -2
  208. package/dist/usage/session-usage-tracker.js.map +1 -1
  209. package/dist/usage/types.d.ts +2 -2
  210. package/dist/usage/types.d.ts.map +1 -1
  211. package/dist/worktree/worktree.d.ts.map +1 -1
  212. package/dist/worktree/worktree.js +33 -16
  213. package/dist/worktree/worktree.js.map +1 -1
  214. package/package.json +5 -1
@@ -0,0 +1,60 @@
1
+ import { JsonlSessionRepo, NodeExecutionEnv } from '@earendil-works/pi-agent-core/node';
2
+ /** Project-local Pi transcript storage used by the conductor backend. */
3
+ export const PI_SESSION_ROOT = '.ensemble/pi/sessions';
4
+ /**
5
+ * The Pi Agent Core `Agent` keeps its transcript in memory. This small adapter
6
+ * persists the same messages through Pi's JSONL session API so a new process
7
+ * can rebuild `Agent.state.messages` for `--resume`.
8
+ */
9
+ export class PiConductorSession {
10
+ session;
11
+ persistedMessages;
12
+ writeQueue = Promise.resolve();
13
+ constructor(session, messages) {
14
+ this.session = session;
15
+ this.persistedMessages = [...messages];
16
+ }
17
+ static async create(cwd, sessionId) {
18
+ const repo = createSessionRepo(cwd);
19
+ const session = await repo.create({ cwd, id: sessionId });
20
+ return new PiConductorSession(session, []);
21
+ }
22
+ static async resume(cwd, sessionId) {
23
+ const repo = createSessionRepo(cwd);
24
+ const metadata = (await repo.list({ cwd })).find((candidate) => candidate.id === sessionId);
25
+ if (!metadata) {
26
+ throw new Error(`Pi session not found for resume (sessionId=${sessionId}, cwd=${cwd}, ` +
27
+ `sessionsRoot=${PI_SESSION_ROOT})`);
28
+ }
29
+ const session = await repo.open(metadata);
30
+ const context = await session.buildContext();
31
+ return new PiConductorSession(session, context.messages);
32
+ }
33
+ get messages() {
34
+ return this.persistedMessages;
35
+ }
36
+ /** Append only the suffix not already written to the JSONL transcript. */
37
+ async appendNewMessages(messages) {
38
+ const write = this.writeQueue.then(async () => {
39
+ const newMessages = messages.slice(this.persistedMessages.length);
40
+ for (const message of newMessages) {
41
+ await this.session.appendMessage(message);
42
+ }
43
+ if (newMessages.length > 0) {
44
+ this.persistedMessages = [
45
+ ...this.persistedMessages,
46
+ ...newMessages,
47
+ ];
48
+ }
49
+ });
50
+ this.writeQueue = write.catch(() => { });
51
+ await write;
52
+ }
53
+ }
54
+ function createSessionRepo(cwd) {
55
+ return new JsonlSessionRepo({
56
+ fs: new NodeExecutionEnv({ cwd }),
57
+ sessionsRoot: PI_SESSION_ROOT,
58
+ });
59
+ }
60
+ //# sourceMappingURL=pi-conductor-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-conductor-session.js","sourceRoot":"","sources":["../../src/conductor/pi-conductor-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGxF,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAKV;IAJX,iBAAiB,CAAiB;IAClC,UAAU,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtD,YACmB,OAAgB,EACjC,QAAwB;QADP,YAAO,GAAP,OAAO,CAAS;QAGjC,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,SAAiB;QAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,SAAiB;QAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAC9C,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAC1C,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,8CAA8C,SAAS,SAAS,GAAG,IAAI;gBACrE,gBAAgB,eAAe,GAAG,CACrC,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7C,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,iBAAiB,CAAC,QAAiC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAClE,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,GAAG;oBACvB,GAAG,IAAI,CAAC,iBAAiB;oBACzB,GAAG,WAAW;iBACf,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,IAAI,gBAAgB,CAAC;QAC1B,EAAE,EAAE,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;QACjC,YAAY,EAAE,eAAe;KAC9B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,65 @@
1
+ import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ import type { McpServerConfigMap } from '../mcp/load-mcp-config.js';
3
+ /** The bridge dependency is intentionally exact-pinned in packages/core. */
4
+ export declare const PI_MCP_SDK_VERSION = "1.30.0";
5
+ interface McpToolDefinition {
6
+ name: string;
7
+ description?: string;
8
+ inputSchema: Record<string, unknown>;
9
+ }
10
+ interface McpClient {
11
+ connect(transport: unknown): Promise<void>;
12
+ listTools(): Promise<{
13
+ tools: McpToolDefinition[];
14
+ }>;
15
+ callTool(params: {
16
+ name: string;
17
+ arguments?: Record<string, unknown>;
18
+ }, resultSchema?: unknown, options?: {
19
+ signal?: AbortSignal;
20
+ }): Promise<unknown>;
21
+ close(): Promise<void>;
22
+ }
23
+ export interface PiMcpBridgeSdk {
24
+ Client: new (info: {
25
+ name: string;
26
+ version: string;
27
+ }) => McpClient;
28
+ StdioClientTransport: new (options: {
29
+ command: string;
30
+ args?: string[];
31
+ env?: Record<string, string>;
32
+ cwd?: string;
33
+ }) => unknown;
34
+ StreamableHTTPClientTransport: new (url: URL, options?: {
35
+ requestInit?: RequestInit;
36
+ }) => unknown;
37
+ SSEClientTransport: new (url: URL, options?: {
38
+ requestInit?: RequestInit;
39
+ }) => unknown;
40
+ }
41
+ /** Injectable only for unit tests; production uses the pinned SDK loader. */
42
+ export interface PiMcpBridgeDependencies {
43
+ sdk?: PiMcpBridgeSdk;
44
+ loadSdk?: () => Promise<PiMcpBridgeSdk>;
45
+ }
46
+ export interface PiMcpBridgeOptions {
47
+ cwd: string;
48
+ env?: NodeJS.ProcessEnv;
49
+ }
50
+ export interface PiMcpBridge {
51
+ readonly tools: AgentTool[];
52
+ close(): Promise<void>;
53
+ }
54
+ /**
55
+ * Load the harness-owned in-process Pi MCP bridge for one resolved mcp.json
56
+ * snapshot. This is not a Pi ExtensionAPI extension.
57
+ *
58
+ * The bridge is deliberately in-memory: it does not write `.pi/mcp.json` or
59
+ * mutate Pi settings. The Pi resource loader resolves user/project Pi
60
+ * resources separately; this bridge remains the harness-owned connection for
61
+ * the already-resolved ensemble MCP map.
62
+ */
63
+ export declare function createPiMcpBridge(mcpServers: McpServerConfigMap | undefined, options: PiMcpBridgeOptions, dependencies?: PiMcpBridgeDependencies): Promise<PiMcpBridge | undefined>;
64
+ export {};
65
+ //# sourceMappingURL=pi-mcp-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-mcp-bridge.d.ts","sourceRoot":"","sources":["../../src/conductor/pi-mcp-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAEnC,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AA8CD,UAAU,SAAS;IACjB,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,SAAS,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAC,CAAC;IACrD,QAAQ,CACN,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAC7D,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,SAAS,CAAC;IACnE,oBAAoB,EAAE,KAAK,OAAO,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,KAAK,OAAO,CAAC;IACd,6BAA6B,EAAE,KAC7B,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,KACpC,OAAO,CAAC;IACb,kBAAkB,EAAE,KAClB,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,KACpC,OAAO,CAAC;CACd;AAED,6EAA6E;AAC7E,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAOD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,kBAAkB,GAAG,SAAS,EAC1C,OAAO,EAAE,kBAAkB,EAC3B,YAAY,GAAE,uBAA4B,GACzC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAoClC"}
@@ -0,0 +1,259 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-mcp-bridge.js","sourceRoot":"","sources":["../../src/conductor/pi-mcp-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ /** The Pi settings fields used by model/auth resolution and resource loading. */
3
+ export interface PiSettingsFile {
4
+ [key: string]: unknown;
5
+ defaultProvider?: unknown;
6
+ defaultModel?: unknown;
7
+ model?: unknown;
8
+ modelId?: unknown;
9
+ apiKey?: unknown;
10
+ apiKeys?: unknown;
11
+ extensions?: unknown;
12
+ skills?: unknown;
13
+ prompts?: unknown;
14
+ themes?: unknown;
15
+ }
16
+ export type PiAuthFile = Record<string, unknown>;
17
+ export interface PiModelsFile {
18
+ providers: Record<string, PiProviderConfig>;
19
+ }
20
+ export interface PiProviderConfig {
21
+ name?: string;
22
+ baseUrl?: string;
23
+ apiKey?: string;
24
+ api?: string;
25
+ headers?: Record<string, string>;
26
+ authHeader?: boolean;
27
+ compat?: Record<string, unknown>;
28
+ models?: PiModelDefinition[];
29
+ modelOverrides?: Record<string, PiModelOverride>;
30
+ }
31
+ export interface PiModelDefinition {
32
+ id: string;
33
+ name?: string;
34
+ api?: string;
35
+ baseUrl?: string;
36
+ reasoning?: boolean;
37
+ thinkingLevelMap?: Record<string, string | null>;
38
+ input?: Array<'text' | 'image'>;
39
+ cost?: PiModelCost;
40
+ contextWindow?: number;
41
+ maxTokens?: number;
42
+ headers?: Record<string, string>;
43
+ compat?: Record<string, unknown>;
44
+ }
45
+ export interface PiModelOverride {
46
+ name?: string;
47
+ reasoning?: boolean;
48
+ thinkingLevelMap?: Record<string, string | null>;
49
+ input?: Array<'text' | 'image'>;
50
+ cost?: Partial<PiModelCost>;
51
+ contextWindow?: number;
52
+ maxTokens?: number;
53
+ headers?: Record<string, string>;
54
+ compat?: Record<string, unknown>;
55
+ }
56
+ export interface PiModelCost {
57
+ input: number;
58
+ output: number;
59
+ cacheRead: number;
60
+ cacheWrite: number;
61
+ tiers?: Array<PiModelCostTier>;
62
+ }
63
+ export interface PiModelCostTier {
64
+ inputTokensAbove: number;
65
+ input: number;
66
+ output: number;
67
+ cacheRead: number;
68
+ cacheWrite: number;
69
+ }
70
+ export interface PiSkillResource {
71
+ name: string;
72
+ description: string;
73
+ filePath: string;
74
+ content: string;
75
+ disableModelInvocation: boolean;
76
+ }
77
+ export interface PiPromptResource {
78
+ name: string;
79
+ description: string;
80
+ argumentHint?: string;
81
+ filePath: string;
82
+ content: string;
83
+ }
84
+ export interface PiThemeResource {
85
+ name: string;
86
+ filePath: string;
87
+ value: Record<string, unknown>;
88
+ }
89
+ export interface PiResourceRoots {
90
+ agentDir: string;
91
+ projectDir: string;
92
+ }
93
+ export interface PiResourceLoaderOptions {
94
+ cwd: string;
95
+ pi?: {
96
+ agentDir?: string;
97
+ projectDir?: string;
98
+ };
99
+ /** Injectable environment/home for tests; production uses process defaults. */
100
+ env?: NodeJS.ProcessEnv;
101
+ home?: string;
102
+ }
103
+ export interface PiResources {
104
+ roots: PiResourceRoots;
105
+ settings: PiSettingsFile;
106
+ auth: PiAuthFile;
107
+ /** Unmerged layers, in user → project order, for provider-level precedence. */
108
+ authLayers: PiAuthFile[];
109
+ /** Unmerged model layers, in user → project order, for provider-level precedence. */
110
+ modelsLayers: PiModelsFile[];
111
+ models: PiModelsFile;
112
+ extensionTools: AgentTool[];
113
+ extensionPaths: string[];
114
+ skillPaths: string[];
115
+ promptPaths: string[];
116
+ themePaths: string[];
117
+ skills: PiSkillResource[];
118
+ prompts: PiPromptResource[];
119
+ themes: PiThemeResource[];
120
+ }
121
+ /**
122
+ * Resolve the two Pi resource roots used by the conductor.
123
+ *
124
+ * `agentDir` is the user root and defaults to `~/.ensemble/pi`; `projectDir`
125
+ * is the repository root and defaults to `<cwd>/.ensemble/pi`. The optional
126
+ * environment variable is retained for compatibility with Pi's launcher.
127
+ */
128
+ export declare function resolvePiResourceRoots(options: PiResourceLoaderOptions): PiResourceRoots;
129
+ /**
130
+ * Load Pi's standard file resources for a conductor.
131
+ *
132
+ * User resources are read first and project resources second. Settings/auth
133
+ * objects are deep-merged, project extension tools replace same-named user
134
+ * tools, and extension loading failures are isolated so a broken optional
135
+ * local extension cannot prevent the fixed harness tools from starting.
136
+ *
137
+ * The conductor loop intentionally runs on low-level `pi-agent-core`; it uses
138
+ * `pi-coding-agent` only for its compatible AuthStorage/ModelRegistry services.
139
+ * This loader mirrors the coding-agent resource roots and extension
140
+ * registration boundary without starting its interactive UI or adding Pi's
141
+ * built-in coding tools to the conductor.
142
+ */
143
+ export declare function loadPiResources(options: PiResourceLoaderOptions): Promise<PiResources>;
144
+ /** Add usable Pi skills to the compiled conductor prompt. */
145
+ export declare function formatPiSkillsForPrompt(skills: PiSkillResource[]): string;
146
+ /** Expand Pi prompt templates and explicit skill invocations for headless sends. */
147
+ export declare function expandPiResourcePrompt(prompt: string, resources: Pick<PiResources, 'prompts' | 'skills'>): string;
148
+ //# sourceMappingURL=pi-resource-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-resource-loader.d.ts","sourceRoot":"","sources":["../../src/conductor/pi-resource-loader.ts"],"names":[],"mappings":"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"}