Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions frontend/src/components/TrustAnalysisDigest.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<template>
<section v-if="analysis" class="trust-analysis-digest">
<div class="trust-analysis-digest-head">
<div>
<span class="section-kicker">Compressed analysis</span>
<strong>{{ analysis.quiet_summary }}</strong>
</div>
<span>{{ analysis.trust_score.label }} - {{ analysis.trust_score.score }}</span>
</div>

<p>{{ analysis.evidence_compression.summary }}</p>

<div class="trust-analysis-pills">
<span>{{ analysis.review_path.current_stage }}</span>
<span>{{ analysis.context_completeness.percent }}% context</span>
<span>{{ analysis.hidden_depth_count }} hidden details</span>
</div>

<details>
<summary>
<span>Decision impact</span>
<strong>{{ previewCount }} actions</strong>
</summary>
<div class="trust-analysis-impact-list">
<article v-for="preview in decisionPreviews" :key="preview.action">
<span>{{ preview.action }}</span>
<strong>{{ preview.summary }}</strong>
<p>{{ preview.recall_effect }}</p>
</article>
</div>
</details>

<details>
<summary>
<span>Evidence compression</span>
<strong>{{ analysis.evidence_compression.path_count }} paths</strong>
</summary>
<div class="trust-analysis-evidence-columns">
<div>
<span>Supporting</span>
<p v-for="line in analysis.evidence_compression.supporting" :key="line">{{ line }}</p>
</div>
<div>
<span>Needs confirmation</span>
<p v-for="line in analysis.evidence_compression.needs_confirmation" :key="line">{{ line }}</p>
</div>
</div>
</details>
</section>
</template>

<script setup lang="ts">
import { computed } from 'vue'
import type { TrustDecisionPreview, TrustReviewDetailPayload, TrustReviewStatus } from './trustCenterTypes'

const props = defineProps<{
detail: TrustReviewDetailPayload
}>()

const analysis = computed(() => props.detail.analysis || props.detail.item.analysis)

const decisionPreviews = computed(() => {
const previews = analysis.value?.decision_preview || {}
return (Object.entries(previews) as Array<[Exclude<TrustReviewStatus, 'unreviewed'>, TrustDecisionPreview]>).map(
([action, preview]) => ({
action,
...preview,
}),
)
})

const previewCount = computed(() => decisionPreviews.value.length)
</script>
3 changes: 3 additions & 0 deletions frontend/src/components/TrustCenterView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
@mode-changed="selectedSessionMode = $event"
/>

<TrustQuietReport :session="review.session" :report="review.report" />

<TrustReviewProgress
:mode="selectedSessionMode"
:items="sessionItems"
Expand Down Expand Up @@ -79,6 +81,7 @@ import { computed, ref } from 'vue'
import TrustBatchActionBar from './TrustBatchActionBar.vue'
import TrustDiagnosticsPanel from './TrustDiagnosticsPanel.vue'
import TrustOpenLoopPanel from './TrustOpenLoopPanel.vue'
import TrustQuietReport from './TrustQuietReport.vue'
import TrustReviewProgress from './TrustReviewProgress.vue'
import TrustReviewDetail from './TrustReviewDetail.vue'
import TrustReviewInbox from './TrustReviewInbox.vue'
Expand Down
54 changes: 54 additions & 0 deletions frontend/src/components/TrustQuietReport.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<template>
<section v-if="report || session" class="trust-quiet-report">
<div>
<span class="section-kicker">Trust report</span>
<strong>{{ headline }}</strong>
<p>{{ quietSummary }}</p>
</div>

<details>
<summary>
<span>Report detail</span>
<strong>{{ sectionCount }} sections</strong>
</summary>
<div class="trust-quiet-report-grid">
<article v-for="section in visibleSections" :key="section.id">
<span>{{ section.title }}</span>
<strong>{{ section.count }}</strong>
<p>{{ section.summary }}</p>
</article>
</div>
<div v-if="visibleActions.length" class="trust-quiet-action-list">
<p v-for="action in visibleActions" :key="action.source_id">
{{ action.title }} - {{ action.risk_level }} - {{ action.summary }}
</p>
</div>
</details>
</section>
</template>

<script setup lang="ts">
import { computed } from 'vue'
import type { TrustReportPayload, TrustSessionPayload } from './trustCenterTypes'

const props = defineProps<{
report?: TrustReportPayload
session?: TrustSessionPayload
}>()

const headline = computed(() => {
if (props.report?.headline) return props.report.headline
if (props.session?.next_step?.title) return `Next: ${props.session.next_step.title}`
return 'Trust context is ready.'
})

const quietSummary = computed(() => {
if (props.report?.quiet_summary) return props.report.quiet_summary
if (props.session?.quiet_summary) return props.session.quiet_summary
return 'Details stay collapsed so the review queue remains easy to scan.'
})

const sectionCount = computed(() => props.report?.sections.length || 0)
const visibleSections = computed(() => props.report?.sections.slice(0, props.report.display_policy.max_visible_sections || 2) || [])
const visibleActions = computed(() => props.report?.action_queue.slice(0, props.report.display_policy.max_visible_actions || 3) || [])
</script>
3 changes: 3 additions & 0 deletions frontend/src/components/TrustReviewDetail.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@

<TrustRiskLens :item="detail.item" />

<TrustAnalysisDigest :detail="detail" />

<details class="trust-detail-disclosure">
<summary>
<span>证据路径</span>
Expand Down Expand Up @@ -82,6 +84,7 @@
<script setup lang="ts">
import { computed } from 'vue'
import { boundaryLabel } from './trustCenterCopy'
import TrustAnalysisDigest from './TrustAnalysisDigest.vue'
import TrustDecisionCoach from './TrustDecisionCoach.vue'
import TrustReviewSignals from './TrustReviewSignals.vue'
import TrustRiskLens from './TrustRiskLens.vue'
Expand Down
Loading
Loading