@iicp/client 0.7.78 → 0.7.80
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 +34 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -1
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +24 -12
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -3
- package/dist/node.js.map +1 -1
- package/dist/policy.d.ts +17 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +73 -0
- package/dist/policy.js.map +1 -0
- package/dist/recovery.d.ts +6 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +57 -0
- package/dist/recovery.js.map +1 -1
- package/dist/routing_policy.d.ts +19 -0
- package/dist/routing_policy.d.ts.map +1 -0
- package/dist/routing_policy.js +133 -0
- package/dist/routing_policy.js.map +1 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/policy.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Client-side policy guardrails.
|
|
4
|
+
*
|
|
5
|
+
* The SDK refuses intent URNs aligned with prohibited-practice families before
|
|
6
|
+
* discovery/routing. This is deliberately narrow; it does not replace deployer
|
|
7
|
+
* legal review for high-risk or domain-specific systems.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.PROHIBITED_INTENT_RULES = exports.POLICY_REFUSAL_CODE = void 0;
|
|
11
|
+
exports.prohibitedIntentReason = prohibitedIntentReason;
|
|
12
|
+
exports.ensureIntentAllowed = ensureIntentAllowed;
|
|
13
|
+
const errors_js_1 = require("./errors.js");
|
|
14
|
+
exports.POLICY_REFUSAL_CODE = "IICP-POLICY-001";
|
|
15
|
+
exports.PROHIBITED_INTENT_RULES = [
|
|
16
|
+
{
|
|
17
|
+
rule_id: "eu-ai-act-social-scoring",
|
|
18
|
+
label: "social scoring",
|
|
19
|
+
fragments: ["social-scoring", "social_scoring", "social:scoring"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
rule_id: "eu-ai-act-criminal-risk",
|
|
23
|
+
label: "individual criminal risk prediction",
|
|
24
|
+
fragments: ["criminal-risk", "criminal_risk", "criminal:risk", "predict-crime"],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
rule_id: "eu-ai-act-workplace-education-emotion",
|
|
28
|
+
label: "workplace or education emotion recognition",
|
|
29
|
+
fragments: [
|
|
30
|
+
"emotion:workplace",
|
|
31
|
+
"emotion:education",
|
|
32
|
+
"workplace-monitoring",
|
|
33
|
+
"education-monitoring",
|
|
34
|
+
"worker-monitoring",
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
rule_id: "eu-ai-act-protected-trait-biometric",
|
|
39
|
+
label: "biometric protected-trait classification",
|
|
40
|
+
fragments: ["protected-trait", "protected_trait", "biometric:protected"],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
rule_id: "eu-ai-act-untargeted-face-scraping",
|
|
44
|
+
label: "untargeted facial image scraping for recognition databases",
|
|
45
|
+
fragments: ["untargeted-scraping", "untargeted_scraping", "face-scraping", "facial-scraping"],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
rule_id: "eu-ai-act-realtime-remote-biometric-id",
|
|
49
|
+
label: "real-time remote biometric identification",
|
|
50
|
+
fragments: ["remote-biometric:realtime", "realtime-remote-biometric", "real-time-remote-biometric"],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
rule_id: "eu-ai-act-nonconsensual-sexual-deepfake",
|
|
54
|
+
label: "non-consensual sexual deepfake or CSAM generation",
|
|
55
|
+
fragments: ["nonconsensual-sexual", "non-consensual-sexual", "child-sexual-abuse", "csam"],
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
function prohibitedIntentReason(intent) {
|
|
59
|
+
const normalized = intent.trim().toLowerCase();
|
|
60
|
+
for (const rule of exports.PROHIBITED_INTENT_RULES) {
|
|
61
|
+
if (rule.fragments.some((fragment) => normalized.includes(fragment))) {
|
|
62
|
+
return `${rule.label} (${rule.rule_id})`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
function ensureIntentAllowed(intent) {
|
|
68
|
+
const reason = prohibitedIntentReason(intent);
|
|
69
|
+
if (!reason)
|
|
70
|
+
return;
|
|
71
|
+
throw new errors_js_1.IicpError(`Intent refused by IICP client policy before discovery/routing: ${reason}. Use a lawful, documented, human-reviewed compliance path outside the public mesh for restricted/high-risk workflows.`, exports.POLICY_REFUSAL_CODE, { component: "sdk" });
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAwDH,wDAQC;AAED,kDAQC;AAxED,2CAAwC;AAE3B,QAAA,mBAAmB,GAAG,iBAAiB,CAAC;AAQxC,QAAA,uBAAuB,GAAoC;IACtE;QACE,OAAO,EAAE,0BAA0B;QACnC,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;KAClE;IACD;QACE,OAAO,EAAE,yBAAyB;QAClC,KAAK,EAAE,qCAAqC;QAC5C,SAAS,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;KAChF;IACD;QACE,OAAO,EAAE,uCAAuC;QAChD,KAAK,EAAE,4CAA4C;QACnD,SAAS,EAAE;YACT,mBAAmB;YACnB,mBAAmB;YACnB,sBAAsB;YACtB,sBAAsB;YACtB,mBAAmB;SACpB;KACF;IACD;QACE,OAAO,EAAE,qCAAqC;QAC9C,KAAK,EAAE,0CAA0C;QACjD,SAAS,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;KACzE;IACD;QACE,OAAO,EAAE,oCAAoC;QAC7C,KAAK,EAAE,4DAA4D;QACnE,SAAS,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,CAAC;KAC9F;IACD;QACE,OAAO,EAAE,wCAAwC;QACjD,KAAK,EAAE,2CAA2C;QAClD,SAAS,EAAE,CAAC,2BAA2B,EAAE,2BAA2B,EAAE,4BAA4B,CAAC;KACpG;IACD;QACE,OAAO,EAAE,yCAAyC;QAClD,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,CAAC,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,CAAC;KAC3F;CACF,CAAC;AAEF,SAAgB,sBAAsB,CAAC,MAAc;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,+BAAuB,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrE,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAc;IAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,IAAI,qBAAS,CACjB,kEAAkE,MAAM,wHAAwH,EAChM,2BAAmB,EACnB,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;AACJ,CAAC"}
|
package/dist/recovery.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ export declare const DEFAULT_RECOVERY_CHECK_EVERY_HEARTBEATS = 2;
|
|
|
5
5
|
export type RecoveryState = "healthy" | "local_unhealthy" | "backend_attention" | "route_mismatch" | "tunnel_cooling_down" | "directory_absent" | "limited_reach" | "restart_recommended" | "unknown";
|
|
6
6
|
export type RecoveryAction = "none" | "reregister" | "wait_cooldown" | "mark_unavailable" | "restart_self" | "operator_endpoint_needed" | "backend_attention";
|
|
7
7
|
export type DirectoryPresence = "present" | "absent" | "unknown";
|
|
8
|
+
export interface RegistryRouteStatus {
|
|
9
|
+
presence: DirectoryPresence;
|
|
10
|
+
routeNeedsPromotion: boolean;
|
|
11
|
+
}
|
|
8
12
|
export declare function nodeRegistryPrefix(nodeId: string): string;
|
|
9
13
|
export declare function envGraceChecks(): number;
|
|
10
14
|
export declare function envCheckEveryHeartbeats(): number;
|
|
@@ -21,4 +25,6 @@ export declare function classifyRecovery(opts: {
|
|
|
21
25
|
action: RecoveryAction;
|
|
22
26
|
};
|
|
23
27
|
export declare function registryNodePresence(directoryUrl: string, nodeId: string, timeoutMs?: number): Promise<DirectoryPresence>;
|
|
28
|
+
export declare function routeNeedsPromotionFromRegistryJson(data: unknown): boolean;
|
|
29
|
+
export declare function registryRouteStatus(directoryUrl: string, nodeId: string, timeoutMs?: number): Promise<RegistryRouteStatus>;
|
|
24
30
|
//# sourceMappingURL=recovery.d.ts.map
|
package/dist/recovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AACA,oDAAoD;AAEpD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,uCAAuC,IAAI,CAAC;AAEzD,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,GAChB,qBAAqB,GACrB,kBAAkB,GAClB,eAAe,GACf,qBAAqB,GACrB,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,cAAc,GACd,0BAA0B,GAC1B,mBAAmB,CAAC;AAExB,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAInD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAanD;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,SAAQ,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAe5B"}
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AACA,oDAAoD;AAEpD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,uCAAuC,IAAI,CAAC;AAEzD,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,GAChB,qBAAqB,GACrB,kBAAkB,GAClB,eAAe,GACf,qBAAqB,GACrB,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,cAAc,GACd,0BAA0B,GAC1B,mBAAmB,CAAC;AAExB,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAInD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAanD;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,SAAQ,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAe5B;AAED,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CA2B1E;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,SAAQ,GAChB,OAAO,CAAC,mBAAmB,CAAC,CAuB9B"}
|
package/dist/recovery.js
CHANGED
|
@@ -9,6 +9,8 @@ exports.envCheckEveryHeartbeats = envCheckEveryHeartbeats;
|
|
|
9
9
|
exports.supervisedRecoveryEnabled = supervisedRecoveryEnabled;
|
|
10
10
|
exports.classifyRecovery = classifyRecovery;
|
|
11
11
|
exports.registryNodePresence = registryNodePresence;
|
|
12
|
+
exports.routeNeedsPromotionFromRegistryJson = routeNeedsPromotionFromRegistryJson;
|
|
13
|
+
exports.registryRouteStatus = registryRouteStatus;
|
|
12
14
|
exports.RECOVERY_EXIT_CODE = 76;
|
|
13
15
|
exports.DEFAULT_RECOVERY_GRACE_CHECKS = 3;
|
|
14
16
|
exports.DEFAULT_RECOVERY_CHECK_EVERY_HEARTBEATS = 2;
|
|
@@ -68,4 +70,59 @@ async function registryNodePresence(directoryUrl, nodeId, timeoutMs = 5_000) {
|
|
|
68
70
|
clearTimeout(timer);
|
|
69
71
|
}
|
|
70
72
|
}
|
|
73
|
+
function routeNeedsPromotionFromRegistryJson(data) {
|
|
74
|
+
const root = isRecord(data) && isRecord(data.node) ? data.node : data;
|
|
75
|
+
if (!isRecord(root))
|
|
76
|
+
return false;
|
|
77
|
+
const summary = isRecord(root.status_summary) ? root.status_summary : {};
|
|
78
|
+
if (summary.state === "direct_unverified")
|
|
79
|
+
return true;
|
|
80
|
+
const routeEvidence = typeof root.route_evidence === "string"
|
|
81
|
+
? root.route_evidence
|
|
82
|
+
: typeof summary.evidence_source === "string"
|
|
83
|
+
? summary.evidence_source
|
|
84
|
+
: undefined;
|
|
85
|
+
const routingHint = typeof root.routing_hint === "string"
|
|
86
|
+
? root.routing_hint
|
|
87
|
+
: typeof summary.routing_hint === "string"
|
|
88
|
+
? summary.routing_hint
|
|
89
|
+
: undefined;
|
|
90
|
+
const browserUsable = typeof root.browser_usable === "boolean"
|
|
91
|
+
? root.browser_usable
|
|
92
|
+
: typeof summary.browser_usable === "boolean"
|
|
93
|
+
? summary.browser_usable
|
|
94
|
+
: undefined;
|
|
95
|
+
return routingHint === "http_ipv6" && routeEvidence !== "directory_observed" && browserUsable !== true;
|
|
96
|
+
}
|
|
97
|
+
async function registryRouteStatus(directoryUrl, nodeId, timeoutMs = 5_000) {
|
|
98
|
+
const controller = new AbortController();
|
|
99
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
100
|
+
try {
|
|
101
|
+
const resp = await fetch(`${directoryUrl.replace(/\/+$/, "")}/v1/registry/nodes/${nodeRegistryPrefix(nodeId)}`, {
|
|
102
|
+
signal: controller.signal,
|
|
103
|
+
});
|
|
104
|
+
if (resp.ok) {
|
|
105
|
+
let data = {};
|
|
106
|
+
try {
|
|
107
|
+
data = await resp.json();
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
data = {};
|
|
111
|
+
}
|
|
112
|
+
return { presence: "present", routeNeedsPromotion: routeNeedsPromotionFromRegistryJson(data) };
|
|
113
|
+
}
|
|
114
|
+
if (resp.status === 404)
|
|
115
|
+
return { presence: "absent", routeNeedsPromotion: false };
|
|
116
|
+
return { presence: "unknown", routeNeedsPromotion: false };
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return { presence: "unknown", routeNeedsPromotion: false };
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
clearTimeout(timer);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function isRecord(value) {
|
|
126
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
127
|
+
}
|
|
71
128
|
//# sourceMappingURL=recovery.js.map
|
package/dist/recovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,oDAAoD;;;
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote-routing policy gates for prompt dispatch (#585).
|
|
3
|
+
*
|
|
4
|
+
* These checks run after prompt-free directory discovery and before a prompt is
|
|
5
|
+
* sent to any remote executor.
|
|
6
|
+
*/
|
|
7
|
+
import type { Node, RoutingPolicy } from "./types.js";
|
|
8
|
+
export declare const ROUTING_POLICY_REFUSAL_CODE = "IICP-POLICY-ROUTING";
|
|
9
|
+
export interface RoutingPolicyDecision {
|
|
10
|
+
eligible: Node[];
|
|
11
|
+
rejectedReasons: string[];
|
|
12
|
+
skippedKeyless: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function resolvedRoutingPolicy(policy?: RoutingPolicy): Required<RoutingPolicy>;
|
|
15
|
+
export declare function filterNodesForRoutingPolicy(nodes: Node[], policy?: RoutingPolicy, opts?: {
|
|
16
|
+
allowPlaintextDebug?: boolean;
|
|
17
|
+
}): RoutingPolicyDecision;
|
|
18
|
+
export declare function routingPolicyRefusalMessage(intent: string, decision: RoutingPolicyDecision, policy?: RoutingPolicy): string;
|
|
19
|
+
//# sourceMappingURL=routing_policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing_policy.d.ts","sourceRoot":"","sources":["../src/routing_policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAkB,MAAM,YAAY,CAAC;AAEtE,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,CAcrF;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC,qBAAqB,CAgBvB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,CAAC,EAAE,aAAa,GACrB,MAAM,CAQR"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Remote-routing policy gates for prompt dispatch (#585).
|
|
4
|
+
*
|
|
5
|
+
* These checks run after prompt-free directory discovery and before a prompt is
|
|
6
|
+
* sent to any remote executor.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ROUTING_POLICY_REFUSAL_CODE = void 0;
|
|
10
|
+
exports.resolvedRoutingPolicy = resolvedRoutingPolicy;
|
|
11
|
+
exports.filterNodesForRoutingPolicy = filterNodesForRoutingPolicy;
|
|
12
|
+
exports.routingPolicyRefusalMessage = routingPolicyRefusalMessage;
|
|
13
|
+
exports.ROUTING_POLICY_REFUSAL_CODE = "IICP-POLICY-ROUTING";
|
|
14
|
+
const EU_REGION_PREFIXES = ["eu", "eea"];
|
|
15
|
+
function resolvedRoutingPolicy(policy) {
|
|
16
|
+
let profile = normalizeProfile(policy?.profile ?? "standard");
|
|
17
|
+
const defaults = profileDefaults(profile);
|
|
18
|
+
if (!defaults)
|
|
19
|
+
profile = "standard";
|
|
20
|
+
const d = defaults ?? profileDefaults("standard");
|
|
21
|
+
return {
|
|
22
|
+
profile,
|
|
23
|
+
allowed_regions: policy?.allowed_regions ?? d.allowed_regions,
|
|
24
|
+
require_encryption: policy?.require_encryption ?? d.require_encryption,
|
|
25
|
+
require_policy_manifest: policy?.require_policy_manifest ?? d.require_policy_manifest,
|
|
26
|
+
require_no_payload_retention: policy?.require_no_payload_retention ?? d.require_no_payload_retention,
|
|
27
|
+
allow_remote_executor: policy?.allow_remote_executor ?? d.allow_remote_executor,
|
|
28
|
+
known_operator_only: policy?.known_operator_only ?? false,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function filterNodesForRoutingPolicy(nodes, policy, opts) {
|
|
32
|
+
const effective = resolvedRoutingPolicy(policy);
|
|
33
|
+
const eligible = [];
|
|
34
|
+
const rejectedReasons = [];
|
|
35
|
+
let skippedKeyless = 0;
|
|
36
|
+
for (const node of nodes) {
|
|
37
|
+
const reason = nodeRejectionReason(node, effective, opts?.allowPlaintextDebug === true);
|
|
38
|
+
if (reason) {
|
|
39
|
+
rejectedReasons.push(reason);
|
|
40
|
+
if (reason === "missing_encryption_key")
|
|
41
|
+
skippedKeyless += 1;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
eligible.push(node);
|
|
45
|
+
}
|
|
46
|
+
return { eligible, rejectedReasons, skippedKeyless };
|
|
47
|
+
}
|
|
48
|
+
function routingPolicyRefusalMessage(intent, decision, policy) {
|
|
49
|
+
const effective = resolvedRoutingPolicy(policy);
|
|
50
|
+
return (`Routing policy '${effective.profile}' refused all discovered nodes for '${intent}' ` +
|
|
51
|
+
`before prompt dispatch; no prompt was sent. Reasons: ${summarize(decision.rejectedReasons)}. ` +
|
|
52
|
+
"Remote nodes can read prompts they execute; use local/browser mode for sensitive data " +
|
|
53
|
+
"or relax the policy explicitly.");
|
|
54
|
+
}
|
|
55
|
+
function normalizeProfile(profile) {
|
|
56
|
+
return profile.replace(/-/g, "_").toLowerCase();
|
|
57
|
+
}
|
|
58
|
+
function profileDefaults(profile) {
|
|
59
|
+
const base = {
|
|
60
|
+
allowed_regions: [],
|
|
61
|
+
require_encryption: true,
|
|
62
|
+
require_policy_manifest: false,
|
|
63
|
+
require_no_payload_retention: false,
|
|
64
|
+
allow_remote_executor: true,
|
|
65
|
+
known_operator_only: false,
|
|
66
|
+
};
|
|
67
|
+
switch (profile) {
|
|
68
|
+
case "standard":
|
|
69
|
+
return { ...base, profile };
|
|
70
|
+
case "sensitive":
|
|
71
|
+
return { ...base, profile, allow_remote_executor: false };
|
|
72
|
+
case "eu_restricted":
|
|
73
|
+
return { ...base, profile, allowed_regions: EU_REGION_PREFIXES };
|
|
74
|
+
case "strict_policy":
|
|
75
|
+
return {
|
|
76
|
+
...base,
|
|
77
|
+
profile,
|
|
78
|
+
require_policy_manifest: true,
|
|
79
|
+
require_no_payload_retention: true,
|
|
80
|
+
};
|
|
81
|
+
case "debug_override":
|
|
82
|
+
return { ...base, profile, require_encryption: false };
|
|
83
|
+
default:
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function nodeRejectionReason(node, policy, allowPlaintextDebug) {
|
|
88
|
+
if (policy.allow_remote_executor === false)
|
|
89
|
+
return "remote_executor_disabled";
|
|
90
|
+
if (policy.allowed_regions.length > 0 && !regionAllowed(node.region, policy.allowed_regions)) {
|
|
91
|
+
return "region_not_allowed";
|
|
92
|
+
}
|
|
93
|
+
if (policy.require_encryption && !node.cx_public_key && !allowPlaintextDebug) {
|
|
94
|
+
return "missing_encryption_key";
|
|
95
|
+
}
|
|
96
|
+
const manifest = node.node_policy_manifest && typeof node.node_policy_manifest === "object"
|
|
97
|
+
? node.node_policy_manifest
|
|
98
|
+
: undefined;
|
|
99
|
+
if (policy.require_policy_manifest && !manifest)
|
|
100
|
+
return "missing_policy_manifest";
|
|
101
|
+
if (policy.require_no_payload_retention && !declaresNoPayloadRetention(manifest)) {
|
|
102
|
+
return "payload_retention_not_none";
|
|
103
|
+
}
|
|
104
|
+
if (policy.known_operator_only)
|
|
105
|
+
return "known_operator_not_verified";
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
function regionAllowed(region, allowed) {
|
|
109
|
+
const value = (region ?? "").trim().toLowerCase();
|
|
110
|
+
return allowed.some((raw) => {
|
|
111
|
+
const item = (raw ?? "").trim().toLowerCase();
|
|
112
|
+
if (!item)
|
|
113
|
+
return false;
|
|
114
|
+
if (value === item || value.startsWith(`${item}-`))
|
|
115
|
+
return true;
|
|
116
|
+
return item === "eea" && value.startsWith("eu-");
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function declaresNoPayloadRetention(manifest) {
|
|
120
|
+
const retention = manifest?.retention;
|
|
121
|
+
return (typeof retention === "object" &&
|
|
122
|
+
retention !== null &&
|
|
123
|
+
retention.task_payload === "none");
|
|
124
|
+
}
|
|
125
|
+
function summarize(reasons) {
|
|
126
|
+
if (reasons.length === 0)
|
|
127
|
+
return "none";
|
|
128
|
+
const counts = new Map();
|
|
129
|
+
for (const reason of reasons)
|
|
130
|
+
counts.set(reason, (counts.get(reason) ?? 0) + 1);
|
|
131
|
+
return [...counts.entries()].sort().map(([reason, count]) => `${reason}=${count}`).join(", ");
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=routing_policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing_policy.js","sourceRoot":"","sources":["../src/routing_policy.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export interface ClientConfig {
|
|
|
22
22
|
routing_softmax_tau?: number;
|
|
23
23
|
/** Phase 2 (#496): caller's JWT from directory registration, used to acquire consumer tokens. */
|
|
24
24
|
node_token?: string;
|
|
25
|
+
/** Phase 6 (#585): default client-side policy evaluated before remote prompt dispatch. */
|
|
26
|
+
routing_policy?: RoutingPolicy;
|
|
25
27
|
}
|
|
26
28
|
export interface TaskConstraints {
|
|
27
29
|
region?: string;
|
|
@@ -47,6 +49,8 @@ export interface TaskRequest {
|
|
|
47
49
|
task_id?: string;
|
|
48
50
|
/** #488 — querying node identity for self-query neutrality at the directory. */
|
|
49
51
|
source_node_id?: string;
|
|
52
|
+
/** Phase 6 (#585): optional per-request remote-routing policy override. */
|
|
53
|
+
routing_policy?: RoutingPolicy;
|
|
50
54
|
}
|
|
51
55
|
export interface TaskResponse {
|
|
52
56
|
task_id: string;
|
|
@@ -68,6 +72,20 @@ export interface CxPublicKey {
|
|
|
68
72
|
key: string;
|
|
69
73
|
key_id: string;
|
|
70
74
|
}
|
|
75
|
+
export interface NodePolicyManifest {
|
|
76
|
+
version?: string | null;
|
|
77
|
+
jurisdiction?: string | null;
|
|
78
|
+
policy_url?: string | null;
|
|
79
|
+
contact_url?: string | null;
|
|
80
|
+
remote_executor_can_read_prompt?: boolean;
|
|
81
|
+
training_use?: "none" | "opt_in" | "provider_defined" | string;
|
|
82
|
+
retention?: Record<string, unknown>;
|
|
83
|
+
subprocessors?: string[];
|
|
84
|
+
unsupported_intents?: string[];
|
|
85
|
+
signed_statement?: string | null;
|
|
86
|
+
evidence?: string;
|
|
87
|
+
[key: string]: unknown;
|
|
88
|
+
}
|
|
71
89
|
export interface Node {
|
|
72
90
|
node_id: string;
|
|
73
91
|
endpoint: string;
|
|
@@ -84,6 +102,8 @@ export interface Node {
|
|
|
84
102
|
route_evidence?: string;
|
|
85
103
|
routing_hint?: string;
|
|
86
104
|
browser_usable?: boolean;
|
|
105
|
+
/** Phase-1 compliance: public, self-attested node policy manifest. */
|
|
106
|
+
node_policy_manifest?: NodePolicyManifest | null;
|
|
87
107
|
}
|
|
88
108
|
export interface ChatMessage {
|
|
89
109
|
role: "user" | "assistant" | "system";
|
|
@@ -113,5 +133,16 @@ export interface ChatOptions {
|
|
|
113
133
|
model?: string;
|
|
114
134
|
max_tokens?: number;
|
|
115
135
|
temperature?: number;
|
|
136
|
+
routing_policy?: RoutingPolicy;
|
|
137
|
+
}
|
|
138
|
+
export type RoutingProfile = "standard" | "sensitive" | "eu_restricted" | "strict_policy" | "debug_override";
|
|
139
|
+
export interface RoutingPolicy {
|
|
140
|
+
profile?: RoutingProfile | string;
|
|
141
|
+
allowed_regions?: string[];
|
|
142
|
+
require_encryption?: boolean;
|
|
143
|
+
require_policy_manifest?: boolean;
|
|
144
|
+
require_no_payload_retention?: boolean;
|
|
145
|
+
allow_remote_executor?: boolean;
|
|
146
|
+
known_operator_only?: boolean;
|
|
116
147
|
}
|
|
117
148
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,UAAU,EAAE,OAAO,CAAC;IACpB,6FAA6F;IAC7F,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kHAAkH;IAClH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,eAAe,GAAG,SAAS,GAAG,eAAe,CAAC;IACjE,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+FAA+F;IAC/F,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|