Skip to content
This repository was archived by the owner on May 22, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
e50b746
Rename Python package to xelo
rangoel-nu Feb 25, 2026
594cd51
rename the package to xelo
rangoel-nu Feb 25, 2026
0a2cf8e
Revise project docs to OSS-style structure
rangoel-nu Feb 25, 2026
1faafc0
Add gitattributes for cross-platform line endings
rangoel-nu Feb 25, 2026
34ae89e
Fix DATASTORE over-detection and add data classification metadata
rangoel-nu Feb 27, 2026
2fac48c
Fix --enable-llm: add api_base support and auto-detect Azure AI Foundry
rangoel-nu Feb 27, 2026
a6468ef
4 schema & adapter fixes: null metadata, false FRAMEWORK nodes, Verte…
rangoel-nu Feb 28, 2026
fe98886
Fix prompt_ts: restore can_handle() to always return True
rangoel-nu Feb 28, 2026
650a359
Improve prompt node name generation in langgraph and prompt_ts adapters
rangoel-nu Feb 28, 2026
5ee50e1
Ignore .github/** (except workflows), CLAUDE.md, AGENTS.md, .claude i…
rangoel-nu Feb 28, 2026
517de39
Deduplicate nodes sharing same file/line or where one name is a prefi…
rangoel-nu Feb 28, 2026
e5a66a5
Complete velo→xelo rename and adapter/test cleanup
rangoel-nu Feb 28, 2026
2d2c843
Fix OpenAI Agents SDK detection: Agent[T], @function_tool(args), guar…
rangoel-nu Feb 28, 2026
d3aba54
Fix missing PROMPT nodes: f-string extraction, fn-ref lookup, verific…
rangoel-nu Feb 28, 2026
330cb56
Apply prompt improvements across all Python and TypeScript adapters
rangoel-nu Feb 28, 2026
b692498
Add local config, dist artifacts, and setup script
rangoel-nu Feb 28, 2026
e361098
Update environment example and config settings
rangoel-nu Feb 28, 2026
5cfdd90
chore: apply ruff autofixes
rangoel-nu Feb 28, 2026
cb859d7
chore: publish xelo 0.1.1 and include workspace updates
rangoel-nu Mar 1, 2026
f129a19
update
rangoel-nu Mar 1, 2026
a528e41
Align benchmark suite and ground truth with Xelo JSON output
rangoel-nu Mar 1, 2026
220cc5d
Simplify LLM toggles and expose xelo Python API
rangoel-nu Mar 2, 2026
e3ba335
feat: accuracy improvements — reduce FPs by 50%, F1 +28%
rangoel-nu Mar 2, 2026
a5e62ca
feat: rewrite all benchmark GTs with Copilot-reviewed analysis; remov…
rangoel-nu Mar 2, 2026
bf14e32
fix: evaluate.py post-merge cleanup from user edits
rangoel-nu Mar 2, 2026
db4a9a7
feat: add Agno, Bedrock AgentCore, Azure AI Agent Service adapters
rangoel-nu Mar 2, 2026
0942b29
feat: add TypeScript adapters for Azure AI Agents and Agno
rangoel-nu Mar 2, 2026
61288db
feat: add Google ADK + MCP server adapters; extend Swarm support; fix…
rangoel-nu Mar 2, 2026
c7fa023
feat: add YAML adapters (CrewAI + AutoGen); fix Crew FP; expand GT fo…
rangoel-nu Mar 2, 2026
82ad9b7
feat: GT expansion for 4 repos + fix FP models + fix langgraph/langch…
rangoel-nu Mar 2, 2026
a6c81aa
feat: comprehensive GT expansion across all 12 remaining repos -> F1 …
rangoel-nu Mar 2, 2026
91bd896
style: apply ruff formatting to adapter files
rangoel-nu Mar 3, 2026
65a610b
feat: add voicelive-api-salescoach-demo benchmark (Azure-Samples repo)
rangoel-nu Mar 3, 2026
030a86f
fix: recursive deps scanning for subdirectory manifests; normalise fr…
rangoel-nu Mar 3, 2026
877b676
feat: refresh benchmark caches for 5 repos missing manifest files
rangoel-nu Mar 3, 2026
a955436
chore: ignore generated eval run outputs (tests/test-results/)
rangoel-nu Mar 3, 2026
1673239
docs: update README and docs for recursive deps, expanded framework s…
rangoel-nu Mar 3, 2026
08c5e53
fix: wire --llm flag to ExtractionConfig; fix asyncio.run in running …
rangoel-nu Mar 3, 2026
91d6b98
refactor: standardise on AISBOM_ENABLE_LLM / --enable-llm everywhere
rangoel-nu Mar 3, 2026
f91efc6
style: reformat mode_str ternary in evaluate.py (formatter)
rangoel-nu Mar 3, 2026
12d671a
docs: remove validate and schema from CLI help, docs, and tests
rangoel-nu Mar 3, 2026
822a20b
fix: recognise TS adapter self.name variants as agentic in summary
rangoel-nu Mar 3, 2026
03047bf
feat: add xelo[all] install extra
rangoel-nu Mar 3, 2026
d205c3e
feat: include all packages in base install (pip install xelo)
rangoel-nu Mar 3, 2026
5932ea7
docs: remove backward compatibility mentions
rangoel-nu Mar 3, 2026
5614d56
chore: bump version to 0.1.2
rangoel-nu Mar 3, 2026
351435f
feat: improve detection coverage + type-check clean
rangoel-nu Mar 4, 2026
c08935e
feat: edge discovery — YAML hints + structural FRAMEWORK/DEPLOYMENT/A…
rangoel-nu Mar 4, 2026
3c15a89
fix: LLM mode accuracy — soft-reject deterministic nodes + scope TOOL…
rangoel-nu Mar 4, 2026
fed7781
chore: bump version to 0.1.3
rangoel-nu Mar 4, 2026
9d641e0
fix: reduce MODEL/TOOL FPs + improve OpenBB ground truth
rangoel-nu Mar 5, 2026
0b33767
feat: expand detection patterns + cache_dir API for downstream use
rangoel-nu Mar 6, 2026
01977ec
chore: bump version to 0.1.4
rangoel-nu Mar 6, 2026
7418439
feat(mcp): enrich MCP server detection with auth, endpoints, edges an…
rangoel-nu Mar 6, 2026
8a1e050
feat: granular PRIVILEGE detection with 8 per-category adapters
rangoel-nu Mar 6, 2026
ff69adb
test: add 100 privilege adapter tests + fix regex gaps
rangoel-nu Mar 6, 2026
c1c47de
test: add 80 unit tests for MCPServerAdapter
rangoel-nu Mar 6, 2026
3f21415
gt(excel-mcp-server): update ground truth with correct nodes and edges
rangoel-nu Mar 6, 2026
b8127d5
fix: PRIVILEGE adapter — eliminate db_write FP on wb.save(), add file…
rangoel-nu Mar 6, 2026
6682687
fix: scope privilege adapters to app code — skip test dirs and __init…
rangoel-nu Mar 6, 2026
a062def
improve bedrock-langchain-agent GT + extractor Bedrock/kendra/s3 fixes
rangoel-nu Mar 6, 2026
29819a9
chore: bump version to 0.1.5
rangoel-nu Mar 6, 2026
5424d55
feat: include full prompt text in AI SBOM evidence detail and metadat…
rangoel-nu Mar 6, 2026
fb62c83
refactor: rename package ai_sbom→xelo, move benchmark code to tests/t…
rangoel-nu Mar 7, 2026
d9c5f4d
feat: add MCP typed metadata fields + wire toolbox plugins
rangoel-nu Mar 7, 2026
a12c826
fix: wire privilege_scope and datastore_type to typed NodeMetadata fi…
rangoel-nu Mar 7, 2026
40c8976
fix: increase evidence snippet and MCP description limits for large m…
rangoel-nu Mar 7, 2026
e2ac9f2
style: apply ruff formatting to data_classification, models, atlas_an…
rangoel-nu Mar 7, 2026
48e2f61
docs: rewrite README + docs for consolidated repo; add aibom-schema.md
rangoel-nu Mar 7, 2026
23384b1
fix: update xelo.sh — rename ai_sbom → xelo, expand usage comments
rangoel-nu Mar 7, 2026
4810ab7
remove: retire src/xelo/toolbox/cli.py (unused toolbox CLI)
rangoel-nu Mar 7, 2026
76ba0c3
docs: add license section to docs/README.md; remove stale aibom.schem…
rangoel-nu Mar 7, 2026
a7d733f
docs: update CLAUDE.md — fix evidence location, expand toolbox, add d…
rangoel-nu Mar 7, 2026
84c1e00
release: v0.3.0
rangoel-nu Mar 7, 2026
91e260f
feat: combine xelo + xelo-toolbox, add MCP/PRIVILEGE typed fields, do…
rangoel-nu Mar 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"name": "Xelo Dev",
"build": {
"dockerfile": "../Dockerfile",
"context": ".."
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "false",
"upgradePackages": "true",
"username": "root",
"packages": "git,curl"
},
"ghcr.io/devcontainers/features/node:1": {
"version": "lts"
}
},
"overrideCommand": true,
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-python.vscode-pylance",
"charliermarsh.ruff"
],
"settings": {
"python.defaultInterpreterPath": "${containerWorkspaceFolder}/.venv/bin/python",
"python.testing.pytestEnabled": true,
"python.testing.pytestArgs": [
"tests"
],
"python.linting.enabled": false,
"editor.formatOnSave": true
}
}
},
"postCreateCommand": "python -m venv .venv && . .venv/bin/activate && python -m pip install --upgrade pip && python -m pip install -e '.[dev]' && npm install -g @anthropic-ai/claude-code",
"remoteUser": "root"
}
113 changes: 23 additions & 90 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,98 +1,31 @@
# =============================================================================
# AI SBOM - LLM Enrichment Configuration
# =============================================================================
# Copy this file to .env and fill in your credentials.
# Only required when using ExtractionConfig(deterministic_only=False).
#
# litellm model string examples:
# "gpt-4o-mini" → OpenAI
# "azure/gpt-4.1" → Azure OpenAI (deployment name)
# "anthropic/claude-3-haiku-20240307" → Anthropic
# "vertex_ai/gemini-2.5-flash" → Vertex AI
# "gemini/gemini-2.5-flash" → Gemini API
# "ollama/mistral" → local Ollama
# =============================================================================
# xelo environment variables
# Copy this file to .env and fill in values (never commit .env)

# -----------------------------------------------------------------------------
# Default LLM model and budget
# Used by ExtractionConfig when not explicitly set by the caller.
# -----------------------------------------------------------------------------
AISBOM_LLM_MODEL=gpt-4o-mini
AISBOM_LLM_BUDGET_TOKENS=50000
# ── LLM enrichment ────────────────────────────────────────────────────────────
# Set XELO_LLM=true (or pass --llm to the CLI) to enable LLM enrichment.
# Enrichment calls litellm, so any litellm-supported provider works.
# Examples: "gpt-4o-mini", "anthropic/claude-3-haiku-20240307", "ollama/mistral"

# -----------------------------------------------------------------------------
# Verification / confidence tuning
# -----------------------------------------------------------------------------
AISBOM_ENABLE_VERIFICATION=true
AISBOM_VERIFICATION_CONFIDENCE_MIN=0.60
AISBOM_VERIFICATION_CONFIDENCE_MAX=0.85
AISBOM_VERIFICATION_COST_BUDGET=0.05
AISBOM_MAX_VERIFICATIONS=20
XELO_LLM=false
XELO_LLM_MODEL=gpt-4o-mini
XELO_LLM_API_KEY=
XELO_LLM_API_BASE=
XELO_LLM_BUDGET_TOKENS=50000

# Enable per-asset LLM summary refinement (slower, costs more tokens)
AISBOM_ENABLE_ASSET_SUMMARY_LLM=false
# ── Provider API keys ─────────────────────────────────────────────────────────
# Set the key for whichever provider your XELO_LLM_MODEL uses.
# litellm reads these automatically — you only need XELO_LLM_API_KEY if you
# want to override the provider-specific env var.

# Confidence threshold — nodes below this are dropped after aggregation
AISBOM_CONFIDENCE_THRESHOLD=0.40
# OpenAI / Azure OpenAI
# OPENAI_API_KEY=sk-proj-...

# -----------------------------------------------------------------------------
# OpenAI
# https://platform.openai.com/api-keys
# -----------------------------------------------------------------------------
OPENAI_API_KEY=sk-proj-...

# -----------------------------------------------------------------------------
# Anthropic
# https://console.anthropic.com/settings/keys
# -----------------------------------------------------------------------------
ANTHROPIC_API_KEY=sk-ant-...

# -----------------------------------------------------------------------------
# Azure OpenAI
# litellm model string: "azure/<deployment-name>" e.g. "azure/gpt-4.1"
# https://learn.microsoft.com/azure/ai-services/openai/
# -----------------------------------------------------------------------------
AZURE_API_KEY=<your-azure-openai-key>
AZURE_API_BASE=https://<your-resource>.cognitiveservices.azure.com/
AZURE_API_VERSION=2024-02-01
# Default deployment name (used when AISBOM_LLM_MODEL=azure/<name>)
AZURE_OPENAI_DEPLOYMENT=gpt-4.1

# Azure AI Foundry — additional deployments (Kimi K2, etc.)
# litellm model string: "azure/<deployment-name>"
AZURE_KIMI_K2_ENDPOINT=https://<your-resource>.services.ai.azure.com/openai/v1/
AZURE_KIMI_K2_KEY=<your-kimi-k2-key>
AZURE_KIMI_K2_DEPLOYMENT_NAME=Kimi-K2-Thinking

# Azure-hosted Anthropic (Claude via Azure AI Foundry)
# litellm model string: "azure/claude-sonnet-4-5"
AZURE_ANTHROPIC_ENDPOINT=https://<your-resource>.services.ai.azure.com/anthropic/
AZURE_ANTHROPIC_KEY=<your-azure-anthropic-key>
AZURE_ANTHROPIC_DEPLOYMENT=claude-sonnet-4-5

# -----------------------------------------------------------------------------
# Google Vertex AI
# litellm model string: "vertex_ai/gemini-2.5-flash"
# Requires either GOOGLE_APPLICATION_CREDENTIALS (service account JSON) or
# gcloud ADC (run: gcloud auth application-default login).
# https://cloud.google.com/vertex-ai/docs/authentication
# -----------------------------------------------------------------------------
VERTEXAI_PROJECT=<your-gcp-project-id>
VERTEXAI_LOCATION=us-central1
# Service account key file path (alternative to ADC)
# GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
# ANTHROPIC_API_KEY=sk-ant-...

# -----------------------------------------------------------------------------
# Google Gemini API (direct, not via Vertex)
# litellm model string: "gemini/gemini-2.5-flash"
# https://aistudio.google.com/apikey
# -----------------------------------------------------------------------------
GEMINI_API_KEY=<your-gemini-api-key>
# Also accepted by litellm:
# GOOGLE_API_KEY=<your-gemini-api-key>
# Google Gemini
# GEMINI_API_KEY=...

# -----------------------------------------------------------------------------
# GitHub — used by SbomExtractor.extract_from_repo() to clone private repos
# https://github.com/settings/tokens (scope: repo)
# -----------------------------------------------------------------------------
GITHUB_TOKEN=ghp_...
# ── Source access ─────────────────────────────────────────────────────────────
# GitHub token — used by AiSbomExtractor.extract_from_repo() for private repos
# GITHUB_TOKEN=ghp_...
6 changes: 6 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
* text=auto eol=lf

# Windows-native scripts keep CRLF for compatibility.
*.bat text eol=crlf
*.cmd text eol=crlf

18 changes: 18 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,21 @@ jobs:
python-version: "3.11"
- run: pip install build
- run: python -m build
- uses: actions/upload-artifact@v4
with:
name: python-dist
path: dist/

publish:
runs-on: ubuntu-latest
needs: build
permissions:
id-token: write
environment:
name: pypi
steps:
- uses: actions/download-artifact@v4
with:
name: python-dist
path: dist/
- uses: pypa/gh-action-pypi-publish@release/v1
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,9 @@ htmlcov/
.idea/
.vscode/
*.swp

# tmp files
output/
tmp/
# Generated eval run outputs
tests/test-results/
8 changes: 8 additions & 0 deletions .pypirc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[distutils]
index-servers =
xelo

[xelo]
repository = https://upload.pypi.org/legacy/
username = __token__
password = ${PYPI_API_TOKEN}
Loading