@cueai/omni-reader-mcp 1.5.0 → 1.5.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
@@ -64,7 +64,7 @@ differ from the numbers above, report the live values.
64
64
  Always use an audited exact version, never an implicit `latest`:
65
65
 
66
66
  ```sh
67
- npx -y @cueai/omni-reader-mcp@1.5.0 setup
67
+ npx -y @cueai/omni-reader-mcp@1.5.1 setup
68
68
  ```
69
69
 
70
70
  The interactive setup supports Hermes, Cursor, Claude Desktop, and generic stdio
@@ -72,9 +72,9 @@ configuration. Non-interactive installation uses the same argument parsing and w
72
72
  logic:
73
73
 
74
74
  ```sh
75
- npx -y @cueai/omni-reader-mcp@1.5.0 setup --client hermes --allowed-root /absolute/minimum/root --yes --json
76
- npx -y @cueai/omni-reader-mcp@1.5.0 setup --client cursor --add-root /absolute/minimum/root --yes --json
77
- npx -y @cueai/omni-reader-mcp@1.5.0 setup --client claude-desktop --allowed-root /absolute/minimum/root --yes --json
75
+ npx -y @cueai/omni-reader-mcp@1.5.1 setup --client hermes --allowed-root /absolute/minimum/root --yes --json
76
+ npx -y @cueai/omni-reader-mcp@1.5.1 setup --client cursor --add-root /absolute/minimum/root --yes --json
77
+ npx -y @cueai/omni-reader-mcp@1.5.1 setup --client claude-desktop --allowed-root /absolute/minimum/root --yes --json
78
78
  ```
79
79
 
80
80
  When an agent or script runs under a pty (stdin is still a TTY), declare non-interactive
@@ -82,7 +82,7 @@ mode explicitly with `--headless` (alias `--non-interactive`): no `--yes` is req
82
82
  stdin is never read:
83
83
 
84
84
  ```sh
85
- npx -y @cueai/omni-reader-mcp@1.5.0 setup --client cursor --allowed-root /absolute/minimum/root --headless --json
85
+ npx -y @cueai/omni-reader-mcp@1.5.1 setup --client cursor --allowed-root /absolute/minimum/root --headless --json
86
86
  ```
87
87
 
88
88
  ## Cache and journal isolation
@@ -221,16 +221,16 @@ satisfies the constraints.
221
221
  ## Commands
222
222
 
223
223
  ```sh
224
- npx -y @cueai/omni-reader-mcp@1.5.0 doctor
225
- npx -y @cueai/omni-reader-mcp@1.5.0 doctor --json
226
- npx -y @cueai/omni-reader-mcp@1.5.0 clean
227
- npx -y @cueai/omni-reader-mcp@1.5.0 uninstall --yes --json
224
+ npx -y @cueai/omni-reader-mcp@1.5.1 doctor
225
+ npx -y @cueai/omni-reader-mcp@1.5.1 doctor --json
226
+ npx -y @cueai/omni-reader-mcp@1.5.1 clean
227
+ npx -y @cueai/omni-reader-mcp@1.5.1 uninstall --yes --json
228
228
  ```
229
229
 
230
230
  Running the pinned version without a command starts the stdio MCP server:
231
231
 
232
232
  ```sh
233
- npx -y @cueai/omni-reader-mcp@1.5.0
233
+ npx -y @cueai/omni-reader-mcp@1.5.1
234
234
  ```
235
235
 
236
236
  `doctor --json` returns package/npm/client adapter, Key present/absent, allowed-root
@@ -239,12 +239,12 @@ status; it never prints the Key, private source paths, or content.
239
239
 
240
240
  ## Uninstall and rollback
241
241
 
242
- `uninstall --yes --json` removes only a trusted 1.4.1 or 1.5.0 Bridge entry; when a
242
+ `uninstall --yes --json` removes only a trusted 1.5.0 or 1.5.1 Bridge entry; when a
243
243
  matching trusted backup exists, it restores the original URL-only `omni-reader` entry.
244
244
  Uninstall never deletes user source files and never silently removes unexpired local
245
245
  results.
246
246
 
247
- To roll back from 1.5.0:
247
+ To roll back from 1.5.1:
248
248
 
249
249
  1. stop recommending or installing that version;
250
250
  2. run `uninstall --yes --json` to restore the trusted URL-only entry;
@@ -7,7 +7,7 @@ const PACKAGE_SPEC = `@cueai/omni-reader-mcp@${BRIDGE_RELEASE_VERSION}`;
7
7
  // The release that the current version is a trusted upgrade from: uninstall and
8
8
  // rollback recognize exactly {previous, current} and nothing else. Bump this to
9
9
  // the version we just published when BRIDGE_RELEASE_VERSION advances.
10
- const PREVIOUS_RELEASE_VERSION = "1.4.1";
10
+ const PREVIOUS_RELEASE_VERSION = "1.5.0";
11
11
  const PREVIOUS_PACKAGE_SPEC = `@cueai/omni-reader-mcp@${PREVIOUS_RELEASE_VERSION}`;
12
12
  const LEGACY_PACKAGE_SPEC = "@cueai/omni-reader-mcp";
13
13
  const TRUSTED_EXACT_PACKAGE_SPECS = new Set([PREVIOUS_PACKAGE_SPEC, PACKAGE_SPEC]);
@@ -6,7 +6,7 @@ export declare const CUBE_GRANT_PROTOCOL_VERSION = "omni.parse_grant.v1";
6
6
  export declare const GRANTED_STREAM_PROTOCOL_VERSION = "omni.granted_parse_stream.v1";
7
7
  export declare const DEFAULT_CUBE_BASE_URL = "https://mcp.cuecue.cn";
8
8
  export declare const DEFAULT_IIIS_GRANTED_BASE_URL = "https://cubefile.ai.iiis.co:9443/omni/granted/";
9
- export declare const BRIDGE_RELEASE_VERSION = "1.5.0";
9
+ export declare const BRIDGE_RELEASE_VERSION = "1.5.1";
10
10
  export declare const REMOTE_OMNI_MCP_URL = "https://mcp.cuecue.cn/api/omni-reader/mcp/";
11
11
  export declare const FOREGROUND_BUDGET_MS = 15000;
12
12
  export declare const STATUS_LONG_POLL_MAX_MS = 20000;
package/dist/constants.js CHANGED
@@ -6,7 +6,7 @@ export const CUBE_GRANT_PROTOCOL_VERSION = "omni.parse_grant.v1";
6
6
  export const GRANTED_STREAM_PROTOCOL_VERSION = "omni.granted_parse_stream.v1";
7
7
  export const DEFAULT_CUBE_BASE_URL = "https://mcp.cuecue.cn";
8
8
  export const DEFAULT_IIIS_GRANTED_BASE_URL = "https://cubefile.ai.iiis.co:9443/omni/granted/";
9
- export const BRIDGE_RELEASE_VERSION = "1.5.0";
9
+ export const BRIDGE_RELEASE_VERSION = "1.5.1";
10
10
  export const REMOTE_OMNI_MCP_URL = "https://mcp.cuecue.cn/api/omni-reader/mcp/";
11
11
  export const FOREGROUND_BUDGET_MS = 15_000;
12
12
  export const STATUS_LONG_POLL_MAX_MS = 20_000;
@@ -760,7 +760,10 @@ function remoteResultUpdate(result, expectedOperationId) {
760
760
  operationId: result.operation_id,
761
761
  errorCode: null,
762
762
  parserStarted: true,
763
- billed: true,
763
+ // Owner ruling: credits are deducted only on successful completion — the public
764
+ // billed flag mirrors the remote settlement facts (zero-charge completion is a
765
+ // settled fact, not an uncharged one). Never write true unconditionally.
766
+ billed: (result.billing?.credits_charged ?? 0) > 0,
764
767
  contentReleased: true,
765
768
  stage: "completed",
766
769
  progressPercent: 100,
@@ -778,7 +781,11 @@ function remoteResultUpdate(result, expectedOperationId) {
778
781
  operationId: result.operation_id,
779
782
  errorCode: null,
780
783
  parserStarted: true,
781
- billed: true,
784
+ // The cleanup_pending wire carries no settlement fact (the closed v3/v4 contract
785
+ // exposes usage/billing only on released/delivered/delivery_expired terminals) —
786
+ // report false rather than inventing a charge; the journal allows a later
787
+ // false->true completion fact (assertStableTransition only blocks true->false).
788
+ billed: false,
782
789
  contentReleased: result.result !== undefined,
783
790
  stage: "cleanup_pending",
784
791
  progressPercent: result.result === undefined ? 99 : 100,
@@ -869,7 +876,8 @@ function localResultValue(local) {
869
876
  operationCreated: true,
870
877
  fileUploaded: true,
871
878
  parserStarted: true,
872
- billed: true,
879
+ // Owner ruling: an integrity failure settled nothing — never report billed:true.
880
+ billed: false,
873
881
  contentReleased: true,
874
882
  });
875
883
  }
@@ -996,7 +1004,8 @@ function requireBundleResult(retention) {
996
1004
  operationCreated: true,
997
1005
  fileUploaded: true,
998
1006
  parserStarted: true,
999
- billed: true,
1007
+ // Owner ruling: an integrity failure settled nothing — never report billed:true.
1008
+ billed: false,
1000
1009
  contentReleased: false,
1001
1010
  });
1002
1011
  }
@@ -1429,12 +1438,32 @@ export function createLocalParseOperationManager(options) {
1429
1438
  result: processingParse(operationId, stage, latestPercent, patch.contentReleased === true),
1430
1439
  };
1431
1440
  }
1441
+ const checkpointBilled = snapshot.patch?.billed === true;
1432
1442
  return {
1433
1443
  update: {
1434
1444
  state: "FAILED",
1435
- patch: failurePatch(stable),
1445
+ patch: {
1446
+ ...failurePatch(stable),
1447
+ // The ACK checkpoint may already have recorded a settled charge
1448
+ // (snapshot.patch at :1751 carries resultPatch's billed fact).
1449
+ // Never regress it — assertStableTransition blocks true->false —
1450
+ // the charge happened; this failure is about the local artifact,
1451
+ // not the settlement.
1452
+ billed: checkpointBilled || stable.billed,
1453
+ },
1454
+ },
1455
+ result: {
1456
+ status: "failed",
1457
+ error: {
1458
+ ...stable.toJSON(),
1459
+ // Deliberately the checkpoint fact only (not the OR): the failed
1460
+ // public result reports exactly what this run settled — false
1461
+ // when nothing was settled (owner ruling), true when the ACK
1462
+ // checkpoint already recorded the charge and the failure is
1463
+ // about local delivery, not the settlement.
1464
+ billed: checkpointBilled,
1465
+ },
1436
1466
  },
1437
- result: { status: "failed", error: stable.toJSON() },
1438
1467
  };
1439
1468
  }
1440
1469
  finally {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cueai/omni-reader-mcp",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Local stdio MCP bridge for direct Omni document parsing",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",