@gracker/smartperfetto 1.0.15 → 1.0.17
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/dist/agent/agents/base/baseAgent.d.ts.map +1 -1
- package/dist/agent/agents/base/baseAgent.js +5 -1
- package/dist/agent/agents/base/baseAgent.js.map +1 -1
- package/dist/agent/context/enhancedSessionContext.d.ts +5 -0
- package/dist/agent/context/enhancedSessionContext.d.ts.map +1 -1
- package/dist/agent/context/enhancedSessionContext.js +13 -0
- package/dist/agent/context/enhancedSessionContext.js.map +1 -1
- package/dist/agent/core/conclusionContract.d.ts +23 -1
- package/dist/agent/core/conclusionContract.d.ts.map +1 -1
- package/dist/agent/core/conclusionGenerator.d.ts.map +1 -1
- package/dist/agent/core/conclusionGenerator.js +223 -27
- package/dist/agent/core/conclusionGenerator.js.map +1 -1
- package/dist/agent/core/executors/directSkillExecutor.d.ts.map +1 -1
- package/dist/agent/core/executors/directSkillExecutor.js +6 -12
- package/dist/agent/core/executors/directSkillExecutor.js.map +1 -1
- package/dist/agent/core/orchestratorTypes.d.ts +6 -0
- package/dist/agent/core/orchestratorTypes.d.ts.map +1 -1
- package/dist/agent/core/orchestratorTypes.js.map +1 -1
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.d.ts.map +1 -1
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.js +4 -1
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.js.map +1 -1
- package/dist/agent/scene/sceneStage1Runner.d.ts +1 -1
- package/dist/agent/scene/sceneStage1Runner.d.ts.map +1 -1
- package/dist/agent/scene/sceneStage1Runner.js +1 -1
- package/dist/agent/scene/sceneStage1Runner.js.map +1 -1
- package/dist/agent/scene/sceneStoryService.d.ts +1 -1
- package/dist/agent/scene/sceneStoryService.d.ts.map +1 -1
- package/dist/agent/scene/sceneStoryService.js +4 -1
- package/dist/agent/scene/sceneStoryService.js.map +1 -1
- package/dist/agent/types/agentProtocol.d.ts.map +1 -1
- package/dist/agent/types/agentProtocol.js +4 -1
- package/dist/agent/types/agentProtocol.js.map +1 -1
- package/dist/agent/types.d.ts +7 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agentOpenAI/openAiConfig.d.ts +2 -0
- package/dist/agentOpenAI/openAiConfig.d.ts.map +1 -1
- package/dist/agentOpenAI/openAiConfig.js +3 -0
- package/dist/agentOpenAI/openAiConfig.js.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.d.ts +8 -0
- package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.js +293 -58
- package/dist/agentOpenAI/openAiRuntime.js.map +1 -1
- package/dist/agentRuntime/runtimeHealth.d.ts +1 -0
- package/dist/agentRuntime/runtimeHealth.d.ts.map +1 -1
- package/dist/agentv3/artifactStore.d.ts +5 -0
- package/dist/agentv3/artifactStore.d.ts.map +1 -1
- package/dist/agentv3/artifactStore.js +3 -0
- package/dist/agentv3/artifactStore.js.map +1 -1
- package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
- package/dist/agentv3/claudeMcpServer.js +125 -86
- package/dist/agentv3/claudeMcpServer.js.map +1 -1
- package/dist/agentv3/claudeRuntime.d.ts.map +1 -1
- package/dist/agentv3/claudeRuntime.js +147 -65
- package/dist/agentv3/claudeRuntime.js.map +1 -1
- package/dist/agentv3/claudeSseBridge.d.ts +6 -0
- package/dist/agentv3/claudeSseBridge.d.ts.map +1 -1
- package/dist/agentv3/claudeSseBridge.js +1 -0
- package/dist/agentv3/claudeSseBridge.js.map +1 -1
- package/dist/agentv3/sessionStateSnapshot.d.ts +23 -0
- package/dist/agentv3/sessionStateSnapshot.d.ts.map +1 -1
- package/dist/assistant/application/agentAnalyzeSessionService.d.ts +6 -0
- package/dist/assistant/application/agentAnalyzeSessionService.d.ts.map +1 -1
- package/dist/assistant/application/agentAnalyzeSessionService.js +9 -3
- package/dist/assistant/application/agentAnalyzeSessionService.js.map +1 -1
- package/dist/assistant/application/assistantApplicationService.d.ts.map +1 -1
- package/dist/assistant/application/assistantApplicationService.js +3 -1
- package/dist/assistant/application/assistantApplicationService.js.map +1 -1
- package/dist/cli-user/commands/report.js +64 -0
- package/dist/cli-user/commands/report.js.map +1 -1
- package/dist/cli-user/io/paths.d.ts +3 -0
- package/dist/cli-user/io/paths.d.ts.map +1 -1
- package/dist/cli-user/io/paths.js +6 -0
- package/dist/cli-user/io/paths.js.map +1 -1
- package/dist/cli-user/io/sessionStore.d.ts +1 -0
- package/dist/cli-user/io/sessionStore.d.ts.map +1 -1
- package/dist/cli-user/io/sessionStore.js +5 -0
- package/dist/cli-user/io/sessionStore.js.map +1 -1
- package/dist/cli-user/repl/renderer.d.ts +8 -0
- package/dist/cli-user/repl/renderer.d.ts.map +1 -1
- package/dist/cli-user/repl/renderer.js.map +1 -1
- package/dist/cli-user/services/cliAnalyzeService.d.ts +3 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
- package/dist/cli-user/services/cliAnalyzeService.js +103 -1
- package/dist/cli-user/services/cliAnalyzeService.js.map +1 -1
- package/dist/cli-user/services/turnPersistence.d.ts +0 -10
- package/dist/cli-user/services/turnPersistence.d.ts.map +1 -1
- package/dist/cli-user/services/turnPersistence.js +62 -0
- package/dist/cli-user/services/turnPersistence.js.map +1 -1
- package/dist/routes/agentReportRoutes.d.ts +1 -0
- package/dist/routes/agentReportRoutes.d.ts.map +1 -1
- package/dist/routes/agentReportRoutes.js +13 -2
- package/dist/routes/agentReportRoutes.js.map +1 -1
- package/dist/routes/agentResumeRoutes.d.ts.map +1 -1
- package/dist/routes/agentResumeRoutes.js +51 -5
- package/dist/routes/agentResumeRoutes.js.map +1 -1
- package/dist/routes/agentRoutes.d.ts.map +1 -1
- package/dist/routes/agentRoutes.js +524 -130
- package/dist/routes/agentRoutes.js.map +1 -1
- package/dist/scripts/verifyAgentSseScrolling.js +142 -2
- package/dist/scripts/verifyAgentSseScrolling.js.map +1 -1
- package/dist/services/agentEventStore.d.ts.map +1 -1
- package/dist/services/agentEventStore.js +13 -3
- package/dist/services/agentEventStore.js.map +1 -1
- package/dist/services/agentReportData.d.ts +3 -0
- package/dist/services/agentReportData.d.ts.map +1 -1
- package/dist/services/agentReportData.js.map +1 -1
- package/dist/services/agentResultNormalizer.d.ts +15 -3
- package/dist/services/agentResultNormalizer.d.ts.map +1 -1
- package/dist/services/agentResultNormalizer.js +344 -6
- package/dist/services/agentResultNormalizer.js.map +1 -1
- package/dist/services/analysisResultSnapshotPipeline.d.ts +3 -0
- package/dist/services/analysisResultSnapshotPipeline.d.ts.map +1 -1
- package/dist/services/analysisResultSnapshotPipeline.js +3 -0
- package/dist/services/analysisResultSnapshotPipeline.js.map +1 -1
- package/dist/services/analysisResultSnapshotStore.d.ts.map +1 -1
- package/dist/services/analysisResultSnapshotStore.js +34 -2
- package/dist/services/analysisResultSnapshotStore.js.map +1 -1
- package/dist/services/enterpriseSchema.d.ts.map +1 -1
- package/dist/services/enterpriseSchema.js +11 -0
- package/dist/services/enterpriseSchema.js.map +1 -1
- package/dist/services/evidence/evidenceContractBuilder.d.ts +11 -0
- package/dist/services/evidence/evidenceContractBuilder.d.ts.map +1 -0
- package/dist/services/evidence/evidenceContractBuilder.js +546 -0
- package/dist/services/evidence/evidenceContractBuilder.js.map +1 -0
- package/dist/services/finalResultQualityGate.d.ts +18 -0
- package/dist/services/finalResultQualityGate.d.ts.map +1 -0
- package/dist/services/finalResultQualityGate.js +283 -0
- package/dist/services/finalResultQualityGate.js.map +1 -0
- package/dist/services/htmlReportGenerator.d.ts +8 -1
- package/dist/services/htmlReportGenerator.d.ts.map +1 -1
- package/dist/services/htmlReportGenerator.js +129 -42
- package/dist/services/htmlReportGenerator.js.map +1 -1
- package/dist/services/persistAgentSession.d.ts +2 -0
- package/dist/services/persistAgentSession.d.ts.map +1 -1
- package/dist/services/persistAgentSession.js +17 -1
- package/dist/services/persistAgentSession.js.map +1 -1
- package/dist/services/processIdentity/identityContractMapper.d.ts +14 -0
- package/dist/services/processIdentity/identityContractMapper.d.ts.map +1 -0
- package/dist/services/processIdentity/identityContractMapper.js +135 -0
- package/dist/services/processIdentity/identityContractMapper.js.map +1 -0
- package/dist/services/processIdentity/types.d.ts +5 -0
- package/dist/services/processIdentity/types.d.ts.map +1 -1
- package/dist/services/processIdentity/types.js.map +1 -1
- package/dist/services/skillEngine/skillExecutor.d.ts +14 -2
- package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -1
- package/dist/services/skillEngine/skillExecutor.js +133 -13
- package/dist/services/skillEngine/skillExecutor.js.map +1 -1
- package/dist/services/skillEngine/types.d.ts +2 -0
- package/dist/services/skillEngine/types.d.ts.map +1 -1
- package/dist/services/verifier/claimVerificationRunner.d.ts +20 -0
- package/dist/services/verifier/claimVerificationRunner.d.ts.map +1 -0
- package/dist/services/verifier/claimVerificationRunner.js +88 -0
- package/dist/services/verifier/claimVerificationRunner.js.map +1 -0
- package/dist/services/verifier/deterministicClaimVerifier.d.ts +8 -0
- package/dist/services/verifier/deterministicClaimVerifier.d.ts.map +1 -0
- package/dist/services/verifier/deterministicClaimVerifier.js +178 -0
- package/dist/services/verifier/deterministicClaimVerifier.js.map +1 -0
- package/dist/types/claimVerification.d.ts +38 -0
- package/dist/types/claimVerification.d.ts.map +1 -0
- package/dist/types/claimVerification.js +6 -0
- package/dist/types/claimVerification.js.map +1 -0
- package/dist/types/dataContract.d.ts +32 -0
- package/dist/types/dataContract.d.ts.map +1 -1
- package/dist/types/dataContract.js +7 -0
- package/dist/types/dataContract.js.map +1 -1
- package/dist/types/evidenceContract.d.ts +100 -0
- package/dist/types/evidenceContract.d.ts.map +1 -0
- package/dist/types/evidenceContract.js +6 -0
- package/dist/types/evidenceContract.js.map +1 -0
- package/dist/types/identityContract.d.ts +57 -0
- package/dist/types/identityContract.d.ts.map +1 -0
- package/dist/types/identityContract.js +6 -0
- package/dist/types/identityContract.js.map +1 -0
- package/dist/types/multiTraceComparison.d.ts +3 -0
- package/dist/types/multiTraceComparison.d.ts.map +1 -1
- package/package.json +3 -2
- package/skills/atomic/process_identity_resolver.skill.yaml +130 -1
- package/skills/atomic/process_slice_cpu_hotspots.skill.yaml +321 -0
- package/skills/atomic/startup_slow_reasons.skill.yaml +102 -17
- package/skills/composite/startup_analysis.skill.yaml +16 -0
- package/strategies/anr.strategy.md +2 -2
- package/strategies/game.strategy.md +1 -1
- package/strategies/general.strategy.md +1 -1
- package/strategies/prompt-openai-final-report-continuation-en.template.md +12 -0
- package/strategies/prompt-openai-final-report-continuation-zh.template.md +12 -0
- package/strategies/prompt-output-format.template.md +1 -1
- package/strategies/scrolling.strategy.md +1 -0
- package/strategies/startup.strategy.md +4 -1
|
@@ -1710,7 +1710,7 @@ function parseClaimRowSelector(value) {
|
|
|
1710
1710
|
}
|
|
1711
1711
|
else {
|
|
1712
1712
|
const parsed = {};
|
|
1713
|
-
for (const part of text.split(
|
|
1713
|
+
for (const part of text.split(/\s+(?:AND|and)\s+|[,,]/)) {
|
|
1714
1714
|
const match = part.trim().match(/^([^=::]+)\s*(?:=|:|:)\s*(.+)$/);
|
|
1715
1715
|
if (!match)
|
|
1716
1716
|
continue;
|
|
@@ -1735,7 +1735,64 @@ function parseClaimRowSelector(value) {
|
|
|
1735
1735
|
}
|
|
1736
1736
|
return Object.keys(selector).length > 0 ? selector : undefined;
|
|
1737
1737
|
}
|
|
1738
|
-
function
|
|
1738
|
+
function splitClaimList(value) {
|
|
1739
|
+
if (value === undefined || value === null)
|
|
1740
|
+
return [];
|
|
1741
|
+
return String(value)
|
|
1742
|
+
.split(/[,,]/)
|
|
1743
|
+
.map(item => item.trim())
|
|
1744
|
+
.filter(Boolean);
|
|
1745
|
+
}
|
|
1746
|
+
function parseClaimRowIndices(value) {
|
|
1747
|
+
if (value === undefined || value === null || value === '')
|
|
1748
|
+
return [];
|
|
1749
|
+
if (typeof value === 'number' && Number.isInteger(value) && value >= 0)
|
|
1750
|
+
return [value];
|
|
1751
|
+
const text = String(value).trim();
|
|
1752
|
+
const range = text.match(/^(\d+)\s*(?:-|\.\.|~|至|到)\s*(\d+)$/);
|
|
1753
|
+
if (range) {
|
|
1754
|
+
const start = Number(range[1]);
|
|
1755
|
+
const end = Number(range[2]);
|
|
1756
|
+
if (Number.isInteger(start) && Number.isInteger(end) && start >= 0 && end >= start && end - start <= 50) {
|
|
1757
|
+
return Array.from({ length: end - start + 1 }, (_, index) => start + index);
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1760
|
+
const parsed = parseNumberFromUnknown(value);
|
|
1761
|
+
return parsed !== undefined && Number.isInteger(parsed) && parsed >= 0 ? [parsed] : [];
|
|
1762
|
+
}
|
|
1763
|
+
function parseClaimTupleValues(rawValue, rowCount, columnCount) {
|
|
1764
|
+
if (rawValue === undefined)
|
|
1765
|
+
return [];
|
|
1766
|
+
if (rowCount > 1) {
|
|
1767
|
+
const rowGroups = splitClaimList(rawValue);
|
|
1768
|
+
if (rowGroups.length === rowCount) {
|
|
1769
|
+
return rowGroups.map(group => {
|
|
1770
|
+
const slashParts = String(group)
|
|
1771
|
+
.split('/')
|
|
1772
|
+
.map(item => item.trim())
|
|
1773
|
+
.filter(Boolean);
|
|
1774
|
+
if (columnCount > 1 && slashParts.length === columnCount) {
|
|
1775
|
+
return slashParts.map(parseClaimScalar);
|
|
1776
|
+
}
|
|
1777
|
+
return [parseClaimScalar(group)];
|
|
1778
|
+
});
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1781
|
+
if (columnCount > 1) {
|
|
1782
|
+
const values = splitClaimList(rawValue);
|
|
1783
|
+
if (values.length >= columnCount) {
|
|
1784
|
+
const normalizedValues = values.length === columnCount
|
|
1785
|
+
? values
|
|
1786
|
+
: [
|
|
1787
|
+
...values.slice(0, columnCount - 1),
|
|
1788
|
+
values.slice(columnCount - 1).join(', '),
|
|
1789
|
+
];
|
|
1790
|
+
return [normalizedValues.map(parseClaimScalar)];
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
return [[parseClaimScalar(rawValue)]];
|
|
1794
|
+
}
|
|
1795
|
+
function parseClaimReferencesFromRecord(record) {
|
|
1739
1796
|
const evidenceRefId = String(readValueFromAliases(record, [
|
|
1740
1797
|
'evidenceRefId', 'evidence_ref_id', 'evidenceId', 'evidence_id',
|
|
1741
1798
|
]) || '').trim();
|
|
@@ -1746,21 +1803,97 @@ function parseClaimReferenceFromRecord(record) {
|
|
|
1746
1803
|
'sourceToolCallId', 'source_tool_call_id', 'toolCallId', 'tool_call_id',
|
|
1747
1804
|
]) || '').trim();
|
|
1748
1805
|
const rowIndexRaw = readValueFromAliases(record, ['rowIndex', 'row_index']);
|
|
1749
|
-
const
|
|
1806
|
+
const rowIndices = parseClaimRowIndices(rowIndexRaw);
|
|
1750
1807
|
const rowSelector = parseClaimRowSelector(readValueFromAliases(record, ['rowSelector', 'row_selector']));
|
|
1751
|
-
const
|
|
1752
|
-
const
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
...(
|
|
1760
|
-
...(value !== undefined ? { value } : {}),
|
|
1808
|
+
const columnRaw = readValueFromAliases(record, ['column', 'col']);
|
|
1809
|
+
const columns = splitClaimList(columnRaw);
|
|
1810
|
+
const rawValue = readValueFromAliases(record, ['value']);
|
|
1811
|
+
const artifactId = String(readValueFromAliases(record, ['artifactId', 'artifact_id']) || '').trim();
|
|
1812
|
+
const sourceArtifactId = String(readValueFromAliases(record, ['sourceArtifactId', 'source_artifact_id']) || '').trim();
|
|
1813
|
+
if (!evidenceRefId && !sourceRef && !sourceToolCallId && !artifactId && !sourceArtifactId)
|
|
1814
|
+
return [];
|
|
1815
|
+
const base = {
|
|
1816
|
+
...(evidenceRefId ? { evidenceRefId } : {}),
|
|
1761
1817
|
...(sourceRef ? { sourceRef } : {}),
|
|
1762
1818
|
...(sourceToolCallId ? { sourceToolCallId } : {}),
|
|
1819
|
+
...(artifactId ? { artifactId } : {}),
|
|
1820
|
+
...(sourceArtifactId ? { sourceArtifactId } : {}),
|
|
1763
1821
|
};
|
|
1822
|
+
const rowTargets = rowIndices.length > 0 ? rowIndices : [undefined];
|
|
1823
|
+
const columnTargets = columns.length > 0 ? columns : [undefined];
|
|
1824
|
+
const tupleValues = parseClaimTupleValues(rawValue, rowTargets.length, columnTargets.length);
|
|
1825
|
+
const refs = [];
|
|
1826
|
+
rowTargets.forEach((rowIndex, rowOffset) => {
|
|
1827
|
+
columnTargets.forEach((column, columnOffset) => {
|
|
1828
|
+
const value = tupleValues[rowOffset]?.[columnOffset]
|
|
1829
|
+
?? (rowTargets.length === 1 ? tupleValues[0]?.[columnOffset] : undefined);
|
|
1830
|
+
refs.push({
|
|
1831
|
+
...base,
|
|
1832
|
+
...(rowIndex !== undefined ? { rowIndex } : {}),
|
|
1833
|
+
...(rowSelector ? { rowSelector } : {}),
|
|
1834
|
+
...(column ? { column } : {}),
|
|
1835
|
+
...(value !== undefined ? { value: value } : {}),
|
|
1836
|
+
});
|
|
1837
|
+
});
|
|
1838
|
+
});
|
|
1839
|
+
return refs;
|
|
1840
|
+
}
|
|
1841
|
+
function parseClaimKind(value) {
|
|
1842
|
+
const normalized = String(value || '').trim();
|
|
1843
|
+
const allowed = [
|
|
1844
|
+
'numeric',
|
|
1845
|
+
'categorical',
|
|
1846
|
+
'time_range',
|
|
1847
|
+
'identity',
|
|
1848
|
+
'causal',
|
|
1849
|
+
'comparison',
|
|
1850
|
+
'inference',
|
|
1851
|
+
'recommendation',
|
|
1852
|
+
];
|
|
1853
|
+
return allowed.includes(normalized)
|
|
1854
|
+
? normalized
|
|
1855
|
+
: undefined;
|
|
1856
|
+
}
|
|
1857
|
+
function parseClaimSupportLevel(value) {
|
|
1858
|
+
const normalized = String(value || '').trim();
|
|
1859
|
+
const allowed = ['verified', 'partial', 'inference', 'unsupported'];
|
|
1860
|
+
return allowed.includes(normalized)
|
|
1861
|
+
? normalized
|
|
1862
|
+
: undefined;
|
|
1863
|
+
}
|
|
1864
|
+
function parseStringArray(value) {
|
|
1865
|
+
if (!Array.isArray(value))
|
|
1866
|
+
return undefined;
|
|
1867
|
+
const out = value
|
|
1868
|
+
.map(item => String(item || '').trim())
|
|
1869
|
+
.filter(Boolean);
|
|
1870
|
+
return out.length > 0 ? Array.from(new Set(out)) : undefined;
|
|
1871
|
+
}
|
|
1872
|
+
function parseClaimArtifactRefs(value) {
|
|
1873
|
+
if (!Array.isArray(value))
|
|
1874
|
+
return undefined;
|
|
1875
|
+
const refs = value
|
|
1876
|
+
.map(item => toRecord(item))
|
|
1877
|
+
.filter((item) => Boolean(item))
|
|
1878
|
+
.map(item => {
|
|
1879
|
+
const artifactId = String(readValueFromAliases(item, [
|
|
1880
|
+
'artifactId',
|
|
1881
|
+
'artifact_id',
|
|
1882
|
+
'sourceArtifactId',
|
|
1883
|
+
'source_artifact_id',
|
|
1884
|
+
]) || '').trim();
|
|
1885
|
+
if (!artifactId)
|
|
1886
|
+
return undefined;
|
|
1887
|
+
const rowIndex = parseNumberFromUnknown(readValueFromAliases(item, ['rowIndex', 'row_index']));
|
|
1888
|
+
const rowSelector = toRecord(readValueFromAliases(item, ['rowSelector', 'row_selector'])) || undefined;
|
|
1889
|
+
return {
|
|
1890
|
+
artifactId,
|
|
1891
|
+
...(rowIndex !== undefined ? { rowIndex } : {}),
|
|
1892
|
+
...(rowSelector ? { rowSelector } : {}),
|
|
1893
|
+
};
|
|
1894
|
+
})
|
|
1895
|
+
.filter((item) => Boolean(item));
|
|
1896
|
+
return refs.length > 0 ? refs : undefined;
|
|
1764
1897
|
}
|
|
1765
1898
|
function parseClaimItemsFromUnknown(value) {
|
|
1766
1899
|
if (!Array.isArray(value))
|
|
@@ -1777,19 +1910,26 @@ function parseClaimItemsFromUnknown(value) {
|
|
|
1777
1910
|
? referencesSource
|
|
1778
1911
|
.map(ref => toRecord(ref))
|
|
1779
1912
|
.filter((ref) => Boolean(ref))
|
|
1780
|
-
.
|
|
1781
|
-
.filter((ref) => Boolean(ref))
|
|
1913
|
+
.flatMap(ref => parseClaimReferencesFromRecord(ref))
|
|
1782
1914
|
: [];
|
|
1783
|
-
|
|
1915
|
+
const artifactRefs = parseClaimArtifactRefs(readValueFromAliases(record, ['artifactRefs', 'artifact_refs']));
|
|
1916
|
+
if (references.length === 0 && (!artifactRefs || artifactRefs.length === 0))
|
|
1784
1917
|
return;
|
|
1785
1918
|
const claimId = String(readValueFromAliases(record, ['id', 'claimId', 'claim_id']) || '').trim();
|
|
1786
1919
|
const conclusionId = normalizeConclusionId(String(readValueFromAliases(record, ['conclusionId', 'conclusion_id', 'conclusion']) || '').trim(), idx + 1);
|
|
1787
1920
|
const text = String(readValueFromAliases(record, ['text', 'statement', 'claim']) || '').trim() || `claim ${idx + 1}`;
|
|
1921
|
+
const kind = parseClaimKind(readValueFromAliases(record, ['kind', 'claimKind', 'claim_kind']));
|
|
1922
|
+
const supportLevel = parseClaimSupportLevel(readValueFromAliases(record, ['supportLevel', 'support_level']));
|
|
1923
|
+
const relationRefs = parseStringArray(readValueFromAliases(record, ['relationRefs', 'relation_refs']));
|
|
1788
1924
|
claims.push({
|
|
1789
1925
|
...(claimId ? { id: claimId } : {}),
|
|
1790
1926
|
conclusionId,
|
|
1791
1927
|
text,
|
|
1928
|
+
...(kind ? { kind } : {}),
|
|
1792
1929
|
references,
|
|
1930
|
+
...(artifactRefs ? { artifactRefs } : {}),
|
|
1931
|
+
...(relationRefs ? { relationRefs } : {}),
|
|
1932
|
+
...(supportLevel ? { supportLevel } : {}),
|
|
1793
1933
|
});
|
|
1794
1934
|
});
|
|
1795
1935
|
return claims;
|
|
@@ -1802,6 +1942,10 @@ function formatClaimReferenceMarkdown(ref) {
|
|
|
1802
1942
|
parts.push(`source_ref=${ref.sourceRef}`);
|
|
1803
1943
|
if (ref.sourceToolCallId)
|
|
1804
1944
|
parts.push(`source_tool_call_id=${ref.sourceToolCallId}`);
|
|
1945
|
+
if (ref.artifactId)
|
|
1946
|
+
parts.push(`artifact_id=${ref.artifactId}`);
|
|
1947
|
+
if (ref.sourceArtifactId)
|
|
1948
|
+
parts.push(`source_artifact_id=${ref.sourceArtifactId}`);
|
|
1805
1949
|
if (typeof ref.rowIndex === 'number')
|
|
1806
1950
|
parts.push(`row_index=${ref.rowIndex}`);
|
|
1807
1951
|
if (ref.rowSelector)
|
|
@@ -1812,15 +1956,57 @@ function formatClaimReferenceMarkdown(ref) {
|
|
|
1812
1956
|
parts.push(`value=${String(ref.value)}`);
|
|
1813
1957
|
return parts.join('; ');
|
|
1814
1958
|
}
|
|
1815
|
-
function
|
|
1816
|
-
const
|
|
1959
|
+
function parseClaimReferencesFromMarkdownLine(line) {
|
|
1960
|
+
const identifierKeys = new Set([
|
|
1961
|
+
'evidence_ref_id',
|
|
1962
|
+
'evidenceRefId',
|
|
1963
|
+
'evidence_id',
|
|
1964
|
+
'evidenceId',
|
|
1965
|
+
'source_ref',
|
|
1966
|
+
'sourceRef',
|
|
1967
|
+
'ref',
|
|
1968
|
+
'source_tool_call_id',
|
|
1969
|
+
'sourceToolCallId',
|
|
1970
|
+
'tool_call_id',
|
|
1971
|
+
'toolCallId',
|
|
1972
|
+
'artifact_id',
|
|
1973
|
+
'artifactId',
|
|
1974
|
+
'source_artifact_id',
|
|
1975
|
+
'sourceArtifactId',
|
|
1976
|
+
]);
|
|
1977
|
+
const localKeys = new Set(['row_index', 'rowIndex', 'row_selector', 'rowSelector', 'column', 'col', 'value']);
|
|
1978
|
+
const base = {};
|
|
1979
|
+
const groups = [];
|
|
1980
|
+
let current = {};
|
|
1981
|
+
const flush = () => {
|
|
1982
|
+
if (Object.keys(current).length === 0)
|
|
1983
|
+
return;
|
|
1984
|
+
groups.push({ ...base, ...current });
|
|
1985
|
+
current = {};
|
|
1986
|
+
};
|
|
1817
1987
|
for (const part of String(line || '').split(';')) {
|
|
1818
1988
|
const match = part.trim().match(/^([a-zA-Z_]+)\s*=\s*(.*)$/);
|
|
1819
1989
|
if (!match)
|
|
1820
1990
|
continue;
|
|
1821
|
-
|
|
1991
|
+
const key = match[1];
|
|
1992
|
+
const value = match[2].trim();
|
|
1993
|
+
if (identifierKeys.has(key)) {
|
|
1994
|
+
base[key] = value;
|
|
1995
|
+
continue;
|
|
1996
|
+
}
|
|
1997
|
+
if (localKeys.has(key) &&
|
|
1998
|
+
(Object.prototype.hasOwnProperty.call(current, key)
|
|
1999
|
+
|| ((key === 'row_index' || key === 'rowIndex' || key === 'row_selector' || key === 'rowSelector')
|
|
2000
|
+
&& (current.column !== undefined || current.col !== undefined || current.value !== undefined))
|
|
2001
|
+
|| ((key === 'column' || key === 'col') && current.value !== undefined))) {
|
|
2002
|
+
flush();
|
|
2003
|
+
}
|
|
2004
|
+
current[key] = value;
|
|
1822
2005
|
}
|
|
1823
|
-
|
|
2006
|
+
flush();
|
|
2007
|
+
if (groups.length === 0 && Object.keys(base).length > 0)
|
|
2008
|
+
groups.push({ ...base });
|
|
2009
|
+
return groups.flatMap(group => parseClaimReferencesFromRecord(group));
|
|
1824
2010
|
}
|
|
1825
2011
|
function parseClaimItemsFromMarkdownSection(sectionBody) {
|
|
1826
2012
|
const claims = [];
|
|
@@ -1848,8 +2034,8 @@ function parseClaimItemsFromMarkdownSection(sectionBody) {
|
|
|
1848
2034
|
continue;
|
|
1849
2035
|
}
|
|
1850
2036
|
const refLine = line.replace(/^[-*]\s+/, '').trim();
|
|
1851
|
-
const
|
|
1852
|
-
if (
|
|
2037
|
+
const refs = parseClaimReferencesFromMarkdownLine(refLine);
|
|
2038
|
+
if (refs.length > 0) {
|
|
1853
2039
|
if (!current) {
|
|
1854
2040
|
current = {
|
|
1855
2041
|
id: `Q${claims.length + 1}`,
|
|
@@ -1857,7 +2043,7 @@ function parseClaimItemsFromMarkdownSection(sectionBody) {
|
|
|
1857
2043
|
references: [],
|
|
1858
2044
|
};
|
|
1859
2045
|
}
|
|
1860
|
-
current.references.push(
|
|
2046
|
+
current.references.push(...refs);
|
|
1861
2047
|
}
|
|
1862
2048
|
}
|
|
1863
2049
|
flush();
|
|
@@ -2148,24 +2334,34 @@ function sanitizeConclusionContract(contract, options) {
|
|
|
2148
2334
|
.map((item, idx) => {
|
|
2149
2335
|
const references = (item.references || [])
|
|
2150
2336
|
.map(ref => ({
|
|
2151
|
-
evidenceRefId: sanitizeText(ref.evidenceRefId),
|
|
2337
|
+
...(ref.evidenceRefId ? { evidenceRefId: sanitizeText(ref.evidenceRefId) } : {}),
|
|
2152
2338
|
...(typeof ref.rowIndex === 'number' && Number.isFinite(ref.rowIndex) ? { rowIndex: ref.rowIndex } : {}),
|
|
2153
2339
|
...(ref.rowSelector ? { rowSelector: parseClaimRowSelector(ref.rowSelector) } : {}),
|
|
2154
2340
|
...(ref.column ? { column: sanitizeText(ref.column) } : {}),
|
|
2155
2341
|
...(ref.value !== undefined ? { value: parseClaimScalar(ref.value) } : {}),
|
|
2156
2342
|
...(ref.sourceRef ? { sourceRef: sanitizeText(ref.sourceRef) } : {}),
|
|
2157
2343
|
...(ref.sourceToolCallId ? { sourceToolCallId: sanitizeText(ref.sourceToolCallId) } : {}),
|
|
2344
|
+
...(ref.artifactId ? { artifactId: sanitizeText(ref.artifactId) } : {}),
|
|
2345
|
+
...(ref.sourceArtifactId ? { sourceArtifactId: sanitizeText(ref.sourceArtifactId) } : {}),
|
|
2158
2346
|
}))
|
|
2159
|
-
.filter(ref => ((ref.evidenceRefId || ref.sourceRef || ref.sourceToolCallId) &&
|
|
2347
|
+
.filter(ref => ((ref.evidenceRefId || ref.sourceRef || ref.sourceToolCallId || ref.artifactId || ref.sourceArtifactId) &&
|
|
2160
2348
|
(ref.value === undefined || typeof ref.value === 'string' || typeof ref.value === 'number' || typeof ref.value === 'boolean')));
|
|
2349
|
+
const kind = parseClaimKind(item.kind);
|
|
2350
|
+
const artifactRefs = parseClaimArtifactRefs(item.artifactRefs);
|
|
2351
|
+
const relationRefs = parseStringArray(item.relationRefs);
|
|
2352
|
+
const supportLevel = parseClaimSupportLevel(item.supportLevel);
|
|
2161
2353
|
return {
|
|
2162
2354
|
...(item.id ? { id: sanitizeText(item.id) } : {}),
|
|
2163
2355
|
...(item.conclusionId ? { conclusionId: normalizeConclusionId(item.conclusionId, idx + 1) } : {}),
|
|
2164
2356
|
text: sanitizeText(item.text) || `claim ${idx + 1}`,
|
|
2357
|
+
...(kind ? { kind } : {}),
|
|
2165
2358
|
references,
|
|
2359
|
+
...(artifactRefs ? { artifactRefs } : {}),
|
|
2360
|
+
...(relationRefs ? { relationRefs } : {}),
|
|
2361
|
+
...(supportLevel ? { supportLevel } : {}),
|
|
2166
2362
|
};
|
|
2167
2363
|
})
|
|
2168
|
-
.filter(item => item.text && item.references.length > 0)
|
|
2364
|
+
.filter(item => item.text && (item.references.length > 0 || Boolean(item.artifactRefs?.length)))
|
|
2169
2365
|
.slice(0, 50);
|
|
2170
2366
|
const uncertainties = dedupe(contract.uncertainties).slice(0, 6);
|
|
2171
2367
|
const nextSteps = dedupe(contract.nextSteps).slice(0, 6);
|
|
@@ -3045,7 +3241,7 @@ function buildInsightFirstPrompt(params) {
|
|
|
3045
3241
|
}
|
|
3046
3242
|
parts.push('- evidence_chain 必须按 C1/C2/C3 对齐(C1=结论1):每项包含 conclusion_id 和 evidence 文本,且包含至少 1 个 evidence id(ev_xxxxxxxxxxxx)。');
|
|
3047
3243
|
parts.push('- claims 必须列出结论中出现的关键数值/实体判断,用于前端逐句核验;没有可核验数据时传空数组。');
|
|
3048
|
-
parts.push('- claims 每项包含:id(Q1...), conclusion_id(C1...), text, references
|
|
3244
|
+
parts.push('- claims 每项包含:id(Q1...), conclusion_id(C1...), text, kind, references;kind 从 numeric/categorical/time_range/identity/causal/comparison/inference/recommendation 中选择。');
|
|
3049
3245
|
parts.push('- claims[].references 每项包含:evidence_ref_id(优先使用 data:* 证据 ID), source_ref(如 表 1/摘要 1), source_tool_call_id(如可见), row_index(0-based,不是第几行的 1-based 编号), row_selector(行号不稳定时使用), column, value。');
|
|
3050
3246
|
parts.push('- metadata 可包含 confidence(0-100 或 0-1)与 rounds(正整数)。');
|
|
3051
3247
|
parts.push('- metadata 可包含 cluster_policy 对象:{ output_mode: required|optional|none, frame_list_mode: none|top|full, max_frames_per_cluster?: number }。');
|