fix(awooop): 脫敏前台治理邊界文案
All checks were successful
Code Review / ai-code-review (push) Successful in 16s
CD Pipeline / tests (push) Successful in 1m36s
CD Pipeline / build-and-deploy (push) Successful in 4m4s
CD Pipeline / post-deploy-checks (push) Successful in 1m34s

This commit is contained in:
Your Name
2026-06-15 05:31:36 +08:00
parent 088aeb6a06
commit e1831e5d8f
13 changed files with 219 additions and 128 deletions

View File

@@ -28,6 +28,7 @@ import {
type AwoooPStatusChain,
} from "@/components/awooop/status-chain";
import { cn } from "@/lib/utils";
import { publicBoundaryText, publicContractText } from "@/lib/public-security-redaction";
interface RunDetail {
run_id: string;
@@ -315,7 +316,7 @@ function OwnerResponseValidationDecisionBoundaryPanel() {
<p className="mt-1 text-xs leading-5 text-[#5f5b52]">
{t(`decisionRefs.${item.key}.detail` as never)}
</p>
<p className="mt-2 break-all font-mono text-xs text-[#77736a]">{item.contract}</p>
<p className="mt-2 text-xs text-[#77736a]">{publicContractText(item.contract)}</p>
</div>
</div>
))}
@@ -332,7 +333,7 @@ function OwnerResponseValidationDecisionBoundaryPanel() {
<div className="mt-4 space-y-1 font-mono text-xs leading-6 text-[#141413]">
{ownerResponseValidationDecisionBoundaries.map((item) => (
<div key={item} className="break-all">
{item}
{publicBoundaryText(item)}
</div>
))}
</div>

View File

@@ -30,6 +30,7 @@ import {
type AwoooPStatusChain,
} from "@/components/awooop/status-chain";
import type { IncidentTimelineResponse } from "@/lib/api-client";
import { publicBoundaryText, publicContractText } from "@/lib/public-security-redaction";
// =============================================================================
// Types
@@ -679,11 +680,11 @@ function SecurityOwnerResponseGatePanel() {
<p className="text-xs font-semibold text-[#77736a]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<span>approval_record_created=false</span>
<span>owner_response_accepted_count=0</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("approval_record_created=false")}</span>
<span>{publicBoundaryText("owner_response_accepted_count=0")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
<Link
href="/iwooos"
@@ -782,15 +783,15 @@ function GitHubPrimaryReadinessApprovalBoundaryPanel() {
<p className="text-xs font-semibold text-[#5f6f6b]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#4f5f5b]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<span>approval_record_created=false</span>
<span>github_primary_approval_granted=false</span>
<span>owner_response_accepted_count=0</span>
<span>repo_creation_authorized=false</span>
<span>refs_mutation_authorized=false</span>
<span>secret_value_collection_allowed=false</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("approval_record_created=false")}</span>
<span>{publicBoundaryText("github_primary_approval_granted=false")}</span>
<span>{publicBoundaryText("owner_response_accepted_count=0")}</span>
<span>{publicBoundaryText("repo_creation_authorized=false")}</span>
<span>{publicBoundaryText("refs_mutation_authorized=false")}</span>
<span>{publicBoundaryText("secret_value_collection_allowed=false")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
<Link
href="/iwooos"
@@ -906,8 +907,8 @@ function OwnerResponseValidationApprovalBoundaryPanel() {
<p className="mt-1 text-xs leading-5 text-[#4f4a60]">
{t(`reviewRefs.${item.key}.detail`)}
</p>
<p className="mt-2 break-all font-mono text-[11px] text-[#5f5a70]">
{item.contract}
<p className="mt-2 text-[11px] text-[#5f5a70]">
{publicContractText(item.contract)}
</p>
</div>
</div>
@@ -918,18 +919,18 @@ function OwnerResponseValidationApprovalBoundaryPanel() {
<p className="text-xs font-semibold text-[#5f5a70]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#4f4a60]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<span>owner_response_validation_received_count=0</span>
<span>owner_response_validation_accepted_count=0</span>
<span>owner_response_validation_rejected_count=0</span>
<span>approval_record_created=false</span>
<span>repo_creation_authorized=false</span>
<span>refs_sync_authorized=false</span>
<span>workflow_modification_authorized=false</span>
<span>secret_value_collection_allowed=false</span>
<span>github_primary_switch_authorized=false</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("owner_response_validation_received_count=0")}</span>
<span>{publicBoundaryText("owner_response_validation_accepted_count=0")}</span>
<span>{publicBoundaryText("owner_response_validation_rejected_count=0")}</span>
<span>{publicBoundaryText("approval_record_created=false")}</span>
<span>{publicBoundaryText("repo_creation_authorized=false")}</span>
<span>{publicBoundaryText("refs_sync_authorized=false")}</span>
<span>{publicBoundaryText("workflow_modification_authorized=false")}</span>
<span>{publicBoundaryText("secret_value_collection_allowed=false")}</span>
<span>{publicBoundaryText("github_primary_switch_authorized=false")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
<Link
href="/iwooos"

View File

@@ -20,6 +20,7 @@ import {
GitBranch,
} from "lucide-react";
import { cn } from "@/lib/utils";
import { publicBoundaryText, publicContractText } from "@/lib/public-security-redaction";
// =============================================================================
// Types
@@ -218,7 +219,7 @@ function SecurityContractCandidatePanel() {
<div className="divide-y divide-[#eee9dd]">
{contracts.map((item) => (
<div key={item.name} className="px-4 py-3">
<p className="break-all font-mono text-xs font-semibold text-[#141413]">{item.name}</p>
<p className="text-xs font-semibold text-[#141413]">{publicContractText(item.name)}</p>
<p className="mt-1 text-xs leading-5 text-[#5f5b52]">{item.detail}</p>
</div>
))}
@@ -229,11 +230,11 @@ function SecurityContractCandidatePanel() {
<p className="text-xs font-semibold text-[#77736a]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<span>contract_publish_authorized=false</span>
<span>contract_mutation_authorized=false</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("contract_publish_authorized=false")}</span>
<span>{publicBoundaryText("contract_mutation_authorized=false")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
<Link
href="/iwooos"
@@ -333,7 +334,7 @@ function GitHubPrimaryReadinessContractCandidatePanel() {
<div className="divide-y divide-[#e3eeec]">
{contracts.map((item) => (
<div key={item.name} className="px-4 py-3">
<p className="break-all font-mono text-xs font-semibold text-[#141413]">{item.name}</p>
<p className="text-xs font-semibold text-[#141413]">{publicContractText(item.name)}</p>
<p className="mt-1 text-xs leading-5 text-[#4f5f5b]">{item.detail}</p>
</div>
))}
@@ -344,14 +345,14 @@ function GitHubPrimaryReadinessContractCandidatePanel() {
<p className="text-xs font-semibold text-[#5f6f6b]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#4f5f5b]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<span>repo_creation_authorized=false</span>
<span>refs_mutation_authorized=false</span>
<span>secret_value_collection_allowed=false</span>
<span>github_primary_switch_authorized=false</span>
<span>gitea_disablement_authorized=false</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("repo_creation_authorized=false")}</span>
<span>{publicBoundaryText("refs_mutation_authorized=false")}</span>
<span>{publicBoundaryText("secret_value_collection_allowed=false")}</span>
<span>{publicBoundaryText("github_primary_switch_authorized=false")}</span>
<span>{publicBoundaryText("gitea_disablement_authorized=false")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
<Link
href="/iwooos"
@@ -451,7 +452,7 @@ function OwnerResponseValidationContractCandidatePanel() {
<div className="divide-y divide-[#ece7f3]">
{contracts.map((item) => (
<div key={item.name} className="px-4 py-3">
<p className="break-all font-mono text-xs font-semibold text-[#141413]">{item.name}</p>
<p className="text-xs font-semibold text-[#141413]">{publicContractText(item.name)}</p>
<p className="mt-1 text-xs leading-5 text-[#585260]">{item.detail}</p>
</div>
))}
@@ -462,17 +463,17 @@ function OwnerResponseValidationContractCandidatePanel() {
<p className="text-xs font-semibold text-[#665f73]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#585260]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<span>owner_response_validation_received_count=0</span>
<span>owner_response_validation_accepted_count=0</span>
<span>approval_record_created=false</span>
<span>repo_creation_authorized=false</span>
<span>refs_sync_authorized=false</span>
<span>workflow_modification_authorized=false</span>
<span>secret_value_collection_allowed=false</span>
<span>github_primary_switch_authorized=false</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("owner_response_validation_received_count=0")}</span>
<span>{publicBoundaryText("owner_response_validation_accepted_count=0")}</span>
<span>{publicBoundaryText("approval_record_created=false")}</span>
<span>{publicBoundaryText("repo_creation_authorized=false")}</span>
<span>{publicBoundaryText("refs_sync_authorized=false")}</span>
<span>{publicBoundaryText("workflow_modification_authorized=false")}</span>
<span>{publicBoundaryText("secret_value_collection_allowed=false")}</span>
<span>{publicBoundaryText("github_primary_switch_authorized=false")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
<Link
href="/iwooos"

View File

@@ -24,6 +24,7 @@ import {
} from "lucide-react";
import { Link } from "@/i18n/routing";
import { cn } from "@/lib/utils";
import { publicBoundaryText, publicContractText } from "@/lib/public-security-redaction";
type Tenant = {
project_id: string;
@@ -909,11 +910,11 @@ function SecurityMirrorPanel() {
<p className="text-xs font-semibold text-[#77736a]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 break-words text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<span>read_only_production_landing_evidence_count=1</span>
<span>execution_router_linked=false</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("read_only_production_landing_evidence_count=1")}</span>
<span>{publicBoundaryText("execution_router_linked=false")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
</div>
</div>
@@ -990,8 +991,8 @@ function GitHubPrimaryReadinessHomePanel() {
{githubPrimaryReadinessRefs.map((ref) => (
<div key={ref.key} className="grid gap-3 px-4 py-3 lg:grid-cols-[minmax(0,1fr)_96px]">
<div className="min-w-0">
<p className="break-all font-mono text-xs font-semibold text-[#141413]">
{ref.contract}
<p className="text-xs font-semibold text-[#141413]">
{publicContractText(ref.contract)}
</p>
<p className="mt-1 text-xs leading-5 text-[#5f5b52]">
{t(`readinessRefs.${ref.key}` as never)}
@@ -1018,9 +1019,9 @@ function GitHubPrimaryReadinessHomePanel() {
<p className="text-xs font-semibold text-[#77736a]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
{githubPrimaryReadinessBoundaries.map((boundary) => (
<span key={boundary}>{boundary}</span>
<span key={boundary}>{publicBoundaryText(boundary)}</span>
))}
</div>
</div>
@@ -1160,9 +1161,9 @@ function OwnerResponseValidationRollupPanel() {
<p className="text-xs font-semibold text-[#77736a]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 break-words text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
{ownerResponseValidationBoundaries.map((boundary) => (
<span key={boundary}>{boundary}</span>
<span key={boundary}>{publicBoundaryText(boundary)}</span>
))}
</div>
</div>
@@ -1244,8 +1245,8 @@ function HighValueConfigOwnerPacketHomePanel() {
{highValueConfigOwnerPacketRefs.map((ref) => (
<div key={ref.key} className="grid gap-3 px-4 py-3 md:grid-cols-[minmax(0,1fr)_96px]">
<div className="min-w-0">
<p className="break-all font-mono text-xs font-semibold text-[#141413]">
{ref.contract}
<p className="text-xs font-semibold text-[#141413]">
{publicContractText(ref.contract)}
</p>
<p className="mt-1 text-xs leading-5 text-[#5f5b52]">
{t(`refs.${ref.key}` as never)}
@@ -1275,9 +1276,9 @@ function HighValueConfigOwnerPacketHomePanel() {
<p className="text-xs font-semibold text-[#77736a]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 break-words text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
{highValueConfigOwnerPacketBoundaries.map((boundary) => (
<span key={boundary}>{boundary}</span>
<span key={boundary}>{publicBoundaryText(boundary)}</span>
))}
</div>
</div>

View File

@@ -36,6 +36,7 @@ import {
type AwoooPStatusChain,
} from "@/components/awooop/status-chain";
import { cn } from "@/lib/utils";
import { publicBoundaryText, publicContractText } from "@/lib/public-security-redaction";
interface RunDetail {
run_id: string;
@@ -583,7 +584,7 @@ function OwnerResponseValidationDetailBoundaryPanel() {
<p className="mt-1 text-xs leading-5 text-[#5f5b52]">
{t(`detailRefs.${item.key}.detail` as never)}
</p>
<p className="mt-2 break-all font-mono text-xs text-[#77736a]">{item.contract}</p>
<p className="mt-2 text-xs text-[#77736a]">{publicContractText(item.contract)}</p>
</div>
</div>
))}
@@ -600,7 +601,7 @@ function OwnerResponseValidationDetailBoundaryPanel() {
<div className="mt-4 space-y-1 font-mono text-xs leading-6 text-[#141413]">
{ownerResponseValidationDetailBoundaries.map((item) => (
<div key={item} className="break-all">
{item}
{publicBoundaryText(item)}
</div>
))}
</div>

View File

@@ -35,6 +35,7 @@ import {
TriangleAlert,
} from "lucide-react";
import { cn } from "@/lib/utils";
import { publicBoundaryText, publicContractText } from "@/lib/public-security-redaction";
// =============================================================================
// Types
@@ -1177,7 +1178,7 @@ function SecurityRunStateCandidatePanel() {
<div className="divide-y divide-[#eee9dd]">
{runRefs.map((item) => (
<div key={item.name} className="px-4 py-3">
<p className="break-words font-mono text-xs font-semibold text-[#141413]">{item.name}</p>
<p className="break-words text-xs font-semibold text-[#141413]">{publicContractText(item.name)}</p>
<p className="mt-1 text-xs leading-5 text-[#5f5b52]">{item.detail}</p>
</div>
))}
@@ -1188,11 +1189,11 @@ function SecurityRunStateCandidatePanel() {
<p className="text-xs font-semibold text-[#77736a]">{t("boundaryLabel")}</p>
<p className="mt-2 text-sm font-semibold text-[#141413]">{t("boundaryTitle")}</p>
<p className="mt-2 text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 font-mono text-xs text-[#141413]">
<span>security_run_created=false</span>
<span>execution_router_linked=false</span>
<span>runtime_execution_authorized=false</span>
<span>action_buttons_allowed=false</span>
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
<span>{publicBoundaryText("security_run_created=false")}</span>
<span>{publicBoundaryText("execution_router_linked=false")}</span>
<span>{publicBoundaryText("runtime_execution_authorized=false")}</span>
<span>{publicBoundaryText("action_buttons_allowed=false")}</span>
</div>
<Link
href="/iwooos"
@@ -1277,7 +1278,7 @@ function GitHubRunReadinessBoundaryPanel() {
<div key={ref.key} className="grid gap-3 px-4 py-3 md:grid-cols-[minmax(0,1fr)_96px]">
<div className="min-w-0">
<p className="break-all font-mono text-xs font-semibold text-[#141413]">
{ref.name}
{publicContractText(ref.name)}
</p>
<p className="mt-1 text-xs leading-5 text-[#5f5b52]">
{t(`runRefs.${ref.key}` as never)}
@@ -1302,9 +1303,9 @@ function GitHubRunReadinessBoundaryPanel() {
</div>
</div>
<p className="mt-2 text-xs leading-5 text-[#5f5b52]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
{githubRunReadinessBoundaries.map((boundary) => (
<span key={boundary}>{boundary}</span>
<span key={boundary}>{publicBoundaryText(boundary)}</span>
))}
</div>
</div>
@@ -1398,8 +1399,8 @@ function OwnerResponseValidationRunBoundaryPanel() {
<p className="mt-1 text-xs leading-5 text-[#4f4a60]">
{t(`runRefs.${item.key}.detail` as never)}
</p>
<p className="mt-2 break-all font-mono text-[11px] text-[#5f5a70]">
{item.contract}
<p className="mt-2 text-[11px] font-semibold text-[#5f5a70]">
{publicContractText(item.contract)}
</p>
</div>
</div>
@@ -1416,9 +1417,9 @@ function OwnerResponseValidationRunBoundaryPanel() {
</div>
</div>
<p className="mt-2 text-xs leading-5 text-[#4f4a60]">{t("boundaryDetail")}</p>
<div className="mt-4 grid gap-2 break-all font-mono text-xs text-[#141413]">
<div className="mt-4 grid gap-2 text-xs leading-5 text-[#141413]">
{ownerResponseValidationRunBoundaries.map((boundary) => (
<span key={boundary}>{boundary}</span>
<span key={boundary}>{publicBoundaryText(boundary)}</span>
))}
</div>
</div>

View File

@@ -2,6 +2,7 @@
import { AppLayout } from '@/components/layout'
import { IwoooSReadOnlyBridge } from '@/components/security/iwooos-read-only-bridge'
import { publicBoundaryText } from '@/lib/public-security-redaction'
import {
Activity,
ArrowRight,
@@ -133,7 +134,7 @@ export default function CodeReviewPage({ params }: { params: { locale: string }
<div className="grid gap-2 text-xs font-mono text-gray-400 sm:grid-cols-2">
{handoffFlags.map((flag) => (
<div key={flag} className="min-w-0 break-all rounded border border-gray-800 bg-black/25 px-3 py-2">
{flag}
{publicBoundaryText(flag)}
</div>
))}
</div>
@@ -176,7 +177,7 @@ export default function CodeReviewPage({ params }: { params: { locale: string }
<div className="mt-1 break-words text-xs text-gray-500">{t('candidateQueue.subtitle')}</div>
</div>
<div className="min-w-0 max-w-full break-all rounded border border-emerald-500/30 px-3 py-1 text-xs font-mono text-emerald-200 md:justify-self-end">
action_buttons_allowed=false
{publicBoundaryText('action_buttons_allowed=false')}
</div>
</div>
<div className="hidden grid-cols-[7rem_8rem_1.1fr_1.15fr_8rem_6rem] gap-3 border-b border-gray-800 px-4 py-2 text-xs font-mono uppercase text-gray-500 md:grid">

View File

@@ -37,6 +37,7 @@ import { useTranslations } from 'next-intl'
import { GlassCard } from '@/components/ui/glass-card'
import { StatusOrb } from '@/components/ui/status-orb'
import { AgentActivityConstellation } from '@/components/governance/agent-activity-constellation'
import { redactPublicIdentifier } from '@/lib/public-security-redaction'
import {
apiClient,
type AiAgent12AgentWarRoomSnapshot,
@@ -13725,16 +13726,16 @@ export function AutomationInventoryTab() {
<div key={runner.contract_id} style={{ display: 'flex', flexDirection: 'column', gap: 6, minWidth: 0 }}>
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}>
<span style={{ fontFamily: "'DM Mono', monospace", fontSize: 11, fontWeight: 700, color: '#141413', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
{runner.display_name}
{redactPublicIdentifier(runner.display_name)}
</span>
<Chip value={giteaValueLabel(runner.status)} muted={runner.status === 'manifest_mapped'} />
</div>
<div style={{ fontFamily: "'DM Mono', monospace", fontSize: 10, color: '#87867f', lineHeight: 1.45, overflowWrap: 'anywhere' }}>
{runner.health_contract}
{redactPublicIdentifier(runner.health_contract)}
</div>
<div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>
<Chip value={runner.runner_labels.join(' / ')} muted />
<Chip value={runner.next_action} />
<Chip value={redactPublicIdentifier(runner.runner_labels.join(' / '))} muted />
<Chip value={redactPublicIdentifier(runner.next_action)} />
</div>
</div>
))}

View File

@@ -23,6 +23,7 @@ import { AppLayout } from "@/components/layout";
import { PageTabs, type TabConfig } from "@/components/layout/page-tabs";
import { SecurityPanel } from "@/components/panels/SecurityPanel";
import { CompliancePanel } from "@/components/panels/CompliancePanel";
import { publicBoundaryText } from "@/lib/public-security-redaction";
const integrationItems = [
{ key: "routePreserved", value: "保留", icon: ShieldCheck, color: "#1f7a4d" },
@@ -627,7 +628,7 @@ function SecurityComplianceFrontStage({ locale: _locale }: { locale: string }) {
}}
>
{rolloutBoundaries.map((boundary) => (
<code
<span
key={boundary}
style={{
background: "#f7f5ee",
@@ -640,8 +641,8 @@ function SecurityComplianceFrontStage({ locale: _locale }: { locale: string }) {
...textWrap,
}}
>
{boundary}
</code>
{publicBoundaryText(boundary)}
</span>
))}
</div>
</details>
@@ -709,7 +710,7 @@ function SecurityComplianceFrontStage({ locale: _locale }: { locale: string }) {
</summary>
<div style={{ display: "grid", gap: 6, marginTop: 10 }}>
{integrationBoundaries.map((boundary) => (
<code
<span
key={boundary}
style={{
background: "#fff",
@@ -722,8 +723,8 @@ function SecurityComplianceFrontStage({ locale: _locale }: { locale: string }) {
...textWrap,
}}
>
{boundary}
</code>
{publicBoundaryText(boundary)}
</span>
))}
</div>
</details>