## Flow diagram
```mermaid
flowchart TB
advisor(["Advisor (browser)"])
ui["Advisor UI
S3 + CloudFront
(split view)"]
subgraph entry["Entry / orchestration"]
fusion["Fusion SaaS (prod)
— or —
/demo Lambda (Fusion-less dry run)"]
end
subgraph cloudzone["CLOUD zone (Zone=cloud-VPC-B) — sees TOKENS only"]
runtime["AgentCore Runtime
Strands agent + Bedrock
apac Claude 3.5 Sonnet v2"]
gateway["AgentCore Gateway
MCP · AWS_IAM / SigV4"]
end
subgraph onprem["ON-PREM zone (Zone=on-prem-VPC-A) — holds the reversible map + PII"]
tokenize["/tokenize Lambda (in-VPC)
detect → mint → vault → splice"]
presidio["Presidio detector
Fargate (PRIVATE, SG-locked :5001)"]
vault[("DynamoDB VAULT
token <-> PII (+customer_id)")]
customers[("DynamoDB CUSTOMERS
raw records — never leave")]
rag["RAG tool Lambda
token -> evidence (no PII out)"]
restore["/restore Lambda
re-attach identity"]
end
advisor -- "1 query: 王小明 + A123456789" --> ui
ui -- "POST {query}" --> fusion
fusion -- "2 {query}" --> tokenize
tokenize -- "POST /analyze" --> presidio
presidio -- "typed findings" --> tokenize
tokenize -- "write {token,type,value,session}" --> vault
tokenize -- "3 deidentified_prompt (CUST_*)" --> runtime
runtime -- "4 tools/call get_customer_activity_summary(CUST_*)" --> gateway
gateway -- "5 invoke (SigV4)" --> rag
rag -- "6 resolve token" --> vault
rag -- "read record" --> customers
rag -- "7 evidence package (token-keyed, no PII)" --> runtime
runtime -- "talking points (tokens only)" --> fusion
fusion -- "8 {session_id, text}" --> restore
restore -- "lookup session tokens" --> vault
restore -- "final: (客戶:王小明)…" --> fusion
fusion -- "{final, deidentified_prompt, agent_tokenized}" --> ui
ui -- "split view: restored vs tokenized" --> advisor
```