Skip to content

feat(omp): support oh-my-pi harness through .omp/config.yml - #112

Merged
striderZA merged 1 commit into
masterfrom
feat/omp-support
Nov 4, 2026
Merged

striderZA merged 1 commit into
masterfrom
feat/omp-support

Conversation

@striderZA

Copy link
Copy Markdown
Owner

Summary

Adds oh-my-pi (omp 18.16.0) support by wiring the existing .pi/extensions through a project-scoped .omp/config.yml. omp and Pi share one implementation. Pi behavior is unchanged apart from the fixes listed under "Pi-observable changes".

Related Issues

None. Design and acceptance details are in docs/omp-compatibility.md.

Type of Change

  • New feature
  • Bug fix
  • Documentation

Pi-observable changes

These are the only Pi-facing changes. Everything else about Pi is unchanged.

  • drift: the startup count awaits checkFileForDrift. On Pi it never incremented before this change.
  • validate, drift: startup scans also run on session_start, once per session. Pi fires both events for the same start, so a guard keeps it to one scan.
  • path-guard: accepts systemPrompt as an array (omp). Pi's string path is unchanged. Missing tool input no longer throws.
  • validate, drift: post-write checks also read omp's [PATH#TAG] edit headers. Pi write and edit with path are unchanged.
  • ocgs-question: new tool_result hook logs omp ask answers to agent-decisions.jsonl. Pi has no ask tool, so the hook does not run there.

Testing

Run on the final tree (commit 8165bb1):

  • npm test: 177 plugin tests and 54 hook and framework tests pass
  • npm run test:extensions: 25 pass (19 existing, 6 for ask decision logging)
  • npm run test:omp: 3 pass
  • npm run test:framework: passes

Acceptance matrix, run headlessly through omp --mode rpc (rpc-ui for the ask row) and pi --mode rpc. Raw logs are local under .superpowers/ (gitignored). The table summarizes them.

# Scenario omp 18.16.0 Pi 0.85.1
1 Startup load PASS. Six extensions act in a default-config run PARTIAL. Validate and drift seen; others not checked
2 /skill:help PASS BLOCKED (model access)
3 /help PASS BLOCKED
4 Path-guard read/write PASS BLOCKED
5 Path-guard edit PASS BLOCKED
6 Audit PASS BLOCKED
7 Validate after write/edit PASS BLOCKED
8 Startup scans PASS (headless) PASS (headless, -a)
9 Changelog notice PASS PASS
10 Question / ask PASS (rpc-ui) BLOCKED
11 Failure isolation PASS FAIL. One broken module aborts Pi startup
12 Launched from src/ OBSERVED. No OCGS load OBSERVED. No OCGS load

Counts: omp 11 PASS, 1 OBSERVED. Pi 2 PASS, 1 PARTIAL, 1 FAIL, 7 BLOCKED, 1 OBSERVED.

Not verified / open

  • Interactive TUI not run. This covers the omp TUI, the question picker, and the trust prompt. Row 10 ran in rpc-ui.
  • Pi model access. Pi's opencode and opencode-go keys return 401 (expired), and the NVIDIA models returned 410 and 404. Pi rows 2–7 and 10 are blocked on this.
  • Pi startup isolation. One broken extension module aborts Pi startup before any frame is sent. This PR leaves Pi as is. The isolation claim in .pi/README.md does not hold on Pi 0.85.1; that claim is unchanged here.
  • question naming on omp. The question tool is inactive by default on omp, and ask is the native tool. About 110 files under .agents/ say "use question". One sample showed the model calling ask. Renaming those references changes canonical content, so this PR does not touch them. This needs a decision.
  • Delegation. Task and /consult are broken on both harnesses and are not wired on omp. The defect is inferred from the types, not reproduced at runtime.

Checklist

  • Conventional Commits style used in branch commits
  • README updated if public interface changed (AGENTS.md, docs/pi-compatibility.md, .pi/README.md)
  • No secrets or credentials committed

Wire the existing .pi/extensions into oh-my-pi (omp 18.16.0) through a
project-scoped .omp/config.yml, so omp and Pi share one implementation.

Extension changes needed for omp. Pi-observable effects are noted:
- path-guard: read the edit target from omp's [PATH#TAG] hashline header,
  accept a string[] systemPrompt (Pi still passes a string), and tolerate
  missing tool input.
- validate and drift: post-write checks read the same hashline headers.
  Pi write and edit-with-path behavior is unchanged.
- drift: await checkFileForDrift before counting. On Pi the startup count
  never incremented, because it counted unresolved promises.
- validate and drift: startup scans also run on session_start, once per
  session. Pi fires resources_discover and session_start for the same start.
- ocgs-question: log omp's built-in ask answers to
  production/session-logs/agent-decisions.jsonl (pure helper ask-log.ts).
  Pi has no ask tool, so this path does not run there.

Tests: npm run test:extensions (25) and test:omp (3). The path-guard test
that reimplemented the matcher is replaced by a contract test that imports
the real module.

Not changed on Pi: one broken extension module still aborts Pi startup.
See docs/omp-compatibility.md.

Refs: docs/omp-compatibility.md
@striderZA
striderZA merged commit 64b0071 into master Nov 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant