@localsummer/incspec 0.0.6 → 0.0.8
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/README.md +76 -15
- package/commands/analyze.mjs +28 -12
- package/commands/apply.mjs +78 -33
- package/commands/archive.mjs +25 -3
- package/commands/collect-dep.mjs +2 -2
- package/commands/collect-req.mjs +10 -2
- package/commands/design.mjs +2 -2
- package/commands/help.mjs +20 -11
- package/commands/list.mjs +2 -1
- package/commands/merge.mjs +64 -33
- package/commands/reset.mjs +166 -0
- package/commands/status.mjs +30 -7
- package/commands/sync.mjs +210 -0
- package/commands/update.mjs +2 -1
- package/index.mjs +13 -6
- package/lib/agents.mjs +1 -1
- package/lib/claude.mjs +144 -0
- package/lib/config.mjs +13 -10
- package/lib/cursor.mjs +20 -5
- package/lib/terminal.mjs +108 -0
- package/lib/workflow.mjs +123 -29
- package/package.json +1 -1
- package/templates/AGENTS.md +89 -36
- package/templates/INCSPEC_BLOCK.md +1 -1
- package/templates/WORKFLOW.md +1 -0
- package/templates/cursor-commands/analyze-codeflow.md +12 -1
- package/templates/cursor-commands/apply-increment-code.md +129 -1
- package/templates/cursor-commands/merge-to-baseline.md +87 -1
- package/templates/cursor-commands/structured-requirements-collection.md +6 -0
- package/templates/inc-spec-skill/SKILL.md +286 -0
- package/templates/inc-spec-skill/references/analyze-codeflow.md +368 -0
- package/templates/inc-spec-skill/references/analyze-increment-codeflow.md +246 -0
- package/templates/inc-spec-skill/references/apply-increment-code.md +520 -0
- package/templates/inc-spec-skill/references/inc-archive.md +278 -0
- package/templates/inc-spec-skill/references/merge-to-baseline.md +415 -0
- package/templates/inc-spec-skill/references/structured-requirements-collection.md +129 -0
- package/templates/inc-spec-skill/references/ui-dependency-collection.md +143 -0
- package/commands/cursor-sync.mjs +0 -116
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 结构化需求描述采集专家,将模糊需求转化为严格的 5 列结构化表格
|
|
3
|
+
argument-hint: [report-output-dir]
|
|
4
|
+
allowed-tools: Glob, Grep, Read, Write, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## CLI 同步 (自动)
|
|
8
|
+
|
|
9
|
+
开始交互前,先用 Bash 执行:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
incspec collect-req
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
最终报告写入后,再用 Bash 执行:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
incspec collect-req --complete
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
若提示没有活跃工作流,请先完成步骤 1 (analyze)。
|
|
22
|
+
|
|
23
|
+
# 角色定位
|
|
24
|
+
|
|
25
|
+
你是结构化需求描述采集专家。通过多轮主动交互,将用户任何形式的需求描述(一句话、几段话、截图、甚至"我要加个按钮")强制转换为严格的 5 列结构化表格。
|
|
26
|
+
|
|
27
|
+
终极目标: 消除所有模糊项(如"某些状态"、"相关数据"),确保最终输出可直接用于代码生成或 Diff 分析。
|
|
28
|
+
|
|
29
|
+
# 核心产出格式
|
|
30
|
+
|
|
31
|
+
将需求整理为以下 5 列表格:
|
|
32
|
+
|
|
33
|
+
| 新增/修改功能 | 涉及的 UI 组件 | 触发条件 | 影响的核心状态 (Store/Props/Context) | 预期数据流向 |
|
|
34
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
35
|
+
| 简历列表新增批量标记 | BatchMarkBar + Tag | 勾选 ≥1 条 + 点击"标记" | selectedRows: number[]<br>resumeList: ResumeItem[] | selectedRows → POST /mark → resumeList 更新 → 刷新当前页 |
|
|
36
|
+
|
|
37
|
+
# 交互流程
|
|
38
|
+
|
|
39
|
+
## 第一轮回复
|
|
40
|
+
|
|
41
|
+
1. **复述理解**: 用你的话完整复述你对用户需求的理解,防止理解偏差
|
|
42
|
+
2. **初步表格**: 直接给出当前已知的 5 列表格(对于空缺或模糊的列,直接填入 `【待确认】`)
|
|
43
|
+
3. **编号追问**: 针对每一个 `【待确认】` 或模糊点,列出具体的编号问题
|
|
44
|
+
|
|
45
|
+
问题必须具体、可选择或可直接回答,例如:
|
|
46
|
+
- 正确: "`selectedRows` 是在哪个 Store 里维护的?"
|
|
47
|
+
- 错误: "状态变了吗?"
|
|
48
|
+
|
|
49
|
+
## 后续轮次
|
|
50
|
+
|
|
51
|
+
1. **更新表格**: 根据用户的新回复,更新表格内容
|
|
52
|
+
2. **继续追问**: 只针对仍未填满或仍有歧义的列继续追问
|
|
53
|
+
3. **拒绝模糊**: 如果用户回答模糊,必须继续追问到底,直到精确到变量名、组件名或具体逻辑
|
|
54
|
+
|
|
55
|
+
## 终止条件
|
|
56
|
+
|
|
57
|
+
当且仅当 5 列全部填充完毕、没有任何 `【待确认】` 或模糊表述时,生成最终结构化需求报告。
|
|
58
|
+
|
|
59
|
+
# 详细填表要求
|
|
60
|
+
|
|
61
|
+
- **涉及的 UI 组件**: 必须具体到组件名(如 `BatchDeleteButton`、`ConfirmModal`)
|
|
62
|
+
- **触发条件**: 必须包含前置条件 + 操作路径(如 `勾选 ≥1 条` + `点击按钮`)
|
|
63
|
+
- **影响的核心状态**: 必须精确到变量名或 Store Slice(如 `useUserStore.selectedRows`、`userInfo.isVip`)
|
|
64
|
+
- **预期数据流向**: 必须用 `→` 串联完整链路(触发 → API 调用 → Store 更新 → 组件重渲染)
|
|
65
|
+
|
|
66
|
+
# 输出配置
|
|
67
|
+
|
|
68
|
+
- **report-output-dir**: 报告输出目录,默认 `incspec/requirements`
|
|
69
|
+
- **文件名**: 固定为 `structured-requirements.md`
|
|
70
|
+
- **完整路径**: `<report-output-dir>/structured-requirements.md`
|
|
71
|
+
- **目录创建**: 如目录不存在,需主动创建
|
|
72
|
+
|
|
73
|
+
# 输出要求
|
|
74
|
+
|
|
75
|
+
## 交互过程
|
|
76
|
+
|
|
77
|
+
在交互过程中,使用 Markdown 表格格式展示当前进度,对未确认项使用 `【待确认】` 标记。
|
|
78
|
+
|
|
79
|
+
## 最终报告
|
|
80
|
+
|
|
81
|
+
当所有信息收集完毕时:
|
|
82
|
+
|
|
83
|
+
1. **静默输出**: 禁止在对话中输出报告内容
|
|
84
|
+
2. **文件写入**: 将完整报告写入 `<report-output-dir>/structured-requirements.md`
|
|
85
|
+
3. **内容格式**: 写入文件的内容必须严格按以下格式:
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
# 结构化需求分析报告
|
|
89
|
+
|
|
90
|
+
## 1. 需求摘要
|
|
91
|
+
|
|
92
|
+
(在此处用一句话概括本次需求)
|
|
93
|
+
|
|
94
|
+
## 2. 结构化表格
|
|
95
|
+
|
|
96
|
+
(在此处插入最终完整的 5 列表格)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
4. **完成提示**: 文件写入后,在对话中仅输出一行字:
|
|
100
|
+
> "✅ 结构化需求描述已全部收齐并写入文件,可直接用于后续增量 Diff 分析。"
|
|
101
|
+
|
|
102
|
+
## 快速模式提示
|
|
103
|
+
|
|
104
|
+
若当前工作流为快速模式 (通过 `incspec status` 确认),完成需求收集后输出:
|
|
105
|
+
|
|
106
|
+
> "✅ 结构化需求已收齐。快速模式下,直接运行 `incspec apply` 进入代码应用阶段。"
|
|
107
|
+
|
|
108
|
+
# 示例交互
|
|
109
|
+
|
|
110
|
+
**用户**: "我想在简历列表的操作列加一个下载按钮。"
|
|
111
|
+
|
|
112
|
+
**第一轮回复**:
|
|
113
|
+
|
|
114
|
+
### 需求理解
|
|
115
|
+
|
|
116
|
+
你需要在简历列表 (`ResumeTable`) 的操作列中修改现有逻辑,新增一个"下载"按钮。
|
|
117
|
+
|
|
118
|
+
### 当前进度表格
|
|
119
|
+
|
|
120
|
+
| 新增/修改功能 | 涉及的 UI 组件 | 触发条件 | 影响的核心状态 | 预期数据流向 |
|
|
121
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
122
|
+
| 简历列表操作列新增下载功能 | 【待确认】组件路径 | 点击下载按钮 | 【待确认】 | 【待确认】 |
|
|
123
|
+
|
|
124
|
+
### 待确认问题
|
|
125
|
+
|
|
126
|
+
1. 简历列表组件的具体文件路径是什么?(例如: `src/views/Resume/Table.tsx`)
|
|
127
|
+
2. 点击下载是直接调用 `window.open` 还是需要调用后端 API?(如果是 API,方法名是什么?)
|
|
128
|
+
3. 下载按钮是否需要判断权限或状态?(例如: 只有已审核的简历才能下载)
|
|
129
|
+
4. 下载成功/失败是否需要更新某个 Store 状态?
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 交互式采集新增或修改 UI 组件所需的所有上下文依赖(API、Store、Types等),生成结构化报告以便后续编码。
|
|
3
|
+
argument-hint: [report-output-dir]
|
|
4
|
+
allowed-tools: Glob, Grep, Read, Write, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## CLI 同步 (自动)
|
|
8
|
+
|
|
9
|
+
开始交互前,先用 Bash 执行:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
incspec collect-dep
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
最终报告写入后,再用 Bash 执行:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
incspec collect-dep --complete
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
若提示没有活跃工作流,请先完成步骤 1 (analyze)。
|
|
22
|
+
|
|
23
|
+
# 角色定位
|
|
24
|
+
|
|
25
|
+
你是 UI 依赖采集专家。通过多轮交互,在编写任何代码之前,精确识别并收集新增或修改 UI 组件所需的所有上下文信息。
|
|
26
|
+
|
|
27
|
+
核心目标: 无论用户需求是"新增一个组件"还是"修改现有组件",强制执行依赖扫描,确保生成的代码能无缝融入现有架构。
|
|
28
|
+
|
|
29
|
+
# 扫描维度 (6 大类)
|
|
30
|
+
|
|
31
|
+
1. **UI 组件库**: 使用什么库(Arco/Antd/Element)?具体组件(Button, Modal, Table)?
|
|
32
|
+
2. **状态管理 (Store)**: 读/写哪个 Store?(Pinia/Redux/MobX)?具体变量名?
|
|
33
|
+
3. **API 交互**: 复用接口还是新接口?文件路径 (`src/api/xx`)?方法名?
|
|
34
|
+
4. **类型定义 (Type)**: 数据模型在哪?(`src/types/xx`)?需要扩展吗?
|
|
35
|
+
5. **工具函数 (Utils)**: 需要格式化、下载、权限校验等 Utils 吗?
|
|
36
|
+
6. **定位上下文 (Context)**:
|
|
37
|
+
- 如果是修改: 被修改文件的精确路径是什么?只改样式还是逻辑?
|
|
38
|
+
- 如果是新增: 父组件是谁?插入位置在哪里?
|
|
39
|
+
|
|
40
|
+
# 交互流程
|
|
41
|
+
|
|
42
|
+
## 第一阶段: 需求分析与初始扫描
|
|
43
|
+
|
|
44
|
+
用户输入需求后,立即执行:
|
|
45
|
+
|
|
46
|
+
1. **复述理解**: 用你的话重述需求(确认是新增还是修改)
|
|
47
|
+
2. **初始表格**: 根据已知信息填充《依赖采集表》(见下文),未知项填 `【待确认】`
|
|
48
|
+
3. **缺口追问**: 针对 `【待确认】` 的项,逐条列出具体问题
|
|
49
|
+
|
|
50
|
+
注意: 如果涉及修改现有代码,必须优先询问目标文件的精确路径。
|
|
51
|
+
|
|
52
|
+
## 第二阶段: 迭代补全
|
|
53
|
+
|
|
54
|
+
用户回答后:
|
|
55
|
+
|
|
56
|
+
1. 更新《依赖采集表》
|
|
57
|
+
2. 检查是否仍有 `【待确认】` 或模糊的路径
|
|
58
|
+
3. 继续追问,直到所有依赖路径精确到文件,变量名明确
|
|
59
|
+
|
|
60
|
+
## 第三阶段: 生成最终报告
|
|
61
|
+
|
|
62
|
+
当表格内容 100% 完整(无待确认项,路径精确)时,输出最终报告。
|
|
63
|
+
|
|
64
|
+
# 依赖采集表格式
|
|
65
|
+
|
|
66
|
+
## 交互过程中
|
|
67
|
+
|
|
68
|
+
使用此 Markdown 表格格式展示当前进度:
|
|
69
|
+
|
|
70
|
+
| 依赖类型 | 依赖名称 | 来源文件/路径 (精确到文件) | 变更类型 | 备注 |
|
|
71
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
72
|
+
| UI 组件 | ArcoButton | `@arco-design/web-react` | 无需变更 | 示例 |
|
|
73
|
+
| API | `getUserList` | `src/api/user.ts` | **需新增** | 需确认入参 |
|
|
74
|
+
| 现有代码 | `UserTable` | `src/views/User/Table.tsx` | **修改** | 在操作列添加按钮 |
|
|
75
|
+
|
|
76
|
+
# 输出配置
|
|
77
|
+
|
|
78
|
+
- **report-output-dir**: 报告输出目录,默认 `incspec/requirements`
|
|
79
|
+
- **文件名**: 固定为 `ui-dependencies.md`
|
|
80
|
+
- **完整路径**: `<report-output-dir>/ui-dependencies.md`
|
|
81
|
+
- **目录创建**: 如目录不存在,需主动创建
|
|
82
|
+
|
|
83
|
+
# 输出要求
|
|
84
|
+
|
|
85
|
+
## 交互过程
|
|
86
|
+
|
|
87
|
+
在交互过程中,使用上述表格格式展示当前进度,对未确认项使用 `【待确认】` 标记。
|
|
88
|
+
|
|
89
|
+
## 最终报告
|
|
90
|
+
|
|
91
|
+
当所有信息收集完毕时:
|
|
92
|
+
|
|
93
|
+
1. **文件写入**: 将完整的 Markdown 报告写入 `<report-output-dir>/ui-dependencies.md`
|
|
94
|
+
2. **内容格式**: 写入文件的内容必须严格按以下格式:
|
|
95
|
+
|
|
96
|
+
```markdown
|
|
97
|
+
# UI 依赖采集报告
|
|
98
|
+
|
|
99
|
+
> 状态: ✅ 已完结
|
|
100
|
+
> 适用流程: 代码生成 / Diff 分析
|
|
101
|
+
|
|
102
|
+
## 依赖详情表
|
|
103
|
+
|
|
104
|
+
| 依赖类型 | 依赖名称 | 来源文件/路径 | 变更类型 | 详细说明 |
|
|
105
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
106
|
+
| ... (最终完整的行) ... |
|
|
107
|
+
|
|
108
|
+
## 变更摘要
|
|
109
|
+
|
|
110
|
+
- **核心目标**: [一句话描述,例如: 在简历列表页增加批量下载功能]
|
|
111
|
+
- **影响范围**: [列出主要受影响的文件]
|
|
112
|
+
- **后续建议**: [如有特殊注意事项请填写]
|
|
113
|
+
|
|
114
|
+
[UI_DEPENDENCY_COLLECTED]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
3. **静默输出**: 禁止在对话中输出报告内容
|
|
118
|
+
4. **完成提示**: 文件写入后,仅在对话中输出一行字:
|
|
119
|
+
> "✅ UI 依赖信息已全部收齐并写入文件,可直接用于后续增量 Diff 分析。"
|
|
120
|
+
|
|
121
|
+
# 示例交互
|
|
122
|
+
|
|
123
|
+
**用户**: "我想在简历列表的操作列加一个下载按钮。"
|
|
124
|
+
|
|
125
|
+
**第一轮回复**:
|
|
126
|
+
|
|
127
|
+
### 需求理解
|
|
128
|
+
|
|
129
|
+
你需要在简历列表 (`ResumeTable`) 的操作列中修改现有逻辑,新增一个"下载"按钮。
|
|
130
|
+
|
|
131
|
+
### 当前依赖扫描
|
|
132
|
+
|
|
133
|
+
| 依赖类型 | 依赖名称 | 来源文件/路径 | 变更类型 | 备注 |
|
|
134
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
135
|
+
| 现有组件 | 【待确认】 | 【待确认】(是 `src/views/Resume/Table.tsx` 吗?) | **修改** | 操作列位置 |
|
|
136
|
+
| UI 组件 | Button | @arco-design/web-react | 无需变更 | |
|
|
137
|
+
| API | 【待确认】 | `src/api/resume.ts` ? | 【待确认】 | 是否有下载接口? |
|
|
138
|
+
|
|
139
|
+
### 待确认问题
|
|
140
|
+
|
|
141
|
+
1. 请确认简历列表组件的具体文件路径。
|
|
142
|
+
2. 点击下载是直接调用 `window.open` 还是需要调用后端 API?如果是 API,方法名是什么?
|
|
143
|
+
3. 下载按钮的样式有什么要求(图标、大小、颜色)?
|
package/commands/cursor-sync.mjs
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* cursor-sync command - Sync Cursor slash commands
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
import {
|
|
7
|
-
findProjectRoot,
|
|
8
|
-
INCSPEC_DIR,
|
|
9
|
-
} from '../lib/config.mjs';
|
|
10
|
-
import {
|
|
11
|
-
syncToProject,
|
|
12
|
-
syncToGlobal,
|
|
13
|
-
checkCursorCommands,
|
|
14
|
-
} from '../lib/cursor.mjs';
|
|
15
|
-
import {
|
|
16
|
-
colors,
|
|
17
|
-
colorize,
|
|
18
|
-
print,
|
|
19
|
-
printSuccess,
|
|
20
|
-
printWarning,
|
|
21
|
-
printInfo,
|
|
22
|
-
confirm,
|
|
23
|
-
select,
|
|
24
|
-
} from '../lib/terminal.mjs';
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Execute cursor-sync command
|
|
28
|
-
* @param {Object} ctx - Command context
|
|
29
|
-
*/
|
|
30
|
-
export async function cursorSyncCommand(ctx) {
|
|
31
|
-
const { cwd, options } = ctx;
|
|
32
|
-
|
|
33
|
-
print('');
|
|
34
|
-
print(colorize(' incspec Cursor 命令同步', colors.bold, colors.cyan));
|
|
35
|
-
print(colorize(' ──────────────────────', colors.dim));
|
|
36
|
-
print('');
|
|
37
|
-
|
|
38
|
-
// Determine sync target
|
|
39
|
-
let syncTarget = null;
|
|
40
|
-
|
|
41
|
-
if (options.project) {
|
|
42
|
-
syncTarget = 'project';
|
|
43
|
-
} else if (options.global) {
|
|
44
|
-
syncTarget = 'global';
|
|
45
|
-
} else {
|
|
46
|
-
// Interactive selection
|
|
47
|
-
const projectRoot = findProjectRoot(cwd);
|
|
48
|
-
|
|
49
|
-
const choices = [
|
|
50
|
-
{
|
|
51
|
-
name: '项目目录 (.cursor/commands/incspec/)',
|
|
52
|
-
value: 'project',
|
|
53
|
-
description: '仅对当前项目生效',
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: '全局目录 (~/.cursor/commands/incspec/)',
|
|
57
|
-
value: 'global',
|
|
58
|
-
description: '对所有项目生效',
|
|
59
|
-
},
|
|
60
|
-
];
|
|
61
|
-
|
|
62
|
-
if (!projectRoot) {
|
|
63
|
-
// No project found, only allow global
|
|
64
|
-
printWarning('未检测到 incspec 项目,将同步到全局目录。');
|
|
65
|
-
syncTarget = 'global';
|
|
66
|
-
} else {
|
|
67
|
-
syncTarget = await select({
|
|
68
|
-
message: '选择同步目标:',
|
|
69
|
-
choices,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Execute sync
|
|
75
|
-
if (syncTarget === 'project') {
|
|
76
|
-
const projectRoot = findProjectRoot(cwd);
|
|
77
|
-
|
|
78
|
-
if (!projectRoot) {
|
|
79
|
-
printWarning('未检测到 incspec 项目。请先运行 incspec init 或使用 --global 选项。');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
print(colorize(`同步到项目: ${projectRoot}`, colors.dim));
|
|
84
|
-
print('');
|
|
85
|
-
|
|
86
|
-
const count = syncToProject(projectRoot);
|
|
87
|
-
|
|
88
|
-
printSuccess(`已同步 ${count} 个 Cursor 命令到 .cursor/commands/incspec/`);
|
|
89
|
-
print('');
|
|
90
|
-
print(colorize('已创建的命令:', colors.bold));
|
|
91
|
-
print(colorize(' /incspec/inc-analyze 步骤1: 分析代码流程', colors.dim));
|
|
92
|
-
print(colorize(' /incspec/inc-collect-req 步骤2: 收集结构化需求', colors.dim));
|
|
93
|
-
print(colorize(' /incspec/inc-collect-dep 步骤3: UI依赖采集', colors.dim));
|
|
94
|
-
print(colorize(' /incspec/inc-design 步骤4: 增量设计', colors.dim));
|
|
95
|
-
print(colorize(' /incspec/inc-apply 步骤5: 应用代码变更', colors.dim));
|
|
96
|
-
print(colorize(' /incspec/inc-merge 步骤6: 合并到基线', colors.dim));
|
|
97
|
-
print(colorize(' /incspec/inc-archive 归档规范文件', colors.dim));
|
|
98
|
-
print(colorize(' /incspec/inc-status 查看工作流状态', colors.dim));
|
|
99
|
-
print(colorize(' /incspec/inc-help 显示帮助', colors.dim));
|
|
100
|
-
|
|
101
|
-
} else if (syncTarget === 'global') {
|
|
102
|
-
print(colorize('同步到全局目录...', colors.dim));
|
|
103
|
-
print('');
|
|
104
|
-
|
|
105
|
-
const count = syncToGlobal();
|
|
106
|
-
|
|
107
|
-
printSuccess(`已同步 ${count} 个 Cursor 命令到 ~/.cursor/commands/incspec/`);
|
|
108
|
-
print('');
|
|
109
|
-
print(colorize('全局命令将对所有项目生效。', colors.dim));
|
|
110
|
-
print(colorize('在项目中运行 incspec cursor-sync --project 可覆盖全局命令。', colors.dim));
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
print('');
|
|
114
|
-
printInfo('请重启 Cursor 以加载新命令。');
|
|
115
|
-
print('');
|
|
116
|
-
}
|