@tyvm/knowhow 0.0.21 → 0.0.23

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 (172) hide show
  1. package/package.json +3 -1
  2. package/src/agents/base/base.ts +16 -7
  3. package/src/agents/configurable/ConfigAgent.ts +5 -3
  4. package/src/agents/developer/developer.ts +3 -4
  5. package/src/agents/index.ts +26 -2
  6. package/src/agents/patcher/patcher.ts +3 -5
  7. package/src/agents/researcher/researcher.ts +3 -4
  8. package/src/agents/tools/agentCall.ts +5 -2
  9. package/src/agents/tools/executeScript/README.md +78 -0
  10. package/src/agents/tools/executeScript/definition.ts +73 -0
  11. package/src/agents/tools/executeScript/examples/dependency-injection-validation.ts +272 -0
  12. package/src/agents/tools/executeScript/examples/quick-test.ts +74 -0
  13. package/src/agents/tools/executeScript/examples/serialization-test.ts +321 -0
  14. package/src/agents/tools/executeScript/examples/test-runner.ts +197 -0
  15. package/src/agents/tools/executeScript/index.ts +93 -0
  16. package/src/agents/tools/index.ts +1 -0
  17. package/src/agents/tools/list.ts +2 -1
  18. package/src/agents/vim/vim.ts +3 -4
  19. package/src/ai.ts +2 -1
  20. package/src/chat.ts +4 -2
  21. package/src/cli.ts +7 -15
  22. package/src/clients/index.ts +23 -9
  23. package/src/dataset/diffs/test.ts +2 -1
  24. package/src/index.ts +3 -3
  25. package/src/services/AgentService.ts +9 -10
  26. package/src/services/EventService.ts +0 -2
  27. package/src/services/GitHub.ts +0 -1
  28. package/src/services/KnowhowClient.ts +0 -3
  29. package/src/services/Mcp.ts +0 -2
  30. package/src/services/S3.ts +0 -1
  31. package/src/services/Tools.ts +63 -8
  32. package/src/services/flags.ts +0 -1
  33. package/src/services/index.ts +56 -0
  34. package/src/services/modules/index.ts +53 -0
  35. package/src/{modules → services/modules}/types.ts +16 -5
  36. package/src/services/script-execution/SandboxContext.ts +278 -0
  37. package/src/services/script-execution/ScriptExecutor.ts +339 -0
  38. package/src/services/script-execution/ScriptPolicy.ts +236 -0
  39. package/src/services/script-execution/ScriptTracer.ts +249 -0
  40. package/src/services/script-execution/types.ts +134 -0
  41. package/src/worker.ts +3 -3
  42. package/tests/integration/fileblocks/readwrite.test.ts +2 -1
  43. package/tests/integration/patching.test.ts +5 -5
  44. package/ts_build/src/agents/base/base.d.ts +9 -4
  45. package/ts_build/src/agents/base/base.js +7 -10
  46. package/ts_build/src/agents/base/base.js.map +1 -1
  47. package/ts_build/src/agents/configurable/ConfigAgent.d.ts +2 -2
  48. package/ts_build/src/agents/configurable/ConfigAgent.js +2 -2
  49. package/ts_build/src/agents/configurable/ConfigAgent.js.map +1 -1
  50. package/ts_build/src/agents/developer/developer.d.ts +2 -3
  51. package/ts_build/src/agents/developer/developer.js +3 -4
  52. package/ts_build/src/agents/developer/developer.js.map +1 -1
  53. package/ts_build/src/agents/index.d.ts +11 -2
  54. package/ts_build/src/agents/index.js +19 -3
  55. package/ts_build/src/agents/index.js.map +1 -1
  56. package/ts_build/src/agents/patcher/patcher.d.ts +2 -3
  57. package/ts_build/src/agents/patcher/patcher.js +3 -4
  58. package/ts_build/src/agents/patcher/patcher.js.map +1 -1
  59. package/ts_build/src/agents/researcher/researcher.d.ts +2 -3
  60. package/ts_build/src/agents/researcher/researcher.js +3 -4
  61. package/ts_build/src/agents/researcher/researcher.js.map +1 -1
  62. package/ts_build/src/agents/tools/agentCall.js +4 -4
  63. package/ts_build/src/agents/tools/agentCall.js.map +1 -1
  64. package/ts_build/src/agents/tools/executeScript/definition.d.ts +2 -0
  65. package/ts_build/src/agents/tools/executeScript/definition.js +70 -0
  66. package/ts_build/src/agents/tools/executeScript/definition.js.map +1 -0
  67. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.d.ts +18 -0
  68. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js +192 -0
  69. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js.map +1 -0
  70. package/ts_build/src/agents/tools/executeScript/examples/quick-test.d.ts +3 -0
  71. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js +65 -0
  72. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js.map +1 -0
  73. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.d.ts +15 -0
  74. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js +266 -0
  75. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js.map +1 -0
  76. package/ts_build/src/agents/tools/executeScript/examples/simple-example.d.ts +20 -0
  77. package/ts_build/src/agents/tools/executeScript/examples/simple-example.js +35 -0
  78. package/ts_build/src/agents/tools/executeScript/examples/simple-example.js.map +1 -0
  79. package/ts_build/src/agents/tools/executeScript/examples/test-runner.d.ts +4 -0
  80. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js +198 -0
  81. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js.map +1 -0
  82. package/ts_build/src/agents/tools/executeScript/handler.d.ts +27 -0
  83. package/ts_build/src/agents/tools/executeScript/handler.js +64 -0
  84. package/ts_build/src/agents/tools/executeScript/handler.js.map +1 -0
  85. package/ts_build/src/agents/tools/executeScript/index.d.ts +27 -0
  86. package/ts_build/src/agents/tools/executeScript/index.js +70 -0
  87. package/ts_build/src/agents/tools/executeScript/index.js.map +1 -0
  88. package/ts_build/src/agents/tools/executeScript.d.ts +29 -0
  89. package/ts_build/src/agents/tools/executeScript.js +124 -0
  90. package/ts_build/src/agents/tools/executeScript.js.map +1 -0
  91. package/ts_build/src/agents/tools/index.d.ts +1 -0
  92. package/ts_build/src/agents/tools/index.js +1 -0
  93. package/ts_build/src/agents/tools/index.js.map +1 -1
  94. package/ts_build/src/agents/tools/list.js +2 -0
  95. package/ts_build/src/agents/tools/list.js.map +1 -1
  96. package/ts_build/src/agents/vim/vim.d.ts +2 -3
  97. package/ts_build/src/agents/vim/vim.js +3 -4
  98. package/ts_build/src/agents/vim/vim.js.map +1 -1
  99. package/ts_build/src/ai.js +2 -1
  100. package/ts_build/src/ai.js.map +1 -1
  101. package/ts_build/src/chat.js +10 -9
  102. package/ts_build/src/chat.js.map +1 -1
  103. package/ts_build/src/cli.js +12 -19
  104. package/ts_build/src/cli.js.map +1 -1
  105. package/ts_build/src/clients/index.d.ts +9 -2
  106. package/ts_build/src/clients/index.js +17 -4
  107. package/ts_build/src/clients/index.js.map +1 -1
  108. package/ts_build/src/dataset/diffs/test.js +2 -1
  109. package/ts_build/src/dataset/diffs/test.js.map +1 -1
  110. package/ts_build/src/index.js +10 -10
  111. package/ts_build/src/index.js.map +1 -1
  112. package/ts_build/src/services/AgentService.d.ts +7 -3
  113. package/ts_build/src/services/AgentService.js +11 -10
  114. package/ts_build/src/services/AgentService.js.map +1 -1
  115. package/ts_build/src/services/EventService.d.ts +0 -1
  116. package/ts_build/src/services/EventService.js +1 -2
  117. package/ts_build/src/services/EventService.js.map +1 -1
  118. package/ts_build/src/services/GitHub.d.ts +0 -1
  119. package/ts_build/src/services/GitHub.js +1 -2
  120. package/ts_build/src/services/GitHub.js.map +1 -1
  121. package/ts_build/src/services/KnowhowClient.d.ts +0 -1
  122. package/ts_build/src/services/KnowhowClient.js +1 -2
  123. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  124. package/ts_build/src/services/Mcp.d.ts +0 -1
  125. package/ts_build/src/services/Mcp.js +1 -2
  126. package/ts_build/src/services/Mcp.js.map +1 -1
  127. package/ts_build/src/services/S3.d.ts +0 -1
  128. package/ts_build/src/services/S3.js +1 -2
  129. package/ts_build/src/services/S3.js.map +1 -1
  130. package/ts_build/src/services/Tools.d.ts +22 -1
  131. package/ts_build/src/services/Tools.js +32 -6
  132. package/ts_build/src/services/Tools.js.map +1 -1
  133. package/ts_build/src/services/flags.d.ts +0 -1
  134. package/ts_build/src/services/flags.js +1 -2
  135. package/ts_build/src/services/flags.js.map +1 -1
  136. package/ts_build/src/services/index.d.ts +25 -0
  137. package/ts_build/src/services/index.js +42 -1
  138. package/ts_build/src/services/index.js.map +1 -1
  139. package/ts_build/src/services/modules/example-usage.d.ts +11 -0
  140. package/ts_build/src/services/modules/example-usage.js +43 -0
  141. package/ts_build/src/services/modules/example-usage.js.map +1 -0
  142. package/ts_build/src/services/modules/index.d.ts +4 -0
  143. package/ts_build/src/services/modules/index.js +44 -0
  144. package/ts_build/src/services/modules/index.js.map +1 -0
  145. package/ts_build/src/services/modules/types.d.ts +47 -0
  146. package/ts_build/src/services/modules/types.js +3 -0
  147. package/ts_build/src/services/modules/types.js.map +1 -0
  148. package/ts_build/src/services/script-execution/SandboxContext.d.ts +34 -0
  149. package/ts_build/src/services/script-execution/SandboxContext.js +186 -0
  150. package/ts_build/src/services/script-execution/SandboxContext.js.map +1 -0
  151. package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +17 -0
  152. package/ts_build/src/services/script-execution/ScriptExecutor.js +211 -0
  153. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -0
  154. package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +27 -0
  155. package/ts_build/src/services/script-execution/ScriptPolicy.js +150 -0
  156. package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -0
  157. package/ts_build/src/services/script-execution/ScriptTracer.d.ts +19 -0
  158. package/ts_build/src/services/script-execution/ScriptTracer.js +186 -0
  159. package/ts_build/src/services/script-execution/ScriptTracer.js.map +1 -0
  160. package/ts_build/src/services/script-execution/types.d.ts +108 -0
  161. package/ts_build/src/services/script-execution/types.js +3 -0
  162. package/ts_build/src/services/script-execution/types.js.map +1 -0
  163. package/ts_build/src/services/singletons.d.ts +17 -0
  164. package/ts_build/src/services/singletons.js +28 -0
  165. package/ts_build/src/services/singletons.js.map +1 -0
  166. package/ts_build/src/worker.js +4 -3
  167. package/ts_build/src/worker.js.map +1 -1
  168. package/ts_build/tests/integration/fileblocks/readwrite.test.js +10 -9
  169. package/ts_build/tests/integration/fileblocks/readwrite.test.js.map +1 -1
  170. package/ts_build/tests/integration/patching.test.js +9 -10
  171. package/ts_build/tests/integration/patching.test.js.map +1 -1
  172. package/src/modules/index.ts +0 -37
@@ -0,0 +1,47 @@
1
+ import { Plugin } from "../../plugins/types";
2
+ import { IAgent } from "../../agents/interface";
3
+ import { Tool } from "../../clients/types";
4
+ import { Config } from "../../types";
5
+ import { GenericClient } from "../../clients/types";
6
+ import { AgentService } from "../AgentService";
7
+ import { PluginService } from "../../plugins/plugins";
8
+ import { AIClient } from "../../clients";
9
+ import { ToolsService } from "../Tools";
10
+ export interface ModuleChatCommand {
11
+ name: string;
12
+ description: string;
13
+ handler: (ctx: any) => void;
14
+ }
15
+ export interface ModuleTool {
16
+ name: string;
17
+ handler: (...args: any[]) => any;
18
+ definition: Tool;
19
+ }
20
+ export type ModuleAgent = IAgent;
21
+ export type ModulePlugin = {
22
+ name: string;
23
+ plugin: Plugin;
24
+ };
25
+ export type ModuleClient = {
26
+ client: GenericClient;
27
+ provider: string;
28
+ models: string[];
29
+ };
30
+ export type InitParams = {
31
+ config: Config;
32
+ cwd: string;
33
+ };
34
+ export interface ModuleContext {
35
+ Agents: AgentService;
36
+ Plugins: PluginService;
37
+ Clients: AIClient;
38
+ Tools: ToolsService;
39
+ }
40
+ export interface KnowhowModule {
41
+ init: (params: InitParams) => Promise<void>;
42
+ commands: ModuleChatCommand[];
43
+ tools: ModuleTool[];
44
+ agents: ModuleAgent[];
45
+ plugins: ModulePlugin[];
46
+ clients: ModuleClient[];
47
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/services/modules/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
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
+ export declare class SandboxContext {
8
+ private toolsService;
9
+ private clients;
10
+ private tracer;
11
+ private policyEnforcer;
12
+ private artifacts;
13
+ private consoleOutput;
14
+ constructor(toolsService: ToolsService, clients: AIClient, tracer: ScriptTracer, policyEnforcer: ScriptPolicyEnforcer);
15
+ console: {
16
+ log: (...args: any[]) => void;
17
+ error: (...args: any[]) => void;
18
+ warn: (...args: any[]) => void;
19
+ info: (...args: any[]) => void;
20
+ };
21
+ callTool(toolName: string, parameters: any): Promise<any>;
22
+ llm(messages: Message[], options?: {
23
+ model?: string;
24
+ maxTokens?: number;
25
+ temperature?: number;
26
+ }): Promise<import("../../clients").CompletionResponse>;
27
+ getQuotaUsage(): QuotaUsage;
28
+ createArtifact(name: string, content: string, type?: "text" | "json" | "csv" | "html" | "markdown"): Promise<Artifact>;
29
+ sleep(ms: number): Promise<void>;
30
+ getArtifacts(): Artifact[];
31
+ getConsoleOutput(): string[];
32
+ private estimateTokens;
33
+ private sanitizeForLogging;
34
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SandboxContext = void 0;
4
+ class SandboxContext {
5
+ toolsService;
6
+ clients;
7
+ tracer;
8
+ policyEnforcer;
9
+ artifacts = [];
10
+ consoleOutput = [];
11
+ constructor(toolsService, clients, tracer, policyEnforcer) {
12
+ this.toolsService = toolsService;
13
+ this.clients = clients;
14
+ this.tracer = tracer;
15
+ this.policyEnforcer = policyEnforcer;
16
+ }
17
+ console = {
18
+ log: (...args) => {
19
+ const message = args
20
+ .map((arg) => typeof arg === "object" ? JSON.stringify(arg) : String(arg))
21
+ .join(" ");
22
+ this.consoleOutput.push(`[LOG] ${message}`);
23
+ this.tracer.emitEvent("console_log", { message, args });
24
+ },
25
+ error: (...args) => {
26
+ const message = args
27
+ .map((arg) => typeof arg === "object" ? JSON.stringify(arg) : String(arg))
28
+ .join(" ");
29
+ this.consoleOutput.push(`[ERROR] ${message}`);
30
+ this.tracer.emitEvent("console_error", { message, args });
31
+ },
32
+ warn: (...args) => {
33
+ const message = args
34
+ .map((arg) => typeof arg === "object" ? JSON.stringify(arg) : String(arg))
35
+ .join(" ");
36
+ this.consoleOutput.push(`[WARN] ${message}`);
37
+ this.tracer.emitEvent("console_warn", { message, args });
38
+ },
39
+ info: (...args) => {
40
+ const message = args
41
+ .map((arg) => typeof arg === "object" ? JSON.stringify(arg) : String(arg))
42
+ .join(" ");
43
+ this.consoleOutput.push(`[INFO] ${message}`);
44
+ this.tracer.emitEvent("console_info", { message, args });
45
+ },
46
+ };
47
+ async callTool(toolName, parameters) {
48
+ if (!this.policyEnforcer.checkToolCall(toolName)) {
49
+ throw new Error(`Tool call '${toolName}' blocked by policy`);
50
+ }
51
+ this.tracer.emitEvent("tool_call_start", {
52
+ toolName,
53
+ parameters: this.sanitizeForLogging(parameters),
54
+ });
55
+ try {
56
+ this.policyEnforcer.recordToolCall();
57
+ const toolCall = {
58
+ id: `script-tool-${Date.now()}-${Math.random()
59
+ .toString(36)
60
+ .substr(2, 9)}`,
61
+ type: "function",
62
+ function: {
63
+ name: toolName,
64
+ arguments: JSON.stringify(parameters),
65
+ },
66
+ };
67
+ const result = await this.toolsService.callTool(toolCall);
68
+ this.tracer.emitEvent("tool_call_success", {
69
+ toolName,
70
+ result: this.sanitizeForLogging(result),
71
+ });
72
+ return result;
73
+ }
74
+ catch (error) {
75
+ this.tracer.emitEvent("tool_call_error", {
76
+ toolName,
77
+ error: error instanceof Error ? error.message : String(error),
78
+ });
79
+ throw error;
80
+ }
81
+ }
82
+ async llm(messages, options = {}) {
83
+ const estimatedTokens = this.estimateTokens(messages);
84
+ if (!this.policyEnforcer.checkTokenUsage(estimatedTokens)) {
85
+ throw new Error("Token quota would be exceeded");
86
+ }
87
+ this.tracer.emitEvent("llm_call_start", {
88
+ messageCount: messages.length,
89
+ estimatedTokens,
90
+ model: options.model,
91
+ options: this.sanitizeForLogging(options),
92
+ });
93
+ try {
94
+ this.policyEnforcer.recordTokenUsage(estimatedTokens);
95
+ const completionOptions = {
96
+ model: options.model,
97
+ messages,
98
+ max_tokens: options.maxTokens,
99
+ };
100
+ const response = await this.clients.createCompletion("", completionOptions);
101
+ this.tracer.emitEvent("llm_call_success", {
102
+ model: response.model,
103
+ usage: response.usage,
104
+ usdCost: response.usd_cost,
105
+ });
106
+ return response;
107
+ }
108
+ catch (error) {
109
+ this.tracer.emitEvent("llm_call_error", {
110
+ error: error instanceof Error ? error.message : String(error),
111
+ });
112
+ throw error;
113
+ }
114
+ }
115
+ getQuotaUsage() {
116
+ return this.policyEnforcer.getUsage();
117
+ }
118
+ async createArtifact(name, content, type = "text") {
119
+ const artifact = {
120
+ id: `artifact-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
121
+ name,
122
+ type,
123
+ content,
124
+ createdAt: new Date().toISOString(),
125
+ };
126
+ this.artifacts.push(artifact);
127
+ this.tracer.emitEvent("artifact_created", {
128
+ artifactId: artifact.id,
129
+ name,
130
+ type,
131
+ contentLength: content.length,
132
+ });
133
+ return artifact;
134
+ }
135
+ async sleep(ms) {
136
+ if (typeof ms !== "number" || ms < 0 || ms > 2000) {
137
+ throw new Error("Invalid sleep duration");
138
+ }
139
+ await new Promise((res) => setTimeout(res, ms));
140
+ this.tracer.emitEvent("sleep", { durationMs: ms });
141
+ }
142
+ getArtifacts() {
143
+ return [...this.artifacts];
144
+ }
145
+ getConsoleOutput() {
146
+ return [...this.consoleOutput];
147
+ }
148
+ estimateTokens(messages) {
149
+ let totalText = "";
150
+ for (const message of messages) {
151
+ if (typeof message === "string") {
152
+ totalText += message;
153
+ }
154
+ else if (message && typeof message.content === "string") {
155
+ totalText += message.content;
156
+ }
157
+ }
158
+ return Math.ceil(totalText.length / 4);
159
+ }
160
+ sanitizeForLogging(data) {
161
+ if (data === null || data === undefined) {
162
+ return data;
163
+ }
164
+ if (typeof data === "string") {
165
+ return data.length > 500 ? data.substring(0, 500) + "..." : data;
166
+ }
167
+ if (typeof data === "object") {
168
+ const sanitized = {};
169
+ for (const [key, value] of Object.entries(data)) {
170
+ if (key.toLowerCase().includes("password") ||
171
+ key.toLowerCase().includes("token") ||
172
+ key.toLowerCase().includes("secret") ||
173
+ key.toLowerCase().includes("key")) {
174
+ sanitized[key] = "[REDACTED]";
175
+ }
176
+ else {
177
+ sanitized[key] = this.sanitizeForLogging(value);
178
+ }
179
+ }
180
+ return sanitized;
181
+ }
182
+ return data;
183
+ }
184
+ }
185
+ exports.SandboxContext = SandboxContext;
186
+ //# sourceMappingURL=SandboxContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxContext.js","sourceRoot":"","sources":["../../../../src/services/script-execution/SandboxContext.ts"],"names":[],"mappings":";;;AAUA,MAAa,cAAc;IAKf;IACA;IACA;IACA;IAPF,SAAS,GAAe,EAAE,CAAC;IAC3B,aAAa,GAAa,EAAE,CAAC;IAErC,YACU,YAA0B,EAC1B,OAAiB,EACjB,MAAoB,EACpB,cAAoC;QAHpC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,YAAO,GAAP,OAAO,CAAU;QACjB,WAAM,GAAN,MAAM,CAAc;QACpB,mBAAc,GAAd,cAAc,CAAsB;IAC3C,CAAC;IAKJ,OAAO,GAAG;QACR,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI;iBACjB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5D;iBACA,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,IAAI;iBACjB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5D;iBACA,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,IAAI;iBACjB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5D;iBACA,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,IAAI;iBACjB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5D;iBACA,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;IAKF,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,UAAe;QAE9C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,qBAAqB,CAAC,CAAC;SAC9D;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE;YACvC,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;SAChD,CAAC,CAAC;QAEH,IAAI;YAEF,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;YAGrC,MAAM,QAAQ,GAAG;gBACf,EAAE,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;qBAC3C,QAAQ,CAAC,EAAE,CAAC;qBACZ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBACjB,IAAI,EAAE,UAAmB;gBACzB,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;iBACtC;aACF,CAAC;YAGF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE1D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE;gBACzC,QAAQ;gBACR,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;aACxC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE;gBACvC,QAAQ;gBACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAKD,KAAK,CAAC,GAAG,CACP,QAAmB,EACnB,UAII,EAAE;QAEN,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAGtD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE;YACzD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE;YACtC,YAAY,EAAE,QAAQ,CAAC,MAAM;YAC7B,eAAe;YACf,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;SAC1C,CAAC,CAAC;QAEH,IAAI;YAEF,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YAGtD,MAAM,iBAAiB,GAAG;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ;gBACR,UAAU,EAAE,OAAO,CAAC,SAAS;aAC9B,CAAC;YAGF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAClD,EAAE,EACF,iBAAiB,CAClB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE;gBACxC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,QAAQ,CAAC,QAAQ;aAC3B,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE;gBACtC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAKD,aAAa;QACX,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IAKD,KAAK,CAAC,cAAc,CAClB,IAAY,EACZ,OAAe,EACf,OAAsD,MAAM;QAE5D,MAAM,QAAQ,GAAa;YACzB,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACvE,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE;YACxC,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,IAAI;YACJ,IAAI;YACJ,aAAa,EAAE,OAAO,CAAC,MAAM;SAC9B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU;QACpB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAKD,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAKD,gBAAgB;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAKO,cAAc,CAAC,QAAe;QACpC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,SAAS,IAAI,OAAO,CAAC;aACtB;iBAAM,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE;gBACzD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;aAC9B;SACF;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAKO,kBAAkB,CAAC,IAAS;QAClC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACvC,OAAO,IAAI,CAAC;SACb;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAE5B,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;SAClE;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,SAAS,GAAQ,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAE/C,IACE,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACtC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACnC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACpC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EACjC;oBACA,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;iBAC/B;qBAAM;oBACL,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;iBACjD;aACF;YACD,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA3QD,wCA2QC"}
@@ -0,0 +1,17 @@
1
+ import { ToolsService } from "../../services";
2
+ import { AIClient } from "../../clients";
3
+ import { ExecutionRequest, ExecutionResult, ResourceQuotas, SecurityPolicy } from "./types";
4
+ export declare class ScriptExecutor {
5
+ private toolsService;
6
+ private clients;
7
+ private defaultQuotas;
8
+ private defaultPolicy;
9
+ constructor(toolsService: ToolsService, clients: AIClient);
10
+ execute(request: ExecutionRequest): Promise<ExecutionResult>;
11
+ private executeWithTimeout;
12
+ private executeScriptSecure;
13
+ private setupIsolatedContext;
14
+ private executeScriptFallback;
15
+ getDefaultQuotas(): ResourceQuotas;
16
+ getDefaultPolicy(): SecurityPolicy;
17
+ }
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ScriptExecutor = void 0;
7
+ const isolated_vm_1 = __importDefault(require("isolated-vm"));
8
+ const SandboxContext_1 = require("./SandboxContext");
9
+ const ScriptTracer_1 = require("./ScriptTracer");
10
+ const ScriptPolicy_1 = require("./ScriptPolicy");
11
+ class ScriptExecutor {
12
+ toolsService;
13
+ clients;
14
+ defaultQuotas = {
15
+ maxToolCalls: 50,
16
+ maxTokens: 10000,
17
+ maxExecutionTimeMs: 30000,
18
+ maxCostUsd: 1.0,
19
+ maxMemoryMb: 100,
20
+ };
21
+ defaultPolicy = {
22
+ allowlistedTools: [],
23
+ denylistedTools: [
24
+ "execCommand",
25
+ "writeFileChunk",
26
+ "patchFile",
27
+ ],
28
+ maxScriptLength: 50000,
29
+ allowNetworkAccess: false,
30
+ allowFileSystemAccess: false,
31
+ };
32
+ constructor(toolsService, clients) {
33
+ this.toolsService = toolsService;
34
+ this.clients = clients;
35
+ }
36
+ async execute(request) {
37
+ const tracer = new ScriptTracer_1.ScriptTracer();
38
+ const quotas = { ...this.defaultQuotas, ...request.quotas };
39
+ const policy = { ...this.defaultPolicy, ...request.policy };
40
+ const policyEnforcer = new ScriptPolicy_1.ScriptPolicyEnforcer(quotas, policy);
41
+ tracer.emitEvent("execution_start", {
42
+ scriptLength: request.script.length,
43
+ quotas,
44
+ policy: {
45
+ ...policy,
46
+ allowlistedTools: `${policy.allowlistedTools.length} tools`,
47
+ denylistedTools: `${policy.denylistedTools.length} tools`,
48
+ },
49
+ });
50
+ try {
51
+ const validation = policyEnforcer.validateScript(request.script);
52
+ if (!validation.valid) {
53
+ tracer.emitEvent("script_validation_failed", {
54
+ issues: validation.issues,
55
+ });
56
+ return {
57
+ success: false,
58
+ error: `Script validation failed: ${validation.issues.join(", ")}`,
59
+ result: null,
60
+ trace: tracer.getTrace(),
61
+ artifacts: [],
62
+ consoleOutput: [],
63
+ };
64
+ }
65
+ tracer.emitEvent("script_validation_passed", {});
66
+ const context = new SandboxContext_1.SandboxContext(this.toolsService, this.clients, tracer, policyEnforcer);
67
+ const startTime = Date.now();
68
+ const timeoutMs = quotas.maxExecutionTimeMs;
69
+ const result = await this.executeWithTimeout(request.script, context, timeoutMs, tracer, policyEnforcer);
70
+ const executionTime = Date.now() - startTime;
71
+ tracer.emitEvent("execution_complete", {
72
+ executionTimeMs: executionTime,
73
+ finalUsage: policyEnforcer.getUsage(),
74
+ });
75
+ return {
76
+ success: true,
77
+ error: null,
78
+ result,
79
+ trace: tracer.getTrace(),
80
+ artifacts: context.getArtifacts(),
81
+ consoleOutput: context.getConsoleOutput(),
82
+ };
83
+ }
84
+ catch (error) {
85
+ const errorMessage = error instanceof Error ? error.message : String(error);
86
+ tracer.emitEvent("execution_error", {
87
+ error: errorMessage,
88
+ finalUsage: policyEnforcer.getUsage(),
89
+ });
90
+ return {
91
+ success: false,
92
+ error: errorMessage,
93
+ result: null,
94
+ trace: tracer.getTrace(),
95
+ artifacts: [],
96
+ consoleOutput: [],
97
+ };
98
+ }
99
+ }
100
+ async executeWithTimeout(script, context, timeoutMs, tracer, policyEnforcer) {
101
+ return new Promise((resolve, reject) => {
102
+ const timeoutId = setTimeout(() => {
103
+ tracer.emitEvent("execution_timeout", { timeoutMs });
104
+ reject(new Error(`Script execution timed out after ${timeoutMs}ms`));
105
+ }, timeoutMs);
106
+ this.executeScriptSecure(script, context, tracer, policyEnforcer)
107
+ .then((result) => {
108
+ clearTimeout(timeoutId);
109
+ resolve(result);
110
+ })
111
+ .catch((error) => {
112
+ clearTimeout(timeoutId);
113
+ reject(error);
114
+ });
115
+ });
116
+ }
117
+ async executeScriptSecure(script, context, tracer, policyEnforcer) {
118
+ tracer.emitEvent("secure_execution_start", {
119
+ note: "Using isolated-vm for secure execution",
120
+ });
121
+ const isolate = new isolated_vm_1.default.Isolate({
122
+ memoryLimit: policyEnforcer.getQuotas().maxMemoryMb,
123
+ });
124
+ try {
125
+ const vmContext = await isolate.createContext();
126
+ tracer.emitEvent("vm_context_created", {});
127
+ await this.setupIsolatedContext(vmContext, context, tracer);
128
+ tracer.emitEvent("script_compilation_start", {});
129
+ const wrappedScript = `
130
+ (async function() {
131
+ "use strict";
132
+ ${script}
133
+ })()
134
+ `;
135
+ const compiledScript = await isolate.compileScript(wrappedScript);
136
+ tracer.emitEvent("script_compilation_complete", {});
137
+ tracer.emitEvent("script_execution_start", {});
138
+ const result = await compiledScript.run(vmContext, {
139
+ timeout: policyEnforcer.getQuotas().maxExecutionTimeMs,
140
+ promise: true,
141
+ copy: true,
142
+ });
143
+ tracer.emitEvent("script_execution_complete", {
144
+ resultType: typeof result,
145
+ });
146
+ return result;
147
+ }
148
+ finally {
149
+ isolate.dispose();
150
+ tracer.emitEvent("vm_cleanup_complete", {});
151
+ }
152
+ }
153
+ async setupIsolatedContext(vmContext, sandboxContext, tracer) {
154
+ tracer.emitEvent("context_setup_start", {});
155
+ const globalRef = vmContext.global;
156
+ await globalRef.set("globalThis", globalRef.derefInto());
157
+ const exposeAsync = async (name, fn) => {
158
+ await globalRef.set(`__host_${name}`, new isolated_vm_1.default.Reference(async (...args) => {
159
+ const result = await fn(...args);
160
+ return new isolated_vm_1.default.ExternalCopy(result).copyInto();
161
+ }));
162
+ await vmContext.eval(`
163
+ globalThis.${name} = (...a) =>
164
+ __host_${name}.apply(undefined, a,
165
+ { arguments: { copy: true }, result: { promise: true, copy: true } });
166
+ `);
167
+ };
168
+ const exposeSync = async (name, fn) => {
169
+ await globalRef.set(`__host_${name}`, new isolated_vm_1.default.Reference((...args) => {
170
+ const result = fn(...args);
171
+ return new isolated_vm_1.default.ExternalCopy(result).copyInto();
172
+ }));
173
+ await vmContext.eval(`
174
+ globalThis.${name} = (...a) =>
175
+ __host_${name}.apply(undefined, a,
176
+ { arguments: { copy: true }, result: { copy: true } });
177
+ `);
178
+ };
179
+ await exposeAsync("callTool", async (tool, params) => {
180
+ const { functionResp } = await sandboxContext.callTool(tool, params);
181
+ return functionResp;
182
+ });
183
+ await exposeAsync("llm", (messages, options) => sandboxContext.llm(messages, options || {}));
184
+ await exposeAsync("sleep", (ms) => sandboxContext.sleep(ms));
185
+ await exposeSync("createArtifact", (name, content, type) => sandboxContext.createArtifact(name, content, type));
186
+ await exposeSync("getQuotaUsage", () => sandboxContext.getQuotaUsage());
187
+ for (const level of ["log", "info", "warn", "error"]) {
188
+ await globalRef.set(`__console_${level}`, new isolated_vm_1.default.Reference((...args) => sandboxContext.console[level](...args)));
189
+ }
190
+ await vmContext.eval(`
191
+ globalThis.console = {};
192
+ for (const lvl of ["log", "info", "warn", "error"]) {
193
+ globalThis.console[lvl] = (...a) =>
194
+ globalThis["__console_" + lvl].apply(undefined, a,
195
+ { arguments: { copy: true } });
196
+ }
197
+ `);
198
+ tracer.emitEvent("context_setup_complete", {});
199
+ }
200
+ async executeScriptFallback(script, context, tracer, policyEnforcer) {
201
+ throw new Error("Isolated-vm execution failed, no fallback available");
202
+ }
203
+ getDefaultQuotas() {
204
+ return { ...this.defaultQuotas };
205
+ }
206
+ getDefaultPolicy() {
207
+ return { ...this.defaultPolicy };
208
+ }
209
+ }
210
+ exports.ScriptExecutor = ScriptExecutor;
211
+ //# sourceMappingURL=ScriptExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptExecutor.js","sourceRoot":"","sources":["../../../../src/services/script-execution/ScriptExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ResourceQuotas, SecurityPolicy, QuotaUsage, PolicyViolation } from './types';
2
+ export declare class ScriptPolicyEnforcer {
3
+ private quotas;
4
+ private policy;
5
+ private usage;
6
+ private violations;
7
+ constructor(quotas: ResourceQuotas, policy: SecurityPolicy);
8
+ checkToolCall(toolName: string): boolean;
9
+ recordToolCall(): void;
10
+ checkTokenUsage(tokens: number): boolean;
11
+ recordTokenUsage(tokens: number): void;
12
+ checkExecutionTime(currentTimeMs: number): boolean;
13
+ checkCost(additionalCost: number): boolean;
14
+ recordCost(cost: number): void;
15
+ getUsage(): QuotaUsage;
16
+ getQuotas(): ResourceQuotas;
17
+ getViolations(): PolicyViolation[];
18
+ hasViolations(): boolean;
19
+ getLastViolation(): PolicyViolation | undefined;
20
+ resetUsage(): void;
21
+ resetViolations(): void;
22
+ validateScript(scriptContent: string): {
23
+ valid: boolean;
24
+ issues: string[];
25
+ };
26
+ private recordViolation;
27
+ }