thatgfsj-code 0.2.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/.patches/0001-fix-repl-replace-readline-with-inquirer-input-for-ke.patch +279 -0
- package/.patches/0002-fix-repl-stream-AI-output-directly-to-stdout-so-term.patch +564 -0
- package/.patches/0003-fix-session-break-the-hallucination-loop-in-assistan.patch +194 -0
- package/.patches/0004-chore-release-bump-version-to-0.2.1.patch +24 -0
- package/LICENSE +21 -0
- package/README.md +100 -0
- package/ROADMAP.md +107 -0
- package/dist/agent/core.d.ts +56 -0
- package/dist/agent/core.d.ts.map +1 -0
- package/dist/agent/core.js +142 -0
- package/dist/agent/core.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/intent.d.ts +36 -0
- package/dist/agent/intent.d.ts.map +1 -0
- package/dist/agent/intent.js +146 -0
- package/dist/agent/intent.js.map +1 -0
- package/dist/agent/streaming.d.ts +50 -0
- package/dist/agent/streaming.d.ts.map +1 -0
- package/dist/agent/streaming.js +110 -0
- package/dist/agent/streaming.js.map +1 -0
- package/dist/core/ai-engine.d.ts +59 -0
- package/dist/core/ai-engine.d.ts.map +1 -0
- package/dist/core/ai-engine.js +378 -0
- package/dist/core/ai-engine.js.map +1 -0
- package/dist/core/cli.d.ts +21 -0
- package/dist/core/cli.d.ts.map +1 -0
- package/dist/core/cli.js +143 -0
- package/dist/core/cli.js.map +1 -0
- package/dist/core/config.d.ts +38 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +129 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context-compactor.d.ts +54 -0
- package/dist/core/context-compactor.d.ts.map +1 -0
- package/dist/core/context-compactor.js +197 -0
- package/dist/core/context-compactor.js.map +1 -0
- package/dist/core/hooks.d.ts +75 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +146 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/permissions.d.ts +52 -0
- package/dist/core/permissions.d.ts.map +1 -0
- package/dist/core/permissions.js +237 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/session.d.ts +54 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +147 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/skills.d.ts +60 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +175 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/state.d.ts +60 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +106 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/subagent.d.ts +68 -0
- package/dist/core/subagent.d.ts.map +1 -0
- package/dist/core/subagent.js +142 -0
- package/dist/core/subagent.js.map +1 -0
- package/dist/core/system-prompt.d.ts +40 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +138 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/tool-registry.d.ts +53 -0
- package/dist/core/tool-registry.d.ts.map +1 -0
- package/dist/core/tool-registry.js +138 -0
- package/dist/core/tool-registry.js.map +1 -0
- package/dist/core/types.d.ts +206 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +127 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +481 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +83 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +267 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/repl/index.d.ts +8 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/index.js +8 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/input.d.ts +61 -0
- package/dist/repl/input.d.ts.map +1 -0
- package/dist/repl/input.js +127 -0
- package/dist/repl/input.js.map +1 -0
- package/dist/repl/loop.d.ts +53 -0
- package/dist/repl/loop.d.ts.map +1 -0
- package/dist/repl/loop.js +241 -0
- package/dist/repl/loop.js.map +1 -0
- package/dist/repl/output.d.ts +105 -0
- package/dist/repl/output.d.ts.map +1 -0
- package/dist/repl/output.js +197 -0
- package/dist/repl/output.js.map +1 -0
- package/dist/repl/welcome.d.ts +68 -0
- package/dist/repl/welcome.d.ts.map +1 -0
- package/dist/repl/welcome.js +249 -0
- package/dist/repl/welcome.js.map +1 -0
- package/dist/tools/file.d.ts +46 -0
- package/dist/tools/file.d.ts.map +1 -0
- package/dist/tools/file.js +100 -0
- package/dist/tools/file.js.map +1 -0
- package/dist/tools/git.d.ts +52 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +112 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/index.d.ts +22 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +43 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +36 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +223 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shell.d.ts +57 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +153 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/utils/diff-preview.d.ts +42 -0
- package/dist/utils/diff-preview.d.ts.map +1 -0
- package/dist/utils/diff-preview.js +174 -0
- package/dist/utils/diff-preview.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/memory.d.ts +81 -0
- package/dist/utils/memory.d.ts.map +1 -0
- package/dist/utils/memory.js +186 -0
- package/dist/utils/memory.js.map +1 -0
- package/dist/utils/project-context.d.ts +62 -0
- package/dist/utils/project-context.d.ts.map +1 -0
- package/dist/utils/project-context.js +197 -0
- package/dist/utils/project-context.js.map +1 -0
- package/docs/API_KEY_GUIDE.md +236 -0
- package/docs/FAQ.md +182 -0
- package/install.bat +63 -0
- package/install.ps1 +238 -0
- package/install.sh +113 -0
- package/package.json +36 -0
- package/src/agent/core.ts +179 -0
- package/src/agent/index.ts +8 -0
- package/src/agent/intent.ts +181 -0
- package/src/agent/streaming.ts +132 -0
- package/src/core/ai-engine.ts +437 -0
- package/src/core/cli.ts +171 -0
- package/src/core/config.ts +147 -0
- package/src/core/context-compactor.ts +245 -0
- package/src/core/hooks.ts +196 -0
- package/src/core/permissions.ts +308 -0
- package/src/core/session.ts +165 -0
- package/src/core/skills.ts +208 -0
- package/src/core/state.ts +120 -0
- package/src/core/subagent.ts +195 -0
- package/src/core/system-prompt.ts +163 -0
- package/src/core/tool-registry.ts +157 -0
- package/src/core/types.ts +280 -0
- package/src/index.ts +544 -0
- package/src/mcp/client.ts +330 -0
- package/src/repl/index.ts +8 -0
- package/src/repl/input.ts +139 -0
- package/src/repl/loop.ts +280 -0
- package/src/repl/output.ts +222 -0
- package/src/repl/welcome.ts +296 -0
- package/src/tools/file.ts +117 -0
- package/src/tools/git.ts +132 -0
- package/src/tools/index.ts +48 -0
- package/src/tools/search.ts +263 -0
- package/src/tools/shell.ts +181 -0
- package/src/utils/diff-preview.ts +202 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/memory.ts +223 -0
- package/src/utils/project-context.ts +207 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S04: System Prompt Builder
|
|
3
|
+
* Dynamic system prompt construction - not a static string, but a program
|
|
4
|
+
* that assembles context from multiple sources each turn
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, existsSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
/**
|
|
9
|
+
* S04: System Prompt Builder - assembles prompt from multiple fragments
|
|
10
|
+
*/
|
|
11
|
+
export class SystemPromptBuilder {
|
|
12
|
+
config;
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
this.config = {
|
|
15
|
+
cwd: process.cwd(),
|
|
16
|
+
tools: [],
|
|
17
|
+
includeClaudeMd: true,
|
|
18
|
+
permissionMode: 'ask',
|
|
19
|
+
date: new Date(),
|
|
20
|
+
model: 'unknown',
|
|
21
|
+
...config
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
build() {
|
|
25
|
+
const fragments = [];
|
|
26
|
+
fragments.push(this.buildIdentity());
|
|
27
|
+
fragments.push(this.buildToolInstructions());
|
|
28
|
+
fragments.push(this.buildEnvironment());
|
|
29
|
+
fragments.push(this.buildPermissionMode());
|
|
30
|
+
fragments.push(this.buildProjectInstructions());
|
|
31
|
+
fragments.push(this.buildDateInfo());
|
|
32
|
+
fragments.push(this.buildOutputFormat());
|
|
33
|
+
return fragments.filter(Boolean).join('\n\n');
|
|
34
|
+
}
|
|
35
|
+
buildIdentity() {
|
|
36
|
+
return [
|
|
37
|
+
'You are Thatgfsj Code, an AI coding assistant.',
|
|
38
|
+
'',
|
|
39
|
+
'You have access to tools (file operations, shell commands, git, search) that let you',
|
|
40
|
+
'read, write, and modify files and run commands.',
|
|
41
|
+
'',
|
|
42
|
+
'Be concise, helpful, and show your reasoning when working through problems.',
|
|
43
|
+
'',
|
|
44
|
+
'When using tools:',
|
|
45
|
+
'- Prefer small, targeted operations over large batch changes',
|
|
46
|
+
'- Confirm destructive operations (rm, git push --force, etc.)',
|
|
47
|
+
'- Explain what you are going to do before doing it',
|
|
48
|
+
'- If something is not clear, ask clarifying questions'
|
|
49
|
+
].join('\n');
|
|
50
|
+
}
|
|
51
|
+
buildToolInstructions() {
|
|
52
|
+
const tools = this.config.tools || [];
|
|
53
|
+
if (tools.length === 0) {
|
|
54
|
+
return '## Tools\n\nNo tools are currently registered.';
|
|
55
|
+
}
|
|
56
|
+
const toolDescs = tools.map(t => {
|
|
57
|
+
const params = t.parameters
|
|
58
|
+
.map(p => ' - ' + p.name + ' (' + p.type + (p.required ? ', required' : '') + '): ' + p.description)
|
|
59
|
+
.join('\n');
|
|
60
|
+
return '### ' + t.name + '\n' + t.description + '\n\nParameters:\n' + params;
|
|
61
|
+
}).join('\n\n');
|
|
62
|
+
return '## Tools\n\nYou have access to the following tools:\n\n' + toolDescs + '\n\nTo use a tool, respond with a tool call. Each tool call must include:\n- The tool name\n- Parameters as a JSON object';
|
|
63
|
+
}
|
|
64
|
+
buildEnvironment() {
|
|
65
|
+
const cwd = this.config.cwd || process.cwd();
|
|
66
|
+
return '## Environment\n\nWorking directory: ' + cwd;
|
|
67
|
+
}
|
|
68
|
+
buildPermissionMode() {
|
|
69
|
+
const mode = this.config.permissionMode || 'ask';
|
|
70
|
+
const explanations = {
|
|
71
|
+
accept: 'All tool calls are automatically allowed without confirmation.',
|
|
72
|
+
deny: 'All tool calls are blocked. You may only read and discuss.',
|
|
73
|
+
ask: 'Dangerous or destructive commands require your confirmation before execution.'
|
|
74
|
+
};
|
|
75
|
+
return '## Permission Mode\n\nCurrent mode: ' + mode + '\n\n' + (explanations[mode] || '');
|
|
76
|
+
}
|
|
77
|
+
buildProjectInstructions() {
|
|
78
|
+
const cwd = this.config.cwd || process.cwd();
|
|
79
|
+
if (this.config.includeClaudeMd !== false) {
|
|
80
|
+
const paths = [join(cwd, 'CLAUDE.md'), join(cwd, '.claude.md')];
|
|
81
|
+
for (const path of paths) {
|
|
82
|
+
if (existsSync(path)) {
|
|
83
|
+
try {
|
|
84
|
+
const content = readFileSync(path, 'utf-8');
|
|
85
|
+
return '## Project Instructions (from ' + path.split(/[/\\]/).pop() + ')\n\n' + content;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Ignore
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (this.config.projectInstructions) {
|
|
94
|
+
return '## Project Instructions\n\n' + this.config.projectInstructions;
|
|
95
|
+
}
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
98
|
+
buildDateInfo() {
|
|
99
|
+
const now = this.config.date || new Date();
|
|
100
|
+
const iso = now.toISOString().replace('T', ' ').split('.')[0];
|
|
101
|
+
return '## Current Time\n\n' + iso;
|
|
102
|
+
}
|
|
103
|
+
buildOutputFormat() {
|
|
104
|
+
return [
|
|
105
|
+
'## Output Format',
|
|
106
|
+
'',
|
|
107
|
+
'- Use clear section headers for multi-part responses',
|
|
108
|
+
'- Use bullet points for lists',
|
|
109
|
+
'- Use code blocks for code',
|
|
110
|
+
'- Be concise, avoid unnecessary repetition',
|
|
111
|
+
'- If you need multiple steps, explain the plan first'
|
|
112
|
+
].join('\n');
|
|
113
|
+
}
|
|
114
|
+
setTools(tools) { this.config.tools = tools; return this; }
|
|
115
|
+
setCwd(cwd) { this.config.cwd = cwd; return this; }
|
|
116
|
+
setPermissionMode(mode) { this.config.permissionMode = mode; return this; }
|
|
117
|
+
setProjectInstructions(instructions) { this.config.projectInstructions = instructions; return this; }
|
|
118
|
+
setModel(model) { this.config.model = model; return this; }
|
|
119
|
+
buildToolsFragment() { return this.buildToolInstructions(); }
|
|
120
|
+
injectReminder(reminder) {
|
|
121
|
+
return '\n## Reminder\n\n' + reminder + '\n';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
let globalBuilder = null;
|
|
125
|
+
export function getSystemPromptBuilder(config) {
|
|
126
|
+
if (!globalBuilder)
|
|
127
|
+
globalBuilder = new SystemPromptBuilder(config);
|
|
128
|
+
return globalBuilder;
|
|
129
|
+
}
|
|
130
|
+
export function updateSystemPrompt(tools, permissionMode) {
|
|
131
|
+
if (globalBuilder) {
|
|
132
|
+
if (tools)
|
|
133
|
+
globalBuilder.setTools(tools);
|
|
134
|
+
if (permissionMode)
|
|
135
|
+
globalBuilder.setPermissionMode(permissionMode);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry - Manages available tools with context support
|
|
3
|
+
* S02: Enhanced with inputSchema generation and permission metadata
|
|
4
|
+
*/
|
|
5
|
+
import { Tool, ToolResult, ToolContext, ToolInputSchema } from './types.js';
|
|
6
|
+
export declare class ToolRegistry {
|
|
7
|
+
private tools;
|
|
8
|
+
private context;
|
|
9
|
+
constructor();
|
|
10
|
+
setContext(ctx: Partial<ToolContext>): void;
|
|
11
|
+
getContext(): ToolContext;
|
|
12
|
+
register(tool: Tool): void;
|
|
13
|
+
unregister(name: string): boolean;
|
|
14
|
+
get(name: string): Tool | undefined;
|
|
15
|
+
list(): string[];
|
|
16
|
+
/**
|
|
17
|
+
* S02: Get tools formatted for AI API
|
|
18
|
+
* Uses inputSchema if available, otherwise builds from parameters
|
|
19
|
+
*/
|
|
20
|
+
getToolsForAPI(): {
|
|
21
|
+
type: "function";
|
|
22
|
+
function: {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
parameters: ToolInputSchema;
|
|
26
|
+
};
|
|
27
|
+
}[];
|
|
28
|
+
/**
|
|
29
|
+
* S02: Build JSON Schema from legacy parameters array
|
|
30
|
+
*/
|
|
31
|
+
private buildInputSchema;
|
|
32
|
+
/**
|
|
33
|
+
* S02: List all tools with their metadata
|
|
34
|
+
*/
|
|
35
|
+
listAll(): {
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
permissions: ("read" | "write" | "execute" | "network")[] | undefined;
|
|
39
|
+
tags: string[] | undefined;
|
|
40
|
+
deprecated: string | undefined;
|
|
41
|
+
}[];
|
|
42
|
+
execute(name: string, params: Record<string, any>): Promise<ToolResult>;
|
|
43
|
+
/**
|
|
44
|
+
* S02: Validate params against tool's inputSchema
|
|
45
|
+
*/
|
|
46
|
+
private validateParams;
|
|
47
|
+
executeAll(tools: Array<{
|
|
48
|
+
name: string;
|
|
49
|
+
params: Record<string, any>;
|
|
50
|
+
}>): Promise<ToolResult[]>;
|
|
51
|
+
private registerDefaultTools;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/core/tool-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAmB;;IAMlC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;IAIpC,UAAU,IAAI,WAAW;IAIzB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAO1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,IAAI,IAAI,MAAM,EAAE;IAIhB;;;OAGG;IACH,cAAc;;;;;;;;IAWd;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO;;;;;;;IAUD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAoB7E;;OAEG;IACH,OAAO,CAAC,cAAc;IA8BhB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAUpG,OAAO,CAAC,oBAAoB;CAG7B"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry - Manages available tools with context support
|
|
3
|
+
* S02: Enhanced with inputSchema generation and permission metadata
|
|
4
|
+
*/
|
|
5
|
+
export class ToolRegistry {
|
|
6
|
+
tools = new Map();
|
|
7
|
+
context = {};
|
|
8
|
+
constructor() {
|
|
9
|
+
this.registerDefaultTools();
|
|
10
|
+
}
|
|
11
|
+
setContext(ctx) {
|
|
12
|
+
this.context = { ...this.context, ...ctx };
|
|
13
|
+
}
|
|
14
|
+
getContext() {
|
|
15
|
+
return this.context;
|
|
16
|
+
}
|
|
17
|
+
register(tool) {
|
|
18
|
+
if (this.tools.has(tool.name)) {
|
|
19
|
+
console.warn(`Tool ${tool.name} already exists, overwriting...`);
|
|
20
|
+
}
|
|
21
|
+
this.tools.set(tool.name, tool);
|
|
22
|
+
}
|
|
23
|
+
unregister(name) {
|
|
24
|
+
return this.tools.delete(name);
|
|
25
|
+
}
|
|
26
|
+
get(name) {
|
|
27
|
+
return this.tools.get(name);
|
|
28
|
+
}
|
|
29
|
+
list() {
|
|
30
|
+
return Array.from(this.tools.keys());
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* S02: Get tools formatted for AI API
|
|
34
|
+
* Uses inputSchema if available, otherwise builds from parameters
|
|
35
|
+
*/
|
|
36
|
+
getToolsForAPI() {
|
|
37
|
+
return Array.from(this.tools.values()).map(tool => ({
|
|
38
|
+
type: 'function',
|
|
39
|
+
function: {
|
|
40
|
+
name: tool.name,
|
|
41
|
+
description: tool.description,
|
|
42
|
+
parameters: tool.inputSchema || this.buildInputSchema(tool)
|
|
43
|
+
}
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* S02: Build JSON Schema from legacy parameters array
|
|
48
|
+
*/
|
|
49
|
+
buildInputSchema(tool) {
|
|
50
|
+
return {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: tool.parameters.reduce((acc, p) => {
|
|
53
|
+
acc[p.name] = {
|
|
54
|
+
type: p.type === 'string' ? 'string'
|
|
55
|
+
: p.type === 'number' ? 'number'
|
|
56
|
+
: p.type === 'boolean' ? 'boolean'
|
|
57
|
+
: 'string',
|
|
58
|
+
description: p.description
|
|
59
|
+
};
|
|
60
|
+
return acc;
|
|
61
|
+
}, {}),
|
|
62
|
+
required: tool.parameters.filter(p => p.required).map(p => p.name)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* S02: List all tools with their metadata
|
|
67
|
+
*/
|
|
68
|
+
listAll() {
|
|
69
|
+
return Array.from(this.tools.values()).map(t => ({
|
|
70
|
+
name: t.name,
|
|
71
|
+
description: t.description,
|
|
72
|
+
permissions: t.metadata?.permissions,
|
|
73
|
+
tags: t.metadata?.tags,
|
|
74
|
+
deprecated: t.metadata?.deprecated
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
async execute(name, params) {
|
|
78
|
+
const tool = this.tools.get(name);
|
|
79
|
+
if (!tool) {
|
|
80
|
+
return { success: false, error: `Tool "${name}" not found` };
|
|
81
|
+
}
|
|
82
|
+
// S02: Validate params against inputSchema
|
|
83
|
+
const validationError = this.validateParams(tool, params);
|
|
84
|
+
if (validationError) {
|
|
85
|
+
return { success: false, error: validationError };
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
return await tool.execute(params, this.context);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return { success: false, error: error.message };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* S02: Validate params against tool's inputSchema
|
|
96
|
+
*/
|
|
97
|
+
validateParams(tool, params) {
|
|
98
|
+
const schema = tool.inputSchema || this.buildInputSchema(tool);
|
|
99
|
+
// Check required
|
|
100
|
+
if (schema.required) {
|
|
101
|
+
for (const req of schema.required) {
|
|
102
|
+
if (params[req] === undefined || params[req] === null) {
|
|
103
|
+
return `Missing required parameter: ${req}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Check types
|
|
108
|
+
for (const [key, value] of Object.entries(params)) {
|
|
109
|
+
const prop = schema.properties[key];
|
|
110
|
+
if (prop && value !== undefined) {
|
|
111
|
+
const expectedType = prop.type;
|
|
112
|
+
const actualType = typeof value;
|
|
113
|
+
// Type coercion for string/number
|
|
114
|
+
if (expectedType === 'number' && actualType === 'string' && !isNaN(Number(value))) {
|
|
115
|
+
// Auto-coerce strings to numbers — ok
|
|
116
|
+
}
|
|
117
|
+
else if (actualType !== expectedType) {
|
|
118
|
+
return `Invalid type for ${key}: expected ${expectedType}, got ${actualType}`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
async executeAll(tools) {
|
|
125
|
+
const results = [];
|
|
126
|
+
for (const { name, params } of tools) {
|
|
127
|
+
const result = await this.execute(name, params);
|
|
128
|
+
results.push(result);
|
|
129
|
+
if (!result.success)
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
return results;
|
|
133
|
+
}
|
|
134
|
+
registerDefaultTools() {
|
|
135
|
+
// Tools registered externally via AIEngine
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/core/tool-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,YAAY;IACf,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IACrC,OAAO,GAAgB,EAAE,CAAC;IAElC;QACE,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,GAAyB;QAClC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC;IAC7C,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,iCAAiC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;aAC5D;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAU;QACjC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5C,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;wBAChC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;4BAChC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS;gCAClC,CAAC,CAAC,QAAQ;oBACd,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC3B,CAAC;gBACF,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAA2D,CAAC;YAC/D,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACnE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW;YACpC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI;YACtB,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU;SACnC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAA2B;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/D,CAAC;QAED,2CAA2C;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,IAAU,EAAE,MAA2B;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE/D,iBAAiB;QACjB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;oBACtD,OAAO,+BAA+B,GAAG,EAAE,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,cAAc;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC/B,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC;gBAChC,kCAAkC;gBAClC,IAAI,YAAY,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAClF,sCAAsC;gBACxC,CAAC;qBAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;oBACvC,OAAO,oBAAoB,GAAG,cAAc,YAAY,SAAS,UAAU,EAAE,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAA2D;QAC1E,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,oBAAoB;QAC1B,2CAA2C;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for Thatgfsj Code
|
|
3
|
+
* S02: Enhanced Tool interface with Builder pattern, inputSchema, and metadata
|
|
4
|
+
*/
|
|
5
|
+
export type Role = 'system' | 'user' | 'assistant' | 'tool';
|
|
6
|
+
export interface ChatMessage {
|
|
7
|
+
role: Role;
|
|
8
|
+
content: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
tool_calls?: ToolCall[];
|
|
11
|
+
tool_call_id?: string;
|
|
12
|
+
reasoning_content?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ToolCall {
|
|
15
|
+
id: string;
|
|
16
|
+
type: 'function';
|
|
17
|
+
function: {
|
|
18
|
+
name: string;
|
|
19
|
+
arguments: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface AIResponse {
|
|
23
|
+
content: string;
|
|
24
|
+
role: 'assistant';
|
|
25
|
+
usage?: {
|
|
26
|
+
prompt_tokens: number;
|
|
27
|
+
completion_tokens: number;
|
|
28
|
+
total_tokens: number;
|
|
29
|
+
};
|
|
30
|
+
tool_calls?: ToolCall[];
|
|
31
|
+
reasoning_content?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface AIConfig {
|
|
34
|
+
model: string;
|
|
35
|
+
apiKey?: string;
|
|
36
|
+
temperature?: number;
|
|
37
|
+
maxTokens?: number;
|
|
38
|
+
baseUrl?: string;
|
|
39
|
+
provider?: 'minimax' | 'openai' | 'siliconflow' | 'anthropic' | 'ollama' | 'custom' | 'gemini' | 'kimi' | 'deepseek' | 'ernie';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Tool parameter with type support
|
|
43
|
+
*/
|
|
44
|
+
export interface ToolParameter {
|
|
45
|
+
name: string;
|
|
46
|
+
type: string;
|
|
47
|
+
description: string;
|
|
48
|
+
required: boolean;
|
|
49
|
+
default?: any;
|
|
50
|
+
enum?: string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* S02: Input Schema — JSON Schema style tool input definition
|
|
54
|
+
* Claude Code uses this for structured tool parameter validation
|
|
55
|
+
*/
|
|
56
|
+
export interface ToolInputSchema {
|
|
57
|
+
type: 'object';
|
|
58
|
+
properties: Record<string, {
|
|
59
|
+
type: string;
|
|
60
|
+
description: string;
|
|
61
|
+
default?: any;
|
|
62
|
+
enum?: string[];
|
|
63
|
+
}>;
|
|
64
|
+
required?: string[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* S02: Tool metadata — extra info beyond name/description
|
|
68
|
+
*/
|
|
69
|
+
export interface ToolMetadata {
|
|
70
|
+
/** Permission category: read, write, execute, network */
|
|
71
|
+
permissions?: ('read' | 'write' | 'execute' | 'network')[];
|
|
72
|
+
/** Max execution time in ms */
|
|
73
|
+
maxDuration?: number;
|
|
74
|
+
/** Tags for categorization */
|
|
75
|
+
tags?: string[];
|
|
76
|
+
/** Version */
|
|
77
|
+
version?: string;
|
|
78
|
+
/** Deprecation notice */
|
|
79
|
+
deprecated?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* S02: Tool interface with inputSchema + metadata
|
|
83
|
+
* Both 'parameters' (legacy) and 'inputSchema' (new) are supported
|
|
84
|
+
*/
|
|
85
|
+
export interface Tool {
|
|
86
|
+
name: string;
|
|
87
|
+
description: string;
|
|
88
|
+
/** Legacy parameter list (still used by existing tools) */
|
|
89
|
+
parameters: ToolParameter[];
|
|
90
|
+
/** S02: JSON Schema for tool input (computed from parameters) */
|
|
91
|
+
inputSchema?: ToolInputSchema;
|
|
92
|
+
/** S02: Metadata for permissions, tags, etc. */
|
|
93
|
+
metadata?: ToolMetadata;
|
|
94
|
+
execute(params: Record<string, any>, ctx?: ToolContext): Promise<ToolResult>;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* S02: Enriched execution context
|
|
98
|
+
*/
|
|
99
|
+
export interface ToolContext {
|
|
100
|
+
sessionId?: string;
|
|
101
|
+
workingDirectory?: string;
|
|
102
|
+
confirmAction?: (msg: string) => Promise<boolean>;
|
|
103
|
+
signal?: AbortSignal;
|
|
104
|
+
toolCallId?: string;
|
|
105
|
+
}
|
|
106
|
+
export { ToolParameter as ToolParam };
|
|
107
|
+
/**
|
|
108
|
+
* S02: Tool Builder — fluent API to construct tools
|
|
109
|
+
*/
|
|
110
|
+
export declare class ToolBuilder {
|
|
111
|
+
private _name;
|
|
112
|
+
private _description;
|
|
113
|
+
private _parameters;
|
|
114
|
+
private _inputSchema;
|
|
115
|
+
private _metadata;
|
|
116
|
+
private _fn?;
|
|
117
|
+
name(n: string): this;
|
|
118
|
+
description(d: string): this;
|
|
119
|
+
param(p: ToolParameter): this;
|
|
120
|
+
stringParam(name: string, description: string, required?: boolean, defaultVal?: string): this;
|
|
121
|
+
numberParam(name: string, description: string, required?: boolean, defaultVal?: number): this;
|
|
122
|
+
booleanParam(name: string, description: string, required?: boolean, defaultVal?: boolean): this;
|
|
123
|
+
required(...names: string[]): this;
|
|
124
|
+
meta(m: ToolMetadata): this;
|
|
125
|
+
permissions(...perms: ('read' | 'write' | 'execute' | 'network')[]): this;
|
|
126
|
+
tags(...t: string[]): this;
|
|
127
|
+
handle(fn: (params: Record<string, any>, ctx: ToolContext) => Promise<ToolResult>): this;
|
|
128
|
+
build(): Tool;
|
|
129
|
+
}
|
|
130
|
+
export interface ToolResult {
|
|
131
|
+
success: boolean;
|
|
132
|
+
output?: string;
|
|
133
|
+
error?: string;
|
|
134
|
+
data?: any;
|
|
135
|
+
}
|
|
136
|
+
export interface Session {
|
|
137
|
+
id: string;
|
|
138
|
+
messages: ChatMessage[];
|
|
139
|
+
createdAt: Date;
|
|
140
|
+
lastActiveAt: Date;
|
|
141
|
+
}
|
|
142
|
+
export interface Config {
|
|
143
|
+
model: string;
|
|
144
|
+
apiKey: string;
|
|
145
|
+
temperature: number;
|
|
146
|
+
maxTokens: number;
|
|
147
|
+
provider?: 'minimax' | 'openai' | 'siliconflow' | 'anthropic' | 'ollama' | 'custom' | 'gemini' | 'kimi' | 'deepseek' | 'ernie';
|
|
148
|
+
baseUrl?: string;
|
|
149
|
+
}
|
|
150
|
+
export declare const PROVIDERS: {
|
|
151
|
+
readonly minimax: {
|
|
152
|
+
readonly name: "MiniMax";
|
|
153
|
+
readonly baseUrl: "https://api.minimax.io/anthropic/v1";
|
|
154
|
+
readonly defaultModel: "MiniMax-M2.5";
|
|
155
|
+
readonly envKeys: readonly ["MINIMAX_API_KEY", "OPENAI_API_KEY"];
|
|
156
|
+
};
|
|
157
|
+
readonly siliconflow: {
|
|
158
|
+
readonly name: "SiliconFlow (硅基流动)";
|
|
159
|
+
readonly baseUrl: "https://api.siliconflow.cn/v1";
|
|
160
|
+
readonly defaultModel: "Qwen/Qwen2.5-7B-Instruct";
|
|
161
|
+
readonly envKeys: readonly ["SILICONFLOW_API_KEY", "OPENAI_API_KEY"];
|
|
162
|
+
};
|
|
163
|
+
readonly openai: {
|
|
164
|
+
readonly name: "OpenAI";
|
|
165
|
+
readonly baseUrl: "https://api.openai.com/v1";
|
|
166
|
+
readonly defaultModel: "gpt-4o-mini";
|
|
167
|
+
readonly envKeys: readonly ["OPENAI_API_KEY"];
|
|
168
|
+
};
|
|
169
|
+
readonly anthropic: {
|
|
170
|
+
readonly name: "Anthropic";
|
|
171
|
+
readonly baseUrl: "https://api.anthropic.com/v1";
|
|
172
|
+
readonly defaultModel: "claude-3-haiku-20240307";
|
|
173
|
+
readonly envKeys: readonly ["ANTHROPIC_API_KEY"];
|
|
174
|
+
};
|
|
175
|
+
readonly ollama: {
|
|
176
|
+
readonly name: "Ollama (Local)";
|
|
177
|
+
readonly baseUrl: string;
|
|
178
|
+
readonly defaultModel: "llama2";
|
|
179
|
+
readonly envKeys: readonly [];
|
|
180
|
+
};
|
|
181
|
+
readonly gemini: {
|
|
182
|
+
readonly name: "Google Gemini";
|
|
183
|
+
readonly baseUrl: "https://generativelanguage.googleapis.com/v1beta";
|
|
184
|
+
readonly defaultModel: "gemini-1.5-flash";
|
|
185
|
+
readonly envKeys: readonly ["GEMINI_API_KEY"];
|
|
186
|
+
};
|
|
187
|
+
readonly kimi: {
|
|
188
|
+
readonly name: "Kimi (Moonshot AI)";
|
|
189
|
+
readonly baseUrl: "https://api.moonshot.cn/v1";
|
|
190
|
+
readonly defaultModel: "moonshot-v1-8k";
|
|
191
|
+
readonly envKeys: readonly ["KIMI_API_KEY", "MOONSHOT_API_KEY"];
|
|
192
|
+
};
|
|
193
|
+
readonly deepseek: {
|
|
194
|
+
readonly name: "DeepSeek";
|
|
195
|
+
readonly baseUrl: "https://api.deepseek.com/v1";
|
|
196
|
+
readonly defaultModel: "deepseek-chat";
|
|
197
|
+
readonly envKeys: readonly ["DEEPSEEK_API_KEY"];
|
|
198
|
+
};
|
|
199
|
+
readonly ernie: {
|
|
200
|
+
readonly name: "Baidu ERNIE (文心一言)";
|
|
201
|
+
readonly baseUrl: "https://aip.baidubce.com/rpc/2.0/ai_custom/v1";
|
|
202
|
+
readonly defaultModel: "ernie-4.0-8k";
|
|
203
|
+
readonly envKeys: readonly ["ERNIE_API_KEY", "BAIDU_API_KEY"];
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|