stable-harness 0.0.33 → 0.0.34

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stable-harness",
3
- "version": "0.0.33",
3
+ "version": "0.0.34",
4
4
  "type": "module",
5
5
  "description": "Stable application runtime and operator control plane for agent workspaces.",
6
6
  "license": "Apache-2.0",
@@ -1 +1 @@
1
- export function evidenceFields(e){const t=new Set,l=[];for(const a of e)for(const e of parseEvidenceFields(a)){const a=`${normalizeFieldLabel(e.label)}\0${e.value.toLowerCase()}`;t.has(a)||(t.add(a),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)),a=new Map;for(const e of[...new Set(l.map(e=>e.source))]){const t=l.find(t=>t.source===e);t&&a.set(fieldKey(t),t)}for(const e of l)if(a.set(fieldKey(e),e),a.size>=t)break;return[...a.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)||!!/^\d{1,2}\s+(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\b/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{N}][\p{L}\p{N} _./()%&+\-]{0,48})[::](?!\/\/)\s*/gu)].filter(e=>void 0!==e.index).map((e,t,l)=>{l[t-1];const a=function cleanFieldLabel(e){const t=e.replace(/^(?:[-*]\s*)+/u,"").replace(/\s+/gu," ").trim(),l=t.split(" ").filter(Boolean);return l.length>1&&/^\d+(?:\.\d+)?$/u.test(l[0]??"")&&/^(?:\d+|beta|pe|p\/b)$/iu.test(l[1]??"")||l.length>1&&/^[A-Z]$/u.test(l[0]??"")||l.length>1&&/^(?:inc\.?|llc\.?|ltd\.?|corp\.?|corporation|co\.?)$/iu.test(l[0]??"")||l.length>1&&/^(?:usd|eur|gbp|jpy|cny|cad|aud)$/iu.test(l[0]??"")||l.length>1&&/^(?:gmt|utc)$/iu.test(l[0]??"")?l.slice(1).join(" "):function trailingKnownLabel(e){const t=e.match(/\b(?:Revenue|Net Income|Operating Income|Diluted EPS|EPS|Market Cap|Book Value|Target Estimate|Target Mean Price|Target Median Price|Target High Price|Target Low Price|PE Ratio TTM|P\/B|Beta(?: 5Y Monthly)?|Published|Updated|Date|Time|Summary|Title|Headline)$/iu);return t&&/(?:filed|\b20\d{2}|10-k|10-q|\bfy\b|\s{3,}|[a-z].{12,}\s)/iu.test(e.slice(0,t.index))?t?.[0]??e:e}(t)}(e[2]??""),n=function droppedLabelPrefix(e,t){const l=e.trim();if(l===t)return"";const a=l.toLowerCase().lastIndexOf(t.toLowerCase());return a>0?l.slice(0,a):""}(e[2]??"",a);return{index:(e.index??0)+String(e[1]??"").length+n.length,start:(e.index??0)+e[0].length,label:a}}).filter(e=>!function isBoundaryNoiseLabel(e){return/^\d{1,2}\s+(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\b/iu.test(e)}(e.label));return t.map((l,a)=>{const n=t[a+1]?.index??e.length;return{label:l.label,value:cleanFieldValue(e.slice(l.start,n),l.label)}}).filter(e=>e.label.length>0)}function cleanFieldValue(e,t){const l=e.replace(/^[\s,;|.-]+/u,"").replace(/[\s,;|.-]+$/u,"").replace(/\s+/gu," ").trim(),a=normalizeFieldLabel(t);if(/^(?:ticker|symbol|resolved symbol|resolved ticker|股票 resolved ticker|代码)$/iu.test(a)){const e=l.match(/^([A-Z0-9._-]{1,24})(?:\s+\d+[.)]\s+|$)/u);if(e?.[1])return e[1]}return l}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 a=t[l]??e;return/^[A-Z0-9]{2,}$/u.test(a)?a: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
+ export function evidenceFields(e){const t=new Set,l=[];for(const a of e)for(const e of parseEvidenceFields(a)){const a=`${normalizeFieldLabel(e.label)}\0${e.value.toLowerCase()}`;t.has(a)||(t.add(a),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)),a=new Map;for(const e of[...new Set(l.map(e=>e.source))]){const t=l.find(t=>t.source===e);t&&a.set(fieldKey(t),t)}for(const e of l)if(a.set(fieldKey(e),e),a.size>=t)break;return[...a.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)||!!/^\d{1,2}\s+(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\b/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{N}][\p{L}\p{N} _./()%&+\-]{0,48})[::](?!\/\/)\s*/gu)].filter(e=>void 0!==e.index).map((e,t,l)=>{l[t-1];const a=function cleanFieldLabel(e){const t=e.replace(/^(?:[-*]\s*)+/u,"").replace(/\s+/gu," ").trim(),l=t.match(/^.+\b(PE Ratio TTM)$/iu);if(l?.[1]&&l[1]!==t&&/(?:beta|\b20\d{2}|\b(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\b)/iu.test(t))return l[1];const a=t.split(" ").filter(Boolean);return a.length>1&&/^\d{4}$/u.test(a[0]??"")||a.length>1&&/^\d+(?:\.\d+)?$/u.test(a[0]??"")&&/^(?:\d+|beta|pe|p\/b)$/iu.test(a[1]??"")||a.length>1&&/^[A-Z]$/u.test(a[0]??"")||a.length>1&&/^(?:inc\.?|llc\.?|ltd\.?|corp\.?|corporation|co\.?)$/iu.test(a[0]??"")||a.length>1&&/^(?:usd|eur|gbp|jpy|cny|cad|aud)$/iu.test(a[0]??"")||a.length>1&&/^(?:gmt|utc)$/iu.test(a[0]??"")?a.slice(1).join(" "):function trailingKnownLabel(e){if(/\bPE Ratio TTM$/iu.test(e)&&!/^PE Ratio TTM$/iu.test(e))return"PE Ratio TTM";const t=e.match(/\b(?:Revenue|Net Income|Operating Income|Diluted EPS|EPS|Market Cap|Book Value|Target Estimate|Target Mean Price|Target Median Price|Target High Price|Target Low Price|PE Ratio TTM|P\/B|Beta(?: 5Y Monthly)?|Published|Updated|Date|Time|Summary|Title|Headline)$/iu);return t&&/(?:filed|\b20\d{2}|10-k|10-q|\bfy\b|\b(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\b|\s{3,}|[a-z].{8,}\s)/iu.test(e.slice(0,t.index))?t?.[0]??e:e}(t)}(e[2]??""),r=function droppedLabelPrefix(e,t){const l=e.trim();if(l===t)return"";const a=l.toLowerCase().lastIndexOf(t.toLowerCase());return a>0?l.slice(0,a):""}(e[2]??"",a);return{index:(e.index??0)+String(e[1]??"").length+r.length,start:(e.index??0)+e[0].length,label:a}}).filter(e=>!function isBoundaryNoiseLabel(e){return/^\d{1,2}\s+(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\b/iu.test(e)}(e.label));return t.map((l,a)=>{const r=t[a+1]?.index??e.length;return{label:l.label,value:cleanFieldValue(e.slice(l.start,r),l.label)}}).filter(e=>e.label.length>0)}function cleanFieldValue(e,t){const l=e.replace(/^[\s,;|.-]+/u,"").replace(/[\s,;|.-]+$/u,"").replace(/\s+/gu," ").trim(),a=normalizeFieldLabel(t);if(/\brange\b/iu.test(a))return l.replace(/\s+Beta\b.*$/iu,"").trim();if(/^(?:ticker|symbol|resolved symbol|resolved ticker|股票 resolved ticker|代码)$/iu.test(a)){const e=l.match(/^([A-Z0-9._-]{1,24})(?:\s+\d+[.)]\s+|$)/u);if(e?.[1])return e[1]}return l}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 a=t[l]??e;return/^[A-Z0-9]{2,}$/u.test(a)?a: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()}`}