create-np-skills 1.0.0 → 1.0.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.
@@ -5,7 +5,7 @@ description: 知识入库。2 Agent 并行,分别将合成的知识框架和
5
5
 
6
6
  # /np:archive — 知识入库
7
7
 
8
- > **权威规范**: `note-processing-spec.md` v1.1。本 Skill 执行 Phase 4 的全部步骤。
8
+ > **权威规范**: `note-processing-spec.md` v2.1。本 Skill 执行 Phase 4 的全部步骤。
9
9
 
10
10
  ## 前置条件
11
11
 
@@ -5,7 +5,7 @@ description: 智能校正中文语音转文字的听写错误。多 Agent 并行
5
5
 
6
6
  # /np:correct — 智能校正
7
7
 
8
- > **权威规范**: `note-processing-spec.md` v1.1。本 Skill 执行 Phase 1 的全部步骤。
8
+ > **权威规范**: `note-processing-spec.md` v2.1。本 Skill 执行 Phase 1 的全部步骤。
9
9
 
10
10
  ## 输入
11
11
 
@@ -5,7 +5,7 @@ description: 多角色并行提炼笔记洞察。5 个 Agent 从认知神经科
5
5
 
6
6
  # /np:extract — 多角色提炼
7
7
 
8
- > **权威规范**: `note-processing-spec.md` v1.1。本 Skill 执行 Phase 2 的全部步骤。
8
+ > **权威规范**: `note-processing-spec.md` v2.1。本 Skill 执行 Phase 2 的全部步骤。
9
9
 
10
10
  ## 前置条件
11
11
 
@@ -5,7 +5,7 @@ description: 最终清稿美化。HMM+NLP 工具量化分析 + Agent 语义润
5
5
 
6
6
  # /np:polish — 最终清稿
7
7
 
8
- > **权威规范**: `note-processing-spec.md` v2.0。本 Skill 执行 Phase 5 的全部步骤。
8
+ > **权威规范**: `note-processing-spec.md` v2.1。本 Skill 执行 Phase 5 的全部步骤。
9
9
 
10
10
  ## 前置条件
11
11
 
@@ -15,7 +15,8 @@ description: 最终清稿美化。HMM+NLP 工具量化分析 + Agent 语义润
15
15
 
16
16
  ## 输出
17
17
 
18
- - `phase5/output/polished.md` — 最终清稿,符合中文阅读习惯
18
+ - `phase5/output/polished.md` — 最终清稿,含过程元数据 + `## 清稿正文` 标记的纯文本段落
19
+ - `phase5/output/清稿版-<文件名>.md` — 纯文本清稿版(由 `/np:process` 自动提取生成)
19
20
 
20
21
  ## 执行流程
21
22
 
@@ -99,8 +100,14 @@ Skill: `article-writing`
99
100
 
100
101
  ### 自评
101
102
  阅读流畅度: X/10
103
+
104
+ ## 清稿正文
105
+
106
+ (此处为润色后的纯文本正文,不含任何过程信息、Agent 标识、统计日志)
102
107
  ```
103
108
 
109
+ > **⚠️ 关键约定**: `## 清稿正文` 是元数据与正文的分界线。此标题之上是过程记录(仅供调试追溯),此标题之下是用户最终看到的清稿。`/np:process` 将自动提取 `## 清稿正文` 之后的内容生成 `清稿版-<文件名>.md`。**P5-A 不得在正文中混入任何元数据。**
110
+
104
111
  ---
105
112
 
106
113
  ## 质量门禁
@@ -113,4 +120,6 @@ Skill: `article-writing`
113
120
 
114
121
  - **所有 Agent 必须遵守 spec 第八章的行为准则**
115
122
  - **本 Phase 是管道最后一步,产出最终交付物**
116
- - **polished.md 是用户看到的唯一清稿,必须可以独立阅读**
123
+ - **`## 清稿正文` 是强制分隔线——上方为过程元数据,下方为纯文本正文**
124
+ - **正文中不得出现 Agent ID、姓名、统计数据、日志表格等过程信息**
125
+ - **polished.md 中的正文部分可被 `/np:process` 自动提取为独立清稿文件**
@@ -5,7 +5,7 @@ description: 一键笔记处理工作流。串联校正→多角色提炼→关
5
5
 
6
6
  # /np:process — 串联工作流
7
7
 
8
- > **权威规范**: `note-processing-spec.md` v2.0。本 Skill 编排全部 5 个 Phase,并启动 Conductor (任驭舟 C-1) 全程监控。
8
+ > **权威规范**: `note-processing-spec.md` v2.1。本 Skill 编排全部 5 个 Phase + 清稿版生成,并启动 Conductor (任驭舟 C-1) 全程监控。
9
9
 
10
10
  ## 用法
11
11
 
@@ -123,6 +123,28 @@ Conductor 监控: 停滞/超时
123
123
  内容: 各 Phase 状态/耗时/Agent 数/门禁/Conductor 干预记录/产出物清单
124
124
  ```
125
125
 
126
+ ## 步骤 7: 生成清稿版
127
+
128
+ Phase 5 的 `polished.md` 包含过程元数据(Agent 标识、润色统计、润色日志)和 `## 清稿正文` 标记的纯文本正文。步骤 7 从 `polished.md` 中提取纯文本部分,生成用户可直接使用的不含过程信息的清稿文件。
129
+
130
+ ```
131
+ 1. 读取 phase5/output/polished.md
132
+ 2. 定位 ## 清稿正文 标题,提取其后的全部正文内容
133
+ 3. 写入 清稿版-<原始文件名>.md 到工作目录根
134
+ 示例: 原始文件名为 "2026-06-15-思考笔记.md"
135
+ → 清稿版-2026-06-15-思考笔记.md
136
+
137
+ 工具: tools/note-nlp/src/extract-clean-text.ts
138
+ 函数: extractCleanText(polishedMdContent: string): string
139
+ 行为: 返回 ## 清稿正文 之后的纯文本;若标题缺失返回空字符串
140
+ ```
141
+
142
+ **清稿版文件特征**:
143
+ - 纯文本,无任何 Agent ID、姓名、岗位
144
+ - 无统计数字、日志表格、自评分数
145
+ - 无输入文件清单、路径引用
146
+ - 只包含润色后的正文内容,可直接发布或分享
147
+
126
148
  ## 错误处理
127
149
 
128
150
  ```
@@ -137,4 +159,5 @@ Agent 被跳过 → 降级模式生效 → 下游标注影响 → 最终报告
137
159
  - **Conductor 必须先于所有 Phase 启动**
138
160
  - **Phase 之间严格串行,不可跳过**
139
161
  - **中途异常保留所有中间产物,可续跑**
140
- - **所有 Agent 输出包含 Agent ID + 姓名 + 岗位**
162
+ - **所有 Agent 输出包含 Agent ID + 姓名 + 岗位(过程文件)**
163
+ - **步骤 7 自动生成不含过程信息的清稿版文件(最终交付物)**
@@ -5,7 +5,7 @@ description: 跨角色关键萃取。把多份角色提炼笔记整合为统一
5
5
 
6
6
  # /np:synthesize — 关键萃取
7
7
 
8
- > **权威规范**: `note-processing-spec.md` v1.1。本 Skill 执行 Phase 3 的全部步骤。
8
+ > **权威规范**: `note-processing-spec.md` v2.1。本 Skill 执行 Phase 3 的全部步骤。
9
9
 
10
10
  ## 前置条件
11
11
 
@@ -0,0 +1,246 @@
1
+ /**
2
+ * E2E test: Simulates the full Phase 5 polish → clean text extraction pipeline.
3
+ *
4
+ * This test verifies that:
5
+ * 1. A P5-A agent output (with metadata + separator + clean text) is well-formed
6
+ * 2. extractCleanText correctly strips all metadata
7
+ * 3. The clean output preserves all content and formatting
8
+ * 4. Real-world note processing scenarios work end-to-end
9
+ */
10
+ import { describe, it, expect } from 'vitest';
11
+ import { extractCleanText } from '../src/extract-clean-text';
12
+ /** Build a complete simulated P5-A polish output */
13
+ function buildP5AOutput(params) {
14
+ const { agentName = '萧韵致', inputFiles = ['phase1/output/final-corrected.md'], stats = { originalWords: 1000, polishedWords: 980 }, polishLog = [], selfScore = 9, cleanBody, } = params;
15
+ const deviation = stats.originalWords > 0
16
+ ? ((Math.abs(stats.polishedWords - stats.originalWords) / stats.originalWords) * 100).toFixed(1)
17
+ : '0.0';
18
+ const header = [
19
+ `## ${agentName} (P5-A) · 语言美化师`,
20
+ '',
21
+ '### 输入文件',
22
+ ...inputFiles.map(f => `- ${f}`),
23
+ '',
24
+ '### 润色统计',
25
+ `- 原文总字数: ${stats.originalWords}`,
26
+ `- 润色后字数: ${stats.polishedWords}`,
27
+ `- 偏差: ${deviation}%`,
28
+ '',
29
+ '### 润色日志',
30
+ '| # | 位置 | 原文 | 润色 | 理由 |',
31
+ '|---|------|------|------|------|',
32
+ ...polishLog.map((log, i) => `| ${i + 1} | ${log.pos} | ${log.original} | ${log.polished} | ${log.reason} |`),
33
+ polishLog.length === 0 ? '| (无修正) |' : '',
34
+ '',
35
+ '### 自评',
36
+ `阅读流畅度: ${selfScore}/10`,
37
+ '',
38
+ '## 清稿正文',
39
+ '',
40
+ ].join('\n');
41
+ return header + cleanBody;
42
+ }
43
+ describe('E2E: Phase 5 polish → clean text extraction', () => {
44
+ // ── Scenario 1: Simple Chinese note ──
45
+ it('should extract clean text from a simple Chinese note', () => {
46
+ const cleanBody = [
47
+ '在机器学习领域,模型的学习能力取决于数据和算法的质量。',
48
+ '',
49
+ '深度学习的突破使得计算机能够从大量非结构化数据中',
50
+ '自动提取特征,这极大地简化了传统机器学习中的特征工程步骤。',
51
+ ].join('\n');
52
+ const p5aOutput = buildP5AOutput({
53
+ stats: { originalWords: 350, polishedWords: 340 },
54
+ polishLog: [
55
+ { pos: 'P1', original: '就是那个', polished: '(删除)', reason: '口语填充词' },
56
+ ],
57
+ selfScore: 9,
58
+ cleanBody,
59
+ });
60
+ // Verify the output contains metadata
61
+ expect(p5aOutput).toContain('萧韵致');
62
+ expect(p5aOutput).toContain('润色统计');
63
+ expect(p5aOutput).toContain('润色日志');
64
+ expect(p5aOutput).toContain('## 清稿正文');
65
+ // Extract and verify clean text
66
+ const clean = extractCleanText(p5aOutput);
67
+ // Should contain all content
68
+ expect(clean).toContain('在机器学习领域');
69
+ expect(clean).toContain('深度学习的突破');
70
+ expect(clean).toContain('特征工程步骤');
71
+ // Should NOT contain any metadata
72
+ const forbiddenTerms = [
73
+ '萧韵致', 'P5-A', '语言美化师',
74
+ '润色统计', '润色日志', '自评', '输入文件',
75
+ '原文总字数', '润色后字数', '偏差', '阅读流畅度',
76
+ '清稿正文', 'smooth-suggestions', 'concept-dictionary',
77
+ ];
78
+ for (const term of forbiddenTerms) {
79
+ expect(clean).not.toContain(term);
80
+ }
81
+ });
82
+ // ── Scenario 2: Real-world AI note (Chinese) ──
83
+ it('should handle a realistic AI note with complex content', () => {
84
+ const cleanBody = [
85
+ '人工智能的核心挑战不在于让机器变得更快,而在于让机器理解',
86
+ '人类习以为常的常识推理。',
87
+ '',
88
+ '## 知识表示的困境',
89
+ '',
90
+ '传统符号主义的知识表示面临两个根本问题:第一,如何将现实',
91
+ '世界的模糊边界映射为离散符号;第二,如何在推理时有效处理',
92
+ '例外情况。',
93
+ '',
94
+ '## 连接主义的进路',
95
+ '',
96
+ '神经网络通过分布式表示绕过了符号接地问题,但代价是可解释性。',
97
+ '当前的趋势是**神经符号融合**——让神经网络处理感知层面,',
98
+ '让符号系统处理推理层面。',
99
+ '',
100
+ '> 关键洞察:智能的本质不在于"知道什么",而在于"如何在',
101
+ '> 不知道的情况下依然做出合理决策"。',
102
+ ].join('\n');
103
+ const p5aOutput = buildP5AOutput({
104
+ stats: { originalWords: 520, polishedWords: 480 },
105
+ polishLog: [
106
+ { pos: 'P2', original: '就是那个常识', polished: '常识', reason: '冗余' },
107
+ { pos: 'P5', original: '映射为离散', polished: '映射成离散', reason: '搭配优化' },
108
+ ],
109
+ selfScore: 8,
110
+ cleanBody,
111
+ });
112
+ const clean = extractCleanText(p5aOutput);
113
+ // Verify structure preserved
114
+ expect(clean).toContain('## 知识表示的困境');
115
+ expect(clean).toContain('## 连接主义的进路');
116
+ expect(clean).toContain('**神经符号融合**');
117
+ expect(clean).toContain('> 关键洞察');
118
+ // Verify content completeness
119
+ expect(clean).toContain('常识推理');
120
+ expect(clean).toContain('符号接地问题');
121
+ expect(clean).toContain('可解释性');
122
+ });
123
+ // ── Scenario 3: Empty polish log (no corrections needed) ──
124
+ it('should handle output with no corrections', () => {
125
+ const cleanBody = [
126
+ '今天天气很好,适合出门散步。',
127
+ '',
128
+ '公园里的花都开了,空气中弥漫着春天的气息。',
129
+ ].join('\n');
130
+ const p5aOutput = buildP5AOutput({
131
+ polishLog: [], // No corrections
132
+ selfScore: 10,
133
+ cleanBody,
134
+ });
135
+ const clean = extractCleanText(p5aOutput);
136
+ expect(clean).toContain('今天天气很好');
137
+ expect(clean).toContain('春天的气息');
138
+ expect(clean).not.toContain('萧韵致');
139
+ expect(clean).not.toContain('润色日志');
140
+ });
141
+ // ── Scenario 4: Multi-paragraph note ──
142
+ it('should preserve multi-paragraph structure', () => {
143
+ const cleanBody = [
144
+ '第一段:环境识别是所有决策的前提。',
145
+ '',
146
+ '第二段:在 CR 环境中,你需要先判断自己处于哪个阶段——',
147
+ '是探索期还是成熟期,这决定了你的策略选择。',
148
+ '',
149
+ '第三段:过程导向适用于探索期,因为你还不知道什么是好的结果。',
150
+ '结果导向适用于成熟期,因为你已经知道目标在哪里。',
151
+ '',
152
+ '第四段:最终,元认知能力决定了你能多快从过程导向切换到结果导向。',
153
+ ].join('\n');
154
+ const p5aOutput = buildP5AOutput({
155
+ stats: { originalWords: 400, polishedWords: 390 },
156
+ polishLog: [
157
+ { pos: 'P3', original: '然后', polished: '接着', reason: '减少重复' },
158
+ ],
159
+ selfScore: 9,
160
+ cleanBody,
161
+ });
162
+ const clean = extractCleanText(p5aOutput);
163
+ const paragraphs = clean.split('\n\n').filter(p => p.trim());
164
+ expect(paragraphs.length).toBe(4);
165
+ expect(paragraphs[0]).toContain('环境识别');
166
+ expect(paragraphs[1]).toContain('CR 环境');
167
+ expect(paragraphs[2]).toContain('过程导向');
168
+ expect(paragraphs[3]).toContain('元认知');
169
+ });
170
+ // ── Scenario 5: Missing separator (degraded mode) ──
171
+ it('should return empty string when P5-A output lacks 清稿正文 separator', () => {
172
+ const malformedOutput = [
173
+ '## 萧韵致 (P5-A) · 语言美化师',
174
+ '### 自评',
175
+ '阅读流畅度: 9/10',
176
+ '',
177
+ '这段文字是润色正文但缺少分隔标记。',
178
+ '管道应该能检测到这个问题。',
179
+ ].join('\n');
180
+ // This output is missing the `## 清稿正文` heading
181
+ expect(malformedOutput).not.toContain('## 清稿正文');
182
+ const clean = extractCleanText(malformedOutput);
183
+ expect(clean).toBe('');
184
+ });
185
+ // ── Scenario 6: Conductor intervention detection ──
186
+ it('should allow detecting conductor intervention (清稿正文 missing) for quality gating', () => {
187
+ // Simulate a degraded output where P5-A didn't add the separator
188
+ const degradedOutput = [
189
+ '## 萧韵致 (P5-A) · 语言美化师',
190
+ '### 自评',
191
+ '阅读流畅度: 7/10',
192
+ '',
193
+ '这段文字虽然经过了润色但格式不符合规范。',
194
+ ].join('\n');
195
+ const clean = extractCleanText(degradedOutput);
196
+ const needsIntervention = clean === '';
197
+ // Conductor should detect this and flag for intervention
198
+ expect(needsIntervention).toBe(true);
199
+ });
200
+ });
201
+ describe('E2E: Polish output format validation', () => {
202
+ it('should pass quality gate when 清稿正文 exists and has content', () => {
203
+ const p5aOutput = buildP5AOutput({
204
+ selfScore: 9,
205
+ cleanBody: '通过门禁的内容。',
206
+ });
207
+ const hasSeparator = p5aOutput.includes('\n## 清稿正文\n');
208
+ const clean = extractCleanText(p5aOutput);
209
+ const hasCleanContent = clean.trim().length > 0;
210
+ // Quality gate: both conditions must pass
211
+ expect(hasSeparator).toBe(true);
212
+ expect(hasCleanContent).toBe(true);
213
+ });
214
+ it('should fail quality gate when self-score is below threshold', () => {
215
+ const p5aOutput = buildP5AOutput({
216
+ selfScore: 6, // Below 8/10 threshold
217
+ cleanBody: '质量不佳的内容。',
218
+ });
219
+ // This tests the quality gate condition from the spec
220
+ const selfScoreLine = p5aOutput.match(/阅读流畅度: (\d+)\/10/);
221
+ const score = selfScoreLine ? parseInt(selfScoreLine[1]) : 0;
222
+ const passesQualityGate = score >= 8;
223
+ expect(passesQualityGate).toBe(false);
224
+ });
225
+ it('should pass quality gate when all conditions are met', () => {
226
+ const p5aOutput = buildP5AOutput({
227
+ stats: { originalWords: 1000, polishedWords: 980 }, // 2% deviation < 20%
228
+ selfScore: 9, // ≥ 8
229
+ cleanBody: '高质量的内容。'.repeat(50),
230
+ });
231
+ // Verify all quality gate conditions
232
+ const hasSeparator = p5aOutput.includes('\n## 清稿正文\n');
233
+ const clean = extractCleanText(p5aOutput);
234
+ const hasCleanContent = clean.trim().length > 0;
235
+ const selfScoreMatch = p5aOutput.match(/阅读流畅度: (\d+)\/10/);
236
+ const selfScore = selfScoreMatch ? parseInt(selfScoreMatch[1]) : 0;
237
+ const wordCountMatch = p5aOutput.match(/偏差: ([\d.]+)%/);
238
+ const deviation = wordCountMatch ? parseFloat(wordCountMatch[1]) : 100;
239
+ const allGatesPassed = hasSeparator &&
240
+ hasCleanContent &&
241
+ selfScore >= 8 &&
242
+ deviation < 20;
243
+ expect(allGatesPassed).toBe(true);
244
+ });
245
+ });
246
+ //# sourceMappingURL=e2e-polish-clean.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e-polish-clean.test.js","sourceRoot":"","sources":["../../__tests__/e2e-polish-clean.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { extractCleanText } from '../src/extract-clean-text';
3
+ describe('extractCleanText', () => {
4
+ // ── Happy Path ──
5
+ it('should extract clean text after the 清稿正文 heading', () => {
6
+ const input = [
7
+ '## 萧韵致 (P5-A) · 语言美化师',
8
+ '',
9
+ '### 输入文件',
10
+ '- phase1/output/final-corrected.md',
11
+ '',
12
+ '### 润色统计',
13
+ '- 原文总字数: 1200',
14
+ '- 润色后字数: 1150',
15
+ '',
16
+ '### 润色日志',
17
+ '| # | 位置 | 原文 | 润色 | 理由 |',
18
+ '|---|---|---|---|---|',
19
+ '| 1 | L5 | 平遥 | 平台 | 音近修正 |',
20
+ '',
21
+ '### 自评',
22
+ '阅读流畅度: 9/10',
23
+ '',
24
+ '---',
25
+ '',
26
+ '## 清稿正文',
27
+ '',
28
+ '今天天气很好,我们一起去公园散步。',
29
+ '一路上看到了很多花,心情非常愉快。',
30
+ ].join('\n');
31
+ const result = extractCleanText(input);
32
+ expect(result).toContain('今天天气很好');
33
+ expect(result).toContain('心情非常愉快');
34
+ expect(result).not.toContain('萧韵致');
35
+ expect(result).not.toContain('润色统计');
36
+ expect(result).not.toContain('润色日志');
37
+ expect(result).not.toContain('清稿正文');
38
+ });
39
+ it('should preserve paragraph breaks in clean text', () => {
40
+ const input = [
41
+ '## 萧韵致 (P5-A) · 语言美化师',
42
+ '### 自评',
43
+ '阅读流畅度: 8/10',
44
+ '',
45
+ '## 清稿正文',
46
+ '',
47
+ '第一段内容。',
48
+ '',
49
+ '第二段内容。',
50
+ '',
51
+ '第三段内容。',
52
+ ].join('\n');
53
+ const result = extractCleanText(input);
54
+ const paragraphs = result.split('\n\n').filter(p => p.trim());
55
+ expect(paragraphs.length).toBe(3);
56
+ expect(paragraphs[0]).toContain('第一段');
57
+ expect(paragraphs[1]).toContain('第二段');
58
+ expect(paragraphs[2]).toContain('第三段');
59
+ });
60
+ // ── Edge Cases ──
61
+ it('should return empty string when 清稿正文 heading is missing', () => {
62
+ const input = [
63
+ '## 萧韵致 (P5-A) · 语言美化师',
64
+ '### 自评',
65
+ '阅读流畅度: 9/10',
66
+ ].join('\n');
67
+ const result = extractCleanText(input);
68
+ expect(result).toBe('');
69
+ });
70
+ it('should return empty string when input is empty', () => {
71
+ const result = extractCleanText('');
72
+ expect(result).toBe('');
73
+ });
74
+ it('should return empty string when 清稿正文 has no content after it', () => {
75
+ const input = [
76
+ '## 萧韵致 (P5-A) · 语言美化师',
77
+ '### 自评',
78
+ '阅读流畅度: 9/10',
79
+ '',
80
+ '## 清稿正文',
81
+ '',
82
+ ].join('\n');
83
+ const result = extractCleanText(input);
84
+ expect(result).toBe('');
85
+ });
86
+ it('should handle the heading appearing in the middle of text (only match at heading level)', () => {
87
+ const input = [
88
+ '## 萧韵致 (P5-A) · 语言美化师',
89
+ '### 自评',
90
+ '阅读流畅度: 9/10',
91
+ '',
92
+ '## 清稿正文',
93
+ '',
94
+ '这是正文内容,其中提到了"清稿正文"这个词但不应被当作标题。',
95
+ '正文继续。',
96
+ ].join('\n');
97
+ const result = extractCleanText(input);
98
+ expect(result).toContain('这是正文内容');
99
+ expect(result).toContain('"清稿正文"这个词');
100
+ expect(result).toContain('正文继续');
101
+ });
102
+ it('should handle markdown with complex formatting', () => {
103
+ const input = [
104
+ '## 萧韵致 (P5-A) · 语言美化师',
105
+ '',
106
+ '### 润色统计',
107
+ '- 原文总字数: 500',
108
+ '- 润色后字数: 480',
109
+ '',
110
+ '### 自评',
111
+ '阅读流畅度: 9/10',
112
+ '',
113
+ '## 清稿正文',
114
+ '',
115
+ '# 一级标题',
116
+ '',
117
+ '正文段落包含**加粗**和*斜体*文字。',
118
+ '',
119
+ '## 二级标题',
120
+ '',
121
+ '- 列表项 1',
122
+ '- 列表项 2',
123
+ '',
124
+ '> 引用块内容',
125
+ ].join('\n');
126
+ const result = extractCleanText(input);
127
+ expect(result).toContain('# 一级标题');
128
+ expect(result).toContain('**加粗**');
129
+ expect(result).toContain('## 二级标题');
130
+ expect(result).toContain('- 列表项 1');
131
+ expect(result).toContain('> 引用块');
132
+ expect(result).not.toContain('萧韵致');
133
+ expect(result).not.toContain('润色统计');
134
+ });
135
+ // ── Whitespace Handling ──
136
+ it('should trim leading whitespace from the extracted text', () => {
137
+ const input = [
138
+ '## 萧韵致 (P5-A) · 语言美化师',
139
+ '### 自评',
140
+ '阅读流畅度: 9/10',
141
+ '',
142
+ '## 清稿正文',
143
+ '',
144
+ '',
145
+ '',
146
+ '正文第一行。',
147
+ '',
148
+ '正文第二行。',
149
+ ].join('\n');
150
+ const result = extractCleanText(input);
151
+ expect(result.startsWith('正文第一行')).toBe(true);
152
+ });
153
+ it('should trim trailing whitespace from the extracted text', () => {
154
+ const input = [
155
+ '## 萧韵致 (P5-A) · 语言美化师',
156
+ '### 自评',
157
+ '阅读流畅度: 9/10',
158
+ '',
159
+ '## 清稿正文',
160
+ '',
161
+ '正文最后一行。',
162
+ '',
163
+ '',
164
+ '',
165
+ ].join('\n');
166
+ const result = extractCleanText(input);
167
+ expect(result.endsWith('正文最后一行。')).toBe(true);
168
+ });
169
+ // ── Real-world Output Simulation ──
170
+ it('should handle a complete P5-A output', () => {
171
+ const input = [
172
+ '## 萧韵致 (P5-A) · 语言美化师',
173
+ '',
174
+ '### 输入文件',
175
+ '- phase1/output/final-corrected.md',
176
+ '- phase5/inputs/smooth-suggestions.json',
177
+ '- phase3/output/concept-dictionary.md',
178
+ '',
179
+ '### 润色统计',
180
+ '- 原文总字数: 2340',
181
+ '- 润色后字数: 2280',
182
+ '- 偏差: 2.6%',
183
+ '',
184
+ '### 润色日志',
185
+ '| # | 位置 | 原文 | 润色 | 理由 |',
186
+ '|---|---|---|---|---|',
187
+ '| 1 | P3 | 就是那个 | (删除) | 口语填充词 |',
188
+ '| 2 | P5 | 然后 | 接着 | 减少重复 |',
189
+ '| 3 | P8 | 平遥 | 平台 | 音近修正 |',
190
+ '',
191
+ '### 自评',
192
+ '阅读流畅度: 9/10',
193
+ '',
194
+ '## 清稿正文',
195
+ '',
196
+ '在培养天才这件事上,我们最容易犯的错误是把检测手段当成培养手段。',
197
+ '',
198
+ '小测验测的是你"有没有",实战测的是你"会不会"。这两者之间的差距,',
199
+ '恰好就是高分低能的根因所在。',
200
+ '',
201
+ '环境识别能力是所有决策的前提。你必须在行动之前先看清楚自己身处',
202
+ '什么样的 CR 环境——这决定了你应该追求过程还是结果。',
203
+ ].join('\n');
204
+ const result = extractCleanText(input);
205
+ // Should contain the polished content
206
+ expect(result).toContain('在培养天才这件事上');
207
+ expect(result).toContain('高分低能的根因所在');
208
+ expect(result).toContain('CR 环境');
209
+ // Should NOT contain any metadata
210
+ expect(result).not.toContain('萧韵致');
211
+ expect(result).not.toContain('P5-A');
212
+ expect(result).not.toContain('语言美化师');
213
+ expect(result).not.toContain('润色统计');
214
+ expect(result).not.toContain('润色日志');
215
+ expect(result).not.toContain('自评');
216
+ expect(result).not.toContain('输入文件');
217
+ expect(result).not.toContain('偏差');
218
+ expect(result).not.toContain('清稿正文');
219
+ expect(result).not.toContain('smooth-suggestions');
220
+ expect(result).not.toContain('concept-dictionary');
221
+ });
222
+ });
223
+ //# sourceMappingURL=extract-clean-text.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-clean-text.test.js","sourceRoot":"","sources":["../../__tests__/extract-clean-text.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Extract clean text from a P5-A polished.md output.
3
+ *
4
+ * The P5-A agent writes metadata (agent header, stats, logs, self-assessment)
5
+ * followed by a `## 清稿正文` heading, after which the actual polished text appears.
6
+ *
7
+ * This function strips everything before and including `## 清稿正文`,
8
+ * returning only the clean polished text suitable for final delivery.
9
+ *
10
+ * @param polishedMdContent - Full content of the polished.md file
11
+ * @returns The clean text after `## 清稿正文`, trimmed. Empty string if heading not found.
12
+ */
13
+ export declare function extractCleanText(polishedMdContent: string): string;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Extract clean text from a P5-A polished.md output.
3
+ *
4
+ * The P5-A agent writes metadata (agent header, stats, logs, self-assessment)
5
+ * followed by a `## 清稿正文` heading, after which the actual polished text appears.
6
+ *
7
+ * This function strips everything before and including `## 清稿正文`,
8
+ * returning only the clean polished text suitable for final delivery.
9
+ *
10
+ * @param polishedMdContent - Full content of the polished.md file
11
+ * @returns The clean text after `## 清稿正文`, trimmed. Empty string if heading not found.
12
+ */
13
+ export function extractCleanText(polishedMdContent) {
14
+ const headingMarker = '\n## 清稿正文\n';
15
+ const headingIndex = polishedMdContent.indexOf(headingMarker);
16
+ if (headingIndex === -1) {
17
+ return '';
18
+ }
19
+ const startIndex = headingIndex + headingMarker.length;
20
+ return polishedMdContent.slice(startIndex).trim();
21
+ }
22
+ //# sourceMappingURL=extract-clean-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-clean-text.js","sourceRoot":"","sources":["../../src/extract-clean-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,iBAAyB;IACxD,MAAM,aAAa,GAAG,aAAa,CAAC;IAEpC,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAE9D,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;IACvD,OAAO,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export declare function runInit(options: {
2
2
  yes?: boolean;
3
3
  config?: string;
4
+ registry?: string;
4
5
  }): Promise<void>;
@@ -46,7 +46,7 @@ export async function runInit(options) {
46
46
  // Step 6: Execute installation
47
47
  log.title('开始安装...\n');
48
48
  // 6.1: Install toolkit
49
- const toolkitResult = await installToolkit();
49
+ const toolkitResult = await installToolkit(undefined, options.registry);
50
50
  if (!toolkitResult.success) {
51
51
  log.error('工具包安装失败,请检查网络连接和 npm 配置');
52
52
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAA8D;IAC1F,WAAW,EAAE,CAAC;IAEd,iBAAiB;IACjB,MAAM,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG;QAC3B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,MAAM,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,cAAc,EAAE,CAAC;IAEjE,wBAAwB;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG;QACxB,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,CAAC;QACxF,CAAC,CAAC,MAAM,YAAY,EAAE,CAAC;IACzB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEvB,uBAAuB;IACvB,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,MAAM,CAAC,WAAW,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;IAEzC,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,gBAAgB,CAAC,MAAM,EAAE,KAAkB,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,KAAK,CAAC;YACd,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,UAAU,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,cAAc;IACd,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACzB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,wBAAwB,CAAC,CAAC;IACpE,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;AAC7D,CAAC"}
package/dist/src/index.js CHANGED
@@ -15,6 +15,7 @@ export async function main() {
15
15
  .description('向导式初始化:检测环境、选择平台、安装工具包和 Skills')
16
16
  .option('-y, --yes', '跳过交互确认,使用默认值')
17
17
  .option('-c, --config <path>', '配置文件路径')
18
+ .option('-r, --registry <url>', 'npm 镜像地址,国内用户建议 https://registry.npmmirror.com')
18
19
  .action(async (options) => {
19
20
  await runInit(options);
20
21
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,kBAAkB,CAAC;SACxB,WAAW,CAAC,uCAAuC,CAAC;SACpD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;SAC3B,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,kBAAkB,CAAC;SACxB,WAAW,CAAC,uCAAuC,CAAC;SACpD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,sBAAsB,EAAE,gDAAgD,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;SAC3B,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC"}
@@ -1,4 +1,4 @@
1
- export declare function installToolkit(targetPath?: string): Promise<{
1
+ export declare function installToolkit(targetPath?: string, registry?: string): Promise<{
2
2
  success: boolean;
3
3
  path: string;
4
4
  }>;
@@ -5,7 +5,7 @@ import { run } from '../utils/shell.js';
5
5
  import { spinner } from '../utils/logger.js';
6
6
  import { DEFAULT_TOOLKIT_PATH } from '../types.js';
7
7
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
- export async function installToolkit(targetPath) {
8
+ export async function installToolkit(targetPath, registry) {
9
9
  const dest = targetPath ?? DEFAULT_TOOLKIT_PATH;
10
10
  const resolved = expandHome(dest);
11
11
  const spin = spinner('安装 note-nlp 工具包...');
@@ -18,9 +18,17 @@ export async function installToolkit(targetPath) {
18
18
  await ensureDir(resolved);
19
19
  await copyFile(assetDir, resolved);
20
20
  spin.text = '安装 npm 依赖...';
21
- const installResult = run('npm install --production', resolved);
21
+ const registryFlag = registry ? ` --registry=${registry}` : '';
22
+ const installResult = run(`npm install --omit=dev${registryFlag}`, resolved);
22
23
  if (!installResult.success) {
23
- spin.fail(`npm install 失败: ${installResult.output}`);
24
+ const output = installResult.output;
25
+ // Give actionable hints for common network issues
26
+ if (output.includes('ECONNRESET') || output.includes('ETIMEDOUT') || output.includes('ENOTFOUND')) {
27
+ spin.fail(`npm install 网络不通。可尝试:\n npm config set registry https://registry.npmmirror.com\n 或设置 HTTP_PROXY 环境变量后重试`);
28
+ }
29
+ else {
30
+ spin.fail(`npm install 失败: ${output}`);
31
+ }
24
32
  return { success: false, path: resolved };
25
33
  }
26
34
  // dist/ is pre-compiled in the bundle — no tsc needed
@@ -1 +1 @@
1
- {"version":3,"file":"toolkit.js","sourceRoot":"","sources":["../../../src/installer/toolkit.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAmB;IACtD,MAAM,IAAI,GAAG,UAAU,IAAI,oBAAoB,CAAC;IAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YACzD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,MAAM,aAAa,GAAG,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,mBAAmB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,qBAAqB,QAAQ,GAAG,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"toolkit.js","sourceRoot":"","sources":["../../../src/installer/toolkit.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAmB,EAAE,QAAiB;IACzE,MAAM,IAAI,GAAG,UAAU,IAAI,oBAAoB,CAAC;IAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YACzD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,aAAa,GAAG,GAAG,CAAC,yBAAyB,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;YACpC,kDAAkD;YAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClG,IAAI,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;YACzH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,qBAAqB,QAAQ,GAAG,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "create-np-skills",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Install note-processing skills into multiple AI coding platforms",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "create-np-skills": "./dist/bin/cli.js"
8
8
  },
9
- "files": ["dist/", "assets/"],
9
+ "files": [
10
+ "dist/",
11
+ "assets/"
12
+ ],
10
13
  "scripts": {
11
14
  "build": "tsc",
12
15
  "bundle": "tsx scripts/bundle.ts",