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.
- package/.claude/commands/opsx/apply.md +152 -0
- package/.claude/commands/opsx/archive.md +157 -0
- package/.claude/commands/opsx/bulk-archive.md +242 -0
- package/.claude/commands/opsx/continue.md +114 -0
- package/.claude/commands/opsx/explore.md +174 -0
- package/.claude/commands/opsx/ff.md +94 -0
- package/.claude/commands/opsx/new.md +69 -0
- package/.claude/commands/opsx/onboard.md +534 -0
- package/.claude/commands/opsx/sync.md +134 -0
- package/.claude/commands/opsx/verify.md +164 -0
- package/.claude/settings.local.json +8 -0
- package/.claude/skills/npm-publish/SKILL.md +164 -0
- package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
- package/.claude/skills/openspec-archive-change/SKILL.md +161 -0
- package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
- package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
- package/.claude/skills/openspec-explore/SKILL.md +289 -0
- package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
- package/.claude/skills/openspec-new-change/SKILL.md +74 -0
- package/.claude/skills/openspec-onboard/SKILL.md +538 -0
- package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
- package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
- package/CLAUDE.md +92 -0
- package/README.md +319 -0
- package/build/engines/decimal.d.ts +10 -0
- package/build/engines/decimal.d.ts.map +1 -0
- package/build/engines/decimal.js +61 -0
- package/build/engines/decimal.js.map +1 -0
- package/build/engines/programmer.d.ts +18 -0
- package/build/engines/programmer.d.ts.map +1 -0
- package/build/engines/programmer.js +103 -0
- package/build/engines/programmer.js.map +1 -0
- package/build/errors/handler.d.ts +10 -0
- package/build/errors/handler.d.ts.map +1 -0
- package/build/errors/handler.js +37 -0
- package/build/errors/handler.js.map +1 -0
- package/build/errors/types.d.ts +25 -0
- package/build/errors/types.d.ts.map +1 -0
- package/build/errors/types.js +2 -0
- package/build/errors/types.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +16 -0
- package/build/index.js.map +1 -0
- package/build/mcp/server.d.ts +3 -0
- package/build/mcp/server.d.ts.map +1 -0
- package/build/mcp/server.js +270 -0
- package/build/mcp/server.js.map +1 -0
- package/build/mcp/tools/ascii.d.ts +11 -0
- package/build/mcp/tools/ascii.d.ts.map +1 -0
- package/build/mcp/tools/ascii.js +93 -0
- package/build/mcp/tools/ascii.js.map +1 -0
- package/build/mcp/tools/basic.d.ts +6 -0
- package/build/mcp/tools/basic.d.ts.map +1 -0
- package/build/mcp/tools/basic.js +34 -0
- package/build/mcp/tools/basic.js.map +1 -0
- package/build/mcp/tools/conversion.d.ts +8 -0
- package/build/mcp/tools/conversion.d.ts.map +1 -0
- package/build/mcp/tools/conversion.js +81 -0
- package/build/mcp/tools/conversion.js.map +1 -0
- package/build/mcp/tools/programmer.d.ts +6 -0
- package/build/mcp/tools/programmer.d.ts.map +1 -0
- package/build/mcp/tools/programmer.js +29 -0
- package/build/mcp/tools/programmer.js.map +1 -0
- package/build/parser/ast.d.ts +47 -0
- package/build/parser/ast.d.ts.map +1 -0
- package/build/parser/ast.js +2 -0
- package/build/parser/ast.js.map +1 -0
- package/build/parser/lexer.d.ts +24 -0
- package/build/parser/lexer.d.ts.map +1 -0
- package/build/parser/lexer.js +168 -0
- package/build/parser/lexer.js.map +1 -0
- package/build/parser/parser.d.ts +14 -0
- package/build/parser/parser.d.ts.map +1 -0
- package/build/parser/parser.js +115 -0
- package/build/parser/parser.js.map +1 -0
- package/docs/plans/2025-02-24-mcp-calculator-design.md +344 -0
- package/docs/plans/2025-02-24-mcp-calculator-implementation.md +2626 -0
- package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/.openspec.yaml +2 -0
- package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/design.md +46 -0
- package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/proposal.md +21 -0
- package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/specs/ascii-conversion/spec.md +22 -0
- package/openspec/changes/archive/2026-02-24-simplify-ascii-tools/tasks.md +24 -0
- package/openspec/config.yaml +20 -0
- package/openspec/specs/ascii-conversion/spec.md +43 -0
- package/package.json +40 -0
- package/src/engines/decimal.ts +69 -0
- package/src/engines/programmer.ts +112 -0
- package/src/errors/handler.ts +55 -0
- package/src/errors/types.ts +37 -0
- package/src/index.ts +20 -0
- package/src/mcp/server.ts +287 -0
- package/src/mcp/tools/ascii.ts +116 -0
- package/src/mcp/tools/basic.ts +44 -0
- package/src/mcp/tools/conversion.ts +95 -0
- package/src/mcp/tools/programmer.ts +36 -0
- package/src/parser/ast.ts +51 -0
- package/src/parser/lexer.ts +216 -0
- package/src/parser/parser.ts +154 -0
- package/test/integration/ascii.test.ts +450 -0
- package/test/integration/basic-calculate.test.ts +272 -0
- package/test/integration/conversion.test.ts +357 -0
- package/test/integration/programmer-calculate.test.ts +363 -0
- package/test/unit/decimal-engine.test.ts +134 -0
- package/test/unit/error-handler.test.ts +173 -0
- package/test/unit/lexer.test.ts +176 -0
- package/test/unit/parser.test.ts +197 -0
- package/test/unit/programmer-engine.test.ts +234 -0
- package/tsconfig.json +20 -0
- 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,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
|
+
- 如果存在增量规范,始终运行同步评估并在提示前显示合并总结
|