Created
June 2, 2026 16:31
-
-
Save initcron/a554e2babb3d3228cccc9b6d16126759 to your computer and use it in GitHub Desktop.
Agent Layer with Threats added as Decorators
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "nodes": [ | |
| { | |
| "unique-id": "agent-layer", | |
| "node-type": "system", | |
| "name": "Agent Layer", | |
| "description": "Core reasoning, coordination, and task-execution layer of the multi-agent system." | |
| }, | |
| { | |
| "unique-id": "agent-collaboration-patterns", | |
| "node-type": "system", | |
| "name": "Agent Collaboration Patterns", | |
| "description": "High-level strategies for how agents work together, decompose tasks, and route work." | |
| }, | |
| { | |
| "unique-id": "supervisor-worker", | |
| "node-type": "ai:orchestrator", | |
| "name": "Supervisor / Worker", | |
| "description": "A supervisor agent decomposes a complex task and orchestrates a team of specialized worker agents." | |
| }, | |
| { | |
| "unique-id": "skill-based-routing", | |
| "node-type": "ai:orchestrator", | |
| "name": "Skill Based Routing", | |
| "description": "Routes requests based on required skill to an available agent that possesses that skill." | |
| }, | |
| { | |
| "unique-id": "agent-as-tool", | |
| "node-type": "ai:agent", | |
| "name": "Agent as a Tool", | |
| "description": "Dynamic pattern where one agent invokes another agent as if it were a tool, enabling handoff to specialists." | |
| }, | |
| { | |
| "unique-id": "unified-agent-runtime", | |
| "node-type": "ecosystem", | |
| "name": "Unified Agent Runtime", | |
| "description": "The secure, sandboxed environment where all agentic reasoning and execution occurs." | |
| }, | |
| { | |
| "unique-id": "state-management", | |
| "node-type": "service", | |
| "name": "State Management", | |
| "description": "Manages complete state of a task to enable pause, resume, and handoff capabilities." | |
| }, | |
| { | |
| "unique-id": "secure-execution", | |
| "node-type": "ai:guardrail", | |
| "name": "Secure Execution", | |
| "description": "Intercepts and validates all tool call requests from the agent, handling execution and credentials securely within the sandbox." | |
| }, | |
| { | |
| "unique-id": "collaboration-handoff", | |
| "node-type": "service", | |
| "name": "Collaboration/Handoff", | |
| "description": "Enables stateful collaboration between agents through shared access to memory and state." | |
| }, | |
| { | |
| "unique-id": "adaptive-learning", | |
| "node-type": "ai:eval-monitor", | |
| "name": "Adaptive Learning", | |
| "description": "Generates learning signals based on execution outcomes to refine prompts, adjust agent configurations, or improve tool selection strategies." | |
| }, | |
| { | |
| "unique-id": "workspace-file-system", | |
| "node-type": "data-asset", | |
| "name": "Workspace File System", | |
| "description": "Sandboxed, persistent file system that agents use for reading and writing files, enabling work with large artifacts." | |
| }, | |
| { | |
| "unique-id": "tools-layer", | |
| "node-type": "system", | |
| "name": "Tools Layer", | |
| "description": "A collection of built-in, trusted tools that provide fundamental capabilities to agents." | |
| }, | |
| { | |
| "unique-id": "mcp-client", | |
| "node-type": "ai:tool", | |
| "name": "MCP Client", | |
| "description": "Secure bridge from the runtime to the external MCP Layer for accessing specialized, high-risk or enterprise-specific tools." | |
| }, | |
| { | |
| "unique-id": "shell-tool", | |
| "node-type": "ai:tool", | |
| "name": "Shell Tool", | |
| "description": "Sandboxed shell environment for executing basic commands." | |
| }, | |
| { | |
| "unique-id": "io-tool", | |
| "node-type": "ai:tool", | |
| "name": "I/O Tool", | |
| "description": "Provides capabilities for reading from and writing to the workspace file system." | |
| }, | |
| { | |
| "unique-id": "web-search-tool", | |
| "node-type": "ai:tool", | |
| "name": "Web Search Tool", | |
| "description": "Built-in tool for performing web searches." | |
| }, | |
| { | |
| "unique-id": "short-term-memory", | |
| "node-type": "ai:memory", | |
| "name": "Short Term Memory", | |
| "description": "Manages the immediate context for the agent's reasoning loop." | |
| }, | |
| { | |
| "unique-id": "in-session-context-manager", | |
| "node-type": "service", | |
| "name": "In-Session Context Manager", | |
| "description": "Employs strategies like trimming and summarization to manage context length, cost and latency." | |
| }, | |
| { | |
| "unique-id": "long-term-memory", | |
| "node-type": "ai:memory", | |
| "name": "Long Term Memory", | |
| "description": "Maintains durable information across sessions to provide personalization and continuity." | |
| }, | |
| { | |
| "unique-id": "session-summaries", | |
| "node-type": "data-asset", | |
| "name": "Session Summaries", | |
| "description": "Stores summaries of past interactions for future reference." | |
| }, | |
| { | |
| "unique-id": "user-task-personalization", | |
| "node-type": "data-asset", | |
| "name": "User/Task Personalization", | |
| "description": "Retains user preferences and task-specific information to tailor future interactions." | |
| } | |
| ], | |
| "relationships": [ | |
| { | |
| "unique-id": "rel-agent-layer-contains", | |
| "relationship-type": { | |
| "composed-of": { | |
| "container": "agent-layer", | |
| "nodes": [ | |
| "agent-collaboration-patterns", | |
| "unified-agent-runtime" | |
| ] | |
| } | |
| }, | |
| "description": "Agent Layer contains Agent Collaboration Patterns and Unified Agent Runtime" | |
| }, | |
| { | |
| "unique-id": "rel-acp-contains", | |
| "relationship-type": { | |
| "composed-of": { | |
| "container": "agent-collaboration-patterns", | |
| "nodes": [ | |
| "supervisor-worker", | |
| "skill-based-routing", | |
| "agent-as-tool" | |
| ] | |
| } | |
| }, | |
| "description": "Agent Collaboration Patterns contains collaboration strategy components" | |
| }, | |
| { | |
| "unique-id": "rel-uar-contains", | |
| "relationship-type": { | |
| "composed-of": { | |
| "container": "unified-agent-runtime", | |
| "nodes": [ | |
| "state-management", | |
| "secure-execution", | |
| "collaboration-handoff", | |
| "adaptive-learning", | |
| "workspace-file-system", | |
| "tools-layer", | |
| "short-term-memory", | |
| "long-term-memory" | |
| ] | |
| } | |
| }, | |
| "description": "Unified Agent Runtime contains all runtime components" | |
| }, | |
| { | |
| "unique-id": "rel-tools-contains", | |
| "relationship-type": { | |
| "composed-of": { | |
| "container": "tools-layer", | |
| "nodes": [ | |
| "mcp-client", | |
| "shell-tool", | |
| "io-tool", | |
| "web-search-tool" | |
| ] | |
| } | |
| }, | |
| "description": "Tools Layer contains built-in tool components" | |
| }, | |
| { | |
| "unique-id": "rel-stm-contains", | |
| "relationship-type": { | |
| "composed-of": { | |
| "container": "short-term-memory", | |
| "nodes": [ | |
| "in-session-context-manager" | |
| ] | |
| } | |
| }, | |
| "description": "Short Term Memory contains In-Session Context Manager" | |
| }, | |
| { | |
| "unique-id": "rel-ltm-contains", | |
| "relationship-type": { | |
| "composed-of": { | |
| "container": "long-term-memory", | |
| "nodes": [ | |
| "session-summaries", | |
| "user-task-personalization" | |
| ] | |
| } | |
| }, | |
| "description": "Long Term Memory contains session summaries and personalization" | |
| }, | |
| { | |
| "unique-id": "rel-acp-to-uar", | |
| "relationship-type": { | |
| "connects": { | |
| "source": { | |
| "node": "agent-collaboration-patterns" | |
| }, | |
| "destination": { | |
| "node": "unified-agent-runtime" | |
| } | |
| } | |
| }, | |
| "description": "Agent Collaboration Patterns delegate execution to Unified Agent Runtime" | |
| }, | |
| { | |
| "unique-id": "rel-uar-to-acp", | |
| "relationship-type": { | |
| "connects": { | |
| "source": { | |
| "node": "unified-agent-runtime" | |
| }, | |
| "destination": { | |
| "node": "agent-collaboration-patterns" | |
| } | |
| } | |
| }, | |
| "description": "Unified Agent Runtime returns results to Agent Collaboration Patterns" | |
| } | |
| ], | |
| "decorators": [ | |
| { | |
| "unique-id": "tm-al-collab", | |
| "type": "threat-model", | |
| "target": [ | |
| "/tmp/agent-layer.calm.json" | |
| ], | |
| "applies-to": [ | |
| "agent-collaboration-patterns", | |
| "supervisor-worker", | |
| "skill-based-routing", | |
| "agent-as-tool" | |
| ], | |
| "data": { | |
| "threats": [ | |
| { | |
| "id": "T-AL-01", | |
| "name": "Supervisor Agent Compromise", | |
| "description": "Attackers gain control of supervisor agents in Supervisor/Worker patterns, enabling arbitrary instructions to subordinate workers and control of the entire agent graph.", | |
| "mitigations": "Enforce strict runtime and network isolation for supervisors; apply least privilege beyond coordination tasks; monitor for anomalous instruction patterns.", | |
| "controls": [ | |
| "C11", | |
| "C14", | |
| "C16" | |
| ], | |
| "affected-nodes": [ | |
| "supervisor-worker", | |
| "agent-collaboration-patterns" | |
| ], | |
| "section": "Agent Collaboration Patterns" | |
| }, | |
| { | |
| "id": "T-AL-02", | |
| "name": "Goal Manipulation via Skill Routing", | |
| "description": "Attackers exploit Skills-Based Routing to dispatch sensitive tasks to low-trust or compromised agents.", | |
| "mitigations": "Validate routed agent's declared skills and trust level consistency with task requirements; never route solely on capability without registry verification.", | |
| "controls": [ | |
| "C8", | |
| "C10", | |
| "C15" | |
| ], | |
| "affected-nodes": [ | |
| "skill-based-routing" | |
| ], | |
| "section": "Agent Collaboration Patterns" | |
| }, | |
| { | |
| "id": "T-AL-03", | |
| "name": "Agent-as-a-Tool Abuse", | |
| "description": "Attackers exploit Agent-as-a-Tool patterns causing high-privilege agents to invoke compromised agents as sub-tools, granting access to caller's permissions and context.", | |
| "mitigations": "Require signed Agent Card verification for agent-to-agent invocations; enforce that invoked agent's trust and data domains are strict subsets of invoker's; log all invocations.", | |
| "controls": [ | |
| "C9", | |
| "C16", | |
| "C36" | |
| ], | |
| "affected-nodes": [ | |
| "agent-as-tool", | |
| "agent-collaboration-patterns" | |
| ], | |
| "section": "Agent Collaboration Patterns" | |
| }, | |
| { | |
| "id": "T-AL-04", | |
| "name": "Agent Collusion", | |
| "description": "Two or more compromised agents coordinate to circumvent controls neither could bypass independently.", | |
| "mitigations": "Enforce independent verification paths; monitor for correlated anomalous behavior; periodically audit agent communication graphs for unexpected patterns.", | |
| "controls": [ | |
| "C5", | |
| "C9", | |
| "C16" | |
| ], | |
| "affected-nodes": [ | |
| "agent-collaboration-patterns" | |
| ], | |
| "section": "Agent Collaboration Patterns" | |
| } | |
| ], | |
| "layer": "Agent Layer - Collaboration Patterns", | |
| "framework": "FINOS Multi-Agent Reference Architecture Threat Model", | |
| "version": "Apr 2026" | |
| } | |
| }, | |
| { | |
| "unique-id": "tm-al-runtime", | |
| "type": "threat-model", | |
| "target": [ | |
| "/tmp/agent-layer.calm.json" | |
| ], | |
| "applies-to": [ | |
| "unified-agent-runtime", | |
| "state-management", | |
| "secure-execution", | |
| "collaboration-handoff", | |
| "adaptive-learning", | |
| "workspace-file-system" | |
| ], | |
| "data": { | |
| "threats": [ | |
| { | |
| "id": "T-AL-05", | |
| "name": "Goal Manipulation", | |
| "description": "Attackers manipulate agent goals through crafted input so agents pursue unintended tasks while appearing normal.", | |
| "mitigations": "Validate all external inputs influencing goal state; monitor for behavior deviations; isolate runtimes so compromised agents cannot affect peers.", | |
| "controls": [ | |
| "C1", | |
| "C14", | |
| "C15" | |
| ], | |
| "affected-nodes": [ | |
| "unified-agent-runtime", | |
| "state-management" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-06", | |
| "name": "Indirect Prompt Injection", | |
| "description": "Attackers embed malicious instructions in external data consumed by agents to manipulate reasoning.", | |
| "mitigations": "Sanitize all content before context window entry; treat external content as untrusted; use AI security gateway for tool responses.", | |
| "controls": [ | |
| "C2", | |
| "C14", | |
| "C33" | |
| ], | |
| "affected-nodes": [ | |
| "unified-agent-runtime" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-07", | |
| "name": "Multi-Hop Prompt Injection", | |
| "description": "Successful injection in sub-agents propagates malicious instructions upstream to supervisors, which then propagate to entire agent graphs.", | |
| "mitigations": "Sanitize inter-agent message payloads at receiving agent before admission to reasoning; implement message provenance tracking.", | |
| "controls": [ | |
| "C2", | |
| "C14", | |
| "C16", | |
| "C36" | |
| ], | |
| "affected-nodes": [ | |
| "unified-agent-runtime", | |
| "collaboration-handoff" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-08", | |
| "name": "Excessive Agency and Scope Expansion", | |
| "description": "Agents autonomously expand scope, take irreversible real-world actions, or execute action chains whose cumulative effect was not authorized.", | |
| "mitigations": "Enforce explicit approved action lists; require escalation for unlisted actions; implement checkpoint approval for irreversible actions.", | |
| "controls": [ | |
| "C3", | |
| "C15", | |
| "C26" | |
| ], | |
| "affected-nodes": [ | |
| "unified-agent-runtime", | |
| "secure-execution" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-09", | |
| "name": "Agent Resource Exhaustion", | |
| "description": "Attackers trick agents into executing computationally expensive, long-running, or infinitely recursive tasks exhausting CPU, memory, or time quotas.", | |
| "mitigations": "Implement per-agent resource quotas; enforce maximum iteration counts; monitor consumption in real time; terminate agents exceeding allocation.", | |
| "controls": [ | |
| "C15", | |
| "C22" | |
| ], | |
| "affected-nodes": [ | |
| "unified-agent-runtime" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-10", | |
| "name": "Secrets Exfiltration from Agent Runtime", | |
| "description": "Compromised agents read environment variables, mounted secrets, or accessible credentials and exfiltrate them to attacker endpoints.", | |
| "mitigations": "Never inject credentials as environment variables; use secrets management platform with just-in-time, task-scoped issuance; enforce network egress filtering.", | |
| "controls": [ | |
| "C14", | |
| "C28", | |
| "C29" | |
| ], | |
| "affected-nodes": [ | |
| "secure-execution", | |
| "unified-agent-runtime" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-11", | |
| "name": "Adaptive Learning Poisoning", | |
| "description": "Attackers manipulate execution outcomes or feedback signals to corrupt persistent adaptive learning state, degrading templates and configurations.", | |
| "mitigations": "Treat Adaptive Learning signals as untrusted inputs; require human review for configuration changes exceeding sensitivity thresholds; maintain versioned configuration snapshots.", | |
| "controls": [ | |
| "C9", | |
| "C15", | |
| "C27" | |
| ], | |
| "affected-nodes": [ | |
| "adaptive-learning" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-12", | |
| "name": "Workspace File System Abuse", | |
| "description": "Compromised agents write malicious content to shared Workspace File System subsequently read by other agents or users.", | |
| "mitigations": "Enforce strict write permissions to designated paths only; scan files before other agents access; log operations with full agent attribution.", | |
| "controls": [ | |
| "C8", | |
| "C9", | |
| "C14", | |
| "C19" | |
| ], | |
| "affected-nodes": [ | |
| "workspace-file-system" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-13", | |
| "name": "State Hijacking via Pause and Resume", | |
| "description": "Attackers manipulate serialized task state during pause/handoff so resumed agents operate with attacker-controlled goal state, memory, or credentials.", | |
| "mitigations": "Cryptographically sign and verify all serialized state; validate provenance at resume; reject unverifiable state.", | |
| "controls": [ | |
| "C9", | |
| "C12", | |
| "C20" | |
| ], | |
| "affected-nodes": [ | |
| "state-management", | |
| "collaboration-handoff" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| }, | |
| { | |
| "id": "T-AL-14", | |
| "name": "Inter-Agent Compromise via Shared State", | |
| "description": "Compromised agents attack, manipulate, or exfiltrate data from peer agents by exploiting shared memory, state, or collaboration channels.", | |
| "mitigations": "Enforce strict runtime and network isolation between instances; restrict shared memory access to governed, authenticated mechanisms; monitor channels for anomalies.", | |
| "controls": [ | |
| "C5", | |
| "C11", | |
| "C14" | |
| ], | |
| "affected-nodes": [ | |
| "collaboration-handoff", | |
| "unified-agent-runtime" | |
| ], | |
| "section": "Unified Agent Runtime" | |
| } | |
| ], | |
| "layer": "Agent Layer - Unified Agent Runtime", | |
| "framework": "FINOS Multi-Agent Reference Architecture Threat Model", | |
| "version": "Apr 2026" | |
| } | |
| }, | |
| { | |
| "unique-id": "tm-al-tools", | |
| "type": "threat-model", | |
| "target": [ | |
| "/tmp/agent-layer.calm.json" | |
| ], | |
| "applies-to": [ | |
| "tools-layer", | |
| "mcp-client", | |
| "shell-tool", | |
| "io-tool", | |
| "web-search-tool" | |
| ], | |
| "data": { | |
| "threats": [ | |
| { | |
| "id": "T-AL-15", | |
| "name": "Shell Tool Abuse", | |
| "description": "Compromised agents invoke Shell Tool with attacker-controlled arguments to execute arbitrary commands, write malicious files, or escalate privileges.", | |
| "mitigations": "Sandbox Shell Tool in restricted environment with explicit command allowlist; grant just-in-time, task-scoped permissions; monitor command sequences.", | |
| "controls": [ | |
| "C1", | |
| "C14", | |
| "C17" | |
| ], | |
| "affected-nodes": [ | |
| "shell-tool" | |
| ], | |
| "section": "Tools Layer" | |
| }, | |
| { | |
| "id": "T-AL-16", | |
| "name": "I/O Tool Abuse", | |
| "description": "Compromised agents use I/O Tool to read files outside designated paths, exfiltrate data to workspace, or write malicious content poisoning subsequent reads.", | |
| "mitigations": "Enforce path-scoped read/write permissions; log operations with full attribution; scan written content before other access.", | |
| "controls": [ | |
| "C8", | |
| "C9", | |
| "C14" | |
| ], | |
| "affected-nodes": [ | |
| "io-tool" | |
| ], | |
| "section": "Tools Layer" | |
| }, | |
| { | |
| "id": "T-AL-17", | |
| "name": "Web Search Tool Manipulation", | |
| "description": "Attackers place adversarially crafted content at URLs likely returned by Web Search Tool so agents retrieve and act on attacker-controlled information.", | |
| "mitigations": "Treat web results as untrusted external input; sanitize before context injection; restrict to approved domain allowlist where feasible.", | |
| "controls": [ | |
| "C2", | |
| "C28", | |
| "C33" | |
| ], | |
| "affected-nodes": [ | |
| "web-search-tool" | |
| ], | |
| "section": "Tools Layer" | |
| }, | |
| { | |
| "id": "T-AL-18", | |
| "name": "MCP Client Misuse", | |
| "description": "Compromised agents exploit MCP Client to invoke unauthorized servers or pass sensitive runtime data to attacker-controlled endpoints.", | |
| "mitigations": "Enforce client connection to registered servers only; apply strict parameter schema validation; enforce data minimization.", | |
| "controls": [ | |
| "C28", | |
| "C32", | |
| "C35" | |
| ], | |
| "affected-nodes": [ | |
| "mcp-client" | |
| ], | |
| "section": "Tools Layer" | |
| } | |
| ], | |
| "layer": "Agent Layer - Tools Layer", | |
| "framework": "FINOS Multi-Agent Reference Architecture Threat Model", | |
| "version": "Apr 2026" | |
| } | |
| }, | |
| { | |
| "unique-id": "tm-al-memory", | |
| "type": "threat-model", | |
| "target": [ | |
| "/tmp/agent-layer.calm.json" | |
| ], | |
| "applies-to": [ | |
| "short-term-memory", | |
| "long-term-memory", | |
| "in-session-context-manager", | |
| "session-summaries", | |
| "user-task-personalization" | |
| ], | |
| "data": { | |
| "threats": [ | |
| { | |
| "id": "T-AL-19", | |
| "name": "Context Window Poisoning", | |
| "description": "Attackers inject adversarial content into agent in-session context via tool responses, retrieved documents, or inter-agent messages propagating through summarization.", | |
| "mitigations": "Sanitize all content before context window entry; treat context inputs as untrusted; monitor for manipulation patterns.", | |
| "controls": [ | |
| "C2", | |
| "C14", | |
| "C33" | |
| ], | |
| "affected-nodes": [ | |
| "in-session-context-manager", | |
| "short-term-memory" | |
| ], | |
| "section": "Memory" | |
| }, | |
| { | |
| "id": "T-AL-20", | |
| "name": "Long-Term Memory Poisoning", | |
| "description": "Attackers inject crafted content into session summaries or personalization stores persisting across sessions, biasing future agent behavior.", | |
| "mitigations": "Validate and sanitize before long-term storage; treat writes with knowledge base ingestion scrutiny; maintain versioned, auditable history.", | |
| "controls": [ | |
| "C9", | |
| "C18", | |
| "C34" | |
| ], | |
| "affected-nodes": [ | |
| "long-term-memory", | |
| "session-summaries", | |
| "user-task-personalization" | |
| ], | |
| "section": "Memory" | |
| }, | |
| { | |
| "id": "T-AL-21", | |
| "name": "Cross-Session Memory Leakage", | |
| "description": "Information from one user's or session's interactions stored in personalisation data is retrieved and exposed in subsequent sessions of different users.", | |
| "mitigations": "Cryptographically bind entries to originating user and session; require re-authentication before cross-session reads; enforce strict isolation.", | |
| "controls": [ | |
| "C8", | |
| "C24", | |
| "C34" | |
| ], | |
| "affected-nodes": [ | |
| "long-term-memory", | |
| "user-task-personalization" | |
| ], | |
| "section": "Memory" | |
| } | |
| ], | |
| "layer": "Agent Layer - Memory", | |
| "framework": "FINOS Multi-Agent Reference Architecture Threat Model", | |
| "version": "Apr 2026" | |
| } | |
| }, | |
| { | |
| "unique-id": "aigf-governance-overlay", | |
| "type": "aigf-governance", | |
| "target": [ | |
| "agent-layer.calm.json" | |
| ], | |
| "applies-to": [ | |
| "supervisor-worker", | |
| "skill-based-routing", | |
| "agent-as-tool", | |
| "secure-execution", | |
| "adaptive-learning", | |
| "mcp-client", | |
| "shell-tool", | |
| "io-tool", | |
| "web-search-tool", | |
| "short-term-memory", | |
| "long-term-memory" | |
| ], | |
| "data": { | |
| "framework": "FINOS AI Governance Framework", | |
| "version": "2.0", | |
| "governance-score": 0, | |
| "assessment-date": "2026-06-02" | |
| } | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment