Skip to content

feat: cursor lists by inclusion, page sequences, and the beta-19425 pin - #72

Merged
Blind-Striker merged 3 commits into
masterfrom
feat/cursor-lists-and-refresh-20aff6d9
Sep 11, 2026
Merged

Blind-Striker merged 3 commits into
masterfrom
feat/cursor-lists-and-refresh-20aff6d9

Conversation

@Blind-Striker

Copy link
Copy Markdown
Collaborator

What

Three commits, each green on the Windows matrix (net472, net8.0, net9.0, net10.0, live lane included):

  1. Cursor lists bind by inclusion; Enumerate*Async returns CursorSequence<TPage, TItem>. A query that carries limit, order, and cursor derives from ListRequest whatever filters it declares beside them; a continuation is the first request again with order dropped and the returned cursor in place, so every filter rides every page. SessionsClient.EnumerateSessionsAsync appears. The sequence still enumerates as IAsyncEnumerable<TItem> and exposes the generated page envelopes through Pages. ADR-0017, the protocol and runtime canon, and CONTEXT.md are revised; the pagination guide is rewritten. Increment benchmark on the pagination ladder: 394,048 → 394,544 allocated bytes over a three-page, thirty-item walk (+496 B); the manual-paging control is unchanged.
  2. SourceLink 10.0.303. Microsoft.Build.Tasks.Git 10.0.301 carries GHSA-23fw-v26w-5fgq (CVE-2026-62900, published 2026-09-08); a cold restore reports NU1902 and the analyzer wall turns it into an error.
  3. Accepted snapshot → 20aff6d9f643afe9abf8a048e68f019d049f5329, upstream's beta branch head, shipped as @opencode/cli@0.0.0-beta-19425. v2.session.messageUpdate leaves the surface (upstream removed the message content mutation API in refactor(session): remove message content mutation API anomalyco/opencode#48043) together with the ISessionMessageAssistant union only its body used; session.message.content.updated leaves the live event union; the message list gains its type filter; provider/model records gain websocket, compaction records cost/tokens. README, spec/SNAPSHOT.md, the roadmap, and ADR-0005 now name the @opencode/cli scope and the exact build, and say why the frozen @opencode-ai/cli@next line no longer reaches a server this SDK can drive.

Breaking changes

Listed in CHANGELOG.md under [Unreleased]. No published consumer is owed compatibility yet; the release line stays 0.8.0-preview.N.

Verification

  • Completion gate on Windows: slopwatch 0 issues, generate --verify, refresh-spec --verify, Release build 0 warnings, both format passes, 5,177 tests, 0 failed, 0 skipped across nine assemblies.
  • Distributed-build consumer leg on Windows: @opencode/cli@0.0.0-beta-19425 installed from npm into an isolated prefix and started with isolated XDG roots; the whole OpenCode.Sdk.Tests assembly on net10.0 attached to it passed 1,102 of 1,103 (the one failure is the RPC event proof's own refusal of an external endpoint); the sandbox breadth walkthrough, --paginate, and --standalone (launcher over the npm executable with an explicit Command) all ran against that build.
  • Linux and macOS live lanes at the new pin are what this PR's CI run is for.

Not in this PR

The Windows launcher default (["opencode2", "serve"] never resolves the npm .cmd shim), the terminal Submit door, the durable-envelope hoisting rule, and the consumer-documentation corrections follow in their own pull requests.

A query that carries the admitted limit, order, and cursor parameters now derives from
ListRequest whatever else it declares, so a filter beside the spine no longer pushes a list out of
cursor pagination: the session list gains EnumerateSessionsAsync, and a continuation is the first
request again with order dropped and the returned cursor in place, carrying every filter unchanged.
A spine-carrying query that declares a required parameter refuses pagination, because a
continuation must be constructible from no request at all.

Enumerate*Async returns CursorSequence<TPage, TItem>: still an IAsyncEnumerable<TItem>, and its
Pages property replays the same traversal as the generated page envelopes, so page metadata no
longer requires paging by hand. Both doors drive the one traversal core; each enumeration issues
its own requests.

Increment benchmark on the pagination ladder: 394,048 to 394,544 allocated bytes over a
three-page, thirty-item walk; the manual-paging control is unchanged.
Microsoft.Build.Tasks.Git 10.0.301, transitive through Microsoft.SourceLink.GitHub, carries
GHSA-23fw-v26w-5fgq (published 2026-09-08). A cold restore reports NU1902 for it and the analyzer
wall turns that into an error, so the next fresh CI restore would fail before compiling anything.
10.0.303 is the patched build; the package is build-only and never ships.
The pin moves 94 commits to upstream's beta branch head, the commit that shipped as
@opencode/cli@0.0.0-beta-19425, so a consumer can install the exact server this SDK is generated
from. The README, the snapshot page, the roadmap, and ADR-0005 now name that scope and build, and
the snapshot page says why the @opencode-ai/cli scope no longer reaches a server this SDK can
drive: its next and latest tags froze at an August build.

Upstream removed the message content mutation API (#48043), so v2.session.messageUpdate leaves the
profile and the generated surface together with the assistant-content union only its body used,
and session.message.content.updated leaves the live event union. The message list gains its type
filter, which rides continuations unchanged now that cursor lists bind by inclusion. Provider and
model records gain the websocket flag; compaction records carry their cost and token usage.

Receipt: 139 operations, 355 components, restore patch 001 still applied, 21 watched anchors
intact, only packages/server/src/process.ts moved by hash. Full gate: 5,177 tests green on the
Windows matrix including the live lane.
@Blind-Striker
Blind-Striker merged commit 1a05f3f into master Sep 11, 2026
9 checks passed
@Blind-Striker
Blind-Striker deleted the feat/cursor-lists-and-refresh-20aff6d9 branch September 14, 2026 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant