@sireai/optimus 0.1.42 → 0.1.43

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.
Files changed (47) hide show
  1. package/dist/cli/optimus.js +57 -39
  2. package/dist/cli/optimus.js.map +1 -1
  3. package/dist/integrations/feishu/feishu-doc-service.d.ts +14 -2
  4. package/dist/integrations/feishu/feishu-doc-service.js +33 -12
  5. package/dist/integrations/feishu/feishu-doc-service.js.map +1 -1
  6. package/dist/integrations/feishu/feishu-document-reader.d.ts +33 -0
  7. package/dist/integrations/feishu/feishu-document-reader.js +597 -0
  8. package/dist/integrations/feishu/feishu-document-reader.js.map +1 -0
  9. package/dist/task-environment/delivery/delivery-warning-copy.d.ts +2 -0
  10. package/dist/task-environment/delivery/delivery-warning-copy.js +24 -0
  11. package/dist/task-environment/delivery/delivery-warning-copy.js.map +1 -0
  12. package/dist/task-environment/delivery/feishu-analysis-doc-service.d.ts +32 -2
  13. package/dist/task-environment/delivery/feishu-analysis-doc-service.js +343 -17
  14. package/dist/task-environment/delivery/feishu-analysis-doc-service.js.map +1 -1
  15. package/dist/task-environment/delivery/feishu-card-primitives.d.ts +33 -0
  16. package/dist/task-environment/delivery/feishu-card-primitives.js +95 -0
  17. package/dist/task-environment/delivery/feishu-card-primitives.js.map +1 -0
  18. package/dist/task-environment/delivery/feishu-card-renderer.d.ts +1 -0
  19. package/dist/task-environment/delivery/feishu-card-renderer.js +34 -71
  20. package/dist/task-environment/delivery/feishu-card-renderer.js.map +1 -1
  21. package/dist/task-environment/delivery/feishu-content/feishu-copy-config.js +1 -0
  22. package/dist/task-environment/delivery/feishu-content/feishu-copy-config.js.map +1 -1
  23. package/dist/task-environment/delivery/feishu-notifier.js +4 -0
  24. package/dist/task-environment/delivery/feishu-notifier.js.map +1 -1
  25. package/dist/task-environment/delivery/pm-feishu-card-renderer.d.ts +19 -0
  26. package/dist/task-environment/delivery/pm-feishu-card-renderer.js +177 -0
  27. package/dist/task-environment/delivery/pm-feishu-card-renderer.js.map +1 -0
  28. package/dist/task-environment/delivery/sentry-feishu-card-renderer.d.ts +1 -0
  29. package/dist/task-environment/delivery/sentry-feishu-card-renderer.js +33 -70
  30. package/dist/task-environment/delivery/sentry-feishu-card-renderer.js.map +1 -1
  31. package/dist/task-environment/delivery/task-delivery-service.d.ts +6 -1
  32. package/dist/task-environment/delivery/task-delivery-service.js +136 -8
  33. package/dist/task-environment/delivery/task-delivery-service.js.map +1 -1
  34. package/dist/types.d.ts +2 -0
  35. package/package.json +1 -1
  36. package/task-harnesses/bugfix/ACCEPT.md +3 -2
  37. package/task-harnesses/bugfix/CONSTRAINTS.md +10 -4
  38. package/task-harnesses/bugfix/EVOLUTION.md +2 -8
  39. package/task-harnesses/bugfix/ROLE.md +7 -11
  40. package/task-harnesses/bugfix/STANDARD.md +81 -0
  41. package/task-harnesses/pm/ACCEPT.md +27 -57
  42. package/task-harnesses/pm/CONSTRAINTS.md +40 -36
  43. package/task-harnesses/pm/CONTEXT.md +32 -37
  44. package/task-harnesses/pm/EVOLUTION.md +61 -27
  45. package/task-harnesses/pm/ROLE.md +25 -27
  46. package/task-harnesses/pm/STANDARD.md +426 -129
  47. package/task-harnesses/pm/ANNOTATION_PATTERN.md +0 -58
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-warning-copy.js","sourceRoot":"","sources":["../../../src/task-environment/delivery/delivery-warning-copy.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAA2B;IACtD,wCAAwC,EAAE,mCAAmC;IAC7E,wCAAwC,EAAE,yCAAyC;IACnF,sCAAsC,EAAE,uCAAuC;IAC/E,sCAAsC,EAAE,iCAAiC;IACzE,uCAAuC,EAAE,mDAAmD;IAC5F,2BAA2B,EAAE,+BAA+B;IAC5D,uCAAuC,EAAE,yCAAyC;IAClF,2BAA2B,EAAE,6BAA6B;IAC1D,8BAA8B,EAAE,iCAAiC;IACjE,+BAA+B,EAAE,kCAAkC;IACnE,wCAAwC,EAAE,qCAAqC;IAC/E,gCAAgC,EAAE,mDAAmD;IACrF,mCAAmC,EAAE,oCAAoC;CAC1E,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,QAAkB;IACvE,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC;SACnE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { FeishuDocumentService } from "../../integrations/feishu/feishu-doc-service.js";
2
+ import { FeishuDocumentReader } from "../../integrations/feishu/feishu-document-reader.js";
2
3
  import { FeishuUserService } from "../../integrations/feishu/feishu-user-service.js";
3
4
  import type { OptimusConfig, TaskDeliveryBundle } from "../../types.js";
4
5
  export interface FeishuAnalysisDocPublishResult {
@@ -9,16 +10,44 @@ export interface FeishuAnalysisDocPublishResult {
9
10
  }
10
11
  export interface FeishuAnalysisDocServiceOptions {
11
12
  config?: Pick<OptimusConfig, "delivery">;
12
- documentService?: Pick<FeishuDocumentService, "isConfigured" | "createMarkdownDocument" | "uploadFileToDocument" | "grantDocumentMemberPermission" | "updateDocumentSharingSettings">;
13
+ documentService?: AnalysisDocDocumentService;
14
+ documentReader?: Pick<FeishuDocumentReader, "isConfigured" | "readFromUrl">;
13
15
  userService?: Pick<FeishuUserService, "isConfigured" | "resolveOpenId">;
14
16
  }
17
+ type AnalysisDocDocumentService = Pick<FeishuDocumentService, "isConfigured" | "createMarkdownDocument" | "createEmptyDocument" | "appendContentToDocument" | "uploadFileToDocument" | "grantDocumentMemberPermission" | "updateDocumentSharingSettings"> & {
18
+ createMarkdownDocumentFromContent?: (input: {
19
+ title: string;
20
+ markdown: string;
21
+ contentType?: "markdown" | "html";
22
+ parentSpaceId?: string;
23
+ parentNodeToken?: string;
24
+ }) => ReturnType<FeishuDocumentService["createMarkdownDocumentFromContent"]>;
25
+ };
15
26
  export declare class FeishuAnalysisDocService {
16
27
  private readonly documentService;
28
+ private readonly documentReader;
17
29
  private readonly userService;
18
30
  constructor(options?: FeishuAnalysisDocServiceOptions);
19
31
  publishIfNeeded(bundle: TaskDeliveryBundle): Promise<FeishuAnalysisDocPublishResult>;
20
32
  private buildTitle;
21
- private attachPrototypeBestEffort;
33
+ private buildPublishedContent;
34
+ private buildPmPublishedHtml;
35
+ private buildPmFallbackMarkdown;
36
+ private describePmArtifact;
37
+ private escapeHtml;
38
+ private escapeHtmlAttribute;
39
+ private createAnalysisDocument;
40
+ private createPmAnalysisDocument;
41
+ private isUnsupportedBlockCreateError;
42
+ private enrichExistingAnalysisDocBundle;
43
+ private attachArtifactsBestEffort;
44
+ private collectArtifactAttachments;
45
+ private describePmArtifactLine;
46
+ private resolvePrototypeUrlsFromUpload;
47
+ private resolvePrototypeUrlsFromReference;
48
+ private buildFeishuFileUrl;
49
+ private buildFeishuFileDownloadUrl;
50
+ private resolveFeishuWebOrigin;
22
51
  private configureAccessBestEffort;
23
52
  private enableTenantEditableShareBestEffort;
24
53
  private grantAccessToAssigneeBestEffort;
@@ -27,3 +56,4 @@ export declare class FeishuAnalysisDocService {
27
56
  private normalizeCorporateEmail;
28
57
  private withTimeout;
29
58
  }
59
+ export {};
@@ -1,13 +1,22 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { basename } from "node:path";
3
+ import { FeishuIntegrationError } from "../../integrations/feishu/feishu-client.js";
1
4
  import { FeishuDocumentService as DefaultFeishuDocumentService } from "../../integrations/feishu/feishu-doc-service.js";
5
+ import { FeishuDocumentReader } from "../../integrations/feishu/feishu-document-reader.js";
2
6
  import { FeishuUserService } from "../../integrations/feishu/feishu-user-service.js";
7
+ import { describeDeliveryWarning } from "./delivery-warning-copy.js";
3
8
  const FEISHU_PUBLISH_TIMEOUT_MS = 30_000;
4
9
  export class FeishuAnalysisDocService {
5
10
  documentService;
11
+ documentReader;
6
12
  userService;
7
13
  constructor(options = {}) {
8
14
  this.documentService = options.documentService ?? new DefaultFeishuDocumentService({
9
15
  ...(options.config ? { config: options.config } : {})
10
16
  });
17
+ this.documentReader = options.documentReader ?? new FeishuDocumentReader({
18
+ ...(options.config ? { config: options.config } : {})
19
+ });
11
20
  this.userService = options.userService ?? new FeishuUserService({
12
21
  ...(options.config ? { config: options.config } : {})
13
22
  });
@@ -17,7 +26,12 @@ export class FeishuAnalysisDocService {
17
26
  return { bundle, status: "skipped", reason: "not_analysis_only" };
18
27
  }
19
28
  if (bundle.summary.analysisDocUrl?.trim()) {
20
- return { bundle, status: "skipped", reason: "analysis_doc_already_present" };
29
+ const enriched = await this.enrichExistingAnalysisDocBundle(bundle);
30
+ return {
31
+ bundle: enriched.bundle,
32
+ status: "skipped",
33
+ reason: enriched.reason ?? "analysis_doc_already_present"
34
+ };
21
35
  }
22
36
  const resultMdPath = bundle.artifacts.resultMd?.trim();
23
37
  if (!resultMdPath) {
@@ -29,19 +43,23 @@ export class FeishuAnalysisDocService {
29
43
  const title = this.buildTitle(bundle);
30
44
  try {
31
45
  return await this.withTimeout(async () => {
32
- const created = await this.documentService.createMarkdownDocument({
33
- title,
34
- markdownPath: resultMdPath
35
- });
36
- const prototypeAttachmentError = await this.attachPrototypeBestEffort(created, bundle.artifacts.prototypeHtml);
46
+ const published = await this.buildPublishedContent(resultMdPath, bundle);
47
+ const created = await this.createAnalysisDocument(title, resultMdPath, published, bundle);
48
+ const artifactAttachment = await this.attachArtifactsBestEffort(created, bundle);
37
49
  const permissionGrantError = await this.configureAccessBestEffort(created, bundle.summary.qAssignee);
38
- const combinedReason = [prototypeAttachmentError, permissionGrantError].filter((value) => Boolean(value)).join("; ");
50
+ const combinedReason = [artifactAttachment.error, permissionGrantError].filter((value) => Boolean(value)).join("; ");
39
51
  return {
40
52
  bundle: {
41
53
  ...bundle,
42
54
  summary: {
43
55
  ...bundle.summary,
44
- analysisDocUrl: created.url
56
+ analysisDocUrl: created.url,
57
+ ...(artifactAttachment.prototypeUrls?.prototypePreviewUrl
58
+ ? { prototypePreviewUrl: artifactAttachment.prototypeUrls.prototypePreviewUrl }
59
+ : {}),
60
+ ...(artifactAttachment.prototypeUrls?.prototypeDownloadUrl
61
+ ? { prototypeDownloadUrl: artifactAttachment.prototypeUrls.prototypeDownloadUrl }
62
+ : {})
45
63
  }
46
64
  },
47
65
  status: "uploaded",
@@ -64,21 +82,329 @@ export class FeishuAnalysisDocService {
64
82
  const compactTitle = normalizedTitle.length > 80 ? `${normalizedTitle.slice(0, 77)}...` : normalizedTitle;
65
83
  return `Optimus 分析|${compactTitle}`;
66
84
  }
67
- async attachPrototypeBestEffort(createdDocument, prototypeHtmlPath) {
68
- if (!prototypeHtmlPath?.trim() || !this.documentService.uploadFileToDocument) {
69
- return undefined;
85
+ async buildPublishedContent(resultMdPath, bundle) {
86
+ if (bundle.taskType === "pm") {
87
+ return {
88
+ content: this.buildPmPublishedHtml(bundle),
89
+ contentType: "html"
90
+ };
91
+ }
92
+ const markdown = await readFile(resultMdPath, "utf8");
93
+ const warnings = bundle.warnings;
94
+ if (!warnings?.length) {
95
+ return {
96
+ content: markdown,
97
+ contentType: "markdown"
98
+ };
99
+ }
100
+ const warningLines = warnings.map((warning) => {
101
+ return `- \`${warning}\`:${describeDeliveryWarning(warning)}`;
102
+ }).join("\n");
103
+ const warningSection = [
104
+ "## 交付注意事项",
105
+ "以下交付校验项尚未满足,建议在继续流转前先确认:",
106
+ warningLines
107
+ ].join("\n");
108
+ const normalized = markdown.trimStart();
109
+ const headingMatch = normalized.match(/^(#\s+.+)\r?\n/u);
110
+ if (!headingMatch?.[1]) {
111
+ return {
112
+ content: `${warningSection}\n\n${markdown}`,
113
+ contentType: "markdown"
114
+ };
115
+ }
116
+ const leadingOffset = markdown.length - normalized.length;
117
+ const headingStart = leadingOffset;
118
+ const headingEnd = headingStart + headingMatch[0].length;
119
+ return {
120
+ content: `${markdown.slice(0, headingEnd)}\n${warningSection}\n\n${markdown.slice(headingEnd).trimStart()}`,
121
+ contentType: "markdown"
122
+ };
123
+ }
124
+ buildPmPublishedHtml(bundle) {
125
+ const sourceUrl = bundle.summary.sourceUrl?.trim();
126
+ const sections = [
127
+ "<h2>需求文档</h2>",
128
+ sourceUrl
129
+ ? `<ul><li>查看需求文档:<a href="${this.escapeHtmlAttribute(sourceUrl)}">${this.escapeHtml(sourceUrl)}</a></li></ul>`
130
+ : "<ul><li>查看需求文档:未提供</li></ul>",
131
+ "<h2>产物</h2>",
132
+ "<p>以下为交付产物。每项先给出一句说明,下一行附对应文件。</p>"
133
+ ];
134
+ const warnings = bundle.warnings;
135
+ if (warnings?.length) {
136
+ const warningItems = warnings.map((warning) => {
137
+ return `<li><code>${this.escapeHtml(warning)}</code>:${this.escapeHtml(describeDeliveryWarning(warning))}</li>`;
138
+ }).join("");
139
+ sections.push("<h2>交付注意事项</h2>", "<p>以下交付校验项尚未满足,建议在继续流转前先确认:</p>", `<ul>${warningItems}</ul>`);
140
+ }
141
+ return sections.join("");
142
+ }
143
+ buildPmFallbackMarkdown(bundle) {
144
+ const sourceUrl = bundle.summary.sourceUrl?.trim();
145
+ const sections = [
146
+ "## 需求文档",
147
+ sourceUrl ? `- 查看需求文档:${sourceUrl}` : "- 查看需求文档:未提供",
148
+ "",
149
+ "## 产物",
150
+ "以下为交付产物。每项先给出一句说明,下一行附对应文件。"
151
+ ];
152
+ const warnings = bundle.warnings;
153
+ if (warnings?.length) {
154
+ const warningLines = warnings.map((warning) => {
155
+ return `- \`${warning}\`:${describeDeliveryWarning(warning)}`;
156
+ }).join("\n");
157
+ sections.push("", "## 交付注意事项", "以下交付校验项尚未满足,建议在继续流转前先确认:", warningLines);
158
+ }
159
+ return `${sections.join("\n").trim()}\n`;
160
+ }
161
+ describePmArtifact(fileName) {
162
+ const normalized = fileName.trim().toLowerCase();
163
+ if (normalized === "prototype.html") {
164
+ return "可交互 HTML 原型";
165
+ }
166
+ if (normalized === "result.md") {
167
+ return "规则补充说明";
168
+ }
169
+ if (normalized === "annotations.json") {
170
+ return "结构化注解";
171
+ }
172
+ if (normalized === "requirement-map.md") {
173
+ return "需求映射草稿";
174
+ }
175
+ return "补充材料";
176
+ }
177
+ escapeHtml(value) {
178
+ return value
179
+ .replace(/&/gu, "&amp;")
180
+ .replace(/</gu, "&lt;")
181
+ .replace(/>/gu, "&gt;")
182
+ .replace(/"/gu, "&quot;")
183
+ .replace(/'/gu, "&#39;");
184
+ }
185
+ escapeHtmlAttribute(value) {
186
+ return this.escapeHtml(value);
187
+ }
188
+ async createAnalysisDocument(title, resultMdPath, published, bundle) {
189
+ if (bundle.taskType === "pm") {
190
+ return await this.createPmAnalysisDocument(title, resultMdPath, published, bundle);
191
+ }
192
+ if (!this.documentService.createMarkdownDocumentFromContent) {
193
+ return await this.documentService.createMarkdownDocument({
194
+ title,
195
+ markdownPath: resultMdPath
196
+ });
70
197
  }
71
198
  try {
72
- await this.documentService.uploadFileToDocument({
73
- documentToken: createdDocument.token,
74
- filePath: prototypeHtmlPath.trim(),
75
- fileName: "prototype.html"
199
+ return await this.documentService.createMarkdownDocumentFromContent({
200
+ title,
201
+ markdown: published.content,
202
+ contentType: published.contentType
76
203
  });
77
- return undefined;
78
204
  }
79
205
  catch (error) {
80
- return `analysis_doc_prototype_attach_failed: ${error instanceof Error ? error.message : String(error)}`;
206
+ if (!(bundle.taskType === "pm" && published.contentType === "html" && this.isUnsupportedBlockCreateError(error))) {
207
+ throw error;
208
+ }
209
+ return await this.documentService.createMarkdownDocumentFromContent({
210
+ title,
211
+ markdown: this.buildPmFallbackMarkdown(bundle),
212
+ contentType: "markdown"
213
+ });
214
+ }
215
+ }
216
+ async createPmAnalysisDocument(title, resultMdPath, published, bundle) {
217
+ if (!this.documentService.createEmptyDocument || !this.documentService.appendContentToDocument) {
218
+ return await this.documentService.createMarkdownDocument({
219
+ title,
220
+ markdownPath: resultMdPath
221
+ });
222
+ }
223
+ const created = await this.documentService.createEmptyDocument(title);
224
+ try {
225
+ await this.documentService.appendContentToDocument({
226
+ documentToken: created.token,
227
+ content: published.content,
228
+ contentType: published.contentType
229
+ });
230
+ return created;
231
+ }
232
+ catch (error) {
233
+ if (!(published.contentType === "html" && this.isUnsupportedBlockCreateError(error))) {
234
+ throw error;
235
+ }
236
+ await this.documentService.appendContentToDocument({
237
+ documentToken: created.token,
238
+ content: this.buildPmFallbackMarkdown(bundle),
239
+ contentType: "markdown"
240
+ });
241
+ return created;
242
+ }
243
+ }
244
+ isUnsupportedBlockCreateError(error) {
245
+ return error instanceof FeishuIntegrationError
246
+ && error.diagnostics.status === 400
247
+ && error.diagnostics.code === 1770029;
248
+ }
249
+ async enrichExistingAnalysisDocBundle(bundle) {
250
+ const analysisDocUrl = bundle.summary.analysisDocUrl?.trim();
251
+ if (!analysisDocUrl) {
252
+ return { bundle };
253
+ }
254
+ const hasPrototypeUrls = Boolean(bundle.summary.prototypePreviewUrl?.trim() && bundle.summary.prototypeDownloadUrl?.trim());
255
+ if (hasPrototypeUrls) {
256
+ return { bundle };
257
+ }
258
+ const shouldRecoverPrototypeUrls = bundle.taskType === "pm" || Boolean(bundle.artifacts.prototypeHtml?.trim());
259
+ if (!shouldRecoverPrototypeUrls || !this.documentReader.isConfigured()) {
260
+ return { bundle };
261
+ }
262
+ try {
263
+ const document = await this.documentReader.readFromUrl(analysisDocUrl);
264
+ const prototypeFile = document.referenceMaterials?.find((reference) => {
265
+ const normalizedTitle = reference.title.trim().toLowerCase();
266
+ return reference.type === "file" && reference.token?.trim() && normalizedTitle === "prototype.html";
267
+ });
268
+ const prototypeUrls = this.resolvePrototypeUrlsFromReference(analysisDocUrl, prototypeFile);
269
+ if (!prototypeUrls.prototypePreviewUrl && !prototypeUrls.prototypeDownloadUrl) {
270
+ return { bundle };
271
+ }
272
+ return {
273
+ bundle: {
274
+ ...bundle,
275
+ summary: {
276
+ ...bundle.summary,
277
+ ...(prototypeUrls.prototypePreviewUrl ? { prototypePreviewUrl: prototypeUrls.prototypePreviewUrl } : {}),
278
+ ...(prototypeUrls.prototypeDownloadUrl ? { prototypeDownloadUrl: prototypeUrls.prototypeDownloadUrl } : {})
279
+ }
280
+ }
281
+ };
282
+ }
283
+ catch (error) {
284
+ return {
285
+ bundle,
286
+ reason: `analysis_doc_prototype_url_recovery_failed: ${error instanceof Error ? error.message : String(error)}`
287
+ };
288
+ }
289
+ }
290
+ async attachArtifactsBestEffort(createdDocument, bundle) {
291
+ if (!this.documentService.uploadFileToDocument) {
292
+ return {};
293
+ }
294
+ const attachments = this.collectArtifactAttachments(bundle);
295
+ if (attachments.length === 0) {
296
+ return {};
297
+ }
298
+ const errors = [];
299
+ let prototypeUrls;
300
+ for (const attachment of attachments) {
301
+ try {
302
+ if (bundle.taskType === "pm" && this.documentService.appendContentToDocument) {
303
+ await this.documentService.appendContentToDocument({
304
+ documentToken: createdDocument.token,
305
+ content: this.describePmArtifactLine(attachment.fileName),
306
+ contentType: "markdown"
307
+ });
308
+ }
309
+ const uploaded = await this.documentService.uploadFileToDocument({
310
+ documentToken: createdDocument.token,
311
+ filePath: attachment.filePath,
312
+ fileName: attachment.fileName
313
+ });
314
+ if (attachment.fileName.trim().toLowerCase() === "prototype.html") {
315
+ prototypeUrls = this.resolvePrototypeUrlsFromUpload(createdDocument.url, uploaded.fileToken);
316
+ }
317
+ }
318
+ catch (error) {
319
+ errors.push(`${attachment.errorKey}: ${error instanceof Error ? error.message : String(error)}`);
320
+ }
321
+ }
322
+ return {
323
+ ...(errors.length > 0 ? { error: errors.join("; ") } : {}),
324
+ ...(prototypeUrls ? { prototypeUrls } : {})
325
+ };
326
+ }
327
+ collectArtifactAttachments(bundle) {
328
+ const attachments = [];
329
+ const seen = new Set();
330
+ const push = (filePath, preferredFileName) => {
331
+ const normalized = filePath?.trim();
332
+ if (!normalized || seen.has(normalized)) {
333
+ return;
334
+ }
335
+ seen.add(normalized);
336
+ const rawFileName = preferredFileName?.trim() || basename(normalized);
337
+ const fileName = rawFileName;
338
+ const errorKey = rawFileName.toLowerCase() === "prototype.html"
339
+ ? "analysis_doc_prototype_attach_failed"
340
+ : `analysis_doc_attachment_failed:${rawFileName}`;
341
+ attachments.push({
342
+ filePath: normalized,
343
+ fileName,
344
+ errorKey
345
+ });
346
+ };
347
+ push(bundle.artifacts.resultMd, "result.md");
348
+ push(bundle.artifacts.prototypeHtml, "prototype.html");
349
+ for (const extraPath of bundle.artifacts.extras ?? []) {
350
+ push(extraPath);
351
+ }
352
+ return attachments;
353
+ }
354
+ describePmArtifactLine(fileName) {
355
+ const purpose = this.describePmArtifact(fileName);
356
+ return purpose === "补充材料"
357
+ ? `- \`${fileName}\`:补充材料。`
358
+ : `- \`${fileName}\`:${purpose}。`;
359
+ }
360
+ resolvePrototypeUrlsFromUpload(analysisDocUrl, fileToken) {
361
+ const normalizedToken = fileToken?.trim();
362
+ if (!normalizedToken) {
363
+ return {};
364
+ }
365
+ const previewUrl = this.buildFeishuFileUrl(analysisDocUrl, normalizedToken);
366
+ return {
367
+ prototypePreviewUrl: previewUrl,
368
+ prototypeDownloadUrl: this.buildFeishuFileDownloadUrl(previewUrl)
369
+ };
370
+ }
371
+ resolvePrototypeUrlsFromReference(analysisDocUrl, reference) {
372
+ const previewUrl = reference?.token?.trim()
373
+ ? this.buildFeishuFileUrl(analysisDocUrl, reference.token.trim())
374
+ : reference?.url?.trim();
375
+ if (!previewUrl) {
376
+ return {};
377
+ }
378
+ return {
379
+ prototypePreviewUrl: previewUrl,
380
+ prototypeDownloadUrl: this.buildFeishuFileDownloadUrl(previewUrl)
381
+ };
382
+ }
383
+ buildFeishuFileUrl(analysisDocUrl, fileToken) {
384
+ const origin = this.resolveFeishuWebOrigin(analysisDocUrl);
385
+ return `${origin}/file/${encodeURIComponent(fileToken)}`;
386
+ }
387
+ buildFeishuFileDownloadUrl(previewUrl) {
388
+ try {
389
+ const url = new URL(previewUrl);
390
+ url.searchParams.set("download", "1");
391
+ return url.toString();
392
+ }
393
+ catch {
394
+ return previewUrl;
395
+ }
396
+ }
397
+ resolveFeishuWebOrigin(analysisDocUrl) {
398
+ const normalized = analysisDocUrl?.trim();
399
+ if (normalized) {
400
+ try {
401
+ return new URL(normalized).origin;
402
+ }
403
+ catch {
404
+ // fall through
405
+ }
81
406
  }
407
+ return "https://mi.feishu.cn";
82
408
  }
83
409
  async configureAccessBestEffort(createdDocument, qAssignee) {
84
410
  const errors = [];
@@ -1 +1 @@
1
- {"version":3,"file":"feishu-analysis-doc-service.js","sourceRoot":"","sources":["../../../src/task-environment/delivery/feishu-analysis-doc-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feishu-analysis-doc-service.js","sourceRoot":"","sources":["../../../src/task-environment/delivery/feishu-analysis-doc-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export interface FeishuCardAction {
2
+ tag: "button";
3
+ text: {
4
+ tag: "plain_text";
5
+ content: string;
6
+ };
7
+ type?: "default" | "primary" | "danger";
8
+ url: string;
9
+ }
10
+ interface EscapeOptions {
11
+ escape: (value: string) => string;
12
+ }
13
+ interface ToneOptions extends EscapeOptions {
14
+ tone?: string | undefined;
15
+ resolveToneTextColor: (tone: string | undefined) => string;
16
+ }
17
+ export declare function buildMetadataFieldsBlock(fields: Array<Record<string, unknown>>): Record<string, unknown>;
18
+ export declare function buildDividerBlock(): Record<string, unknown>;
19
+ export declare function buildActionBlock(actions: FeishuCardAction[]): Record<string, unknown>;
20
+ export declare function buildField(label: string, value: string, options?: EscapeOptions & {
21
+ escapeValue?: boolean;
22
+ preferShort?: boolean;
23
+ }): Record<string, unknown>;
24
+ export declare function buildHeadlineBlock(value: string, options: ToneOptions): Record<string, unknown>;
25
+ export declare function buildInlineRowBlock(label: string, value: string, options: ToneOptions & {
26
+ escapeValue?: boolean;
27
+ emphasize?: boolean;
28
+ }): Record<string, unknown>;
29
+ export declare function buildNoteBlock(value: string, options: ToneOptions): Record<string, unknown>;
30
+ export declare function buildMetricsNoteBlock(value: string, options: EscapeOptions): Record<string, unknown>;
31
+ export declare function resolveCommonToneTextColor(tone: string | undefined): string;
32
+ export declare function isCompactFieldValue(value: string): boolean;
33
+ export {};
@@ -0,0 +1,95 @@
1
+ export function buildMetadataFieldsBlock(fields) {
2
+ return {
3
+ tag: "div",
4
+ fields
5
+ };
6
+ }
7
+ export function buildDividerBlock() {
8
+ return { tag: "hr" };
9
+ }
10
+ export function buildActionBlock(actions) {
11
+ return {
12
+ tag: "action",
13
+ actions
14
+ };
15
+ }
16
+ export function buildField(label, value, options = { escape: (text) => text }) {
17
+ const escapeValue = options.escapeValue ?? true;
18
+ const preferShort = options.preferShort ?? false;
19
+ return {
20
+ is_short: preferShort && isCompactFieldValue(value),
21
+ text: {
22
+ tag: "lark_md",
23
+ content: `**${label}**:${escapeValue ? options.escape(value) : value}`
24
+ }
25
+ };
26
+ }
27
+ export function buildHeadlineBlock(value, options) {
28
+ return {
29
+ tag: "div",
30
+ text: {
31
+ tag: "lark_md",
32
+ content: `<font color='${options.resolveToneTextColor(options.tone)}'>**${options.escape(value)}**</font>`
33
+ }
34
+ };
35
+ }
36
+ export function buildInlineRowBlock(label, value, options) {
37
+ const escapeValue = options.escapeValue ?? true;
38
+ const formattedValue = escapeValue ? options.escape(value) : value;
39
+ const content = options.emphasize
40
+ ? `**${label}**:<font color='${options.resolveToneTextColor(options.tone)}'>${formattedValue}</font>`
41
+ : `**${label}**:${formattedValue}`;
42
+ return {
43
+ tag: "div",
44
+ text: {
45
+ tag: "lark_md",
46
+ content
47
+ }
48
+ };
49
+ }
50
+ export function buildNoteBlock(value, options) {
51
+ const content = options.tone
52
+ ? `<font color='${options.resolveToneTextColor(options.tone)}'>${options.escape(value)}</font>`
53
+ : options.escape(value);
54
+ return {
55
+ tag: "note",
56
+ elements: [{
57
+ tag: "lark_md",
58
+ content
59
+ }]
60
+ };
61
+ }
62
+ export function buildMetricsNoteBlock(value, options) {
63
+ return buildNoteBlock(`指标:${value}`, {
64
+ ...options,
65
+ resolveToneTextColor: resolveCommonToneTextColor
66
+ });
67
+ }
68
+ export function resolveCommonToneTextColor(tone) {
69
+ switch (tone) {
70
+ case "red":
71
+ return "#D83931";
72
+ case "grey":
73
+ return "#8F959E";
74
+ case "blue":
75
+ return "#2468F2";
76
+ case "orange":
77
+ return "#D97904";
78
+ case "green":
79
+ return "#2BA471";
80
+ case "turquoise":
81
+ return "#1593A6";
82
+ default:
83
+ return "#2BA471";
84
+ }
85
+ }
86
+ export function isCompactFieldValue(value) {
87
+ const visibleText = value
88
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
89
+ .replace(/<at\b[^>]*><\/at>/g, "@")
90
+ .replace(/[*_`~]/g, "")
91
+ .replace(/\s+/g, " ")
92
+ .trim();
93
+ return visibleText.length > 0 && visibleText.length <= 36 && !visibleText.includes("\n");
94
+ }
95
+ //# sourceMappingURL=feishu-card-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu-card-primitives.js","sourceRoot":"","sources":["../../../src/task-environment/delivery/feishu-card-primitives.ts"],"names":[],"mappings":"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"}