opc-agent 1.3.0 → 1.3.2
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/CHANGELOG.md +6 -0
- package/CONTRIBUTING.md +75 -75
- package/README.md +358 -235
- package/README.zh-CN.md +415 -415
- package/dist/core/dashboard.d.ts +35 -0
- package/dist/core/dashboard.js +157 -0
- package/dist/core/priority.d.ts +52 -0
- package/dist/core/priority.js +102 -0
- package/dist/core/streaming.d.ts +56 -0
- package/dist/core/streaming.js +160 -0
- package/dist/deploy/hermes.js +22 -22
- package/dist/deploy/openclaw.js +31 -31
- package/dist/index.d.ts +8 -0
- package/dist/index.js +12 -1
- package/dist/templates/code-reviewer.js +5 -5
- package/dist/templates/customer-service.js +2 -2
- package/dist/templates/data-analyst.js +5 -5
- package/dist/templates/knowledge-base.js +2 -2
- package/dist/templates/sales-assistant.js +4 -4
- package/dist/templates/teacher.js +6 -6
- package/dist/tools/gateway.d.ts +28 -0
- package/dist/tools/gateway.js +177 -0
- package/docs/.vitepress/config.ts +103 -103
- package/docs/api/cli.md +48 -48
- package/docs/api/oad-schema.md +64 -64
- package/docs/api/sdk.md +80 -80
- package/docs/guide/concepts.md +51 -51
- package/docs/guide/configuration.md +79 -79
- package/docs/guide/deployment.md +42 -42
- package/docs/guide/getting-started.md +44 -44
- package/docs/guide/templates.md +28 -28
- package/docs/guide/testing.md +84 -84
- package/docs/index.md +27 -27
- package/docs/zh/api/cli.md +54 -54
- package/docs/zh/api/oad-schema.md +87 -87
- package/docs/zh/api/sdk.md +102 -102
- package/docs/zh/guide/concepts.md +104 -104
- package/docs/zh/guide/configuration.md +135 -135
- package/docs/zh/guide/deployment.md +81 -81
- package/docs/zh/guide/getting-started.md +82 -82
- package/docs/zh/guide/templates.md +84 -84
- package/docs/zh/guide/testing.md +88 -88
- package/docs/zh/index.md +27 -27
- package/examples/customer-service-demo/README.md +90 -90
- package/examples/customer-service-demo/oad.yaml +107 -107
- package/package.json +50 -50
- package/src/analytics/index.ts +66 -66
- package/src/channels/discord.ts +192 -192
- package/src/channels/email.ts +177 -177
- package/src/channels/feishu.ts +236 -236
- package/src/channels/index.ts +15 -15
- package/src/channels/slack.ts +160 -160
- package/src/channels/telegram.ts +90 -90
- package/src/channels/voice.ts +106 -106
- package/src/channels/webhook.ts +199 -199
- package/src/channels/websocket.ts +87 -87
- package/src/channels/wechat.ts +149 -149
- package/src/cli.ts +1 -119
- package/src/core/a2a.ts +143 -143
- package/src/core/agent.ts +152 -152
- package/src/core/analytics-engine.ts +186 -186
- package/src/core/auth.ts +57 -57
- package/src/core/cache.ts +141 -141
- package/src/core/compose.ts +77 -77
- package/src/core/config.ts +14 -14
- package/src/core/dashboard.ts +219 -0
- package/src/core/errors.ts +148 -148
- package/src/core/hitl.ts +138 -138
- package/src/core/logger.ts +57 -57
- package/src/core/orchestrator.ts +215 -215
- package/src/core/performance.ts +187 -187
- package/src/core/priority.ts +140 -0
- package/src/core/rate-limiter.ts +128 -128
- package/src/core/room.ts +109 -109
- package/src/core/runtime.ts +152 -152
- package/src/core/sandbox.ts +101 -101
- package/src/core/security.ts +171 -171
- package/src/core/types.ts +68 -68
- package/src/core/versioning.ts +106 -106
- package/src/core/watch.ts +178 -178
- package/src/core/workflow.ts +235 -235
- package/src/deploy/hermes.ts +156 -156
- package/src/deploy/openclaw.ts +200 -200
- package/src/dtv/data.ts +29 -0
- package/src/dtv/trust.ts +43 -0
- package/src/dtv/value.ts +47 -0
- package/src/i18n/index.ts +216 -216
- package/src/index.ts +6 -4
- package/src/marketplace/index.ts +223 -0
- package/src/memory/deepbrain.ts +108 -108
- package/src/memory/index.ts +34 -34
- package/src/plugins/index.ts +208 -208
- package/src/schema/oad.ts +155 -154
- package/src/skills/base.ts +16 -16
- package/src/skills/document.ts +100 -100
- package/src/skills/http.ts +35 -35
- package/src/skills/index.ts +27 -27
- package/src/skills/scheduler.ts +80 -80
- package/src/skills/webhook-trigger.ts +59 -59
- package/src/templates/code-reviewer.ts +34 -30
- package/src/templates/customer-service.ts +80 -76
- package/src/templates/data-analyst.ts +70 -66
- package/src/templates/executive-assistant.ts +71 -71
- package/src/templates/financial-advisor.ts +60 -60
- package/src/templates/knowledge-base.ts +31 -27
- package/src/templates/legal-assistant.ts +71 -71
- package/src/templates/sales-assistant.ts +79 -75
- package/src/templates/teacher.ts +79 -75
- package/src/testing/index.ts +181 -181
- package/src/tools/calculator.ts +73 -73
- package/src/tools/datetime.ts +149 -149
- package/src/tools/json-transform.ts +187 -187
- package/src/tools/mcp.ts +76 -76
- package/src/tools/text-analysis.ts +116 -116
- package/templates/Dockerfile +15 -15
- package/templates/code-reviewer/README.md +27 -27
- package/templates/code-reviewer/oad.yaml +41 -41
- package/templates/customer-service/README.md +22 -22
- package/templates/customer-service/oad.yaml +36 -36
- package/templates/docker-compose.yml +21 -21
- package/templates/ecommerce-assistant/README.md +45 -45
- package/templates/ecommerce-assistant/oad.yaml +47 -47
- package/templates/knowledge-base/README.md +28 -28
- package/templates/knowledge-base/oad.yaml +38 -38
- package/templates/sales-assistant/README.md +26 -26
- package/templates/sales-assistant/oad.yaml +43 -43
- package/templates/tech-support/README.md +43 -43
- package/templates/tech-support/oad.yaml +45 -45
- package/tests/a2a.test.ts +66 -66
- package/tests/agent.test.ts +72 -72
- package/tests/analytics.test.ts +50 -50
- package/tests/channel.test.ts +39 -39
- package/tests/e2e.test.ts +134 -134
- package/tests/errors.test.ts +83 -83
- package/tests/hitl.test.ts +71 -71
- package/tests/i18n.test.ts +41 -41
- package/tests/mcp.test.ts +54 -54
- package/tests/oad.test.ts +68 -68
- package/tests/performance.test.ts +115 -115
- package/tests/plugin.test.ts +74 -74
- package/tests/room.test.ts +106 -106
- package/tests/runtime.test.ts +42 -42
- package/tests/sandbox.test.ts +46 -46
- package/tests/security.test.ts +60 -60
- package/tests/templates.test.ts +77 -77
- package/tests/v070.test.ts +76 -76
- package/tests/versioning.test.ts +75 -75
- package/tests/voice.test.ts +61 -61
- package/tests/webhook.test.ts +29 -29
- package/tests/workflow.test.ts +143 -143
- package/tsconfig.json +19 -19
- package/vitest.config.ts +9 -9
- package/src/traces/index.ts +0 -132
package/dist/deploy/openclaw.js
CHANGED
|
@@ -41,27 +41,27 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
function generateIdentityMd(oad) {
|
|
43
43
|
const m = oad.metadata;
|
|
44
|
-
return `# IDENTITY.md
|
|
45
|
-
|
|
46
|
-
- **Name:** ${m.name}
|
|
47
|
-
- **Version:** ${m.version}
|
|
48
|
-
- **Description:** ${m.description ?? 'An AI agent'}
|
|
49
|
-
- **Author:** ${m.author ?? 'Unknown'}
|
|
50
|
-
- **License:** ${m.license}
|
|
44
|
+
return `# IDENTITY.md
|
|
45
|
+
|
|
46
|
+
- **Name:** ${m.name}
|
|
47
|
+
- **Version:** ${m.version}
|
|
48
|
+
- **Description:** ${m.description ?? 'An AI agent'}
|
|
49
|
+
- **Author:** ${m.author ?? 'Unknown'}
|
|
50
|
+
- **License:** ${m.license}
|
|
51
51
|
`;
|
|
52
52
|
}
|
|
53
53
|
function generateSoulMd(oad) {
|
|
54
54
|
const prompt = oad.spec.systemPrompt ?? 'You are a helpful AI assistant.';
|
|
55
|
-
return `# SOUL.md - ${oad.metadata.name}
|
|
56
|
-
|
|
57
|
-
## System Prompt
|
|
58
|
-
|
|
59
|
-
${prompt}
|
|
60
|
-
|
|
61
|
-
## Model Configuration
|
|
62
|
-
|
|
63
|
-
- **Model:** ${oad.spec.model}
|
|
64
|
-
- **Provider:** ${oad.spec.provider?.default ?? 'deepseek'}
|
|
55
|
+
return `# SOUL.md - ${oad.metadata.name}
|
|
56
|
+
|
|
57
|
+
## System Prompt
|
|
58
|
+
|
|
59
|
+
${prompt}
|
|
60
|
+
|
|
61
|
+
## Model Configuration
|
|
62
|
+
|
|
63
|
+
- **Model:** ${oad.spec.model}
|
|
64
|
+
- **Provider:** ${oad.spec.provider?.default ?? 'deepseek'}
|
|
65
65
|
`;
|
|
66
66
|
}
|
|
67
67
|
function generateAgentsMd(oad) {
|
|
@@ -112,23 +112,23 @@ function generateAgentsMd(oad) {
|
|
|
112
112
|
return md;
|
|
113
113
|
}
|
|
114
114
|
function generateUserMd(oad) {
|
|
115
|
-
return `# USER.md
|
|
116
|
-
|
|
117
|
-
- **Name:** (your name)
|
|
118
|
-
- **Role:** User
|
|
119
|
-
- **Notes:** Configure this file with your preferences for ${oad.metadata.name}.
|
|
115
|
+
return `# USER.md
|
|
116
|
+
|
|
117
|
+
- **Name:** (your name)
|
|
118
|
+
- **Role:** User
|
|
119
|
+
- **Notes:** Configure this file with your preferences for ${oad.metadata.name}.
|
|
120
120
|
`;
|
|
121
121
|
}
|
|
122
122
|
function generateMemoryMd(oad) {
|
|
123
|
-
return `# MEMORY.md - ${oad.metadata.name}
|
|
124
|
-
|
|
125
|
-
## Persistent Knowledge
|
|
126
|
-
|
|
127
|
-
(Agent will store learned information here)
|
|
128
|
-
|
|
129
|
-
## User Preferences
|
|
130
|
-
|
|
131
|
-
(Discovered user preferences will be noted here)
|
|
123
|
+
return `# MEMORY.md - ${oad.metadata.name}
|
|
124
|
+
|
|
125
|
+
## Persistent Knowledge
|
|
126
|
+
|
|
127
|
+
(Agent will store learned information here)
|
|
128
|
+
|
|
129
|
+
## User Preferences
|
|
130
|
+
|
|
131
|
+
(Discovered user preferences will be noted here)
|
|
132
132
|
`;
|
|
133
133
|
}
|
|
134
134
|
function generateOpenClawConfig(oad, agentDir) {
|
package/dist/index.d.ts
CHANGED
|
@@ -91,4 +91,12 @@ export { DiscordChannel } from './channels/discord';
|
|
|
91
91
|
export type { DiscordChannelConfig } from './channels/discord';
|
|
92
92
|
export { ProcessWatcher } from './core/watch';
|
|
93
93
|
export type { WatchPattern, WatchMatch, WatchOptions } from './core/watch';
|
|
94
|
+
export { ToolGateway } from './tools/gateway';
|
|
95
|
+
export type { ToolGatewayConfig, GatewayToolName } from './tools/gateway';
|
|
96
|
+
export { StreamingManager, StreamableResponse } from './core/streaming';
|
|
97
|
+
export type { StreamChunk, StreamOptions } from './core/streaming';
|
|
98
|
+
export { Dashboard } from './core/dashboard';
|
|
99
|
+
export type { DashboardConfig } from './core/dashboard';
|
|
100
|
+
export { PriorityRouter } from './core/priority';
|
|
101
|
+
export type { PriorityConfig, PriorityTier, PriorityProviderConfig } from './core/priority';
|
|
94
102
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EmailChannel = exports.compose = exports.AgentPipeline = exports.Orchestrator = exports.getActiveSessions = exports.createAuthMiddleware = exports.installAgent = exports.publishAgent = exports.deployToHermes = exports.KnowledgeBase = exports.addMessages = exports.detectLocale = exports.getLocale = exports.setLocale = exports.t = exports.LazyLoader = exports.RequestBatcher = exports.ConnectionPool = exports.VersionManager = exports.WebhookChannel = exports.VoiceChannel = exports.HITLManager = exports.AgentRegistry = exports.WorkflowEngine = exports.Analytics = exports.Sandbox = exports.PluginManager = exports.createMCPTool = exports.MCPToolRegistry = exports.Room = exports.SUPPORTED_PROVIDERS = exports.createProvider = exports.MRGConfigReader = exports.ValueTracker = exports.TrustManager = exports.DeepBrainMemoryStore = exports.InMemoryStore = exports.SkillRegistry = exports.BaseSkill = exports.WebSocketChannel = exports.TelegramChannel = exports.WebChannel = exports.BaseChannel = exports.OADSchema = exports.validateOAD = exports.loadOAD = exports.Logger = exports.truncateOutput = exports.AgentRuntime = exports.BaseAgent = void 0;
|
|
4
|
-
exports.ProcessWatcher = exports.DiscordChannel = exports.FeishuChannel = exports.createRateLimitPlugin = exports.createAnalyticsPlugin = exports.createLoggingPlugin = exports.inputValidation = exports.APIKeyManager = exports.corsMiddleware = exports.securityHeaders = exports.detectInjection = exports.sanitizeInput = exports.formatErrorForUser = exports.wrapError = exports.TimeoutError = exports.SecurityError = exports.RateLimitError = exports.PluginError = exports.ChannelError = exports.ConfigError = exports.ValidationError = exports.ProviderError = exports.OPCError = exports.createTeacherConfig = exports.createDataAnalystConfig = exports.getSupportedLocales = exports.LLMCache = exports.RateLimiter = exports.AnalyticsEngine = exports.formatReport = exports.loadTestCases = exports.runTests = exports.DocumentSkill = exports.SchedulerSkill = exports.WebhookTriggerSkill = exports.HttpSkill = exports.TextAnalysisTool = exports.JsonTransformTool = exports.DateTimeTool = exports.CalculatorTool = exports.WeChatChannel = exports.SlackChannel = void 0;
|
|
4
|
+
exports.PriorityRouter = exports.Dashboard = exports.StreamableResponse = exports.StreamingManager = exports.ToolGateway = exports.ProcessWatcher = exports.DiscordChannel = exports.FeishuChannel = exports.createRateLimitPlugin = exports.createAnalyticsPlugin = exports.createLoggingPlugin = exports.inputValidation = exports.APIKeyManager = exports.corsMiddleware = exports.securityHeaders = exports.detectInjection = exports.sanitizeInput = exports.formatErrorForUser = exports.wrapError = exports.TimeoutError = exports.SecurityError = exports.RateLimitError = exports.PluginError = exports.ChannelError = exports.ConfigError = exports.ValidationError = exports.ProviderError = exports.OPCError = exports.createTeacherConfig = exports.createDataAnalystConfig = exports.getSupportedLocales = exports.LLMCache = exports.RateLimiter = exports.AnalyticsEngine = exports.formatReport = exports.loadTestCases = exports.runTests = exports.DocumentSkill = exports.SchedulerSkill = exports.WebhookTriggerSkill = exports.HttpSkill = exports.TextAnalysisTool = exports.JsonTransformTool = exports.DateTimeTool = exports.CalculatorTool = exports.WeChatChannel = exports.SlackChannel = void 0;
|
|
5
5
|
// OPC Agent — Open Agent Framework
|
|
6
6
|
var agent_1 = require("./core/agent");
|
|
7
7
|
Object.defineProperty(exports, "BaseAgent", { enumerable: true, get: function () { return agent_1.BaseAgent; } });
|
|
@@ -163,4 +163,15 @@ var discord_1 = require("./channels/discord");
|
|
|
163
163
|
Object.defineProperty(exports, "DiscordChannel", { enumerable: true, get: function () { return discord_1.DiscordChannel; } });
|
|
164
164
|
var watch_1 = require("./core/watch");
|
|
165
165
|
Object.defineProperty(exports, "ProcessWatcher", { enumerable: true, get: function () { return watch_1.ProcessWatcher; } });
|
|
166
|
+
// v1.2.0 modules
|
|
167
|
+
var gateway_1 = require("./tools/gateway");
|
|
168
|
+
Object.defineProperty(exports, "ToolGateway", { enumerable: true, get: function () { return gateway_1.ToolGateway; } });
|
|
169
|
+
var streaming_1 = require("./core/streaming");
|
|
170
|
+
Object.defineProperty(exports, "StreamingManager", { enumerable: true, get: function () { return streaming_1.StreamingManager; } });
|
|
171
|
+
Object.defineProperty(exports, "StreamableResponse", { enumerable: true, get: function () { return streaming_1.StreamableResponse; } });
|
|
172
|
+
// v1.3.0 modules
|
|
173
|
+
var dashboard_1 = require("./core/dashboard");
|
|
174
|
+
Object.defineProperty(exports, "Dashboard", { enumerable: true, get: function () { return dashboard_1.Dashboard; } });
|
|
175
|
+
var priority_1 = require("./core/priority");
|
|
176
|
+
Object.defineProperty(exports, "PriorityRouter", { enumerable: true, get: function () { return priority_1.PriorityRouter; } });
|
|
166
177
|
//# sourceMappingURL=index.js.map
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CODE_REVIEWER_SYSTEM_PROMPT = void 0;
|
|
4
4
|
exports.createCodeReviewerConfig = createCodeReviewerConfig;
|
|
5
|
-
exports.CODE_REVIEWER_SYSTEM_PROMPT = `You are an expert code reviewer. When given code:
|
|
6
|
-
1. Check for bugs, security issues, and performance problems
|
|
7
|
-
2. Suggest improvements for readability and maintainability
|
|
8
|
-
3. Follow language-specific best practices
|
|
9
|
-
4. Be constructive and explain your reasoning
|
|
5
|
+
exports.CODE_REVIEWER_SYSTEM_PROMPT = `You are an expert code reviewer. When given code:
|
|
6
|
+
1. Check for bugs, security issues, and performance problems
|
|
7
|
+
2. Suggest improvements for readability and maintainability
|
|
8
|
+
3. Follow language-specific best practices
|
|
9
|
+
4. Be constructive and explain your reasoning
|
|
10
10
|
Rate severity: 🔴 Critical | 🟡 Warning | 🔵 Info`;
|
|
11
11
|
function createCodeReviewerConfig() {
|
|
12
12
|
return {
|
|
@@ -41,8 +41,8 @@ class HandoffSkill extends base_1.BaseSkill {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
exports.HandoffSkill = HandoffSkill;
|
|
44
|
-
exports.CUSTOMER_SERVICE_SYSTEM_PROMPT = `You are a friendly and professional customer service agent.
|
|
45
|
-
You help customers with their questions about products, orders, shipping, and returns.
|
|
44
|
+
exports.CUSTOMER_SERVICE_SYSTEM_PROMPT = `You are a friendly and professional customer service agent.
|
|
45
|
+
You help customers with their questions about products, orders, shipping, and returns.
|
|
46
46
|
Be concise, helpful, and empathetic. If you're unsure, offer to connect them with a human agent.`;
|
|
47
47
|
function createCustomerServiceConfig() {
|
|
48
48
|
return {
|
|
@@ -33,11 +33,11 @@ class InsightSkill extends base_1.BaseSkill {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
exports.InsightSkill = InsightSkill;
|
|
36
|
-
exports.DATA_ANALYST_SYSTEM_PROMPT = `You are a professional data analyst assistant. Your goals:
|
|
37
|
-
1. Help users query, transform, and analyze data
|
|
38
|
-
2. Create clear visualizations and summaries
|
|
39
|
-
3. Identify trends, patterns, and anomalies
|
|
40
|
-
4. Explain findings in plain language
|
|
36
|
+
exports.DATA_ANALYST_SYSTEM_PROMPT = `You are a professional data analyst assistant. Your goals:
|
|
37
|
+
1. Help users query, transform, and analyze data
|
|
38
|
+
2. Create clear visualizations and summaries
|
|
39
|
+
3. Identify trends, patterns, and anomalies
|
|
40
|
+
4. Explain findings in plain language
|
|
41
41
|
Be precise with numbers, always cite your data source, and suggest next steps for deeper analysis.`;
|
|
42
42
|
function createDataAnalystConfig() {
|
|
43
43
|
return {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.KNOWLEDGE_BASE_SYSTEM_PROMPT = void 0;
|
|
4
4
|
exports.createKnowledgeBaseConfig = createKnowledgeBaseConfig;
|
|
5
|
-
exports.KNOWLEDGE_BASE_SYSTEM_PROMPT = `You are a knowledge base assistant. Answer questions using the company documents
|
|
6
|
-
and knowledge provided to you. If you don't have enough information, say so honestly.
|
|
5
|
+
exports.KNOWLEDGE_BASE_SYSTEM_PROMPT = `You are a knowledge base assistant. Answer questions using the company documents
|
|
6
|
+
and knowledge provided to you. If you don't have enough information, say so honestly.
|
|
7
7
|
Always cite sources when possible. Be accurate and concise.`;
|
|
8
8
|
function createKnowledgeBaseConfig() {
|
|
9
9
|
return {
|
|
@@ -43,10 +43,10 @@ class LeadCaptureSkill extends base_1.BaseSkill {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
exports.LeadCaptureSkill = LeadCaptureSkill;
|
|
46
|
-
exports.SALES_ASSISTANT_SYSTEM_PROMPT = `You are a professional sales assistant. Your goals:
|
|
47
|
-
1. Answer product questions accurately and enthusiastically
|
|
48
|
-
2. Capture leads by collecting name, email, and company info
|
|
49
|
-
3. Book appointments when prospects are ready
|
|
46
|
+
exports.SALES_ASSISTANT_SYSTEM_PROMPT = `You are a professional sales assistant. Your goals:
|
|
47
|
+
1. Answer product questions accurately and enthusiastically
|
|
48
|
+
2. Capture leads by collecting name, email, and company info
|
|
49
|
+
3. Book appointments when prospects are ready
|
|
50
50
|
Be friendly, persuasive but not pushy. Always provide value first.`;
|
|
51
51
|
function createSalesAssistantConfig() {
|
|
52
52
|
return {
|
|
@@ -39,12 +39,12 @@ class ExplainSkill extends base_1.BaseSkill {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
exports.ExplainSkill = ExplainSkill;
|
|
42
|
-
exports.TEACHER_SYSTEM_PROMPT = `You are a patient and encouraging teacher assistant. Your goals:
|
|
43
|
-
1. Create engaging lesson plans tailored to student level
|
|
44
|
-
2. Generate quizzes and assessments with answer keys
|
|
45
|
-
3. Explain complex concepts using analogies and examples
|
|
46
|
-
4. Provide constructive feedback and encouragement
|
|
47
|
-
5. Adapt teaching style to different learning preferences
|
|
42
|
+
exports.TEACHER_SYSTEM_PROMPT = `You are a patient and encouraging teacher assistant. Your goals:
|
|
43
|
+
1. Create engaging lesson plans tailored to student level
|
|
44
|
+
2. Generate quizzes and assessments with answer keys
|
|
45
|
+
3. Explain complex concepts using analogies and examples
|
|
46
|
+
4. Provide constructive feedback and encouragement
|
|
47
|
+
5. Adapt teaching style to different learning preferences
|
|
48
48
|
Be patient, use clear language, and always check for understanding. Use the Socratic method when appropriate.`;
|
|
49
49
|
function createTeacherConfig() {
|
|
50
50
|
return {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { MCPTool, MCPToolDefinition, MCPToolResult } from './mcp';
|
|
2
|
+
export interface ToolGatewayConfig {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
endpoint: string;
|
|
5
|
+
apiKey: string;
|
|
6
|
+
enabledTools?: GatewayToolName[];
|
|
7
|
+
timeout?: number;
|
|
8
|
+
}
|
|
9
|
+
export type GatewayToolName = 'web-search' | 'image-gen' | 'tts' | 'browser';
|
|
10
|
+
export declare class ToolGateway {
|
|
11
|
+
private config;
|
|
12
|
+
private availableTools;
|
|
13
|
+
private connected;
|
|
14
|
+
constructor(config: ToolGatewayConfig);
|
|
15
|
+
/** Discover available tools from the gateway endpoint. */
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
/** Load default tool definitions (used as fallback). */
|
|
18
|
+
private loadDefaults;
|
|
19
|
+
/** Invoke a tool through the gateway. */
|
|
20
|
+
invokeTool(name: GatewayToolName, input: Record<string, unknown>): Promise<MCPToolResult>;
|
|
21
|
+
/** Get all gateway tools as MCPTool instances for registry integration. */
|
|
22
|
+
getTools(): MCPTool[];
|
|
23
|
+
/** Get tool definitions (without execute). */
|
|
24
|
+
listTools(): MCPToolDefinition[];
|
|
25
|
+
get isConnected(): boolean;
|
|
26
|
+
get toolCount(): number;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToolGateway = void 0;
|
|
4
|
+
// ─── Gateway Tool Wrapper ────────────────────────────────────
|
|
5
|
+
class GatewayTool {
|
|
6
|
+
gateway;
|
|
7
|
+
meta;
|
|
8
|
+
name;
|
|
9
|
+
description;
|
|
10
|
+
inputSchema;
|
|
11
|
+
constructor(gateway, meta) {
|
|
12
|
+
this.gateway = gateway;
|
|
13
|
+
this.meta = meta;
|
|
14
|
+
this.name = `gateway:${meta.name}`;
|
|
15
|
+
this.description = `[Gateway] ${meta.description}`;
|
|
16
|
+
this.inputSchema = meta.inputSchema;
|
|
17
|
+
}
|
|
18
|
+
async execute(input, _context) {
|
|
19
|
+
return this.gateway.invokeTool(this.meta.name, input);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// ─── Default Tool Definitions ────────────────────────────────
|
|
23
|
+
const DEFAULT_TOOL_DEFS = [
|
|
24
|
+
{
|
|
25
|
+
name: 'web-search',
|
|
26
|
+
description: 'Search the web and return results',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
query: { type: 'string', description: 'Search query' },
|
|
31
|
+
count: { type: 'number', description: 'Number of results (1-10)' },
|
|
32
|
+
},
|
|
33
|
+
required: ['query'],
|
|
34
|
+
},
|
|
35
|
+
available: true,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'image-gen',
|
|
39
|
+
description: 'Generate images from text prompts',
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: 'object',
|
|
42
|
+
properties: {
|
|
43
|
+
prompt: { type: 'string', description: 'Image generation prompt' },
|
|
44
|
+
size: { type: 'string', description: 'Image size (e.g. 1024x1024)' },
|
|
45
|
+
},
|
|
46
|
+
required: ['prompt'],
|
|
47
|
+
},
|
|
48
|
+
available: true,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'tts',
|
|
52
|
+
description: 'Convert text to speech audio',
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
text: { type: 'string', description: 'Text to synthesize' },
|
|
57
|
+
voice: { type: 'string', description: 'Voice identifier' },
|
|
58
|
+
},
|
|
59
|
+
required: ['text'],
|
|
60
|
+
},
|
|
61
|
+
available: true,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'browser',
|
|
65
|
+
description: 'Automated browser actions — navigate, screenshot, extract content',
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: 'object',
|
|
68
|
+
properties: {
|
|
69
|
+
action: { type: 'string', description: 'Action: navigate | screenshot | extract' },
|
|
70
|
+
url: { type: 'string', description: 'Target URL' },
|
|
71
|
+
selector: { type: 'string', description: 'CSS selector for extraction' },
|
|
72
|
+
},
|
|
73
|
+
required: ['action', 'url'],
|
|
74
|
+
},
|
|
75
|
+
available: true,
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
// ─── ToolGateway ─────────────────────────────────────────────
|
|
79
|
+
class ToolGateway {
|
|
80
|
+
config;
|
|
81
|
+
availableTools = new Map();
|
|
82
|
+
connected = false;
|
|
83
|
+
constructor(config) {
|
|
84
|
+
this.config = {
|
|
85
|
+
timeout: 30_000,
|
|
86
|
+
...config,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/** Discover available tools from the gateway endpoint. */
|
|
90
|
+
async connect() {
|
|
91
|
+
if (!this.config.enabled)
|
|
92
|
+
return;
|
|
93
|
+
try {
|
|
94
|
+
const res = await fetch(`${this.config.endpoint}/tools`, {
|
|
95
|
+
headers: { Authorization: `Bearer ${this.config.apiKey}` },
|
|
96
|
+
signal: AbortSignal.timeout(this.config.timeout),
|
|
97
|
+
});
|
|
98
|
+
if (!res.ok) {
|
|
99
|
+
throw new Error(`Gateway returned ${res.status}`);
|
|
100
|
+
}
|
|
101
|
+
const data = (await res.json());
|
|
102
|
+
const enabledSet = this.config.enabledTools
|
|
103
|
+
? new Set(this.config.enabledTools)
|
|
104
|
+
: null;
|
|
105
|
+
for (const tool of data.tools) {
|
|
106
|
+
if (!enabledSet || enabledSet.has(tool.name)) {
|
|
107
|
+
this.availableTools.set(tool.name, tool);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
this.connected = true;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Auto-detect failed — fall back to default definitions
|
|
114
|
+
this.loadDefaults();
|
|
115
|
+
this.connected = false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** Load default tool definitions (used as fallback). */
|
|
119
|
+
loadDefaults() {
|
|
120
|
+
const enabledSet = this.config.enabledTools
|
|
121
|
+
? new Set(this.config.enabledTools)
|
|
122
|
+
: null;
|
|
123
|
+
for (const def of DEFAULT_TOOL_DEFS) {
|
|
124
|
+
if (!enabledSet || enabledSet.has(def.name)) {
|
|
125
|
+
this.availableTools.set(def.name, def);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** Invoke a tool through the gateway. */
|
|
130
|
+
async invokeTool(name, input) {
|
|
131
|
+
try {
|
|
132
|
+
const res = await fetch(`${this.config.endpoint}/tools/${name}/invoke`, {
|
|
133
|
+
method: 'POST',
|
|
134
|
+
headers: {
|
|
135
|
+
'Content-Type': 'application/json',
|
|
136
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
137
|
+
},
|
|
138
|
+
body: JSON.stringify({ input }),
|
|
139
|
+
signal: AbortSignal.timeout(this.config.timeout),
|
|
140
|
+
});
|
|
141
|
+
if (!res.ok) {
|
|
142
|
+
return { content: `Gateway error: HTTP ${res.status}`, isError: true };
|
|
143
|
+
}
|
|
144
|
+
const data = (await res.json());
|
|
145
|
+
if (data.error) {
|
|
146
|
+
return { content: data.error, isError: true, metadata: data.metadata };
|
|
147
|
+
}
|
|
148
|
+
return { content: data.content, metadata: data.metadata };
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
return {
|
|
152
|
+
content: `Gateway invocation failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
153
|
+
isError: true,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/** Get all gateway tools as MCPTool instances for registry integration. */
|
|
158
|
+
getTools() {
|
|
159
|
+
return Array.from(this.availableTools.values()).map((meta) => new GatewayTool(this, meta));
|
|
160
|
+
}
|
|
161
|
+
/** Get tool definitions (without execute). */
|
|
162
|
+
listTools() {
|
|
163
|
+
return Array.from(this.availableTools.values()).map(({ name, description, inputSchema }) => ({
|
|
164
|
+
name: `gateway:${name}`,
|
|
165
|
+
description: `[Gateway] ${description}`,
|
|
166
|
+
inputSchema,
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
get isConnected() {
|
|
170
|
+
return this.connected;
|
|
171
|
+
}
|
|
172
|
+
get toolCount() {
|
|
173
|
+
return this.availableTools.size;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.ToolGateway = ToolGateway;
|
|
177
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
import { defineConfig } from 'vitepress';
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
title: 'OPC Agent',
|
|
5
|
-
description: 'Open Agent Framework - Build, test, and run AI Agents for business workstations',
|
|
6
|
-
|
|
7
|
-
locales: {
|
|
8
|
-
root: {
|
|
9
|
-
label: 'English',
|
|
10
|
-
lang: 'en',
|
|
11
|
-
themeConfig: {
|
|
12
|
-
nav: [
|
|
13
|
-
{ text: 'Guide', link: '/guide/getting-started' },
|
|
14
|
-
{ text: 'API', link: '/api/oad-schema' },
|
|
15
|
-
{ text: 'GitHub', link: 'https://github.com/Deepleaper/opc-agent' },
|
|
16
|
-
],
|
|
17
|
-
sidebar: {
|
|
18
|
-
'/guide/': [
|
|
19
|
-
{
|
|
20
|
-
text: 'Introduction',
|
|
21
|
-
items: [
|
|
22
|
-
{ text: 'Getting Started', link: '/guide/getting-started' },
|
|
23
|
-
{ text: 'Core Concepts', link: '/guide/concepts' },
|
|
24
|
-
],
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
text: 'Usage',
|
|
28
|
-
items: [
|
|
29
|
-
{ text: 'Templates', link: '/guide/templates' },
|
|
30
|
-
{ text: 'Configuration', link: '/guide/configuration' },
|
|
31
|
-
{ text: 'Testing', link: '/guide/testing' },
|
|
32
|
-
{ text: 'Deployment', link: '/guide/deployment' },
|
|
33
|
-
],
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
'/api/': [
|
|
37
|
-
{
|
|
38
|
-
text: 'Reference',
|
|
39
|
-
items: [
|
|
40
|
-
{ text: 'OAD Schema', link: '/api/oad-schema' },
|
|
41
|
-
{ text: 'CLI Commands', link: '/api/cli' },
|
|
42
|
-
{ text: 'SDK', link: '/api/sdk' },
|
|
43
|
-
],
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
zh: {
|
|
50
|
-
label: '中文',
|
|
51
|
-
lang: 'zh-CN',
|
|
52
|
-
description: '开放智能体框架 — 构建、测试、运行企业级 AI 智能体',
|
|
53
|
-
themeConfig: {
|
|
54
|
-
nav: [
|
|
55
|
-
{ text: '指南', link: '/zh/guide/getting-started' },
|
|
56
|
-
{ text: 'API', link: '/zh/api/oad-schema' },
|
|
57
|
-
{ text: 'GitHub', link: 'https://github.com/Deepleaper/opc-agent' },
|
|
58
|
-
],
|
|
59
|
-
sidebar: {
|
|
60
|
-
'/zh/guide/': [
|
|
61
|
-
{
|
|
62
|
-
text: '入门',
|
|
63
|
-
items: [
|
|
64
|
-
{ text: '快速开始', link: '/zh/guide/getting-started' },
|
|
65
|
-
{ text: '核心概念', link: '/zh/guide/concepts' },
|
|
66
|
-
],
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
text: '使用',
|
|
70
|
-
items: [
|
|
71
|
-
{ text: '模板', link: '/zh/guide/templates' },
|
|
72
|
-
{ text: '配置', link: '/zh/guide/configuration' },
|
|
73
|
-
{ text: '测试', link: '/zh/guide/testing' },
|
|
74
|
-
{ text: '部署', link: '/zh/guide/deployment' },
|
|
75
|
-
],
|
|
76
|
-
},
|
|
77
|
-
],
|
|
78
|
-
'/zh/api/': [
|
|
79
|
-
{
|
|
80
|
-
text: '参考',
|
|
81
|
-
items: [
|
|
82
|
-
{ text: 'OAD Schema', link: '/zh/api/oad-schema' },
|
|
83
|
-
{ text: 'CLI 命令', link: '/zh/api/cli' },
|
|
84
|
-
{ text: 'SDK', link: '/zh/api/sdk' },
|
|
85
|
-
],
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
themeConfig: {
|
|
94
|
-
logo: '/logo.svg',
|
|
95
|
-
socialLinks: [
|
|
96
|
-
{ icon: 'github', link: 'https://github.com/Deepleaper/opc-agent' },
|
|
97
|
-
],
|
|
98
|
-
footer: {
|
|
99
|
-
message: 'Released under the Apache-2.0 License.',
|
|
100
|
-
copyright: 'Copyright © 2025 Deepleaper 跃盟科技',
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
});
|
|
1
|
+
import { defineConfig } from 'vitepress';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
title: 'OPC Agent',
|
|
5
|
+
description: 'Open Agent Framework - Build, test, and run AI Agents for business workstations',
|
|
6
|
+
|
|
7
|
+
locales: {
|
|
8
|
+
root: {
|
|
9
|
+
label: 'English',
|
|
10
|
+
lang: 'en',
|
|
11
|
+
themeConfig: {
|
|
12
|
+
nav: [
|
|
13
|
+
{ text: 'Guide', link: '/guide/getting-started' },
|
|
14
|
+
{ text: 'API', link: '/api/oad-schema' },
|
|
15
|
+
{ text: 'GitHub', link: 'https://github.com/Deepleaper/opc-agent' },
|
|
16
|
+
],
|
|
17
|
+
sidebar: {
|
|
18
|
+
'/guide/': [
|
|
19
|
+
{
|
|
20
|
+
text: 'Introduction',
|
|
21
|
+
items: [
|
|
22
|
+
{ text: 'Getting Started', link: '/guide/getting-started' },
|
|
23
|
+
{ text: 'Core Concepts', link: '/guide/concepts' },
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
text: 'Usage',
|
|
28
|
+
items: [
|
|
29
|
+
{ text: 'Templates', link: '/guide/templates' },
|
|
30
|
+
{ text: 'Configuration', link: '/guide/configuration' },
|
|
31
|
+
{ text: 'Testing', link: '/guide/testing' },
|
|
32
|
+
{ text: 'Deployment', link: '/guide/deployment' },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
'/api/': [
|
|
37
|
+
{
|
|
38
|
+
text: 'Reference',
|
|
39
|
+
items: [
|
|
40
|
+
{ text: 'OAD Schema', link: '/api/oad-schema' },
|
|
41
|
+
{ text: 'CLI Commands', link: '/api/cli' },
|
|
42
|
+
{ text: 'SDK', link: '/api/sdk' },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
zh: {
|
|
50
|
+
label: '中文',
|
|
51
|
+
lang: 'zh-CN',
|
|
52
|
+
description: '开放智能体框架 — 构建、测试、运行企业级 AI 智能体',
|
|
53
|
+
themeConfig: {
|
|
54
|
+
nav: [
|
|
55
|
+
{ text: '指南', link: '/zh/guide/getting-started' },
|
|
56
|
+
{ text: 'API', link: '/zh/api/oad-schema' },
|
|
57
|
+
{ text: 'GitHub', link: 'https://github.com/Deepleaper/opc-agent' },
|
|
58
|
+
],
|
|
59
|
+
sidebar: {
|
|
60
|
+
'/zh/guide/': [
|
|
61
|
+
{
|
|
62
|
+
text: '入门',
|
|
63
|
+
items: [
|
|
64
|
+
{ text: '快速开始', link: '/zh/guide/getting-started' },
|
|
65
|
+
{ text: '核心概念', link: '/zh/guide/concepts' },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
text: '使用',
|
|
70
|
+
items: [
|
|
71
|
+
{ text: '模板', link: '/zh/guide/templates' },
|
|
72
|
+
{ text: '配置', link: '/zh/guide/configuration' },
|
|
73
|
+
{ text: '测试', link: '/zh/guide/testing' },
|
|
74
|
+
{ text: '部署', link: '/zh/guide/deployment' },
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
'/zh/api/': [
|
|
79
|
+
{
|
|
80
|
+
text: '参考',
|
|
81
|
+
items: [
|
|
82
|
+
{ text: 'OAD Schema', link: '/zh/api/oad-schema' },
|
|
83
|
+
{ text: 'CLI 命令', link: '/zh/api/cli' },
|
|
84
|
+
{ text: 'SDK', link: '/zh/api/sdk' },
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
themeConfig: {
|
|
94
|
+
logo: '/logo.svg',
|
|
95
|
+
socialLinks: [
|
|
96
|
+
{ icon: 'github', link: 'https://github.com/Deepleaper/opc-agent' },
|
|
97
|
+
],
|
|
98
|
+
footer: {
|
|
99
|
+
message: 'Released under the Apache-2.0 License.',
|
|
100
|
+
copyright: 'Copyright © 2025 Deepleaper 跃盟科技',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
});
|