@botiverse/oar 0.69.0 → 0.71.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 +9 -5
- package/dist/runtimes/cursor/auth-status.js +1 -1
- package/dist/runtimes/cursor/index.d.ts +1 -1
- package/dist/runtimes/cursor/login.js +1 -1
- package/dist/runtimes/cursor/logout.js +1 -1
- package/dist/runtimes/pi-durable/index.d.ts +3 -3
- package/dist/runtimes/pi-durable/index.d.ts.map +1 -1
- package/dist/runtimes/pi-durable/index.js +4 -3
- package/dist/runtimes/pi-durable/index.js.map +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -128,7 +128,7 @@ The package has these public entry points, plus `@botiverse/oar/pi-durable` ([be
|
|
|
128
128
|
|
|
129
129
|
Brand SVG files are exported at `@botiverse/oar/assets/brands/<runtime-id>.svg`. Any other deep import (`@botiverse/oar/dist/...`, source paths) is internal and may break without notice.
|
|
130
130
|
|
|
131
|
-
Antigravity, Grok, Kimi, and OpenCode share an internal ACP v1 transport and session kernel, but only their concrete runtime identities are public. The registry deliberately does not expose a generic `acp` runtime. Pi and Cursor run in the host process through their SDKs. The pi SDK (`@earendil-works/pi-coding-agent`) is a dependency of this package. `@cursor/sdk` is an optional peer dependency, and cursor is not in `defaultRuntimes`: install the SDK (`npm install @cursor/sdk@1.0.
|
|
131
|
+
Antigravity, Grok, Kimi, and OpenCode share an internal ACP v1 transport and session kernel, but only their concrete runtime identities are public. The registry deliberately does not expose a generic `acp` runtime. Pi and Cursor run in the host process through their SDKs. The pi SDK (`@earendil-works/pi-coding-agent`) is a dependency of this package. `@cursor/sdk` is an optional peer dependency, and cursor is not in `defaultRuntimes`: install the SDK (`npm install @cursor/sdk@1.0.40`) and hand it over, `createRuntimeRegistry([...defaultRuntimes.list(), createCursorRuntime({ sdk: () => import("@cursor/sdk") })])`. Written in your code, that import fails your compile if the package is missing. It is Cursor's own package under Cursor's terms, and it signs in with `CURSOR_API_KEY` or its own `Cursor.auth.login()`.
|
|
132
132
|
|
|
133
133
|
Community runtimes are contributed and maintained outside the core team (each maintainer is named on its runtime page). They ship in this package from a separate entry point, `@botiverse/oar/community`, and are not in `defaultRuntimes`: `createRuntimeRegistry([...defaultRuntimes.list(), createMorphRuntime()])` adds [Mister Morph](https://github.com/botiverse/oar/blob/main/docs/runtimes/morph.md), driven through its Console Runtime API. The `oar` CLI includes them.
|
|
134
134
|
|
|
@@ -137,7 +137,7 @@ Community runtimes are contributed and maintained outside the core team (each ma
|
|
|
137
137
|
configuration and `SessionOptions.model`. When resuming an old Azure session,
|
|
138
138
|
explicitly pass `model: "azure/<model>"`; without it, Pi can retain the
|
|
139
139
|
conversation while selecting a different default model. The opening `model`
|
|
140
|
-
event and `Session.model()` report the effective selection. OAR's `^1.
|
|
140
|
+
event and `Session.model()` report the effective selection. OAR's `^1.4.0`
|
|
141
141
|
dependency range includes this upstream update. See the
|
|
142
142
|
[migration evidence and limits](https://github.com/botiverse/oar/blob/main/experiments/runtime-version-checks/2026-10-05.md).
|
|
143
143
|
|
|
@@ -343,7 +343,11 @@ TypeScript hosts: keep `skipLibCheck` on. With `skipLibCheck: false` and `module
|
|
|
343
343
|
|
|
344
344
|
## Host-owned durable sessions
|
|
345
345
|
|
|
346
|
-
Install the optional native peers in the host: `npm install @earendil-works/pi-durable@~1.
|
|
346
|
+
Install the optional native peers in the host: `npm install @earendil-works/pi-durable@~1.4.0 @earendil-works/chord@~1.4.0`.
|
|
347
|
+
Upgrade both together. Native 1.4.0 migrates SQLite storage to schema 2,
|
|
348
|
+
which cannot be reopened by 1.3.0 or earlier; see the
|
|
349
|
+
[host upgrade notes](https://github.com/botiverse/oar/blob/main/docs/runtimes/pi-durable.md#native-objects-and-calling-interface)
|
|
350
|
+
for storage and extension API changes.
|
|
347
351
|
The factory lives only in `@botiverse/oar/pi-durable`, usable in Node and browsers.
|
|
348
352
|
The root and browser core entries load without these peers.
|
|
349
353
|
|
|
@@ -351,7 +355,7 @@ The root and browser core entries load without these peers.
|
|
|
351
355
|
import { viewOf } from "@botiverse/oar/browser";
|
|
352
356
|
import { createPiDurableRuntime } from "@botiverse/oar/pi-durable";
|
|
353
357
|
|
|
354
|
-
// Use the same Models instance
|
|
358
|
+
// Use the same Models instance or () => Models supplier passed to Harness.open.
|
|
355
359
|
const runtime = createPiDurableRuntime({ harness, models });
|
|
356
360
|
const session = await runtime.session({ kind: "available", via: "bundled" }, {
|
|
357
361
|
cwd: "/workspace", model: "provider/model",
|
|
@@ -360,7 +364,7 @@ session.rawEvents(() => render(viewOf(session.records())));
|
|
|
360
364
|
await session.prompt("Hello", { inputId: crypto.randomUUID() });
|
|
361
365
|
```
|
|
362
366
|
|
|
363
|
-
The host owns its Pi Durable 1.
|
|
367
|
+
The host owns its Pi Durable 1.4.0 Harness, providers, credentials, extensions
|
|
364
368
|
and storage. `resume: session.id` attaches to that storage's conversation and
|
|
365
369
|
resumes unfinished work. Queue and input-id deduplication are native and
|
|
366
370
|
durable. `dispose()` detaches the observer; it does not stop work or close the
|
|
@@ -61,7 +61,7 @@ export function cursorAuthStatusWith(load) {
|
|
|
61
61
|
}
|
|
62
62
|
const { auth } = sdk.Cursor;
|
|
63
63
|
if (auth === undefined) {
|
|
64
|
-
return { kind: "unknown", detail: "this @cursor/sdk has no Cursor.auth; OAR needs 1.0.
|
|
64
|
+
return { kind: "unknown", detail: "this @cursor/sdk has no Cursor.auth; OAR needs 1.0.40" };
|
|
65
65
|
}
|
|
66
66
|
const status = await readCursorAuthStatus(auth, options.timeoutMs);
|
|
67
67
|
return status;
|
|
@@ -2,7 +2,7 @@ import { type Runtime } from "../../contracts/runtime.js";
|
|
|
2
2
|
import { type CursorSdk } from "./sdk.js";
|
|
3
3
|
export interface CursorRuntimeOptions {
|
|
4
4
|
/**
|
|
5
|
-
* Loads `@cursor/sdk` 1.0.
|
|
5
|
+
* Loads `@cursor/sdk` 1.0.40, which the host installs (an optional peer
|
|
6
6
|
* dependency of OAR): `() => import("@cursor/sdk")`. Written in the host's
|
|
7
7
|
* own code, the import fails the host's compile when the package is
|
|
8
8
|
* missing, checks the SDK's types against `CursorSdk`, and is visible to
|
|
@@ -150,7 +150,7 @@ export function cursorLoginWith(load) {
|
|
|
150
150
|
const { auth } = sdk.Cursor;
|
|
151
151
|
const Store = sdk.FileCredentialStore;
|
|
152
152
|
if (auth === undefined || Store === undefined) {
|
|
153
|
-
return { kind: "unsupported", reason: "version_unsupported", detail: "@cursor/sdk 1.0.
|
|
153
|
+
return { kind: "unsupported", reason: "version_unsupported", detail: "@cursor/sdk 1.0.40 is required; this one has no Cursor.auth" };
|
|
154
154
|
}
|
|
155
155
|
// The caller may have aborted while the SDK loaded.
|
|
156
156
|
if (aborted()) {
|
|
@@ -47,7 +47,7 @@ export function cursorLogoutWith(load) {
|
|
|
47
47
|
}
|
|
48
48
|
const { auth } = sdk.Cursor;
|
|
49
49
|
if (auth?.logout === undefined) {
|
|
50
|
-
return { kind: "unsupported", reason: "version_unsupported", detail: "@cursor/sdk 1.0.
|
|
50
|
+
return { kind: "unsupported", reason: "version_unsupported", detail: "@cursor/sdk 1.0.40 is required; this one has no Cursor.auth.logout" };
|
|
51
51
|
}
|
|
52
52
|
// With no store: the SDK's own default, the file `status()` reads.
|
|
53
53
|
const native = await sdkLogout(async () => {
|
|
@@ -4,9 +4,9 @@ import { type Runtime } from "../../contracts/runtime.js";
|
|
|
4
4
|
export interface PiDurableRuntimeOptions {
|
|
5
5
|
/** An already-open host-owned Harness. OAR never closes it or its storage. */
|
|
6
6
|
readonly harness: Harness;
|
|
7
|
-
/** The same
|
|
8
|
-
readonly models: Models;
|
|
7
|
+
/** The same catalog or supplier passed to Harness.open. Resolved at each listing and session open, including resume; native Harness exposes no getter, so OAR cannot verify identity. */
|
|
8
|
+
readonly models: Models | (() => Models);
|
|
9
9
|
}
|
|
10
|
-
/** Pi Durable
|
|
10
|
+
/** Pi Durable conversations over host-owned storage, providers, extensions and execution environment. */
|
|
11
11
|
export declare function createPiDurableRuntime({ harness, models }: PiDurableRuntimeOptions): Runtime;
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi-durable/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAMzE,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/pi-durable/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAMzE,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yLAAyL;IACzL,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CAC1C;AAED,yGAAyG;AACzG,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAe5F"}
|
|
@@ -4,19 +4,20 @@ import { runtimeBrands } from "../../brands.js";
|
|
|
4
4
|
import { projectPiModels } from "../pi/model-projection.js";
|
|
5
5
|
import { piDurableRefusedSessionOptions } from "./options.js";
|
|
6
6
|
import { piDurableSession } from "./session.js";
|
|
7
|
-
/** Pi Durable
|
|
7
|
+
/** Pi Durable conversations over host-owned storage, providers, extensions and execution environment. */
|
|
8
8
|
export function createPiDurableRuntime({ harness, models }) {
|
|
9
|
+
const currentModels = typeof models === "function" ? models : () => models;
|
|
9
10
|
const runtime = defineRuntime({
|
|
10
11
|
id: "pi-durable",
|
|
11
12
|
brand: runtimeBrands["pi-durable"],
|
|
12
13
|
refusedSessionOptions: piDurableRefusedSessionOptions,
|
|
13
14
|
installation: async () => { await Promise.resolve(); return { kind: "available", via: "bundled" }; },
|
|
14
|
-
listModels: async () => { await Promise.resolve(); return { kind: "ok", models: projectPiModels(
|
|
15
|
+
listModels: async () => { await Promise.resolve(); return { kind: "ok", models: projectPiModels(currentModels().getModels(), getSupportedThinkingLevels) }; },
|
|
15
16
|
session: async (installation, options) => {
|
|
16
17
|
if (installation.via !== "bundled") {
|
|
17
18
|
throw new Error("pi-durable requires the host's bundled Harness");
|
|
18
19
|
}
|
|
19
|
-
const session = await piDurableSession(harness,
|
|
20
|
+
const session = await piDurableSession(harness, currentModels(), options);
|
|
20
21
|
return session;
|
|
21
22
|
},
|
|
22
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/pi-durable/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAI1E,OAAO,EAAE,aAAa,EAAgB,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAShD
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/pi-durable/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAI1E,OAAO,EAAE,aAAa,EAAgB,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAShD,yGAAyG;AACzG,MAAM,UAAU,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAA2B;IACjF,MAAM,aAAa,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAW,EAAE,CAAC,MAAM,CAAC;IACnF,MAAM,OAAO,GAAG,aAAa,CAAC;QAC5B,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC;QAClC,qBAAqB,EAAE,8BAA8B;QACrD,YAAY,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACpG,UAAU,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7J,OAAO,EAAE,KAAK,EAAE,YAAmC,EAAE,OAAuB,EAAE,EAAE;YAC9E,IAAI,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAAC,CAAC;YAC1G,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;YAC1E,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botiverse/oar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.0",
|
|
4
4
|
"description": "A programming interface for all agent harnesses: provider-independent contracts for controlling and observing agent runtimes",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -76,16 +76,16 @@
|
|
|
76
76
|
"license": "Apache-2.0",
|
|
77
77
|
"dependencies": {
|
|
78
78
|
"@agentclientprotocol/sdk": "^1.4.0",
|
|
79
|
-
"@earendil-works/pi-ai": "^1.
|
|
80
|
-
"@earendil-works/pi-coding-agent": "^1.
|
|
79
|
+
"@earendil-works/pi-ai": "^1.4.0",
|
|
80
|
+
"@earendil-works/pi-coding-agent": "^1.4.0",
|
|
81
81
|
"cross-spawn": "^7.0.6",
|
|
82
82
|
"undici": "8.10.2",
|
|
83
83
|
"which": "^2.0.2"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
|
-
"@cursor/sdk": "1.0.
|
|
87
|
-
"@earendil-works/pi-durable": "~1.
|
|
88
|
-
"@earendil-works/chord": "~1.
|
|
86
|
+
"@cursor/sdk": "1.0.40",
|
|
87
|
+
"@earendil-works/pi-durable": "~1.4.0",
|
|
88
|
+
"@earendil-works/chord": "~1.4.0"
|
|
89
89
|
},
|
|
90
90
|
"peerDependenciesMeta": {
|
|
91
91
|
"@cursor/sdk": {
|
|
@@ -99,11 +99,11 @@
|
|
|
99
99
|
}
|
|
100
100
|
},
|
|
101
101
|
"devDependencies": {
|
|
102
|
-
"@cursor/sdk": "1.0.
|
|
102
|
+
"@cursor/sdk": "1.0.40",
|
|
103
103
|
"@types/cross-spawn": "^6.0.6",
|
|
104
104
|
"@types/which": "^2.0.2",
|
|
105
|
-
"@earendil-works/pi-durable": "1.
|
|
106
|
-
"@earendil-works/chord": "1.
|
|
105
|
+
"@earendil-works/pi-durable": "1.4.0",
|
|
106
|
+
"@earendil-works/chord": "1.4.0"
|
|
107
107
|
},
|
|
108
108
|
"scripts": {
|
|
109
109
|
"build": "tsc -p tsconfig.build.json",
|