developer-ai 1.0.0
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/README.md +241 -0
- package/bin/developer-ai.js +2 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +219 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +82 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +115 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +29 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/agent.d.ts +38 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +155 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/system-prompt.d.ts +6 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +44 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/types.d.ts +42 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +13 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +202 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/providers/ollama.d.ts +13 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +60 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +9 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +40 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/skills/loader.d.ts +25 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +93 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/tests/tools.test.d.ts +2 -0
- package/dist/tests/tools.test.d.ts.map +1 -0
- package/dist/tests/tools.test.js +170 -0
- package/dist/tests/tools.test.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +19 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-files.d.ts +3 -0
- package/dist/tools/list-files.d.ts.map +1 -0
- package/dist/tools/list-files.js +60 -0
- package/dist/tools/list-files.js.map +1 -0
- package/dist/tools/read-file.d.ts +3 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +46 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/registry.d.ts +24 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +37 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/run-command.d.ts +3 -0
- package/dist/tools/run-command.d.ts.map +1 -0
- package/dist/tools/run-command.js +114 -0
- package/dist/tools/run-command.js.map +1 -0
- package/dist/tools/search-text.d.ts +3 -0
- package/dist/tools/search-text.d.ts.map +1 -0
- package/dist/tools/search-text.js +103 -0
- package/dist/tools/search-text.js.map +1 -0
- package/dist/tools/utils.d.ts +6 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +14 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +3 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +80 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/write-file.d.ts +3 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +66 -0
- package/dist/tools/write-file.js.map +1 -0
- package/package.json +54 -0
- package/skills/accessibility/SKILL.md +496 -0
- package/skills/api-design/SKILL.md +419 -0
- package/skills/code-review/SKILL.md +267 -0
- package/skills/debugging/SKILL.md +332 -0
- package/skills/documentation/SKILL.md +496 -0
- package/skills/error-handling/SKILL.md +504 -0
- package/skills/git-workflow/SKILL.md +448 -0
- package/skills/human-like-coding/SKILL.md +400 -0
- package/skills/performance-optimization/SKILL.md +412 -0
- package/skills/prompt-engineering/SKILL.md +362 -0
- package/skills/refactoring/SKILL.md +457 -0
- package/skills/security-audit/SKILL.md +453 -0
- package/skills/testing-strategy/SKILL.md +501 -0
- package/skills/webapp-testing/SKILL.md +309 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ConfigSchema: z.ZodObject<{
|
|
3
|
+
provider: z.ZodDefault<z.ZodEnum<["openai", "ollama"]>>;
|
|
4
|
+
openai: z.ZodDefault<z.ZodObject<{
|
|
5
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
6
|
+
model: z.ZodDefault<z.ZodString>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
model: string;
|
|
9
|
+
apiKey?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
apiKey?: string | undefined;
|
|
12
|
+
model?: string | undefined;
|
|
13
|
+
}>>;
|
|
14
|
+
ollama: z.ZodDefault<z.ZodObject<{
|
|
15
|
+
model: z.ZodDefault<z.ZodString>;
|
|
16
|
+
baseUrl: z.ZodDefault<z.ZodString>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
model: string;
|
|
19
|
+
baseUrl: string;
|
|
20
|
+
}, {
|
|
21
|
+
model?: string | undefined;
|
|
22
|
+
baseUrl?: string | undefined;
|
|
23
|
+
}>>;
|
|
24
|
+
safety: z.ZodDefault<z.ZodObject<{
|
|
25
|
+
confirmOverwrite: z.ZodDefault<z.ZodBoolean>;
|
|
26
|
+
allowDangerous: z.ZodDefault<z.ZodBoolean>;
|
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
|
28
|
+
confirmOverwrite: boolean;
|
|
29
|
+
allowDangerous: boolean;
|
|
30
|
+
}, {
|
|
31
|
+
confirmOverwrite?: boolean | undefined;
|
|
32
|
+
allowDangerous?: boolean | undefined;
|
|
33
|
+
}>>;
|
|
34
|
+
webSearch: z.ZodDefault<z.ZodObject<{
|
|
35
|
+
provider: z.ZodDefault<z.ZodEnum<["brave", "serper", "none"]>>;
|
|
36
|
+
braveApiKey: z.ZodOptional<z.ZodString>;
|
|
37
|
+
serperApiKey: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
provider: "brave" | "serper" | "none";
|
|
40
|
+
braveApiKey?: string | undefined;
|
|
41
|
+
serperApiKey?: string | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
provider?: "brave" | "serper" | "none" | undefined;
|
|
44
|
+
braveApiKey?: string | undefined;
|
|
45
|
+
serperApiKey?: string | undefined;
|
|
46
|
+
}>>;
|
|
47
|
+
}, "strip", z.ZodTypeAny, {
|
|
48
|
+
openai: {
|
|
49
|
+
model: string;
|
|
50
|
+
apiKey?: string | undefined;
|
|
51
|
+
};
|
|
52
|
+
ollama: {
|
|
53
|
+
model: string;
|
|
54
|
+
baseUrl: string;
|
|
55
|
+
};
|
|
56
|
+
provider: "openai" | "ollama";
|
|
57
|
+
safety: {
|
|
58
|
+
confirmOverwrite: boolean;
|
|
59
|
+
allowDangerous: boolean;
|
|
60
|
+
};
|
|
61
|
+
webSearch: {
|
|
62
|
+
provider: "brave" | "serper" | "none";
|
|
63
|
+
braveApiKey?: string | undefined;
|
|
64
|
+
serperApiKey?: string | undefined;
|
|
65
|
+
};
|
|
66
|
+
}, {
|
|
67
|
+
openai?: {
|
|
68
|
+
apiKey?: string | undefined;
|
|
69
|
+
model?: string | undefined;
|
|
70
|
+
} | undefined;
|
|
71
|
+
ollama?: {
|
|
72
|
+
model?: string | undefined;
|
|
73
|
+
baseUrl?: string | undefined;
|
|
74
|
+
} | undefined;
|
|
75
|
+
provider?: "openai" | "ollama" | undefined;
|
|
76
|
+
safety?: {
|
|
77
|
+
confirmOverwrite?: boolean | undefined;
|
|
78
|
+
allowDangerous?: boolean | undefined;
|
|
79
|
+
} | undefined;
|
|
80
|
+
webSearch?: {
|
|
81
|
+
provider?: "brave" | "serper" | "none" | undefined;
|
|
82
|
+
braveApiKey?: string | undefined;
|
|
83
|
+
serperApiKey?: string | undefined;
|
|
84
|
+
} | undefined;
|
|
85
|
+
}>;
|
|
86
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
87
|
+
export declare const McpConfigSchema: z.ZodObject<{
|
|
88
|
+
servers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
89
|
+
command: z.ZodString;
|
|
90
|
+
args: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
91
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
92
|
+
}, "strip", z.ZodTypeAny, {
|
|
93
|
+
command: string;
|
|
94
|
+
args: string[];
|
|
95
|
+
env: Record<string, string>;
|
|
96
|
+
}, {
|
|
97
|
+
command: string;
|
|
98
|
+
args?: string[] | undefined;
|
|
99
|
+
env?: Record<string, string> | undefined;
|
|
100
|
+
}>>>;
|
|
101
|
+
}, "strip", z.ZodTypeAny, {
|
|
102
|
+
servers: Record<string, {
|
|
103
|
+
command: string;
|
|
104
|
+
args: string[];
|
|
105
|
+
env: Record<string, string>;
|
|
106
|
+
}>;
|
|
107
|
+
}, {
|
|
108
|
+
servers?: Record<string, {
|
|
109
|
+
command: string;
|
|
110
|
+
args?: string[] | undefined;
|
|
111
|
+
env?: Record<string, string> | undefined;
|
|
112
|
+
}> | undefined;
|
|
113
|
+
}>;
|
|
114
|
+
export type McpConfig = z.infer<typeof McpConfigSchema>;
|
|
115
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const ConfigSchema = z.object({
|
|
3
|
+
provider: z.enum(['openai', 'ollama']).default('ollama'),
|
|
4
|
+
openai: z.object({
|
|
5
|
+
apiKey: z.string().optional(),
|
|
6
|
+
model: z.string().default('gpt-4o'),
|
|
7
|
+
}).default({}),
|
|
8
|
+
ollama: z.object({
|
|
9
|
+
model: z.string().default('llama3.1'),
|
|
10
|
+
baseUrl: z.string().default('http://localhost:11434'),
|
|
11
|
+
}).default({}),
|
|
12
|
+
safety: z.object({
|
|
13
|
+
confirmOverwrite: z.boolean().default(true),
|
|
14
|
+
allowDangerous: z.boolean().default(false),
|
|
15
|
+
}).default({}),
|
|
16
|
+
webSearch: z.object({
|
|
17
|
+
provider: z.enum(['brave', 'serper', 'none']).default('none'),
|
|
18
|
+
braveApiKey: z.string().optional(),
|
|
19
|
+
serperApiKey: z.string().optional(),
|
|
20
|
+
}).default({}),
|
|
21
|
+
});
|
|
22
|
+
export const McpConfigSchema = z.object({
|
|
23
|
+
servers: z.record(z.object({
|
|
24
|
+
command: z.string(),
|
|
25
|
+
args: z.array(z.string()).default([]),
|
|
26
|
+
env: z.record(z.string()).default({}),
|
|
27
|
+
})).default({}),
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;KACpC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC;KACtD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3C,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3C,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACpC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACf,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACtC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const APP_NAME = "developer-ai";
|
|
2
|
+
export declare const CONFIG_DIR_NAME = ".developer-ai";
|
|
3
|
+
export declare const MAX_FILE_SIZE: number;
|
|
4
|
+
export declare const MAX_OUTPUT_LENGTH = 10000;
|
|
5
|
+
export declare const MAX_AGENT_ITERATIONS = 30;
|
|
6
|
+
export declare const COMMAND_TIMEOUT_MS = 30000;
|
|
7
|
+
export declare const VERSION = "1.0.0";
|
|
8
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AACvC,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAC/C,eAAO,MAAM,aAAa,QAAc,CAAC;AACzC,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const APP_NAME = 'developer-ai';
|
|
2
|
+
export const CONFIG_DIR_NAME = '.developer-ai';
|
|
3
|
+
export const MAX_FILE_SIZE = 1024 * 1024; // 1 MB
|
|
4
|
+
export const MAX_OUTPUT_LENGTH = 10_000;
|
|
5
|
+
export const MAX_AGENT_ITERATIONS = 30;
|
|
6
|
+
export const COMMAND_TIMEOUT_MS = 30_000;
|
|
7
|
+
export const VERSION = '1.0.0';
|
|
8
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { LLMProvider } from './types.js';
|
|
2
|
+
import type { ToolRegistry } from '../tools/registry.js';
|
|
3
|
+
import { McpManager } from '../mcp/client.js';
|
|
4
|
+
import { SkillsLoader } from '../skills/loader.js';
|
|
5
|
+
export interface AgentOptions {
|
|
6
|
+
provider: LLMProvider;
|
|
7
|
+
toolRegistry: ToolRegistry;
|
|
8
|
+
mcpManager: McpManager;
|
|
9
|
+
skillsLoader: SkillsLoader;
|
|
10
|
+
workspaceDir: string;
|
|
11
|
+
autoYes: boolean;
|
|
12
|
+
allowDangerous: boolean;
|
|
13
|
+
maxIterations: number;
|
|
14
|
+
confirmFn: (message: string) => Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
export declare class Agent {
|
|
17
|
+
private messages;
|
|
18
|
+
private provider;
|
|
19
|
+
private toolRegistry;
|
|
20
|
+
private mcpManager;
|
|
21
|
+
private skillsLoader;
|
|
22
|
+
private workspaceDir;
|
|
23
|
+
private autoYes;
|
|
24
|
+
private allowDangerous;
|
|
25
|
+
private maxIterations;
|
|
26
|
+
private confirmFn;
|
|
27
|
+
constructor(opts: AgentOptions);
|
|
28
|
+
initialize(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Send a user message, run the agent loop (tool calls → responses),
|
|
31
|
+
* and return the final assistant text.
|
|
32
|
+
*/
|
|
33
|
+
chat(userMessage: string): Promise<string>;
|
|
34
|
+
resetHistory(): void;
|
|
35
|
+
private executeTool;
|
|
36
|
+
private logToolExecution;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAwC;gBAE7C,IAAI,EAAE,YAAY;IAYxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8EhD,YAAY,IAAI,IAAI;YAMN,WAAW;IA8BzB,OAAO,CAAC,gBAAgB;CA8BzB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { buildSystemPrompt } from './system-prompt.js';
|
|
3
|
+
export class Agent {
|
|
4
|
+
messages = [];
|
|
5
|
+
provider;
|
|
6
|
+
toolRegistry;
|
|
7
|
+
mcpManager;
|
|
8
|
+
skillsLoader;
|
|
9
|
+
workspaceDir;
|
|
10
|
+
autoYes;
|
|
11
|
+
allowDangerous;
|
|
12
|
+
maxIterations;
|
|
13
|
+
confirmFn;
|
|
14
|
+
constructor(opts) {
|
|
15
|
+
this.provider = opts.provider;
|
|
16
|
+
this.toolRegistry = opts.toolRegistry;
|
|
17
|
+
this.mcpManager = opts.mcpManager;
|
|
18
|
+
this.skillsLoader = opts.skillsLoader;
|
|
19
|
+
this.workspaceDir = opts.workspaceDir;
|
|
20
|
+
this.autoYes = opts.autoYes;
|
|
21
|
+
this.allowDangerous = opts.allowDangerous;
|
|
22
|
+
this.maxIterations = opts.maxIterations;
|
|
23
|
+
this.confirmFn = opts.confirmFn;
|
|
24
|
+
}
|
|
25
|
+
async initialize() {
|
|
26
|
+
await this.skillsLoader.load();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Send a user message, run the agent loop (tool calls → responses),
|
|
30
|
+
* and return the final assistant text.
|
|
31
|
+
*/
|
|
32
|
+
async chat(userMessage) {
|
|
33
|
+
// Skill retrieval
|
|
34
|
+
const skills = this.skillsLoader.findRelevant(userMessage);
|
|
35
|
+
const skillSnippets = skills.map((s) => `### Skill: ${s.name}\n${s.content.slice(0, 2000)}`);
|
|
36
|
+
// System prompt — always at position 0
|
|
37
|
+
const systemMsg = {
|
|
38
|
+
role: 'system',
|
|
39
|
+
content: buildSystemPrompt(this.workspaceDir, skillSnippets),
|
|
40
|
+
};
|
|
41
|
+
if (this.messages.length === 0 || this.messages[0]?.role !== 'system') {
|
|
42
|
+
this.messages.unshift(systemMsg);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.messages[0] = systemMsg;
|
|
46
|
+
}
|
|
47
|
+
// Append user turn
|
|
48
|
+
this.messages.push({ role: 'user', content: userMessage });
|
|
49
|
+
// Assemble tools
|
|
50
|
+
const tools = [
|
|
51
|
+
...this.toolRegistry.getDefinitions(),
|
|
52
|
+
...this.mcpManager.getToolDefinitions(),
|
|
53
|
+
];
|
|
54
|
+
// ---- Agent loop ----
|
|
55
|
+
let iterations = 0;
|
|
56
|
+
while (iterations < this.maxIterations) {
|
|
57
|
+
iterations++;
|
|
58
|
+
let response;
|
|
59
|
+
try {
|
|
60
|
+
response = await this.provider.generate(this.messages, tools);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
64
|
+
return `❌ Provider error: ${msg}`;
|
|
65
|
+
}
|
|
66
|
+
// Tool calls → execute, feed results back, continue
|
|
67
|
+
if (response.toolCalls.length > 0) {
|
|
68
|
+
this.messages.push({
|
|
69
|
+
role: 'assistant',
|
|
70
|
+
content: response.content,
|
|
71
|
+
tool_calls: response.toolCalls,
|
|
72
|
+
});
|
|
73
|
+
for (const tc of response.toolCalls) {
|
|
74
|
+
const result = await this.executeTool(tc);
|
|
75
|
+
this.logToolExecution(tc, result);
|
|
76
|
+
this.messages.push({
|
|
77
|
+
role: 'tool',
|
|
78
|
+
content: JSON.stringify(result),
|
|
79
|
+
tool_call_id: tc.id,
|
|
80
|
+
name: tc.function.name,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
// Final text response
|
|
86
|
+
if (response.content) {
|
|
87
|
+
this.messages.push({ role: 'assistant', content: response.content });
|
|
88
|
+
return response.content;
|
|
89
|
+
}
|
|
90
|
+
// Neither content nor tool calls — loop shouldn't continue
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
if (iterations >= this.maxIterations) {
|
|
94
|
+
return '⚠️ Reached maximum iterations. The task may be incomplete — please continue with follow-up instructions.';
|
|
95
|
+
}
|
|
96
|
+
return '(no response)';
|
|
97
|
+
}
|
|
98
|
+
resetHistory() {
|
|
99
|
+
this.messages = [];
|
|
100
|
+
}
|
|
101
|
+
// ---- Private helpers ----
|
|
102
|
+
async executeTool(toolCall) {
|
|
103
|
+
const { name, arguments: argsStr } = toolCall.function;
|
|
104
|
+
let args;
|
|
105
|
+
try {
|
|
106
|
+
args = JSON.parse(argsStr);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
output: '',
|
|
112
|
+
error: `Invalid JSON in tool arguments: ${argsStr.slice(0, 200)}`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const ctx = {
|
|
116
|
+
workspaceDir: this.workspaceDir,
|
|
117
|
+
confirmFn: this.confirmFn,
|
|
118
|
+
allowDangerous: this.allowDangerous,
|
|
119
|
+
autoYes: this.autoYes,
|
|
120
|
+
};
|
|
121
|
+
// MCP tools
|
|
122
|
+
if (this.mcpManager.isMcpTool(name)) {
|
|
123
|
+
return this.mcpManager.callTool(name, args);
|
|
124
|
+
}
|
|
125
|
+
// Built-in tools
|
|
126
|
+
return this.toolRegistry.execute(name, args, ctx);
|
|
127
|
+
}
|
|
128
|
+
logToolExecution(toolCall, result) {
|
|
129
|
+
const name = toolCall.function.name;
|
|
130
|
+
let args = {};
|
|
131
|
+
try {
|
|
132
|
+
args = JSON.parse(toolCall.function.arguments);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
/* ignore */
|
|
136
|
+
}
|
|
137
|
+
const icon = result.success ? chalk.green('✓') : chalk.red('✗');
|
|
138
|
+
const label = chalk.cyan(`[${name}]`);
|
|
139
|
+
// Concise single-line summary per tool call
|
|
140
|
+
const detail = name === 'write_file' || name === 'read_file'
|
|
141
|
+
? String(args['path'] ?? '')
|
|
142
|
+
: name === 'run_command'
|
|
143
|
+
? String(args['command'] ?? '')
|
|
144
|
+
: name === 'list_files'
|
|
145
|
+
? String(args['path'] ?? '.')
|
|
146
|
+
: name === 'search_text' || name === 'web_search'
|
|
147
|
+
? `"${String(args['query'] ?? '')}"`
|
|
148
|
+
: '';
|
|
149
|
+
process.stderr.write(` ${icon} ${label} ${detail}\n`);
|
|
150
|
+
if (!result.success && result.error) {
|
|
151
|
+
process.stderr.write(` ${chalk.red(result.error)}\n`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAcvD,MAAM,OAAO,KAAK;IACR,QAAQ,GAAc,EAAE,CAAC;IACzB,QAAQ,CAAc;IACtB,YAAY,CAAe;IAC3B,UAAU,CAAa;IACvB,YAAY,CAAe;IAC3B,YAAY,CAAS;IACrB,OAAO,CAAU;IACjB,cAAc,CAAU;IACxB,aAAa,CAAS;IACtB,SAAS,CAAwC;IAEzD,YAAY,IAAkB;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,WAAmB;QAC5B,kBAAkB;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAC3D,CAAC;QAEF,uCAAuC;QACvC,MAAM,SAAS,GAAY;YACzB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC;SAC7D,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QAC/B,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAE3D,iBAAiB;QACjB,MAAM,KAAK,GAAqB;YAC9B,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;YACrC,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;SACxC,CAAC;QAEF,uBAAuB;QACvB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,OAAO,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,UAAU,EAAE,CAAC;YAEb,IAAI,QAAQ,CAAC;YACb,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,qBAAqB,GAAG,EAAE,CAAC;YACpC,CAAC;YAED,oDAAoD;YACpD,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,UAAU,EAAE,QAAQ,CAAC,SAAS;iBAC/B,CAAC,CAAC;gBAEH,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBAC1C,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;wBAC/B,YAAY,EAAE,EAAE,CAAC,EAAE;wBACnB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;qBACvB,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS;YACX,CAAC;YAED,sBAAsB;YACtB,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrE,OAAO,QAAQ,CAAC,OAAO,CAAC;YAC1B,CAAC;YAED,2DAA2D;YAC3D,MAAM;QACR,CAAC;QAED,IAAI,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,OAAO,2GAA2G,CAAC;QACrH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,4BAA4B;IAEpB,KAAK,CAAC,WAAW,CAAC,QAAkB;QAC1C,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAEvD,IAAI,IAA6B,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,mCAAmC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aAClE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAgB;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;QAEF,YAAY;QACZ,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,iBAAiB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAEO,gBAAgB,CAAC,QAAkB,EAAE,MAAkB;QAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpC,IAAI,IAAI,GAA4B,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAEtC,4CAA4C;QAC5C,MAAM,MAAM,GACV,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW;YAC3C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC,CAAC,IAAI,KAAK,aAAa;gBACtB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC/B,CAAC,CAAC,IAAI,KAAK,YAAY;oBACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;oBAC7B,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,YAAY;wBAC/C,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG;wBACpC,CAAC,CAAC,EAAE,CAAC;QAEf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds the system prompt injected into every LLM call.
|
|
3
|
+
* Includes workspace context and relevant skill snippets.
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildSystemPrompt(workspaceDir: string, skillSnippets: string[]): string;
|
|
6
|
+
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,CAwCR"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds the system prompt injected into every LLM call.
|
|
3
|
+
* Includes workspace context and relevant skill snippets.
|
|
4
|
+
*/
|
|
5
|
+
export function buildSystemPrompt(workspaceDir, skillSnippets) {
|
|
6
|
+
let prompt = `You are Developer-AI, a terminal coding agent operating inside the user's current workspace.
|
|
7
|
+
Workspace root: ${workspaceDir}
|
|
8
|
+
|
|
9
|
+
You must accomplish tasks by calling the provided tools. Never claim you changed a file unless you used write_file.
|
|
10
|
+
|
|
11
|
+
## Operating Rules
|
|
12
|
+
- Think step-by-step. Explain your plan briefly (1–4 bullets), then execute with tool calls.
|
|
13
|
+
- Prefer minimal, correct changes. Generate complete files, not fragments.
|
|
14
|
+
- When creating websites or apps:
|
|
15
|
+
• Produce self-contained files (inline SVGs, inline data).
|
|
16
|
+
• NEVER reference external assets, images, or data files that don't exist.
|
|
17
|
+
• If a logo is needed, use an inline SVG or text-based logo.
|
|
18
|
+
• If data is needed (careers, team, services, etc.), inline it in the JavaScript — no fetch() to local JSON files.
|
|
19
|
+
- Ask for confirmation before risky operations (overwriting important files, running dangerous commands).
|
|
20
|
+
- If a tool fails, explain briefly and try an alternative approach.
|
|
21
|
+
- After completing edits, summarise what changed and how to run/test.
|
|
22
|
+
|
|
23
|
+
## Tool Usage
|
|
24
|
+
- Use write_file to create or update files. Set confirmOverwrite=true when you intend to overwrite.
|
|
25
|
+
- Use read_file to inspect existing files before modifying them.
|
|
26
|
+
- Use list_files to understand the project structure.
|
|
27
|
+
- Use search_text to find code patterns across the workspace.
|
|
28
|
+
- Use run_command for safe shell commands (ls, cat, npm, git, node, etc.).
|
|
29
|
+
- Use web_search if you need to look something up online (may not be configured).
|
|
30
|
+
|
|
31
|
+
## Never
|
|
32
|
+
- Fabricate file edits — always use the write_file tool.
|
|
33
|
+
- Output secrets or API keys.
|
|
34
|
+
- Run destructive commands (rm -rf, etc.) without explicit user approval.
|
|
35
|
+
- Reference external assets/files that haven't been created.`;
|
|
36
|
+
if (skillSnippets.length > 0) {
|
|
37
|
+
prompt += '\n\n## Relevant Skills\n';
|
|
38
|
+
for (const snippet of skillSnippets) {
|
|
39
|
+
prompt += `\n${snippet}\n`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return prompt;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,aAAuB;IAEvB,IAAI,MAAM,GAAG;kBACG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DA4B+B,CAAC;IAE5D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,0BAA0B,CAAC;QACrC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,OAAO,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core message types for the LLM conversation protocol.
|
|
3
|
+
* Compatible with OpenAI's chat completion format.
|
|
4
|
+
*/
|
|
5
|
+
export interface Message {
|
|
6
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
7
|
+
content: string | null;
|
|
8
|
+
tool_calls?: ToolCall[];
|
|
9
|
+
tool_call_id?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ToolCall {
|
|
13
|
+
id: string;
|
|
14
|
+
type: 'function';
|
|
15
|
+
function: {
|
|
16
|
+
name: string;
|
|
17
|
+
arguments: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface ToolDefinition {
|
|
21
|
+
type: 'function';
|
|
22
|
+
function: {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
parameters: Record<string, unknown>;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface ToolResult {
|
|
29
|
+
success: boolean;
|
|
30
|
+
output: string;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ProviderResponse {
|
|
34
|
+
content: string | null;
|
|
35
|
+
toolCalls: ToolCall[];
|
|
36
|
+
finishReason: string;
|
|
37
|
+
}
|
|
38
|
+
export interface LLMProvider {
|
|
39
|
+
name: string;
|
|
40
|
+
generate(messages: Message[], tools: ToolDefinition[]): Promise<ProviderResponse>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,cAAc,EAAE,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* developer-ai — library exports.
|
|
3
|
+
* Use these to embed the agent in your own Node.js scripts.
|
|
4
|
+
*/
|
|
5
|
+
export { Agent } from './core/agent.js';
|
|
6
|
+
export type { AgentOptions } from './core/agent.js';
|
|
7
|
+
export type { Message, ToolCall, ToolDefinition, ToolResult, LLMProvider, ProviderResponse, } from './core/types.js';
|
|
8
|
+
export { OpenAIProvider } from './providers/openai.js';
|
|
9
|
+
export { OllamaProvider } from './providers/ollama.js';
|
|
10
|
+
export { createToolRegistry, ToolRegistry } from './tools/index.js';
|
|
11
|
+
export type { ToolHandler, ToolContext } from './tools/index.js';
|
|
12
|
+
export { McpManager } from './mcp/client.js';
|
|
13
|
+
export { SkillsLoader } from './skills/loader.js';
|
|
14
|
+
export { loadConfig, saveConfig, loadMcpConfig } from './config/index.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EACV,OAAO,EACP,QAAQ,EACR,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* developer-ai — library exports.
|
|
3
|
+
* Use these to embed the agent in your own Node.js scripts.
|
|
4
|
+
*/
|
|
5
|
+
export { Agent } from './core/agent.js';
|
|
6
|
+
export { OpenAIProvider } from './providers/openai.js';
|
|
7
|
+
export { OllamaProvider } from './providers/ollama.js';
|
|
8
|
+
export { createToolRegistry, ToolRegistry } from './tools/index.js';
|
|
9
|
+
export { McpManager } from './mcp/client.js';
|
|
10
|
+
export { SkillsLoader } from './skills/loader.js';
|
|
11
|
+
export { loadConfig, saveConfig, loadMcpConfig } from './config/index.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ToolDefinition, ToolResult } from '../core/types.js';
|
|
2
|
+
import type { McpConfig } from '../config/schema.js';
|
|
3
|
+
export declare class McpManager {
|
|
4
|
+
private connections;
|
|
5
|
+
private toolMap;
|
|
6
|
+
private cachedDefs;
|
|
7
|
+
initialize(config: McpConfig): Promise<void>;
|
|
8
|
+
getToolDefinitions(): ToolDefinition[];
|
|
9
|
+
isMcpTool(name: string): boolean;
|
|
10
|
+
callTool(namespacedName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
11
|
+
disconnect(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAmLrD,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,OAAO,CAGX;IACJ,OAAO,CAAC,UAAU,CAAwB;IAEpC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAuClD,kBAAkB,IAAI,cAAc,EAAE;IAItC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,QAAQ,CACZ,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC;IA+BtB,UAAU,IAAI,IAAI;CAQnB"}
|