dsh-journey 0.2.1 → 0.2.2

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/AGENT_INSTALL.md CHANGED
@@ -1,4 +1,6 @@
1
- # AGENT_INSTALL · dsh-journey
1
+ # AGENT_INSTALL · dsh-journey
2
+
3
+ > 用户说“把这个插件用起来”时,先读 `AI_GUIDE.md`。
2
4
 
3
5
  > 给管事的 AI:照这个做,不要猜。
4
6
 
@@ -6,7 +8,7 @@
6
8
 
7
9
  ```
8
10
  name: dsh-journey
9
- version: 0.2.1
11
+ version: 0.2.2
10
12
  display: Journey
11
13
  ```
12
14
 
@@ -30,9 +32,9 @@ profile: %USERPROFILE%\.dsh\profiles\desktop
30
32
  3 重启 DSH
31
33
  ```
32
34
 
33
- **不要手写 profile 的 journeyWorkspace**:
34
- demo 工作区已经随包放在 `demo\`,插件默认读它。
35
- 包内 `cordis.patch.yml` 不含任何本机路径。
35
+ **需要配置 journeyWorkspace**:
36
+ npm 包不含 demo;要读本机演示工作区或真实工作区,
37
+ 在 profile 的 `cordis.patch.yml` 里给 `journey` 配 `journeyWorkspace`。
36
38
 
37
39
  ## 验证
38
40
 
@@ -58,3 +60,4 @@ GET /wind-chain/journey/api/cards 返回 ok=true
58
60
  · 不要手改 profile 里的其他 bundle
59
61
  · 接口路径仍是 /wind-chain/journey/api/cards(历史路径,不是包名写错)
60
62
  ```
63
+
package/AI_GUIDE.md ADDED
@@ -0,0 +1,210 @@
1
+ # AI_GUIDE · 把一个新下载的 Journey 用起来
2
+
3
+ > 给任何被用户叫来“把这个插件用起来”的 AI。
4
+ > 先读本文件,再动手;不要猜路径、不要编数据。
5
+
6
+ ## 0 用户只要说一句
7
+
8
+ 用户可以只发:
9
+
10
+ ```
11
+ 读 AI_GUIDE.md,把这个插件用起来,生成一个演示工作区,然后告诉我怎么用、有什么问题、下一步建议。
12
+ ```
13
+
14
+ 你就按下面走。
15
+
16
+ ## 1 先确认这是什么
17
+
18
+ ```
19
+ Journey(风雨彩虹)
20
+ DSH 只读项目监控面板
21
+ 包名:dsh-journey
22
+ 入口:DSH 左侧栏 Journey
23
+ 数据:读工作区里的 状态.md / 计划.md,不在插件里写死
24
+ ```
25
+
26
+ 只读;不派活、不急停、不改项目。
27
+
28
+ ## 2 包结构
29
+
30
+ ```
31
+ dsh-journey\
32
+ package.json dsh.bundle + dsh.client
33
+ cordis.patch.yml host 注册(不含本机路径)
34
+ lib\index.js host:/wind-chain/journey/api/cards
35
+ lib\client.js client:侧栏入口 + main
36
+ lib\journey-data.js 数据层
37
+ public\index.html v362+作者页
38
+ scripts\make-demo.mjs 批量生成演示项目
39
+ AGENT_INSTALL.md 安装 / 验证 / 卸载
40
+ AI_GUIDE.md 本文件
41
+ ```
42
+
43
+ npm 包**不包含 demo**;demo 由本脚本生成本地目录。
44
+
45
+ ## 3 安装检查
46
+
47
+ 按 `AGENT_INSTALL.md` 装完并重启 DSH 后,确认:
48
+
49
+ ```
50
+ 1 左侧栏有 Journey
51
+ 2 点进去不是白屏
52
+ 3 GET /wind-chain/journey/api/cards 返回 ok=true
53
+ ```
54
+
55
+ 如果白屏:
56
+
57
+ ```
58
+ 先看是不是 DSH 共享浏览器渲染卡死
59
+ 再 reset 浏览器会话 / 重开面板
60
+ 不要先断言页面没内容
61
+ ```
62
+
63
+ ## 4 生成演示工作区
64
+
65
+ 用户没有现成工作区时:
66
+
67
+ ```powershell
68
+ node scripts\make-demo.mjs "D:\somewhere\journey-demo" 12
69
+ ```
70
+
71
+ 会生成:
72
+
73
+ ```
74
+ P01_潮汐表\
75
+ P02_词根\
76
+ ...
77
+ 每个项目三件:
78
+ README.md
79
+ 状态.md 五字段
80
+ 计划.md 阶段 + [x]
81
+ ```
82
+
83
+ 然后在 profile 的 `cordis.patch.yml` 里给 Journey 配:
84
+
85
+ ```yaml
86
+ - id: journey
87
+ name: dsh-journey
88
+ config:
89
+ journeyWorkspace: "D:\somewhere\journey-demo"
90
+ ```
91
+
92
+ 重启 DSH,面板就会出现 12 张卡。
93
+
94
+ ## 5 数据契约
95
+
96
+ 卡片由目录扫描得到:
97
+
98
+ ```
99
+ id 目录名前缀,如 P01
100
+ title 目录名去掉 P0x_ 前缀
101
+ status running / paused / done
102
+ current 状态.md 的「当前阶段」
103
+ why 状态.md 的「卡点」
104
+ round 保留字段,demo 为 0
105
+ budget 保留字段,demo 为 0
106
+ logs 当前 demo 为空
107
+ plan 计划.md 的阶段 + 勾选
108
+ demo true
109
+ ```
110
+
111
+ 状态推断:
112
+
113
+ ```
114
+ 当前阶段/卡点含「已完成/已归档」→ done
115
+ 卡点含「等/未定/未完成」→ paused
116
+ 否则 → running
117
+ ```
118
+
119
+ 计划格式:
120
+
121
+ ```
122
+ 阶段 1 打底
123
+ [x] 明确输入输出
124
+ [ ] 跑通最小流程
125
+ ```
126
+
127
+ ## 4.1 按用户给的信息建卡
128
+
129
+ 用户说“给我建一张卡 / 按这些项目建卡”时,不要直接写文件,先问五项:
130
+
131
+ ```
132
+ 1 标题(项目名)
133
+ 2 状态:在跑 / 等我 / 结束
134
+ 3 当前在做什么
135
+ 4 卡点是什么(没有就写“无”)
136
+ 5 计划:几个阶段、每阶段哪些已勾
137
+ ```
138
+
139
+ 收到后写 `cards.json`:
140
+
141
+ ```json
142
+ {
143
+ "cards": [
144
+ {
145
+ "id": "P13",
146
+ "title": "天气角标",
147
+ "status": "running",
148
+ "current": "主流程跑通;正在补细节",
149
+ "blocker": "无",
150
+ "plan": [
151
+ { "stage": "阶段 1 打底", "items": [["明确输入输出", true], ["跑通最小流程", true]] },
152
+ { "stage": "阶段 2 做出来", "items": [["补主功能", false]] }
153
+ ]
154
+ }
155
+ ]
156
+ }
157
+ ```
158
+
159
+ 然后:
160
+
161
+ ```powershell
162
+ node scripts\make-cards.mjs "D:\目标演示工作区" cards.json
163
+ ```
164
+
165
+ 状态映射:`running` / `paused` / `done`。
166
+ 计划按 `true/false` 写 `[x]` / `[ ]`。
167
+ 刷新面板即可看到新卡。
168
+
169
+ **原则**:用户没给的信息不要编;缺什么问什么,一次问完。
170
+
171
+ ## 6 验收
172
+
173
+ ```
174
+ 1 卡片数量 = 生成的项目数
175
+ 2 在跑 / 暂停 计数正确
176
+ 3 点一张卡,右栏显示「正在进行 / 卡点」
177
+ 4 再点右栏,显示「计划总览」
178
+ 5 点标题,作者页能开、能关
179
+ ```
180
+
181
+ ## 7 常见问题
182
+
183
+ ```
184
+ 刷新键只重绘,不重新拉接口
185
+ → 切换一次会话/重开面板才会重新加载数据
186
+
187
+ npm 包不带 demo
188
+ → 没配 journeyWorkspace 时,面板会空
189
+
190
+ 路由仅本机
191
+ → 远程访问前必须加 token
192
+
193
+ v362 是两态显示
194
+ → 结束归在暂停组,不是缺数据
195
+ ```
196
+
197
+ ## 8 给建议时不要越界
198
+
199
+ ```
200
+ 能说:数据模型、安装、演示、空态、刷新、真实 A 系列接入方案
201
+ 不能说:已经支持急停 / 派活 / 真实项目接入(还没做)
202
+ 不能改:A16 的 UI、A07 的材料、用户的项目文件
203
+ ```
204
+
205
+ ## 9 一句话
206
+
207
+ ```
208
+ 先装、再生成 demo、再验证、最后按数据契约给建议;
209
+ 不猜、不编、不把演示壳说成真实项目。
210
+ ```
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Journey(风雨彩虹)
2
2
 
3
- > 2026-11-13 | DSH 项目监控面板 | v0.2.1
3
+ > 给 AI:先读 `AI_GUIDE.md`。用户说“把这个插件用起来”时,照它做。
4
+
5
+ > 2026-11-13 | DSH 项目监控面板 | v0.2.2
4
6
  > 中文统称:风雨彩虹
5
7
 
6
8
  ## 是什么
@@ -43,7 +45,7 @@ bundle 加 dsh-journey
43
45
  ## 数据源
44
46
 
45
47
  ```
46
- demo\ 随包携带,默认读取:
48
+ demo 不再随 npm 包携带;本机演示需配置 journeyWorkspace:
47
49
  P01 潮汐表 / P02 词根 / P03 雨声
48
50
  ```
49
51
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-journey",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "displayName": "Journey",
5
5
  "profile": "desktop",
6
6
  "install": {
package/lib/index.js CHANGED
@@ -18,7 +18,6 @@ import { buildDemoJourneyData } from './journey-data.js';
18
18
  import { fileURLToPath } from 'node:url';
19
19
 
20
20
  const JOURNEY_PUBLIC = fileURLToPath(new URL('../public/', import.meta.url));
21
- const JOURNEY_DEMO = fileURLToPath(new URL('../demo/', import.meta.url));
22
21
 
23
22
  function isLoopback(req) {
24
23
  const addr = String(req?.socket?.remoteAddress || '');
@@ -927,8 +926,10 @@ export function apply(ctx, config) {
927
926
  }
928
927
  }
929
928
  try {
930
- const demoRoot = String(config?.journeyWorkspace ?? '').trim() || JOURNEY_DEMO;
931
- const data = buildDemoJourneyData({ workspaceRoot: demoRoot });
929
+ const demoRoot = String(config?.journeyWorkspace ?? '').trim();
930
+ const data = demoRoot
931
+ ? buildDemoJourneyData({ workspaceRoot: demoRoot })
932
+ : { cards: [], counts: { total: 0, running: 0, paused: 0, done: 0, needsHuman: 0 } };
932
933
  for (const card of data.cards) {
933
934
  const agent = card.sessionId ? ctx.agents.get(card.sessionId) : undefined;
934
935
  if (agent) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-journey",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Journey(风雨彩虹):DSH 项目监控面板,查看 A 系列项目卡片、当前动作与计划总览。",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -17,11 +17,12 @@
17
17
  "files": [
18
18
  "lib",
19
19
  "public",
20
- "demo",
21
20
  "cordis.patch.yml",
22
21
  "README.md",
23
22
  "AGENT_INSTALL.md",
24
- "install.manifest.json"
23
+ "install.manifest.json",
24
+ "AI_GUIDE.md",
25
+ "scripts"
25
26
  ],
26
27
  "dsh": {
27
28
  "bundle": {
@@ -0,0 +1,15 @@
1
+ import { buildMappedJourneyData } from '../lib/journey-data.js';
2
+
3
+ const args = process.argv.slice(2);
4
+ const get = (name, fallback = '') => {
5
+ const i = args.indexOf(`--${name}`);
6
+ return i >= 0 && args[i + 1] ? args[i + 1] : fallback;
7
+ };
8
+
9
+ const data = buildMappedJourneyData({
10
+ stateRoot: get('state-root', `${process.env.USERPROFILE}\\.dsh\\wind-chain`),
11
+ projectRoot: get('project-root', 'D:\\deepseek_work\\Z07_疾风连环'),
12
+ auditLimit: Number(get('audit-limit', '8')),
13
+ });
14
+
15
+ process.stdout.write(`${JSON.stringify(data, null, 2)}\n`);
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 按用户给的信息建卡片。
4
+ * 用法:node scripts/make-cards.mjs <目标目录> <cards.json>
5
+ *
6
+ * cards.json:
7
+ * {
8
+ * "cards": [
9
+ * {
10
+ * "id": "P13",
11
+ * "title": "天气角标",
12
+ * "status": "running", // running | paused | done
13
+ * "current": "主流程跑通;正在补细节",
14
+ * "blocker": "无",
15
+ * "plan": [
16
+ * { "stage": "阶段 1 打底", "items": [["明确输入输出", true], ["跑通最小流程", true]] },
17
+ * { "stage": "阶段 2 做出来", "items": [["补主功能", false]] }
18
+ * ]
19
+ * }
20
+ * ]
21
+ * }
22
+ */
23
+ import fs from 'node:fs';
24
+ import path from 'node:path';
25
+
26
+ const target = process.argv[2];
27
+ const jsonFile = process.argv[3];
28
+ if (!target || !jsonFile) {
29
+ console.error('用法:node scripts/make-cards.mjs <目标目录> <cards.json>');
30
+ process.exit(1);
31
+ }
32
+ const doc = JSON.parse(fs.readFileSync(jsonFile, 'utf8'));
33
+ const cards = Array.isArray(doc?.cards) ? doc.cards : [];
34
+ if (!cards.length) {
35
+ console.error('cards.json 里没有 cards 数组');
36
+ process.exit(1);
37
+ }
38
+ fs.mkdirSync(target, { recursive: true });
39
+
40
+ for (const c of cards) {
41
+ const id = String(c.id || '').trim();
42
+ const title = String(c.title || '').trim();
43
+ if (!id || !title) {
44
+ console.error('每张卡至少要有 id 和 title');
45
+ process.exit(1);
46
+ }
47
+ const status = ['running', 'paused', 'done'].includes(c.status) ? c.status : 'running';
48
+ const current = String(c.current || '暂无');
49
+ const blocker = String(c.blocker || '无');
50
+ const dir = path.join(target, `${id}_${title}`);
51
+ fs.mkdirSync(dir, { recursive: true });
52
+
53
+ fs.writeFileSync(path.join(dir, 'README.md'), `# ${title}\n\n## 问题\n\n${current}\n`, 'utf8');
54
+ fs.writeFileSync(path.join(dir, '状态.md'), `# 状态 · ${id}_${title}\n\n> 每次收工覆盖写,不追加;五字段\n\n当前阶段:${current}\n最近一次动作:按用户提供的信息录入\n下一步:按计划继续\n卡点:${blocker}\n最后更新:${new Date().toISOString().slice(0, 10)}\n`, 'utf8');
55
+
56
+ const plan = Array.isArray(c.plan) && c.plan.length ? c.plan : [];
57
+ const lines = [`# 计划 · ${id}_${title}`, '', '```'];
58
+ for (const stage of plan) {
59
+ lines.push(String(stage.stage || '阶段'));
60
+ for (const item of (Array.isArray(stage.items) ? stage.items : [])) {
61
+ const [text, done] = Array.isArray(item) ? item : [item, false];
62
+ lines.push(` [${done ? 'x' : ' '}] ${text}`);
63
+ }
64
+ lines.push('');
65
+ }
66
+ lines.push('```');
67
+ fs.writeFileSync(path.join(dir, '计划.md'), lines.join('\n'), 'utf8');
68
+ console.log(` ${id}_${title} ${status}`);
69
+ }
70
+ console.log(`已按用户信息生成 ${cards.length} 张卡:${target}`);
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 批量生成 Journey 演示项目。
4
+ * 用法:node scripts/make-demo.mjs <目标目录> [数量,默认 12]
5
+ * 生成:每个项目 README.md / 状态.md / 计划.md
6
+ */
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+
10
+ const target = process.argv[2];
11
+ const count = Math.max(1, Math.min(24, Number(process.argv[3] || 12)));
12
+ if (!target) {
13
+ console.error('用法:node scripts/make-demo.mjs <目标目录> [数量]');
14
+ process.exit(1);
15
+ }
16
+ fs.mkdirSync(target, { recursive: true });
17
+
18
+ const names = [
19
+ '潮汐表', '词根', '雨声', '书签整理', '错题地图', '播客剪辑',
20
+ '植物图鉴', '旧照片修复', '单词卡', '菜谱索引', '地铁换乘', '雨声混音',
21
+ '天气角标', '票据归档', '步数地图', '菜谱语音', '课程笔记', '桌面收纳',
22
+ '方言词典', '睡眠记录', '书摘卡片', '路线收藏', '图片压缩', '读书清单',
23
+ ];
24
+ const states = ['running', 'paused', 'done'];
25
+
26
+ for (let i = 0; i < count; i += 1) {
27
+ const id = `P${String(i + 1).padStart(2, '0')}`;
28
+ const name = names[i % names.length];
29
+ const status = states[i % states.length];
30
+ const dir = path.join(target, `${id}_${name}`);
31
+ fs.mkdirSync(dir, { recursive: true });
32
+
33
+ const current = status === 'done'
34
+ ? '已完成,产物在 dist\\'
35
+ : status === 'paused'
36
+ ? '主流程跑通;等确认范围'
37
+ : '主流程跑通;正在补细节';
38
+ const blocker = status === 'done' ? '无' : status === 'paused' ? '等你定范围' : '无';
39
+
40
+ fs.writeFileSync(path.join(dir, 'README.md'), `# ${name}
41
+
42
+ ## 问题
43
+
44
+ 给 ${id} 做一个小工具,先跑通最小流程。
45
+
46
+ ## 到哪一步
47
+
48
+ ${current}
49
+ `, 'utf8');
50
+
51
+ fs.writeFileSync(path.join(dir, '状态.md'), `# 状态 · ${id}_${name}
52
+
53
+ > 每次收工覆盖写,不追加;五字段
54
+
55
+ 当前阶段:${current}
56
+ 最近一次动作:今天推进了一步
57
+ 下一步:按计划继续
58
+ 卡点:${blocker}
59
+ 最后更新:${new Date().toISOString().slice(0, 10)}
60
+ `, 'utf8');
61
+
62
+ fs.writeFileSync(path.join(dir, '计划.md'), `# 计划 · ${id}_${name}
63
+
64
+ \`\`\`
65
+ 阶段 1 打底
66
+ [x] 明确输入输出
67
+ [${status === 'paused' ? ' ' : 'x'}] 跑通最小流程
68
+
69
+ 阶段 2 做出来
70
+ [ ] 补主功能
71
+ [ ] 补边界情况
72
+
73
+ 阶段 3 收口
74
+ [${status === 'done' ? 'x' : ' '}] 写 README
75
+ [ ] 导出可用版本
76
+ \`\`\`
77
+ `, 'utf8');
78
+ console.log(` ${id}_${name} ${status}`);
79
+ }
80
+ console.log(`已生成 ${count} 个演示项目:${target}`);
@@ -1,28 +0,0 @@
1
- # P01 潮汐表
2
-
3
- > 示例项目(虚构)。用于演示"**在跑**"状态。
4
-
5
- ## 问题
6
-
7
- 去海边之前要查潮汐,每次都要在网页上翻半天,还带广告。
8
-
9
- ## 方案
10
-
11
- 桌面小工具:读一份离线潮汐表,按日期输出当日高低潮两行。
12
-
13
- ## 怎么跑
14
-
15
- ```
16
- python tide.py --date 2026-11-13
17
- ```
18
-
19
- ## 到哪一步
20
-
21
- 解析器写完了,正在做命令行输出。
22
-
23
- ## 不做什么
24
-
25
- ```
26
- · 不做图形界面
27
- · 不联网(数据是离线表)
28
- ```
@@ -1,9 +0,0 @@
1
- # 状态 · P01_潮汐表
2
-
3
- > 每次收工覆盖写,不追加;五字段
4
-
5
- 当前阶段:解析器完成;正在做命令行输出
6
- 最近一次动作:10:20 跑通 2026 全年数据解析,0 错误
7
- 下一步:把高低潮按日切片,每天输出两行
8
- 卡点:无
9
- 最后更新:2026-11-13
@@ -1,17 +0,0 @@
1
- # 计划 · P01_潮汐表
2
-
3
- ```
4
- 阶段 1 读数据
5
- [x] 拿到离线潮汐表
6
- [x] 解析全年数据
7
- [ ] 校验闰年边界
8
-
9
- 阶段 2 出结果
10
- [ ] 按日切片
11
- [ ] 命令行输出高低潮 ← 下一步
12
- [ ] 支持 --date
13
-
14
- 阶段 3 收口
15
- [ ] 写 README
16
- [ ] 打包单文件
17
- ```
@@ -1,28 +0,0 @@
1
- # P02 词根
2
-
3
- > 示例项目(虚构)。用于演示"**停住、等我回一句话**"状态。
4
-
5
- ## 问题
6
-
7
- 背单词总在同一个词根上反复栽,散着背记不住。
8
-
9
- ## 方案
10
-
11
- 按词根聚类整理,做成可打印的单页——一页纸看完一批。
12
-
13
- ## 怎么跑
14
-
15
- ```
16
- 打开 词根.html(单文件,无依赖)
17
- ```
18
-
19
- ## 到哪一步
20
-
21
- 数据整理完了,**卡在一个决定上**:收录范围没定,写下去会返工。
22
-
23
- ## 不做什么
24
-
25
- ```
26
- · 不做背单词 App
27
- · 不做记忆曲线
28
- ```
@@ -1,9 +0,0 @@
1
- # 状态 · P02_词根
2
-
3
- > 每次收工覆盖写,不追加;五字段
4
-
5
- 当前阶段:整理完 120 个词根,等确定收录范围
6
- 最近一次动作:昨日 21:10 出第一版 120 词根表,去重后 96 个
7
- 下一步:确认"只收考试高频"还是"全收"
8
- 卡点:等我说一句话——范围未定,往下写会返工
9
- 最后更新:2026-11-12
@@ -1,15 +0,0 @@
1
- # 计划 · P02_词根
2
-
3
- ```
4
- 阶段 1 收词
5
- [x] 抓 120 个词根
6
- [x] 去重到 96
7
- [ ] 定收录范围 ← 下一步(等我一句话)
8
-
9
- 阶段 2 排版
10
- [ ] 单页 HTML
11
- [ ] 打印预览
12
-
13
- 阶段 3 收口
14
- [ ] 印一页纸交出去
15
- ```
@@ -1,28 +0,0 @@
1
- # P03 雨声
2
-
3
- > 示例项目(虚构)。用于演示"**已结束**"状态。
4
-
5
- ## 问题
6
-
7
- 写东西的时候需要稳定白噪音,现成的播放器都带广告、带推荐。
8
-
9
- ## 方案
10
-
11
- 循环播放一段 30 秒雨声,没有界面,只有托盘图标。
12
-
13
- ## 怎么跑
14
-
15
- ```
16
- dist\rain.exe
17
- ```
18
-
19
- ## 到哪一步
20
-
21
- 做完了,已归档。
22
-
23
- ## 不做什么
24
-
25
- ```
26
- · 不做歌单
27
- · 不做在线音源
28
- ```
@@ -1,9 +0,0 @@
1
- # 状态 · P03_雨声
2
-
3
- > 每次收工覆盖写,不追加;五字段
4
-
5
- 当前阶段:已完成,产物在 dist\
6
- 最近一次动作:09:40 打包成单文件,52 KB
7
- 下一步:无(已归档)
8
- 卡点:无
9
- 最后更新:2026-11-11
@@ -1,15 +0,0 @@
1
- # 计划 · P03_雨声
2
-
3
- ```
4
- 阶段 1 素材
5
- [x] 录 30 秒雨声
6
- [x] 无缝循环处理
7
-
8
- 阶段 2 播放器
9
- [x] 托盘图标
10
- [x] 开机自启开关
11
-
12
- 阶段 3 收口
13
- [x] 单文件打包
14
- [x] 说明一页
15
- ```
@@ -1,48 +0,0 @@
1
- # 说明 · 演示工作区
2
-
3
- > 用途:社团演示只跑这个目录 | 建:2026-11-13 | 归属:A07
4
- > 性质:**纯示例**。三个虚构项目,不含任何真实项目、日志、隐私
5
-
6
- ## 为什么要有这个
7
-
8
- 自用工作区 `D:\deepseek_work` 里有真实项目、日志和隐私,**不能拿去演示**。
9
- 插件必须把"工作区路径"当参数(见 `技术资料\疾风连环_与工作站的关系.md` §6),
10
- 于是我们给它一个干净的小目录:插件装好那一刻,指向这里就能开演。
11
-
12
- ## 里面有什么
13
-
14
- ```
15
- P01_潮汐表 在跑 演"它正在干什么"
16
- P02_词根 等我说一句 演"为什么停"和"说一句话就能继续"
17
- P03_雨声 结束 演"收口长什么样"
18
- ```
19
-
20
- 三个项目在面板上的样子:`◎` 在跑 / `○` 空闲(含"等我"与"已结束")。
21
- **v362 没有单独的"结束"标记**——救星查 A16 记录确认,三态是 NEW / 在跑 / 空闲。
22
- 所以 P03 会落在"空闲"组里,靠卡片第一句"已结束,无需处理"表达收口,不靠形状区分。
23
- 演示脚本 §3 的动线就是照这三张卡排的。
24
-
25
- ## 每个项目固定三件
26
-
27
- ```
28
- README.md 问题 / 方案 / 怎么跑 / 到哪一步
29
- 状态.md 五字段(当前阶段 / 最近动作 / 下一步 / 卡点 / 最后更新)
30
- 计划.md 阶段 + 勾选 + ← 下一步
31
- ```
32
-
33
- ## 和插件的关系
34
-
35
- ```
36
- · 插件的工作区路径指向本目录,不指向 D:\deepseek_work
37
- · 数据格式以插件定稿为准;计划.md 是我方提议格式,
38
- 若插件定了别的 schema,只改这类文件,不动其他
39
- · 目录名前缀(P0x)如需改成 A/Z,只改文件夹名
40
- ```
41
-
42
- ## 三条规矩
43
-
44
- ```
45
- · 不往这里拷真实材料(一拷就污染,下次演示还得重来)
46
- · 演示前先跑一遍:三个状态都要对得上
47
- · 演完不删,下次彩排还要用
48
- ```