Skip to content

Slice 0 (#24): gbot_thread summary plus cursor by default - #45

Merged
ScriptedAlchemy merged 9 commits into
mainfrom
cursor/potato-thread-summary-a36b
Sep 15, 2026
Merged

ScriptedAlchemy merged 9 commits into
mainfrom
cursor/potato-thread-summary-a36b

Conversation

@ScriptedAlchemy

@ScriptedAlchemy ScriptedAlchemy commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Slices 0–1 for epic #24: token-cheap thread receipts plus client-held watermark polling.

Behavior

  • gbot_thread defaults to a bounded receipt containing only summary, opaque cursor, entryCount, and gapReset. Default structured content has no entries; Agent.Text is summary-only.
  • full:true adds bounded entries (20k chars each / 200k aggregate with truncation metadata) to structured content without duplicating bodies into Agent.Text.
  • MCP after and CLI gbot thread --after ID are exclusive, client-side filters. Known cursor returns only newer rows; unchanged returns entryCount: 0; unknown/expired cursor returns one bounded reset receipt with gapReset: true (repeat with full:true to inspect that snapshot).
  • Cursor IDs come from source entries, independent of display truncation. Local fallback takes the true bounded tail if a gateway ignores limit; trailing idless rows produce an explicit gap reset instead of a healthy non-advancing poll.

Subtractions

  • Removed default entry dumps and repeated target metadata from receipts.
  • Removed duplicate full-entry Agent.Text bodies.
  • Removed dead 400-character plugin preview branches and custom receipt validators; the remaining fixed receipt shape plus 1024-character cursor schema is intrinsically below 4 KiB and tested.
  • Omitted the optional Markdown path after measuring the implementation: doing it safely required a new hash/render/filesystem publication framework. Per the laziness/subtract-before-add mandate, this slice ships receipt + cursor + after without creating a second persistence surface.

Packaging

The private plugin is not part of the npm tarball and has no publishable changeset target. The patch changeset describes only the packaged CLI --after feature. The existing hold-fixes changeset on main and release PR #44 are unchanged.

Scope

No watermark database, second history ledger, Desktop pipe, cargo-conductor, React components, room server, native delta endpoint, approval changes, or new production dependencies.

Gateway status

UNVERIFIED native capability: no claim is made that the live gateway accepts after. Requests intentionally remain getAgentTranscriptTail { id, limit }; filtering is local and covered by loopback tests.

Verification

  • npm test — 113/113 passed.
  • cd plugin && npm run check — validation, build, artifact validation, typecheck, and 13/13 route-unit tests passed.
  • npm pack --dry-run --json — packaged src/cli.js and src/transcript.js; excluded private plugin/ as expected.
  • Ripwire 0.6.0 mapped the gateway/CLI/history/tool flow, checked the final PR context and test gate, and reported no gating quality regression.
Open in Web Open in Cursor 

…ll:true

Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
@changeset-bot

changeset-bot Bot commented Sep 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d15d261

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
grok-bot-cli Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

cursoragent and others added 8 commits September 15, 2026 04:48
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
Co-authored-by: Zack Jackson <ScriptedAlchemy@users.noreply.github.com>
@ScriptedAlchemy
ScriptedAlchemy marked this pull request as ready for review September 15, 2026 06:13
@ScriptedAlchemy
ScriptedAlchemy merged commit bf64783 into main Sep 15, 2026
2 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 15, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-15T06:18:36.852530Z d15d261 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d15d261a94

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

inputSchema: z.object({
// ponytail: the route inputJsonSchema type cannot express minimum/maximum, so the
// 1-200 bound lives here in zod (and in the CLI/gateway); widen the route type to align them.
after: z.string().min(1).max(RECEIPT_CURSOR_MAX).optional(),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make the empty-thread cursor reusable

When the first poll targets an empty thread, transcriptDelta returns cursor: "", but this schema rejects that cursor on the next call because of .min(1). This breaks the advertised workflow of passing the previous cursor as after precisely when polling starts before the first message; return a non-empty sentinel cursor or accept the emitted empty cursor. The CLI has the same incompatibility in its --after length validation.

Useful? React with 👍 / 👎.

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.

2 participants