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:

  • $NAME captures one node; $$$NAME captures 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

  1. Preview: {ops: [{pat, out}, …], paths: [...]}.
    • Captures from pat are substituted into out; an empty out deletes 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.
  2. Apply: {apply: "<id>"} writes the proposal. It's refused if any file changed since the preview.
  3. 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.

S
Description
oh-my-pi style ast_grep and ast_edit tools for DSH: structural code search and previewed structural rewrites via ast-grep.
Readme
36 KiB
0 Stars 2 Watchers 0 Forks
Languages
JavaScript 100%