@botiverse/oar 0.0.10 → 0.1.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.
- package/README.md +2 -2
- package/dist/contracts/model-catalog.d.ts +1 -1
- package/dist/contracts/model-catalog.js +1 -1
- package/dist/contracts/provider-auth.d.ts +2 -2
- package/dist/contracts/provider-auth.js +2 -2
- package/dist/contracts/records.d.ts +205 -0
- package/dist/contracts/records.d.ts.map +1 -0
- package/dist/contracts/records.js +8 -0
- package/dist/contracts/records.js.map +1 -0
- package/dist/contracts/session.d.ts +83 -144
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/observe/agent-status.d.ts +32 -18
- package/dist/observe/agent-status.d.ts.map +1 -1
- package/dist/observe/agent-status.js +66 -14
- package/dist/observe/agent-status.js.map +1 -1
- package/dist/observe/aggregate-events.d.ts +7 -6
- package/dist/observe/aggregate-events.d.ts.map +1 -1
- package/dist/observe/aggregate-events.js +38 -28
- package/dist/observe/aggregate-events.js.map +1 -1
- package/dist/observe/index.d.ts +4 -1
- package/dist/observe/index.d.ts.map +1 -1
- package/dist/observe/index.js +3 -1
- package/dist/observe/index.js.map +1 -1
- package/dist/observe/observe-agent.d.ts +4 -4
- package/dist/observe/observe-agent.d.ts.map +1 -1
- package/dist/observe/observe-agent.js +3 -3
- package/dist/observe/observe-agent.js.map +1 -1
- package/dist/observe/stall-observer.d.ts +7 -6
- package/dist/observe/stall-observer.d.ts.map +1 -1
- package/dist/observe/stall-observer.js +6 -5
- package/dist/observe/stall-observer.js.map +1 -1
- package/dist/observe/tool-activity.d.ts +2 -2
- package/dist/observe/tool-activity.d.ts.map +1 -1
- package/dist/observe/tool-activity.js +1 -1
- package/dist/observe/tool-activity.js.map +1 -1
- package/dist/observe/turns.d.ts +37 -0
- package/dist/observe/turns.d.ts.map +1 -0
- package/dist/observe/turns.js +70 -0
- package/dist/observe/turns.js.map +1 -0
- package/dist/observe/usage.d.ts +15 -0
- package/dist/observe/usage.d.ts.map +1 -0
- package/dist/observe/usage.js +79 -0
- package/dist/observe/usage.js.map +1 -0
- package/dist/runtimes/claude/account-usage.js +1 -1
- package/dist/runtimes/claude/context-usage.d.ts +1 -1
- package/dist/runtimes/claude/context-usage.js +1 -1
- package/dist/runtimes/claude/projection.d.ts +40 -27
- package/dist/runtimes/claude/projection.d.ts.map +1 -1
- package/dist/runtimes/claude/projection.js +107 -21
- package/dist/runtimes/claude/projection.js.map +1 -1
- package/dist/runtimes/claude/session.d.ts.map +1 -1
- package/dist/runtimes/claude/session.js +119 -87
- package/dist/runtimes/claude/session.js.map +1 -1
- package/dist/runtimes/codex/app-server-client.d.ts +38 -3
- package/dist/runtimes/codex/app-server-client.d.ts.map +1 -1
- package/dist/runtimes/codex/app-server-client.js +62 -15
- package/dist/runtimes/codex/app-server-client.js.map +1 -1
- package/dist/runtimes/codex/projection.d.ts +12 -12
- package/dist/runtimes/codex/projection.d.ts.map +1 -1
- package/dist/runtimes/codex/projection.js +101 -38
- package/dist/runtimes/codex/projection.js.map +1 -1
- package/dist/runtimes/codex/rpc-control.d.ts +31 -0
- package/dist/runtimes/codex/rpc-control.d.ts.map +1 -0
- package/dist/runtimes/codex/rpc-control.js +51 -0
- package/dist/runtimes/codex/rpc-control.js.map +1 -0
- package/dist/runtimes/codex/session.d.ts.map +1 -1
- package/dist/runtimes/codex/session.js +199 -148
- package/dist/runtimes/codex/session.js.map +1 -1
- package/dist/runtimes/grok/session.d.ts +37 -1
- package/dist/runtimes/grok/session.d.ts.map +1 -1
- package/dist/runtimes/grok/session.js +74 -0
- package/dist/runtimes/grok/session.js.map +1 -1
- package/dist/runtimes/kimi/session.d.ts.map +1 -1
- package/dist/runtimes/kimi/session.js +5 -0
- package/dist/runtimes/kimi/session.js.map +1 -1
- package/dist/runtimes/pi/auth.d.ts.map +1 -1
- package/dist/runtimes/pi/auth.js +6 -1
- package/dist/runtimes/pi/auth.js.map +1 -1
- package/dist/runtimes/pi/catalog.d.ts.map +1 -1
- package/dist/runtimes/pi/catalog.js +6 -1
- package/dist/runtimes/pi/catalog.js.map +1 -1
- package/dist/runtimes/pi/http.d.ts +34 -0
- package/dist/runtimes/pi/http.d.ts.map +1 -0
- package/dist/runtimes/pi/http.js +95 -0
- package/dist/runtimes/pi/http.js.map +1 -0
- package/dist/runtimes/pi/list-models.d.ts.map +1 -1
- package/dist/runtimes/pi/list-models.js +10 -3
- package/dist/runtimes/pi/list-models.js.map +1 -1
- package/dist/runtimes/pi/open.d.ts +32 -0
- package/dist/runtimes/pi/open.d.ts.map +1 -0
- package/dist/runtimes/pi/open.js +106 -0
- package/dist/runtimes/pi/open.js.map +1 -0
- package/dist/runtimes/pi/projection.d.ts +27 -25
- package/dist/runtimes/pi/projection.d.ts.map +1 -1
- package/dist/runtimes/pi/projection.js +85 -50
- package/dist/runtimes/pi/projection.js.map +1 -1
- package/dist/runtimes/pi/session.d.ts +1 -22
- package/dist/runtimes/pi/session.d.ts.map +1 -1
- package/dist/runtimes/pi/session.js +178 -184
- package/dist/runtimes/pi/session.js.map +1 -1
- package/dist/shared/acp/client-app.d.ts +23 -0
- package/dist/shared/acp/client-app.d.ts.map +1 -0
- package/dist/shared/acp/client-app.js +55 -0
- package/dist/shared/acp/client-app.js.map +1 -0
- package/dist/shared/acp/model.d.ts +3 -17
- package/dist/shared/acp/model.d.ts.map +1 -1
- package/dist/shared/acp/model.js +3 -14
- package/dist/shared/acp/model.js.map +1 -1
- package/dist/shared/acp/profile.d.ts +32 -7
- package/dist/shared/acp/profile.d.ts.map +1 -1
- package/dist/shared/acp/profile.js +17 -8
- package/dist/shared/acp/profile.js.map +1 -1
- package/dist/shared/acp/projection.d.ts +16 -8
- package/dist/shared/acp/projection.d.ts.map +1 -1
- package/dist/shared/acp/projection.js +51 -32
- package/dist/shared/acp/projection.js.map +1 -1
- package/dist/shared/acp/records.d.ts +46 -0
- package/dist/shared/acp/records.d.ts.map +1 -0
- package/dist/shared/acp/records.js +125 -0
- package/dist/shared/acp/records.js.map +1 -0
- package/dist/shared/acp/session.d.ts.map +1 -1
- package/dist/shared/acp/session.js +98 -224
- package/dist/shared/acp/session.js.map +1 -1
- package/dist/shared/acp/terminal.d.ts +1 -3
- package/dist/shared/acp/terminal.d.ts.map +1 -1
- package/dist/shared/acp/terminal.js +1 -21
- package/dist/shared/acp/terminal.js.map +1 -1
- package/dist/shared/acp/turns.d.ts +45 -0
- package/dist/shared/acp/turns.d.ts.map +1 -0
- package/dist/shared/acp/turns.js +160 -0
- package/dist/shared/acp/turns.js.map +1 -0
- package/dist/shared/acp/usage-wait.d.ts +6 -6
- package/dist/shared/acp/usage-wait.d.ts.map +1 -1
- package/dist/shared/acp/usage-wait.js +2 -2
- package/dist/shared/acp/usage-wait.js.map +1 -1
- package/dist/shared/failure-class.d.ts +1 -1
- package/dist/shared/failure-class.js +2 -2
- package/dist/shared/failure-class.js.map +1 -1
- package/dist/shared/seal-session.d.ts +5 -3
- package/dist/shared/seal-session.d.ts.map +1 -1
- package/dist/shared/seal-session.js +24 -16
- package/dist/shared/seal-session.js.map +1 -1
- package/dist/shared/session-kernel.d.ts +68 -18
- package/dist/shared/session-kernel.d.ts.map +1 -1
- package/dist/shared/session-kernel.js +82 -42
- package/dist/shared/session-kernel.js.map +1 -1
- package/dist/voyage.d.ts +4 -7
- package/dist/voyage.d.ts.map +1 -1
- package/dist/voyage.js +14 -19
- package/dist/voyage.js.map +1 -1
- package/package.json +5 -6
- package/dist/runtimes/codex/context-usage.d.ts +0 -10
- package/dist/runtimes/codex/context-usage.d.ts.map +0 -1
- package/dist/runtimes/codex/context-usage.js +0 -16
- package/dist/runtimes/codex/context-usage.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/runtimes/kimi/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/runtimes/kimi/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAElB,kBAAkB,EAGlB,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAElB,kBAAkB,EAGlB,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAe,YAAY,EAAmB,MAAM,iCAAiC,CAAC;AAS7F,KAAK,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3D,KAAK,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAK,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,KAAK,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB,CAsBnE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CAiBvE;AAwFD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,yEAAyE;AACzE,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW3G"}
|
package/dist/runtimes/pi/auth.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ModelRuntime } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import { getAgentDir, ModelRuntime, SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { configurePiHttp } from "./http.js";
|
|
2
3
|
export function toLoginEvent(event) {
|
|
3
4
|
switch (event.type) {
|
|
4
5
|
case "auth_url":
|
|
@@ -114,6 +115,10 @@ class PiProviderAuth {
|
|
|
114
115
|
}
|
|
115
116
|
/** Create a {@link ProviderAuthFacade} backed by Pi's `ModelRuntime`. */
|
|
116
117
|
export async function createPiProviderAuth(options = {}) {
|
|
118
|
+
// OAuth login/refresh goes over the network: the proxy plane first, from
|
|
119
|
+
// the same settings (OAR_PI_AGENT_DIR ?? pi's agent dir) every pi entry
|
|
120
|
+
// point of the adapter reads, so login behaves like a session (see http.ts).
|
|
121
|
+
await configurePiHttp(SettingsManager.create(process.cwd(), process.env.OAR_PI_AGENT_DIR ?? getAgentDir()));
|
|
117
122
|
const runtime = await ModelRuntime.create({
|
|
118
123
|
...(options.authPath === undefined ? {} : { authPath: options.authPath }),
|
|
119
124
|
allowModelNetwork: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/runtimes/pi/auth.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/runtimes/pi/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,kBAAkB,EACnB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,kBAAkB,EACnB,MAAM,kCAAkC,CAAC;AAoE1C,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,0EAA0E;AAC1E,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW3G"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ModelRegistry, ModelRuntime, resolveCliModel } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import { getAgentDir, ModelRegistry, ModelRuntime, resolveCliModel, SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { configurePiHttp } from "./http.js";
|
|
2
3
|
function toCatalogModel(model) {
|
|
3
4
|
return {
|
|
4
5
|
id: model.id,
|
|
@@ -56,6 +57,10 @@ class PiModelCatalog {
|
|
|
56
57
|
}
|
|
57
58
|
/** Create a {@link ModelCatalogFacade} backed by Pi's `ModelRegistry`. */
|
|
58
59
|
export async function createPiModelCatalog(options = {}) {
|
|
60
|
+
// refresh() fetches provider catalogs: the proxy plane first, from the
|
|
61
|
+
// same settings (OAR_PI_AGENT_DIR ?? pi's agent dir) every pi entry point
|
|
62
|
+
// of the adapter reads, so the catalog behaves like a session (see http.ts).
|
|
63
|
+
await configurePiHttp(SettingsManager.create(process.cwd(), process.env.OAR_PI_AGENT_DIR ?? getAgentDir()));
|
|
59
64
|
const runtime = await ModelRuntime.create({
|
|
60
65
|
...(options.authPath === undefined ? {} : { authPath: options.authPath }),
|
|
61
66
|
...(options.modelsPath === undefined ? {} : { modelsPath: options.modelsPath }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/runtimes/pi/catalog.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/runtimes/pi/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** The slice of pi's SettingsManager the plane reads; structural for tests. */
|
|
2
|
+
export interface PiHttpSettings {
|
|
3
|
+
getGlobalSettings(): {
|
|
4
|
+
readonly httpProxy?: string;
|
|
5
|
+
};
|
|
6
|
+
getHttpIdleTimeoutMs(): number;
|
|
7
|
+
}
|
|
8
|
+
/** The proxy variables undici reads, in its own precedence (lowercase first). */
|
|
9
|
+
export type PiProxyEnv = Readonly<Partial<Record<"http_proxy" | "HTTP_PROXY" | "https_proxy" | "HTTPS_PROXY", string>>>;
|
|
10
|
+
/** What the dispatcher is built from; `undefined` leaves undici's own reading/default in place. */
|
|
11
|
+
export interface PiHttpPlan {
|
|
12
|
+
readonly httpProxy: string | undefined;
|
|
13
|
+
readonly httpsProxy: string | undefined;
|
|
14
|
+
readonly idleTimeoutMs: number | undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* pi's precedence (main.js `applyHttpProxySettings`: `process.env.HTTP_PROXY
|
|
18
|
+
* ??= setting`): an env proxy wins, the settings' `httpProxy` fills BOTH
|
|
19
|
+
* http and https when the env names none. Pure, and the env is not written.
|
|
20
|
+
*/
|
|
21
|
+
export declare function planPiHttp(settings?: PiHttpSettings, env?: PiProxyEnv): PiHttpPlan;
|
|
22
|
+
/** Whether the plan changes anything over Node's default dispatcher. */
|
|
23
|
+
export declare function planNeedsDispatcher(plan: PiHttpPlan): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Install the proxy plane before the first provider request: undici's
|
|
26
|
+
* global dispatcher becomes an `EnvHttpProxyAgent` built from the plan.
|
|
27
|
+
* Nothing is installed when the plan changes nothing over Node's default
|
|
28
|
+
* (no proxy, default timeout): the host keeps its stock dispatcher. Repeated
|
|
29
|
+
* calls with the same plan are no-ops; a dispatcher this module did not
|
|
30
|
+
* install (the host's own) is never replaced; a one-time warning says so.
|
|
31
|
+
* True when the plane is in place, false otherwise.
|
|
32
|
+
*/
|
|
33
|
+
export declare function configurePiHttp(settings?: PiHttpSettings): Promise<boolean>;
|
|
34
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/http.ts"],"names":[],"mappings":"AA+BA,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,iBAAiB,IAAI;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,oBAAoB,IAAI,MAAM,CAAC;CAChC;AAED,iFAAiF;AACjF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAExH,mGAAmG;AACnG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAOD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,GAAG,GAAE,UAAwB,GAAG,UAAU,CAO/F;AAiBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAG7D;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCjF"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
function settingProxy(settings) {
|
|
2
|
+
const proxy = settings?.getGlobalSettings().httpProxy?.trim();
|
|
3
|
+
return proxy === undefined || proxy.length === 0 ? undefined : proxy;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* pi's precedence (main.js `applyHttpProxySettings`: `process.env.HTTP_PROXY
|
|
7
|
+
* ??= setting`): an env proxy wins, the settings' `httpProxy` fills BOTH
|
|
8
|
+
* http and https when the env names none. Pure, and the env is not written.
|
|
9
|
+
*/
|
|
10
|
+
export function planPiHttp(settings, env = process.env) {
|
|
11
|
+
const fallback = settingProxy(settings);
|
|
12
|
+
return {
|
|
13
|
+
httpProxy: env.http_proxy ?? env.HTTP_PROXY ?? fallback,
|
|
14
|
+
httpsProxy: env.https_proxy ?? env.HTTPS_PROXY ?? fallback,
|
|
15
|
+
idleTimeoutMs: settings?.getHttpIdleTimeoutMs(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** undici's own default when nothing is configured; pi's getHttpIdleTimeoutMs() default is the same. */
|
|
19
|
+
const UNDICI_DEFAULT_TIMEOUT_MS = 300_000;
|
|
20
|
+
let loading = null;
|
|
21
|
+
let warned = false;
|
|
22
|
+
/** What this module installed, so repeated calls with the same plan are no-ops and another owner's dispatcher is never replaced. */
|
|
23
|
+
let installed = null;
|
|
24
|
+
/** Whether the plan changes anything over Node's default dispatcher. */
|
|
25
|
+
export function planNeedsDispatcher(plan) {
|
|
26
|
+
return plan.httpProxy !== undefined || plan.httpsProxy !== undefined
|
|
27
|
+
|| (plan.idleTimeoutMs !== undefined && plan.idleTimeoutMs !== UNDICI_DEFAULT_TIMEOUT_MS);
|
|
28
|
+
}
|
|
29
|
+
/** Warn once per process; the session then runs on Node's default dispatcher, as before the plane existed. */
|
|
30
|
+
function warnOnce(error) {
|
|
31
|
+
if (warned) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
warned = true;
|
|
35
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
36
|
+
process.emitWarning(`pi proxy plane not installed (${detail}): provider requests use Node's default dispatcher, which ignores HTTP_PROXY/HTTPS_PROXY`, { code: "OAR_PI_PROXY_PLANE" });
|
|
37
|
+
}
|
|
38
|
+
/** undici, loaded lazily; a failed load is not cached, so a transient failure is retried on the next call. */
|
|
39
|
+
async function loadUndici() {
|
|
40
|
+
const attempt = loading ?? import("undici");
|
|
41
|
+
loading = attempt;
|
|
42
|
+
try {
|
|
43
|
+
return await attempt;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (loading === attempt) {
|
|
47
|
+
loading = null;
|
|
48
|
+
}
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Install the proxy plane before the first provider request: undici's
|
|
54
|
+
* global dispatcher becomes an `EnvHttpProxyAgent` built from the plan.
|
|
55
|
+
* Nothing is installed when the plan changes nothing over Node's default
|
|
56
|
+
* (no proxy, default timeout): the host keeps its stock dispatcher. Repeated
|
|
57
|
+
* calls with the same plan are no-ops; a dispatcher this module did not
|
|
58
|
+
* install (the host's own) is never replaced; a one-time warning says so.
|
|
59
|
+
* True when the plane is in place, false otherwise.
|
|
60
|
+
*/
|
|
61
|
+
export async function configurePiHttp(settings) {
|
|
62
|
+
try {
|
|
63
|
+
const plan = planPiHttp(settings);
|
|
64
|
+
if (!planNeedsDispatcher(plan)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
const undici = await loadUndici();
|
|
68
|
+
const key = JSON.stringify(plan);
|
|
69
|
+
const current = undici.getGlobalDispatcher();
|
|
70
|
+
if (installed !== null && installed.plan === key && current === installed.dispatcher) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
// Node's default dispatcher is its BUNDLED undici's Agent, a different
|
|
74
|
+
// class object from the npm undici this module loads, so "stock" is
|
|
75
|
+
// judged by name; anything else that is not ours belongs to the host.
|
|
76
|
+
const foreign = current.constructor.name !== "Agent" && current !== installed?.dispatcher;
|
|
77
|
+
if (foreign) {
|
|
78
|
+
warnOnce(new Error("the host already set a global dispatcher"));
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const dispatcher = new undici.EnvHttpProxyAgent({
|
|
82
|
+
...(plan.httpProxy === undefined ? {} : { httpProxy: plan.httpProxy }),
|
|
83
|
+
...(plan.httpsProxy === undefined ? {} : { httpsProxy: plan.httpsProxy }),
|
|
84
|
+
...(plan.idleTimeoutMs === undefined ? {} : { headersTimeout: plan.idleTimeoutMs, bodyTimeout: plan.idleTimeoutMs }),
|
|
85
|
+
});
|
|
86
|
+
undici.setGlobalDispatcher(dispatcher);
|
|
87
|
+
installed = { plan: key, dispatcher };
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
warnOnce(error);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/runtimes/pi/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-models.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/list-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG9E,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,CACV,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC1C,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,UAAU,EAAE,CAK9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,GACpE,WAAW,CAeb;AAED,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"list-models.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/list-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG9E,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,CACV,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC1C,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,UAAU,EAAE,CAK9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,GACpE,WAAW,CAeb;AAED,eAAO,MAAM,YAAY,EAAE,WAqBzB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { configurePiHttp } from "./http.js";
|
|
2
2
|
/**
|
|
3
3
|
* Pi model ids are only unique per provider, so the session-facing id is
|
|
4
4
|
* `provider/model`, the same spelling Pi's own `--model` flag accepts.
|
|
@@ -49,10 +49,17 @@ export function createPiListModels(createRuntime) {
|
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
export const piListModels = createPiListModels(async (signal) => {
|
|
52
|
-
const
|
|
52
|
+
const { createAgentSessionServices, getAgentDir, SettingsManager } = await import("@earendil-works/pi-coding-agent");
|
|
53
|
+
const agentDir = process.env.OAR_PI_AGENT_DIR ?? getAgentDir();
|
|
54
|
+
// getAvailable() can refresh OAuth tokens over the network: the proxy
|
|
55
|
+
// plane first, from the same settings manager the services get (see
|
|
56
|
+
// http.ts).
|
|
57
|
+
const settingsManager = SettingsManager.create(process.cwd(), agentDir);
|
|
58
|
+
await configurePiHttp(settingsManager);
|
|
53
59
|
const services = await createAgentSessionServices({
|
|
54
60
|
cwd: process.cwd(),
|
|
55
|
-
|
|
61
|
+
agentDir,
|
|
62
|
+
settingsManager,
|
|
56
63
|
modelRuntimeSignal: signal,
|
|
57
64
|
resourceLoaderOptions: {
|
|
58
65
|
noSkills: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-models.js","sourceRoot":"","sources":["../../../src/runtimes/pi/list-models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-models.js","sourceRoot":"","sources":["../../../src/runtimes/pi/list-models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAsB5C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAgC;IAC9D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE;QACnC,WAAW,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;KACvG,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,kBAAkB,CAChC,aAAqE;IAErE,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;QAC1C,IAAI,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,2CAA2C,MAAM,EAAE,EAAE,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IAC3E,MAAM,EAAE,0BAA0B,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IACrH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,WAAW,EAAE,CAAC;IAC/D,sEAAsE;IACtE,oEAAoE;IACpE,YAAY;IACZ,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,eAAe,CAAC,eAAe,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;QAChD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ;QACR,eAAe;QACf,kBAAkB,EAAE,MAAM;QAC1B,qBAAqB,EAAE;YACrB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,IAAI;YACvB,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,IAAI;SACrB;KACF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC/B,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AgentSession as PiAgentSession, CreateAgentSessionOptions } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { SessionOptions } from "../../contracts/session.js";
|
|
3
|
+
/**
|
|
4
|
+
* The bash tool that carries SessionOptions.env into the agent's spawned
|
|
5
|
+
* processes: same builtin bash, plus a spawnHook overlaying the env. pi's
|
|
6
|
+
* defineTool keeps the definition assignable to customTools, where it
|
|
7
|
+
* replaces the builtin by name. Exported for direct unit verification.
|
|
8
|
+
*/
|
|
9
|
+
export declare function piEnvBashTool(cwd: string, overlay: Readonly<Record<string, string>>): Promise<NonNullable<CreateAgentSessionOptions["customTools"]>[number]>;
|
|
10
|
+
/** The slice of pi's AgentSession the model read-back depends on; structural for tests. */
|
|
11
|
+
export interface PiModelSource {
|
|
12
|
+
readonly model: {
|
|
13
|
+
readonly provider: string;
|
|
14
|
+
readonly id: string;
|
|
15
|
+
} | undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* pi's `AgentSession.model` (SDK 0.84.2 agent-session.d.ts: "Current model
|
|
19
|
+
* (may be undefined if not yet selected)") is the runtime-owned current
|
|
20
|
+
* model, updated by setModel/model switching; spelled `provider/id` like the
|
|
21
|
+
* list-models projection and pi's own `--model` flag.
|
|
22
|
+
*/
|
|
23
|
+
export declare function piEffectiveModel(session: PiModelSource): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* Opens (or resumes) the pi AgentSession the adapter wraps. Services first
|
|
26
|
+
* (createAgentSessionServices loads the agent dir's extensions and their
|
|
27
|
+
* provider registrations into the ModelRuntime, exactly as `pi` itself does),
|
|
28
|
+
* then the session against an explicit SessionManager so resume and creation
|
|
29
|
+
* share one session directory.
|
|
30
|
+
*/
|
|
31
|
+
export declare function openPiAgentSession(options: SessionOptions): Promise<PiAgentSession>;
|
|
32
|
+
//# sourceMappingURL=open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/open.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAUjE;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAKxE;AAED,2FAA2F;AAC3F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAChF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAuEzF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { configurePiHttp } from "./http.js";
|
|
2
|
+
import { piFindSessionFile, piResolveModel, piSessionDir } from "./resolve.js";
|
|
3
|
+
/*
|
|
4
|
+
* Opening the bundled pi SDK session: services, session file (create or
|
|
5
|
+
* resume by id), model resolution and read-back. The record-stream mapping
|
|
6
|
+
* lives in session.ts; this file is the SDK-facing setup it wraps.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The bash tool that carries SessionOptions.env into the agent's spawned
|
|
10
|
+
* processes: same builtin bash, plus a spawnHook overlaying the env. pi's
|
|
11
|
+
* defineTool keeps the definition assignable to customTools, where it
|
|
12
|
+
* replaces the builtin by name. Exported for direct unit verification.
|
|
13
|
+
*/
|
|
14
|
+
export async function piEnvBashTool(cwd, overlay) {
|
|
15
|
+
const sdk = await import("@earendil-works/pi-coding-agent");
|
|
16
|
+
return sdk.defineTool(sdk.createBashToolDefinition(cwd, {
|
|
17
|
+
spawnHook: (context) => ({ ...context, env: { ...context.env, ...overlay } }),
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* pi's `AgentSession.model` (SDK 0.84.2 agent-session.d.ts: "Current model
|
|
22
|
+
* (may be undefined if not yet selected)") is the runtime-owned current
|
|
23
|
+
* model, updated by setModel/model switching; spelled `provider/id` like the
|
|
24
|
+
* list-models projection and pi's own `--model` flag.
|
|
25
|
+
*/
|
|
26
|
+
export function piEffectiveModel(session) {
|
|
27
|
+
const { model } = session;
|
|
28
|
+
return model === undefined ? null : `${model.provider}/${model.id}`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Opens (or resumes) the pi AgentSession the adapter wraps. Services first
|
|
32
|
+
* (createAgentSessionServices loads the agent dir's extensions and their
|
|
33
|
+
* provider registrations into the ModelRuntime, exactly as `pi` itself does),
|
|
34
|
+
* then the session against an explicit SessionManager so resume and creation
|
|
35
|
+
* share one session directory.
|
|
36
|
+
*/
|
|
37
|
+
export async function openPiAgentSession(options) {
|
|
38
|
+
const sdk = await import("@earendil-works/pi-coding-agent");
|
|
39
|
+
// OAR_PI_AGENT_DIR pins pi's global config home (models.json/auth.json/
|
|
40
|
+
// settings/sessions); same namespaced-env-pin pattern as OAR_CLAUDE_BIN.
|
|
41
|
+
// This is how a host (or the pi-aimock behavior backend) points the
|
|
42
|
+
// in-process model plane somewhere else.
|
|
43
|
+
const agentDir = process.env.OAR_PI_AGENT_DIR ?? sdk.getAgentDir();
|
|
44
|
+
// YOLO by default (repo policy): pi gates tool execution on project trust,
|
|
45
|
+
// which is an approval prompt no embedded host can answer; pre-trust the
|
|
46
|
+
// session cwd the same way pi's own Trust button would (auditable in
|
|
47
|
+
// <agentDir>/trust.json).
|
|
48
|
+
new sdk.ProjectTrustStore(agentDir).set(options.cwd, true);
|
|
49
|
+
// The proxy plane before anything can reach a provider, from the same
|
|
50
|
+
// settings manager the services get, so no second one is built (see
|
|
51
|
+
// http.ts).
|
|
52
|
+
const settingsManager = sdk.SettingsManager.create(options.cwd, agentDir);
|
|
53
|
+
await configurePiHttp(settingsManager);
|
|
54
|
+
const services = await sdk.createAgentSessionServices({
|
|
55
|
+
cwd: options.cwd,
|
|
56
|
+
agentDir,
|
|
57
|
+
settingsManager,
|
|
58
|
+
// System prompt seams: pi's DefaultResourceLoader natively supports both
|
|
59
|
+
// replace (systemPrompt) and append (appendSystemPrompt). Replace swaps
|
|
60
|
+
// pi's base prompt text only: pi's buildSystemPrompt (SDK 0.84.2
|
|
61
|
+
// core/system-prompt.js) still puts its runtime-native additions AROUND
|
|
62
|
+
// the replaced prompt: the append seam, then the project context files
|
|
63
|
+
// (AGENTS.md), then the skills catalog of the agent dir and the host's
|
|
64
|
+
// ~/.agents/skills, then the `Current working directory:` line. Those
|
|
65
|
+
// are the runtime's, like codex's skills catalog around
|
|
66
|
+
// baseInstructions; `noSkills` would drop every skill (project ones
|
|
67
|
+
// included), which is more than a prompt replacement, so it is not set.
|
|
68
|
+
resourceLoaderOptions: {
|
|
69
|
+
...(options.systemPrompt === undefined ? {} : { systemPrompt: options.systemPrompt }),
|
|
70
|
+
...(options.appendSystemPrompt === undefined ? {} : { appendSystemPrompt: [options.appendSystemPrompt] }),
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
// pi persists sessions per cwd under <agentDir>/sessions; the same
|
|
74
|
+
// directory is used to create (so a later resume finds the file) and to
|
|
75
|
+
// look a resumed id up.
|
|
76
|
+
const sessionDir = piSessionDir(options.cwd, agentDir);
|
|
77
|
+
const sessionManager = options.resume === undefined
|
|
78
|
+
? sdk.SessionManager.create(options.cwd, sessionDir)
|
|
79
|
+
: sdk.SessionManager.open(await piFindSessionFile(sdk.SessionManager, options.resume, options.cwd, sessionDir), sessionDir);
|
|
80
|
+
// An explicit model wins over the one recorded in a resumed session
|
|
81
|
+
// (sdk.js createAgentSession precedence, same in the services path); the
|
|
82
|
+
// recorded one is restored only when none is given.
|
|
83
|
+
const model = options.model === undefined ? undefined : piResolveModel(services.modelRuntime, options.model);
|
|
84
|
+
// Per-session env on an in-process runtime: the runtime itself has no own
|
|
85
|
+
// process, but the processes the AGENT spawns do: a bash tool built with a
|
|
86
|
+
// spawnHook overlaying the env replaces the builtin by name (custom tools
|
|
87
|
+
// win the SDK's tool registry). Provider config (keys, base URLs) does NOT
|
|
88
|
+
// travel this way for pi; that needs its native modelRuntime/agentDir
|
|
89
|
+
// channel.
|
|
90
|
+
const overlay = options.env;
|
|
91
|
+
const { session } = await sdk.createAgentSessionFromServices({
|
|
92
|
+
services,
|
|
93
|
+
sessionManager,
|
|
94
|
+
...(model === undefined ? {} : { model }),
|
|
95
|
+
...(overlay === undefined ? {} : { customTools: [await piEnvBashTool(options.cwd, overlay)] }),
|
|
96
|
+
});
|
|
97
|
+
// Read back rather than trust the request: the model record is the
|
|
98
|
+
// runtime's report, and a resume that kept the old model must not pass.
|
|
99
|
+
const effective = piEffectiveModel(session);
|
|
100
|
+
if (options.model !== undefined && effective !== options.model) {
|
|
101
|
+
session.dispose();
|
|
102
|
+
throw new Error(`pi did not apply model ${options.model}: the session reports ${effective ?? "no model"}`);
|
|
103
|
+
}
|
|
104
|
+
return session;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../../src/runtimes/pi/open.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +1,40 @@
|
|
|
1
1
|
import type { AgentSessionEvent } from "@earendil-works/pi-coding-agent";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ContextUsage, EventBody, TokenTotals, TurnOutcome } from "../../contracts/session.js";
|
|
3
3
|
/**
|
|
4
|
-
* The pi SDK-event →
|
|
5
|
-
* runtimes/claude/projection.ts).
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
4
|
+
* The pi SDK-event → record projection as a PURE FOLD (see
|
|
5
|
+
* runtimes/claude/projection.ts). Every SDK event becomes exactly ONE event
|
|
6
|
+
* command: the event object verbatim as `native`, `type` = its SDK type, and
|
|
7
|
+
* the views oar read out of it. Nothing is gated on turn state and nothing
|
|
8
|
+
* is dropped; the session-scoped events (compaction, queue, retry, …)
|
|
9
|
+
* enter the stream with no views, inside the turn they belong to. pi has no native turn id (no spanId) and no native sub-agents
|
|
10
|
+
* (agentPath is always root).
|
|
11
|
+
*
|
|
12
|
+
* `abortRequested` / `providerError` are control-plane and error inputs the
|
|
13
|
+
* provider stream alone does not carry; `tokens` is the running per-session
|
|
14
|
+
* total so usage views are cumulative, as the contract requires.
|
|
11
15
|
*/
|
|
12
|
-
export
|
|
13
|
-
readonly kind: "
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
readonly body: SessionEventBody;
|
|
17
|
-
} | {
|
|
18
|
-
readonly kind: "settle";
|
|
19
|
-
readonly outcome: TurnOutcome;
|
|
20
|
-
};
|
|
16
|
+
export interface ProjectionCommand {
|
|
17
|
+
readonly kind: "event";
|
|
18
|
+
readonly body: EventBody;
|
|
19
|
+
}
|
|
21
20
|
export interface PiProjectionState {
|
|
22
|
-
readonly inTurn: boolean;
|
|
23
|
-
readonly adopted: boolean;
|
|
24
21
|
readonly abortRequested: boolean;
|
|
25
22
|
readonly reasoningHadText: boolean;
|
|
26
23
|
readonly providerError: string | undefined;
|
|
24
|
+
readonly tokens: TokenTotals;
|
|
27
25
|
}
|
|
28
26
|
export declare const initialPiProjection: PiProjectionState;
|
|
29
|
-
/** Control plane → state: a prompt
|
|
30
|
-
export declare function piPrompted(): PiProjectionState;
|
|
27
|
+
/** Control plane → state: a prompt (or a drained queue input) resets the per-run accumulators; the running token total stays. */
|
|
28
|
+
export declare function piPrompted(state: PiProjectionState): PiProjectionState;
|
|
31
29
|
export declare function piAbortRequested(state: PiProjectionState): PiProjectionState;
|
|
32
|
-
/** The outcome
|
|
33
|
-
export declare function
|
|
34
|
-
/**
|
|
35
|
-
export
|
|
30
|
+
/** The outcome of the run pi's own `agent_settled` closes, read through the control intent and provider errors folded so far. */
|
|
31
|
+
export declare function piRunOutcome(state: PiProjectionState): TurnOutcome;
|
|
32
|
+
/** Extra inputs the adapter supplies alongside an SDK event: pi's authoritative context fullness, read at `agent_settled`. */
|
|
33
|
+
export interface PiFoldExtra {
|
|
34
|
+
readonly context?: ContextUsage | null;
|
|
35
|
+
}
|
|
36
|
+
/** Fold one pi SDK event into the next state plus the one event command it produces. */
|
|
37
|
+
export declare function foldPiEvent(state: PiProjectionState, event: AgentSessionEvent, extra?: PiFoldExtra): {
|
|
36
38
|
readonly state: PiProjectionState;
|
|
37
39
|
readonly commands: readonly ProjectionCommand[];
|
|
38
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EAET,WAAW,EACX,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAIpC;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,eAAO,MAAM,mBAAmB,EAAE,iBAKjC,CAAC;AAEF,iIAAiI;AACjI,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAE5E;AAED,iIAAiI;AACjI,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAQlE;AAED,8HAA8H;AAC9H,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CACxC;AA8HD,wFAAwF;AACxF,wBAAgB,WAAW,CACzB,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,iBAAiB,EACxB,KAAK,GAAE,WAAgB,GACtB;IAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,CAMxF"}
|