Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

AuthScript

AI-powered prior authorization automation that integrates directly into Epic's clinical workflow via CDS Hooks. AuthScript automatically aggregates clinical data, reasons against payer policies, and generates completed PA forms.

Documentation

Quick LinksDescription
Architecture OverviewSystem patterns and data flow
Design DocumentDetailed technical design

Quick Start

Prerequisites

Note: Docker Desktop (or Podman) must be running before starting the app. The Intelligence and Dashboard services run in containers.

Setup

# Run the setup script (configures secrets automatically)
./scripts/setup.sh

The script configures LLM provider settings via dotnet user-secrets:

SettingDescriptionDefault
llm-providerLLM backend: github, azure, gemini, or openaigithub
github-tokenGitHub PAT for GitHub Models (auto-detected from gh auth)
azure-openai-keyAzure OpenAI API key
azure-openai-endpointAzure OpenAI endpoint URL
google-api-keyGoogle Gemini API key
openai-api-keyOpenAI API key
openai-org-idOpenAI organization ID (optional)

To use a different provider:

# Azure OpenAI
LLM_PROVIDER=azure AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=... ./scripts/setup.sh
# Google Gemini
LLM_PROVIDER=gemini GOOGLE_API_KEY=... ./scripts/setup.sh
# OpenAI
LLM_PROVIDER=openai OPENAI_API_KEY=... OPENAI_ORG_ID=... ./scripts/setup.sh

IDE Setup

All IDEs use .NET Aspire to orchestrate services. The AppHost project starts all services (Gateway, Intelligence, Dashboard) with proper dependencies.

VS Code (Recommended)

  1. Install the C# Dev Kit extension
  2. Open the prior-auth folder
  3. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  4. Run: ".NET: Open Solution" → select orchestration/AuthScript.sln
  5. In the Solution Explorer, right-click AuthScript.AppHost"Debug" → "Start New Instance"

Alternatively, from the terminal:

cd orchestration/AuthScript.AppHost
dotnet run

The Aspire Dashboard opens automatically at https://localhost:15888 showing all services.

Visual Studio / Rider

  1. Open orchestration/AuthScript.sln
  2. Set AuthScript.AppHost as the startup project
  3. Press F5 (or Run) to start with debugging
  4. The Aspire Dashboard opens automatically with all services

Schema Synchronization

Regenerate types after modifying API contracts:

npm run sync:schemas

This generates:

  • TypeScript — React Query hooks, Zod schemas (shared/types/, shared/validation/)
  • Python — Pydantic models from Gateway spec (apps/intelligence/src/models/generated/)
  • C# — Records from Intelligence spec (apps/gateway/Gateway.API/Models/Generated/)

CI runs schema sync and fails if generated files drift from committed versions.

Gateway OpenAPI Extraction

Gateway uses runtime OpenAPI generation. To extract locally:

# Start Gateway, then fetch spec
curl http://localhost:5000/openapi/v1.json > apps/gateway/openapi.json
npm run sync:schemas

See shared/schemas/README.md for contract ownership.

Services

ServiceTechnologyPurpose
Gateway.NET 10, iText7, PollyCDS Hooks, FHIR aggregation, PDF generation
IntelligencePython 3.11, FastAPIClinical reasoning (GitHub/Azure/Gemini/OpenAI)
DashboardReact 19, Vite, TanStackShadow dashboard + SMART fallback

Testing

# Run all tests
npm run test# Run specific service tests
npm run test:dashboard
dotnet test apps/gateway/Gateway.API.Tests
# Intelligence tests (run inside container or with local Python)cd apps/intelligence && uv run pytest

Environment Variables

For local development, run ./scripts/setup.sh (see Setup above).

For production or CI/CD, set these environment variables:

VariableServiceDescription
LLM_PROVIDERIntelligenceProvider: github, azure, gemini, openai
GITHUB_TOKENIntelligenceGitHub PAT for GitHub Models
AZURE_OPENAI_API_KEYIntelligenceAzure OpenAI API key
AZURE_OPENAI_ENDPOINTIntelligenceAzure OpenAI endpoint URL
GOOGLE_API_KEYIntelligenceGoogle Gemini API key
OPENAI_API_KEYIntelligenceOpenAI API key
OPENAI_ORG_IDIntelligenceOpenAI organization ID (optional)
Epic__ClientIdGatewayEpic Launchpad client ID
Epic__FhirBaseUrlGatewayFHIR R4 endpoint (has default)

License

Copyright 2025 AuthScript Team. All rights reserved.

This is a class project for CSE 589 at the University of Washington.

About

CSE 589 Winter 2026 project

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages