open-index/open-npm huggingface dataset:
npm package: @o-lang/agent-memory
Description: Unified agent memory resolver for O-Lang. Combines short-term chat memory and long-term facts with deduplication and scoring.
Author: O-Lang
Latest version: 1.0.15

# @o-lang/memory-sqlite

O-Lang session memory resolver — SQLite backend.

Provides `memory_read` and `memory_write` actions for governed chatbot workflows.
SQLite runs with zero config. No database setup required.

## Install
```bash
npm install @o-lang/memory-sqlite
```

## Actions

### `memory_read` — load conversation history
```yaml
Step 1: Ask memory-sqlite "{session_id}"
Save as history
```

Returns: `{ history: [{ role, content }, ...] }`

### `memory_write` — persist a turn
```yaml
Step 2: Ask memory-sqlite "{session_id}" "user" "{user_message}"
Save as save_user
```

Returns: `{ turn_index: 42 }`

## Use in a workflow
```
Workflow "My Chatbot" with session_id, user_message

Allow resolvers:
  - @o-lang/memory-sqlite
  - @o-lang/llm-groq

Step 1: Ask @o-lang/memory-sqlite "{session_id}"
Save as history

Step 2: Ask @o-lang/llm-groq "History: {history.history} Question: {user_message}"
Save as reply

Step 3: Ask @o-lang/memory-sqlite "{session_id}" "assistant" "{reply}"
Save as saved

Return reply
```

## Environment variables
```bash
SQLITE_PATH=./olang_memory.db   # optional, default: ./olang_memory.db
```

## Running tests
```bash
npm test                     # Jest suite
node test-local-resolver.js  # Live smoke test
```

## Contact

[info@olang.cloud](mailto:info@olang.cloud)
npm package: @o-lang/bank-account-lookup
Description: O-Lang resolver for secure bank balance lookups
Author: Olalekan Ogundipe
Latest version: 1.0.14

# @o-lang/bank-account-lookup

[![O-Lang Resolver](https://img.shields.io/badge/O--Lang-Resolver-blue)](https://github.com/olang/olang)

![O-Lang Certified Resolver](badges/bank-account-lookup-badge.svg)

Secure, read-only O-Lang resolver for bank account balance lookups using SQLite.

## 🔒 Security Features

- **Read-only database access** - no mutations possible
- **Parameterized queries** - SQL injection protected
- **Sanitized output** - only returns balance (no PII)
- **Explicit initialization** - no hidden side effects

## 📥 Installation


npm install @0-lang/bank-account-lookup

    

# Initialize the database 👈 CRITICAL STEP

npx init-bank-db ./bank.db

This creates a SQLite database with sample customer

Customer 12345: $1,500
Customer 67890: $250

3. Use in your O-Lang workflow


Allow resolvers:
- bank-account-lookup

Step 1: Action bank-account-lookup "{customer_id}" Save as account_info

---

### 🔑 **Why This Placement Works**

1. **Early visibility** → Users see it in the first 5 seconds
2. **Numbered steps** → Clear progression (Install → Initialize → Use)
3. **Highlighted as critical** → Prevents the #1 user mistake (forgetting to initialize)
4. **Shows output** → Users know what to expect

---

### ⚠️ **What Happens If You Don’t Include It**

Users will:
1. Install your resolver ✅
2. Try to run their workflow ❌
3. Get this confusing error:

Error: bank-account-lookup requires "bank_db_path" in context or BANK_DB_PATH environment variable

4. **Give up** or open a GitHub issue

By including the `npx init-bank-db` command prominently, you **prevent 90% of support requests**.

---

### 💡 **Pro Tips for README**

1. **Use emojis** → 🛠️ `npx init-bank-db ./bank.db`
2. **Show full workflow**:

# Complete example
npm install @o-lang/bank-account-lookup
npx init-bank-db ./bank.db
npx olang run bank-demo.ol -i customer_id=12345 -i bank_db_path=./bank.db -r @o-lang/bank-account-lookup    


## ❓ Troubleshooting

**"Command not found: init-bank-db"**  
→ Make sure you ran `npm install` first

**"Database file not found"**  
→ Run `npx init-bank-db ./bank.db` to create it
npm package: @o-lang/currency-format
Description: Locale-aware currency formatting resolver for O-Lang workflows. Deterministic, auditable, zero-dependency.
Latest version: 1.0.7

﻿# @o-lang/currency-format

Locale-aware, deterministic currency formatting resolver for O-Lang workflows. Formats numeric values and text containing monetary amounts according to IETF locale standards.

## Features
-  Zero external dependencies
-  Standards-compliant \Intl.NumberFormat\ integration
-  Full audit trail (before/after transformations)
- ✅ Deterministic & stateless (safe for replay/verification)
- ✅ Fallback to \en-US\ when locale is unknown

## Installation
\\\ash
npm install @o-lang/currency-format
## Usage in Workflow
\\\ol
Step 3: Ask vector.search "{user_message}" "{doc_root}"
Save as context_text

Step 4: Ask currency-format "{context_text.text}" "__locale": "{locale}"
Save as context_localized

Step 5: Ask llm-groq "Context: {context_localized.formatted}. User: {user_message}..."
Save as reply
\\\

## Supported Locales
\en-US\, \en-NG\, \en-GB\, \en-KE\, \en-ZA\, \r-FR\, \pt-BR\, \ja-JP\
*(Add more in \
esolver.js\ \CURRENCY_MAP\)*

## License
MIT  O-Lang Contributors
npm package: @o-lang/extractor
Description: Deterministic risk score extractor for O-Lang workflows, extracts numeric and word-based scores from AI text output with schema validation and confidence scoring
Author: O-Lang Team
Latest version: 1.0.4

# @olang-mock/risk-score-extractor

Deterministic O-Lang resolver for extracting numeric risk scores from AI text outputs.

---

## Overview

This resolver is designed for O-Lang workflows to **extract numeric risk scores** from AI output text, such as:

- `"risk score: 82"`
- `"score = 90"`
- `"risk is seventy-five"`

It converts textual numbers (like `seventy-five`) to digits, enforces strict numeric extraction (0–100), and ensures **deterministic behavior**.

---

## Installation

```bash
npm install @olang-mock/risk-score-extractor
npm package: @o-lang/intent-classifier
Description: O-Lang intent classifier resolver — topic gating for governed chatbots
Author: O-Lang team
Latest version: 1.0.4

# @o-lang/intent-classifier

O-Lang intent classifier resolver — topic gating for governed chatbots.

Classifies user messages against a list of allowed topics.
Blocks off-topic messages before they reach the LLM.
Works for any domain — topics are defined at runtime.

## Install
```bash
npm install @o-lang/intent-classifier
```

## Actions

### `intent_classifier` — classify and gate
```yaml
Step 1: Ask intent-classifier "{user_message}" "{allowed_topics}"
Save as intent
```

Returns:
```json
{
  "intent":     "ask_refund",
  "topic":      "refunds",
  "is_allowed": true,
  "confidence": 0.92
}
```

## Use in a workflow
```
Workflow "My Chatbot" with session_id, user_message, allowed_topics

Allow resolvers:
  - @o-lang/intent-classifier
  - @o-lang/llm-groq

Step 1: Ask @o-lang/intent-classifier "{user_message}" "{allowed_topics}"
Save as intent

Step 2: Ask @o-lang/llm-groq "Answer this: {user_message}"
Save as reply

Return reply
```

## Works for any domain
```bash
# Banking
allowed_topics: "accounts,savings,loans,transfers"

# E-commerce
allowed_topics: "orders,refunds,shipping,products"

# Healthcare
allowed_topics: "appointments,prescriptions,billing"

# HR
allowed_topics: "leave,payroll,benefits,onboarding"
```

## LLM vs keyword fallback

| Condition | Behaviour |
|---|---|
| `GROQ_API_KEY` set | Uses `llama-3.1-8b-instant` for accurate classification |
| No API key | Falls back to keyword matching — works offline |
| LLM error | Automatically falls back to keyword matching |

## Environment variables
```bash
GROQ_API_KEY=your_key      # optional — enables LLM classification
INTENT_MODEL=llama-3.1-8b-instant  # optional model override
```

## Running tests
```bash
npm test                     # Jest suite — no API key required
node test-local-resolver.js  # Live smoke test
```

## Contact

[info@olang.cloud](mailto:info@olang.cloud)
npm package: @o-lang/js-olang-test
Description: Official O-Lang Resolver Test Harness — locked single entrypoint
Author: O-Lang Team
Latest version: 1.0.0
Deprecated: This package is deprecated. Please use @o-lang/js-olang-tester instead: https://www.npmjs.com/package/@o-lang/js-olang-tester  

# O-Lang Resolver Test Suite

**Version:** 1.0.0  
**Maintained by:** O-Lang Core Team  
**Specification:** O-Lang Resolver Contract v1.x  
**License:** MIT

---

## Certification Badge

[![O-Lang Resolver Certification](badges/certified.svg)](https://medium.com/@o-lang/olang-resolver-certification-essay)

Click the badge to read the official essay on Medium explaining your resolver certification process, conformance philosophy, and project vision.  

You can also link to the GitHub repo directly:

[![O-Lang Resolver Certification](badges/certified.svg)](https://github.com/O-Lang-Central/resolver-test)

---

## Overview

This repository provides the **official O-Lang Resolver Test Harness**, designed to validate any O-Lang resolver implementation against:

- Allowlist compliance  
- Input/output contracts  
- Failure modes  

It mirrors the **kernel test philosophy**: deterministic, safe, and locked to a single entrypoint.

All tests are **self-contained** in folders `R-001`, `R-002`, `R-003`, etc., each containing:

- `workflow.ol` — the workflow for the test  
- `test.json` — the assertions for this test suite  
- `resolver.js` — for metadata (if applicable)  
- `README.md` — notes for this suite  

---

## Environment Setup

Set the resolver to test:

```bash
export OLANG_RESOLVER=./path-to-your-resolver
npm package: @o-lang/js-olang-tester
Description: Official O-Lang Resolver Test Harness — locked single entrypoint
Author: O-Lang Team
Latest version: 1.0.13

# O-Lang Resolver Test Suite

**Version:** 1.0.0  
**Maintained by:** O-Lang Core Team  
**Specification:** O-Lang Resolver Contract v1.x  
**License:** MIT

---

## Certification Badge

[![O-Lang Resolver Certification](badges/certified.svg)](https://medium.com/@o-lang/olang-resolver-certification-essay)

Click the badge to read the official essay on Medium explaining your resolver certification process, conformance philosophy, and project vision.  

You can also link to the GitHub repo directly:

[![O-Lang Resolver Certification](badges/certified.svg)](https://github.com/O-Lang-Central/resolver-test)

---

## Overview

This repository provides the **official O-Lang Resolver Test Harness**, designed to validate any O-Lang resolver implementation against:

- Allowlist compliance  
- Input/output contracts  
- Failure modes  

It mirrors the **kernel test philosophy**: deterministic, safe, and locked to a single entrypoint.

All tests are **self-contained** in folders `R-001`, `R-002`, `R-003`, etc., each containing:

- `workflow.ol` — the workflow for the test  
- `test.json` — the assertions for this test suite  
- `resolver.js` — for metadata (if applicable)  
- `README.md` — notes for this suite  

---

## Environment Setup

Set the resolver to test:

```bash
export OLANG_RESOLVER=./path-to-your-resolver
npm package: @o-lang/llm-anthropic
Description: O-Lang resolver for Anthropic (Claude Haiku / Sonnet / Opus) LLM
Author: O-lang team
Latest version: 1.0.0

# @o-lang/llm-anthropic

O-Lang resolver for Anthropic Claude LLM API

## Requirements
- `ANTHROPIC_API_KEY` environment variable

## Usage
```yaml
Allow resolvers:
- llm-anthropic

Step 1: Ask llm-anthropic "What is the capital of France?"
Save as response
```

## Multi-turn chat (RAG chatbot, governed chatbot)
```yaml
Allow resolvers:
- llm-anthropic

Step 1: llm_chat
  system_prompt: "You are a helpful support agent."
  history: "{{ session.history }}"
  user_message: "{{ params.user_message }}"
Save as reply
```

## Models

| Constant | Model | Best for |
|---|---|---|
| `FAST`  | `claude-haiku-4-5-20251001` | Classification, short answers, data workflows |
| `SMART` | `claude-sonnet-4-6`         | RAG, chatbots, document analysis |
| `POWER` | `claude-opus-4-6`           | Complex reasoning, synthesis |

Default for `llm_chat`: `claude-sonnet-4-6`
Default for `llm_complete`: `claude-haiku-4-5-20251001`

## Actions

### `llm_chat` — multi-turn conversation
```json
{
  "action": "llm_chat",
  "context": {
    "system_prompt": "You are a helpful assistant.",
    "history": [
      { "role": "user",      "content": "Hello" },
      { "role": "assistant", "content": "Hi! How can I help?" }
    ],
    "user_message": "What is your refund policy?",
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "temperature": 0.7
  }
}
```

### `llm_complete` — single-turn completion
```json
{
  "action": "llm_complete",
  "context": {
    "prompt": "Summarise this patient data: ...",
    "model": "claude-haiku-4-5-20251001",
    "max_tokens": 250
  }
}
```

## Environment variables
```bash
ANTHROPIC_API_KEY=your_key_here

# Optional model overrides
LLM_CHAT_MODEL=claude-sonnet-4-6
LLM_COMPLETE_MODEL=claude-haiku-4-5-20251001
LLM_CHAT_MAX_TOKENS=1024
```

## Important: Anthropic API difference

Unlike Groq and OpenAI, the Anthropic API takes `system_prompt` as a
**top-level field** — not inside the messages array. This resolver handles
that automatically. Your `.ol` workflows use the same `system_prompt` field
regardless of which LLM resolver is plugged in.

## Running tests
```bash
npm test                    # Jest suite — no API key required
node test-local-resolver.js # Live smoke test — requires ANTHROPIC_API_KEY
```

## Contact
[info@olang.cloud](mailto:info@olang.cloud)
npm package: @o-lang/llm-groq
Description: O-Lang resolver for Groq (Llama 3.1 / 3.3 / Mixtral) LLM
Author: O-lang team
Latest version: 1.1.1

# @o-lang/llm-groq

O-Lang resolver for Groq LLM API

## Requirements
- `GROQ_API_KEY` environment variable

## Usage
```yaml
Allow resolvers:
- llm-groq

Step 1: Ask llm-groq "What is the capital of France?"
Save as response
npm package: @o-lang/memory-sqlite
Description: O-Lang session memory resolver — SQLite backend (memory_read + memory_write)
Author: O-Lang team
Latest version: 1.0.6

# @o-lang/memory-sqlite

O-Lang session memory resolver — SQLite backend.

Provides `memory_read` and `memory_write` actions for governed chatbot workflows.
SQLite runs with zero config. No database setup required.

## Install
```bash
npm install @o-lang/memory-sqlite
```

## Actions

### `memory_read` — load conversation history
```yaml
Step 1: Ask memory-sqlite "{session_id}"
Save as history
```

Returns: `{ history: [{ role, content }, ...] }`

### `memory_write` — persist a turn
```yaml
Step 2: Ask memory-sqlite "{session_id}" "user" "{user_message}"
Save as save_user
```

Returns: `{ turn_index: 42 }`

## Use in a workflow
```
Workflow "My Chatbot" with session_id, user_message

Allow resolvers:
  - @o-lang/memory-sqlite
  - @o-lang/llm-groq

Step 1: Ask @o-lang/memory-sqlite "{session_id}"
Save as history

Step 2: Ask @o-lang/llm-groq "History: {history.history} Question: {user_message}"
Save as reply

Step 3: Ask @o-lang/memory-sqlite "{session_id}" "assistant" "{reply}"
Save as saved

Return reply
```

## Environment variables
```bash
SQLITE_PATH=./olang_memory.db   # optional, default: ./olang_memory.db
```

## Running tests
```bash
npm test                     # Jest suite
node test-local-resolver.js  # Live smoke test
```

## Contact

[info@olang.cloud](mailto:info@olang.cloud)
npm package: @o-lang/olang
Description: O-Lang: A governance language for user-directed, rule-enforced agent workflows
Author: Olalekan Ogundipe
Latest version: 1.2.27

# O-Lang Kernel

Minimal O-Lang language core (parser + runtime) for agent orchestration.

---

## Overview

O-Lang is a **plain-English orchestration language** designed to let users define workflows as sequences of actions.  
This repository ships the **kernel only**—no agents, no integrations, no heavy dependencies. It is **language first**, not a framework.

> “Be the grammar. Let others build the world.” — Philosophy behind O-Lang

### What This Repository Ships

- **Parser** – Convert `.olang` files into an abstract syntax tree (AST).  
- **Runtime** – Execute the AST with a user-provided `agentResolver` function.  
- **CLI** – `olang run workflow.olang` example runner.  
- **Spec & Examples** – Minimal documentation for syntax and execution.

### What This Repository Does NOT Ship

- Agents (Slack, Groq, Google Drive, OCR, etc.)  
- PDF parsing, OCR, or databases  
- Configuration files (`.env`, secrets)  
- Desktop UI or setup wizard  

> Agents, databases, and other integrations are the responsibility of the user or third-party packages.

---

## Getting Started

### Installation

```bash
# Clone the repo
git clone https://github.com/O-Lang-Central/olang-kernel.git
cd olang

# Install dependencies (minimal parser/runtime)
npm install
npm package: @o-lang/olang-graph-renderer
Description: Full-featured SVG renderer for O-Lang workflow execution
Author: O-Lang Team
Latest version: 1.0.1

@o-lang/olang-graph-renderer

Full-featured SVG renderer for O-Lang workflows

This resolver generates visual representations of O-Lang workflows, including step numbers, types, conditional blocks, parallel branches, and save-as variables. Ideal for auditing, demonstrations, and collaborator onboarding.

Features

Step Visualization – Each workflow step is displayed with its type and step number.

Conditional Blocks – if statements are shown with conditions.

Parallel Execution – Visualizes parallel branches with clear indentation.

Save-As Variables – Shows which variables are saved after each step.

SVG Output – Produces scalable vector graphics for embedding or presentation.

JSON Fallback – Optionally outputs workflow structure as JSON.

Installation
npm install @o-lang/olang-graph-renderer

Usage
In an O-Lang Workflow
Use "OlangGraphRenderer"
Save as execution_graph
Constraint: format="svg"


Save as execution_graph – The generated SVG will be stored in this variable.

Constraint: format="svg" – Optional. Defaults to SVG; use "json" for JSON output.

In Node.js
const renderer = require('@o-lang/olang-graph-renderer');

const svg = await renderer('Use "OlangGraphRenderer"', { workflow: myWorkflow });
console.log(svg);

Example Output

Steps displayed in boxes

Nested if conditions

Indented parallel branches

Save-as variables labeled

(placeholder for demonstration)

Contributing

This resolver is open-source. Collaborators can:

Add advanced visualizations (arrows, side-by-side parallel steps)

Customize colors for conditional/parallel blocks

Integrate with auditing dashboards

Please fork the repository, add your improvements, and submit a pull request.

License

MIT License – O-Lang Team
npm package: @o-lang/resolver-tests
Description: Official O-Lang Resolver Test Harness — locked single entrypoint
Author: O-Lang Team
Latest version: 1.0.11

# O-Lang Resolver Test Suite

**Version:** 1.0.0  
**Maintained by:** O-Lang Core Team  
**Specification:** O-Lang Resolver Contract v1.x  
**License:** MIT

---

## Certification Badge

[![O-Lang Resolver Certification](badges/certified.svg)](https://medium.com/@o-lang/olang-resolver-certification-essay)

Click the badge to read the official essay on Medium explaining your resolver certification process, conformance philosophy, and project vision.  

You can also link to the GitHub repo directly:

[![O-Lang Resolver Certification](badges/certified.svg)](https://github.com/O-Lang-Central/resolver-test)

---

## Overview

This repository provides the **official O-Lang Resolver Test Harness**, designed to validate any O-Lang resolver implementation against:

- Allowlist compliance  
- Input/output contracts  
- Failure modes  

It mirrors the **kernel test philosophy**: deterministic, safe, and locked to a single entrypoint.

All tests are **self-contained** in folders `R-001`, `R-002`, `R-003`, etc., each containing:

- `workflow.ol` — the workflow for the test  
- `test.json` — the assertions for this test suite  
- `resolver.js` — for metadata (if applicable)  
- `README.md` — notes for this suite  

---

## Environment Setup

Set the resolver to test:

```bash
export OLANG_RESOLVER=./path-to-your-resolver
npm package: @o-lang/reviewer
Description: Official universal, language-agnostic output reviewer for O-Lang workflows — safe review of ANY workflow output in ANY language
Author: O-Lang Central
Latest version: 1.0.0

# @o-lang/reviewer

[![O-Lang Certified](https://img.shields.io/badge/O--Lang-Certified-2563eb.svg)](https://olang.dev)
[![Deterministic](https://img.shields.io/badge/Deterministic-True-10b981.svg)](https://olang.dev/spec/determinism)
[![MIT License](https://img.shields.io/badge/License-MIT-94a3b8.svg)](LICENSE)
[![npm version](https://img.shields.io/npm/v/@o-lang/reviewer.svg)](https://www.npmjs.com/package/@o-lang/reviewer)
[![Built in Nigeria](https://img.shields.io/badge/Built%20in-Nigeria-008751.svg)](https://olang.dev)

## Official Universal Safety Reporter for O-Lang

Generate **structured, language-agnostic audit reports** for ANY O-Lang workflow output. 

🔒 **Zero hallucination risk** — Pure deterministic analysis (no LLM)  
🌍 **Truly language-agnostic** — Works with English, Yoruba, Hausa, Igbo, French, Arabic, Chinese...  
📊 **Machine-readable reports** — Structured metadata for compliance dashboards  
🇳🇬 **Built in Nigeria** — For global AI governance, by African engineers

---

## 🚀 Quick Start

### Installation

```bash
npm install @o-lang/reviewer
npm package: @o-lang/semantic-doc-search
Description: O-Lang semantic document search resolver with vector embeddings
Author: O-Lang Team
Latest version: 1.1.3

# @o-lang/semantic-doc-search

Semantic document retrieval engine for O-Lang workflows.

This package provides vector-based document search (RAG retrieval layer) that integrates with O-Lang kernel workflows. It handles document ingestion, chunking, embedding, and similarity search, returning LLM-ready context outputs.

---

## Features

- Semantic vector search using embeddings
- Document ingestion from local filesystem (`.txt`, `.md`)
- Automatic text chunking for large documents
- Pluggable embedding providers (local, OpenAI, Groq, etc.)
- Multiple vector database support:
  - In-memory store
  - Redis (adapter)
  - PostgreSQL / pgvector (adapter)
  - Pinecone (adapter)
- Embedding cache support (`embeddings.json`)
- Normalized LLM-ready output format (`text + matches`)
- Designed for O-Lang `.ol` workflow integration

---

## Installation

```bash
npm install @o-lang/semantic-doc-search
npm package: @o-lang/tone-analyzer
Description: O-Lang tone compliance analyzer resolver — scores replies for tone before returning to users
Author: O-Lang team
Latest version: 1.0.2

# @o-lang/tone-analyzer

O-Lang tone compliance analyzer resolver — scores chatbot replies before returning to users.

## Install
```bash
npm install @o-lang/tone-analyzer
```

## Actions

### `tone_analyzer` — score tone compliance
```yaml
Step 6: Ask tone-analyzer "{reply.reply}" "professional"
Save as tone
```

Returns:
```json
{
  "score":      0.92,
  "violations": []
}
```

## Use in a workflow
```
Workflow "My Chatbot" with user_message

Allow resolvers:
  - @o-lang/llm-groq
  - @o-lang/tone-analyzer

Step 1: Ask @o-lang/llm-groq "Answer: {user_message}"
Save as reply

Step 2: Ask @o-lang/tone-analyzer "{reply}" "professional"
Save as tone

Return reply
```

## Available tones

| Tone | What it enforces |
|---|---|
| `professional` | No slang, formal language |
| `friendly` | Warm, approachable, no stiff language |
| `empathetic` | Acknowledges feelings, supportive |
| `technical` | Precise terminology, no vague words |
| `concise` | Brief and direct, no filler words |
| any string | Passed to LLM for custom evaluation |

## Scoring

| Score | Meaning |
|---|---|
| `1.0` | Perfectly matches required tone |
| `0.75+` | Mostly matches, minor issues |
| `0.5+` | Partially matches |
| `<0.5` | Does not match |

When used with the O-Lang kernel, replies scoring below `0.75` are automatically retried.

## LLM vs heuristic fallback

| Condition | Behaviour |
|---|---|
| `GROQ_API_KEY` set | Uses `llama-3.1-8b-instant` for accurate scoring |
| No API key | Falls back to regex heuristics — works offline |
| LLM error | Automatically falls back to heuristics |

## Environment variables
```bash
GROQ_API_KEY=your_key              # optional — enables LLM scoring
TONE_MODEL=llama-3.1-8b-instant    # optional model override
```

## Running tests
```bash
npm test                     # Jest suite — no API key required
node test-local-resolver.js  # Live smoke test
```

## Contact

[info@olang.cloud](mailto:info@olang.cloud)
npm package: @o-lukas/homebridge-smartthings-tv
Description: This is a plugin for Homebridge. It offers some basic functions to control Samsung TVs using the SmartThings API.
Author: o-lukas
Latest version: 3.0.10

# Homebridge SmartThings TV

[![verified-by-homebridge](https://badgen.net/badge/homebridge/verified/purple)](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)
[![semantic-release](https://img.shields.io/badge/semantic--release-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
![NPM Version](https://badgen.net/npm/v/@o-lukas/homebridge-smartthings-tv?label=stable)
![NPM Node Version](https://badgen.net/npm/node/@o-lukas/homebridge-smartthings-tv)
![NPM Weekly Downloads](https://badgen.net/npm/dw/@o-lukas/homebridge-smartthings-tv)
![GitHub issues](https://img.shields.io/github/issues/o-lukas/homebridge-smartthings-tv?label=Issues)
[![Build and Lint](https://github.com/o-lukas/homebridge-smartthings-tv/actions/workflows/build.yml/badge.svg)](https://github.com/o-lukas/homebridge-smartthings-tv/actions/workflows/build.yml)

This is a plugin for [Homebridge](https://github.com/homebridge/homebridge). It offers some basic functions to control Samsung TVs and SoundBars using the SmartThings API.

Both device types will be registered as TVs because this is the only device type that is able to control input sources at the moment.

If you have any problems please make sure to check the [common issues pages](./docs/common-issues.md) before creating a new issue.

## Configuration

The easiest way to configure the plugin is to use [Homebridge Config UI X](https://github.com/oznu/homebridge-config-ui-x) which should contain a description for every needed property. The only property needed to make the plugin work is the SmartThings API token. The other properties enable some additional functions but are not mandatory for the plugin to work.

The following snippet shows the most simple configuration you can use for the plugin:

```json
{
    "bridge": {
    },
    "accessories": [],
    "platforms": [
        {
            "name": "SmartThings TV",
            "token": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "platform": "smartthings-tv"
        }
    ]
}
```

To get information about all supported properties please check the [config schema file](./config.schema.json).

## Authentication

This plugin requires an OAuth based workflow for authentication with Samsung SmartThings API.  Please see the [OAuth documentation](./docs/oauth.md) for detailed instructions on how to configure OAuth with this plugin.

## Disclaimer

This project is not affiliated with, endorsed by, or sponsored by any of the companies or products mentioned herein. All product names, trademarks, and registered trademarks are the property of their respective owners. The use of these names, logos, or brands is for identification purposes only and does not imply any association or endorsement.
npm package: @o-pinion/angular
Description: Opiniated Angular utilities
Author: Raphael Balet
Latest version: 0.0.3

# angular-opinionated
Opiniated angular project structure 

## Contains
- [Structures](https://github.com/rbalet/angular-opinionated/wiki)
- [CSS Naming convention](https://github.com/o-pinion/angular/wiki/CSS-Naming-convention)
- [Conventions](https://github.com/o-pinion/angular/wiki/conventions)

## Helpers
- .eslintrc.json: Help update angular-eslint rules with the proposed project structure.

## .eslintrc.json 
Inside the `eslint.config.ts` file, adds the following

```typescript
const oLint = require('@o-pinion/angular/.eslintrc.json')

module.exports = tseslint.config(
  oLint,
  ...
)

```
npm package: @o-rango/o-alert
Description: @o-rango/o-alert
Author: @o-rango
Latest version: 0.3.1

# @o-rango/o-alert
Provides feedback messages for  user actions with alert messages.

[![npm version](https://badge.fury.io/js/%40o-rango%2Fo-alert.svg)](https://badge.fury.io/js/%40o-rango%2Fo-alert)

[![Edit o-alert codesandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/n7m2y31n44)

## Demo
![](./docs/o-alert_demo.gif)

## Get Started 
First, npm install within the project or use it directly from CDN:

```
npm install @o-rango/o-alert --save
```
or
```html
<script src="./node_modules/@o-rango/o-alert/dist/o-alert.js"></script>
// OR
<script src="https://unpkg.com/@o-rango/o-alert/dist/o-alert.js"></script>
```

### Usage example 

Default Alert

```html
  // Default Alert
  <o-alert  align="center" type="default">This is an default alert banner !!!!</o-alert>
  // Success Alert aligned left
  <o-alert align="left" type="success">This is an success alert banner</o-alert>
  // Alert using slots 
  <o-alert type="error" align="center">
          <div slot="start"> Start</div>
          This is an error alert banner
          <div slot="end">X</div>
  </o-alert>
```


Alert with Line

```html
  // Success Alert aligned left
  <o-alert line align="left" type="success">This is an success alert banner</o-alert>
  // Alert using slots 
  <o-alert line type="error" align="center">
          <div slot="start"> Start</div>
          This is an error alert banner
          <div slot="end">X</div>
  </o-alert>
```



Properties

```js
//o-content-alert
  @Prop() name?: string;
  @Prop() align: string = 'center' // left,right,center ;
  @Prop() type: string = 'default' //default, error, warning , info , success;
  @Prop() line: boolean= false;

```


### Customization 

```css
 /* Generic Colors variables*/
 --o-alert-default: #FAFBFC;
 --o-alert-error : #DE350B;
 --o-alert-warning:#FFC400;
 --o-alert-info:  #0065FF;
 --o-alert-success:#36B37E;

 /* Size Style variables  & Font Style variables */
 --o-alert-height : 3.5em;
 --o-alert-font-size :14px;
 --o-alert-font-weight : 600;
 --o-alert-font-family : 'San Francisco', -apple-system, BlinkMacSystemFont, '.SFNSText-Regular', 'Helvetica Neue', Helvetica, sans-serif;
 --o-alert-font-color-light : #FFFFFF;
 --o-alert-font-color-dark : #091E42;

```
npm package: @o-rango/o-button
Description: @o-rango/o-button
Author: @o-rango
Latest version: 0.2.1

# @o-rango/button
Provides feedback messages for  user actions with alert messages.

[![npm version](https://badge.fury.io/js/%40o-rango%2Fo-button.svg)](https://badge.fury.io/js/%40o-rango%2Fo-button)

[![Edit o-button on codesandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/6yrk93qw23)
## Demo
![](./docs/o-button_demo.gif)

## Get Started 
First, npm install within the project or use it directly from CDN:

```
npm install @o-rango/o-button --save
```
or
```html
<script src="./node_modules/@o-rango/o-button/dist/o-button.js"></script>
// OR
<script src="https://unpkg.com/@o-rango/o-button/dist/o-button.js"></script>
```

### Usage example 

Button usage examples
```html
	  <o-button type="default" fill="solid">Submit</o-button>
		<o-button type="default" disabled fill="solid">Submit</o-button>
		<o-button type="default" fill="outline">Submit</o-button>
		<o-button type="default" disabled fill="dashed">Submit</o-button>
		<o-button type="default" fill="dashed">Submit</o-button>
		<o-button type="default" disabled fill="outline">Submit</o-button>
		<o-button type="default" rounded fill="outline">Submit</o-button>
		<o-button type="default" disabled rounded fill="outline">Submit</o-button>
```

Properties

```js
//o-button
  @Prop() size?: string; // lg - md - sm
  @Prop() href?: string;
  @Prop({ reflectToAttr: true }) target?: string = '_blank';
  @Prop() block? : boolean = false;
  @Prop() type: string = 'default' //default, error, warning , info , success;
  @Prop() rounded?: boolean = false;
  @Prop({ reflectToAttr: true }) disabled = false;
  @Prop({ reflectToAttr: true})  fill?: 'dashed' | 'outline' | 'solid' = 'solid';
```

### Customization 


```css
 /* Generic Colors variables*/
 --o-button-default: #FAFBFC;
 --o-button-error : #DE350B;
 --o-button-warning:#FFC400;
 --o-button-info:  #0065FF;
 --o-button-success:#36B37E;

 /* Size Style variables  & Font Style variables */
 --o-button-height : 3.5em;
 --o-button-font-size :14px;
 --o-button-font-weight : 600;
 --o-button-font-family : 'San Francisco', -apple-system, BlinkMacSystemFont, '.SFNSText-Regular', 'Helvetica Neue', Helvetica, sans-serif;
 --o-button-font-color-light : #FFFFFF;
 --o-button-font-color-dark : #091E42;

```
npm package: @o-rango/o-content-placeholder
Description: O-RANGO customizable component placeholder
Author: Ionic Team
Latest version: 0.1.5

![Built With Stencil](https://img.shields.io/badge/-Built%20With%20Stencil-16161d.svg?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI%2BCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI%2BCgkuc3Qwe2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU%2BCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MjQuNywzNzMuOWMwLDM3LjYtNTUuMSw2OC42LTkyLjcsNjguNkgxODAuNGMtMzcuOSwwLTkyLjctMzAuNy05Mi43LTY4LjZ2LTMuNmgzMzYuOVYzNzMuOXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQyNC43LDI5Mi4xSDE4MC40Yy0zNy42LDAtOTIuNy0zMS05Mi43LTY4LjZ2LTMuNkgzMzJjMzcuNiwwLDkyLjcsMzEsOTIuNyw2OC42VjI5Mi4xeiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDI0LjcsMTQxLjdIODcuN3YtMy42YzAtMzcuNiw1NC44LTY4LjYsOTIuNy02OC42SDMzMmMzNy45LDAsOTIuNywzMC43LDkyLjcsNjguNlYxNDEuN3oiLz4KPC9zdmc%2BCg%3D%3D&colorA=16161d&style=flat-square)
[![Coverage Status](https://coveralls.io/repos/github/o-rango/o-content-placeholder/badge.svg?branch=master)](https://coveralls.io/github/o-rango/o-content-placeholder?branch=master)
[![Build Status](https://travis-ci.org/o-rango/o-content-placeholder.svg?branch=master)](https://travis-ci.org/o-rango/o-content-placeholder)




# o-content-placeholder [Demo](https://o-rango.github.io/o-content-placeholder/)
 Simple and customizable content placeholder built as web component with Stenciljs :metal:
## Getting Started

To try this component:

```bash
npm i --save @o-rango/o-content-placeholder
```


```html

// Add script tag to your page

<script src="./node_modules/@o-rango/orango-demo-tools/dist/o-content-placeholder.js.js"></script>
// OR
<script src="https://unpkg.com/@o-rango/orango-demo-tools/dist/o-content-placeholder.js.js"></script>
```

And compose your content placeholder with `<o-content-placeholder-img>`  or  `</o-content-placeholder-block>`

```html
  <o-content-placeholder-img size="55" animate="true" format="square"></o-content-placeholder-img>
  <o-content-placeholder-block rounded="true" line-height="15" margin="6" animate="true" lines="3"></o-content-placeholder-block>
  <o-content-placeholder-img size="55" animate="false" format="circle"></o-content-placeholder-img>
```


Properties

```html

//o-content-placeholder-block
@Prop() animate: boolean = false;
@Prop() lines: number = 1;
@Prop() lineHeight: number = 15;
@Prop() margin: number = 5;
@Prop() randomSize: boolean = false;
@Prop() rounded: boolean = false;

//o-content-placeholder-img
@Prop() animate: boolean = false;
@Prop() format: 'circle' | 'square' = 'square';
@Prop() size: number = 55;

```

### Demo Version 
![](./skeleton-placeholder.gif)
npm package: @o-rango/o-express-middleware
Description: o-rango-platform express middleware
Author: Romulo Cintra
Latest version: 0.0.1

# @o-rango/o-express-middleware
### o-rango-platform express middleware
[![Codecov](https://img.shields.io/codecov/c/github/g-plane/o-express-middleware.svg?style=flat-square)](https://codecov.io/gh/g-plane/o-express-middleware)
[![License](https://img.shields.io/github/license/g-plane/o-express-middleware.svg?style=flat-square)](https://github.com/g-plane/o-express-middleware/blob/master/LICENSE)
[![NPM Version](https://img.shields.io/npm/v/o-express-middleware.svg?style=flat-square)](https://www.npmjs.com/package/o-express-middleware)
[![NPM Downloads](https://img.shields.io/npm/dm/o-express-middleware.svg?style=flat-square)](https://www.npmjs.com/package/o-express-middleware)

## Installation


Using npm:

```bash
$ npm install --save-dev @o-rango/o-express-middleware
```

## Usage



## License

MIT License

Copyright (c) 2018-present Pig Fang
npm package: @o-rango/orango-material-design
Description: Orango material design with stenciljs
Author: Orango Team
Latest version: 0.0.2-beta

[![Build Status](https://travis-ci.org/o-rango/orango-material-design.svg)](https://travis-ci.org/o-rango/orango-material-design)
[![Coverage Status](https://coveralls.io/repos/github/o-rango/orango-material-design/badge.svg?branch=master)](https://coveralls.io/github/o-rango/orango-material-design?branch=master)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/0290c54fdc4a47809f2deec0909c47f9)](https://www.codacy.com/app/romulocintra/orango-material-design?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=o-rango/orango-material-design&amp;utm_campaign=Badge_Grade)

# orango-material-design

###  WIP  Adapters to implement Material Design Components


Acceptance criteria : 
 - *Tests*
 - *Demo*
 - *Docs*

> Planned Components
- [] button `Implemented not completed`
- [] card 
- [] checkbox `Implemented not completed`
- [] dialog 
- [] drawer 
- [] fab `Implemented not completed`
- [] grid-list 
- [] icon-toggle 
- [] layout-grid 
- [] linear-progress 
- [] list 
- [] menu 
- [] radio 
- [] select 
- [] slider 
- [] snackbar `Implemented not completed`
- [] switch 
- [] tabs 
- [] textfield 
- [] toolbar `Implemented not completed`
- [] typography
npm package: @o-rango/update-notify
Description: Check if an package needs to be update 
Author: romulo cintra
Latest version: 0.1.2

# @o-rango/update-notify

[![Build Status](https://travis-ci.com/o-rango/update-notify.svg?branch=master)](https://travis-ci.com/o-rango/update-notify) 
[![codecov](https://codecov.io/gh/o-rango/update-notify/branch/master/graph/badge.svg)](https://codecov.io/gh/o-rango/update-notify)



Inspired in update-notifier but using the default `npm` api that way is working behind `proxy` or any other config reflected in `.npmrc`.

It only has programmatic api and can be easily attached to your workflow.

## Install 

```
npm i --save @o-rango/updatet-notify
```


## Usage

```js
const { updateNotify } = require('@o-rango/update-notify');

const notifier = updateNotify({
      pkg: {
        version: '0.0.1',
        name: 'react'
      },
      updateCheckInterval: 0
    });


console.log(notifier);
// Output =>  
```


## API

### notify = updateNotify(options)

Checks if there is an available update. Accepts options defined below. Returns `{ updateAvailable: true , name: 'react' , latest: '16.11.0', 'current': '0.0.1' }` if there is any update.

### options

Type: `object`

#### pkg

Type: `object`

##### name

*Required*<br>
Type: `string`

##### version

*Required*<br>
Type: `string`

#### updateCheckInterval

Type: `number`<br>
Default: `1000 * 60 * 60 * 24` *(1 day)*

How often to check for updates.

#### distTag

Type: `string`<br>
Default: `latest`

Which [dist-tag](https://docs.npmjs.com/adding-dist-tags-to-packages) to use to find the latest version.


## Extra 

### ping = pingRegistry()

Easter egg method that pings registry defined in your `.npmrc`;


```js
const { pingRegistry } = require('@o-rango/update-notify');


const online = await pingRegistry();
// Output online => :{ isOnline : true }

```