2.7 KiB
omp-ast
oh-my-pi's ast_grep and ast_edit tools for the DeepSeek Harness (DSH): structural code search and structural rewrites that are previewed before they are applied. Both are backed by ast-grep (tree-sitter grammars for JS/TS/TSX, Python, Go, Rust, Java, C/C++, C#, Kotlin, Swift, Ruby, PHP, Lua, Bash, HTML, CSS, JSON, YAML, …).
Tools
ast_grep
| Field | Description |
|---|---|
pat (required) |
One AST pattern, e.g. console.log($$$ARGS), def $F($$$): $$$BODY |
path |
File, directory or glob; several separated by ; (default: session workspace) |
lang |
Language override (ts, tsx, python, cpp, …) |
globs |
Include/exclude globs (! prefix excludes) |
selector |
AST kind to select inside the pattern (advanced) |
skip |
Paging offset |
Pattern grammar:
$NAMEcaptures one node;$$$NAMEcaptures zero or more nodes.$_and$$$match without binding.- Names are UPPERCASE and stand for whole nodes.
Output is grouped per file as LINE:TEXT, with the captured metavariables:
2 matches in 1 file
src/a.js
2: console.log(x)
↳ $$$ARGS=[x]
3: console.log(x, 2)
↳ $$$ARGS=[x, 2]
ast_edit
- Preview:
{ops: [{pat, out}, …], paths: [...]}.- Captures from
patare substituted intoout; an emptyoutdeletes the node. - Ops run in order, and each sees the result of the previous one.
- The call returns a diff preview and a proposal id. No file is modified.
- Captures from
- Apply:
{apply: "<id>"}writes the proposal. It's refused if any file changed since the preview. - Discard:
{reject: "<id>"}drops the proposal.
Applied writes go through DSH's filesystem service (sandbox policy, observation tracking), and the Web UI shows a diff card. Proposals expire after proposalTtlMinutes.
Requirements
npm i -g @ast-grep/cli # or: npm i -g --prefix ~/.local @ast-grep/cli
The plugin looks for the ast-grep binary on PATH and in ~/.local/bin. It ignores sg, which collides with util-linux on many distros.
Installation
dsh plugin --profile web add git+https://git.rizzy.dev/DSH-Plugins/omp-ast.git
Or in the Web UI, go to Settings → Plugins → Install and paste the same URL. For development, clone the repo and run dsh plugin --profile web add link:/path/to/omp-ast. Restart DSH afterwards (systemctl --user restart dsh).
Configuration
- id: omp-ast
config:
maxMatches: 200 # ast_grep page size
maxFiles: 1000 # ast_edit safety cap
proposalTtlMinutes: 30
Tests
npm test runs 4 tests against the real ast-grep CLI and DSH's fs backend.