@iicp/client 0.7.93 → 0.7.95

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
@@ -39,7 +39,7 @@ What good looks like:
39
39
  ```bash
40
40
  iicp-node --help # shows query, serve, proxy, mcp-gateway, credits, ...
41
41
  which iicp-node # points to your Node/npm environment
42
- iicp-node --version # prints iicp-node 0.7.93 or newer
42
+ iicp-node --version # prints iicp-node 0.7.95 or newer
43
43
  ```
44
44
 
45
45
  The query command contacts the public directory, discovers a matching live node,
@@ -148,7 +148,7 @@ base URL. Full guide: <https://iicp.network/docs/proxy>
148
148
 
149
149
  ## Keep provider nodes current
150
150
 
151
- The current public release line is **0.7.93**. Upgrade through your package
151
+ The current public release line is **0.7.95**. Upgrade through your package
152
152
  manager before troubleshooting an older installation. Routing profiles can
153
153
  refuse remote dispatch before a prompt leaves the client; use `sensitive` for
154
154
  local-only work, `eu-restricted` for EU/EEA routing, or `strict-policy` when a
@@ -358,6 +358,19 @@ iicp-node serve --backend-type meshllm --model <meshllm-model-id>
358
358
  The upstream experimental `mesh` ensemble is never selected automatically. Use it
359
359
  only with an explicit `--model mesh --experimental` opt-in.
360
360
 
361
+ ### Experimental durable dispatch admission
362
+
363
+ `SqliteDispatchAdmissionStore` provides provider-local, single-use admission
364
+ for the pre-normative `dispatch-admission:v2` profile. It is never enabled by
365
+ `IicpNode` automatically: verify the dispatch ticket first and invoke
366
+ `evaluateDispatchAdmission` explicitly. The adapter stores only JTI and
367
+ content-free binding digests.
368
+
369
+ The SQLite adapter uses Node's built-in `node:sqlite` and therefore requires
370
+ Node 22.5 or newer when instantiated. Importing the SDK and all established
371
+ features remain supported on Node 18+. Storage failure rejects admission
372
+ instead of falling back to an in-memory replay cache.
373
+
361
374
  MeshLLM remains the local inference runtime. IICP uses its local OpenAI-compatible
362
375
  gateway for task execution and does not publish MeshLLM peer or topology details
363
376
  through IICP discovery.
package/dist/cli.d.ts CHANGED
@@ -18,6 +18,8 @@ export declare function startProviderAutoUpdate(options?: ProviderAutoUpdateOpti
18
18
  export interface ServeOpts {
19
19
  backendUrl: string;
20
20
  policyManifest?: string;
21
+ /** Explicit operator receipt-profile opt-in; undefined allows saved-node fallback. */
22
+ receiptProfiles?: string[];
21
23
  backendType: string;
22
24
  experimental?: boolean;
23
25
  /** #5 — Bearer key for an auth-requiring OpenAI-compat backend (LM Studio, hosted). Empty = none. */
@@ -46,6 +48,7 @@ export interface ServeOpts {
46
48
  /** TC-9c — pre-loaded from saved node config; passed to IicpNode so receipts work on restart. */
47
49
  nodeHmacKey?: string;
48
50
  }
51
+ export declare function resolveReceiptProfiles(cliValues: string[] | undefined, envValue: string | undefined, savedValues?: string[]): string[];
49
52
  export declare const TUNNEL_DEAD_EXIT_CODE = 75;
50
53
  export type TunnelDeadPolicy = "auto" | "retry" | "exit" | "log-only";
51
54
  export type TunnelDeadBehavior = "exit" | "retry" | "log-only";
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.TUNNEL_DEAD_EXIT_CODE = void 0;
5
5
  exports.startProviderAutoUpdate = startProviderAutoUpdate;
6
+ exports.resolveReceiptProfiles = resolveReceiptProfiles;
6
7
  exports.tunnelDeadPolicyFromEnv = tunnelDeadPolicyFromEnv;
7
8
  exports.tunnelDeadBehavior = tunnelDeadBehavior;
8
9
  exports.relayWorkerFallbackAllowed = relayWorkerFallbackAllowed;
@@ -105,6 +106,15 @@ function startProviderAutoUpdate(options = {}) {
105
106
  clearInterval(intervalTimer);
106
107
  };
107
108
  }
109
+ function resolveReceiptProfiles(cliValues, envValue, savedValues) {
110
+ const raw = cliValues ?? (envValue !== undefined ? envValue.split(",") : (savedValues ?? []));
111
+ const profiles = [...new Set(raw.map((value) => value.trim()).filter(Boolean))];
112
+ const unsupported = profiles.filter((value) => value !== "consumer_cosignature_v1");
113
+ if (unsupported.length > 0) {
114
+ throw new CliError(`unsupported receipt profile(s): ${unsupported.join(", ")}. Supported: consumer_cosignature_v1.`);
115
+ }
116
+ return profiles;
117
+ }
108
118
  function envOr(name, fallback) {
109
119
  const v = process.env[name];
110
120
  return v ?? fallback;
@@ -179,6 +189,7 @@ function printHelp() {
179
189
  ` --backend-api-key KEY IICP_BACKEND_API_KEY — Bearer key for an auth'd backend (LM Studio, hosted); anthropic uses it as x-api-key\n` +
180
190
  ` --experimental IICP_EXPERIMENTAL — enable an explicitly selected preview backend feature\n` +
181
191
  ` --policy-manifest FILE IICP_POLICY_MANIFEST_FILE — sign and advertise a public node-policy JSON document\n` +
192
+ ` --receipt-profile PROFILE IICP_SUPPORTED_RECEIPT_PROFILES — repeatable; supported: consumer_cosignature_v1\n` +
182
193
  ` --public-endpoint URL IICP_PUBLIC_ENDPOINT — externally reachable URL of this node\n` +
183
194
  ` --directory-url URL IICP_DIRECTORY_URL (default https://iicp.network/api)\n` +
184
195
  ` --region REGION IICP_REGION (e.g. us-east; unknown if unset)\n` +
@@ -247,6 +258,7 @@ function printServeHelp() {
247
258
  ` --backend-api-key KEY IICP_BACKEND_API_KEY — Bearer key for auth'd backends\n` +
248
259
  ` --experimental IICP_EXPERIMENTAL — enable an explicitly selected preview backend feature\n` +
249
260
  ` --policy-manifest FILE IICP_POLICY_MANIFEST_FILE — sign and advertise a public node-policy JSON document\n` +
261
+ ` --receipt-profile PROFILE IICP_SUPPORTED_RECEIPT_PROFILES — repeatable; supported: consumer_cosignature_v1\n` +
250
262
  ` --public-endpoint URL IICP_PUBLIC_ENDPOINT — externally reachable URL of this node\n` +
251
263
  ` --directory-url URL IICP_DIRECTORY_URL (default https://iicp.network/api)\n` +
252
264
  ` --region REGION IICP_REGION (e.g. eu-central)\n` +
@@ -667,6 +679,7 @@ function applySavedNode(opts, saved) {
667
679
  autoDetectNat: opts.autoDetectNat || saved.auto_detect_nat,
668
680
  externalIpProbeUrl: opts.externalIpProbeUrl || saved.external_ip_probe_url,
669
681
  nodeHmacKey: opts.nodeHmacKey || saved.node_hmac_key || undefined,
682
+ receiptProfiles: opts.receiptProfiles ?? resolveReceiptProfiles(undefined, undefined, saved.supported_receipt_profiles),
670
683
  };
671
684
  }
672
685
  async function runServe(opts) {
@@ -1012,6 +1025,7 @@ async function runServe(opts) {
1012
1025
  operatorCreatedAt: _opCreatedAt,
1013
1026
  operatorIntegrityHash: _opIntegrityHash,
1014
1027
  policyManifest,
1028
+ supportedReceiptProfiles: opts.receiptProfiles ?? [],
1015
1029
  // #494 — wire backend URL for live health_models probing in heartbeats.
1016
1030
  backendUrl: opts.backendUrl || undefined,
1017
1031
  backendApiKey: opts.backendApiKey || undefined,
@@ -2889,6 +2903,7 @@ async function dispatch(argv) {
2889
2903
  node: { type: "string" },
2890
2904
  "backend-url": { type: "string" },
2891
2905
  "policy-manifest": { type: "string" },
2906
+ "receipt-profile": { type: "string", multiple: true },
2892
2907
  "backend-type": { type: "string" },
2893
2908
  "backend-api-key": { type: "string" },
2894
2909
  experimental: { type: "boolean" },
@@ -2927,6 +2942,9 @@ async function dispatch(argv) {
2927
2942
  node: values.node ?? envOr("IICP_NODE_NAME") ?? "",
2928
2943
  backendUrl: values["backend-url"] ?? envOr("IICP_BACKEND_URL") ?? "",
2929
2944
  policyManifest: values["policy-manifest"] ?? envOr("IICP_POLICY_MANIFEST_FILE") ?? "",
2945
+ receiptProfiles: values["receipt-profile"] !== undefined || process.env.IICP_SUPPORTED_RECEIPT_PROFILES !== undefined
2946
+ ? resolveReceiptProfiles(values["receipt-profile"], envOr("IICP_SUPPORTED_RECEIPT_PROFILES"))
2947
+ : undefined,
2930
2948
  backendType: values["backend-type"] ??
2931
2949
  envOr("IICP_BACKEND_TYPE", "openai_compat"),
2932
2950
  backendApiKey: values["backend-api-key"] ?? envOr("IICP_BACKEND_API_KEY") ?? "",