@aa2246740/dsh-resume 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -2,32 +2,32 @@
2
2
 
3
3
  [中文](README.md)
4
4
 
5
- Bring local Codex, Claude Code, Cursor, Grok, Pi, and ZCode session context into DeepSeek Harness to continue unfinished work.
5
+ Bring local Codex, Claude Code, Cursor, Grok, Pi, Qoder, WorkBuddy, and ZCode session context into DeepSeek Harness to continue unfinished work.
6
6
 
7
7
  ## Install
8
8
 
9
- **Version 0.2.6 is verified against DeepSeek Harness 0.2.0-rc.2.** Both the package and repository contain compiled plugin files; no Harness source checkout or local build is required. Python 3 is required to read history. Compressed Codex rollouts additionally require `zstd`.
9
+ **Version 0.2.7 is verified against DeepSeek Harness 0.2.1-rc.5.** Both the package and repository contain compiled plugin files; no Harness source checkout or local build is required. Python 3 is required to read history. Compressed Codex rollouts additionally require `zstd`.
10
10
 
11
11
  ### Official Desktop app
12
12
 
13
13
  1. Open **Plugins → Add plugin** (under Settings in some versions).
14
- 2. Enter `github:aa2246740/dsh-resume#v0.2.6` in **Package name or address**, then install and enable it.
15
- 3. Follow the installer's activation instructions. Type `/resume-` in the composer and check that all six commands below appear.
14
+ 2. Enter `github:aa2246740/dsh-resume#v0.2.7` in **Package name or address**, then install and enable it.
15
+ 3. Follow the installer's activation instructions. Type `/resume-` in the composer and check that all eight commands below appear.
16
16
 
17
- Alternatively, download `dsh-resume-0.2.6.tgz` from the [v0.2.6 Release](https://github.com/aa2246740/dsh-resume/releases/tag/v0.2.6) and enter its absolute path in the same installer. Desktop uses its own profile; do not use Web Host commands to install into Desktop.
17
+ Alternatively, download `dsh-resume-0.2.7.tgz` from the [v0.2.7 Release](https://github.com/aa2246740/dsh-resume/releases/tag/v0.2.7) and enter its absolute path in the same installer. Desktop uses its own profile; do not use Web Host commands to install into Desktop.
18
18
 
19
19
  ### Web Host
20
20
 
21
21
  Use the official CLI:
22
22
 
23
23
  ```sh
24
- dsh plugin --profile web add github:aa2246740/dsh-resume#v0.2.6
24
+ dsh plugin --profile web add github:aa2246740/dsh-resume#v0.2.7
25
25
  ```
26
26
 
27
27
  Or, from the downloaded archive's directory:
28
28
 
29
29
  ```sh
30
- dsh plugin --profile web add ./dsh-resume-0.2.6.tgz
30
+ dsh plugin --profile web add ./dsh-resume-0.2.7.tgz
31
31
  ```
32
32
 
33
33
  The official `dsh` command and pnpm must be available. Node.js must be `^22.19.0` or `>=24.0.0`. Use the existing Web Host's `DSH_HOME`. This only installs into the Web profile, not Desktop. Follow the official installer's activation result. If it requests a restart, exit and reopen the original Host normally; do not start another Host alongside it.
@@ -44,7 +44,7 @@ dsh plugin --profile web remove dsh-resume
44
44
 
45
45
  ## Usage
46
46
 
47
- Type `/resume-claude`, or the matching command for the other five. The plugin reads that local session, pulls context that can still be handed off, and writes a card into the current DSH chat. It does not restart the old process or rewrite anyone else's session files.
47
+ Type `/resume-claude`, or the matching command for the other seven. The plugin reads that local session, pulls context that can still be handed off, and writes a card into the current DSH chat. It does not restart the old process or rewrite anyone else's session files.
48
48
 
49
49
  ![Composer with /resume-claude typed](docs/screenshots/composer-resume-claude.png)
50
50
 
@@ -58,7 +58,7 @@ The six sections are objective, files, done, remaining, stopped at, and reader w
58
58
 
59
59
  ## Commands
60
60
 
61
- Read-only. Foreign session stores are not modified. System prompts, hidden reasoning, encrypted or corrupt records are dropped or marked unavailable. History conclusions start as `HISTORY_REPORTED`. Only facts checked in the current workspace this turn are `CURRENT_OBSERVED`. Grok reads visible `updates.jsonl` only. Pi follows the current branch only. ZCode reads `cli/db/db.sqlite` only and does not replay calls or revive the CLI. Compaction is a warning; older rows still in the database are kept. Abandoned `v2/sessions` and `cli/rollout` JSONL are not the primary store. Projects JSONL is a warned fallback only when sqlite is absent.
61
+ Read-only. Foreign session stores are not modified. System prompts, hidden reasoning, encrypted or corrupt records are dropped or marked unavailable. History conclusions start as `HISTORY_REPORTED`. Only facts checked in the current workspace this turn are `CURRENT_OBSERVED`. Grok reads visible `updates.jsonl` only. Pi follows the current branch only. ZCode reads `cli/db/db.sqlite` only and does not replay calls or revive the CLI. Compaction is a warning; older rows still in the database are kept. Abandoned `v2/sessions` and `cli/rollout` JSONL are not the primary store. Projects JSONL is a warned fallback only when sqlite is absent. Qoder reads the Claude-Code-shaped `projects/<dir-slug>/<session>.jsonl` transcripts under `QODER_CONFIG_DIR` (default `~/.qoder`, `QODER_HOME` accepted as a fallback alias) plus the IDE's flat `SharedClientCache/cli/projects` transcripts (overridable with `QODER_IDE_CACHE_DIR`). The encrypted `state.json` siblings, `logs/sessions` run logs, `.auth` credentials, and `settings.json` are never read; `isSidechain` subagent records and hidden reasoning are skipped with a warning. WorkBuddy reads `projects/<workspace>/<session id>.jsonl` only (config root resolves `WORKBUDDY_CONFIG_DIR` → `CODEBUDDY_CONFIG_DIR` → `~/.workbuddy-ai`/`~/.workbuddy`), never replays calls or revives the app; hidden reasoning, meta/compact/steer/teammate records, and quick-ask scratch sessions are excluded, and the `workbuddy.db` index is never read.
62
62
 
63
63
  | Command | Source |
64
64
  | --- | --- |
@@ -67,6 +67,8 @@ Read-only. Foreign session stores are not modified. System prompts, hidden reaso
67
67
  | `/resume-cursor [latest \| session id \| path \| title]` | Cursor |
68
68
  | `/resume-grok [latest \| session id \| path \| title]` | Grok |
69
69
  | `/resume-pi [latest \| session id \| path \| title]` | Pi |
70
+ | `/resume-qoder [latest \| session id \| path \| title]` | Qoder CLI / IDE |
71
+ | `/resume-workbuddy [latest \| session id \| path \| title]` | WorkBuddy |
70
72
  | `/resume-zcode [latest \| session id \| path \| title]` | ZCode |
71
73
 
72
74
  ## Develop
package/README.md CHANGED
@@ -1,53 +1,33 @@
1
- # npm installation for DSH 0.2.1-rc.5
2
-
3
- This npm distribution uses the existing `@aa2246740/dsh-resume` package. Install it under the original `dsh-resume` alias so the bundled Cordis module and client IDs keep resolving correctly.
4
-
5
- In the official Desktop plugin manager, enter:
6
-
7
- ```text
8
- dsh-resume@npm:@aa2246740/dsh-resume@0.2.6
9
- ```
10
-
11
- For Web:
12
-
13
- ```sh
14
- dsh plugin --profile web add dsh-resume@npm:@aa2246740/dsh-resume@0.2.6
15
- ```
16
-
17
- The runtime files match the [dsh-resume v0.2.6 release](https://github.com/aa2246740/dsh-resume/releases/tag/v0.2.6). Only the npm package name, publish configuration, and this installation note differ.
18
-
19
- ---
20
-
21
1
  # dsh-resume
22
2
 
23
3
  [English](README.en.md)
24
4
 
25
- 把 Codex、Claude Code、Cursor、Grok、Pi、ZCode 的本机会话整理成可继续工作的上下文,在 DeepSeek Harness 中接着做。
5
+ 把 Codex、Claude Code、Cursor、Grok、Pi、Qoder、WorkBuddy、ZCode 的本机会话整理成可继续工作的上下文,在 DeepSeek Harness 中接着做。
26
6
 
27
7
  ## 安装
28
8
 
29
- **0.2.6 面向 DeepSeek Harness 0.2.0-rc.2 验证。** 安装包和仓库均包含编译好的插件,无需下载 Harness 源码或自行构建。读取历史需要本机有 Python 3;读取压缩的 Codex rollout 另需 `zstd`。
9
+ **0.2.7 面向 DeepSeek Harness 0.2.1-rc.5 验证。** 安装包和仓库均包含编译好的插件,无需下载 Harness 源码或自行构建。读取历史需要本机有 Python 3;读取压缩的 Codex rollout 另需 `zstd`。
30
10
 
31
11
  ### 官方桌面端
32
12
 
33
13
  1. 打开 **插件 → 添加插件**(部分版本入口在设置里)。
34
- 2. 在 **包名或地址** 中填入 `github:aa2246740/dsh-resume#v0.2.6`,然后安装并启用。
35
- 3. 按安装器提示完成激活,在输入框输入 `/resume-`,确认能看到下面列出的六条命令。
14
+ 2. 在 **包名或地址** 中填入 `github:aa2246740/dsh-resume#v0.2.7`,然后安装并启用。
15
+ 3. 按安装器提示完成激活,在输入框输入 `/resume-`,确认能看到下面列出的八条命令。
36
16
 
37
- 也可以在 [v0.2.6 Release](https://github.com/aa2246740/dsh-resume/releases/tag/v0.2.6) 下载 `dsh-resume-0.2.6.tgz`,把该文件的绝对路径填入同一安装框。桌面端使用自己的 desktop profile,无需运行 Web Host 命令。
17
+ 也可以在 [v0.2.7 Release](https://github.com/aa2246740/dsh-resume/releases/tag/v0.2.7) 下载 `dsh-resume-0.2.7.tgz`,把该文件的绝对路径填入同一安装框。桌面端使用自己的 desktop profile,无需运行 Web Host 命令。
38
18
 
39
19
  ### Web Host
40
20
 
41
21
  使用官方 CLI:
42
22
 
43
23
  ```sh
44
- dsh plugin --profile web add github:aa2246740/dsh-resume#v0.2.6
24
+ dsh plugin --profile web add github:aa2246740/dsh-resume#v0.2.7
45
25
  ```
46
26
 
47
27
  或在下载的安装包所在目录运行:
48
28
 
49
29
  ```sh
50
- dsh plugin --profile web add ./dsh-resume-0.2.6.tgz
30
+ dsh plugin --profile web add ./dsh-resume-0.2.7.tgz
51
31
  ```
52
32
 
53
33
  需要官方 `dsh` 和 pnpm 可用,Node.js 版本为 `^22.19.0` 或 `>=24.0.0`。使用与现有 Web Host 相同的 `DSH_HOME`;这条命令只安装到 Web profile,不会替桌面端安装。按官方安装器返回的提示完成激活;只有它要求重启时,再正常退出并重开原来的 Host,不要启动第二个 Host。
@@ -64,7 +44,7 @@ dsh plugin --profile web remove dsh-resume
64
44
 
65
45
  ## 使用
66
46
 
67
- 输入 `/resume-claude`,另外五条同理。它只读本机那次会话,抽出还能接手的上下文,写成一张交接卡。旧进程不会被拉起来,别人的会话文件也不会被改。
47
+ 输入 `/resume-claude`,另外七条同理。它只读本机那次会话,抽出还能接手的上下文,写成一张交接卡。旧进程不会被拉起来,别人的会话文件也不会被改。
68
48
 
69
49
  ![官方 composer 已输入 /resume-claude](docs/screenshots/composer-resume-claude.png)
70
50
 
@@ -78,7 +58,7 @@ dsh plugin --profile web remove dsh-resume
78
58
 
79
59
  ## 命令
80
60
 
81
- 只读,不改任何一家的会话仓库。系统提示、隐藏推理、加密或坏掉的记录要么丢掉,要么标明不可用。历史里的结论先标成 `HISTORY_REPORTED`,这轮在当前仓库里核对过的才是 `CURRENT_OBSERVED`。Grok 只读看得见的 `updates.jsonl`。Pi 只跟当前这条分支。ZCode 只读 `cli/db/db.sqlite`,不回放调用、不复活进程。压缩只标成警告,库里仍在的更早记录会保留。废弃的 `v2/sessions` 和 `cli/rollout` JSONL 不是主存储;只有 sqlite 不在时,才对 `projects/` 下的 JSONL 做带警告的尽力读取。
61
+ 只读,不改任何一家的会话仓库。系统提示、隐藏推理、加密或坏掉的记录要么丢掉,要么标明不可用。历史里的结论先标成 `HISTORY_REPORTED`,这轮在当前仓库里核对过的才是 `CURRENT_OBSERVED`。Grok 只读看得见的 `updates.jsonl`。Pi 只跟当前这条分支。ZCode 只读 `cli/db/db.sqlite`,不回放调用、不复活进程。压缩只标成警告,库里仍在的更早记录会保留。废弃的 `v2/sessions` 和 `cli/rollout` JSONL 不是主存储;只有 sqlite 不在时,才对 `projects/` 下的 JSONL 做带警告的尽力读取。Qoder 只读 `QODER_CONFIG_DIR`(默认 `~/.qoder`,可用 `QODER_HOME` 兜底)`projects/<目录别名>/<会话>.jsonl` 转录,以及 Qoder IDE 的 `SharedClientCache/cli/projects` 平铺转录(可用 `QODER_IDE_CACHE_DIR` 覆盖)。加密的 `state.json`、`logs/sessions` 运行日志、`.auth` 凭据和 `settings.json` 一律不读;`isSidechain` 子代理记录和隐藏推理跳过并计警告。WorkBuddy 只读 `projects/<工作区>/<会话 id>.jsonl`(配置根目录按 `WORKBUDDY_CONFIG_DIR` → `CODEBUDDY_CONFIG_DIR` → `~/.workbuddy-ai`/`~/.workbuddy` 解析),不回放调用、不复活应用;隐藏推理、meta/compact/steer/teammate 记录和 quick-ask 草稿会话都会被跳过,`workbuddy.db` 只是索引、不读取。
82
62
 
83
63
  | 命令 | 从哪接着 |
84
64
  | --- | --- |
@@ -87,6 +67,8 @@ dsh plugin --profile web remove dsh-resume
87
67
  | `/resume-cursor [latest \| 会话 id \| 路径 \| 标题]` | Cursor |
88
68
  | `/resume-grok [latest \| 会话 id \| 路径 \| 标题]` | Grok |
89
69
  | `/resume-pi [latest \| 会话 id \| 路径 \| 标题]` | Pi |
70
+ | `/resume-qoder [latest \| 会话 id \| 路径 \| 标题]` | Qoder CLI / IDE |
71
+ | `/resume-workbuddy [latest \| 会话 id \| 路径 \| 标题]` | WorkBuddy |
90
72
  | `/resume-zcode [latest \| 会话 id \| 路径 \| 标题]` | ZCode |
91
73
 
92
74
  ## 开发
package/lib/dsh-resume.js CHANGED
@@ -10,6 +10,8 @@ const FOREIGN_SESSION_PROVIDERS = [
10
10
  "cursor",
11
11
  "grok",
12
12
  "pi",
13
+ "qoder",
14
+ "workbuddy",
13
15
  "zcode"
14
16
  ];
15
17
  const FOREIGN_SESSION_ACTIONS = ["show", "list"];
@@ -269,6 +271,20 @@ const RESUME_SKILL_SPECS = [
269
271
  description: "继续当前工作目录中的 Pi 会话;可附会话 ID、JSONL 路径或标题关键词。",
270
272
  recoveryBoundary: "The reader follows Pi's current active leaf only and excludes thinking, hooks, system messages, and extension-injected records."
271
273
  },
274
+ {
275
+ name: "resume-qoder",
276
+ provider: "qoder",
277
+ product: "Qoder",
278
+ description: "继续当前工作目录中的 Qoder 会话;可附会话 ID、记录路径或标题关键词。",
279
+ recoveryBoundary: "The reader uses Qoder transcript JSONL under projects/ in QODER_CONFIG_DIR (or ~/.qoder, QODER_HOME alias) plus the IDE SharedClientCache/cli/projects root. It never reads encrypted state.json siblings, logs/sessions run logs, .auth credentials, or settings.json, and skips isSidechain subagent records and hidden reasoning."
280
+ },
281
+ {
282
+ name: "resume-workbuddy",
283
+ provider: "workbuddy",
284
+ product: "WorkBuddy",
285
+ description: "继续当前工作目录中的 WorkBuddy 会话;可附会话 ID、JSONL 路径或标题关键词。",
286
+ recoveryBoundary: "The reader scans WorkBuddy/CodeBuddy projects JSONL (projects/<slug>/<sessionId>.jsonl) under the resolved config root and never replays calls or revives the app. Hidden reasoning, meta/compact/steer/teammate records, and quick-ask scratch sessions are excluded; the workbuddy.db index is not read."
287
+ },
272
288
  {
273
289
  name: "resume-zcode",
274
290
  provider: "zcode",
@@ -277,7 +293,7 @@ const RESUME_SKILL_SPECS = [
277
293
  recoveryBoundary: "The reader uses the ZCode sqlite store at cli/db/db.sqlite and does not replay calls or revive the CLI. Abandoned v2 sessions and cli/rollout JSONL are ignored. Projects JSONL is a warned fallback only when sqlite is absent. Compaction is a summary marker; older rows still stored are kept."
278
294
  }
279
295
  ];
280
- /** One source of truth for all six user-only slash skills. */
296
+ /** One source of truth for all user-only slash skills. */
281
297
  function skillRegistration(spec) {
282
298
  return {
283
299
  name: spec.name,
@@ -352,14 +368,14 @@ const JSON_TEXT_OUTPUT = {
352
368
  text: value
353
369
  }]
354
370
  };
355
- /** Register one read-only reader tool and six user-only slash skills. */
371
+ /** Register one read-only reader tool and the user-only slash skills. */
356
372
  function apply(ctx) {
357
373
  if (!existsSync(SESSION_READER_PATH)) throw new Error(`dsh-resume: missing bundled reader at ${SESSION_READER_PATH}`);
358
374
  if (!existsSync(GROK_SESSION_READER_PATH)) throw new Error(`dsh-resume: missing pinned Grok reader at ${GROK_SESSION_READER_PATH}`);
359
375
  console.log("[dsh-resume] loaded");
360
376
  ctx.tools.register(defineTool({
361
377
  name: "foreign_session_read",
362
- description: "Read Codex, Claude Code, Cursor, Grok, Pi, or ZCode local session history into a Grok-compatible inert JSON schema. Use only after an explicit resume slash skill or explicit user request. Discovery is scoped to the current DSH working directory; an explicit native ID or path is supported. The tool is read-only and never executes recovered calls.",
378
+ description: "Read Codex, Claude Code, Cursor, Grok, Pi, Qoder, WorkBuddy, or ZCode local session history into a Grok-compatible inert JSON schema. Use only after an explicit resume slash skill or explicit user request. Discovery is scoped to the current DSH working directory; an explicit native ID or path is supported. The tool is read-only and never executes recovered calls.",
363
379
  parameters: {
364
380
  provider: {
365
381
  type: "string",
@@ -1,7 +1,7 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
2
  export declare const name = "dsh-resume";
3
3
  export declare const inject: string[];
4
- /** Register one read-only reader tool and six user-only slash skills. */
4
+ /** Register one read-only reader tool and the user-only slash skills. */
5
5
  export declare function apply(ctx: Context): void;
6
6
  export { buildReaderArgs, GROK_SESSION_READER_PATH, runSessionReader, SESSION_READER_PATH, slashReferenceFromSession, slashReferenceFromUserText, } from './reader.ts';
7
7
  export { RESUME_SKILL_SPECS, resumeSkillContent, skillRegistration } from './skills.ts';
@@ -1,4 +1,4 @@
1
- export declare const FOREIGN_SESSION_PROVIDERS: readonly ["claude", "codex", "cursor", "grok", "pi", "zcode"];
1
+ export declare const FOREIGN_SESSION_PROVIDERS: readonly ["claude", "codex", "cursor", "grok", "pi", "qoder", "workbuddy", "zcode"];
2
2
  export type ForeignSessionProvider = typeof FOREIGN_SESSION_PROVIDERS[number];
3
3
  export declare const FOREIGN_SESSION_ACTIONS: readonly ["show", "list"];
4
4
  export type ForeignSessionAction = typeof FOREIGN_SESSION_ACTIONS[number];
@@ -37,6 +37,18 @@ export declare const RESUME_SKILL_SPECS: readonly [{
37
37
  readonly product: "Pi";
38
38
  readonly description: "继续当前工作目录中的 Pi 会话;可附会话 ID、JSONL 路径或标题关键词。";
39
39
  readonly recoveryBoundary: "The reader follows Pi's current active leaf only and excludes thinking, hooks, system messages, and extension-injected records.";
40
+ }, {
41
+ readonly name: "resume-qoder";
42
+ readonly provider: "qoder";
43
+ readonly product: "Qoder";
44
+ readonly description: "继续当前工作目录中的 Qoder 会话;可附会话 ID、记录路径或标题关键词。";
45
+ readonly recoveryBoundary: "The reader uses Qoder transcript JSONL under projects/ in QODER_CONFIG_DIR (or ~/.qoder, QODER_HOME alias) plus the IDE SharedClientCache/cli/projects root. It never reads encrypted state.json siblings, logs/sessions run logs, .auth credentials, or settings.json, and skips isSidechain subagent records and hidden reasoning.";
46
+ }, {
47
+ readonly name: "resume-workbuddy";
48
+ readonly provider: "workbuddy";
49
+ readonly product: "WorkBuddy";
50
+ readonly description: "继续当前工作目录中的 WorkBuddy 会话;可附会话 ID、JSONL 路径或标题关键词。";
51
+ readonly recoveryBoundary: "The reader scans WorkBuddy/CodeBuddy projects JSONL (projects/<slug>/<sessionId>.jsonl) under the resolved config root and never replays calls or revives the app. Hidden reasoning, meta/compact/steer/teammate records, and quick-ask scratch sessions are excluded; the workbuddy.db index is not read.";
40
52
  }, {
41
53
  readonly name: "resume-zcode";
42
54
  readonly provider: "zcode";
@@ -44,7 +56,7 @@ export declare const RESUME_SKILL_SPECS: readonly [{
44
56
  readonly description: "继续当前工作目录中的 ZCode 会话;可附会话 ID、记录路径或标题关键词。";
45
57
  readonly recoveryBoundary: "The reader uses the ZCode sqlite store at cli/db/db.sqlite and does not replay calls or revive the CLI. Abandoned v2 sessions and cli/rollout JSONL are ignored. Projects JSONL is a warned fallback only when sqlite is absent. Compaction is a summary marker; older rows still stored are kept.";
46
58
  }];
47
- /** One source of truth for all six user-only slash skills. */
59
+ /** One source of truth for all user-only slash skills. */
48
60
  export declare function skillRegistration(spec: ResumeSkillSpec): SkillRegistration;
49
61
  export declare function resumeSkillContent(spec: ResumeSkillSpec): string;
50
62
  //# sourceMappingURL=skills.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aa2246740/dsh-resume",
3
- "version": "0.2.6",
4
- "description": "Continue Codex, Claude Code, Cursor, Grok, Pi, and ZCode work in DeepSeek Harness.",
3
+ "version": "0.2.7",
4
+ "description": "Continue Codex, Claude Code, Cursor, Grok, Pi, Qoder, WorkBuddy, and ZCode work in DeepSeek Harness.",
5
5
  "type": "module",
6
6
  "main": "lib/dsh-resume.js",
7
7
  "types": "lib/types/dsh-resume.d.ts",
@@ -53,6 +53,7 @@
53
53
  "cursor",
54
54
  "grok",
55
55
  "pi-coding-agent",
56
+ "workbuddy",
56
57
  "zcode",
57
58
  "session-handoff"
58
59
  ],
@@ -85,9 +86,5 @@
85
86
  "bundle": {
86
87
  "patch": "./cordis.patch.yml"
87
88
  }
88
- },
89
- "publishConfig": {
90
- "access": "public",
91
- "registry": "https://registry.npmjs.org/"
92
89
  }
93
90
  }