opc-agent 2.0.0 → 2.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 (156) hide show
  1. package/dist/channels/email.d.ts +32 -26
  2. package/dist/channels/email.js +239 -62
  3. package/dist/channels/feishu.d.ts +21 -6
  4. package/dist/channels/feishu.js +225 -126
  5. package/dist/channels/websocket.d.ts +46 -3
  6. package/dist/channels/websocket.js +306 -37
  7. package/dist/channels/wechat.d.ts +33 -13
  8. package/dist/channels/wechat.js +229 -42
  9. package/dist/cli.js +712 -11
  10. package/dist/core/a2a.d.ts +17 -0
  11. package/dist/core/a2a.js +43 -1
  12. package/dist/core/agent.d.ts +16 -0
  13. package/dist/core/agent.js +108 -0
  14. package/dist/core/runtime.d.ts +6 -0
  15. package/dist/core/runtime.js +161 -2
  16. package/dist/core/sandbox.d.ts +26 -0
  17. package/dist/core/sandbox.js +117 -0
  18. package/dist/core/workflow-graph.d.ts +93 -0
  19. package/dist/core/workflow-graph.js +247 -0
  20. package/dist/doctor.d.ts +15 -0
  21. package/dist/doctor.js +183 -0
  22. package/dist/eval/index.d.ts +65 -0
  23. package/dist/eval/index.js +191 -0
  24. package/dist/index.d.ts +30 -6
  25. package/dist/index.js +60 -4
  26. package/dist/plugins/content-filter.d.ts +7 -0
  27. package/dist/plugins/content-filter.js +25 -0
  28. package/dist/plugins/index.d.ts +42 -0
  29. package/dist/plugins/index.js +108 -2
  30. package/dist/plugins/logger.d.ts +6 -0
  31. package/dist/plugins/logger.js +20 -0
  32. package/dist/plugins/rate-limiter.d.ts +7 -0
  33. package/dist/plugins/rate-limiter.js +35 -0
  34. package/dist/protocols/a2a/client.d.ts +25 -0
  35. package/dist/protocols/a2a/client.js +115 -0
  36. package/dist/protocols/a2a/index.d.ts +6 -0
  37. package/dist/protocols/a2a/index.js +12 -0
  38. package/dist/protocols/a2a/server.d.ts +41 -0
  39. package/dist/protocols/a2a/server.js +295 -0
  40. package/dist/protocols/a2a/types.d.ts +91 -0
  41. package/dist/protocols/a2a/types.js +15 -0
  42. package/dist/protocols/a2a/utils.d.ts +6 -0
  43. package/dist/protocols/a2a/utils.js +47 -0
  44. package/dist/protocols/agui/client.d.ts +10 -0
  45. package/dist/protocols/agui/client.js +75 -0
  46. package/dist/protocols/agui/index.d.ts +4 -0
  47. package/dist/protocols/agui/index.js +25 -0
  48. package/dist/protocols/agui/server.d.ts +37 -0
  49. package/dist/protocols/agui/server.js +191 -0
  50. package/dist/protocols/agui/types.d.ts +107 -0
  51. package/dist/protocols/agui/types.js +17 -0
  52. package/dist/protocols/index.d.ts +2 -0
  53. package/dist/protocols/index.js +19 -0
  54. package/dist/protocols/mcp/agent-tools.d.ts +11 -0
  55. package/dist/protocols/mcp/agent-tools.js +129 -0
  56. package/dist/protocols/mcp/index.d.ts +5 -0
  57. package/dist/protocols/mcp/index.js +11 -0
  58. package/dist/protocols/mcp/server.d.ts +31 -0
  59. package/dist/protocols/mcp/server.js +248 -0
  60. package/dist/protocols/mcp/types.d.ts +92 -0
  61. package/dist/protocols/mcp/types.js +17 -0
  62. package/dist/publish/index.d.ts +45 -0
  63. package/dist/publish/index.js +350 -0
  64. package/dist/schema/oad.d.ts +682 -65
  65. package/dist/schema/oad.js +36 -3
  66. package/dist/security/approval.d.ts +36 -0
  67. package/dist/security/approval.js +113 -0
  68. package/dist/security/index.d.ts +4 -0
  69. package/dist/security/index.js +8 -0
  70. package/dist/security/keys.d.ts +16 -0
  71. package/dist/security/keys.js +117 -0
  72. package/dist/studio/server.d.ts +63 -0
  73. package/dist/studio/server.js +625 -0
  74. package/dist/studio-ui/index.html +662 -0
  75. package/dist/telemetry/index.d.ts +93 -0
  76. package/dist/telemetry/index.js +285 -0
  77. package/package.json +5 -3
  78. package/scripts/install.ps1 +31 -0
  79. package/scripts/install.sh +40 -0
  80. package/src/channels/email.ts +351 -177
  81. package/src/channels/feishu.ts +349 -236
  82. package/src/channels/websocket.ts +399 -87
  83. package/src/channels/wechat.ts +329 -149
  84. package/src/cli.ts +783 -12
  85. package/src/core/a2a.ts +60 -0
  86. package/src/core/agent.ts +125 -0
  87. package/src/core/runtime.ts +127 -0
  88. package/src/core/sandbox.ts +143 -0
  89. package/src/core/workflow-graph.ts +365 -0
  90. package/src/doctor.ts +156 -0
  91. package/src/eval/index.ts +211 -0
  92. package/src/eval/suites/basic.json +16 -0
  93. package/src/eval/suites/memory.json +12 -0
  94. package/src/eval/suites/safety.json +14 -0
  95. package/src/index.ts +54 -6
  96. package/src/plugins/content-filter.ts +23 -0
  97. package/src/plugins/index.ts +133 -2
  98. package/src/plugins/logger.ts +18 -0
  99. package/src/plugins/rate-limiter.ts +38 -0
  100. package/src/protocols/a2a/client.ts +132 -0
  101. package/src/protocols/a2a/index.ts +8 -0
  102. package/src/protocols/a2a/server.ts +333 -0
  103. package/src/protocols/a2a/types.ts +88 -0
  104. package/src/protocols/a2a/utils.ts +50 -0
  105. package/src/protocols/agui/client.ts +83 -0
  106. package/src/protocols/agui/index.ts +4 -0
  107. package/src/protocols/agui/server.ts +218 -0
  108. package/src/protocols/agui/types.ts +153 -0
  109. package/src/protocols/index.ts +2 -0
  110. package/src/protocols/mcp/agent-tools.ts +134 -0
  111. package/src/protocols/mcp/index.ts +8 -0
  112. package/src/protocols/mcp/server.ts +262 -0
  113. package/src/protocols/mcp/types.ts +69 -0
  114. package/src/publish/index.ts +376 -0
  115. package/src/schema/oad.ts +39 -2
  116. package/src/security/approval.ts +131 -0
  117. package/src/security/index.ts +3 -0
  118. package/src/security/keys.ts +87 -0
  119. package/src/studio/server.ts +629 -0
  120. package/src/studio-ui/index.html +662 -0
  121. package/src/telemetry/index.ts +324 -0
  122. package/src/types/agent-workstation.d.ts +2 -0
  123. package/tests/a2a-protocol.test.ts +285 -0
  124. package/tests/agui-protocol.test.ts +246 -0
  125. package/tests/channels/discord.test.ts +79 -0
  126. package/tests/channels/email.test.ts +148 -0
  127. package/tests/channels/feishu.test.ts +123 -0
  128. package/tests/channels/telegram.test.ts +129 -0
  129. package/tests/channels/websocket.test.ts +53 -0
  130. package/tests/channels/wechat.test.ts +170 -0
  131. package/tests/chat-cli.test.ts +160 -0
  132. package/tests/daemon.test.ts +135 -0
  133. package/tests/deepbrain-wire.test.ts +234 -0
  134. package/tests/doctor.test.ts +38 -0
  135. package/tests/eval.test.ts +173 -0
  136. package/tests/init-role.test.ts +124 -0
  137. package/tests/mcp-client.test.ts +92 -0
  138. package/tests/mcp-server.test.ts +178 -0
  139. package/tests/plugin-a2a-enhanced.test.ts +230 -0
  140. package/tests/publish.test.ts +231 -0
  141. package/tests/scheduler.test.ts +200 -0
  142. package/tests/security-enhanced.test.ts +233 -0
  143. package/tests/skill-learner.test.ts +161 -0
  144. package/tests/studio.test.ts +229 -0
  145. package/tests/subagent.test.ts +63 -0
  146. package/tests/telemetry.test.ts +186 -0
  147. package/tests/tools/builtin-extended.test.ts +138 -0
  148. package/tests/workflow-graph.test.ts +279 -0
  149. package/tutorial/customer-service-agent/README.md +612 -0
  150. package/tutorial/customer-service-agent/SOUL.md +26 -0
  151. package/tutorial/customer-service-agent/agent.yaml +63 -0
  152. package/tutorial/customer-service-agent/package.json +19 -0
  153. package/tutorial/customer-service-agent/src/index.ts +69 -0
  154. package/tutorial/customer-service-agent/src/skills/faq.ts +27 -0
  155. package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -0
  156. package/tutorial/customer-service-agent/tsconfig.json +14 -0
@@ -0,0 +1,65 @@
1
+ export interface EvalCase {
2
+ id: string;
3
+ input: string;
4
+ expectedOutput?: string;
5
+ expectedContains?: string[];
6
+ expectedNotContains?: string[];
7
+ rubric?: string;
8
+ tags?: string[];
9
+ metadata?: Record<string, any>;
10
+ }
11
+ export interface EvalResult {
12
+ caseId: string;
13
+ input: string;
14
+ output: string;
15
+ scores: {
16
+ exact_match?: number;
17
+ contains?: number;
18
+ not_contains?: number;
19
+ rubric_score?: number;
20
+ latency_ms: number;
21
+ token_count?: number;
22
+ };
23
+ passed: boolean;
24
+ error?: string;
25
+ }
26
+ export interface EvalSuite {
27
+ name: string;
28
+ description?: string;
29
+ cases: EvalCase[];
30
+ }
31
+ export interface EvalReport {
32
+ suite: string;
33
+ timestamp: string;
34
+ totalCases: number;
35
+ passed: number;
36
+ failed: number;
37
+ passRate: number;
38
+ avgLatency: number;
39
+ p95Latency: number;
40
+ results: EvalResult[];
41
+ summary: string;
42
+ }
43
+ export declare class AgentEvaluator {
44
+ private agent;
45
+ constructor(agent: any);
46
+ evalCase(evalCase: EvalCase): Promise<EvalResult>;
47
+ evalSuite(suite: EvalSuite): Promise<EvalReport>;
48
+ static loadSuite(filePath: string): EvalSuite;
49
+ static saveReport(report: EvalReport, filePath: string): void;
50
+ static compare(baseline: EvalReport, current: EvalReport): {
51
+ improved: string[];
52
+ regressed: string[];
53
+ unchanged: string[];
54
+ baselinePassRate: number;
55
+ currentPassRate: number;
56
+ delta: number;
57
+ };
58
+ static builtinSuites(): {
59
+ name: string;
60
+ description: string;
61
+ caseCount: number;
62
+ }[];
63
+ static loadBuiltinSuite(name: string): EvalSuite;
64
+ }
65
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,191 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.AgentEvaluator = void 0;
37
+ /**
38
+ * Agent Evaluation Framework — rule-based scoring with optional LLM-as-judge.
39
+ * Zero external dependencies.
40
+ */
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ // ─── Scoring helpers ────────────────────────────────────────────────────────
44
+ function scoreExactMatch(output, expected) {
45
+ return output.trim().toLowerCase() === expected.trim().toLowerCase() ? 1 : 0;
46
+ }
47
+ function scoreContains(output, expected) {
48
+ if (!expected.length)
49
+ return 1;
50
+ const lower = output.toLowerCase();
51
+ const matched = expected.filter(e => lower.includes(e.toLowerCase())).length;
52
+ return matched / expected.length;
53
+ }
54
+ function scoreNotContains(output, forbidden) {
55
+ if (!forbidden.length)
56
+ return 1;
57
+ const lower = output.toLowerCase();
58
+ const clean = forbidden.filter(f => !lower.includes(f.toLowerCase())).length;
59
+ return clean / forbidden.length;
60
+ }
61
+ function computeP95(values) {
62
+ if (!values.length)
63
+ return 0;
64
+ const sorted = [...values].sort((a, b) => a - b);
65
+ const idx = Math.ceil(0.95 * sorted.length) - 1;
66
+ return sorted[Math.max(0, idx)];
67
+ }
68
+ // ─── Evaluator ──────────────────────────────────────────────────────────────
69
+ class AgentEvaluator {
70
+ agent;
71
+ constructor(agent) {
72
+ this.agent = agent;
73
+ }
74
+ async evalCase(evalCase) {
75
+ const start = Date.now();
76
+ let output = '';
77
+ let error;
78
+ try {
79
+ // Agent must expose a chat / processMessage style method
80
+ if (typeof this.agent.chat === 'function') {
81
+ output = await this.agent.chat(evalCase.input);
82
+ }
83
+ else if (typeof this.agent.processMessage === 'function') {
84
+ const resp = await this.agent.processMessage({ role: 'user', content: evalCase.input });
85
+ output = typeof resp === 'string' ? resp : resp?.content ?? JSON.stringify(resp);
86
+ }
87
+ else {
88
+ throw new Error('Agent must implement chat() or processMessage()');
89
+ }
90
+ }
91
+ catch (e) {
92
+ error = e.message;
93
+ output = '';
94
+ }
95
+ const latency_ms = Date.now() - start;
96
+ const scores = { latency_ms };
97
+ if (evalCase.expectedOutput !== undefined) {
98
+ scores.exact_match = scoreExactMatch(output, evalCase.expectedOutput);
99
+ }
100
+ if (evalCase.expectedContains?.length) {
101
+ scores.contains = scoreContains(output, evalCase.expectedContains);
102
+ }
103
+ if (evalCase.expectedNotContains?.length) {
104
+ scores.not_contains = scoreNotContains(output, evalCase.expectedNotContains);
105
+ }
106
+ // Determine pass: all defined rule-based scores must be >= threshold (1.0 for exact, 0.5 for partial)
107
+ let passed = !error;
108
+ if (passed && scores.exact_match !== undefined && scores.exact_match < 1)
109
+ passed = false;
110
+ if (passed && scores.contains !== undefined && scores.contains < 0.5)
111
+ passed = false;
112
+ if (passed && scores.not_contains !== undefined && scores.not_contains < 0.5)
113
+ passed = false;
114
+ return { caseId: evalCase.id, input: evalCase.input, output, scores, passed, error };
115
+ }
116
+ async evalSuite(suite) {
117
+ const results = [];
118
+ for (const c of suite.cases) {
119
+ results.push(await this.evalCase(c));
120
+ }
121
+ const latencies = results.map(r => r.scores.latency_ms);
122
+ const passed = results.filter(r => r.passed).length;
123
+ const total = results.length;
124
+ return {
125
+ suite: suite.name,
126
+ timestamp: new Date().toISOString(),
127
+ totalCases: total,
128
+ passed,
129
+ failed: total - passed,
130
+ passRate: total ? passed / total : 0,
131
+ avgLatency: latencies.length ? latencies.reduce((a, b) => a + b, 0) / latencies.length : 0,
132
+ p95Latency: computeP95(latencies),
133
+ results,
134
+ summary: `${suite.name}: ${passed}/${total} passed (${total ? Math.round(passed / total * 100) : 0}%)`,
135
+ };
136
+ }
137
+ static loadSuite(filePath) {
138
+ const raw = fs.readFileSync(filePath, 'utf-8');
139
+ return JSON.parse(raw);
140
+ }
141
+ static saveReport(report, filePath) {
142
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
143
+ fs.writeFileSync(filePath, JSON.stringify(report, null, 2), 'utf-8');
144
+ }
145
+ static compare(baseline, current) {
146
+ const baseMap = new Map(baseline.results.map(r => [r.caseId, r.passed]));
147
+ const improved = [];
148
+ const regressed = [];
149
+ const unchanged = [];
150
+ for (const r of current.results) {
151
+ const prev = baseMap.get(r.caseId);
152
+ if (prev === undefined) {
153
+ unchanged.push(r.caseId);
154
+ continue;
155
+ }
156
+ if (!prev && r.passed)
157
+ improved.push(r.caseId);
158
+ else if (prev && !r.passed)
159
+ regressed.push(r.caseId);
160
+ else
161
+ unchanged.push(r.caseId);
162
+ }
163
+ return {
164
+ improved,
165
+ regressed,
166
+ unchanged,
167
+ baselinePassRate: baseline.passRate,
168
+ currentPassRate: current.passRate,
169
+ delta: current.passRate - baseline.passRate,
170
+ };
171
+ }
172
+ static builtinSuites() {
173
+ const suitesDir = path.join(__dirname, 'suites');
174
+ if (!fs.existsSync(suitesDir))
175
+ return [];
176
+ return fs.readdirSync(suitesDir)
177
+ .filter(f => f.endsWith('.json'))
178
+ .map(f => {
179
+ const suite = JSON.parse(fs.readFileSync(path.join(suitesDir, f), 'utf-8'));
180
+ return { name: suite.name, description: suite.description || '', caseCount: suite.cases.length };
181
+ });
182
+ }
183
+ static loadBuiltinSuite(name) {
184
+ const filePath = path.join(__dirname, 'suites', `${name}.json`);
185
+ if (!fs.existsSync(filePath))
186
+ throw new Error(`Built-in suite '${name}' not found`);
187
+ return AgentEvaluator.loadSuite(filePath);
188
+ }
189
+ }
190
+ exports.AgentEvaluator = AgentEvaluator;
191
+ //# sourceMappingURL=index.js.map
package/dist/index.d.ts CHANGED
@@ -21,12 +21,17 @@ export type { MCPTool, MCPToolDefinition, MCPToolResult } from './tools/mcp';
21
21
  export { PluginManager } from './plugins';
22
22
  export type { IPlugin, PluginHooks } from './plugins';
23
23
  export { Sandbox } from './core/sandbox';
24
- export type { SandboxConfig, SandboxRestrictions } from './core/sandbox';
24
+ export type { SandboxConfig, SandboxRestrictions, ValidationResult, SandboxStatus } from './core/sandbox';
25
+ export { ApprovalManager } from './security/approval';
26
+ export type { ApprovalPolicy, ApprovalRequest as SecurityApprovalRequest } from './security/approval';
27
+ export { KeyManager } from './security/keys';
25
28
  export { Analytics } from './analytics';
26
29
  export { WorkflowEngine } from './core/workflow';
27
30
  export type { WorkflowDefinition, WorkflowStep, WorkflowResult, StepResult } from './core/workflow';
28
- export { AgentRegistry } from './core/a2a';
29
- export type { A2ARequest, A2AResponse, AgentCapability, AgentRegistration } from './core/a2a';
31
+ export { GraphWorkflowEngine, WorkflowBuilder, parseOADWorkflow } from './core/workflow-graph';
32
+ export type { WorkflowContext, GraphWorkflowStep, GraphWorkflow, GraphWorkflowResult, OADWorkflowDef, OADWorkflowStepDef } from './core/workflow-graph';
33
+ export { AgentRegistry, AgentCardRegistry } from './core/a2a';
34
+ export type { A2ARequest, A2AResponse, AgentCapability, AgentRegistration, AgentCard } from './core/a2a';
30
35
  export { HITLManager } from './core/hitl';
31
36
  export type { ApprovalRequest, ApprovalResponse, HITLConfig } from './core/hitl';
32
37
  export { VoiceChannel } from './channels/voice';
@@ -81,7 +86,10 @@ export { OPCError, ProviderError, ValidationError, ConfigError, ChannelError, Pl
81
86
  export { sanitizeInput, detectInjection, securityHeaders, corsMiddleware, APIKeyManager, inputValidation } from './core/security';
82
87
  export type { SecurityHeadersConfig, CORSConfig, APIKeyEntry } from './core/security';
83
88
  export { createLoggingPlugin, createAnalyticsPlugin, createRateLimitPlugin } from './plugins';
84
- export type { PluginManifest } from './plugins';
89
+ export type { PluginManifest, Plugin } from './plugins';
90
+ export { loggerPlugin } from './plugins/logger';
91
+ export { rateLimiterPlugin, createRateLimiterPlugin as createEnhancedRateLimiterPlugin } from './plugins/rate-limiter';
92
+ export { contentFilterPlugin, createContentFilterPlugin } from './plugins/content-filter';
85
93
  export { FeishuChannel } from './channels/feishu';
86
94
  export type { FeishuChannelConfig } from './channels/feishu';
87
95
  export { DiscordChannel } from './channels/discord';
@@ -92,11 +100,27 @@ export { ToolGateway } from './tools/gateway';
92
100
  export type { ToolGatewayConfig, GatewayToolName } from './tools/gateway';
93
101
  export { StreamingManager, StreamableResponse } from './core/streaming';
94
102
  export type { StreamChunk, StreamOptions } from './core/streaming';
95
- export { TraceCollector, ConsoleExporter, DeepBrainExporter } from './traces';
96
- export type { Span, SpanEvent, TraceExporter } from './traces';
103
+ export { TraceCollector, ConsoleExporter as TraceConsoleExporter, DeepBrainExporter } from './traces';
104
+ export type { Span as TraceSpan, SpanEvent as TraceSpanEvent, TraceExporter as ITraceExporter } from './traces';
105
+ export { Tracer, ConsoleExporter, FileExporter, OTLPHttpExporter, generateTraceId, generateSpanId } from './telemetry';
106
+ export type { Span, SpanEvent, Metric, TraceExporter } from './telemetry';
97
107
  export { Scheduler, parseCron, cronMatches } from './core/scheduler';
98
108
  export type { CronJob, JobHandler } from './core/scheduler';
99
109
  export { getBuiltinTools, getBuiltinToolsByName } from './tools/builtin';
100
110
  export { MCPClient } from './tools/mcp-client';
101
111
  export type { MCPServerConfig } from './tools/mcp-client';
112
+ export { AgentPackager, AgentPublisher, AgentInstaller } from './publish';
113
+ export type { PackageManifest, PublishOptions } from './publish';
114
+ export { StudioServer } from './studio/server';
115
+ export type { StudioConfig } from './studio/server';
116
+ export { A2AServer, A2AClient, oadToAgentCard, JSON_RPC_ERRORS } from './protocols/a2a';
117
+ export type { A2AAgentCard, A2AAgentSkill, A2ATask, A2ATaskStatus, A2ATaskState, A2AMessage, A2AMessagePart, A2AArtifact, } from './protocols/a2a';
118
+ export { MCPServer } from './protocols/mcp/server';
119
+ export type { MCPServerConfig as MCPServerConf, MCPServerToolDefinition, MCPResourceDefinition, MCPPromptDefinition } from './protocols/mcp/types';
120
+ export { agentToMCPTools, agentToMCPResources } from './protocols/mcp/agent-tools';
121
+ export { AgentEvaluator } from './eval';
122
+ export type { EvalCase, EvalResult, EvalSuite, EvalReport } from './eval';
123
+ export { AGUIServer, AGUIEventEmitter, AGUIClient } from './protocols/agui';
124
+ export { AGUI_EVENT_TYPES, isValidEventType } from './protocols/agui';
125
+ export type { AGUIEvent, AGUIEventType, AGUIMessage, AGUIRunRequest, AGUIToolCall, AGUIToolDefinition, TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, StateSnapshotEvent, StateDeltaEvent, MessagesSnapshotEvent, RunStartedEvent, RunFinishedEvent, RunErrorEvent, StepStartedEvent, StepFinishedEvent, CustomEvent, } from './protocols/agui';
102
126
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JsonTransformTool = exports.DateTimeTool = exports.CalculatorTool = exports.WeChatChannel = exports.SlackChannel = exports.EmailChannel = exports.compose = exports.AgentPipeline = exports.Orchestrator = exports.getActiveSessions = exports.createAuthMiddleware = 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.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.getBuiltinTools = exports.cronMatches = exports.parseCron = exports.Scheduler = exports.DeepBrainExporter = exports.ConsoleExporter = exports.TraceCollector = 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.parseSkillMarkdown = exports.skillToMarkdown = exports.SkillLearner = exports.DocumentSkill = exports.SchedulerSkill = exports.WebhookTriggerSkill = exports.HttpSkill = exports.TextAnalysisTool = void 0;
5
- exports.MCPClient = exports.getBuiltinToolsByName = void 0;
3
+ exports.compose = exports.AgentPipeline = exports.Orchestrator = exports.getActiveSessions = exports.createAuthMiddleware = 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.AgentCardRegistry = exports.AgentRegistry = exports.parseOADWorkflow = exports.WorkflowBuilder = exports.GraphWorkflowEngine = exports.WorkflowEngine = exports.Analytics = exports.KeyManager = exports.ApprovalManager = exports.Sandbox = exports.PluginManager = exports.createMCPTool = exports.MCPToolRegistry = exports.Room = exports.SUPPORTED_PROVIDERS = exports.createProvider = 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.DiscordChannel = exports.FeishuChannel = exports.createContentFilterPlugin = exports.contentFilterPlugin = exports.createEnhancedRateLimiterPlugin = exports.rateLimiterPlugin = exports.loggerPlugin = 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.parseSkillMarkdown = exports.skillToMarkdown = exports.SkillLearner = exports.DocumentSkill = exports.SchedulerSkill = exports.WebhookTriggerSkill = exports.HttpSkill = exports.TextAnalysisTool = exports.JsonTransformTool = exports.DateTimeTool = exports.CalculatorTool = exports.WeChatChannel = exports.SlackChannel = exports.EmailChannel = void 0;
5
+ exports.isValidEventType = exports.AGUI_EVENT_TYPES = exports.AGUIClient = exports.AGUIEventEmitter = exports.AGUIServer = exports.AgentEvaluator = exports.agentToMCPResources = exports.agentToMCPTools = exports.MCPServer = exports.JSON_RPC_ERRORS = exports.oadToAgentCard = exports.A2AClient = exports.A2AServer = exports.StudioServer = exports.AgentInstaller = exports.AgentPublisher = exports.AgentPackager = exports.MCPClient = exports.getBuiltinToolsByName = exports.getBuiltinTools = exports.cronMatches = exports.parseCron = exports.Scheduler = exports.generateSpanId = exports.generateTraceId = exports.OTLPHttpExporter = exports.FileExporter = exports.ConsoleExporter = exports.Tracer = exports.DeepBrainExporter = exports.TraceConsoleExporter = exports.TraceCollector = exports.StreamableResponse = exports.StreamingManager = exports.ToolGateway = exports.ProcessWatcher = void 0;
6
6
  // OPC Agent — Open Agent Framework
7
7
  var agent_1 = require("./core/agent");
8
8
  Object.defineProperty(exports, "BaseAgent", { enumerable: true, get: function () { return agent_1.BaseAgent; } });
@@ -45,13 +45,22 @@ var plugins_1 = require("./plugins");
45
45
  Object.defineProperty(exports, "PluginManager", { enumerable: true, get: function () { return plugins_1.PluginManager; } });
46
46
  var sandbox_1 = require("./core/sandbox");
47
47
  Object.defineProperty(exports, "Sandbox", { enumerable: true, get: function () { return sandbox_1.Sandbox; } });
48
+ var approval_1 = require("./security/approval");
49
+ Object.defineProperty(exports, "ApprovalManager", { enumerable: true, get: function () { return approval_1.ApprovalManager; } });
50
+ var keys_1 = require("./security/keys");
51
+ Object.defineProperty(exports, "KeyManager", { enumerable: true, get: function () { return keys_1.KeyManager; } });
48
52
  var analytics_1 = require("./analytics");
49
53
  Object.defineProperty(exports, "Analytics", { enumerable: true, get: function () { return analytics_1.Analytics; } });
50
54
  // v0.4.0 modules
51
55
  var workflow_1 = require("./core/workflow");
52
56
  Object.defineProperty(exports, "WorkflowEngine", { enumerable: true, get: function () { return workflow_1.WorkflowEngine; } });
57
+ var workflow_graph_1 = require("./core/workflow-graph");
58
+ Object.defineProperty(exports, "GraphWorkflowEngine", { enumerable: true, get: function () { return workflow_graph_1.GraphWorkflowEngine; } });
59
+ Object.defineProperty(exports, "WorkflowBuilder", { enumerable: true, get: function () { return workflow_graph_1.WorkflowBuilder; } });
60
+ Object.defineProperty(exports, "parseOADWorkflow", { enumerable: true, get: function () { return workflow_graph_1.parseOADWorkflow; } });
53
61
  var a2a_1 = require("./core/a2a");
54
62
  Object.defineProperty(exports, "AgentRegistry", { enumerable: true, get: function () { return a2a_1.AgentRegistry; } });
63
+ Object.defineProperty(exports, "AgentCardRegistry", { enumerable: true, get: function () { return a2a_1.AgentCardRegistry; } });
55
64
  var hitl_1 = require("./core/hitl");
56
65
  Object.defineProperty(exports, "HITLManager", { enumerable: true, get: function () { return hitl_1.HITLManager; } });
57
66
  var voice_1 = require("./channels/voice");
@@ -152,6 +161,14 @@ var plugins_2 = require("./plugins");
152
161
  Object.defineProperty(exports, "createLoggingPlugin", { enumerable: true, get: function () { return plugins_2.createLoggingPlugin; } });
153
162
  Object.defineProperty(exports, "createAnalyticsPlugin", { enumerable: true, get: function () { return plugins_2.createAnalyticsPlugin; } });
154
163
  Object.defineProperty(exports, "createRateLimitPlugin", { enumerable: true, get: function () { return plugins_2.createRateLimitPlugin; } });
164
+ var logger_2 = require("./plugins/logger");
165
+ Object.defineProperty(exports, "loggerPlugin", { enumerable: true, get: function () { return logger_2.loggerPlugin; } });
166
+ var rate_limiter_2 = require("./plugins/rate-limiter");
167
+ Object.defineProperty(exports, "rateLimiterPlugin", { enumerable: true, get: function () { return rate_limiter_2.rateLimiterPlugin; } });
168
+ Object.defineProperty(exports, "createEnhancedRateLimiterPlugin", { enumerable: true, get: function () { return rate_limiter_2.createRateLimiterPlugin; } });
169
+ var content_filter_1 = require("./plugins/content-filter");
170
+ Object.defineProperty(exports, "contentFilterPlugin", { enumerable: true, get: function () { return content_filter_1.contentFilterPlugin; } });
171
+ Object.defineProperty(exports, "createContentFilterPlugin", { enumerable: true, get: function () { return content_filter_1.createContentFilterPlugin; } });
155
172
  // v1.1.0 modules
156
173
  var feishu_1 = require("./channels/feishu");
157
174
  Object.defineProperty(exports, "FeishuChannel", { enumerable: true, get: function () { return feishu_1.FeishuChannel; } });
@@ -168,8 +185,16 @@ Object.defineProperty(exports, "StreamableResponse", { enumerable: true, get: fu
168
185
  // v1.3.0 modules
169
186
  var traces_1 = require("./traces");
170
187
  Object.defineProperty(exports, "TraceCollector", { enumerable: true, get: function () { return traces_1.TraceCollector; } });
171
- Object.defineProperty(exports, "ConsoleExporter", { enumerable: true, get: function () { return traces_1.ConsoleExporter; } });
188
+ Object.defineProperty(exports, "TraceConsoleExporter", { enumerable: true, get: function () { return traces_1.ConsoleExporter; } });
172
189
  Object.defineProperty(exports, "DeepBrainExporter", { enumerable: true, get: function () { return traces_1.DeepBrainExporter; } });
190
+ // v1.8.0 — Telemetry (OTel-compatible)
191
+ var telemetry_1 = require("./telemetry");
192
+ Object.defineProperty(exports, "Tracer", { enumerable: true, get: function () { return telemetry_1.Tracer; } });
193
+ Object.defineProperty(exports, "ConsoleExporter", { enumerable: true, get: function () { return telemetry_1.ConsoleExporter; } });
194
+ Object.defineProperty(exports, "FileExporter", { enumerable: true, get: function () { return telemetry_1.FileExporter; } });
195
+ Object.defineProperty(exports, "OTLPHttpExporter", { enumerable: true, get: function () { return telemetry_1.OTLPHttpExporter; } });
196
+ Object.defineProperty(exports, "generateTraceId", { enumerable: true, get: function () { return telemetry_1.generateTraceId; } });
197
+ Object.defineProperty(exports, "generateSpanId", { enumerable: true, get: function () { return telemetry_1.generateSpanId; } });
173
198
  // v1.4.0 modules
174
199
  var scheduler_2 = require("./core/scheduler");
175
200
  Object.defineProperty(exports, "Scheduler", { enumerable: true, get: function () { return scheduler_2.Scheduler; } });
@@ -181,4 +206,35 @@ Object.defineProperty(exports, "getBuiltinTools", { enumerable: true, get: funct
181
206
  Object.defineProperty(exports, "getBuiltinToolsByName", { enumerable: true, get: function () { return builtin_1.getBuiltinToolsByName; } });
182
207
  var mcp_client_1 = require("./tools/mcp-client");
183
208
  Object.defineProperty(exports, "MCPClient", { enumerable: true, get: function () { return mcp_client_1.MCPClient; } });
209
+ // v1.6.0 — publish/pack/install
210
+ var publish_1 = require("./publish");
211
+ Object.defineProperty(exports, "AgentPackager", { enumerable: true, get: function () { return publish_1.AgentPackager; } });
212
+ Object.defineProperty(exports, "AgentPublisher", { enumerable: true, get: function () { return publish_1.AgentPublisher; } });
213
+ Object.defineProperty(exports, "AgentInstaller", { enumerable: true, get: function () { return publish_1.AgentInstaller; } });
214
+ // v1.7.0 - Studio
215
+ var server_1 = require("./studio/server");
216
+ Object.defineProperty(exports, "StudioServer", { enumerable: true, get: function () { return server_1.StudioServer; } });
217
+ // v1.9.0 — Google A2A Protocol
218
+ var a2a_2 = require("./protocols/a2a");
219
+ Object.defineProperty(exports, "A2AServer", { enumerable: true, get: function () { return a2a_2.A2AServer; } });
220
+ Object.defineProperty(exports, "A2AClient", { enumerable: true, get: function () { return a2a_2.A2AClient; } });
221
+ Object.defineProperty(exports, "oadToAgentCard", { enumerable: true, get: function () { return a2a_2.oadToAgentCard; } });
222
+ Object.defineProperty(exports, "JSON_RPC_ERRORS", { enumerable: true, get: function () { return a2a_2.JSON_RPC_ERRORS; } });
223
+ // v1.9.0 — MCP Server (expose agents as MCP tools)
224
+ var server_2 = require("./protocols/mcp/server");
225
+ Object.defineProperty(exports, "MCPServer", { enumerable: true, get: function () { return server_2.MCPServer; } });
226
+ var agent_tools_1 = require("./protocols/mcp/agent-tools");
227
+ Object.defineProperty(exports, "agentToMCPTools", { enumerable: true, get: function () { return agent_tools_1.agentToMCPTools; } });
228
+ Object.defineProperty(exports, "agentToMCPResources", { enumerable: true, get: function () { return agent_tools_1.agentToMCPResources; } });
229
+ // v1.8.0 - Eval
230
+ var eval_1 = require("./eval");
231
+ Object.defineProperty(exports, "AgentEvaluator", { enumerable: true, get: function () { return eval_1.AgentEvaluator; } });
232
+ // v1.9.0 — AG-UI Protocol (Agent-User Interaction)
233
+ var agui_1 = require("./protocols/agui");
234
+ Object.defineProperty(exports, "AGUIServer", { enumerable: true, get: function () { return agui_1.AGUIServer; } });
235
+ Object.defineProperty(exports, "AGUIEventEmitter", { enumerable: true, get: function () { return agui_1.AGUIEventEmitter; } });
236
+ Object.defineProperty(exports, "AGUIClient", { enumerable: true, get: function () { return agui_1.AGUIClient; } });
237
+ var agui_2 = require("./protocols/agui");
238
+ Object.defineProperty(exports, "AGUI_EVENT_TYPES", { enumerable: true, get: function () { return agui_2.AGUI_EVENT_TYPES; } });
239
+ Object.defineProperty(exports, "isValidEventType", { enumerable: true, get: function () { return agui_2.isValidEventType; } });
184
240
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ import type { Plugin } from './index';
2
+ /**
3
+ * Content filter plugin — filters messages containing blocked keywords.
4
+ */
5
+ export declare function createContentFilterPlugin(blocklist?: string[]): Plugin;
6
+ export declare const contentFilterPlugin: Plugin;
7
+ //# sourceMappingURL=content-filter.d.ts.map
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contentFilterPlugin = void 0;
4
+ exports.createContentFilterPlugin = createContentFilterPlugin;
5
+ /**
6
+ * Content filter plugin — filters messages containing blocked keywords.
7
+ */
8
+ function createContentFilterPlugin(blocklist = []) {
9
+ return {
10
+ name: 'content-filter',
11
+ version: '1.0.0',
12
+ description: 'Filter inappropriate content',
13
+ onMessage: async (msg, next) => {
14
+ const content = (msg.content || '').toLowerCase();
15
+ for (const word of blocklist) {
16
+ if (content.includes(word.toLowerCase())) {
17
+ throw new Error(`Content blocked: message contains prohibited content`);
18
+ }
19
+ }
20
+ return next(msg);
21
+ },
22
+ };
23
+ }
24
+ exports.contentFilterPlugin = createContentFilterPlugin([]);
25
+ //# sourceMappingURL=content-filter.js.map
@@ -21,6 +21,23 @@ export interface PluginHooks {
21
21
  }) => Promise<void>;
22
22
  beforeShutdown?: () => Promise<void>;
23
23
  }
24
+ /**
25
+ * v1.6.0 — Enhanced Plugin interface with middleware pattern.
26
+ * Plugins implementing this interface use next() to chain processing.
27
+ */
28
+ export interface Plugin {
29
+ name: string;
30
+ version: string;
31
+ description?: string;
32
+ onInit?(runtime: any): Promise<void>;
33
+ onMessage?(message: any, next: (msg: any) => Promise<any>): Promise<any>;
34
+ onResponse?(response: any, next: (res: any) => Promise<any>): Promise<any>;
35
+ onError?(error: Error): void;
36
+ onShutdown?(): Promise<void>;
37
+ tools?: any[];
38
+ skills?: any[];
39
+ channels?: any[];
40
+ }
24
41
  /**
25
42
  * Plugin manifest in OAD: plugins: [{ name, config }]
26
43
  */
@@ -42,8 +59,16 @@ export interface IPlugin {
42
59
  }
43
60
  export declare class PluginManager {
44
61
  private plugins;
62
+ private enhancedPlugins;
45
63
  private logger;
46
64
  register(plugin: IPlugin): void;
65
+ /**
66
+ * Register an enhanced plugin with middleware support (v1.6.0).
67
+ */
68
+ registerEnhanced(plugin: Plugin): void;
69
+ unregisterEnhanced(name: string): void;
70
+ getEnhanced(name: string): Plugin | undefined;
71
+ listEnhanced(): Plugin[];
47
72
  unregister(name: string): void;
48
73
  get(name: string): IPlugin | undefined;
49
74
  list(): {
@@ -53,6 +78,23 @@ export declare class PluginManager {
53
78
  }[];
54
79
  has(name: string): boolean;
55
80
  runHook(hookName: keyof PluginHooks, ...args: unknown[]): Promise<void>;
81
+ /**
82
+ * Initialize all plugins (legacy + enhanced).
83
+ */
84
+ initAll(runtime?: any): Promise<void>;
85
+ /**
86
+ * Shutdown all plugins (legacy + enhanced).
87
+ */
88
+ shutdownAll(): Promise<void>;
89
+ /**
90
+ * Run message through enhanced plugin middleware chain.
91
+ * Each plugin calls next() to pass to the next plugin.
92
+ */
93
+ runMessageMiddleware(message: any): Promise<any>;
94
+ /**
95
+ * Run response through enhanced plugin middleware chain.
96
+ */
97
+ runResponseMiddleware(response: any): Promise<any>;
56
98
  runOnInit(): Promise<void>;
57
99
  runOnMessage(message: Message): Promise<Message>;
58
100
  runOnResponse(message: Message, response: Message): Promise<Message>;