speccore 7.5.1 → 8.0.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.
@@ -0,0 +1,72 @@
1
+ /** 骨架标记 — 用于检测文件是否仍为占位状态 */
2
+ export declare const SKELETON_MARKER = "<!-- SPEC-SKELETON -->";
3
+ export interface SpecFileEntry {
4
+ /** 相对 020-specs/ 的路径,如 "overview/ANALYSIS.md" */
5
+ relPath: string;
6
+ /** 分类:overview(全局)或 platform(端专属) */
7
+ category: 'overview' | 'platform';
8
+ /** 端名(仅 platform 类) */
9
+ platform?: string;
10
+ /** 文件名 */
11
+ docName: string;
12
+ /** 占位内容(含写作指引) */
13
+ placeholder: string;
14
+ }
15
+ export interface SkeletonResult {
16
+ /** 新创建的骨架文件 */
17
+ created: string[];
18
+ /** 已存在(保留原内容) */
19
+ skipped: string[];
20
+ }
21
+ export interface ProgressResult {
22
+ /** 已填充(非骨架) */
23
+ filled: string[];
24
+ /** 仍为骨架 */
25
+ unfilled: string[];
26
+ /** 下一个需要生成的 entry */
27
+ nextUnfilled: SpecFileEntry | null;
28
+ /** 已填充数 */
29
+ filledCount: number;
30
+ /** 总数 */
31
+ totalCount: number;
32
+ }
33
+ /**
34
+ * 计算 analyze 命令的文件清单
35
+ * @param platforms 端列表
36
+ * @param phase '1' = Phase 1 (overview), '2' = Phase 2 (各端), undefined = 全部
37
+ * @param iteration 迭代名(用于占位内容)
38
+ */
39
+ export declare function computeAnalyzeManifest(platforms: string[], phase?: '1' | '2', iteration?: string): SpecFileEntry[];
40
+ /**
41
+ * 计算 split 命令的任务文件清单
42
+ * @param taskName 任务名(如 Task-001-xxx)
43
+ * @param platforms 涉及的端列表
44
+ */
45
+ export declare function computeTaskManifest(taskName: string, platforms: string[]): SpecFileEntry[];
46
+ /**
47
+ * 预创建文件骨架
48
+ * - 文件不存在 → 创建目录 + 写入占位内容
49
+ * - 文件已存在且非骨架 → 跳过(保留已有内容,不覆盖)
50
+ * - 文件已存在且仍为骨架 → 跳过(等 AI 覆盖)
51
+ */
52
+ export declare function generateSkeleton(specDir: string, entries: SpecFileEntry[]): Promise<SkeletonResult>;
53
+ /**
54
+ * 检测哪些骨架文件已被 AI 填充
55
+ * - 存在且不含 SKELETON_MARKER → filled
56
+ * - 不存在或仍含 SKELETON_MARKER → unfilled
57
+ */
58
+ export declare function validateFilled(specDir: string, entries: SpecFileEntry[]): Promise<{
59
+ filled: string[];
60
+ unfilled: string[];
61
+ }>;
62
+ /**
63
+ * 检测骨架填充进度,返回下一个需要生成的文件
64
+ * 用于逐文档链式推进模式
65
+ */
66
+ export declare function detectSkeletonProgress(specDir: string, entries: SpecFileEntry[]): Promise<ProgressResult>;
67
+ /**
68
+ * 生成注入 prompt 的骨架文件列表
69
+ * 用于告诉 AI 哪些文件需要覆盖
70
+ */
71
+ export declare function buildSkeletonFileList(entries: SpecFileEntry[], specDir: string): string;
72
+ //# sourceMappingURL=spec-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-skeleton.d.ts","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"AAkBA,4BAA4B;AAC5B,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAMxD,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qBAAqB;IACrB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,UAAU,EAAE,MAAM,CAAC;CACpB;AA6OD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EACjB,SAAS,GAAE,MAAW,GACrB,aAAa,EAAE,CA+BjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EAAE,GAClB,aAAa,EAAE,CAgBjB;AAMD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAMD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqBnD;AAMD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,EAAE,MAAM,GACd,MAAM,CAoCR"}
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SKELETON_MARKER = void 0;
4
+ exports.computeAnalyzeManifest = computeAnalyzeManifest;
5
+ exports.computeTaskManifest = computeTaskManifest;
6
+ exports.generateSkeleton = generateSkeleton;
7
+ exports.validateFilled = validateFilled;
8
+ exports.detectSkeletonProgress = detectSkeletonProgress;
9
+ exports.buildSkeletonFileList = buildSkeletonFileList;
10
+ /**
11
+ * spec-skeleton — 骨架优先架构核心模块 (v8.0.0+)
12
+ *
13
+ * 设计原则:CLI 预创建所有文件骨架(含占位内容),AI 只覆盖内容,不决定路径。
14
+ * 从根本上消除"AI 写错文件位置"的问题。
15
+ *
16
+ * 对比旧架构:
17
+ * 旧: CLI → prompt → AI 决定内容+路径 → sanitize 事后清理(永远不完整)
18
+ * 新: CLI → 预创建骨架 → AI 覆盖内容 → 文件已在正确位置(不需要清理)
19
+ */
20
+ const path_1 = require("path");
21
+ const fs_extra_1 = require("fs-extra");
22
+ const spec_paths_1 = require("./spec-paths");
23
+ // ================================================================
24
+ // 常量
25
+ // ================================================================
26
+ /** 骨架标记 — 用于检测文件是否仍为占位状态 */
27
+ exports.SKELETON_MARKER = '<!-- SPEC-SKELETON -->';
28
+ // ================================================================
29
+ // Phase 1 文档清单(overview/ 全局文档)
30
+ // ================================================================
31
+ const PHASE1_DOCS = [
32
+ {
33
+ name: 'REQUIREMENT.md',
34
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
35
+ # 需求规格
36
+
37
+ > 迭代: ${iter} | 生成: 待填充
38
+
39
+ ## 写作要求
40
+ 基于 010-requirements/ 下的需求文档,整理本迭代的功能模块清单。
41
+ - 每个功能模块必须标注「涉及端」
42
+ - 列出验收标准
43
+ - 标注优先级(P0/P1/P2)
44
+ `,
45
+ },
46
+ {
47
+ name: 'ANALYSIS.md',
48
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
49
+ # 需求分析
50
+
51
+ > 迭代: ${iter} | 生成: 待填充
52
+
53
+ ## 写作要求
54
+ 基于需求文档和源码审计,分析本迭代的功能点清单。
55
+ - 按优先级分节(P0 必修 / P1 应修 / P2 建议)
56
+ - 每个功能点标注编号(F-01, F-02...)和涉及端
57
+ - 列出接口变更和数据库变更
58
+ `,
59
+ },
60
+ {
61
+ name: 'TECH.md',
62
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
63
+ # 技术架构(跨端全局)
64
+
65
+ > 迭代: ${iter} | 生成: 待填充
66
+
67
+ ## 写作要求
68
+ 基于源码和依赖分析,描述本迭代的整体技术架构。
69
+ - 整体架构图
70
+ - 跨端交互(调用方 → 被调方、协议)
71
+ - 中间件选型
72
+ - 数据库设计(表/字段/索引)
73
+ `,
74
+ },
75
+ {
76
+ name: 'DEPS.md',
77
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
78
+ # 依赖清单
79
+
80
+ > 迭代: ${iter} | 生成: 待填充
81
+
82
+ ## 写作要求
83
+ 列出本迭代涉及的内部服务依赖和外部第三方依赖。
84
+ `,
85
+ },
86
+ {
87
+ name: 'RISK.md',
88
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
89
+ # 风险评估
90
+
91
+ > 迭代: ${iter} | 生成: 待填充
92
+
93
+ ## 写作要求
94
+ | 风险 | 可能性 | 影响 | 缓解措施 |
95
+ |:---|:---|:---|:---|
96
+ | | | | |
97
+
98
+ ## 回滚方案
99
+ 1. 触发条件: _待定_
100
+ 2. 回滚步骤: _待定_
101
+ `,
102
+ },
103
+ {
104
+ name: 'REVIEW.md',
105
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
106
+ # Code Review 清单
107
+
108
+ > 迭代: ${iter} | 生成: 待填充
109
+
110
+ ## 检查项
111
+ - [ ] 参数校验完整性
112
+ - [ ] 幂等性处理
113
+ - [ ] 索引覆盖
114
+ - [ ] 迁移脚本可回滚
115
+ - [ ] 鉴权配置
116
+ - [ ] 日志规范
117
+ `,
118
+ },
119
+ {
120
+ name: 'MONITOR.md',
121
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
122
+ # 监控指标
123
+
124
+ > 迭代: ${iter} | 生成: 待填充
125
+
126
+ ## 业务指标
127
+ | 指标 | 阈值 | 级别 |
128
+ |:---|:---|:---|
129
+ | 成功率 | <99.9% | P1 |
130
+ | P99延迟 | >1000ms | P2 |
131
+
132
+ ## 告警规则
133
+ | 规则 | 条件 | 通知 |
134
+ |:---|:---|:---|
135
+ | | | |
136
+ `,
137
+ },
138
+ {
139
+ name: 'FUNCTION_MAP.md',
140
+ buildPlaceholder: (iter) => `${exports.SKELETON_MARKER}
141
+ # 功能模块清单
142
+
143
+ > 迭代: ${iter} | 生成: 待填充
144
+
145
+ ## 写作要求
146
+ 列出本迭代所有功能模块及其涉及端,供 split 命令读取。
147
+
148
+ | 功能模块 | 涉及端 | 优先级 | 来源 |
149
+ |:---|:---|:---|:---|
150
+ | | | | |
151
+ `,
152
+ },
153
+ ];
154
+ // ================================================================
155
+ // Phase 2 文档清单(各端专属文档)
156
+ // ================================================================
157
+ const PHASE2_DOCS = [
158
+ {
159
+ name: 'TECH.md',
160
+ buildPlaceholder: (iter, platform) => `${exports.SKELETON_MARKER}
161
+ # ${platform} 技术架构
162
+
163
+ > 迭代: ${iter} | 端: ${platform} | 生成: 待填充
164
+
165
+ ## 写作要求
166
+ 基于 overview/TECH.md 的整体架构,细化本端的技术方案:
167
+ - 接口定义(路径/参数/响应)
168
+ - 数据模型(Entity/DTO/VO)
169
+ - 核心业务逻辑
170
+ - 与 overview/TECH.md 保持一致
171
+ `,
172
+ },
173
+ {
174
+ name: 'TEST.md',
175
+ buildPlaceholder: (iter, platform) => `${exports.SKELETON_MARKER}
176
+ # ${platform} 测试计划
177
+
178
+ > 迭代: ${iter} | 端: ${platform} | 生成: 待填充
179
+
180
+ ## 写作要求
181
+ - 单元测试覆盖
182
+ - API 端到端测试
183
+ - 边界测试(异常参数、超时、并发)
184
+ - 性能测试方案
185
+ `,
186
+ },
187
+ {
188
+ name: 'UI_SPEC.md',
189
+ buildPlaceholder: (iter, platform) => `${exports.SKELETON_MARKER}
190
+ # ${platform} UI 规格
191
+
192
+ > 迭代: ${iter} | 端: ${platform} | 生成: 待填充
193
+
194
+ ## 写作要求
195
+ - 页面清单与路由
196
+ - 组件拆分
197
+ - 交互流程
198
+ - 状态管理
199
+ `,
200
+ },
201
+ ];
202
+ // ================================================================
203
+ // 任务级文档清单(split 用)
204
+ // ================================================================
205
+ const TASK_DOCS = [
206
+ {
207
+ name: 'REQ.md',
208
+ buildPlaceholder: (taskName, platform) => `${exports.SKELETON_MARKER}
209
+ # 本任务需求规格
210
+
211
+ > ${taskName} | 端: ${platform} | 生成: 待填充
212
+
213
+ ## 写作要求
214
+ 根据 split 产出的需求切片,结合全局上下文,重新组织本任务的需求规格:
215
+ - 明确本任务的验收标准(可测试的、具体的)
216
+ - 细化业务规则和边界条件
217
+ - 列出异常场景和处理方式
218
+ - 标注与其他 Task 的依赖关系
219
+ `,
220
+ },
221
+ {
222
+ name: 'TECH.md',
223
+ buildPlaceholder: (taskName, platform) => `${exports.SKELETON_MARKER}
224
+ # 本任务技术方案
225
+
226
+ > ${taskName} | 端: ${platform} | 生成: 待填充
227
+
228
+ ## 写作要求
229
+ 基于 overview/TECH.md 的整体架构,细化到函数/接口级别:
230
+ - 具体的接口定义(路径/参数/响应)
231
+ - 数据模型设计(Entity/DTO/VO 字段映射)
232
+ - 核心业务逻辑的伪代码或流程描述
233
+ - 前端组件拆分和状态设计
234
+ - 必须与 overview/TECH.md 的整体架构保持一致
235
+ `,
236
+ },
237
+ {
238
+ name: 'TASK.md',
239
+ buildPlaceholder: (taskName, platform) => `${exports.SKELETON_MARKER}
240
+ # 实施计划
241
+
242
+ > ${taskName} | 端: ${platform} | 生成: 待填充
243
+
244
+ ## 写作要求
245
+ 根据本任务的需求和技术方案,制定具体实施步骤:
246
+ - 按开发顺序列出具体步骤
247
+ - 每个步骤有明确的完成标准
248
+ - 标注步骤间的依赖关系
249
+ - 估算每步的工作量
250
+ `,
251
+ },
252
+ ];
253
+ // ================================================================
254
+ // Manifest 计算函数
255
+ // ================================================================
256
+ /**
257
+ * 计算 analyze 命令的文件清单
258
+ * @param platforms 端列表
259
+ * @param phase '1' = Phase 1 (overview), '2' = Phase 2 (各端), undefined = 全部
260
+ * @param iteration 迭代名(用于占位内容)
261
+ */
262
+ function computeAnalyzeManifest(platforms, phase, iteration = '') {
263
+ const entries = [];
264
+ // Phase 1: overview/ 全局文档
265
+ if (!phase || phase === '1') {
266
+ for (const doc of PHASE1_DOCS) {
267
+ entries.push({
268
+ relPath: (0, path_1.join)(spec_paths_1.GLOBAL_SPECS_DIR, doc.name),
269
+ category: 'overview',
270
+ docName: doc.name,
271
+ placeholder: doc.buildPlaceholder(iteration),
272
+ });
273
+ }
274
+ }
275
+ // Phase 2: 各端专属文档
276
+ if (!phase || phase === '2') {
277
+ for (const platform of platforms) {
278
+ for (const doc of PHASE2_DOCS) {
279
+ entries.push({
280
+ relPath: (0, path_1.join)(platform, doc.name),
281
+ category: 'platform',
282
+ platform,
283
+ docName: doc.name,
284
+ placeholder: doc.buildPlaceholder(iteration, platform),
285
+ });
286
+ }
287
+ }
288
+ }
289
+ return entries;
290
+ }
291
+ /**
292
+ * 计算 split 命令的任务文件清单
293
+ * @param taskName 任务名(如 Task-001-xxx)
294
+ * @param platforms 涉及的端列表
295
+ */
296
+ function computeTaskManifest(taskName, platforms) {
297
+ const entries = [];
298
+ for (const platform of platforms) {
299
+ for (const doc of TASK_DOCS) {
300
+ entries.push({
301
+ relPath: (0, path_1.join)(platform, doc.name),
302
+ category: 'platform',
303
+ platform,
304
+ docName: doc.name,
305
+ placeholder: doc.buildPlaceholder(taskName, platform),
306
+ });
307
+ }
308
+ }
309
+ return entries;
310
+ }
311
+ // ================================================================
312
+ // 骨架生成器
313
+ // ================================================================
314
+ /**
315
+ * 预创建文件骨架
316
+ * - 文件不存在 → 创建目录 + 写入占位内容
317
+ * - 文件已存在且非骨架 → 跳过(保留已有内容,不覆盖)
318
+ * - 文件已存在且仍为骨架 → 跳过(等 AI 覆盖)
319
+ */
320
+ async function generateSkeleton(specDir, entries) {
321
+ const result = { created: [], skipped: [] };
322
+ for (const entry of entries) {
323
+ const fullPath = (0, path_1.join)(specDir, entry.relPath);
324
+ if (await (0, fs_extra_1.pathExists)(fullPath)) {
325
+ // 文件已存在 → 跳过(无论是否为骨架,都不覆盖)
326
+ result.skipped.push(entry.relPath);
327
+ continue;
328
+ }
329
+ // 文件不存在 → 创建骨架
330
+ await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fullPath));
331
+ await (0, fs_extra_1.writeFile)(fullPath, entry.placeholder, 'utf-8');
332
+ result.created.push(entry.relPath);
333
+ }
334
+ return result;
335
+ }
336
+ // ================================================================
337
+ // 内容验证器
338
+ // ================================================================
339
+ /**
340
+ * 检测哪些骨架文件已被 AI 填充
341
+ * - 存在且不含 SKELETON_MARKER → filled
342
+ * - 不存在或仍含 SKELETON_MARKER → unfilled
343
+ */
344
+ async function validateFilled(specDir, entries) {
345
+ const filled = [];
346
+ const unfilled = [];
347
+ for (const entry of entries) {
348
+ const fullPath = (0, path_1.join)(specDir, entry.relPath);
349
+ if (!(await (0, fs_extra_1.pathExists)(fullPath))) {
350
+ unfilled.push(entry.relPath);
351
+ continue;
352
+ }
353
+ const content = await (0, fs_extra_1.readFile)(fullPath, 'utf-8');
354
+ if (content.includes(exports.SKELETON_MARKER)) {
355
+ unfilled.push(entry.relPath);
356
+ }
357
+ else {
358
+ filled.push(entry.relPath);
359
+ }
360
+ }
361
+ return { filled, unfilled };
362
+ }
363
+ // ================================================================
364
+ // 进度检测(替代 detectIterationDocsStatus)
365
+ // ================================================================
366
+ /**
367
+ * 检测骨架填充进度,返回下一个需要生成的文件
368
+ * 用于逐文档链式推进模式
369
+ */
370
+ async function detectSkeletonProgress(specDir, entries) {
371
+ const { filled, unfilled } = await validateFilled(specDir, entries);
372
+ // 找到第一个未填充的 entry
373
+ let nextUnfilled = null;
374
+ for (const entry of entries) {
375
+ if (unfilled.includes(entry.relPath)) {
376
+ nextUnfilled = entry;
377
+ break;
378
+ }
379
+ }
380
+ return {
381
+ filled,
382
+ unfilled,
383
+ nextUnfilled,
384
+ filledCount: filled.length,
385
+ totalCount: entries.length,
386
+ };
387
+ }
388
+ // ================================================================
389
+ // Prompt 辅助:生成骨架文件列表文本
390
+ // ================================================================
391
+ /**
392
+ * 生成注入 prompt 的骨架文件列表
393
+ * 用于告诉 AI 哪些文件需要覆盖
394
+ */
395
+ function buildSkeletonFileList(entries, specDir) {
396
+ const overviewEntries = entries.filter(e => e.category === 'overview');
397
+ const platformEntries = entries.filter(e => e.category === 'platform');
398
+ let text = `## 文件清单(CLI 已预创建骨架,请逐个覆盖内容)\n\n`;
399
+ if (overviewEntries.length > 0) {
400
+ text += `### 全局文档(overview/)\n`;
401
+ for (const e of overviewEntries) {
402
+ text += `- \`${e.relPath}\`\n`;
403
+ }
404
+ text += `\n`;
405
+ }
406
+ // 按端分组
407
+ const platformGroups = new Map();
408
+ for (const e of platformEntries) {
409
+ const p = e.platform || 'unknown';
410
+ if (!platformGroups.has(p))
411
+ platformGroups.set(p, []);
412
+ platformGroups.get(p).push(e);
413
+ }
414
+ if (platformGroups.size > 0) {
415
+ text += `### 各端专属文档\n`;
416
+ for (const [platform, platformEntries] of platformGroups) {
417
+ text += `\n**${platform}/**\n`;
418
+ for (const e of platformEntries) {
419
+ text += `- \`${e.relPath}\`\n`;
420
+ }
421
+ }
422
+ }
423
+ text += `\n> 完整路径前缀: \`${specDir}/\`\n`;
424
+ text += `> 写入方式: 用 Write 工具直接覆盖上述路径的文件,不要创建新文件\n`;
425
+ return text;
426
+ }
427
+ //# sourceMappingURL=spec-skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-skeleton.js","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccore",
3
- "version": "7.5.1",
3
+ "version": "8.0.0",
4
4
  "description": "SpecCore - Code by Spec, Not by Vibe.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",