opc-agent 4.1.0 → 4.1.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/.github/ISSUE_TEMPLATE/bug_report.md +20 -20
- package/.github/ISSUE_TEMPLATE/feature_request.md +14 -14
- package/.github/PULL_REQUEST_TEMPLATE.md +13 -13
- package/CHANGELOG.md +48 -48
- package/CONTRIBUTING.md +36 -36
- package/README.zh-CN.md +497 -497
- package/USABILITY-ISSUES.md +73 -0
- package/dist/channels/web.js +8 -2
- package/dist/channels/wechat.js +6 -6
- package/dist/cli.js +200 -85
- package/dist/core/runtime.js +37 -15
- package/dist/deploy/index.js +56 -56
- package/dist/doctor.d.ts +1 -0
- package/dist/doctor.js +105 -10
- package/dist/memory/deepbrain.d.ts +1 -1
- package/dist/memory/deepbrain.js +95 -4
- package/dist/scheduler/cron-engine.js +3 -36
- package/dist/studio/server.js +30 -1
- package/dist/studio-ui/index.html +230 -10
- package/dist/ui/components.js +105 -105
- package/examples/README.md +22 -22
- package/examples/basic-agent.ts +90 -90
- package/examples/brain-integration.ts +71 -71
- package/examples/multi-channel.ts +74 -74
- package/fix-sidebar.mjs +188 -188
- package/install.ps1 +154 -154
- package/install.sh +164 -164
- package/package.json +1 -1
- package/scripts/install.ps1 +31 -31
- package/scripts/install.sh +40 -40
- package/serve-studio.js +13 -13
- package/serve-test.js +25 -25
- package/src/channels/dingtalk.ts +46 -46
- package/src/channels/email.ts +351 -351
- package/src/channels/feishu.ts +349 -349
- package/src/channels/googlechat.ts +42 -42
- package/src/channels/imessage.ts +31 -31
- package/src/channels/irc.ts +82 -82
- package/src/channels/line.ts +32 -32
- package/src/channels/matrix.ts +33 -33
- package/src/channels/mattermost.ts +57 -57
- package/src/channels/msteams.ts +32 -32
- package/src/channels/nostr.ts +32 -32
- package/src/channels/qq.ts +33 -33
- package/src/channels/signal.ts +32 -32
- package/src/channels/sms.ts +33 -33
- package/src/channels/telegram.ts +616 -616
- package/src/channels/twitch.ts +65 -65
- package/src/channels/voice-call.ts +100 -100
- package/src/channels/web.ts +8 -2
- package/src/channels/websocket.ts +399 -399
- package/src/channels/wechat.ts +329 -329
- package/src/channels/whatsapp.ts +32 -32
- package/src/cli/chat.ts +99 -99
- package/src/cli/setup.ts +314 -314
- package/src/cli.ts +195 -92
- package/src/core/agent.ts +476 -476
- package/src/core/api-server.ts +277 -277
- package/src/core/audio.ts +98 -98
- package/src/core/collaboration.ts +275 -275
- package/src/core/context-discovery.ts +85 -85
- package/src/core/context-refs.ts +140 -140
- package/src/core/gateway.ts +106 -106
- package/src/core/heartbeat.ts +51 -51
- package/src/core/hooks.ts +105 -105
- package/src/core/ide-bridge.ts +133 -133
- package/src/core/node-network.ts +86 -86
- package/src/core/profiles.ts +122 -122
- package/src/core/runtime.ts +25 -0
- package/src/core/scheduler.ts +187 -187
- package/src/core/session-manager.ts +137 -137
- package/src/core/subagent.ts +98 -98
- package/src/core/vision.ts +180 -180
- package/src/core/workflow-graph.ts +365 -365
- package/src/daemon.ts +96 -96
- package/src/deploy/index.ts +255 -255
- package/src/doctor.ts +98 -11
- package/src/eval/index.ts +211 -211
- package/src/eval/suites/basic.json +16 -16
- package/src/eval/suites/memory.json +12 -12
- package/src/eval/suites/safety.json +14 -14
- package/src/hub/brain-seed.ts +54 -54
- package/src/hub/client.ts +60 -60
- package/src/mcp/servers/calculator-mcp.ts +65 -65
- package/src/mcp/servers/crypto-mcp.ts +73 -73
- package/src/mcp/servers/database-mcp.ts +72 -72
- package/src/mcp/servers/datetime-mcp.ts +69 -69
- package/src/mcp/servers/filesystem.ts +66 -66
- package/src/mcp/servers/github-mcp.ts +58 -58
- package/src/mcp/servers/index.ts +63 -63
- package/src/mcp/servers/json-mcp.ts +102 -102
- package/src/mcp/servers/memory-mcp.ts +56 -56
- package/src/mcp/servers/regex-mcp.ts +53 -53
- package/src/mcp/servers/web-mcp.ts +49 -49
- package/src/memory/context-compressor.ts +189 -189
- package/src/memory/deepbrain.ts +99 -5
- package/src/memory/seed-loader.ts +212 -212
- package/src/memory/user-profiler.ts +215 -215
- package/src/plugins/content-filter.ts +23 -23
- package/src/plugins/logger.ts +18 -18
- package/src/plugins/rate-limiter.ts +38 -38
- package/src/protocols/a2a/client.ts +132 -132
- package/src/protocols/a2a/index.ts +8 -8
- package/src/protocols/a2a/server.ts +333 -333
- package/src/protocols/a2a/types.ts +88 -88
- package/src/protocols/a2a/utils.ts +50 -50
- package/src/protocols/agui/client.ts +83 -83
- package/src/protocols/agui/index.ts +4 -4
- package/src/protocols/agui/server.ts +218 -218
- package/src/protocols/agui/types.ts +153 -153
- package/src/protocols/index.ts +2 -2
- package/src/protocols/mcp/agent-tools.ts +134 -134
- package/src/protocols/mcp/index.ts +8 -8
- package/src/protocols/mcp/server.ts +262 -262
- package/src/protocols/mcp/types.ts +69 -69
- package/src/providers/index.ts +632 -632
- package/src/publish/index.ts +376 -376
- package/src/scheduler/cron-engine.ts +191 -191
- package/src/scheduler/index.ts +2 -2
- package/src/schema/oad.ts +217 -217
- package/src/security/approval.ts +131 -131
- package/src/security/approvals.ts +143 -143
- package/src/security/elevated.ts +105 -105
- package/src/security/guardrails.ts +248 -248
- package/src/security/index.ts +9 -9
- package/src/security/keys.ts +87 -87
- package/src/security/secrets.ts +129 -129
- package/src/skills/builtin/index.ts +408 -408
- package/src/skills/marketplace.ts +113 -113
- package/src/skills/types.ts +42 -42
- package/src/studio/server.ts +31 -1
- package/src/studio/templates-data.ts +178 -178
- package/src/studio-ui/index.html +230 -10
- package/src/telemetry/index.ts +324 -324
- package/src/tools/builtin/browser.ts +299 -299
- package/src/tools/builtin/datetime.ts +41 -41
- package/src/tools/builtin/file.ts +107 -107
- package/src/tools/builtin/home-assistant.ts +116 -116
- package/src/tools/builtin/rl-tools.ts +243 -243
- package/src/tools/builtin/shell.ts +43 -43
- package/src/tools/builtin/vision.ts +64 -64
- package/src/tools/builtin/web-search.ts +126 -126
- package/src/tools/builtin/web.ts +35 -35
- package/src/tools/document-processor.ts +213 -213
- package/src/tools/image-generator.ts +150 -150
- package/src/tools/integrations/calendar.ts +73 -73
- package/src/tools/integrations/code-exec.ts +39 -39
- package/src/tools/integrations/csv-analyzer.ts +92 -92
- package/src/tools/integrations/database.ts +44 -44
- package/src/tools/integrations/email-send.ts +76 -76
- package/src/tools/integrations/git-tool.ts +42 -42
- package/src/tools/integrations/github-tool.ts +76 -76
- package/src/tools/integrations/image-gen.ts +56 -56
- package/src/tools/integrations/index.ts +92 -92
- package/src/tools/integrations/jira.ts +83 -83
- package/src/tools/integrations/notion.ts +71 -71
- package/src/tools/integrations/npm-tool.ts +48 -48
- package/src/tools/integrations/pdf-reader.ts +58 -58
- package/src/tools/integrations/slack.ts +65 -65
- package/src/tools/integrations/summarizer.ts +49 -49
- package/src/tools/integrations/translator.ts +48 -48
- package/src/tools/integrations/trello.ts +60 -60
- package/src/tools/integrations/vector-search.ts +42 -42
- package/src/tools/integrations/web-scraper.ts +47 -47
- package/src/tools/integrations/web-search.ts +58 -58
- package/src/tools/integrations/webhook.ts +38 -38
- package/src/tools/mcp-client.ts +131 -131
- package/src/tools/web-scraper.ts +179 -179
- package/src/tools/web-search.ts +180 -180
- package/src/ui/components.ts +127 -127
- package/srv-out.txt +1 -1
- package/templates/ecommerce-assistant/README.md +45 -45
- package/templates/ecommerce-assistant/oad.yaml +47 -47
- package/templates/tech-support/README.md +43 -43
- package/templates/tech-support/oad.yaml +45 -45
- package/test-agent/Dockerfile +9 -9
- package/test-agent/README.md +50 -50
- package/test-agent/agent.yaml +23 -23
- package/test-agent/docker-compose.yml +11 -11
- package/test-agent/oad.yaml +31 -31
- package/test-agent/package-lock.json +1492 -1492
- package/test-agent/package.json +17 -17
- package/test-agent/src/index.ts +24 -24
- package/test-agent/src/skills/echo.ts +15 -15
- package/test-agent/tsconfig.json +24 -24
- package/test-full.js +43 -43
- package/test-sidebar.js +22 -22
- package/test-studio3.js +75 -75
- package/test-studio4.js +41 -41
- package/tests/a2a-protocol.test.ts +285 -285
- package/tests/agui-protocol.test.ts +246 -246
- package/tests/api-server.test.ts +148 -148
- package/tests/approvals.test.ts +89 -89
- package/tests/audio.test.ts +40 -40
- package/tests/brain-seed-extended.test.ts +490 -490
- package/tests/brain-seed.test.ts +239 -239
- package/tests/browser.test.ts +179 -179
- package/tests/channels/discord.test.ts +79 -79
- package/tests/channels/email.test.ts +148 -148
- package/tests/channels/feishu.test.ts +123 -123
- package/tests/channels/telegram.test.ts +129 -129
- package/tests/channels/websocket.test.ts +53 -53
- package/tests/channels/wechat.test.ts +170 -170
- package/tests/channels-extra.test.ts +45 -45
- package/tests/chat-cli.test.ts +160 -160
- package/tests/cli.test.ts +46 -46
- package/tests/context-compressor.test.ts +172 -172
- package/tests/context-refs.test.ts +121 -121
- package/tests/cron-engine.test.ts +101 -101
- package/tests/daemon.test.ts +135 -135
- package/tests/deepbrain-wire.test.ts +234 -234
- package/tests/deploy-and-dag.test.ts +196 -196
- package/tests/doctor.test.ts +38 -38
- package/tests/document-processor.test.ts +69 -69
- package/tests/e2e-nocode.test.ts +442 -442
- package/tests/elevated.test.ts +69 -69
- package/tests/eval.test.ts +173 -173
- package/tests/gateway.test.ts +63 -63
- package/tests/guardrails.test.ts +177 -177
- package/tests/home-assistant.test.ts +40 -40
- package/tests/hooks.test.ts +79 -79
- package/tests/ide-bridge.test.ts +38 -38
- package/tests/image-generator.test.ts +84 -84
- package/tests/init-role.test.ts +124 -124
- package/tests/integrations.test.ts +249 -249
- package/tests/mcp-client.test.ts +92 -92
- package/tests/mcp-server.test.ts +178 -178
- package/tests/mcp-servers.test.ts +260 -260
- package/tests/node-network.test.ts +74 -74
- package/tests/plugin-a2a-enhanced.test.ts +230 -230
- package/tests/profiles.test.ts +61 -61
- package/tests/publish.test.ts +231 -231
- package/tests/rl-tools.test.ts +93 -93
- package/tests/sandbox-manager.test.ts +46 -46
- package/tests/scheduler.test.ts +200 -200
- package/tests/secrets.test.ts +107 -107
- package/tests/security-enhanced.test.ts +233 -233
- package/tests/settings-api.test.ts +148 -148
- package/tests/setup.test.ts +73 -73
- package/tests/subagent.test.ts +193 -193
- package/tests/telegram-discord.test.ts +60 -60
- package/tests/telemetry.test.ts +186 -186
- package/tests/user-profiler.test.ts +169 -169
- package/tests/v090-features.test.ts +254 -254
- package/tests/vision.test.ts +61 -61
- package/tests/voice-call.test.ts +47 -47
- package/tests/voice-enhanced.test.ts +169 -169
- package/tests/voice-interaction.test.ts +38 -38
- package/tests/web-search.test.ts +155 -155
- package/tests/workflow-graph.test.ts +279 -279
- package/tutorial/customer-service-agent/README.md +612 -612
- package/tutorial/customer-service-agent/SOUL.md +26 -26
- package/tutorial/customer-service-agent/agent.yaml +63 -63
- package/tutorial/customer-service-agent/package.json +19 -19
- package/tutorial/customer-service-agent/src/index.ts +69 -69
- package/tutorial/customer-service-agent/src/skills/faq.ts +27 -27
- package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -22
- package/tutorial/customer-service-agent/tsconfig.json +14 -14
package/test-agent/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "test-agent",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"scripts": {
|
|
6
|
-
"start": "opc run",
|
|
7
|
-
"dev": "opc dev",
|
|
8
|
-
"chat": "opc chat",
|
|
9
|
-
"build": "tsc"
|
|
10
|
-
},
|
|
11
|
-
"dependencies": {
|
|
12
|
-
"opc-agent": "^1.3.0"
|
|
13
|
-
},
|
|
14
|
-
"devDependencies": {
|
|
15
|
-
"typescript": "^5.5.0",
|
|
16
|
-
"tsx": "^4.0.0"
|
|
17
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "test-agent",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"start": "opc run",
|
|
7
|
+
"dev": "opc dev",
|
|
8
|
+
"chat": "opc chat",
|
|
9
|
+
"build": "tsc"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"opc-agent": "^1.3.0"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"typescript": "^5.5.0",
|
|
16
|
+
"tsx": "^4.0.0"
|
|
17
|
+
}
|
|
18
18
|
}
|
package/test-agent/src/index.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { AgentRuntime } from 'opc-agent';
|
|
2
|
-
import { EchoSkill } from './skills/echo';
|
|
3
|
-
|
|
4
|
-
async function main() {
|
|
5
|
-
const runtime = new AgentRuntime();
|
|
6
|
-
|
|
7
|
-
// Load OAD config
|
|
8
|
-
await runtime.loadConfig('./agent.yaml');
|
|
9
|
-
|
|
10
|
-
// Initialize agent with channels, memory, etc.
|
|
11
|
-
const agent = await runtime.initialize();
|
|
12
|
-
|
|
13
|
-
// Register custom skills
|
|
14
|
-
runtime.registerSkill(new EchoSkill());
|
|
15
|
-
|
|
16
|
-
// Start serving
|
|
17
|
-
await runtime.start();
|
|
18
|
-
|
|
19
|
-
console.log('🤖 Agent is running!');
|
|
20
|
-
console.log(' Web UI: http://localhost:3000');
|
|
21
|
-
console.log(' Press Ctrl+C to stop');
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
main().catch(console.error);
|
|
1
|
+
import { AgentRuntime } from 'opc-agent';
|
|
2
|
+
import { EchoSkill } from './skills/echo';
|
|
3
|
+
|
|
4
|
+
async function main() {
|
|
5
|
+
const runtime = new AgentRuntime();
|
|
6
|
+
|
|
7
|
+
// Load OAD config
|
|
8
|
+
await runtime.loadConfig('./agent.yaml');
|
|
9
|
+
|
|
10
|
+
// Initialize agent with channels, memory, etc.
|
|
11
|
+
const agent = await runtime.initialize();
|
|
12
|
+
|
|
13
|
+
// Register custom skills
|
|
14
|
+
runtime.registerSkill(new EchoSkill());
|
|
15
|
+
|
|
16
|
+
// Start serving
|
|
17
|
+
await runtime.start();
|
|
18
|
+
|
|
19
|
+
console.log('🤖 Agent is running!');
|
|
20
|
+
console.log(' Web UI: http://localhost:3000');
|
|
21
|
+
console.log(' Press Ctrl+C to stop');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
main().catch(console.error);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { BaseSkill } from 'opc-agent';
|
|
2
|
-
import type { AgentContext, Message, SkillResult } from 'opc-agent';
|
|
3
|
-
|
|
4
|
-
export class EchoSkill extends BaseSkill {
|
|
5
|
-
name = 'echo';
|
|
6
|
-
description = 'Echo back the message (test skill)';
|
|
7
|
-
|
|
8
|
-
async execute(context: AgentContext, message: Message): Promise<SkillResult> {
|
|
9
|
-
if (message.content.toLowerCase().startsWith('/echo ')) {
|
|
10
|
-
const text = message.content.slice(6);
|
|
11
|
-
return this.match(`🔊 Echo: ${text}`);
|
|
12
|
-
}
|
|
13
|
-
return this.noMatch();
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
import { BaseSkill } from 'opc-agent';
|
|
2
|
+
import type { AgentContext, Message, SkillResult } from 'opc-agent';
|
|
3
|
+
|
|
4
|
+
export class EchoSkill extends BaseSkill {
|
|
5
|
+
name = 'echo';
|
|
6
|
+
description = 'Echo back the message (test skill)';
|
|
7
|
+
|
|
8
|
+
async execute(context: AgentContext, message: Message): Promise<SkillResult> {
|
|
9
|
+
if (message.content.toLowerCase().startsWith('/echo ')) {
|
|
10
|
+
const text = message.content.slice(6);
|
|
11
|
+
return this.match(`🔊 Echo: ${text}`);
|
|
12
|
+
}
|
|
13
|
+
return this.noMatch();
|
|
14
|
+
}
|
|
15
|
+
}
|
package/test-agent/tsconfig.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"lib": [
|
|
6
|
-
"ES2022"
|
|
7
|
-
],
|
|
8
|
-
"outDir": "dist",
|
|
9
|
-
"rootDir": "src",
|
|
10
|
-
"strict": true,
|
|
11
|
-
"esModuleInterop": true,
|
|
12
|
-
"skipLibCheck": true,
|
|
13
|
-
"forceConsistentCasingInFileNames": true,
|
|
14
|
-
"resolveJsonModule": true,
|
|
15
|
-
"declaration": true,
|
|
16
|
-
"sourceMap": true
|
|
17
|
-
},
|
|
18
|
-
"include": [
|
|
19
|
-
"src/**/*"
|
|
20
|
-
],
|
|
21
|
-
"exclude": [
|
|
22
|
-
"node_modules",
|
|
23
|
-
"dist"
|
|
24
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"lib": [
|
|
6
|
+
"ES2022"
|
|
7
|
+
],
|
|
8
|
+
"outDir": "dist",
|
|
9
|
+
"rootDir": "src",
|
|
10
|
+
"strict": true,
|
|
11
|
+
"esModuleInterop": true,
|
|
12
|
+
"skipLibCheck": true,
|
|
13
|
+
"forceConsistentCasingInFileNames": true,
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"declaration": true,
|
|
16
|
+
"sourceMap": true
|
|
17
|
+
},
|
|
18
|
+
"include": [
|
|
19
|
+
"src/**/*"
|
|
20
|
+
],
|
|
21
|
+
"exclude": [
|
|
22
|
+
"node_modules",
|
|
23
|
+
"dist"
|
|
24
|
+
]
|
|
25
25
|
}
|
package/test-full.js
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
const puppeteer = require('puppeteer-core');
|
|
2
|
-
(async () => {
|
|
3
|
-
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
-
const page = await browser.newPage();
|
|
5
|
-
const errors = [];
|
|
6
|
-
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
-
await page.goto('http://localhost:4000', {waitUntil:'networkidle0', timeout:10000});
|
|
8
|
-
|
|
9
|
-
const result = await page.evaluate(() => {
|
|
10
|
-
const sidebar = document.getElementById('sidebar-agent-list');
|
|
11
|
-
const sidebarHTML = sidebar ? sidebar.innerHTML : 'NOT FOUND';
|
|
12
|
-
const allPages = Array.from(document.querySelectorAll('.page')).map(p => p.id);
|
|
13
|
-
const activePage = document.querySelector('.page.active');
|
|
14
|
-
const navItems = Array.from(document.querySelectorAll('.sidebar .nav-item, .sidebar .agent-list-item, .sidebar .sidebar-section-title')).map(el => el.textContent.trim().substring(0, 30));
|
|
15
|
-
|
|
16
|
-
// Try clicking agent
|
|
17
|
-
if (typeof navigateToAgent === 'function') {
|
|
18
|
-
navigateToAgent('my-first-agent');
|
|
19
|
-
}
|
|
20
|
-
const afterClick = document.querySelector('.page.active');
|
|
21
|
-
|
|
22
|
-
return {
|
|
23
|
-
sidebarHTML: sidebarHTML.substring(0, 300),
|
|
24
|
-
activePage: activePage ? activePage.id : 'none',
|
|
25
|
-
afterClick: afterClick ? afterClick.id : 'none',
|
|
26
|
-
navItems,
|
|
27
|
-
bodyFontSize: window.getComputedStyle(document.body).fontSize,
|
|
28
|
-
pageCount: allPages.length
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
console.log('=== Full Validation ===');
|
|
33
|
-
console.log('JS errors:', errors.length ? errors : 'NONE');
|
|
34
|
-
console.log('Body font-size:', result.bodyFontSize);
|
|
35
|
-
console.log('Sidebar HTML:', result.sidebarHTML);
|
|
36
|
-
console.log('Nav items:', JSON.stringify(result.navItems));
|
|
37
|
-
console.log('Default active page:', result.activePage);
|
|
38
|
-
console.log('After click agent:', result.afterClick);
|
|
39
|
-
console.log('Total pages:', result.pageCount);
|
|
40
|
-
|
|
41
|
-
await browser.close();
|
|
42
|
-
process.exit(0);
|
|
43
|
-
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|
|
1
|
+
const puppeteer = require('puppeteer-core');
|
|
2
|
+
(async () => {
|
|
3
|
+
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
+
const page = await browser.newPage();
|
|
5
|
+
const errors = [];
|
|
6
|
+
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
+
await page.goto('http://localhost:4000', {waitUntil:'networkidle0', timeout:10000});
|
|
8
|
+
|
|
9
|
+
const result = await page.evaluate(() => {
|
|
10
|
+
const sidebar = document.getElementById('sidebar-agent-list');
|
|
11
|
+
const sidebarHTML = sidebar ? sidebar.innerHTML : 'NOT FOUND';
|
|
12
|
+
const allPages = Array.from(document.querySelectorAll('.page')).map(p => p.id);
|
|
13
|
+
const activePage = document.querySelector('.page.active');
|
|
14
|
+
const navItems = Array.from(document.querySelectorAll('.sidebar .nav-item, .sidebar .agent-list-item, .sidebar .sidebar-section-title')).map(el => el.textContent.trim().substring(0, 30));
|
|
15
|
+
|
|
16
|
+
// Try clicking agent
|
|
17
|
+
if (typeof navigateToAgent === 'function') {
|
|
18
|
+
navigateToAgent('my-first-agent');
|
|
19
|
+
}
|
|
20
|
+
const afterClick = document.querySelector('.page.active');
|
|
21
|
+
|
|
22
|
+
return {
|
|
23
|
+
sidebarHTML: sidebarHTML.substring(0, 300),
|
|
24
|
+
activePage: activePage ? activePage.id : 'none',
|
|
25
|
+
afterClick: afterClick ? afterClick.id : 'none',
|
|
26
|
+
navItems,
|
|
27
|
+
bodyFontSize: window.getComputedStyle(document.body).fontSize,
|
|
28
|
+
pageCount: allPages.length
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
console.log('=== Full Validation ===');
|
|
33
|
+
console.log('JS errors:', errors.length ? errors : 'NONE');
|
|
34
|
+
console.log('Body font-size:', result.bodyFontSize);
|
|
35
|
+
console.log('Sidebar HTML:', result.sidebarHTML);
|
|
36
|
+
console.log('Nav items:', JSON.stringify(result.navItems));
|
|
37
|
+
console.log('Default active page:', result.activePage);
|
|
38
|
+
console.log('After click agent:', result.afterClick);
|
|
39
|
+
console.log('Total pages:', result.pageCount);
|
|
40
|
+
|
|
41
|
+
await browser.close();
|
|
42
|
+
process.exit(0);
|
|
43
|
+
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|
package/test-sidebar.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
const puppeteer = require('puppeteer-core');
|
|
2
|
-
(async () => {
|
|
3
|
-
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
-
const page = await browser.newPage();
|
|
5
|
-
const errors = [];
|
|
6
|
-
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
-
page.on('console', m => { if(m.type()==='error') errors.push('CONSOLE:'+m.text()); });
|
|
8
|
-
await page.goto('http://localhost:4000', {waitUntil:'networkidle0', timeout:10000});
|
|
9
|
-
|
|
10
|
-
const result = await page.evaluate(() => {
|
|
11
|
-
const container = document.getElementById('sidebar-agent-list');
|
|
12
|
-
const html = container ? container.innerHTML : 'NOT FOUND';
|
|
13
|
-
const agents = window._sidebarAgents;
|
|
14
|
-
return { html: html.substring(0, 300), agents: agents ? agents.length : 'undefined', errors: [] };
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
console.log('JS errors:', errors.length ? errors : 'NONE');
|
|
18
|
-
console.log('Sidebar HTML:', result.html);
|
|
19
|
-
console.log('Agents count:', result.agents);
|
|
20
|
-
await browser.close();
|
|
21
|
-
process.exit(0);
|
|
22
|
-
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|
|
1
|
+
const puppeteer = require('puppeteer-core');
|
|
2
|
+
(async () => {
|
|
3
|
+
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
+
const page = await browser.newPage();
|
|
5
|
+
const errors = [];
|
|
6
|
+
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
+
page.on('console', m => { if(m.type()==='error') errors.push('CONSOLE:'+m.text()); });
|
|
8
|
+
await page.goto('http://localhost:4000', {waitUntil:'networkidle0', timeout:10000});
|
|
9
|
+
|
|
10
|
+
const result = await page.evaluate(() => {
|
|
11
|
+
const container = document.getElementById('sidebar-agent-list');
|
|
12
|
+
const html = container ? container.innerHTML : 'NOT FOUND';
|
|
13
|
+
const agents = window._sidebarAgents;
|
|
14
|
+
return { html: html.substring(0, 300), agents: agents ? agents.length : 'undefined', errors: [] };
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
console.log('JS errors:', errors.length ? errors : 'NONE');
|
|
18
|
+
console.log('Sidebar HTML:', result.html);
|
|
19
|
+
console.log('Agents count:', result.agents);
|
|
20
|
+
await browser.close();
|
|
21
|
+
process.exit(0);
|
|
22
|
+
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|
package/test-studio3.js
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
const puppeteer = require('puppeteer-core');
|
|
2
|
-
(async () => {
|
|
3
|
-
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
-
const page = await browser.newPage();
|
|
5
|
-
const errors = [];
|
|
6
|
-
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
-
page.on('console', m => { if(m.type()==='error') errors.push(m.text()); });
|
|
8
|
-
await page.goto('http://localhost:4449', {waitUntil:'networkidle0', timeout:10000});
|
|
9
|
-
|
|
10
|
-
// Check sidebar structure
|
|
11
|
-
const sidebar = await page.evaluate(() => {
|
|
12
|
-
const items = document.querySelectorAll('.sidebar .nav-item, .sidebar .agent-list-item, .sidebar .sidebar-section-title');
|
|
13
|
-
return Array.from(items).map(el => el.textContent.trim().substring(0, 40));
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Check navigate
|
|
17
|
-
const navType = await page.evaluate(() => typeof navigate);
|
|
18
|
-
|
|
19
|
-
// Try global-models
|
|
20
|
-
const modelsResult = await page.evaluate(() => {
|
|
21
|
-
navigate('global-models');
|
|
22
|
-
const pages = document.querySelectorAll('.page');
|
|
23
|
-
for (const p of pages) {
|
|
24
|
-
if (p.style.display === 'block') return p.id;
|
|
25
|
-
}
|
|
26
|
-
return 'none-visible';
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
// Try create-group
|
|
30
|
-
const groupResult = await page.evaluate(() => {
|
|
31
|
-
navigate('create-group');
|
|
32
|
-
const pages = document.querySelectorAll('.page');
|
|
33
|
-
for (const p of pages) {
|
|
34
|
-
if (p.style.display === 'block') return p.id;
|
|
35
|
-
}
|
|
36
|
-
return 'none-visible';
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
// Check agent list
|
|
40
|
-
const agentList = await page.evaluate(() => {
|
|
41
|
-
const container = document.getElementById('sidebar-agent-list');
|
|
42
|
-
return container ? container.children.length + ' items' : 'NOT FOUND';
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// Check groups list
|
|
46
|
-
const groupsList = await page.evaluate(() => {
|
|
47
|
-
const container = document.getElementById('groups-list');
|
|
48
|
-
return container ? container.innerHTML.substring(0, 100) : 'NOT FOUND';
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
// Try navigateToAgent
|
|
52
|
-
const agentDetail = await page.evaluate(() => {
|
|
53
|
-
if (typeof navigateToAgent === 'function') {
|
|
54
|
-
navigateToAgent('agent-1');
|
|
55
|
-
const pages = document.querySelectorAll('.page');
|
|
56
|
-
for (const p of pages) {
|
|
57
|
-
if (p.style.display === 'block') return p.id;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return typeof navigateToAgent;
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
console.log('=== Studio Test Results ===');
|
|
64
|
-
console.log('JS Errors:', errors.length ? errors.join('; ') : 'NONE');
|
|
65
|
-
console.log('Sidebar items:', JSON.stringify(sidebar, null, 2));
|
|
66
|
-
console.log('navigate type:', navType);
|
|
67
|
-
console.log('global-models:', modelsResult);
|
|
68
|
-
console.log('create-group:', groupResult);
|
|
69
|
-
console.log('agent list:', agentList);
|
|
70
|
-
console.log('groups list:', groupsList);
|
|
71
|
-
console.log('agent detail:', agentDetail);
|
|
72
|
-
|
|
73
|
-
await browser.close();
|
|
74
|
-
process.exit(0);
|
|
75
|
-
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|
|
1
|
+
const puppeteer = require('puppeteer-core');
|
|
2
|
+
(async () => {
|
|
3
|
+
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
+
const page = await browser.newPage();
|
|
5
|
+
const errors = [];
|
|
6
|
+
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
+
page.on('console', m => { if(m.type()==='error') errors.push(m.text()); });
|
|
8
|
+
await page.goto('http://localhost:4449', {waitUntil:'networkidle0', timeout:10000});
|
|
9
|
+
|
|
10
|
+
// Check sidebar structure
|
|
11
|
+
const sidebar = await page.evaluate(() => {
|
|
12
|
+
const items = document.querySelectorAll('.sidebar .nav-item, .sidebar .agent-list-item, .sidebar .sidebar-section-title');
|
|
13
|
+
return Array.from(items).map(el => el.textContent.trim().substring(0, 40));
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// Check navigate
|
|
17
|
+
const navType = await page.evaluate(() => typeof navigate);
|
|
18
|
+
|
|
19
|
+
// Try global-models
|
|
20
|
+
const modelsResult = await page.evaluate(() => {
|
|
21
|
+
navigate('global-models');
|
|
22
|
+
const pages = document.querySelectorAll('.page');
|
|
23
|
+
for (const p of pages) {
|
|
24
|
+
if (p.style.display === 'block') return p.id;
|
|
25
|
+
}
|
|
26
|
+
return 'none-visible';
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Try create-group
|
|
30
|
+
const groupResult = await page.evaluate(() => {
|
|
31
|
+
navigate('create-group');
|
|
32
|
+
const pages = document.querySelectorAll('.page');
|
|
33
|
+
for (const p of pages) {
|
|
34
|
+
if (p.style.display === 'block') return p.id;
|
|
35
|
+
}
|
|
36
|
+
return 'none-visible';
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Check agent list
|
|
40
|
+
const agentList = await page.evaluate(() => {
|
|
41
|
+
const container = document.getElementById('sidebar-agent-list');
|
|
42
|
+
return container ? container.children.length + ' items' : 'NOT FOUND';
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Check groups list
|
|
46
|
+
const groupsList = await page.evaluate(() => {
|
|
47
|
+
const container = document.getElementById('groups-list');
|
|
48
|
+
return container ? container.innerHTML.substring(0, 100) : 'NOT FOUND';
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Try navigateToAgent
|
|
52
|
+
const agentDetail = await page.evaluate(() => {
|
|
53
|
+
if (typeof navigateToAgent === 'function') {
|
|
54
|
+
navigateToAgent('agent-1');
|
|
55
|
+
const pages = document.querySelectorAll('.page');
|
|
56
|
+
for (const p of pages) {
|
|
57
|
+
if (p.style.display === 'block') return p.id;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return typeof navigateToAgent;
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
console.log('=== Studio Test Results ===');
|
|
64
|
+
console.log('JS Errors:', errors.length ? errors.join('; ') : 'NONE');
|
|
65
|
+
console.log('Sidebar items:', JSON.stringify(sidebar, null, 2));
|
|
66
|
+
console.log('navigate type:', navType);
|
|
67
|
+
console.log('global-models:', modelsResult);
|
|
68
|
+
console.log('create-group:', groupResult);
|
|
69
|
+
console.log('agent list:', agentList);
|
|
70
|
+
console.log('groups list:', groupsList);
|
|
71
|
+
console.log('agent detail:', agentDetail);
|
|
72
|
+
|
|
73
|
+
await browser.close();
|
|
74
|
+
process.exit(0);
|
|
75
|
+
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|
package/test-studio4.js
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
const puppeteer = require('puppeteer-core');
|
|
2
|
-
(async () => {
|
|
3
|
-
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
-
const page = await browser.newPage();
|
|
5
|
-
const errors = [];
|
|
6
|
-
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
-
await page.goto('http://localhost:4449', {waitUntil:'networkidle0', timeout:10000});
|
|
8
|
-
|
|
9
|
-
const result = await page.evaluate(() => {
|
|
10
|
-
// Test create-group
|
|
11
|
-
navigate('create-group');
|
|
12
|
-
const el = document.getElementById('page-create-group');
|
|
13
|
-
if (!el) return 'page-create-group element NOT FOUND';
|
|
14
|
-
const hasActive = el.classList.contains('active');
|
|
15
|
-
const computedDisplay = window.getComputedStyle(el).display;
|
|
16
|
-
return `found=true, active=${hasActive}, display=${computedDisplay}`;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const result2 = await page.evaluate(() => {
|
|
20
|
-
navigate('global-models');
|
|
21
|
-
const el = document.getElementById('page-settings');
|
|
22
|
-
if (!el) return 'page-settings NOT FOUND';
|
|
23
|
-
return `active=${el.classList.contains('active')}, display=${window.getComputedStyle(el).display}`;
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const result3 = await page.evaluate(() => {
|
|
27
|
-
// Check agent detail
|
|
28
|
-
navigateToAgent('a1');
|
|
29
|
-
const el = document.getElementById('page-agent-detail');
|
|
30
|
-
if (!el) return 'page-agent-detail NOT FOUND';
|
|
31
|
-
return `active=${el.classList.contains('active')}, display=${window.getComputedStyle(el).display}`;
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
console.log('JS errors:', errors.length ? errors : 'NONE');
|
|
35
|
-
console.log('create-group:', result);
|
|
36
|
-
console.log('global-models:', result2);
|
|
37
|
-
console.log('agent-detail:', result3);
|
|
38
|
-
|
|
39
|
-
await browser.close();
|
|
40
|
-
process.exit(0);
|
|
41
|
-
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|
|
1
|
+
const puppeteer = require('puppeteer-core');
|
|
2
|
+
(async () => {
|
|
3
|
+
const browser = await puppeteer.launch({executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: true, args:['--no-sandbox']});
|
|
4
|
+
const page = await browser.newPage();
|
|
5
|
+
const errors = [];
|
|
6
|
+
page.on('pageerror', e => errors.push(e.message));
|
|
7
|
+
await page.goto('http://localhost:4449', {waitUntil:'networkidle0', timeout:10000});
|
|
8
|
+
|
|
9
|
+
const result = await page.evaluate(() => {
|
|
10
|
+
// Test create-group
|
|
11
|
+
navigate('create-group');
|
|
12
|
+
const el = document.getElementById('page-create-group');
|
|
13
|
+
if (!el) return 'page-create-group element NOT FOUND';
|
|
14
|
+
const hasActive = el.classList.contains('active');
|
|
15
|
+
const computedDisplay = window.getComputedStyle(el).display;
|
|
16
|
+
return `found=true, active=${hasActive}, display=${computedDisplay}`;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const result2 = await page.evaluate(() => {
|
|
20
|
+
navigate('global-models');
|
|
21
|
+
const el = document.getElementById('page-settings');
|
|
22
|
+
if (!el) return 'page-settings NOT FOUND';
|
|
23
|
+
return `active=${el.classList.contains('active')}, display=${window.getComputedStyle(el).display}`;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const result3 = await page.evaluate(() => {
|
|
27
|
+
// Check agent detail
|
|
28
|
+
navigateToAgent('a1');
|
|
29
|
+
const el = document.getElementById('page-agent-detail');
|
|
30
|
+
if (!el) return 'page-agent-detail NOT FOUND';
|
|
31
|
+
return `active=${el.classList.contains('active')}, display=${window.getComputedStyle(el).display}`;
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
console.log('JS errors:', errors.length ? errors : 'NONE');
|
|
35
|
+
console.log('create-group:', result);
|
|
36
|
+
console.log('global-models:', result2);
|
|
37
|
+
console.log('agent-detail:', result3);
|
|
38
|
+
|
|
39
|
+
await browser.close();
|
|
40
|
+
process.exit(0);
|
|
41
|
+
})().catch(e => { console.error('FAIL:', e.message); process.exit(1); });
|