@clawdstrike/openclaw 0.1.1 → 0.1.2

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/README.md +3 -1
  2. package/clawdstrike-security.js +1 -0
  3. package/dist/audit/adapter-logger.d.ts +24 -0
  4. package/dist/audit/adapter-logger.d.ts.map +1 -0
  5. package/dist/audit/adapter-logger.js +42 -0
  6. package/dist/audit/adapter-logger.js.map +1 -0
  7. package/dist/classification.d.ts +41 -0
  8. package/dist/classification.d.ts.map +1 -0
  9. package/dist/classification.js +102 -0
  10. package/dist/classification.js.map +1 -0
  11. package/dist/cli/commands/policy.js +1 -1
  12. package/dist/cli/commands/policy.js.map +1 -1
  13. package/dist/e2e/openclaw-e2e.js +3 -3
  14. package/dist/e2e/openclaw-e2e.js.map +1 -1
  15. package/dist/engine-holder.d.ts +28 -0
  16. package/dist/engine-holder.d.ts.map +1 -0
  17. package/dist/engine-holder.js +38 -0
  18. package/dist/engine-holder.js.map +1 -0
  19. package/dist/guards/egress.d.ts.map +1 -1
  20. package/dist/guards/egress.js +20 -1
  21. package/dist/guards/egress.js.map +1 -1
  22. package/dist/guards/forbidden-path.d.ts.map +1 -1
  23. package/dist/guards/forbidden-path.js +6 -0
  24. package/dist/guards/forbidden-path.js.map +1 -1
  25. package/dist/guards/secret-leak.d.ts.map +1 -1
  26. package/dist/guards/secret-leak.js +21 -0
  27. package/dist/guards/secret-leak.js.map +1 -1
  28. package/dist/hooks/agent-bootstrap/handler.d.ts +4 -0
  29. package/dist/hooks/agent-bootstrap/handler.d.ts.map +1 -1
  30. package/dist/hooks/agent-bootstrap/handler.js +7 -7
  31. package/dist/hooks/agent-bootstrap/handler.js.map +1 -1
  32. package/dist/hooks/approval-state.d.ts +31 -0
  33. package/dist/hooks/approval-state.d.ts.map +1 -0
  34. package/dist/hooks/approval-state.js +189 -0
  35. package/dist/hooks/approval-state.js.map +1 -0
  36. package/dist/hooks/approval-utils.d.ts +5 -0
  37. package/dist/hooks/approval-utils.d.ts.map +1 -0
  38. package/dist/hooks/approval-utils.js +77 -0
  39. package/dist/hooks/approval-utils.js.map +1 -0
  40. package/dist/hooks/audit-logger/handler.d.ts +4 -0
  41. package/dist/hooks/audit-logger/handler.d.ts.map +1 -1
  42. package/dist/hooks/audit-logger/handler.js +4 -0
  43. package/dist/hooks/audit-logger/handler.js.map +1 -1
  44. package/dist/hooks/cua-bridge/handler.d.ts +57 -0
  45. package/dist/hooks/cua-bridge/handler.d.ts.map +1 -0
  46. package/dist/hooks/cua-bridge/handler.js +369 -0
  47. package/dist/hooks/cua-bridge/handler.js.map +1 -0
  48. package/dist/hooks/tool-guard/handler.d.ts +17 -2
  49. package/dist/hooks/tool-guard/handler.d.ts.map +1 -1
  50. package/dist/hooks/tool-guard/handler.js +200 -75
  51. package/dist/hooks/tool-guard/handler.js.map +1 -1
  52. package/dist/hooks/tool-preflight/handler.d.ts +34 -0
  53. package/dist/hooks/tool-preflight/handler.d.ts.map +1 -0
  54. package/dist/hooks/tool-preflight/handler.js +426 -0
  55. package/dist/hooks/tool-preflight/handler.js.map +1 -0
  56. package/dist/index.d.ts +8 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +9 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/openclaw-adapter.d.ts +48 -0
  61. package/dist/openclaw-adapter.d.ts.map +1 -0
  62. package/dist/openclaw-adapter.js +81 -0
  63. package/dist/openclaw-adapter.js.map +1 -0
  64. package/dist/plugin.d.ts +40 -1
  65. package/dist/plugin.d.ts.map +1 -1
  66. package/dist/plugin.js +125 -32
  67. package/dist/plugin.js.map +1 -1
  68. package/dist/policy/engine.d.ts +5 -0
  69. package/dist/policy/engine.d.ts.map +1 -1
  70. package/dist/policy/engine.js +580 -84
  71. package/dist/policy/engine.js.map +1 -1
  72. package/dist/policy/loader.js +57 -0
  73. package/dist/policy/loader.js.map +1 -1
  74. package/dist/policy/validator.d.ts.map +1 -1
  75. package/dist/policy/validator.js +97 -3
  76. package/dist/policy/validator.js.map +1 -1
  77. package/dist/receipt/signer.d.ts +42 -0
  78. package/dist/receipt/signer.d.ts.map +1 -0
  79. package/dist/receipt/signer.js +134 -0
  80. package/dist/receipt/signer.js.map +1 -0
  81. package/dist/receipt/types.d.ts +50 -0
  82. package/dist/receipt/types.d.ts.map +1 -0
  83. package/dist/receipt/types.js +9 -0
  84. package/dist/receipt/types.js.map +1 -0
  85. package/dist/security-prompt.js +1 -1
  86. package/dist/tools/policy-check.d.ts +2 -2
  87. package/dist/tools/policy-check.d.ts.map +1 -1
  88. package/dist/tools/policy-check.js +4 -7
  89. package/dist/tools/policy-check.js.map +1 -1
  90. package/dist/translator/openclaw-translator.d.ts +31 -0
  91. package/dist/translator/openclaw-translator.d.ts.map +1 -0
  92. package/dist/translator/openclaw-translator.js +314 -0
  93. package/dist/translator/openclaw-translator.js.map +1 -0
  94. package/dist/types.d.ts +86 -170
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +4 -0
  97. package/dist/types.js.map +1 -1
  98. package/package.json +5 -3
  99. package/rulesets/ai-agent-minimal.yaml +25 -0
  100. package/rulesets/ai-agent.yaml +25 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @clawdstrike/openclaw - Receipt/Attestation Types
3
+ *
4
+ * TypeScript-side receipt types that mirror the Rust hush-core receipt
5
+ * infrastructure. These establish the API surface for structured (but
6
+ * unsigned) receipts until the WASM bridge to hush-core is ready.
7
+ */
8
+ /**
9
+ * A signed attestation of a security decision.
10
+ *
11
+ * When the hush-wasm bridge is integrated, the `signature` and `keyId`
12
+ * fields will carry real Ed25519 values. Until then, they are `null`
13
+ * (unsigned stub receipts).
14
+ */
15
+ export interface DecisionReceipt {
16
+ /** Unique receipt identifier */
17
+ id: string;
18
+ /** ISO 8601 timestamp of when the receipt was created */
19
+ timestamp: string;
20
+ /** SHA-256 hash of the applied policy configuration */
21
+ policyHash: string;
22
+ /** The decision that was made */
23
+ decision: {
24
+ status: 'allow' | 'warn' | 'deny';
25
+ guard?: string;
26
+ reason?: string;
27
+ };
28
+ /** Event that triggered the decision */
29
+ event: {
30
+ type: string;
31
+ toolName?: string;
32
+ resource?: string;
33
+ };
34
+ /** Ed25519 signature in JWS compact format (null when unsigned) */
35
+ signature: string | null;
36
+ /** Signing algorithm (always 'EdDSA' for Ed25519) */
37
+ algorithm: 'EdDSA';
38
+ /** Public key identifier (null when unsigned) */
39
+ keyId: string | null;
40
+ }
41
+ /** Configuration for receipt signing */
42
+ export interface ReceiptSignerConfig {
43
+ /** Whether to generate receipts (default: true) */
44
+ enabled?: boolean;
45
+ /** Whether to cryptographically sign receipts (default: false - requires WASM bridge) */
46
+ sign?: boolean;
47
+ /** Key ID for the signing key */
48
+ keyId?: string;
49
+ }
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/receipt/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,wCAAwC;IACxC,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,mEAAmE;IACnE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yFAAyF;IACzF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @clawdstrike/openclaw - Receipt/Attestation Types
3
+ *
4
+ * TypeScript-side receipt types that mirror the Rust hush-core receipt
5
+ * infrastructure. These establish the API surface for structured (but
6
+ * unsigned) receipts until the WASM bridge to hush-core is ready.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/receipt/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -44,7 +44,7 @@ You have access to the \`policy_check\` tool. Use it BEFORE attempting:
44
44
  Example:
45
45
  \`\`\`
46
46
  policy_check({ action: "file_write", resource: "/etc/passwd" })
47
- -> { allowed: false, denied: true, warn: false, guard: "forbidden_path", message: "Denied by forbidden_path: " }
47
+ -> { status: "deny", guard: "forbidden_path", reason: "Forbidden path match: /etc/passwd" }
48
48
  \`\`\``);
49
49
  // Violation Handling section
50
50
  const blockAction = policy.on_violation === 'cancel' ? 'BLOCKED' :
@@ -1,10 +1,10 @@
1
1
  import type { Decision, ClawdstrikeConfig, ToolDefinition } from '../types.js';
2
2
  import { PolicyEngine } from '../policy/engine.js';
3
3
  export type PolicyCheckAction = 'file_read' | 'file_write' | 'network' | 'network_egress' | 'command' | 'command_exec' | 'tool_call';
4
- export interface PolicyCheckResult extends Decision {
4
+ export type PolicyCheckResult = Decision & {
5
5
  message: string;
6
6
  suggestion?: string;
7
- }
7
+ };
8
8
  export declare function checkPolicy(config: ClawdstrikeConfig, action: PolicyCheckAction, resource: string): Promise<PolicyCheckResult>;
9
9
  export declare function policyCheckTool(engine: PolicyEngine): ToolDefinition;
10
10
  //# sourceMappingURL=policy-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-check.d.ts","sourceRoot":"","sources":["../../src/tools/policy-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAe,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,YAAY,GACZ,SAAS,GACT,gBAAgB,GAChB,SAAS,GACT,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0FD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC,CAM5B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CA+BpE"}
1
+ {"version":3,"file":"policy-check.d.ts","sourceRoot":"","sources":["../../src/tools/policy-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAe,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,YAAY,GACZ,SAAS,GACT,gBAAgB,GAChB,SAAS,GACT,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAwFF,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CA+BpE"}
@@ -68,14 +68,12 @@ function buildEvent(action, resource) {
68
68
  }
69
69
  }
70
70
  function formatDecision(decision) {
71
- const isDenied = decision.status === 'deny' || decision.denied;
72
- const isWarn = decision.status === 'warn' || decision.warn;
73
- if (isDenied) {
71
+ if (decision.status === 'deny') {
74
72
  const guard = decision.guard ? ` by ${decision.guard}` : '';
75
73
  const reason = decision.reason ? `: ${decision.reason}` : '';
76
74
  return `Denied${guard}${reason}`;
77
75
  }
78
- if (isWarn) {
76
+ if (decision.status === 'warn') {
79
77
  const msg = decision.message ?? decision.reason ?? 'Policy warning';
80
78
  return `Warning: ${msg}`;
81
79
  }
@@ -85,8 +83,7 @@ export async function checkPolicy(config, action, resource) {
85
83
  const engine = new PolicyEngine(config);
86
84
  const event = buildEvent(action, resource);
87
85
  const decision = await engine.evaluate(event);
88
- const isDenied = decision.status === 'deny' || decision.denied;
89
- return { ...decision, message: formatDecision(decision), suggestion: isDenied ? getSuggestion(action, resource) : undefined };
86
+ return { ...decision, message: formatDecision(decision), suggestion: decision.status === 'deny' ? getSuggestion(action, resource) : undefined };
90
87
  }
91
88
  export function policyCheckTool(engine) {
92
89
  return {
@@ -115,7 +112,7 @@ export function policyCheckTool(engine) {
115
112
  return {
116
113
  ...decision,
117
114
  message: formatDecision(decision),
118
- suggestion: (decision.status === 'deny' || decision.denied) ? getSuggestion(action, resource) : undefined,
115
+ suggestion: decision.status === 'deny' ? getSuggestion(action, resource) : undefined,
119
116
  };
120
117
  },
121
118
  };
@@ -1 +1 @@
1
- {"version":3,"file":"policy-check.js","sourceRoot":"","sources":["../../src/tools/policy-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-check.js","sourceRoot":"","sources":["../../src/tools/policy-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @clawdstrike/openclaw - Tool Call Translator
3
+ *
4
+ * Maps OpenClaw tool calls to canonical PolicyEvent objects using the shared
5
+ * token-based classification system. This is the OpenClaw equivalent of the
6
+ * Claude adapter's `claudeCuaTranslator` — it normalizes framework-specific
7
+ * tool calls into the canonical event schema consumed by the policy engine.
8
+ *
9
+ * Design: returns `null` for tools that cannot be confidently classified,
10
+ * allowing the BaseToolInterceptor fallback to handle them.
11
+ */
12
+ import type { AdapterConfig, ToolCallTranslator } from '@clawdstrike/adapter-core';
13
+ /**
14
+ * OpenClaw tool-call translator.
15
+ *
16
+ * Uses the shared token-based classification system from `classification.ts`
17
+ * to map tool calls to canonical PolicyEvent objects. CUA tool calls are
18
+ * delegated to the CUA bridge's event builder.
19
+ *
20
+ * Returns `null` when the tool cannot be confidently classified, allowing
21
+ * the BaseToolInterceptor to apply its own fallback logic.
22
+ */
23
+ export declare const openclawTranslator: ToolCallTranslator;
24
+ /**
25
+ * Compose an AdapterConfig that chains the OpenClaw translator before
26
+ * any user-supplied translator. The OpenClaw translator runs first;
27
+ * if it returns a PolicyEvent, that result is used. Otherwise, the
28
+ * user-supplied translator (if any) gets a chance to translate.
29
+ */
30
+ export declare function composeOpenClawConfig(config?: AdapterConfig): AdapterConfig;
31
+ //# sourceMappingURL=openclaw-translator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-translator.d.ts","sourceRoot":"","sources":["../../src/translator/openclaw-translator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,aAAa,EAGb,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AA6InC;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAyKhC,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,aAAkB,GAAG,aAAa,CAU/E"}
@@ -0,0 +1,314 @@
1
+ /**
2
+ * @clawdstrike/openclaw - Tool Call Translator
3
+ *
4
+ * Maps OpenClaw tool calls to canonical PolicyEvent objects using the shared
5
+ * token-based classification system. This is the OpenClaw equivalent of the
6
+ * Claude adapter's `claudeCuaTranslator` — it normalizes framework-specific
7
+ * tool calls into the canonical event schema consumed by the policy engine.
8
+ *
9
+ * Design: returns `null` for tools that cannot be confidently classified,
10
+ * allowing the BaseToolInterceptor fallback to handle them.
11
+ */
12
+ import { tokenize, classifyTool, inferEventTypeFromName, } from '../classification.js';
13
+ import { isCuaToolCall, buildCuaEvent, classifyCuaAction, extractActionToken, } from '../hooks/cua-bridge/handler.js';
14
+ import { extractPath } from '../hooks/approval-utils.js';
15
+ // ── Parameter Extraction Helpers ────────────────────────────────────
16
+ function extractFilePath(params) {
17
+ return extractPath(params) ?? '';
18
+ }
19
+ function extractCommand(params) {
20
+ const cmdLine = typeof params.command === 'string'
21
+ ? params.command
22
+ : typeof params.cmd === 'string'
23
+ ? params.cmd
24
+ : '';
25
+ const argv = Array.isArray(params.argv) && params.argv.every((a) => typeof a === 'string')
26
+ ? params.argv
27
+ : Array.isArray(params.args) && params.args.every((a) => typeof a === 'string')
28
+ ? params.args
29
+ : null;
30
+ let command = '';
31
+ let args = [];
32
+ if (cmdLine.trim()) {
33
+ const parts = cmdLine.trim().split(/\s+/).filter(Boolean);
34
+ command = parts[0] ?? '';
35
+ const inlineArgs = parts.slice(1);
36
+ if (inlineArgs.length > 0) {
37
+ args = inlineArgs;
38
+ }
39
+ else if (argv && argv.length > 0) {
40
+ args = argv[0] === command ? argv.slice(1) : argv;
41
+ }
42
+ }
43
+ else if (argv && argv.length > 0) {
44
+ [command, ...args] = argv;
45
+ }
46
+ return { command, args };
47
+ }
48
+ function extractNetworkInfo(params) {
49
+ const url = typeof params.url === 'string' ? params.url
50
+ : typeof params.endpoint === 'string' ? params.endpoint
51
+ : typeof params.href === 'string' ? params.href
52
+ : undefined;
53
+ if (url) {
54
+ try {
55
+ const parsed = new URL(url);
56
+ return {
57
+ host: parsed.hostname,
58
+ port: parsed.port
59
+ ? parseInt(parsed.port, 10)
60
+ : (parsed.protocol === 'https:' || parsed.protocol === 'wss:' ? 443 : 80),
61
+ url,
62
+ };
63
+ }
64
+ catch {
65
+ // Not a valid URL; fall through.
66
+ }
67
+ }
68
+ const host = typeof params.host === 'string' ? params.host
69
+ : typeof params.hostname === 'string' ? params.hostname
70
+ : 'unknown';
71
+ const port = typeof params.port === 'number' ? params.port : 80;
72
+ return { host, port, url };
73
+ }
74
+ function extractPatchInfo(params) {
75
+ const filePath = typeof params.filePath === 'string' ? params.filePath
76
+ : typeof params.path === 'string' ? params.path
77
+ : '';
78
+ const patchContent = typeof params.patch === 'string' ? params.patch
79
+ : typeof params.diff === 'string' ? params.diff
80
+ : typeof params.content === 'string' ? params.content
81
+ : '';
82
+ return { filePath, patchContent };
83
+ }
84
+ // ── Parameter-based fallback heuristics ─────────────────────────────
85
+ function looksLikePatchApply(params) {
86
+ return typeof params.patch === 'string'
87
+ || typeof params.diff === 'string'
88
+ || typeof params.patchContent === 'string';
89
+ }
90
+ function looksLikeCommandExec(params) {
91
+ if (typeof params.command === 'string' || typeof params.cmd === 'string')
92
+ return true;
93
+ if (Array.isArray(params.args) && params.args.every((a) => typeof a === 'string'))
94
+ return true;
95
+ if (Array.isArray(params.argv) && params.argv.every((a) => typeof a === 'string'))
96
+ return true;
97
+ return false;
98
+ }
99
+ function looksLikeNetworkEgress(params) {
100
+ if (typeof params.url === 'string' || typeof params.endpoint === 'string' || typeof params.href === 'string')
101
+ return true;
102
+ if (typeof params.host === 'string' || typeof params.hostname === 'string')
103
+ return true;
104
+ return false;
105
+ }
106
+ function looksLikeFileWrite(params) {
107
+ if (typeof params.content === 'string')
108
+ return true;
109
+ if (typeof params.text === 'string')
110
+ return true;
111
+ if (typeof params.contentBase64 === 'string')
112
+ return true;
113
+ if (typeof params.base64 === 'string')
114
+ return true;
115
+ if (typeof params.patch === 'string' || typeof params.diff === 'string')
116
+ return true;
117
+ if (typeof params.operation === 'string') {
118
+ const op = params.operation.toLowerCase();
119
+ if (op === 'write' || op === 'append' || op === 'delete' || op === 'remove' || op === 'truncate')
120
+ return true;
121
+ }
122
+ return false;
123
+ }
124
+ // ── Event ID ────────────────────────────────────────────────────────
125
+ function generateEventId() {
126
+ return `oclaw-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
127
+ }
128
+ // ── Core Translator ─────────────────────────────────────────────────
129
+ /**
130
+ * OpenClaw tool-call translator.
131
+ *
132
+ * Uses the shared token-based classification system from `classification.ts`
133
+ * to map tool calls to canonical PolicyEvent objects. CUA tool calls are
134
+ * delegated to the CUA bridge's event builder.
135
+ *
136
+ * Returns `null` when the tool cannot be confidently classified, allowing
137
+ * the BaseToolInterceptor to apply its own fallback logic.
138
+ */
139
+ export const openclawTranslator = (input) => {
140
+ const { toolName, parameters, sessionId } = input;
141
+ // ── CUA Detection ───────────────────────────────────────────────
142
+ if (isCuaToolCall(toolName, parameters)) {
143
+ if (!sessionId)
144
+ return null;
145
+ const actionToken = extractActionToken(toolName, parameters);
146
+ if (!actionToken)
147
+ return null;
148
+ const kind = classifyCuaAction(actionToken);
149
+ if (!kind)
150
+ return null;
151
+ return buildCuaEvent(sessionId, kind, parameters);
152
+ }
153
+ // ── Token-based classification ──────────────────────────────────
154
+ const tokens = tokenize(toolName);
155
+ const classification = classifyTool(tokens);
156
+ const eventType = inferEventTypeFromName(toolName);
157
+ const timestamp = new Date().toISOString();
158
+ // Use the inferred event type from name tokens when available.
159
+ if (eventType) {
160
+ switch (eventType) {
161
+ case 'file_read': {
162
+ const path = extractFilePath(parameters);
163
+ return {
164
+ eventId: generateEventId(),
165
+ eventType: 'file_read',
166
+ timestamp,
167
+ sessionId,
168
+ data: { type: 'file', path, operation: 'read' },
169
+ metadata: { source: 'openclaw-translator', toolName },
170
+ };
171
+ }
172
+ case 'file_write': {
173
+ const path = extractFilePath(parameters);
174
+ return {
175
+ eventId: generateEventId(),
176
+ eventType: 'file_write',
177
+ timestamp,
178
+ sessionId,
179
+ data: {
180
+ type: 'file',
181
+ path,
182
+ operation: 'write',
183
+ ...(typeof parameters.content === 'string' ? { content: parameters.content } : {}),
184
+ },
185
+ metadata: { source: 'openclaw-translator', toolName },
186
+ };
187
+ }
188
+ case 'command_exec': {
189
+ const { command, args } = extractCommand(parameters);
190
+ return {
191
+ eventId: generateEventId(),
192
+ eventType: 'command_exec',
193
+ timestamp,
194
+ sessionId,
195
+ data: {
196
+ type: 'command',
197
+ command,
198
+ args,
199
+ ...(typeof parameters.cwd === 'string' ? { workingDir: parameters.cwd } : {}),
200
+ },
201
+ metadata: { source: 'openclaw-translator', toolName },
202
+ };
203
+ }
204
+ case 'network_egress': {
205
+ const { host, port, url } = extractNetworkInfo(parameters);
206
+ return {
207
+ eventId: generateEventId(),
208
+ eventType: 'network_egress',
209
+ timestamp,
210
+ sessionId,
211
+ data: { type: 'network', host, port, url },
212
+ metadata: { source: 'openclaw-translator', toolName },
213
+ };
214
+ }
215
+ case 'patch_apply': {
216
+ const { filePath, patchContent } = extractPatchInfo(parameters);
217
+ return {
218
+ eventId: generateEventId(),
219
+ eventType: 'patch_apply',
220
+ timestamp,
221
+ sessionId,
222
+ data: { type: 'patch', filePath, patchContent },
223
+ metadata: { source: 'openclaw-translator', toolName },
224
+ };
225
+ }
226
+ default:
227
+ // Other event types (e.g. CUA remote.* types) are already handled above.
228
+ break;
229
+ }
230
+ }
231
+ // ── Parameter-based fallback for unclassified tools ─────────────
232
+ // When token-based classification returns null (unknown), attempt
233
+ // parameter inspection — same heuristics as the preflight handler.
234
+ if (classification === 'unknown') {
235
+ if (looksLikePatchApply(parameters)) {
236
+ const { filePath, patchContent } = extractPatchInfo(parameters);
237
+ return {
238
+ eventId: generateEventId(),
239
+ eventType: 'patch_apply',
240
+ timestamp,
241
+ sessionId,
242
+ data: { type: 'patch', filePath, patchContent },
243
+ metadata: { source: 'openclaw-translator', toolName },
244
+ };
245
+ }
246
+ if (looksLikeCommandExec(parameters)) {
247
+ const { command, args } = extractCommand(parameters);
248
+ return {
249
+ eventId: generateEventId(),
250
+ eventType: 'command_exec',
251
+ timestamp,
252
+ sessionId,
253
+ data: {
254
+ type: 'command',
255
+ command,
256
+ args,
257
+ ...(typeof parameters.cwd === 'string' ? { workingDir: parameters.cwd } : {}),
258
+ },
259
+ metadata: { source: 'openclaw-translator', toolName },
260
+ };
261
+ }
262
+ if (looksLikeNetworkEgress(parameters)) {
263
+ const { host, port, url } = extractNetworkInfo(parameters);
264
+ return {
265
+ eventId: generateEventId(),
266
+ eventType: 'network_egress',
267
+ timestamp,
268
+ sessionId,
269
+ data: { type: 'network', host, port, url },
270
+ metadata: { source: 'openclaw-translator', toolName },
271
+ };
272
+ }
273
+ const path = extractFilePath(parameters);
274
+ if (path) {
275
+ const isWrite = looksLikeFileWrite(parameters);
276
+ return {
277
+ eventId: generateEventId(),
278
+ eventType: isWrite ? 'file_write' : 'file_read',
279
+ timestamp,
280
+ sessionId,
281
+ data: {
282
+ type: 'file',
283
+ path,
284
+ operation: isWrite ? 'write' : 'read',
285
+ ...(isWrite && typeof parameters.content === 'string' ? { content: parameters.content } : {}),
286
+ },
287
+ metadata: { source: 'openclaw-translator', toolName },
288
+ };
289
+ }
290
+ }
291
+ // Cannot confidently classify — return null so BaseToolInterceptor
292
+ // can apply its own default handling.
293
+ return null;
294
+ };
295
+ // ── Config Composer ─────────────────────────────────────────────────
296
+ /**
297
+ * Compose an AdapterConfig that chains the OpenClaw translator before
298
+ * any user-supplied translator. The OpenClaw translator runs first;
299
+ * if it returns a PolicyEvent, that result is used. Otherwise, the
300
+ * user-supplied translator (if any) gets a chance to translate.
301
+ */
302
+ export function composeOpenClawConfig(config = {}) {
303
+ const userTranslator = config.translateToolCall;
304
+ return {
305
+ ...config,
306
+ translateToolCall: (input) => {
307
+ const translated = openclawTranslator(input);
308
+ if (translated)
309
+ return translated;
310
+ return userTranslator ? userTranslator(input) : null;
311
+ },
312
+ };
313
+ }
314
+ //# sourceMappingURL=openclaw-translator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-translator.js","sourceRoot":"","sources":["../../src/translator/openclaw-translator.ts"],"names":[],"mappings":"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"}