@grisaiaevy/crafting-agent 0.0.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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/dist/image/api.d.ts +3 -0
  4. package/dist/image/api.js +23 -0
  5. package/dist/image/api.js.map +1 -0
  6. package/dist/image/index.d.ts +2 -0
  7. package/dist/image/index.js +19 -0
  8. package/dist/image/index.js.map +1 -0
  9. package/dist/image/types.d.ts +8 -0
  10. package/dist/image/types.js +3 -0
  11. package/dist/image/types.js.map +1 -0
  12. package/dist/index.d.ts +9 -0
  13. package/dist/index.js +28 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/logger/index.d.ts +1 -0
  16. package/dist/logger/index.js +7 -0
  17. package/dist/logger/index.js.map +1 -0
  18. package/dist/logger/logger.d.ts +3 -0
  19. package/dist/logger/logger.js +23 -0
  20. package/dist/logger/logger.js.map +1 -0
  21. package/dist/prompt/index.d.ts +2 -0
  22. package/dist/prompt/index.js +6 -0
  23. package/dist/prompt/index.js.map +1 -0
  24. package/dist/prompt/prompt.d.ts +2 -0
  25. package/dist/prompt/prompt.js +68 -0
  26. package/dist/prompt/prompt.js.map +1 -0
  27. package/dist/providers/doubao.d.ts +10 -0
  28. package/dist/providers/doubao.js +76 -0
  29. package/dist/providers/doubao.js.map +1 -0
  30. package/dist/providers/google.d.ts +12 -0
  31. package/dist/providers/google.js +70 -0
  32. package/dist/providers/google.js.map +1 -0
  33. package/dist/providers/index.d.ts +6 -0
  34. package/dist/providers/index.js +23 -0
  35. package/dist/providers/index.js.map +1 -0
  36. package/dist/providers/message_converer.d.ts +4 -0
  37. package/dist/providers/message_converer.js +206 -0
  38. package/dist/providers/message_converer.js.map +1 -0
  39. package/dist/providers/minimax.d.ts +10 -0
  40. package/dist/providers/minimax.js +120 -0
  41. package/dist/providers/minimax.js.map +1 -0
  42. package/dist/providers/openrouter.d.ts +17 -0
  43. package/dist/providers/openrouter.js +178 -0
  44. package/dist/providers/openrouter.js.map +1 -0
  45. package/dist/providers/stream.d.ts +1 -0
  46. package/dist/providers/stream.js +18 -0
  47. package/dist/providers/stream.js.map +1 -0
  48. package/dist/storage/index.d.ts +1 -0
  49. package/dist/storage/index.js +6 -0
  50. package/dist/storage/index.js.map +1 -0
  51. package/dist/storage/task-storage.d.ts +13 -0
  52. package/dist/storage/task-storage.js +7 -0
  53. package/dist/storage/task-storage.js.map +1 -0
  54. package/dist/task/converter.d.ts +4 -0
  55. package/dist/task/converter.js +66 -0
  56. package/dist/task/converter.js.map +1 -0
  57. package/dist/task/index.d.ts +5 -0
  58. package/dist/task/index.js +11 -0
  59. package/dist/task/index.js.map +1 -0
  60. package/dist/task/task_executor.d.ts +22 -0
  61. package/dist/task/task_executor.js +216 -0
  62. package/dist/task/task_executor.js.map +1 -0
  63. package/dist/task/types.d.ts +1 -0
  64. package/dist/task/types.js +18 -0
  65. package/dist/task/types.js.map +1 -0
  66. package/dist/tools/index.d.ts +6 -0
  67. package/dist/tools/index.js +23 -0
  68. package/dist/tools/index.js.map +1 -0
  69. package/dist/tools/replace_content.d.ts +9 -0
  70. package/dist/tools/replace_content.js +72 -0
  71. package/dist/tools/replace_content.js.map +1 -0
  72. package/dist/tools/tool_converter.d.ts +3 -0
  73. package/dist/tools/tool_converter.js +59 -0
  74. package/dist/tools/tool_converter.js.map +1 -0
  75. package/dist/tools/types.d.ts +1 -0
  76. package/dist/tools/types.js +18 -0
  77. package/dist/tools/types.js.map +1 -0
  78. package/dist/tools/update_todo_list.d.ts +13 -0
  79. package/dist/tools/update_todo_list.js +80 -0
  80. package/dist/tools/update_todo_list.js.map +1 -0
  81. package/dist/tools/web_search.d.ts +9 -0
  82. package/dist/tools/web_search.js +44 -0
  83. package/dist/tools/web_search.js.map +1 -0
  84. package/dist/tools/write_content.d.ts +9 -0
  85. package/dist/tools/write_content.js +49 -0
  86. package/dist/tools/write_content.js.map +1 -0
  87. package/dist/types/common.d.ts +14 -0
  88. package/dist/types/common.js +3 -0
  89. package/dist/types/common.js.map +1 -0
  90. package/dist/types/context.d.ts +10 -0
  91. package/dist/types/context.js +3 -0
  92. package/dist/types/context.js.map +1 -0
  93. package/dist/types/index.d.ts +7 -0
  94. package/dist/types/index.js +24 -0
  95. package/dist/types/index.js.map +1 -0
  96. package/dist/types/prompt.d.ts +5 -0
  97. package/dist/types/prompt.js +3 -0
  98. package/dist/types/prompt.js.map +1 -0
  99. package/dist/types/provider.d.ts +14 -0
  100. package/dist/types/provider.js +372 -0
  101. package/dist/types/provider.js.map +1 -0
  102. package/dist/types/stream.d.ts +59 -0
  103. package/dist/types/stream.js +3 -0
  104. package/dist/types/stream.js.map +1 -0
  105. package/dist/types/task.d.ts +46 -0
  106. package/dist/types/task.js +3 -0
  107. package/dist/types/task.js.map +1 -0
  108. package/dist/types/tools.d.ts +36 -0
  109. package/dist/types/tools.js +30 -0
  110. package/dist/types/tools.js.map +1 -0
  111. package/dist/utils/fetch_html.d.ts +1 -0
  112. package/dist/utils/fetch_html.js +24 -0
  113. package/dist/utils/fetch_html.js.map +1 -0
  114. package/dist/utils/index.d.ts +1 -0
  115. package/dist/utils/index.js +18 -0
  116. package/dist/utils/index.js.map +1 -0
  117. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Crafting Agent
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,159 @@
1
+ # @grisaiaevy/crafting-agent
2
+
3
+ A TypeScript library for building AI agents with support for multiple LLM providers.
4
+
5
+ ## Features
6
+
7
+ - **Multiple LLM Providers**: Support for Google, Doubao, Minimax, and OpenRouter
8
+ - **Task Execution**: Built-in task executor with streaming support
9
+ - **Tool System**: Extensible tool system for agent capabilities
10
+ - **Storage**: Abstracted storage layer for task and conversation persistence
11
+ - **Logging**: Structured logging with Pino
12
+ - **Type Safety**: Full TypeScript support with Zod validation
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install @grisaiaevy/crafting-agent
18
+ ```
19
+
20
+ ## Quick Start
21
+
22
+ ```typescript
23
+ import { Task, TaskStorage, ModelConfig } from '@grisaiaevy/crafting-agent'
24
+
25
+ // Initialize task storage
26
+ const storage = new TaskStorage(/* your storage config */)
27
+
28
+ // Create a task
29
+ const task = new Task(
30
+ 'task-id',
31
+ 'project-id',
32
+ {
33
+ agentModel: {
34
+ provider: 'openrouter',
35
+ apiKey: 'your-api-key',
36
+ model: 'anthropic/claude-3.5-sonnet'
37
+ }
38
+ },
39
+ storage,
40
+ {
41
+ tools: [/* your tools */],
42
+ variables: {}
43
+ }
44
+ )
45
+
46
+ // Execute task
47
+ for await (const chunk of task.startTask('Your task description')) {
48
+ if (chunk.type === 'text') {
49
+ console.log(chunk.text)
50
+ } else if (chunk.type === 'tool_calls') {
51
+ console.log('Tool called:', chunk.tool_call)
52
+ }
53
+ }
54
+ ```
55
+
56
+ ## Supported Providers
57
+
58
+ - **Google**: Google AI models
59
+ - **Doubao**: ByteDance's Doubao models
60
+ - **Minimax**: MiniMax AI models
61
+ - **OpenRouter**: Access to multiple models via OpenRouter
62
+
63
+ ## API Documentation
64
+
65
+ ### Task
66
+
67
+ The main class for executing AI tasks.
68
+
69
+ ```typescript
70
+ const task = new Task(
71
+ taskId: string,
72
+ projectId: string,
73
+ modelConfig: ModelConfig,
74
+ storage: TaskStorage,
75
+ taskContext: TaskContext
76
+ )
77
+
78
+ // Start task execution
79
+ const stream = task.startTask(userInstruction: string): AsyncGenerator<ApiStream>
80
+ ```
81
+
82
+ ### Tools
83
+
84
+ Create custom tools by implementing the `Tool` interface:
85
+
86
+ ```typescript
87
+ import { Tool, ToolDefinition } from '@grisaiaevy/crafting-agent'
88
+
89
+ class MyTool implements Tool {
90
+ tool(): ToolDefinition {
91
+ return {
92
+ type: 'function',
93
+ function: {
94
+ name: 'my_tool',
95
+ description: 'Description of my tool',
96
+ parameters: {
97
+ type: 'object',
98
+ properties: {
99
+ param1: { type: 'string' }
100
+ }
101
+ }
102
+ }
103
+ }
104
+ }
105
+
106
+ async execute(toolCall: ApiStreamToolCall, context: TaskContext): Promise<string> {
107
+ // Implementation
108
+ }
109
+ }
110
+ ```
111
+
112
+ ## Configuration
113
+
114
+ ### ModelConfig
115
+
116
+ ```typescript
117
+ interface ModelConfig {
118
+ agentModel: {
119
+ provider: 'google' | 'doubao' | 'minimax' | 'openrouter'
120
+ apiKey: string
121
+ model: string
122
+ baseUrl?: string
123
+ }
124
+ }
125
+ ```
126
+
127
+ ### TaskContext
128
+
129
+ ```typescript
130
+ interface TaskContext {
131
+ tools?: Tool[]
132
+ variables?: Record<string, string>
133
+ systemPromptBuilder?: ISystemPromptBuilder
134
+ }
135
+ ```
136
+
137
+ ## Development
138
+
139
+ ```bash
140
+ # Install dependencies
141
+ npm install
142
+
143
+ # Build
144
+ npm run build
145
+
146
+ # Watch mode
147
+ npm run watch
148
+
149
+ # Lint
150
+ npm run lint
151
+ ```
152
+
153
+ ## License
154
+
155
+ MIT
156
+
157
+ ## Contributing
158
+
159
+ Contributions are welcome! Please feel free to submit a Pull Request.
@@ -0,0 +1,3 @@
1
+ import { ProviderConfig, AgentImageConfig, ApiStreamImageChunk } from '../types';
2
+ import Anthropic from '@anthropic-ai/sdk';
3
+ export declare function generateImage(userInstruction: string, messages: Anthropic.Messages.MessageParam[], config: AgentImageConfig, providerConfig?: ProviderConfig): Promise<ApiStreamImageChunk>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateImage = generateImage;
4
+ const google_1 = require("../providers/google");
5
+ const openrouter_1 = require("../providers/openrouter");
6
+ function buildGenerateApiHandler(providerConfig) {
7
+ if (!providerConfig?.provider) {
8
+ throw new Error('Provider configuration is missing or incomplete');
9
+ }
10
+ switch (providerConfig.provider) {
11
+ case 'google':
12
+ return new google_1.GoogleHandler(providerConfig);
13
+ case 'openrouter':
14
+ return new openrouter_1.OpenRouterHandler(providerConfig);
15
+ default:
16
+ throw new Error(`Unsupported generator provider: ${providerConfig.provider}`);
17
+ }
18
+ }
19
+ async function generateImage(userInstruction, messages, config, providerConfig) {
20
+ const generateApiHandler = buildGenerateApiHandler(providerConfig);
21
+ return await generateApiHandler.generateContent(userInstruction, messages, config);
22
+ }
23
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/image/api.ts"],"names":[],"mappings":";;AAoBA,sCAQC;AA3BD,gDAAmD;AACnD,wDAA2D;AAG3D,SAAS,uBAAuB,CAAC,cAA+B;IAC5D,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,QAAQ,cAAc,CAAC,QAAQ,EAAE,CAAC;QAChC,KAAK,QAAQ;YACX,OAAO,IAAI,sBAAa,CAAC,cAAc,CAAC,CAAA;QAC1C,KAAK,YAAY;YACf,OAAO,IAAI,8BAAiB,CAAC,cAAc,CAAC,CAAA;QAC9C;YACE,MAAM,IAAI,KAAK,CAAC,mCAAmC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjF,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,eAAuB,EACvB,QAA2C,EAC3C,MAAwB,EACxB,cAA+B;IAE7B,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAA;IAClE,OAAO,MAAM,kBAAkB,CAAC,eAAe,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;AACtF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './api';
2
+ export * from './types';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api"), exports);
18
+ __exportStar(require("./types"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/image/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,0CAAuB"}
@@ -0,0 +1,8 @@
1
+ import { ProviderConfig, AgentImageConfig } from "../types";
2
+ import Anthropic from '@anthropic-ai/sdk';
3
+ export interface GenerateImageConfig {
4
+ userInstruction?: string;
5
+ messages?: Anthropic.Messages.MessageParam[];
6
+ config?: AgentImageConfig;
7
+ providerConfig?: ProviderConfig;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/image/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export * from './types';
2
+ export * from './logger';
3
+ export * from './storage';
4
+ export * from './prompt';
5
+ export * from './utils';
6
+ export * from './providers';
7
+ export * from './tools';
8
+ export { Task } from './task';
9
+ export * from './image';
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Task = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./logger"), exports);
20
+ __exportStar(require("./storage"), exports);
21
+ __exportStar(require("./prompt"), exports);
22
+ __exportStar(require("./utils"), exports);
23
+ __exportStar(require("./providers"), exports);
24
+ __exportStar(require("./tools"), exports);
25
+ var task_1 = require("./task");
26
+ Object.defineProperty(exports, "Task", { enumerable: true, get: function () { return task_1.Task; } });
27
+ __exportStar(require("./image"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,2CAAwB;AACxB,4CAAyB;AACzB,2CAAwB;AACxB,0CAAuB;AACvB,8CAA2B;AAC3B,0CAAuB;AACvB,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AACb,0CAAuB"}
@@ -0,0 +1 @@
1
+ export { logger, createLogger } from './logger';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLogger = exports.logger = void 0;
4
+ var logger_1 = require("./logger");
5
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
6
+ Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_1.createLogger; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAAtC,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA"}
@@ -0,0 +1,3 @@
1
+ import pino from 'pino';
2
+ export declare const logger: pino.Logger<never, boolean>;
3
+ export declare function createLogger(context: Record<string, any>): pino.Logger;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logger = void 0;
7
+ exports.createLogger = createLogger;
8
+ const pino_1 = __importDefault(require("pino"));
9
+ exports.logger = (0, pino_1.default)({
10
+ level: 'info',
11
+ transport: {
12
+ target: 'pino-pretty',
13
+ options: {
14
+ colorize: true,
15
+ translateTime: 'SYS:standard',
16
+ ignore: 'pid,hostname',
17
+ },
18
+ },
19
+ });
20
+ function createLogger(context) {
21
+ return exports.logger.child(context);
22
+ }
23
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":";;;;;;AAcA,oCAEC;AAhBD,gDAAuB;AAEV,QAAA,MAAM,GAAG,IAAA,cAAI,EAAC;IACzB,KAAK,EAAE,MAAM;IACb,SAAS,EAAE;QACT,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,cAAc;YAC7B,MAAM,EAAE,cAAc;SACvB;KACF;CACF,CAAC,CAAA;AAEF,SAAgB,YAAY,CAAC,OAA4B;IACvD,OAAO,cAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type { ISystemPromptBuilder } from '../types';
2
+ export { DefaultSystemPromptBuilder } from './prompt';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultSystemPromptBuilder = void 0;
4
+ var prompt_1 = require("./prompt");
5
+ Object.defineProperty(exports, "DefaultSystemPromptBuilder", { enumerable: true, get: function () { return prompt_1.DefaultSystemPromptBuilder; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":";;;AACA,mCAAqD;AAA5C,oHAAA,0BAA0B,OAAA"}
@@ -0,0 +1,2 @@
1
+ import { ISystemPromptBuilder } from "../types";
2
+ export declare const DefaultSystemPromptBuilder: ISystemPromptBuilder;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultSystemPromptBuilder = void 0;
4
+ exports.DefaultSystemPromptBuilder = {
5
+ async buildSystemPrompt() {
6
+ return `${AGENT_ROLE()}
7
+ ${TOOL_USE_GUIDELINE_SECTION()}
8
+ ${TODO_LIST_SECTIONS()}
9
+ ${CAPABILITIES()}
10
+ `;
11
+ },
12
+ async buildEnvironmentDetails(taskContext) {
13
+ return '';
14
+ }
15
+ };
16
+ function AGENT_ROLE() {
17
+ return `
18
+ 你是百灵鸟,
19
+ 一个拥有专业写作、审美、CSS能力的高级写作人员。
20
+ 你非常擅长微信公众号写作,对文章内容、排版布局、markdown、CSS都非常熟悉,善于产出高质量公众号内容。
21
+ `;
22
+ }
23
+ function TOOL_USE_GUIDELINE_SECTION() {
24
+ return `# **工具使用指南**
25
+ 1. 评估你已掌握的信息以及完成任务所需的信息。
26
+ 2. 根据任务和提供的工具描述,选择最合适的工具。评估是否需要额外信息才能继续,以及哪个可用工具对于收集这些信息最有效。关键是要思考每个可用工具,并使用最适应当前任务步骤的那个。
27
+ 3. 如果需要多个操作,请在每条消息中一次使用一个工具来迭代完成任务,每次工具的使用都应基于前一次工具使用的结果。不要假设任何工具使用的结果。每一步都必须基于前一步的结果。
28
+ 4. 每次使用工具后,用户将回复该工具使用的结果。此结果将为你提供继续任务或做出进一步决策所需的信息。此回复可能包括:
29
+ - 关于工具成功或失败的信息,以及任何失败原因。
30
+ - 针对更改产生的新输出,你可能需要考虑或据此采取行动。
31
+ - 与工具使用相关的任何其他相关反馈或信息。
32
+ 5. 每次使用工具后,**必须**等待用户确认才能继续。切勿在未收到用户明确的结果确认之前假设工具使用成功。
33
+
34
+ 逐步进行并在每次工具使用后等待用户消息,然后再继续任务,这一点至关重要。这种方法使你能够:
35
+
36
+ 1. 在继续之前确认每一步的成功。
37
+ 2. 立即处理出现的任何问题或错误。
38
+ 3. 根据新信息或意外结果调整你的方法。
39
+ 4. 确保每个操作都正确地建立在前一个操作的基础上。
40
+
41
+ 通过在每次工具使用后等待并仔细考虑用户的响应,你可以相应地做出反应,并就如何继续任务做出明智的决策。这个迭代过程有助于确保你工作的整体成功和准确性。
42
+ `;
43
+ }
44
+ function TODO_LIST_SECTIONS() {
45
+ return `自动待办事项列表管理
46
+ 系统自动管理待办事项列表以帮助追踪任务进度:
47
+ 每10次API请求后,若存在当前待办列表,系统将提示您审阅并更新
48
+ 从计划模式切换至执行模式时,需为任务创建完整的待办事项列表
49
+ 待办列表更新应通过task_progress参数静默执行——无需向用户告知这些更新
50
+ 使用标准Markdown清单格式:未完成项标记为"- [ ]",已完成项标记为"- [x]"
51
+ 系统将在适当时机自动在提示中包含待办列表的上下文信息
52
+ 重点创建可执行、有意义的步骤,而非细枝末节的技术细节
53
+ `;
54
+ }
55
+ function CAPABILITIES() {
56
+ return `能力说明
57
+ 可用工具集:您可以使用工具执行计划设定、网络搜索、写入内容以及提出后续问题。这些工具能帮助您高效完成多种任务。
58
+ 初始内容概览:用户文章内容会在首次执行任务时包含在环境详情里,您可以看到整篇文章的目录、文章的正文内容等信息。
59
+ 网络搜索:您可以选择在用户提出修改需求时执行网络搜索,以获取更丰富、更具有时效性的信息,以便于制定出更好的文章结构或者是丰富内容。
60
+ 典型的工作流示例:在接到任何需求时,请先审阅当前文章内容,结合需求 -> 决定是否有必要执行网络搜索 -> 根据需求和网络搜索结果,制定出文章结构 -> 生成文章内容 -> 将内容写入到用户的文章中。
61
+ `;
62
+ }
63
+ function USER_INSTRUCTIONS(userInstruction) {
64
+ return `用户自定义指令
65
+ 以下额外指令由用户提供,您应尽力遵循这些指令,同时确保不违反工具使用准则。
66
+ ${userInstruction}`;
67
+ }
68
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/prompt/prompt.ts"],"names":[],"mappings":";;;AAEa,QAAA,0BAA0B,GAA0B;IAC7D,KAAK,CAAC,iBAAiB;QACnB,OAAO,GAAG,UAAU,EAAE;EAC5B,0BAA0B,EAAE;EAC5B,kBAAkB,EAAE;EACpB,YAAY,EAAE;CACf,CAAA;IACG,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,WAAwB;QAClD,OAAO,EAAE,CAAA;IACb,CAAC;CACJ,CAAA;AAED,SAAS,UAAU;IACjB,OAAO;;;;GAIN,CAAA;AACH,CAAC;AAED,SAAS,0BAA0B;IACjC,OAAO;;;;;;;;;;;;;;;;;;GAkBN,CAAA;AACH,CAAC;AAGD,SAAU,kBAAkB;IAC1B,OAAO;;;;;;;;CAQR,CAAA;AACD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;;;;;GAKN,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAuB;IAChD,OAAS;;EAET,eAAe,EAAE,CAAA;AACnB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { ApiHandler, ApiStream } from './index';
2
+ import { ProviderConfig, AbstractTool } from '../types';
3
+ import Anthropic from '@anthropic-ai/sdk';
4
+ export declare class DoubaoHandler implements ApiHandler {
5
+ private readonly doubaoConfig;
6
+ private client;
7
+ constructor(doubaoConfig: ProviderConfig);
8
+ private ensureClient;
9
+ chatCompletion(systemPrompt: string, messages: Anthropic.Messages.MessageParam[], tools?: AbstractTool[]): ApiStream;
10
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DoubaoHandler = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const message_converer_1 = require("./message_converer");
9
+ class DoubaoHandler {
10
+ constructor(doubaoConfig) {
11
+ this.doubaoConfig = doubaoConfig;
12
+ }
13
+ ensureClient() {
14
+ if (!this.client) {
15
+ if (!this.doubaoConfig.apiKey) {
16
+ throw new Error('Doubao API key is required');
17
+ }
18
+ try {
19
+ this.client = new openai_1.default({
20
+ baseURL: 'https://ark.cn-beijing.volces.com/api/v3/',
21
+ apiKey: this.doubaoConfig.apiKey,
22
+ });
23
+ }
24
+ catch (error) {
25
+ throw new Error(`Error creating Doubao client: ${error.message}`);
26
+ }
27
+ }
28
+ return this.client;
29
+ }
30
+ async *chatCompletion(systemPrompt, messages, tools) {
31
+ const client = this.ensureClient();
32
+ const openAiMessages = [
33
+ { role: 'system', content: systemPrompt },
34
+ ...(0, message_converer_1.convertToOpenAiMessages)(messages),
35
+ ];
36
+ const stream = await client.chat.completions.create({
37
+ model: this.doubaoConfig.modelName || '',
38
+ messages: openAiMessages,
39
+ max_tokens: this.doubaoConfig.maxTokens,
40
+ stream: true,
41
+ stream_options: { include_usage: true },
42
+ temperature: 0,
43
+ tools: tools || undefined,
44
+ });
45
+ for await (const chunk of stream) {
46
+ const delta = chunk.choices[0]?.delta;
47
+ if (delta?.content) {
48
+ yield {
49
+ type: 'text',
50
+ text: delta.content,
51
+ };
52
+ }
53
+ if (delta && 'reasoning_content' in delta && delta.reasoning_content) {
54
+ yield {
55
+ type: 'reasoning',
56
+ reasoning: delta.reasoning_content || '',
57
+ };
58
+ }
59
+ if (delta?.tool_calls) {
60
+ }
61
+ if (chunk.usage) {
62
+ yield {
63
+ type: 'usage',
64
+ inputTokens: chunk.usage.prompt_tokens || 0,
65
+ outputTokens: chunk.usage.completion_tokens || 0,
66
+ // @ts-expect-error-next-line
67
+ cacheReadTokens: chunk.usage.prompt_cache_hit_tokens || 0,
68
+ // @ts-expect-error-next-line
69
+ cacheWriteTokens: chunk.usage.prompt_cache_miss_tokens || 0,
70
+ };
71
+ }
72
+ }
73
+ }
74
+ }
75
+ exports.DoubaoHandler = DoubaoHandler;
76
+ //# sourceMappingURL=doubao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.js","sourceRoot":"","sources":["../../src/providers/doubao.ts"],"names":[],"mappings":";;;;;;AAGA,oDAA2B;AAC3B,yDAA4D;AAG5D,MAAa,aAAa;IAGxB,YAA6B,YAA4B;QAA5B,iBAAY,GAAZ,YAAY,CAAgB;IAAG,CAAC;IAErD,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAC/C,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC;oBACvB,OAAO,EAAE,2CAA2C;oBACpD,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;iBACjC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,CAAC,cAAc,CACnB,YAAoB,EACpB,QAA2C,EAC3C,KAAsB;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QAElC,MAAM,cAAc,GAA6C;YAC/D,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,GAAG,IAAA,0CAAuB,EAAC,QAAQ,CAAC;SACrC,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,EAAE;YACxC,QAAQ,EAAE,cAAc;YACxB,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;YACvC,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;YACvC,WAAW,EAAE,CAAC;YACd,KAAK,EAAG,KAAsB,IAAI,SAAS;SAC5C,CAAC,CAAA;QAGF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAA;YACrC,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;gBACnB,MAAM;oBACJ,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,KAAK,CAAC,OAAO;iBACpB,CAAA;YACH,CAAC;YAED,IAAI,KAAK,IAAI,mBAAmB,IAAI,KAAK,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBACrE,MAAM;oBACJ,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAG,KAAK,CAAC,iBAAwC,IAAI,EAAE;iBACjE,CAAA;YACH,CAAC;YAED,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;YACxB,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM;oBACJ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC;oBAC3C,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC;oBAChD,6BAA6B;oBAC7B,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC;oBACzD,6BAA6B;oBAC7B,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC;iBAC5D,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA7ED,sCA6EC"}
@@ -0,0 +1,12 @@
1
+ import { GenerateApiHandler, ApiStreamImageChunk, AgentImageConfig } from "./index";
2
+ import { ProviderConfig } from '../types';
3
+ import { Part } from "@google/genai";
4
+ import Anthropic from '@anthropic-ai/sdk';
5
+ export declare class GoogleHandler implements GenerateApiHandler {
6
+ private readonly config;
7
+ private client;
8
+ private providerConfig;
9
+ constructor(config: ProviderConfig);
10
+ convertToGoogleMessages(messages: Anthropic.Messages.MessageParam[]): Part[];
11
+ generateContent(userInstruction: string, messages: Anthropic.Messages.MessageParam[], config: AgentImageConfig): Promise<ApiStreamImageChunk>;
12
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GoogleHandler = void 0;
4
+ const genai_1 = require("@google/genai");
5
+ class GoogleHandler {
6
+ constructor(config) {
7
+ this.config = config;
8
+ this.providerConfig = config;
9
+ this.client = new genai_1.GoogleGenAI({
10
+ apiKey: this.providerConfig.apiKey,
11
+ });
12
+ }
13
+ convertToGoogleMessages(messages) {
14
+ const googleMessages = [];
15
+ for (const message of messages) {
16
+ if (typeof message.content === 'string') {
17
+ googleMessages.push({ text: message.content });
18
+ }
19
+ else {
20
+ for (const contentBlock of message.content) {
21
+ if (contentBlock.type === 'image') {
22
+ googleMessages.push({ inlineData: { mimeType: 'image/png', data: contentBlock.source.type === 'base64' ? contentBlock.source.data : contentBlock.source.url } });
23
+ }
24
+ else if (contentBlock.type === 'text') {
25
+ googleMessages.push({ text: contentBlock.text });
26
+ }
27
+ }
28
+ }
29
+ }
30
+ return googleMessages;
31
+ }
32
+ async generateContent(userInstruction, messages, config) {
33
+ const response = await this.client.models.generateContent({
34
+ model: this.providerConfig.modelName || 'gemini-3-pro-image-preview',
35
+ contents: [
36
+ { text: userInstruction },
37
+ ...this.convertToGoogleMessages(messages),
38
+ ],
39
+ config: {
40
+ responseModalities: ['TEXT', 'IMAGE'],
41
+ imageConfig: {
42
+ aspectRatio: config.aspectRatio,
43
+ imageSize: config.imageSize,
44
+ },
45
+ },
46
+ });
47
+ const result = {
48
+ type: 'image',
49
+ data: undefined,
50
+ text: undefined,
51
+ thinking: undefined,
52
+ };
53
+ for (const part of response?.candidates?.[0]?.content?.parts ?? []) {
54
+ if (part.text) {
55
+ result.text = part.text;
56
+ }
57
+ else if (part.inlineData) {
58
+ const imageData = part.inlineData.data;
59
+ if (imageData) {
60
+ result.data = Array.isArray(imageData)
61
+ ? imageData.filter((d) => typeof d === 'string')
62
+ : [imageData];
63
+ }
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ }
69
+ exports.GoogleHandler = GoogleHandler;
70
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './stream';
2
+ export * from './google';
3
+ export * from './doubao';
4
+ export * from './minimax';
5
+ export * from './openrouter';
6
+ export * from './message_converer';