calc-mcp-server 0.1.0

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 (110) hide show
  1. package/.claude/commands/opsx/apply.md +152 -0
  2. package/.claude/commands/opsx/archive.md +157 -0
  3. package/.claude/commands/opsx/bulk-archive.md +242 -0
  4. package/.claude/commands/opsx/continue.md +114 -0
  5. package/.claude/commands/opsx/explore.md +174 -0
  6. package/.claude/commands/opsx/ff.md +94 -0
  7. package/.claude/commands/opsx/new.md +69 -0
  8. package/.claude/commands/opsx/onboard.md +534 -0
  9. package/.claude/commands/opsx/sync.md +134 -0
  10. package/.claude/commands/opsx/verify.md +164 -0
  11. package/.claude/settings.local.json +8 -0
  12. package/.claude/skills/npm-publish/SKILL.md +164 -0
  13. package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
  14. package/.claude/skills/openspec-archive-change/SKILL.md +161 -0
  15. package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  16. package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
  17. package/.claude/skills/openspec-explore/SKILL.md +289 -0
  18. package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
  19. package/.claude/skills/openspec-new-change/SKILL.md +74 -0
  20. package/.claude/skills/openspec-onboard/SKILL.md +538 -0
  21. package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
  22. package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
  23. package/CLAUDE.md +92 -0
  24. package/README.md +319 -0
  25. package/build/engines/decimal.d.ts +10 -0
  26. package/build/engines/decimal.d.ts.map +1 -0
  27. package/build/engines/decimal.js +61 -0
  28. package/build/engines/decimal.js.map +1 -0
  29. package/build/engines/programmer.d.ts +18 -0
  30. package/build/engines/programmer.d.ts.map +1 -0
  31. package/build/engines/programmer.js +103 -0
  32. package/build/engines/programmer.js.map +1 -0
  33. package/build/errors/handler.d.ts +10 -0
  34. package/build/errors/handler.d.ts.map +1 -0
  35. package/build/errors/handler.js +37 -0
  36. package/build/errors/handler.js.map +1 -0
  37. package/build/errors/types.d.ts +25 -0
  38. package/build/errors/types.d.ts.map +1 -0
  39. package/build/errors/types.js +2 -0
  40. package/build/errors/types.js.map +1 -0
  41. package/build/index.d.ts +3 -0
  42. package/build/index.d.ts.map +1 -0
  43. package/build/index.js +16 -0
  44. package/build/index.js.map +1 -0
  45. package/build/mcp/server.d.ts +3 -0
  46. package/build/mcp/server.d.ts.map +1 -0
  47. package/build/mcp/server.js +270 -0
  48. package/build/mcp/server.js.map +1 -0
  49. package/build/mcp/tools/ascii.d.ts +11 -0
  50. package/build/mcp/tools/ascii.d.ts.map +1 -0
  51. package/build/mcp/tools/ascii.js +93 -0
  52. package/build/mcp/tools/ascii.js.map +1 -0
  53. package/build/mcp/tools/basic.d.ts +6 -0
  54. package/build/mcp/tools/basic.d.ts.map +1 -0
  55. package/build/mcp/tools/basic.js +34 -0
  56. package/build/mcp/tools/basic.js.map +1 -0
  57. package/build/mcp/tools/conversion.d.ts +8 -0
  58. package/build/mcp/tools/conversion.d.ts.map +1 -0
  59. package/build/mcp/tools/conversion.js +81 -0
  60. package/build/mcp/tools/conversion.js.map +1 -0
  61. package/build/mcp/tools/programmer.d.ts +6 -0
  62. package/build/mcp/tools/programmer.d.ts.map +1 -0
  63. package/build/mcp/tools/programmer.js +29 -0
  64. package/build/mcp/tools/programmer.js.map +1 -0
  65. package/build/parser/ast.d.ts +47 -0
  66. package/build/parser/ast.d.ts.map +1 -0
  67. package/build/parser/ast.js +2 -0
  68. package/build/parser/ast.js.map +1 -0
  69. package/build/parser/lexer.d.ts +24 -0
  70. package/build/parser/lexer.d.ts.map +1 -0
  71. package/build/parser/lexer.js +168 -0
  72. package/build/parser/lexer.js.map +1 -0
  73. package/build/parser/parser.d.ts +14 -0
  74. package/build/parser/parser.d.ts.map +1 -0
  75. package/build/parser/parser.js +115 -0
  76. package/build/parser/parser.js.map +1 -0
  77. package/docs/plans/2025-02-24-mcp-calculator-design.md +344 -0
  78. package/docs/plans/2025-02-24-mcp-calculator-implementation.md +2626 -0
  79. package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/.openspec.yaml +2 -0
  80. package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/design.md +46 -0
  81. package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/proposal.md +21 -0
  82. package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/specs/ascii-conversion/spec.md +22 -0
  83. package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/tasks.md +24 -0
  84. package/openspec/config.yaml +20 -0
  85. package/openspec/specs/ascii-conversion/spec.md +43 -0
  86. package/package.json +40 -0
  87. package/src/engines/decimal.ts +69 -0
  88. package/src/engines/programmer.ts +112 -0
  89. package/src/errors/handler.ts +55 -0
  90. package/src/errors/types.ts +37 -0
  91. package/src/index.ts +20 -0
  92. package/src/mcp/server.ts +287 -0
  93. package/src/mcp/tools/ascii.ts +116 -0
  94. package/src/mcp/tools/basic.ts +44 -0
  95. package/src/mcp/tools/conversion.ts +95 -0
  96. package/src/mcp/tools/programmer.ts +36 -0
  97. package/src/parser/ast.ts +51 -0
  98. package/src/parser/lexer.ts +216 -0
  99. package/src/parser/parser.ts +154 -0
  100. package/test/integration/ascii.test.ts +450 -0
  101. package/test/integration/basic-calculate.test.ts +272 -0
  102. package/test/integration/conversion.test.ts +357 -0
  103. package/test/integration/programmer-calculate.test.ts +363 -0
  104. package/test/unit/decimal-engine.test.ts +134 -0
  105. package/test/unit/error-handler.test.ts +173 -0
  106. package/test/unit/lexer.test.ts +176 -0
  107. package/test/unit/parser.test.ts +197 -0
  108. package/test/unit/programmer-engine.test.ts +234 -0
  109. package/tsconfig.json +20 -0
  110. package/vitest.config.ts +13 -0
@@ -0,0 +1,164 @@
1
+ ---
2
+ name: "OPSX: Verify"
3
+ description: Verify implementation matches change artifacts before archiving
4
+ category: Workflow
5
+ tags: [workflow, verify, experimental]
6
+ ---
7
+
8
+ Verify that an implementation matches the change artifacts (specs, tasks, design).
9
+
10
+ **Input**: Optionally specify a change name after `/opsx:verify` (e.g., `/opsx:verify add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
11
+
12
+ **Steps**
13
+
14
+ 1. **If no change name provided, prompt for selection**
15
+
16
+ Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.
17
+
18
+ Show changes that have implementation tasks (tasks artifact exists).
19
+ Include the schema used for each change if available.
20
+ Mark changes with incomplete tasks as "(In Progress)".
21
+
22
+ **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.
23
+
24
+ 2. **Check status to understand the schema**
25
+ ```bash
26
+ openspec status --change "<name>" --json
27
+ ```
28
+ Parse the JSON to understand:
29
+ - `schemaName`: The workflow being used (e.g., "spec-driven")
30
+ - Which artifacts exist for this change
31
+
32
+ 3. **Get the change directory and load artifacts**
33
+
34
+ ```bash
35
+ openspec instructions apply --change "<name>" --json
36
+ ```
37
+
38
+ This returns the change directory and context files. Read all available artifacts from `contextFiles`.
39
+
40
+ 4. **Initialize verification report structure**
41
+
42
+ Create a report structure with three dimensions:
43
+ - **Completeness**: Track tasks and spec coverage
44
+ - **Correctness**: Track requirement implementation and scenario coverage
45
+ - **Coherence**: Track design adherence and pattern consistency
46
+
47
+ Each dimension can have CRITICAL, WARNING, or SUGGESTION issues.
48
+
49
+ 5. **Verify Completeness**
50
+
51
+ **Task Completion**:
52
+ - If tasks.md exists in contextFiles, read it
53
+ - Parse checkboxes: `- [ ]` (incomplete) vs `- [x]` (complete)
54
+ - Count complete vs total tasks
55
+ - If incomplete tasks exist:
56
+ - Add CRITICAL issue for each incomplete task
57
+ - Recommendation: "Complete task: <description>" or "Mark as done if already implemented"
58
+
59
+ **Spec Coverage**:
60
+ - If delta specs exist in `openspec/changes/<name>/specs/`:
61
+ - Extract all requirements (marked with "### Requirement:")
62
+ - For each requirement:
63
+ - Search codebase for keywords related to the requirement
64
+ - Assess if implementation likely exists
65
+ - If requirements appear unimplemented:
66
+ - Add CRITICAL issue: "Requirement not found: <requirement name>"
67
+ - Recommendation: "Implement requirement X: <description>"
68
+
69
+ 6. **Verify Correctness**
70
+
71
+ **Requirement Implementation Mapping**:
72
+ - For each requirement from delta specs:
73
+ - Search codebase for implementation evidence
74
+ - If found, note file paths and line ranges
75
+ - Assess if implementation matches requirement intent
76
+ - If divergence detected:
77
+ - Add WARNING: "Implementation may diverge from spec: <details>"
78
+ - Recommendation: "Review <file>:<lines> against requirement X"
79
+
80
+ **Scenario Coverage**:
81
+ - For each scenario in delta specs (marked with "#### Scenario:"):
82
+ - Check if conditions are handled in code
83
+ - Check if tests exist covering the scenario
84
+ - If scenario appears uncovered:
85
+ - Add WARNING: "Scenario not covered: <scenario name>"
86
+ - Recommendation: "Add test or implementation for scenario: <description>"
87
+
88
+ 7. **Verify Coherence**
89
+
90
+ **Design Adherence**:
91
+ - If design.md exists in contextFiles:
92
+ - Extract key decisions (look for sections like "Decision:", "Approach:", "Architecture:")
93
+ - Verify implementation follows those decisions
94
+ - If contradiction detected:
95
+ - Add WARNING: "Design decision not followed: <decision>"
96
+ - Recommendation: "Update implementation or revise design.md to match reality"
97
+ - If no design.md: Skip design adherence check, note "No design.md to verify against"
98
+
99
+ **Code Pattern Consistency**:
100
+ - Review new code for consistency with project patterns
101
+ - Check file naming, directory structure, coding style
102
+ - If significant deviations found:
103
+ - Add SUGGESTION: "Code pattern deviation: <details>"
104
+ - Recommendation: "Consider following project pattern: <example>"
105
+
106
+ 8. **Generate Verification Report**
107
+
108
+ **Summary Scorecard**:
109
+ ```
110
+ ## Verification Report: <change-name>
111
+
112
+ ### Summary
113
+ | Dimension | Status |
114
+ |--------------|------------------|
115
+ | Completeness | X/Y tasks, N reqs|
116
+ | Correctness | M/N reqs covered |
117
+ | Coherence | Followed/Issues |
118
+ ```
119
+
120
+ **Issues by Priority**:
121
+
122
+ 1. **CRITICAL** (Must fix before archive):
123
+ - Incomplete tasks
124
+ - Missing requirement implementations
125
+ - Each with specific, actionable recommendation
126
+
127
+ 2. **WARNING** (Should fix):
128
+ - Spec/design divergences
129
+ - Missing scenario coverage
130
+ - Each with specific recommendation
131
+
132
+ 3. **SUGGESTION** (Nice to fix):
133
+ - Pattern inconsistencies
134
+ - Minor improvements
135
+ - Each with specific recommendation
136
+
137
+ **Final Assessment**:
138
+ - If CRITICAL issues: "X critical issue(s) found. Fix before archiving."
139
+ - If only warnings: "No critical issues. Y warning(s) to consider. Ready for archive (with noted improvements)."
140
+ - If all clear: "All checks passed. Ready for archive."
141
+
142
+ **Verification Heuristics**
143
+
144
+ - **Completeness**: Focus on objective checklist items (checkboxes, requirements list)
145
+ - **Correctness**: Use keyword search, file path analysis, reasonable inference - don't require perfect certainty
146
+ - **Coherence**: Look for glaring inconsistencies, don't nitpick style
147
+ - **False Positives**: When uncertain, prefer SUGGESTION over WARNING, WARNING over CRITICAL
148
+ - **Actionability**: Every issue must have a specific recommendation with file/line references where applicable
149
+
150
+ **Graceful Degradation**
151
+
152
+ - If only tasks.md exists: verify task completion only, skip spec/design checks
153
+ - If tasks + specs exist: verify completeness and correctness, skip design
154
+ - If full artifacts: verify all three dimensions
155
+ - Always note which checks were skipped and why
156
+
157
+ **Output Format**
158
+
159
+ Use clear markdown with:
160
+ - Table for summary scorecard
161
+ - Grouped lists for issues (CRITICAL/WARNING/SUGGESTION)
162
+ - Code references in format: `file.ts:123`
163
+ - Specific, actionable recommendations
164
+ - No vague suggestions like "consider reviewing"
@@ -0,0 +1,8 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm whoami)",
5
+ "Bash(npm config get registry)"
6
+ ]
7
+ }
8
+ }
@@ -0,0 +1,164 @@
1
+ ---
2
+ name: npm-publish
3
+ description: 发布 @neosamon/calc-mcp-server 到 npm。当用户想要发布新版本或更新包时使用。
4
+ license: MIT
5
+ compatibility: Requires npm, Node.js 18+, and valid npm credentials.
6
+ metadata:
7
+ author: neosamon
8
+ version: "1.0"
9
+ generatedBy: "1.1.1"
10
+ ---
11
+
12
+ 发布 `@neosamon/calc-mcp-server` 到 npm registry。
13
+
14
+ **输入**:用户可以指定版本更新类型(patch/minor/major)或具体版本号。默认为 patch。
15
+
16
+ **步骤**
17
+
18
+ 1. **验证前置条件**
19
+
20
+ 在发布前验证以下条件:
21
+
22
+ ```bash
23
+ # 检查 npm 登录状态
24
+ npm whoami
25
+
26
+ # 检查当前 registry
27
+ npm config get registry
28
+
29
+ # 如果不是官方 registry,提示切换
30
+ # npm config set registry https://registry.npmjs.org/
31
+ ```
32
+
33
+ **如果未登录 npm**:
34
+ - 提示用户需要 Granular Access Token
35
+ - 参考用户使用 AskUserQuestion:
36
+ > "你还没有登录 npm。需要先配置 Granular Access Token。是否需要配置说明?"
37
+
38
+ 2. **检查当前版本号**
39
+
40
+ ```bash
41
+ npm view @neosamon/calc-mcp-server version
42
+ ```
43
+
44
+ 3. **确定版本更新类型**
45
+
46
+ 使用 **AskUserQuestion Tool** 询问版本更新类型:
47
+
48
+ > "选择版本更新类型:
49
+ > - **patch** (x.x.X): 修复 bug,向下兼容的问题修正
50
+ > - **minor** (x.X.x): 新增功能,向下兼容的功能性新增
51
+ > - **major** (X.x.x): 破坏性变更,不向下兼容的 API 修改
52
+ > - **custom**: 手动指定版本号"
53
+
54
+ 4. **执行版本更新**
55
+
56
+ 根据用户选择执行对应的命令:
57
+
58
+ ```bash
59
+ # patch: 修复 bug
60
+ npm version patch
61
+
62
+ # minor: 新增功能
63
+ npm version minor
64
+
65
+ # major: 破坏性变更
66
+ npm version major
67
+
68
+ # custom: 手动指定
69
+ npm version <version>
70
+ ```
71
+
72
+ 5. **清理并编译**
73
+
74
+ ```bash
75
+ # 清理旧的构建产物
76
+ rm -rf build node_modules
77
+
78
+ # 安装依赖
79
+ npm install
80
+
81
+ # 编译 TypeScript
82
+ npm run build
83
+ ```
84
+
85
+ 6. **验证编译结果**
86
+
87
+ ```bash
88
+ # 验证 shebang(可执行文件头)
89
+ head -1 build/index.js
90
+ # 应该输出: #!/usr/bin/env node
91
+ ```
92
+
93
+ **如果 shebang 不正确**:
94
+ - 报告错误并要求修复 `src/index.ts` 第一行
95
+
96
+ 7. **发布到 npm**
97
+
98
+ ```bash
99
+ npm publish --access public
100
+ ```
101
+
102
+ 8. **验证发布结果**
103
+
104
+ ```bash
105
+ # 查看包信息
106
+ npm view @neosamon/calc-mcp-server
107
+ ```
108
+
109
+ 9. **询问是否恢复淘宝镜像(可选)**
110
+
111
+ 使用 **AskUserQuestion Tool**:
112
+ > "发布成功!是否需要恢复淘宝镜像以加速其他包的安装?"
113
+
114
+ 如果确认,执行:
115
+ ```bash
116
+ npm config set registry https://registry.npmmirror.com/
117
+ ```
118
+
119
+ **输出**
120
+
121
+ 完成发布后,显示:
122
+ - 新版本号
123
+ - npm 包信息
124
+ - 发布时间
125
+ - 安装测试命令
126
+ - 提示:"已成功发布到 npm!可以使用 `npx @neosamon/calc-mcp-server` 安装使用。"
127
+
128
+ **快速发布模式**
129
+
130
+ 如果用户输入 `/npm-publish --fast` 或类似快捷模式:
131
+ - 跳过版本更新确认,默认使用 patch
132
+ - 执行清理、编译、发布一条龙流程
133
+ - 命令:`rm -rf build node_modules && npm install && npm run build && npm version patch && npm publish --access public`
134
+
135
+ **护栏**
136
+
137
+ - **必须**验证 npm 登录状态,未登录时停止并提示
138
+ - **必须**确认使用官方 registry,淘宝镜像会导致发布失败
139
+ - **必须**验证编译成功后再发布
140
+ - **不要**在发布失败后自动重试(可能覆盖已有版本)
141
+ - **不要**跳过版本更新步骤(避免版本冲突)
142
+
143
+ **发布前检查清单**
144
+
145
+ - [ ] npm 已登录 (`npm whoami`)
146
+ - [ ] 使用官方 registry (`npm config get registry`)
147
+ - [ ] 代码已编译 (`npm run build`)
148
+ - [ ] shebang 正确 (`head -1 build/index.js`)
149
+ - [ ] 版本号已更新
150
+
151
+ **常见错误处理**
152
+
153
+ | 错误 | 原因 | 解决方案 |
154
+ |------|------|---------|
155
+ | 403 Forbidden | 2FA required | 使用 Granular Access Token 并启用 "2FA bypass" |
156
+ | 401 Unauthorized | Token 过期/无效 | 重新创建并配置 Token |
157
+ | E403 | 权限不足 | 确认属于 @neosamon 组织且有 Publish 权限 |
158
+ | command not found | shebang 缺失 | 检查 `src/index.ts` 第一行是否为 `#!/usr/bin/env node` |
159
+
160
+ **相关文档**
161
+
162
+ - [PUBLISH.md](../PUBLISH.md) - 详细发布文档
163
+ - [DEVELOPMENT.md](../DEVELOPMENT.md) - 开发指南
164
+ - [npm 发布文档](https://docs.npm.com/cli/v9/commands/npm-publish)
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: openspec-apply-change
3
+ description: 实施 OpenSpec 变更中的任务。当用户想要开始实施、继续实施或处理任务时使用。
4
+ license: MIT
5
+ compatibility: Requires openspec CLI.
6
+ metadata:
7
+ author: openspec
8
+ version: "1.0"
9
+ generatedBy: "1.1.1"
10
+ ---
11
+
12
+ 实施 OpenSpec 变更中的任务。
13
+
14
+ **输入**:可选择指定变更名称。如果省略,检查是否可以从对话上下文中推断。如果模糊或不明确,必须提示可用的变更。
15
+
16
+ **步骤**
17
+
18
+ 1. **选择变更**
19
+
20
+ 如果提供了名称,使用它。否则:
21
+ - 如果用户提到变更,从对话上下文中推断
22
+ - 如果只有一个活跃变更,自动选择
23
+ - 如果模糊,运行 `openspec list --json` 获取可用变更,并使用 **AskUserQuestion 工具** 让用户选择
24
+
25
+ 始终宣布:"正在使用变更:<name>" 以及如何覆盖(例如,`/opsx:apply <other>`)。
26
+
27
+ 2. **检查状态以了解 Schema**
28
+ ```bash
29
+ openspec status --change "<name>" --json
30
+ ```
31
+ 解析 JSON 以了解:
32
+ - `schemaName`:正在使用的工作流(例如,"spec-driven")
33
+ - 哪个产物包含任务(通常是 "tasks",对于其他 Schema 检查状态)
34
+
35
+ 3. **获取实施指令**
36
+
37
+ ```bash
38
+ openspec instructions apply --change "<name>" --json
39
+ ```
40
+
41
+ 这返回:
42
+ - 上下文文件路径(因 Schema 而异 - 可能是 proposal/specs/design/tasks 或 spec/tests/implementation/docs)
43
+ - 进度(总数,完成,剩余)
44
+ - 带状态的任务列表
45
+ - 基于当前状态的动态指令
46
+
47
+ **处理状态:**
48
+ - 如果 `state: "blocked"`(缺少产物):显示消息,建议使用 openspec-continue-change
49
+ - 如果 `state: "all_done"`:祝贺,建议归档
50
+ - 否则:继续实施
51
+
52
+ 4. **阅读上下文文件**
53
+
54
+ 阅读实施指令输出中 `contextFiles` 列出的文件。
55
+ 文件取决于正在使用的 Schema:
56
+ - **spec-driven**:proposal, specs, design, tasks
57
+ - 其他 Schema:遵循 CLI 输出中的 contextFiles
58
+
59
+ 5. **显示当前进度**
60
+
61
+ 显示:
62
+ - 正在使用的 Schema
63
+ - 进度:"N/M 任务完成"
64
+ - 剩余任务概览
65
+ - 来自 CLI 的动态指令
66
+
67
+ 6. **实施任务(循环直到完成或阻塞)**
68
+
69
+ 对于每个待处理任务:
70
+ - 显示正在处理哪个任务
71
+ - 进行所需的代码更改
72
+ - 保持更改最小且专注
73
+ - 在任务文件中标记任务完成:`- [ ]` → `- [x]`
74
+ - 继续下一个任务
75
+
76
+ **暂停如果:**
77
+ - 任务不清楚 → 寻求澄清
78
+ - 实施揭示了设计问题 → 建议更新产物
79
+ - 遇到错误或阻碍 → 报告并等待指导
80
+ - 用户打断
81
+
82
+ 7. **完成或暂停时,显示状态**
83
+
84
+ 显示:
85
+ - 本次会话完成的任务
86
+ - 总体进度:"N/M 任务完成"
87
+ - 如果全部完成:建议归档
88
+ - 如果暂停:解释原因并等待指导
89
+
90
+ **实施期间的输出**
91
+
92
+ ```
93
+ ## 正在实施:<change-name> (schema: <schema-name>)
94
+
95
+ 正在处理任务 3/7:<task description>
96
+ [...实施中...]
97
+ ✓ 任务完成
98
+
99
+ 正在处理任务 4/7:<task description>
100
+ [...实施中...]
101
+ ✓ 任务完成
102
+ ```
103
+
104
+ **完成时的输出**
105
+
106
+ ```
107
+ ## 实施完成
108
+
109
+ **变更:** <change-name>
110
+ **Schema:** <schema-name>
111
+ **进度:** 7/7 任务完成 ✓
112
+
113
+ ### 本次会话完成
114
+ - [x] Task 1
115
+ - [x] Task 2
116
+ ...
117
+
118
+ 所有任务完成!准备归档此变更。
119
+ ```
120
+
121
+ **暂停时的输出(遇到问题)**
122
+
123
+ ```
124
+ ## 实施暂停
125
+
126
+ **变更:** <change-name>
127
+ **Schema:** <schema-name>
128
+ **进度:** 4/7 任务完成
129
+
130
+ ### 遇到的问题
131
+ <description of the issue>
132
+
133
+ **选项:**
134
+ 1. <option 1>
135
+ 2. <option 2>
136
+ 3. 其他方法
137
+
138
+ 你想怎么做?
139
+ ```
140
+
141
+ **护栏**
142
+ - 继续处理任务直到完成或阻塞
143
+ - 开始前始终阅读上下文文件(来自实施指令输出)
144
+ - 如果任务模糊,在实施前暂停并询问
145
+ - 如果实施揭示了问题,暂停并建议更新产物
146
+ - 保持代码更改最小并限定在每个任务范围内
147
+ - 完成每个任务后立即更新任务复选框
148
+ - 遇到错误、阻碍或不明确的需求时暂停 - 不要猜测
149
+ - 使用 CLI 输出中的 contextFiles,不要假设特定的文件名
150
+
151
+ **流畅的工作流集成**
152
+
153
+ 此技能支持 "对变更的操作" 模型:
154
+
155
+ - **可以随时调用**:在所有产物完成之前(如果任务存在),部分实施后,与其他操作交错
156
+ - **允许产物更新**:如果实施揭示了设计问题,建议更新产物 - 不是阶段锁定的,流畅工作
@@ -0,0 +1,161 @@
1
+ ---
2
+ name: openspec-archive-change
3
+ description: 在实验性工作流中归档已完成的变更。当用户想要在实施完成后最终确定并归档变更时使用。
4
+ license: MIT
5
+ compatibility: Requires openspec CLI.
6
+ metadata:
7
+ author: openspec
8
+ version: "1.0"
9
+ generatedBy: "1.1.1"
10
+ ---
11
+
12
+ 在实验性工作流中归档已完成的变更。
13
+
14
+ **输入**:可选择指定变更名称。如果省略,检查是否可以从对话上下文中推断。如果模糊或不明确,必须提示可用的变更。
15
+
16
+ **步骤**
17
+
18
+ 1. **如果没有提供变更名称,提示选择**
19
+
20
+ 运行 `openspec list --json` 获取可用变更。使用 **AskUserQuestion 工具** 让用户选择。
21
+
22
+ 仅显示活跃变更(未归档)。
23
+ 如果可用,包括每个变更使用的 Schema。
24
+
25
+ **重要**:不要猜测或自动选择变更。始终让用户选择。
26
+
27
+ 2. **检查产物完成状态**
28
+
29
+ 运行 `openspec status --change "<name>" --json` 检查产物完成情况。
30
+
31
+ 解析 JSON 以了解:
32
+ - `schemaName`:正在使用的工作流
33
+ - `artifacts`:产物列表及其状态(`done` 或其他)
34
+
35
+ **如果有产物未 `done`:**
36
+ - 显示列出未完成产物的警告
37
+ - 使用 **AskUserQuestion 工具** 确认用户是否要继续
38
+ - 如果用户确认则继续
39
+
40
+ 3. **检查任务完成状态**
41
+
42
+ 阅读任务文件(通常是 `tasks.md`)以检查未完成的任务。
43
+
44
+ 统计标记为 `- [ ]`(未完成)与 `- [x]`(完成)的任务。
45
+
46
+ **如果发现未完成的任务:**
47
+ - 显示列出未完成任务计数的警告
48
+ - 使用 **AskUserQuestion 工具** 确认用户是否要继续
49
+ - 如果用户确认则继续
50
+
51
+ **如果不存在任务文件:** 继续而不显示任务相关警告。
52
+
53
+ 4. **评估增量规范同步状态**
54
+
55
+ 检查 `openspec/changes/<name>/specs/` 中的增量规范。如果不存在,继续而不显示同步提示。
56
+
57
+ **如果存在增量规范:**
58
+ - 将每个增量规范与 `openspec/specs/<capability>/spec.md` 中的对应主规范进行比较
59
+ - 确定将应用哪些更改(添加、修改、删除、重命名)
60
+ - 在提示之前显示合并总结
61
+
62
+ **提示选项:**
63
+ - 如果需要更改:"立即同步(推荐)","归档而不同步"
64
+ - 如果已同步:"立即归档","仍然同步","取消"
65
+
66
+ 如果用户选择同步,使用 Task 工具(subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>")。无论选择如何,都继续归档。
67
+
68
+ 5. **执行归档**
69
+
70
+ 如果归档目录不存在,创建它:
71
+ ```bash
72
+ mkdir -p openspec/changes/archive
73
+ ```
74
+
75
+ 使用当前日期生成目标名称:`YYYY-MM-DD-<change-name>`
76
+
77
+ **检查目标是否已存在:**
78
+ - 如果是:报错失败,建议重命名现有归档或使用不同日期
79
+ - 如果否:将变更目录移动到归档
80
+
81
+ ```bash
82
+ mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
83
+ ```
84
+
85
+ 6. **显示总结**
86
+
87
+ 显示归档完成总结,包括:
88
+ - 变更名称
89
+ - 使用的 Schema
90
+ - 归档位置
91
+ - 规范同步状态(已同步 / 跳过同步 / 无增量规范)
92
+ - 关于任何警告的说明(未完成的产物/任务)
93
+
94
+ **成功时的输出**
95
+
96
+ ```
97
+ ## 归档完成
98
+
99
+ **变更:** <change-name>
100
+ **Schema:** <schema-name>
101
+ **归档至:** openspec/changes/archive/YYYY-MM-DD-<name>/
102
+ **规范:** ✓ 已同步到主规范
103
+
104
+ 所有产物已完成。所有任务已完成。
105
+ ```
106
+
107
+ **成功时的输出(无增量规范)**
108
+
109
+ ```
110
+ ## 归档完成
111
+
112
+ **变更:** <change-name>
113
+ **Schema:** <schema-name>
114
+ **归档至:** openspec/changes/archive/YYYY-MM-DD-<name>/
115
+ **规范:** 无增量规范
116
+
117
+ 所有产物已完成。所有任务已完成。
118
+ ```
119
+
120
+ **带警告的成功输出**
121
+
122
+ ```
123
+ ## 归档完成(带警告)
124
+
125
+ **变更:** <change-name>
126
+ **Schema:** <schema-name>
127
+ **归档至:** openspec/changes/archive/YYYY-MM-DD-<name>/
128
+ **规范:** 同步已跳过(用户选择跳过)
129
+
130
+ **警告:**
131
+ - 归档时有 2 个未完成的产物
132
+ - 归档时有 3 个未完成的任务
133
+ - 增量规范同步已跳过(用户选择跳过)
134
+
135
+ 如果这不是故意的,请检查归档。
136
+ ```
137
+
138
+ **错误时的输出(归档已存在)**
139
+
140
+ ```
141
+ ## 归档失败
142
+
143
+ **变更:** <change-name>
144
+ **目标:** openspec/changes/archive/YYYY-MM-DD-<name>/
145
+
146
+ 目标归档目录已存在。
147
+
148
+ **选项:**
149
+ 1. 重命名现有的归档
150
+ 2. 如果是重复的,删除现有的归档
151
+ 3. 等到不同的日期再归档
152
+ ```
153
+
154
+ **护栏**
155
+ - 如果未提供,始终提示选择变更
156
+ - 使用产物图 (openspec status --json) 进行完成检查
157
+ - 不要因警告阻止归档 - 只需通知并确认
158
+ - 移动到归档时保留 .openspec.yaml(它随目录移动)
159
+ - 显示发生的清晰总结
160
+ - 如果请求同步,使用 Skill 工具调用 `openspec-sync-specs`(Agent 驱动)
161
+ - 如果存在增量规范,始终运行同步评估并在提示前显示合并总结