@dyno181cm.nexsoft/zentao_mcp 1.2.14 → 1.2.16
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/build/tools.js +11 -9
- package/package.json +1 -1
package/build/tools.js
CHANGED
|
@@ -81,7 +81,7 @@ async function localizeImages(html) {
|
|
|
81
81
|
}
|
|
82
82
|
const fileUrl = toFileUrl(localPath);
|
|
83
83
|
// Replace img tag with a standard hyperlink (no inline rendering, saves tokens)
|
|
84
|
-
const linkTag = `<a href="${fileUrl}"
|
|
84
|
+
const linkTag = `<a href="${fileUrl}">${linkText}</a>`;
|
|
85
85
|
result = result.split(fullTag).join(linkTag);
|
|
86
86
|
}
|
|
87
87
|
catch {
|
|
@@ -137,11 +137,11 @@ async function renderAttachments(files) {
|
|
|
137
137
|
headerHint = ' *(AI: Please view the videos below)*';
|
|
138
138
|
const lines = enriched.map((f) => {
|
|
139
139
|
if (!f.localPath)
|
|
140
|
-
return `-
|
|
140
|
+
return `- ${f.title} — *(download failed, Size: ${formatSize(f.size)})*`;
|
|
141
141
|
const fileUrl = toFileUrl(f.localPath);
|
|
142
|
-
return `-
|
|
142
|
+
return `- [${f.title}](${fileUrl}) *(Size: ${formatSize(f.size)})*`;
|
|
143
143
|
});
|
|
144
|
-
return `\n## Files
|
|
144
|
+
return `\n## Files${headerHint}\n${lines.join('\n')}\n`;
|
|
145
145
|
}
|
|
146
146
|
// ─── Public formatters ───────────────────────────────────────────────────────
|
|
147
147
|
/**
|
|
@@ -197,24 +197,26 @@ export async function bugToMarkdown(rawBug) {
|
|
|
197
197
|
`**Priority:** ${rawBug.pri || 'N/A'}`,
|
|
198
198
|
`**Type:** ${rawBug.type || 'N/A'}`,
|
|
199
199
|
];
|
|
200
|
-
if (rawBug.openedBy)
|
|
200
|
+
if (rawBug.openedBy) {
|
|
201
201
|
meta.push(`**Opened by:** ${formatUser(rawBug.openedBy)}`);
|
|
202
|
-
|
|
202
|
+
}
|
|
203
|
+
if (rawBug.assignedTo) {
|
|
203
204
|
meta.push(`**Assigned to:** ${formatUser(rawBug.assignedTo)}`);
|
|
205
|
+
}
|
|
204
206
|
if (rawBug.resolvedBy) {
|
|
205
207
|
const resolution = rawBug.resolution ? ` (${rawBug.resolution})` : '';
|
|
206
208
|
meta.push(`**Resolved by:** ${formatUser(rawBug.resolvedBy)}${resolution}`);
|
|
207
209
|
}
|
|
208
|
-
if (rawBug.closedBy)
|
|
210
|
+
if (rawBug.closedBy) {
|
|
209
211
|
meta.push(`**Closed by:** ${formatUser(rawBug.closedBy)}`);
|
|
212
|
+
}
|
|
210
213
|
const localizedSteps = await localizeImages(rawBug.steps);
|
|
211
214
|
const steps = htmlToMarkdown(localizedSteps);
|
|
212
215
|
const attachments = await renderAttachments(parseFiles(rawBug.files));
|
|
213
|
-
const metaList = meta.map(m => `- ${m}`).join('\n');
|
|
214
216
|
return [
|
|
215
217
|
`# Bug #${rawBug.id}: ${rawBug.title}`,
|
|
216
218
|
'',
|
|
217
|
-
|
|
219
|
+
...meta.map(m => `- ${m}`),
|
|
218
220
|
'',
|
|
219
221
|
'## Repro Steps',
|
|
220
222
|
steps || '*No steps provided.*',
|