@superblocksteam/vite-plugin-file-sync 2.0.51 → 2.0.52-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js +36 -7
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts +28 -3
- package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/generate-api-source.js +109 -14
- package/dist/ai-service/agent/subagents/apis/generate-api-source.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/prompt-builder.d.ts +1 -1
- package/dist/ai-service/agent/subagents/apis/prompt-builder.js +2 -2
- package/dist/ai-service/agent/subagents/apis/state.d.ts +10 -0
- package/dist/ai-service/agent/subagents/apis/state.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts +1 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.js +294 -5
- package/dist/ai-service/agent/subagents/apis/system-prompt.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.d.ts +2 -0
- package/dist/ai-service/agent/tools/apis/build-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.js +95 -13
- package/dist/ai-service/agent/tools/apis/build-api.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/finalize-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/finalize-api.js +13 -4
- package/dist/ai-service/agent/tools/apis/finalize-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-debug.js +64 -2
- package/dist/ai-service/agent/tools/build-debug.js.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.js +12 -0
- package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.js +43 -0
- package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.js +6 -0
- package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.js +6 -0
- package/dist/ai-service/agent/tools/build-write-file.js.map +1 -1
- package/dist/ai-service/agent/tools/debug-cache.d.ts +42 -0
- package/dist/ai-service/agent/tools/debug-cache.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/debug-cache.js +121 -14
- package/dist/ai-service/agent/tools/debug-cache.js.map +1 -1
- package/dist/ai-service/agent/tools/index.d.ts +1 -0
- package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/index.js +1 -0
- package/dist/ai-service/agent/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +9 -5
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.js +109 -7
- package/dist/ai-service/agent/tools/integrations/execute-request.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/index.d.ts +1 -1
- package/dist/ai-service/agent/tools/integrations/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/index.js +1 -1
- package/dist/ai-service/agent/tools/integrations/index.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/metadata.d.ts +0 -4
- package/dist/ai-service/agent/tools/integrations/metadata.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/metadata.js +0 -44
- package/dist/ai-service/agent/tools/integrations/metadata.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +45 -10
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.js +14 -5
- package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
- package/dist/ai-service/agent/tools2/entity-permissions.d.ts +172 -0
- package/dist/ai-service/agent/tools2/entity-permissions.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/entity-permissions.js +144 -0
- package/dist/ai-service/agent/tools2/entity-permissions.js.map +1 -0
- package/dist/ai-service/agent/tools2/example.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/example.js +25 -6
- package/dist/ai-service/agent/tools2/example.js.map +1 -1
- package/dist/ai-service/agent/tools2/index.d.ts +4 -2
- package/dist/ai-service/agent/tools2/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/index.js +2 -1
- package/dist/ai-service/agent/tools2/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/registry.d.ts +47 -0
- package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/registry.js +115 -19
- package/dist/ai-service/agent/tools2/registry.js.map +1 -1
- package/dist/ai-service/agent/tools2/test-utils.d.ts +7 -0
- package/dist/ai-service/agent/tools2/test-utils.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/test-utils.js +10 -0
- package/dist/ai-service/agent/tools2/test-utils.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js +17 -9
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +4 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +224 -26
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata-ripgrep.d.ts +18 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata-ripgrep.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata-ripgrep.js +837 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata-ripgrep.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts +96 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js +437 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js.map +1 -0
- package/dist/ai-service/agent/tools2/types.d.ts +116 -6
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/types.js +15 -0
- package/dist/ai-service/agent/tools2/types.js.map +1 -1
- package/dist/ai-service/agent/tools2/utils.d.ts +9 -0
- package/dist/ai-service/agent/tools2/utils.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/utils.js +11 -0
- package/dist/ai-service/agent/tools2/utils.js.map +1 -0
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +47 -1
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/const.d.ts +0 -1
- package/dist/ai-service/const.d.ts.map +1 -1
- package/dist/ai-service/const.js +0 -1
- package/dist/ai-service/const.js.map +1 -1
- package/dist/ai-service/index.d.ts +11 -0
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +51 -3
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/metadata-storage/index.d.ts +25 -0
- package/dist/ai-service/integrations/metadata-storage/index.d.ts.map +1 -0
- package/dist/ai-service/integrations/metadata-storage/index.js +2 -0
- package/dist/ai-service/integrations/metadata-storage/index.js.map +1 -0
- package/dist/ai-service/integrations/metadata-storage/local.d.ts +53 -0
- package/dist/ai-service/integrations/metadata-storage/local.d.ts.map +1 -0
- package/dist/ai-service/integrations/metadata-storage/local.js +315 -0
- package/dist/ai-service/integrations/metadata-storage/local.js.map +1 -0
- package/dist/ai-service/integrations/store.d.ts +17 -14
- package/dist/ai-service/integrations/store.d.ts.map +1 -1
- package/dist/ai-service/integrations/store.js +124 -131
- package/dist/ai-service/integrations/store.js.map +1 -1
- package/dist/ai-service/llm/utils.js +1 -1
- package/dist/ai-service/llm/utils.js.map +1 -1
- package/dist/ai-service/llmobs/helpers.d.ts.map +1 -1
- package/dist/ai-service/llmobs/helpers.js +17 -23
- package/dist/ai-service/llmobs/helpers.js.map +1 -1
- package/dist/ai-service/llmobs/middleware/stream-text.d.ts.map +1 -1
- package/dist/ai-service/llmobs/middleware/stream-text.js +1 -0
- package/dist/ai-service/llmobs/middleware/stream-text.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +6 -2
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +4 -2
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +10 -4
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +16 -7
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.js +11 -2
- package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js +0 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js.map +1 -1
- package/dist/ai-service/types.d.ts +1 -0
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/ai-service/types.js.map +1 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +12 -0
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-helpers.d.ts.map +1 -1
- package/dist/file-system-helpers.js +1 -0
- package/dist/file-system-helpers.js.map +1 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +6 -0
- package/dist/socket-manager.js.map +1 -1
- package/dist/sync-service/index.d.ts +8 -0
- package/dist/sync-service/index.d.ts.map +1 -1
- package/dist/sync-service/index.js +15 -0
- package/dist/sync-service/index.js.map +1 -1
- package/dist/util/open-api.d.ts +2 -46
- package/dist/util/open-api.d.ts.map +1 -1
- package/dist/util/open-api.js +1 -114
- package/dist/util/open-api.js.map +1 -1
- package/package.json +7 -7
- package/dist/ai-service/integrations/metadata/database.d.ts +0 -15
- package/dist/ai-service/integrations/metadata/database.d.ts.map +0 -1
- package/dist/ai-service/integrations/metadata/database.js +0 -121
- package/dist/ai-service/integrations/metadata/database.js.map +0 -1
- package/dist/ai-service/integrations/metadata/databricks.d.ts +0 -25
- package/dist/ai-service/integrations/metadata/databricks.d.ts.map +0 -1
- package/dist/ai-service/integrations/metadata/databricks.js +0 -174
- package/dist/ai-service/integrations/metadata/databricks.js.map +0 -1
- package/dist/ai-service/integrations/metadata/graphql-based.d.ts +0 -16
- package/dist/ai-service/integrations/metadata/graphql-based.d.ts.map +0 -1
- package/dist/ai-service/integrations/metadata/graphql-based.js +0 -383
- package/dist/ai-service/integrations/metadata/graphql-based.js.map +0 -1
- package/dist/ai-service/integrations/metadata/index.d.ts +0 -9
- package/dist/ai-service/integrations/metadata/index.d.ts.map +0 -1
- package/dist/ai-service/integrations/metadata/index.js +0 -7
- package/dist/ai-service/integrations/metadata/index.js.map +0 -1
- package/dist/ai-service/integrations/metadata/llm-utils.d.ts +0 -24
- package/dist/ai-service/integrations/metadata/llm-utils.d.ts.map +0 -1
- package/dist/ai-service/integrations/metadata/llm-utils.js +0 -45
- package/dist/ai-service/integrations/metadata/llm-utils.js.map +0 -1
- package/dist/ai-service/integrations/metadata/open-api.d.ts +0 -17
- package/dist/ai-service/integrations/metadata/open-api.d.ts.map +0 -1
- package/dist/ai-service/integrations/metadata/open-api.js +0 -62
- package/dist/ai-service/integrations/metadata/open-api.js.map +0 -1
- package/dist/ai-service/integrations/metadata/table-based.d.ts +0 -10
- package/dist/ai-service/integrations/metadata/table-based.d.ts.map +0 -1
- package/dist/ai-service/integrations/metadata/table-based.js +0 -27
- package/dist/ai-service/integrations/metadata/table-based.js.map +0 -1
- package/dist/ai-service/prompt-builder-service/builders/dbschema-intent.d.ts +0 -19
- package/dist/ai-service/prompt-builder-service/builders/dbschema-intent.d.ts.map +0 -1
- package/dist/ai-service/prompt-builder-service/builders/dbschema-intent.js +0 -145
- package/dist/ai-service/prompt-builder-service/builders/dbschema-intent.js.map +0 -1
- package/dist/ai-service/prompt-builder-service/builders/openapi-intent.d.ts +0 -19
- package/dist/ai-service/prompt-builder-service/builders/openapi-intent.d.ts.map +0 -1
- package/dist/ai-service/prompt-builder-service/builders/openapi-intent.js +0 -41
- package/dist/ai-service/prompt-builder-service/builders/openapi-intent.js.map +0 -1
- package/dist/ai-service/prompt-builder-service/index.d.ts +0 -3
- package/dist/ai-service/prompt-builder-service/index.d.ts.map +0 -1
- package/dist/ai-service/prompt-builder-service/index.js +0 -3
- package/dist/ai-service/prompt-builder-service/index.js.map +0 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OperationQueue } from "../../../util/operation-queue.js";
|
|
2
|
+
import { ToolNamePermissionKeyStrategy, } from "./entity-permissions.js";
|
|
3
|
+
import { PermissionLevel, ToolPermissionResponse, ToolExecutionError, } from "./types.js";
|
|
2
4
|
/**
|
|
3
5
|
* Central registry for tools with access control.
|
|
4
6
|
*
|
|
@@ -14,6 +16,9 @@ export class ToolRegistry {
|
|
|
14
16
|
accessRules = [];
|
|
15
17
|
middleware = [];
|
|
16
18
|
promptHandler;
|
|
19
|
+
promptQueue = new OperationQueue();
|
|
20
|
+
entityPermissionStore;
|
|
21
|
+
scopeStrategy = new ToolNamePermissionKeyStrategy();
|
|
17
22
|
/**
|
|
18
23
|
* Register a tool factory and optionally instantiate it immediately.
|
|
19
24
|
*
|
|
@@ -183,7 +188,32 @@ export class ToolRegistry {
|
|
|
183
188
|
* @param handler - Prompt handler function
|
|
184
189
|
*/
|
|
185
190
|
setPromptHandler(handler) {
|
|
186
|
-
this.promptHandler = handler;
|
|
191
|
+
this.promptHandler = (tool, input, context) => this.promptQueue.enqueue(() => handler(tool, input, context));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Set entity permission store for tracking per-entity approvals.
|
|
195
|
+
*
|
|
196
|
+
* When set, tools with `extractEntities` defined will automatically
|
|
197
|
+
* check if extracted entities have been approved before execution.
|
|
198
|
+
* If any entity is not approved, the user will be prompted.
|
|
199
|
+
*
|
|
200
|
+
* @param store - Entity permission store instance
|
|
201
|
+
*/
|
|
202
|
+
setEntityPermissionStore(store) {
|
|
203
|
+
this.entityPermissionStore = store;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get permission scope for a tool.
|
|
207
|
+
*
|
|
208
|
+
* Computes the scope string using the configured strategy.
|
|
209
|
+
* This scope is used to isolate permissions between different tools/categories.
|
|
210
|
+
*
|
|
211
|
+
* @param tool - Tool to get scope for
|
|
212
|
+
* @returns Permission scope string
|
|
213
|
+
*/
|
|
214
|
+
getToolPermissionScope(tool) {
|
|
215
|
+
const key = this.scopeStrategy.getToolPermissionKey(tool);
|
|
216
|
+
return this.scopeStrategy.formatScope(key);
|
|
187
217
|
}
|
|
188
218
|
/**
|
|
189
219
|
* Check permission level for tool execution.
|
|
@@ -250,28 +280,41 @@ export class ToolRegistry {
|
|
|
250
280
|
}
|
|
251
281
|
// Handle PROMPT
|
|
252
282
|
if (permission === PermissionLevel.PROMPT) {
|
|
253
|
-
if (
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
283
|
+
// Check if we need to prompt (or if entities are already approved)
|
|
284
|
+
const needsPrompt = this.shouldPromptForEntities(tool, input, context);
|
|
285
|
+
if (needsPrompt) {
|
|
286
|
+
// Ensure prompt handler exists
|
|
287
|
+
if (!this.promptHandler) {
|
|
288
|
+
return {
|
|
289
|
+
type: "error",
|
|
290
|
+
error: new ToolExecutionError(`Tool "${toolName}" requires user confirmation but no prompt handler registered`, { toolName, input, context }),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
// Prompt user for approval
|
|
294
|
+
const response = await this.promptHandler(tool, input, context);
|
|
295
|
+
// Handle DENY
|
|
296
|
+
if (response === ToolPermissionResponse.DENY) {
|
|
297
|
+
return {
|
|
298
|
+
type: "error",
|
|
299
|
+
error: new ToolExecutionError(`Tool "${toolName}" execution rejected by user`, { toolName, input, context }),
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// Handle ALWAYS_ALLOW - store entity approvals for future use
|
|
303
|
+
if (response === ToolPermissionResponse.ALWAYS_ALLOW) {
|
|
304
|
+
this.approveEntitiesAfterPrompt(tool, input);
|
|
305
|
+
}
|
|
306
|
+
// Handle ALLOW - proceed to execution without storing permission
|
|
307
|
+
// (no special action needed, just continue to execution)
|
|
269
308
|
}
|
|
309
|
+
// If !needsPrompt, all entities already approved - proceed to execution
|
|
270
310
|
}
|
|
271
311
|
// Validate input and execute
|
|
272
312
|
try {
|
|
273
313
|
const validated = tool.inputSchema.parse(input);
|
|
274
|
-
const output = await tool.execute(validated, options
|
|
314
|
+
const output = await tool.execute(validated, options ?? {
|
|
315
|
+
toolCallId: "",
|
|
316
|
+
messages: [],
|
|
317
|
+
});
|
|
275
318
|
return {
|
|
276
319
|
type: "success",
|
|
277
320
|
data: output,
|
|
@@ -289,6 +332,57 @@ export class ToolRegistry {
|
|
|
289
332
|
};
|
|
290
333
|
}
|
|
291
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Check if we need to prompt the user for a tool with PROMPT permission.
|
|
337
|
+
*
|
|
338
|
+
* For tools with entity extraction, returns false if all entities are already
|
|
339
|
+
* approved for this tool's scope (skipping the prompt). For tools without
|
|
340
|
+
* entity extraction, always returns true (standard prompting).
|
|
341
|
+
*
|
|
342
|
+
* @param tool - Tool to check
|
|
343
|
+
* @param input - Tool input to extract entities from
|
|
344
|
+
* @returns True if we should prompt user, false if we can skip
|
|
345
|
+
*/
|
|
346
|
+
shouldPromptForEntities(tool, input, _context) {
|
|
347
|
+
// No entity system configured, use standard prompting
|
|
348
|
+
const entityPermissionStore = this.entityPermissionStore;
|
|
349
|
+
if (!tool.extractEntities || !entityPermissionStore) {
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
const entities = tool.extractEntities(input);
|
|
353
|
+
// No entities extracted, use standard prompting
|
|
354
|
+
if (entities.length === 0) {
|
|
355
|
+
return true;
|
|
356
|
+
}
|
|
357
|
+
// Compute scope for this tool
|
|
358
|
+
const scope = this.getToolPermissionScope(tool);
|
|
359
|
+
// Check if any entities are not approved for this scope
|
|
360
|
+
return entities.some((entity) => {
|
|
361
|
+
return !entityPermissionStore.isApproved(entity.type, entity.id, scope);
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Store entity approvals after successful user prompt.
|
|
366
|
+
*
|
|
367
|
+
* Extracts entities from tool input and marks them as approved for this
|
|
368
|
+
* tool's scope in the entity permission store. No-op if entity system
|
|
369
|
+
* is not configured.
|
|
370
|
+
*
|
|
371
|
+
* @param tool - Tool that was approved
|
|
372
|
+
* @param input - Tool input to extract entities from
|
|
373
|
+
*/
|
|
374
|
+
approveEntitiesAfterPrompt(tool, input) {
|
|
375
|
+
// No entity system configured
|
|
376
|
+
if (!tool.extractEntities || !this.entityPermissionStore) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
// Compute scope for this tool
|
|
380
|
+
const scope = this.getToolPermissionScope(tool);
|
|
381
|
+
const entities = tool.extractEntities(input);
|
|
382
|
+
for (const entity of entities) {
|
|
383
|
+
this.entityPermissionStore.approve(entity.type, entity.id, scope);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
292
386
|
/**
|
|
293
387
|
* Wrap a tool to enforce access control on execute().
|
|
294
388
|
*
|
|
@@ -343,7 +437,9 @@ export class ToolRegistry {
|
|
|
343
437
|
this.factories.clear();
|
|
344
438
|
this.instances.clear();
|
|
345
439
|
this.accessRules = [];
|
|
440
|
+
this.middleware = [];
|
|
346
441
|
this.promptHandler = undefined;
|
|
442
|
+
this.entityPermissionStore = undefined;
|
|
347
443
|
}
|
|
348
444
|
}
|
|
349
445
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,eAAe,EACf,kBAAkB,GAEnB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EACL,6BAA6B,GAG9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAOL,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GAEnB,MAAM,YAAY,CAAC;AAIpB;;;;;;;;GAQG;AAEH,MAAM,OAAO,YAAY;IACf,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,SAAS,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,WAAW,GAAwB,EAAE,CAAC;IACtC,UAAU,GAAqB,EAAE,CAAC;IAClC,aAAa,CAAiB;IAC9B,WAAW,GAAG,IAAI,cAAc,EAAE,CAAC;IACnC,qBAAqB,CAAyB;IAC9C,aAAa,GACnB,IAAI,6BAA6B,EAAE,CAAC;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAoB,EAAE,GAAG,IAAW;QAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1C,wDAAwD;QACxD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACzC,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,CAAC,IAAI,oBAAoB,QAAQ,CAAC,IAAI,GAAG,CACtF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,IAAS;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAC5D,CAAC;QACD,kEAAkE;QAClE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAY,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,SAAwB;QAClC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CAAC,GAAG,IAAW;QACxB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YAEzC,0CAA0C;YAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,CAAC,IAAI,oBAAoB,QAAQ,CAAC,IAAI,GAAG,CACtF,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAY,EAAE,OAA8B;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,OAA8B;QACxC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,OAA8B;QAM5C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,cAAc,CAClB,OAA8B;QAE9B,MAAM,GAAG,GAAG,OAAO,IAAI,EAAE,CAAC;QAC1B,2BAA2B;QAC3B,MAAM,YAAY,GAAqB,EAAE,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC9D,IAAI,UAAU,KAAK,eAAe,CAAC,KAAK,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,aAAa,CAAC,GAAG,KAA0B;QACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,GAAG,UAA4B;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,OAAsB;QACrC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC5C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;;;OAQG;IACH,wBAAwB,CAAC,KAA4B;QACnD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IAED;;;;;;;;OAQG;IACK,sBAAsB,CAAC,IAAU;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,eAAe,CACnB,QAAgB,EAChB,OAA6B;QAE7B,uCAAuC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,eAAe,CAAC,KAAK,CAAC;QAC/B,CAAC;QACD,IAAI,UAAU,GAAG,IAAI,EAAE,iBAAiB,IAAI,eAAe,CAAC,KAAK,CAAC;QAElE,yCAAyC;QACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEzC,4BAA4B;YAC5B,IAAI,MAAM,KAAK,eAAe,CAAC,KAAK,EAAE,CAAC;gBACrC,OAAO,eAAe,CAAC,KAAK,CAAC;YAC/B,CAAC;YAED,wCAAwC;YACxC,IAAI,MAAM,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;gBACtC,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,KAAY,EACZ,UAAgC,EAAE,EAClC,OAAyB;QAEzB,kEAAkE;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,kBAAkB,CAAC,SAAS,QAAQ,aAAa,EAAE;oBAC5D,QAAQ;oBACR,KAAK;oBACL,OAAO;iBACR,CAAC;aACH,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEjE,eAAe;QACf,IAAI,UAAU,KAAK,eAAe,CAAC,KAAK,EAAE,CAAC;YACzC,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,kBAAkB,CAC3B,SAAS,QAAQ,uCAAuC,EACxD,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAC7B;aACF,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,IAAI,UAAU,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;YAC1C,mEAAmE;YACnE,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAEvE,IAAI,WAAW,EAAE,CAAC;gBAChB,+BAA+B;gBAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACxB,OAAO;wBACL,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,IAAI,kBAAkB,CAC3B,SAAS,QAAQ,+DAA+D,EAChF,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAC7B;qBACF,CAAC;gBACJ,CAAC;gBAED,2BAA2B;gBAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBAEhE,cAAc;gBACd,IAAI,QAAQ,KAAK,sBAAsB,CAAC,IAAI,EAAE,CAAC;oBAC7C,OAAO;wBACL,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,IAAI,kBAAkB,CAC3B,SAAS,QAAQ,8BAA8B,EAC/C,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAC7B;qBACF,CAAC;gBACJ,CAAC;gBAED,8DAA8D;gBAC9D,IAAI,QAAQ,KAAK,sBAAsB,CAAC,YAAY,EAAE,CAAC;oBACrD,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/C,CAAC;gBAED,iEAAiE;gBACjE,yDAAyD;YAC3D,CAAC;YACD,wEAAwE;QAC1E,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,SAAS,EACT,OAAO,IAAI;gBACT,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;aACb,CACF,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,MAAgB;aACvB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,kBAAkB,CAAC;oBAC5B,QAAQ;oBACR,KAAK;oBACL,OAAO;oBACP,KAAK,EAAE,KAAK;iBACb,CAAC;aACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACK,uBAAuB,CAC7B,IAAU,EACV,KAAU,EACV,QAA+B;QAE/B,sDAAsD;QACtD,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE7C,gDAAgD;QAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8BAA8B;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAEhD,wDAAwD;QACxD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACK,0BAA0B,CAAC,IAAU,EAAE,KAAU;QACvD,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QAED,8BAA8B;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACK,QAAQ,CAAiB,IAAO,EAAE,OAA6B;QACrE,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,OAAyB,EAAE,EAAE;gBACvD,yEAAyE;gBACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACtE,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC5B,MAAM,MAAM,CAAC,KAAK,CAAC;gBACrB,CAAC;gBACD,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,eAAe,CAAC,IAAY;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAEO,eAAe,CAAC,IAAoB;QAC1C,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,qEAAqE;QACrE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToolCallOptions } from "ai";
|
|
2
|
+
/**
|
|
3
|
+
* Helper to create dummy options for tests.
|
|
4
|
+
* Provides the required ToolCallOptions structure for tool execute calls.
|
|
5
|
+
*/
|
|
6
|
+
export declare const createDummyOptions: () => ToolCallOptions;
|
|
7
|
+
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,eAIpC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper to create dummy options for tests.
|
|
3
|
+
* Provides the required ToolCallOptions structure for tool execute calls.
|
|
4
|
+
*/
|
|
5
|
+
export const createDummyOptions = () => ({
|
|
6
|
+
toolCallId: "test-call-id",
|
|
7
|
+
messages: [],
|
|
8
|
+
abortSignal: new AbortController().signal,
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=test-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/test-utils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAoB,EAAE,CAAC,CAAC;IACxD,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;CAC1C,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-multi-choice.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/ask-multi-choice.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;
|
|
1
|
+
{"version":3,"file":"ask-multi-choice.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/ask-multi-choice.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;GA8ErC,CAAC"}
|
|
@@ -8,22 +8,30 @@ export const askMultiChoiceToolFactory = createToolFactory("askMultiChoice", (cl
|
|
|
8
8
|
const { chatSessionStore } = services;
|
|
9
9
|
return {
|
|
10
10
|
description: `
|
|
11
|
-
ALWAYS USE THIS TOOL when you need to ask the user ANY question.
|
|
12
|
-
|
|
13
11
|
This tool presents the user with a question and multiple choice options.
|
|
14
|
-
Even for seemingly open-ended questions, you should come up with 3
|
|
12
|
+
Even for seemingly open-ended questions, you should come up with 2-3 suggested choices to make it easier for the user.
|
|
15
13
|
|
|
16
14
|
For open-ended questions:
|
|
17
|
-
- Come up with 3
|
|
18
|
-
-
|
|
19
|
-
-
|
|
15
|
+
- Come up with 2-3 reasonable suggestions based on common patterns
|
|
16
|
+
- If there are many possible options, present the most common/relevant ones
|
|
17
|
+
- If you need to present more choices, add "More choices" as the last option, which allows you to ask the same question again with a different set of choices
|
|
18
|
+
- The user can also type their own response directly instead of selecting from the choices
|
|
19
|
+
|
|
20
|
+
When NOT to use this tool:
|
|
21
|
+
- If the user points out a mistake or bug, don't ask them how to fix it; instead, if in BUILD mode, fix it directly. If in PLAN mode, call exitPlanMode with a (very) brief plan to address it.
|
|
22
|
+
- Don't ask the user for input on low-level implementation details.
|
|
20
23
|
|
|
21
24
|
IMPORTANT: When asking about datasources/integrations:
|
|
22
25
|
- FIRST use the searchIntegrations tool to discover what datasources are available
|
|
23
26
|
- THEN present the available options to the user in your multi-choice question
|
|
24
27
|
- DON'T ask the user about datasources without first checking what's available
|
|
28
|
+
- DON'T ask the user about metadata/schemas without first checking what's available (use readIntegrationMetadata tool)
|
|
29
|
+
- NEVER put a "custom" or "provide your own" option; this is redundant since the user can always type their own response
|
|
30
|
+
|
|
31
|
+
After the user makes a selection:
|
|
32
|
+
- ALWAYS acknowledge their selection in your next message (e.g., "Got it, I'll use PostgreSQL" or "Understood, I'll create a dashboard layout")
|
|
33
|
+
- Then proceed with the task based on their choice
|
|
25
34
|
|
|
26
|
-
NEVER ask the user to type out a response when you can provide clear options.
|
|
27
35
|
The user will select one (or more) of the choices, and their selection will be sent back to you as a message.
|
|
28
36
|
`,
|
|
29
37
|
category: ToolCategory.GENERAL,
|
|
@@ -36,8 +44,8 @@ The user will select one (or more) of the choices, and their selection will be s
|
|
|
36
44
|
choices: z
|
|
37
45
|
.array(z.string())
|
|
38
46
|
.min(2)
|
|
39
|
-
.max(
|
|
40
|
-
.describe("List of 2-
|
|
47
|
+
.max(3)
|
|
48
|
+
.describe("List of 2-3 choices for the user to select from. Each choice should be a clear, concise option. If there are more options to present, include 'More choices' as the last option to allow presenting additional choices in a follow-up question."),
|
|
41
49
|
selectionType: z
|
|
42
50
|
.enum(["single", "multiple"])
|
|
43
51
|
.default("single")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-multi-choice.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/ask-multi-choice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI/E;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CACxD,gBAAgB,EAChB,CAAC,KAAY,EAAE,QAAiC,EAAE,EAAE;IAClD,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,OAAO;QACL,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"ask-multi-choice.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/ask-multi-choice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI/E;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CACxD,gBAAgB,EAChB,CAAC,KAAY,EAAE,QAAiC,EAAE,EAAE;IAClD,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,OAAO;QACL,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BlB;QACK,QAAQ,EAAE,YAAY,CAAC,OAAO;QAC9B,iBAAiB,EAAE,eAAe,CAAC,KAAK;QACxC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,CACP,6DAA6D,CAC9D;YACH,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,iPAAiP,CAClP;YACH,aAAa,EAAE,CAAC;iBACb,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;iBAC5B,OAAO,CAAC,QAAQ,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CACP,yHAAyH,CAC1H;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE;YACtD,2FAA2F;YAC3F,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,cAAuB;gBAC7B,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,OAAO;gBACd,OAAO;gBACP,aAAa;aACd,CAAC;YAEF,2EAA2E;YAC3E,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACxE,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;YAE/B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,aAAa,OAAO,CAAC,MAAM,6CAA6C;aAClF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* Exit Plan Mode - prompts the user to exit Plan mode when they have finished planning and are ready to code.
|
|
3
3
|
*/
|
|
4
4
|
export declare const exitPlanModeToolFactory: import("../types.js").ToolFactory<import("../types.js").Tool<{
|
|
5
|
-
|
|
5
|
+
title: string;
|
|
6
|
+
complexity: "Small" | "Medium" | "Large" | "Extra Large";
|
|
7
|
+
integrationIds: string[];
|
|
6
8
|
}, {
|
|
7
9
|
success: boolean;
|
|
10
|
+
plan: string;
|
|
8
11
|
message: string;
|
|
9
12
|
}>>;
|
|
10
13
|
//# sourceMappingURL=exit-plan-mode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-plan-mode.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/exit-plan-mode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exit-plan-mode.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/exit-plan-mode.ts"],"names":[],"mappings":"AAyFA;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;GA+OnC,CAAC"}
|
|
@@ -1,38 +1,89 @@
|
|
|
1
|
+
import { smoothStream, tool } from "ai";
|
|
1
2
|
import { z } from "zod";
|
|
3
|
+
import { getErrorMeta, getLogger } from "../../../../util/logger.js";
|
|
4
|
+
import { tracedStreamText } from "../../../llmobs/helpers.js";
|
|
2
5
|
import { sendUserMessageChannel } from "../../../state-machine/helpers/peer.js";
|
|
6
|
+
import { hasToolSuccess } from "../../../util/stop-condition.js";
|
|
3
7
|
import { createToolFactory, PermissionLevel, ToolCategory } from "../types.js";
|
|
8
|
+
const PlanComplexityLevels = [
|
|
9
|
+
"Small",
|
|
10
|
+
"Medium",
|
|
11
|
+
"Large",
|
|
12
|
+
"Extra Large",
|
|
13
|
+
];
|
|
14
|
+
const planComplexityToEstimate = {
|
|
15
|
+
Small: "2 minutes",
|
|
16
|
+
Medium: "4 minutes",
|
|
17
|
+
Large: "7 minutes",
|
|
18
|
+
"Extra Large": "10+ minutes",
|
|
19
|
+
};
|
|
20
|
+
function getTimeEstimateForComplexity(complexity) {
|
|
21
|
+
return planComplexityToEstimate[complexity];
|
|
22
|
+
}
|
|
23
|
+
function formatIntegrationMetadata(metadata) {
|
|
24
|
+
if (!metadata) {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
const entries = Object.entries(metadata).filter(([, value]) => value !== undefined && value !== null && value !== "");
|
|
28
|
+
if (entries.length === 0) {
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
const formattedEntries = entries.slice(0, 5).map(([key, value]) => {
|
|
32
|
+
const serialized = typeof value === "string"
|
|
33
|
+
? value
|
|
34
|
+
: (() => {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.stringify(value);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return String(value);
|
|
40
|
+
}
|
|
41
|
+
})();
|
|
42
|
+
const condensed = serialized.replace(/\s+/g, " ").trim();
|
|
43
|
+
const truncated = condensed.length > 160
|
|
44
|
+
? `${condensed.slice(0, 157).trimEnd()}...`
|
|
45
|
+
: condensed;
|
|
46
|
+
return `${key}: ${truncated}`;
|
|
47
|
+
});
|
|
48
|
+
if (entries.length > 5) {
|
|
49
|
+
formattedEntries.push("..."); // indicate additional metadata omitted for brevity
|
|
50
|
+
}
|
|
51
|
+
return formattedEntries.join("; ");
|
|
52
|
+
}
|
|
53
|
+
function formatIntegrationForPlanPrompt(integration) {
|
|
54
|
+
const { name, id, type, metadata } = integration;
|
|
55
|
+
const metadataSummary = formatIntegrationMetadata(metadata);
|
|
56
|
+
let details = `- ${name}\n tag: @${name}[id=${id}]\n type: ${type}`;
|
|
57
|
+
if (metadataSummary) {
|
|
58
|
+
details += `\n metadata: ${metadataSummary}`;
|
|
59
|
+
}
|
|
60
|
+
return details;
|
|
61
|
+
}
|
|
4
62
|
/**
|
|
5
63
|
* Exit Plan Mode - prompts the user to exit Plan mode when they have finished planning and are ready to code.
|
|
6
64
|
*/
|
|
7
65
|
export const exitPlanModeToolFactory = createToolFactory("exitPlanMode", (clark, services) => {
|
|
8
|
-
const { chatSessionStore } = services;
|
|
9
66
|
return {
|
|
10
67
|
description: `
|
|
11
|
-
Use this tool to
|
|
12
|
-
|
|
13
|
-
for the coding task in clear, concise language, and noting any important implementation details.
|
|
14
|
-
|
|
15
|
-
DO NOT give low-level implementation details - the plan should focus on WHAT to build, not HOW to build it.
|
|
16
|
-
|
|
17
|
-
This tool presents your plan with a "Build It" button that allows the user to switch to Build mode.
|
|
68
|
+
Use this tool to delegate to a planning expert who will generate a plan and present it to the user.
|
|
69
|
+
This tool presents a plan with a "Build It" button that allows the user to switch to Build mode.
|
|
18
70
|
NEVER output a plan directly as text - ALWAYS use this tool to present plans properly.
|
|
19
71
|
|
|
20
72
|
IMPORTANT: Only use this tool AFTER you have gathered enough information to create a specific plan.
|
|
21
|
-
You must ask at least 3 clarifying questions using askMultiChoice before presenting a plan.
|
|
22
73
|
|
|
23
74
|
Before presenting a plan:
|
|
24
75
|
- If the user's request is ambiguous or has multiple interpretations, use askMultiChoice to clarify
|
|
25
76
|
- If there are unknowns about requirements, preferences, or approach, use askMultiChoice first
|
|
26
77
|
- If design decisions need to be made, ask the user for their preferences first
|
|
27
78
|
- Gather enough context to create a concrete, specific plan
|
|
79
|
+
- IMPORTANT: Check metadata for relevant integrations to validate feasibility and inform the plan
|
|
28
80
|
|
|
29
81
|
When to use this tool:
|
|
30
82
|
- You are in Plan mode
|
|
31
83
|
- You have a clear understanding of the user's requirements
|
|
32
84
|
- You have resolved any ambiguities through askMultiChoice
|
|
33
85
|
- You have asked at least 3 clarifying questions
|
|
34
|
-
- You have
|
|
35
|
-
- The plan outlines concrete implementation steps
|
|
86
|
+
- You have checked relevant integration metadata to inform the plan
|
|
36
87
|
|
|
37
88
|
When NOT to use:
|
|
38
89
|
- When there are still unknowns or ambiguities - use askMultiChoice instead
|
|
@@ -40,34 +91,181 @@ When NOT to use:
|
|
|
40
91
|
- For research tasks (gathering information, searching files, understanding codebase)
|
|
41
92
|
- When answering questions without a coding plan
|
|
42
93
|
- When you're already in Build mode
|
|
94
|
+
- When you haven't checked relevant integration metadata
|
|
95
|
+
|
|
96
|
+
You must provide an estimate of the plan complexity when calling this tool.
|
|
97
|
+
There are four levels of complexity:
|
|
98
|
+
1. Small: For small tweaks and bug fixes, such as changing a filter or fixing a component bug.
|
|
99
|
+
2. Medium: For moderate features or enhancements, such as adding a new data-driven component to a page.
|
|
100
|
+
3. Large: For significant features or multi-part tasks, such as creating or overhauling a page and associated components and APIs.
|
|
101
|
+
4. Extra Large: For major projects or overhauls, such as building a new application section with multiple pages, components, and backend services.
|
|
43
102
|
|
|
44
103
|
After calling this tool, the user will either:
|
|
45
104
|
- Click "Build It" to switch to Build mode and execute the plan
|
|
46
105
|
- Provide feedback to refine the plan further
|
|
106
|
+
|
|
107
|
+
Remember: Always use this tool to present plans - never output plans directly as text.
|
|
108
|
+
IF THE TOOL CALL FAILS, DO NOT ATTEMPT TO GENERATE THE PLAN YOURSELF. Call the tool again.
|
|
47
109
|
`,
|
|
48
110
|
category: ToolCategory.PLAN,
|
|
49
111
|
defaultPermission: PermissionLevel.ALLOW,
|
|
50
112
|
readOnly: true,
|
|
51
113
|
inputSchema: z.object({
|
|
52
|
-
|
|
114
|
+
complexity: z
|
|
115
|
+
.enum(PlanComplexityLevels)
|
|
116
|
+
.describe("Your best estimate of the plan complexity"),
|
|
117
|
+
title: z
|
|
53
118
|
.string()
|
|
54
|
-
.
|
|
119
|
+
.min(1, "Plan title is required")
|
|
120
|
+
.max(160, "Plan title must be 160 characters or fewer")
|
|
121
|
+
.describe("Title to display for the plan. Should be the name of the feature or fix, eg 'Executive orders dashboard', 'User login page', 'Fix data sync bug'"),
|
|
122
|
+
integrationIds: z
|
|
123
|
+
.array(z.string())
|
|
124
|
+
.describe("List of integration IDs that may be referenced in the plan."),
|
|
55
125
|
}),
|
|
56
|
-
execute: async ({
|
|
57
|
-
|
|
58
|
-
const payload = {
|
|
59
|
-
type: "plan",
|
|
60
|
-
text: plan,
|
|
61
|
-
group: "clark",
|
|
62
|
-
};
|
|
63
|
-
// Use sendUserMessageChannel to ensure ID is generated and shared properly
|
|
126
|
+
execute: async ({ complexity, title, integrationIds }, { messages, abortSignal }) => {
|
|
127
|
+
const { chatSessionStore, llmProvider } = services;
|
|
64
128
|
const sendUserMessage = sendUserMessageChannel(clark, chatSessionStore);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
129
|
+
try {
|
|
130
|
+
const availableIntegrations = clark.context.availableIntegrations ?? [];
|
|
131
|
+
const sanitizedTitle = title.trim() || "Plan";
|
|
132
|
+
const allowedIntegrationIds = new Set(integrationIds ?? []);
|
|
133
|
+
const filteredIntegrations = availableIntegrations.filter((integration) => allowedIntegrationIds.has(integration.id));
|
|
134
|
+
const unavailableRequestedIds = [...allowedIntegrationIds].filter((id) => !availableIntegrations.some((integration) => integration.id === id));
|
|
135
|
+
if (unavailableRequestedIds.length > 0) {
|
|
136
|
+
getLogger().warn(`exitPlanMode: Requested integration IDs not available: ${unavailableRequestedIds.join(", ")}`);
|
|
137
|
+
}
|
|
138
|
+
const integrationGuidance = filteredIntegrations.length > 0
|
|
139
|
+
? `
|
|
140
|
+
Only reference the integrations listed below when they are necessary. Use the exact tag shown for each integration within relevant plan steps (e.g. "Use @Integration[id=123] to ..."). Do not reference any other integrations.
|
|
141
|
+
|
|
142
|
+
${filteredIntegrations
|
|
143
|
+
.map((integration) => formatIntegrationForPlanPrompt(integration))
|
|
144
|
+
.join("\n\n")}`
|
|
145
|
+
: "";
|
|
146
|
+
await sendUserMessage({
|
|
147
|
+
type: "plan",
|
|
148
|
+
text: "",
|
|
149
|
+
group: "clark",
|
|
150
|
+
title: sanitizedTitle,
|
|
151
|
+
integrations: filteredIntegrations,
|
|
152
|
+
streaming: true,
|
|
153
|
+
});
|
|
154
|
+
// Use plan prompt from context if available, otherwise use default
|
|
155
|
+
const baseInstructions = clark.context.planContext?.instructions ?? planPromptText;
|
|
156
|
+
if (!clark.context.planContext?.instructions) {
|
|
157
|
+
getLogger().info("Using default plan prompt for plan generation");
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
getLogger().info("Using custom plan prompt from context; appending integration guidance");
|
|
161
|
+
}
|
|
162
|
+
const planInstructions = [
|
|
163
|
+
baseInstructions.trim(),
|
|
164
|
+
`Plan title: ${sanitizedTitle}`,
|
|
165
|
+
"NEVER include a different title in your response. Begin directly with the plan content. Start with an Overview heading if applicable.",
|
|
166
|
+
integrationGuidance.trim(),
|
|
167
|
+
`The task complexity has been assessed to be '${complexity}`,
|
|
168
|
+
]
|
|
169
|
+
.filter((section) => section.length > 0)
|
|
170
|
+
.join("\n\n")
|
|
171
|
+
.trim();
|
|
172
|
+
// Append plan generation prompt
|
|
173
|
+
const planPrompt = {
|
|
174
|
+
role: "user",
|
|
175
|
+
content: planInstructions.trim(),
|
|
176
|
+
};
|
|
177
|
+
const planMessages = [...messages, planPrompt];
|
|
178
|
+
getLogger().info(`Starting plan generation stream. complexity: ${complexity}`);
|
|
179
|
+
// Stream plan generation
|
|
180
|
+
let fullPlanText = "";
|
|
181
|
+
const model = llmProvider.modelForClassification("broad_edit");
|
|
182
|
+
const stream = tracedStreamText({
|
|
183
|
+
model,
|
|
184
|
+
messages: planMessages,
|
|
185
|
+
tools: {
|
|
186
|
+
done: tool({
|
|
187
|
+
description: "Call this tool when you have finished generating the plan.",
|
|
188
|
+
inputSchema: z.object({}),
|
|
189
|
+
execute: async (_params) => {
|
|
190
|
+
if (fullPlanText.trim().length === 0) {
|
|
191
|
+
throw new Error("Cannot stop plan generation before any plan content has been generated.");
|
|
192
|
+
}
|
|
193
|
+
getLogger().info("Stop tool called - ending plan generation");
|
|
194
|
+
return {};
|
|
195
|
+
},
|
|
196
|
+
}),
|
|
197
|
+
},
|
|
198
|
+
stopWhen: hasToolSuccess("done"),
|
|
199
|
+
experimental_transform: smoothStream({ chunking: "line" }),
|
|
200
|
+
abortSignal,
|
|
201
|
+
}, clark.tracer, clark.logger);
|
|
202
|
+
// Stream plan deltas to UI
|
|
203
|
+
for await (const text of stream.textStream) {
|
|
204
|
+
await sendUserMessage({
|
|
205
|
+
type: "plan-delta",
|
|
206
|
+
text,
|
|
207
|
+
group: "clark",
|
|
208
|
+
});
|
|
209
|
+
fullPlanText += text;
|
|
210
|
+
}
|
|
211
|
+
if (!fullPlanText.trim()) {
|
|
212
|
+
throw new Error("Generated plan is empty. Please try again.");
|
|
213
|
+
}
|
|
214
|
+
getLogger().info(`Plan generation stream completed. Length: ${fullPlanText.length}`);
|
|
215
|
+
// Send complete plan message for persistence and UI state
|
|
216
|
+
const timeEstimate = getTimeEstimateForComplexity(complexity);
|
|
217
|
+
await sendUserMessage({
|
|
218
|
+
type: "plan",
|
|
219
|
+
text: fullPlanText,
|
|
220
|
+
group: "clark",
|
|
221
|
+
timeEstimate,
|
|
222
|
+
integrations: filteredIntegrations,
|
|
223
|
+
title: sanitizedTitle,
|
|
224
|
+
});
|
|
225
|
+
clark.updateContext((context) => ({
|
|
226
|
+
...context,
|
|
227
|
+
planContext: {
|
|
228
|
+
instructions: context.planContext?.instructions ?? baseInstructions,
|
|
229
|
+
plan: fullPlanText,
|
|
230
|
+
integrations: filteredIntegrations,
|
|
231
|
+
approved: false,
|
|
232
|
+
title: sanitizedTitle,
|
|
233
|
+
},
|
|
234
|
+
}));
|
|
235
|
+
return {
|
|
236
|
+
success: true,
|
|
237
|
+
plan: fullPlanText,
|
|
238
|
+
message: "Plan presented to user. Awaiting mode confirmation.",
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
getLogger().error("Failed to generate plan", getErrorMeta(error));
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
70
245
|
},
|
|
71
246
|
};
|
|
72
247
|
});
|
|
248
|
+
// This is the prompt used to generate the plan
|
|
249
|
+
const planPromptText = `
|
|
250
|
+
Based on our conversation and the information gathered, create a specific, actionable plan.
|
|
251
|
+
|
|
252
|
+
A good format for bug fixes is:
|
|
253
|
+
- Problem
|
|
254
|
+
- Solution
|
|
255
|
+
- Edge cases
|
|
256
|
+
- Success criteria
|
|
257
|
+
|
|
258
|
+
A good format for features/new functionality is:
|
|
259
|
+
- Overview
|
|
260
|
+
- Requirements
|
|
261
|
+
- Design (if applicable)
|
|
262
|
+
- Data flow (if applicable)
|
|
263
|
+
- Success criteria
|
|
264
|
+
|
|
265
|
+
Focus on WHAT to build, not HOW to build it. Focus mainly on functional requirements and only very high-level implementation details.
|
|
266
|
+
Assume the user is non-technical and avoid technical jargon. They only care about what the final outcome will be in terms of functionality and design.
|
|
267
|
+
|
|
268
|
+
Format your response in markdown with clear sections.
|
|
269
|
+
When you are finished, call the 'done'.
|
|
270
|
+
`;
|
|
73
271
|
//# sourceMappingURL=exit-plan-mode.js.map
|