AI Supply Chain
| Field | Value |
|---|---|
| Document ID | ASCEND-GOV-SC-001 |
| Version | 2026.04 |
| Last Updated | April 2026 |
| Author | Ascend Engineering Team |
| Publisher | OW-KAI Technologies Inc. |
| Classification | Enterprise Client Documentation |
| Compliance | EU AI Act Art. 13, NIST MEASURE-2.5, NIST SP 800-161, SOC 2 CC9.2, ISO 27001 A.15 |
Reading Time: 10 minutes | Skill Level: Intermediate
Overview
AI Supply Chain Visibility (FEAT-005) is the inventory + risk surface for every external AI component your organization depends on — models, libraries, datasets, frameworks, tools, and services. Components can be linked to specific agents for impact analysis, and vulnerabilities attach to components so you can answer "if CVE-X hits huggingface/transformers today, which of my agents are affected?"
FEAT-005B adds automated CVE sync (scheduled + on-demand) so the vulnerability surface stays fresh without manual entry.
Data model
Component
| Field | Type | Notes |
|---|---|---|
component_id | string (≤255) | Org-unique identifier |
component_name | string (≤500) | Human-readable |
component_type | enum | model, library, dataset, framework, tool, service |
provider | string (optional) | Vendor |
version | string (optional) | Installed version |
latest_version | string (optional) | Upstream latest (for drift tracking) |
license_type | string (optional) | SPDX or license name |
source_url | string (optional) | Upstream source |
provenance_verified | bool (default false) | Supply-chain provenance status |
risk_level | enum | low, medium, high, critical |
package_name, package_ecosystem | string (optional) | For CVE matching (e.g., transformers on pypi) |
vulnerability_count | int | Auto-maintained on vuln add/resolve |
Vulnerability (attached to a component)
cve_id, advisory_id, title, description, severity (low/medium/high/critical), cvss_score, affected_versions, fixed_in_version, status (open/investigating/resolved/mitigated), remediation_notes.
Agent link
Each AgentSupplyChainLink row ties an AiSupplyChainComponent to a RegisteredAgent with usage_context and is_critical.
REST endpoints
Base prefix: /api/v1/supply-chain.
| Action | Endpoint | Auth |
|---|---|---|
| Register a component | POST /components | admin (JWT or API key) — SDK 2.3.0 dual auth |
| List components | GET /components | user+ (read) |
| Get a component | GET /components/{pk} | user+ |
| Update a component | PUT /components/{pk} | admin (JWT) |
| Deactivate (soft delete) | DELETE /components/{pk} | admin (JWT) |
| Add vulnerability | POST /components/{pk}/vulnerabilities | admin (JWT) |
| Update vulnerability | PUT /vulnerabilities/{pk} | admin (JWT) |
| Agent dependencies | GET /agents/{agent_pk}/dependencies | user+ |
| Link component to agent | POST /agents/{agent_pk}/dependencies | admin (JWT) |
| Unlink | DELETE /agents/{agent_pk}/dependencies/{component_pk} | admin (JWT) |
| Impact analysis | GET /impact/{component_pk} | user+ |
| Stats | GET /stats | user+ |
| Trigger CVE sync (FEAT-005B) | POST /sync | admin (JWT) |
| Sync status | GET /sync/status | user+ |
POST /components is dual-authSDK 2.3.0 adds dual auth (API key admin OR JWT admin) to POST /components so CI pipelines can register SBOM components without a human JWT. The remaining mutating routes stay JWT-admin-only to keep the blast radius of SDK-token compromise small. Plan to widen dual auth to other routes only with a fresh Gate 1 review.
Register a component — SDK 2.3.0
from ascend import AscendClient
client = AscendClient(api_key="owkai_...") # key must have admin role
response = client.register_supply_chain_component(
component_id="hf-bert-base",
component_name="bert-base-uncased",
component_type="model",
provider="HuggingFace",
version="1.0.0",
latest_version="1.2.0",
license_type="Apache-2.0",
source_url="https://huggingface.co/bert-base-uncased",
provenance_verified=True,
risk_level="medium",
package_name="transformers",
package_ecosystem="pypi",
compliance_notes="Approved for internal use; vendor SBOM on file.",
)
The method only sends keys you set, so your per-call payload stays minimal.
cURL equivalent
curl -X POST "https://pilot.owkai.app/api/v1/supply-chain/components" \
-H "Authorization: Bearer owkai_..." \
-H "Content-Type: application/json" \
-d '{
"component_id": "hf-bert-base",
"component_name": "bert-base-uncased",
"component_type": "model",
"provider": "HuggingFace",
"provenance_verified": true,
"risk_level": "medium"
}'
Link a component to an agent
curl -X POST "https://pilot.owkai.app/api/v1/supply-chain/agents/42/dependencies" \
-H "Authorization: Bearer <admin_jwt>" \
-H "Content-Type: application/json" \
-d '{
"component_id": 17,
"usage_context": "Embedding layer for semantic search",
"is_critical": true
}'
Impact analysis
Given a component, return every agent that depends on it, whether the dependency is marked critical, and open vulnerability count.
curl "https://pilot.owkai.app/api/v1/supply-chain/impact/17" \
-H "Authorization: Bearer <jwt_or_api_key>"
Response:
{
"success": true,
"component": { "id": 17, "component_name": "bert-base-uncased", ... },
"impact": {
"total_affected_agents": 3,
"critical_dependencies": 1,
"open_vulnerabilities": 0,
"affected_agents": [
{ "agent_id": 42, "agent_display_name": "...", "is_critical": true, ... }
],
"risk_summary": "If 'bert-base-uncased' is compromised or unavailable, 3 agent(s) are affected (1 critical dependency/ies). 0 open vulnerability/ies."
}
}
CVE sync (FEAT-005B)
The backend runs a scheduled CVE sync against components based on their package_name + package_ecosystem. Admins can also trigger an on-demand sync (rate-limited to 1 per org per hour):
curl -X POST "https://pilot.owkai.app/api/v1/supply-chain/sync" \
-H "Authorization: Bearer <admin_jwt>"
Check sync status:
curl "https://pilot.owkai.app/api/v1/supply-chain/sync/status" \
-H "Authorization: Bearer <jwt_or_api_key>"
New vulnerabilities are written as AiSupplyChainVulnerability rows linked to the component, with component.vulnerability_count atomically incremented. Resolving a vuln (status = resolved or mitigated) decrements the counter.
Audit trail
Every mutating operation emits an immutable audit event with compliance tags:
| Event | Risk level |
|---|---|
SUPPLY_CHAIN_COMPONENT_REGISTERED | MEDIUM |
SUPPLY_CHAIN_COMPONENT_UPDATED | INFO |
SUPPLY_CHAIN_COMPONENT_DEACTIVATED | HIGH |
SUPPLY_CHAIN_VULNERABILITY_ADDED | HIGH |
SUPPLY_CHAIN_VULNERABILITY_UPDATED | INFO |
SUPPLY_CHAIN_AGENT_LINKED | MEDIUM |
SUPPLY_CHAIN_AGENT_UNLINKED | INFO |
SUPPLY_CHAIN_CVE_SYNC_TRIGGERED | INFO |
Compliance tags: EU_AI_ACT_ART13, NIST_MEASURE_2_5, NIST_SP_800_161, SOC2_CC9.2, ISO27001_A15.
Compliance mapping
| Concern | Standard |
|---|---|
| Third-party AI component transparency | EU AI Act Art. 13 |
| Risk-informed supply chain | NIST AI RMF MEASURE-2.5 |
| Software supply chain risk | NIST SP 800-161 |
| Supplier risk management | SOC 2 CC9.2 |
| Supplier relationships | ISO 27001 A.15 |
Related docs
Document Version: 2026.04 | Last Updated: April 2026