@omercnet/paseo-omp 1.0.3-next.188.1 → 1.0.3

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
@@ -133,7 +133,7 @@ Unexpected or internal launch failures use fixed fallback messages rather than s
133
133
 
134
134
  The repeatable Docker canary and every validation command are documented in [TESTING.md](TESTING.md). It covers discovery, modes, text, images, tools, MCP, permissions, steering, interruption, persistence, host-wide and scoped session listing, import, resume, subagents, Hub, usage, plugin RPCs, and conversation rewind.
135
135
 
136
- Use `Deterministic Canary` for picker-label assertions. The optional local Ollama model is exploratory and nondeterministic.
136
+ Use `canary-mock/Deterministic Canary` for assertions. The optional local Ollama model is exploratory and nondeterministic.
137
137
 
138
138
  ## Support
139
139
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omercnet/paseo-omp",
3
- "version": "1.0.3-next.188.1",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "description": "Paseo integration for OMP, including its direct provider and workspace tooling.",
6
6
  "license": "MIT",
@@ -68,9 +68,9 @@
68
68
  "@types/react": "^19.2.18",
69
69
  "@vitest/coverage-v8": "^5.0.0",
70
70
  "esbuild": "0.28.2",
71
- "pino": "10.3.1",
72
71
  "react": "19.1.0",
73
72
  "react-native": "0.81.5",
73
+ "pino": "10.3.1",
74
74
  "tsx": "^4.20.6",
75
75
  "typescript": "^7.0.2",
76
76
  "vitest": "^5.0.0",
@@ -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.188.1"; // x-release-please-version
2
+ export const PASEO_OMP_PACKAGE_VERSION = "1.0.3"; // x-release-please-version
@@ -109,7 +109,7 @@ export function mapOmpModels(
109
109
  const name = model.name ? serializer.text(model.name, 256) : modelId;
110
110
  return {
111
111
  id,
112
- label: name,
112
+ label: `${provider}/${name}`,
113
113
  description: `${provider}/${modelId}`,
114
114
  ...(typeof model.contextWindow === "number"
115
115
  ? { contextWindowMaxTokens: model.contextWindow }
@@ -2830,22 +2830,6 @@ 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
-
2849
2833
  private async settleAmbiguousTerminal(
2850
2834
  turn: ActiveTurn,
2851
2835
  candidate: TerminalCandidate,
@@ -2864,19 +2848,16 @@ export class OmpProviderSession {
2864
2848
  const state = await this.usage.boundedTerminalState(turn, FINAL_USAGE_WAIT_MS);
2865
2849
  if (turn.terminal || this.activeTurn !== turn || turn.deferredAgentEnd !== candidate) return;
2866
2850
  if (!state) {
2867
- await this.cancelIndeterminateTerminal(
2868
- turn,
2869
- "OMP agent_end state could not be confirmed",
2870
- true,
2871
- );
2851
+ turn.operationalTerminalStage = "unresolved";
2852
+ this.handleRuntimeFailure("OMP agent_end state could not be confirmed");
2872
2853
  return;
2873
2854
  }
2874
2855
  turn.deferredAgentEnd = undefined;
2875
2856
  if (state.isStreaming || state.isCompacting) return;
2876
- await this.cancelIndeterminateTerminal(
2877
- turn,
2878
- "OMP unkeyed agent_end could not be correlated to the current prompt",
2879
- );
2857
+ turn.operationalTerminalStage = "unresolved";
2858
+ await this.finishTurn(turn, "failed", {
2859
+ message: "OMP unkeyed agent_end could not be correlated to the current prompt",
2860
+ });
2880
2861
  }
2881
2862
 
2882
2863
  private async completeLocalOnlyTurn(turn: ActiveTurn): Promise<void> {
@@ -2948,11 +2929,8 @@ export class OmpProviderSession {
2948
2929
  ) {
2949
2930
  void this.completeAgentEnd(turn, candidate.event);
2950
2931
  } else {
2951
- void this.cancelIndeterminateTerminal(
2952
- turn,
2953
- "OMP agent_end state could not be confirmed",
2954
- true,
2955
- );
2932
+ turn.operationalTerminalStage = "unresolved";
2933
+ this.handleRuntimeFailure("OMP agent_end state could not be confirmed");
2956
2934
  }
2957
2935
  }, AGENT_END_SETTLE_MS);
2958
2936
  this.finishFromAgentEnd(turn, candidate);
@@ -3065,11 +3043,8 @@ export class OmpProviderSession {
3065
3043
  return;
3066
3044
  }
3067
3045
  if (turn.userEchoObserved) {
3068
- await this.cancelIndeterminateTerminal(
3069
- turn,
3070
- "OMP agent_end state could not be confirmed",
3071
- true,
3072
- );
3046
+ turn.operationalTerminalStage = "unresolved";
3047
+ this.handleRuntimeFailure("OMP agent_end state could not be confirmed");
3073
3048
  return;
3074
3049
  }
3075
3050
  if (turn.agentEndRetryTimer === undefined) {
@@ -1099,16 +1099,13 @@ export class OmpTimelineProjector {
1099
1099
  for (const contentIndex of indexes) {
1100
1100
  const block = stream.blocks.get(contentIndex);
1101
1101
  if (!block) continue;
1102
- let publicText =
1102
+ const 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
- }
1112
1109
  if (block.kind !== "image") {
1113
1110
  remainingTextBytes = Math.max(0, remainingTextBytes - utf8Bytes(publicText));
1114
1111
  }