@omercnet/paseo-omp 0.3.0-next.109.1 → 0.3.0-next.111.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,20 @@ Community OMP integration for Paseo. The plugin registers the distinct `omp-plug
4
4
 
5
5
  > **Alpha preview:** persistence and protocol contracts are tested, but upgrades may still require re-importing sessions created by an earlier preview.
6
6
 
7
+ ## Screenshots
8
+
9
+ Both PNGs come from the plugin's isolated Paseo development daemon at 2× pixel density. Browser
10
+ DevTools rewrites local filesystem paths and verifies that no private organization names remain
11
+ before capture.
12
+
13
+ ### Native plugin manager
14
+
15
+ ![OMP native plugin manager](https://raw.githubusercontent.com/omercnet/paseo-plugins/main/paseo-omp/docs/images/plugin-manager.png)
16
+
17
+ ### Typed OMP configuration
18
+
19
+ ![OMP typed configuration editor](https://raw.githubusercontent.com/omercnet/paseo-plugins/main/paseo-omp/docs/images/workspace-settings.png)
20
+
7
21
  ## Quick start
8
22
 
9
23
  Requirements: Paseo `>=0.9.0-beta.1 <0.10.0`, OMP `18.1.15` or newer, and OMP RPC protocol v2. Paseo 0.9 is required for the Help report's supported copy and external-link APIs, nested provider-subagent ancestry, spawning-tool links, npm-managed installation, and the complete client integration.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omercnet/paseo-omp",
3
- "version": "0.3.0-next.109.1",
3
+ "version": "0.3.0-next.111.1",
4
4
  "type": "module",
5
5
  "description": "Paseo integration for OMP, including its direct provider and workspace tooling.",
6
6
  "license": "MIT",
@@ -29,21 +29,15 @@
29
29
  "coding-agents"
30
30
  ],
31
31
  "files": [
32
- "package-lock.json",
33
- "CHANGELOG.md",
34
32
  "LICENSE",
35
33
  "README.md",
36
- "SUPPORT.md",
37
- "TESTING.md",
38
- "docs",
39
34
  "scripts/prepare-dependencies.mjs",
40
35
  "index.client.tsx",
41
36
  "index.server.ts",
42
37
  "client",
43
38
  "server",
44
39
  "shared",
45
- "paseo-plugin.json",
46
- "tsconfig.json"
40
+ "paseo-plugin.json"
47
41
  ],
48
42
  "scripts": {
49
43
  "check": "biome check .",
@@ -1,2 +1,2 @@
1
1
  /** Release Please keeps this bundle-safe constant aligned with package.json. */
2
- export const PASEO_OMP_PACKAGE_VERSION = "0.3.0-next.109.1"; // x-release-please-version
2
+ export const PASEO_OMP_PACKAGE_VERSION = "0.3.0-next.111.1"; // x-release-please-version
package/CHANGELOG.md DELETED
@@ -1,113 +0,0 @@
1
- # Changelog
2
-
3
- ## [0.3.0](https://github.com/omercnet/paseo-plugins/compare/paseo-omp-v0.2.1...paseo-omp-v0.3.0) (2026-09-18)
4
-
5
-
6
- ### Features
7
-
8
- * **paseo-omp:** add first-class MCP management ([#64](https://github.com/omercnet/paseo-plugins/issues/64)) ([5a8fefa](https://github.com/omercnet/paseo-plugins/commit/5a8fefa9148e8d01f0461aa4a90619ec6ae2c2fa))
9
- * **paseo-omp:** add workspace-scoped OMP management ([#59](https://github.com/omercnet/paseo-plugins/issues/59)) ([2807aec](https://github.com/omercnet/paseo-plugins/commit/2807aec6217ed2d52f8b4666f0a41a688109f8f5))
10
- * **paseo-omp:** make composer pills configurable ([#76](https://github.com/omercnet/paseo-plugins/issues/76)) ([28e7501](https://github.com/omercnet/paseo-plugins/commit/28e75011a06a11cdc963187aa4106dfc21d561e6))
11
- * **release:** publish plugins to npm ([#80](https://github.com/omercnet/paseo-plugins/issues/80)) ([3c93048](https://github.com/omercnet/paseo-plugins/commit/3c93048cfefda97d8c2bc1631e3428fb64bdad09))
12
-
13
-
14
- ### Bug Fixes
15
-
16
- * **paseo-omp:** advertise nested subsession capability ([#62](https://github.com/omercnet/paseo-plugins/issues/62)) ([fcb4e82](https://github.com/omercnet/paseo-plugins/commit/fcb4e8243e9559d70f26ac6945e2f3c0bf05d575))
17
- * **paseo-omp:** bound model catalogs and retain safe failure diagnostics ([#73](https://github.com/omercnet/paseo-plugins/issues/73)) ([e70afb7](https://github.com/omercnet/paseo-plugins/commit/e70afb72be782446e7ff585bad40940c7231bdc5))
18
- * **paseo-omp:** correlate terminal events by request ([#81](https://github.com/omercnet/paseo-plugins/issues/81)) ([41f756e](https://github.com/omercnet/paseo-plugins/commit/41f756e9bebf5cbc275e5cbd3657c37d45a18997))
19
- * **paseo-omp:** fail closed on unowned later-turn terminal events ([#69](https://github.com/omercnet/paseo-plugins/issues/69)) ([072cd09](https://github.com/omercnet/paseo-plugins/commit/072cd09e38e450376bcd3f4c7b5eae9a670b56b5))
20
- * **paseo-omp:** preserve prompt scheduling error fidelity ([#67](https://github.com/omercnet/paseo-plugins/issues/67)) ([1c6d549](https://github.com/omercnet/paseo-plugins/commit/1c6d549fddca48be8fd86b4dd2c5faea526c8ac0))
21
- * **paseo-omp:** reconcile incomplete terminal outcomes ([#68](https://github.com/omercnet/paseo-plugins/issues/68)) ([854f4e6](https://github.com/omercnet/paseo-plugins/commit/854f4e6daddf905c671bb39a94d06a2de0c6d51d))
22
- * **paseo-omp:** replay failed turns from native transcript ([#79](https://github.com/omercnet/paseo-plugins/issues/79)) ([4a13b77](https://github.com/omercnet/paseo-plugins/commit/4a13b778a9ba413b61fe0cc85878d3c333c161d2))
23
- * **paseo-omp:** scope providers and auxiliary state to named profiles ([#74](https://github.com/omercnet/paseo-plugins/issues/74)) ([b265ad3](https://github.com/omercnet/paseo-plugins/commit/b265ad317a47230ec76dba799197443664492729))
24
- * **paseo-omp:** settle concurrent startup races ([#70](https://github.com/omercnet/paseo-plugins/issues/70)) ([9d4e6ef](https://github.com/omercnet/paseo-plugins/commit/9d4e6efb26041f9c88ab4ed6c02a9526520b83e9))
25
- * **paseo-omp:** show immutable approval mode ([#66](https://github.com/omercnet/paseo-plugins/issues/66)) ([4c586dc](https://github.com/omercnet/paseo-plugins/commit/4c586dc7d012127ee7570077a0d12cc0d6415bd4))
26
- * **paseo-omp:** support Paseo 0.9 beta ([#103](https://github.com/omercnet/paseo-plugins/issues/103)) ([0444d52](https://github.com/omercnet/paseo-plugins/commit/0444d52078a52befa62bb52f44545f22ab10e8c7))
27
- * **paseo-omp:** support unkeyed terminal events ([#89](https://github.com/omercnet/paseo-plugins/issues/89)) ([a00a831](https://github.com/omercnet/paseo-plugins/commit/a00a83158993fdf648fc10e06f1d8f8ebc62fa6a))
28
-
29
- ## [0.2.1](https://github.com/omercnet/paseo-plugins/compare/paseo-omp-v0.2.0...paseo-omp-v0.2.1) (2026-09-15)
30
-
31
-
32
- ### Bug Fixes
33
-
34
- * **paseo-omp:** handle oversized pasted images ([#55](https://github.com/omercnet/paseo-plugins/issues/55)) ([4b6ed7d](https://github.com/omercnet/paseo-plugins/commit/4b6ed7d3015f1f85dcc13a9dd29061efef5f22c7))
35
- * **paseo-omp:** preserve buffered terminal ownership evidence ([#54](https://github.com/omercnet/paseo-plugins/issues/54)) ([b49400e](https://github.com/omercnet/paseo-plugins/commit/b49400e09d73cd67a23986f52c17bfc1f23cd297))
36
- * **paseo-omp:** steer auto messages during active turns ([#61](https://github.com/omercnet/paseo-plugins/issues/61)) ([b36002b](https://github.com/omercnet/paseo-plugins/commit/b36002bbc5b108cd525dd9c356fbdb89d6a9f3e6))
37
-
38
- ## [0.2.0](https://github.com/omercnet/paseo-plugins/compare/paseo-omp-v0.1.2...paseo-omp-v0.2.0) (2026-09-14)
39
-
40
-
41
- ### Features
42
-
43
- * **paseo-omp:** add config workspace shell ([#48](https://github.com/omercnet/paseo-plugins/issues/48)) ([1c0126b](https://github.com/omercnet/paseo-plugins/commit/1c0126b51bd3c8ceccacf7758fc14270cd67440e))
44
- * **paseo-omp:** add opt-in output redaction ([#44](https://github.com/omercnet/paseo-plugins/issues/44)) ([0b0cea1](https://github.com/omercnet/paseo-plugins/commit/0b0cea1501230437fe4d6390b67ca25ee2079c93))
45
- * **paseo-omp:** browse complete runtime settings catalog ([#49](https://github.com/omercnet/paseo-plugins/issues/49)) ([ef68cd7](https://github.com/omercnet/paseo-plugins/commit/ef68cd754fa3aad4a15bcdc8649f8c7dcdcde79e))
46
- * **paseo-omp:** edit scalar settings in sidebar ([#50](https://github.com/omercnet/paseo-plugins/issues/50)) ([78da43f](https://github.com/omercnet/paseo-plugins/commit/78da43fd155ed06e29faef507156399b55cf3439))
47
- * **paseo-omp:** support explicit env passthrough ([#39](https://github.com/omercnet/paseo-plugins/issues/39)) ([e22b3b4](https://github.com/omercnet/paseo-plugins/commit/e22b3b448f218bdecfcb3a168c14fa32051a6392))
48
-
49
-
50
- ### Bug Fixes
51
-
52
- * **omp:** preserve safe published URLs ([#42](https://github.com/omercnet/paseo-plugins/issues/42)) ([4530430](https://github.com/omercnet/paseo-plugins/commit/4530430a02bee076f8940c376401d3266ce17499))
53
- * **paseo-omp:** align prompt attachment rendering ([#41](https://github.com/omercnet/paseo-plugins/issues/41)) ([4b708c8](https://github.com/omercnet/paseo-plugins/commit/4b708c897b4af4cd6673e7581f736e95843b545b))
54
- * **paseo-omp:** expose native Paseo tools ([#52](https://github.com/omercnet/paseo-plugins/issues/52)) ([3b52adf](https://github.com/omercnet/paseo-plugins/commit/3b52adff1de6329fa9f0bc4a1dcea339166e3974))
55
- * **paseo-omp:** label direct MCP tool calls ([#53](https://github.com/omercnet/paseo-plugins/issues/53)) ([e09b1fd](https://github.com/omercnet/paseo-plugins/commit/e09b1fd2c05cb45422e7d0633e8b638d0841b931))
56
- * **paseo-omp:** preserve structured tool results ([#46](https://github.com/omercnet/paseo-plugins/issues/46)) ([9e5fe98](https://github.com/omercnet/paseo-plugins/commit/9e5fe989e57e100f67285257cada3242218eee58))
57
- * **paseo-omp:** render WebP images across clients ([#51](https://github.com/omercnet/paseo-plugins/issues/51)) ([397cb2d](https://github.com/omercnet/paseo-plugins/commit/397cb2d1e660e43e22312ecf9f054d77afcddc6e))
58
- * **paseo-omp:** stop speculative stream redaction ([#40](https://github.com/omercnet/paseo-plugins/issues/40)) ([539cb61](https://github.com/omercnet/paseo-plugins/commit/539cb61db0b904b8130319c7887852f991c50aba))
59
-
60
- ## [0.1.2](https://github.com/omercnet/paseo-plugins/compare/paseo-omp-v0.1.1...paseo-omp-v0.1.2) (2026-09-13)
61
-
62
-
63
- ### Bug Fixes
64
-
65
- * **paseo-omp:** serialize persistent session registration ([#35](https://github.com/omercnet/paseo-plugins/issues/35)) ([03d38bc](https://github.com/omercnet/paseo-plugins/commit/03d38bc7e4a3d00ec54190e2b234a459bbdc55ae))
66
- * **paseo-omp:** settle late child dispatches ([#34](https://github.com/omercnet/paseo-plugins/issues/34)) ([0746f11](https://github.com/omercnet/paseo-plugins/commit/0746f11fd94f15028fd624ac7a99ac8ebd88b63d))
67
-
68
- ## [0.1.1](https://github.com/omercnet/paseo-plugins/compare/paseo-omp-v0.1.0...paseo-omp-v0.1.1) (2026-09-13)
69
-
70
-
71
- ### Bug Fixes
72
-
73
- * **paseo-omp:** preserve Plexus plugin credentials ([#27](https://github.com/omercnet/paseo-plugins/issues/27)) ([0674ef1](https://github.com/omercnet/paseo-plugins/commit/0674ef1d3d66efa37ec9d2da9a19dd57472c2cdd))
74
- * **paseo-omp:** wait for session registration ([#30](https://github.com/omercnet/paseo-plugins/issues/30)) ([82e901e](https://github.com/omercnet/paseo-plugins/commit/82e901e4bb0e66cafeb572c4bd92e0461b57a647))
75
-
76
- ## 0.1.0 (2026-09-13)
77
-
78
-
79
- ### Features
80
-
81
- * **paseo-omp:** add first OMP provider plugin ([#19](https://github.com/omercnet/paseo-plugins/issues/19)) ([f6f3e5e](https://github.com/omercnet/paseo-plugins/commit/f6f3e5e224bf8537f85305d79ea5d1bcf5849549))
82
-
83
- ## Changelog
84
-
85
- ## Unreleased
86
-
87
- ### Features
88
-
89
- * Add the permanent `omp-plugin` direct provider, OMP workspace tools, diagnostics, versioned persistence, and nested-subagent support.
90
- * Add Release Please packaging, Git installation, compatibility policy, and release rollback guidance.
91
- * Add a digest-pinned official Paseo Docker canary with deterministic mock, configured MCP, and optional local Ollama inference.
92
- * Document the deduplicated Paseo core OMP issue audit, verified plugin fixes, host-owned concerns, and remaining alpha gaps.
93
- * Add the OMP sidebar configuration editor with revision-checked scalar writes, structured collection display, and documentation of provider-profile options including names-only inherited environment settings.
94
- * Add official OMP documentation links and an OMP-native plugin manager with status, user-scoped lifecycle actions, upgrades, write-only non-secret scalar configuration, and presence-only secret handling.
95
-
96
- ### Bug Fixes
97
-
98
- * Cancel pending generic permissions before interrupting OMP so the host receives a terminal cancellation.
99
- * Rebuild the native branch watermark during replay so a post-rewind prompt retains terminal ownership.
100
- * Label `xd://` and MCP timeline calls with their registered human-readable title instead of the generic `write` transport or technical route name.
101
- * Support host-wide session discovery when Paseo opens the unscoped import sheet, preventing its provider failure path from crashing affected 0.8 daemons.
102
- * Recover degraded or compacted `agent_end` outcomes from complete streamed assistant evidence while continuing to fail closed on partial evidence.
103
- * Preserve `PLEXUS_API_KEY` when launching OMP so Plexus extension providers can attach their configured bearer header.
104
- * Serialize concurrent persistent-session registration so startup restoration waits instead of returning transient provider failures.
105
- * Expose caller-scoped Paseo orchestration tools under their native names so OMP skills can invoke `list_profiles`, `create_agent`, and related tools without CLI fallback.
106
- * Render validated WebP timeline images on capable clients, show a local fallback when decoding fails, hide machine-facing coordinate annotations, and request PNG/JPEG output from OMP for cross-client compatibility.
107
-
108
- ### Security
109
-
110
- * Split release metadata from least-privilege artifact publishing, gate publication on exact-commit CI, and attest release artifacts.
111
- * Make release archives self-contained, restrict source inputs to tracked allowlisted files, and verify offline installation plus contained extraction.
112
- * Disable dependency lifecycle scripts during Git installation and verify both plugin entries from a fresh checkout.
113
- * Document native-output fidelity, optional best-effort configured-value replacement, its limits, and the host-owned redaction boundary.
package/SUPPORT.md DELETED
@@ -1,43 +0,0 @@
1
- # Support
2
-
3
- ## Ownership
4
-
5
- `@omercnet` maintains the `paseo-omp` package, its release artifacts, and the translation between Paseo's provider protocol and OMP's `rpc-ui` protocol. Support is best effort; no response-time or compatibility SLA is promised.
6
-
7
- Report general plugin packaging, installation, UI, provider, replay, tool, terminal, and compatibility failures with the [paseo-omp bug template](https://github.com/omercnet/paseo-plugins/issues/new?template=omp-plugin.yml). Open **OMP → Help**, refresh the bounded diagnostic report, review it, and paste it into the issue. Use the narrower [OMP RPC compatibility template](https://github.com/omercnet/paseo-plugins/issues/new?template=omp-rpc-compatibility.yml) for confirmed native protocol changes.
8
-
9
- After the failure is isolated:
10
-
11
- - report an OMP CLI or `rpc-ui` implementation defect to [Oh My Pi](https://github.com/can1357/oh-my-pi/issues);
12
- - report a Paseo plugin SDK, loader, or provider-protocol defect to [Paseo](https://github.com/getpaseo/paseo/issues);
13
- - keep adaptation, packaging, and cross-project compatibility work in this repository.
14
-
15
- Do not put credentials, private repository paths, session transcripts, or unredacted RPC payloads in an issue. Report vulnerabilities through the [private GitHub Security Advisory form](https://github.com/omercnet/paseo-plugins/security/advisories/new), not a public issue.
16
-
17
- ## Supported versions
18
-
19
- - Paseo: `>=0.9.0-beta.1 <0.10.0` on both the daemon and every app loading the client entry. The 0.9 floor provides the supported plugin copy and external-link APIs as well as nested provider-subagent ancestry and spawning-tool links.
20
- - OMP: `18.1.15` is the oldest supported release. The required full Docker canary passes with 18.1.15 and 18.2.0; the hard runtime contract remains `rpc-ui` protocol v2, not the version string alone.
21
- - Plugin release channel: alpha. Backward compatibility is best effort until stable `0.1.0`; every known migration requirement must be stated in the release notes.
22
- - Typed approvals: optional. When both peers negotiate `typedToolApprovals: 1`, the plugin uses typed tool permissions. Otherwise it retains the bounded generic extension-question flow.
23
-
24
- ## Known limitations
25
-
26
- - `omp` and `omp-plugin` are independent provider identities. Agents, provider settings, and persisted handles do not migrate automatically between them.
27
- - Do not open the same underlying OMP session concurrently through both providers. Reservation tracking is provider-local and cannot coordinate ownership with Paseo's bundled adapter.
28
- - OMP 18.1.15 does not advertise typed tool approvals. The plugin uses its bounded generic permission fallback until both peers negotiate `typedToolApprovals: 1`.
29
- - OMP releases through 18.2.x may omit the originating prompt `requestId` from `agent_end`. A matching ID is authoritative when present, and a mismatch is discarded before changing turn state. For an unkeyed later-turn terminal, the plugin uses a bounded ordered fallback: the accepted prompt must not be known local-only, a fresh native user entry must correlate to it, current-turn assistant activity must follow that entry, OMP must report idle and non-compacting, and no permission, tool, steer, or child-session work may remain. Ambiguous candidates are ignored while OMP is active; once OMP is confirmed idle, unresolved ambiguity fails only the Paseo turn and keeps the OMP process available. This deliberately accepts a residual same-agent risk: a sufficiently delayed unkeyed event with indistinguishable ordered evidence can still be misattributed. It is safer than accepting any idle `agent_end`, while remaining usable with released OMP builds that cannot provide request identity.
30
- - Timeline correlation rebuilds an invalid watermark from a complete pre-prompt `get_branch_messages` snapshot, not replayed model context or an evicting identity cache. Snapshots are limited to 1,024 entries and 4 MiB; duplicate IDs, surplus exact-text matches, unavailable history, and exceeded bounds leave users uncorrelated rather than claiming an old entry. Repeated accepted prompts within a turn consume matching branch occurrences in order.
31
- - Configured MCP servers are supported and bridged into OMP. Paseo's own orchestration tools appear under their native names when the daemon's **Enable Paseo tools** / `daemon.mcp.injectIntoAgents` setting is enabled; other MCP servers remain namespaced. Exact Paseo `toolPolicy` preapproval cannot be represented by OMP `set_host_tools` and therefore fails session startup closed. `disallowedTools` applies only to recognized native OMP built-ins; unknown names are rejected and MCP tools are not silently filtered through it.
32
- - `qwen2.5:0.5b` is provided only for free exploratory inference. It may ignore exact-output instructions and is not a deterministic protocol or tool-use oracle; use `canary-mock/Deterministic Canary` for assertions.
33
- - The deterministic mock does not implement OMP's compaction-summary contract, so `/compact` reports `OMP compaction failed` in the canary; compaction remains covered by protocol fixtures.
34
- - `/handoff` reports `OMP command failed` in the controlled canary even with deterministic role models configured; treat handoff as unavailable there until its native prerequisite is isolated.
35
- - Paseo 0.9.0-beta.1 or newer is required for platform-owned plugin URL opening and reliable image-card transformation before Overview grouping.
36
- - Native Fast mode and a first-class plan mode are not exposed. `/handoff` is implemented but is not reproducible in the controlled canary without its native OMP workflow prerequisites.
37
- - Terminal-started OMP sessions are discoverable and importable but are not registered automatically through a terminal hook.
38
- - Paseo clients do not own OMP sessions. Mobile or desktop disconnects remain subject to Paseo's reconnect grace while the daemon-owned provider and OMP child continue independently; reconnecting can reveal an existing turn but does not transfer or sever runtime ownership.
39
- - OMP tool output reaching RPC stdout is strictly parsed and bounded, but channel purity ultimately depends on OMP keeping non-protocol output off stdout.
40
-
41
- The deduplicated comparison with every known OMP report in `getpaseo/paseo` is maintained in [docs/core-provider-issue-audit.md](docs/core-provider-issue-audit.md).
42
-
43
- See [TESTING.md](TESTING.md#omp-rpc-compatibility-intake) for the schema-drift intake and regression process.
package/TESTING.md DELETED
@@ -1,150 +0,0 @@
1
- # OMP provider parity audit
2
-
3
- Validated against the Paseo plugin SDK versions pinned in `package.json` and the real OMP compatibility matrix: high-use historical releases 17.2.15, 17.3.4, 18.0.11, and 18.1.10; minimum supported release 18.1.15; latest published 18.1 patch 18.1.22; and current release 18.2.0. On 2026-09-18, the full controlled canary passed against OMP 18.1.15 and 18.2.0 on official Paseo image `0.9.0-beta.1@sha256:f75a0eb3547ad3cc6bbdeaa7277d2d50eb4d06a9dd669d480371d7adf1c911b5`.
4
-
5
- Classifications:
6
-
7
- - **Equivalent**: same consumer-observable behavior is implemented by the `omp-plugin` provider.
8
- - **Unsupported**: OMP has no meaningful native operation for this behavior.
9
- - **Protocol**: Paseo core owns the behavior for every public provider.
10
- - **Blocked**: parity needs the linked narrow public API or core change; the plugin fails visibly or provides the documented partial behavior.
11
-
12
- ## Evidence matrix
13
-
14
- | Inventory behavior | Classification | Evidence |
15
- | --- | --- | --- |
16
- | Binary availability and version diagnostics | **Equivalent** | Provider refresh calls the bounded `checkAvailability` hook with normalized profile options and the host deadline. `server/provider-diagnostics.ts` distinguishes missing, unrunnable, incompatible, and available runtimes without exposing probe output. |
17
- | Catalog discovery | **Equivalent** | `server/provider/catalog.ts::discoverOmpCatalog` launches with the normalized profile command, environment policy, parameters, workspace, and timeout settings; selected daemon values are resolved only when the catalog child spawns. |
18
- | Catalog cache identity | **Equivalent** | `getCatalogCacheKey` hashes normalized `providerOptions`, including configured `inheritEnv` names but never their values or secret-derived fingerprints, plus profile `settings`, scope, working directory, and the effective default command. Core applies configured `models` and `additionalModels` per profile. |
19
- | Default mode | **Equivalent** | Catalog reports `defaultMode: full`; `full` is always available, while bundled `write`/`ask` modes are advertised only after `permission` negotiation. Covered by `tests/provider.test.ts` and `tests/provider-options.test.ts`. |
20
- | Create session | **Equivalent** | `OmpProviderSession.open`; ordered `session.opened`, committed `session.config`, and `session.ready` regression. |
21
- | Resume session | **Equivalent** | Versioned plugin persistence validates the native session ID, authorizes cwd against the configured `providerOptions.params.sessionDir`, resumes exactly, and replays before ready. Covered by `tests/provider.test.ts` and `tests/provider-conformance.test.ts`. |
22
- | List sessions | **Equivalent** | `session.list` consumes profile-scoped `providerOptions` and `settings`, scans the configured session root, and returns separate bounded first- and last-user-prompt previews. |
23
- | Import session | **Protocol** and **Equivalent** | `session.list` plus persistence replay feeds the generic plugin-provider import path and creates an `omp-plugin` agent without changing bundled-provider records. |
24
- | Archive/unarchive | **Unsupported** | OMP has no native archive operation. Neither adapter mutates OMP transcripts; Paseo still archives its own agent record. |
25
- | Working directory | **Equivalent** | Absolute cwd validation, launch forwarding, resume ownership checks, session-list scoping, and host-tool cwd tests. |
26
- | Environment propagation | **Equivalent** | `config-normalization.ts` overlays session env on profile env; `omp-rpc.ts::buildOmpEnvironment` allowlists inherited runtime/provider variables and rejects loader/path injection. |
27
- | System prompts | **Protocol** and **Equivalent** | Core combines agent and daemon prompts before `session.open`; plugin forwards one bounded `--append-system-prompt`. Profile/recovery tests preserve it. |
28
- | Persisted sessions | **Equivalent** | Versioned opaque plugin persistence, transcript reservation, replay, process recovery, and cleanup quarantine regressions are covered in `tests/provider.test.ts` and `tests/provider-conformance.test.ts`. |
29
- | Ephemeral sessions | **Equivalent** | `persist: false` maps to `--no-session`; runtime loss fails visibly instead of inventing a resume handle. |
30
- | Internal sessions | **Protocol** and **Equivalent** | Metadata generation requests `persistSession: false`; the generic plugin host maps that to `config.persist: false`, then OMP receives `--no-session`. |
31
- | Text prompts | **Equivalent** | Bounded multipart text joins and native prompt lifecycle coverage in `tests/provider.test.ts`. |
32
- | Image prompts | **Equivalent** | Valid native image models receive image blocks; text-only models receive private content-addressed local files with an aggregate cap and turn/session/failure cleanup. The file path is valid because the direct provider and OMP child share the daemon host. |
33
- | Structured attachments | **Equivalent** | Forge change requests/issues, legacy GitHub forms, text, reviews, and uploaded files render to bounded OMP prompt text; regression in `tests/provider.test.ts`. |
34
- | Optimistic message correlation | **Equivalent** | Native entry lookup, repeated-text occurrence correlation, steering correlation, replay-boundary dedupe, and exactly-one `session.prompt_result` regressions. Bounded branch snapshots rebuild incomplete or evicted replay watermarks; duplicate IDs, surplus matching entries, unavailable snapshots, and count/byte overflow retain local user-message fallback instead of claiming an old entry. |
35
- | Terminal correlation on later turns | **Equivalent with legacy fallback** | A matching `agent_end.requestId` is authoritative and a mismatch is discarded before turn state changes. Released OMP builds that omit the field use ordered evidence from the accepted prompt: a fresh branch-correlated native user entry, later current-turn assistant activity, an idle non-compacting runtime, and no conflicting permission, tool, steer, or child-session work. `prompt_result.agentInvoked: false` remains local-only. Active ambiguous terminals are ignored; confirmed-idle ambiguity fails only the Paseo turn without killing the OMP process. Tests cover three sequential legacy prompts, stale terminals before evidence and while active, repeated text, local-only results, keyed mismatch/match, and degraded state/history. The remaining risk is same-agent misattribution when a delayed unkeyed event is indistinguishable from this ordered evidence. |
36
- | Streaming assistant text | **Equivalent** | `OmpTimelineProjector` publishes stable complete snapshots with frame coalescing and bounded retained bytes. |
37
- | Streaming reasoning | **Equivalent** | Indexed thinking blocks map to stable `reasoning` items and share stream bounds. |
38
- | `contentIndex` ordering | **Equivalent** | Stable 0→1→0 updates, sparse-index rejection, and 64-block bounds are tested in `tests/provider.test.ts`. |
39
- | Tool lifecycle | **Equivalent** | Running/update/terminal snapshots, mapped shell/read/edit/write/search/fetch/subagent details, ID reuse defense, and terminal cleanup are covered. |
40
- | Todo lifecycle | **Equivalent** | Todo tool results and reminder/auto-clear events reduce to one stable `omp:todos` item; malformed inputs degrade safely. |
41
- | Compaction events | **Equivalent** | Manual and automatic operations retain IDs, distinguish retry/skipped/canceled/failed states, flush streams, and refresh usage. |
42
- | Custom messages | **Equivalent** | Displayable custom and bash-execution messages map to typed or fallback items; `display: false` remains hidden. |
43
- | Advisor messages | **Equivalent** | Advisor notes preserve severity/attribution in stable tool-call blocks; `advisor_yielded` emits completion notice. |
44
- | System notices | **Equivalent** | Native notices and safe passive UI notifications map to bounded notification items; hidden custom notices remain hidden. Negotiated MCP authorization URLs use a schema-validated plugin item, can route through the caller-scoped Paseo `browser_new_tab` tool, and retain a notification fallback. |
45
- | Ask interactions | **Equivalent** | Select/confirm/input/editor questions, including remote OAuth redirect/code completion, option descriptions, fixed-only rejection, bounded freeform input, native sentinel/follow-up submission, cancellation, timeout, and turn ownership are covered by permission regressions. Allow, deny, cancel, timeout, and interruption remain in the agent timeline. |
46
- | Typed tool permission presentation | **Equivalent** | OMP `typedToolApprovals: 1` is negotiated reciprocally; strict native request/cancel/response frames are correlated exactly once and mapped from trusted shell/edit/write identity to bounded, content-preserving `kind: "tool"` permissions. Older OMP builds retain generic extension questions. |
47
- | Slash command catalog | **Equivalent** | Native commands and aliases refresh authoritatively; the bundled `compact`, `autocompact`, `handoff`, `steer`, and `follow-up` commands are always published. |
48
- | Manual `/compact` | **Equivalent** | Uses native `compact`, exposes one loading/completed operation, keeps long requests alive, refreshes usage, and supports interruption. |
49
- | `/autocompact` | **Equivalent** | `on`, `off`, and state-backed `toggle` use native `set_auto_compaction`; invalid or unavailable state fails visibly. |
50
- | `/handoff` | **Equivalent** | Structured command calls native `handoff` with optional instructions and owns a provider turn until native assistant/tool/permission/terminal events settle. |
51
- | `/follow-up` | **Equivalent** | Structured command sends native `follow_up` and owns a provider turn rather than publishing an immediate synthetic completion. |
52
- | Native steering | **Equivalent** | `delivery: steer` and `/steer` use native steering, correlate one user row, preserve active-turn ownership, and reject stale/terminal targets. |
53
- | Interrupt | **Equivalent** | Native abort, exactly-one terminal event, in-flight tool/child retirement, permission cleanup, and concurrent-close serialization are covered. |
54
- | Model selection | **Equivalent** | Catalog-backed opaque public IDs map to native provider/model IDs; committed state is re-read after open/configure/recovery. |
55
- | Thinking selection | **Equivalent** | Model-specific effort lists, defaults, runtime changes, invalid selections, and recovery are covered. |
56
- | Mode selection | **Equivalent** | `full`/`write`/`ask` map to `yolo`/`write`/`always-ask`; catalogs and opens expose interactive modes only when `permission` was negotiated, and live changes retain the bundled “new session” constraint. |
57
- | Retry fallback events | **Equivalent** | Fallback telemetry renders bounded status items and triggers committed model/thinking refresh without trusting event strings as state. |
58
- | Context and token usage | **Equivalent** | Periodic, post-compaction, fallback, terminal, timeout, and stale-generation samples publish `session.usage`. |
59
- | Native host tools | **Equivalent** | Paseo's caller-scoped MCP endpoint is converted to OMP host tools with workspace identity, progress, cancellation, bounded results, and ownership cleanup. |
60
- | Configured MCP servers | **Equivalent** | stdio/http/SSE transports are opened by the plugin host process, namespaced, paginated, bounded, and passed through OMP's native host-tool API. The agent-scoped MCP composer control invokes OMP's native management commands without copying its discovery or credential state. |
61
- | Subagents | **Equivalent** | Live lifecycle/progress/events create provider-owned child sessions; subscription failure removes the negotiated capability. |
62
- | Nested child timelines | **Equivalent** | Child/grandchild ancestry, stable IDs, live restart, cold transcript replay, terminal states, and cumulative replay bounds are covered. |
63
- | Conversation rewind | **Equivalent** | Only conversation scope is advertised; active-turn/stale-token rejection and branch replay are tested. |
64
- | Native branch transition | **Equivalent** | New native IDs atomically replace persistence/reservation ownership; indeterminate post-branch failures close and quarantine the session. |
65
- | Custom executable command | **Equivalent** | Strict `providerOptions.command` replaces the executable prefix and survives recovery. |
66
- | Custom environment | **Equivalent** | Strict `providerOptions.env` is merged below launch env and survives recovery. Strict `providerOptions.inheritEnv` stores bounded names only and resolves unshadowed daemon values at catalog/session spawn. Unexpected or internal launch failures use fixed fallbacks rather than serializing launch configuration, while explicit public validation errors may include caller-supplied configuration names or values. |
67
- | Configured output redaction | **Equivalent** | `providerOptions.outputRedaction` defaults to `none`. `configured-values` performs bounded best-effort literal replacement for explicitly supplied credential values and every non-empty value selected through `inheritEnv`, regardless of its name, across root and nested timelines; generated, encoded, transformed, and independently streamed fragments remain outside its scope. |
68
- | Provider parameters | **Equivalent** | `sessionDir`, `rpcTimeoutMs`, and `smol`/`slow`/`plan` model roles map to native arguments and survive recovery; cold resume authorization scans the normalized configured `sessionDir`. |
69
- | Configured model replacement/additions | **Protocol** and **Equivalent** | Paseo applies profile `models` replacement and `additionalModels` overlays to the profile-specific plugin catalog. |
70
- | Generic denied tools | **Equivalent** | Core forwards a bounded, deduplicated `deniedTools` list; the plugin turns recognized OMP built-ins into an explicit launch allow-list before the process starts and rejects unknown names rather than silently under-enforcing. |
71
- | Strict provider option validation before launch | **Equivalent** | The provider registers `OmpProviderOptionsSchema`, including bounded `inheritEnv` names; core normalizes once and forwards the same names-only value through availability, cache identity, discovery, listing, and launch. |
72
- | Profile settings in provider discovery | **Equivalent** | Core forwards profile settings to catalog, cache-key, and session-list operations; the provider includes them in cache identity without claiming unsupported live OMP settings. |
73
- | Terminal-started OMP session hooks | **Unsupported** | The bundled terminal hook registry contains Claude, Codex, and OpenCode only; OMP exposes no registered terminal activity hook to preserve. |
74
- | Metadata-generation flows | **Protocol** and **Equivalent** | Generic structured generation selects plugin models from catalog metadata and creates non-persisted sessions; provider responses use the existing parse/validation retry loop. |
75
-
76
- The output boundary validates protocol shapes and bounds strings, structured values, depth, item counts, nodes, cumulative serialized bytes, and cycles. With the default `outputRedaction: "none"`, it does not heuristically redact or rewrite native OMP, model, tool, or permission content. The optional `configured-values` mode replaces exact configured credential literals on a best-effort basis, but it cannot detect generated secrets or encoded, transformed, or independently streamed fragments. Credentials therefore must not appear in prompts or tool output, and centralized Paseo policy is required for redaction guarantees. Unexpected or internal launch failures use fixed public fallbacks rather than serializing launch configuration, while explicit public validation errors may include caller-supplied configuration names or values.
77
-
78
- ## Integration boundary tests
79
-
80
- The provider identity boundary is permanent: `server/provider/registration.ts` registers only `omp-plugin`, while diagnostics recognize both the bundled `omp` provider and this plugin. `tests/server-bundle.test.ts` verifies the packaged server contribution keeps that identity. No test removes, replaces, aliases, migrates, or assumes ownership of the bundled provider.
81
-
82
- Run the real Docker host/container ownership boundary test with:
83
-
84
- ```sh
85
- npm run test:integration:docker
86
- ```
87
-
88
- The script starts the MCP server as a host process, calls it from a Node container, executes a host tool, and verifies the returned host PID, host working directory, caller agent ID, and workspace ID. Set `PASEO_OMP_DOCKER_IMAGE` to override the default `node:22.22.1-bookworm-slim` image.
89
-
90
- Run the equivalent Windows-host/WSL boundary with:
91
-
92
- ```sh
93
- npm run test:integration:wsl
94
- ```
95
-
96
- The WSL script skips when `wsl.exe` or WSL Node is unavailable. Set `PASEO_OMP_REQUIRE_WSL=1` to make either condition fatal, as CI does. `PASEO_OMP_WSL_NODE` may override the default `node` executable inside WSL.
97
-
98
- Run the full local provider integration canary with:
99
-
100
- ```sh
101
- npm run test:integration:canary
102
- ```
103
-
104
- Set `PASEO_CANARY_OMP_VERSION` to exercise another pinned release. The local runner knows the SHA-256 values for every version in the compatibility matrix; an unlisted version requires explicit `PASEO_CANARY_OMP_SHA256_AMD64` and `PASEO_CANARY_OMP_SHA256_ARM64` values. It allocates isolated loopback ports, builds a version-specific image, waits for both services to become healthy, runs the deterministic provider scenarios, prints container logs on failure, and always removes its containers, volumes, and image namespace. CI runs this full canary for OMP 18.1.15 and 18.2.0 whenever `paseo-omp` changes; both matrix entries feed the required `CI sentinel` gate and must pass before the supported OMP floor changes.
105
-
106
- The Linux real-OMP CI matrix downloads checksummed `omp-linux-x64` assets for OMP 17.2.15, 17.3.4, 18.0.11, 18.1.10, 18.1.15, 18.1.22, and 18.2.0, verifies each binary's pinned GitHub release SHA-256, and runs `PASEO_OMP_REAL_E2E=1 PASEO_OMP_VERSION=<version> npm test -- tests/provider.real.e2e.test.ts`. The historical entries are the four pre-floor releases with more than 4,000 downloads shown by npm for the seven days ending 2026-09-15; they are compatibility regression probes, not a support commitment. The remaining entries cover the supported floor, newest patch in that minor line, and current release. The test uses the real OMP binary and a local deterministic OpenAI-compatible model endpoint, including three sequential prompts on one native session, a Bash tool, and oversized-image transport.
107
-
108
- The controlled canary passed end to end with OMP 18.1.15 and 18.2.0 on 2026-09-18. In addition to runtime health, catalog, prompts, tools, MCP, permissions, steering, interruption, persistence, Hub, usage, rewind, and plugin RPC coverage, it verified that a direct child has `parentSubagentId: null` and the root task's `toolCallId`, a nested child has its direct parent's public subagent ID and the nested task's `toolCallId`, both children finish as `completed`, and both timelines remain independently fetchable without cross-contamination.
109
-
110
- ## OMP RPC compatibility intake
111
-
112
- Treat every upstream `rpc-ui` change as explicit compatibility work. Do not widen a Zod schema with `passthrough`, `unknown`, or an optional field merely to accept a new frame.
113
-
114
- 1. Open an issue with the [OMP RPC compatibility template](https://github.com/omercnet/paseo-plugins/issues/new?template=omp-rpc-compatibility.yml). Record exact OMP, plugin, Paseo daemon, and Paseo app versions; the negotiated protocol and capabilities; the smallest reproduction; and sanitized frame shapes. Never attach credentials, private paths, prompts, or transcripts.
115
- 2. Reproduce against both the reported OMP revision and the pinned minimum-tested `omp/18.1.15` binary. Classify the change as additive optional, additive required, removed or renamed, type or semantic change, or negotiation change.
116
- 3. Compare the affected ready, request, response, or event shape with the strict schemas in `server/provider/omp-rpc.ts`. Decide whether the plugin can support both contracts without ambiguity. A breaking contract requires an explicit compatibility decision and changelog entry, not silent coercion.
117
-
118
- Required drift is release-blocking. If OMP adds a mandatory frame, removes or renames a required method or field, or changes an existing field's meaning, keep the strict parser and make session startup or the active request fail visibly. Do not silently discard the frame, make the requirement optional, or route around negotiation. Resume release work only after both sides have an explicit compatible contract, fixtures, focused regressions, and a real-binary result.
119
- 4. Add the changed frame to `tests/fixtures/fake-omp.ts`, then add a focused regression for acceptance, rejection, negotiation, cancellation, and bounds as applicable. Capability changes must cover both reciprocal negotiation and the absent-capability fallback. Typed approval drift must retain the generic extension-question path when `typedToolApprovals: 1` is not negotiated.
120
- 5. Run `npm test -- tests/omp-rpc.test.ts tests/provider.test.ts`, `npm run test:coverage`, and `PASEO_OMP_REAL_E2E=1 npm test -- tests/provider.real.e2e.test.ts` with the candidate OMP binary.
121
- 6. Update the minimum-tested version only after the real-binary job is pinned to that release and its SHA-256, the compatibility issue links the evidence, and the README, support matrix, CI job name, fixture version, and changelog agree.
122
-
123
- The plugin maintainer owns triage and adaptation. Escalate an isolated OMP implementation defect upstream and an isolated Paseo SDK or provider-protocol defect to Paseo, while keeping the cross-project regression in this repository.
124
-
125
- ## Release publication
126
-
127
- `release-please.yml` creates GitHub releases and publishes every released plugin path to npm through trusted publishing. Stable versions use the `latest` distribution tag; prereleases use `next`. npm generates provenance from the GitHub Actions OIDC identity, and the workflow waits for registry propagation before succeeding.
128
-
129
- ### Alpha release channel
130
-
131
- `release-please-config.json` sets only `paseo-omp` to `prerelease: true` with `prerelease-type: alpha`. With the existing `initial-version: 0.1.0` and manifest version `0.0.0`, the first release PR is expected to prepare `0.1.0-alpha.1`, tag it as `paseo-omp-v0.1.0-alpha.1`, and mark the GitHub release as a prerelease. Other monorepo components keep their existing stable release behavior.
132
-
133
- Do not manually edit `paseo-omp/package.json` or `.release-please-manifest.json` before that release PR; Release Please must update both atomically. After alpha validation, remove `prerelease` and `prerelease-type` from the `paseo-omp` package config and let Release Please prepare stable `0.1.0`. Never retag an alpha commit as stable.
134
-
135
- The go/no-go criteria, manual acceptance boundary, and alpha limitation list are maintained in [docs/alpha-release-checklist.md](docs/alpha-release-checklist.md). Preparation does not authorize a push, tag, GitHub release, or publication; explicit maintainer approval after testing is required.
136
-
137
- ## Audit verification
138
-
139
- - `npm run check`: clean.
140
- - `npm run typecheck`: clean.
141
- - `npm test`: full Vitest suite passed, with environment-gated scenarios skipped when their runtimes were unavailable.
142
- - `npm test -- tests/provider-conformance.test.ts`: host-boundary conformance coverage includes `prompt.command`, `session.configure`, typed and fallback permission allow/deny/cancel paths, registry-driven reload/removal, verified stubborn-descendant cleanup, and sequential turns plus interrupt races with post-turn barriers.
143
- - `PASEO_OMP_REAL_E2E=1 PASEO_OMP_VERSION=<version> npm test -- tests/provider.real.e2e.test.ts`: the installed matrix version's catalog and hermetic real-binary text/Bash and oversized-image scenarios run against a local deterministic model.
144
- - `npm run test:coverage`: Vitest enforces aggregate 85% function and 89% line coverage over loaded source modules. Generated `dist/**` trees are excluded.
145
- - `npm run test:integration:install`: npm package acquisition retains required production dependencies, and a fresh Git-style checkout runs frozen production-only preparation with lifecycle scripts disabled. Both installed trees resolve runtime dependencies, compile the client and server entries with Paseo's host compiler, and load the server contribution.
146
- - `npm run test:integration:docker`: verifies the host/container ownership boundary.
147
- - `npm run test:integration:wsl`: locally skips when `wsl.exe` is unavailable; Windows CI sets `PASEO_OMP_REQUIRE_WSL=1`, so this boundary remains required there.
148
- - `npm run test:integration:canary`: passed against OMP 18.1.15 and 18.2.0 on official Paseo `0.9.0-beta.1`; direct and nested ancestry, spawning-tool links, terminal status, and independently addressable child timelines passed.
149
- - `zizmor .github/workflows`: no findings (offline audit; six repository-wide suppressions remain).
150
- - Release Please 17.1.2 `config.json` and `manifest.json` schema validation: passed for `release-please-config.json` and `.release-please-manifest.json`.
@@ -1,68 +0,0 @@
1
- # Alpha release checklist
2
-
3
- This checklist prepares `paseo-omp-v0.1.0-alpha.1`. It does not authorize publication. A maintainer must explicitly approve the tested package before any push, tag, GitHub release, or npm publication.
4
-
5
- ## Release identity
6
-
7
- - [ ] Release Please proposes `0.1.0-alpha.1` from manifest version `0.0.0`.
8
- - [ ] Package and tag names are `@omercnet/paseo-omp` and `paseo-omp-v0.1.0-alpha.1`.
9
- - [ ] Provider identity remains `omp-plugin`; bundled `omp` remains independent and enabled or disabled by the user.
10
- - [ ] Paseo requirement remains the reviewed range, currently `>=0.9.0-beta.1 <0.10.0`.
11
- - [ ] Minimum tested OMP version, checksum, CI job, README, SUPPORT, and TESTING agree.
12
-
13
- ## Required gates
14
-
15
- - [ ] `npm run check`
16
- - [ ] `npm run typecheck`
17
- - [ ] `npm run test:coverage`; aggregate loaded-source coverage meets the configured threshold.
18
- - [ ] Real installed OMP regression against the documented minimum version.
19
- - [ ] `npm run test:integration:install`
20
- - [ ] `npm run test:integration:docker`
21
- - [ ] Windows/WSL host ownership job passes in CI.
22
- - [ ] Docker canary matrix passes on the exact release candidate.
23
- - [ ] GitHub Actions syntax and release-configuration schemas pass.
24
-
25
- ## Required manual acceptance
26
-
27
- - [ ] Maintainer installs the exact `npm pack` candidate into the controlled official-Paseo Docker canary.
28
- - [ ] Maintainer verifies catalog, prompt, tools, configured MCP, permissions, steer, interrupt, import/resume, subagents, rewind, usage, Hub, and plugin surfaces.
29
- - [ ] Maintainer confirms the known limitations are acceptable for alpha.
30
- - [ ] Maintainer explicitly authorizes publication after testing. Silence or prior approval for development is not release authorization.
31
-
32
- ## Alpha blocker
33
-
34
- - [x] `omp-audit.1`: incomplete or compacted `agent_end` frames recover success, failure, or native cancellation from complete streamed `message_end` evidence, or from bounded history whose entry IDs correlate with the streamed turn. Idle state is confirmed before and after retrieval, and concurrent interrupts remain authoritative. Missing, unavailable, non-correlatable, or conflicting terminal evidence fails closed with content-free count diagnostics.
35
-
36
- ## Accepted alpha limitations
37
-
38
- These may remain only when called out in `SUPPORT.md`, `CHANGELOG.md`, and the GitHub prerelease notes:
39
-
40
- - Native Fast mode is not exposed.
41
- - No first-class plan mode; `/handoff` depends on native OMP prerequisites not reproduced by the deterministic canary.
42
- - Terminal-started OMP sessions are importable but are not registered automatically.
43
- - Large skill-body presentation has no dedicated provider regression.
44
- - OMP RPC stdout contamination is structurally mitigated but requires upstream channel purity.
45
- - `omp` and `omp-plugin` do not share ownership, configuration, or persisted handles.
46
- - The deterministic model does not implement OMP compaction summarization; protocol fixtures cover compaction behavior.
47
- - The tiny Ollama model is exploratory and is not a deterministic oracle.
48
-
49
- ## Non-blocking post-alpha cleanup
50
-
51
- - [ ] `omp-maintenance.1`: remove `ProviderRegistrationCompat`, both `ProviderCatalogOptionsCompat` declarations, and `parseProviderInputCompat` after the published `@getpaseo/plugin` types natively expose the registration hooks and request fields they bridge. The required upstream surface is `providerOptionsSchema`, `getCatalogCacheKey`, `checkAvailability`, catalog/session-list `providerOptions` plus `settings`, and session-open `deniedTools`. This is type/compatibility cleanup only; it must not change provider behavior and does not block alpha.
52
-
53
- ## Release notes
54
-
55
- The prerelease notes must include:
56
-
57
- 1. Alpha support statement and compatibility range.
58
- 2. Permanent side-by-side `omp-plugin` identity.
59
- 3. Provider SDK capability percentage and link to the README matrix.
60
- 4. Link to the deduplicated [core-provider issue audit](core-provider-issue-audit.md).
61
- 5. Verification totals from the exact release commit.
62
- 6. Known limitations above, including the distinction between supported MCP host tools, unsupported exact `toolPolicy`, and native-only `disallowedTools`.
63
- 7. Install, upgrade, rollback, support, and security-reporting links.
64
- 8. Artifact provenance verification command.
65
-
66
- ## Publication boundary
67
-
68
- Release Please may prepare metadata. Publication must use npm trusted publishing from the immutable release commit. Never retag an alpha commit as stable.
@@ -1,126 +0,0 @@
1
- # Configuration
2
-
3
- Open the global **OMP** sidebar to browse and edit machine-wide state, or open the workspace **OMP** panel from the workspace tab or Explorer to manage project-scoped state. Scalar edits in the global surface use OMP's native `config set` and `config reset` commands. The same view provides bounded row editors for `modelRoles`, `retry.fallbackChains`, `cycleOrder`, `task.agentModelOverrides`, `task.agentServiceTierOverrides`, `task.agentPrewalk`, and `task.agentAdvisor` when OMP includes them in its native settings catalog. Workspace edits create validated overrides in `<workspace>/.omp/config.yml`; removing an override restores the effective global or default value. Other arrays and records, and all credentials, remain read-only.
4
-
5
- The **Plugin** tab documents the supported `omp-plugin` launch options, including names-only inherited environment configuration. Paseo's public plugin API does not expose the effective provider options for active launches, so the tab does not claim profile values are active. Choose **OMP Plugin** when creating an agent. Model, mode, thinking level, system prompt, persistence, MCP servers, workspace, and agent environment use Paseo's standard provider controls.
6
-
7
- ## Optional provider profile overrides
8
-
9
- Advanced launch overrides belong in an `omp-plugin` provider profile. The provider options schema is strict; unknown fields fail validation.
10
-
11
- ```json
12
- {
13
- "provider": "omp-plugin",
14
- "providerOptions": {
15
- "command": ["/opt/omp/bin/omp"],
16
- "params": {
17
- "sessionDir": "/var/lib/omp/sessions",
18
- "rpcTimeoutMs": 60000,
19
- "smolModel": "openai/gpt-5-mini",
20
- "slowModel": "anthropic/claude-opus-5",
21
- "planModel": "openai/gpt-5.4"
22
- }
23
- }
24
- }
25
- ```
26
-
27
- | Option | Purpose |
28
- | --- | --- |
29
- | `command` | Complete OMP executable and argument prefix. |
30
- | `env` | Non-secret process overrides applied below the session launch environment. |
31
- | `inheritEnv` | Daemon environment variable names copied only when OMP starts. Values are never stored in the profile or displayed in the sidebar. |
32
- | `outputRedaction` | `none` (default) preserves native output. `configured-values` performs best-effort literal replacement only for explicitly supplied configured credential values from profile/session credential environment fields and configured MCP headers or environment. |
33
- | `params.sessionDir` | Native OMP session directory supplied through `--session-dir`. Used consistently by discovery, import, resume, and launch. |
34
- | `params.rpcTimeoutMs` | Startup, request, catalog, and availability timeout, from 1 ms through 10 minutes. |
35
- | `params.smolModel` | Native selector supplied through `--smol`. |
36
- | `params.slowModel` | Native selector supplied through `--slow`. |
37
- | `params.planModel` | Native selector supplied through `--plan`. |
38
-
39
- Paseo's generic provider profile fields remain available:
40
-
41
- | Profile field | Behavior |
42
- | --- | --- |
43
- | `models` | Replaces the discovered model list. |
44
- | `additionalModels` | Extends the discovered model list. |
45
- | `disallowedTools` | Restricts only the known native OMP built-ins accepted by this plugin. It becomes an explicit OMP allow-list; unknown names fail closed rather than being ignored. It does not filter MCP host tools. |
46
- | `paseoTools` | Enables or restricts which caller-scoped Paseo orchestration tools the daemon includes before they reach OMP as MCP host tools. |
47
-
48
- These options cover every plugin-specific launch value. Values that belong to an individual agent, including model, mode, thinking level, title, system prompt, MCP servers, persistence, and cwd, remain standard Paseo session fields rather than duplicate plugin options.
49
-
50
- ## OMP-native plugins
51
-
52
- Open **OMP → OMP plugins** globally for user-scoped management, or use the workspace **OMP** panel to include project-scoped installations and effective project overrides. The manager uses OMP's documented singular `omp plugin` CLI and supports install, enable, disable, upgrade, and uninstall operations. Every state-changing action requires explicit confirmation; already-running OMP sessions are unchanged.
53
-
54
- Project-scoped lifecycle commands run from the selected workspace and use `--scope project`. Duplicate path installations that share one npm package identity remain read-only because OMP's lifecycle CLI addresses npm plugins by package name rather than installation path. Plugin configuration exposes schema metadata without returning current or default values. Non-secret scalar plugin settings can be set or deleted through write-only controls. Secret settings are presence-only and delete-only because OMP's CLI would otherwise expose a new secret through process arguments.
55
-
56
- The Configuration view links to the official OMP settings reference, value parsing and precedence guides, relevant category sections, and a small curated set of setting-specific anchors.
57
-
58
-
59
- ## MCP tools, management, and policy boundary
60
-
61
- Configured MCP servers and Paseo's caller-scoped MCP tools are supported. The plugin discovers their schemas, assigns collision-safe OMP names, binds them before `session.ready`, forwards progress and terminal results, propagates cancellation, and renders calls with friendly labels.
62
-
63
- Use the **MCP** control beside the composer on an **OMP Plugin** agent to run OMP's native list, add, reload, test, authorize, enable, disable, resource, and prompt commands. The control is agent-scoped because OMP MCP discovery depends on both the active profile and the workspace directory. The global OMP sidebar remains a host-level health and settings surface; a separate workspace manager would duplicate OMP's own discovery and precedence rules.
64
-
65
- Command output, setup questions, and OAuth prompts appear in the agent timeline. OAuth URLs render as an interactive card and always retain the full provider authorization URL, never substituting OMP's daemon-local `/launch` shortcut. **Open in Paseo Browser** calls the current agent's caller-scoped `browser_new_tab` tool, so the authorization page becomes a browser tab in the same workspace; it requires Paseo tools to be injected into the agent, browser tools to be enabled, and a connected Paseo desktop browser host. **Open on this device** remains available when no browser host is connected. For a loopback callback to complete automatically, the chosen browser host must run on the daemon machine. Otherwise, finish authorization in either browser, copy the final redirect URL or authorization code, and submit it in the OMP authorization prompt. Tokens and refresh material are stored by OMP on the daemon (or its configured auth broker), never in the Paseo client or plugin timeline.
66
-
67
- Paseo's exact session `toolPolicy` preapproval grants are not equivalent to OMP's `set_host_tools` contract. The plugin cannot preserve that policy exactly, so any non-empty `toolPolicy` rejects session startup. It never converts exact grants into broader access. `disallowedTools` is separate: it controls only recognized native OMP built-ins and rejects unknown names.
68
-
69
- ## Credentials and environment
70
-
71
- The plugin is deny-by-default. It inherits only its fixed built-in allowlist of core provider authentication variables plus exact names that an operator selects with `providerOptions.inheritEnv`; it does not discover or inherit arbitrary credential-shaped names. Prefer OMP's native credential store or auth broker whenever possible.
72
-
73
- For example:
74
-
75
- ```json
76
- {
77
- "provider": "omp-plugin",
78
- "providerOptions": {
79
- "inheritEnv": ["ACME_OMP_API_KEY"],
80
- "outputRedaction": "configured-values",
81
- "env": {
82
- "ACME_OMP_REGION": "us-east-1"
83
- }
84
- }
85
- }
86
- ```
87
-
88
- `inheritEnv` accepts an array of at most 256 names matching `[A-Za-z_][A-Za-z0-9_]{0,127}`. Selecting a name is an operator trust decision: its daemon-owned value becomes available to the OMP child and anything OMP launches. The plugin resolves selected values from the Paseo daemon environment immediately before each catalog or session launch. Unselected variables remain absent. Explicit `providerOptions.env` and per-session `env` overlays win over inherited values with the same name.
89
-
90
- Profiles, persistence, errors, and catalog cache identity contain only the configured `inheritEnv` names, never resolved values or secret-derived hashes. A selected variable that is present and not shadowed by explicit `env` must contain at least 4 UTF-8 bytes. The existing 64 KiB per-value and 1 MiB total environment bounds still apply; shadowed daemon values are neither validated nor counted.
91
-
92
- Process-control variables are always rejected case-insensitively, even when explicitly selected. The blocked prefix families are `BUN_INSTALL*`, `DYLD_*`, `GIT_CONFIG*`, `LD_*`, and `NPM_CONFIG_*`. The blocked exact names are:
93
-
94
- ```text
95
- BASH_ENV, BUN_OPTIONS, CLASSPATH, CLAUDE_BASH_NO_CI, CLAUDE_BASH_NO_LOGIN,
96
- CLAUDE_CODE_SHELL_PREFIX, EDITOR, ELECTRON_RUN_AS_NODE, ENV, GEM_HOME, GEM_PATH,
97
- GIT_SSH_COMMAND, HOME, JAVA_TOOL_OPTIONS, NODE_OPTIONS, NODE_PATH,
98
- OMP_AUTORESEARCH_DB_DIR, OMP_COMMAND, OMP_GITHUB_CACHE_DB, OMP_PROFILE,
99
- OMP_WORKTREE_DIR, PATH, PATHEXT, PERL5LIB, PERL5OPT, PI_BASH_NO_CI,
100
- PI_BASH_NO_LOGIN, PI_CODING_AGENT_DIR, PI_CODING_AGENT_SESSION_DIR,
101
- PI_CONFIG_DIR, PI_CONFIG_FILES, PI_GIT_COMMON_DIR, PI_PACKAGE_DIR, PI_PROFILE,
102
- PI_PROJECT_DIR, PI_SESSION_ID, PI_SHELL_PREFIX, PI_SUBPROCESS_CMD,
103
- PI_WORKTREE_DIR, PWD, PYTHONHOME, PYTHONINSPECT, PYTHONPATH, PYTHONSTARTUP,
104
- RUBYLIB, RUBYOPT, SHELL, SYSTEMROOT, USERPROFILE, VISUAL, XDG_CACHE_HOME,
105
- XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_RUNTIME_DIR, XDG_STATE_HOME, _JAVA_OPTIONS
106
- ```
107
-
108
- Unlike `inheritEnv`, `providerOptions.env` stores its literal values in the provider profile/configuration. Use it only for deliberate non-secret overrides. If configuration contains sensitive values anyway, restrict `<paseo-home>/config.json` to the daemon account (`chmod 600` on POSIX), protect backups, and never attach it to an issue.
109
-
110
- The plugin validates and bounds native protocol data, but it does not heuristically detect, redact, or rewrite credentials in OMP, model, or tool content. Never put credentials in prompts or tool output. With `outputRedaction: "configured-values"`, every non-empty value selected through `inheritEnv` is treated as sensitive regardless of its name, alongside the existing explicitly configured credential values. Exact configured literals are replaced on a best-effort basis; generated secrets and encoded, transformed, or independently streamed fragments are not detected. With the default `none`, inherited values are not rewritten in output. Centralized Paseo policy is required for redaction guarantees. Unexpected or internal launch failures use fixed fallback messages rather than serializing the launch configuration, while explicit public validation errors may include caller-supplied configuration names or values.
111
-
112
- ## Modes and permissions
113
-
114
- - `full` is always available.
115
- - `write` and `ask` appear when Paseo negotiates provider permission support.
116
- - Typed OMP approval frames become Paseo tool permissions when both sides negotiate `typedToolApprovals: 1`.
117
- - OMP 18.1.15 uses the bounded generic interaction fallback.
118
- - Changing approval mode requires a new session. Live model and thinking changes are supported.
119
-
120
- ## Persistence and images
121
-
122
- Non-persisted sessions use `--no-session`. Persistent sessions keep a versioned native handle, replay before becoming ready, and recover with the effective launch configuration.
123
-
124
- For text-only models, image inputs are written to a private bounded temporary directory shared with the local OMP child and removed after the turn, session, or failed launch.
125
-
126
- Every OMP process launched by the plugin receives provider-owned `OMP_NO_WEBP=1` compatibility mode after caller environment validation, so generated and resized images use PNG or JPEG across Paseo clients without reducing the configured environment limits. Persisted or upstream WebP blocks are still retained: capable clients render them directly, while an unsupported client shows a per-image fallback instead of failing the timeline item.
@@ -1,109 +0,0 @@
1
- # Core OMP provider issue audit
2
-
3
- This audit compares reports in `getpaseo/paseo` with the community `omp-plugin` provider. It was refreshed on 2026-09-18 from GitHub issue titles and bodies containing `OMP`, `oh-my-pi`, or `rpc-ui`, OMP-related pull requests, and materially equivalent Pi/RPC reports. GitHub Discussions were also inspected; the repository had no OMP-related discussion.
4
-
5
- Issue and pull-request pairs are consolidated by root cause. A closed upstream issue does not prove the plugin implements the behavior, and an open upstream issue does not imply the plugin is affected.
6
-
7
- Status meanings:
8
-
9
- - **Verified**: the plugin has implementation and focused automated evidence for the consumer-visible behavior.
10
- - **Mitigated**: the plugin bounds or rejects the failure, but an upstream or host condition remains.
11
- - **Gap**: behavior is missing or only partially supported by the plugin.
12
- - **Host-owned**: the report concerns Paseo behavior outside the provider boundary.
13
-
14
- ## Lifecycle, turns, and recovery
15
-
16
- | Reports | Status | Plugin comparison |
17
- | --- | --- | --- |
18
- | [#3838](https://github.com/getpaseo/paseo/issues/3838), [PR #3839](https://github.com/getpaseo/paseo/pull/3839) | **Verified** | A dead OMP subprocess invalidates its generation. A later write lazily resumes the same native session. Process-tree cleanup, recovery, and registry replacement are covered. |
19
- | [#3252](https://github.com/getpaseo/paseo/issues/3252), equivalent Pi [#3496](https://github.com/getpaseo/paseo/issues/3496), [PR #3258](https://github.com/getpaseo/paseo/pull/3258) | **Verified** | Hidden and custom notices do not terminalize a turn before the native user echo and terminal evidence. |
20
- | [#2260](https://github.com/getpaseo/paseo/issues/2260), [PR #2261](https://github.com/getpaseo/paseo/pull/2261) | **Verified** | Incomplete or compacted `agent_end` frames use complete streamed `message_end` evidence or bounded history correlated by entry ID, with idle state confirmed before and after retrieval. Success, failure, native cancellation, and concurrent interrupts are preserved; missing, unavailable, non-correlatable, or conflicting terminal evidence fails closed with content-free count diagnostics. |
21
- | [#2281](https://github.com/getpaseo/paseo/issues/2281), [PR #2282](https://github.com/getpaseo/paseo/pull/2282) | **Verified** | Local-only prompt results and structured commands have explicit terminal ownership. |
22
- | [#3654](https://github.com/getpaseo/paseo/issues/3654), [#3998](https://github.com/getpaseo/paseo/issues/3998), [PR #3667](https://github.com/getpaseo/paseo/pull/3667) | **Verified** | Post-`agent_end` state reconciliation is bounded. Stale or unavailable `get_state` cannot leave a turn running forever. |
23
- | Upstream OMP [PR #12331](https://github.com/can1357/oh-my-pi/pull/12331) and released OMP 18.2.x unkeyed `agent_end` frames | **Mitigated** | Request-keyed terminals use exact matching. For released binaries that omit the key, the plugin accepts only ordered current-prompt evidence: a fresh branch-correlated user entry followed by assistant activity, confirmed native idle/non-compacting state, and no active permission, tool, steer, or child work. Active or pre-evidence stale candidates are ignored. Confirmed-idle ambiguity fails only the Paseo turn, not the OMP runtime. The remaining same-agent stale-event misattribution risk is explicit and bounded; waiting for the upstream protocol fix would make every later turn unusable on published releases. Client reconnects, including mobile reconnect grace, are host transport behavior and do not own the daemon-managed provider session. |
24
- | [#3999](https://github.com/getpaseo/paseo/issues/3999), [#4000](https://github.com/getpaseo/paseo/issues/4000), [#4039](https://github.com/getpaseo/paseo/issues/4039), [PR #3772](https://github.com/getpaseo/paseo/pull/3772), [PR #4217](https://github.com/getpaseo/paseo/pull/4217) | **Verified** | `prompt.steer` is negotiated and implemented with expected-turn checks, acknowledgement ordering, duplicate correlation, and interrupt/terminal race coverage. |
25
- | Shared RPC cancellation [#3540](https://github.com/getpaseo/paseo/issues/3540), Pi [#3749](https://github.com/getpaseo/paseo/issues/3749) | **Verified in provider** | Native abort, exactly-one terminal event, permission cleanup, descendant cleanup, and uncertain-cleanup quarantine are tested. UI keyboard delivery remains host-owned. |
26
- | [#3218](https://github.com/getpaseo/paseo/issues/3218) | **Verified at provider boundary** | Session close owns and awaits OMP process cleanup. Whether every archive UI route invokes provider close is a host concern. |
27
-
28
- ## Persistence, import, and subagents
29
-
30
- | Reports | Status | Plugin comparison |
31
- | --- | --- | --- |
32
- | [#2006](https://github.com/getpaseo/paseo/issues/2006), [PR #2004](https://github.com/getpaseo/paseo/pull/2004), [PR #2131](https://github.com/getpaseo/paseo/pull/2131) | **Verified** | Descriptor parsing accepts bounded leading title/session metadata. |
33
- | [#2727](https://github.com/getpaseo/paseo/issues/2727), [PR #4416](https://github.com/getpaseo/paseo/pull/4416) | **Verified** | Import resolves opaque native identity and preserves model and thinking selection. |
34
- | [#2796](https://github.com/getpaseo/paseo/issues/2796), [PR #2065](https://github.com/getpaseo/paseo/pull/2065), [PR #2265](https://github.com/getpaseo/paseo/pull/2265) | **Verified** | Host-wide discovery is supported when `cwd` is omitted; scoped listing still enforces absolute workspace ownership. This also prevents the previously observed import-sheet crash path. |
35
- | [#2232](https://github.com/getpaseo/paseo/issues/2232), equivalent Pi [#3160](https://github.com/getpaseo/paseo/issues/3160), [PR #2052](https://github.com/getpaseo/paseo/pull/2052), [PR #2245](https://github.com/getpaseo/paseo/pull/2245), [PR #3371](https://github.com/getpaseo/paseo/pull/3371) | **Verified** | Native child lifecycle, progress, nested timelines, replay, active-child gating, and parent-terminal deferral use `session.subsession`. |
36
- | Pi lifecycle variants [#3845](https://github.com/getpaseo/paseo/issues/3845), [#3847](https://github.com/getpaseo/paseo/issues/3847), [#4309](https://github.com/getpaseo/paseo/issues/4309) | **Verified by the same model** | Child activity and terminal ownership are explicit rather than inferred from one provider event. |
37
- | [#2728](https://github.com/getpaseo/paseo/issues/2728) | **Gap** | Listing and import work, but the plugin does not install an OMP terminal hook that automatically creates a Paseo agent for terminal-started sessions. |
38
- | [#2574](https://github.com/getpaseo/paseo/issues/2574) | **Mitigated** | Recursive bounded transcript discovery covers OMP files. Generic archived-agent and registry visibility remain host-owned. |
39
- | [#4707](https://github.com/getpaseo/paseo/issues/4707) | **Host-owned** | Plugin reservations reject conflicting live ownership; archived-agent workspace re-homing policy belongs to Paseo. |
40
-
41
- ## Transport and startup
42
-
43
- | Reports | Status | Plugin comparison |
44
- | --- | --- | --- |
45
- | [#2548](https://github.com/getpaseo/paseo/issues/2548), [#2966](https://github.com/getpaseo/paseo/issues/2966), [PR #3038](https://github.com/getpaseo/paseo/pull/3038), [PR #3184](https://github.com/getpaseo/paseo/pull/3184) | **Verified** | RPC protocol v2 is required. Chunk assembly, frame byte counts, deadlines, malformed frames, and oversized frames are tested. |
46
- | [#2473](https://github.com/getpaseo/paseo/issues/2473) | **Mitigated** | Strict frame schemas, request correlation, session identity, and bounds prevent ordinary stdout JSON from becoming a valid response. OMP should still keep non-protocol output off RPC stdout. |
47
- | [#4047](https://github.com/getpaseo/paseo/issues/4047), [PR #4048](https://github.com/getpaseo/paseo/pull/4048) | **Verified** | Stdin EPIPE and stream closure fail pending calls and enter bounded cleanup/recovery rather than crashing the daemon. |
48
- | [#1657](https://github.com/getpaseo/paseo/issues/1657), [#1730](https://github.com/getpaseo/paseo/issues/1730), [#2226](https://github.com/getpaseo/paseo/issues/2226), [#4142](https://github.com/getpaseo/paseo/issues/4142), [PR #4008](https://github.com/getpaseo/paseo/pull/4008), [PR #4143](https://github.com/getpaseo/paseo/pull/4143) | **Verified** | Availability and ready probes use bounded configurable timeouts and distinguish missing, unrunnable, incompatible, and available binaries. |
49
- | [#1446](https://github.com/getpaseo/paseo/issues/1446), [#2456](https://github.com/getpaseo/paseo/issues/2456) | **Mitigated / host-owned** | Plugin discovery and cache identity are bounded. Provider snapshot scheduling and stale host snapshots remain Paseo behavior. |
50
- | [#2610](https://github.com/getpaseo/paseo/issues/2610) | **Mitigated / host-owned** | OMP input frames, replay, and retained state are bounded; final daemon-to-client WebSocket buffering is owned by Paseo. |
51
-
52
- ## Models, modes, commands, and usage
53
-
54
- | Reports | Status | Plugin comparison |
55
- | --- | --- | --- |
56
- | [#1692](https://github.com/getpaseo/paseo/issues/1692), [PR #1698](https://github.com/getpaseo/paseo/pull/1698), [PR #2539](https://github.com/getpaseo/paseo/pull/2539) | **Verified** | The plugin uses `get_available_commands`, publishes aliases, and fails slash dispatch closed when discovery is unavailable. |
57
- | [#2080](https://github.com/getpaseo/paseo/issues/2080), Pi [#2117](https://github.com/getpaseo/paseo/issues/2117), [PR #2171](https://github.com/getpaseo/paseo/pull/2171), [PR #2191](https://github.com/getpaseo/paseo/pull/2191) | **Verified** | Thinking options and defaults are model-specific; unsupported levels fail closed. |
58
- | Pi [#2663](https://github.com/getpaseo/paseo/issues/2663), [#4382](https://github.com/getpaseo/paseo/issues/4382) | **Verified** | Model and thinking changes are committed only after re-reading native state. |
59
- | [#2405](https://github.com/getpaseo/paseo/issues/2405), [PR #2406](https://github.com/getpaseo/paseo/pull/2406) | **Verified** | Nullable context windows remain valid catalog entries. |
60
- | [#2544](https://github.com/getpaseo/paseo/issues/2544), [PR #2865](https://github.com/getpaseo/paseo/pull/2865) | **Verified** | Strict provider options expose command prefix, environment, session directory, timeout, role models, model overlays, and denied tools. |
61
- | [#2857](https://github.com/getpaseo/paseo/issues/2857), [PR #2859](https://github.com/getpaseo/paseo/pull/2859) | **Verified** | Native compact requests use no ordinary RPC request timeout; provider-level compaction state owns completion, cancellation, and usage refresh. |
62
- | [#4073](https://github.com/getpaseo/paseo/issues/4073), [PR #4074](https://github.com/getpaseo/paseo/pull/4074) | **Verified** | Fallback and model/thinking events trigger committed runtime-state refresh rather than trusting event labels as final state. |
63
- | [#1888](https://github.com/getpaseo/paseo/issues/1888), [PR #1882](https://github.com/getpaseo/paseo/pull/1882), [PR #2503](https://github.com/getpaseo/paseo/pull/2503) | **Verified** | Active, terminal, post-compaction, fallback, and recovery sampling publish `session.usage`. |
64
- | [#4437](https://github.com/getpaseo/paseo/issues/4437), [PR #4449](https://github.com/getpaseo/paseo/pull/4449) | **Gap** | The plugin advertises `full`, `write`, and `ask`; it does not expose a distinct native Fast mode. |
65
- | [#3627](https://github.com/getpaseo/paseo/issues/3627), [PR #4205](https://github.com/getpaseo/paseo/pull/4205) | **Partial** | Plan role-model configuration and `/handoff` exist. There is no first-class `plan` mode, and the controlled canary does not satisfy the native handoff workflow prerequisites. |
66
-
67
- ## Timeline, media, and questions
68
-
69
- | Reports | Status | Plugin comparison |
70
- | --- | --- | --- |
71
- | [#4509](https://github.com/getpaseo/paseo/issues/4509), equivalent Pi [#2803](https://github.com/getpaseo/paseo/issues/2803), [PR #4510](https://github.com/getpaseo/paseo/pull/4510) | **Verified** | `contentIndex` participates in stable reasoning identity, preserving interleaved live blocks and replay shape. |
72
- | [#3244](https://github.com/getpaseo/paseo/issues/3244), [PR #3245](https://github.com/getpaseo/paseo/pull/3245) | **Verified** | Tool-result and assistant images are validated, bounded, retained, packaged, and rendered through the plugin transformer. |
73
- | [#3527](https://github.com/getpaseo/paseo/issues/3527), [PR #3628](https://github.com/getpaseo/paseo/pull/3628) | **Verified** | Positional `optionDetails.description` metadata is preserved in Paseo permission questions. |
74
- | [#1726](https://github.com/getpaseo/paseo/issues/1726), [PR #1879](https://github.com/getpaseo/paseo/pull/1879) | **Partial** | Structured user questions are supported. Dedicated collapsing/presentation for very large skill bodies is not demonstrated. |
75
- | [#2264](https://github.com/getpaseo/paseo/issues/2264), equivalent Pi [#2674](https://github.com/getpaseo/paseo/issues/2674), [PR #2280](https://github.com/getpaseo/paseo/pull/2280) | **Verified** | `display:false` custom messages remain hidden. |
76
- | [#2266](https://github.com/getpaseo/paseo/issues/2266), [PR #2284](https://github.com/getpaseo/paseo/pull/2284) | **Verified** | Manual and automatic compaction lifecycle and recap data map to stable timeline operations. |
77
- | Pi [#3121](https://github.com/getpaseo/paseo/issues/3121), [PR #4497](https://github.com/getpaseo/paseo/pull/4497) | **Verified** | Todo events map to Paseo's native todo item; the plugin does not add a second timeline-card renderer. |
78
- | [#3850](https://github.com/getpaseo/paseo/issues/3850) | **Verified by avoidance** | The inherited environment allowlist does not pass `TERM_PROGRAM`; the plugin never advertises Kitty graphics support. |
79
-
80
- ## MCP, tools, and host behavior
81
-
82
- | Reports | Status | Plugin comparison |
83
- | --- | --- | --- |
84
- | [#2060](https://github.com/getpaseo/paseo/issues/2060), [PR #2418](https://github.com/getpaseo/paseo/pull/2418), [PR #3820](https://github.com/getpaseo/paseo/pull/3820), [PR #3449](https://github.com/getpaseo/paseo/pull/3449) | **Verified** | Configured and caller-scoped MCP tools are discovered, policy-filtered, bound before readiness, canceled, and bounded. Docker exercises a configured stdio MCP tool. |
85
- | Pi [#3004](https://github.com/getpaseo/paseo/issues/3004) | **Verified structurally** | Host-tool setup completes before `session.ready`; capability-registration races cannot expose a partially bound catalog. |
86
- | Pi [#3666](https://github.com/getpaseo/paseo/issues/3666) | **Verified** | Exact preapproval is validated. If policy cannot be represented, startup fails closed instead of broadening access. |
87
- | [#1892](https://github.com/getpaseo/paseo/issues/1892) | **Host-owned gap** | Paseo decides global voice-mode eligibility. The plugin does not synthesize a missing speak tool. |
88
- | [#3762](https://github.com/getpaseo/paseo/issues/3762), Pi [#2815](https://github.com/getpaseo/paseo/issues/2815) | **Host-owned** | The plugin preserves and validates the received tool catalog but does not redefine Paseo's own MCP schemas. |
89
- | [#3178](https://github.com/getpaseo/paseo/issues/3178) | **Avoided** | The plugin permanently registers `omp-plugin`, never the built-in `omp` identity. |
90
- | [#3217](https://github.com/getpaseo/paseo/issues/3217) | **Host-owned** | Draft submission and agent creation multiplicity occur before provider-session behavior. |
91
-
92
- ## Origin records, not regressions
93
-
94
- [#1176](https://github.com/getpaseo/paseo/issues/1176), [#1189](https://github.com/getpaseo/paseo/issues/1189), [PR #1177](https://github.com/getpaseo/paseo/pull/1177), [PR #1388](https://github.com/getpaseo/paseo/pull/1388), and [PR #2067](https://github.com/getpaseo/paseo/pull/2067) requested or introduced first-class OMP support. The plugin satisfies that product goal independently under `omp-plugin`; it does not replace or migrate bundled `omp` agents.
95
-
96
- ## Release blockers and tracked gaps
97
-
98
- Before moving from alpha toward stable, track these separately:
99
-
100
- 1. Decide whether native Fast mode can be represented honestly through the public provider SDK.
101
- 2. Decide whether a first-class plan mode is possible; separately make `/handoff` reproducible in the controlled canary.
102
- 3. Decide whether terminal-started automatic registration belongs in this plugin or requires a generic Paseo hook.
103
- 4. Add an explicit large-skill presentation regression or document it as host-owned.
104
- 5. Keep stdout contamination defenses, and pursue upstream OMP protocol-channel purity.
105
- 6. Keep host-owned issues visibly separated: provider snapshot refresh, voice eligibility, MCP schemas, WebSocket buffering, archive routing, and draft/agent creation.
106
-
107
- ## Maintenance rule
108
-
109
- Refresh this audit before each release candidate. New OMP or materially shared Pi/RPC reports must be added, deduplicated by root cause, and classified with a concrete test, an explicit limitation, or a linked host/upstream issue. Never infer that a plugin is fixed merely because the corresponding core issue is closed.
Binary file
Binary file
Binary file
@@ -1,78 +0,0 @@
1
- # Install and update
2
-
3
- Paseo plugins are trusted, unsandboxed code. Review this plugin and its production dependencies before installing it on the daemon host.
4
-
5
- ## Requirements
6
-
7
- - Paseo daemon and apps: `>=0.9.0-beta.1 <0.10.0`; the 0.9 floor provides the supported plugin copy and external-link APIs, nested provider-subagent ancestry, and spawning-tool links
8
- - OMP: `18.1.15` or newer is the supported floor
9
- - OMP RPC: protocol v2 must negotiate successfully
10
-
11
- The first public build is an alpha. Alpha releases are compatibility previews and may require deleting and re-importing agents created by an earlier preview.
12
-
13
- ## Install or update from npm on Paseo 0.9
14
-
15
- Paseo 0.9.0-beta.1 can acquire the published package and its production dependencies directly from npm on the daemon host:
16
-
17
- ```bash
18
- paseo plugin install npm:@omercnet/paseo-omp@<version>
19
- paseo plugin ls paseo-omp
20
- ```
21
-
22
- Check for the registry's current `latest` version and approve the proposed update, or select an exact version explicitly:
23
-
24
- ```bash
25
- paseo plugin update paseo-omp
26
- paseo plugin update paseo-omp --version <new-version>
27
- ```
28
-
29
- The daemon uses its own npm registry and authentication configuration. npm acquisition installs the artifact's production dependencies before preparation; because npm artifacts omit `package-lock.json`, the preparation helper leaves that tree unchanged. A Git checkout with the committed lockfile runs frozen `npm ci --omit=dev --ignore-scripts`. A failed download, preparation, compatibility check, or activation keeps the installed revision active.
30
-
31
- ## Install a Git release on Paseo 0.9
32
-
33
- Install the matching reviewed Git tag:
34
-
35
- ```bash
36
- paseo plugin add omercnet/paseo-plugins:paseo-omp --ref paseo-omp-v<version>
37
- paseo plugin ls paseo-omp
38
- ```
39
-
40
- ### Update a Git installation on Paseo 0.9
41
-
42
- An ordinary update reviews the remote repository's current default HEAD. To move directly to another reviewed tag or commit, select it explicitly:
43
-
44
- ```bash
45
- paseo plugin update paseo-omp
46
- paseo plugin update paseo-omp --ref paseo-omp-v<new-version>
47
- ```
48
-
49
- The install-time `--ref` does not constrain later updates. Paseo 0.9 stages and validates the selected revision before replacing the active installation, so plugin settings remain intact and a failed update leaves the previous revision running.
50
-
51
-
52
- ## Install a local checkout
53
-
54
- ```bash
55
- git clone https://github.com/omercnet/paseo-plugins.git
56
- cd paseo-plugins/paseo-omp
57
- npm ci --ignore-scripts
58
- paseo plugin install "$PWD"
59
- ```
60
-
61
- After editing a directory installation:
62
-
63
- ```bash
64
- npm run check
65
- npm run typecheck
66
- paseo plugin reload paseo-omp
67
- paseo plugin ls paseo-omp
68
- ```
69
-
70
- ## Track a branch
71
-
72
- Tracking `main` executes future dependency and plugin updates with the daemon user's privileges:
73
-
74
- ```bash
75
- paseo plugin add omercnet/paseo-plugins:paseo-omp --ref main
76
- ```
77
-
78
- On Paseo 0.9, preview and approve the remote default HEAD with `paseo plugin update paseo-omp`, or select `main` explicitly with `paseo plugin update paseo-omp --ref main`. A failed build or compatibility check leaves the previous revision active.
package/tsconfig.json DELETED
@@ -1,16 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "ESNext",
5
- "moduleResolution": "Bundler",
6
- "lib": ["ES2024", "DOM", "DOM.Iterable"],
7
- "types": ["node", "vitest/globals"],
8
- "jsx": "react-jsx",
9
- "strict": true,
10
- "skipLibCheck": true,
11
- "noEmit": true,
12
- "esModuleInterop": true,
13
- "allowSyntheticDefaultImports": true
14
- },
15
- "include": ["**/*.ts", "**/*.tsx"]
16
- }