Skip to content

Commit 0b1c1e2

Browse files
committed
feat: prepare cross-platform v1.0 release
1 parent f351ed8 commit 0b1c1e2

99 files changed

Lines changed: 5357 additions & 1635 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/validate.yml

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,21 @@ permissions:
99

1010
jobs:
1111
quality:
12-
runs-on: ubuntu-latest
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
os: [ubuntu-latest, windows-latest]
16+
runs-on: ${{ matrix.os }}
1317
steps:
1418
- uses: actions/checkout@v4
1519
- uses: actions/setup-node@v4
1620
with:
17-
node-version: "20"
21+
node-version: "22"
1822
cache: "npm"
23+
- uses: actions/setup-python@v5
24+
with:
25+
python-version: "3.12"
1926
- name: Install dependencies
2027
run: npm ci
2128
- name: Validate project
22-
run: npm run validate
23-
- name: Check golden invalid-flags eval
24-
run: python3 skills/omv-find/scripts/check_output.py --eval-id 26 --output skills/omv-find/evals/golden/invalid-flags.md
25-
- name: Check omv-report blocked handoff golden eval
26-
run: python3 skills/omv-report/scripts/check_output.py --eval-id 4 --output skills/omv-report/evals/golden/blocked-handoff.md
27-
- name: Check omv-report OSV golden eval
28-
run: python3 skills/omv-report/scripts/check_output.py --eval-id 5 --output skills/omv-report/evals/golden/osv-prototype-pollution.json
29-
- name: Check omv-report duplicate CNA golden eval
30-
run: python3 skills/omv-report/scripts/check_output.py --eval-id 7 --output skills/omv-report/evals/golden/duplicate-cna-warning.md
29+
run: npm run release:check

.gitignore

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# oh-my-vul state directory — findings, context snapshots, logs
22
.omv/
33

4-
# Project-scoped Codex installs created by `omv setup --scope project`
4+
# Local Codex/OpenSpec scaffolding (consumer projects may commit selected skills)
55
.codex/
66

77
# Local assistant scaffolding and nested worktrees
@@ -15,7 +15,6 @@ oh-my-claudecode/
1515
# Maintainer / agent / release engineering docs (local only — not for GitHub)
1616
openspec/
1717
/SPEC.md
18-
/AGENTS.md
1918
/CLAUDE.md
2019
/DEVELOPMENT.md
2120
/RELEASE.md
@@ -40,6 +39,3 @@ __pycache__/
4039
.idea/
4140
*.swp
4241
*.swo
43-
.omv/repro/
44-
.omv/reports/
45-
.omv/archive/

AGENTS.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Repository Guidance
2+
3+
## Purpose
4+
5+
`oh-my-vul` is a local-first, evidence-driven vulnerability research CLI and Skill collection. Keep research passive and reproduction local. Never weaken evidence gates to make a finding appear report-ready.
6+
7+
## Layout
8+
9+
- `src/cli/`: TypeScript CLI, domain workflows, renderers, and Ink TUI.
10+
- `src/cli/__tests__/`: Node test runner coverage for CLI and TUI behavior.
11+
- `skills/`: Canonical distributable Skills and their references, scripts, contracts, and evals.
12+
- `agents/`: Claude Code-specific optional subagent definitions.
13+
- `contracts/` and `shared/`: Canonical schemas and assets synchronized into Skills.
14+
- `scripts/`: metadata, asset, packaging, and release validation.
15+
- `openspec/`: local design artifacts; do not archive a change unless explicitly requested.
16+
17+
## Development
18+
19+
- Runtime baseline: Node.js 22 or later.
20+
- Install dependencies with `npm install`.
21+
- Use `npm run typecheck` for a fast TypeScript check.
22+
- Use `npm run build && npm test` for implementation changes.
23+
- Use `npm run release:check` before release-facing handoff.
24+
- Run `npm run sync-assets` after changing canonical shared assets.
25+
- Run `npm run sync-metadata` after changing package or registry metadata.
26+
27+
## Conventions
28+
29+
- Preserve deterministic JSON and non-TTY output. Ink must remain TTY-only.
30+
- Keep `.omv/` research state private and out of source control.
31+
- Use sanitized `demo-*`, `example-*`, or `fixture-*` data in tests and docs.
32+
- Treat `unknown` as a valid evidence state; do not infer exploitability or observed results.
33+
- Keep Codex and Claude Code setup paths isolated. Codex uses `.agents/skills`; Claude Code uses `.claude/skills` and optional `.claude/agents`.
34+
- Update tests, user documentation, and `CHANGELOG.md` when behavior is user-visible.
35+
36+
## Completion
37+
38+
A change is complete when relevant tests pass, generated assets and metadata are synchronized, `git diff --check` is clean, and release-facing changes pass `npm run release:check`.

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,24 @@
22

33
## Unreleased
44

5+
- Added Windows as a validated platform with Python 3 runtime discovery, shell-independent Node test execution, cross-platform Skill packaging and LOC estimation, and an Ubuntu/Windows CI matrix. Claude Code remains the default platform when `--platform` is omitted.
6+
- Reduced install overhead by replacing the static `boxen` and `cli-table3` output layer with the built-in responsive renderer, removing 21 packages from a clean npm install.
7+
- Improved first-run setup with automatic platform-scoped health verification, explicit restart and Skill invocation guidance, compact install paths, accurate dry-run labels, and clearer download/upgrade documentation.
8+
9+
## v1.0.0 - 2026-07-11
10+
11+
- Froze the 1.0 CLI compatibility surface: workflow-first public help, grouped advanced automation commands, Skill-managed primitives hidden from public catalogs, and canonical `start`, `dashboard`, and `review` workflows replacing redundant wrappers.
12+
- Froze the remaining 1.0 compatibility boundaries with root-only Node package exports, inventoried runtime/type exports, required-field JSON contracts for every public automation command, parser-aware `.omv` contract versioning, and package-to-installed-Skill content drift checks.
13+
- Removed the pre-1.0 `first`, `workspace init`, `findings workflow`, `findings doctor`, `findings open`, and permanent `findings delete` routes with focused migration errors.
14+
- Removed the undocumented experimental `omv-mcp` executable and its custom line-delimited JSON protocol before the 1.0 compatibility boundary.
15+
- Added first-class Codex setup, doctor, and uninstall support using official `~/.agents/skills` and `.agents/skills` discovery paths, with platform-specific manifests and repository guidance in `AGENTS.md`.
16+
- Raised the runtime baseline to Node.js 22 and added an Ink 7 / React 19 interactive research workspace.
17+
- Bare `omv` now opens the responsive workspace in a real TTY; `omv tui` is the explicit entry, while `omv dashboard`, `--no-tui`, pipes, CI, and JSON remain deterministic plain output.
18+
- Added keyboard workflow navigation, live filtering, evidence-first finding inspection, action-surface guidance, help, refresh, narrow-terminal layouts, and an interactive guided start flow.
19+
- Hardened detail refresh/error recovery, explicit plain-mode routing, and terminal layouts down to a bounded 52x16 minimum.
20+
- Expanded the TUI with Overview, Findings, Campaign, and Activity views; Summary/Evidence/Threat/History detail tabs; structured filters; and a read-only command palette.
21+
- Added V3 full-width wrapped finding and Activity-event detail with scrolling and range indicators, plus paged access to the latest 200 Activity entries.
22+
523
## v0.10.1 - npx package binary alias
624

725
- Register `oh-my-vul` as a package bin alias for `omv`, so `npx oh-my-vul setup` works. Previously only `omv` / `omv-mcp` were exported, which made npx report "could not determine executable to run".

README.md

Lines changed: 85 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# oh-my-vul
44

5-
**Evidence-first vulnerability research for Claude Code.**
5+
**Evidence-first vulnerability research for Codex and Claude Code.**
66

77
Plan the research, trace the evidence, reproduce locally, and turn confirmed findings into review-ready reports.
88

@@ -16,7 +16,7 @@ Plan the research, trace the evidence, reproduce locally, and turn confirmed fin
1616

1717
---
1818

19-
`oh-my-vul` combines Claude Code skills with a local CLI to make open-source vulnerability research repeatable:
19+
`oh-my-vul` combines agent skills with a local CLI to make open-source vulnerability research repeatable in Codex and Claude Code:
2020

2121
- **Start with a clear scope.** Campaigns and attack-surface cards turn a broad target into focused research questions.
2222
- **Keep claims tied to evidence.** Findings record the tested version, source, sink, guards, reproduction, and remaining unknowns.
@@ -26,15 +26,17 @@ Research state stays in a private `.omv/` workspace. The project is designed for
2626

2727
## Quick Start
2828

29-
**Requirements:** [Claude Code](https://docs.anthropic.com/en/docs/claude-code) and Node.js 20 or later.
29+
**Requirements:** [Codex](https://developers.openai.com/codex/) or [Claude Code](https://docs.anthropic.com/en/docs/claude-code), Node.js 22 or later, and Python 3 for bundled Skill helpers. Windows, Linux, and macOS are supported; on Windows, use a modern Windows Terminal or PowerShell for the Ink workspace.
3030

31-
Install the CLI and add the skills and agents to Claude Code:
31+
Install the CLI and add the skills to Codex:
3232

3333
```sh
34-
npm install --global oh-my-vul
35-
omv setup
34+
npm install --global oh-my-vul@latest
35+
omv setup --platform codex
3636
```
3737

38+
`setup` prints the destination and immediately verifies the completed install. Once every check passes, restart Codex and invoke `$omv`. Codex installs user skills under `~/.agents/skills`. For Claude Code, run `omv setup --platform claude-code`, restart it, and invoke `/omv`. Claude Code remains the backward-compatible default platform.
39+
3840
From the root of the project you want to research, start a guided workspace:
3941

4042
```sh
@@ -47,42 +49,111 @@ omv start
4749
omv start --vuln xss,auth --no-interactive
4850
```
4951

50-
Open that project in Claude Code, then run:
52+
Open that project in Codex, then invoke the Skill (or choose it from `/skills`):
5153

5254
```text
53-
/omv
55+
$omv
5456
```
5557

56-
`/omv` applies the evidence and review gates, shows the active queue, and recommends the next action. From the shell, bare `omv` opens the same contextual workspace view.
58+
Claude Code users invoke `/omv`. The Skill applies the evidence and review gates, shows the active queue, and recommends the next action. From an interactive terminal, bare `omv` opens the Ink research workspace.
59+
60+
## Interactive Workspace
61+
62+
Run `omv` or `omv tui` in a terminal to browse the priority queue and inspect evidence without leaving the shell:
63+
64+
```text
65+
Tab / 1-4 Cycle or jump to Overview, Findings, Campaign, and Activity
66+
↑/↓ or j/k Move through findings
67+
/ Search by id, package, status, vulnerability, or action
68+
f Filter by lifecycle status and action surface
69+
Enter Switch queue/detail on narrow terminals
70+
[ / ] Switch Summary, Evidence, Threat, and History detail tabs
71+
Space Expand the selected finding or Activity event full-width
72+
PgUp/PgDn Page through expanded detail or Activity history
73+
g / G Jump to the first or last available line
74+
: Open the read-only command palette
75+
a Explain the selected CLI or agent action
76+
r Refresh local workspace state
77+
? Show keyboard help
78+
q Quit and restore the previous terminal screen
79+
```
80+
81+
The Findings view keeps the priority queue and splits local detail into Summary, Evidence, Threat, and History. Compact and split views may abbreviate text to preserve layout; press `Space` to open complete logical fields full-width, wrapped to the current terminal, with a visible line range and scrolling. Overview highlights current scope and next priority, Campaign shows lane counts and deterministic next actions, and Activity pages through the latest 200 local lifecycle changes. Activity rows are selectable and `Space` reveals the complete event reason, transition, and path. Structured filters compose with text search. The command palette navigates and performs local UI actions only.
82+
83+
The workspace is read-only: it displays commands but never executes research commands or agent skill invocations. Use `omv dashboard` for deterministic plain output, or `omv --no-tui` / `omv tui --no-tui` to disable interactive rendering. JSON commands and piped output never start Ink. Terminals below 52 columns or 16 rows show a bounded resize prompt instead of an overflowing workspace.
5784

5885
<details>
5986
<summary><strong>Installation options</strong></summary>
6087

88+
Download and preview the install without writing Skills:
89+
90+
```sh
91+
npx --yes oh-my-vul@latest setup --scope user --platform codex --dry-run
92+
```
93+
6194
Install only for the current project:
6295

6396
```sh
64-
omv setup --scope project
97+
omv setup --scope project --platform codex
6598
```
6699

67100
Upgrade the package, then refresh a user-level or project-level install:
68101

69102
```sh
70103
npm install --global oh-my-vul@latest
71104
# Choose the scope you use:
72-
omv setup --scope user --force
73-
omv setup --scope project --force
105+
omv setup --scope user --platform codex --force
106+
omv setup --scope project --platform codex --force
74107
```
75108

109+
Every real `setup` now runs the matching platform and scope health check automatically. Run `omv doctor --strict --platform codex` separately only when diagnosing installation drift.
110+
76111
Preview either scope without writing files:
77112

78113
```sh
79114
# Choose the scope you use:
80-
omv setup --scope user --dry-run
81-
omv setup --scope project --dry-run
115+
omv setup --scope user --platform codex --dry-run
116+
omv setup --scope project --platform codex --dry-run
82117
```
83118

119+
Replace `codex` with `claude-code` for a Claude Code installation. The two platforms use separate directories and manifests, so both can be installed safely. If a global npm install reports a permissions error, fix npm's user-level prefix instead of installing this package with `sudo`.
120+
84121
</details>
85122

123+
## 1.0 CLI Compatibility
124+
125+
The 1.x public CLI has two stable tiers:
126+
127+
- **Core workflow:** `omv`, `start`, `dashboard`, `review`, `setup`, `uninstall`, `doctor`, `version`, and `help`.
128+
- **Advanced automation:** public `campaign`, `findings`, `workspace`, `radar`, `dedup`, `disclose`, `submissions`, and `config` commands listed by `omv help --all`.
129+
130+
Documented arguments, exit behavior, and `--json` output from those public commands follow SemVer compatibility within 1.x. Artifact scaffolding and diagnostics invoked by bundled Skills (`campaign surfaces/seed`, `eval`, `request`, `repro`, `sources`, `report`, `threat-map`, and `verification`) are deterministic but Skill-managed; use the versions installed from the same package release.
131+
132+
For JSON automation, [contracts/cli-json.v1.json](contracts/cli-json.v1.json) lists every public JSON form, its result kind, required typed fields, and gate behavior. Existing listed fields keep their type and meaning throughout 1.x; commands may add fields. Validation and readiness commands may return a complete diagnostic JSON document with a non-zero exit when a documented gate is not met.
133+
134+
The supported Node API is the package root only:
135+
136+
```js
137+
import { listFindings, reviewFinding, setup } from "oh-my-vul";
138+
```
139+
140+
Deep imports such as `oh-my-vul/dist/cli/*` are private implementation details and are blocked by the package export map. The exact runtime and type allowlist lives in [contracts/node-api.v1.json](contracts/node-api.v1.json).
141+
142+
Versioned `.omv` formats follow [the contract compatibility policy](contracts/README.md) and the inventory in [contracts/artifact-contracts.v1.json](contracts/artifact-contracts.v1.json). Closed contracts require a new major for any field-set change; extensible contracts permit optional additions only when supported readers and writers remain compatible. Package upgrades never rewrite private research data solely to update a schema.
143+
144+
CLI and bundled Skills are release-coupled. Run `omv doctor --platform codex` or `omv doctor --platform claude-code` after an upgrade; content or version drift is repaired explicitly with the scoped `omv setup ... --force` command printed by doctor.
145+
146+
The 1.0 surface replaces earlier redundant commands:
147+
148+
| Removed before 1.0 | Canonical command |
149+
|---|---|
150+
| `omv first` | `omv start` or `omv campaign init` |
151+
| `omv workspace init` | `omv start` |
152+
| `omv findings workflow` | `omv dashboard` |
153+
| `omv findings doctor <id>` | `omv review <id>` |
154+
| `omv findings open <id>` | `omv findings show <id>` |
155+
| `omv findings delete <id>` | `omv findings archive <id> --reason <reason>` |
156+
86157
## The Workflow
87158

88159
```text

0 commit comments

Comments
 (0)