jarvis-agent-factory 3.45.9 → 3.46.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.
Files changed (160) hide show
  1. package/README.md +1 -1
  2. package/dist/package.json +3 -3
  3. package/dist/src/cli/commands/diff.d.ts +0 -3
  4. package/dist/src/cli/commands/diff.js +351 -21
  5. package/dist/src/cli/commands/diff.js.map +1 -1
  6. package/dist/src/cli/commands/resolve.d.ts +12 -0
  7. package/dist/src/cli/commands/resolve.js +385 -0
  8. package/dist/src/cli/commands/resolve.js.map +1 -0
  9. package/dist/src/cli/index.js +1 -0
  10. package/dist/src/cli/index.js.map +1 -1
  11. package/dist/src/cli/utils/resolve.d.ts +3 -0
  12. package/dist/src/cli/utils/resolve.js +14 -2
  13. package/dist/src/cli/utils/resolve.js.map +1 -1
  14. package/dist/src/engine/agent-registry.d.ts +5 -0
  15. package/dist/src/engine/agent-registry.js +25 -0
  16. package/dist/src/engine/agent-registry.js.map +1 -1
  17. package/dist/src/engine/server.js +103 -25
  18. package/dist/src/engine/server.js.map +1 -1
  19. package/dist/src/install.js +486 -38
  20. package/dist/src/install.js.map +1 -1
  21. package/dist/src/shared/markdown-utils.d.ts +54 -0
  22. package/dist/src/shared/markdown-utils.js +150 -0
  23. package/dist/src/shared/markdown-utils.js.map +1 -0
  24. package/dist/src/templates/platforms/claude/agents/algorithm-expert.md +2 -0
  25. package/dist/src/templates/platforms/claude/agents/android-dev-expert.md +2 -0
  26. package/dist/src/templates/platforms/claude/agents/android-state-expert.md +2 -0
  27. package/dist/src/templates/platforms/claude/agents/android-ui-expert.md +2 -0
  28. package/dist/src/templates/platforms/claude/agents/api-contract-expert.md +2 -0
  29. package/dist/src/templates/platforms/claude/agents/api-test-expert.md +2 -0
  30. package/dist/src/templates/platforms/claude/agents/backend-api-expert.md +2 -0
  31. package/dist/src/templates/platforms/claude/agents/backend-architect.md +2 -0
  32. package/dist/src/templates/platforms/claude/agents/backend-data-expert.md +2 -0
  33. package/dist/src/templates/platforms/claude/agents/backend-dev-expert.md +2 -0
  34. package/dist/src/templates/platforms/claude/agents/backend-logic-expert.md +2 -0
  35. package/dist/src/templates/platforms/claude/agents/backend-review-expert.md +2 -0
  36. package/dist/src/templates/platforms/claude/agents/backend-test-expert.md +2 -0
  37. package/dist/src/templates/platforms/claude/agents/browser-test-expert.md +2 -0
  38. package/dist/src/templates/platforms/claude/agents/browser-use-expert.md +2 -0
  39. package/dist/src/templates/platforms/claude/agents/change-review-expert.md +2 -0
  40. package/dist/src/templates/platforms/claude/agents/code-explore-expert.md +2 -0
  41. package/dist/src/templates/platforms/claude/agents/database-architect.md +2 -0
  42. package/dist/src/templates/platforms/claude/agents/diff-review-expert.md +2 -0
  43. package/dist/src/templates/platforms/claude/agents/docs-engineer.md +2 -0
  44. package/dist/src/templates/platforms/claude/agents/docs-research-expert.md +2 -0
  45. package/dist/src/templates/platforms/claude/agents/e2e-test-expert.md +2 -0
  46. package/dist/src/templates/platforms/claude/agents/external-resource-expert.md +2 -0
  47. package/dist/src/templates/platforms/claude/agents/fix-retest.md +2 -0
  48. package/dist/src/templates/platforms/claude/agents/flutter-dev-expert.md +2 -0
  49. package/dist/src/templates/platforms/claude/agents/flutter-state-expert.md +2 -0
  50. package/dist/src/templates/platforms/claude/agents/flutter-ui-expert.md +2 -0
  51. package/dist/src/templates/platforms/claude/agents/frontend-architect.md +2 -0
  52. package/dist/src/templates/platforms/claude/agents/frontend-dev-expert.md +2 -0
  53. package/dist/src/templates/platforms/claude/agents/frontend-review-expert.md +2 -0
  54. package/dist/src/templates/platforms/claude/agents/frontend-state-expert.md +2 -0
  55. package/dist/src/templates/platforms/claude/agents/frontend-test-expert.md +2 -0
  56. package/dist/src/templates/platforms/claude/agents/frontend-ui-expert.md +2 -0
  57. package/dist/src/templates/platforms/claude/agents/infra-deploy-expert.md +2 -0
  58. package/dist/src/templates/platforms/claude/agents/ios-dev-expert.md +2 -0
  59. package/dist/src/templates/platforms/claude/agents/ios-state-expert.md +2 -0
  60. package/dist/src/templates/platforms/claude/agents/ios-ui-expert.md +2 -0
  61. package/dist/src/templates/platforms/claude/agents/perf-review-expert.md +2 -0
  62. package/dist/src/templates/platforms/claude/agents/perf-test-expert.md +2 -0
  63. package/dist/src/templates/platforms/claude/agents/planner.md +2 -0
  64. package/dist/src/templates/platforms/claude/agents/project-review-expert.md +2 -0
  65. package/dist/src/templates/platforms/claude/agents/qa-review-expert.md +2 -0
  66. package/dist/src/templates/platforms/claude/agents/react-native-dev-expert.md +2 -0
  67. package/dist/src/templates/platforms/claude/agents/react-native-state-expert.md +2 -0
  68. package/dist/src/templates/platforms/claude/agents/react-native-ui-expert.md +2 -0
  69. package/dist/src/templates/platforms/claude/agents/remediation-expert.md +2 -0
  70. package/dist/src/templates/platforms/claude/agents/remediation-planner.md +2 -0
  71. package/dist/src/templates/platforms/claude/agents/review-fix-optimize.md +2 -0
  72. package/dist/src/templates/platforms/claude/agents/review-only.md +2 -0
  73. package/dist/src/templates/platforms/claude/agents/security-review-expert.md +2 -0
  74. package/dist/src/templates/platforms/claude/agents/skill-assignment-expert.md +2 -0
  75. package/dist/src/templates/platforms/claude/agents/taro-dev-expert.md +2 -0
  76. package/dist/src/templates/platforms/claude/agents/taro-state-expert.md +2 -0
  77. package/dist/src/templates/platforms/claude/agents/taro-ui-expert.md +2 -0
  78. package/dist/src/templates/platforms/claude/agents/task-design.md +2 -0
  79. package/dist/src/templates/platforms/claude/agents/test-doc-writer.md +2 -0
  80. package/dist/src/templates/platforms/claude/agents/test-executor.md +2 -0
  81. package/dist/src/templates/platforms/claude/commands/algorithm-expert.md +2 -0
  82. package/dist/src/templates/platforms/claude/commands/android.md +2 -0
  83. package/dist/src/templates/platforms/claude/commands/backend-architect.md +2 -0
  84. package/dist/src/templates/platforms/claude/commands/backend.md +2 -0
  85. package/dist/src/templates/platforms/claude/commands/browser-explore.md +2 -0
  86. package/dist/src/templates/platforms/claude/commands/browser-test.md +2 -0
  87. package/dist/src/templates/platforms/claude/commands/bug-fix.md +2 -0
  88. package/dist/src/templates/platforms/claude/commands/debug.md +2 -0
  89. package/dist/src/templates/platforms/claude/commands/evaluate.md +2 -0
  90. package/dist/src/templates/platforms/claude/commands/expo.md +2 -0
  91. package/dist/src/templates/platforms/claude/commands/flutter.md +2 -0
  92. package/dist/src/templates/platforms/claude/commands/frontend-architect.md +2 -0
  93. package/dist/src/templates/platforms/claude/commands/frontend.md +2 -0
  94. package/dist/src/templates/platforms/claude/commands/hotfix.md +2 -0
  95. package/dist/src/templates/platforms/claude/commands/ios.md +2 -0
  96. package/dist/src/templates/platforms/claude/commands/jarvis-lite.md +2 -0
  97. package/dist/src/templates/platforms/claude/commands/jarvis.md +2 -0
  98. package/dist/src/templates/platforms/claude/commands/migrate.md +2 -0
  99. package/dist/src/templates/platforms/claude/commands/refactor.md +2 -0
  100. package/dist/src/templates/platforms/claude/commands/review-fix.md +2 -0
  101. package/dist/src/templates/platforms/claude/commands/review.md +2 -0
  102. package/dist/src/templates/platforms/claude/commands/taro.md +2 -0
  103. package/dist/src/templates/platforms/claude/commands/task-bdd.md +2 -0
  104. package/dist/src/templates/platforms/claude/commands/task-ddd.md +2 -0
  105. package/dist/src/templates/platforms/claude/commands/task-tdd.md +2 -0
  106. package/dist/src/templates/platforms/claude/commands/test-e2e.md +2 -0
  107. package/dist/src/templates/platforms/claude/commands/test-integration.md +2 -0
  108. package/dist/src/templates/platforms/claude/commands/test-perf.md +2 -0
  109. package/dist/src/templates/platforms/claude/commands/test-security.md +2 -0
  110. package/dist/src/templates/platforms/claude/commands/test-unit.md +2 -0
  111. package/dist/src/templates/platforms/claude/skills/behavioral-guidelines/SKILL.md +2 -0
  112. package/dist/src/templates/platforms/claude/skills/browser-testing/SKILL.md +2 -0
  113. package/dist/src/templates/platforms/claude/skills/browser-use/SKILL.md +2 -0
  114. package/dist/src/templates/platforms/claude/skills/browser-use/references/cdp-python.md +4 -0
  115. package/dist/src/templates/platforms/claude/skills/browser-use/references/multi-session.md +4 -0
  116. package/dist/src/templates/platforms/claude/skills/chinese-documentation/SKILL.md +2 -0
  117. package/dist/src/templates/platforms/claude/skills/code-quality-gate/SKILL.md +2 -0
  118. package/dist/src/templates/platforms/claude/skills/code-review-and-quality/SKILL.md +2 -0
  119. package/dist/src/templates/platforms/claude/skills/code-simplification/SKILL.md +2 -0
  120. package/dist/src/templates/platforms/claude/skills/code-standards/SKILL.md +2 -0
  121. package/dist/src/templates/platforms/claude/skills/context-engineering/SKILL.md +2 -0
  122. package/dist/src/templates/platforms/claude/skills/debugging-and-error-recovery/SKILL.md +2 -0
  123. package/dist/src/templates/platforms/claude/skills/debugging-deep/SKILL.md +2 -0
  124. package/dist/src/templates/platforms/claude/skills/documentation-and-adrs/SKILL.md +2 -0
  125. package/dist/src/templates/platforms/claude/skills/find-docs/SKILL.md +2 -0
  126. package/dist/src/templates/platforms/claude/skills/finishing-a-development-branch/SKILL.md +2 -0
  127. package/dist/src/templates/platforms/claude/skills/frontend-design/SKILL.md +2 -0
  128. package/dist/src/templates/platforms/claude/skills/git-workflow-and-versioning/SKILL.md +2 -0
  129. package/dist/src/templates/platforms/claude/skills/idea-refine/SKILL.md +2 -0
  130. package/dist/src/templates/platforms/claude/skills/incremental-implementation/SKILL.md +2 -0
  131. package/dist/src/templates/platforms/claude/skills/mcp-builder/SKILL.md +2 -0
  132. package/dist/src/templates/platforms/claude/skills/perf-testing/SKILL.md +2 -0
  133. package/dist/src/templates/platforms/claude/skills/planning-and-task-breakdown/SKILL.md +2 -0
  134. package/dist/src/templates/platforms/claude/skills/refactoring/SKILL.md +2 -0
  135. package/dist/src/templates/platforms/claude/skills/security-and-hardening/SKILL.md +2 -0
  136. package/dist/src/templates/platforms/claude/skills/security-testing/SKILL.md +2 -0
  137. package/dist/src/templates/platforms/claude/skills/shipping-and-launch/SKILL.md +2 -0
  138. package/dist/src/templates/platforms/claude/skills/source-driven-development/SKILL.md +2 -0
  139. package/dist/src/templates/platforms/claude/skills/spec-driven-development/SKILL.md +2 -0
  140. package/dist/src/templates/platforms/claude/skills/test-data-factory/SKILL.md +2 -0
  141. package/dist/src/templates/platforms/claude/skills/test-driven-development/SKILL.md +2 -0
  142. package/dist/src/templates/platforms/claude/skills/using-agent-skills/SKILL.md +2 -0
  143. package/dist/src/templates/platforms/claude/skills/verification-before-completion/SKILL.md +2 -0
  144. package/dist/src/templates/platforms/claude/skills/writing-skills/SKILL.md +2 -0
  145. package/dist/src/templates/platforms/claude/skills/writing-skills/anthropic-best-practices.md +4 -0
  146. package/dist/src/templates/platforms/claude/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +4 -0
  147. package/dist/src/templates/platforms/claude/skills/writing-skills/persuasion-principles.md +4 -0
  148. package/dist/src/templates/platforms/claude/skills/writing-skills/testing-skills-with-subagents.md +4 -0
  149. package/dist/src/web/routes.js +14 -12
  150. package/dist/src/web/routes.js.map +1 -1
  151. package/dist/tests/install-merge.test.d.ts +1 -0
  152. package/dist/tests/install-merge.test.js +266 -0
  153. package/dist/tests/install-merge.test.js.map +1 -0
  154. package/dist/tests/install-section-hash.test.d.ts +1 -0
  155. package/dist/tests/install-section-hash.test.js +161 -0
  156. package/dist/tests/install-section-hash.test.js.map +1 -0
  157. package/dist/web/index.html +50 -50
  158. package/package.json +3 -3
  159. package/dist/src/web/views/agents.html +0 -579
  160. package/dist/src/web/views/pipeline.html +0 -1347
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Jarvis Agent Factory · 贾维斯智能体工厂
2
2
 
3
3
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)
4
- [![Version](https://img.shields.io/badge/version-v3.45.9-green)](https://github.com/Wjl1224734792/Jarvis-Agent-Factory/releases)
4
+ [![Version](https://img.shields.io/badge/version-v3.46.2-green)](https://github.com/Wjl1224734792/Jarvis-Agent-Factory/releases)
5
5
  [![npm](https://img.shields.io/npm/v/jarvis-agent-factory)](https://www.npmjs.com/package/jarvis-agent-factory)
6
6
  [![Visual Primitives MCP](https://img.shields.io/badge/DeepSeek-Visual%20Primitives%20MCP-purple)](https://github.com/Wjl1224734792/visual-primitives-mcp)
7
7
  <br>💡 **纯文本模型(如 DeepSeek)主力用户** → 搭配 [Visual Primitives MCP](https://github.com/Wjl1224734792/visual-primitives-mcp) 获得视觉理解能力
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jarvis-agent-factory",
3
- "version": "3.45.9",
3
+ "version": "3.46.2",
4
4
  "description": "Jarvis Agent Factory CLI — Claude Code 多智能体 AI 编程助手配置安装器 | Multi-agent AI coding assistant config installer for Claude Code",
5
5
  "keywords": [
6
6
  "jarvis",
@@ -38,7 +38,7 @@
38
38
  "test": "vitest run",
39
39
  "test:watch": "vitest",
40
40
  "typecheck": "tsc --noEmit",
41
- "build": "tsc && node scripts/copy-assets.js",
41
+ "build": "tsc && node -e \"import{cpSync}from'fs';cpSync('package.json','dist/package.json');cpSync('src/templates','dist/src/templates',{recursive:true})\"",
42
42
  "build:web": "cd web && npm run build",
43
43
  "dev": "tsx src/cli/index.ts",
44
44
  "jarvis": "node dist/src/cli/index.js",
@@ -64,7 +64,7 @@
64
64
  "tsx": "^4.19.0",
65
65
  "typescript": "^6.0.3",
66
66
  "typescript-eslint": "^8.59.2",
67
- "vitest": "^4.1.5"
67
+ "vitest": "^4.1.6"
68
68
  },
69
69
  "lint-staged": {
70
70
  "*.ts": [
@@ -1,5 +1,2 @@
1
1
  import type { CliOpts } from '../utils/args.js';
2
- /**
3
- * jarvis diff [path] — 预览升级变更(不实际执行)
4
- */
5
2
  export declare function execute(opts: CliOpts, positional: string[]): Promise<void>;
@@ -6,8 +6,187 @@ import { resolveScope } from '../utils/scope.js';
6
6
  import { resolveTarget } from '../utils/resolve.js';
7
7
  import { PLATFORMS, ALL_PLATFORMS, PKG_ROOT } from '../utils/constants.js';
8
8
  import { getHashFilePath } from '../../hash-paths.js';
9
+ import { readFrontmatter, splitMarkdownSections, isSectionHashRecord } from '../../shared/markdown-utils.js';
9
10
  /**
10
- * 对比单个平台模板与已安装文件的差异
11
+ * 计算 Markdown 文件当前各 section 的 SHA256 hash 映射。
12
+ * @param filePath 文件绝对路径
13
+ * @returns section title → hash 映射
14
+ */
15
+ function computeCurrentSectionHashes(filePath) {
16
+ try {
17
+ const content = readFileSync(filePath, 'utf-8');
18
+ const { sections } = splitMarkdownSections(content);
19
+ const result = {};
20
+ for (const s of sections) {
21
+ result[s.title] = s.hash;
22
+ }
23
+ return result;
24
+ }
25
+ catch {
26
+ return {};
27
+ }
28
+ }
29
+ // ============================================================================
30
+ // diffJsonConfig — JSON 字段级差异对比
31
+ // ============================================================================
32
+ /**
33
+ * 深度对比两个 JSON 对象,返回字段级差异列表。
34
+ * @param template 模板对象(新版)
35
+ * @param target 目标对象(已安装版)
36
+ * @param prefix 当前字段路径前缀(用于递归拼接)
37
+ * @returns 差异描述行列表(含缩进前缀)
38
+ */
39
+ function diffJsonConfig(template, target, prefix) {
40
+ const diffs = [];
41
+ const allKeys = new Set([...Object.keys(template), ...Object.keys(target)]);
42
+ for (const key of allKeys) {
43
+ const fullPath = prefix ? `${prefix}.${key}` : key;
44
+ const inTemplate = key in template;
45
+ const inTarget = key in target;
46
+ if (!inTarget) {
47
+ // 目标中不存在此字段 → 来自模板的新增字段
48
+ diffs.push(` + ${fullPath}`);
49
+ }
50
+ else if (!inTemplate) {
51
+ // 模板中不存在此字段 → 模板已移除此字段
52
+ diffs.push(` - ${fullPath}`);
53
+ }
54
+ else {
55
+ const tv = template[key];
56
+ const tg = target[key];
57
+ const isTvObj = typeof tv === 'object' && tv !== null && !Array.isArray(tv);
58
+ const isTgObj = typeof tg === 'object' && tg !== null && !Array.isArray(tg);
59
+ if (isTvObj && isTgObj) {
60
+ // 双方都是纯对象 → 递归对比
61
+ diffs.push(...diffJsonConfig(tv, tg, fullPath));
62
+ }
63
+ else if (JSON.stringify(tv) !== JSON.stringify(tg)) {
64
+ // 值不同 → 已修改
65
+ diffs.push(` ~ ${fullPath} (已修改)`);
66
+ }
67
+ }
68
+ }
69
+ return diffs;
70
+ }
71
+ // ============================================================================
72
+ // 冲突文件扫描
73
+ // ============================================================================
74
+ /**
75
+ * 递归扫描目录及子目录,查找所有包含未解决冲突标记(<<<<<<< user)的文件。
76
+ * 仅检查 .md 和 .json 文件,跳过隐藏目录和 node_modules。
77
+ * @param root 搜索根目录
78
+ * @returns 冲突文件的相对路径列表(相对于 root)
79
+ */
80
+ function scanConflictFiles(root) {
81
+ const conflicts = [];
82
+ let scanned = 0;
83
+ const MAX_SCAN = 200;
84
+ /** 检查单个文件是否含冲突标记并记录 */
85
+ function checkFileForConflict(fullPath) {
86
+ if (hasConflictMarker(fullPath)) {
87
+ conflicts.push(fullPath.substring(root.length + 1));
88
+ }
89
+ }
90
+ /** 递归扫描子目录 */
91
+ function scanDir(dir) {
92
+ if (scanned >= MAX_SCAN)
93
+ return;
94
+ let entries;
95
+ try {
96
+ entries = readdirSync(dir);
97
+ }
98
+ catch {
99
+ return;
100
+ }
101
+ for (const entry of entries) {
102
+ if (scanned >= MAX_SCAN)
103
+ return;
104
+ if (entry.startsWith('.') || entry === 'node_modules')
105
+ continue;
106
+ const fullPath = join(dir, entry);
107
+ let isDir;
108
+ try {
109
+ isDir = statSync(fullPath).isDirectory();
110
+ }
111
+ catch {
112
+ continue;
113
+ }
114
+ if (isDir) {
115
+ scanDir(fullPath);
116
+ }
117
+ else if (entry.endsWith('.md') || entry.endsWith('.json')) {
118
+ scanned++;
119
+ checkFileForConflict(fullPath);
120
+ }
121
+ }
122
+ }
123
+ scanDir(root);
124
+ return conflicts;
125
+ }
126
+ // ============================================================================
127
+ // Markdown section 差异计算
128
+ // ============================================================================
129
+ /**
130
+ * 三向对比 section hash,返回差异描述列表。
131
+ * 源 hash(srcHash)对比旧记录 hash(oldHash)和目标 hash(dstHash):
132
+ * - 源未记录 → 删除;旧未记录 → 新增
133
+ * - 源变 + 目标变 → 冲突;仅源变 → 修改
134
+ *
135
+ * @param oldSections 旧 hash 记录中的 section 映射
136
+ * @param srcSecHashes 当前模板 section hash 映射
137
+ * @param dstSecHashes 当前已安装文件 section hash 映射
138
+ * @returns 差异描述行列表
139
+ */
140
+ function diffSectionChanges(oldSections, srcSecHashes, dstSecHashes) {
141
+ const diffs = [];
142
+ const allTitles = new Set([...Object.keys(oldSections), ...Object.keys(srcSecHashes)]);
143
+ for (const title of allTitles) {
144
+ const oldHash = oldSections[title];
145
+ const srcHash = srcSecHashes[title];
146
+ const dstHash = dstSecHashes[title];
147
+ if (!srcHash) {
148
+ diffs.push(` § ## ${title} 删除`);
149
+ }
150
+ else if (!oldHash) {
151
+ diffs.push(` § ## ${title} 新增`);
152
+ }
153
+ else if (srcHash !== oldHash && dstHash && dstHash !== oldHash) {
154
+ diffs.push(` § ## ${title} 冲突`);
155
+ }
156
+ else if (srcHash !== oldHash) {
157
+ diffs.push(` § ## ${title} 修改`);
158
+ }
159
+ // srcHash === oldHash → 源未变,忽略
160
+ }
161
+ return diffs;
162
+ }
163
+ // ============================================================================
164
+ // diffPlatform — 对比单个平台模板与已安装文件的差异
165
+ // ============================================================================
166
+ /**
167
+ * 检查文件是否包含未解决的冲突标记(<<<<<<< user)。
168
+ * @param filePath 文件绝对路径
169
+ * @returns 含冲突标记返回 true,读取失败返回 false
170
+ */
171
+ function hasConflictMarker(filePath) {
172
+ try {
173
+ return readFileSync(filePath, 'utf-8').includes('<<<<<<< user');
174
+ }
175
+ catch {
176
+ return false;
177
+ }
178
+ }
179
+ /**
180
+ * 对比单个平台模板与已安装文件的差异(增强版)。
181
+ * - Markdown 文件(v2 section hash):显示 version diff + section 级差异
182
+ * - JSON 配置文件:显示字段级差异
183
+ * - 旧 hash 格式(字符串):降级为文件级展示
184
+ * - 汇总冲突文件
185
+ *
186
+ * @param platform 平台名称
187
+ * @param target 项目根目录
188
+ * @param isGlobal 是否为全局安装
189
+ * @returns 该平台下检测到的冲突文件相对路径列表(用于末尾汇总)
11
190
  */
12
191
  async function diffPlatform(platform, target, isGlobal) {
13
192
  const srcRoot = resolve(PKG_ROOT, 'dist/src', 'templates', 'platforms', platform);
@@ -17,13 +196,20 @@ async function diffPlatform(platform, target, isGlobal) {
17
196
  : resolve(homedir(), `.${platform}`))
18
197
  : resolve(target, PLATFORMS[platform].dir);
19
198
  if (!existsSync(srcRoot))
20
- return;
199
+ return [];
21
200
  const hashFile = getHashFilePath(target, isGlobal);
22
201
  const hashes = existsSync(hashFile)
23
202
  ? JSON.parse(readFileSync(hashFile, 'utf-8'))
24
203
  : {};
25
- const hash = (f) => createHash('sha256').update(readFileSync(f)).digest('hex');
26
- let changed = 0;
204
+ /** 计算文件整文件 SHA256 hash */
205
+ const fileHash = (f) => createHash('sha256').update(readFileSync(f)).digest('hex');
206
+ let totalChanged = 0;
207
+ let shownCount = 0;
208
+ const MAX_SHOW = 30;
209
+ const conflictFiles = [];
210
+ // ═══════════════════════════════════════════════════════════════
211
+ // 第一步:遍历 agents / commands / skills buckets
212
+ // ═══════════════════════════════════════════════════════════════
27
213
  for (const bucket of ['agents', 'commands', 'skills']) {
28
214
  const sd = join(srcRoot, bucket);
29
215
  const dd = join(destRoot, bucket);
@@ -35,43 +221,187 @@ async function diffPlatform(platform, target, isGlobal) {
35
221
  if (statSync(sp).isDirectory())
36
222
  continue;
37
223
  const rel = `${bucket}/${entry}`;
38
- const newHash = hash(sp);
224
+ const newHash = fileHash(sp);
225
+ const oldHashRecord = hashes[dp];
226
+ // ── 场景 A:新文件(目标中不存在)──
39
227
  if (!existsSync(dp)) {
40
- if (changed < 20)
41
- console.log(` + ${rel.padEnd(30)} (new)`);
42
- changed++;
228
+ if (shownCount < MAX_SHOW) {
229
+ const srcFm = entry.endsWith('.md') ? readFrontmatter(sp) : null;
230
+ const verExtra = srcFm && srcFm.version !== '0.0.0'
231
+ ? `, version: ${srcFm.version}`
232
+ : '';
233
+ console.log(` + ${rel.padEnd(40)} (新增${verExtra})`);
234
+ shownCount++;
235
+ }
236
+ totalChanged++;
43
237
  continue;
44
238
  }
45
- const oldHash = hashes[dp];
46
- if (newHash !== oldHash) {
47
- if (changed < 20) {
48
- const destHash = hash(dp);
49
- const status = !oldHash || destHash === oldHash
50
- ? 'update'
51
- : 'skip (modified by user)';
52
- console.log(` ~ ${rel.padEnd(30)} ${status}`);
239
+ const destHash = fileHash(dp);
240
+ // 整文件未变化 跳过
241
+ if (newHash === destHash)
242
+ continue;
243
+ const isV2 = isSectionHashRecord(oldHashRecord);
244
+ // ── 场景 B:Markdown section 级 diff(v2 hash 记录)──
245
+ if (entry.endsWith('.md') && isV2) {
246
+ const srcFm = readFrontmatter(sp);
247
+ const destFm = readFrontmatter(dp);
248
+ const oldSections = oldHashRecord.sections;
249
+ const secDiffs = diffSectionChanges(oldSections, computeCurrentSectionHashes(sp), computeCurrentSectionHashes(dp));
250
+ // 版本对比
251
+ const srcVer = srcFm.version || '0.0.0';
252
+ const destVer = destFm.version || '0.0.0';
253
+ const verInfo = srcVer !== destVer ? ` (version: ${destVer} → ${srcVer})` : '';
254
+ if (shownCount < MAX_SHOW) {
255
+ const label = secDiffs.length > 0 ? verInfo : (verInfo || ' (preamble 变更)');
256
+ console.log(` M ${rel.padEnd(40)}${label}`);
257
+ secDiffs.forEach(d => console.log(d));
258
+ shownCount++;
53
259
  }
54
- changed++;
260
+ totalChanged++;
261
+ // 内联检测冲突标记
262
+ if (hasConflictMarker(dp))
263
+ conflictFiles.push(rel);
264
+ }
265
+ else {
266
+ // ── 场景 C:文件级 diff(旧 hash 格式或非 markdown)──
267
+ // 降级为文件级展示,保持向后兼容
268
+ const canUpdate = typeof oldHashRecord === 'string' && destHash === oldHashRecord;
269
+ const status = typeof oldHashRecord === 'undefined' || canUpdate
270
+ ? '(更新)'
271
+ : '(跳过, 用户已修改)';
272
+ if (shownCount < MAX_SHOW) {
273
+ console.log(` M ${rel.padEnd(40)} ${status}`);
274
+ shownCount++;
275
+ }
276
+ totalChanged++;
277
+ }
278
+ }
279
+ // ── 检测目标中存在但模板中已删除的文件 ──
280
+ const srcFileSet = new Set(existsSync(sd) ? readdirSync(sd).filter(e => !statSync(join(sd, e)).isDirectory()) : []);
281
+ for (const entry of readdirSync(dd)) {
282
+ if (statSync(join(dd, entry)).isDirectory())
283
+ continue;
284
+ if (!srcFileSet.has(entry)) {
285
+ const dp = join(dd, entry);
286
+ const oldHashRecord = hashes[dp];
287
+ if (typeof oldHashRecord === 'undefined')
288
+ continue;
289
+ // 仅当有旧 hash 记录时(曾由 Jarvis 安装)才标记为删除
290
+ const rel = `${bucket}/${entry}`;
291
+ if (shownCount < MAX_SHOW) {
292
+ console.log(` - ${rel.padEnd(40)} (模板已移除)`);
293
+ shownCount++;
294
+ }
295
+ totalChanged++;
55
296
  }
56
297
  }
57
298
  }
58
- if (changed === 0) {
299
+ // ═══════════════════════════════════════════════════════════════
300
+ // 第二步:模板根级别 JSON 配置文件(如 settings.json)
301
+ // ═══════════════════════════════════════════════════════════════
302
+ for (const entry of readdirSync(srcRoot)) {
303
+ const sp = join(srcRoot, entry);
304
+ if (statSync(sp).isDirectory())
305
+ continue;
306
+ if (!entry.endsWith('.json'))
307
+ continue;
308
+ if (entry.startsWith('settings.local'))
309
+ continue;
310
+ const dp = join(destRoot, entry);
311
+ if (!existsSync(dp)) {
312
+ if (shownCount < MAX_SHOW) {
313
+ console.log(` + ${entry.padEnd(40)} (新增配置文件)`);
314
+ shownCount++;
315
+ }
316
+ totalChanged++;
317
+ continue;
318
+ }
319
+ try {
320
+ const srcJson = JSON.parse(readFileSync(sp, 'utf-8'));
321
+ const destJson = JSON.parse(readFileSync(dp, 'utf-8'));
322
+ const diffs = diffJsonConfig(srcJson, destJson, '');
323
+ if (diffs.length > 0) {
324
+ if (shownCount < MAX_SHOW) {
325
+ console.log(` M ${entry.padEnd(40)}`);
326
+ diffs.forEach(d => console.log(d));
327
+ shownCount++;
328
+ }
329
+ totalChanged++;
330
+ }
331
+ }
332
+ catch {
333
+ // JSON 解析失败 → 降级为文件级对比
334
+ const newHash = fileHash(sp);
335
+ const destHash = fileHash(dp);
336
+ if (newHash !== destHash) {
337
+ if (shownCount < MAX_SHOW) {
338
+ console.log(` M ${entry.padEnd(40)} (JSON 差异)`);
339
+ shownCount++;
340
+ }
341
+ totalChanged++;
342
+ }
343
+ }
344
+ }
345
+ // ═══════════════════════════════════════════════════════════════
346
+ // 第三步:输出摘要
347
+ // ═══════════════════════════════════════════════════════════════
348
+ if (totalChanged === 0) {
59
349
  console.log(` ✅ ${platform.padEnd(10)} up to date`);
60
350
  }
61
- else if (changed > 20) {
62
- console.log(` ... and ${changed - 20} more files`);
351
+ else if (totalChanged > shownCount) {
352
+ console.log(` ... 还有 ${totalChanged - shownCount} 个文件未显示`);
63
353
  }
354
+ return conflictFiles;
64
355
  }
356
+ // ============================================================================
357
+ // execute — jarvis diff 入口
358
+ // ============================================================================
65
359
  /**
66
360
  * jarvis diff [path] — 预览升级变更(不实际执行)
361
+ *
362
+ * 增强输出:
363
+ * - Markdown 文件:显示 version diff + section 级差异
364
+ * - JSON 配置文件:显示字段级差异
365
+ * - 末尾:冲突文件汇总
366
+ * - 向后兼容:旧 hash 格式降级为文件级展示
367
+ */
368
+ /**
369
+ * 计算指定平台的已安装目标根目录。
370
+ * 逻辑与 diffPlatform 内 destRoot 计算保持一致。
67
371
  */
372
+ function getDestRoot(platform, target, isGlobal) {
373
+ return isGlobal
374
+ ? (platform === 'opencode'
375
+ ? resolve(homedir(), '.config', 'opencode')
376
+ : resolve(homedir(), `.${platform}`))
377
+ : resolve(target, PLATFORMS[platform].dir);
378
+ }
68
379
  export async function execute(opts, positional) {
69
380
  const path = positional[1];
70
381
  const isGlobal = await resolveScope(opts);
71
382
  const target = resolveTarget(path, isGlobal);
72
383
  console.log(`\n📋 检查变更预览 → ${isGlobal ? '~ (全局)' : target}\n`);
384
+ const allConflicts = [];
73
385
  for (const name of ALL_PLATFORMS) {
74
- await diffPlatform(name, target, isGlobal);
386
+ // 内联冲突检测(来自 diff 过程中的 section 对比)
387
+ const platformConflicts = await diffPlatform(name, target, isGlobal);
388
+ for (const cf of platformConflicts) {
389
+ allConflicts.push(cf);
390
+ }
391
+ // 全面扫描冲突标记(覆盖未变更但含冲突标记的文件)
392
+ const destRoot = getDestRoot(name, target, isGlobal);
393
+ const scannedConflicts = scanConflictFiles(destRoot);
394
+ for (const cf of scannedConflicts) {
395
+ allConflicts.push(cf);
396
+ }
397
+ }
398
+ // ── 冲突文件汇总(去重后末尾统一展示)──
399
+ const uniqueConflicts = [...new Set(allConflicts)];
400
+ if (uniqueConflicts.length > 0) {
401
+ console.log(`\n冲突文件 (${uniqueConflicts.length}):`);
402
+ for (const file of uniqueConflicts) {
403
+ console.log(` ⚠ ${file}`);
404
+ }
75
405
  }
76
406
  console.log(`\n💡 运行 \`jarvis upgrade\` 应用这些变更。\n`);
77
407
  }
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../src/cli/commands/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../src/cli/commands/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CliOpts } from '../utils/args.js';
2
+ /**
3
+ * jarvis resolve — 交互式和批量模式解决合并冲突。
4
+ *
5
+ * 用法:
6
+ * jarvis resolve <file> 交互式逐冲突选择
7
+ * jarvis resolve <file> --accept user 保留所有用户版本
8
+ * jarvis resolve <file> --accept template 使用所有模板版本
9
+ * jarvis resolve --all --accept user|template 批量解决
10
+ * jarvis resolve --list 列出所有冲突文件
11
+ */
12
+ export declare function execute(opts: CliOpts, positional: string[]): Promise<void>;