feat!: drop laptop transcript sync, move to SDK 0.13.0 - #129
Conversation
The /sessions/sync and /sessions/laptop endpoints are gone server-side, so shipped CLIs 404 on every background sync. Removes the client half whole: the hook install/enroll commands, the spool-and-retry plumbing, the local redaction pass, and laptop to cloud handoff. The git helpers the rest of the CLI still needs move to src/lib/git.ts. SDK 0.13.0 also restructured sessions: the config identity moved under session.agent, live_summary became summary.description, the start response no longer resolves a config name, and the defaults ladder is a map instead of a row list. Migrated each call site. "config default list" joins the account's configs to keep showing names, since the ladder carries ids only. Also pads the chat header off the line above it.
There was a problem hiding this comment.
Caution
Changes requested ❌ — 2 issues
Reviewed 829bf87 in 7 minutes, 53 seconds.
- Reviewed
1commit with551lines of code in28files - Ran
1review agent producing2comments where2were posted - This pipeline runs no gatekeeper, so findings are posted as written.
- View full details on ellipsis.dev
This review was created by . You can tag
@ellipsis in this pull request.
| // The connect UI shows the config in its footer meta line (anything | ||
| // printed before the app would land in scrollback); every other | ||
| // mode prints this note. | ||
| const resolvedConfigName = sessionConfigName(session) |
There was a problem hiding this comment.
This line throws in all four session start prompt positional tests, which still pass — test/session.test.ts's fixture was not updated to the new agent shape, so session start's whole post-start path is now unexercised.
npx vitest run test/session.test.ts prints error: Cannot read properties of undefined (reading 'config') four times and exits 0: the fixture at test/session.test.ts:16 still carries the old top-level config_id: null with no agent, sessionConfigName dereferences session.agent.config, and runAction swallows the TypeError into console.error + process.exitCode. The tests assert only on the request body captured by the fetch mock, so the config note, --json print, and printSessionSummary are never reached. test/sessions.test.ts and test/screenshot.test.ts got the new agent stub; this fixture was missed.
| const rung = repoRung ? `repo default for ${repo}` : 'account default' | ||
| console.log(`using config "${effective}" (${rung})`) |
There was a problem hiding this comment.
agent config default now prints the raw config id where it printed the config's name — using config "cfg_01K9..." (account default) instead of using config "code-reviewer". Same at line 352 for default set.
The ladder carries ids only, and effective is a bare id string; the old code printed defaultName(effective) = config_name ?? config_id. default list (line 316) went to the trouble of joining agents.configs.list() to keep names, so the two sibling commands now disagree on what they show for the same rung.
| const rung = repoRung ? `repo default for ${repo}` : 'account default' | |
| console.log(`using config "${effective}" (${rung})`) | |
| const rung = repoRung ? `repo default for ${repo}` : 'account default' | |
| const names = new Map( | |
| (await api().agents.configs.list()).configs.map((c) => [c.id, configName(c)]), | |
| ) | |
| console.log(`using config "${names.get(effective) ?? effective}" (${rung})`) |
Summary
agent hook(install/uninstall/status/log/stats/enroll/unenroll),agent session sync,agent session handoff,src/lib/laptop.ts, and theenrolledReposconfig field. The/sessions/syncand/sessions/laptopendpoints are gone server-side, so shipped CLIs 404 on every background sync.repoFromCwd,repoFromRemoteUrl) out oflaptop.tsintosrc/lib/git.ts.@ellipsis-dev/sdkto 0.13.0 and migrates the session-shape changes that came with it.SDK 0.13.0 migration
Beyond the sync removal, 0.13.0 restructured sessions. Each break was a compile error after the bump:
session.config_idsession.agent.config_id/session.agent.config.ellipsis.name(via newsessionConfigName())session.live_summarysession.summary.descriptionresolved_config_name/resolution_sourcesession.agent.sourceon the returned sessiondefaults.list()returning{defaults: [row]}{account, repositories}mapdefaults.set()returning{default: row}SessionSourceincludinglaptopsessionSource()and the sidebar filter go with itBehavior changes worth a look
agent config default listloses its STATUS and UPDATED columns: the ladder no longer carriesbrokenorupdated_at. It keeps CONFIG by joiningagents.configs.list()client-side, at the cost of one extra request, rather than printing bare ids.agent config default setechoes the rung it wrote from the request, since the response no longer names it.repoFromCwdreads the case from your git remote while the server stores GitHub's spelling, so a direct index would silently miss the rung.Test plan
npm run typechecknpx vitest run(427 passed)npm run buildagent config default/default list/default setagainst a real account, to confirm the joined-name table and the rung echoagent session list --sourcerejectslaptopwith the shortened source listImportant
Removes laptop transcript sync and upgrades to SDK 0.13.0, which restructured sessions.
agent hook,agent session sync,agent session handoffcommands and theenrolledReposconfig field; git helpers move fromsrc/lib/laptop.tstosrc/lib/git.tssession.config_id→session.agent.config_id,session.live_summary→session.summary.description,SessionSource.laptopremoveddefaults.list()returns{account, repositories}maps instead of{defaults: [...]}, anddefaults.set()returns the ladder instead of a single rowagent config default listloses STATUS and UPDATED columns (now joined fromagents.configs.list()client-side)agent config default setechoes the rung from the request (no longer in response)This description was created by
for 829bf87. It will automatically update as commits are pushed.