@tyvm/knowhow 0.0.108 → 0.0.109-dev.2b94ba2

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 (236) hide show
  1. package/README.md +45 -0
  2. package/package.json +9 -4
  3. package/scripts/build-for-node.sh +10 -24
  4. package/scripts/publish.sh +86 -0
  5. package/src/agents/base/base.ts +10 -0
  6. package/src/agents/tools/execCommand.ts +49 -6
  7. package/src/agents/tools/index.ts +0 -1
  8. package/src/agents/tools/list.ts +2 -4
  9. package/src/chat/CliChatService.ts +11 -2
  10. package/src/chat/modules/AgentModule.ts +61 -31
  11. package/src/chat/modules/SessionsModule.ts +47 -3
  12. package/src/chat/modules/SystemModule.ts +2 -2
  13. package/src/chat/renderer/CompactRenderer.ts +20 -0
  14. package/src/chat/renderer/ConsoleRenderer.ts +19 -0
  15. package/src/chat/renderer/FancyRenderer.ts +19 -0
  16. package/src/chat/renderer/types.ts +11 -0
  17. package/src/cli.ts +91 -659
  18. package/src/clients/anthropic.ts +18 -17
  19. package/src/clients/index.ts +31 -11
  20. package/src/clients/openai.ts +8 -5
  21. package/src/clients/types.ts +48 -10
  22. package/src/clients/withRetry.ts +89 -0
  23. package/src/cloudWorker.ts +175 -113
  24. package/src/commands/agent.ts +246 -0
  25. package/src/commands/misc.ts +174 -0
  26. package/src/commands/modules.ts +552 -0
  27. package/src/commands/services.ts +77 -0
  28. package/src/commands/workers.ts +168 -0
  29. package/src/config.ts +38 -1
  30. package/src/fileSync.ts +70 -29
  31. package/src/hashes.ts +35 -13
  32. package/src/index.ts +18 -0
  33. package/src/logger.ts +197 -0
  34. package/src/plugins/embedding.ts +11 -6
  35. package/src/plugins/plugins.ts +0 -21
  36. package/src/plugins/vim.ts +5 -16
  37. package/src/processors/JsonCompressor.ts +6 -6
  38. package/src/services/EventService.ts +61 -1
  39. package/src/services/KnowhowClient.ts +34 -4
  40. package/src/services/MediaProcessorService.ts +79 -10
  41. package/src/services/modules/index.ts +102 -53
  42. package/src/services/modules/types.ts +6 -0
  43. package/src/tunnel.ts +216 -0
  44. package/src/types.ts +0 -1
  45. package/src/worker.ts +105 -312
  46. package/src/workers/auth/WsMiddleware.ts +99 -0
  47. package/src/workers/auth/authMiddleware.ts +104 -0
  48. package/src/workers/auth/types.ts +14 -2
  49. package/src/workers/tools/index.ts +2 -0
  50. package/src/workers/tools/reloadConfig.ts +84 -0
  51. package/tests/services/WorkerReloadConfig.test.ts +141 -0
  52. package/tests/unit/clients/AIClient.test.ts +446 -0
  53. package/tests/unit/clients/withRetry.test.ts +319 -0
  54. package/tests/unit/commands/github-credentials.test.ts +210 -0
  55. package/tests/unit/modules/moduleLoading.test.ts +39 -37
  56. package/tests/unit/plugins/pluginLoading.test.ts +0 -85
  57. package/ts_build/package.json +9 -4
  58. package/ts_build/src/agents/base/base.js +11 -0
  59. package/ts_build/src/agents/base/base.js.map +1 -1
  60. package/ts_build/src/agents/tools/execCommand.d.ts +1 -1
  61. package/ts_build/src/agents/tools/execCommand.js +39 -5
  62. package/ts_build/src/agents/tools/execCommand.js.map +1 -1
  63. package/ts_build/src/agents/tools/index.d.ts +0 -1
  64. package/ts_build/src/agents/tools/index.js +0 -1
  65. package/ts_build/src/agents/tools/index.js.map +1 -1
  66. package/ts_build/src/agents/tools/list.js +2 -4
  67. package/ts_build/src/agents/tools/list.js.map +1 -1
  68. package/ts_build/src/chat/CliChatService.js +14 -2
  69. package/ts_build/src/chat/CliChatService.js.map +1 -1
  70. package/ts_build/src/chat/modules/AgentModule.d.ts +1 -1
  71. package/ts_build/src/chat/modules/AgentModule.js +43 -20
  72. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  73. package/ts_build/src/chat/modules/SessionsModule.js +37 -3
  74. package/ts_build/src/chat/modules/SessionsModule.js.map +1 -1
  75. package/ts_build/src/chat/modules/SystemModule.js +2 -2
  76. package/ts_build/src/chat/modules/SystemModule.js.map +1 -1
  77. package/ts_build/src/chat/renderer/CompactRenderer.d.ts +4 -0
  78. package/ts_build/src/chat/renderer/CompactRenderer.js +16 -0
  79. package/ts_build/src/chat/renderer/CompactRenderer.js.map +1 -1
  80. package/ts_build/src/chat/renderer/ConsoleRenderer.d.ts +4 -0
  81. package/ts_build/src/chat/renderer/ConsoleRenderer.js +16 -0
  82. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  83. package/ts_build/src/chat/renderer/FancyRenderer.d.ts +4 -0
  84. package/ts_build/src/chat/renderer/FancyRenderer.js +16 -0
  85. package/ts_build/src/chat/renderer/FancyRenderer.js.map +1 -1
  86. package/ts_build/src/chat/renderer/types.d.ts +2 -0
  87. package/ts_build/src/cli.js +47 -519
  88. package/ts_build/src/cli.js.map +1 -1
  89. package/ts_build/src/clients/anthropic.d.ts +5 -5
  90. package/ts_build/src/clients/anthropic.js +18 -17
  91. package/ts_build/src/clients/anthropic.js.map +1 -1
  92. package/ts_build/src/clients/index.js +9 -10
  93. package/ts_build/src/clients/index.js.map +1 -1
  94. package/ts_build/src/clients/openai.js +4 -4
  95. package/ts_build/src/clients/openai.js.map +1 -1
  96. package/ts_build/src/clients/types.d.ts +15 -8
  97. package/ts_build/src/clients/withRetry.d.ts +2 -0
  98. package/ts_build/src/clients/withRetry.js +60 -0
  99. package/ts_build/src/clients/withRetry.js.map +1 -0
  100. package/ts_build/src/cloudWorker.d.ts +14 -0
  101. package/ts_build/src/cloudWorker.js +105 -66
  102. package/ts_build/src/cloudWorker.js.map +1 -1
  103. package/ts_build/src/commands/agent.d.ts +6 -0
  104. package/ts_build/src/commands/agent.js +229 -0
  105. package/ts_build/src/commands/agent.js.map +1 -0
  106. package/ts_build/src/commands/misc.d.ts +10 -0
  107. package/ts_build/src/commands/misc.js +197 -0
  108. package/ts_build/src/commands/misc.js.map +1 -0
  109. package/ts_build/src/commands/modules.d.ts +3 -0
  110. package/ts_build/src/commands/modules.js +487 -0
  111. package/ts_build/src/commands/modules.js.map +1 -0
  112. package/ts_build/src/commands/services.d.ts +5 -0
  113. package/ts_build/src/commands/services.js +87 -0
  114. package/ts_build/src/commands/services.js.map +1 -0
  115. package/ts_build/src/commands/workers.d.ts +6 -0
  116. package/ts_build/src/commands/workers.js +168 -0
  117. package/ts_build/src/commands/workers.js.map +1 -0
  118. package/ts_build/src/config.d.ts +1 -0
  119. package/ts_build/src/config.js +33 -1
  120. package/ts_build/src/config.js.map +1 -1
  121. package/ts_build/src/fileSync.d.ts +6 -0
  122. package/ts_build/src/fileSync.js +50 -23
  123. package/ts_build/src/fileSync.js.map +1 -1
  124. package/ts_build/src/hashes.d.ts +2 -2
  125. package/ts_build/src/hashes.js +35 -9
  126. package/ts_build/src/hashes.js.map +1 -1
  127. package/ts_build/src/index.d.ts +1 -0
  128. package/ts_build/src/index.js +17 -1
  129. package/ts_build/src/index.js.map +1 -1
  130. package/ts_build/src/logger.d.ts +21 -0
  131. package/ts_build/src/logger.js +106 -0
  132. package/ts_build/src/logger.js.map +1 -0
  133. package/ts_build/src/plugins/embedding.js +4 -3
  134. package/ts_build/src/plugins/embedding.js.map +1 -1
  135. package/ts_build/src/plugins/plugins.d.ts +0 -2
  136. package/ts_build/src/plugins/plugins.js +0 -11
  137. package/ts_build/src/plugins/plugins.js.map +1 -1
  138. package/ts_build/src/plugins/vim.js +3 -9
  139. package/ts_build/src/plugins/vim.js.map +1 -1
  140. package/ts_build/src/processors/JsonCompressor.js +4 -4
  141. package/ts_build/src/processors/JsonCompressor.js.map +1 -1
  142. package/ts_build/src/services/EventService.d.ts +6 -1
  143. package/ts_build/src/services/EventService.js +29 -0
  144. package/ts_build/src/services/EventService.js.map +1 -1
  145. package/ts_build/src/services/KnowhowClient.d.ts +13 -1
  146. package/ts_build/src/services/KnowhowClient.js +19 -2
  147. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  148. package/ts_build/src/services/MediaProcessorService.d.ts +5 -4
  149. package/ts_build/src/services/MediaProcessorService.js +53 -8
  150. package/ts_build/src/services/MediaProcessorService.js.map +1 -1
  151. package/ts_build/src/services/modules/index.d.ts +33 -0
  152. package/ts_build/src/services/modules/index.js +73 -49
  153. package/ts_build/src/services/modules/index.js.map +1 -1
  154. package/ts_build/src/services/modules/types.d.ts +6 -0
  155. package/ts_build/src/tunnel.d.ts +27 -0
  156. package/ts_build/src/tunnel.js +112 -0
  157. package/ts_build/src/tunnel.js.map +1 -0
  158. package/ts_build/src/types.d.ts +0 -1
  159. package/ts_build/src/types.js.map +1 -1
  160. package/ts_build/src/worker.d.ts +1 -4
  161. package/ts_build/src/worker.js +59 -227
  162. package/ts_build/src/worker.js.map +1 -1
  163. package/ts_build/src/workers/auth/WsMiddleware.d.ts +8 -0
  164. package/ts_build/src/workers/auth/WsMiddleware.js +65 -0
  165. package/ts_build/src/workers/auth/WsMiddleware.js.map +1 -0
  166. package/ts_build/src/workers/auth/authMiddleware.d.ts +3 -0
  167. package/ts_build/src/workers/auth/authMiddleware.js +60 -0
  168. package/ts_build/src/workers/auth/authMiddleware.js.map +1 -0
  169. package/ts_build/src/workers/auth/types.d.ts +8 -1
  170. package/ts_build/src/workers/tools/index.d.ts +2 -0
  171. package/ts_build/src/workers/tools/index.js +4 -1
  172. package/ts_build/src/workers/tools/index.js.map +1 -1
  173. package/ts_build/src/workers/tools/reloadConfig.d.ts +14 -0
  174. package/ts_build/src/workers/tools/reloadConfig.js +48 -0
  175. package/ts_build/src/workers/tools/reloadConfig.js.map +1 -0
  176. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +1 -0
  177. package/ts_build/tests/services/WorkerReloadConfig.test.js +86 -0
  178. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +1 -0
  179. package/ts_build/tests/unit/clients/AIClient.test.d.ts +1 -0
  180. package/ts_build/tests/unit/clients/AIClient.test.js +339 -0
  181. package/ts_build/tests/unit/clients/AIClient.test.js.map +1 -0
  182. package/ts_build/tests/unit/clients/withRetry.test.d.ts +1 -0
  183. package/ts_build/tests/unit/clients/withRetry.test.js +225 -0
  184. package/ts_build/tests/unit/clients/withRetry.test.js.map +1 -0
  185. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +1 -0
  186. package/ts_build/tests/unit/commands/github-credentials.test.js +145 -0
  187. package/ts_build/tests/unit/commands/github-credentials.test.js.map +1 -0
  188. package/ts_build/tests/unit/modules/moduleLoading.test.js +20 -26
  189. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
  190. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -65
  191. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -1
  192. package/src/agents/tools/executeScript/README.md +0 -94
  193. package/src/agents/tools/executeScript/definition.ts +0 -79
  194. package/src/agents/tools/executeScript/examples/dependency-injection-validation.ts +0 -272
  195. package/src/agents/tools/executeScript/examples/quick-test.ts +0 -74
  196. package/src/agents/tools/executeScript/examples/serialization-test.ts +0 -321
  197. package/src/agents/tools/executeScript/examples/test-runner.ts +0 -197
  198. package/src/agents/tools/executeScript/index.ts +0 -98
  199. package/src/services/script-execution/SandboxContext.ts +0 -282
  200. package/src/services/script-execution/ScriptExecutor.ts +0 -441
  201. package/src/services/script-execution/ScriptPolicy.ts +0 -194
  202. package/src/services/script-execution/ScriptTracer.ts +0 -249
  203. package/src/services/script-execution/types.ts +0 -134
  204. package/ts_build/src/agents/tools/executeScript/definition.d.ts +0 -2
  205. package/ts_build/src/agents/tools/executeScript/definition.js +0 -76
  206. package/ts_build/src/agents/tools/executeScript/definition.js.map +0 -1
  207. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.d.ts +0 -18
  208. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js +0 -192
  209. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js.map +0 -1
  210. package/ts_build/src/agents/tools/executeScript/examples/quick-test.d.ts +0 -3
  211. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js +0 -64
  212. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js.map +0 -1
  213. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.d.ts +0 -15
  214. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js +0 -266
  215. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js.map +0 -1
  216. package/ts_build/src/agents/tools/executeScript/examples/test-runner.d.ts +0 -4
  217. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js +0 -208
  218. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js.map +0 -1
  219. package/ts_build/src/agents/tools/executeScript/index.d.ts +0 -28
  220. package/ts_build/src/agents/tools/executeScript/index.js +0 -72
  221. package/ts_build/src/agents/tools/executeScript/index.js.map +0 -1
  222. package/ts_build/src/services/script-execution/SandboxContext.d.ts +0 -34
  223. package/ts_build/src/services/script-execution/SandboxContext.js +0 -189
  224. package/ts_build/src/services/script-execution/SandboxContext.js.map +0 -1
  225. package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +0 -19
  226. package/ts_build/src/services/script-execution/ScriptExecutor.js +0 -269
  227. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +0 -1
  228. package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +0 -28
  229. package/ts_build/src/services/script-execution/ScriptPolicy.js +0 -115
  230. package/ts_build/src/services/script-execution/ScriptPolicy.js.map +0 -1
  231. package/ts_build/src/services/script-execution/ScriptTracer.d.ts +0 -19
  232. package/ts_build/src/services/script-execution/ScriptTracer.js +0 -186
  233. package/ts_build/src/services/script-execution/ScriptTracer.js.map +0 -1
  234. package/ts_build/src/services/script-execution/types.d.ts +0 -108
  235. package/ts_build/src/services/script-execution/types.js +0 -3
  236. package/ts_build/src/services/script-execution/types.js.map +0 -1
@@ -1,282 +0,0 @@
1
- import { AIClient } from "../../clients";
2
- import { ScriptTracer } from "./ScriptTracer";
3
- import { ScriptPolicyEnforcer } from "./ScriptPolicy";
4
- import { Artifact, QuotaUsage } from "./types";
5
- import { Message } from "../../clients/types";
6
- import { ToolsService } from "../Tools";
7
-
8
- /**
9
- * Provides the execution context for scripts with controlled access to tools and AI
10
- */
11
- export class SandboxContext {
12
- private artifacts: Artifact[] = [];
13
- private consoleOutput: string[] = [];
14
-
15
- constructor(
16
- private toolsService: ToolsService,
17
- private clients: AIClient,
18
- private tracer: ScriptTracer,
19
- private policyEnforcer: ScriptPolicyEnforcer
20
- ) {}
21
-
22
- /**
23
- * Console implementation that captures output
24
- */
25
- console = {
26
- log: (...args: any[]) => {
27
- const message = args
28
- .map((arg) =>
29
- typeof arg === "object" ? JSON.stringify(arg) : String(arg)
30
- )
31
- .join(" ");
32
- this.consoleOutput.push(`[LOG] ${message}`);
33
- this.tracer.emitEvent("console_log", { message, args });
34
- },
35
-
36
- error: (...args: any[]) => {
37
- const message = args
38
- .map((arg) =>
39
- typeof arg === "object" ? JSON.stringify(arg) : String(arg)
40
- )
41
- .join(" ");
42
- this.consoleOutput.push(`[ERROR] ${message}`);
43
- this.tracer.emitEvent("console_error", { message, args });
44
- },
45
-
46
- warn: (...args: any[]) => {
47
- const message = args
48
- .map((arg) =>
49
- typeof arg === "object" ? JSON.stringify(arg) : String(arg)
50
- )
51
- .join(" ");
52
- this.consoleOutput.push(`[WARN] ${message}`);
53
- this.tracer.emitEvent("console_warn", { message, args });
54
- },
55
-
56
- info: (...args: any[]) => {
57
- const message = args
58
- .map((arg) =>
59
- typeof arg === "object" ? JSON.stringify(arg) : String(arg)
60
- )
61
- .join(" ");
62
- this.consoleOutput.push(`[INFO] ${message}`);
63
- this.tracer.emitEvent("console_info", { message, args });
64
- },
65
- };
66
-
67
- /**
68
- * Call a tool through the tools service
69
- */
70
- async callTool(toolName: string, parameters: any): Promise<any> {
71
- // Check policy first
72
- if (!this.policyEnforcer.checkToolCall(toolName)) {
73
- throw new Error(`Tool call '${toolName}' blocked by policy`);
74
- }
75
-
76
- if (toolName === "executeScript") {
77
- throw new Error("Nested script execution is not allowed in sandbox");
78
- }
79
-
80
- this.tracer.emitEvent("tool_call_start", {
81
- toolName,
82
- parameters: this.sanitizeForLogging(parameters),
83
- });
84
-
85
- try {
86
- // Record the tool call
87
- this.policyEnforcer.recordToolCall();
88
-
89
- // Create a proper ToolCall object
90
- const toolCall = {
91
- id: `script-tool-${Date.now()}-${Math.random()
92
- .toString(36)
93
- .substr(2, 9)}`,
94
- type: "function" as const,
95
- function: {
96
- name: toolName,
97
- arguments: JSON.stringify(parameters),
98
- },
99
- };
100
-
101
- // Call the actual tool through the Tools service
102
- const result = await this.toolsService.callTool(toolCall);
103
-
104
- this.tracer.emitEvent("tool_call_success", {
105
- toolName,
106
- result: this.sanitizeForLogging(result),
107
- });
108
-
109
- return result;
110
- } catch (error) {
111
- this.tracer.emitEvent("tool_call_error", {
112
- toolName,
113
- error: error instanceof Error ? error.message : String(error),
114
- });
115
- throw error;
116
- }
117
- }
118
-
119
- /**
120
- * Call LLM through the clients service
121
- */
122
- async llm(
123
- messages: Message[],
124
- options: {
125
- model?: string;
126
- maxTokens?: number;
127
- temperature?: number;
128
- } = {}
129
- ) {
130
- const estimatedTokens = this.estimateTokens(messages);
131
-
132
- // Check token quota
133
- if (!this.policyEnforcer.checkTokenUsage(estimatedTokens)) {
134
- throw new Error("Token quota would be exceeded");
135
- }
136
-
137
- this.tracer.emitEvent("llm_call_start", {
138
- messageCount: messages.length,
139
- estimatedTokens,
140
- model: options.model,
141
- options: this.sanitizeForLogging(options),
142
- });
143
-
144
- try {
145
- // Record token usage
146
- this.policyEnforcer.recordTokenUsage(estimatedTokens);
147
-
148
- // Use the actual Clients service to make LLM calls
149
- const completionOptions = {
150
- model: options.model,
151
- messages,
152
- max_tokens: options.maxTokens,
153
- };
154
-
155
- // Detect provider from model or use default
156
- const response = await this.clients.createCompletion(
157
- "",
158
- completionOptions
159
- );
160
-
161
- this.tracer.emitEvent("llm_call_success", {
162
- model: response.model,
163
- usage: response.usage,
164
- usdCost: response.usd_cost,
165
- });
166
-
167
- return response;
168
- } catch (error) {
169
- this.tracer.emitEvent("llm_call_error", {
170
- error: error instanceof Error ? error.message : String(error),
171
- });
172
- throw error;
173
- }
174
- }
175
-
176
- /**
177
- * Get current quota usage
178
- */
179
- getQuotaUsage(): QuotaUsage {
180
- return this.policyEnforcer.getUsage();
181
- }
182
-
183
- /**
184
- * Create an artifact
185
- */
186
- async createArtifact(
187
- name: string,
188
- content: string,
189
- type: "text" | "json" | "csv" | "html" | "markdown" = "text"
190
- ): Promise<Artifact> {
191
- const artifact: Artifact = {
192
- id: `artifact-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
193
- name,
194
- type,
195
- content,
196
- createdAt: new Date().toISOString(),
197
- };
198
-
199
- this.artifacts.push(artifact);
200
-
201
- this.tracer.emitEvent("artifact_created", {
202
- artifactId: artifact.id,
203
- name,
204
- type,
205
- contentLength: content.length,
206
- });
207
-
208
- return artifact;
209
- }
210
-
211
- async sleep(ms: number): Promise<void> {
212
- if (typeof ms !== "number" || ms < 0 || ms > 2000) {
213
- throw new Error("Invalid sleep duration, sleep must be >0 and <2000");
214
- }
215
- await new Promise((res) => setTimeout(res, ms));
216
- this.tracer.emitEvent("sleep", { durationMs: ms });
217
- }
218
-
219
- /**
220
- * Get all created artifacts
221
- */
222
- getArtifacts(): Artifact[] {
223
- return [...this.artifacts];
224
- }
225
-
226
- /**
227
- * Get console output
228
- */
229
- getConsoleOutput(): string[] {
230
- return [...this.consoleOutput];
231
- }
232
-
233
- /**
234
- * Estimate tokens for text (rough approximation)
235
- */
236
- private estimateTokens(messages: any[]): number {
237
- let totalText = "";
238
- for (const message of messages) {
239
- if (typeof message === "string") {
240
- totalText += message;
241
- } else if (message && typeof message.content === "string") {
242
- totalText += message.content;
243
- }
244
- }
245
- // Rough estimation: ~4 characters per token
246
- return Math.ceil(totalText.length / 4);
247
- }
248
-
249
- /**
250
- * Sanitize data for logging (remove sensitive information)
251
- */
252
- private sanitizeForLogging(data: any): any {
253
- if (data === null || data === undefined) {
254
- return data;
255
- }
256
-
257
- if (typeof data === "string") {
258
- // Truncate very long strings
259
- return data.length > 500 ? data.substring(0, 500) + "..." : data;
260
- }
261
-
262
- if (typeof data === "object") {
263
- const sanitized: any = {};
264
- for (const [key, value] of Object.entries(data)) {
265
- // Skip potentially sensitive keys
266
- if (
267
- key.toLowerCase().includes("password") ||
268
- key.toLowerCase().includes("token") ||
269
- key.toLowerCase().includes("secret") ||
270
- key.toLowerCase().includes("key")
271
- ) {
272
- sanitized[key] = "[REDACTED]";
273
- } else {
274
- sanitized[key] = this.sanitizeForLogging(value);
275
- }
276
- }
277
- return sanitized;
278
- }
279
-
280
- return data;
281
- }
282
- }