opc-agent 4.1.2 → 4.1.3
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/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/channels/dingtalk.d.ts.map +1 -0
- package/dist/channels/dingtalk.js.map +1 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/email.d.ts.map +1 -0
- package/dist/channels/email.js.map +1 -0
- package/dist/channels/feishu.d.ts.map +1 -0
- package/dist/channels/feishu.js.map +1 -0
- package/dist/channels/googlechat.d.ts.map +1 -0
- package/dist/channels/googlechat.js.map +1 -0
- package/dist/channels/imessage.d.ts.map +1 -0
- package/dist/channels/imessage.js.map +1 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/irc.d.ts.map +1 -0
- package/dist/channels/irc.js.map +1 -0
- package/dist/channels/line.d.ts.map +1 -0
- package/dist/channels/line.js.map +1 -0
- package/dist/channels/matrix.d.ts.map +1 -0
- package/dist/channels/matrix.js.map +1 -0
- package/dist/channels/mattermost.d.ts.map +1 -0
- package/dist/channels/mattermost.js.map +1 -0
- package/dist/channels/msteams.d.ts.map +1 -0
- package/dist/channels/msteams.js.map +1 -0
- package/dist/channels/nostr.d.ts.map +1 -0
- package/dist/channels/nostr.js.map +1 -0
- package/dist/channels/qq.d.ts.map +1 -0
- package/dist/channels/qq.js.map +1 -0
- package/dist/channels/signal.d.ts.map +1 -0
- package/dist/channels/signal.js.map +1 -0
- package/dist/channels/slack.d.ts.map +1 -0
- package/dist/channels/slack.js.map +1 -0
- package/dist/channels/sms.d.ts.map +1 -0
- package/dist/channels/sms.js.map +1 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/twitch.d.ts.map +1 -0
- package/dist/channels/twitch.js.map +1 -0
- package/dist/channels/voice-call.d.ts.map +1 -0
- package/dist/channels/voice-call.js.map +1 -0
- package/dist/channels/voice.d.ts.map +1 -0
- package/dist/channels/voice.js.map +1 -0
- package/dist/channels/web.d.ts.map +1 -0
- package/dist/channels/web.js.map +1 -0
- package/dist/channels/webhook.d.ts.map +1 -0
- package/dist/channels/webhook.js.map +1 -0
- package/dist/channels/websocket.d.ts.map +1 -0
- package/dist/channels/websocket.js.map +1 -0
- package/dist/channels/wechat.d.ts.map +1 -0
- package/dist/channels/wechat.js.map +1 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +72 -11
- package/dist/cli.js.map +1 -0
- package/dist/core/a2a.d.ts.map +1 -0
- package/dist/core/a2a.js.map +1 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/analytics-engine.d.ts.map +1 -0
- package/dist/core/analytics-engine.js.map +1 -0
- package/dist/core/api-server.d.ts.map +1 -0
- package/dist/core/api-server.js.map +1 -0
- package/dist/core/audio.d.ts.map +1 -0
- package/dist/core/audio.js.map +1 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/collaboration.d.ts.map +1 -0
- package/dist/core/collaboration.js.map +1 -0
- package/dist/core/compose.d.ts.map +1 -0
- package/dist/core/compose.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context-discovery.d.ts.map +1 -0
- package/dist/core/context-discovery.js.map +1 -0
- package/dist/core/context-refs.d.ts.map +1 -0
- package/dist/core/context-refs.js.map +1 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/gateway.d.ts.map +1 -0
- package/dist/core/gateway.js.map +1 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/hitl.d.ts.map +1 -0
- package/dist/core/hitl.js.map +1 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/ide-bridge.d.ts.map +1 -0
- package/dist/core/ide-bridge.js.map +1 -0
- package/dist/core/knowledge.d.ts.map +1 -0
- package/dist/core/knowledge.js.map +1 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/node-network.d.ts.map +1 -0
- package/dist/core/node-network.js.map +1 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/performance.d.ts.map +1 -0
- package/dist/core/performance.js.map +1 -0
- package/dist/core/profiles.d.ts.map +1 -0
- package/dist/core/profiles.js.map +1 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/room.d.ts.map +1 -0
- package/dist/core/room.js.map +1 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/sandbox.d.ts.map +1 -0
- package/dist/core/sandbox.js.map +1 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/security.d.ts.map +1 -0
- package/dist/core/security.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/streaming.d.ts.map +1 -0
- package/dist/core/streaming.js.map +1 -0
- package/dist/core/subagent.d.ts.map +1 -0
- package/dist/core/subagent.js.map +1 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/versioning.d.ts.map +1 -0
- package/dist/core/versioning.js.map +1 -0
- package/dist/core/vision.d.ts.map +1 -0
- package/dist/core/vision.js.map +1 -0
- package/dist/core/watch.d.ts.map +1 -0
- package/dist/core/watch.js.map +1 -0
- package/dist/core/workflow-graph.d.ts.map +1 -0
- package/dist/core/workflow-graph.js.map +1 -0
- package/dist/core/workflow.d.ts.map +1 -0
- package/dist/core/workflow.js.map +1 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js.map +1 -0
- package/dist/deploy/hermes.d.ts.map +1 -0
- package/dist/deploy/hermes.js.map +1 -0
- package/dist/deploy/index.d.ts.map +1 -0
- package/dist/deploy/index.js.map +1 -0
- package/dist/deploy/openclaw.d.ts.map +1 -0
- package/dist/deploy/openclaw.js.map +1 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js.map +1 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/hub/brain-seed.d.ts.map +1 -0
- package/dist/hub/brain-seed.js.map +1 -0
- package/dist/hub/client.d.ts.map +1 -0
- package/dist/hub/client.js.map +1 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/servers/calculator-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/calculator-mcp.js.map +1 -0
- package/dist/mcp/servers/crypto-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/crypto-mcp.js.map +1 -0
- package/dist/mcp/servers/database-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/database-mcp.js.map +1 -0
- package/dist/mcp/servers/datetime-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/datetime-mcp.js.map +1 -0
- package/dist/mcp/servers/filesystem.d.ts.map +1 -0
- package/dist/mcp/servers/filesystem.js.map +1 -0
- package/dist/mcp/servers/github-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/github-mcp.js.map +1 -0
- package/dist/mcp/servers/index.d.ts.map +1 -0
- package/dist/mcp/servers/index.js.map +1 -0
- package/dist/mcp/servers/json-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/json-mcp.js.map +1 -0
- package/dist/mcp/servers/memory-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/memory-mcp.js.map +1 -0
- package/dist/mcp/servers/regex-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/regex-mcp.js.map +1 -0
- package/dist/mcp/servers/web-mcp.d.ts.map +1 -0
- package/dist/mcp/servers/web-mcp.js.map +1 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/deepbrain.d.ts.map +1 -0
- package/dist/memory/deepbrain.js.map +1 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/seed-loader.d.ts.map +1 -0
- package/dist/memory/seed-loader.js.map +1 -0
- package/dist/memory/user-profiler.d.ts.map +1 -0
- package/dist/memory/user-profiler.js.map +1 -0
- package/dist/plugins/content-filter.d.ts.map +1 -0
- package/dist/plugins/content-filter.js.map +1 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/logger.d.ts.map +1 -0
- package/dist/plugins/logger.js.map +1 -0
- package/dist/plugins/rate-limiter.d.ts.map +1 -0
- package/dist/plugins/rate-limiter.js.map +1 -0
- package/dist/protocols/a2a/client.d.ts.map +1 -0
- package/dist/protocols/a2a/client.js.map +1 -0
- package/dist/protocols/a2a/index.d.ts.map +1 -0
- package/dist/protocols/a2a/index.js.map +1 -0
- package/dist/protocols/a2a/server.d.ts.map +1 -0
- package/dist/protocols/a2a/server.js.map +1 -0
- package/dist/protocols/a2a/types.d.ts.map +1 -0
- package/dist/protocols/a2a/types.js.map +1 -0
- package/dist/protocols/a2a/utils.d.ts.map +1 -0
- package/dist/protocols/a2a/utils.js.map +1 -0
- package/dist/protocols/agui/client.d.ts.map +1 -0
- package/dist/protocols/agui/client.js.map +1 -0
- package/dist/protocols/agui/index.d.ts.map +1 -0
- package/dist/protocols/agui/index.js.map +1 -0
- package/dist/protocols/agui/server.d.ts.map +1 -0
- package/dist/protocols/agui/server.js.map +1 -0
- package/dist/protocols/agui/types.d.ts.map +1 -0
- package/dist/protocols/agui/types.js.map +1 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js.map +1 -0
- package/dist/protocols/mcp/agent-tools.d.ts.map +1 -0
- package/dist/protocols/mcp/agent-tools.js.map +1 -0
- package/dist/protocols/mcp/index.d.ts.map +1 -0
- package/dist/protocols/mcp/index.js.map +1 -0
- package/dist/protocols/mcp/server.d.ts.map +1 -0
- package/dist/protocols/mcp/server.js.map +1 -0
- package/dist/protocols/mcp/types.d.ts.map +1 -0
- package/dist/protocols/mcp/types.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/scheduler/cron-engine.d.ts.map +1 -0
- package/dist/scheduler/cron-engine.js.map +1 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/schema/oad.d.ts.map +1 -0
- package/dist/schema/oad.js.map +1 -0
- package/dist/security/approval.d.ts.map +1 -0
- package/dist/security/approval.js.map +1 -0
- package/dist/security/approvals.d.ts.map +1 -0
- package/dist/security/approvals.js.map +1 -0
- package/dist/security/elevated.d.ts.map +1 -0
- package/dist/security/elevated.js.map +1 -0
- package/dist/security/guardrails.d.ts.map +1 -0
- package/dist/security/guardrails.js.map +1 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/keys.d.ts.map +1 -0
- package/dist/security/keys.js.map +1 -0
- package/dist/security/secrets.d.ts.map +1 -0
- package/dist/security/secrets.js.map +1 -0
- package/dist/skills/auto-learn.d.ts.map +1 -0
- package/dist/skills/auto-learn.js.map +1 -0
- package/dist/skills/base.d.ts.map +1 -0
- package/dist/skills/base.js.map +1 -0
- package/dist/skills/builtin/index.d.ts.map +1 -0
- package/dist/skills/builtin/index.js.map +1 -0
- package/dist/skills/document.d.ts.map +1 -0
- package/dist/skills/document.js.map +1 -0
- package/dist/skills/http.d.ts.map +1 -0
- package/dist/skills/http.js.map +1 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/marketplace.d.ts.map +1 -0
- package/dist/skills/marketplace.js.map +1 -0
- package/dist/skills/scheduler.d.ts.map +1 -0
- package/dist/skills/scheduler.js.map +1 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/webhook-trigger.d.ts.map +1 -0
- package/dist/skills/webhook-trigger.js.map +1 -0
- package/dist/studio/server.d.ts.map +1 -0
- package/dist/studio/server.js.map +1 -0
- package/dist/studio/templates-data.d.ts.map +1 -0
- package/dist/studio/templates-data.js.map +1 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/templates/code-reviewer.d.ts.map +1 -0
- package/dist/templates/code-reviewer.js.map +1 -0
- package/dist/templates/content-writer.d.ts.map +1 -0
- package/dist/templates/content-writer.js.map +1 -0
- package/dist/templates/customer-service.d.ts.map +1 -0
- package/dist/templates/customer-service.js.map +1 -0
- package/dist/templates/data-analyst.d.ts.map +1 -0
- package/dist/templates/data-analyst.js.map +1 -0
- package/dist/templates/executive-assistant.d.ts.map +1 -0
- package/dist/templates/executive-assistant.js.map +1 -0
- package/dist/templates/financial-advisor.d.ts.map +1 -0
- package/dist/templates/financial-advisor.js.map +1 -0
- package/dist/templates/hr-recruiter.d.ts.map +1 -0
- package/dist/templates/hr-recruiter.js.map +1 -0
- package/dist/templates/knowledge-base.d.ts.map +1 -0
- package/dist/templates/knowledge-base.js.map +1 -0
- package/dist/templates/legal-assistant.d.ts.map +1 -0
- package/dist/templates/legal-assistant.js.map +1 -0
- package/dist/templates/project-manager.d.ts.map +1 -0
- package/dist/templates/project-manager.js.map +1 -0
- package/dist/templates/sales-assistant.d.ts.map +1 -0
- package/dist/templates/sales-assistant.js.map +1 -0
- package/dist/templates/teacher.d.ts.map +1 -0
- package/dist/templates/teacher.js.map +1 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tools/builtin/browser.d.ts.map +1 -0
- package/dist/tools/builtin/browser.js.map +1 -0
- package/dist/tools/builtin/datetime.d.ts.map +1 -0
- package/dist/tools/builtin/datetime.js.map +1 -0
- package/dist/tools/builtin/file.d.ts.map +1 -0
- package/dist/tools/builtin/file.js.map +1 -0
- package/dist/tools/builtin/home-assistant.d.ts.map +1 -0
- package/dist/tools/builtin/home-assistant.js.map +1 -0
- package/dist/tools/builtin/index.d.ts.map +1 -0
- package/dist/tools/builtin/index.js.map +1 -0
- package/dist/tools/builtin/rl-tools.d.ts.map +1 -0
- package/dist/tools/builtin/rl-tools.js.map +1 -0
- package/dist/tools/builtin/shell.d.ts.map +1 -0
- package/dist/tools/builtin/shell.js.map +1 -0
- package/dist/tools/builtin/vision.d.ts.map +1 -0
- package/dist/tools/builtin/vision.js.map +1 -0
- package/dist/tools/builtin/web-search.d.ts.map +1 -0
- package/dist/tools/builtin/web-search.js.map +1 -0
- package/dist/tools/builtin/web.d.ts.map +1 -0
- package/dist/tools/builtin/web.js.map +1 -0
- package/dist/tools/calculator.d.ts.map +1 -0
- package/dist/tools/calculator.js.map +1 -0
- package/dist/tools/datetime.d.ts.map +1 -0
- package/dist/tools/datetime.js.map +1 -0
- package/dist/tools/document-processor.d.ts.map +1 -0
- package/dist/tools/document-processor.js.map +1 -0
- package/dist/tools/gateway.d.ts.map +1 -0
- package/dist/tools/gateway.js.map +1 -0
- package/dist/tools/image-generator.d.ts.map +1 -0
- package/dist/tools/image-generator.js.map +1 -0
- package/dist/tools/integrations/calendar.d.ts.map +1 -0
- package/dist/tools/integrations/calendar.js.map +1 -0
- package/dist/tools/integrations/code-exec.d.ts.map +1 -0
- package/dist/tools/integrations/code-exec.js.map +1 -0
- package/dist/tools/integrations/csv-analyzer.d.ts.map +1 -0
- package/dist/tools/integrations/csv-analyzer.js.map +1 -0
- package/dist/tools/integrations/database.d.ts.map +1 -0
- package/dist/tools/integrations/database.js.map +1 -0
- package/dist/tools/integrations/email-send.d.ts.map +1 -0
- package/dist/tools/integrations/email-send.js.map +1 -0
- package/dist/tools/integrations/git-tool.d.ts.map +1 -0
- package/dist/tools/integrations/git-tool.js.map +1 -0
- package/dist/tools/integrations/github-tool.d.ts.map +1 -0
- package/dist/tools/integrations/github-tool.js.map +1 -0
- package/dist/tools/integrations/image-gen.d.ts.map +1 -0
- package/dist/tools/integrations/image-gen.js.map +1 -0
- package/dist/tools/integrations/index.d.ts.map +1 -0
- package/dist/tools/integrations/index.js.map +1 -0
- package/dist/tools/integrations/jira.d.ts.map +1 -0
- package/dist/tools/integrations/jira.js.map +1 -0
- package/dist/tools/integrations/notion.d.ts.map +1 -0
- package/dist/tools/integrations/notion.js.map +1 -0
- package/dist/tools/integrations/npm-tool.d.ts.map +1 -0
- package/dist/tools/integrations/npm-tool.js.map +1 -0
- package/dist/tools/integrations/pdf-reader.d.ts.map +1 -0
- package/dist/tools/integrations/pdf-reader.js.map +1 -0
- package/dist/tools/integrations/slack.d.ts.map +1 -0
- package/dist/tools/integrations/slack.js.map +1 -0
- package/dist/tools/integrations/summarizer.d.ts.map +1 -0
- package/dist/tools/integrations/summarizer.js.map +1 -0
- package/dist/tools/integrations/translator.d.ts.map +1 -0
- package/dist/tools/integrations/translator.js.map +1 -0
- package/dist/tools/integrations/trello.d.ts.map +1 -0
- package/dist/tools/integrations/trello.js.map +1 -0
- package/dist/tools/integrations/vector-search.d.ts.map +1 -0
- package/dist/tools/integrations/vector-search.js.map +1 -0
- package/dist/tools/integrations/web-scraper.d.ts.map +1 -0
- package/dist/tools/integrations/web-scraper.js.map +1 -0
- package/dist/tools/integrations/web-search.d.ts.map +1 -0
- package/dist/tools/integrations/web-search.js.map +1 -0
- package/dist/tools/integrations/webhook.d.ts.map +1 -0
- package/dist/tools/integrations/webhook.js.map +1 -0
- package/dist/tools/json-transform.d.ts.map +1 -0
- package/dist/tools/json-transform.js.map +1 -0
- package/dist/tools/mcp-client.d.ts.map +1 -0
- package/dist/tools/mcp-client.js.map +1 -0
- package/dist/tools/mcp.d.ts.map +1 -0
- package/dist/tools/mcp.js.map +1 -0
- package/dist/tools/text-analysis.d.ts.map +1 -0
- package/dist/tools/text-analysis.js.map +1 -0
- package/dist/tools/web-scraper.d.ts.map +1 -0
- package/dist/tools/web-scraper.js.map +1 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/traces/index.d.ts.map +1 -0
- package/dist/traces/index.js.map +1 -0
- package/dist/ui/components.d.ts.map +1 -0
- package/dist/ui/components.js.map +1 -0
- package/package.json +1 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -20
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -14
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -13
- package/.github/workflows/ci.yml +0 -24
- package/USABILITY-ISSUES.md +0 -73
- package/docs/.vitepress/config.ts +0 -103
- package/docs/api/cli.md +0 -48
- package/docs/api/oad-schema.md +0 -64
- package/docs/api/sdk.md +0 -80
- package/docs/guide/concepts.md +0 -51
- package/docs/guide/configuration.md +0 -79
- package/docs/guide/deployment.md +0 -42
- package/docs/guide/getting-started.md +0 -44
- package/docs/guide/templates.md +0 -28
- package/docs/guide/testing.md +0 -84
- package/docs/index.md +0 -27
- package/docs/zh/api/cli.md +0 -54
- package/docs/zh/api/oad-schema.md +0 -87
- package/docs/zh/api/sdk.md +0 -102
- package/docs/zh/guide/concepts.md +0 -104
- package/docs/zh/guide/configuration.md +0 -135
- package/docs/zh/guide/deployment.md +0 -81
- package/docs/zh/guide/getting-started.md +0 -82
- package/docs/zh/guide/templates.md +0 -84
- package/docs/zh/guide/testing.md +0 -88
- package/docs/zh/index.md +0 -27
- package/fix-sidebar.mjs +0 -188
- package/serve-studio.js +0 -13
- package/serve-test.js +0 -25
- package/src/analytics/index.ts +0 -66
- package/src/channels/dingtalk.ts +0 -46
- package/src/channels/discord.ts +0 -192
- package/src/channels/email.ts +0 -351
- package/src/channels/feishu.ts +0 -349
- package/src/channels/googlechat.ts +0 -42
- package/src/channels/imessage.ts +0 -32
- package/src/channels/index.ts +0 -15
- package/src/channels/irc.ts +0 -82
- package/src/channels/line.ts +0 -33
- package/src/channels/matrix.ts +0 -34
- package/src/channels/mattermost.ts +0 -57
- package/src/channels/msteams.ts +0 -33
- package/src/channels/nostr.ts +0 -33
- package/src/channels/qq.ts +0 -34
- package/src/channels/signal.ts +0 -33
- package/src/channels/slack.ts +0 -217
- package/src/channels/sms.ts +0 -34
- package/src/channels/telegram.ts +0 -616
- package/src/channels/twitch.ts +0 -65
- package/src/channels/voice-call.ts +0 -100
- package/src/channels/voice.ts +0 -471
- package/src/channels/web.ts +0 -638
- package/src/channels/webhook.ts +0 -199
- package/src/channels/websocket.ts +0 -399
- package/src/channels/wechat.ts +0 -329
- package/src/channels/whatsapp.ts +0 -33
- package/src/cli/chat.ts +0 -99
- package/src/cli/setup.ts +0 -314
- package/src/cli.ts +0 -2826
- package/src/core/a2a.ts +0 -203
- package/src/core/agent.ts +0 -476
- package/src/core/analytics-engine.ts +0 -186
- package/src/core/api-server.ts +0 -277
- package/src/core/audio.ts +0 -98
- package/src/core/auth.ts +0 -57
- package/src/core/cache.ts +0 -141
- package/src/core/collaboration.ts +0 -275
- package/src/core/compose.ts +0 -77
- package/src/core/config.ts +0 -14
- package/src/core/context-discovery.ts +0 -85
- package/src/core/context-refs.ts +0 -140
- package/src/core/errors.ts +0 -148
- package/src/core/gateway.ts +0 -106
- package/src/core/heartbeat.ts +0 -51
- package/src/core/hitl.ts +0 -138
- package/src/core/hooks.ts +0 -105
- package/src/core/ide-bridge.ts +0 -133
- package/src/core/knowledge.ts +0 -255
- package/src/core/logger.ts +0 -57
- package/src/core/node-network.ts +0 -86
- package/src/core/orchestrator.ts +0 -215
- package/src/core/performance.ts +0 -187
- package/src/core/profiles.ts +0 -122
- package/src/core/rate-limiter.ts +0 -128
- package/src/core/room.ts +0 -109
- package/src/core/runtime.ts +0 -435
- package/src/core/sandbox.ts +0 -344
- package/src/core/scheduler.ts +0 -187
- package/src/core/security.ts +0 -171
- package/src/core/session-manager.ts +0 -137
- package/src/core/streaming.ts +0 -195
- package/src/core/subagent.ts +0 -98
- package/src/core/types.ts +0 -68
- package/src/core/versioning.ts +0 -106
- package/src/core/vision.ts +0 -180
- package/src/core/watch.ts +0 -178
- package/src/core/workflow-graph.ts +0 -365
- package/src/core/workflow.ts +0 -235
- package/src/daemon.ts +0 -96
- package/src/deploy/hermes.ts +0 -156
- package/src/deploy/index.ts +0 -255
- package/src/deploy/openclaw.ts +0 -190
- package/src/doctor.ts +0 -243
- package/src/eval/index.ts +0 -211
- package/src/eval/suites/basic.json +0 -16
- package/src/eval/suites/memory.json +0 -12
- package/src/eval/suites/safety.json +0 -14
- package/src/hub/brain-seed.ts +0 -54
- package/src/hub/client.ts +0 -60
- package/src/i18n/index.ts +0 -216
- package/src/index.ts +0 -283
- package/src/mcp/servers/calculator-mcp.ts +0 -65
- package/src/mcp/servers/crypto-mcp.ts +0 -73
- package/src/mcp/servers/database-mcp.ts +0 -72
- package/src/mcp/servers/datetime-mcp.ts +0 -69
- package/src/mcp/servers/filesystem.ts +0 -66
- package/src/mcp/servers/github-mcp.ts +0 -58
- package/src/mcp/servers/index.ts +0 -63
- package/src/mcp/servers/json-mcp.ts +0 -102
- package/src/mcp/servers/memory-mcp.ts +0 -56
- package/src/mcp/servers/regex-mcp.ts +0 -53
- package/src/mcp/servers/web-mcp.ts +0 -49
- package/src/memory/context-compressor.ts +0 -189
- package/src/memory/deepbrain.ts +0 -202
- package/src/memory/index.ts +0 -41
- package/src/memory/seed-loader.ts +0 -212
- package/src/memory/user-profiler.ts +0 -215
- package/src/plugins/content-filter.ts +0 -23
- package/src/plugins/index.ts +0 -339
- package/src/plugins/logger.ts +0 -18
- package/src/plugins/rate-limiter.ts +0 -38
- package/src/protocols/a2a/client.ts +0 -132
- package/src/protocols/a2a/index.ts +0 -8
- package/src/protocols/a2a/server.ts +0 -333
- package/src/protocols/a2a/types.ts +0 -88
- package/src/protocols/a2a/utils.ts +0 -50
- package/src/protocols/agui/client.ts +0 -83
- package/src/protocols/agui/index.ts +0 -4
- package/src/protocols/agui/server.ts +0 -218
- package/src/protocols/agui/types.ts +0 -153
- package/src/protocols/index.ts +0 -2
- package/src/protocols/mcp/agent-tools.ts +0 -134
- package/src/protocols/mcp/index.ts +0 -8
- package/src/protocols/mcp/server.ts +0 -262
- package/src/protocols/mcp/types.ts +0 -69
- package/src/providers/index.ts +0 -632
- package/src/publish/index.ts +0 -376
- package/src/scheduler/cron-engine.ts +0 -191
- package/src/scheduler/index.ts +0 -2
- package/src/schema/oad.ts +0 -217
- package/src/security/approval.ts +0 -131
- package/src/security/approvals.ts +0 -143
- package/src/security/elevated.ts +0 -105
- package/src/security/guardrails.ts +0 -248
- package/src/security/index.ts +0 -9
- package/src/security/keys.ts +0 -87
- package/src/security/secrets.ts +0 -129
- package/src/skills/auto-learn.ts +0 -262
- package/src/skills/base.ts +0 -16
- package/src/skills/builtin/index.ts +0 -408
- package/src/skills/document.ts +0 -100
- package/src/skills/http.ts +0 -35
- package/src/skills/index.ts +0 -27
- package/src/skills/marketplace.ts +0 -113
- package/src/skills/scheduler.ts +0 -80
- package/src/skills/types.ts +0 -42
- package/src/skills/webhook-trigger.ts +0 -59
- package/src/studio/server.ts +0 -1791
- package/src/studio/templates-data.ts +0 -178
- package/src/studio-ui/index.html +0 -3076
- package/src/telemetry/index.ts +0 -324
- package/src/templates/code-reviewer.ts +0 -30
- package/src/templates/content-writer.ts +0 -58
- package/src/templates/customer-service.ts +0 -76
- package/src/templates/data-analyst.ts +0 -66
- package/src/templates/executive-assistant.ts +0 -71
- package/src/templates/financial-advisor.ts +0 -60
- package/src/templates/hr-recruiter.ts +0 -58
- package/src/templates/knowledge-base.ts +0 -27
- package/src/templates/legal-assistant.ts +0 -71
- package/src/templates/project-manager.ts +0 -58
- package/src/templates/sales-assistant.ts +0 -75
- package/src/templates/teacher.ts +0 -75
- package/src/testing/index.ts +0 -181
- package/src/tools/builtin/browser.ts +0 -299
- package/src/tools/builtin/datetime.ts +0 -41
- package/src/tools/builtin/file.ts +0 -107
- package/src/tools/builtin/home-assistant.ts +0 -116
- package/src/tools/builtin/index.ts +0 -37
- package/src/tools/builtin/rl-tools.ts +0 -243
- package/src/tools/builtin/shell.ts +0 -43
- package/src/tools/builtin/vision.ts +0 -64
- package/src/tools/builtin/web-search.ts +0 -126
- package/src/tools/builtin/web.ts +0 -35
- package/src/tools/calculator.ts +0 -73
- package/src/tools/datetime.ts +0 -149
- package/src/tools/document-processor.ts +0 -213
- package/src/tools/gateway.ts +0 -220
- package/src/tools/image-generator.ts +0 -150
- package/src/tools/integrations/calendar.ts +0 -73
- package/src/tools/integrations/code-exec.ts +0 -39
- package/src/tools/integrations/csv-analyzer.ts +0 -92
- package/src/tools/integrations/database.ts +0 -44
- package/src/tools/integrations/email-send.ts +0 -76
- package/src/tools/integrations/git-tool.ts +0 -42
- package/src/tools/integrations/github-tool.ts +0 -76
- package/src/tools/integrations/image-gen.ts +0 -56
- package/src/tools/integrations/index.ts +0 -92
- package/src/tools/integrations/jira.ts +0 -83
- package/src/tools/integrations/notion.ts +0 -71
- package/src/tools/integrations/npm-tool.ts +0 -48
- package/src/tools/integrations/pdf-reader.ts +0 -58
- package/src/tools/integrations/slack.ts +0 -65
- package/src/tools/integrations/summarizer.ts +0 -49
- package/src/tools/integrations/translator.ts +0 -48
- package/src/tools/integrations/trello.ts +0 -60
- package/src/tools/integrations/vector-search.ts +0 -42
- package/src/tools/integrations/web-scraper.ts +0 -47
- package/src/tools/integrations/web-search.ts +0 -58
- package/src/tools/integrations/webhook.ts +0 -38
- package/src/tools/json-transform.ts +0 -187
- package/src/tools/mcp-client.ts +0 -131
- package/src/tools/mcp.ts +0 -76
- package/src/tools/text-analysis.ts +0 -116
- package/src/tools/web-scraper.ts +0 -179
- package/src/tools/web-search.ts +0 -180
- package/src/traces/index.ts +0 -132
- package/src/types/agent-workstation.d.ts +0 -2
- package/src/ui/components.ts +0 -127
- package/srv-err.txt +0 -0
- package/srv-out.txt +0 -1
- package/test-agent/Dockerfile +0 -9
- package/test-agent/README.md +0 -50
- package/test-agent/agent.yaml +0 -23
- package/test-agent/docker-compose.yml +0 -11
- package/test-agent/oad.yaml +0 -31
- package/test-agent/package-lock.json +0 -1492
- package/test-agent/package.json +0 -18
- package/test-agent/src/index.ts +0 -24
- package/test-agent/src/skills/echo.ts +0 -15
- package/test-agent/tsconfig.json +0 -25
- package/test-full.js +0 -43
- package/test-sidebar.js +0 -22
- package/test-studio3.js +0 -75
- package/test-studio4.js +0 -41
- package/tests/a2a-protocol.test.ts +0 -285
- package/tests/a2a.test.ts +0 -66
- package/tests/agent.test.ts +0 -72
- package/tests/agui-protocol.test.ts +0 -246
- package/tests/analytics.test.ts +0 -50
- package/tests/api-server.test.ts +0 -148
- package/tests/approvals.test.ts +0 -89
- package/tests/audio.test.ts +0 -40
- package/tests/auto-learn.test.ts +0 -105
- package/tests/brain-seed-extended.test.ts +0 -490
- package/tests/brain-seed.test.ts +0 -239
- package/tests/browser.test.ts +0 -179
- package/tests/builtin-tools.test.ts +0 -83
- package/tests/channel.test.ts +0 -39
- package/tests/channels/discord.test.ts +0 -79
- package/tests/channels/email.test.ts +0 -148
- package/tests/channels/feishu.test.ts +0 -123
- package/tests/channels/telegram.test.ts +0 -129
- package/tests/channels/websocket.test.ts +0 -53
- package/tests/channels/wechat.test.ts +0 -170
- package/tests/channels-extra.test.ts +0 -45
- package/tests/chat-cli.test.ts +0 -160
- package/tests/cli.test.ts +0 -46
- package/tests/collaboration.test.ts +0 -319
- package/tests/context-compressor.test.ts +0 -172
- package/tests/context-refs.test.ts +0 -121
- package/tests/cron-engine.test.ts +0 -101
- package/tests/daemon.test.ts +0 -135
- package/tests/deepbrain-wire.test.ts +0 -234
- package/tests/deploy-and-dag.test.ts +0 -196
- package/tests/doctor.test.ts +0 -38
- package/tests/document-processor.test.ts +0 -69
- package/tests/e2e-nocode.test.ts +0 -442
- package/tests/e2e.test.ts +0 -134
- package/tests/elevated.test.ts +0 -69
- package/tests/errors.test.ts +0 -83
- package/tests/eval.test.ts +0 -173
- package/tests/gateway.test.ts +0 -63
- package/tests/guardrails.test.ts +0 -177
- package/tests/hitl.test.ts +0 -71
- package/tests/home-assistant.test.ts +0 -40
- package/tests/hooks.test.ts +0 -79
- package/tests/i18n.test.ts +0 -41
- package/tests/ide-bridge.test.ts +0 -38
- package/tests/image-generator.test.ts +0 -84
- package/tests/init-role.test.ts +0 -124
- package/tests/integrations.test.ts +0 -249
- package/tests/mcp-client.test.ts +0 -92
- package/tests/mcp-server.test.ts +0 -178
- package/tests/mcp-servers.test.ts +0 -260
- package/tests/mcp.test.ts +0 -54
- package/tests/node-network.test.ts +0 -74
- package/tests/oad.test.ts +0 -68
- package/tests/performance.test.ts +0 -115
- package/tests/plugin-a2a-enhanced.test.ts +0 -230
- package/tests/plugin.test.ts +0 -74
- package/tests/profiles.test.ts +0 -61
- package/tests/publish.test.ts +0 -231
- package/tests/rl-tools.test.ts +0 -93
- package/tests/room.test.ts +0 -106
- package/tests/runtime.test.ts +0 -42
- package/tests/sandbox-manager.test.ts +0 -46
- package/tests/sandbox.test.ts +0 -46
- package/tests/scheduler.test.ts +0 -200
- package/tests/secrets.test.ts +0 -107
- package/tests/security-enhanced.test.ts +0 -233
- package/tests/security.test.ts +0 -60
- package/tests/settings-api.test.ts +0 -148
- package/tests/setup.test.ts +0 -73
- package/tests/skill-learner.test.ts +0 -161
- package/tests/streaming.test.ts +0 -109
- package/tests/studio.test.ts +0 -402
- package/tests/subagent.test.ts +0 -193
- package/tests/telegram-discord.test.ts +0 -60
- package/tests/telemetry.test.ts +0 -186
- package/tests/templates.test.ts +0 -77
- package/tests/tools/builtin-extended.test.ts +0 -138
- package/tests/user-profiler.test.ts +0 -169
- package/tests/v070.test.ts +0 -76
- package/tests/v090-features.test.ts +0 -254
- package/tests/versioning.test.ts +0 -75
- package/tests/vision.test.ts +0 -61
- package/tests/voice-call.test.ts +0 -47
- package/tests/voice-enhanced.test.ts +0 -169
- package/tests/voice-interaction.test.ts +0 -38
- package/tests/voice.test.ts +0 -61
- package/tests/web-search.test.ts +0 -155
- package/tests/webhook.test.ts +0 -29
- package/tests/workflow-graph.test.ts +0 -279
- package/tests/workflow.test.ts +0 -143
- package/tmp-js-test.js +0 -1532
- package/tmp-sc.js +0 -1716
- package/tutorial/customer-service-agent/README.md +0 -612
- package/tutorial/customer-service-agent/SOUL.md +0 -26
- package/tutorial/customer-service-agent/agent.yaml +0 -63
- package/tutorial/customer-service-agent/package.json +0 -19
- package/tutorial/customer-service-agent/src/index.ts +0 -69
- package/tutorial/customer-service-agent/src/skills/faq.ts +0 -27
- package/tutorial/customer-service-agent/src/skills/ticket.ts +0 -22
- package/tutorial/customer-service-agent/tsconfig.json +0 -14
- package/vitest.config.ts +0 -9
package/tests/studio.test.ts
DELETED
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
|
|
2
|
-
import { StudioServer } from '../src/studio/server';
|
|
3
|
-
import { createServer, IncomingMessage, ServerResponse } from 'http';
|
|
4
|
-
import { join } from 'path';
|
|
5
|
-
import { mkdirSync, writeFileSync, rmSync, existsSync, readFileSync } from 'fs';
|
|
6
|
-
import * as http from 'http';
|
|
7
|
-
|
|
8
|
-
const TEST_PORT = 14789;
|
|
9
|
-
const TEST_DIR = join(__dirname, '__studio_test_fixture__');
|
|
10
|
-
const STATIC_DIR = join(TEST_DIR, 'studio-ui');
|
|
11
|
-
|
|
12
|
-
function fetch(path: string, method = 'GET', body?: string): Promise<{ status: number; headers: any; body: string }> {
|
|
13
|
-
return new Promise((resolve, reject) => {
|
|
14
|
-
const opts: http.RequestOptions = {
|
|
15
|
-
hostname: 'localhost',
|
|
16
|
-
port: TEST_PORT,
|
|
17
|
-
path,
|
|
18
|
-
method,
|
|
19
|
-
headers: body ? { 'Content-Type': 'application/json' } : {},
|
|
20
|
-
};
|
|
21
|
-
const req = http.request(opts, (res) => {
|
|
22
|
-
let data = '';
|
|
23
|
-
res.on('data', (c) => (data += c));
|
|
24
|
-
res.on('end', () => resolve({ status: res.statusCode!, headers: res.headers, body: data }));
|
|
25
|
-
});
|
|
26
|
-
req.on('error', reject);
|
|
27
|
-
if (body) req.write(body);
|
|
28
|
-
req.end();
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
describe('StudioServer', () => {
|
|
33
|
-
let server: StudioServer;
|
|
34
|
-
|
|
35
|
-
beforeAll(async () => {
|
|
36
|
-
// Create test fixture
|
|
37
|
-
mkdirSync(STATIC_DIR, { recursive: true });
|
|
38
|
-
writeFileSync(join(STATIC_DIR, 'index.html'), '<html><body>OPC Studio</body></html>');
|
|
39
|
-
writeFileSync(join(STATIC_DIR, 'app.js'), 'console.log("hello")');
|
|
40
|
-
writeFileSync(join(STATIC_DIR, 'style.css'), 'body { margin: 0; }');
|
|
41
|
-
writeFileSync(join(STATIC_DIR, 'logo.png'), Buffer.from([0x89, 0x50, 0x4e, 0x47]));
|
|
42
|
-
writeFileSync(join(STATIC_DIR, 'icon.svg'), '<svg></svg>');
|
|
43
|
-
writeFileSync(join(TEST_DIR, 'package.json'), JSON.stringify({ name: 'test-agent', version: '1.2.3', description: 'Test agent' }));
|
|
44
|
-
|
|
45
|
-
server = new StudioServer({
|
|
46
|
-
port: TEST_PORT,
|
|
47
|
-
agentDir: TEST_DIR,
|
|
48
|
-
staticDir: STATIC_DIR,
|
|
49
|
-
});
|
|
50
|
-
await server.start();
|
|
51
|
-
// Give server time to bind
|
|
52
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
afterAll(async () => {
|
|
56
|
-
await server.stop();
|
|
57
|
-
rmSync(TEST_DIR, { recursive: true, force: true });
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
// Test 1: Constructor defaults
|
|
61
|
-
it('should have default config values', () => {
|
|
62
|
-
const s = new StudioServer();
|
|
63
|
-
const cfg = s.getConfig();
|
|
64
|
-
expect(cfg.port).toBe(4000);
|
|
65
|
-
expect(cfg.agentDir).toBe(process.cwd());
|
|
66
|
-
expect(cfg.staticDir).toContain('studio-ui');
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// Test 2: Constructor with custom port
|
|
70
|
-
it('should accept custom config', () => {
|
|
71
|
-
const s = new StudioServer({ port: 5555, agentDir: '/tmp/test' });
|
|
72
|
-
const cfg = s.getConfig();
|
|
73
|
-
expect(cfg.port).toBe(5555);
|
|
74
|
-
expect(cfg.agentDir).toBe('/tmp/test');
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
// Test 3: /api/agent/info returns agent info
|
|
78
|
-
it('GET /api/agent/info returns agent info', async () => {
|
|
79
|
-
const res = await fetch('/api/agent/info');
|
|
80
|
-
expect(res.status).toBe(200);
|
|
81
|
-
const data = JSON.parse(res.body);
|
|
82
|
-
expect(data.name).toBe('test-agent');
|
|
83
|
-
expect(data.version).toBe('1.2.3');
|
|
84
|
-
expect(data.status).toBe('running');
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
// Test 4: /api/tools/list returns tools
|
|
88
|
-
it('GET /api/tools/list returns tools array', async () => {
|
|
89
|
-
const res = await fetch('/api/tools/list');
|
|
90
|
-
expect(res.status).toBe(200);
|
|
91
|
-
const data = JSON.parse(res.body);
|
|
92
|
-
expect(data).toHaveProperty('tools');
|
|
93
|
-
expect(Array.isArray(data.tools)).toBe(true);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// Test 5: /api/doctor/check runs
|
|
97
|
-
it('GET /api/doctor/check returns result', async () => {
|
|
98
|
-
const res = await fetch('/api/doctor/check');
|
|
99
|
-
expect(res.status).toBe(200);
|
|
100
|
-
const data = JSON.parse(res.body);
|
|
101
|
-
expect(data).toBeDefined();
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
// Test 6: unknown API returns 404
|
|
105
|
-
it('GET /api/unknown returns 404', async () => {
|
|
106
|
-
const res = await fetch('/api/nonexistent/route');
|
|
107
|
-
expect(res.status).toBe(404);
|
|
108
|
-
const data = JSON.parse(res.body);
|
|
109
|
-
expect(data.error).toBe('Not found');
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
// Test 7: Static file serving - HTML
|
|
113
|
-
it('serves index.html at root', async () => {
|
|
114
|
-
const res = await fetch('/');
|
|
115
|
-
expect(res.status).toBe(200);
|
|
116
|
-
expect(res.headers['content-type']).toBe('text/html');
|
|
117
|
-
expect(res.body).toContain('OPC Studio');
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
// Test 8: Static file serving - JS with correct MIME
|
|
121
|
-
it('serves .js with correct MIME type', async () => {
|
|
122
|
-
const res = await fetch('/app.js');
|
|
123
|
-
expect(res.status).toBe(200);
|
|
124
|
-
expect(res.headers['content-type']).toBe('application/javascript');
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
// Test 9: Static file serving - CSS with correct MIME
|
|
128
|
-
it('serves .css with correct MIME type', async () => {
|
|
129
|
-
const res = await fetch('/style.css');
|
|
130
|
-
expect(res.status).toBe(200);
|
|
131
|
-
expect(res.headers['content-type']).toBe('text/css');
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
// Test 10: CORS headers present on API responses
|
|
135
|
-
it('API responses include CORS headers', async () => {
|
|
136
|
-
const res = await fetch('/api/agent/info');
|
|
137
|
-
expect(res.headers['access-control-allow-origin']).toBe('*');
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
// Test 11: SPA fallback for unknown static paths
|
|
141
|
-
it('falls back to index.html for unknown paths', async () => {
|
|
142
|
-
const res = await fetch('/some/deep/route');
|
|
143
|
-
expect(res.status).toBe(200);
|
|
144
|
-
expect(res.headers['content-type']).toBe('text/html');
|
|
145
|
-
expect(res.body).toContain('OPC Studio');
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
// Test 12: /api/analytics/overview
|
|
149
|
-
it('GET /api/analytics/overview returns analytics', async () => {
|
|
150
|
-
const res = await fetch('/api/analytics/overview');
|
|
151
|
-
expect(res.status).toBe(200);
|
|
152
|
-
const data = JSON.parse(res.body);
|
|
153
|
-
expect(data).toHaveProperty('totalMessages');
|
|
154
|
-
expect(data).toHaveProperty('totalSessions');
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
// Test 13: /api/security/approvals
|
|
158
|
-
it('GET /api/security/approvals returns empty approvals', async () => {
|
|
159
|
-
const res = await fetch('/api/security/approvals');
|
|
160
|
-
expect(res.status).toBe(200);
|
|
161
|
-
const data = JSON.parse(res.body);
|
|
162
|
-
expect(data.approvals).toEqual([]);
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
// Test 14: /api/logs/recent returns lines array
|
|
166
|
-
it('GET /api/logs/recent returns lines', async () => {
|
|
167
|
-
const res = await fetch('/api/logs/recent');
|
|
168
|
-
expect(res.status).toBe(200);
|
|
169
|
-
const data = JSON.parse(res.body);
|
|
170
|
-
expect(Array.isArray(data.lines)).toBe(true);
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
// Test 15: SVG MIME type
|
|
174
|
-
it('serves .svg with correct MIME type', async () => {
|
|
175
|
-
const res = await fetch('/icon.svg');
|
|
176
|
-
expect(res.status).toBe(200);
|
|
177
|
-
expect(res.headers['content-type']).toBe('image/svg+xml');
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
// Test 16: /api/modules returns module status
|
|
181
|
-
it('GET /api/modules returns module status', async () => {
|
|
182
|
-
const res = await fetch('/api/modules');
|
|
183
|
-
expect(res.status).toBe(200);
|
|
184
|
-
const data = JSON.parse(res.body);
|
|
185
|
-
expect(data).toHaveProperty('modules');
|
|
186
|
-
expect(data.modules).toHaveLength(3);
|
|
187
|
-
expect(data.modules[0]).toHaveProperty('name', 'DeepBrain');
|
|
188
|
-
expect(data.modules[0]).toHaveProperty('running');
|
|
189
|
-
expect(data.modules[0]).toHaveProperty('port', 4001);
|
|
190
|
-
expect(data.modules[1]).toHaveProperty('name', 'AgentKits');
|
|
191
|
-
expect(data.modules[2]).toHaveProperty('name', 'Workstation');
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// Test 17: Proxy returns 502 when module not running
|
|
195
|
-
it('proxy returns 502 with friendly message when module not running', async () => {
|
|
196
|
-
const res = await fetch('/brain/');
|
|
197
|
-
expect(res.status).toBe(502);
|
|
198
|
-
expect(res.body).toContain('Module not running');
|
|
199
|
-
expect(res.body).toContain('DeepBrain');
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Test 18: Proxy routes are configured for all modules
|
|
203
|
-
it('proxy routes configured for all modules', async () => {
|
|
204
|
-
const brainRes = await fetch('/brain/');
|
|
205
|
-
const kitsRes = await fetch('/kits/');
|
|
206
|
-
const wsRes = await fetch('/workstation/');
|
|
207
|
-
// All should get 502 (not 200/SPA fallback) since no modules running
|
|
208
|
-
expect(brainRes.status).toBe(502);
|
|
209
|
-
expect(kitsRes.status).toBe(502);
|
|
210
|
-
expect(wsRes.status).toBe(502);
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
// Test 19: Studio UI contains dashboard and template pages
|
|
214
|
-
it('real index.html contains no-code agent pages', () => {
|
|
215
|
-
const realHtml = readFileSync(join(__dirname, '../src/studio-ui/index.html'), 'utf-8');
|
|
216
|
-
expect(realHtml).toContain('page-dashboard');
|
|
217
|
-
expect(realHtml).toContain('page-templates');
|
|
218
|
-
expect(realHtml).toContain('page-create');
|
|
219
|
-
expect(realHtml).toContain('page-chat');
|
|
220
|
-
expect(realHtml).toContain('page-memory');
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
// Test 20: Studio UI has navigation items
|
|
224
|
-
it('real index.html contains navigation items', () => {
|
|
225
|
-
const realHtml = readFileSync(join(__dirname, '../src/studio-ui/index.html'), 'utf-8');
|
|
226
|
-
expect(realHtml).toContain('data-page="dashboard"');
|
|
227
|
-
expect(realHtml).toContain('data-page="templates"');
|
|
228
|
-
expect(realHtml).toContain('data-page="create"');
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
// === No-Code Agent Platform API Tests ===
|
|
232
|
-
|
|
233
|
-
// Test 21: GET /api/templates returns templates list
|
|
234
|
-
it('GET /api/templates returns templates', async () => {
|
|
235
|
-
const res = await fetch('/api/templates');
|
|
236
|
-
expect(res.status).toBe(200);
|
|
237
|
-
const data = JSON.parse(res.body);
|
|
238
|
-
expect(data.templates).toBeDefined();
|
|
239
|
-
expect(data.templates.length).toBeGreaterThan(50);
|
|
240
|
-
expect(data.industries).toBeDefined();
|
|
241
|
-
expect(data.industries.length).toBe(19);
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
// Test 22: GET /api/templates with industry filter
|
|
245
|
-
it('GET /api/templates?industry=technology filters by industry', async () => {
|
|
246
|
-
const res = await fetch('/api/templates?industry=technology');
|
|
247
|
-
expect(res.status).toBe(200);
|
|
248
|
-
const data = JSON.parse(res.body);
|
|
249
|
-
expect(data.templates.every((t: any) => t.industry === 'technology')).toBe(true);
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
// Test 23: GET /api/templates with search
|
|
253
|
-
it('GET /api/templates?q=code filters by search', async () => {
|
|
254
|
-
const res = await fetch('/api/templates?q=code');
|
|
255
|
-
expect(res.status).toBe(200);
|
|
256
|
-
const data = JSON.parse(res.body);
|
|
257
|
-
expect(data.templates.length).toBeGreaterThan(0);
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
// Test 24: GET /api/templates/:id returns template detail
|
|
261
|
-
it('GET /api/templates/:id returns template', async () => {
|
|
262
|
-
const res = await fetch('/api/templates/code-reviewer');
|
|
263
|
-
expect(res.status).toBe(200);
|
|
264
|
-
const data = JSON.parse(res.body);
|
|
265
|
-
expect(data.id).toBe('code-reviewer');
|
|
266
|
-
expect(data.name).toContain('Code Reviewer');
|
|
267
|
-
expect(data.systemPrompt).toBeDefined();
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
// Test 25: GET /api/templates/:id returns 404 for unknown
|
|
271
|
-
it('GET /api/templates/:id returns 404 for unknown', async () => {
|
|
272
|
-
const res = await fetch('/api/templates/nonexistent-xyz');
|
|
273
|
-
expect(res.status).toBe(404);
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
// Test 26: POST /api/agents creates an agent
|
|
277
|
-
it('POST /api/agents creates an agent', async () => {
|
|
278
|
-
const res = await fetch('/api/agents', 'POST', JSON.stringify({
|
|
279
|
-
name: 'Test Agent',
|
|
280
|
-
templateId: 'code-reviewer',
|
|
281
|
-
description: 'Test company',
|
|
282
|
-
model: 'gpt-4o-mini',
|
|
283
|
-
language: 'en',
|
|
284
|
-
}));
|
|
285
|
-
expect(res.status).toBe(201);
|
|
286
|
-
const data = JSON.parse(res.body);
|
|
287
|
-
expect(data.id).toBeDefined();
|
|
288
|
-
expect(data.name).toBe('Test Agent');
|
|
289
|
-
expect(data.templateId).toBe('code-reviewer');
|
|
290
|
-
expect(data.model).toBe('gpt-4o-mini');
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
// Test 27: GET /api/agents lists agents
|
|
294
|
-
it('GET /api/agents lists created agents', async () => {
|
|
295
|
-
const res = await fetch('/api/agents');
|
|
296
|
-
expect(res.status).toBe(200);
|
|
297
|
-
const data = JSON.parse(res.body);
|
|
298
|
-
expect(data.agents.length).toBeGreaterThan(0);
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
// Test 28: GET /api/agents/:id returns agent detail
|
|
302
|
-
it('GET /api/agents/:id returns agent', async () => {
|
|
303
|
-
// First create one
|
|
304
|
-
const createRes = await fetch('/api/agents', 'POST', JSON.stringify({
|
|
305
|
-
name: 'Detail Test Agent',
|
|
306
|
-
templateId: 'tech-support',
|
|
307
|
-
}));
|
|
308
|
-
const agent = JSON.parse(createRes.body);
|
|
309
|
-
|
|
310
|
-
const res = await fetch(`/api/agents/${agent.id}`);
|
|
311
|
-
expect(res.status).toBe(200);
|
|
312
|
-
const data = JSON.parse(res.body);
|
|
313
|
-
expect(data.name).toBe('Detail Test Agent');
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
// Test 29: PUT /api/agents/:id updates agent
|
|
317
|
-
it('PUT /api/agents/:id updates agent', async () => {
|
|
318
|
-
const createRes = await fetch('/api/agents', 'POST', JSON.stringify({ name: 'Old Name', templateId: 'tech-support' }));
|
|
319
|
-
const agent = JSON.parse(createRes.body);
|
|
320
|
-
|
|
321
|
-
const res = await fetch(`/api/agents/${agent.id}`, 'PUT', JSON.stringify({ name: 'New Name' }));
|
|
322
|
-
expect(res.status).toBe(200);
|
|
323
|
-
const data = JSON.parse(res.body);
|
|
324
|
-
expect(data.name).toBe('New Name');
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
// Test 30: DELETE /api/agents/:id deletes agent
|
|
328
|
-
it('DELETE /api/agents/:id deletes agent', async () => {
|
|
329
|
-
const createRes = await fetch('/api/agents', 'POST', JSON.stringify({ name: 'To Delete', templateId: 'tech-support' }));
|
|
330
|
-
const agent = JSON.parse(createRes.body);
|
|
331
|
-
|
|
332
|
-
const delRes = await fetch(`/api/agents/${agent.id}`, 'DELETE');
|
|
333
|
-
expect(delRes.status).toBe(200);
|
|
334
|
-
|
|
335
|
-
const getRes = await fetch(`/api/agents/${agent.id}`);
|
|
336
|
-
const data = JSON.parse(getRes.body);
|
|
337
|
-
expect(data.error).toBeDefined();
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
// Test 31: GET /api/agents/:id/memory returns memory
|
|
341
|
-
it('GET /api/agents/:id/memory returns empty memory', async () => {
|
|
342
|
-
const createRes = await fetch('/api/agents', 'POST', JSON.stringify({ name: 'Memory Test', templateId: 'tech-support' }));
|
|
343
|
-
const agent = JSON.parse(createRes.body);
|
|
344
|
-
|
|
345
|
-
const res = await fetch(`/api/agents/${agent.id}/memory`);
|
|
346
|
-
expect(res.status).toBe(200);
|
|
347
|
-
const data = JSON.parse(res.body);
|
|
348
|
-
expect(data.entries).toBeDefined();
|
|
349
|
-
expect(data.timeline).toBeDefined();
|
|
350
|
-
});
|
|
351
|
-
|
|
352
|
-
// Test 32: POST /api/agents/:id/chat returns streaming response
|
|
353
|
-
it('POST /api/agents/:id/chat returns response', async () => {
|
|
354
|
-
const createRes = await fetch('/api/agents', 'POST', JSON.stringify({ name: 'Chat Test', templateId: 'tech-support' }));
|
|
355
|
-
const agent = JSON.parse(createRes.body);
|
|
356
|
-
|
|
357
|
-
const res = await fetch(`/api/agents/${agent.id}/chat`, 'POST', JSON.stringify({
|
|
358
|
-
messages: [{ role: 'user', content: 'Hello' }],
|
|
359
|
-
}));
|
|
360
|
-
expect(res.status).toBe(200);
|
|
361
|
-
expect(res.body.length).toBeGreaterThan(0);
|
|
362
|
-
});
|
|
363
|
-
|
|
364
|
-
// Test 33: Unknown agent returns 404
|
|
365
|
-
it('GET /api/agents/unknown returns 404', async () => {
|
|
366
|
-
const res = await fetch('/api/agents/agent-nonexistent-xyz');
|
|
367
|
-
expect(res.status).toBe(404);
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
// Test 34: GET /api/first-run/status returns firstRun boolean
|
|
371
|
-
it('GET /api/first-run/status returns firstRun boolean and ollamaDetected', async () => {
|
|
372
|
-
const res = await fetch('/api/first-run/status');
|
|
373
|
-
expect(res.status).toBe(200);
|
|
374
|
-
const data = JSON.parse(res.body);
|
|
375
|
-
expect(data).toHaveProperty('firstRun');
|
|
376
|
-
expect(typeof data.firstRun).toBe('boolean');
|
|
377
|
-
expect(data).toHaveProperty('ollamaDetected');
|
|
378
|
-
expect(typeof data.ollamaDetected).toBe('boolean');
|
|
379
|
-
expect(data).toHaveProperty('ollamaModels');
|
|
380
|
-
expect(Array.isArray(data.ollamaModels)).toBe(true);
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
// Test 35: POST /api/first-run/complete creates config
|
|
384
|
-
it('POST /api/first-run/complete saves setup choices and returns success', async () => {
|
|
385
|
-
const res = await fetch('/api/first-run/complete', 'POST', JSON.stringify({
|
|
386
|
-
templateId: 'customer-service',
|
|
387
|
-
model: 'qwen2.5:7b',
|
|
388
|
-
}));
|
|
389
|
-
expect(res.status).toBe(200);
|
|
390
|
-
const data = JSON.parse(res.body);
|
|
391
|
-
expect(data.success).toBe(true);
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
// Test 36: First run status is false after complete
|
|
395
|
-
it('first-run status shows firstRun=false after complete is called', async () => {
|
|
396
|
-
await fetch('/api/first-run/complete', 'POST', JSON.stringify({}));
|
|
397
|
-
const res = await fetch('/api/first-run/status');
|
|
398
|
-
expect(res.status).toBe(200);
|
|
399
|
-
const data = JSON.parse(res.body);
|
|
400
|
-
expect(data.firstRun).toBe(false);
|
|
401
|
-
});
|
|
402
|
-
});
|
package/tests/subagent.test.ts
DELETED
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { SubAgentManager } from '../src/core/subagent';
|
|
3
|
-
import { BaseAgent } from '../src/core/agent';
|
|
4
|
-
|
|
5
|
-
// Mock the provider so we don't need real API keys
|
|
6
|
-
vi.mock('../src/providers', () => ({
|
|
7
|
-
createProvider: vi.fn(() => ({
|
|
8
|
-
name: 'mock',
|
|
9
|
-
chat: vi.fn().mockResolvedValue('mock response'),
|
|
10
|
-
chatStream: vi.fn(),
|
|
11
|
-
})),
|
|
12
|
-
SUPPORTED_PROVIDERS: ['openai'],
|
|
13
|
-
}));
|
|
14
|
-
|
|
15
|
-
describe('SubAgentManager', () => {
|
|
16
|
-
let manager: SubAgentManager;
|
|
17
|
-
|
|
18
|
-
beforeEach(() => {
|
|
19
|
-
manager = new SubAgentManager();
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should spawn a sub-agent and return result', async () => {
|
|
23
|
-
const result = await manager.spawn({
|
|
24
|
-
name: 'test-agent',
|
|
25
|
-
task: 'Hello',
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
expect(result.name).toBe('test-agent');
|
|
29
|
-
expect(result.status).toBe('completed');
|
|
30
|
-
expect(result.result).toBe('mock response');
|
|
31
|
-
expect(result.duration).toBeGreaterThanOrEqual(0);
|
|
32
|
-
expect(result.id).toMatch(/^sub_/);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('should track agents in list', async () => {
|
|
36
|
-
await manager.spawn({ name: 'agent-1', task: 'task 1' });
|
|
37
|
-
await manager.spawn({ name: 'agent-2', task: 'task 2' });
|
|
38
|
-
|
|
39
|
-
const list = manager.list();
|
|
40
|
-
expect(list).toHaveLength(2);
|
|
41
|
-
expect(list[0].status).toBe('completed');
|
|
42
|
-
expect(list[1].status).toBe('completed');
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('should spawn parallel agents', async () => {
|
|
46
|
-
const results = await manager.spawnParallel([
|
|
47
|
-
{ name: 'p1', task: 'task 1' },
|
|
48
|
-
{ name: 'p2', task: 'task 2' },
|
|
49
|
-
{ name: 'p3', task: 'task 3' },
|
|
50
|
-
]);
|
|
51
|
-
|
|
52
|
-
expect(results).toHaveLength(3);
|
|
53
|
-
results.forEach((r) => {
|
|
54
|
-
expect(r.status).toBe('completed');
|
|
55
|
-
expect(r.result).toBe('mock response');
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('should kill a sub-agent', async () => {
|
|
60
|
-
const result = await manager.spawn({ name: 'killable', task: 'task' });
|
|
61
|
-
|
|
62
|
-
expect(manager.kill(result.id)).toBe(true);
|
|
63
|
-
const list = manager.list();
|
|
64
|
-
const killed = list.find((a) => a.id === result.id);
|
|
65
|
-
expect(killed?.status).toBe('killed');
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('should return false when killing non-existent agent', () => {
|
|
69
|
-
expect(manager.kill('non-existent')).toBe(false);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should handle timeout', async () => {
|
|
73
|
-
const { createProvider } = await import('../src/providers');
|
|
74
|
-
(createProvider as ReturnType<typeof vi.fn>).mockReturnValueOnce({
|
|
75
|
-
name: 'mock-slow',
|
|
76
|
-
chat: () => new Promise((resolve) => setTimeout(() => resolve('late'), 5000)),
|
|
77
|
-
chatStream: vi.fn(),
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
const result = await manager.spawn({
|
|
81
|
-
name: 'slow-agent',
|
|
82
|
-
task: 'slow task',
|
|
83
|
-
timeout: 50,
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
expect(result.status).toBe('timeout');
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('should handle failed agents', async () => {
|
|
90
|
-
const { createProvider } = await import('../src/providers');
|
|
91
|
-
(createProvider as ReturnType<typeof vi.fn>).mockReturnValueOnce({
|
|
92
|
-
name: 'mock-fail',
|
|
93
|
-
chat: () => Promise.reject(new Error('provider error')),
|
|
94
|
-
chatStream: vi.fn(),
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
const result = await manager.spawn({
|
|
98
|
-
name: 'fail-agent',
|
|
99
|
-
task: 'fail task',
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
expect(result.status).toBe('failed');
|
|
103
|
-
expect(result.result).toBe('provider error');
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it('should list empty when no agents spawned', () => {
|
|
107
|
-
expect(manager.list()).toEqual([]);
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it('should use isolated memory by default', async () => {
|
|
111
|
-
const result = await manager.spawn({
|
|
112
|
-
name: 'isolated',
|
|
113
|
-
task: 'test',
|
|
114
|
-
isolated: true,
|
|
115
|
-
});
|
|
116
|
-
expect(result.status).toBe('completed');
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('should spawn with custom systemPrompt', async () => {
|
|
120
|
-
const result = await manager.spawn({
|
|
121
|
-
name: 'custom-prompt',
|
|
122
|
-
task: 'test',
|
|
123
|
-
systemPrompt: 'You are a custom assistant',
|
|
124
|
-
});
|
|
125
|
-
expect(result.status).toBe('completed');
|
|
126
|
-
expect(result.name).toBe('custom-prompt');
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it('should spawn with custom model', async () => {
|
|
130
|
-
const result = await manager.spawn({
|
|
131
|
-
name: 'custom-model',
|
|
132
|
-
task: 'test',
|
|
133
|
-
model: 'gpt-4',
|
|
134
|
-
});
|
|
135
|
-
expect(result.status).toBe('completed');
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
it('spawnParallel returns all results even with mix', async () => {
|
|
139
|
-
const results = await manager.spawnParallel([
|
|
140
|
-
{ name: 'a', task: 't1' },
|
|
141
|
-
{ name: 'b', task: 't2' },
|
|
142
|
-
]);
|
|
143
|
-
expect(results).toHaveLength(2);
|
|
144
|
-
expect(results.every(r => r.result === 'mock response')).toBe(true);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it('kill returns false for unknown id', () => {
|
|
148
|
-
expect(manager.kill('unknown-id-xyz')).toBe(false);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
it('list shows correct status after completion', async () => {
|
|
152
|
-
await manager.spawn({ name: 'done', task: 'task' });
|
|
153
|
-
const list = manager.list();
|
|
154
|
-
expect(list.every(a => a.status === 'completed')).toBe(true);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('sub-agent name is preserved in result', async () => {
|
|
158
|
-
const result = await manager.spawn({ name: 'my-special-name', task: 'x' });
|
|
159
|
-
expect(result.name).toBe('my-special-name');
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
it('multiple sequential spawns tracked correctly', async () => {
|
|
163
|
-
await manager.spawn({ name: 's1', task: 't' });
|
|
164
|
-
await manager.spawn({ name: 's2', task: 't' });
|
|
165
|
-
await manager.spawn({ name: 's3', task: 't' });
|
|
166
|
-
const list = manager.list();
|
|
167
|
-
expect(list).toHaveLength(3);
|
|
168
|
-
expect(new Set(list.map(a => a.id)).size).toBe(3);
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('each spawn gets unique id', async () => {
|
|
172
|
-
const r1 = await manager.spawn({ name: 'x', task: 't' });
|
|
173
|
-
const r2 = await manager.spawn({ name: 'x', task: 't' });
|
|
174
|
-
expect(r1.id).not.toBe(r2.id);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it('result duration is non-negative', async () => {
|
|
178
|
-
const result = await manager.spawn({ name: 'dur', task: 'test' });
|
|
179
|
-
expect(result.duration).toBeGreaterThanOrEqual(0);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
describe('BaseAgent subagent methods', () => {
|
|
184
|
-
it('should have spawnSubAgent method', () => {
|
|
185
|
-
const agent = new BaseAgent({ name: 'parent' });
|
|
186
|
-
expect(typeof agent.spawnSubAgent).toBe('function');
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
it('should have spawnParallel method', () => {
|
|
190
|
-
const agent = new BaseAgent({ name: 'parent' });
|
|
191
|
-
expect(typeof agent.spawnParallel).toBe('function');
|
|
192
|
-
});
|
|
193
|
-
});
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { TelegramChannel } from '../src/channels/telegram';
|
|
3
|
-
import { DiscordChannel } from '../src/channels/discord';
|
|
4
|
-
|
|
5
|
-
describe('TelegramChannel', () => {
|
|
6
|
-
it('should create with default config (polling mode)', () => {
|
|
7
|
-
const channel = new TelegramChannel({ token: 'test-token' });
|
|
8
|
-
expect(channel.type).toBe('telegram');
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('should create with webhook mode', () => {
|
|
12
|
-
const channel = new TelegramChannel({
|
|
13
|
-
token: 'test-token',
|
|
14
|
-
mode: 'webhook',
|
|
15
|
-
webhookUrl: 'https://example.com',
|
|
16
|
-
port: 4000,
|
|
17
|
-
});
|
|
18
|
-
expect(channel.type).toBe('telegram');
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('should warn and return if no token on start', async () => {
|
|
22
|
-
const channel = new TelegramChannel({ token: '' });
|
|
23
|
-
// Should not throw, just warn
|
|
24
|
-
await channel.start();
|
|
25
|
-
await channel.stop();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('should support onMessage handler', () => {
|
|
29
|
-
const channel = new TelegramChannel({ token: 'test-token' });
|
|
30
|
-
const handler = async (msg: any) => ({ ...msg, role: 'assistant' as const });
|
|
31
|
-
channel.onMessage(handler);
|
|
32
|
-
// No throw = success
|
|
33
|
-
expect(channel.type).toBe('telegram');
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe('DiscordChannel', () => {
|
|
38
|
-
it('should create with default config', () => {
|
|
39
|
-
const channel = new DiscordChannel({ botToken: 'test-token' });
|
|
40
|
-
expect(channel.type).toBe('discord');
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should warn and return if no token on start', async () => {
|
|
44
|
-
const channel = new DiscordChannel({ botToken: '' });
|
|
45
|
-
await channel.start();
|
|
46
|
-
await channel.stop();
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('should support onMessage handler', () => {
|
|
50
|
-
const channel = new DiscordChannel({ botToken: 'test-token' });
|
|
51
|
-
const handler = async (msg: any) => ({ ...msg, role: 'assistant' as const });
|
|
52
|
-
channel.onMessage(handler);
|
|
53
|
-
expect(channel.type).toBe('discord');
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('should handle stop gracefully when not started', async () => {
|
|
57
|
-
const channel = new DiscordChannel({ botToken: 'test-token' });
|
|
58
|
-
await channel.stop(); // Should not throw
|
|
59
|
-
});
|
|
60
|
-
});
|