@safebrowse/core 0.1.2-rc.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.
Files changed (63) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +22 -0
  3. package/dist/action.d.ts +3 -0
  4. package/dist/action.d.ts.map +1 -0
  5. package/dist/action.js +142 -0
  6. package/dist/action.js.map +1 -0
  7. package/dist/artifact.d.ts +3 -0
  8. package/dist/artifact.d.ts.map +1 -0
  9. package/dist/artifact.js +123 -0
  10. package/dist/artifact.js.map +1 -0
  11. package/dist/artifactV2.d.ts +3 -0
  12. package/dist/artifactV2.d.ts.map +1 -0
  13. package/dist/artifactV2.js +32 -0
  14. package/dist/artifactV2.js.map +1 -0
  15. package/dist/index.d.ts +13 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +13 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/memory.d.ts +3 -0
  20. package/dist/memory.d.ts.map +1 -0
  21. package/dist/memory.js +79 -0
  22. package/dist/memory.js.map +1 -0
  23. package/dist/perf-smoke.d.ts +2 -0
  24. package/dist/perf-smoke.d.ts.map +1 -0
  25. package/dist/perf-smoke.js +86 -0
  26. package/dist/perf-smoke.js.map +1 -0
  27. package/dist/policy.d.ts +3 -0
  28. package/dist/policy.d.ts.map +1 -0
  29. package/dist/policy.js +74 -0
  30. package/dist/policy.js.map +1 -0
  31. package/dist/promptInjection.d.ts +3 -0
  32. package/dist/promptInjection.d.ts.map +1 -0
  33. package/dist/promptInjection.js +58 -0
  34. package/dist/promptInjection.js.map +1 -0
  35. package/dist/replay.d.ts +3 -0
  36. package/dist/replay.d.ts.map +1 -0
  37. package/dist/replay.js +39 -0
  38. package/dist/replay.js.map +1 -0
  39. package/dist/sanitize.d.ts +3 -0
  40. package/dist/sanitize.d.ts.map +1 -0
  41. package/dist/sanitize.js +50 -0
  42. package/dist/sanitize.js.map +1 -0
  43. package/dist/toolProtocol.d.ts +3 -0
  44. package/dist/toolProtocol.d.ts.map +1 -0
  45. package/dist/toolProtocol.js +80 -0
  46. package/dist/toolProtocol.js.map +1 -0
  47. package/dist/toolProtocolV2.d.ts +6 -0
  48. package/dist/toolProtocolV2.d.ts.map +1 -0
  49. package/dist/toolProtocolV2.js +330 -0
  50. package/dist/toolProtocolV2.js.map +1 -0
  51. package/dist/trust.d.ts +4 -0
  52. package/dist/trust.d.ts.map +1 -0
  53. package/dist/trust.js +32 -0
  54. package/dist/trust.js.map +1 -0
  55. package/dist/types.d.ts +399 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/utils.d.ts +11 -0
  60. package/dist/utils.d.ts.map +1 -0
  61. package/dist/utils.js +102 -0
  62. package/dist/utils.js.map +1 -0
  63. package/package.json +47 -0
package/dist/policy.js ADDED
@@ -0,0 +1,74 @@
1
+ import { normalizeOrigin } from "./utils.js";
2
+ function mergeArrays(...groups) {
3
+ const merged = new Set();
4
+ for (const group of groups) {
5
+ for (const item of group ?? []) {
6
+ merged.add(item.toLowerCase());
7
+ }
8
+ }
9
+ return merged;
10
+ }
11
+ function mergeBooleans(layers, selector, fallback) {
12
+ let current = fallback;
13
+ for (const layer of layers) {
14
+ const value = selector(layer);
15
+ if (typeof value === "boolean") {
16
+ current = value;
17
+ }
18
+ }
19
+ return current;
20
+ }
21
+ export function compilePolicy(policyPack) {
22
+ const layers = [...policyPack.layers];
23
+ const readOnlyOrigins = new Set([...mergeArrays(...layers.map((layer) => layer.origins?.readOnlyAllow))].map((origin) => normalizeOrigin(origin)));
24
+ const writableOrigins = new Set([...mergeArrays(...layers.map((layer) => layer.origins?.writableAllow))].map((origin) => normalizeOrigin(origin)));
25
+ let memoryDurableWrites = "deny";
26
+ for (const layer of layers) {
27
+ if (layer.memory?.durableWrites) {
28
+ memoryDurableWrites = layer.memory.durableWrites;
29
+ }
30
+ }
31
+ let telemetrySampling = "adaptive";
32
+ for (const layer of layers) {
33
+ if (layer.telemetry?.sampling) {
34
+ telemetrySampling = layer.telemetry.sampling;
35
+ }
36
+ }
37
+ return {
38
+ packId: policyPack.packId,
39
+ profile: policyPack.profile,
40
+ version: policyPack.version,
41
+ layerOrder: layers.map((layer) => layer.name),
42
+ layerProvenance: layers.map((layer) => ({
43
+ name: layer.name,
44
+ version: layer.version,
45
+ profile: layer.profile
46
+ })),
47
+ readOnlyOrigins,
48
+ writableOrigins,
49
+ allowedActions: mergeArrays(...layers.map((layer) => layer.actions?.allow)),
50
+ approvalActions: mergeArrays(...layers.map((layer) => layer.actions?.requireApproval)),
51
+ deniedActions: mergeArrays(...layers.map((layer) => layer.actions?.deny)),
52
+ allowedMimeTypes: mergeArrays(...layers.map((layer) => layer.artifacts?.allowMimeTypes)),
53
+ protectedMemoryKeys: mergeArrays(...layers.map((layer) => layer.memory?.protectedKeys)),
54
+ memoryDurableWrites,
55
+ forbidTokenPassthrough: mergeBooleans(layers, (layer) => layer.toolProtocol?.forbidTokenPassthrough, true),
56
+ enforceExactRedirectUri: mergeBooleans(layers, (layer) => layer.toolProtocol?.enforceExactRedirectUri, true),
57
+ allowedRegistrySigners: mergeArrays(...layers.map((layer) => layer.toolProtocol?.allowedRegistrySigners)),
58
+ requireVerifiedRegistry: mergeBooleans(layers, (layer) => layer.toolProtocol?.requireVerifiedRegistry, true),
59
+ requireApprovalBinding: mergeBooleans(layers, (layer) => layer.toolProtocol?.requireApprovalBinding, true),
60
+ requireOauthStateBinding: mergeBooleans(layers, (layer) => layer.toolProtocol?.requireOauthStateBinding, true),
61
+ taintedConnectorFlowDecision: [...layers]
62
+ .reverse()
63
+ .find((layer) => layer.toolProtocol?.taintedConnectorFlowDecision)
64
+ ?.toolProtocol?.taintedConnectorFlowDecision ?? "block",
65
+ allowLoopbackCallbacksInDev: mergeBooleans(layers, (layer) => layer.toolProtocol?.allowLoopbackCallbacksInDev, false),
66
+ enableDocumentHandoff: mergeBooleans(layers, (layer) => layer.artifacts?.enableDocumentHandoff, true),
67
+ quarantineOnHiddenTextMismatch: mergeBooleans(layers, (layer) => layer.artifacts?.quarantineOnHiddenTextMismatch, true),
68
+ replayBundle: mergeBooleans(layers, (layer) => layer.telemetry?.replayBundle, true),
69
+ redactSensitiveValues: mergeBooleans(layers, (layer) => layer.telemetry?.redactSensitiveValues, true),
70
+ telemetrySampling,
71
+ compiledAt: new Date().toISOString()
72
+ };
73
+ }
74
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ObservationEnvelope, PromptGuardResult, RuntimeContext } from "./types.js";
2
+ export declare function runPromptInjectionGuard(observation: ObservationEnvelope, context?: Pick<RuntimeContext, "knowledgeBase">): PromptGuardResult;
3
+ //# sourceMappingURL=promptInjection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptInjection.d.ts","sourceRoot":"","sources":["../src/promptInjection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4BzF,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,mBAAmB,EAChC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,GAC9C,iBAAiB,CAqDnB"}
@@ -0,0 +1,58 @@
1
+ import { clamp, uniq } from "./utils.js";
2
+ const DIRECT_OVERRIDE = /\b(ignore (?:(all|any|the)\s+)?(previous|prior)|disregard (?:(all|any|the)\s+)?(previous|prior)|system prompt|developer message|you are now|act as|override instructions)\b/i;
3
+ const PRIVILEGE_CLAIM = /\b(admin(istrator)?|root access|privileged role|security bypass|policy exception)\b/i;
4
+ const EXFILTRATION_CUE = /\b(exfiltrate|send (the|all) data|forward .*token|reveal secrets?|credential)\b/i;
5
+ const SOCIAL_ENGINEERING = /\b(urgent|immediately|secret|confidential|do not tell|silently|quietly)\b/i;
6
+ const TYPOGLYCEMIA = /\b(ignroe|prevouis|sysetm|developre|instrucitons|credentails)\b/i;
7
+ function matchKbFamily(patterns, familyHints) {
8
+ return patterns
9
+ .filter((pattern) => {
10
+ const family = String(pattern.family_key ?? "").toLowerCase();
11
+ const name = String(pattern.pattern_name ?? "").toLowerCase();
12
+ return familyHints.some((hint) => family.includes(hint) || name.includes(hint));
13
+ })
14
+ .slice(0, 8)
15
+ .map((pattern) => String(pattern.pattern_id ?? pattern.id ?? "unknown-pattern"));
16
+ }
17
+ export function runPromptInjectionGuard(observation, context) {
18
+ const suspicionFlags = [];
19
+ const familyHints = [];
20
+ let score = observation.suspicionFlags.length ? 0.15 : 0;
21
+ if (DIRECT_OVERRIDE.test(observation.normalizedText)) {
22
+ suspicionFlags.push("prompt_override_language");
23
+ familyHints.push("override");
24
+ score += 0.35;
25
+ }
26
+ if (PRIVILEGE_CLAIM.test(observation.normalizedText)) {
27
+ suspicionFlags.push("privilege_claim_language");
28
+ familyHints.push("role");
29
+ score += 0.2;
30
+ }
31
+ if (EXFILTRATION_CUE.test(observation.normalizedText)) {
32
+ suspicionFlags.push("exfiltration_cue");
33
+ familyHints.push("unsafe");
34
+ score += 0.25;
35
+ }
36
+ if (SOCIAL_ENGINEERING.test(observation.normalizedText)) {
37
+ suspicionFlags.push("social_engineering_pressure");
38
+ familyHints.push("social");
39
+ score += 0.15;
40
+ }
41
+ if (TYPOGLYCEMIA.test(observation.normalizedText)) {
42
+ suspicionFlags.push("obfuscated_typoglycemia");
43
+ familyHints.push("obfus");
44
+ score += 0.2;
45
+ }
46
+ if (observation.fragments.some((fragment) => fragment.visibilityClass !== "visible")) {
47
+ suspicionFlags.push("non_visible_instruction_channel");
48
+ familyHints.push("hidden");
49
+ score += 0.2;
50
+ }
51
+ const matchedPatternIds = matchKbFamily(context?.knowledgeBase?.promptInjectionPatterns ?? [], uniq(familyHints));
52
+ return {
53
+ suspicionFlags: uniq(suspicionFlags),
54
+ matchedPatternIds,
55
+ riskScore: clamp(score)
56
+ };
57
+ }
58
+ //# sourceMappingURL=promptInjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptInjection.js","sourceRoot":"","sources":["../src/promptInjection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ReplayBundle, ReplayEvent, RuntimeContext } from "./types.js";
2
+ export declare function buildReplayBundle(events: ReplayEvent[], context: Pick<RuntimeContext, "policy">): ReplayBundle;
3
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAOzF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,GACtC,YAAY,CAoCd"}
package/dist/replay.js ADDED
@@ -0,0 +1,39 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { sha256Hex, stableStringify } from "./utils.js";
3
+ function isVerdictPayload(payload) {
4
+ return Boolean(payload && typeof payload === "object" && "decision" in payload);
5
+ }
6
+ export function buildReplayBundle(events, context) {
7
+ let blockingDecisions = 0;
8
+ let reviewDecisions = 0;
9
+ for (const event of events) {
10
+ if (isVerdictPayload(event.payload)) {
11
+ if (event.payload.decision === "BLOCK") {
12
+ blockingDecisions += 1;
13
+ }
14
+ if (event.payload.decision === "USER_CONFIRM" ||
15
+ event.payload.decision === "REPLAN_READ_ONLY" ||
16
+ event.payload.decision === "QUARANTINE_ARTIFACT") {
17
+ reviewDecisions += 1;
18
+ }
19
+ }
20
+ }
21
+ return {
22
+ bundleId: randomUUID(),
23
+ createdAt: new Date().toISOString(),
24
+ policyVersion: context.policy.version,
25
+ profile: context.policy.profile,
26
+ policyLayers: context.policy.layerProvenance,
27
+ eventDigests: events.map((event) => sha256Hex(stableStringify(event))),
28
+ events: events.map((event) => ({
29
+ ...event,
30
+ timestamp: event.timestamp ?? new Date().toISOString()
31
+ })),
32
+ metrics: {
33
+ totalEvents: events.length,
34
+ blockingDecisions,
35
+ reviewDecisions
36
+ }
37
+ };
38
+ }
39
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExD,SAAS,gBAAgB,CAAC,OAAgB;IACxC,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAqB,EACrB,OAAuC;IAEvC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACvC,iBAAiB,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,IACE,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,cAAc;gBACzC,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,kBAAkB;gBAC7C,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,qBAAqB,EAChD,CAAC;gBACD,eAAe,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,UAAU,EAAE;QACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;QACrC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;QAC/B,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe;QAC5C,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,KAAK;YACR,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvD,CAAC,CAAC;QACH,OAAO,EAAE;YACP,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,iBAAiB;YACjB,eAAe;SAChB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ObservationEnvelope, RawObservationInput, RuntimeContext } from "./types.js";
2
+ export declare function sanitizeObservation(input: RawObservationInput, context?: Partial<RuntimeContext>): ObservationEnvelope;
3
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EAEnB,mBAAmB,EACnB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GACpC,mBAAmB,CAoDrB"}
@@ -0,0 +1,50 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { runPromptInjectionGuard } from "./promptInjection.js";
3
+ import { normalizeTrustSignals } from "./trust.js";
4
+ import { normalizeText, sha256Hex, uniq } from "./utils.js";
5
+ export function sanitizeObservation(input, context = {}) {
6
+ const trustSignals = normalizeTrustSignals(input.trustSignals);
7
+ const fragments = input.fragments?.map((fragment) => ({
8
+ fragmentId: fragment.fragmentId ?? randomUUID(),
9
+ text: normalizeText(fragment.text),
10
+ visibilityClass: fragment.visibilityClass ?? trustSignals.visibilityClass,
11
+ medium: fragment.medium ?? "text",
12
+ sourceOrigin: fragment.sourceOrigin ?? trustSignals.sourceOrigin,
13
+ frameOrigin: fragment.frameOrigin ?? trustSignals.frameOrigin,
14
+ selector: fragment.selector,
15
+ tainted: fragment.tainted ?? trustSignals.taintClass !== "trusted"
16
+ })) ?? [];
17
+ const text = normalizeText(input.text ?? fragments.map((fragment) => fragment.text).join(" "));
18
+ const baseFlags = [
19
+ ...fragments
20
+ .filter((fragment) => fragment.visibilityClass === "hidden")
21
+ .map(() => "hidden_fragment_present"),
22
+ ...fragments
23
+ .filter((fragment) => fragment.visibilityClass === "metadata")
24
+ .map(() => "metadata_fragment_present")
25
+ ];
26
+ const envelope = {
27
+ observationId: input.observationId ?? randomUUID(),
28
+ taskId: input.taskId,
29
+ sourceType: input.sourceType ?? "page",
30
+ text,
31
+ normalizedText: text.toLowerCase(),
32
+ fragments,
33
+ trustSignals,
34
+ suspicionFlags: uniq(baseFlags),
35
+ matchedPatternIds: [],
36
+ riskScore: 0,
37
+ rawHash: input.rawHash ?? sha256Hex(text),
38
+ createdAt: (context.now?.() ?? new Date()).toISOString()
39
+ };
40
+ const promptGuard = runPromptInjectionGuard(envelope, {
41
+ knowledgeBase: context.knowledgeBase
42
+ });
43
+ return {
44
+ ...envelope,
45
+ suspicionFlags: uniq([...envelope.suspicionFlags, ...promptGuard.suspicionFlags]),
46
+ matchedPatternIds: promptGuard.matchedPatternIds,
47
+ riskScore: promptGuard.riskScore
48
+ };
49
+ }
50
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAOnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,UAAmC,EAAE;IAErC,MAAM,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,UAAU,EAAE;QAC/C,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,YAAY,CAAC,eAAe;QACzE,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,MAAM;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC,YAAY;QAChE,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,YAAY,CAAC,WAAW;QAC7D,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,YAAY,CAAC,UAAU,KAAK,SAAS;KACnE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,IAAI,GAAG,aAAa,CACxB,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACnE,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,GAAG,SAAS;aACT,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC;aAC3D,GAAG,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC;QACvC,GAAG,SAAS;aACT,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,KAAK,UAAU,CAAC;aAC7D,GAAG,CAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC;KAC1C,CAAC;IAEF,MAAM,QAAQ,GAAwB;QACpC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,UAAU,EAAE;QAClD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,MAAM;QACtC,IAAI;QACJ,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;QAClC,SAAS;QACT,YAAY;QACZ,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;QAC/B,iBAAiB,EAAE,EAAE;QACrB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC;QACzC,SAAS,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;KACzD,CAAC;IAEF,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,EAAE;QACpD,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,QAAQ;QACX,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QACjF,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;QAChD,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RuntimeContext, SafeVerdict, ToolRequest } from "./types.js";
2
+ export declare function evaluateToolRequest(request: ToolRequest, context: RuntimeContext): SafeVerdict;
3
+ //# sourceMappingURL=toolProtocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolProtocol.d.ts","sourceRoot":"","sources":["../src/toolProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2B3E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,cAAc,GACtB,WAAW,CA+Eb"}
@@ -0,0 +1,80 @@
1
+ import { normalizeTrustSignals } from "./trust.js";
2
+ import { clamp, isPrivateHost, uniq } from "./utils.js";
3
+ const MALICIOUS_TOOL_TEXT = /\b(ignore previous|system prompt|override|send token|reveal secrets?|exfiltrate)\b/i;
4
+ function matchToolPatterns(reasons, patterns) {
5
+ const hints = reasons.join(" ").toLowerCase();
6
+ return patterns
7
+ .filter((pattern) => {
8
+ const family = String(pattern.family_key ?? "").toLowerCase();
9
+ const name = String(pattern.pattern_name ?? "").toLowerCase();
10
+ return ((hints.includes("manifest") && family.includes("description")) ||
11
+ (hints.includes("redirect") && name.includes("redirect")) ||
12
+ (hints.includes("token") && name.includes("token")) ||
13
+ (hints.includes("ssrf") && family.includes("ssrf")));
14
+ })
15
+ .slice(0, 8)
16
+ .map((pattern) => String(pattern.pattern_id ?? "unknown-tool-pattern"));
17
+ }
18
+ export function evaluateToolRequest(request, context) {
19
+ normalizeTrustSignals({
20
+ artifactKind: "tool_manifest",
21
+ extractionMethod: "api",
22
+ ...(request.trustSignals ?? {})
23
+ });
24
+ const reasonCodes = [];
25
+ let decision = "ALLOW";
26
+ let riskScore = 0.25;
27
+ const descriptions = [request.description, ...(request.schemaDescriptions ?? [])];
28
+ if (descriptions.some((value) => MALICIOUS_TOOL_TEXT.test(value))) {
29
+ decision = "BLOCK";
30
+ reasonCodes.push("MALICIOUS_TOOL_MANIFEST");
31
+ riskScore = 0.95;
32
+ }
33
+ if (context.policy.forbidTokenPassthrough && request.tokenPassthroughRequested) {
34
+ decision = "BLOCK";
35
+ reasonCodes.push("TOKEN_PASSTHROUGH_FORBIDDEN");
36
+ riskScore = 0.95;
37
+ }
38
+ if (context.policy.enforceExactRedirectUri &&
39
+ request.authType === "oauth" &&
40
+ request.requestedRedirectUri &&
41
+ request.allowedRedirectUris?.length &&
42
+ !request.allowedRedirectUris.includes(request.requestedRedirectUri)) {
43
+ decision = "BLOCK";
44
+ reasonCodes.push("REDIRECT_URI_MISMATCH");
45
+ riskScore = 0.9;
46
+ }
47
+ if (request.egressHosts?.some((host) => isPrivateHost(host)) &&
48
+ !request.allowLocalhostEgress) {
49
+ decision = "BLOCK";
50
+ reasonCodes.push("SSRF_EGRESS_DENIED");
51
+ riskScore = 0.95;
52
+ }
53
+ if (request.registrySigned === false) {
54
+ decision = decision === "ALLOW" ? "USER_CONFIRM" : decision;
55
+ reasonCodes.push("UNSIGNED_TOOL_REGISTRY_ENTRY");
56
+ riskScore = Math.max(riskScore, 0.55);
57
+ }
58
+ if (request.registrySigner &&
59
+ context.policy.allowedRegistrySigners.size &&
60
+ !context.policy.allowedRegistrySigners.has(request.registrySigner.toLowerCase())) {
61
+ decision = "USER_CONFIRM";
62
+ reasonCodes.push("REGISTRY_SIGNER_NOT_ALLOWLISTED");
63
+ riskScore = Math.max(riskScore, 0.65);
64
+ }
65
+ const matchedPatternIds = matchToolPatterns(reasonCodes, context.knowledgeBase?.toolProtocolPatterns ?? []);
66
+ return {
67
+ decision,
68
+ reasonCodes: uniq(reasonCodes),
69
+ riskScore: clamp(riskScore),
70
+ safeConstraints: {
71
+ exact_redirect_uri: context.policy.enforceExactRedirectUri,
72
+ token_passthrough_allowed: !context.policy.forbidTokenPassthrough,
73
+ allowed_registry_signers: [...context.policy.allowedRegistrySigners]
74
+ },
75
+ matchedPatternIds,
76
+ incidentPlaybookId: decision === "BLOCK" ? "IR-04" : undefined,
77
+ telemetryTags: uniq([request.toolId, decision.toLowerCase()])
78
+ };
79
+ }
80
+ //# sourceMappingURL=toolProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolProtocol.js","sourceRoot":"","sources":["../src/toolProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,mBAAmB,GACvB,qFAAqF,CAAC;AAExF,SAAS,iBAAiB,CACxB,OAAiB,EACjB,QAAwC;IAExC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,OAAO,CACL,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9D,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACzD,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CACpD,CAAC;IACJ,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,sBAAsB,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAoB,EACpB,OAAuB;IAEvB,qBAAqB,CAAC;QACpB,YAAY,EAAE,eAAe;QAC7B,gBAAgB,EAAE,KAAK;QACvB,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;KAChC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,QAAQ,GAA4B,OAAO,CAAC;IAChD,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC;IAClF,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClE,QAAQ,GAAG,OAAO,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC5C,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,sBAAsB,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;QAC/E,QAAQ,GAAG,OAAO,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAChD,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IACE,OAAO,CAAC,MAAM,CAAC,uBAAuB;QACtC,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC5B,OAAO,CAAC,oBAAoB;QAC5B,OAAO,CAAC,mBAAmB,EAAE,MAAM;QACnC,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,EACnE,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1C,SAAS,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,IACE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,OAAO,CAAC,oBAAoB,EAC7B,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACvC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5D,WAAW,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACjD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,IACE,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI;QAC1C,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,EAChF,CAAC;QACD,QAAQ,GAAG,cAAc,CAAC;QAC1B,WAAW,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACpD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,iBAAiB,GAAG,iBAAiB,CACzC,WAAW,EACX,OAAO,CAAC,aAAa,EAAE,oBAAoB,IAAI,EAAE,CAClD,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;QAC3B,eAAe,EAAE;YACf,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,uBAAuB;YAC1D,yBAAyB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB;YACjE,wBAAwB,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC;SACrE;QACD,iBAAiB;QACjB,kBAAkB,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC9D,aAAa,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;KAC9D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { RuntimeContext, ToolCallbackVerificationRequest, ToolCallbackVerificationResult, ToolOnboardingSession, ToolPreparationResult, ToolRequest } from "./types.js";
2
+ export declare function computeToolManifestHash(request: Pick<ToolRequest, "toolId" | "description" | "authType" | "requestedScopes" | "callbackUri" | "requestedRedirectUri">): string;
3
+ export declare function computeToolSchemaHash(schemaDescriptions?: string[]): string;
4
+ export declare function prepareToolOnboarding(request: ToolRequest, context: RuntimeContext): ToolPreparationResult;
5
+ export declare function verifyToolCallback(request: ToolCallbackVerificationRequest, session: ToolOnboardingSession | undefined, context: RuntimeContext): ToolCallbackVerificationResult;
6
+ //# sourceMappingURL=toolProtocolV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolProtocolV2.d.ts","sourceRoot":"","sources":["../src/toolProtocolV2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,cAAc,EAEd,+BAA+B,EAC/B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EAGZ,MAAM,YAAY,CAAC;AAgCpB,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,CACnD,WAAW,EACX,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,GAAG,sBAAsB,CACnG,GAAG,MAAM,CAUT;AAED,wBAAgB,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAE3E;AA+HD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,cAAc,GACtB,qBAAqB,CA6KvB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,+BAA+B,EACxC,OAAO,EAAE,qBAAqB,GAAG,SAAS,EAC1C,OAAO,EAAE,cAAc,GACtB,8BAA8B,CAoEhC"}