@datafog/fogclaw 0.1.6 → 0.3.0

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 (100) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +39 -0
  3. package/dist/backlog-tools.d.ts +57 -0
  4. package/dist/backlog-tools.d.ts.map +1 -0
  5. package/dist/backlog-tools.js +173 -0
  6. package/dist/backlog-tools.js.map +1 -0
  7. package/dist/backlog.d.ts +82 -0
  8. package/dist/backlog.d.ts.map +1 -0
  9. package/dist/backlog.js +169 -0
  10. package/dist/backlog.js.map +1 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +6 -0
  13. package/dist/config.js.map +1 -1
  14. package/dist/extract.d.ts +28 -0
  15. package/dist/extract.d.ts.map +1 -0
  16. package/dist/extract.js +91 -0
  17. package/dist/extract.js.map +1 -0
  18. package/dist/index.d.ts +2 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +96 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/message-sending-handler.d.ts +41 -0
  23. package/dist/message-sending-handler.d.ts.map +1 -0
  24. package/dist/message-sending-handler.js +54 -0
  25. package/dist/message-sending-handler.js.map +1 -0
  26. package/dist/tool-result-handler.d.ts +37 -0
  27. package/dist/tool-result-handler.d.ts.map +1 -0
  28. package/dist/tool-result-handler.js +95 -0
  29. package/dist/tool-result-handler.js.map +1 -0
  30. package/dist/types.d.ts +16 -0
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/types.js +3 -0
  33. package/dist/types.js.map +1 -1
  34. package/openclaw.plugin.json +11 -1
  35. package/package.json +7 -1
  36. package/.github/workflows/harness-docs.yml +0 -30
  37. package/AGENTS.md +0 -28
  38. package/docs/DATA.md +0 -28
  39. package/docs/DESIGN.md +0 -17
  40. package/docs/DOMAIN_DOCS.md +0 -30
  41. package/docs/FRONTEND.md +0 -24
  42. package/docs/OBSERVABILITY.md +0 -25
  43. package/docs/PLANS.md +0 -171
  44. package/docs/PRODUCT_SENSE.md +0 -20
  45. package/docs/RELIABILITY.md +0 -60
  46. package/docs/SECURITY.md +0 -50
  47. package/docs/design-docs/core-beliefs.md +0 -17
  48. package/docs/design-docs/index.md +0 -8
  49. package/docs/generated/README.md +0 -36
  50. package/docs/generated/memory.md +0 -1
  51. package/docs/plans/2026-02-16-fogclaw-design.md +0 -172
  52. package/docs/plans/2026-02-16-fogclaw-implementation.md +0 -1606
  53. package/docs/plans/README.md +0 -15
  54. package/docs/plans/active/2026-02-16-feat-openclaw-official-submission-plan.md +0 -386
  55. package/docs/plans/active/2026-02-17-feat-release-fogclaw-via-datafog-package-plan.md +0 -328
  56. package/docs/plans/active/2026-02-17-feat-submit-fogclaw-to-openclaw-plan.md +0 -244
  57. package/docs/plans/tech-debt-tracker.md +0 -42
  58. package/docs/plugins/fogclaw.md +0 -101
  59. package/docs/runbooks/address-review-findings.md +0 -30
  60. package/docs/runbooks/ci-failures.md +0 -46
  61. package/docs/runbooks/code-review.md +0 -34
  62. package/docs/runbooks/merge-change.md +0 -28
  63. package/docs/runbooks/pull-request.md +0 -45
  64. package/docs/runbooks/record-evidence.md +0 -43
  65. package/docs/runbooks/reproduce-bug.md +0 -42
  66. package/docs/runbooks/respond-to-feedback.md +0 -42
  67. package/docs/runbooks/review-findings.md +0 -31
  68. package/docs/runbooks/submit-openclaw-plugin.md +0 -68
  69. package/docs/runbooks/update-agents-md.md +0 -59
  70. package/docs/runbooks/update-domain-docs.md +0 -42
  71. package/docs/runbooks/validate-current-state.md +0 -41
  72. package/docs/runbooks/verify-release.md +0 -69
  73. package/docs/specs/2026-02-16-feat-openclaw-official-submission-spec.md +0 -115
  74. package/docs/specs/2026-02-17-feat-submit-fogclaw-to-openclaw.md +0 -125
  75. package/docs/specs/README.md +0 -5
  76. package/docs/specs/index.md +0 -8
  77. package/docs/spikes/README.md +0 -8
  78. package/fogclaw.config.example.json +0 -33
  79. package/scripts/ci/he-docs-config.json +0 -123
  80. package/scripts/ci/he-docs-drift.sh +0 -112
  81. package/scripts/ci/he-docs-lint.sh +0 -234
  82. package/scripts/ci/he-plans-lint.sh +0 -354
  83. package/scripts/ci/he-runbooks-lint.sh +0 -445
  84. package/scripts/ci/he-specs-lint.sh +0 -258
  85. package/scripts/ci/he-spikes-lint.sh +0 -249
  86. package/scripts/runbooks/select-runbooks.sh +0 -154
  87. package/src/config.ts +0 -183
  88. package/src/engines/gliner.ts +0 -240
  89. package/src/engines/regex.ts +0 -71
  90. package/src/index.ts +0 -372
  91. package/src/redactor.ts +0 -51
  92. package/src/scanner.ts +0 -196
  93. package/src/types.ts +0 -71
  94. package/tests/config.test.ts +0 -78
  95. package/tests/gliner.test.ts +0 -289
  96. package/tests/plugin-smoke.test.ts +0 -143
  97. package/tests/redactor.test.ts +0 -320
  98. package/tests/regex.test.ts +0 -345
  99. package/tests/scanner.test.ts +0 -348
  100. package/tsconfig.json +0 -20
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Utilities for extracting text from AgentMessage tool result payloads
3
+ * and replacing text content after redaction.
4
+ *
5
+ * AgentMessage shapes handled:
6
+ * - Plain string
7
+ * - Object with `content: string`
8
+ * - Object with `content: [{ type: "text", text: "..." }, ...]`
9
+ *
10
+ * When multiple text blocks exist in a content array, they are joined
11
+ * with a null byte separator (\0) so entity offsets stay valid across
12
+ * the concatenated string. replaceText splits on the same separator
13
+ * to map redacted text back to individual blocks.
14
+ */
15
+ /**
16
+ * Extract all text content from an AgentMessage tool result payload.
17
+ * Returns an empty string if no text content is found.
18
+ */
19
+ export declare function extractText(message: unknown): string;
20
+ /**
21
+ * Replace text content in an AgentMessage tool result payload with
22
+ * the redacted version. Returns a shallow copy; does not mutate.
23
+ *
24
+ * If the message shape is not recognized or has no text, returns
25
+ * the original message unchanged.
26
+ */
27
+ export declare function replaceText(message: unknown, redactedText: string): unknown;
28
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA4BpD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAqC3E"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Utilities for extracting text from AgentMessage tool result payloads
3
+ * and replacing text content after redaction.
4
+ *
5
+ * AgentMessage shapes handled:
6
+ * - Plain string
7
+ * - Object with `content: string`
8
+ * - Object with `content: [{ type: "text", text: "..." }, ...]`
9
+ *
10
+ * When multiple text blocks exist in a content array, they are joined
11
+ * with a null byte separator (\0) so entity offsets stay valid across
12
+ * the concatenated string. replaceText splits on the same separator
13
+ * to map redacted text back to individual blocks.
14
+ */
15
+ // Separator between text segments from content block arrays.
16
+ // Null byte won't appear in regex PII patterns or normal text content.
17
+ const SEGMENT_SEP = "\0";
18
+ /**
19
+ * Extract all text content from an AgentMessage tool result payload.
20
+ * Returns an empty string if no text content is found.
21
+ */
22
+ export function extractText(message) {
23
+ if (message == null)
24
+ return "";
25
+ if (typeof message === "string")
26
+ return message;
27
+ if (typeof message !== "object")
28
+ return "";
29
+ const msg = message;
30
+ const content = msg.content;
31
+ if (content == null)
32
+ return "";
33
+ if (typeof content === "string")
34
+ return content;
35
+ if (Array.isArray(content)) {
36
+ const textParts = [];
37
+ for (const block of content) {
38
+ if (block != null &&
39
+ typeof block === "object" &&
40
+ block.type === "text" &&
41
+ typeof block.text === "string") {
42
+ textParts.push(block.text);
43
+ }
44
+ }
45
+ if (textParts.length === 0)
46
+ return "";
47
+ return textParts.join(SEGMENT_SEP);
48
+ }
49
+ return "";
50
+ }
51
+ /**
52
+ * Replace text content in an AgentMessage tool result payload with
53
+ * the redacted version. Returns a shallow copy; does not mutate.
54
+ *
55
+ * If the message shape is not recognized or has no text, returns
56
+ * the original message unchanged.
57
+ */
58
+ export function replaceText(message, redactedText) {
59
+ if (message == null)
60
+ return message;
61
+ if (typeof message === "string")
62
+ return redactedText;
63
+ if (typeof message !== "object")
64
+ return message;
65
+ const msg = message;
66
+ const content = msg.content;
67
+ if (content == null)
68
+ return message;
69
+ if (typeof content === "string") {
70
+ return { ...msg, content: redactedText };
71
+ }
72
+ if (Array.isArray(content)) {
73
+ const segments = redactedText.split(SEGMENT_SEP);
74
+ let segmentIndex = 0;
75
+ const newContent = content.map((block) => {
76
+ if (block != null &&
77
+ typeof block === "object" &&
78
+ block.type === "text" &&
79
+ typeof block.text === "string" &&
80
+ segmentIndex < segments.length) {
81
+ const replaced = { ...block, text: segments[segmentIndex] };
82
+ segmentIndex++;
83
+ return replaced;
84
+ }
85
+ return block;
86
+ });
87
+ return { ...msg, content: newContent };
88
+ }
89
+ return message;
90
+ }
91
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,6DAA6D;AAC7D,uEAAuE;AACvE,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAE3C,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAEhD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IACE,KAAK,IAAI,IAAI;gBACb,OAAO,KAAK,KAAK,QAAQ;gBACxB,KAAiC,CAAC,IAAI,KAAK,MAAM;gBAClD,OAAQ,KAAiC,CAAC,IAAI,KAAK,QAAQ,EAC3D,CAAC;gBACD,SAAS,CAAC,IAAI,CAAE,KAAiC,CAAC,IAAc,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,YAAoB;IAChE,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC;IACrD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAEhD,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IAEpC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACvC,IACE,KAAK,IAAI,IAAI;gBACb,OAAO,KAAK,KAAK,QAAQ;gBACxB,KAAiC,CAAC,IAAI,KAAK,MAAM;gBAClD,OAAQ,KAAiC,CAAC,IAAI,KAAK,QAAQ;gBAC3D,YAAY,GAAG,QAAQ,CAAC,MAAM,EAC9B,CAAC;gBACD,MAAM,QAAQ,GAAG,EAAE,GAAI,KAAiC,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzF,YAAY,EAAE,CAAC;gBACf,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  export { Scanner } from "./scanner.js";
2
2
  export { redact } from "./redactor.js";
3
3
  export { loadConfig, DEFAULT_CONFIG } from "./config.js";
4
- export type { Entity, FogClawConfig, ScanResult, RedactResult, RedactStrategy, GuardrailAction, } from "./types.js";
4
+ export { RedactionMapStore, BacklogStore } from "./backlog.js";
5
+ export type { Entity, FogClawConfig, ScanResult, RedactResult, RedactStrategy, GuardrailAction, AccessRequest, RequestStatus, } from "./types.js";
5
6
  /**
6
7
  * OpenClaw plugin definition.
7
8
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,MAAM,EACN,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAyEpB;;;;;;;;GAQG;AACH,QAAA,MAAM,OAAO;;;kBAIG,GAAG;CAqQlB,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EACV,MAAM,EACN,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AAqEpB;;;;;;;;GAQG;AACH,QAAA,MAAM,OAAO;;;kBAIG,GAAG;CA8WlB,CAAC;AAEF,eAAe,OAAO,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,16 @@
1
1
  import { Scanner } from "./scanner.js";
2
2
  import { redact } from "./redactor.js";
3
3
  import { loadConfig } from "./config.js";
4
+ import { RegexEngine } from "./engines/regex.js";
5
+ import { createToolResultHandler } from "./tool-result-handler.js";
6
+ import { createMessageSendingHandler } from "./message-sending-handler.js";
7
+ import { RedactionMapStore, BacklogStore } from "./backlog.js";
8
+ import { createRequestAccessHandler, createRequestsListHandler, createResolveHandler, } from "./backlog-tools.js";
9
+ import { resolveAction } from "./types.js";
4
10
  export { Scanner } from "./scanner.js";
5
11
  export { redact } from "./redactor.js";
6
12
  export { loadConfig, DEFAULT_CONFIG } from "./config.js";
7
- function resolveAction(entity, config) {
8
- return config.entityActions[entity.label] ?? config.guardrail_mode;
9
- }
13
+ export { RedactionMapStore, BacklogStore } from "./backlog.js";
10
14
  function buildGuardrailPlan(entities, config) {
11
15
  const blocked = [];
12
16
  const warned = [];
@@ -77,6 +81,9 @@ const fogclaw = {
77
81
  scanner.initialize().catch((err) => {
78
82
  api.logger?.warn(`[fogclaw] GLiNER background init failed: ${String(err)}`);
79
83
  });
84
+ // --- Access Request Backlog ---
85
+ const redactionMapStore = new RedactionMapStore();
86
+ const backlogStore = new BacklogStore(redactionMapStore, config.maxPendingRequests);
80
87
  // --- HOOK: Guardrail on incoming messages ---
81
88
  api.on("before_agent_start", async (event) => {
82
89
  const message = event.prompt ?? "";
@@ -101,12 +108,20 @@ const fogclaw = {
101
108
  }
102
109
  if (plan.redacted.length > 0) {
103
110
  const redactedResult = redact(message, plan.redacted, config.redactStrategy);
111
+ redactionMapStore.addMapping(redactedResult.mapping);
104
112
  contextParts.push(`[FOGCLAW REDACTED] The following is the user's message with PII redacted:\n${redactedResult.redacted_text}`);
105
113
  }
106
114
  if (contextParts.length > 0) {
107
115
  return { prependContext: contextParts.join("\n\n") };
108
116
  }
109
117
  });
118
+ // --- HOOK: Scan tool results for PII before persistence ---
119
+ const toolResultRegex = new RegexEngine();
120
+ const toolResultHandler = createToolResultHandler(config, toolResultRegex, api.logger, redactionMapStore);
121
+ api.on("tool_result_persist", toolResultHandler);
122
+ // --- HOOK: Scan outbound messages for PII before delivery ---
123
+ const messageSendingHandler = createMessageSendingHandler(config, scanner, api.logger, redactionMapStore);
124
+ api.on("message_sending", messageSendingHandler);
110
125
  // --- TOOL: On-demand scan ---
111
126
  api.registerTool({
112
127
  name: "fogclaw_scan",
@@ -247,6 +262,84 @@ const fogclaw = {
247
262
  };
248
263
  },
249
264
  });
265
+ // --- TOOL: Request access to redacted data ---
266
+ api.registerTool({
267
+ name: "fogclaw_request_access",
268
+ id: "fogclaw_request_access",
269
+ description: "Request access to redacted PII data. Use when you encounter a redacted placeholder (like [EMAIL_1]) and need the original text to complete a task. A user must review and approve the request.",
270
+ schema: {
271
+ type: "object",
272
+ properties: {
273
+ placeholder: {
274
+ type: "string",
275
+ description: 'The redacted placeholder token (e.g., "[EMAIL_1]", "[SSN_1]")',
276
+ },
277
+ entity_type: {
278
+ type: "string",
279
+ description: 'The type of entity (e.g., "EMAIL", "SSN", "PERSON")',
280
+ },
281
+ reason: {
282
+ type: "string",
283
+ description: "Why you need access to this data",
284
+ },
285
+ context: {
286
+ type: "string",
287
+ description: "Surrounding text or context where the placeholder appears (optional)",
288
+ },
289
+ },
290
+ required: ["placeholder", "entity_type", "reason"],
291
+ },
292
+ handler: createRequestAccessHandler(backlogStore, config, api.logger),
293
+ });
294
+ // --- TOOL: List access requests ---
295
+ api.registerTool({
296
+ name: "fogclaw_requests",
297
+ id: "fogclaw_requests",
298
+ description: "List PII access requests. Use to review pending requests or check for approved/denied responses. Filter by status: pending, approved, denied, follow_up.",
299
+ schema: {
300
+ type: "object",
301
+ properties: {
302
+ status: {
303
+ type: "string",
304
+ description: 'Filter by request status. One of: "pending", "approved", "denied", "follow_up". Omit to list all.',
305
+ enum: ["pending", "approved", "denied", "follow_up"],
306
+ },
307
+ },
308
+ required: [],
309
+ },
310
+ handler: createRequestsListHandler(backlogStore, config, api.logger),
311
+ });
312
+ // --- TOOL: Resolve access request ---
313
+ api.registerTool({
314
+ name: "fogclaw_resolve",
315
+ id: "fogclaw_resolve",
316
+ description: 'Resolve a PII access request. Approve to reveal the original text, deny to reject, or follow_up to ask the agent for more context. Use request_id for single or request_ids for batch.',
317
+ schema: {
318
+ type: "object",
319
+ properties: {
320
+ request_id: {
321
+ type: "string",
322
+ description: 'The ID of the request to resolve (e.g., "REQ-1")',
323
+ },
324
+ request_ids: {
325
+ type: "array",
326
+ items: { type: "string" },
327
+ description: "Multiple request IDs to resolve with the same action (batch mode)",
328
+ },
329
+ action: {
330
+ type: "string",
331
+ description: 'Action to take: "approve" (reveal original text), "deny" (reject), or "follow_up" (ask agent for more context)',
332
+ enum: ["approve", "deny", "follow_up"],
333
+ },
334
+ message: {
335
+ type: "string",
336
+ description: "Optional message: reason for denial, or follow-up question for the agent",
337
+ },
338
+ },
339
+ required: ["action"],
340
+ },
341
+ handler: createResolveHandler(backlogStore, config, api.logger),
342
+ });
250
343
  api.logger?.info(`[fogclaw] Plugin registered — guardrail: ${config.guardrail_mode}, model: ${config.model}, custom entities: ${config.custom_entities.length}, audit: ${config.auditEnabled}`);
251
344
  },
252
345
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Async message_sending hook handler for FogClaw.
3
+ *
4
+ * Scans outbound message text for PII using the full Scanner
5
+ * (regex + GLiNER), redacts detected entities, and returns
6
+ * modified content. Never cancels message delivery.
7
+ *
8
+ * Note: message_sending is defined in OpenClaw but not yet invoked
9
+ * upstream. This handler activates automatically when wired.
10
+ */
11
+ import type { Scanner } from "./scanner.js";
12
+ import type { FogClawConfig } from "./types.js";
13
+ import type { RedactionMapStore } from "./backlog.js";
14
+ interface Logger {
15
+ info(msg: string): void;
16
+ warn(msg: string): void;
17
+ }
18
+ export interface MessageSendingEvent {
19
+ to: string;
20
+ content: string;
21
+ metadata?: Record<string, unknown>;
22
+ }
23
+ export interface MessageSendingContext {
24
+ channelId: string;
25
+ accountId?: string;
26
+ conversationId?: string;
27
+ }
28
+ export interface MessageSendingResult {
29
+ content?: string;
30
+ cancel?: boolean;
31
+ }
32
+ /**
33
+ * Create an async message_sending hook handler.
34
+ *
35
+ * Uses the full Scanner (regex + GLiNER) since this hook supports
36
+ * async handlers. All guardrail modes produce span-level redaction;
37
+ * cancel is never returned.
38
+ */
39
+ export declare function createMessageSendingHandler(config: FogClawConfig, scanner: Scanner, logger?: Logger, redactionMapStore?: RedactionMapStore): (event: MessageSendingEvent, ctx: MessageSendingContext) => Promise<MessageSendingResult | void>;
40
+ export {};
41
+ //# sourceMappingURL=message-sending-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-sending-handler.d.ts","sourceRoot":"","sources":["../src/message-sending-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAU,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,UAAU,MAAM;IACd,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,qBAAqB,KAAK,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA0ClG"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Async message_sending hook handler for FogClaw.
3
+ *
4
+ * Scans outbound message text for PII using the full Scanner
5
+ * (regex + GLiNER), redacts detected entities, and returns
6
+ * modified content. Never cancels message delivery.
7
+ *
8
+ * Note: message_sending is defined in OpenClaw but not yet invoked
9
+ * upstream. This handler activates automatically when wired.
10
+ */
11
+ import { redact } from "./redactor.js";
12
+ import { resolveAction } from "./types.js";
13
+ /**
14
+ * Create an async message_sending hook handler.
15
+ *
16
+ * Uses the full Scanner (regex + GLiNER) since this hook supports
17
+ * async handlers. All guardrail modes produce span-level redaction;
18
+ * cancel is never returned.
19
+ */
20
+ export function createMessageSendingHandler(config, scanner, logger, redactionMapStore) {
21
+ return async (event, _ctx) => {
22
+ const text = event.content;
23
+ if (!text)
24
+ return;
25
+ const result = await scanner.scan(text);
26
+ if (result.entities.length === 0)
27
+ return;
28
+ // All modes produce span-level redaction for outbound messages.
29
+ const actionableEntities = result.entities.filter((entity) => {
30
+ const action = resolveAction(entity, config);
31
+ return action === "redact" || action === "block" || action === "warn";
32
+ });
33
+ if (actionableEntities.length === 0)
34
+ return;
35
+ const redacted = redact(text, actionableEntities, config.redactStrategy);
36
+ // Capture mapping for backlog access requests
37
+ if (redactionMapStore) {
38
+ redactionMapStore.addMapping(redacted.mapping);
39
+ }
40
+ // Audit logging
41
+ if (config.auditEnabled && logger) {
42
+ const labels = [...new Set(actionableEntities.map((e) => e.label))];
43
+ logger.info(`[FOGCLAW AUDIT] outbound_scan ${JSON.stringify({
44
+ totalEntities: actionableEntities.length,
45
+ labels,
46
+ channelId: _ctx.channelId ?? null,
47
+ source: "outbound",
48
+ })}`);
49
+ }
50
+ // Never cancel — always deliver the redacted version.
51
+ return { content: redacted.redacted_text };
52
+ };
53
+ }
54
+ //# sourceMappingURL=message-sending-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-sending-handler.js","sourceRoot":"","sources":["../src/message-sending-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0B3C;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAqB,EACrB,OAAgB,EAChB,MAAe,EACf,iBAAqC;IAErC,OAAO,KAAK,EACV,KAA0B,EAC1B,IAA2B,EACW,EAAE;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEzC,gEAAgE;QAChE,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE5C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QAEzE,8CAA8C;QAC9C,IAAI,iBAAiB,EAAE,CAAC;YACtB,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,gBAAgB;QAChB,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CACT,iCAAiC,IAAI,CAAC,SAAS,CAAC;gBAC9C,aAAa,EAAE,kBAAkB,CAAC,MAAM;gBACxC,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;gBACjC,MAAM,EAAE,UAAU;aACnB,CAAC,EAAE,CACL,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Synchronous tool_result_persist hook handler for FogClaw.
3
+ *
4
+ * Scans tool result text for PII using the regex engine (synchronous),
5
+ * redacts detected entities, and returns the transformed message.
6
+ * GLiNER is not used here because tool_result_persist is synchronous-only.
7
+ */
8
+ import { RegexEngine } from "./engines/regex.js";
9
+ import type { FogClawConfig } from "./types.js";
10
+ import type { RedactionMapStore } from "./backlog.js";
11
+ interface Logger {
12
+ info(msg: string): void;
13
+ warn(msg: string): void;
14
+ }
15
+ export interface ToolResultPersistEvent {
16
+ toolName?: string;
17
+ toolCallId?: string;
18
+ message: unknown;
19
+ isSynthetic?: boolean;
20
+ }
21
+ export interface ToolResultPersistContext {
22
+ agentId?: string;
23
+ sessionKey?: string;
24
+ toolName?: string;
25
+ toolCallId?: string;
26
+ }
27
+ /**
28
+ * Create a synchronous tool_result_persist hook handler.
29
+ *
30
+ * The returned function must NOT return a Promise — OpenClaw rejects
31
+ * async tool_result_persist handlers.
32
+ */
33
+ export declare function createToolResultHandler(config: FogClawConfig, regexEngine: RegexEngine, logger?: Logger, redactionMapStore?: RedactionMapStore): (event: ToolResultPersistEvent, ctx: ToolResultPersistContext) => {
34
+ message: unknown;
35
+ } | void;
36
+ export {};
37
+ //# sourceMappingURL=tool-result-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-handler.d.ts","sourceRoot":"","sources":["../src/tool-result-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,OAAO,KAAK,EAAU,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,UAAU,MAAM;IACd,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6CD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,WAAW,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,CAAC,KAAK,EAAE,sBAAsB,EAAE,GAAG,EAAE,wBAAwB,KAAK;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAmD/F"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Synchronous tool_result_persist hook handler for FogClaw.
3
+ *
4
+ * Scans tool result text for PII using the regex engine (synchronous),
5
+ * redacts detected entities, and returns the transformed message.
6
+ * GLiNER is not used here because tool_result_persist is synchronous-only.
7
+ */
8
+ import { redact } from "./redactor.js";
9
+ import { extractText, replaceText } from "./extract.js";
10
+ import { canonicalType, resolveAction } from "./types.js";
11
+ /**
12
+ * Build an allowlist filter from config. Replicates Scanner.filterByPolicy
13
+ * and Scanner.shouldAllowlistEntity logic synchronously.
14
+ */
15
+ function buildAllowlistFilter(config) {
16
+ const globalValues = new Set(config.allowlist.values.map((v) => v.trim().toLowerCase()));
17
+ const globalPatterns = config.allowlist.patterns
18
+ .filter((p) => p.length > 0)
19
+ .map((p) => new RegExp(p, "i"));
20
+ const entityValues = new Map();
21
+ for (const [entityType, values] of Object.entries(config.allowlist.entities)) {
22
+ const canonical = canonicalType(entityType);
23
+ const set = new Set(values
24
+ .map((v) => v.trim().toLowerCase())
25
+ .filter((v) => v.length > 0));
26
+ entityValues.set(canonical, set);
27
+ }
28
+ // Short-circuit: if no allowlist entries, keep everything
29
+ if (globalValues.size === 0 && globalPatterns.length === 0 && entityValues.size === 0) {
30
+ return () => true;
31
+ }
32
+ // Return true if entity should be KEPT (not allowlisted)
33
+ return (entity) => {
34
+ const normalizedText = entity.text.trim().toLowerCase();
35
+ if (globalValues.has(normalizedText))
36
+ return false;
37
+ if (globalPatterns.some((pattern) => pattern.test(entity.text)))
38
+ return false;
39
+ const perEntity = entityValues.get(entity.label);
40
+ if (perEntity && perEntity.has(normalizedText))
41
+ return false;
42
+ return true;
43
+ };
44
+ }
45
+ /**
46
+ * Create a synchronous tool_result_persist hook handler.
47
+ *
48
+ * The returned function must NOT return a Promise — OpenClaw rejects
49
+ * async tool_result_persist handlers.
50
+ */
51
+ export function createToolResultHandler(config, regexEngine, logger, redactionMapStore) {
52
+ const shouldKeep = buildAllowlistFilter(config);
53
+ return (event, _ctx) => {
54
+ const text = extractText(event.message);
55
+ if (!text)
56
+ return;
57
+ // Scan with regex engine (synchronous)
58
+ let entities = regexEngine.scan(text);
59
+ if (entities.length === 0)
60
+ return;
61
+ // Apply allowlist filtering
62
+ entities = entities.filter(shouldKeep);
63
+ if (entities.length === 0)
64
+ return;
65
+ // All guardrail modes produce span-level redaction in tool results.
66
+ // Determine which entities are actionable (all of them — block/warn/redact
67
+ // all produce redaction at the tool result level).
68
+ const actionableEntities = entities.filter((entity) => {
69
+ const action = resolveAction(entity, config);
70
+ return action === "redact" || action === "block" || action === "warn";
71
+ });
72
+ if (actionableEntities.length === 0)
73
+ return;
74
+ // Redact
75
+ const result = redact(text, actionableEntities, config.redactStrategy);
76
+ // Capture mapping for backlog access requests
77
+ if (redactionMapStore) {
78
+ redactionMapStore.addMapping(result.mapping);
79
+ }
80
+ // Replace text in the message
81
+ const modifiedMessage = replaceText(event.message, result.redacted_text);
82
+ // Audit logging
83
+ if (config.auditEnabled && logger) {
84
+ const labels = [...new Set(actionableEntities.map((e) => e.label))];
85
+ logger.info(`[FOGCLAW AUDIT] tool_result_scan ${JSON.stringify({
86
+ totalEntities: actionableEntities.length,
87
+ labels,
88
+ toolName: event.toolName ?? null,
89
+ source: "tool_result",
90
+ })}`);
91
+ }
92
+ return { message: modifiedMessage };
93
+ };
94
+ }
95
+ //# sourceMappingURL=tool-result-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-handler.js","sourceRoot":"","sources":["../src/tool-result-handler.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -27,6 +27,7 @@ export interface FogClawConfig {
27
27
  entityConfidenceThresholds: EntityConfidenceThresholds;
28
28
  allowlist: EntityAllowlist;
29
29
  auditEnabled: boolean;
30
+ maxPendingRequests: number;
30
31
  }
31
32
  export interface ScanResult {
32
33
  entities: Entity[];
@@ -44,4 +45,19 @@ export interface GuardrailPlan {
44
45
  }
45
46
  export declare const CANONICAL_TYPE_MAP: Record<string, string>;
46
47
  export declare function canonicalType(entityType: string): string;
48
+ export declare function resolveAction(entity: Entity, config: FogClawConfig): GuardrailAction;
49
+ export type RequestStatus = "pending" | "approved" | "denied" | "follow_up";
50
+ export interface AccessRequest {
51
+ id: string;
52
+ placeholder: string;
53
+ entityType: string;
54
+ originalText: string | null;
55
+ reason: string;
56
+ context: string | null;
57
+ status: RequestStatus;
58
+ createdAt: string;
59
+ resolvedAt: string | null;
60
+ followUpMessage: string | null;
61
+ responseMessage: string | null;
62
+ }
47
63
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IACzC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/C,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAYrD,CAAC;AAEF,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGxD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IACzC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/C,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAYrD,CAAC;AAEF,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,eAAe,CAEpF;AAID,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC"}
package/dist/types.js CHANGED
@@ -15,4 +15,7 @@ export function canonicalType(entityType) {
15
15
  const normalized = entityType.toUpperCase().trim();
16
16
  return CANONICAL_TYPE_MAP[normalized] ?? normalized;
17
17
  }
18
+ export function resolveAction(entity, config) {
19
+ return config.entityActions[entity.label] ?? config.guardrail_mode;
20
+ }
18
21
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAqDA,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,SAAS;IACd,YAAY,EAAE,OAAO;IACrB,sBAAsB,EAAE,KAAK;IAC7B,kBAAkB,EAAE,aAAa;IACjC,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsDA,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,SAAS;IACd,YAAY,EAAE,OAAO;IACrB,sBAAsB,EAAE,KAAK;IAC7B,kBAAkB,EAAE,aAAa;IACjC,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAqB;IACjE,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC;AACrE,CAAC"}