@omercnet/paseo-omp 1.0.3-next.186.1 → 1.0.3-next.189.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
|
@@ -24,7 +24,7 @@ before capture.
|
|
|
24
24
|
|
|
25
25
|
## Quick start
|
|
26
26
|
|
|
27
|
-
Requirements: Paseo `^0.9.2 || ^0.10.0
|
|
27
|
+
Requirements: Paseo `^0.9.2 || ^0.10.0`, OMP `18.1.15` or newer, and OMP RPC protocol v2. Paseo 0.9.2 is required for reliable plugin-provider request failure containment, reload cleanup, and daemon shutdown ordering; 0.10.1 is verified against the same public plugin contracts.
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
30
|
paseo plugin install npm:@omercnet/paseo-omp@<version>
|
|
@@ -40,7 +40,7 @@ Open the **OMP** sidebar to review the provider-profile contract, choose which c
|
|
|
40
40
|
- [Core-provider issue and parity audit](docs/core-provider-issue-audit.md)
|
|
41
41
|
- [Alpha release checklist](docs/alpha-release-checklist.md)
|
|
42
42
|
|
|
43
|
-
The plugin uses public Paseo 0.9 and 0.10
|
|
43
|
+
The plugin uses public Paseo 0.9 and 0.10 provider and client contracts and registers distinct `omp-plugin` and `omp-plugin-<profile>` identities; it does not modify the bundled `omp` provider.
|
|
44
44
|
|
|
45
45
|
## Named OMP profiles
|
|
46
46
|
|
|
@@ -54,7 +54,7 @@ Profile selection is request-local: concurrent clients cannot change each other'
|
|
|
54
54
|
|
|
55
55
|
## Paseo provider SDK coverage
|
|
56
56
|
|
|
57
|
-
This matrix inventories the complete capability set exported by the pinned `@getpaseo/plugin` 0.
|
|
57
|
+
This matrix inventories the complete capability set exported by the pinned `@getpaseo/plugin` 0.10.1 provider SDK, whose public provider surface is unchanged since 0.9.0; compatibility is checked nightly against the 0.9, 0.10, and latest SDK channels. It measures strict SDK surface coverage, not general product quality.
|
|
58
58
|
|
|
59
59
|
**Current capability completeness: 61.8%.** The provider advertises 11 of 17 capabilities (64.7%); ten are complete and `session.configure` is partial.
|
|
60
60
|
|
|
@@ -117,7 +117,7 @@ Existing agents whose provider is `omp` remain owned by the bundled provider. Ne
|
|
|
117
117
|
|
|
118
118
|
OMP `18.1.15` is the oldest version tested end to end. The direct provider's hard compatibility gate is `rpc-ui` protocol v2: metadata-free legacy ready frames and v1-only runtimes are rejected before a provider session opens because they cannot support the advertised persistence and conversation-rewind capabilities. Typed tool approvals remain capability-gated and fall back as described above. For terminal completion, a matching `agent_end.requestId` is authoritative and mismatches are ignored before state changes. Released OMP 18.2.x builds that omit that field use an ordered fallback requiring a fresh correlated native user entry followed by current-turn assistant activity, an idle non-compacting runtime, and no conflicting permission, tool, steer, or child-session work. Ambiguous events while OMP is active are ignored; unresolved ambiguity after confirmed idle fails only the Paseo turn. This trades a bounded residual same-agent stale-event risk for compatibility with released OMP instead of terminating and lazily restarting the runtime after every later prompt. Paseo clients, including mobile clients inside reconnect grace, do not own or terminate the daemon-managed OMP session.
|
|
119
119
|
|
|
120
|
-
Paseo 0.9.2 is the minimum supported stable release, and 0.10.
|
|
120
|
+
Paseo 0.9.2 is the minimum supported stable release, and 0.10.1 is supported. The controlled Docker canary remains pinned to official 0.9.2; nightly SDK checks cover the newest 0.9, 0.10, and latest releases. The canary preserves nested provider-subagent ancestry and spawning-tool links, and validates npm-managed plugin sources, platform-owned external URL opening, and whole-item timeline transforms before Overview grouping.
|
|
121
121
|
|
|
122
122
|
Install, update, disable, or remove `paseo-omp` independently of the bundled provider. Verify the provider snapshot contains `omp-plugin` after installation; a bundled `omp` entry may remain present and is not modified by this plugin.
|
|
123
123
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omercnet/paseo-omp",
|
|
3
|
-
"version": "1.0.3-next.
|
|
3
|
+
"version": "1.0.3-next.189.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Paseo integration for OMP, including its direct provider and workspace tooling.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,16 +51,16 @@
|
|
|
51
51
|
"typecheck": "tsc --noEmit -p tsconfig.client.json && tsc --noEmit -p tsconfig.server.json && tsc --noEmit -p tsconfig.tests.json"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@getpaseo/protocol": "0.
|
|
54
|
+
"@getpaseo/protocol": "0.10.1",
|
|
55
55
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
56
56
|
"yaml": "^2.9.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@biomejs/biome": "^2.5.10",
|
|
60
|
-
"@getpaseo/cli": "0.
|
|
61
|
-
"@getpaseo/client": "0.
|
|
62
|
-
"@getpaseo/plugin": "0.
|
|
63
|
-
"@getpaseo/server": "0.
|
|
60
|
+
"@getpaseo/cli": "0.10.1",
|
|
61
|
+
"@getpaseo/client": "0.10.1",
|
|
62
|
+
"@getpaseo/plugin": "0.10.1",
|
|
63
|
+
"@getpaseo/server": "0.10.1",
|
|
64
64
|
"@oh-my-pi/pi-agent-core": "18.2.0",
|
|
65
65
|
"@oh-my-pi/pi-coding-agent": "18.2.0",
|
|
66
66
|
"@tanstack/react-query": "^5.102.3",
|
package/paseo-plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "paseo-omp",
|
|
3
3
|
"description": "Paseo integration for OMP, including its direct provider and workspace tooling.",
|
|
4
|
-
"requirements": { "paseo": "^0.9.2 || ^0.10.0
|
|
4
|
+
"requirements": { "paseo": "^0.9.2 || ^0.10.0" },
|
|
5
5
|
"build": [["node", "scripts/prepare-dependencies.mjs"]]
|
|
6
6
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Release Please keeps this bundle-safe constant aligned with package.json. */
|
|
2
|
-
export const PASEO_OMP_PACKAGE_VERSION = "1.0.3-next.
|
|
2
|
+
export const PASEO_OMP_PACKAGE_VERSION = "1.0.3-next.189.1"; // x-release-please-version
|
|
@@ -2830,6 +2830,22 @@ export class OmpProviderSession {
|
|
|
2830
2830
|
turn.ambiguousTerminalTimer = undefined;
|
|
2831
2831
|
}
|
|
2832
2832
|
|
|
2833
|
+
private async cancelIndeterminateTerminal(
|
|
2834
|
+
turn: ActiveTurn,
|
|
2835
|
+
message: string,
|
|
2836
|
+
invalidateRuntime = false,
|
|
2837
|
+
): Promise<void> {
|
|
2838
|
+
this.recordOperationalFailure({ category: "terminal-outcome", stage: "unresolved" });
|
|
2839
|
+
this.projector.projectPassive({
|
|
2840
|
+
type: "notice",
|
|
2841
|
+
level: "warning",
|
|
2842
|
+
message: "OMP ended before its final response could be confirmed. Partial output was kept.",
|
|
2843
|
+
});
|
|
2844
|
+
if (invalidateRuntime) this.invalidateRuntime(message);
|
|
2845
|
+
this.subsessions?.terminalize("canceled");
|
|
2846
|
+
await this.finishTurn(turn, "canceled", undefined, true, true);
|
|
2847
|
+
}
|
|
2848
|
+
|
|
2833
2849
|
private async settleAmbiguousTerminal(
|
|
2834
2850
|
turn: ActiveTurn,
|
|
2835
2851
|
candidate: TerminalCandidate,
|
|
@@ -2848,16 +2864,19 @@ export class OmpProviderSession {
|
|
|
2848
2864
|
const state = await this.usage.boundedTerminalState(turn, FINAL_USAGE_WAIT_MS);
|
|
2849
2865
|
if (turn.terminal || this.activeTurn !== turn || turn.deferredAgentEnd !== candidate) return;
|
|
2850
2866
|
if (!state) {
|
|
2851
|
-
|
|
2852
|
-
|
|
2867
|
+
await this.cancelIndeterminateTerminal(
|
|
2868
|
+
turn,
|
|
2869
|
+
"OMP agent_end state could not be confirmed",
|
|
2870
|
+
true,
|
|
2871
|
+
);
|
|
2853
2872
|
return;
|
|
2854
2873
|
}
|
|
2855
2874
|
turn.deferredAgentEnd = undefined;
|
|
2856
2875
|
if (state.isStreaming || state.isCompacting) return;
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2876
|
+
await this.cancelIndeterminateTerminal(
|
|
2877
|
+
turn,
|
|
2878
|
+
"OMP unkeyed agent_end could not be correlated to the current prompt",
|
|
2879
|
+
);
|
|
2861
2880
|
}
|
|
2862
2881
|
|
|
2863
2882
|
private async completeLocalOnlyTurn(turn: ActiveTurn): Promise<void> {
|
|
@@ -2929,8 +2948,11 @@ export class OmpProviderSession {
|
|
|
2929
2948
|
) {
|
|
2930
2949
|
void this.completeAgentEnd(turn, candidate.event);
|
|
2931
2950
|
} else {
|
|
2932
|
-
|
|
2933
|
-
|
|
2951
|
+
void this.cancelIndeterminateTerminal(
|
|
2952
|
+
turn,
|
|
2953
|
+
"OMP agent_end state could not be confirmed",
|
|
2954
|
+
true,
|
|
2955
|
+
);
|
|
2934
2956
|
}
|
|
2935
2957
|
}, AGENT_END_SETTLE_MS);
|
|
2936
2958
|
this.finishFromAgentEnd(turn, candidate);
|
|
@@ -3043,8 +3065,11 @@ export class OmpProviderSession {
|
|
|
3043
3065
|
return;
|
|
3044
3066
|
}
|
|
3045
3067
|
if (turn.userEchoObserved) {
|
|
3046
|
-
|
|
3047
|
-
|
|
3068
|
+
await this.cancelIndeterminateTerminal(
|
|
3069
|
+
turn,
|
|
3070
|
+
"OMP agent_end state could not be confirmed",
|
|
3071
|
+
true,
|
|
3072
|
+
);
|
|
3048
3073
|
return;
|
|
3049
3074
|
}
|
|
3050
3075
|
if (turn.agentEndRetryTimer === undefined) {
|
|
@@ -1099,13 +1099,16 @@ export class OmpTimelineProjector {
|
|
|
1099
1099
|
for (const contentIndex of indexes) {
|
|
1100
1100
|
const block = stream.blocks.get(contentIndex);
|
|
1101
1101
|
if (!block) continue;
|
|
1102
|
-
|
|
1102
|
+
let publicText =
|
|
1103
1103
|
block.kind === "image"
|
|
1104
1104
|
? block.text
|
|
1105
1105
|
: truncateUtf8(
|
|
1106
1106
|
this.dataFilter.text(block.text, MAX_REDACTED_STREAM_TEXT_LENGTH),
|
|
1107
1107
|
remainingTextBytes,
|
|
1108
1108
|
);
|
|
1109
|
+
if (block.kind === "assistant_message") {
|
|
1110
|
+
publicText = publicText.replace(/\n*\[System Error\] Provider connection closed\s*$/, "");
|
|
1111
|
+
}
|
|
1109
1112
|
if (block.kind !== "image") {
|
|
1110
1113
|
remainingTextBytes = Math.max(0, remainingTextBytes - utf8Bytes(publicText));
|
|
1111
1114
|
}
|