actshield 0.9.0__py3-none-any.whl
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.
- actshield/__init__.py +439 -0
- actshield/__main__.py +46 -0
- actshield/agents/__init__.py +12 -0
- actshield/agents/agent.py +200 -0
- actshield/agents/identity.py +114 -0
- actshield/api/__init__.py +34 -0
- actshield/api/models.py +198 -0
- actshield/api/server.py +669 -0
- actshield/api/service.py +599 -0
- actshield/approval/__init__.py +15 -0
- actshield/approval/approval.py +164 -0
- actshield/cli/__init__.py +8 -0
- actshield/cli/graph.py +49 -0
- actshield/cli/main.py +802 -0
- actshield/cli/shell.py +406 -0
- actshield/cli/theme.py +110 -0
- actshield/client.py +757 -0
- actshield/config.py +88 -0
- actshield/context/__init__.py +14 -0
- actshield/context/context.py +161 -0
- actshield/context/provenance.py +108 -0
- actshield/context/taint.py +48 -0
- actshield/decisions/decision.py +74 -0
- actshield/delegation/__init__.py +11 -0
- actshield/delegation/authority.py +63 -0
- actshield/delegation/delegation.py +180 -0
- actshield/demo.py +139 -0
- actshield/doctor.py +94 -0
- actshield/drift/__init__.py +27 -0
- actshield/drift/drift_engine.py +149 -0
- actshield/drift/drift_models.py +63 -0
- actshield/evaluation/__init__.py +1 -0
- actshield/evaluation/cases/__init__.py +1 -0
- actshield/evaluation/eval_suite.py +254 -0
- actshield/forensics/__init__.py +53 -0
- actshield/forensics/access_graph.py +216 -0
- actshield/forensics/authority_graph.py +186 -0
- actshield/forensics/delegation_graph.py +119 -0
- actshield/forensics/explanation.py +254 -0
- actshield/forensics/models.py +488 -0
- actshield/forensics/queries.py +367 -0
- actshield/forensics/serializers.py +68 -0
- actshield/forensics/service.py +310 -0
- actshield/forensics/snapshots.py +174 -0
- actshield/gates/__init__.py +13 -0
- actshield/gates/gate_models.py +46 -0
- actshield/gates/security_gate.py +191 -0
- actshield/gateway/__init__.py +13 -0
- actshield/gateway/http.py +191 -0
- actshield/gateway/mcp.py +292 -0
- actshield/incidents/__init__.py +25 -0
- actshield/incidents/incident.py +94 -0
- actshield/incidents/incident_engine.py +163 -0
- actshield/incidents/incident_rules.py +116 -0
- actshield/incidents/incident_state.py +58 -0
- actshield/integrations/__init__.py +24 -0
- actshield/integrations/ai_secura.py +169 -0
- actshield/integrations/ai_secura_analysis.py +236 -0
- actshield/integrations/apiris.py +122 -0
- actshield/integrations/few_shot.py +104 -0
- actshield/integrations/ollama_adapter.py +538 -0
- actshield/integrations/prompts/__init__.py +1 -0
- actshield/integrations/prompts/examples/__init__.py +1 -0
- actshield/integrations/security_packet.py +82 -0
- actshield/llm_config.py +89 -0
- actshield/offensive/__init__.py +95 -0
- actshield/offensive/adaptive/__init__.py +22 -0
- actshield/offensive/adaptive/adaptive_engine.py +165 -0
- actshield/offensive/adaptive/attack_selector.py +51 -0
- actshield/offensive/adaptive/boundary_search.py +99 -0
- actshield/offensive/adaptive/campaign_memory.py +123 -0
- actshield/offensive/adaptive/feedback.py +84 -0
- actshield/offensive/adaptive/mutation_planner.py +57 -0
- actshield/offensive/attack.py +78 -0
- actshield/offensive/campaign.py +219 -0
- actshield/offensive/corpus.py +155 -0
- actshield/offensive/engine.py +466 -0
- actshield/offensive/evaluator.py +116 -0
- actshield/offensive/evidence.py +63 -0
- actshield/offensive/generator.py +128 -0
- actshield/offensive/mutation.py +101 -0
- actshield/offensive/results.py +77 -0
- actshield/offensive/safety.py +80 -0
- actshield/offensive/strategies/__init__.py +22 -0
- actshield/offensive/strategies/authority_escalation.py +100 -0
- actshield/offensive/strategies/base.py +34 -0
- actshield/offensive/strategies/context_manipulation.py +100 -0
- actshield/offensive/strategies/data_exfiltration.py +100 -0
- actshield/offensive/strategies/delegation_attacks.py +100 -0
- actshield/offensive/strategies/mcp_attacks.py +100 -0
- actshield/offensive/strategies/prompt_injection.py +100 -0
- actshield/offensive/strategies/tool_poisoning.py +100 -0
- actshield/offensive/target.py +113 -0
- actshield/offensive/vulnerable_target.py +121 -0
- actshield/persistence/__init__.py +18 -0
- actshield/persistence/siem.py +102 -0
- actshield/persistence/storage.py +240 -0
- actshield/policy/__init__.py +12 -0
- actshield/policy/evaluator.py +294 -0
- actshield/policy/intent.py +113 -0
- actshield/policy/policy.py +48 -0
- actshield/posture/__init__.py +26 -0
- actshield/posture/posture_engine.py +186 -0
- actshield/posture/posture_models.py +152 -0
- actshield/posture/posture_rules.py +137 -0
- actshield/providers/__init__.py +32 -0
- actshield/providers/anthropic_provider.py +146 -0
- actshield/providers/base.py +160 -0
- actshield/providers/gemini_provider.py +133 -0
- actshield/providers/null_provider.py +40 -0
- actshield/providers/ollama_provider.py +135 -0
- actshield/providers/openai_provider.py +142 -0
- actshield/providers/registry.py +244 -0
- actshield/py.typed +0 -0
- actshield/response/__init__.py +14 -0
- actshield/response/response_actions.py +39 -0
- actshield/response/response_audit.py +32 -0
- actshield/response/response_engine.py +139 -0
- actshield/risk/models.py +104 -0
- actshield/serve.py +117 -0
- actshield/static/404.html +1 -0
- actshield/static/__next.__PAGE__.txt +24 -0
- actshield/static/__next._full.txt +20 -0
- actshield/static/__next._tree.txt +4 -0
- actshield/static/_next/static/Yp_swxN-C9UoCRNOwkYnY/_buildManifest.js +11 -0
- actshield/static/_next/static/Yp_swxN-C9UoCRNOwkYnY/_clientMiddlewareManifest.js +1 -0
- actshield/static/_next/static/Yp_swxN-C9UoCRNOwkYnY/_ssgManifest.js +1 -0
- actshield/static/_next/static/chunks/09kny2eqjc2or.js +1 -0
- actshield/static/_next/static/chunks/0c1zba1u9whdp.js +1 -0
- actshield/static/_next/static/chunks/0cz1d0mv5g_q7.js +1 -0
- actshield/static/_next/static/chunks/0dbjjeg01x25o.js +1 -0
- actshield/static/_next/static/chunks/0duobs55ne238.js +1 -0
- actshield/static/_next/static/chunks/0iaz41l6068e4.js +1 -0
- actshield/static/_next/static/chunks/0mjhyv72x2idp.js +1 -0
- actshield/static/_next/static/chunks/0nelpqfu_ciq6.js +1 -0
- actshield/static/_next/static/chunks/0p1bci9ch797v.js +1 -0
- actshield/static/_next/static/chunks/0tld_ygho5tgm.js +1 -0
- actshield/static/_next/static/chunks/0w1-y7oni66j9.js +1 -0
- actshield/static/_next/static/chunks/10537zyl427zj.js +1 -0
- actshield/static/_next/static/chunks/11pc_jkl3aggn.js +1 -0
- actshield/static/_next/static/chunks/16k7nw0b3t8ys.js +1 -0
- actshield/static/_next/static/chunks/19mx3mg6lkumu.js +1 -0
- actshield/static/_next/static/chunks/1_8p47b-kxg2a.js +1 -0
- actshield/static/_next/static/chunks/1dszjozwfqegx.js +1 -0
- actshield/static/_next/static/chunks/1h43jcb90-m2r.js +22 -0
- actshield/static/_next/static/chunks/1ly04cvt_wh_j.js +1 -0
- actshield/static/_next/static/chunks/1odxrypuwuwp_.js +1 -0
- actshield/static/_next/static/chunks/1oes4c35qz5ku.js +1 -0
- actshield/static/_next/static/chunks/1ow883jl4ln-r.js +16 -0
- actshield/static/_next/static/chunks/1po7bna1as8tc.js +1 -0
- actshield/static/_next/static/chunks/1rsh0og8ifkzx.js +1 -0
- actshield/static/_next/static/chunks/1v0lwzv-859z_.js +1 -0
- actshield/static/_next/static/chunks/25iat2epwx25a.js +1 -0
- actshield/static/_next/static/chunks/25uvt4s2f39a4.js +1 -0
- actshield/static/_next/static/chunks/27t_qfc-3_lzs.js +1 -0
- actshield/static/_next/static/chunks/28bkmy8mez7gm.js +1 -0
- actshield/static/_next/static/chunks/2b6brmw_drw1p.js +1 -0
- actshield/static/_next/static/chunks/2fnhtxi4j6vge.js +1 -0
- actshield/static/_next/static/chunks/2p087eftxemg4.js +6 -0
- actshield/static/_next/static/chunks/2s8pao_z8pgtq.js +1 -0
- actshield/static/_next/static/chunks/2yj7ooc2c-zpg.js +1 -0
- actshield/static/_next/static/chunks/3-mrrr8udt5tk.js +1 -0
- actshield/static/_next/static/chunks/310vm2bl3xxpt.js +31 -0
- actshield/static/_next/static/chunks/35mvsv251jx1r.css +3 -0
- actshield/static/_next/static/chunks/370vf0oetlsx9.js +1 -0
- actshield/static/_next/static/chunks/3e-2m72tyo556.js +1 -0
- actshield/static/_next/static/chunks/3fntmmi971322.js +1 -0
- actshield/static/_next/static/chunks/3fzw-g0hycl2c.js +1 -0
- actshield/static/_next/static/chunks/3lopq3lhmcjxg.js +129 -0
- actshield/static/_next/static/chunks/3mpe2jejel0v2.css +1 -0
- actshield/static/_next/static/chunks/3t8o4f2lzr2sf.js +1 -0
- actshield/static/_next/static/chunks/3y-v1neyllne5.js +1 -0
- actshield/static/_next/static/chunks/43oiwy8mx6cs1.js +1 -0
- actshield/static/_next/static/chunks/turbopack-23wzuebcy_lxm.js +1 -0
- actshield/static/_next/static/media/1bffadaabf893a1e-s.3-6t-g6q0vh0a.woff2 +0 -0
- actshield/static/_next/static/media/2bbe8d2671613f1f-s.0k62hbripvv8p.woff2 +0 -0
- actshield/static/_next/static/media/2c55a0e60120577a-s.0-dom-5bn10r2.woff2 +0 -0
- actshield/static/_next/static/media/5476f68d60460930-s.2uwcyprjm3xu3.woff2 +0 -0
- actshield/static/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2 +0 -0
- actshield/static/_next/static/media/9c72aa0f40e4eef8-s.1y4-pdgsjb-pw.woff2 +0 -0
- actshield/static/_next/static/media/ad66f9afd8947f86-s.3lvt2whj97whp.woff2 +0 -0
- actshield/static/_next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- actshield/static/_not-found/__next._full.txt +17 -0
- actshield/static/_not-found/__next._not-found/__PAGE__.txt +23 -0
- actshield/static/_not-found/__next._tree.txt +3 -0
- actshield/static/_not-found.html +1 -0
- actshield/static/_not-found.txt +17 -0
- actshield/static/access/matrix/__next._full.txt +24 -0
- actshield/static/access/matrix/__next._tree.txt +4 -0
- actshield/static/access/matrix/__next.access/matrix/__PAGE__.txt +30 -0
- actshield/static/access/matrix.html +1 -0
- actshield/static/access/matrix.txt +24 -0
- actshield/static/activity/__next._full.txt +22 -0
- actshield/static/activity/__next._tree.txt +4 -0
- actshield/static/activity/__next.activity/__PAGE__.txt +27 -0
- actshield/static/activity.html +1 -0
- actshield/static/activity.txt +22 -0
- actshield/static/agents/__next._full.txt +22 -0
- actshield/static/agents/__next._tree.txt +4 -0
- actshield/static/agents/__next.agents/__PAGE__.txt +27 -0
- actshield/static/agents.html +1 -0
- actshield/static/agents.txt +22 -0
- actshield/static/ai-secura/__next._full.txt +22 -0
- actshield/static/ai-secura/__next._tree.txt +4 -0
- actshield/static/ai-secura/__next.ai-secura/__PAGE__.txt +27 -0
- actshield/static/ai-secura.html +1 -0
- actshield/static/ai-secura.txt +22 -0
- actshield/static/api/__next._full.txt +22 -0
- actshield/static/api/__next._tree.txt +4 -0
- actshield/static/api/__next.api/__PAGE__.txt +27 -0
- actshield/static/api.html +15 -0
- actshield/static/api.txt +22 -0
- actshield/static/apiris/__next._full.txt +22 -0
- actshield/static/apiris/__next._tree.txt +4 -0
- actshield/static/apiris/__next.apiris/__PAGE__.txt +27 -0
- actshield/static/apiris.html +1 -0
- actshield/static/apiris.txt +22 -0
- actshield/static/attack-graph/__next._full.txt +23 -0
- actshield/static/attack-graph/__next._tree.txt +5 -0
- actshield/static/attack-graph/__next.attack-graph/__PAGE__.txt +28 -0
- actshield/static/attack-graph.html +2 -0
- actshield/static/attack-graph.txt +23 -0
- actshield/static/campaigns/__next._full.txt +22 -0
- actshield/static/campaigns/__next._tree.txt +4 -0
- actshield/static/campaigns/__next.campaigns/__PAGE__.txt +27 -0
- actshield/static/campaigns.html +1 -0
- actshield/static/campaigns.txt +22 -0
- actshield/static/context/__next._full.txt +22 -0
- actshield/static/context/__next._tree.txt +4 -0
- actshield/static/context/__next.context/__PAGE__.txt +27 -0
- actshield/static/context.html +1 -0
- actshield/static/context.txt +22 -0
- actshield/static/dashboard/__next._full.txt +22 -0
- actshield/static/dashboard/__next._tree.txt +4 -0
- actshield/static/dashboard/__next.dashboard/__PAGE__.txt +27 -0
- actshield/static/dashboard.html +1 -0
- actshield/static/dashboard.txt +22 -0
- actshield/static/delegations/__next._full.txt +22 -0
- actshield/static/delegations/__next._tree.txt +4 -0
- actshield/static/delegations/__next.delegations/__PAGE__.txt +27 -0
- actshield/static/delegations.html +1 -0
- actshield/static/delegations.txt +22 -0
- actshield/static/demo/__next._full.txt +22 -0
- actshield/static/demo/__next._tree.txt +4 -0
- actshield/static/demo/__next.demo/__PAGE__.txt +27 -0
- actshield/static/demo.html +1 -0
- actshield/static/demo.txt +22 -0
- actshield/static/drift/__next._full.txt +22 -0
- actshield/static/drift/__next._tree.txt +4 -0
- actshield/static/drift/__next.drift/__PAGE__.txt +27 -0
- actshield/static/drift.html +1 -0
- actshield/static/drift.txt +22 -0
- actshield/static/favicon.ico +0 -0
- actshield/static/file.svg +1 -0
- actshield/static/forensics/__next._full.txt +22 -0
- actshield/static/forensics/__next._tree.txt +4 -0
- actshield/static/forensics/__next.forensics/__PAGE__.txt +27 -0
- actshield/static/forensics.html +1 -0
- actshield/static/forensics.txt +22 -0
- actshield/static/globe.svg +1 -0
- actshield/static/incidents/__next._full.txt +22 -0
- actshield/static/incidents/__next._tree.txt +4 -0
- actshield/static/incidents/__next.incidents/__PAGE__.txt +27 -0
- actshield/static/incidents.html +1 -0
- actshield/static/incidents.txt +22 -0
- actshield/static/index.html +3 -0
- actshield/static/index.txt +20 -0
- actshield/static/logo.png +0 -0
- actshield/static/metrics/__next._full.txt +22 -0
- actshield/static/metrics/__next._tree.txt +4 -0
- actshield/static/metrics/__next.metrics/__PAGE__.txt +27 -0
- actshield/static/metrics.html +1 -0
- actshield/static/metrics.txt +22 -0
- actshield/static/next.svg +1 -0
- actshield/static/offensive/__next._full.txt +22 -0
- actshield/static/offensive/__next._tree.txt +4 -0
- actshield/static/offensive/__next.offensive/__PAGE__.txt +27 -0
- actshield/static/offensive.html +1 -0
- actshield/static/offensive.txt +22 -0
- actshield/static/policies/__next._full.txt +22 -0
- actshield/static/policies/__next._tree.txt +4 -0
- actshield/static/policies/__next.policies/__PAGE__.txt +27 -0
- actshield/static/policies.html +1 -0
- actshield/static/policies.txt +22 -0
- actshield/static/posture/__next._full.txt +22 -0
- actshield/static/posture/__next._tree.txt +4 -0
- actshield/static/posture/__next.posture/__PAGE__.txt +27 -0
- actshield/static/posture.html +1 -0
- actshield/static/posture.txt +22 -0
- actshield/static/regressions/__next._full.txt +22 -0
- actshield/static/regressions/__next._tree.txt +4 -0
- actshield/static/regressions/__next.regressions/__PAGE__.txt +27 -0
- actshield/static/regressions.html +1 -0
- actshield/static/regressions.txt +22 -0
- actshield/static/reports/__next._full.txt +22 -0
- actshield/static/reports/__next._tree.txt +4 -0
- actshield/static/reports/__next.reports/__PAGE__.txt +27 -0
- actshield/static/reports.html +1 -0
- actshield/static/reports.txt +22 -0
- actshield/static/resources/__next._full.txt +22 -0
- actshield/static/resources/__next._tree.txt +4 -0
- actshield/static/resources/__next.resources/__PAGE__.txt +27 -0
- actshield/static/resources.html +1 -0
- actshield/static/resources.txt +22 -0
- actshield/static/security-gates/__next._full.txt +22 -0
- actshield/static/security-gates/__next._tree.txt +4 -0
- actshield/static/security-gates/__next.security-gates/__PAGE__.txt +27 -0
- actshield/static/security-gates.html +1 -0
- actshield/static/security-gates.txt +22 -0
- actshield/static/settings/__next._full.txt +22 -0
- actshield/static/settings/__next._tree.txt +4 -0
- actshield/static/settings/__next.settings/__PAGE__.txt +27 -0
- actshield/static/settings.html +1 -0
- actshield/static/settings.txt +22 -0
- actshield/static/tasks/__next._full.txt +22 -0
- actshield/static/tasks/__next._tree.txt +4 -0
- actshield/static/tasks/__next.tasks/__PAGE__.txt +27 -0
- actshield/static/tasks.html +1 -0
- actshield/static/tasks.txt +22 -0
- actshield/static/threats/__next._full.txt +22 -0
- actshield/static/threats/__next._tree.txt +4 -0
- actshield/static/threats/__next.threats/__PAGE__.txt +27 -0
- actshield/static/threats.html +1 -0
- actshield/static/threats.txt +22 -0
- actshield/static/tools/__next._full.txt +22 -0
- actshield/static/tools/__next._tree.txt +4 -0
- actshield/static/tools/__next.tools/__PAGE__.txt +27 -0
- actshield/static/tools.html +1 -0
- actshield/static/tools.txt +22 -0
- actshield/static/traces/__next._full.txt +22 -0
- actshield/static/traces/__next._tree.txt +4 -0
- actshield/static/traces/__next.traces/__PAGE__.txt +27 -0
- actshield/static/traces.html +1 -0
- actshield/static/traces.txt +22 -0
- actshield/static/vercel.svg +1 -0
- actshield/static/window.svg +1 -0
- actshield/tasks/__init__.py +6 -0
- actshield/tasks/task.py +143 -0
- actshield/threatmodel/__init__.py +70 -0
- actshield/threatmodel/actors.py +210 -0
- actshield/threatmodel/analyzer.py +131 -0
- actshield/threatmodel/assets.py +167 -0
- actshield/threatmodel/boundaries.py +165 -0
- actshield/threatmodel/exporters.py +49 -0
- actshield/threatmodel/mitigations.py +209 -0
- actshield/threatmodel/models.py +80 -0
- actshield/threatmodel/report.py +341 -0
- actshield/threatmodel/scenarios.py +212 -0
- actshield/threatmodel/scoring.py +66 -0
- actshield/threatmodel/threats.py +387 -0
- actshield/tools/__init__.py +20 -0
- actshield/tools/interceptor.py +256 -0
- actshield/tools/tool.py +71 -0
- actshield/tracing/__init__.py +38 -0
- actshield/tracing/correlation.py +173 -0
- actshield/tracing/events.py +75 -0
- actshield/tracing/tracer.py +305 -0
- actshield/watch.py +129 -0
- actshield-0.9.0.dist-info/METADATA +57 -0
- actshield-0.9.0.dist-info/RECORD +366 -0
- actshield-0.9.0.dist-info/WHEEL +5 -0
- actshield-0.9.0.dist-info/entry_points.txt +4 -0
- actshield-0.9.0.dist-info/top_level.txt +2 -0
- agentguard/__init__.py +39 -0
- agentguard/__main__.py +8 -0
- agentguard/py.typed +1 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""ActShield Response Orchestration Package (Phase 9)."""
|
|
2
|
+
|
|
3
|
+
from actshield.response.response_actions import ResponseActionRecord, ResponseActionType
|
|
4
|
+
from actshield.response.response_audit import AuthorityChangeEvent
|
|
5
|
+
from actshield.response.response_engine import ResponseEngine
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"ResponseActionRecord",
|
|
9
|
+
"ResponseActionType",
|
|
10
|
+
"AuthorityChangeEvent",
|
|
11
|
+
"ResponseEngine",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""Response action models for ActShield Phase 9."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from enum import Enum
|
|
6
|
+
from typing import Any, Dict, List, Optional
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
from actshield.tracing.correlation import generate_id
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ResponseActionType(str, Enum):
|
|
13
|
+
"""Supported containment and response actions (Safe-by-default)."""
|
|
14
|
+
BLOCK_ACTION = "BLOCK_ACTION"
|
|
15
|
+
REQUIRE_HITL = "REQUIRE_HITL"
|
|
16
|
+
QUARANTINE_CONTEXT = "QUARANTINE_CONTEXT"
|
|
17
|
+
REVOKE_DELEGATION = "REVOKE_DELEGATION"
|
|
18
|
+
RESTRICT_AGENT = "RESTRICT_AGENT"
|
|
19
|
+
TRIGGER_SNAPSHOT = "TRIGGER_SNAPSHOT"
|
|
20
|
+
CREATE_REGRESSION = "CREATE_REGRESSION"
|
|
21
|
+
TRIGGER_REPLAY = "TRIGGER_REPLAY"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ResponseActionRecord(BaseModel):
|
|
25
|
+
"""Record of an executed containment or response action."""
|
|
26
|
+
action_id: str = Field(default_factory=lambda: generate_id("act"))
|
|
27
|
+
action_type: ResponseActionType
|
|
28
|
+
target_entity: str = Field(..., description="Agent ID, context ID, or delegation ID")
|
|
29
|
+
reason: str
|
|
30
|
+
status: str = Field(default="EXECUTED")
|
|
31
|
+
details: Dict[str, Any] = Field(default_factory=dict)
|
|
32
|
+
executed_at: str
|
|
33
|
+
|
|
34
|
+
@property
|
|
35
|
+
def target_id(self) -> str:
|
|
36
|
+
return self.target_entity
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Auditable records of dynamic authority modifications and containment responses."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import datetime, timezone
|
|
6
|
+
from typing import Any, Dict, List, Optional
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
from actshield.tracing.correlation import generate_id
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class AuthorityChangeEvent(BaseModel):
|
|
13
|
+
"""Auditable delta of an agent's authority modification."""
|
|
14
|
+
change_id: str = Field(default_factory=lambda: generate_id("auth_chg"))
|
|
15
|
+
agent_id: str
|
|
16
|
+
trigger_reason: str
|
|
17
|
+
before_capabilities: List[str]
|
|
18
|
+
after_capabilities: List[str]
|
|
19
|
+
restricted_capabilities: List[str] = Field(default_factory=list)
|
|
20
|
+
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
|
21
|
+
is_reversible: bool = True
|
|
22
|
+
metadata: Dict[str, Any] = Field(default_factory=dict)
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def revoked_capabilities(self) -> List[str]:
|
|
26
|
+
return self.restricted_capabilities
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def restored_capabilities(self) -> List[str]:
|
|
30
|
+
return self.after_capabilities
|
|
31
|
+
|
|
32
|
+
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""Response orchestration engine and dynamic authority containment for ActShield Phase 9."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import datetime, timezone
|
|
6
|
+
from typing import Any, Dict, List, Optional
|
|
7
|
+
|
|
8
|
+
from actshield.response.response_actions import ResponseActionRecord, ResponseActionType
|
|
9
|
+
from actshield.response.response_audit import AuthorityChangeEvent
|
|
10
|
+
from actshield.tracing.correlation import generate_id
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ResponseEngine:
|
|
14
|
+
"""Orchestrates safe, non-destructive response actions and dynamic authority containment."""
|
|
15
|
+
|
|
16
|
+
def __init__(self, guard: Optional[Any] = None) -> None:
|
|
17
|
+
self.guard = guard
|
|
18
|
+
self.action_history: List[ResponseActionRecord] = []
|
|
19
|
+
self.authority_audit_log: List[AuthorityChangeEvent] = []
|
|
20
|
+
self.quarantined_contexts: set[str] = set()
|
|
21
|
+
self.restricted_agents: Dict[str, List[str]] = {} # agent_id -> list of restricted capabilities
|
|
22
|
+
|
|
23
|
+
def block_action(self, target: str, reason: str, details: Optional[Dict[str, Any]] = None) -> ResponseActionRecord:
|
|
24
|
+
"""Enforce deterministic action block."""
|
|
25
|
+
rec = ResponseActionRecord(
|
|
26
|
+
action_type=ResponseActionType.BLOCK_ACTION,
|
|
27
|
+
target_entity=target,
|
|
28
|
+
reason=reason,
|
|
29
|
+
details=details or {},
|
|
30
|
+
executed_at=datetime.now(timezone.utc).isoformat(),
|
|
31
|
+
)
|
|
32
|
+
self.action_history.append(rec)
|
|
33
|
+
return rec
|
|
34
|
+
|
|
35
|
+
def quarantine_context(self, context_id: str, reason: str = "Tainted context quarantine", actor: str = "system") -> ResponseActionRecord:
|
|
36
|
+
"""Isolate a tainted context object from flowing to downstream agents."""
|
|
37
|
+
self.quarantined_contexts.add(context_id)
|
|
38
|
+
rec = ResponseActionRecord(
|
|
39
|
+
action_type=ResponseActionType.QUARANTINE_CONTEXT,
|
|
40
|
+
target_entity=context_id,
|
|
41
|
+
reason=reason,
|
|
42
|
+
details={"status": "QUARANTINED", "actor": actor},
|
|
43
|
+
executed_at=datetime.now(timezone.utc).isoformat(),
|
|
44
|
+
)
|
|
45
|
+
self.action_history.append(rec)
|
|
46
|
+
return rec
|
|
47
|
+
|
|
48
|
+
def restrict_agent_authority(
|
|
49
|
+
self,
|
|
50
|
+
agent_id: str,
|
|
51
|
+
current_capabilities: List[str],
|
|
52
|
+
capabilities_to_restrict: List[str],
|
|
53
|
+
reason: str,
|
|
54
|
+
) -> AuthorityChangeEvent:
|
|
55
|
+
"""
|
|
56
|
+
Dynamically restrict specific capabilities for an agent after a security incident.
|
|
57
|
+
Creates an immutable, auditable before/after authority record.
|
|
58
|
+
"""
|
|
59
|
+
after_caps = [c for c in current_capabilities if c not in capabilities_to_restrict]
|
|
60
|
+
self.restricted_agents[agent_id] = capabilities_to_restrict
|
|
61
|
+
|
|
62
|
+
audit_event = AuthorityChangeEvent(
|
|
63
|
+
agent_id=agent_id,
|
|
64
|
+
trigger_reason=reason,
|
|
65
|
+
before_capabilities=current_capabilities,
|
|
66
|
+
after_capabilities=after_caps,
|
|
67
|
+
restricted_capabilities=capabilities_to_restrict,
|
|
68
|
+
)
|
|
69
|
+
self.authority_audit_log.append(audit_event)
|
|
70
|
+
|
|
71
|
+
rec = ResponseActionRecord(
|
|
72
|
+
action_type=ResponseActionType.RESTRICT_AGENT,
|
|
73
|
+
target_entity=agent_id,
|
|
74
|
+
reason=reason,
|
|
75
|
+
details={
|
|
76
|
+
"before": current_capabilities,
|
|
77
|
+
"after": after_caps,
|
|
78
|
+
"restricted": capabilities_to_restrict,
|
|
79
|
+
},
|
|
80
|
+
executed_at=datetime.now(timezone.utc).isoformat(),
|
|
81
|
+
)
|
|
82
|
+
self.action_history.append(rec)
|
|
83
|
+
return audit_event
|
|
84
|
+
|
|
85
|
+
def restrict_authority(
|
|
86
|
+
self,
|
|
87
|
+
agent_id: str,
|
|
88
|
+
restricted_capabilities: List[str],
|
|
89
|
+
actor: str = "system",
|
|
90
|
+
reason: str = "Containment restriction",
|
|
91
|
+
previous_capabilities: Optional[List[str]] = None,
|
|
92
|
+
) -> AuthorityChangeEvent:
|
|
93
|
+
"""Convenience wrapper for restricting authority during incident response."""
|
|
94
|
+
prev = previous_capabilities if previous_capabilities is not None else restricted_capabilities
|
|
95
|
+
return self.restrict_agent_authority(
|
|
96
|
+
agent_id=agent_id,
|
|
97
|
+
current_capabilities=prev,
|
|
98
|
+
capabilities_to_restrict=restricted_capabilities,
|
|
99
|
+
reason=f"[{actor}] {reason}",
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
def restore_agent_authority(self, agent_id: str, restored_capabilities: List[str]) -> AuthorityChangeEvent:
|
|
103
|
+
"""Revert temporary capability restrictions after remediation."""
|
|
104
|
+
current_restricted = self.restricted_agents.get(agent_id, [])
|
|
105
|
+
new_restricted = [c for c in current_restricted if c not in restored_capabilities]
|
|
106
|
+
self.restricted_agents[agent_id] = new_restricted
|
|
107
|
+
|
|
108
|
+
audit_event = AuthorityChangeEvent(
|
|
109
|
+
agent_id=agent_id,
|
|
110
|
+
trigger_reason="Remediation verified — authority restored",
|
|
111
|
+
before_capabilities=new_restricted,
|
|
112
|
+
after_capabilities=restored_capabilities,
|
|
113
|
+
restricted_capabilities=[],
|
|
114
|
+
)
|
|
115
|
+
self.authority_audit_log.append(audit_event)
|
|
116
|
+
return audit_event
|
|
117
|
+
|
|
118
|
+
def restore_authority(
|
|
119
|
+
self,
|
|
120
|
+
agent_id: str,
|
|
121
|
+
restored_capabilities: List[str],
|
|
122
|
+
actor: str = "system",
|
|
123
|
+
reason: str = "Authority restored",
|
|
124
|
+
current_capabilities: Optional[List[str]] = None,
|
|
125
|
+
) -> AuthorityChangeEvent:
|
|
126
|
+
"""Convenience wrapper for restoring authority after incident remediation."""
|
|
127
|
+
return self.restore_agent_authority(
|
|
128
|
+
agent_id=agent_id,
|
|
129
|
+
restored_capabilities=restored_capabilities,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
def list_actions(self) -> List[ResponseActionRecord]:
|
|
133
|
+
return list(self.action_history)
|
|
134
|
+
|
|
135
|
+
def list_authority_changes(self) -> List[AuthorityChangeEvent]:
|
|
136
|
+
return list(self.authority_audit_log)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
actshield/risk/models.py
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Risk signals and explainable deterministic risk assessment models."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from typing import Any, Dict, List, Optional
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
from actshield.tracing.correlation import generate_id
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class RiskLevel(str, Enum):
|
|
11
|
+
"""Standardized risk severity levels."""
|
|
12
|
+
LOW = "LOW"
|
|
13
|
+
MEDIUM = "MEDIUM"
|
|
14
|
+
HIGH = "HIGH"
|
|
15
|
+
CRITICAL = "CRITICAL"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class RiskSignal(BaseModel):
|
|
19
|
+
"""An individual risk indicator emitted by policy, taint tracker, APIRIS, or AI Secura."""
|
|
20
|
+
signal_id: str = Field(default_factory=lambda: generate_id("rsig"))
|
|
21
|
+
source: str = Field(..., description="Component emitting the signal (e.g., 'taint_tracker', 'apiris', 'ai_secura', 'policy')")
|
|
22
|
+
risk_level: RiskLevel = Field(default=RiskLevel.LOW)
|
|
23
|
+
score: float = Field(default=0.0, ge=0.0, le=1.0, description="Normalized risk score from 0.0 (safe) to 1.0 (dangerous)")
|
|
24
|
+
indicator: str = Field(..., description="Short identifier of the risk condition")
|
|
25
|
+
details: Dict[str, Any] = Field(default_factory=dict, description="Contextual details and evidence")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class RiskFactorBreakdown(BaseModel):
|
|
29
|
+
"""Explainable deterministic factor breakdown contributing to total risk score."""
|
|
30
|
+
tainted_context_score: float = Field(default=0.0, description="Risk from active tainted/injected context (e.g. +0.25)")
|
|
31
|
+
critical_sink_score: float = Field(default=0.0, description="Risk from target tool/resource sensitivity level (e.g. +0.25)")
|
|
32
|
+
authority_violation_score: float = Field(default=0.0, description="Risk from delegation authority escalation (e.g. +0.25)")
|
|
33
|
+
intent_violation_score: float = Field(default=0.0, description="Risk from divergence from original user intent (e.g. +0.15)")
|
|
34
|
+
untrusted_origin_score: float = Field(default=0.0, description="Risk from external unverified origin (e.g. +0.10)")
|
|
35
|
+
total_score: float = Field(default=0.0, ge=0.0, le=1.0)
|
|
36
|
+
risk_factors: List[str] = Field(default_factory=list)
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def compute(
|
|
40
|
+
cls,
|
|
41
|
+
has_tainted_context: bool,
|
|
42
|
+
is_critical_sink: bool,
|
|
43
|
+
has_authority_violation: bool,
|
|
44
|
+
has_intent_violation: bool,
|
|
45
|
+
is_untrusted_origin: bool,
|
|
46
|
+
) -> "RiskFactorBreakdown":
|
|
47
|
+
factors: List[str] = []
|
|
48
|
+
taint_s = 0.25 if has_tainted_context else 0.0
|
|
49
|
+
if has_tainted_context:
|
|
50
|
+
factors.append("tainted_context")
|
|
51
|
+
|
|
52
|
+
crit_s = 0.25 if is_critical_sink else 0.0
|
|
53
|
+
if is_critical_sink:
|
|
54
|
+
factors.append("critical_resource_sink")
|
|
55
|
+
|
|
56
|
+
auth_s = 0.25 if has_authority_violation else 0.0
|
|
57
|
+
if has_authority_violation:
|
|
58
|
+
factors.append("authority_escalation_violation")
|
|
59
|
+
|
|
60
|
+
intent_s = 0.15 if has_intent_violation else 0.0
|
|
61
|
+
if has_intent_violation:
|
|
62
|
+
factors.append("user_intent_drift_violation")
|
|
63
|
+
|
|
64
|
+
untrusted_s = 0.10 if is_untrusted_origin else 0.0
|
|
65
|
+
if is_untrusted_origin:
|
|
66
|
+
factors.append("external_untrusted_source_origin")
|
|
67
|
+
|
|
68
|
+
total = min(1.0, taint_s + crit_s + auth_s + intent_s + untrusted_s)
|
|
69
|
+
|
|
70
|
+
return cls(
|
|
71
|
+
tainted_context_score=taint_s,
|
|
72
|
+
critical_sink_score=crit_s,
|
|
73
|
+
authority_violation_score=auth_s,
|
|
74
|
+
intent_violation_score=intent_s,
|
|
75
|
+
untrusted_origin_score=untrusted_s,
|
|
76
|
+
total_score=round(total, 2),
|
|
77
|
+
risk_factors=factors,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class RiskAssessment(BaseModel):
|
|
82
|
+
"""Aggregated risk assessment for an action or tool invocation."""
|
|
83
|
+
overall_level: RiskLevel = Field(default=RiskLevel.LOW)
|
|
84
|
+
overall_score: float = Field(default=0.0, ge=0.0, le=1.0)
|
|
85
|
+
signals: List[RiskSignal] = Field(default_factory=list)
|
|
86
|
+
breakdown: Optional[RiskFactorBreakdown] = None
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def from_signals(cls, signals: List[RiskSignal], breakdown: Optional[RiskFactorBreakdown] = None) -> "RiskAssessment":
|
|
90
|
+
if not signals and not breakdown:
|
|
91
|
+
return cls(overall_level=RiskLevel.LOW, overall_score=0.0, signals=[], breakdown=breakdown)
|
|
92
|
+
|
|
93
|
+
max_score = breakdown.total_score if breakdown else max((s.score for s in signals), default=0.0)
|
|
94
|
+
if max_score >= 0.7:
|
|
95
|
+
level = RiskLevel.CRITICAL
|
|
96
|
+
elif max_score >= 0.45:
|
|
97
|
+
level = RiskLevel.HIGH
|
|
98
|
+
elif max_score >= 0.2:
|
|
99
|
+
level = RiskLevel.MEDIUM
|
|
100
|
+
else:
|
|
101
|
+
level = RiskLevel.LOW
|
|
102
|
+
|
|
103
|
+
return cls(overall_level=level, overall_score=max_score, signals=signals, breakdown=breakdown)
|
|
104
|
+
|
actshield/serve.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ActShield Dashboard & Control Plane Server Launcher
|
|
3
|
+
=====================================================
|
|
4
|
+
Starts the unified control plane service (FastAPI API + Embedded Dashboard).
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
import pathlib
|
|
10
|
+
import sys
|
|
11
|
+
import time
|
|
12
|
+
import urllib.request
|
|
13
|
+
import webbrowser
|
|
14
|
+
from typing import Optional
|
|
15
|
+
|
|
16
|
+
from rich.console import Console
|
|
17
|
+
from rich.panel import Panel
|
|
18
|
+
from rich.table import Table
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def is_port_open(port: int, host: str = "127.0.0.1", timeout: float = 0.5) -> bool:
|
|
22
|
+
"""Check if HTTP service is responding on port."""
|
|
23
|
+
try:
|
|
24
|
+
url = f"http://{host}:{port}/api/v1/health"
|
|
25
|
+
req = urllib.request.Request(url, headers={"User-Agent": "AgentGuardHealth"})
|
|
26
|
+
with urllib.request.urlopen(req, timeout=timeout):
|
|
27
|
+
return True
|
|
28
|
+
except Exception:
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def serve_dashboard(
|
|
33
|
+
port: int = 8000,
|
|
34
|
+
api_port: Optional[int] = None,
|
|
35
|
+
open_browser: bool = True,
|
|
36
|
+
host: str = "127.0.0.1",
|
|
37
|
+
dev_mode: bool = False,
|
|
38
|
+
) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Start the unified ActShield Control Plane server.
|
|
41
|
+
Serves:
|
|
42
|
+
- / → Embedded Dashboard UI
|
|
43
|
+
- /api/v1/* → FastAPI Backend API
|
|
44
|
+
- /docs → OpenAPI Swagger UI
|
|
45
|
+
- /redoc → ReDoc UI
|
|
46
|
+
"""
|
|
47
|
+
console = Console()
|
|
48
|
+
repo_root = pathlib.Path(__file__).resolve().parents[2]
|
|
49
|
+
dashboard_dir = repo_root / "dashboard"
|
|
50
|
+
target_port = api_port or port
|
|
51
|
+
|
|
52
|
+
console.print(
|
|
53
|
+
Panel.fit(
|
|
54
|
+
f"[bold cyan]🛡️ ActShield / AgentGuard CONTROL PLANE[/bold cyan]\n"
|
|
55
|
+
f"[dim]Serving unified dashboard and API on [bold]http://{host}:{target_port}[/bold][/dim]",
|
|
56
|
+
border_style="cyan",
|
|
57
|
+
)
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
if dev_mode and dashboard_dir.exists():
|
|
61
|
+
import subprocess
|
|
62
|
+
console.print("[yellow]→ Dev Mode: Starting separate backend and Next.js dev server...[/yellow]")
|
|
63
|
+
api_env = os.environ.copy()
|
|
64
|
+
api_env["PYTHONPATH"] = str(repo_root / "sdk")
|
|
65
|
+
api_proc = subprocess.Popen(
|
|
66
|
+
[sys.executable, "-m", "uvicorn", "actshield.api.server:app", "--host", host, "--port", str(target_port), "--reload"],
|
|
67
|
+
env=api_env,
|
|
68
|
+
cwd=str(repo_root),
|
|
69
|
+
)
|
|
70
|
+
npm_cmd = "npm.cmd" if os.name == "nt" else "npm"
|
|
71
|
+
dash_proc = subprocess.Popen(
|
|
72
|
+
[npm_cmd, "run", "dev", "--", "-p", "3000"],
|
|
73
|
+
cwd=str(dashboard_dir),
|
|
74
|
+
shell=(os.name == "nt"),
|
|
75
|
+
)
|
|
76
|
+
try:
|
|
77
|
+
time.sleep(2)
|
|
78
|
+
if open_browser:
|
|
79
|
+
webbrowser.open("http://localhost:3000")
|
|
80
|
+
while True:
|
|
81
|
+
time.sleep(1)
|
|
82
|
+
if api_proc.poll() is not None or dash_proc.poll() is not None:
|
|
83
|
+
break
|
|
84
|
+
except KeyboardInterrupt:
|
|
85
|
+
pass
|
|
86
|
+
finally:
|
|
87
|
+
api_proc.terminate()
|
|
88
|
+
dash_proc.terminate()
|
|
89
|
+
return
|
|
90
|
+
|
|
91
|
+
# Production Embedded Server Mode (Zero Node.js/npm required)
|
|
92
|
+
table = Table(title="[bold green]✓ ActShield Control Plane Active[/bold green]", expand=False)
|
|
93
|
+
table.add_column("Component", style="bold cyan")
|
|
94
|
+
table.add_column("Endpoint URL", style="bright_white")
|
|
95
|
+
table.add_column("Status", style="bold green")
|
|
96
|
+
|
|
97
|
+
table.add_row("Dashboard UI", f"http://{host}:{target_port}/", "ONLINE")
|
|
98
|
+
table.add_row("API Overview", f"http://{host}:{target_port}/api/v1/overview", "ONLINE")
|
|
99
|
+
table.add_row("Swagger Docs", f"http://{host}:{target_port}/docs", "ONLINE")
|
|
100
|
+
table.add_row("ReDoc", f"http://{host}:{target_port}/redoc", "ONLINE")
|
|
101
|
+
|
|
102
|
+
console.print(table)
|
|
103
|
+
console.print(f"\n[dim]Running on http://{host}:{target_port}. Press [bold red]Ctrl+C[/bold red] to stop.[/dim]\n")
|
|
104
|
+
|
|
105
|
+
if open_browser:
|
|
106
|
+
try:
|
|
107
|
+
webbrowser.open(f"http://{host}:{target_port}")
|
|
108
|
+
except Exception:
|
|
109
|
+
pass
|
|
110
|
+
|
|
111
|
+
import uvicorn
|
|
112
|
+
from actshield.api.server import app
|
|
113
|
+
|
|
114
|
+
uvicorn.run(app, host=host, port=target_port, log_level="warning")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en" class="inter_6750fec-module__y2_5qG__variable h-full"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/35mvsv251jx1r.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/310vm2bl3xxpt.js"/><script src="/_next/static/chunks/19mx3mg6lkumu.js" async=""></script><script src="/_next/static/chunks/27t_qfc-3_lzs.js" async=""></script><script src="/_next/static/chunks/1h43jcb90-m2r.js" async=""></script><script src="/_next/static/chunks/turbopack-23wzuebcy_lxm.js" async=""></script><script src="/_next/static/chunks/3fntmmi971322.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&display=swap" as="style"/><meta name="robots" content="noindex"/><title>ActShield — Security Control Plane for Autonomous AI</title><meta name="description" content="ActShield provides identity, authority containment, context provenance, deterministic policy enforcement, threat modeling, and forensic investigation for autonomous and multi-agent AI systems."/><meta name="keywords" content="AI security,agent security,multi-agent security,MCP security,policy enforcement,LLM security,threat modeling,agentic AI"/><meta name="robots" content="noindex, nofollow"/><link rel="icon" href="/favicon.ico?favicon.2vob68tjqpejf.ico" sizes="256x256" type="image/x-icon"/><meta name="next-size-adjust" content=""/><link rel="preconnect" href="https://fonts.googleapis.com"/><title>404: This page could not be found.</title><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet"/><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="min-h-full antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/310vm2bl3xxpt.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/35mvsv251jx1r.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500\u0026display=swap\",\"style\"]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/35mvsv251jx1r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3fntmmi971322.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"inter_6750fec-module__y2_5qG__variable h-full\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"min-h-full antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/35mvsv251jx1r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Yp_swxN-C9UoCRNOwkYnY\"}\n7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:I[27201,[\"/_next/static/chunks/3fntmmi971322.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"ActShield — Security Control Plane for Autonomous AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"ActShield provides identity, authority containment, context provenance, deterministic policy enforcement, threat modeling, and forensic investigation for autonomous and multi-agent AI systems.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"AI security,agent security,multi-agent security,MCP security,policy enforcement,LLM security,threat modeling,agentic AI\"}],[\"$\",\"meta\",\"3\",{\"name\":\"robots\",\"content\":\"noindex, nofollow\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.2vob68tjqpejf.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Ld\",\"5\",{}]]\n"])</script></body></html>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[47257,["/_next/static/chunks/3fntmmi971322.js"],"ClientPageRoot"]
|
|
3
|
+
3:I[52683,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/28bkmy8mez7gm.js"],"default"]
|
|
4
|
+
6:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"OutletBoundary"]
|
|
5
|
+
7:"$Sreact.suspense"
|
|
6
|
+
b:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"ViewportBoundary"]
|
|
7
|
+
c:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"MetadataBoundary"]
|
|
8
|
+
d:I[27201,["/_next/static/chunks/3fntmmi971322.js"],"IconMark"]
|
|
9
|
+
f:I[39756,["/_next/static/chunks/3fntmmi971322.js"],"default"]
|
|
10
|
+
10:I[37457,["/_next/static/chunks/3fntmmi971322.js"],"default"]
|
|
11
|
+
:HL["/_next/static/chunks/35mvsv251jx1r.css","style"]
|
|
12
|
+
:HL["https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&display=swap","style"]
|
|
13
|
+
a:X
|
|
14
|
+
0:{"buildId":"Yp_swxN-C9UoCRNOwkYnY","data":[{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/28bkmy8mez7gm.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":"$@9","staleTime":"$a","varyParams":null},{"rsc":["$","$1","h",{"children":[null,["$","$Lb",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$7",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"ActShield — Security Control Plane for Autonomous AI"}],["$","meta","1",{"name":"description","content":"ActShield provides identity, authority containment, context provenance, deterministic policy enforcement, threat modeling, and forensic investigation for autonomous and multi-agent AI systems."}],["$","meta","2",{"name":"keywords","content":"AI security,agent security,multi-agent security,MCP security,policy enforcement,LLM security,threat modeling,agentic AI"}],["$","meta","3",{"name":"robots","content":"noindex, nofollow"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.2vob68tjqpejf.ico","sizes":"256x256","type":"image/x-icon"}],["$","$Ld","5",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":"$@e","staleTime":"$a","varyParams":null},{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/35mvsv251jx1r.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/3fntmmi971322.js","async":true}]],["$","html",null,{"lang":"en","className":"inter_6750fec-module__y2_5qG__variable h-full","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&display=swap","rel":"stylesheet"}]]}],["$","body",null,{"className":"min-h-full antialiased","children":["$","$Lf",null,{"parallelRouterKey":"children","template":["$","$L10",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}],"isPartial":"$@11","staleTime":"$a","varyParams":null}],"isUpgradeableISRFallback":false,"a":"$@12","rootVaryParams":null,"needsRuntimeRequest":"$@13"}
|
|
15
|
+
4:{}
|
|
16
|
+
5:"$0:data:0:rsc:props:children:0:props:serverProvidedParams:params"
|
|
17
|
+
8:null
|
|
18
|
+
a:300
|
|
19
|
+
13:true
|
|
20
|
+
a:C
|
|
21
|
+
12:0
|
|
22
|
+
e:"$undefined"
|
|
23
|
+
11:"$undefined"
|
|
24
|
+
9:"$undefined"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[39756,["/_next/static/chunks/3fntmmi971322.js"],"default"]
|
|
3
|
+
3:I[37457,["/_next/static/chunks/3fntmmi971322.js"],"default"]
|
|
4
|
+
4:I[47257,["/_next/static/chunks/3fntmmi971322.js"],"ClientPageRoot"]
|
|
5
|
+
5:I[52683,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/28bkmy8mez7gm.js"],"default"]
|
|
6
|
+
8:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"OutletBoundary"]
|
|
7
|
+
9:"$Sreact.suspense"
|
|
8
|
+
b:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"ViewportBoundary"]
|
|
9
|
+
d:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"MetadataBoundary"]
|
|
10
|
+
f:I[68027,["/_next/static/chunks/3fntmmi971322.js"],"default",1]
|
|
11
|
+
:HL["/_next/static/chunks/35mvsv251jx1r.css","style"]
|
|
12
|
+
:HL["/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
13
|
+
:HL["https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&display=swap","style"]
|
|
14
|
+
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/35mvsv251jx1r.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/3fntmmi971322.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"inter_6750fec-module__y2_5qG__variable h-full","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&display=swap","rel":"stylesheet"}]]}],["$","body",null,{"className":"min-h-full antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/28bkmy8mez7gm.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/35mvsv251jx1r.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"Yp_swxN-C9UoCRNOwkYnY"}
|
|
15
|
+
6:{}
|
|
16
|
+
7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
17
|
+
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
18
|
+
10:I[27201,["/_next/static/chunks/3fntmmi971322.js"],"IconMark"]
|
|
19
|
+
a:null
|
|
20
|
+
e:[["$","title","0",{"children":"ActShield — Security Control Plane for Autonomous AI"}],["$","meta","1",{"name":"description","content":"ActShield provides identity, authority containment, context provenance, deterministic policy enforcement, threat modeling, and forensic investigation for autonomous and multi-agent AI systems."}],["$","meta","2",{"name":"keywords","content":"AI security,agent security,multi-agent security,MCP security,policy enforcement,LLM security,threat modeling,agentic AI"}],["$","meta","3",{"name":"robots","content":"noindex, nofollow"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.2vob68tjqpejf.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L10","5",{}]]
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
:HL["/_next/static/chunks/35mvsv251jx1r.css","style"]
|
|
2
|
+
:HL["/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
3
|
+
:HL["https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&display=swap","style"]
|
|
4
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":4176,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}},"staleTime":300,"buildId":"Yp_swxN-C9UoCRNOwkYnY"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__MIDDLEWARE_MATCHERS = [];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,63676,e=>{"use strict";var t=e.i(56420);let s={name:"x",size:24,node:[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]};s.node;let a=(0,t.default)(s);e.s(["X",0,a],63676)},96500,e=>{"use strict";var t=e.i(43476),s=e.i(71645),a=e.i(56420);let l={name:"git-branch",size:24,node:[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]]};l.node;let r=(0,a.default)(l);var n=e.i(37757),i=e.i(68442),d=e.i(72854),o=e.i(32471),c=e.i(49744),x=e.i(3469);let m=[{trace_id:"trc_pinj_001",name:"Prompt Injection → Data Exfil Attempt",agent_id:"orchestrator_v2",task_id:"task_002",started_at:"2026-09-19T09:11:00Z",duration_ms:847,decision:"BLOCK",spans:[{span_id:"sp_001",name:"receive_user_message",duration_ms:12,taint:"LOW",decision:"ALLOW"},{span_id:"sp_002",name:"call_external_mcp_tool",duration_ms:234,taint:"CRITICAL",decision:"BLOCK",flags:["PROMPT_INJECTION"]},{span_id:"sp_003",name:"attempt_upload_s3",duration_ms:0,taint:"CRITICAL",decision:"BLOCK",flags:["BLOCKED_BY_POLICY"]}],causal_explanation:"External MCP tool injected malicious instruction. Orchestrator attempted to upload PII to external S3. Both tool call and upload were deterministically blocked."},{trace_id:"trc_auth_esc_001",name:"Authority Escalation Attempt",agent_id:"escalation_agent",task_id:"task_004",started_at:"2026-09-19T10:30:00Z",duration_ms:312,decision:"BLOCK",spans:[{span_id:"sp_011",name:"receive_task",duration_ms:8,taint:"LOW",decision:"ALLOW"},{span_id:"sp_012",name:"delegation_check",duration_ms:45,taint:"LOW",decision:"BLOCK",flags:["AUTHORITY_EXCEEDED"]},{span_id:"sp_013",name:"attempt_send_email",duration_ms:0,taint:"HIGH",decision:"BLOCK",flags:["BLOCKED_BY_POLICY"]}],causal_explanation:"Agent requested email_api and export_pii capabilities beyond its delegated authority. Delegation containment check failed."},{trace_id:"trc_q3_analysis",name:"Q3 Financial Analysis (Clean)",agent_id:"orchestrator_v2",task_id:"task_001",started_at:"2026-09-19T08:00:00Z",duration_ms:3320,decision:"ALLOW",spans:[{span_id:"sp_021",name:"read_file:q3_financials",duration_ms:45,taint:"LOW",decision:"ALLOW"},{span_id:"sp_022",name:"delegate_to:analyst_agent",duration_ms:12,taint:"LOW",decision:"ALLOW"},{span_id:"sp_023",name:"generate_summary",duration_ms:2800,taint:"LOW",decision:"ALLOW"},{span_id:"sp_024",name:"write_report",duration_ms:120,taint:"LOW",decision:"ALLOW"}],causal_explanation:"Clean task execution within delegated authority. All tools permitted. No taint propagation."}];e.s(["default",0,function(){let[e,a]=(0,s.useState)(""),[l,p]=(0,s.useState)("ALL"),[u,b]=(0,s.useState)(null),h=m.filter(e=>"BLOCK"===e.decision).length,g=m.filter(e=>"ALLOW"===e.decision).length,f=m.filter(t=>{let s=t.name.toLowerCase().includes(e.toLowerCase())||t.agent_id.toLowerCase().includes(e.toLowerCase())||t.trace_id.toLowerCase().includes(e.toLowerCase())||t.task_id.toLowerCase().includes(e.toLowerCase()),a="ALL"===l||t.decision===l;return s&&a}),j=[{key:"name",header:"Trace Name & ID",render:e=>(0,t.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,t.jsx)("div",{className:"w-7 h-7 rounded bg-slate-100 flex items-center justify-center text-slate-600 border border-slate-200",children:(0,t.jsx)(r,{size:13})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"font-semibold text-xs text-slate-900",children:e.name}),(0,t.jsx)("div",{className:"font-mono text-[10px] text-slate-500",children:e.trace_id})]})]})},{key:"agent_id",header:"Acting Agent",width:"160px",render:e=>(0,t.jsx)("span",{className:"font-mono text-xs text-blue-700 bg-blue-50 px-2 py-0.5 rounded border border-blue-200",children:e.agent_id})},{key:"spans",header:"Spans Timeline",render:e=>(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[e.spans.map(e=>(0,t.jsx)("div",{title:`${e.name} (${e.decision})`,className:`h-2 rounded-xs transition-all ${"BLOCK"===e.decision?"bg-red-500 w-6":"HITL"===e.decision?"bg-amber-500 w-6":"bg-emerald-500 w-4"}`},e.span_id)),(0,t.jsxs)("span",{className:"font-mono text-[10px] text-slate-500 ml-1.5",children:[e.spans.length," spans"]})]})},{key:"duration_ms",header:"Duration",width:"110px",render:e=>(0,t.jsxs)("span",{className:"font-mono text-xs text-slate-600",children:[e.duration_ms," ms"]})},{key:"decision",header:"Verdict",width:"120px",render:e=>(0,t.jsx)(d.StatusBadge,{status:e.decision})}];return(0,t.jsxs)("div",{className:"p-8 space-y-6 max-w-7xl mx-auto",children:[(0,t.jsx)(n.PageHeader,{title:"Execution Traces",subtitle:"End-to-end causal execution traces with span-level decision evidence and taint timelines",badge:"Trace Explorer"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[(0,t.jsx)(i.MetricCard,{label:"Total Traces",value:m.length}),(0,t.jsx)(i.MetricCard,{label:"Blocked Invocations",value:h,status:"BLOCK"}),(0,t.jsx)(i.MetricCard,{label:"Clean Executions",value:g,status:"ALLOW"}),(0,t.jsx)(i.MetricCard,{label:"Mean Latency",value:"1.42 ms"})]}),(0,t.jsxs)("div",{className:"bg-white border border-slate-200 rounded-lg p-5 shadow-xs space-y-4",children:[(0,t.jsx)(o.FilterBar,{searchQuery:e,onSearchChange:a,searchPlaceholder:"Search traces by name, ID, or agent...",filters:[{key:"decision",label:"Verdict",options:[{label:"All Verdicts",value:"ALL"},{label:"Block",value:"BLOCK"},{label:"Allow",value:"ALLOW"},{label:"HITL",value:"HITL"}],value:l,onChange:p}],activeCount:"ALL"!==l||e?1:0,onReset:()=>{a(""),p("ALL")}}),(0,t.jsx)(c.DataTable,{columns:j,data:f,keyField:"trace_id",onRowClick:e=>b(e),emptyMessage:"No traces matched your filter criteria."})]}),(0,t.jsx)(x.DetailDrawer,{isOpen:!!u,onClose:()=>b(null),title:u?u.name:"",subtitle:u?`Trace ID: ${u.trace_id} • Agent: ${u.agent_id}`:"",badge:u?(0,t.jsx)(d.StatusBadge,{status:u.decision}):null,children:u&&(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"p-3.5 bg-slate-50 border border-slate-200 rounded-lg space-y-1.5",children:[(0,t.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-slate-500",children:"Causal Explanation"}),(0,t.jsx)("p",{className:"text-xs text-slate-800 leading-relaxed",children:u.causal_explanation})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-slate-500 mb-2",children:"Execution Spans Sequence"}),(0,t.jsx)("div",{className:"space-y-2",children:u.spans.map((e,s)=>(0,t.jsxs)("div",{className:"p-3 bg-white border border-slate-200 rounded-lg flex items-center justify-between text-xs",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,t.jsxs)("span",{className:"font-mono text-[10px] text-slate-400",children:["#",s+1]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"font-mono font-semibold text-slate-900",children:e.name}),(0,t.jsxs)("div",{className:"text-[10px] text-slate-500 font-mono",children:[e.duration_ms," ms • Taint: ",e.taint]})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[e.flags?.map(e=>(0,t.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-red-50 text-red-700 border border-red-200 font-mono",children:e},e)),(0,t.jsx)(d.StatusBadge,{status:e.decision})]})]},e.span_id))})]})]})})]})}],96500)},49744,e=>{"use strict";var t=e.i(43476),s=e.i(71645),a=e.i(56420);let l={name:"chevron-left",size:24,node:[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]};l.node;let r=(0,a.default)(l);var n=e.i(67927);let i={name:"inbox",size:24,node:[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]};i.node;let d=(0,a.default)(i);e.s(["DataTable",0,function({columns:e,data:a,keyExtractor:l,keyField:i,onRowClick:o,selectedKey:c,emptyMessage:x="No records found",emptySubtext:m="Try adjusting your filters or search query.",pageSize:p=15,isLoading:u=!1}){let[b,h]=s.default.useState(1),g=Math.max(1,Math.ceil(a.length/p)),f=a.slice((b-1)*p,b*p);return s.default.useEffect(()=>{h(1)},[a.length]),(0,t.jsxs)("div",{className:"bg-white border border-slate-200 rounded-lg shadow-sm overflow-hidden flex flex-col",children:[(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)("table",{className:"w-full text-left border-collapse text-xs",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{className:"bg-slate-50 border-b border-slate-200",children:e.map(e=>(0,t.jsx)("th",{style:{width:e.width},className:`px-3.5 py-2.5 font-semibold text-slate-600 uppercase tracking-wider text-[10px] ${"right"===e.align?"text-right":"center"===e.align?"text-center":"text-left"}`,children:e.header},e.key))})}),(0,t.jsx)("tbody",{className:"divide-y divide-slate-100",children:u?(0,t.jsx)("tr",{children:(0,t.jsxs)("td",{colSpan:e.length,className:"py-12 text-center text-slate-400",children:[(0,t.jsx)("div",{className:"inline-block animate-spin rounded-full h-5 w-5 border-2 border-slate-300 border-t-sky-600 mb-2"}),(0,t.jsx)("div",{className:"text-xs",children:"Loading telemetry records…"})]})}):0===f.length?(0,t.jsx)("tr",{children:(0,t.jsxs)("td",{colSpan:e.length,className:"py-12 text-center",children:[(0,t.jsx)(d,{size:28,className:"mx-auto text-slate-300 mb-2"}),(0,t.jsx)("div",{className:"text-sm font-semibold text-slate-700",children:x}),(0,t.jsx)("div",{className:"text-xs text-slate-400 mt-0.5",children:m})]})}):f.map((s,a)=>{let r=l?l(s,a):i&&s[i]?String(s[i]):String(s.id||s.key||a),n=c===r;return(0,t.jsx)("tr",{onClick:()=>o&&o(s),className:`transition-colors ${n?"bg-sky-50/80 font-medium":"hover:bg-slate-50/80"} ${o?"cursor-pointer":""}`,children:e.map(e=>{let l=s[e.key],r=e.render?e.render(s,a):l;return(0,t.jsx)("td",{className:`px-3.5 py-2.5 text-slate-700 ${e.mono?"font-mono text-[11px]":""} ${"right"===e.align?"text-right":"center"===e.align?"text-center":"text-left"}`,children:r},e.key)})},r)})})]})}),a.length>p&&(0,t.jsxs)("div",{className:"px-4 py-2.5 border-t border-slate-200 bg-slate-50 flex items-center justify-between text-xs text-slate-500",children:[(0,t.jsxs)("div",{children:["Showing ",(0,t.jsx)("span",{className:"font-medium text-slate-800",children:(b-1)*p+1})," to"," ",(0,t.jsx)("span",{className:"font-medium text-slate-800",children:Math.min(b*p,a.length)})," ","of ",(0,t.jsx)("span",{className:"font-medium text-slate-800",children:a.length})," records"]}),(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsx)("button",{onClick:()=>h(e=>Math.max(1,e-1)),disabled:1===b,className:"p-1 rounded border border-slate-200 bg-white text-slate-600 disabled:opacity-40 disabled:cursor-not-allowed hover:bg-slate-50 transition-colors",children:(0,t.jsx)(r,{size:14})}),(0,t.jsxs)("span",{className:"px-2 font-mono text-[11px]",children:[b," / ",g]}),(0,t.jsx)("button",{onClick:()=>h(e=>Math.min(g,e+1)),disabled:b===g,className:"p-1 rounded border border-slate-200 bg-white text-slate-600 disabled:opacity-40 disabled:cursor-not-allowed hover:bg-slate-50 transition-colors",children:(0,t.jsx)(n.ChevronRight,{size:14})})]})]})]})}],49744)},3469,e=>{"use strict";var t=e.i(43476),s=e.i(63676);e.s(["DetailDrawer",0,function({isOpen:e,onClose:a,title:l,subtitle:r,badge:n,children:i,footer:d,width:o="w-full md:w-[480px]"}){return e?(0,t.jsxs)("div",{className:"fixed inset-y-0 right-0 z-50 flex",children:[(0,t.jsx)("div",{className:"fixed inset-0 bg-slate-900/20 backdrop-blur-[1px] transition-opacity",onClick:a}),(0,t.jsxs)("div",{className:`relative ${o} bg-white shadow-2xl border-l border-slate-200 flex flex-col h-full z-10 transition-transform`,children:[(0,t.jsxs)("div",{className:"px-5 py-4 border-b border-slate-200 flex items-start justify-between gap-3 bg-slate-50/50",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("h2",{className:"text-base font-semibold text-slate-900 truncate",children:l}),n]}),r&&(0,t.jsx)("p",{className:"text-xs text-slate-500 font-mono mt-0.5 truncate",children:r})]}),(0,t.jsx)("button",{onClick:a,className:"p-1 rounded-md text-slate-400 hover:text-slate-700 hover:bg-slate-100 transition-colors",children:(0,t.jsx)(s.X,{size:18})})]}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto p-5 space-y-5 text-sm text-slate-700",children:i}),d&&(0,t.jsx)("div",{className:"px-5 py-3 border-t border-slate-200 bg-slate-50 flex items-center justify-end gap-2",children:d})]})]}):null}])},32471,e=>{"use strict";var t=e.i(43476),s=e.i(66595),a=e.i(95925);e.s(["FilterBar",0,function({searchQuery:e,onSearchChange:l,searchPlaceholder:r="Search records…",dropdowns:n,filters:i,onReset:d,activeCount:o,totalCount:c,actions:x}){let m=i||n;return(0,t.jsxs)("div",{className:"bg-white border border-slate-200 rounded-lg p-3 mb-4 shadow-sm flex flex-col md:flex-row md:items-center justify-between gap-3",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2.5 flex-1",children:[l&&(0,t.jsxs)("div",{className:"relative flex-1 min-w-[200px] max-w-sm",children:[(0,t.jsx)(s.Search,{size:14,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-slate-400"}),(0,t.jsx)("input",{type:"text",value:e??"",onChange:e=>l(e.target.value),placeholder:r,className:"w-full pl-8 pr-3 py-1.5 text-xs bg-slate-50 border border-slate-200 rounded-md text-slate-800 placeholder:text-slate-400 focus:bg-white focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500 transition-all"})]}),m&&m.map(e=>(0,t.jsx)("div",{className:"flex items-center gap-1.5",children:(0,t.jsx)("select",{value:e.value,onChange:t=>e.onChange(t.target.value),className:"text-xs bg-slate-50 border border-slate-200 rounded-md px-2.5 py-1.5 text-slate-700 font-medium focus:bg-white focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500 transition-all cursor-pointer",children:e.options.map(e=>(0,t.jsx)("option",{value:e.value,children:e.label},e.value))})},e.key||e.name||e.label)),d&&(0,t.jsxs)("button",{onClick:d,className:"flex items-center gap-1 text-xs text-slate-500 hover:text-slate-800 px-2 py-1.5 rounded hover:bg-slate-100 transition-colors",title:"Reset Filters",children:[(0,t.jsx)(a.RotateCcw,{size:12}),(0,t.jsx)("span",{children:"Reset"})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3 self-end md:self-auto text-xs text-slate-500",children:[void 0!==c&&(0,t.jsx)("span",{className:"font-mono text-slate-600",children:void 0!==o&&o!==c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("strong",{className:"text-slate-900",children:o})," of ",c]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("strong",{className:"text-slate-900",children:c})," total"]})}),x]})]})}])},68442,e=>{"use strict";var t=e.i(43476);e.s(["MetricCard",0,function({label:e,value:s,subtext:a,trend:l,status:r="neutral",icon:n,badge:i}){return(0,t.jsxs)("div",{className:`bg-white rounded-lg border border-slate-200 p-4 shadow-sm ${{healthy:"border-l-4 border-l-emerald-500",warning:"border-l-4 border-l-amber-500",critical:"border-l-4 border-l-red-500",neutral:"border-l-4 border-l-slate-300"}["ALLOW"===r||"MONITOR"===r||"healthy"===r?"healthy":"HITL"===r||"warning"===r?"warning":"BLOCK"===r||"critical"===r?"critical":"neutral"]} flex flex-col justify-between`,children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 mb-2",children:[(0,t.jsx)("span",{className:"text-[11px] font-medium tracking-wider uppercase text-slate-500",children:e}),n&&(0,t.jsx)(n,{size:16,className:"text-slate-400"}),i&&(0,t.jsx)("span",{className:"text-[10px] font-semibold px-1.5 py-0.5 rounded bg-slate-100 text-slate-700",children:i})]}),(0,t.jsxs)("div",{className:"flex items-baseline justify-between gap-2 mt-1",children:[(0,t.jsx)("div",{className:"text-2xl font-bold tracking-tight text-slate-900 font-mono",children:s}),l&&(0,t.jsx)("span",{className:`text-xs font-medium ${l.isNeutral?"text-slate-500":l.isPositive?"text-emerald-700":"text-red-700"}`,children:l.value})]}),a&&(0,t.jsx)("div",{className:"mt-2 text-xs text-slate-500 truncate",children:a})]})}])},37757,e=>{"use strict";var t=e.i(43476),s=e.i(71645),a=e.i(22016),l=e.i(67927);e.s(["PageHeader",0,function({title:e,description:r,subtitle:n,breadcrumbs:i,actions:d,badge:o}){let c=r||n;return(0,t.jsxs)("div",{className:"mb-6 pb-4 border-b border-slate-200",children:[i&&i.length>0&&(0,t.jsx)("nav",{className:"flex items-center gap-1.5 text-xs text-slate-500 mb-2",children:i.map((e,r)=>{let n=r===i.length-1;return(0,t.jsxs)(s.default.Fragment,{children:[r>0&&(0,t.jsx)(l.ChevronRight,{size:12,className:"text-slate-400"}),e.href&&!n?(0,t.jsx)(a.default,{href:e.href,className:"hover:text-slate-800 transition-colors",children:e.label}):(0,t.jsx)("span",{className:n?"text-slate-900 font-medium":"",children:e.label})]},r)})}),(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,t.jsx)("h1",{className:"text-xl font-semibold text-slate-900 tracking-tight",children:e}),o&&(0,t.jsx)("div",{children:o})]}),c&&(0,t.jsx)("p",{className:"mt-1 text-xs text-slate-500 max-w-3xl leading-relaxed",children:c})]}),d&&(0,t.jsx)("div",{className:"flex items-center gap-2 flex-shrink-0",children:d})]})]})}])},72854,e=>{"use strict";var t=e.i(43476);function s({decision:e,status:a}){let l=(e||a||"").toUpperCase();return"BLOCK"===l||"DENY"===l||"BLOCKED"===l?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-red-50 text-red-700 border border-red-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-red-600"}),"BLOCK"]}):"ALLOW"===l||"ALLOWED"===l?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-emerald-50 text-emerald-700 border border-emerald-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-emerald-600"}),"ALLOW"]}):"HITL"===l||"APPROVAL_REQUIRED"===l?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-amber-50 text-amber-700 border border-amber-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-600"}),"HITL"]}):"MONITOR"===l||"AUDIT"===l?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-blue-50 text-blue-700 border border-blue-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-blue-600"}),"MONITOR"]}):(0,t.jsx)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-slate-100 text-slate-700 border border-slate-200",children:e||a||"UNKNOWN"})}e.s(["DecisionBadge",0,s,"SeverityBadge",0,function({severity:e}){let s=(e||"").toUpperCase();return"CRITICAL"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-red-50 text-red-700 border border-red-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-red-600"}),"CRITICAL"]}):"HIGH"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-orange-50 text-orange-700 border border-orange-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-orange-600"}),"HIGH"]}):"MEDIUM"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-amber-50 text-amber-700 border border-amber-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-600"}),"MEDIUM"]}):"LOW"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-blue-50 text-blue-700 border border-blue-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-blue-600"}),"LOW"]}):(0,t.jsx)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-slate-100 text-slate-600 border border-slate-200",children:e||"INFO"})},"StatusBadge",0,s,"TaintBadge",0,function({taint:e}){let s=(e||"").toUpperCase();return"TAINTED"===s||"CRITICAL"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-semibold bg-red-50 text-red-700 border border-red-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-red-600"}),"TAINTED"]}):"CLEAN"===s||"TRUSTED"===s||"NONE"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-emerald-50 text-emerald-700 border border-emerald-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-emerald-500"}),"CLEAN"]}):(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-amber-50 text-amber-700 border border-amber-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-500"}),e||"UNASSESSED"]})},"TrustBadge",0,function({trust:e}){let s=(e||"").toUpperCase();return"HIGH"===s||"TRUSTED"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-emerald-50 text-emerald-700 border border-emerald-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-emerald-500"}),e]}):"MEDIUM"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-blue-50 text-blue-700 border border-blue-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-blue-500"}),"MEDIUM"]}):"LOW"===s||"UNTRUSTED"===s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-red-50 text-red-700 border border-red-200",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-red-500"}),e]}):(0,t.jsx)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium bg-slate-100 text-slate-700 border border-slate-200",children:e||"UNKNOWN"})}])}]);
|