Skip to content

feat: reconcile reminders and complete desktop update channels - #185

Merged
elkaix merged 4 commits into
mainfrom
feat/reconcile-reminder-and-update-settings
Aug 25, 2026
Merged

feat: reconcile reminders and complete desktop update channels#185
elkaix merged 4 commits into
mainfrom
feat/reconcile-reminder-and-update-settings

Conversation

@elkaix

@elkaixelkaix commented Aug 25, 2026

Copy link
Copy Markdown
Member

Related Issue

No linked issue. This is a maintainer-directed repository update.

Problem

Reminder context and system reminders used separate runtime services, and agent teardown could deactivate lifecycle context before asynchronous scope cleanup finished. The desktop Update UI exposed Stable, Beta, and Nightly choices, but only Stable had a complete signed publication path.

What changed

  • Consolidate reminder activation, context injection, and system reminders under the agent reminder runtime while retaining Pythinker advisor and Dynamic Workflow behavior.
  • Keep agent lifecycle context active through asynchronous child, unit, and scope teardown. Install gateway process handlers only after startup succeeds and remove them after shutdown.
  • Add a desktop-only Update tab with status, Stable/Beta/Nightly selection, automatic checks, sidebar-notification control, and explicit check, download, and restart actions.
  • Publish explicit latest, beta, and nightly electron-builder feeds through one signed, notarized, draft-first workflow. Stable and Beta use reviewed tags; scheduled Nightly derives a deterministic version from the exact main commit.
  • Verify channel-specific manifests and source provenance before publication, make exact Nightly reruns idempotent, and require current-main Nightly assets in release reconciliation.

Automatic download, quit-time installation, and downgrade remain disabled. Manual workflow dispatches are non-publishing release rehearsals.

Review guide

  • 5c38b192e — reminder runtime consolidation, lifecycle teardown, gateway startup, SDK, and focused tests.
  • 0ae46cb97 — desktop updater state and IPC, dedicated Update tab, UI tests, and generated web assets.
  • 57bb4e4d1 — desktop update documentation.
  • 7403218f1 — signed Beta and Nightly feeds, manifest verification, reconciliation, tests, docs, and updated web assets.

Activation state

  • Stable continues to publish from stable desktop-v* tags.
  • Beta becomes live after the first reviewed desktop-v<version>-beta.<n> tag.
  • Nightly becomes live after the next successful scheduled Nightly run.
  • This PR does not publish a release during review.

Verification

  • pnpm test — 1,215 files passed; 20,321 tests passed; 3 expected failures; 79 skipped; 2 todo.
  • pnpm test:release — 19 tests passed.
  • Focused desktop workflow, manifest, and Update UI tests — 35 tests passed.
  • pnpm typecheck
  • pnpm lint — 0 errors; existing warnings only.
  • pnpm build
  • nix build .#pythinker-code
  • node scripts/check-nix-workspace.mjs — 18 workspaces.
  • node apps/pythinker-code/scripts/check-web-assets.mjs — 670 bundle entries validated.
  • pnpm sherif
  • pnpm -C docs run build
  • actionlint 1.7.12 on both changed workflows.
  • Dark and light Update-tab checks, including keyboard focus, passed.
  • Independent identifier and provenance audit: no findings.

Checklist

  • I have read the CONTRIBUTING document.
  • No related issue is required for this maintainer-directed update.
  • I have added tests that prove the changes work.
  • Ran gen-changesets; this PR includes an approved minor desktop changeset.
  • Ran gen-docs; the desktop and release-channel guides are updated. Changelog sync is deferred until release.

Summary by CodeRabbit

  • New Features

    • Added Stable, Beta, and Nightly update channels for Desktop.
    • Added update preferences for automatic checks and notifications in Settings > Update.
    • Added manual update checks and channel-specific release feeds.
  • Bug Fixes

    • Fixed repeated server crashes when resuming sessions that stopped mid-turn.
    • Improved session and agent cleanup reliability during shutdown and recovery.
  • Documentation

    • Updated Desktop update and release-channel guidance.

Unify reminder activation and system prompts under one agent runtime.
Keep lifecycle context active until asynchronous scope teardown finishes. Install gateway process handlers only after startup succeeds.
Expose update status, channel selection, automatic checks, and notifications in a dedicated desktop settings tab.
Keep download and installation behind explicit user actions.
Point desktop users to the dedicated Update tab and document channel and notification controls.
@coderabbitai

coderabbitaiBot commented Aug 25, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a628df8d-80f0-432f-adbe-2f63a2e7a03e

📥 Commits

Reviewing files that changed from the base of the PR and between e88ded0 and 7403218.

📒 Files selected for processing (197)
  • .agents/skills/release/SKILL.md
  • .changeset/bright-desktops-update.md
  • .changeset/fix-restore-crash-loop.md
  • .github/workflows/desktop-release.yml
  • .github/workflows/nightly.yml
  • apps/desktop/README.md
  • apps/desktop/scripts/desktop-release.mjs
  • apps/desktop/scripts/verify-update-manifest.ts
  • apps/desktop/src/main.ts
  • apps/desktop/src/preload.ts
  • apps/desktop/src/updater.ts
  • apps/desktop/tests/desktop-release-workflow.spec.ts
  • apps/desktop/tests/updater.spec.ts
  • apps/desktop/tests/verify-update-manifest.spec.ts
  • apps/pythinker-code/dist-web/.web-bundle-manifest.json
  • apps/pythinker-code/dist-web/assets/CodeBlockNode-Dky7odcN.js
  • apps/pythinker-code/dist-web/assets/DesignSystemView-Drz2kLo0.js
  • apps/pythinker-code/dist-web/assets/Tooltip-CKI8tYnk.js
  • apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-DFvjdFjZ.js
  • apps/pythinker-code/dist-web/assets/arc-DEeVB9of.js
  • apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-DwPbWZbj.js
  • apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-QmJNXmgz.js
  • apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-Bep0rAz0.js
  • apps/pythinker-code/dist-web/assets/channel-CFQGBdDP.js
  • apps/pythinker-code/dist-web/assets/channel-Cp0a1fma.js
  • apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-CtDFYBJ5.js
  • apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-DipeT3cJ.js
  • apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-CqXmbFOg.js
  • apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-BjElWXp6.js
  • apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-BMKGkrPR.js
  • apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-B3aML0B_.js
  • apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-CIXepE0R.js
  • apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-CuVxqgjz.js
  • apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-Bijzh1fL.js
  • apps/pythinker-code/dist-web/assets/classDiagram-DTDB5LWJ-CnTJ0Ylb.js
  • apps/pythinker-code/dist-web/assets/classDiagram-DTDB5LWJ-beJuU7uZ.js
  • apps/pythinker-code/dist-web/assets/classDiagram-v2-JRS7N3AN-CnTJ0Ylb.js
  • apps/pythinker-code/dist-web/assets/classDiagram-v2-JRS7N3AN-beJuU7uZ.js
  • apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-Ds_6cpP6.js
  • apps/pythinker-code/dist-web/assets/cssMode-CUH-Kh-7.js
  • apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-l1QOd-xU.js
  • apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-Bh1egu0X.js
  • apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-DU_HKB-3.js
  • apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-CL2HcYPz.js
  • apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN-gjKWkwak.js
  • apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-DGSPmhBl.js
  • apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-CcpH_Mqm.js
  • apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-BOkAVbVk.js
  • apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-C2XSbCnh.js
  • apps/pythinker-code/dist-web/assets/editor.main-BTIX44kH.js
  • apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-Dw8ayruy.js
  • apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-DHbXwk5j.js
  • apps/pythinker-code/dist-web/assets/freemarker2-yDK1aGoI.js
  • apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-D58Qc6BL.js
  • apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-BGurrpyF.js
  • apps/pythinker-code/dist-web/assets/handlebars-Cwv8qCNt.js
  • apps/pythinker-code/dist-web/assets/html-KtLrsE6h.js
  • apps/pythinker-code/dist-web/assets/htmlMode-BV7eppqD.js
  • apps/pythinker-code/dist-web/assets/index-C2WWooId.css
  • apps/pythinker-code/dist-web/assets/index-CUI9xsln.js
  • apps/pythinker-code/dist-web/assets/index-DSS8HA9D.js
  • apps/pythinker-code/dist-web/assets/index-otBoqGdB.js
  • apps/pythinker-code/dist-web/assets/index-uNd-oW5n.js
  • apps/pythinker-code/dist-web/assets/index10-BO7nIyjR.js
  • apps/pythinker-code/dist-web/assets/index11-CXyzS8DB.js
  • apps/pythinker-code/dist-web/assets/index5-wYX4yVjf.js
  • apps/pythinker-code/dist-web/assets/index6-BB3xpYAf.js
  • apps/pythinker-code/dist-web/assets/index7-DRdIBIMt.js
  • apps/pythinker-code/dist-web/assets/index8-Bi7iwoqu.js
  • apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-C6ikv-Vm.js
  • apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-Bdif1tNp.js
  • apps/pythinker-code/dist-web/assets/javascript-CiHuAIMb.js
  • apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-aJcir4g3.js
  • apps/pythinker-code/dist-web/assets/jsonMode-C0uVPm74.js
  • apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-CdZyt57x.js
  • apps/pythinker-code/dist-web/assets/layout-B7-fAWXT.js
  • apps/pythinker-code/dist-web/assets/linear-C436T6Ai.js
  • apps/pythinker-code/dist-web/assets/liquid-CJtHdLyz.js
  • apps/pythinker-code/dist-web/assets/lspLanguageFeatures-BxiaBydB.js
  • apps/pythinker-code/dist-web/assets/mdx-CPbT9oId.js
  • apps/pythinker-code/dist-web/assets/mermaid.core-dpvMyTak.js
  • apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-CDR6XGh3.js
  • apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-BOUnYBVZ.js
  • apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-CXlc2ZzT.js
  • apps/pythinker-code/dist-web/assets/python-B6uc32cO.js
  • apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-BLghvNpN.js
  • apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-DATB1EEh.js
  • apps/pythinker-code/dist-web/assets/razor-BzgIK4NZ.js
  • apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-cT9hBIVP.js
  • apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-P68itCsu.js
  • apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-E_7jkkHm.js
  • apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-Syphurhi.js
  • apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-BjHOtf6c.js
  • apps/pythinker-code/dist-web/assets/stateDiagram-v2-4QOOHH4V-BKi5OTkX.js
  • apps/pythinker-code/dist-web/assets/stateDiagram-v2-4QOOHH4V-D9Z6UxeJ.js
  • apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-B5AA3TUN.js
  • apps/pythinker-code/dist-web/assets/swimlanesDiagram-VK2B7HYN-BZQys8KV.js
  • apps/pythinker-code/dist-web/assets/swimlanesDiagram-VK2B7HYN-EPHrx5fq.js
  • apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-TVKDHpck.js
  • apps/pythinker-code/dist-web/assets/tsMode-DC-m6R9D.js
  • apps/pythinker-code/dist-web/assets/typescript-DNBS5ufL.js
  • apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-Cwkr1q9t.js
  • apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-BPXwdYup.js
  • apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-HOrsWhTQ.js
  • apps/pythinker-code/dist-web/assets/xml-CDwOLrjX.js
  • apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-CPG9gRDI.js
  • apps/pythinker-code/dist-web/assets/yaml-BATkQN3Z.js
  • apps/pythinker-code/dist-web/index.html
  • apps/pythinker-web/src/components/settings/SettingsDialog.vue
  • apps/pythinker-web/src/composables/useDesktopUpdate.ts
  • apps/pythinker-web/src/env.d.ts
  • apps/pythinker-web/src/i18n/locales/en/settings.ts
  • apps/pythinker-web/test/settings-ui.test.ts
  • apps/pythinker-web/test/update-dialog.test.ts
  • docs/guides/desktop.md
  • docs/reference/release-channels.md
  • packages/agent-core-v2/AGENTS.md
  • packages/agent-core-v2/src/_base/di/instantiation.ts
  • packages/agent-core-v2/src/_base/di/instantiationService.ts
  • packages/agent-core-v2/src/_base/di/scope.ts
  • packages/agent-core-v2/src/_base/di/scopeUnits.ts
  • packages/agent-core-v2/src/_base/di/test.ts
  • packages/agent-core-v2/src/_base/di/testInstantiationService.ts
  • packages/agent-core-v2/src/_base/lifecycle/ledger.ts
  • packages/agent-core-v2/src/agent/agentsMdReminder/agentsMdReminderService.ts
  • packages/agent-core-v2/src/agent/contextInjector/contextInjectorService.ts
  • packages/agent-core-v2/src/agent/contextMemory/compactionHandoff.ts
  • packages/agent-core-v2/src/agent/interruptionReminder/interruptionReminderService.ts
  • packages/agent-core-v2/src/agent/permissionMode/injection/permissionModeInjection.ts
  • packages/agent-core-v2/src/agent/permissionMode/permissionModeService.ts
  • packages/agent-core-v2/src/agent/plugin/agentPluginService.ts
  • packages/agent-core-v2/src/agent/prompt/promptService.ts
  • packages/agent-core-v2/src/agent/prompt/promptStepRequests.ts
  • packages/agent-core-v2/src/agent/systemReminder/systemReminderService.ts
  • packages/agent-core-v2/src/agent/task/taskService.ts
  • packages/agent-core-v2/src/agent/toolDedupe/toolDedupeService.ts
  • packages/agent-core-v2/src/agent/toolSelect/toolSelectAnnouncementsService.ts
  • packages/agent-core-v2/src/agent/toolSelect/toolSelectSchemasService.ts
  • packages/agent-core-v2/src/features/btw/btwService.ts
  • packages/agent-core-v2/src/features/dateChange/dateChangeService.ts
  • packages/agent-core-v2/src/features/dynamic_workflow/agent/dynamicWorkflowService.ts
  • packages/agent-core-v2/src/features/dynamic_workflow/agent/injection/dynamicWorkflowInjection.ts
  • packages/agent-core-v2/src/features/goal/goalAgentRuntime.ts
  • packages/agent-core-v2/src/features/goal/injection/goalInjection.ts
  • packages/agent-core-v2/src/features/plan/injection/planModeInjection.ts
  • packages/agent-core-v2/src/features/plan/planService.ts
  • packages/agent-core-v2/src/features/reminder/internal/reminderActivation.ts
  • packages/agent-core-v2/src/features/reminder/reminderAgentRuntime.ts
  • packages/agent-core-v2/src/features/reminder/reminderFeature.ts
  • packages/agent-core-v2/src/features/reminder/systemReminder.ts
  • packages/agent-core-v2/src/features/reminder/types.ts
  • packages/agent-core-v2/src/features/sessionInit/sessionInitService.ts
  • packages/agent-core-v2/src/features/todo/todoAgentRuntime.ts
  • packages/agent-core-v2/src/features/tower/injection/towerModeInjection.ts
  • packages/agent-core-v2/src/features/tower/towerService.ts
  • packages/agent-core-v2/src/index.ts
  • packages/agent-core-v2/src/session/advisor/advisorService.ts
  • packages/agent-core-v2/src/session/agentLifecycle/agentLifecycleService.ts
  • packages/agent-core-v2/src/workspace/sessionLifecycle/sessionLifecycleService.ts
  • packages/agent-core-v2/test/_base/di/child.test.ts
  • packages/agent-core-v2/test/agent/agentsMdReminder/agentsMdReminder.test.ts
  • packages/agent-core-v2/test/agent/fullCompaction/fullCompaction.test.ts
  • packages/agent-core-v2/test/agent/permissionMode/permissionMode.test.ts
  • packages/agent-core-v2/test/agent/plugin/agentPlugin.test.ts
  • packages/agent-core-v2/test/agent/prompt/promptService.test.ts
  • packages/agent-core-v2/test/agent/task/taskService.test.ts
  • packages/agent-core-v2/test/agent/toolSelect/toolSelect.e2e.test.ts
  • packages/agent-core-v2/test/agent/toolSelect/toolSelectService.test.ts
  • packages/agent-core-v2/test/app/config/config.test.ts
  • packages/agent-core-v2/test/features/btw/btw.test.ts
  • packages/agent-core-v2/test/features/dateChange/dateChangeInjection.test.ts
  • packages/agent-core-v2/test/features/dynamic_workflow/dynamic_workflow.test.ts
  • packages/agent-core-v2/test/features/goal/goalFeature.test.ts
  • packages/agent-core-v2/test/features/goal/goalOps.test.ts
  • packages/agent-core-v2/test/features/goal/injection/goalInjection.test.ts
  • packages/agent-core-v2/test/features/plan/injection/planModeInjection.test.ts
  • packages/agent-core-v2/test/features/plan/plan.test.ts
  • packages/agent-core-v2/test/features/plan/planGuard.test.ts
  • packages/agent-core-v2/test/features/reminder/reminder.test.ts
  • packages/agent-core-v2/test/features/reminder/stubs.ts
  • packages/agent-core-v2/test/features/sessionInit/sessionInit.test.ts
  • packages/agent-core-v2/test/features/skill/catalog/plugin-session-start.test.ts
  • packages/agent-core-v2/test/features/skill/workspace/skillCatalog.test.ts
  • packages/agent-core-v2/test/features/todo/sessionTodo.test.ts
  • packages/agent-core-v2/test/features/tower/towerService.test.ts
  • packages/agent-core-v2/test/harness/agent.ts
  • packages/agent-core-v2/test/session/advisor/sessionAdvisor.test.ts
  • packages/agent-core-v2/test/session/agentLifecycle/agentLifecycle.test.ts
  • packages/agent-core-v2/test/tool/tool.test.ts
  • packages/agent-core-v2/test/wire/resume.test.ts
  • packages/agent-gateway/src/start.ts
  • packages/agent-gateway/test/boot.test.ts
  • packages/node-sdk/src/sdk-rpc-client-v2.ts
  • scripts/release/desktop-release.test.mjs
  • scripts/release/release-status.mjs
  • scripts/release/release-status.test.mjs
  • scripts/release/release-workflows.test.mjs

📝 Walkthrough

Walkthrough

The changes add Stable, Beta, and Nightly desktop release flows and update controls. They introduce a lifecycle-owned reminder runtime, asynchronous dependency disposal, process failure handlers, incomplete-turn resume coverage, generated web assets, and related tests and documentation.

Changes

Desktop release channels

Layer / File(s)Summary
Release resolution and workflow orchestration
.github/workflows/desktop-release.yml, .github/workflows/nightly.yml, apps/desktop/scripts/desktop-release.mjs, apps/desktop/tests/desktop-release-workflow.spec.ts
Release resolution now supports Stable, Beta, and Nightly channels. Workflows support publishing, manual rehearsals, channel manifests, prerelease metadata, and scheduled Nightly builds.
Manifest validation and release status
apps/desktop/scripts/verify-update-manifest.ts, scripts/release/release-status.mjs, scripts/release/*test.mjs, .agents/skills/release/SKILL.md, apps/desktop/README.md, .changeset/*
Manifest checks and release status now validate channel-specific assets, versions, prerelease state, and Nightly commit versions.

Desktop update preferences

Layer / File(s)Summary
Updater settings and IPC
apps/desktop/src/updater.ts, apps/desktop/src/main.ts, apps/desktop/src/preload.ts, apps/pythinker-web/src/env.d.ts
The updater persists channel and notification settings. IPC and preload APIs expose validated channel and notification changes.
Update settings surface
apps/pythinker-web/src/components/settings/SettingsDialog.vue, apps/pythinker-web/src/composables/useDesktopUpdate.ts, apps/pythinker-web/src/i18n/locales/en/settings.ts, docs/guides/desktop.md, docs/reference/release-channels.md
The desktop Update tab provides channel selection, notification controls, status details, and manual checks.
Update preference coverage
apps/desktop/tests/updater.spec.ts, apps/desktop/tests/verify-update-manifest.spec.ts, apps/pythinker-web/test/*
Tests cover defaults, persistence, channel configuration, manifest names, notification suppression, and settings interactions.

Reminder runtime and lifecycle disposal

Layer / File(s)Summary
Reminder contracts and runtime
packages/agent-core-v2/src/features/reminder/*, packages/agent-core-v2/test/features/reminder/*
The reminder feature adds runtime contracts, provider registration, notifications, context injection, compaction reconciliation, lifecycle activation, and cleanup tests.
Reminder service migration
packages/agent-core-v2/src/agent/*, packages/agent-core-v2/src/features/*, packages/agent-core-v2/src/session/advisor/*, packages/agent-core-v2/src/index.ts, packages/node-sdk/src/sdk-rpc-client-v2.ts, packages/agent-core-v2/test/*
Agent and feature services resolve AgentReminder through lifecycle and scope context instead of legacy injector and system-reminder services.
Asynchronous disposal and lifecycle cleanup
packages/agent-core-v2/src/_base/di/*, packages/agent-core-v2/src/_base/lifecycle/ledger.ts, packages/agent-core-v2/src/session/agentLifecycle/*, packages/agent-core-v2/src/workspace/sessionLifecycle/*, packages/agent-core-v2/test/*
Dependency and agent-scope disposal now supports asynchronous teardown, cached disposal promises, ordered finalizers, and awaited child cleanup.

Generated web assets

Layer / File(s)Summary
Generated bundle refresh and additions
apps/pythinker-code/dist-web/*
Generated web output updates hashed dependency references and adds bundled Mermaid, editor, language, Vue, and diagram modules.

Server and resume reliability

Layer / File(s)Summary
Server handlers and resume behavior
packages/agent-gateway/src/start.ts, packages/agent-gateway/test/boot.test.ts, packages/agent-core-v2/test/wire/resume.test.ts
Server startup now installs and removes process-level failure handlers. Resume tests cover journals that end during an active turn.

Estimated code review effort: 5 (Critical) | ~120 minutes

Warning

Some tools did not complete. Review the errors below.

🔧 ast-grep (0.45.2)
apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-l1QOd-xU.js

ast-grep timed out on this file

apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-CqXmbFOg.js

ast-grep did not scan this file: retry isolation stopped after a systemic timeout or after exhausting the retry isolation budget

apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-BjElWXp6.js

ast-grep did not scan this file: retry isolation stopped after a systemic timeout or after exhausting the retry isolation budget

  • 29 others

Comment @coderabbitai help to get the list of available commands.

@pkg-pr-new

pkg-pr-newBot commented Aug 25, 2026

Copy link
Copy Markdown
pnpm dlx https://pkg.pr.new/@pymodel/pythinker-code@7403218
npx https://pkg.pr.new/@pymodel/pythinker-code@7403218

commit: 7403218

@elkaix

Copy link
Copy Markdown
MemberAuthor

Resolved the three semicolon-insertion findings because they target minified Vite output under apps/pythinker-code/dist-web/assets. These files are regenerated by pnpm run build:web; manual edits would desynchronize the committed bundle fingerprint. Source lint, the full build, and pnpm check:web all pass.

@elkaix

Copy link
Copy Markdown
MemberAuthor

@CodeRabbit

@coderabbitai

Copy link
Copy Markdown

@elkaix I will review the current changes in #185.

Action performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Complete BN3-BN5 from the desktop release plan.
Use explicit update channels and reuse the signed draft-first workflow so Beta tags and scheduled Nightly builds produce verifiable update manifests.
@elkaixelkaix changed the title feat: reconcile reminder lifecycle and add update settingsfeat: reconcile reminders and complete desktop update channelsAug 25, 2026
@elkaix

Copy link
Copy Markdown
MemberAuthor

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
Action performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@elkaix

Copy link
Copy Markdown
MemberAuthor

The three new semicolon-insertion findings again target minified Vite output regenerated by pnpm run build:web. Manual edits would desynchronize the source-to-bundle fingerprint. Source lint, the full build, and check-web-assets.mjs pass, so these generated-code false positives are resolved without editing the bundle by hand.

@elkaix
elkaix merged commit 283020c into mainAug 25, 2026
26 of 27 checks passed
@elkaix
elkaix deleted the feat/reconcile-reminder-and-update-settings branch August 25, 2026 11:04
@pythinker-release-botpythinker-release-botBot mentioned this pull request Aug 25, 2026
elkaix pushed a commit that referenced this pull request Aug 25, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.
# Releases
## @pymodel/pythinker-code@1.3.1
### Patch Changes
- [#186](#186)
[`50f1437`](50f1437)
Thanks [@elkaix](https://github.com/elkaix)! - Make task output
copy-path actions visually distinct.
- [#186](#186)
[`50f1437`](50f1437)
Thanks [@elkaix](https://github.com/elkaix)! - Fix chat prompt anchors
to use a connected timeline beside the sidebar with keyboard navigation.
- [#186](#186)
[`50f1437`](50f1437)
Thanks [@elkaix](https://github.com/elkaix)! - Fix the chat composer so
model and thinking-effort menus open separately.
- [#186](#186)
[`50f1437`](50f1437)
Thanks [@elkaix](https://github.com/elkaix)! - Pause active goals during
automatic context compaction and resume them after compaction succeeds.
- [#185](#185)
[`283020c`](283020c)
Thanks [@elkaix](https://github.com/elkaix)! - Fix repeated server
crashes when resuming a session that stopped during a turn.
## @pymodel/pythinker-desktop@0.3.0
### Minor Changes
- [#185](#185)
[`283020c`](283020c)
Thanks [@elkaix](https://github.com/elkaix)! - Add signed Beta and
Nightly desktop update feeds.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for freeto 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

@elkaix