@coralai/sps-cli 0.49.3 → 0.49.5
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/dist/console-assets/assets/{index-Bih62SMn.js → index-CtRrmaOR.js} +146 -146
- package/dist/console-assets/index.html +1 -1
- package/dist/console-server/lib/cardReader.d.ts.map +1 -1
- package/dist/console-server/lib/cardReader.js +90 -20
- package/dist/console-server/lib/cardReader.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;500;600;700&family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-CtRrmaOR.js"></script>
|
|
11
11
|
<link rel="stylesheet" crossorigin href="/assets/index-DRtlGwvq.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cardReader.d.ts","sourceRoot":"","sources":["../../../src/console-server/lib/cardReader.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IACtG,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAgED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnD;
|
|
1
|
+
{"version":3,"file":"cardReader.d.ts","sourceRoot":"","sources":["../../../src/console-server/lib/cardReader.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IACtG,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAgED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnD;AA6BD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,CAyBpD;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA2B3E"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module console-server/lib/cardReader
|
|
3
3
|
* @description 解析卡片 markdown + frontmatter,供 routes/cards 和 routes/projects 用
|
|
4
4
|
*/
|
|
5
|
-
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
5
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
6
6
|
import { resolve } from 'node:path';
|
|
7
7
|
function parseFrontmatter(raw) {
|
|
8
8
|
if (!raw.startsWith('---'))
|
|
@@ -69,49 +69,119 @@ function parseChecklist(body) {
|
|
|
69
69
|
export function cardsDir(projectDir) {
|
|
70
70
|
return resolve(projectDir, 'cards');
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* v0.49.5 修复:MarkdownTaskBackend 把卡片存在 `cards/<state>/N-title.md` 子目录里,
|
|
74
|
+
* 物理目录名就是 state(小写,如 planning/backlog/todo/inprogress/qa/done)。
|
|
75
|
+
* 之前 listCards 只扫顶层 `cards/*.md` → 永远返回空。
|
|
76
|
+
*
|
|
77
|
+
* 改法:
|
|
78
|
+
* - 遍历 cards/ 的所有一级子目录
|
|
79
|
+
* - 子目录名小写,正规化成首字母大写的 canonical state(Planning/Backlog/...)
|
|
80
|
+
* - card.state 直接用目录名,不再读 frontmatter(frontmatter 里通常没 state 字段)
|
|
81
|
+
* - 顶层 *.md 也兼容读(老版本可能写过那)
|
|
82
|
+
*/
|
|
83
|
+
const DIR_NAME_TO_STATE = {
|
|
84
|
+
planning: 'Planning',
|
|
85
|
+
backlog: 'Backlog',
|
|
86
|
+
todo: 'Todo',
|
|
87
|
+
inprogress: 'Inprogress',
|
|
88
|
+
qa: 'QA',
|
|
89
|
+
review: 'Review',
|
|
90
|
+
done: 'Done',
|
|
91
|
+
canceled: 'Canceled',
|
|
92
|
+
};
|
|
93
|
+
function normalizeState(dirName) {
|
|
94
|
+
const lower = dirName.toLowerCase();
|
|
95
|
+
return DIR_NAME_TO_STATE[lower] ?? dirName;
|
|
96
|
+
}
|
|
72
97
|
export function listCards(projectDir) {
|
|
73
98
|
const dir = cardsDir(projectDir);
|
|
74
99
|
if (!existsSync(dir))
|
|
75
100
|
return [];
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
101
|
+
const results = [];
|
|
102
|
+
for (const entry of readdirSync(dir)) {
|
|
103
|
+
const full = resolve(dir, entry);
|
|
104
|
+
let isDir = false;
|
|
105
|
+
try {
|
|
106
|
+
isDir = statSync(full).isDirectory();
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (isDir) {
|
|
112
|
+
const stateFromDir = normalizeState(entry);
|
|
113
|
+
for (const f of readdirSync(full)) {
|
|
114
|
+
if (!/^\d+.*\.md$/.test(f))
|
|
115
|
+
continue;
|
|
116
|
+
const card = readCardFromFile(resolve(full, f), stateFromDir);
|
|
117
|
+
if (card)
|
|
118
|
+
results.push(card);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (/^\d+.*\.md$/.test(entry)) {
|
|
122
|
+
// 兼容:老格式/用户手动放的顶层 md
|
|
123
|
+
const card = readCardFromFile(full, null);
|
|
124
|
+
if (card)
|
|
125
|
+
results.push(card);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 按 seq 倒序(新卡在前)
|
|
129
|
+
return results.sort((a, b) => b.seq - a.seq);
|
|
84
130
|
}
|
|
85
131
|
export function readCard(projectDir, seq) {
|
|
86
132
|
const dir = cardsDir(projectDir);
|
|
87
133
|
if (!existsSync(dir))
|
|
88
134
|
return null;
|
|
89
|
-
|
|
90
|
-
|
|
135
|
+
// 先扫子目录找
|
|
136
|
+
for (const entry of readdirSync(dir)) {
|
|
137
|
+
const full = resolve(dir, entry);
|
|
138
|
+
let isDir = false;
|
|
139
|
+
try {
|
|
140
|
+
isDir = statSync(full).isDirectory();
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (!isDir)
|
|
146
|
+
continue;
|
|
147
|
+
const stateFromDir = normalizeState(entry);
|
|
148
|
+
const file = readdirSync(full).find((f) => new RegExp(`^${seq}[^0-9]`).test(f));
|
|
149
|
+
if (file) {
|
|
150
|
+
const path = resolve(full, file);
|
|
151
|
+
const raw = readFileSync(path, 'utf-8');
|
|
152
|
+
const { frontmatter, body } = parseFrontmatter(raw);
|
|
153
|
+
return buildCardDetail(seq, frontmatter, body, stateFromDir);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Fallback:顶层 md
|
|
157
|
+
const topFile = readdirSync(dir).find((f) => new RegExp(`^${seq}[^0-9]`).test(f));
|
|
158
|
+
if (!topFile)
|
|
91
159
|
return null;
|
|
92
|
-
const path = resolve(dir,
|
|
160
|
+
const path = resolve(dir, topFile);
|
|
93
161
|
const raw = readFileSync(path, 'utf-8');
|
|
94
162
|
const { frontmatter, body } = parseFrontmatter(raw);
|
|
95
|
-
return buildCardDetail(seq, frontmatter, body);
|
|
163
|
+
return buildCardDetail(seq, frontmatter, body, null);
|
|
96
164
|
}
|
|
97
|
-
function readCardFromFile(path) {
|
|
165
|
+
function readCardFromFile(path, stateFromDir) {
|
|
98
166
|
try {
|
|
99
167
|
const raw = readFileSync(path, 'utf-8');
|
|
100
168
|
const { frontmatter } = parseFrontmatter(raw);
|
|
101
169
|
const seq = Number(frontmatter.seq);
|
|
102
170
|
if (!Number.isFinite(seq))
|
|
103
171
|
return null;
|
|
104
|
-
return buildCard(seq, frontmatter);
|
|
172
|
+
return buildCard(seq, frontmatter, stateFromDir);
|
|
105
173
|
}
|
|
106
174
|
catch {
|
|
107
175
|
return null;
|
|
108
176
|
}
|
|
109
177
|
}
|
|
110
|
-
function buildCard(seq, fm) {
|
|
178
|
+
function buildCard(seq, fm, stateFromDir) {
|
|
179
|
+
// Priority: 物理目录名 > frontmatter.state > fallback 'Backlog'
|
|
180
|
+
const state = stateFromDir ?? (fm.state ? String(fm.state) : 'Backlog');
|
|
111
181
|
return {
|
|
112
182
|
seq,
|
|
113
|
-
title: String(fm.title ?? ''),
|
|
114
|
-
state
|
|
183
|
+
title: String(fm.title ?? fm.name ?? ''),
|
|
184
|
+
state,
|
|
115
185
|
skills: Array.isArray(fm.skills) ? fm.skills : [],
|
|
116
186
|
labels: Array.isArray(fm.labels) ? fm.labels : [],
|
|
117
187
|
branch: fm.branch ? String(fm.branch) : null,
|
|
@@ -119,8 +189,8 @@ function buildCard(seq, fm) {
|
|
|
119
189
|
updatedAt: fm.updated ? String(fm.updated) : null,
|
|
120
190
|
};
|
|
121
191
|
}
|
|
122
|
-
function buildCardDetail(seq, fm, body) {
|
|
123
|
-
const card = buildCard(seq, fm);
|
|
192
|
+
function buildCardDetail(seq, fm, body, stateFromDir) {
|
|
193
|
+
const card = buildCard(seq, fm, stateFromDir);
|
|
124
194
|
return {
|
|
125
195
|
...card,
|
|
126
196
|
body,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cardReader.js","sourceRoot":"","sources":["../../../src/console-server/lib/cardReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"cardReader.js","sourceRoot":"","sources":["../../../src/console-server/lib/cardReader.ts"],"names":[],"mappings":"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"}
|