add-coder 0.3.35 → 0.3.38

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.
Files changed (80) hide show
  1. package/README.en.md +116 -43
  2. package/README.md +80 -21
  3. package/dist/index.js +465 -87
  4. package/package.json +7 -3
  5. package/templates/.add-coder-src-hash.json +76 -75
  6. package/templates/adapters/claude/hooks/doc-format-guard.mjs +4 -0
  7. package/templates/adapters/claude/hooks/notification.mjs +4 -0
  8. package/templates/adapters/claude/hooks/permission-denied.mjs +4 -0
  9. package/templates/adapters/claude/hooks/permission-gate.mjs +4 -0
  10. package/templates/adapters/claude/hooks/post-tool-use.mjs +4 -0
  11. package/templates/adapters/claude/hooks/pre-compact.mjs +4 -0
  12. package/templates/adapters/claude/hooks/pre-tool-use.mjs +4 -0
  13. package/templates/adapters/claude/hooks/prompt-submit.mjs +4 -0
  14. package/templates/adapters/claude/hooks/session-end.mjs +4 -0
  15. package/templates/adapters/claude/hooks/session-start.mjs +4 -0
  16. package/templates/adapters/claude/hooks/stop-check.mjs +87 -6
  17. package/templates/adapters/claude/hooks/stop-failure.mjs +4 -0
  18. package/templates/adapters/claude/hooks/subagent-guard.mjs +4 -0
  19. package/templates/adapters/claude/hooks/subagent-stop.mjs +4 -0
  20. package/templates/adapters/codex/hooks/doc-format-guard.mjs +4 -0
  21. package/templates/adapters/codex/hooks/notification.mjs +4 -0
  22. package/templates/adapters/codex/hooks/permission-gate.mjs +4 -0
  23. package/templates/adapters/codex/hooks/post-tool-failure.mjs +4 -0
  24. package/templates/adapters/codex/hooks/post-tool-use.mjs +4 -0
  25. package/templates/adapters/codex/hooks/pre-compact.mjs +4 -0
  26. package/templates/adapters/codex/hooks/pre-tool-use.mjs +4 -0
  27. package/templates/adapters/codex/hooks/prompt-submit.mjs +4 -0
  28. package/templates/adapters/codex/hooks/session-end.mjs +4 -0
  29. package/templates/adapters/codex/hooks/session-start.mjs +4 -0
  30. package/templates/adapters/codex/hooks/stop-check.mjs +87 -6
  31. package/templates/adapters/codex/hooks/subagent-guard.mjs +4 -0
  32. package/templates/adapters/codex/hooks/subagent-stop.mjs +4 -0
  33. package/templates/adapters/qoder/hooks/doc-format-guard.mjs +4 -0
  34. package/templates/adapters/qoder/hooks/notification.mjs +4 -0
  35. package/templates/adapters/qoder/hooks/permission-gate.mjs +4 -0
  36. package/templates/adapters/qoder/hooks/post-tool-failure.mjs +4 -0
  37. package/templates/adapters/qoder/hooks/post-tool-use.mjs +4 -0
  38. package/templates/adapters/qoder/hooks/pre-compact.mjs +4 -0
  39. package/templates/adapters/qoder/hooks/pre-tool-use.mjs +4 -0
  40. package/templates/adapters/qoder/hooks/prompt-submit.mjs +4 -0
  41. package/templates/adapters/qoder/hooks/review-checklist.mjs +4 -0
  42. package/templates/adapters/qoder/hooks/session-end.mjs +4 -0
  43. package/templates/adapters/qoder/hooks/session-start.mjs +4 -0
  44. package/templates/adapters/qoder/hooks/stop-check.mjs +87 -6
  45. package/templates/adapters/qoder/hooks/subagent-guard.mjs +4 -0
  46. package/templates/adapters/qoder/hooks/subagent-stop.mjs +4 -0
  47. package/templates/adapters/trae/hooks/doc-format-guard.mjs +4 -0
  48. package/templates/adapters/trae/hooks/notification.mjs +4 -0
  49. package/templates/adapters/trae/hooks/permission-gate.mjs +4 -0
  50. package/templates/adapters/trae/hooks/post-tool-failure.mjs +4 -0
  51. package/templates/adapters/trae/hooks/post-tool-use.mjs +4 -0
  52. package/templates/adapters/trae/hooks/pre-compact.mjs +4 -0
  53. package/templates/adapters/trae/hooks/pre-tool-use.mjs +4 -0
  54. package/templates/adapters/trae/hooks/prompt-submit.mjs +4 -0
  55. package/templates/adapters/trae/hooks/session-end.mjs +4 -0
  56. package/templates/adapters/trae/hooks/session-start.mjs +4 -0
  57. package/templates/adapters/trae/hooks/stop-check.mjs +87 -6
  58. package/templates/adapters/trae/hooks/subagent-guard.mjs +4 -0
  59. package/templates/adapters/trae/hooks/subagent-stop.mjs +4 -0
  60. package/templates/adapters/vscode/hooks/doc-format-guard.mjs +4 -0
  61. package/templates/adapters/vscode/hooks/notification.mjs +4 -0
  62. package/templates/adapters/vscode/hooks/permission-gate.mjs +4 -0
  63. package/templates/adapters/vscode/hooks/post-tool-failure.mjs +4 -0
  64. package/templates/adapters/vscode/hooks/post-tool-use.mjs +4 -0
  65. package/templates/adapters/vscode/hooks/pre-compact.mjs +4 -0
  66. package/templates/adapters/vscode/hooks/pre-tool-use.mjs +4 -0
  67. package/templates/adapters/vscode/hooks/prompt-submit.mjs +4 -0
  68. package/templates/adapters/vscode/hooks/session-end.mjs +4 -0
  69. package/templates/adapters/vscode/hooks/session-start.mjs +4 -0
  70. package/templates/adapters/vscode/hooks/stop-check.mjs +87 -6
  71. package/templates/adapters/vscode/hooks/subagent-guard.mjs +4 -0
  72. package/templates/adapters/vscode/hooks/subagent-stop.mjs +4 -0
  73. package/templates/core/governance/rules.ts +4 -0
  74. package/templates/core/governance/stop-router.ts +101 -7
  75. package/templates/core/scripts/db-ensure.sh +51 -4
  76. package/templates/core/scripts/mcp-server/shared/dps-spec-ref.ts +17 -0
  77. package/templates/core/scripts/mcp-server/shared/memory/retrieval/fts/sqlite-fts5.sql +7 -18
  78. package/templates/core/scripts/mcp-server/tools/gateway/check_dps.ts +3 -4
  79. package/templates/core/scripts/mcp-server/tools/gateway/check_rahs.ts +2 -1
  80. package/templates/core/scripts/mcp-server/tools/gateway/check_spec_sync.ts +7 -3
@@ -1,3 +1,6 @@
1
+ -- 本文件由 scripts/memory/gen-sqlite-fts-sql.ts 生成(真源:src/lib/memory-fts-objects.ts 的 SQLITE_FTS_OBJECTS)
2
+ -- 请勿手工编辑;新增/修改 DDL 请改真源后重跑生成脚本。
3
+ --
1
4
  -- Agent Memory FTS 原生层(SQLite 后端)
2
5
  -- Plan §8.3 + §17-3 定案:FTS5 trigram 分词器(CJK 友好,≥3 字符 n-gram 匹配;
3
6
  -- 短于 3 字符的查询由 adapter 层回退 LIKE —— 见 retrieval/fts/sqlite.ts)
@@ -6,24 +9,10 @@
6
9
  -- (其要求 INTEGER rowid),故采用独立 FTS 表 + 触发器同步。
7
10
  -- 幂等:全部 IF NOT EXISTS,可重复应用。
8
11
 
9
- CREATE VIRTUAL TABLE IF NOT EXISTS add_memory_fts USING fts5(
10
- memory_id UNINDEXED,
11
- topic,
12
- content,
13
- tokenize = 'trigram'
14
- );
12
+ CREATE VIRTUAL TABLE IF NOT EXISTS add_memory_fts USING fts5(memory_id UNINDEXED, topic, content, tokenize = 'trigram');
15
13
 
16
- CREATE TRIGGER IF NOT EXISTS add_memory_fts_ai AFTER INSERT ON "AddMemory" BEGIN
17
- INSERT INTO add_memory_fts(memory_id, topic, content)
18
- VALUES (new.id, new.topic, new.content);
19
- END;
14
+ CREATE TRIGGER IF NOT EXISTS add_memory_fts_ai AFTER INSERT ON "AddMemory" BEGIN INSERT INTO add_memory_fts(memory_id, topic, content) VALUES (new.id, new.topic, new.content); END;
20
15
 
21
- CREATE TRIGGER IF NOT EXISTS add_memory_fts_au AFTER UPDATE ON "AddMemory" BEGIN
22
- DELETE FROM add_memory_fts WHERE memory_id = old.id;
23
- INSERT INTO add_memory_fts(memory_id, topic, content)
24
- VALUES (new.id, new.topic, new.content);
25
- END;
16
+ CREATE TRIGGER IF NOT EXISTS add_memory_fts_au AFTER UPDATE ON "AddMemory" BEGIN DELETE FROM add_memory_fts WHERE memory_id = old.id; INSERT INTO add_memory_fts(memory_id, topic, content) VALUES (new.id, new.topic, new.content); END;
26
17
 
27
- CREATE TRIGGER IF NOT EXISTS add_memory_fts_ad AFTER DELETE ON "AddMemory" BEGIN
28
- DELETE FROM add_memory_fts WHERE memory_id = old.id;
29
- END;
18
+ CREATE TRIGGER IF NOT EXISTS add_memory_fts_ad AFTER DELETE ON "AddMemory" BEGIN DELETE FROM add_memory_fts WHERE memory_id = old.id; END;
@@ -29,6 +29,7 @@ import {
29
29
  getEmbeddings,
30
30
  } from "./helpers.js";
31
31
  import { getRuntimeContext } from "../../shared/env.js";
32
+ import { extractSpecRef } from "../../shared/dps-spec-ref.js";
32
33
  import {
33
34
  buildGateCaptureDetail,
34
35
  createGateWriterDeps,
@@ -87,10 +88,8 @@ export function registerCheckDps(server: ToolRegistrar) {
87
88
  let sn = basename(pm).replace(/-plan-v\d+\.md$/, ""),
88
89
  sc = "";
89
90
  if (pc) {
90
- const sr = pc.match(
91
- /Spec[:|\s`]+\.?(qoder|claude|add|vscode)\/specs\/([^/`\s]+)/,
92
- );
93
- if (sr) sn = sr[2];
91
+ const specRef = extractSpecRef(pc);
92
+ if (specRef) sn = specRef.specDir;
94
93
  }
95
94
  const sp = join(specsDir, sn, "spec.md");
96
95
  sc = (await readFileSafe(sp)) || "";
@@ -154,7 +154,8 @@ export function registerCheckRahs(server: ToolRegistrar) {
154
154
  arContent.match(/`[^`]+\.(ts|js|sh|md|tsx|json|yml|yaml)`/g) ||
155
155
  []
156
156
  ).map((f: string) => f.replace(/`/g, "").toLowerCase());
157
- const diff = runCommand("git", ["diff", "--name-only"], {
157
+ // core.quotepath=false:避免非 ASCII 路径被八进制转义后与附录清单比不中(与 check_spec_sync 同修)
158
+ const diff = runCommand("git", ["-c", "core.quotepath=false", "diff", "--name-only"], {
158
159
  cwd: PROJECT_ROOT,
159
160
  timeout: 5000,
160
161
  });
@@ -76,15 +76,19 @@ export function registerCheckSpecSync(server: ToolRegistrar) {
76
76
  } else {
77
77
  lines.push(`add-route: ${arFile}`);
78
78
  const arContent = (await readFileSafe(join(plansDir, arFile))) || "";
79
- // 提取 add-route 附录文件清单
80
- const appendixFiles = (arContent.match(/`[^`]+\.(ts|js|sh|md|tsx|json|yml|yaml)`/g) || [])
79
+ // 提取 add-route 附录文件清单(toml 纳入:sync-magic-rules.toml 等控制面文件,2026-08-18 修复)
80
+ // sql/prisma 纳入(2026-09-16 修复):原生 DDL 与 schema 是常见交付物,此前不在白名单 →
81
+ // 附录里明明登记了 `.../sqlite-fts5.sql` 仍被判"不在附录中"(假告警)。
82
+ const appendixFiles = (arContent.match(/`[^`]+\.(ts|tsx|js|jsx|sh|sql|prisma|md|json|yml|yaml|toml)`/g) || [])
81
83
  .map((f: string) => f.replace(/`/g, ""));
82
84
  lines.push(`附录文件: ${appendixFiles.length} 个`);
83
85
 
84
86
  // git diff 变更文件(win32 下 git 为 .cmd → runCommand 自动解析,issue #10 跨端修复)
85
87
  let diffFiles: string[] = [];
86
88
  try {
87
- const diff = runCommand("git", ["diff", "--name-only"], {
89
+ // core.quotepath=false:默认 git 会把非 ASCII 路径转成 "\346\236..." 八进制转义 →
90
+ // 与附录里的真实中文路径永远比不中(2026-09-16 修复:架构文档类路径的假告警)。
91
+ const diff = runCommand("git", ["-c", "core.quotepath=false", "diff", "--name-only"], {
88
92
  cwd: PROJECT_ROOT,
89
93
  timeout: 5000,
90
94
  });