Split flat docs/ into user-docs/ (guides, config, troubleshooting) and dev/ (ADRs, architecture, extension guides, proposals). Updated docs/README.md index to reflect new paths.
52 lines
1.5 KiB
Markdown
52 lines
1.5 KiB
Markdown
# Remote Execution & Tool Overrides
|
|
|
|
|
|
### SSH Example Pattern
|
|
|
|
```typescript
|
|
import { createReadTool, createBashTool, createWriteTool } from "@mariozechner/pi-coding-agent";
|
|
|
|
export default function (pi: ExtensionAPI) {
|
|
pi.registerFlag("ssh", { description: "SSH target", type: "string" });
|
|
|
|
const localBash = createBashTool(process.cwd());
|
|
|
|
pi.registerTool({
|
|
...localBash,
|
|
async execute(id, params, signal, onUpdate, ctx) {
|
|
const sshTarget = pi.getFlag("--ssh");
|
|
if (sshTarget) {
|
|
const remoteBash = createBashTool(process.cwd(), {
|
|
operations: createSSHOperations(sshTarget),
|
|
});
|
|
return remoteBash.execute(id, params, signal, onUpdate);
|
|
}
|
|
return localBash.execute(id, params, signal, onUpdate);
|
|
},
|
|
});
|
|
}
|
|
```
|
|
|
|
### Tool Override Pattern (Logging/Access Control)
|
|
|
|
```typescript
|
|
pi.registerTool({
|
|
name: "read", // Same name = overrides built-in
|
|
label: "Read (Logged)",
|
|
description: "Read file contents with logging",
|
|
parameters: Type.Object({
|
|
path: Type.String(),
|
|
offset: Type.Optional(Type.Number()),
|
|
limit: Type.Optional(Type.Number()),
|
|
}),
|
|
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
console.log(`[AUDIT] Reading: ${params.path}`);
|
|
// Delegate to built-in implementation
|
|
const builtIn = createReadTool(ctx.cwd);
|
|
return builtIn.execute(toolCallId, params, signal, onUpdate);
|
|
},
|
|
// Omit renderCall/renderResult to use built-in renderer automatically
|
|
});
|
|
```
|
|
|
|
---
|