@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
@@ -26,9 +26,11 @@ import { buildTaskExecutionMetrics, formatExecutionMetricsCompact } from "../tas
26
26
  import { FeishuNotifier } from "../task-environment/delivery/feishu-notifier.js";
27
27
  import { TaskDeliveryDispatcher } from "../task-environment/delivery/task-delivery-dispatcher.js";
28
28
  import { TaskDeliveryService } from "../task-environment/delivery/task-delivery-service.js";
29
+ import { formatDeliveryWarningsWithDescriptions } from "../task-environment/delivery/delivery-warning-copy.js";
29
30
  import { FeishuAnalysisDocService } from "../task-environment/delivery/feishu-analysis-doc-service.js";
30
31
  import { TaskPublicationService } from "../task-environment/delivery/task-publication-service.js";
31
32
  import { FeishuClient } from "../integrations/feishu/feishu-client.js";
33
+ import { FeishuDocumentReader, mergeFeishuReferenceMaterials } from "../integrations/feishu/feishu-document-reader.js";
32
34
  import { FeishuUserService } from "../integrations/feishu/feishu-user-service.js";
33
35
  import { createFeedbackReport } from "./feedback.js";
34
36
  import { DEFAULT_FEEDBACK_RECIPIENT_EMAIL, FeishuFeedbackDeliveryService, persistFeedbackDeliveryResult, resolveDefaultFeedbackRecipientFallbackOpenId } from "./feedback-delivery.js";
@@ -2172,6 +2174,8 @@ function mergeReplayBundle(rebuilt, existing) {
2172
2174
  ...existing.summary,
2173
2175
  ...rebuilt.summary,
2174
2176
  ...(rebuilt.summary.analysisDocUrl ? {} : existing.summary.analysisDocUrl ? { analysisDocUrl: existing.summary.analysisDocUrl } : {}),
2177
+ ...(rebuilt.summary.prototypePreviewUrl ? {} : existing.summary.prototypePreviewUrl ? { prototypePreviewUrl: existing.summary.prototypePreviewUrl } : {}),
2178
+ ...(rebuilt.summary.prototypeDownloadUrl ? {} : existing.summary.prototypeDownloadUrl ? { prototypeDownloadUrl: existing.summary.prototypeDownloadUrl } : {}),
2175
2179
  ...(rebuilt.summary.repo ? {} : existing.summary.repo ? { repo: existing.summary.repo } : {}),
2176
2180
  ...(rebuilt.summary.sourceSystem ? {} : existing.summary.sourceSystem ? { sourceSystem: existing.summary.sourceSystem } : {}),
2177
2181
  ...(rebuilt.summary.sourceRef ? {} : existing.summary.sourceRef ? { sourceRef: existing.summary.sourceRef } : {}),
@@ -2543,46 +2547,60 @@ async function resolveTaskTextFromUrl(url) {
2543
2547
  if (!isFeishuDocumentUrl(trimmedUrl)) {
2544
2548
  throw new Error("submit currently supports document URLs from Feishu/Lark only.");
2545
2549
  }
2546
- let stdout;
2550
+ const reader = new FeishuDocumentReader();
2547
2551
  try {
2548
- const result = await execFileAsync("feishu", ["fetch", trimmedUrl], {
2549
- maxBuffer: 10 * 1024 * 1024
2550
- });
2551
- stdout = result.stdout;
2552
+ const resolved = await reader.readFromUrl(trimmedUrl);
2553
+ const referenceMaterials = mergeFeishuReferenceMaterials(extractFeishuReferenceMaterials(resolved.content, undefined, trimmedUrl), resolved.referenceMaterials);
2554
+ return {
2555
+ content: resolved.content,
2556
+ ...(resolved.title ? { title: resolved.title } : {}),
2557
+ sourceType: resolved.sourceType,
2558
+ ...(resolved.sourceDocumentType ? { sourceDocumentType: resolved.sourceDocumentType } : {}),
2559
+ ...(referenceMaterials ? { referenceMaterials } : {})
2560
+ };
2552
2561
  }
2553
- catch (error) {
2554
- const execError = error;
2555
- if (execError?.code === "ENOENT") {
2556
- throw new Error("submit could not fetch the Feishu document because the `feishu` CLI is not installed or not on PATH.");
2562
+ catch (builtinError) {
2563
+ let stdout;
2564
+ try {
2565
+ const result = await execFileAsync("feishu", ["fetch", trimmedUrl], {
2566
+ maxBuffer: 10 * 1024 * 1024
2567
+ });
2568
+ stdout = result.stdout;
2557
2569
  }
2558
- const detail = execError?.stderr?.trim() || execError?.stdout?.trim() || execError?.message || "unknown error";
2559
- throw new Error(`submit could not fetch the Feishu document: ${detail}`);
2560
- }
2561
- let payload;
2562
- try {
2563
- payload = JSON.parse(stdout);
2564
- }
2565
- catch {
2566
- throw new Error("submit received non-JSON output from `feishu fetch`.");
2567
- }
2568
- if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
2569
- throw new Error("submit received an invalid response from `feishu fetch`.");
2570
- }
2571
- const record = payload;
2572
- const markdown = typeof record.markdown === "string" ? record.markdown.trim() : "";
2573
- const title = (typeof record.title === "string" ? record.title.trim() : "") || extractTitleFromMarkdown(markdown);
2574
- const sourceDocumentType = typeof record.type === "string" ? record.type.trim() : undefined;
2575
- const referenceMaterials = extractFeishuReferenceMaterials(markdown, record.media, trimmedUrl);
2576
- if (!markdown) {
2577
- throw new Error("submit fetched the document URL, but it did not return readable markdown content.");
2570
+ catch (error) {
2571
+ const execError = error;
2572
+ const cliDetail = execError?.code === "ENOENT"
2573
+ ? "the `feishu` CLI is not installed or not on PATH"
2574
+ : execError?.stderr?.trim() || execError?.stdout?.trim() || execError?.message || "unknown error";
2575
+ const builtinDetail = builtinError instanceof Error ? builtinError.message : String(builtinError);
2576
+ throw new Error(`submit could not fetch the Feishu document via built-in app (${builtinDetail}) or via \`feishu fetch\` (${cliDetail}).`);
2577
+ }
2578
+ let payload;
2579
+ try {
2580
+ payload = JSON.parse(stdout);
2581
+ }
2582
+ catch {
2583
+ throw new Error("submit received non-JSON output from `feishu fetch`.");
2584
+ }
2585
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
2586
+ throw new Error("submit received an invalid response from `feishu fetch`.");
2587
+ }
2588
+ const record = payload;
2589
+ const markdown = typeof record.markdown === "string" ? record.markdown.trim() : "";
2590
+ const title = (typeof record.title === "string" ? record.title.trim() : "") || extractTitleFromMarkdown(markdown);
2591
+ const sourceDocumentType = typeof record.type === "string" ? record.type.trim() : undefined;
2592
+ const referenceMaterials = extractFeishuReferenceMaterials(markdown, record.media, trimmedUrl);
2593
+ if (!markdown) {
2594
+ throw new Error("submit fetched the document URL, but it did not return readable markdown content.");
2595
+ }
2596
+ return {
2597
+ content: markdown,
2598
+ ...(title ? { title } : {}),
2599
+ sourceType: "feishu_doc",
2600
+ ...(sourceDocumentType ? { sourceDocumentType } : {}),
2601
+ ...(referenceMaterials ? { referenceMaterials } : {})
2602
+ };
2578
2603
  }
2579
- return {
2580
- content: markdown,
2581
- ...(title ? { title } : {}),
2582
- sourceType: "feishu_doc",
2583
- ...(sourceDocumentType ? { sourceDocumentType } : {}),
2584
- ...(referenceMaterials ? { referenceMaterials } : {})
2585
- };
2586
2604
  }
2587
2605
  async function main() {
2588
2606
  const argv = process.argv.slice(2);
@@ -2799,7 +2817,7 @@ async function main() {
2799
2817
  }
2800
2818
  else {
2801
2819
  try {
2802
- const remote = await resolveTaskTextFromUrl(url);
2820
+ const remote = await runWithTerminalLoading("Resolving remote requirement document", async () => await resolveTaskTextFromUrl(url));
2803
2821
  description = remote.content;
2804
2822
  resolvedTitle = resolvedTitle || remote.title;
2805
2823
  remoteSourceType = remote.sourceType;
@@ -4031,7 +4049,7 @@ function renderTaskResultReport(input) {
4031
4049
  lines.push(`Metrics: ${metrics}`);
4032
4050
  }
4033
4051
  if (input.deliveryBundle.warnings?.length) {
4034
- lines.push(`Warnings: ${input.deliveryBundle.warnings.join(", ")}`);
4052
+ lines.push(`Warnings: ${formatDeliveryWarningsWithDescriptions(input.deliveryBundle.warnings)}`);
4035
4053
  }
4036
4054
  if (input.deliveryBundle.publication) {
4037
4055
  lines.push(`Publication: ${input.deliveryBundle.publication.action}${input.deliveryBundle.publication.reason ? ` (${input.deliveryBundle.publication.reason})` : ""}`);
@@ -4144,7 +4162,7 @@ function renderDeliveryStatusReport(input) {
4144
4162
  lines.push(`Decision: ${input.deliveryBundle.summary.decision}`);
4145
4163
  lines.push(`Created At: ${input.deliveryBundle.createdAt}`);
4146
4164
  if (input.deliveryBundle.warnings?.length) {
4147
- lines.push(`Warnings: ${input.deliveryBundle.warnings.join(", ")}`);
4165
+ lines.push(`Warnings: ${formatDeliveryWarningsWithDescriptions(input.deliveryBundle.warnings)}`);
4148
4166
  }
4149
4167
  }
4150
4168
  else {