@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 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.38`) 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()`.
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.3.0`
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.3.0 @earendil-works/chord@~1.3.0`.
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 that the host passed to Harness.open.
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.3.0 Harness, providers, credentials, extensions
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.38" };
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.38, which the host installs (an optional peer
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.38 is required; this one has no Cursor.auth" };
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.38 is required; this one has no Cursor.auth.logout" };
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 Models passed to Harness.open; native Harness exposes no getter, so OAR cannot verify identity. */
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 1.1.0 conversations over host-owned storage, providers, extensions and execution environment. */
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,+GAA+G;IAC/G,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,+GAA+G;AAC/G,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAc5F"}
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 1.1.0 conversations over host-owned storage, providers, extensions and execution environment. */
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(models.getModels(), getSupportedThinkingLevels) }; },
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, models, options);
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,+GAA+G;AAC/G,MAAM,UAAU,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAA2B;IACjF,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,MAAM,CAAC,SAAS,EAAE,EAAE,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpJ,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,MAAM,EAAE,OAAO,CAAC,CAAC;YACjE,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
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.69.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.3.0",
80
- "@earendil-works/pi-coding-agent": "^1.3.0",
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.38",
87
- "@earendil-works/pi-durable": "~1.3.0",
88
- "@earendil-works/chord": "~1.3.0"
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.38",
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.3.0",
106
- "@earendil-works/chord": "1.3.0"
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",