@jiugeqqqqq/dsh-house 0.3.0 → 0.3.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/CHANGELOG.md ADDED
@@ -0,0 +1,50 @@
1
+ # 更新日志
2
+
3
+ > 每次发版都必须在这里写一条:改了什么、为什么改、别人要不要跟着动。
4
+ > 版本号跟 `package.json` 走,`npm i` 的人看这里就知道升了什么。
5
+
6
+ ## 0.3.2 — 2026-10-29
7
+
8
+ - 内容同 0.3.1:`house_write` + 两条轴引导。
9
+ - 0.3.1 发布时 registry 卡在 staged(`npm publish` 返回成功,但 `npm view` 查不到),按惯例版本 +1 重发。**0.3.1 永久作废,别装。**
10
+
11
+ ## 0.3.1 — 2026-10-29
12
+
13
+ **新增写积木的能力,积木终于能自己长出来。**
14
+
15
+ - 新增 `house_write`:往积木里写一篇(`file` + `content`,默认追加;`mode: overwrite` 才整篇重写)。
16
+ 之前只有 `house_add`(记清单一行)和 `house_search`(翻积木),**没有写积木的工具**——别人装完 `knowledge` 一直是空的。
17
+ - 系统提示里教「两条轴」:能力型(`手机-接入与操作`,回答「怎么做」)和任务型(`任务-调通一直发`,回答「那段轮对话干了什么」)。
18
+ 任务轴按时间轴切,一段任务一篇,要求覆盖全程、不重不漏。
19
+ - `house_write` 的描述点名两种命名都行。
20
+ - 插件 README 增加「积木怎么组织:两条轴」一节。
21
+
22
+ > 升级提醒:如果对方有工具白名单(比如 QQ 桥接的 `qq-tool-restrict` / `dsh-qq-guard`),
23
+ > 要把 `house_add`、`house_write`、`house_search` 三个都加进去,否则调了会被拒。
24
+
25
+ ## 0.3.0 — 2026-10-28
26
+
27
+ - 新增 `house_add`:模型自己往清单加一行(`text` + 可选 `group`)。
28
+ - 新增 `house_search`:在 `knowledge` 目录里按关键词翻原文(递归、跳过 README)。
29
+ - 启动时自动建 `knowledge` 目录 + 带说明的 `README.md`,别人装完知道往里写什么。
30
+ - 系统提示里带用法引导(之前只注入清单、不告诉模型去哪翻)。
31
+
32
+ ## 0.2.3 — 2026-10-27
33
+
34
+ - 修别人装完侧栏不出现:包名和 patch 名统一成 `@jiugeqqqqq/dsh-house`,`inject` 写 `slots`,`ctx.get('slots')` 兼容 rc.3。
35
+
36
+ ## 0.2.x — 2026-10-25 ~ 10-27
37
+
38
+ - 侧边栏「房子」页:搜索、增、改、删(删除二次确认)。
39
+ - 清单每轮注入系统提示,改完立刻生效,不用重启。
40
+ - 「搜历史」:翻会话存档里被压缩掉的原文。
41
+ - 写回前自动备份 `house.md.bak-<时间戳>`。
42
+ - `autoRotate`(可选,默认关):清单改过且 `pendingGroup` 清空时,调桥接换新会话。
43
+ - 每日自查 npm 新版本(只提示,不自动装)。
44
+
45
+ ## 0.1.x — 2026-10-24
46
+
47
+ - 初始版本:清单 + 页面。
48
+
49
+ ---
50
+ 格式约定:`## 版本 — 日期`,下面用短句列改动,先说「用户能感知到什么」,再说实现。
package/README.md CHANGED
@@ -37,17 +37,35 @@ dsh plugin --profile web add @jiugeqqqqq/dsh-house
37
37
  <DSH_HOME>\logs\... # 启动日志里会有 dsh-house: 房子清单 = ...
38
38
  ```
39
39
 
40
- ## 给模型的两个工具(0.3.0 起)
40
+ ## 给模型的三个工具(0.3.1 起)
41
41
 
42
- 装完模型自己能维护清单,不用你手动改:
42
+ 装完模型自己能维护清单和积木,不用你手动改:
43
43
 
44
44
  - `house_add`:做完一件大事往清单加一行(`text` + 可选 `group`,默认「已经有的」)
45
+ - `house_write`:往积木里写一篇(`file` + `content`,默认追加;`mode: overwrite` 才整篇重写)
45
46
  - `house_search`:在积木(`knowledge` 目录里的 .md)里按关键词翻原文
46
47
 
47
- 系统提示里会带一句引导:「做完大事用 house_add 记一行;清单和最近对话里找不到的,用 house_search 去积木里翻,翻到再答,别猜。」
48
+ 系统提示里会带一句引导:「做完大事用 house_add 记一行;写积木分能力型和任务型;清单和最近对话里找不到的,用 house_search 去积木里翻,翻到再答,别猜。」
48
49
 
49
50
  `knowledge` 目录不存在时会自动建一份带说明的 `README.md`,别人装完知道该往里写什么。
50
51
 
52
+ ## 积木怎么组织:两条轴(0.3.1 起)
53
+
54
+ `house_write` 的文件名就是组织方式,两种都支持、都要有:
55
+
56
+ | 轴 | 一个文件对应 | 例子 | 回答的问题 |
57
+ |---|---|---|---|
58
+ | 能力轴 | 一个能力/设备/工具 | `手机-接入与操作`、`画图-Agnes` | 「这个怎么做」 |
59
+ | 任务轴 | 一段任务 | `任务-调通一直发` | 「那三十轮干了什么」 |
60
+
61
+ 任务轴是**按时间轴切,不是按标签分类**:
62
+
63
+ - 一段对话里有几个任务就写几篇,切完正好覆盖全程,不重不漏
64
+ - 任务边界:① 目标变了;② 他明说换事;③ 交付物变了
65
+ - 一篇只写「做了什么 / 卡在哪 / 最后怎么定的」,别复述过程
66
+
67
+ > 为什么要两条轴:能力轴回答「怎么用」,任务轴回答「发生过什么」。上下文压缩之后,任务轴是唯一能证明「那段时间真的干过这件事」的东西。
68
+
51
69
  ## 清单格式
52
70
 
53
71
  只有两种语法,够用就好:
@@ -113,6 +131,10 @@ dsh plugin --profile web add @jiugeqqqqq/dsh-house
113
131
 
114
132
  默认就是空的,正常不用动。
115
133
 
134
+ ## 更新日志
135
+
136
+ 每次发版改了什么,看 [CHANGELOG.md](./CHANGELOG.md)——`npm i` 之前先扫一眼,能知道要不要跟着动配置。
137
+
116
138
  ## 更新
117
139
 
118
140
  ```powershell
package/cordis.patch.yml CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  - insert:
8
8
  - id: house
9
- name: "@jiugeqqqqq/dsh-house"
9
+ name: "dsh-house"
10
10
  config:
11
11
  # 房子清单:Markdown,按 "## 分组" 和 "- 条目" 解析。留空 = <DSH_HOME>/house.md
12
12
  assetsPath: ''
package/lib/host/index.js CHANGED
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * 2026-10-26:加写能力(之前只有 list/read,装了等于 Markdown 预览器)+ 搜存档。
15
15
  */
16
- import { readFile, writeFile, mkdir, copyFile } from 'node:fs/promises';
16
+ import { readFile, writeFile, appendFile, mkdir, copyFile } from 'node:fs/promises';
17
17
  import fs from 'node:fs';
18
18
  import zlib from 'node:zlib';
19
19
  import path from 'node:path';
@@ -498,7 +498,9 @@ export function apply(ctx, config = {}) {
498
498
  // 每轮都带一段用法提示:只给清单、不告诉它「找不到去哪翻」,模型就会自己猜。
499
499
  const HOUSE_GUIDE =
500
500
  '【房子怎么用】做完一件大事,用 house_add 往清单加一行(分组写「已经有的」或「正在长出来的」);' +
501
- '清单和最近对话里找不到的东西,用 house_search 去积木(knowledge 目录)里按关键词翻,翻到再答,别猜。';
501
+ '写积木分两种:按能力写(`手机-接入与操作`、`画图-Agnes`,回答「怎么做」)、按任务写(`任务-调通一直发`,回答「那段对话干了什么」,一段任务一篇,按时间轴切,切完要覆盖全程、不重不漏);' +
502
+ '细节、命令、踩过的坑,用 house_write 写进积木(knowledge 目录,默认追加,别一个坑建一个文件);' +
503
+ '清单和最近对话里找不到的东西,用 house_search 去积木里按关键词翻,翻到再答,别猜。';
502
504
 
503
505
  function assetsAsPrompt() {
504
506
  let text = '';
@@ -604,6 +606,52 @@ export function apply(ctx, config = {}) {
604
606
  }),
605
607
  'dsh-house: house_search',
606
608
  );
609
+
610
+ // 0.3.1:写积木。之前只有「加一行清单」和「翻积木」,积木永远长不出来。
611
+ scoped.effect(
612
+ () =>
613
+ tools.register({
614
+ name: 'house_write',
615
+ description:
616
+ '往「积木」里写一篇:按名字写进 knowledge/<名字>.md。' +
617
+ '做完一件大事、踩了坑、调通一个流程,就把命令/坑/为什么这么改记进来。' +
618
+ '名字两种:能力型(手机-接入与操作)或任务型(任务-调通一直发,一段任务一篇、覆盖全程)。' +
619
+ '默认追加;同一个名字只开一个文件,别一个坑建一个文件。',
620
+ parameters: {
621
+ type: 'object',
622
+ properties: {
623
+ file: { type: 'string', description: '积木文件名(不带 .md),比如「手机-接入与操作」' },
624
+ content: { type: 'string', description: '要写的内容,markdown;只写结果/命令/坑,别写纠结过程' },
625
+ mode: { type: 'string', enum: ['append', 'overwrite'], description: '默认 append(追加);只有整篇重写才用 overwrite' },
626
+ },
627
+ required: ['file', 'content'],
628
+ additionalProperties: false,
629
+ },
630
+ output,
631
+ async execute(args) {
632
+ const rawName = String(args?.file ?? '').trim().replace(/\.md$/i, '');
633
+ if (!rawName || /[\\/:*?"<>|]/.test(rawName) || rawName.includes('..')) {
634
+ return { ok: false, message: '文件名不合法(不能带路径分隔符或 ..)' };
635
+ }
636
+ const content = String(args?.content ?? '').trim();
637
+ if (!content) return { ok: false, message: '内容不能为空' };
638
+ const file = path.join(knowledgeDir, rawName + '.md');
639
+ const mode = args?.mode === 'overwrite' ? 'overwrite' : 'append';
640
+ try {
641
+ await mkdir(knowledgeDir, { recursive: true });
642
+ if (mode === 'append' && fs.existsSync(file)) {
643
+ await appendFile(file, `\n${content}\n`, 'utf8');
644
+ } else {
645
+ await writeFile(file, `${content}\n`, 'utf8');
646
+ }
647
+ return { ok: true, message: `已${mode === 'append' ? '追加到' : '写入'} 积木/${rawName}.md(${content.length} 字)` };
648
+ } catch (error) {
649
+ return { ok: false, message: error?.message || '写失败' };
650
+ }
651
+ },
652
+ }),
653
+ 'dsh-house: house_write',
654
+ );
607
655
  });
608
656
 
609
657
  // ---------------------------------------------------------------- web API
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jiugeqqqqq/dsh-house",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "房子 — 常驻的资产/能力清单,配一个侧边栏页面。清单会自动进系统提示(装了就生效);房子只记有没有、到哪一步,细节放 knowledge 和日志里。",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -39,6 +39,7 @@
39
39
  "files": [
40
40
  "lib/**/*.js",
41
41
  "cordis.patch.yml",
42
- "README.md"
42
+ "README.md",
43
+ "CHANGELOG.md"
43
44
  ]
44
45
  }