stable-harness 0.0.30 → 0.0.31
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/package.json
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SynthesisLanguage } from "./language.js";
|
|
2
|
+
export type FactKind = "context" | "data" | "timeBound" | "limit" | "other";
|
|
3
|
+
export type EvidenceFact = {
|
|
4
|
+
source: string;
|
|
5
|
+
text: string;
|
|
6
|
+
kind: FactKind;
|
|
7
|
+
};
|
|
8
|
+
export type EvidenceField = {
|
|
9
|
+
source: string;
|
|
10
|
+
label: string;
|
|
11
|
+
value: string;
|
|
12
|
+
kind: FactKind;
|
|
13
|
+
};
|
|
14
|
+
export declare function evidenceFields(facts: EvidenceFact[]): EvidenceField[];
|
|
15
|
+
export declare function selectSectionFields(fields: EvidenceField[], kind: FactKind, limit: number): EvidenceField[];
|
|
16
|
+
export declare function fieldTableLines(fields: EvidenceField[], language: SynthesisLanguage): string[];
|
|
17
|
+
export declare function hasExtractableFields(text: string): boolean;
|
|
18
|
+
export declare function classifyFact(text: string): FactKind;
|
|
19
|
+
export declare function normalizeFieldLabel(label: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function evidenceFields(e){const t=new Set,l=[];for(const r of e)for(const e of parseEvidenceFields(r)){const r=`${normalizeFieldLabel(e.label)}\0${e.value.toLowerCase()}`;t.has(r)||(t.add(r),l.push(e))}return l}export function selectSectionFields(e,t,l){return function withSourceCoverage(e,t){const l=[...e].sort((e,t)=>scoreField(t)-scoreField(e)),r=new Map;for(const e of[...new Set(l.map(e=>e.source))]){const t=l.find(t=>t.source===e);t&&r.set(fieldKey(t),t)}for(const e of l)if(r.set(fieldKey(e),e),r.size>=t)break;return[...r.values()].slice(0,t)}(e.filter(e=>e.kind===t),l).sort((e,t)=>scoreField(t)-scoreField(e)||e.label.localeCompare(t.label))}export function fieldTableLines(e,t){return 0===e.length?[]:[..."zh"===t?["| 项目 | 数值 | 来源 |","|---|---:|---|"]:["| Field | Value | Source |","|---|---:|---|"],...e.map(e=>`| ${escapeTableCell(e.label)} | ${escapeTableCell(e.value)} | ${escapeTableCell(function humanSourceLabel(e){const t=e.replace(/([a-z])([A-Z])/gu,"$1 $2").split(/[_:.\-\s]+/u).map(e=>e.trim()).filter(Boolean);return 0===t.length?e:t.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}(e.source))} |`)]}export function hasExtractableFields(e){return extractKeyValueFields(e).some(e=>!isBoilerplateField(e.label)&&e.value.length>0)}export function classifyFact(e){return/(?:gap|blocked|missing|unavailable|unsupported|缺口|阻塞|缺失|不支持|无法|未提供)/iu.test(e)?"limit":/(?:news|headline|recent|latest|filing|event|公告|新闻|近期|最新|披露|\b20\d{2}[-/年])/iu.test(e)?"timeBound":/(?:[$€£¥%]|\b\d[\d,]*(?:\.\d+)?\b)/u.test(e)?"data":/(?:name|company|symbol|resolved|overview|query|名称|公司|代码|概览|识别)/iu.test(e)?"context":"other"}function parseEvidenceFields(e){return extractKeyValueFields(e.text).filter(e=>e.value.length>0&&!isBoilerplateField(e.label)).filter(e=>!function isLowValueField(e,t){return!!/(?:snapshot for|source type|loaded sources)/iu.test(e)||scoreField({source:"",label:e,value:t,kind:"other"})<0}(e.label,e.value)).map(t=>{const l=classifyFact(`${t.label}: ${t.value}`);return{source:e.source,label:titleCaseLabel(t.label),value:formatEvidence(t.value),kind:"other"===l?e.kind:l}})}function scoreField(e){const t=normalizeFieldLabel(e.label);let l=e.value.length>0?10:0;return/(?:price|value|amount|total|ratio|rate|range|target|estimate|revenue|income|earnings|margin|volume|date|rating|status|count|metric|价格|收入|利润|目标|评级|数量|日期|范围|比率)/iu.test(t)&&(l+=8),/(?:name|company|symbol|title|headline|summary|名称|公司|代码|标题|摘要)/iu.test(t)&&(l+=6),/(?:unix|epoch|timestamp|raw|html|url|href|source|id|identifier|internal|debug)/iu.test(t)&&(l-=20),(/^https?:\/\//iu.test(e.value)||"/"===e.value)&&(l-=12),e.value.length>240&&(l-=5),l}function extractKeyValueFields(e){const t=[...e.matchAll(/(^|[\s;|])([\p{L}][\p{L}\p{N} _./()%&+\-]{0,48})[::](?!\/\/)\s*/gu)].filter(e=>void 0!==e.index).map((e,t,l)=>{l[t-1];const r=function cleanFieldLabel(e){const t=e.replace(/^(?:[-*]\s*)+/u,"").replace(/\s+/gu," ").trim(),l=t.split(" ").filter(Boolean);return l.length>1&&/^[A-Z]$/u.test(l[0]??"")||l.length>1&&/^(?:inc|llc|ltd|corp|corporation|co)$/iu.test(l[0]??"")?l.slice(1).join(" "):t}(e[2]??""),n=function droppedLabelPrefix(e,t){const l=e.trim();if(l===t)return"";const r=l.toLowerCase().lastIndexOf(t.toLowerCase());return r>0?l.slice(0,r):""}(e[2]??"",r);return{index:(e.index??0)+String(e[1]??"").length+n.length,start:(e.index??0)+e[0].length,label:r}});return t.map((l,r)=>{const n=t[r+1]?.index??e.length;return{label:l.label,value:(a=e.slice(l.start,n),a.replace(/^[\s,;|.-]+/u,"").replace(/[\s,;|.-]+$/u,"").replace(/\s+/gu," ").trim())};var a}).filter(e=>e.label.length>0)}function isBoilerplateField(e){return/^(?:status|control status|evidence tool|tool|source|来源)$/iu.test(e.trim())}export function normalizeFieldLabel(e){return e.toLowerCase().replace(/[^a-z0-9\p{L}\p{N}]+/giu," ").trim()}function titleCaseLabel(e){if(/\p{Script=Han}/u.test(e))return e;const t=e.split(/[^A-Za-z0-9]+/u).filter(Boolean);return normalizeFieldLabel(e).split(" ").filter(Boolean).map((e,l)=>{const r=t[l]??e;return/^[A-Z0-9]{2,}$/u.test(r)?r:e.charAt(0).toUpperCase()+e.slice(1)}).join(" ")}function formatEvidence(e){const t=e.replace(/\s+/gu," ").trim();return t.length>1200?`${t.slice(0,1197)}...`:t}function escapeTableCell(e){return e.replace(/\|/gu,"\\|").replace(/\r?\n/gu," ")}function fieldKey(e){return`${e.source}\0${normalizeFieldLabel(e.label)}\0${e.value.toLowerCase()}`}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{controlBlockers as e,controlGaps as t,successfulEvidenceItems as n}from"./event-evidence.js";import{detectSynthesisLanguage as s}from"./synthesis/language.js";export function synthesizeEvidenceOnlyReport(r,i,o){if(!o.enabled||!o.synthesis.enabled||"evidence_only"!==o.synthesis.mode)return;if("pass"===i.verdict||!function hasRecoverableSynthesisIssue(e){return e.issues.some(e=>"control_blocker"!==e.code)}(i))return;const l=n(r.events).slice(-o.synthesis.maxEvidenceItems),c=e(r.events),a=t(r.events);if(0===l.length&&0===c.length&&0===a.length)return;const u=function latestDelegatedReport(e){const t=e.filter(e=>"task"===e.source&&function looksLikeFinalReport(e){const t=e.trim();return!(t.length<80)&&(/^#{1,3}\s+\S/mu.test(t)||/\n#{1,3}\s+\S/mu.test(t)||/\n-{3,}\n/u.test(t))}(e.output)).at(-1)?.output.trim();return t||void 0}(l);return u||("zh"===s(r)?function buildChineseReport(e,t,n){const s=evidenceFacts(e);return["# 调查结果","","## 结论",...resultSummaryLines(e,s,t,n,"zh"),"","## 证据摘要",...summaryLines(e,t,n,"zh"),"",...structuredFactSections(s,"zh"),"","## 证据缺口与阻塞",...gapLines(t,n,"zh"),"","## 使用的证据来源",...sourceLines(sourceSummary(e),"zh")].join("\n")}(l,c,a):function buildEnglishReport(e,t,n){const s=evidenceFacts(e);return["# Result","","## Conclusion",...resultSummaryLines(e,s,t,n,"en"),"","## Evidence summary",...summaryLines(e,t,n,"en"),"",...structuredFactSections(s,"en"),"","## Evidence gaps and blockers",...gapLines(t,n,"en"),"","## Sources used",...sourceLines(sourceSummary(e),"en")].join("\n")}(l,c,a))}function resultSummaryLines(e,t,n,s,r){if(0===e.length)return["zh"===r?"- 没有成功证据可用于形成调查结论。":"- No successful evidence was available for a result."];const i=[...new Set(e.map(e=>humanSourceLabel(e.source)))],o=function observedResultLines(e,t){const value=(...t)=>function fieldValue(e,t){const n=new Set(t.map(normalizeFieldLabel));return e.find(e=>n.has(normalizeFieldLabel(e.label)))?.value}(e,t),n=value("Resolved Ticker","Symbol","Ticker"),s=value("Company Name","Company"),r=value("Close"),i=value("Open"),o=value("High"),l=value("Low"),c=value("Volume"),a=value("Date"),u=value("Inc Revenue","Revenue"),d=value("Filed 2026 03 06 Net Income","Net Income"),m=value("Filed 2026 03 06 Operating Income","Operating Income"),p=value("Filed 2026 03 06 Diluted Eps","Diluted Eps"),f=value("Workday Wday Stock Dips While Market Gains"),h=value("Summary"),v=[];if((n||s)&&v.push("zh"===t?`- 标的已确认:${s??"公司未命名"}${n?`(${n})`:""}。`:`- Confirmed target: ${s??"unnamed company"}${n?` (${n})`:""}.`),r){const e=o&&l?"zh"===t?`,盘中区间 ${l}-${o}`:`, intraday range ${l}-${o}`:"",n=i?"zh"===t?`,开盘 ${i}`:`, open ${i}`:"",s=c?"zh"===t?`,成交量 ${c}`:`, volume ${c}`:"";v.push("zh"===t?`- 报价观察:${a?`${a} `:""}收盘 ${r}${n}${e}${s}。`:`- Quote observed: ${a?`${a} `:""}close ${r}${n}${e}${s}.`)}return(u||d||m||p)&&v.push("zh"===t?`- 财务观察:${compactParts([u&&`营收 ${u}`,d&&`净利润 ${d}`,m&&`经营利润 ${m}`,p&&`摊薄 EPS ${p}`]).join(";")}。`:`- Financials observed: ${compactParts([u&&`revenue ${u}`,d&&`net income ${d}`,m&&`operating income ${m}`,p&&`diluted EPS ${p}`]).join("; ")}.`),(f||h)&&v.push("zh"===t?`- 新闻观察:${compactParts([f,h]).join(";")}。`:`- News observed: ${compactParts([f,h]).join("; ")}.`),v.length>0?v:["zh"===t?"- 只观察到原始证据,无法形成更具体的归纳。":"- Only raw evidence was observed; no more specific synthesis is available."]}(evidenceFields(t),r),l=0===n.length&&0===s.length?"zh"===r?"未观察到运行时阻塞;未覆盖的业务、估值或风险细节不应视为已确认。":"No runtime blocker was observed; uncovered business, valuation, or risk details should not be treated as confirmed.":"zh"===r?`仍有 ${n.length+s.length} 个证据缺口或阻塞,结论应按部分调查读取。`:`${n.length+s.length} evidence gap(s) or blocker(s) remain, so read this as a partial result.`;return["zh"===r?`- 已基于 ${i.join("、")} 形成可交付结果。`:`- Result formed from ${i.join(", ")}.`,`- ${l}`,...o]}function compactParts(e){return e.filter(e=>"string"==typeof e&&e.trim().length>0)}function sourceSummary(e){const t=new Map;for(const n of e){const e=t.get(n.source)??{source:n.source,count:0,facts:[]};e.count+=1,e.facts.push(...factLines(n.output)),t.set(n.source,e)}return[...t.values()].map(t=>({...t,facts:t.facts.length>0?t.facts.slice(0,8):[fallbackEvidenceText(evidenceTextForSource(e,t.source))]}))}function evidenceFacts(e){return e.flatMap(e=>{const t=factLines(e.output);return(t.length>0?t:[fallbackEvidenceText(e.output)]).map(t=>({source:e.source,text:t,kind:classifyFact(t)}))}).slice(0,40)}function summaryLines(e,t,n,s){if(0===e.length)return["zh"===s?"- 未观察到成功的工具或委托任务证据。":"- No successful tool or delegated-task evidence was observed."];const r=new Set(e.map(e=>e.source)).size,i=0===t.length&&0===n.length?"zh"===s?"未观察到未解决的运行时证据缺口或阻塞。":"No unresolved runtime evidence gaps or blockers were observed.":"zh"===s?`仍有 ${t.length+n.length} 个运行时证据缺口或阻塞。`:`${t.length+n.length} runtime evidence gaps or blockers remain.`;return["zh"===s?`- 已使用 ${e.length} 条完成证据,来自 ${r} 个来源。`:`- Used ${e.length} completed evidence item(s) from ${r} source(s).`,`- ${i}`]}function structuredFactSections(e,t){if(0===e.length)return["zh"===t?"- 证据缺口:没有可用于生成事实性结论的成功证据。":"- Evidence gap: no successful tool or delegated-task evidence was available."];const n=evidenceFields(e);return[{kind:"context",title:"zh"===t?"## 已确认背景":"## Confirmed context"},{kind:"data",title:"zh"===t?"## 观察到的数据":"## Observed data points"},{kind:"timeBound",title:"zh"===t?"## 近期或时间相关证据":"## Recent or time-bound evidence"},{kind:"limit",title:"zh"===t?"## 证据限制":"## Evidence limits"},{kind:"other",title:"zh"===t?"## 其他观察":"## Additional observations"}].flatMap(s=>{const r=n.filter(e=>e.kind===s.kind).slice(0,12),i=e.filter(e=>e.kind===s.kind&&!function hasExtractableFields(e){return extractKeyValueFields(e).some(e=>!isBoilerplateField(e.label)&&e.value.length>0)}(e.text)).slice(0,5);return 0===r.length&&0===i.length?[]:[s.title,...fieldTableLines(r,t),...i.map(e=>function factLine(e,t){const n=humanSourceLabel(e.source);return"zh"===t?`- ${e.text}(来源:${n})`:`- ${e.text} (source: ${n})`}(e,t)),""]}).filter((e,t,n)=>""!==e||t<n.length-1)}function evidenceFields(e){const t=new Set,n=[];for(const s of e)for(const e of parseEvidenceFields(s)){const s=`${normalizeFieldLabel(e.label)}\0${e.value.toLowerCase()}`;t.has(s)||(t.add(s),n.push(e))}return n}function parseEvidenceFields(e){return extractKeyValueFields(e.text).filter(e=>e.value.length>0&&!isBoilerplateField(e.label)).map(t=>{return{source:e.source,label:(n=t.label,/\p{Script=Han}/u.test(n)?n:normalizeFieldLabel(n).split(" ").filter(Boolean).map(e=>/^[A-Z0-9]+$/u.test(e)?e:e.charAt(0).toUpperCase()+e.slice(1)).join(" ")),value:formatEvidence(t.value),kind:"other"===classifyFact(`${t.label}: ${t.value}`)?e.kind:classifyFact(`${t.label}: ${t.value}`)};var n})}function fieldTableLines(e,t){return 0===e.length?[]:[..."zh"===t?["| 项目 | 数值 | 来源 |","|---|---:|---|"]:["| Field | Value | Source |","|---|---:|---|"],...e.map(e=>`| ${escapeTableCell(e.label)} | ${escapeTableCell(e.value)} | ${escapeTableCell(humanSourceLabel(e.source))} |`)]}function sourceLines(e,t){return 0===e.length?["zh"===t?"- 未使用成功证据来源。":"- No successful evidence source was used."]:e.map(e=>`- ${humanSourceLabel(e.source)}${e.count>1?` (${e.count})`:""}: ${e.source}`)}function gapLines(e,t,n){return 0===e.length&&0===t.length?["zh"===n?"- 未观察到未解决的运行时证据缺口或阻塞。":"- No unresolved runtime evidence gaps or blockers were observed."]:"zh"===n?[...e.map(e=>`- 阻塞:${e}`),...t.map(e=>`- 证据缺口:${e}`)]:[...e.map(e=>`- Blocked: ${e}`),...t.map(e=>`- Evidence gap: ${e}`)]}function formatEvidence(e){const t=e.replace(/\s+/gu," ").trim();return t.length>1200?`${t.slice(0,1197)}...`:t}function factLines(e){const t=function factLinesFromJson(e){try{const t=JSON.parse(e);return function isRecord(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}(t)?Object.entries(t).filter(([e])=>!/^(?:status|controlStatus)$/iu.test(e)).slice(0,8).map(([e,t])=>`${e}: ${formatEvidence(function stringifyJsonValue(e){return"string"==typeof e?e:JSON.stringify(e)}(t))}`):[]}catch{return[]}}(e);return t.length>0?t:function splitPlainTextFacts(e){const t=function stripControlPreamble(e){return e.replace(/^(?:Status:\s*(?:completed|success|ok|recorded)\b\.?\s*)+/iu,"").replace(/^(?:Evidence tool:\s*[A-Za-z0-9_.-]+\b\.?\s*)+/iu,"").trim()}(e);return t.split(/\r?\n|;\s*/u).map(e=>e.trim()).map(stripControlFragments).filter(e=>e&&!function isControlFact(e){return/^Status:\s*(?:completed|success|ok|recorded)$/iu.test(e)||/^Evidence tool:\s*[A-Za-z0-9_.-]+$/iu.test(e)}(e))}(e).slice(0,8).map(formatEvidence)}function extractKeyValueFields(e){const t=[...e.matchAll(/(^|[\s,;|])([\p{L}][\p{L}\p{N} _./()%&+\-]{0,48})[::]\s*/gu)].filter(e=>void 0!==e.index);return t.map((n,s)=>{const r=(n.index??0)+n[0].length,i=t[s+1]?.index??e.length,o=t[s-1]?.[2]??"";return{label:cleanFieldLabel(n[2]??"",o),value:(l=e.slice(r,i),l.replace(/^[\s,;|.-]+/u,"").replace(/[\s,;|.-]+$/u,"").replace(/\s+/gu," ").trim())};var l}).filter(e=>e.label.length>0)}function cleanFieldLabel(e,t=""){const n=e.replace(/^(?:[-*]\s*)+/u,"").replace(/\s+/gu," ").trim(),s=n.split(" ").filter(Boolean);return s.length>1&&isBoilerplateField(t)||s.length>1&&/^[A-Z]$/u.test(s[0]??"")?s.slice(1).join(" "):n}function isBoilerplateField(e){return/^(?:status|control status|evidence tool|tool|source|来源)$/iu.test(e.trim())}function normalizeFieldLabel(e){return e.toLowerCase().replace(/[^a-z0-9\p{L}\p{N}]+/giu," ").trim()}function escapeTableCell(e){return e.replace(/\|/gu,"\\|").replace(/\r?\n/gu," ")}function stripControlFragments(e){return e.replace(/\bStatus:\s*(?:completed|success|ok|recorded)\b\.?\s*/giu,"").replace(/\bEvidence tool:\s*[A-Za-z0-9_.-]+\b\.?\s*/giu,"").trim()}function evidenceTextForSource(e,t){return e.find(e=>e.source===t)?.output??""}function fallbackEvidenceText(e){return formatEvidence(e)}function classifyFact(e){return/(?:gap|blocked|missing|unavailable|unsupported|缺口|阻塞|缺失|不支持|无法|未提供)/iu.test(e)?"limit":/(?:news|headline|recent|latest|filing|event|公告|新闻|近期|最新|披露|\b20\d{2}[-/年])/iu.test(e)?"timeBound":/(?:[$€£¥%]|\b\d[\d,]*(?:\.\d+)?\b)/u.test(e)?"data":/(?:name|company|symbol|resolved|overview|query|名称|公司|代码|概览|识别)/iu.test(e)?"context":"other"}function humanSourceLabel(e){const t=e.replace(/([a-z])([A-Z])/gu,"$1 $2").split(/[_:.\-\s]+/u).map(e=>e.trim()).filter(Boolean);return 0===t.length?e:t.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}
|
|
1
|
+
import{controlBlockers as e,controlGaps as t,successfulEvidenceItems as n}from"./event-evidence.js";import{classifyFact as s,evidenceFields as r,fieldTableLines as o,hasExtractableFields as i,normalizeFieldLabel as c,selectSectionFields as u}from"./synthesis/fields.js";import{detectSynthesisLanguage as a}from"./synthesis/language.js";export function synthesizeEvidenceOnlyReport(s,r,o){if(!o.enabled||!o.synthesis.enabled||"evidence_only"!==o.synthesis.mode)return;if("pass"===r.verdict||!function hasRecoverableSynthesisIssue(e){return e.issues.some(e=>"control_blocker"!==e.code)}(r))return;const i=n(s.events).slice(-o.synthesis.maxEvidenceItems),c=e(s.events),u=t(s.events);if(0===i.length&&0===c.length&&0===u.length)return;const l=function latestDelegatedReport(e){const t=e.filter(e=>"task"===e.source&&function looksLikeFinalReport(e){const t=e.trim();return!(t.length<80)&&(/^#{1,3}\s+\S/mu.test(t)||/\n#{1,3}\s+\S/mu.test(t)||/\n-{3,}\n/u.test(t))}(e.output)).at(-1)?.output.trim();return t||void 0}(i);return l||("zh"===a(s)?function buildChineseReport(e,t,n){const s=evidenceFacts(e);return["# 调查结果","","## 结论",...resultSummaryLines(e,s,t,n,"zh"),"","## 证据摘要",...summaryLines(e,t,n,"zh"),"",...structuredFactSections(s,"zh"),"","## 证据缺口与阻塞",...gapLines(t,n,"zh"),"","## 使用的证据来源",...sourceLines(sourceSummary(e),"zh")].join("\n")}(i,c,u):function buildEnglishReport(e,t,n){const s=evidenceFacts(e);return["# Result","","## Conclusion",...resultSummaryLines(e,s,t,n,"en"),"","## Evidence summary",...summaryLines(e,t,n,"en"),"",...structuredFactSections(s,"en"),"","## Evidence gaps and blockers",...gapLines(t,n,"en"),"","## Sources used",...sourceLines(sourceSummary(e),"en")].join("\n")}(i,c,u))}function resultSummaryLines(e,t,n,s,o){if(0===e.length)return["zh"===o?"- 没有成功证据可用于形成调查结论。":"- No successful evidence was available for a result."];const i=[...new Set(e.map(e=>humanSourceLabel(e.source)))],u=function observedResultLines(e,t){const value=(...t)=>function fieldValue(e,t){const n=new Set(t.map(c));return e.find(e=>n.has(c(e.label)))?.value}(e,t),n=value("Resolved Ticker","Symbol","Ticker"),s=value("Company Name","Company"),r=value("Close"),o=value("Open"),i=value("High"),u=value("Low"),a=value("Volume"),l=value("Date"),d=value("Inc Revenue","Revenue"),m=value("Filed 2026 03 06 Net Income","Net Income"),h=value("Filed 2026 03 06 Operating Income","Operating Income"),p=value("Filed 2026 03 06 Diluted Eps","Diluted Eps"),f=value("Workday Wday Stock Dips While Market Gains"),$=value("Summary"),g=[];if((n||s)&&g.push("zh"===t?`- 标的已确认:${s??"公司未命名"}${n?`(${n})`:""}。`:`- Confirmed target: ${s??"unnamed company"}${n?` (${n})`:""}.`),r){const e=i&&u?"zh"===t?`,盘中区间 ${u}-${i}`:`, intraday range ${u}-${i}`:"",n=o?"zh"===t?`,开盘 ${o}`:`, open ${o}`:"",s=a?"zh"===t?`,成交量 ${a}`:`, volume ${a}`:"";g.push("zh"===t?`- 报价观察:${l?`${l} `:""}收盘 ${r}${n}${e}${s}。`:`- Quote observed: ${l?`${l} `:""}close ${r}${n}${e}${s}.`)}return(d||m||h||p)&&g.push("zh"===t?`- 财务观察:${compactParts([d&&`营收 ${d}`,m&&`净利润 ${m}`,h&&`经营利润 ${h}`,p&&`摊薄 EPS ${p}`]).join(";")}。`:`- Financials observed: ${compactParts([d&&`revenue ${d}`,m&&`net income ${m}`,h&&`operating income ${h}`,p&&`diluted EPS ${p}`]).join("; ")}.`),(f||$)&&g.push("zh"===t?`- 新闻观察:${compactParts([f,$]).join(";")}。`:`- News observed: ${compactParts([f,$]).join("; ")}.`),g.length>0?g:["zh"===t?"- 只观察到原始证据,无法形成更具体的归纳。":"- Only raw evidence was observed; no more specific synthesis is available."]}(r(t),o),a=0===n.length&&0===s.length?"zh"===o?"未观察到运行时阻塞;未覆盖的业务、估值或风险细节不应视为已确认。":"No runtime blocker was observed; uncovered business, valuation, or risk details should not be treated as confirmed.":"zh"===o?`仍有 ${n.length+s.length} 个证据缺口或阻塞,结论应按部分调查读取。`:`${n.length+s.length} evidence gap(s) or blocker(s) remain, so read this as a partial result.`;return["zh"===o?`- 已基于 ${i.join("、")} 形成可交付结果。`:`- Result formed from ${i.join(", ")}.`,`- ${a}`,...u]}function compactParts(e){return e.filter(e=>"string"==typeof e&&e.trim().length>0)}function sourceSummary(e){const t=new Map;for(const n of e){const e=t.get(n.source)??{source:n.source,count:0,facts:[]};e.count+=1,e.facts.push(...factLines(n.output)),t.set(n.source,e)}return[...t.values()].map(t=>({...t,facts:t.facts.length>0?t.facts.slice(0,8):[fallbackEvidenceText(evidenceTextForSource(e,t.source))]}))}function evidenceFacts(e){return e.flatMap(e=>{const t=factLines(e.output);return(t.length>0?t:[fallbackEvidenceText(e.output)]).map(t=>({source:e.source,text:t,kind:s(t)}))}).slice(0,40)}function summaryLines(e,t,n,s){if(0===e.length)return["zh"===s?"- 未观察到成功的工具或委托任务证据。":"- No successful tool or delegated-task evidence was observed."];const r=new Set(e.map(e=>e.source)).size,o=0===t.length&&0===n.length?"zh"===s?"未观察到未解决的运行时证据缺口或阻塞。":"No unresolved runtime evidence gaps or blockers were observed.":"zh"===s?`仍有 ${t.length+n.length} 个运行时证据缺口或阻塞。`:`${t.length+n.length} runtime evidence gaps or blockers remain.`;return["zh"===s?`- 已使用 ${e.length} 条完成证据,来自 ${r} 个来源。`:`- Used ${e.length} completed evidence item(s) from ${r} source(s).`,`- ${o}`]}function structuredFactSections(e,t){if(0===e.length)return["zh"===t?"- 证据缺口:没有可用于生成事实性结论的成功证据。":"- Evidence gap: no successful tool or delegated-task evidence was available."];const n=r(e);return[{kind:"context",title:"zh"===t?"## 已确认背景":"## Confirmed context"},{kind:"data",title:"zh"===t?"## 观察到的数据":"## Observed data points"},{kind:"timeBound",title:"zh"===t?"## 近期或时间相关证据":"## Recent or time-bound evidence"},{kind:"limit",title:"zh"===t?"## 证据限制":"## Evidence limits"},{kind:"other",title:"zh"===t?"## 其他观察":"## Additional observations"}].flatMap(s=>{const r=u(n,s.kind,12),c=e.filter(e=>e.kind===s.kind&&!i(e.text)).slice(0,5);return 0===r.length&&0===c.length?[]:[s.title,...o(r,t),...c.map(e=>function factLine(e,t){const n=humanSourceLabel(e.source);return"zh"===t?`- ${e.text}(来源:${n})`:`- ${e.text} (source: ${n})`}(e,t)),""]}).filter((e,t,n)=>""!==e||t<n.length-1)}function sourceLines(e,t){return 0===e.length?["zh"===t?"- 未使用成功证据来源。":"- No successful evidence source was used."]:e.map(e=>`- ${humanSourceLabel(e.source)}${e.count>1?` (${e.count})`:""}: ${e.source}`)}function gapLines(e,t,n){return 0===e.length&&0===t.length?["zh"===n?"- 未观察到未解决的运行时证据缺口或阻塞。":"- No unresolved runtime evidence gaps or blockers were observed."]:"zh"===n?[...e.map(e=>`- 阻塞:${e}`),...t.map(e=>`- 证据缺口:${e}`)]:[...e.map(e=>`- Blocked: ${e}`),...t.map(e=>`- Evidence gap: ${e}`)]}function formatEvidence(e){const t=e.replace(/\s+/gu," ").trim();return t.length>1200?`${t.slice(0,1197)}...`:t}function factLines(e){const t=function factLinesFromJson(e){try{const t=JSON.parse(e);return function isRecord(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}(t)?Object.entries(t).filter(([e])=>!/^(?:status|controlStatus)$/iu.test(e)).slice(0,8).map(([e,t])=>`${e}: ${formatEvidence(function stringifyJsonValue(e){return"string"==typeof e?e:JSON.stringify(e)}(t))}`):[]}catch{return[]}}(e);return t.length>0?t:function splitPlainTextFacts(e){const t=function stripControlPreamble(e){return e.replace(/^(?:Status:\s*(?:completed|success|ok|recorded)\b\.?\s*)+/iu,"").replace(/^(?:Evidence tool:\s*[A-Za-z0-9_.-]+\b\.?\s*)+/iu,"").trim()}(e);return t.split(/\r?\n|;\s*/u).map(e=>e.trim()).map(stripControlFragments).filter(e=>e&&!function isControlFact(e){return/^Status:\s*(?:completed|success|ok|recorded)$/iu.test(e)||/^Evidence tool:\s*[A-Za-z0-9_.-]+$/iu.test(e)}(e))}(e).slice(0,8).map(formatEvidence)}function stripControlFragments(e){return e.replace(/\bStatus:\s*(?:completed|success|ok|recorded)\b\.?\s*/giu,"").replace(/\bEvidence tool:\s*[A-Za-z0-9_.-]+\b\.?\s*/giu,"").trim()}function evidenceTextForSource(e,t){return e.find(e=>e.source===t)?.output??""}function fallbackEvidenceText(e){return formatEvidence(e)}function humanSourceLabel(e){const t=e.replace(/([a-z])([A-Z])/gu,"$1 $2").split(/[_:.\-\s]+/u).map(e=>e.trim()).filter(Boolean);return 0===t.length?e:t.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}
|