@dyyz1993/pi-coding-agent 0.74.9 → 0.74.11
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.
- package/CHANGELOG.md +19 -0
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session.d.ts +9 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +51 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/mcp/mcp-manager.d.ts +1 -0
- package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
- package/dist/core/mcp/mcp-manager.js +36 -0
- package/dist/core/mcp/mcp-manager.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +41 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +3 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/rpc/rpc-client-types.d.ts +4 -1
- package/dist/modes/rpc/rpc-client-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-types.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +3 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +10 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +18 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +21 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +4 -4
|
@@ -34,6 +34,7 @@ import { emitSessionShutdownEvent } from "./extensions/runner.js";
|
|
|
34
34
|
import { FileSnapshotManager } from "./file-store/file-snapshot-manager.js";
|
|
35
35
|
import { InternalGit } from "./file-store/internal-git.js";
|
|
36
36
|
import { McpManager } from "./mcp/mcp-manager.js";
|
|
37
|
+
import { createMcpToolDefinition } from "./mcp/tool-converter.js";
|
|
37
38
|
import { resolveModelAlias } from "./model-resolver.js";
|
|
38
39
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
39
40
|
import { CURRENT_SESSION_VERSION, getLatestCompactionEntry } from "./session-manager.js";
|
|
@@ -119,6 +120,9 @@ export class AgentSession {
|
|
|
119
120
|
_modelRegistry;
|
|
120
121
|
_fileSnapshotManager = null;
|
|
121
122
|
_mcpManager;
|
|
123
|
+
_mcpToolDefinitions = new Map();
|
|
124
|
+
_mcpServerScopes = new Map();
|
|
125
|
+
_noMcp;
|
|
122
126
|
_tierModels = {};
|
|
123
127
|
// Tool registry for extension getTools/setTools
|
|
124
128
|
_toolRegistry = new Map();
|
|
@@ -142,6 +146,7 @@ export class AgentSession {
|
|
|
142
146
|
this._allowedToolNames = config.allowedToolNames ? new Set(config.allowedToolNames) : undefined;
|
|
143
147
|
this._baseToolsOverride = config.baseToolsOverride;
|
|
144
148
|
this._sessionStartEvent = config.sessionStartEvent ?? { type: "session_start", reason: "startup" };
|
|
149
|
+
this._noMcp = config.noMcp ?? false;
|
|
145
150
|
// Always subscribe to agent events for internal handling
|
|
146
151
|
// (session persistence, extensions, auto-compaction, retry logic)
|
|
147
152
|
this._unsubscribeAgent = this.agent.subscribe(this._handleAgentEvent);
|
|
@@ -172,14 +177,22 @@ export class AgentSession {
|
|
|
172
177
|
}
|
|
173
178
|
}
|
|
174
179
|
_initMcpServers() {
|
|
180
|
+
if (this._noMcp)
|
|
181
|
+
return;
|
|
175
182
|
if (this._mcpManager) {
|
|
176
183
|
this._mcpManager.dispose().catch(() => { });
|
|
177
184
|
this._mcpManager = undefined;
|
|
178
185
|
}
|
|
186
|
+
this._mcpServerScopes.clear();
|
|
187
|
+
const globalServers = this.settingsManager.getMcpServers("global");
|
|
188
|
+
const projectServers = this.settingsManager.getMcpServers("project");
|
|
179
189
|
const settings = this.settingsManager.getMergedSettings();
|
|
180
190
|
const servers = settings?.mcp?.servers;
|
|
181
191
|
if (!servers || Object.keys(servers).length === 0)
|
|
182
192
|
return;
|
|
193
|
+
for (const name of Object.keys(servers)) {
|
|
194
|
+
this._mcpServerScopes.set(name, projectServers[name] ? "project" : "global");
|
|
195
|
+
}
|
|
183
196
|
this._mcpManager = new McpManager({
|
|
184
197
|
onConnectionChange: (conn) => {
|
|
185
198
|
this._emit({
|
|
@@ -193,6 +206,21 @@ export class AgentSession {
|
|
|
193
206
|
description: t.description,
|
|
194
207
|
})),
|
|
195
208
|
});
|
|
209
|
+
if (conn.status === "connected" && this._mcpManager) {
|
|
210
|
+
this._mcpToolDefinitions.clear();
|
|
211
|
+
const allTools = this._mcpManager.getAllTools();
|
|
212
|
+
for (const tool of allTools) {
|
|
213
|
+
this._mcpToolDefinitions.set(tool.fullName, createMcpToolDefinition(tool, this._mcpManager));
|
|
214
|
+
}
|
|
215
|
+
this._refreshToolRegistry();
|
|
216
|
+
}
|
|
217
|
+
else if (conn.status === "error" || conn.status === "disconnected") {
|
|
218
|
+
const staleKeys = [...this._mcpToolDefinitions.keys()].filter((key) => key.startsWith(`mcp__${conn.name}__`));
|
|
219
|
+
for (const key of staleKeys) {
|
|
220
|
+
this._mcpToolDefinitions.delete(key);
|
|
221
|
+
}
|
|
222
|
+
this._refreshToolRegistry();
|
|
223
|
+
}
|
|
196
224
|
},
|
|
197
225
|
});
|
|
198
226
|
this._mcpManager.connectAll(servers).catch(() => { });
|
|
@@ -582,8 +610,24 @@ export class AgentSession {
|
|
|
582
610
|
fullName: t.fullName,
|
|
583
611
|
description: t.description,
|
|
584
612
|
})),
|
|
613
|
+
scope: this._mcpServerScopes.get(c.name) ?? "global",
|
|
614
|
+
disabled: c.config.disabled,
|
|
585
615
|
}));
|
|
586
616
|
}
|
|
617
|
+
async toggleMcpServer(name, enabled) {
|
|
618
|
+
if (!this._mcpManager)
|
|
619
|
+
throw new Error("MCP is not initialized");
|
|
620
|
+
const scope = this._mcpServerScopes.get(name);
|
|
621
|
+
if (!scope)
|
|
622
|
+
throw new Error(`MCP server "${name}" not found`);
|
|
623
|
+
await this._mcpManager.setServerEnabled(name, enabled);
|
|
624
|
+
this.settingsManager.setMcpServerDisabled(name, !enabled, scope);
|
|
625
|
+
}
|
|
626
|
+
async restartMcpServer(name) {
|
|
627
|
+
if (!this._mcpManager)
|
|
628
|
+
throw new Error("MCP is not initialized");
|
|
629
|
+
await this._mcpManager.restartServer(name);
|
|
630
|
+
}
|
|
587
631
|
// =========================================================================
|
|
588
632
|
// Read-only State Access
|
|
589
633
|
// =========================================================================
|
|
@@ -1901,12 +1945,19 @@ export class AgentSession {
|
|
|
1901
1945
|
const allowedToolNames = this._allowedToolNames;
|
|
1902
1946
|
const isAllowedTool = (name) => !allowedToolNames || allowedToolNames.has(name);
|
|
1903
1947
|
const registeredTools = this._extensionRunner.getAllRegisteredTools();
|
|
1948
|
+
const mcpTools = [...this._mcpToolDefinitions.values()]
|
|
1949
|
+
.filter((def) => isAllowedTool(def.name))
|
|
1950
|
+
.map((definition) => ({
|
|
1951
|
+
definition,
|
|
1952
|
+
sourceInfo: createSyntheticSourceInfo(`<mcp:${definition.name}>`, { source: "mcp" }),
|
|
1953
|
+
}));
|
|
1904
1954
|
const allCustomTools = [
|
|
1905
1955
|
...registeredTools,
|
|
1906
1956
|
...this._customTools.map((definition) => ({
|
|
1907
1957
|
definition,
|
|
1908
1958
|
sourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: "sdk" }),
|
|
1909
1959
|
})),
|
|
1960
|
+
...mcpTools,
|
|
1910
1961
|
].filter((tool) => isAllowedTool(tool.definition.name));
|
|
1911
1962
|
const definitionRegistry = new Map(Array.from(this._baseToolDefinitions.entries())
|
|
1912
1963
|
.filter(([name]) => isAllowedTool(name))
|