@openeryc/pi-coding-agent 0.75.29 → 0.75.30
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 +11 -0
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +22 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/hook-runner.d.ts +23 -0
- package/dist/core/hook-runner.d.ts.map +1 -0
- package/dist/core/hook-runner.js +116 -0
- package/dist/core/hook-runner.js.map +1 -0
- package/dist/core/mcp/client.d.ts +22 -12
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js +206 -108
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/index.d.ts +2 -3
- package/dist/core/mcp/index.d.ts.map +1 -1
- package/dist/core/mcp/index.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +6 -9
- package/dist/core/mcp/manager.d.ts.map +1 -1
- package/dist/core/mcp/manager.js +95 -103
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/types.d.ts +30 -67
- package/dist/core/mcp/types.d.ts.map +1 -1
- package/dist/core/mcp/types.js +0 -6
- package/dist/core/mcp/types.js.map +1 -1
- package/dist/core/settings-manager.d.ts +8 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tools/ask-user-question.d.ts +21 -0
- package/dist/core/tools/ask-user-question.d.ts.map +1 -0
- package/dist/core/tools/ask-user-question.js +75 -0
- package/dist/core/tools/ask-user-question.js.map +1 -0
- package/dist/core/tools/index.d.ts +2 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +9 -0
- package/dist/core/tools/index.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/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
- package/dist/core/index.d.ts +0 -12
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -12
- package/dist/core/index.js.map +0 -1
|
@@ -26,6 +26,7 @@ import { exportSessionToHtml } from "./export-html/index.js";
|
|
|
26
26
|
import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
27
27
|
import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
|
|
28
28
|
import { emitSessionShutdownEvent } from "./extensions/runner.js";
|
|
29
|
+
import { HookRunner } from "./hook-runner.js";
|
|
29
30
|
import { MCPManager } from "./mcp/index.js";
|
|
30
31
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
31
32
|
import { CURRENT_SESSION_VERSION, getLatestCompactionEntry, SessionManager as SessionManagerCtor, } from "./session-manager.js";
|
|
@@ -103,6 +104,8 @@ export class AgentSession {
|
|
|
103
104
|
_extensionErrorUnsubscriber;
|
|
104
105
|
// MCP client management
|
|
105
106
|
_mcpManager = null;
|
|
107
|
+
// Hooks system
|
|
108
|
+
_hookRunner = null;
|
|
106
109
|
// Model registry for API key resolution
|
|
107
110
|
_modelRegistry;
|
|
108
111
|
// Tool registry for extension getTools/setTools
|
|
@@ -130,6 +133,7 @@ export class AgentSession {
|
|
|
130
133
|
// Always subscribe to agent events for internal handling
|
|
131
134
|
// (session persistence, extensions, auto-compaction, retry logic)
|
|
132
135
|
this._unsubscribeAgent = this.agent.subscribe(this._handleAgentEvent);
|
|
136
|
+
this._hookRunner = new HookRunner(this.settingsManager);
|
|
133
137
|
this._installAgentToolHooks();
|
|
134
138
|
this._buildRuntime({
|
|
135
139
|
activeToolNames: this._initialActiveToolNames,
|
|
@@ -175,7 +179,14 @@ export class AgentSession {
|
|
|
175
179
|
* happens here instead of in wrappers.
|
|
176
180
|
*/
|
|
177
181
|
_installAgentToolHooks() {
|
|
182
|
+
const hookRunner = this._hookRunner;
|
|
178
183
|
this.agent.beforeToolCall = async ({ toolCall, args }) => {
|
|
184
|
+
if (hookRunner) {
|
|
185
|
+
const hookResult = await hookRunner.runPreToolHooks(toolCall.name, args);
|
|
186
|
+
if (hookResult?.behavior === "deny") {
|
|
187
|
+
throw new Error(hookResult.message ?? `Blocked by hook: ${toolCall.name}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
179
190
|
const runner = this._extensionRunner;
|
|
180
191
|
if (!runner.hasHandlers("tool_call")) {
|
|
181
192
|
return undefined;
|
|
@@ -196,6 +207,15 @@ export class AgentSession {
|
|
|
196
207
|
}
|
|
197
208
|
};
|
|
198
209
|
this.agent.afterToolCall = async ({ toolCall, args, result, isError }) => {
|
|
210
|
+
if (this._hookRunner) {
|
|
211
|
+
const postHookResult = await this._hookRunner.runPostToolHooks(toolCall.name, result.content.map((c) => c.text ?? "").join("\n"));
|
|
212
|
+
if (postHookResult?.additionalContext) {
|
|
213
|
+
result = {
|
|
214
|
+
...result,
|
|
215
|
+
content: [...result.content, { type: "text", text: postHookResult.additionalContext }],
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
199
219
|
const runner = this._extensionRunner;
|
|
200
220
|
if (!runner.hasHandlers("tool_result")) {
|
|
201
221
|
return undefined;
|
|
@@ -1651,8 +1671,8 @@ export class AgentSession {
|
|
|
1651
1671
|
await this._mcpManager.stop();
|
|
1652
1672
|
this._mcpManager = null;
|
|
1653
1673
|
}
|
|
1654
|
-
this._mcpManager = new MCPManager(
|
|
1655
|
-
await this._mcpManager.start();
|
|
1674
|
+
this._mcpManager = new MCPManager();
|
|
1675
|
+
await this._mcpManager.start(mcpServers);
|
|
1656
1676
|
const mcpTools = this._mcpManager.getToolDefinitions();
|
|
1657
1677
|
if (mcpTools.length > 0) {
|
|
1658
1678
|
this._customTools.push(...mcpTools);
|