sparkecoder 0.1.60 → 0.1.61
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/agent/index.d.ts +4 -3
- package/dist/agent/index.js +588 -176
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +818 -95
- package/dist/cli.js.map +1 -1
- package/dist/db/index.d.ts +3 -2
- package/dist/db/index.js.map +1 -1
- package/dist/{index-Csad1Nx4.d.ts → index-DuGtMaAJ.d.ts} +85 -4
- package/dist/index.d.ts +6 -5
- package/dist/index.js +1202 -665
- package/dist/index.js.map +1 -1
- package/dist/schema-C7Mm4Ykn.d.ts +1410 -0
- package/dist/{search-BETuS1vh.d.ts → search-C_IFImt1.d.ts} +3 -3
- package/dist/server/index.js +605 -68
- package/dist/server/index.js.map +1 -1
- package/dist/tools/index.d.ts +38 -3
- package/dist/tools/index.js +230 -2
- package/dist/tools/index.js.map +1 -1
- package/package.json +5 -3
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/(main)/page.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/api/health/route.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/embed/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/embed/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/web/.next/server/app/index.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_19289e11._.js → 2374f_03d22c16._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_b4b86c1f._.js → 2374f_0d0b1fb9._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_4858a1ea._.js → 2374f_3f7d6d28._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_51385fed._.js → 2374f_6166d14d._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_40e35a02._.js → 2374f_67b9525f._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_fb95e3c9._.js → 2374f_6b436efc._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_2f0d9f6f._.js → 2374f_784d851c._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_35475cbe._.js → 2374f_976b2ded._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_7db22cde._.js → 2374f_98eba491._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_90b8e4fb._.js → 2374f_99b7b533._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_4666c827._.js → 2374f_a1a36483._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_076f03ec._.js → 2374f_b98835eb._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_b17fce11._.js → 2374f_e19eaecc._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_d8b9ce38._.js → 2374f_e3aec189._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{[root-of-the-server]__7775f784._.js → [root-of-the-server]__4f176a16._.js} +2 -2
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__d59f831d._.js +15 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/{web_645f4b90._.js → web_693f514e._.js} +2 -2
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_a42a2651._.js +7 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_dc6ce793._.js +7 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_components_sessions-sidebar_tsx_92510070._.js +1 -1
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/standalone/web/.next/static/chunks/0358a0e7a40cfb93.css +1 -0
- package/web/.next/standalone/web/.next/static/chunks/1ecde4c0d426a635.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/20e0fa99c7a1c1fc.js +13 -0
- package/web/.next/standalone/web/.next/static/chunks/36688a049d72e8ab.js +5 -0
- package/web/.next/standalone/web/.next/static/chunks/95436454a7559b0d.js +7 -0
- package/web/.next/standalone/web/.next/static/chunks/a751ca474cc46212.js +5 -0
- package/web/.next/standalone/web/.next/static/static/chunks/0358a0e7a40cfb93.css +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/1ecde4c0d426a635.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/20e0fa99c7a1c1fc.js +13 -0
- package/web/.next/standalone/web/.next/static/static/chunks/36688a049d72e8ab.js +5 -0
- package/web/.next/standalone/web/.next/static/static/chunks/95436454a7559b0d.js +7 -0
- package/web/.next/standalone/web/.next/static/static/chunks/a751ca474cc46212.js +5 -0
- package/web/.next/standalone/web/src/components/ai-elements/complete-task-tool.tsx +126 -0
- package/web/.next/standalone/web/src/components/chat-interface.tsx +68 -3
- package/web/.next/standalone/web/src/components/sessions-sidebar.tsx +18 -1
- package/web/.next/standalone/web/src/lib/api.ts +12 -0
- package/web/.next/static/chunks/0358a0e7a40cfb93.css +1 -0
- package/web/.next/static/chunks/1ecde4c0d426a635.js +1 -0
- package/web/.next/static/chunks/20e0fa99c7a1c1fc.js +13 -0
- package/web/.next/static/chunks/36688a049d72e8ab.js +5 -0
- package/web/.next/static/chunks/95436454a7559b0d.js +7 -0
- package/web/.next/static/chunks/a751ca474cc46212.js +5 -0
- package/dist/schema-NcQknWCg.d.ts +0 -295
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__bd396152._.js +0 -15
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_9c9f0e3b._.js +0 -7
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_d08270f7._.js +0 -7
- package/web/.next/standalone/web/.next/static/chunks/2868b007ce5163fc.css +0 -1
- package/web/.next/standalone/web/.next/static/chunks/3f295b6960943c38.js +0 -1
- package/web/.next/standalone/web/.next/static/chunks/631b023d37a08635.js +0 -13
- package/web/.next/standalone/web/.next/static/chunks/a2b4737b190d1b54.js +0 -5
- package/web/.next/standalone/web/.next/static/chunks/e97212fcc8221479.js +0 -5
- package/web/.next/standalone/web/.next/static/chunks/f6e47c8a9766ce91.js +0 -7
- package/web/.next/standalone/web/.next/static/static/chunks/2868b007ce5163fc.css +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/3f295b6960943c38.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/631b023d37a08635.js +0 -13
- package/web/.next/standalone/web/.next/static/static/chunks/a2b4737b190d1b54.js +0 -5
- package/web/.next/standalone/web/.next/static/static/chunks/e97212fcc8221479.js +0 -5
- package/web/.next/standalone/web/.next/static/static/chunks/f6e47c8a9766ce91.js +0 -7
- package/web/.next/static/chunks/2868b007ce5163fc.css +0 -1
- package/web/.next/static/chunks/3f295b6960943c38.js +0 -1
- package/web/.next/static/chunks/631b023d37a08635.js +0 -13
- package/web/.next/static/chunks/a2b4737b190d1b54.js +0 -5
- package/web/.next/static/chunks/e97212fcc8221479.js +0 -5
- package/web/.next/static/chunks/f6e47c8a9766ce91.js +0 -7
- /package/web/.next/standalone/web/.next/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_ssgManifest.js +0 -0
- /package/web/.next/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_buildManifest.js +0 -0
- /package/web/.next/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{R5xiWSOp_Nqqe_js-LROo → 8zJH-RqrUQ3scBGbdaCmn}/_ssgManifest.js +0 -0
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,7 +1,40 @@
|
|
|
1
1
|
import * as ai from 'ai';
|
|
2
2
|
import { ToolSet } from 'ai';
|
|
3
|
-
import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-
|
|
4
|
-
export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-
|
|
3
|
+
import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-C_IFImt1.js';
|
|
4
|
+
export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-C_IFImt1.js';
|
|
5
|
+
|
|
6
|
+
interface TaskCompletionSignal {
|
|
7
|
+
status: 'completed' | 'failed';
|
|
8
|
+
result?: unknown;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
interface CreateTaskToolsOptions {
|
|
12
|
+
outputSchema: Record<string, unknown>;
|
|
13
|
+
onComplete: (signal: TaskCompletionSignal) => void;
|
|
14
|
+
}
|
|
15
|
+
declare function createCompleteTaskTool(options: CreateTaskToolsOptions): ai.Tool<{
|
|
16
|
+
result: Record<string, unknown>;
|
|
17
|
+
}, {
|
|
18
|
+
status: string;
|
|
19
|
+
message: string;
|
|
20
|
+
errors: {
|
|
21
|
+
path: string;
|
|
22
|
+
message: string | undefined;
|
|
23
|
+
params: Record<string, any>;
|
|
24
|
+
}[] | undefined;
|
|
25
|
+
expectedSchema: Record<string, unknown>;
|
|
26
|
+
} | {
|
|
27
|
+
status: string;
|
|
28
|
+
message: string;
|
|
29
|
+
errors?: undefined;
|
|
30
|
+
expectedSchema?: undefined;
|
|
31
|
+
}>;
|
|
32
|
+
declare function createTaskFailedTool(options: Pick<CreateTaskToolsOptions, 'onComplete'>): ai.Tool<{
|
|
33
|
+
reason: string;
|
|
34
|
+
}, {
|
|
35
|
+
status: string;
|
|
36
|
+
message: string;
|
|
37
|
+
}>;
|
|
5
38
|
|
|
6
39
|
interface ReadFileToolOptions {
|
|
7
40
|
workingDirectory: string;
|
|
@@ -327,6 +360,8 @@ interface CreateToolsOptions {
|
|
|
327
360
|
enableLSP?: boolean;
|
|
328
361
|
/** Enable semantic search if configured (default: true) */
|
|
329
362
|
enableSemanticSearch?: boolean;
|
|
363
|
+
/** Task mode: include complete_task and task_failed tools */
|
|
364
|
+
taskTools?: CreateTaskToolsOptions;
|
|
330
365
|
}
|
|
331
366
|
/**
|
|
332
367
|
* Create all tools for an agent session
|
|
@@ -334,4 +369,4 @@ interface CreateToolsOptions {
|
|
|
334
369
|
*/
|
|
335
370
|
declare function createTools(options: CreateToolsOptions): Promise<ToolSet>;
|
|
336
371
|
|
|
337
|
-
export { BashToolProgress, type CodeGraphToolOptions, type CreateToolsOptions, type LinterToolOptions, type LoadSkillToolOptions, type ReadFileToolOptions, SearchToolProgress, type SemanticSearchResult, type SemanticSearchToolOptions, type TodoToolOptions, WriteFileProgress, createCodeGraphTool, createLinterTool, createLoadSkillTool, createReadFileTool, createSemanticSearchTool, createTodoTool, createTools };
|
|
372
|
+
export { BashToolProgress, type CodeGraphToolOptions, type CreateTaskToolsOptions, type CreateToolsOptions, type LinterToolOptions, type LoadSkillToolOptions, type ReadFileToolOptions, SearchToolProgress, type SemanticSearchResult, type SemanticSearchToolOptions, type TaskCompletionSignal, type TodoToolOptions, WriteFileProgress, createCodeGraphTool, createCompleteTaskTool, createLinterTool, createLoadSkillTool, createReadFileTool, createSemanticSearchTool, createTaskFailedTool, createTodoTool, createTools };
|
package/dist/tools/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var __export = (target, all) => {
|
|
|
10
10
|
|
|
11
11
|
// src/config/types.ts
|
|
12
12
|
import { z } from "zod";
|
|
13
|
-
var ToolApprovalConfigSchema, SkillMetadataSchema, SessionConfigSchema, VectorGatewayConfigSchema, RemoteServerConfigSchema, SparkcoderConfigSchema;
|
|
13
|
+
var ToolApprovalConfigSchema, SkillMetadataSchema, TaskConfigSchema, SessionConfigSchema, VectorGatewayConfigSchema, RemoteServerConfigSchema, SparkcoderConfigSchema;
|
|
14
14
|
var init_types = __esm({
|
|
15
15
|
"src/config/types.ts"() {
|
|
16
16
|
"use strict";
|
|
@@ -29,11 +29,22 @@ var init_types = __esm({
|
|
|
29
29
|
// Glob patterns - auto-inject when working with matching files
|
|
30
30
|
globs: z.array(z.string()).optional().default([])
|
|
31
31
|
});
|
|
32
|
+
TaskConfigSchema = z.object({
|
|
33
|
+
enabled: z.boolean(),
|
|
34
|
+
outputSchema: z.record(z.string(), z.unknown()),
|
|
35
|
+
webhookUrl: z.string().url().optional(),
|
|
36
|
+
maxIterations: z.number().optional(),
|
|
37
|
+
status: z.enum(["running", "completed", "failed"]),
|
|
38
|
+
result: z.unknown().optional(),
|
|
39
|
+
error: z.string().optional(),
|
|
40
|
+
iterations: z.number().optional()
|
|
41
|
+
});
|
|
32
42
|
SessionConfigSchema = z.object({
|
|
33
43
|
toolApprovals: z.record(z.string(), z.boolean()).optional(),
|
|
34
44
|
approvalWebhook: z.string().url().optional(),
|
|
35
45
|
skillsDirectory: z.string().optional(),
|
|
36
|
-
maxContextChars: z.number().optional().default(2e5)
|
|
46
|
+
maxContextChars: z.number().optional().default(2e5),
|
|
47
|
+
task: TaskConfigSchema.optional()
|
|
37
48
|
});
|
|
38
49
|
VectorGatewayConfigSchema = z.object({
|
|
39
50
|
// Redis cluster nodes URL for Vector Gateway (or use REDIS_CLUSTER_NODES env var)
|
|
@@ -2911,7 +2922,165 @@ import { nanoid as nanoid2 } from "nanoid";
|
|
|
2911
2922
|
|
|
2912
2923
|
// src/agent/model.ts
|
|
2913
2924
|
import { gateway } from "@ai-sdk/gateway";
|
|
2925
|
+
|
|
2926
|
+
// src/agent/remote-model.ts
|
|
2927
|
+
function serializePrompt(prompt) {
|
|
2928
|
+
return prompt.map((msg) => {
|
|
2929
|
+
if (!Array.isArray(msg.content)) return msg;
|
|
2930
|
+
return {
|
|
2931
|
+
...msg,
|
|
2932
|
+
content: msg.content.map((part) => {
|
|
2933
|
+
if (part.type === "file" && part.data instanceof Uint8Array) {
|
|
2934
|
+
return {
|
|
2935
|
+
...part,
|
|
2936
|
+
data: Buffer.from(part.data).toString("base64"),
|
|
2937
|
+
_base64: true
|
|
2938
|
+
};
|
|
2939
|
+
}
|
|
2940
|
+
return part;
|
|
2941
|
+
})
|
|
2942
|
+
};
|
|
2943
|
+
});
|
|
2944
|
+
}
|
|
2945
|
+
function deserializeValue(value) {
|
|
2946
|
+
if (value && typeof value === "object") {
|
|
2947
|
+
if (value.__uint8array && typeof value.data === "string") {
|
|
2948
|
+
return Buffer.from(value.data, "base64");
|
|
2949
|
+
}
|
|
2950
|
+
if (Array.isArray(value)) {
|
|
2951
|
+
return value.map(deserializeValue);
|
|
2952
|
+
}
|
|
2953
|
+
const result = {};
|
|
2954
|
+
for (const [k, v] of Object.entries(value)) {
|
|
2955
|
+
result[k] = deserializeValue(v);
|
|
2956
|
+
}
|
|
2957
|
+
return result;
|
|
2958
|
+
}
|
|
2959
|
+
return value;
|
|
2960
|
+
}
|
|
2961
|
+
function prepareOptions(options) {
|
|
2962
|
+
const { abortSignal, ...rest } = options;
|
|
2963
|
+
return {
|
|
2964
|
+
...rest,
|
|
2965
|
+
prompt: serializePrompt(options.prompt)
|
|
2966
|
+
};
|
|
2967
|
+
}
|
|
2968
|
+
function createRemoteModel(modelId, config) {
|
|
2969
|
+
const baseUrl = config.url.replace(/\/$/, "");
|
|
2970
|
+
const headers = {
|
|
2971
|
+
"Content-Type": "application/json",
|
|
2972
|
+
"Authorization": `Bearer ${config.authKey}`
|
|
2973
|
+
};
|
|
2974
|
+
return {
|
|
2975
|
+
specificationVersion: "v3",
|
|
2976
|
+
provider: "remote-proxy",
|
|
2977
|
+
modelId,
|
|
2978
|
+
supportedUrls: {},
|
|
2979
|
+
async doGenerate(options) {
|
|
2980
|
+
const res = await fetch(`${baseUrl}/inference/generate`, {
|
|
2981
|
+
method: "POST",
|
|
2982
|
+
headers,
|
|
2983
|
+
body: JSON.stringify({
|
|
2984
|
+
modelId,
|
|
2985
|
+
options: prepareOptions(options)
|
|
2986
|
+
}),
|
|
2987
|
+
signal: options.abortSignal
|
|
2988
|
+
});
|
|
2989
|
+
if (!res.ok) {
|
|
2990
|
+
const err = await res.json().catch(() => ({}));
|
|
2991
|
+
throw new Error(
|
|
2992
|
+
`Remote inference failed (${res.status}): ${err.error || res.statusText}`
|
|
2993
|
+
);
|
|
2994
|
+
}
|
|
2995
|
+
const result = await res.json();
|
|
2996
|
+
return deserializeValue(result);
|
|
2997
|
+
},
|
|
2998
|
+
async doStream(options) {
|
|
2999
|
+
const res = await fetch(`${baseUrl}/inference/stream`, {
|
|
3000
|
+
method: "POST",
|
|
3001
|
+
headers,
|
|
3002
|
+
body: JSON.stringify({
|
|
3003
|
+
modelId,
|
|
3004
|
+
options: prepareOptions(options)
|
|
3005
|
+
}),
|
|
3006
|
+
signal: options.abortSignal
|
|
3007
|
+
});
|
|
3008
|
+
if (!res.ok) {
|
|
3009
|
+
const err = await res.json().catch(() => ({}));
|
|
3010
|
+
throw new Error(
|
|
3011
|
+
`Remote inference failed (${res.status}): ${err.error || res.statusText}`
|
|
3012
|
+
);
|
|
3013
|
+
}
|
|
3014
|
+
const reader = res.body.getReader();
|
|
3015
|
+
const decoder = new TextDecoder();
|
|
3016
|
+
let buffer = "";
|
|
3017
|
+
const stream = new ReadableStream({
|
|
3018
|
+
async pull(controller) {
|
|
3019
|
+
while (true) {
|
|
3020
|
+
const { done, value } = await reader.read();
|
|
3021
|
+
if (done) {
|
|
3022
|
+
if (buffer.trim()) {
|
|
3023
|
+
try {
|
|
3024
|
+
const parsed = deserializeValue(JSON.parse(buffer.trim()));
|
|
3025
|
+
if (parsed.type === "error") {
|
|
3026
|
+
controller.error(new Error(parsed.error));
|
|
3027
|
+
} else {
|
|
3028
|
+
controller.enqueue(parsed);
|
|
3029
|
+
}
|
|
3030
|
+
} catch {
|
|
3031
|
+
}
|
|
3032
|
+
}
|
|
3033
|
+
controller.close();
|
|
3034
|
+
return;
|
|
3035
|
+
}
|
|
3036
|
+
buffer += decoder.decode(value, { stream: true });
|
|
3037
|
+
const lines = buffer.split("\n");
|
|
3038
|
+
buffer = lines.pop() || "";
|
|
3039
|
+
for (const line of lines) {
|
|
3040
|
+
if (!line.trim()) continue;
|
|
3041
|
+
try {
|
|
3042
|
+
const parsed = deserializeValue(JSON.parse(line));
|
|
3043
|
+
if (parsed.type === "error") {
|
|
3044
|
+
controller.error(new Error(parsed.error));
|
|
3045
|
+
return;
|
|
3046
|
+
}
|
|
3047
|
+
controller.enqueue(parsed);
|
|
3048
|
+
} catch {
|
|
3049
|
+
}
|
|
3050
|
+
}
|
|
3051
|
+
}
|
|
3052
|
+
},
|
|
3053
|
+
cancel() {
|
|
3054
|
+
reader.cancel();
|
|
3055
|
+
}
|
|
3056
|
+
});
|
|
3057
|
+
const responseHeaders = {};
|
|
3058
|
+
res.headers.forEach((v, k) => {
|
|
3059
|
+
if (k.startsWith("x-upstream-")) {
|
|
3060
|
+
responseHeaders[k.replace("x-upstream-", "")] = v;
|
|
3061
|
+
}
|
|
3062
|
+
});
|
|
3063
|
+
return {
|
|
3064
|
+
stream,
|
|
3065
|
+
response: Object.keys(responseHeaders).length > 0 ? { headers: responseHeaders } : void 0
|
|
3066
|
+
};
|
|
3067
|
+
}
|
|
3068
|
+
};
|
|
3069
|
+
}
|
|
3070
|
+
|
|
3071
|
+
// src/agent/model.ts
|
|
3072
|
+
init_config();
|
|
2914
3073
|
function resolveModel(modelId) {
|
|
3074
|
+
try {
|
|
3075
|
+
const config = getConfig();
|
|
3076
|
+
if (config.resolvedRemoteServer.isConfigured) {
|
|
3077
|
+
return createRemoteModel(modelId.trim(), {
|
|
3078
|
+
url: config.resolvedRemoteServer.url,
|
|
3079
|
+
authKey: config.resolvedRemoteServer.authKey
|
|
3080
|
+
});
|
|
3081
|
+
}
|
|
3082
|
+
} catch {
|
|
3083
|
+
}
|
|
2915
3084
|
return gateway(modelId.trim());
|
|
2916
3085
|
}
|
|
2917
3086
|
var SUBAGENT_MODELS = {
|
|
@@ -4081,6 +4250,59 @@ Context: ${context}` : query;
|
|
|
4081
4250
|
|
|
4082
4251
|
// src/tools/index.ts
|
|
4083
4252
|
init_semantic_search();
|
|
4253
|
+
|
|
4254
|
+
// src/tools/task.ts
|
|
4255
|
+
import { tool as tool11 } from "ai";
|
|
4256
|
+
import { z as z12 } from "zod";
|
|
4257
|
+
import Ajv from "ajv";
|
|
4258
|
+
var ajv = new Ajv({ allErrors: true });
|
|
4259
|
+
function createCompleteTaskTool(options) {
|
|
4260
|
+
const validate = ajv.compile(options.outputSchema);
|
|
4261
|
+
return tool11({
|
|
4262
|
+
description: "Call this tool when you have completed the task. Pass the result as a JSON object matching the required output schema. If the result does not match the schema, you will receive validation errors and should fix and retry.",
|
|
4263
|
+
inputSchema: z12.object({
|
|
4264
|
+
result: z12.record(z12.string(), z12.unknown()).describe("The task result as a JSON object matching the output schema")
|
|
4265
|
+
}),
|
|
4266
|
+
execute: async (input) => {
|
|
4267
|
+
const valid = validate(input.result);
|
|
4268
|
+
if (!valid) {
|
|
4269
|
+
const errors = validate.errors?.map((e) => ({
|
|
4270
|
+
path: e.instancePath || "/",
|
|
4271
|
+
message: e.message,
|
|
4272
|
+
params: e.params
|
|
4273
|
+
}));
|
|
4274
|
+
return {
|
|
4275
|
+
status: "validation_error",
|
|
4276
|
+
message: "The result does not match the required output schema. Fix the errors and call complete_task again.",
|
|
4277
|
+
errors,
|
|
4278
|
+
expectedSchema: options.outputSchema
|
|
4279
|
+
};
|
|
4280
|
+
}
|
|
4281
|
+
options.onComplete({ status: "completed", result: input.result });
|
|
4282
|
+
return {
|
|
4283
|
+
status: "completed",
|
|
4284
|
+
message: "Task completed successfully."
|
|
4285
|
+
};
|
|
4286
|
+
}
|
|
4287
|
+
});
|
|
4288
|
+
}
|
|
4289
|
+
function createTaskFailedTool(options) {
|
|
4290
|
+
return tool11({
|
|
4291
|
+
description: "Call this tool if you are unable to complete the task. Provide a clear reason explaining why the task cannot be completed.",
|
|
4292
|
+
inputSchema: z12.object({
|
|
4293
|
+
reason: z12.string().describe("Explanation of why the task cannot be completed")
|
|
4294
|
+
}),
|
|
4295
|
+
execute: async (input) => {
|
|
4296
|
+
options.onComplete({ status: "failed", error: input.reason });
|
|
4297
|
+
return {
|
|
4298
|
+
status: "failed",
|
|
4299
|
+
message: `Task marked as failed: ${input.reason}`
|
|
4300
|
+
};
|
|
4301
|
+
}
|
|
4302
|
+
});
|
|
4303
|
+
}
|
|
4304
|
+
|
|
4305
|
+
// src/tools/index.ts
|
|
4084
4306
|
init_semantic();
|
|
4085
4307
|
init_semantic_search();
|
|
4086
4308
|
async function createTools(options) {
|
|
@@ -4132,16 +4354,22 @@ async function createTools(options) {
|
|
|
4132
4354
|
} catch {
|
|
4133
4355
|
}
|
|
4134
4356
|
}
|
|
4357
|
+
if (options.taskTools) {
|
|
4358
|
+
tools.complete_task = createCompleteTaskTool(options.taskTools);
|
|
4359
|
+
tools.task_failed = createTaskFailedTool(options.taskTools);
|
|
4360
|
+
}
|
|
4135
4361
|
return tools;
|
|
4136
4362
|
}
|
|
4137
4363
|
export {
|
|
4138
4364
|
createBashTool,
|
|
4139
4365
|
createCodeGraphTool,
|
|
4366
|
+
createCompleteTaskTool,
|
|
4140
4367
|
createLinterTool,
|
|
4141
4368
|
createLoadSkillTool,
|
|
4142
4369
|
createReadFileTool,
|
|
4143
4370
|
createSearchTool,
|
|
4144
4371
|
createSemanticSearchTool,
|
|
4372
|
+
createTaskFailedTool,
|
|
4145
4373
|
createTodoTool,
|
|
4146
4374
|
createTools,
|
|
4147
4375
|
createWriteFileTool
|