{"_id":"@dsh-next/dsh-next-checkpoints","_rev":"3-113bfc6acf894bf133af7207e2ee571c","name":"@dsh-next/dsh-next-checkpoints","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@dsh-next/dsh-next-checkpoints","version":"0.1.0","author":"Rok Grabnar <sitegroove>","license":"MIT","_id":"@dsh-next/dsh-next-checkpoints@0.1.0","maintainers":[{"name":"sitegroove","email":"grabnarrok@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"},"engines":{"dsh":">=0.1.2-rc.1"}},"dist":{"shasum":"28d1d8a7538beac27a8514b28c5fe8ac50cd1b62","tarball":"https://registry.npmjs.org/@dsh-next/dsh-next-checkpoints/-/dsh-next-checkpoints-0.1.0.tgz","fileCount":36,"integrity":"sha512-/SCCXIVct6NILqW1QWWH3zeZU2NtbBZJaQvrIF2rZHLZP3cym0YTy6CKm6un10l2x2E4XUoEhj78U8zdwOBFeg==","signatures":[{"sig":"MEYCIQDUJB28LSg0AeTV0EaVHfEuSBYucbi2vV/KnPAEzs3CQwIhANhso2fO2+sp4fUbJ8ShO3U8g3ss9quW1W5bK9q3601m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":936932},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","typecheck":"tsc --noEmit"},"_npmUser":{"name":"sitegroove","email":"grabnarrok@gmail.com"},"repository":{"url":"git+https://github.com/dsh-next/dsh-next-plugins.git","type":"git","directory":"packages/dsh-next-checkpoints"},"description":"DeepSeek Harness plugin: restore a session to a known-good moment — files and model history as one checkpoint, reviewed in a Checkpoints tab.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"diff":"^7.0.0","highlight.js":"^11.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"29.1.1","react":"^18.3.1","tsdown":"^0.22.2","vitest":"^4.1.8","react-dom":"^18.3.1","typescript":"~5.7.2","@types/diff":"^7.0.2","@types/node":"^22.10.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.2","@deepseek-ai/dsh-fs":"^0.1.2-rc.1","vite-tsconfig-paths":"^6.1.1","@deepseek-ai/dsh-llm":"^0.1.2-rc.1","@deepseek-ai/dsh-agent":"^0.1.2-rc.1","@deepseek-ai/dsh-tools":"^0.1.2-rc.1","@deepseek-ai/dsh-session":"^0.1.2-rc.1","@deepseek-ai/dsh-commands":"^0.1.2-rc.1","@deepseek-ai/dsh-client-locale":"^0.1.2-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-primitives":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-conversation":"^0.1.2-rc.1"},"peerDependencies":{"react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-next-checkpoints_0.1.0_1788770148174_0.25624910419189373","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dsh-next/dsh-next-checkpoints","version":"0.2.0","author":"Rok Grabnar <sitegroove>","license":"MIT","_id":"@dsh-next/dsh-next-checkpoints@0.2.0","maintainers":[{"name":"sitegroove","email":"grabnarrok@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"},"engines":{"dsh":">=0.1.2-rc.1"}},"dist":{"shasum":"2da544f343ca4cd425b9a88b98a17e20a1cc2e0e","tarball":"https://registry.npmjs.org/@dsh-next/dsh-next-checkpoints/-/dsh-next-checkpoints-0.2.0.tgz","fileCount":40,"integrity":"sha512-gVlrq+8GAVxuEf/dtdx8RbdUf7aUy84CnwaMdJy4uwkW38G/huxQFn5U1yfr2GEm8AdyEmqIDX5lUAUGKHhoTw==","signatures":[{"sig":"MEUCIGVJit/4Y29VznIZvzx9xgPWNqmFBRPomh7tfdrKKH6xAiEA/DKlaEbb/taEFKsyc9fLF8w/2CTdNczp1Lsm9zc6coQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":965138},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","typecheck":"tsc --noEmit"},"_npmUser":{"name":"sitegroove","email":"grabnarrok@gmail.com"},"repository":{"url":"git+https://github.com/dsh-next/dsh-next-plugins.git","type":"git","directory":"packages/dsh-next-checkpoints"},"description":"DeepSeek Harness plugin: restore a session to a known-good moment — files and model history as one checkpoint, reviewed in a Checkpoints tab.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"diff":"^7.0.0","highlight.js":"^11.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"29.1.1","react":"^18.3.1","tsdown":"^0.22.2","vitest":"^4.1.8","react-dom":"^18.3.1","typescript":"~5.7.2","@types/diff":"^7.0.2","@types/node":"^22.10.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.2","@deepseek-ai/dsh-fs":"^0.1.2-rc.1","vite-tsconfig-paths":"^6.1.1","@deepseek-ai/dsh-llm":"^0.1.2-rc.1","@deepseek-ai/dsh-agent":"^0.1.2-rc.1","@deepseek-ai/dsh-tools":"^0.1.2-rc.1","@deepseek-ai/dsh-session":"^0.1.2-rc.1","@deepseek-ai/dsh-commands":"^0.1.2-rc.1","@deepseek-ai/dsh-client-locale":"^0.1.2-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-primitives":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-conversation":"^0.1.2-rc.1"},"peerDependencies":{"react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-next-checkpoints_0.2.0_1788812255466_0.2570966734497351","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"_id":"@dsh-next/dsh-next-checkpoints@0.2.1","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"},"engines":{"dsh":">=0.1.2-rc.1"}},"dist":{"shasum":"da0565bde50d4729cc1c59de00f08161145ca2e4","tarball":"https://registry.npmjs.org/@dsh-next/dsh-next-checkpoints/-/dsh-next-checkpoints-0.2.1.tgz","fileCount":40,"integrity":"sha512-AhCG1hBahBcrtiqd9PBiYMj0MV1ZV4smCv7jy8e8RLGc43pajuCx0cHscf4F1QUTkW7QM1nvTRWTnCy2zWu7AA==","signatures":[{"sig":"MEUCIDbrvOy2h30ifOr+058a+qm9pw3kR2VDeafPSo5U5Xc8AiEAiVvMCv+pMkZp18/DNmIftm1Dz6XYO1H3w+NFOI7sHn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCWDqq9tovCbXSDr6DAR9InqlxH02G2jsGTzTjaTbObdAIhAL+1WV0R3KjuYqdaZQDHjnqWhUyX1A87pMYi5nOipz20"}],"unpackedSize":965332},"main":"lib/index.js","name":"@dsh-next/dsh-next-checkpoints","type":"module","types":"lib/types/index.d.ts","author":"Rok Grabnar <sitegroove>","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"license":"MIT","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","typecheck":"tsc --noEmit"},"version":"0.2.1","_npmUser":{"name":"sitegroove","email":"grabnarrok@gmail.com"},"repository":{"url":"git+https://github.com/dsh-next/dsh-next-plugins.git","type":"git","directory":"packages/dsh-next-checkpoints"},"description":"DeepSeek Harness plugin: restore a session to a known-good moment — files and model history as one checkpoint, reviewed in a Checkpoints tab.","directories":{},"maintainers":[{"name":"sitegroove","email":"grabnarrok@gmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"diff":"^7.0.0","highlight.js":"^11.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"29.1.1","react":"^18.3.1","tsdown":"^0.22.2","vitest":"^4.1.8","react-dom":"^18.3.1","typescript":"~5.7.2","@types/diff":"^7.0.2","@types/node":"^22.10.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.2","@deepseek-ai/dsh-fs":"^0.1.2-rc.1","vite-tsconfig-paths":"^6.1.1","@deepseek-ai/dsh-llm":"^0.1.2-rc.1","@deepseek-ai/dsh-agent":"^0.1.2-rc.1","@deepseek-ai/dsh-tools":"^0.1.2-rc.1","@deepseek-ai/dsh-session":"^0.1.2-rc.1","@deepseek-ai/dsh-commands":"^0.1.2-rc.1","@deepseek-ai/dsh-client-locale":"^0.1.2-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-primitives":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-conversation":"^0.1.2-rc.1"},"peerDependencies":{"react":"^18.2.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-next-checkpoints_0.2.1_1789087415501_0.49105327240866514"}}},"time":{"created":"2026-09-07T08:35:47.955Z","modified":"2026-09-11T00:43:35.801Z","0.1.0":"2026-09-07T08:35:48.323Z","0.2.0":"2026-09-07T20:17:35.635Z","0.2.1":"2026-09-11T00:43:35.628Z"},"author":"Rok Grabnar <sitegroove>","license":"MIT","repository":{"url":"git+https://github.com/dsh-next/dsh-next-plugins.git","type":"git","directory":"packages/dsh-next-checkpoints"},"description":"DeepSeek Harness plugin: restore a session to a known-good moment — files and model history as one checkpoint, reviewed in a Checkpoints tab.","maintainers":[{"name":"sitegroove","email":"grabnarrok@gmail.com"}],"readme":"# checkpoints\n\nEnglish | [中文](README.zh.md)\n\nThis DeepSeek Harness plugin restores a session to a known-good moment:\nworking-tree files and model-visible history together. Review the work in the\n`Checkpoints` tab next to Chat and Trajectory. Click a checkpoint to inspect the\ncumulative file diff. Click `Rewind`, then confirm, to restore. Selecting a\nrow never restores.\n\n## How to use it\n\n1. Work as usual. A `Session start` checkpoint is saved when the session\n   begins, and another at the end of each turn.\n2. Open the `Checkpoints` tab. The checkpoint rail is on the right; newest\n   checkpoints sit at the top, ordered by descending timestamp.\n3. Click a row to inspect every file changed **up to** that checkpoint\n   (net vs the session baseline, then click a file for a GitHub-style unified preview with language highlighting).\n4. Click `Rewind` on that row. Read the confirm modal (later turns, dirty\n   paths, HEAD moved). Confirm to restore.\n5. To undo the first turn's files, rewind `Session start` — rewind to\n   `turn 1` keeps that turn's writes. After rewind, later checkpoints drop\n   off this generation and Chat opens a truncated session without later\n   turns. The previous session is archived.\n\n## Features\n\n### Checkpoints tab\n\nA checkpoint rail plus a file list. Each row shows a `Created`, `Deleted`, or\n`Modified` pill, GitHub-style `+N`/`-N` counts with a five-block bar, and a\nstruck-through path for deletes. The `Files` header shows the checkpoint total\nin the same format. While a turn is running, the latest row replaces `Rewind`\nwith a spinner and the file list plus line counts update live. Click a file to\nopen a GitHub-style unified preview (line numbers, hunk headers, language\nhighlighting); the preview header repeats the file time and `+N`/`-N` bar next\nto `Close`. Binary, too-large, invalid UTF-8, symlink, and directory paths get\na row without a status pill, not a fake create.\n\n### One checkpoint, files and history\n\nRewind writes the snapshot back to disk, then forks a child session whose\nlog ends at that checkpoint so Chat no longer shows later turns. It does\nnot run `git reset`, `git revert`, or `git checkout`. Commits made during\nthe session stay. The previous session is archived. If it was bound to a\nplugin worktree, that claim moves onto the child so it stays a worktree\nsession.\n\n### Honest warnings\n\nThe confirm modal warns when non-agent dirty paths would be overwritten, and\nwhen HEAD has moved since the checkpoint.\n\n## Install\n\n```sh\ndsh plugin --profile <name> add @dsh-next/dsh-next-checkpoints\n```\n\n`<name>` is your DSH profile (for example `web`). Reload the profile after\nadding the plugin.\n\n## Good to know\n\n- Needs DeepSeek Harness `0.1.2-rc.1` or newer.\n- Checkpoints are not git. The file list is this session's touched paths\n  (write/edit tools), not `git status`. A bash `mv` of a file this session\n  created is followed by content hash, so it still shows at the new path.\n  Files another session changes in the same folder are not listed. After\n  rewind, `git status` may look like later commits were undone as unstaged\n  changes — that is the honest state.\n- Refuse rewind while a turn is still running.\n- Contributors: see [CONTRIBUTING.md](https://github.com/dsh-next/dsh-next-plugins/blob/main/CONTRIBUTING.md).\n","readmeFilename":""}