opc-agent 1.2.1 → 1.3.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 (158) hide show
  1. package/.github/workflows/ci.yml +24 -0
  2. package/CONTRIBUTING.md +75 -75
  3. package/README.md +235 -358
  4. package/README.zh-CN.md +415 -415
  5. package/dist/channels/web.js +256 -256
  6. package/dist/cli.js +118 -34
  7. package/dist/core/knowledge.d.ts +5 -0
  8. package/dist/core/knowledge.js +39 -2
  9. package/dist/deploy/hermes.js +22 -22
  10. package/dist/deploy/openclaw.js +31 -40
  11. package/dist/index.d.ts +3 -6
  12. package/dist/index.js +7 -11
  13. package/dist/providers/index.d.ts +1 -1
  14. package/dist/providers/index.js +158 -14
  15. package/dist/schema/oad.d.ts +4 -5
  16. package/dist/templates/code-reviewer.d.ts +0 -8
  17. package/dist/templates/code-reviewer.js +5 -9
  18. package/dist/templates/customer-service.d.ts +0 -8
  19. package/dist/templates/customer-service.js +2 -6
  20. package/dist/templates/data-analyst.d.ts +0 -8
  21. package/dist/templates/data-analyst.js +5 -9
  22. package/dist/templates/knowledge-base.d.ts +0 -8
  23. package/dist/templates/knowledge-base.js +2 -6
  24. package/dist/templates/sales-assistant.d.ts +0 -8
  25. package/dist/templates/sales-assistant.js +4 -8
  26. package/dist/templates/teacher.d.ts +0 -8
  27. package/dist/templates/teacher.js +6 -10
  28. package/dist/traces/index.d.ts +49 -0
  29. package/dist/traces/index.js +102 -0
  30. package/docs/.vitepress/config.ts +103 -103
  31. package/docs/api/cli.md +48 -48
  32. package/docs/api/oad-schema.md +64 -64
  33. package/docs/api/sdk.md +80 -80
  34. package/docs/guide/concepts.md +51 -51
  35. package/docs/guide/configuration.md +79 -79
  36. package/docs/guide/deployment.md +42 -42
  37. package/docs/guide/getting-started.md +44 -44
  38. package/docs/guide/templates.md +28 -28
  39. package/docs/guide/testing.md +84 -84
  40. package/docs/index.md +27 -27
  41. package/docs/zh/api/cli.md +54 -54
  42. package/docs/zh/api/oad-schema.md +87 -87
  43. package/docs/zh/api/sdk.md +102 -102
  44. package/docs/zh/guide/concepts.md +104 -104
  45. package/docs/zh/guide/configuration.md +135 -135
  46. package/docs/zh/guide/deployment.md +81 -81
  47. package/docs/zh/guide/getting-started.md +82 -82
  48. package/docs/zh/guide/templates.md +84 -84
  49. package/docs/zh/guide/testing.md +88 -88
  50. package/docs/zh/index.md +27 -27
  51. package/examples/customer-service-demo/README.md +90 -90
  52. package/examples/customer-service-demo/oad.yaml +107 -107
  53. package/package.json +1 -1
  54. package/src/analytics/index.ts +66 -66
  55. package/src/channels/discord.ts +192 -192
  56. package/src/channels/email.ts +177 -177
  57. package/src/channels/feishu.ts +236 -236
  58. package/src/channels/index.ts +15 -15
  59. package/src/channels/slack.ts +160 -160
  60. package/src/channels/telegram.ts +90 -90
  61. package/src/channels/voice.ts +106 -106
  62. package/src/channels/webhook.ts +199 -199
  63. package/src/channels/websocket.ts +87 -87
  64. package/src/channels/wechat.ts +149 -149
  65. package/src/cli.ts +124 -32
  66. package/src/core/a2a.ts +143 -143
  67. package/src/core/agent.ts +152 -152
  68. package/src/core/analytics-engine.ts +186 -186
  69. package/src/core/auth.ts +57 -57
  70. package/src/core/cache.ts +141 -141
  71. package/src/core/compose.ts +77 -77
  72. package/src/core/config.ts +14 -14
  73. package/src/core/errors.ts +148 -148
  74. package/src/core/hitl.ts +138 -138
  75. package/src/core/logger.ts +57 -57
  76. package/src/core/orchestrator.ts +215 -215
  77. package/src/core/performance.ts +187 -187
  78. package/src/core/rate-limiter.ts +128 -128
  79. package/src/core/room.ts +109 -109
  80. package/src/core/runtime.ts +152 -152
  81. package/src/core/sandbox.ts +101 -101
  82. package/src/core/security.ts +171 -171
  83. package/src/core/types.ts +68 -68
  84. package/src/core/versioning.ts +106 -106
  85. package/src/core/watch.ts +178 -178
  86. package/src/core/workflow.ts +235 -235
  87. package/src/deploy/hermes.ts +156 -156
  88. package/src/deploy/openclaw.ts +190 -200
  89. package/src/i18n/index.ts +216 -216
  90. package/src/index.ts +5 -6
  91. package/src/memory/deepbrain.ts +108 -108
  92. package/src/memory/index.ts +34 -34
  93. package/src/plugins/index.ts +208 -208
  94. package/src/schema/oad.ts +154 -155
  95. package/src/skills/base.ts +16 -16
  96. package/src/skills/document.ts +100 -100
  97. package/src/skills/http.ts +35 -35
  98. package/src/skills/index.ts +27 -27
  99. package/src/skills/scheduler.ts +80 -80
  100. package/src/skills/webhook-trigger.ts +59 -59
  101. package/src/templates/code-reviewer.ts +30 -34
  102. package/src/templates/customer-service.ts +76 -80
  103. package/src/templates/data-analyst.ts +66 -70
  104. package/src/templates/executive-assistant.ts +71 -71
  105. package/src/templates/financial-advisor.ts +60 -60
  106. package/src/templates/knowledge-base.ts +27 -31
  107. package/src/templates/legal-assistant.ts +71 -71
  108. package/src/templates/sales-assistant.ts +75 -79
  109. package/src/templates/teacher.ts +75 -79
  110. package/src/testing/index.ts +181 -181
  111. package/src/tools/calculator.ts +73 -73
  112. package/src/tools/datetime.ts +149 -149
  113. package/src/tools/json-transform.ts +187 -187
  114. package/src/tools/mcp.ts +76 -76
  115. package/src/tools/text-analysis.ts +116 -116
  116. package/src/traces/index.ts +132 -0
  117. package/templates/Dockerfile +15 -15
  118. package/templates/code-reviewer/README.md +27 -27
  119. package/templates/code-reviewer/oad.yaml +41 -41
  120. package/templates/customer-service/README.md +22 -22
  121. package/templates/customer-service/oad.yaml +36 -36
  122. package/templates/docker-compose.yml +21 -21
  123. package/templates/ecommerce-assistant/README.md +45 -45
  124. package/templates/ecommerce-assistant/oad.yaml +47 -47
  125. package/templates/knowledge-base/README.md +28 -28
  126. package/templates/knowledge-base/oad.yaml +38 -38
  127. package/templates/sales-assistant/README.md +26 -26
  128. package/templates/sales-assistant/oad.yaml +43 -43
  129. package/templates/tech-support/README.md +43 -43
  130. package/templates/tech-support/oad.yaml +45 -45
  131. package/tests/a2a.test.ts +66 -66
  132. package/tests/agent.test.ts +72 -72
  133. package/tests/analytics.test.ts +50 -50
  134. package/tests/channel.test.ts +39 -39
  135. package/tests/e2e.test.ts +134 -134
  136. package/tests/errors.test.ts +83 -83
  137. package/tests/hitl.test.ts +71 -71
  138. package/tests/i18n.test.ts +41 -41
  139. package/tests/mcp.test.ts +54 -54
  140. package/tests/oad.test.ts +68 -68
  141. package/tests/performance.test.ts +115 -115
  142. package/tests/plugin.test.ts +74 -74
  143. package/tests/room.test.ts +106 -106
  144. package/tests/runtime.test.ts +42 -42
  145. package/tests/sandbox.test.ts +46 -46
  146. package/tests/security.test.ts +60 -60
  147. package/tests/templates.test.ts +77 -77
  148. package/tests/v070.test.ts +76 -76
  149. package/tests/versioning.test.ts +75 -75
  150. package/tests/voice.test.ts +61 -61
  151. package/tests/webhook.test.ts +29 -29
  152. package/tests/workflow.test.ts +143 -143
  153. package/tsconfig.json +19 -19
  154. package/vitest.config.ts +9 -9
  155. package/src/dtv/data.ts +0 -29
  156. package/src/dtv/trust.ts +0 -43
  157. package/src/dtv/value.ts +0 -47
  158. package/src/marketplace/index.ts +0 -223
@@ -1,51 +1,51 @@
1
- # Core Concepts
2
-
3
- ## Agent
4
-
5
- An Agent is an autonomous AI entity with a defined lifecycle:
6
-
7
- ```
8
- init → ready → running → stopped
9
- ```
10
-
11
- Each agent has a name, system prompt, skills, channels, and memory.
12
-
13
- ## Skill
14
-
15
- Skills are modular capabilities an agent can use. Each skill:
16
- - Has a `name` and `description`
17
- - Receives the conversation context and current message
18
- - Returns whether it handled the message and with what confidence
19
-
20
- Built-in skills include FAQ lookup and human handoff.
21
-
22
- ## Channel
23
-
24
- Channels are the interfaces through which users interact with agents:
25
- - **Web** — HTTP API with `/chat` endpoint and SSE streaming
26
- - More channels (WebSocket, CLI, Slack) coming soon
27
-
28
- ## Memory
29
-
30
- Agents have two types of memory:
31
- - **Short-term** — Conversation history within a session
32
- - **Long-term** — Persistent knowledge across sessions (coming soon)
33
-
34
- ## DTV (Data / Trust / Value)
35
-
36
- The DTV framework governs agent operations:
37
-
38
- ### Data
39
- Read-only access to business data. Agents can read configurations but cannot modify source systems.
40
-
41
- ### Trust
42
- Progressive trust levels control agent capabilities:
43
- - **sandbox** — No network, limited capabilities
44
- - **verified** — Identity confirmed, basic capabilities
45
- - **certified** — Security audited, full capabilities
46
- - **listed** — Published in OPC marketplace
47
-
48
- ### Value
49
- Metrics tracking for agent performance and ROI:
50
- - Response time, satisfaction scores, resolution rates
51
- - Automated reporting and dashboards
1
+ # Core Concepts
2
+
3
+ ## Agent
4
+
5
+ An Agent is an autonomous AI entity with a defined lifecycle:
6
+
7
+ ```
8
+ init → ready → running → stopped
9
+ ```
10
+
11
+ Each agent has a name, system prompt, skills, channels, and memory.
12
+
13
+ ## Skill
14
+
15
+ Skills are modular capabilities an agent can use. Each skill:
16
+ - Has a `name` and `description`
17
+ - Receives the conversation context and current message
18
+ - Returns whether it handled the message and with what confidence
19
+
20
+ Built-in skills include FAQ lookup and human handoff.
21
+
22
+ ## Channel
23
+
24
+ Channels are the interfaces through which users interact with agents:
25
+ - **Web** — HTTP API with `/chat` endpoint and SSE streaming
26
+ - More channels (WebSocket, CLI, Slack) coming soon
27
+
28
+ ## Memory
29
+
30
+ Agents have two types of memory:
31
+ - **Short-term** — Conversation history within a session
32
+ - **Long-term** — Persistent knowledge across sessions (coming soon)
33
+
34
+ ## DTV (Data / Trust / Value)
35
+
36
+ The DTV framework governs agent operations:
37
+
38
+ ### Data
39
+ Read-only access to business data. Agents can read configurations but cannot modify source systems.
40
+
41
+ ### Trust
42
+ Progressive trust levels control agent capabilities:
43
+ - **sandbox** — No network, limited capabilities
44
+ - **verified** — Identity confirmed, basic capabilities
45
+ - **certified** — Security audited, full capabilities
46
+ - **listed** — Published in OPC marketplace
47
+
48
+ ### Value
49
+ Metrics tracking for agent performance and ROI:
50
+ - Response time, satisfaction scores, resolution rates
51
+ - Automated reporting and dashboards
@@ -1,79 +1,79 @@
1
- # Configuration
2
-
3
- ## OAD File Structure
4
-
5
- The `oad.yaml` file is the heart of your agent configuration:
6
-
7
- ```yaml
8
- apiVersion: opc/v1
9
- kind: Agent
10
- metadata:
11
- name: my-agent
12
- version: 1.0.0
13
- description: My AI agent
14
- spec:
15
- provider:
16
- default: openai
17
- allowed: [openai, deepseek, qwen]
18
- model: gpt-4o-mini
19
- systemPrompt: "You are a helpful assistant."
20
- skills: []
21
- channels:
22
- - type: web
23
- port: 3000
24
- memory:
25
- shortTerm: true
26
- longTerm: false
27
- testing:
28
- cases:
29
- - name: greeting-test
30
- input: "Hello"
31
- expect:
32
- contains: ["hello", "help"]
33
- maxLatencyMs: 5000
34
- rateLimits:
35
- perUser:
36
- maxRequests: 60
37
- windowMs: 60000
38
- perProvider:
39
- maxRequests: 100
40
- windowMs: 60000
41
- cache:
42
- enabled: true
43
- ttlMs: 3600000
44
- ```
45
-
46
- ## Environment Variables
47
-
48
- | Variable | Description | Default |
49
- |----------|-------------|---------|
50
- | `OPC_LLM_API_KEY` | LLM API key | — |
51
- | `OPC_LLM_BASE_URL` | LLM API base URL | `https://api.openai.com/v1` |
52
- | `OPC_LLM_MODEL` | Model name | `gpt-4o-mini` |
53
-
54
- ## Rate Limiting
55
-
56
- Configure per-user and per-provider rate limits in `oad.yaml`:
57
-
58
- ```yaml
59
- spec:
60
- rateLimits:
61
- perUser:
62
- maxRequests: 60
63
- windowMs: 60000
64
- perProvider:
65
- maxRequests: 100
66
- windowMs: 60000
67
- ```
68
-
69
- ## Caching
70
-
71
- Enable LLM response caching to reduce API costs:
72
-
73
- ```yaml
74
- spec:
75
- cache:
76
- enabled: true
77
- ttlMs: 3600000 # 1 hour
78
- maxEntries: 1000
79
- ```
1
+ # Configuration
2
+
3
+ ## OAD File Structure
4
+
5
+ The `oad.yaml` file is the heart of your agent configuration:
6
+
7
+ ```yaml
8
+ apiVersion: opc/v1
9
+ kind: Agent
10
+ metadata:
11
+ name: my-agent
12
+ version: 1.0.0
13
+ description: My AI agent
14
+ spec:
15
+ provider:
16
+ default: openai
17
+ allowed: [openai, deepseek, qwen]
18
+ model: gpt-4o-mini
19
+ systemPrompt: "You are a helpful assistant."
20
+ skills: []
21
+ channels:
22
+ - type: web
23
+ port: 3000
24
+ memory:
25
+ shortTerm: true
26
+ longTerm: false
27
+ testing:
28
+ cases:
29
+ - name: greeting-test
30
+ input: "Hello"
31
+ expect:
32
+ contains: ["hello", "help"]
33
+ maxLatencyMs: 5000
34
+ rateLimits:
35
+ perUser:
36
+ maxRequests: 60
37
+ windowMs: 60000
38
+ perProvider:
39
+ maxRequests: 100
40
+ windowMs: 60000
41
+ cache:
42
+ enabled: true
43
+ ttlMs: 3600000
44
+ ```
45
+
46
+ ## Environment Variables
47
+
48
+ | Variable | Description | Default |
49
+ |----------|-------------|---------|
50
+ | `OPC_LLM_API_KEY` | LLM API key | — |
51
+ | `OPC_LLM_BASE_URL` | LLM API base URL | `https://api.openai.com/v1` |
52
+ | `OPC_LLM_MODEL` | Model name | `gpt-4o-mini` |
53
+
54
+ ## Rate Limiting
55
+
56
+ Configure per-user and per-provider rate limits in `oad.yaml`:
57
+
58
+ ```yaml
59
+ spec:
60
+ rateLimits:
61
+ perUser:
62
+ maxRequests: 60
63
+ windowMs: 60000
64
+ perProvider:
65
+ maxRequests: 100
66
+ windowMs: 60000
67
+ ```
68
+
69
+ ## Caching
70
+
71
+ Enable LLM response caching to reduce API costs:
72
+
73
+ ```yaml
74
+ spec:
75
+ cache:
76
+ enabled: true
77
+ ttlMs: 3600000 # 1 hour
78
+ maxEntries: 1000
79
+ ```
@@ -1,42 +1,42 @@
1
- # Deployment
2
-
3
- ## Docker
4
-
5
- Every `opc init` project includes a `Dockerfile` and `docker-compose.yml`:
6
-
7
- ```bash
8
- docker compose up -d
9
- ```
10
-
11
- ## Deploy to OpenClaw
12
-
13
- ```bash
14
- opc deploy --target openclaw
15
- opc deploy --target openclaw --install # Also register in config
16
- ```
17
-
18
- ## Deploy to Hermes
19
-
20
- ```bash
21
- opc deploy --target hermes
22
- opc deploy --target hermes --output ./my-hermes-deploy
23
- ```
24
-
25
- ## Environment Variables
26
-
27
- Set your API keys in `.env`:
28
-
29
- ```bash
30
- OPC_LLM_API_KEY=sk-xxx
31
- OPC_LLM_BASE_URL=https://api.openai.com/v1
32
- OPC_LLM_MODEL=gpt-4o-mini
33
- ```
34
-
35
- ## Production Checklist
36
-
37
- - [ ] Set proper API keys in `.env`
38
- - [ ] Configure rate limits in `oad.yaml`
39
- - [ ] Enable caching for cost reduction
40
- - [ ] Set up analytics monitoring
41
- - [ ] Run `opc test` before deployment
42
- - [ ] Review trust/DTV settings
1
+ # Deployment
2
+
3
+ ## Docker
4
+
5
+ Every `opc init` project includes a `Dockerfile` and `docker-compose.yml`:
6
+
7
+ ```bash
8
+ docker compose up -d
9
+ ```
10
+
11
+ ## Deploy to OpenClaw
12
+
13
+ ```bash
14
+ opc deploy --target openclaw
15
+ opc deploy --target openclaw --install # Also register in config
16
+ ```
17
+
18
+ ## Deploy to Hermes
19
+
20
+ ```bash
21
+ opc deploy --target hermes
22
+ opc deploy --target hermes --output ./my-hermes-deploy
23
+ ```
24
+
25
+ ## Environment Variables
26
+
27
+ Set your API keys in `.env`:
28
+
29
+ ```bash
30
+ OPC_LLM_API_KEY=sk-xxx
31
+ OPC_LLM_BASE_URL=https://api.openai.com/v1
32
+ OPC_LLM_MODEL=gpt-4o-mini
33
+ ```
34
+
35
+ ## Production Checklist
36
+
37
+ - [ ] Set proper API keys in `.env`
38
+ - [ ] Configure rate limits in `oad.yaml`
39
+ - [ ] Enable caching for cost reduction
40
+ - [ ] Set up analytics monitoring
41
+ - [ ] Run `opc test` before deployment
42
+ - [ ] Review trust/DTV settings
@@ -1,44 +1,44 @@
1
- # Getting Started
2
-
3
- ## Installation
4
-
5
- ```bash
6
- npm install -g opc-agent
7
- ```
8
-
9
- ## Create Your First Agent
10
-
11
- ```bash
12
- # Initialize a new project
13
- opc init my-agent --template customer-service
14
-
15
- # Enter the project
16
- cd my-agent
17
-
18
- # Validate the OAD definition
19
- opc build
20
-
21
- # Run in sandbox mode
22
- opc test
23
-
24
- # Start the agent
25
- opc run
26
- ```
27
-
28
- ## Test the Agent
29
-
30
- ```bash
31
- curl -X POST http://localhost:3000/chat \
32
- -H "Content-Type: application/json" \
33
- -d '{"message": "What are your business hours?"}'
34
- ```
35
-
36
- ## Project Structure
37
-
38
- ```
39
- my-agent/
40
- ├── oad.yaml # Agent definition (OAD Schema v1)
41
- └── README.md
42
- ```
43
-
44
- The `oad.yaml` file defines everything about your agent: its identity, skills, channels, and configuration.
1
+ # Getting Started
2
+
3
+ ## Installation
4
+
5
+ ```bash
6
+ npm install -g opc-agent
7
+ ```
8
+
9
+ ## Create Your First Agent
10
+
11
+ ```bash
12
+ # Initialize a new project
13
+ opc init my-agent --template customer-service
14
+
15
+ # Enter the project
16
+ cd my-agent
17
+
18
+ # Validate the OAD definition
19
+ opc build
20
+
21
+ # Run in sandbox mode
22
+ opc test
23
+
24
+ # Start the agent
25
+ opc run
26
+ ```
27
+
28
+ ## Test the Agent
29
+
30
+ ```bash
31
+ curl -X POST http://localhost:3000/chat \
32
+ -H "Content-Type: application/json" \
33
+ -d '{"message": "What are your business hours?"}'
34
+ ```
35
+
36
+ ## Project Structure
37
+
38
+ ```
39
+ my-agent/
40
+ ├── oad.yaml # Agent definition (OAD Schema v1)
41
+ └── README.md
42
+ ```
43
+
44
+ The `oad.yaml` file defines everything about your agent: its identity, skills, channels, and configuration.
@@ -1,28 +1,28 @@
1
- # Templates
2
-
3
- Templates are pre-built agent configurations for common use cases.
4
-
5
- ## Customer Service
6
-
7
- A complete customer service agent with:
8
- - FAQ lookup skill
9
- - Human handoff when confidence is low
10
- - Web channel for HTTP integration
11
-
12
- ```bash
13
- opc init my-service --template customer-service
14
- ```
15
-
16
- ## Creating Custom Templates
17
-
18
- Templates are OAD YAML files with optional skill implementations. To create your own:
19
-
20
- 1. Define `oad.yaml` with your agent specification
21
- 2. Implement custom skills extending `BaseSkill`
22
- 3. Package as a directory with `oad.yaml` + `README.md`
23
-
24
- More templates coming soon:
25
- - Sales Assistant
26
- - Internal IT Help Desk
27
- - Data Analysis Agent
28
- - Content Moderation Agent
1
+ # Templates
2
+
3
+ Templates are pre-built agent configurations for common use cases.
4
+
5
+ ## Customer Service
6
+
7
+ A complete customer service agent with:
8
+ - FAQ lookup skill
9
+ - Human handoff when confidence is low
10
+ - Web channel for HTTP integration
11
+
12
+ ```bash
13
+ opc init my-service --template customer-service
14
+ ```
15
+
16
+ ## Creating Custom Templates
17
+
18
+ Templates are OAD YAML files with optional skill implementations. To create your own:
19
+
20
+ 1. Define `oad.yaml` with your agent specification
21
+ 2. Implement custom skills extending `BaseSkill`
22
+ 3. Package as a directory with `oad.yaml` + `README.md`
23
+
24
+ More templates coming soon:
25
+ - Sales Assistant
26
+ - Internal IT Help Desk
27
+ - Data Analysis Agent
28
+ - Content Moderation Agent
@@ -1,84 +1,84 @@
1
- # Testing
2
-
3
- ## Overview
4
-
5
- OPC Agent includes a built-in testing framework. Define test cases in your `oad.yaml` or a separate `tests.yaml` file, then run them with `opc test`.
6
-
7
- ## Defining Tests in OAD
8
-
9
- ```yaml
10
- spec:
11
- testing:
12
- cases:
13
- - name: greeting
14
- input: "Hello!"
15
- expect:
16
- contains: ["hello", "help"]
17
- maxLatencyMs: 5000
18
-
19
- - name: product-question
20
- input: "What are your pricing plans?"
21
- expect:
22
- contains: ["pricing", "plan"]
23
- notContains: ["error"]
24
-
25
- - name: edge-case-empty
26
- input: ""
27
- expect:
28
- maxLatencyMs: 2000
29
- ```
30
-
31
- ## Separate Test File
32
-
33
- Create `tests.yaml` alongside your `oad.yaml`:
34
-
35
- ```yaml
36
- cases:
37
- - name: smoke-test
38
- input: "Hi there"
39
- expect:
40
- maxLatencyMs: 10000
41
- - name: faq-check
42
- input: "What is your return policy?"
43
- expect:
44
- contains: ["return", "refund"]
45
- ```
46
-
47
- ## Running Tests
48
-
49
- ```bash
50
- # Run tests
51
- opc test
52
-
53
- # JSON output
54
- opc test --json
55
-
56
- # Custom OAD file
57
- opc test -f my-agent.yaml
58
- ```
59
-
60
- ## Test Report
61
-
62
- ```
63
- ═══════════════════════════════════════════
64
- OPC Agent Test Report
65
- ═══════════════════════════════════════════
66
-
67
- ✔ [PASS] greeting (245ms)
68
- ✔ [PASS] product-question (312ms)
69
- ✘ [FAIL] edge-case (5120ms)
70
- → Latency 5120ms exceeded max 2000ms
71
-
72
- ───────────────────────────────────────────
73
- Total: 3 Passed: 2 Failed: 1 Duration: 5677ms
74
- ───────────────────────────────────────────
75
- ```
76
-
77
- ## Assertions
78
-
79
- | Assertion | Description |
80
- |-----------|-------------|
81
- | `contains` | Response must include these strings (case-insensitive) |
82
- | `notContains` | Response must NOT include these strings |
83
- | `toolCalled` | Specified tools must have been invoked |
84
- | `maxLatencyMs` | Response must complete within this time |
1
+ # Testing
2
+
3
+ ## Overview
4
+
5
+ OPC Agent includes a built-in testing framework. Define test cases in your `oad.yaml` or a separate `tests.yaml` file, then run them with `opc test`.
6
+
7
+ ## Defining Tests in OAD
8
+
9
+ ```yaml
10
+ spec:
11
+ testing:
12
+ cases:
13
+ - name: greeting
14
+ input: "Hello!"
15
+ expect:
16
+ contains: ["hello", "help"]
17
+ maxLatencyMs: 5000
18
+
19
+ - name: product-question
20
+ input: "What are your pricing plans?"
21
+ expect:
22
+ contains: ["pricing", "plan"]
23
+ notContains: ["error"]
24
+
25
+ - name: edge-case-empty
26
+ input: ""
27
+ expect:
28
+ maxLatencyMs: 2000
29
+ ```
30
+
31
+ ## Separate Test File
32
+
33
+ Create `tests.yaml` alongside your `oad.yaml`:
34
+
35
+ ```yaml
36
+ cases:
37
+ - name: smoke-test
38
+ input: "Hi there"
39
+ expect:
40
+ maxLatencyMs: 10000
41
+ - name: faq-check
42
+ input: "What is your return policy?"
43
+ expect:
44
+ contains: ["return", "refund"]
45
+ ```
46
+
47
+ ## Running Tests
48
+
49
+ ```bash
50
+ # Run tests
51
+ opc test
52
+
53
+ # JSON output
54
+ opc test --json
55
+
56
+ # Custom OAD file
57
+ opc test -f my-agent.yaml
58
+ ```
59
+
60
+ ## Test Report
61
+
62
+ ```
63
+ ═══════════════════════════════════════════
64
+ OPC Agent Test Report
65
+ ═══════════════════════════════════════════
66
+
67
+ ✔ [PASS] greeting (245ms)
68
+ ✔ [PASS] product-question (312ms)
69
+ ✘ [FAIL] edge-case (5120ms)
70
+ → Latency 5120ms exceeded max 2000ms
71
+
72
+ ───────────────────────────────────────────
73
+ Total: 3 Passed: 2 Failed: 1 Duration: 5677ms
74
+ ───────────────────────────────────────────
75
+ ```
76
+
77
+ ## Assertions
78
+
79
+ | Assertion | Description |
80
+ |-----------|-------------|
81
+ | `contains` | Response must include these strings (case-insensitive) |
82
+ | `notContains` | Response must NOT include these strings |
83
+ | `toolCalled` | Specified tools must have been invoked |
84
+ | `maxLatencyMs` | Response must complete within this time |