speccore 1.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.
- package/README.en.md +401 -0
- package/README.md +401 -0
- package/bin/speccore +2 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +450 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/archive.d.ts +10 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +138 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/audit.d.ts +10 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +278 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/baseline.d.ts +13 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +227 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/bugfix.d.ts +13 -0
- package/dist/commands/bugfix.d.ts.map +1 -0
- package/dist/commands/bugfix.js +181 -0
- package/dist/commands/bugfix.js.map +1 -0
- package/dist/commands/change.d.ts +14 -0
- package/dist/commands/change.d.ts.map +1 -0
- package/dist/commands/change.js +150 -0
- package/dist/commands/change.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +110 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dashboard.d.ts +9 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +209 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/demo.d.ts +10 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +151 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/execute.d.ts +18 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +127 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/global-status.d.ts +9 -0
- package/dist/commands/global-status.d.ts.map +1 -0
- package/dist/commands/global-status.js +135 -0
- package/dist/commands/global-status.js.map +1 -0
- package/dist/commands/goal.d.ts +15 -0
- package/dist/commands/goal.d.ts.map +1 -0
- package/dist/commands/goal.js +282 -0
- package/dist/commands/goal.js.map +1 -0
- package/dist/commands/handover.d.ts +11 -0
- package/dist/commands/handover.d.ts.map +1 -0
- package/dist/commands/handover.js +169 -0
- package/dist/commands/handover.js.map +1 -0
- package/dist/commands/health.d.ts +7 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +80 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/help.d.ts +10 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +93 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/history.d.ts +9 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +87 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/impact.d.ts +12 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +238 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/import.d.ts +15 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +366 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +564 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/iteration/create.d.ts +7 -0
- package/dist/commands/iteration/create.d.ts.map +1 -0
- package/dist/commands/iteration/create.js +141 -0
- package/dist/commands/iteration/create.js.map +1 -0
- package/dist/commands/iteration/split.d.ts +9 -0
- package/dist/commands/iteration/split.d.ts.map +1 -0
- package/dist/commands/iteration/split.js +165 -0
- package/dist/commands/iteration/split.js.map +1 -0
- package/dist/commands/iteration-from-global.d.ts +11 -0
- package/dist/commands/iteration-from-global.d.ts.map +1 -0
- package/dist/commands/iteration-from-global.js +294 -0
- package/dist/commands/iteration-from-global.js.map +1 -0
- package/dist/commands/plan.d.ts +12 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +126 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/progress.d.ts +10 -0
- package/dist/commands/progress.d.ts.map +1 -0
- package/dist/commands/progress.js +89 -0
- package/dist/commands/progress.js.map +1 -0
- package/dist/commands/rename.d.ts +14 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +298 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/report.d.ts +10 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +124 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/research.d.ts +14 -0
- package/dist/commands/research.d.ts.map +1 -0
- package/dist/commands/research.js +181 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/retro.d.ts +10 -0
- package/dist/commands/retro.d.ts.map +1 -0
- package/dist/commands/retro.js +130 -0
- package/dist/commands/retro.js.map +1 -0
- package/dist/commands/spec.d.ts +8 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +155 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +48 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync-global.d.ts +13 -0
- package/dist/commands/sync-global.d.ts.map +1 -0
- package/dist/commands/sync-global.js +218 -0
- package/dist/commands/sync-global.js.map +1 -0
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +170 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/task/new.d.ts +13 -0
- package/dist/commands/task/new.d.ts.map +1 -0
- package/dist/commands/task/new.js +195 -0
- package/dist/commands/task/new.js.map +1 -0
- package/dist/commands/template-add.d.ts +12 -0
- package/dist/commands/template-add.d.ts.map +1 -0
- package/dist/commands/template-add.js +65 -0
- package/dist/commands/template-add.js.map +1 -0
- package/dist/commands/validate.d.ts +10 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +37 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/welcome.d.ts +9 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +166 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/core/context.d.ts +31 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +145 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/global-layer.d.ts +124 -0
- package/dist/core/global-layer.d.ts.map +1 -0
- package/dist/core/global-layer.js +456 -0
- package/dist/core/global-layer.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intent-recognition.d.ts +48 -0
- package/dist/core/intent-recognition.d.ts.map +1 -0
- package/dist/core/intent-recognition.js +485 -0
- package/dist/core/intent-recognition.js.map +1 -0
- package/dist/core/state.d.ts +26 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +187 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/template-engine.d.ts +28 -0
- package/dist/core/template-engine.d.ts.map +1 -0
- package/dist/core/template-engine.js +57 -0
- package/dist/core/template-engine.js.map +1 -0
- package/dist/core/validator.d.ts +26 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +246 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/core/yaml-parser.d.ts +25 -0
- package/dist/core/yaml-parser.d.ts.map +1 -0
- package/dist/core/yaml-parser.js +113 -0
- package/dist/core/yaml-parser.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/file.d.ts +29 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +126 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/git.d.ts +25 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +77 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +184 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadContext = loadContext;
|
|
37
|
+
exports.saveContext = saveContext;
|
|
38
|
+
exports.updateContext = updateContext;
|
|
39
|
+
exports.recordHistory = recordHistory;
|
|
40
|
+
exports.detectActiveIteration = detectActiveIteration;
|
|
41
|
+
exports.detectCurrentAssignee = detectCurrentAssignee;
|
|
42
|
+
exports.getDefaultIteration = getDefaultIteration;
|
|
43
|
+
exports.getDefaultAssignee = getDefaultAssignee;
|
|
44
|
+
const fs_extra_1 = require("fs-extra");
|
|
45
|
+
const CONTEXT_PATH = '.speccore/local/context.json';
|
|
46
|
+
async function loadContext() {
|
|
47
|
+
if (await (0, fs_extra_1.pathExists)(CONTEXT_PATH)) {
|
|
48
|
+
return await (0, fs_extra_1.readJson)(CONTEXT_PATH);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
currentIteration: '',
|
|
52
|
+
currentTask: '',
|
|
53
|
+
currentAssignee: '',
|
|
54
|
+
lastUpdated: '',
|
|
55
|
+
lastAction: '',
|
|
56
|
+
lastIntent: '',
|
|
57
|
+
interruptedAt: '',
|
|
58
|
+
iterationStatus: '',
|
|
59
|
+
pendingTasks: 0,
|
|
60
|
+
inProgressTasks: 0,
|
|
61
|
+
completedTasks: 0,
|
|
62
|
+
blockedTasks: 0,
|
|
63
|
+
customAliases: {},
|
|
64
|
+
history: []
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
async function saveContext(context) {
|
|
68
|
+
await (0, fs_extra_1.ensureDir)('.speccore/local');
|
|
69
|
+
context.lastUpdated = new Date().toISOString();
|
|
70
|
+
await (0, fs_extra_1.writeJson)(CONTEXT_PATH, context, { spaces: 2 });
|
|
71
|
+
}
|
|
72
|
+
async function updateContext(partial) {
|
|
73
|
+
const context = await loadContext();
|
|
74
|
+
Object.assign(context, partial);
|
|
75
|
+
await saveContext(context);
|
|
76
|
+
}
|
|
77
|
+
async function recordHistory(command, iteration, task) {
|
|
78
|
+
const context = await loadContext();
|
|
79
|
+
context.history.push({
|
|
80
|
+
command,
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
iteration,
|
|
83
|
+
task
|
|
84
|
+
});
|
|
85
|
+
// Keep only last 100 entries
|
|
86
|
+
if (context.history.length > 100) {
|
|
87
|
+
context.history = context.history.slice(-100);
|
|
88
|
+
}
|
|
89
|
+
await saveContext(context);
|
|
90
|
+
}
|
|
91
|
+
async function detectActiveIteration() {
|
|
92
|
+
const { pathExists, readFile } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
|
|
93
|
+
const { join } = await Promise.resolve().then(() => __importStar(require('path')));
|
|
94
|
+
// First check context
|
|
95
|
+
const context = await loadContext();
|
|
96
|
+
if (context.currentIteration) {
|
|
97
|
+
return context.currentIteration;
|
|
98
|
+
}
|
|
99
|
+
// Read ITERATIONS/README.md
|
|
100
|
+
const iterationsPath = join('.speccore', 'ITERATIONS', 'README.md');
|
|
101
|
+
if (!(await pathExists(iterationsPath))) {
|
|
102
|
+
return '';
|
|
103
|
+
}
|
|
104
|
+
const content = await readFile(iterationsPath, 'utf-8');
|
|
105
|
+
// Find iteration with 🔄 进行中 status
|
|
106
|
+
const activeMatch = content.match(/\|\s*([^|]+)\s*\|[^|]*🔄/);
|
|
107
|
+
if (activeMatch) {
|
|
108
|
+
return activeMatch[1].trim();
|
|
109
|
+
}
|
|
110
|
+
// Find latest iteration
|
|
111
|
+
const matches = content.matchAll(/\|\s*([^|]+)\s*\|/g);
|
|
112
|
+
const iterations = [];
|
|
113
|
+
for (const match of matches) {
|
|
114
|
+
const name = match[1].trim();
|
|
115
|
+
if (name && name !== '期次名称' && !name.startsWith('---')) {
|
|
116
|
+
iterations.push(name);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return iterations[iterations.length - 1] || '';
|
|
120
|
+
}
|
|
121
|
+
async function detectCurrentAssignee() {
|
|
122
|
+
const context = await loadContext();
|
|
123
|
+
if (context.currentAssignee) {
|
|
124
|
+
return context.currentAssignee;
|
|
125
|
+
}
|
|
126
|
+
// Try git config
|
|
127
|
+
try {
|
|
128
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
129
|
+
return execSync('git config user.name', { encoding: 'utf-8' }).trim();
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return 'unknown';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function getDefaultIteration(iteration) {
|
|
136
|
+
if (iteration)
|
|
137
|
+
return iteration;
|
|
138
|
+
return await detectActiveIteration();
|
|
139
|
+
}
|
|
140
|
+
async function getDefaultAssignee(assignee) {
|
|
141
|
+
if (assignee)
|
|
142
|
+
return assignee;
|
|
143
|
+
return await detectCurrentAssignee();
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLOBAL 全量层管理核心模块
|
|
3
|
+
* 负责管理 GLOBAL/ 目录下的全量需求索引、项目映射、期次关联
|
|
4
|
+
*/
|
|
5
|
+
/** 需求状态 */
|
|
6
|
+
export type ReqStatus = '📦 已有实现' | '✅ 已实现' | '🔄 进行中' | '🔲 待开发' | '🗑️ 已废弃';
|
|
7
|
+
/** 项目类型 */
|
|
8
|
+
export type ProjectType = 'backend' | 'web' | 'h5' | 'miniapp';
|
|
9
|
+
/** 需求索引条目 */
|
|
10
|
+
export interface ReqIndexEntry {
|
|
11
|
+
id: string;
|
|
12
|
+
project: string;
|
|
13
|
+
name: string;
|
|
14
|
+
status: ReqStatus;
|
|
15
|
+
version: string;
|
|
16
|
+
iteration: string;
|
|
17
|
+
task: string;
|
|
18
|
+
filePath: string;
|
|
19
|
+
}
|
|
20
|
+
/** 项目条目 */
|
|
21
|
+
export interface ProjectEntry {
|
|
22
|
+
name: string;
|
|
23
|
+
type: ProjectType;
|
|
24
|
+
reqCount: number;
|
|
25
|
+
implemented: number;
|
|
26
|
+
inProgress: number;
|
|
27
|
+
pending: number;
|
|
28
|
+
lastImport: string;
|
|
29
|
+
}
|
|
30
|
+
/** 期次关联条目 */
|
|
31
|
+
export interface IterationLink {
|
|
32
|
+
name: string;
|
|
33
|
+
reqs: string[];
|
|
34
|
+
status: string;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
}
|
|
37
|
+
/** INDEX.md 解析后的全局索引 */
|
|
38
|
+
export interface GlobalIndex {
|
|
39
|
+
reqs: ReqIndexEntry[];
|
|
40
|
+
projects: ProjectEntry[];
|
|
41
|
+
iterations: IterationLink[];
|
|
42
|
+
version: string;
|
|
43
|
+
lastUpdated: string;
|
|
44
|
+
}
|
|
45
|
+
/** 导入项目参数 */
|
|
46
|
+
export interface ImportProjectParams {
|
|
47
|
+
project: string;
|
|
48
|
+
path: string;
|
|
49
|
+
type: ProjectType;
|
|
50
|
+
}
|
|
51
|
+
/** 需求变更条目 */
|
|
52
|
+
export interface ReqChange {
|
|
53
|
+
reqId: string;
|
|
54
|
+
reqName: string;
|
|
55
|
+
project: string;
|
|
56
|
+
changeType: '新增' | '修改' | '废弃';
|
|
57
|
+
changeDesc: string;
|
|
58
|
+
}
|
|
59
|
+
declare function getGlobalDir(): string;
|
|
60
|
+
declare function getIndexPath(): string;
|
|
61
|
+
declare function getProjectReqPath(project: string): string;
|
|
62
|
+
declare function getProjectMetaPath(project: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* 解析 GLOBAL/INDEX.md
|
|
65
|
+
*/
|
|
66
|
+
export declare function readGlobalIndex(): Promise<GlobalIndex>;
|
|
67
|
+
/**
|
|
68
|
+
* 获取下一个需求编号
|
|
69
|
+
*/
|
|
70
|
+
export declare function getNextReqId(index: GlobalIndex): string;
|
|
71
|
+
/**
|
|
72
|
+
* 递增全局版本号
|
|
73
|
+
*/
|
|
74
|
+
export declare function bumpGlobalVersion(currentVersion: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* 追加需求条目到 INDEX.md 的需求索引表
|
|
77
|
+
*/
|
|
78
|
+
export declare function appendReqToIndex(entry: ReqIndexEntry): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* 更新 INDEX.md 中需求条目的状态、版本等信息
|
|
81
|
+
*/
|
|
82
|
+
export declare function updateReqInIndex(reqId: string, updates: Partial<ReqIndexEntry>): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* 追加项目条目到 INDEX.md
|
|
85
|
+
*/
|
|
86
|
+
export declare function upsertProjectInIndex(project: ProjectEntry): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* 追加期次关联到 INDEX.md
|
|
89
|
+
*/
|
|
90
|
+
export declare function appendIterationLink(link: IterationLink): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* 更新 INDEX.md 版本信息
|
|
93
|
+
*/
|
|
94
|
+
export declare function updateIndexVersion(version: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* 确保项目目录存在
|
|
97
|
+
*/
|
|
98
|
+
export declare function ensureProjectDir(project: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* 写入项目需求文档
|
|
101
|
+
*/
|
|
102
|
+
export declare function writeProjectRequirements(project: string, projectType: ProjectType, requirements: {
|
|
103
|
+
name: string;
|
|
104
|
+
description: string;
|
|
105
|
+
id: string;
|
|
106
|
+
}[], techStack?: string): Promise<ReqIndexEntry[]>;
|
|
107
|
+
/**
|
|
108
|
+
* 写入项目元数据
|
|
109
|
+
*/
|
|
110
|
+
export declare function writeProjectMetadata(project: string, projectType: ProjectType, techStack?: string, repoUrl?: string): Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* 从指定项目中读取指定需求 ID 的详细内容
|
|
113
|
+
*/
|
|
114
|
+
export declare function readRequirementDetail(project: string, reqId: string): Promise<string>;
|
|
115
|
+
/**
|
|
116
|
+
* 对比两个需求描述并返回变更清单
|
|
117
|
+
*/
|
|
118
|
+
export declare function diffRequirements(sourceTitle: string, sourceContent: string, targetContent: string): ReqChange[];
|
|
119
|
+
/**
|
|
120
|
+
* 获取所有已导入项目的列表
|
|
121
|
+
*/
|
|
122
|
+
export declare function listProjectDirs(): Promise<string[]>;
|
|
123
|
+
export { getGlobalDir, getIndexPath, getProjectReqPath, getProjectMetaPath };
|
|
124
|
+
//# sourceMappingURL=global-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-layer.d.ts","sourceRoot":"","sources":["../../src/core/global-layer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,WAAW;AACX,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9E,WAAW;AACX,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/D,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,aAAa;AACb,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,aAAa;AACb,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,iBAAS,YAAY,IAAI,MAAM,CAE9B;AAED,iBAAS,YAAY,IAAI,MAAM,CAE9B;AAED,iBAAS,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAMD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CA+E5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CASvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BpG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC/E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB5E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBvE;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EACjE,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAqE1B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,SAAS,GAAE,MAAW,EACtB,OAAO,GAAE,MAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW3F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACpB,SAAS,EAAE,CA4Bb;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CASzD;AAMD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC"}
|