Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
d8fc750
feat: v1.0.0 — decouple telemetry, remove auth & prompt management
chtushar Mar 24, 2026
287362f
chore: release v1.0.0-beta.1
chtushar Mar 24, 2026
31de204
feat: remove settings page and workspace-settings API
chtushar Mar 24, 2026
21df720
Remove review-reply.md and update .gitignore for .context file
chtushar Mar 25, 2026
13e455e
feat: move pgStore to subpath export and define Store/Sink interfaces
chtushar Mar 25, 2026
1d9a6ea
chore: replace ESLint + Prettier with Biome (#71)
chtushar Mar 25, 2026
3057b25
feat: remove provider configs, guardrails, and gateway UI
chtushar Mar 27, 2026
91954df
chore: release v1.0.0-beta.2
chtushar Mar 27, 2026
d5a5e4c
feat: move llmRequests and traces into pgStore
chtushar Mar 27, 2026
86e66a7
feat: set up .sql file imports for pgStore
chtushar Apr 3, 2026
9a8e93c
feat: add tsqx for SQL-first type generation in pgStore
chtushar Apr 3, 2026
ea7eb91
chore: release v1.0.0-beta.3
chtushar Apr 3, 2026
33dec3b
fix: validate pgStore connection string with Zod
chtushar Apr 3, 2026
101eb9a
fix: create trace + span for every gateway LLM call
chtushar Apr 3, 2026
52d7280
refactor: remove zod from SDK, export plain JSON Schemas only
chtushar Apr 3, 2026
d60fac5
refactor: strip tsqx query codegen, keep schema + migrations only
chtushar Apr 3, 2026
17f5081
feat: remove Kysely, datalayer, playgrounds, and datasets
chtushar Apr 3, 2026
519035b
chore: release v1.0.0-beta.4
chtushar Apr 3, 2026
df00c66
fix: use IF NOT EXISTS in initial migration
chtushar Apr 3, 2026
090530a
chore: release v1.0.0-beta.5
chtushar Apr 3, 2026
574b95a
feat: add D1 store, move telemetry from core to SDK
chtushar Apr 4, 2026
84470e4
chore: release v1.0.0-beta.6
chtushar Apr 4, 2026
ded57dc
fix: restore core imports for logger, pricing, and cost calculation
chtushar Apr 4, 2026
5ffac06
chore: release v1.0.0-beta.7
chtushar Apr 4, 2026
f1185ef
fix: extract telemetry types to prevent pg from bundling in Workers
chtushar Apr 4, 2026
e32c5de
chore: release v1.0.0-beta.8
chtushar Apr 4, 2026
d1668e9
fix: isolate require('pg') to store/pg subpath only
chtushar Apr 4, 2026
85b2bb2
chore: release v1.0.0-beta.9
chtushar Apr 4, 2026
34e9588
fix: remove createRequire from gateway for Workers compatibility
chtushar Apr 4, 2026
3c8debc
chore: release v1.0.0-beta.10
chtushar Apr 4, 2026
25287ed
fix: remove Express re-export from SDK main entry
chtushar Apr 4, 2026
a05458c
chore: sort devDependencies in root package.json
chtushar Apr 4, 2026
f541541
chore: release v1.0.0-beta.11
chtushar Apr 4, 2026
4634e66
fix: remove top-level Node.js filesystem imports from app
chtushar Apr 4, 2026
085678b
chore: release v1.0.0-beta.12
chtushar Apr 5, 2026
4358d46
fix: replace nunjucks with template literals for Workers compatibility
chtushar Apr 5, 2026
dcff67a
chore: release v1.0.0-beta.13
chtushar Apr 5, 2026
3149e14
fix: flush batch writers immediately on edge runtimes
chtushar Apr 5, 2026
79d010e
chore: release v1.0.0-beta.14
chtushar Apr 5, 2026
10957d5
fix: await batch writer flushes on edge runtimes
chtushar Apr 5, 2026
c9f5c88
chore: release v1.0.0-beta.15
chtushar Apr 5, 2026
3a737c0
feat: add waitUntil config for edge runtime telemetry flushing
chtushar Apr 5, 2026
05ae218
chore: release v1.0.0-beta.16
chtushar Apr 5, 2026
bb60125
fix: parse JSON TEXT columns when reading from D1
chtushar Apr 5, 2026
bd471ff
chore: release v1.0.0-beta.17
chtushar Apr 5, 2026
9f1353d
feat: type telemetry config to accept single store or array
chtushar Apr 5, 2026
e83ea7a
feat: add SQLite store for zero-config local dev
chtushar Apr 5, 2026
f80221d
chore: add better-sqlite3 as optional peer dependency
chtushar Apr 5, 2026
85e0a6c
chore: release v1.0.0-beta.18
chtushar Apr 7, 2026
b9d23e0
Add better-sqlite3 as a dependency for planned sqliteStore
chtushar Apr 7, 2026
1f1b420
chore: release v1.0.0-beta.19
chtushar Apr 7, 2026
2f75bfd
add opentui skill
chtushar Apr 7, 2026
ad3b7b6
feat: add TUI command to CLI and update config loading
chtushar Apr 7, 2026
385faf6
feat: add eval primitives and CLI eval command
chtushar Apr 9, 2026
cbba107
chore: release v1.0.0-beta.20
chtushar Apr 9, 2026
fe74f4e
fix: add Bun setup to CI for CLI build
chtushar Apr 9, 2026
3d44882
chore: release v1.0.0-beta.21
chtushar Apr 9, 2026
ac98d97
chore: remove TUI command and Bun dependency from CLI
chtushar Apr 9, 2026
46b3be6
chore: release v1.0.0-beta.22
chtushar Apr 9, 2026
3cd53c3
feat: add eval examples and fix CLI eval command
chtushar Apr 9, 2026
9be07b5
chore: gitignore eval result files
chtushar Apr 9, 2026
6cebb65
feat: use millisecond timestamps for eval result filenames
chtushar Apr 9, 2026
ada7a17
feat: improve judgeScorer and eval error reporting
chtushar Apr 9, 2026
ad94937
feat: stream eval results as each datapoint completes
chtushar Apr 9, 2026
ab0bf17
chore: release v1.0.0-beta.23
chtushar Apr 10, 2026
c8b3fb0
docs: update CLAUDE.md to reflect v1.0.0 architecture
chtushar Apr 10, 2026
de36de7
fix: allow store types to be assigned to TelemetryConfig
chtushar Apr 10, 2026
5526398
chore: release v1.0.0-beta.24
chtushar Apr 10, 2026
cb209c8
fix: skip duplicate trace creation for internal SDK requests
chtushar Apr 10, 2026
b67d2c6
chore: release v1.0.0-beta.25
chtushar Apr 10, 2026
bed18d5
ci: always tag docker image as latest
chtushar May 2, 2026
17bd69b
Configure `llmops()` with `pgStore` from env
chtushar May 2, 2026
55d482d
feat(core): add telemetry + eval contract spine
chtushar Jun 27, 2026
313a62d
feat(sdk): wire eval + telemetry contracts onto core spine
chtushar Jun 27, 2026
0bb320d
feat(sdk): add createOpenAIProvider() gateway config factory
chtushar Jun 28, 2026
7db5451
feat(sdk): add StoreSink adapter + ops.observe() for headless telemetry
chtushar Jun 27, 2026
fb99081
fix(sdk): make StoreSink edge-safe and non-blocking
chtushar Jun 28, 2026
c00a9be
feat(gateway): demolish the Portkey fork, scaffold the plug foundation
chtushar Jun 28, 2026
59d99aa
feat(gateway): minimal OpenAI-compatible proxy (router + resolve + ex…
chtushar Jul 4, 2026
e0cb330
feat(core): provider routing metadata + getProviderMetadata/getModelP…
chtushar Jul 4, 2026
2c41154
feat(gateway): wire getProviderMetadata, mount the plug in the app
chtushar Jul 4, 2026
a016008
fix(app): re-wrap gateway Response so Hono middleware can mutate headers
chtushar Jul 4, 2026
fb4af3c
feat(gateway): instrument responses — usage/cost emitted to Telemetry…
chtushar Jul 5, 2026
219cf8f
feat(app): wire gateway telemetry — calls light up the dashboard
chtushar Jul 5, 2026
c075be1
chore: sync lockfile for gateway @llmops/core devDep
chtushar Jul 7, 2026
aba61f7
feat(gateway): emit automatic traces for model calls
chtushar Jul 25, 2026
af7e292
chore: ignore .DS_Store
chtushar Jul 27, 2026
59f7584
feat(gateway): restore Google Gemini support (#83)
chtushar Jul 31, 2026
0cb696a
fix(evals): repair runner and telemetry datasets (#85)
chtushar Aug 1, 2026
0d45107
docs: add AGENTS.md and repair stale feature claims (#86)
chtushar Aug 1, 2026
6c98606
feat(gateway): instrument OpenAI Responses API (#87)
chtushar Aug 1, 2026
c9f4e5a
feat(eval): add regression gates and pull-request CI (#88)
chtushar Aug 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/build_and_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ jobs:
tags: |
type=ref,event=tag
type=raw,value=beta,enable=${{ steps.check_beta.outputs.is_beta == 'true' }}
type=raw,value=latest,enable=${{ steps.check_beta.outputs.is_beta == 'false' }}
type=raw,value=latest

- name: Build and push Docker image
uses: docker/build-push-action@v5
Expand Down
40 changes: 40 additions & 0 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Pull Request

on:
pull_request:

concurrency:
group: pr-${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true

permissions:
contents: read

jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'

- name: Install dependencies
run: pnpm install --frozen-lockfile

# Workspace packages resolve each other's published type declarations
# from dist. Build in topological order first on a clean runner.
- name: Build
run: pnpm run build

- name: Typecheck
run: pnpm run typecheck

- name: Test
run: pnpm run test
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ node_modules
.sessions
_ralph
.mcp.json
.context
bin
.DS_Store
74 changes: 74 additions & 0 deletions .opencode/command/opentui.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
description: Load OpenTUI skill and get contextual guidance for building terminal user interfaces
---

Load the OpenTUI TUI framework skill and help with any terminal user interface development task.

## Workflow

### Step 1: Check for --update-skill flag

If $ARGUMENTS contains `--update-skill`:

1. Determine install location by checking which exists:
- Local: `.opencode/skill/opentui/`
- Global: `~/.config/opencode/skill/opentui/`

2. Run the appropriate install command:
```bash
# For local installation
curl -fsSL https://raw.githubusercontent.com/msmps/opentui-skill/main/install.sh | bash

# For global installation
curl -fsSL https://raw.githubusercontent.com/msmps/opentui-skill/main/install.sh | bash -s -- --global
```

3. Output success message and stop (do not continue to other steps).

### Step 2: Load opentui skill

```
skill({ name: 'opentui' })
```

### Step 3: Identify task type from user request

Analyze $ARGUMENTS to determine:
- **Framework needed** (Core imperative, React declarative, Solid declarative)
- **Task type** (new project setup, component implementation, layout, keyboard handling, debugging, testing)

Use decision trees in SKILL.md to select correct reference files.

### Step 4: Read relevant reference files

Based on task type, read from `references/<area>/`:

| Task | Files to Read |
|------|---------------|
| New project setup | `<framework>/REFERENCE.md` + `<framework>/configuration.md` |
| Implement components | `<framework>/api.md` + `components/<category>.md` |
| Layout/positioning | `layout/REFERENCE.md` + `layout/patterns.md` |
| Handle keyboard input | `keyboard/REFERENCE.md` |
| Add animations | `animation/REFERENCE.md` |
| Debug/troubleshoot | `<framework>/gotchas.md` + `testing/REFERENCE.md` |
| Write tests | `testing/REFERENCE.md` |
| Understand patterns | `<framework>/patterns.md` |

### Step 5: Execute task

Apply OpenTUI-specific patterns and APIs from references to complete the user's request.

### Step 6: Summarize

```
=== OpenTUI Task Complete ===

Framework: <core | react | solid>
Files referenced: <reference files consulted>

<brief summary of what was done>
```

<user-request>
$ARGUMENTS
</user-request>
200 changes: 200 additions & 0 deletions .opencode/skill/opentui/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
---
name: opentui
description: Comprehensive OpenTUI skill for building terminal user interfaces. Covers the core imperative API, React reconciler, and Solid reconciler. Use for any TUI development task including components, layout, keyboard handling, animations, and testing.
metadata:
references: core, react, solid
---

# OpenTUI Platform Skill

Consolidated skill for building terminal user interfaces with OpenTUI. Use decision trees below to find the right framework and components, then load detailed references.

## Critical Rules

**Follow these rules in all OpenTUI code:**

1. **Use `create-tui` for new projects.** See framework `REFERENCE.md` quick starts.
2. **`create-tui` options must come before arguments.** `bunx create-tui -t react my-app` works, `bunx create-tui my-app -t react` does NOT.
3. **Never call `process.exit()` directly.** Use `renderer.destroy()` (see `core/gotchas.md`).
4. **Text styling requires nested tags in React/Solid.** Use modifier elements, not props (see `components/text-display.md`).

## How to Use This Skill

### Reference File Structure

Framework references follow a 5-file pattern. Cross-cutting concepts are single-file guides.

Each framework in `./references/<framework>/` contains:

| File | Purpose | When to Read |
|------|---------|--------------|
| `REFERENCE.md` | Overview, when to use, quick start | **Always read first** |
| `api.md` | Runtime API, components, hooks | Writing code |
| `configuration.md` | Setup, tsconfig, bundling | Configuring a project |
| `patterns.md` | Common patterns, best practices | Implementation guidance |
| `gotchas.md` | Pitfalls, limitations, debugging | Troubleshooting |

Cross-cutting concepts in `./references/<concept>/` have `REFERENCE.md` as the entry point.

### Reading Order

1. Start with `REFERENCE.md` for your chosen framework
2. Then read additional files relevant to your task:
- Building components -> `api.md` + `components/<category>.md`
- Setting up project -> `configuration.md`
- Layout/positioning -> `layout/REFERENCE.md`
- Keyboard/input handling -> `keyboard/REFERENCE.md`
- Animations -> `animation/REFERENCE.md`
- Troubleshooting -> `gotchas.md` + `testing/REFERENCE.md`

### Example Paths

```
./references/react/REFERENCE.md # Start here for React
./references/react/api.md # React components and hooks
./references/solid/configuration.md # Solid project setup
./references/components/inputs.md # Input, Textarea, Select docs
./references/core/gotchas.md # Core debugging tips
```

### Runtime Notes

OpenTUI runs on Bun and uses Zig for native builds. Read `./references/core/gotchas.md` for runtime requirements and build guidance.

## Quick Decision Trees

### "Which framework should I use?"

```
Which framework?
├─ I want full control, maximum performance, no framework overhead
│ └─ core/ (imperative API)
├─ I know React, want familiar component patterns
│ └─ react/ (React reconciler)
├─ I want fine-grained reactivity, optimal re-renders
│ └─ solid/ (Solid reconciler)
└─ I'm building a library/framework on top of OpenTUI
└─ core/ (imperative API)
```

### "I need to display content"

```
Display content?
├─ Plain or styled text -> components/text-display.md
├─ Container with borders/background -> components/containers.md
├─ Scrollable content area -> components/containers.md (scrollbox)
├─ ASCII art banner/title -> components/text-display.md (ascii-font)
├─ Data table with borders/wrapping -> components/code-diff.md (TextTable)
├─ Code with syntax highlighting -> components/code-diff.md
├─ Diff viewer (unified/split) -> components/code-diff.md
├─ Line numbers with diagnostics -> components/code-diff.md
└─ Markdown content (streaming) -> components/code-diff.md (markdown)
```

### "I need user input"

```
User input?
├─ Single-line text field -> components/inputs.md (input)
├─ Multi-line text editor -> components/inputs.md (textarea)
├─ Select from a list (vertical) -> components/inputs.md (select)
├─ Tab-based selection (horizontal) -> components/inputs.md (tab-select)
└─ Custom keyboard shortcuts -> keyboard/REFERENCE.md
```

### "I need layout/positioning"

```
Layout?
├─ Flexbox-style layouts (row, column, wrap) -> layout/REFERENCE.md
├─ Absolute positioning -> layout/patterns.md
├─ Responsive to terminal size -> layout/patterns.md
├─ Centering content -> layout/patterns.md
└─ Complex nested layouts -> layout/patterns.md
```

### "I need animations"

```
Animations?
├─ Timeline-based animations -> animation/REFERENCE.md
├─ Easing functions -> animation/REFERENCE.md
├─ Property transitions -> animation/REFERENCE.md
└─ Looping animations -> animation/REFERENCE.md
```

### "I need to handle input"

```
Input handling?
├─ Keyboard events (keypress, release) -> keyboard/REFERENCE.md
├─ Focus management -> keyboard/REFERENCE.md
├─ Paste events -> keyboard/REFERENCE.md
├─ Mouse events -> components/containers.md
├─ Text selection & copy-on-select -> keyboard/REFERENCE.md (selection)
└─ Clipboard (OSC 52) -> keyboard/REFERENCE.md (clipboard)
```

### "I need to test my TUI"

```
Testing?
├─ Snapshot testing -> testing/REFERENCE.md
├─ Interaction testing -> testing/REFERENCE.md
├─ Test renderer setup -> testing/REFERENCE.md
└─ Debugging tests -> testing/REFERENCE.md
```

### "I need to debug/troubleshoot"

```
Troubleshooting?
├─ Runtime errors, crashes -> <framework>/gotchas.md
├─ Layout issues -> layout/REFERENCE.md + layout/patterns.md
├─ Input/focus issues -> keyboard/REFERENCE.md
└─ Repro + regression tests -> testing/REFERENCE.md
```

### Troubleshooting Index

- Terminal cleanup, crashes -> `core/gotchas.md`
- Text styling not applying -> `components/text-display.md`
- Input focus/shortcuts -> `keyboard/REFERENCE.md`
- Layout misalignment -> `layout/REFERENCE.md`
- Flaky snapshots -> `testing/REFERENCE.md`

For component naming differences and text modifiers, see `components/REFERENCE.md`.

## Product Index

### Frameworks
| Framework | Entry File | Description |
|-----------|------------|-------------|
| Core | `./references/core/REFERENCE.md` | Imperative API, all primitives |
| React | `./references/react/REFERENCE.md` | React reconciler for declarative TUI |
| Solid | `./references/solid/REFERENCE.md` | SolidJS reconciler for declarative TUI |

### Cross-Cutting Concepts
| Concept | Entry File | Description |
|---------|------------|-------------|
| Layout | `./references/layout/REFERENCE.md` | Yoga/Flexbox layout system |
| Components | `./references/components/REFERENCE.md` | Component reference by category |
| Keyboard | `./references/keyboard/REFERENCE.md` | Keyboard input handling |
| Animation | `./references/animation/REFERENCE.md` | Timeline-based animations |
| Testing | `./references/testing/REFERENCE.md` | Test renderer and snapshots |

### Component Categories
| Category | Entry File | Components |
|----------|------------|------------|
| Text & Display | `./references/components/text-display.md` | text, ascii-font, styled text |
| Containers | `./references/components/containers.md` | box, scrollbox, borders |
| Inputs | `./references/components/inputs.md` | input, textarea, select, tab-select |
| Code & Diff | `./references/components/code-diff.md` | code, line-number, diff, markdown, text-table |

## Resources

**Repository**: https://github.com/anomalyco/opentui
**Core Docs**: https://github.com/anomalyco/opentui/tree/main/packages/core/docs
**Examples**: https://github.com/anomalyco/opentui/tree/main/packages/core/src/examples
**Awesome List**: https://github.com/msmps/awesome-opentui
Loading
Loading