@skelm/pi 0.3.7 → 0.3.8
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/README.md +42 -13
- package/dist/backend.d.ts +3 -0
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +74 -41
- package/dist/backend.js.map +1 -1
- package/dist/factory.d.ts +2 -0
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +4 -1
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/rpc-client.d.ts +19 -0
- package/dist/rpc-client.d.ts.map +1 -1
- package/dist/rpc-client.js +38 -1
- package/dist/rpc-client.js.map +1 -1
- package/dist/sdk-backend.d.ts.map +1 -1
- package/dist/sdk-backend.js +31 -51
- package/dist/sdk-backend.js.map +1 -1
- package/dist/sdk-client.d.ts +24 -1
- package/dist/sdk-client.d.ts.map +1 -1
- package/dist/sdk-client.js +67 -4
- package/dist/sdk-client.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -37,29 +37,58 @@ npm install @mariozechner/pi-coding-agent
|
|
|
37
37
|
|
|
38
38
|
## SDK backend (recommended)
|
|
39
39
|
|
|
40
|
+
Register the backend via `instances:` in `skelm.config.ts` and reference it by id on each step:
|
|
41
|
+
|
|
40
42
|
```ts
|
|
41
|
-
|
|
43
|
+
// skelm.config.ts
|
|
44
|
+
import { defineConfig } from 'skelm'
|
|
42
45
|
import { createPiSdkBackend } from '@skelm/pi'
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
export default defineConfig({
|
|
48
|
+
backends: { agent: 'pi' },
|
|
49
|
+
instances: [
|
|
50
|
+
createPiSdkBackend({
|
|
51
|
+
id: 'pi',
|
|
52
|
+
// cwd: './workspace', // defaults to process.cwd()
|
|
53
|
+
// timeout: 300_000, // ms; default 5 min
|
|
54
|
+
// maxConcurrent: 4, // queued beyond this; 0 = unlimited
|
|
55
|
+
}),
|
|
56
|
+
],
|
|
57
|
+
registries: {
|
|
58
|
+
skills: { glob: 'skills/**/SKILL.md' },
|
|
59
|
+
},
|
|
49
60
|
})
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
A workflow that reviews a PR using a **skill** that encodes your team's style guide:
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
// workflows/review-pr.workflow.ts
|
|
67
|
+
import { agent, pipeline } from 'skelm'
|
|
68
|
+
import { z } from 'zod'
|
|
50
69
|
|
|
51
70
|
export default pipeline({
|
|
52
|
-
id: '
|
|
71
|
+
id: 'review-pr',
|
|
72
|
+
input: z.object({ diff: z.string() }),
|
|
73
|
+
output: z.object({ verdict: z.string(), notes: z.array(z.string()) }),
|
|
53
74
|
steps: [
|
|
54
75
|
agent({
|
|
55
|
-
id: '
|
|
56
|
-
backend: pi,
|
|
57
|
-
|
|
76
|
+
id: 'reviewer',
|
|
77
|
+
backend: 'pi',
|
|
78
|
+
skills: ['style-guide'], // injected from skills/style-guide/SKILL.md
|
|
79
|
+
prompt: (ctx) =>
|
|
80
|
+
`Review this diff against the style guide and return JSON {verdict, notes}:\n\n${ctx.input.diff}`,
|
|
58
81
|
permissions: {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
82
|
+
allowedTools: [], // read-only — no tools needed
|
|
83
|
+
allowedExecutables: [],
|
|
84
|
+
allowedMcpServers: [],
|
|
85
|
+
allowedSkills: ['style-guide'],
|
|
86
|
+
networkEgress: 'deny',
|
|
87
|
+
fsRead: [],
|
|
88
|
+
fsWrite: [],
|
|
62
89
|
},
|
|
90
|
+
output: z.object({ verdict: z.string(), notes: z.array(z.string()) }),
|
|
91
|
+
maxTurns: 3,
|
|
63
92
|
}),
|
|
64
93
|
],
|
|
65
94
|
})
|
package/dist/backend.d.ts
CHANGED
|
@@ -19,6 +19,9 @@ export declare class PiBackendTimeoutError extends PiBackendError {
|
|
|
19
19
|
* Each backend instance keeps one pi process alive and reuses it across
|
|
20
20
|
* calls (a new session per call, same process). Use maxConcurrent to
|
|
21
21
|
* limit simultaneous requests.
|
|
22
|
+
*
|
|
23
|
+
* @param options Backend configuration
|
|
24
|
+
* @param options.egressProxyUrl Optional egress proxy URL to inject into subprocess
|
|
22
25
|
*/
|
|
23
26
|
export declare function createPiBackend(options?: PiBackendOptions): SkelmBackend;
|
|
24
27
|
//# sourceMappingURL=backend.d.ts.map
|
package/dist/backend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAMV,YAAY,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,gDAAgD;AAChD,qBAAa,cAAe,SAAQ,KAAK;aAInB,KAAK,CAAC,EAAE,OAAO;IAHnC,SAAkB,IAAI,oBAAmB;gBAEvC,OAAO,EAAE,MAAM,EACG,KAAK,CAAC,EAAE,OAAO,YAAA;CAIpC;AAED,qBAAa,4BAA6B,SAAQ,cAAc;CAAG;AACnE,qBAAa,uBAAwB,SAAQ,cAAc;CAAG;AAC9D,qBAAa,qBAAsB,SAAQ,cAAc;CAAG;AAE5D;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,YAAY,CAyG5E"}
|
package/dist/backend.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
// Pi does NOT speak ACP; this backend uses the native pi RPC protocol
|
|
8
8
|
// documented in @mariozechner/pi-coding-agent/docs/rpc.md.
|
|
9
|
-
import { PermissionDeniedError,
|
|
9
|
+
import { PermissionDeniedError, createConcurrencySemaphore, loadSkillBodies } from '@skelm/core';
|
|
10
10
|
import { PiRpcClient } from './rpc-client.js';
|
|
11
11
|
/** Custom error types exposed from @skelm/pi */
|
|
12
12
|
export class PiBackendError extends Error {
|
|
@@ -30,6 +30,9 @@ export class PiBackendTimeoutError extends PiBackendError {
|
|
|
30
30
|
* Each backend instance keeps one pi process alive and reuses it across
|
|
31
31
|
* calls (a new session per call, same process). Use maxConcurrent to
|
|
32
32
|
* limit simultaneous requests.
|
|
33
|
+
*
|
|
34
|
+
* @param options Backend configuration
|
|
35
|
+
* @param options.egressProxyUrl Optional egress proxy URL to inject into subprocess
|
|
33
36
|
*/
|
|
34
37
|
export function createPiBackend(options = {}) {
|
|
35
38
|
const capabilities = {
|
|
@@ -42,42 +45,38 @@ export function createPiBackend(options = {}) {
|
|
|
42
45
|
skills: true,
|
|
43
46
|
modelSelection: options.model !== undefined,
|
|
44
47
|
// RPC mode runs pi in a subprocess; skelm cannot intercept tool_call events
|
|
45
|
-
// mid-run, so it cannot enforce allowedTools,
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
48
|
+
// mid-run, so it cannot enforce allowedTools, allowedExecutables,
|
|
49
|
+
// fsRead/fsWrite, allowedMcpServers, or allowedSkills. The new gateway
|
|
50
|
+
// egress proxy DOES enforce networkEgress out-of-band (HTTP_PROXY +
|
|
51
|
+
// SKELM_EGRESS_TOKEN), but that is orthogonal to *tool* permissions. We
|
|
52
|
+
// therefore keep toolPermissions: 'unsupported' and refuse below when a
|
|
53
|
+
// caller hands us a non-network-only policy (defense-in-depth).
|
|
49
54
|
toolPermissions: 'unsupported',
|
|
50
55
|
};
|
|
51
|
-
|
|
52
|
-
const maxConcurrent = options.maxConcurrent ?? 4;
|
|
53
|
-
let active = 0;
|
|
54
|
-
const queue = [];
|
|
55
|
-
const acquire = () => {
|
|
56
|
-
if (maxConcurrent === 0 || active < maxConcurrent) {
|
|
57
|
-
active++;
|
|
58
|
-
return Promise.resolve();
|
|
59
|
-
}
|
|
60
|
-
return new Promise((resolve) => queue.push(resolve));
|
|
61
|
-
};
|
|
62
|
-
const release = () => {
|
|
63
|
-
const next = queue.shift();
|
|
64
|
-
if (next)
|
|
65
|
-
next();
|
|
66
|
-
else
|
|
67
|
-
active--;
|
|
68
|
-
};
|
|
56
|
+
const { acquire, release } = createConcurrencySemaphore(options.maxConcurrent ?? 4);
|
|
69
57
|
return {
|
|
70
58
|
id: options.id ?? 'pi',
|
|
71
59
|
label: options.label ?? 'Pi Coding Agent',
|
|
72
60
|
capabilities,
|
|
73
61
|
async run(request, context) {
|
|
74
62
|
const policy = context.permissions ?? request.permissions;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
63
|
+
// Defense-in-depth: Pi RPC cannot enforce tool / executable /
|
|
64
|
+
// filesystem / MCP / skill permissions inside the pi subprocess. We
|
|
65
|
+
// refuse when the workflow *explicitly declared* one of those
|
|
66
|
+
// dimensions. networkEgress alone is fine because the gateway egress
|
|
67
|
+
// proxy enforces it out-of-band, and a fully-defaulted policy
|
|
68
|
+
// (everything intersected to the deny-all empty set, e.g. from
|
|
69
|
+
// project defaults) is policy resolution — not user intent.
|
|
70
|
+
//
|
|
71
|
+
// When `declaredPermissions` is supplied (the canonical runner path)
|
|
72
|
+
// we use it directly; otherwise fall back to inspecting the resolved
|
|
73
|
+
// policy so callers that hand-build a ResolvedPolicy still get the
|
|
74
|
+
// refusal.
|
|
75
|
+
const refuse = context.declaredPermissions !== undefined
|
|
76
|
+
? declaresNonNetworkDimension(context.declaredPermissions)
|
|
77
|
+
: policy !== undefined && resolvedPolicyHasNonNetworkConstraints(policy);
|
|
78
|
+
if (refuse) {
|
|
79
|
+
throw new PermissionDeniedError('pi RPC backend cannot enforce tool, executable, filesystem, MCP, or skill permissions in-subprocess. Use the pi-sdk backend for tool-level enforcement, or remove those dimensions and rely on networkEgress + the gateway egress proxy.');
|
|
81
80
|
}
|
|
82
81
|
await acquire();
|
|
83
82
|
const client = new PiRpcClient({
|
|
@@ -85,6 +84,11 @@ export function createPiBackend(options = {}) {
|
|
|
85
84
|
...(options.provider !== undefined && { provider: options.provider }),
|
|
86
85
|
...(options.model !== undefined && { model: options.model }),
|
|
87
86
|
...((request.cwd ?? options.cwd) !== undefined && { cwd: request.cwd ?? options.cwd }),
|
|
87
|
+
...(options.egressProxyUrl !== undefined && { egressProxyUrl: options.egressProxyUrl }),
|
|
88
|
+
...(context.egressToken !== undefined && { egressToken: context.egressToken }),
|
|
89
|
+
// Per-step proxy env from the runtime (canonical path; takes precedence
|
|
90
|
+
// over options.egressProxyUrl).
|
|
91
|
+
...(context.proxyEnv !== undefined && { proxyEnv: context.proxyEnv }),
|
|
88
92
|
persistSession: false,
|
|
89
93
|
});
|
|
90
94
|
const onAbort = () => client.abort().catch(() => { });
|
|
@@ -125,19 +129,48 @@ export function createPiBackend(options = {}) {
|
|
|
125
129
|
};
|
|
126
130
|
}
|
|
127
131
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
132
|
+
* True iff the workflow author explicitly declared at least one non-network
|
|
133
|
+
* dimension on the step. Walks the raw `AgentPermissions` input, NOT the
|
|
134
|
+
* resolved `ResolvedPolicy` (which always has every dimension populated by
|
|
135
|
+
* intersection — so we cannot tell user intent from defaulted deny-all).
|
|
130
136
|
*/
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Fallback for callers that don't populate `BackendContext.declaredPermissions`
|
|
139
|
+
* (older test harnesses, hand-built ResolvedPolicy instances). Mirrors the
|
|
140
|
+
* pre-`declaredPermissions` heuristic: any non-default shape on a non-network
|
|
141
|
+
* dimension counts as a constraint Pi RPC cannot enforce.
|
|
142
|
+
*/
|
|
143
|
+
function resolvedPolicyHasNonNetworkConstraints(policy) {
|
|
144
|
+
const tools = policy.allowedTools;
|
|
145
|
+
if (tools !== undefined && !tools.star)
|
|
146
|
+
return true;
|
|
147
|
+
if (policy.allowedExecutables !== undefined && policy.allowedExecutables.size === 0)
|
|
148
|
+
return true;
|
|
149
|
+
if (policy.allowedMcpServers !== undefined && policy.allowedMcpServers.size === 0)
|
|
150
|
+
return true;
|
|
151
|
+
if (policy.allowedSkills !== undefined && policy.allowedSkills.size === 0)
|
|
152
|
+
return true;
|
|
153
|
+
if (policy.fsRead !== undefined && policy.fsRead.size === 0)
|
|
154
|
+
return true;
|
|
155
|
+
if (policy.fsWrite !== undefined && policy.fsWrite.size === 0)
|
|
156
|
+
return true;
|
|
157
|
+
if (policy.approval !== undefined && policy.approval !== null)
|
|
158
|
+
return true;
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
function declaresNonNetworkDimension(declared) {
|
|
162
|
+
if (declared === undefined)
|
|
163
|
+
return false;
|
|
164
|
+
return (declared.allowedTools !== undefined ||
|
|
165
|
+
declared.deniedTools !== undefined ||
|
|
166
|
+
declared.allowedExecutables !== undefined ||
|
|
167
|
+
declared.allowedMcpServers !== undefined ||
|
|
168
|
+
declared.allowedSkills !== undefined ||
|
|
169
|
+
declared.allowedSecrets !== undefined ||
|
|
170
|
+
declared.fsRead !== undefined ||
|
|
171
|
+
declared.fsWrite !== undefined ||
|
|
172
|
+
declared.approval !== undefined ||
|
|
173
|
+
declared.profile !== undefined);
|
|
141
174
|
}
|
|
142
175
|
function buildPrompt(req, skillBodies = []) {
|
|
143
176
|
const parts = [];
|
package/dist/backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,EAAE;AACF,wEAAwE;AACxE,iEAAiE;AACjE,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,2DAA2D;AAE3D,OAAO,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/factory.d.ts
CHANGED
|
@@ -26,6 +26,8 @@ export interface PiBackendConfig {
|
|
|
26
26
|
timeout?: number;
|
|
27
27
|
/** Max concurrent pi processes */
|
|
28
28
|
maxConcurrent?: number;
|
|
29
|
+
/** Egress proxy URL to inject into pi subprocess (for network egress enforcement) */
|
|
30
|
+
egressProxyUrl?: string;
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
31
33
|
* Create a pi backend from CLI configuration.
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChD,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChD,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAA;AAC9C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,GAAG;IAAE,eAAe,CAAC,EAAE,SAAS,CAAA;CAAE,GACxD,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA"}
|
package/dist/factory.js
CHANGED
|
@@ -6,6 +6,9 @@ export function createPiBackendFromConfig(config) {
|
|
|
6
6
|
if (config.commandProvider !== undefined) {
|
|
7
7
|
return Promise.resolve(config.commandProvider()).then((cmd) => createPiBackend({ ...config, command: cmd }));
|
|
8
8
|
}
|
|
9
|
-
return createPiBackend(
|
|
9
|
+
return createPiBackend({
|
|
10
|
+
...config,
|
|
11
|
+
...(config.egressProxyUrl !== undefined && { egressProxyUrl: config.egressProxyUrl }),
|
|
12
|
+
});
|
|
10
13
|
}
|
|
11
14
|
//# sourceMappingURL=factory.js.map
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAyC9C,MAAM,UAAU,yBAAyB,CACvC,MAAuB;IAEvB,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5D,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAC7C,CAAA;IACH,CAAC;IACD,OAAO,eAAe,CAAC;QACrB,GAAG,MAAM;QACT,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;KACtF,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export { createPiBackendFromConfig } from './factory.js';
|
|
|
10
10
|
export { PiProvider, createPiProvider } from './provider.js';
|
|
11
11
|
export { PiRpcClient } from './rpc-client.js';
|
|
12
12
|
export { createPiSdkBackend, derivePiToolAllowlist, PiSdkBackendError, PiSdkBackendAuthenticationError, PiSdkBackendTimeoutError, } from './sdk-backend.js';
|
|
13
|
-
export { PiSdkClient } from './sdk-client.js';
|
|
13
|
+
export { PiSdkClient, PiSdkUpstreamError } from './sdk-client.js';
|
|
14
14
|
export type { PiBackendOptions, PiSdkBackendOptions } from './types.js';
|
|
15
15
|
export type { PiBackendConfig } from './factory.js';
|
|
16
16
|
export type { PiRpcClientOptions, PiRpcResponse } from './rpc-client.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACvE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACxE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -10,5 +10,5 @@ export { createPiBackendFromConfig } from './factory.js';
|
|
|
10
10
|
export { PiProvider, createPiProvider } from './provider.js';
|
|
11
11
|
export { PiRpcClient } from './rpc-client.js';
|
|
12
12
|
export { createPiSdkBackend, derivePiToolAllowlist, PiSdkBackendError, PiSdkBackendAuthenticationError, PiSdkBackendTimeoutError, } from './sdk-backend.js';
|
|
13
|
-
export { PiSdkClient } from './sdk-client.js';
|
|
13
|
+
export { PiSdkClient, PiSdkUpstreamError } from './sdk-client.js';
|
|
14
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/rpc-client.d.ts
CHANGED
|
@@ -11,6 +11,17 @@ export interface PiRpcClientOptions {
|
|
|
11
11
|
args?: readonly string[];
|
|
12
12
|
/** Whether to persist the session (default: false — ephemeral) */
|
|
13
13
|
persistSession?: boolean;
|
|
14
|
+
/** Optional egress proxy URL to inject into subprocess environment */
|
|
15
|
+
egressProxyUrl?: string;
|
|
16
|
+
/** Optional egress token to inject into subprocess environment */
|
|
17
|
+
egressToken?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Optional pre-encoded proxy env (HTTP_PROXY/HTTPS_PROXY/SKELM_EGRESS_TOKEN)
|
|
20
|
+
* supplied by the runtime per-step. When set, overrides the legacy
|
|
21
|
+
* `egressProxyUrl`/`egressToken` fields. The HTTP_PROXY value already has
|
|
22
|
+
* the token embedded as Basic credentials.
|
|
23
|
+
*/
|
|
24
|
+
proxyEnv?: Record<string, string>;
|
|
14
25
|
}
|
|
15
26
|
export interface PiRpcResponse {
|
|
16
27
|
text: string;
|
|
@@ -41,4 +52,12 @@ export declare class PiRpcClient {
|
|
|
41
52
|
private _send;
|
|
42
53
|
private _rejectAll;
|
|
43
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Encode an egress token into the credential field of a proxy URL so that
|
|
57
|
+
* standard HTTP clients automatically send `Proxy-Authorization: Basic
|
|
58
|
+
* <base64(token:<egressToken>)>`.
|
|
59
|
+
*
|
|
60
|
+
* Exported for testing.
|
|
61
|
+
*/
|
|
62
|
+
export declare function encodeProxyUrlWithToken(proxyUrl: string, token: string | undefined): string;
|
|
44
63
|
//# sourceMappingURL=rpc-client.d.ts.map
|
package/dist/rpc-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CACtD;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAGZ;IACH,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,cAAc,CAAsD;IAC5E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;gBAEhC,OAAO,GAAE,kBAAuB;IAI5C,oFAAoF;IAC9E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkF5B,yEAAyE;IACnE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAoE1E,0CAA0C;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,gCAAgC;IAC1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,UAAU;CASnB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAU3F"}
|
package/dist/rpc-client.js
CHANGED
|
@@ -28,9 +28,26 @@ export class PiRpcClient {
|
|
|
28
28
|
args.push('--no-session');
|
|
29
29
|
if (this.options.args)
|
|
30
30
|
args.push(...this.options.args);
|
|
31
|
+
// Build environment with optional egress proxy injection
|
|
32
|
+
const env = Object.fromEntries(Object.entries(process.env).filter(([, v]) => v !== undefined));
|
|
33
|
+
// Inject proxy env. Three sources, in priority order:
|
|
34
|
+
// 1. options.proxyEnv (per-step env from BackendContext.proxyEnv when
|
|
35
|
+
// the gateway runtime provides one — this is the canonical path).
|
|
36
|
+
// 2. options.egressProxyUrl + options.egressToken — legacy
|
|
37
|
+
// construction-time fields kept for back-compat.
|
|
38
|
+
if (this.options.proxyEnv !== undefined) {
|
|
39
|
+
Object.assign(env, this.options.proxyEnv);
|
|
40
|
+
}
|
|
41
|
+
else if (this.options.egressProxyUrl !== undefined) {
|
|
42
|
+
env.HTTP_PROXY = encodeProxyUrlWithToken(this.options.egressProxyUrl, this.options.egressToken);
|
|
43
|
+
env.HTTPS_PROXY = env.HTTP_PROXY;
|
|
44
|
+
if (this.options.egressToken !== undefined) {
|
|
45
|
+
env.SKELM_EGRESS_TOKEN = this.options.egressToken;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
31
48
|
const proc = spawn(command, args, {
|
|
32
49
|
cwd: this.options.cwd ?? process.cwd(),
|
|
33
|
-
env
|
|
50
|
+
env,
|
|
34
51
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
35
52
|
});
|
|
36
53
|
this.proc = proc;
|
|
@@ -196,4 +213,24 @@ export class PiRpcClient {
|
|
|
196
213
|
this.eventListeners = [];
|
|
197
214
|
}
|
|
198
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Encode an egress token into the credential field of a proxy URL so that
|
|
218
|
+
* standard HTTP clients automatically send `Proxy-Authorization: Basic
|
|
219
|
+
* <base64(token:<egressToken>)>`.
|
|
220
|
+
*
|
|
221
|
+
* Exported for testing.
|
|
222
|
+
*/
|
|
223
|
+
export function encodeProxyUrlWithToken(proxyUrl, token) {
|
|
224
|
+
if (token === undefined || token === '')
|
|
225
|
+
return proxyUrl;
|
|
226
|
+
try {
|
|
227
|
+
const url = new URL(proxyUrl);
|
|
228
|
+
url.username = 'token';
|
|
229
|
+
url.password = token;
|
|
230
|
+
return url.toString();
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return proxyUrl;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
199
236
|
//# sourceMappingURL=rpc-client.js.map
|
package/dist/rpc-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oCAAoC;AACpC,EAAE;AACF,qCAAqC;AACrC,iFAAiF;AAEjF,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAA,CAAC,qDAAqD;AACnH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-backend.d.ts","sourceRoot":"","sources":["../src/sdk-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"sdk-backend.d.ts","sourceRoot":"","sources":["../src/sdk-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,OAAO,KAAK,EAOV,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAKrD,qBAAa,iBAAkB,SAAQ,KAAK;aAItB,KAAK,CAAC,EAAE,OAAO;IAHnC,SAAkB,IAAI,uBAAsB;gBAE1C,OAAO,EAAE,MAAM,EACG,KAAK,CAAC,EAAE,OAAO,YAAA;CAIpC;AAED,qBAAa,+BAAgC,SAAQ,iBAAiB;CAAG;AACzE,qBAAa,wBAAyB,SAAQ,iBAAiB;CAAG;AAElE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAwHlF;AAsBD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAwB9F"}
|
package/dist/sdk-backend.js
CHANGED
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
* fsWrite.size > 0 → 'write', 'edit'
|
|
17
17
|
* undefined policy → no override (pi defaults)
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
20
|
-
import { PiSdkClient } from './sdk-client.js';
|
|
19
|
+
import { assertEgressEnforceable as assertEgressEnforceableCore, createConcurrencySemaphore, loadSkillBodies, } from '@skelm/core';
|
|
20
|
+
import { PiSdkClient, PiSdkUpstreamError } from './sdk-client.js';
|
|
21
|
+
const assertEgressEnforceable = (policy) => assertEgressEnforceableCore(policy, 'pi-sdk');
|
|
21
22
|
export class PiSdkBackendError extends Error {
|
|
22
23
|
cause;
|
|
23
24
|
name = 'PiSdkBackendError';
|
|
@@ -47,28 +48,15 @@ export function createPiSdkBackend(options = {}) {
|
|
|
47
48
|
modelSelection: false,
|
|
48
49
|
toolPermissions: 'native',
|
|
49
50
|
};
|
|
50
|
-
const
|
|
51
|
-
let active = 0;
|
|
52
|
-
const queue = [];
|
|
53
|
-
const acquire = () => {
|
|
54
|
-
if (maxConcurrent === 0 || active < maxConcurrent) {
|
|
55
|
-
active++;
|
|
56
|
-
return Promise.resolve();
|
|
57
|
-
}
|
|
58
|
-
return new Promise((resolve) => queue.push(resolve));
|
|
59
|
-
};
|
|
60
|
-
const release = () => {
|
|
61
|
-
const next = queue.shift();
|
|
62
|
-
if (next)
|
|
63
|
-
next();
|
|
64
|
-
else
|
|
65
|
-
active--;
|
|
66
|
-
};
|
|
51
|
+
const { acquire, release } = createConcurrencySemaphore(options.maxConcurrent ?? 4);
|
|
67
52
|
return {
|
|
68
53
|
id: options.id ?? 'pi-sdk',
|
|
69
54
|
label: options.label ?? 'Pi Coding Agent (SDK)',
|
|
70
55
|
capabilities,
|
|
71
56
|
async infer(request, context) {
|
|
57
|
+
// Fail-closed before acquiring the concurrency slot — see comment on
|
|
58
|
+
// assertEgressEnforceable.
|
|
59
|
+
assertEgressEnforceable(context.permissions);
|
|
72
60
|
await acquire();
|
|
73
61
|
try {
|
|
74
62
|
const cwd = options.cwd;
|
|
@@ -86,7 +74,7 @@ export function createPiSdkBackend(options = {}) {
|
|
|
86
74
|
replaceSystemPrompt: false,
|
|
87
75
|
}),
|
|
88
76
|
});
|
|
89
|
-
const result = await client.prompt(promptText, context.signal, options.timeout ?? 300_000);
|
|
77
|
+
const result = await client.prompt(promptText, context.signal, options.timeout ?? 300_000, context.onPartial);
|
|
90
78
|
const response = {
|
|
91
79
|
...(result.usage !== undefined && {
|
|
92
80
|
usage: {
|
|
@@ -104,24 +92,19 @@ export function createPiSdkBackend(options = {}) {
|
|
|
104
92
|
return response;
|
|
105
93
|
}
|
|
106
94
|
catch (err) {
|
|
107
|
-
|
|
108
|
-
if (err.message.includes('ENOENT') || err.message.includes('not installed')) {
|
|
109
|
-
throw new PiSdkBackendAuthenticationError('pi SDK not available. Install it: npm install @mariozechner/pi-coding-agent', err);
|
|
110
|
-
}
|
|
111
|
-
if (err.message.includes('timed out')) {
|
|
112
|
-
throw new PiSdkBackendTimeoutError(err.message, err);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
throw new PiSdkBackendError(`pi SDK inference failed: ${err.message}`, err);
|
|
95
|
+
throw classifyPiSdkError(err, 'inference');
|
|
116
96
|
}
|
|
117
97
|
finally {
|
|
118
98
|
release();
|
|
119
99
|
}
|
|
120
100
|
},
|
|
121
101
|
async run(request, context) {
|
|
102
|
+
const policy = context.permissions ?? request.permissions;
|
|
103
|
+
// Fail-closed before acquiring the concurrency slot — see comment on
|
|
104
|
+
// assertEgressEnforceable.
|
|
105
|
+
assertEgressEnforceable(policy);
|
|
122
106
|
await acquire();
|
|
123
107
|
try {
|
|
124
|
-
const policy = context.permissions ?? request.permissions;
|
|
125
108
|
const toolAllowlist = derivePiToolAllowlist(policy);
|
|
126
109
|
const skillBodies = await loadSkillBodies(request, context);
|
|
127
110
|
const systemContent = buildSystemContent(options.systemPrompt, request, skillBodies);
|
|
@@ -139,7 +122,7 @@ export function createPiSdkBackend(options = {}) {
|
|
|
139
122
|
replaceSystemPrompt: options.systemPrompt !== undefined,
|
|
140
123
|
}),
|
|
141
124
|
});
|
|
142
|
-
const result = await client.prompt(request.prompt, context.signal, options.timeout ?? 300_000);
|
|
125
|
+
const result = await client.prompt(request.prompt, context.signal, options.timeout ?? 300_000, context.onPartial);
|
|
143
126
|
return {
|
|
144
127
|
text: result.text,
|
|
145
128
|
stopReason: result.stopReason,
|
|
@@ -152,15 +135,7 @@ export function createPiSdkBackend(options = {}) {
|
|
|
152
135
|
};
|
|
153
136
|
}
|
|
154
137
|
catch (err) {
|
|
155
|
-
|
|
156
|
-
if (err.message.includes('ENOENT') || err.message.includes('not installed')) {
|
|
157
|
-
throw new PiSdkBackendAuthenticationError('pi SDK not available. Install it: npm install @mariozechner/pi-coding-agent', err);
|
|
158
|
-
}
|
|
159
|
-
if (err.message.includes('timed out')) {
|
|
160
|
-
throw new PiSdkBackendTimeoutError(err.message, err);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
throw new PiSdkBackendError(`pi SDK agent execution failed: ${err.message}`, err);
|
|
138
|
+
throw classifyPiSdkError(err, 'agent execution');
|
|
164
139
|
}
|
|
165
140
|
finally {
|
|
166
141
|
release();
|
|
@@ -168,6 +143,22 @@ export function createPiSdkBackend(options = {}) {
|
|
|
168
143
|
},
|
|
169
144
|
};
|
|
170
145
|
}
|
|
146
|
+
function classifyPiSdkError(err, action) {
|
|
147
|
+
if (err instanceof PiSdkUpstreamError) {
|
|
148
|
+
// Already carries provider/model + upstream errorMessage; surface it as
|
|
149
|
+
// a backend-level error without obscuring the diagnostic.
|
|
150
|
+
return new PiSdkBackendError(`pi SDK ${action} failed: ${err.message}`, err);
|
|
151
|
+
}
|
|
152
|
+
if (err instanceof Error) {
|
|
153
|
+
if (err.message.includes('ENOENT') || err.message.includes('not installed')) {
|
|
154
|
+
return new PiSdkBackendAuthenticationError('pi SDK not available. Install it: npm install @mariozechner/pi-coding-agent', err);
|
|
155
|
+
}
|
|
156
|
+
if (err.message.includes('timed out')) {
|
|
157
|
+
return new PiSdkBackendTimeoutError(err.message, err);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return new PiSdkBackendError(`pi SDK ${action} failed: ${err.message}`, err);
|
|
161
|
+
}
|
|
171
162
|
/**
|
|
172
163
|
* Derive a pi tool allowlist from a skelm permission policy.
|
|
173
164
|
*
|
|
@@ -265,15 +256,4 @@ function extractJson(text) {
|
|
|
265
256
|
return null;
|
|
266
257
|
return text.slice(start, end + 1);
|
|
267
258
|
}
|
|
268
|
-
async function loadSkillBodies(req, ctx) {
|
|
269
|
-
if (!req.skills || req.skills.length === 0 || !ctx.loadSkill)
|
|
270
|
-
return [];
|
|
271
|
-
const bodies = [];
|
|
272
|
-
for (const skillId of req.skills) {
|
|
273
|
-
const skill = await ctx.loadSkill(skillId);
|
|
274
|
-
if (skill !== null)
|
|
275
|
-
bodies.push(formatSkillBlock(skill));
|
|
276
|
-
}
|
|
277
|
-
return bodies;
|
|
278
|
-
}
|
|
279
259
|
//# sourceMappingURL=sdk-backend.js.map
|
package/dist/sdk-backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-backend.js","sourceRoot":"","sources":["../src/sdk-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"sdk-backend.js","sourceRoot":"","sources":["../src/sdk-backend.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk-client.d.ts
CHANGED
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* pass resource-loader options (system prompt, skill/extension suppression)
|
|
6
6
|
* that createAgentSession does not expose directly.
|
|
7
7
|
*/
|
|
8
|
+
export interface PiSdkPromptOptions {
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
onPartial?: (delta: string) => void;
|
|
12
|
+
}
|
|
8
13
|
export interface PiSdkClientOptions {
|
|
9
14
|
/** Working directory for pi's project-local discovery. Default: process.cwd() */
|
|
10
15
|
cwd?: string;
|
|
@@ -53,10 +58,28 @@ export interface PiSdkResponse {
|
|
|
53
58
|
outputTokens: number;
|
|
54
59
|
};
|
|
55
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Thrown by `PiSdkClient.prompt` when pi terminates with a non-success
|
|
63
|
+
* stopReason ('error' or 'aborted' from the provider side). Carries the
|
|
64
|
+
* upstream `errorMessage` from pi's final assistant message so callers can
|
|
65
|
+
* surface a useful diagnostic (rate limits, 401s, network failures, …).
|
|
66
|
+
*/
|
|
67
|
+
export declare class PiSdkUpstreamError extends Error {
|
|
68
|
+
/** The stopReason pi reported on the final assistant message. */
|
|
69
|
+
readonly stopReason: 'error' | 'aborted';
|
|
70
|
+
/** The raw `errorMessage` field from pi's assistant message, if present. */
|
|
71
|
+
readonly upstreamErrorMessage?: string | undefined;
|
|
72
|
+
readonly name = "PiSdkUpstreamError";
|
|
73
|
+
constructor(message: string,
|
|
74
|
+
/** The stopReason pi reported on the final assistant message. */
|
|
75
|
+
stopReason: 'error' | 'aborted',
|
|
76
|
+
/** The raw `errorMessage` field from pi's assistant message, if present. */
|
|
77
|
+
upstreamErrorMessage?: string | undefined);
|
|
78
|
+
}
|
|
56
79
|
export declare class PiSdkClient {
|
|
57
80
|
private readonly opts;
|
|
58
81
|
constructor(opts?: PiSdkClientOptions);
|
|
59
|
-
prompt(text: string, signal?: AbortSignal, timeoutMs?: number): Promise<PiSdkResponse>;
|
|
82
|
+
prompt(text: string, signal?: AbortSignal, timeoutMs?: number, onPartial?: (delta: string) => void): Promise<PiSdkResponse>;
|
|
60
83
|
private _run;
|
|
61
84
|
}
|
|
62
85
|
//# sourceMappingURL=sdk-client.d.ts.map
|
package/dist/sdk-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-client.d.ts","sourceRoot":"","sources":["../src/sdk-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAC/D,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CACtD;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,kBAAuB;IAEpD,MAAM,
|
|
1
|
+
{"version":3,"file":"sdk-client.d.ts","sourceRoot":"","sources":["../src/sdk-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAC/D,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CACtD;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAIzC,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM;IANxC,SAAkB,IAAI,wBAAuB;gBAE3C,OAAO,EAAE,MAAM;IACf,iEAAiE;IACxD,UAAU,EAAE,OAAO,GAAG,SAAS;IACxC,4EAA4E;IACnE,oBAAoB,CAAC,EAAE,MAAM,YAAA;CAIzC;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,kBAAuB;IAEpD,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAClC,OAAO,CAAC,aAAa,CAAC;IA4CzB,OAAO,CAAC,IAAI;CAsIb"}
|
package/dist/sdk-client.js
CHANGED
|
@@ -5,12 +5,32 @@
|
|
|
5
5
|
* pass resource-loader options (system prompt, skill/extension suppression)
|
|
6
6
|
* that createAgentSession does not expose directly.
|
|
7
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* Thrown by `PiSdkClient.prompt` when pi terminates with a non-success
|
|
10
|
+
* stopReason ('error' or 'aborted' from the provider side). Carries the
|
|
11
|
+
* upstream `errorMessage` from pi's final assistant message so callers can
|
|
12
|
+
* surface a useful diagnostic (rate limits, 401s, network failures, …).
|
|
13
|
+
*/
|
|
14
|
+
export class PiSdkUpstreamError extends Error {
|
|
15
|
+
stopReason;
|
|
16
|
+
upstreamErrorMessage;
|
|
17
|
+
name = 'PiSdkUpstreamError';
|
|
18
|
+
constructor(message,
|
|
19
|
+
/** The stopReason pi reported on the final assistant message. */
|
|
20
|
+
stopReason,
|
|
21
|
+
/** The raw `errorMessage` field from pi's assistant message, if present. */
|
|
22
|
+
upstreamErrorMessage) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.stopReason = stopReason;
|
|
25
|
+
this.upstreamErrorMessage = upstreamErrorMessage;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
8
28
|
export class PiSdkClient {
|
|
9
29
|
opts;
|
|
10
30
|
constructor(opts = {}) {
|
|
11
31
|
this.opts = opts;
|
|
12
32
|
}
|
|
13
|
-
async prompt(text, signal, timeoutMs
|
|
33
|
+
async prompt(text, signal, timeoutMs, onPartial) {
|
|
14
34
|
// Dynamic import keeps @mariozechner/pi-coding-agent optional at runtime
|
|
15
35
|
const pi = await import('@mariozechner/pi-coding-agent').catch(() => {
|
|
16
36
|
throw new Error('pi SDK not installed. Add @mariozechner/pi-coding-agent to your project: npm install @mariozechner/pi-coding-agent');
|
|
@@ -38,13 +58,13 @@ export class PiSdkClient {
|
|
|
38
58
|
...(this.opts.noTools !== undefined && { noTools: this.opts.noTools }),
|
|
39
59
|
});
|
|
40
60
|
try {
|
|
41
|
-
return await this._run(session, text, signal, timeoutMs);
|
|
61
|
+
return await this._run(session, text, signal, timeoutMs ?? 300_000, onPartial);
|
|
42
62
|
}
|
|
43
63
|
finally {
|
|
44
64
|
session.dispose();
|
|
45
65
|
}
|
|
46
66
|
}
|
|
47
|
-
_run(session, text, signal, timeoutMs) {
|
|
67
|
+
_run(session, text, signal, timeoutMs, onPartial) {
|
|
48
68
|
return new Promise((resolve, reject) => {
|
|
49
69
|
let settled = false;
|
|
50
70
|
const settle = (fn) => {
|
|
@@ -73,13 +93,56 @@ export class PiSdkClient {
|
|
|
73
93
|
return;
|
|
74
94
|
}
|
|
75
95
|
signal?.addEventListener('abort', onAbort, { once: true });
|
|
96
|
+
// Track accumulated text per message for delta calculation
|
|
97
|
+
const partialTextByMsg = new Map();
|
|
76
98
|
const unsub = session.subscribe((event) => {
|
|
99
|
+
// Forward partial text deltas if onPartial is provided.
|
|
100
|
+
// pi emits 'message_update' events during streaming with updated content arrays.
|
|
101
|
+
if (onPartial !== undefined && event.type === 'message_update') {
|
|
102
|
+
const msg = event.message;
|
|
103
|
+
if (msg.role === 'assistant' && Array.isArray(msg.content)) {
|
|
104
|
+
const fullText = msg.content
|
|
105
|
+
.filter((c) => c.type === 'text')
|
|
106
|
+
.map((c) => c.text)
|
|
107
|
+
.join('');
|
|
108
|
+
const msgId = event.messageId ?? 'default';
|
|
109
|
+
const prev = partialTextByMsg.get(msgId) ?? '';
|
|
110
|
+
if (fullText.length > prev.length) {
|
|
111
|
+
onPartial(fullText.slice(prev.length));
|
|
112
|
+
partialTextByMsg.set(msgId, fullText);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
77
116
|
if (event.type === 'agent_end') {
|
|
78
117
|
unsub();
|
|
79
118
|
settle(() => {
|
|
80
119
|
const assistantMsg = [...event.messages].reverse().find((m) => m.role === 'assistant');
|
|
81
120
|
if (!assistantMsg || assistantMsg.role !== 'assistant') {
|
|
82
|
-
|
|
121
|
+
// pi terminated without producing an assistant message. This is
|
|
122
|
+
// not a successful "empty stop" — surface it as a real error so
|
|
123
|
+
// the runner can mark the step failed instead of silently
|
|
124
|
+
// recording a completed step with empty text.
|
|
125
|
+
reject(new PiSdkUpstreamError('pi agent terminated without producing an assistant message', 'error'));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// pi-coding-agent embeds upstream provider errors (rate limits,
|
|
129
|
+
// 401s, network failures, model-side aborts, …) into the final
|
|
130
|
+
// assistant message with stopReason: 'error' or 'aborted' and an
|
|
131
|
+
// optional `errorMessage` field. Without this guard the SDK would
|
|
132
|
+
// resolve `{ text: '', stopReason: 'error' }` which the runner
|
|
133
|
+
// records as `status: completed` — masquerading as success.
|
|
134
|
+
// Promote those terminal stopReasons to a thrown error.
|
|
135
|
+
if (assistantMsg.stopReason === 'error' || assistantMsg.stopReason === 'aborted') {
|
|
136
|
+
const detail = typeof assistantMsg.errorMessage === 'string'
|
|
137
|
+
? assistantMsg.errorMessage
|
|
138
|
+
: undefined;
|
|
139
|
+
const apiTag = 'provider' in assistantMsg && 'model' in assistantMsg
|
|
140
|
+
? ` (provider=${assistantMsg.provider ?? '?'}, model=${assistantMsg.model ?? '?'})`
|
|
141
|
+
: '';
|
|
142
|
+
const headline = assistantMsg.stopReason === 'aborted'
|
|
143
|
+
? `pi inference aborted${apiTag}`
|
|
144
|
+
: `pi inference failed${apiTag}`;
|
|
145
|
+
reject(new PiSdkUpstreamError(detail !== undefined && detail.length > 0 ? `${headline}: ${detail}` : headline, assistantMsg.stopReason, detail));
|
|
83
146
|
return;
|
|
84
147
|
}
|
|
85
148
|
const text = assistantMsg.content
|
package/dist/sdk-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-client.js","sourceRoot":"","sources":["../src/sdk-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"sdk-client.js","sourceRoot":"","sources":["../src/sdk-client.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -59,5 +59,11 @@ export interface PiBackendOptions {
|
|
|
59
59
|
* Excess calls are queued until a slot opens.
|
|
60
60
|
*/
|
|
61
61
|
maxConcurrent?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Optional egress proxy URL to inject into subprocess environment.
|
|
64
|
+
* When provided along with an egress token from the gateway, the pi process
|
|
65
|
+
* will route outbound connections through the proxy for network policy enforcement.
|
|
66
|
+
*/
|
|
67
|
+
egressProxyUrl?: string;
|
|
62
68
|
}
|
|
63
69
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skelm/pi",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"description": "Pi coding-agent backend for skelm with full permission enforcement",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Scott Glover <scottgl@gmail.com>",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://skelm.dev/",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/scottgl9/skelm.git",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"@mariozechner/pi-coding-agent": ">=0.73.0",
|
|
49
|
-
"@skelm/core": "^0.3.
|
|
49
|
+
"@skelm/core": "^0.3.8"
|
|
50
50
|
},
|
|
51
51
|
"peerDependenciesMeta": {
|
|
52
52
|
"@mariozechner/pi-coding-agent": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@mariozechner/pi-coding-agent": "^0.73.0",
|
|
58
|
-
"@skelm/core": "^0.3.
|
|
58
|
+
"@skelm/core": "^0.3.8",
|
|
59
59
|
"@types/node": "^20.10.0",
|
|
60
60
|
"typescript": "^5.3.0",
|
|
61
61
|
"vitest": "^1.0.0"
|