@useconductor/conductor 1.0.0
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/.claude-plugin/marketplace.json +33 -0
- package/.claude-plugin/plugin.json +23 -0
- package/.eslintrc.json +23 -0
- package/.gitattributes +6 -0
- package/.github/FUNDING.yml +15 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +91 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +63 -0
- package/.github/ISSUE_TEMPLATE/plugin_request.yml +71 -0
- package/.github/README.md +13 -0
- package/.github/workflows/README.md +22 -0
- package/.github/workflows/auto-release.yml +112 -0
- package/.github/workflows/ci.yml +49 -0
- package/.github/workflows/claude-code-review.yml +44 -0
- package/.github/workflows/claude.yml +36 -0
- package/.github/workflows/sync-install.yml +47 -0
- package/.mcp.json +9 -0
- package/.prettierrc.json +7 -0
- package/C.png +0 -0
- package/CHANGELOG.md +74 -0
- package/CLAUDE.md +118 -0
- package/CONTRIBUTING.md +231 -0
- package/LICENSE +201 -0
- package/README.md +179 -0
- package/SECURITY.md +47 -0
- package/commands/conductor-setup.md +11 -0
- package/commands/conductor-status.md +7 -0
- package/dist/ai/base.d.ts +44 -0
- package/dist/ai/base.d.ts.map +1 -0
- package/dist/ai/base.js +47 -0
- package/dist/ai/base.js.map +1 -0
- package/dist/ai/claude.d.ts +11 -0
- package/dist/ai/claude.d.ts.map +1 -0
- package/dist/ai/claude.js +149 -0
- package/dist/ai/claude.js.map +1 -0
- package/dist/ai/gemini.d.ts +15 -0
- package/dist/ai/gemini.d.ts.map +1 -0
- package/dist/ai/gemini.js +156 -0
- package/dist/ai/gemini.js.map +1 -0
- package/dist/ai/maestro.d.ts +22 -0
- package/dist/ai/maestro.d.ts.map +1 -0
- package/dist/ai/maestro.js +142 -0
- package/dist/ai/maestro.js.map +1 -0
- package/dist/ai/manager.d.ts +47 -0
- package/dist/ai/manager.d.ts.map +1 -0
- package/dist/ai/manager.js +450 -0
- package/dist/ai/manager.js.map +1 -0
- package/dist/ai/ollama.d.ts +16 -0
- package/dist/ai/ollama.d.ts.map +1 -0
- package/dist/ai/ollama.js +151 -0
- package/dist/ai/ollama.js.map +1 -0
- package/dist/ai/openai.d.ts +11 -0
- package/dist/ai/openai.d.ts.map +1 -0
- package/dist/ai/openai.js +132 -0
- package/dist/ai/openai.js.map +1 -0
- package/dist/ai/openrouter.d.ts +11 -0
- package/dist/ai/openrouter.d.ts.map +1 -0
- package/dist/ai/openrouter.js +139 -0
- package/dist/ai/openrouter.js.map +1 -0
- package/dist/bot/slack.d.ts +17 -0
- package/dist/bot/slack.d.ts.map +1 -0
- package/dist/bot/slack.js +144 -0
- package/dist/bot/slack.js.map +1 -0
- package/dist/bot/telegram.d.ts +19 -0
- package/dist/bot/telegram.d.ts.map +1 -0
- package/dist/bot/telegram.js +157 -0
- package/dist/bot/telegram.js.map +1 -0
- package/dist/cli/commands/ai.d.ts +4 -0
- package/dist/cli/commands/ai.d.ts.map +1 -0
- package/dist/cli/commands/ai.js +161 -0
- package/dist/cli/commands/ai.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +18 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +213 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +15 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +281 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +16 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +750 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/lifecycle.d.ts +4 -0
- package/dist/cli/commands/lifecycle.d.ts.map +1 -0
- package/dist/cli/commands/lifecycle.js +84 -0
- package/dist/cli/commands/lifecycle.js.map +1 -0
- package/dist/cli/commands/marketplace.d.ts +13 -0
- package/dist/cli/commands/marketplace.d.ts.map +1 -0
- package/dist/cli/commands/marketplace.js +197 -0
- package/dist/cli/commands/marketplace.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +6 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +83 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/onboard.d.ts +10 -0
- package/dist/cli/commands/onboard.d.ts.map +1 -0
- package/dist/cli/commands/onboard.js +207 -0
- package/dist/cli/commands/onboard.js.map +1 -0
- package/dist/cli/commands/plugin-create.d.ts +13 -0
- package/dist/cli/commands/plugin-create.d.ts.map +1 -0
- package/dist/cli/commands/plugin-create.js +122 -0
- package/dist/cli/commands/plugin-create.js.map +1 -0
- package/dist/cli/commands/plugins.d.ts +5 -0
- package/dist/cli/commands/plugins.d.ts.map +1 -0
- package/dist/cli/commands/plugins.js +30 -0
- package/dist/cli/commands/plugins.js.map +1 -0
- package/dist/cli/commands/release.d.ts +13 -0
- package/dist/cli/commands/release.d.ts.map +1 -0
- package/dist/cli/commands/release.js +243 -0
- package/dist/cli/commands/release.js.map +1 -0
- package/dist/cli/commands/telegram.d.ts +3 -0
- package/dist/cli/commands/telegram.d.ts.map +1 -0
- package/dist/cli/commands/telegram.js +20 -0
- package/dist/cli/commands/telegram.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +402 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/oauth.d.ts +8 -0
- package/dist/config/oauth.d.ts.map +1 -0
- package/dist/config/oauth.js +13 -0
- package/dist/config/oauth.js.map +1 -0
- package/dist/core/audit.d.ts +91 -0
- package/dist/core/audit.d.ts.map +1 -0
- package/dist/core/audit.js +233 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/circuit-breaker.d.ts +56 -0
- package/dist/core/circuit-breaker.d.ts.map +1 -0
- package/dist/core/circuit-breaker.js +107 -0
- package/dist/core/circuit-breaker.js.map +1 -0
- package/dist/core/conductor.d.ts +44 -0
- package/dist/core/conductor.d.ts.map +1 -0
- package/dist/core/conductor.js +200 -0
- package/dist/core/conductor.js.map +1 -0
- package/dist/core/config.d.ts +66 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +86 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/database.d.ts +59 -0
- package/dist/core/database.d.ts.map +1 -0
- package/dist/core/database.js +342 -0
- package/dist/core/database.js.map +1 -0
- package/dist/core/errors.d.ts +231 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +254 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/health.d.ts +72 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +116 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/interfaces.d.ts +62 -0
- package/dist/core/interfaces.d.ts.map +1 -0
- package/dist/core/interfaces.js +8 -0
- package/dist/core/interfaces.js.map +1 -0
- package/dist/core/logger.d.ts +15 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +30 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/rbac.d.ts +132 -0
- package/dist/core/rbac.d.ts.map +1 -0
- package/dist/core/rbac.js +230 -0
- package/dist/core/rbac.js.map +1 -0
- package/dist/core/retry.d.ts +22 -0
- package/dist/core/retry.d.ts.map +1 -0
- package/dist/core/retry.js +41 -0
- package/dist/core/retry.js.map +1 -0
- package/dist/core/webhooks.d.ts +92 -0
- package/dist/core/webhooks.d.ts.map +1 -0
- package/dist/core/webhooks.js +176 -0
- package/dist/core/webhooks.js.map +1 -0
- package/dist/core/zero-config.d.ts +22 -0
- package/dist/core/zero-config.d.ts.map +1 -0
- package/dist/core/zero-config.js +59 -0
- package/dist/core/zero-config.js.map +1 -0
- package/dist/dashboard/cli.d.ts +6 -0
- package/dist/dashboard/cli.d.ts.map +1 -0
- package/dist/dashboard/cli.js +42 -0
- package/dist/dashboard/cli.js.map +1 -0
- package/dist/dashboard/index.html +3426 -0
- package/dist/dashboard/server.d.ts +7 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +1427 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/mcp/server.d.ts +27 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +380 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/misc.d.ts +15 -0
- package/dist/mcp/tools/misc.d.ts.map +1 -0
- package/dist/mcp/tools/misc.js +49 -0
- package/dist/mcp/tools/misc.js.map +1 -0
- package/dist/plugins/builtin/calculator.d.ts +11 -0
- package/dist/plugins/builtin/calculator.d.ts.map +1 -0
- package/dist/plugins/builtin/calculator.js +166 -0
- package/dist/plugins/builtin/calculator.js.map +1 -0
- package/dist/plugins/builtin/colors.d.ts +15 -0
- package/dist/plugins/builtin/colors.d.ts.map +1 -0
- package/dist/plugins/builtin/colors.js +193 -0
- package/dist/plugins/builtin/colors.js.map +1 -0
- package/dist/plugins/builtin/cron.d.ts +40 -0
- package/dist/plugins/builtin/cron.d.ts.map +1 -0
- package/dist/plugins/builtin/cron.js +578 -0
- package/dist/plugins/builtin/cron.js.map +1 -0
- package/dist/plugins/builtin/crypto.d.ts +11 -0
- package/dist/plugins/builtin/crypto.d.ts.map +1 -0
- package/dist/plugins/builtin/crypto.js +83 -0
- package/dist/plugins/builtin/crypto.js.map +1 -0
- package/dist/plugins/builtin/database.d.ts +29 -0
- package/dist/plugins/builtin/database.d.ts.map +1 -0
- package/dist/plugins/builtin/database.js +230 -0
- package/dist/plugins/builtin/database.js.map +1 -0
- package/dist/plugins/builtin/docker.d.ts +12 -0
- package/dist/plugins/builtin/docker.d.ts.map +1 -0
- package/dist/plugins/builtin/docker.js +436 -0
- package/dist/plugins/builtin/docker.js.map +1 -0
- package/dist/plugins/builtin/fun.d.ts +11 -0
- package/dist/plugins/builtin/fun.d.ts.map +1 -0
- package/dist/plugins/builtin/fun.js +114 -0
- package/dist/plugins/builtin/fun.js.map +1 -0
- package/dist/plugins/builtin/gcal.d.ts +38 -0
- package/dist/plugins/builtin/gcal.d.ts.map +1 -0
- package/dist/plugins/builtin/gcal.js +280 -0
- package/dist/plugins/builtin/gcal.js.map +1 -0
- package/dist/plugins/builtin/gdrive.d.ts +26 -0
- package/dist/plugins/builtin/gdrive.d.ts.map +1 -0
- package/dist/plugins/builtin/gdrive.js +295 -0
- package/dist/plugins/builtin/gdrive.js.map +1 -0
- package/dist/plugins/builtin/github-actions.d.ts +38 -0
- package/dist/plugins/builtin/github-actions.d.ts.map +1 -0
- package/dist/plugins/builtin/github-actions.js +629 -0
- package/dist/plugins/builtin/github-actions.js.map +1 -0
- package/dist/plugins/builtin/github.d.ts +26 -0
- package/dist/plugins/builtin/github.d.ts.map +1 -0
- package/dist/plugins/builtin/github.js +800 -0
- package/dist/plugins/builtin/github.js.map +1 -0
- package/dist/plugins/builtin/gmail.d.ts +50 -0
- package/dist/plugins/builtin/gmail.d.ts.map +1 -0
- package/dist/plugins/builtin/gmail.js +445 -0
- package/dist/plugins/builtin/gmail.js.map +1 -0
- package/dist/plugins/builtin/hash.d.ts +11 -0
- package/dist/plugins/builtin/hash.d.ts.map +1 -0
- package/dist/plugins/builtin/hash.js +95 -0
- package/dist/plugins/builtin/hash.js.map +1 -0
- package/dist/plugins/builtin/homekit.d.ts +53 -0
- package/dist/plugins/builtin/homekit.d.ts.map +1 -0
- package/dist/plugins/builtin/homekit.js +341 -0
- package/dist/plugins/builtin/homekit.js.map +1 -0
- package/dist/plugins/builtin/index.d.ts +4 -0
- package/dist/plugins/builtin/index.d.ts.map +1 -0
- package/dist/plugins/builtin/index.js +96 -0
- package/dist/plugins/builtin/index.js.map +1 -0
- package/dist/plugins/builtin/jira.d.ts +50 -0
- package/dist/plugins/builtin/jira.d.ts.map +1 -0
- package/dist/plugins/builtin/jira.js +353 -0
- package/dist/plugins/builtin/jira.js.map +1 -0
- package/dist/plugins/builtin/linear.d.ts +35 -0
- package/dist/plugins/builtin/linear.d.ts.map +1 -0
- package/dist/plugins/builtin/linear.js +397 -0
- package/dist/plugins/builtin/linear.js.map +1 -0
- package/dist/plugins/builtin/lumen.d.ts +21 -0
- package/dist/plugins/builtin/lumen.d.ts.map +1 -0
- package/dist/plugins/builtin/lumen.js +404 -0
- package/dist/plugins/builtin/lumen.js.map +1 -0
- package/dist/plugins/builtin/memory.d.ts +22 -0
- package/dist/plugins/builtin/memory.d.ts.map +1 -0
- package/dist/plugins/builtin/memory.js +184 -0
- package/dist/plugins/builtin/memory.js.map +1 -0
- package/dist/plugins/builtin/n8n.d.ts +60 -0
- package/dist/plugins/builtin/n8n.d.ts.map +1 -0
- package/dist/plugins/builtin/n8n.js +519 -0
- package/dist/plugins/builtin/n8n.js.map +1 -0
- package/dist/plugins/builtin/network.d.ts +11 -0
- package/dist/plugins/builtin/network.d.ts.map +1 -0
- package/dist/plugins/builtin/network.js +88 -0
- package/dist/plugins/builtin/network.js.map +1 -0
- package/dist/plugins/builtin/notes.d.ts +47 -0
- package/dist/plugins/builtin/notes.d.ts.map +1 -0
- package/dist/plugins/builtin/notes.js +641 -0
- package/dist/plugins/builtin/notes.js.map +1 -0
- package/dist/plugins/builtin/notion.d.ts +47 -0
- package/dist/plugins/builtin/notion.d.ts.map +1 -0
- package/dist/plugins/builtin/notion.js +317 -0
- package/dist/plugins/builtin/notion.js.map +1 -0
- package/dist/plugins/builtin/shell.d.ts +12 -0
- package/dist/plugins/builtin/shell.d.ts.map +1 -0
- package/dist/plugins/builtin/shell.js +310 -0
- package/dist/plugins/builtin/shell.js.map +1 -0
- package/dist/plugins/builtin/slack.d.ts +31 -0
- package/dist/plugins/builtin/slack.d.ts.map +1 -0
- package/dist/plugins/builtin/slack.js +295 -0
- package/dist/plugins/builtin/slack.js.map +1 -0
- package/dist/plugins/builtin/spotify.d.ts +55 -0
- package/dist/plugins/builtin/spotify.d.ts.map +1 -0
- package/dist/plugins/builtin/spotify.js +623 -0
- package/dist/plugins/builtin/spotify.js.map +1 -0
- package/dist/plugins/builtin/stripe.d.ts +35 -0
- package/dist/plugins/builtin/stripe.d.ts.map +1 -0
- package/dist/plugins/builtin/stripe.js +376 -0
- package/dist/plugins/builtin/stripe.js.map +1 -0
- package/dist/plugins/builtin/system.d.ts +11 -0
- package/dist/plugins/builtin/system.d.ts.map +1 -0
- package/dist/plugins/builtin/system.js +91 -0
- package/dist/plugins/builtin/system.js.map +1 -0
- package/dist/plugins/builtin/text-tools.d.ts +11 -0
- package/dist/plugins/builtin/text-tools.d.ts.map +1 -0
- package/dist/plugins/builtin/text-tools.js +146 -0
- package/dist/plugins/builtin/text-tools.js.map +1 -0
- package/dist/plugins/builtin/timezone.d.ts +13 -0
- package/dist/plugins/builtin/timezone.d.ts.map +1 -0
- package/dist/plugins/builtin/timezone.js +164 -0
- package/dist/plugins/builtin/timezone.js.map +1 -0
- package/dist/plugins/builtin/todoist.d.ts +49 -0
- package/dist/plugins/builtin/todoist.d.ts.map +1 -0
- package/dist/plugins/builtin/todoist.js +540 -0
- package/dist/plugins/builtin/todoist.js.map +1 -0
- package/dist/plugins/builtin/translate.d.ts +11 -0
- package/dist/plugins/builtin/translate.d.ts.map +1 -0
- package/dist/plugins/builtin/translate.js +42 -0
- package/dist/plugins/builtin/translate.js.map +1 -0
- package/dist/plugins/builtin/url-tools.d.ts +11 -0
- package/dist/plugins/builtin/url-tools.d.ts.map +1 -0
- package/dist/plugins/builtin/url-tools.js +70 -0
- package/dist/plugins/builtin/url-tools.js.map +1 -0
- package/dist/plugins/builtin/vercel.d.ts +55 -0
- package/dist/plugins/builtin/vercel.d.ts.map +1 -0
- package/dist/plugins/builtin/vercel.js +514 -0
- package/dist/plugins/builtin/vercel.js.map +1 -0
- package/dist/plugins/builtin/weather.d.ts +13 -0
- package/dist/plugins/builtin/weather.d.ts.map +1 -0
- package/dist/plugins/builtin/weather.js +103 -0
- package/dist/plugins/builtin/weather.js.map +1 -0
- package/dist/plugins/builtin/x.d.ts +54 -0
- package/dist/plugins/builtin/x.d.ts.map +1 -0
- package/dist/plugins/builtin/x.js +402 -0
- package/dist/plugins/builtin/x.js.map +1 -0
- package/dist/plugins/manager.d.ts +77 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +141 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/validation.d.ts +18 -0
- package/dist/plugins/validation.d.ts.map +1 -0
- package/dist/plugins/validation.js +81 -0
- package/dist/plugins/validation.js.map +1 -0
- package/dist/security/auth.d.ts +23 -0
- package/dist/security/auth.d.ts.map +1 -0
- package/dist/security/auth.js +56 -0
- package/dist/security/auth.js.map +1 -0
- package/dist/security/keychain.d.ts +60 -0
- package/dist/security/keychain.d.ts.map +1 -0
- package/dist/security/keychain.js +213 -0
- package/dist/security/keychain.js.map +1 -0
- package/dist/utils/google-auth.d.ts +21 -0
- package/dist/utils/google-auth.d.ts.map +1 -0
- package/dist/utils/google-auth.js +135 -0
- package/dist/utils/google-auth.js.map +1 -0
- package/dist/utils/retry.d.ts +5 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +34 -0
- package/dist/utils/retry.js.map +1 -0
- package/docs/README.md +13 -0
- package/docs/api.md +210 -0
- package/docs/getting-started.md +100 -0
- package/docs/plugins.md +306 -0
- package/docs-site/.vitepress/config.ts +59 -0
- package/docs-site/README.md +12 -0
- package/docs-site/index.md +30 -0
- package/eslint.config.js +29 -0
- package/install.ps1 +334 -0
- package/install.sh +1119 -0
- package/local-install.sh +304 -0
- package/package.json +90 -0
- package/packages/README.md +11 -0
- package/packages/plugin-sdk/README.md +12 -0
- package/packages/plugin-sdk/package.json +22 -0
- package/packages/plugin-sdk/src/README.md +11 -0
- package/packages/plugin-sdk/src/index.ts +191 -0
- package/sdks/README.md +26 -0
- package/sdks/csharp/ConductorClient.cs +65 -0
- package/sdks/csharp/README.md +11 -0
- package/sdks/go/README.md +11 -0
- package/sdks/go/conductor.go +257 -0
- package/sdks/java/ConductorClient.java +27 -0
- package/sdks/java/README.md +11 -0
- package/sdks/php/README.md +11 -0
- package/sdks/php/src/Client.php +72 -0
- package/sdks/python/README.md +12 -0
- package/sdks/python/conductor/__init__.py +227 -0
- package/sdks/python/pyproject.toml +30 -0
- package/sdks/ruby/README.md +11 -0
- package/sdks/ruby/lib/conductor.rb +46 -0
- package/sdks/rust/Cargo.toml +14 -0
- package/sdks/rust/README.md +11 -0
- package/sdks/swift/README.md +11 -0
- package/sdks/swift/Sources/Conductor/ConductorClient.swift +65 -0
- package/skills/conductor-mcp/SKILL.md +38 -0
- package/src/README.md +20 -0
- package/src/ai/README.md +18 -0
- package/src/ai/base.ts +93 -0
- package/src/ai/claude.ts +162 -0
- package/src/ai/gemini.ts +188 -0
- package/src/ai/maestro.ts +168 -0
- package/src/ai/manager.ts +537 -0
- package/src/ai/ollama.ts +186 -0
- package/src/ai/openai.ts +147 -0
- package/src/ai/openrouter.ts +152 -0
- package/src/bot/README.md +12 -0
- package/src/bot/slack.ts +164 -0
- package/src/bot/telegram.ts +185 -0
- package/src/cli/README.md +24 -0
- package/src/cli/commands/README.md +20 -0
- package/src/cli/commands/ai.ts +170 -0
- package/src/cli/commands/doctor.ts +221 -0
- package/src/cli/commands/init.ts +348 -0
- package/src/cli/commands/install.ts +792 -0
- package/src/cli/commands/lifecycle.ts +95 -0
- package/src/cli/commands/marketplace.ts +253 -0
- package/src/cli/commands/mcp.ts +92 -0
- package/src/cli/commands/onboard.ts +248 -0
- package/src/cli/commands/plugin-create.ts +130 -0
- package/src/cli/commands/plugins.ts +36 -0
- package/src/cli/commands/release.ts +251 -0
- package/src/cli/commands/telegram.ts +25 -0
- package/src/cli/index.ts +450 -0
- package/src/config/README.md +11 -0
- package/src/config/oauth.ts +26 -0
- package/src/core/README.md +22 -0
- package/src/core/audit.ts +291 -0
- package/src/core/circuit-breaker.ts +129 -0
- package/src/core/conductor.ts +240 -0
- package/src/core/config.ts +149 -0
- package/src/core/database.ts +411 -0
- package/src/core/errors.ts +275 -0
- package/src/core/health.ts +159 -0
- package/src/core/interfaces.ts +75 -0
- package/src/core/logger.ts +33 -0
- package/src/core/rbac.ts +321 -0
- package/src/core/retry.ts +61 -0
- package/src/core/webhooks.ts +234 -0
- package/src/core/zero-config.ts +72 -0
- package/src/dashboard/README.md +15 -0
- package/src/dashboard/cli.ts +48 -0
- package/src/dashboard/index.html +3426 -0
- package/src/dashboard/server.ts +1544 -0
- package/src/mcp/README.md +20 -0
- package/src/mcp/server.ts +475 -0
- package/src/mcp/tools/README.md +11 -0
- package/src/mcp/tools/misc.ts +61 -0
- package/src/plugins/README.md +28 -0
- package/src/plugins/builtin/README.md +23 -0
- package/src/plugins/builtin/calculator.ts +178 -0
- package/src/plugins/builtin/colors.ts +201 -0
- package/src/plugins/builtin/cron.ts +649 -0
- package/src/plugins/builtin/crypto.ts +85 -0
- package/src/plugins/builtin/database.ts +235 -0
- package/src/plugins/builtin/docker.ts +426 -0
- package/src/plugins/builtin/fun.ts +118 -0
- package/src/plugins/builtin/gcal.ts +305 -0
- package/src/plugins/builtin/gdrive.ts +326 -0
- package/src/plugins/builtin/github-actions.ts +666 -0
- package/src/plugins/builtin/github.ts +912 -0
- package/src/plugins/builtin/gmail.ts +492 -0
- package/src/plugins/builtin/hash.ts +98 -0
- package/src/plugins/builtin/homekit.ts +389 -0
- package/src/plugins/builtin/index.ts +116 -0
- package/src/plugins/builtin/jira.ts +380 -0
- package/src/plugins/builtin/linear.ts +448 -0
- package/src/plugins/builtin/lumen.ts +497 -0
- package/src/plugins/builtin/memory.ts +200 -0
- package/src/plugins/builtin/n8n.ts +565 -0
- package/src/plugins/builtin/network.ts +92 -0
- package/src/plugins/builtin/notes.ts +689 -0
- package/src/plugins/builtin/notion.ts +348 -0
- package/src/plugins/builtin/shell.ts +334 -0
- package/src/plugins/builtin/slack.ts +327 -0
- package/src/plugins/builtin/spotify.ts +665 -0
- package/src/plugins/builtin/stripe.ts +388 -0
- package/src/plugins/builtin/system.ts +93 -0
- package/src/plugins/builtin/text-tools.ts +150 -0
- package/src/plugins/builtin/timezone.ts +173 -0
- package/src/plugins/builtin/todoist.ts +625 -0
- package/src/plugins/builtin/translate.ts +47 -0
- package/src/plugins/builtin/url-tools.ts +73 -0
- package/src/plugins/builtin/vercel.ts +546 -0
- package/src/plugins/builtin/weather.ts +112 -0
- package/src/plugins/builtin/x.ts +440 -0
- package/src/plugins/manager.ts +213 -0
- package/src/plugins/validation.ts +94 -0
- package/src/security/README.md +12 -0
- package/src/security/auth.ts +72 -0
- package/src/security/keychain.ts +226 -0
- package/src/utils/README.md +12 -0
- package/src/utils/google-auth.ts +159 -0
- package/src/utils/retry.ts +41 -0
- package/test-all.mjs +1256 -0
- package/test.mjs +633 -0
- package/tests/README.md +19 -0
- package/tests/calculator.test.ts +54 -0
- package/tests/docker.test.ts +42 -0
- package/tests/load.test.ts +129 -0
- package/tests/mcp.test.ts +14 -0
- package/tests/shell.test.ts +42 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +14 -0
package/README.md
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Conductor
|
|
2
|
+
|
|
3
|
+
**The AI Tool Hub.** One MCP server. 100+ tools. Every AI agent.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/conductor/conductor/actions/workflows/ci.yml)
|
|
6
|
+
[](https://www.npmjs.com/package/@conductor/cli)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
## One Connection. Every Tool.
|
|
10
|
+
|
|
11
|
+
Conductor is the single MCP server that gives **any AI agent** access to 100+ real-world tools. No more configuring 10 different MCP servers. No more managing 10 different auth flows. One line of config, everything works.
|
|
12
|
+
|
|
13
|
+
Add this to your AI agent's MCP config:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"mcpServers": {
|
|
18
|
+
"conductor": {
|
|
19
|
+
"command": "conductor",
|
|
20
|
+
"args": ["mcp", "start"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Now **Claude Code**, **Cursor**, **Cline**, **Aider**, and every other MCP-compatible AI agent instantly gets access to:
|
|
27
|
+
|
|
28
|
+
| Category | Tools |
|
|
29
|
+
|----------|-------|
|
|
30
|
+
| **GitHub** | repos, issues, PRs, stars, trending, actions |
|
|
31
|
+
| **Docker** | containers, images, volumes, networks, stats, run |
|
|
32
|
+
| **Databases** | PostgreSQL, MySQL, MongoDB, Redis queries |
|
|
33
|
+
| **File System** | read, write, list, search, grep |
|
|
34
|
+
| **Shell** | safe command execution with approval workflow |
|
|
35
|
+
| **Git** | status, diff, log, branch operations |
|
|
36
|
+
| **Calculator** | math expressions, unit conversions, date math |
|
|
37
|
+
| **Web** | search, scrape, URL tools, translate |
|
|
38
|
+
| **System** | info, network, crypto, hash, colors |
|
|
39
|
+
| **Google** | Gmail, Calendar, Drive |
|
|
40
|
+
| **Productivity** | Notion, Todoist, Slack, notes, cron |
|
|
41
|
+
| **And more** | Vercel, n8n, weather, timezone, memory |
|
|
42
|
+
|
|
43
|
+
## Install
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install -g @conductor/cli
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Quick Start
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Start the MCP server
|
|
53
|
+
conductor mcp start
|
|
54
|
+
|
|
55
|
+
# Enable plugins
|
|
56
|
+
conductor plugins enable github
|
|
57
|
+
conductor plugins enable docker
|
|
58
|
+
conductor plugins enable shell
|
|
59
|
+
|
|
60
|
+
# Configure credentials
|
|
61
|
+
conductor config set github.token ghp_your_token_here
|
|
62
|
+
|
|
63
|
+
# Check status
|
|
64
|
+
conductor plugins list
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Works With Every AI Agent
|
|
68
|
+
|
|
69
|
+
Conductor connects to any MCP-compatible client:
|
|
70
|
+
|
|
71
|
+
- **Claude Desktop** — `conductor mcp setup`
|
|
72
|
+
- **Claude Code** — add to `claude.json` MCP config
|
|
73
|
+
- **Cursor** — add to Cursor MCP settings
|
|
74
|
+
- **Cline** — add to Cline MCP servers
|
|
75
|
+
- **Aider** — configure as external tool
|
|
76
|
+
- **Any MCP client** — stdio or HTTP transport
|
|
77
|
+
|
|
78
|
+
## Architecture
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
┌─────────────────────────────────────────────────┐
|
|
82
|
+
│ AI Agent (any MCP client) │
|
|
83
|
+
│ Claude Code │ Cursor │ Cline │ Aider │
|
|
84
|
+
└──────────────────────┬──────────────────────────┘
|
|
85
|
+
│ MCP Protocol (stdio/HTTP)
|
|
86
|
+
▼
|
|
87
|
+
┌─────────────────────────────────────────────────┐
|
|
88
|
+
│ Conductor MCP Server │
|
|
89
|
+
│ │
|
|
90
|
+
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
|
|
91
|
+
│ │ GitHub │ │ Docker │ │ Databases │ │
|
|
92
|
+
│ │ Plugin │ │ Plugin │ │ Plugin │ │
|
|
93
|
+
│ └──────────┘ └──────────┘ └───────────────┘ │
|
|
94
|
+
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
|
|
95
|
+
│ │ Shell │ │ Git │ │ Calculator │ │
|
|
96
|
+
│ │ Plugin │ │ Plugin │ │ Plugin │ │
|
|
97
|
+
│ └──────────┘ └──────────┘ └───────────────┘ │
|
|
98
|
+
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
|
|
99
|
+
│ │ Google │ │ Slack │ │ + 90 more │ │
|
|
100
|
+
│ │ Plugin │ │ Plugin │ │ plugins │ │
|
|
101
|
+
│ └──────────┘ └──────────┘ └───────────────┘ │
|
|
102
|
+
│ │
|
|
103
|
+
│ Encrypted Keychain │ Zod Validation │ Metrics │
|
|
104
|
+
└─────────────────────────────────────────────────┘
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Security
|
|
108
|
+
|
|
109
|
+
- **Encrypted keychain** — AES-256-GCM with machine-bound key derivation
|
|
110
|
+
- **Zod validation** — every plugin input is validated before execution
|
|
111
|
+
- **Safe shell** — whitelist-based command filtering, no `eval()`, no `exec()`
|
|
112
|
+
- **Plugin sandboxing** — plugins run with minimal permissions
|
|
113
|
+
- **Approval workflow** — dangerous operations require explicit user approval
|
|
114
|
+
- **Rate limiting** — all endpoints protected against abuse
|
|
115
|
+
|
|
116
|
+
## Plugin System
|
|
117
|
+
|
|
118
|
+
Build your own plugins. Drop a `.js` file in `~/.conductor/plugins/` and it's available via MCP.
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
import { Plugin, PluginTool } from '@conductor/cli';
|
|
122
|
+
|
|
123
|
+
export class MyPlugin implements Plugin {
|
|
124
|
+
name = 'my-plugin';
|
|
125
|
+
description = 'My awesome plugin';
|
|
126
|
+
version = '1.0.0';
|
|
127
|
+
|
|
128
|
+
async initialize() {}
|
|
129
|
+
isConfigured() { return true; }
|
|
130
|
+
|
|
131
|
+
getTools(): PluginTool[] {
|
|
132
|
+
return [{
|
|
133
|
+
name: 'my_tool',
|
|
134
|
+
description: 'Does something awesome',
|
|
135
|
+
inputSchema: {
|
|
136
|
+
type: 'object',
|
|
137
|
+
properties: {
|
|
138
|
+
input: { type: 'string', description: 'Your input' },
|
|
139
|
+
},
|
|
140
|
+
required: ['input'],
|
|
141
|
+
},
|
|
142
|
+
handler: async (input: { input: string }) => {
|
|
143
|
+
return { result: `You said: ${input.input}` };
|
|
144
|
+
},
|
|
145
|
+
}];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Development
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
git clone https://github.com/conductor/conductor.git
|
|
154
|
+
cd conductor
|
|
155
|
+
npm install
|
|
156
|
+
npm run build
|
|
157
|
+
npm run dev # Watch mode
|
|
158
|
+
npm test # Run tests
|
|
159
|
+
npm run test:coverage # With coverage
|
|
160
|
+
npm run lint # ESLint
|
|
161
|
+
npm run format # Prettier
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## CLI Commands
|
|
165
|
+
|
|
166
|
+
| Command | Description |
|
|
167
|
+
|---------|-------------|
|
|
168
|
+
| `conductor mcp start` | Start MCP server (stdio) |
|
|
169
|
+
| `conductor mcp setup` | Configure for Claude Desktop |
|
|
170
|
+
| `conductor mcp status` | Show MCP status |
|
|
171
|
+
| `conductor plugins list` | List all plugins |
|
|
172
|
+
| `conductor plugins enable <name>` | Enable a plugin |
|
|
173
|
+
| `conductor plugins disable <name>` | Disable a plugin |
|
|
174
|
+
| `conductor ai setup` | Configure AI providers |
|
|
175
|
+
| `conductor ai test` | Test AI provider |
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
Apache-2.0
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
| Version | Supported |
|
|
6
|
+
| ------- | --------- |
|
|
7
|
+
| 1.0.x | Yes |
|
|
8
|
+
|
|
9
|
+
## Reporting a Vulnerability
|
|
10
|
+
|
|
11
|
+
**Please do not report security vulnerabilities through public GitHub issues.**
|
|
12
|
+
|
|
13
|
+
Instead, email us at **security@conductor.dev** with:
|
|
14
|
+
|
|
15
|
+
- A description of the vulnerability
|
|
16
|
+
- Steps to reproduce
|
|
17
|
+
- Potential impact
|
|
18
|
+
- Suggested fix (if any)
|
|
19
|
+
|
|
20
|
+
We will acknowledge receipt within 24 hours and provide a detailed response within 72 hours.
|
|
21
|
+
|
|
22
|
+
## Security Best Practices
|
|
23
|
+
|
|
24
|
+
### For Users
|
|
25
|
+
|
|
26
|
+
1. **Keep Conductor updated** — always run the latest version
|
|
27
|
+
2. **Use strong API keys** — rotate credentials regularly
|
|
28
|
+
3. **Enable plugin approval** — don't run with `full-auto` mode in production
|
|
29
|
+
4. **Review tool calls** — audit what tools the AI is calling
|
|
30
|
+
5. **Use the encrypted keychain** — never store credentials in plaintext config files
|
|
31
|
+
|
|
32
|
+
### For Plugin Developers
|
|
33
|
+
|
|
34
|
+
1. **Validate all inputs** — use Zod schemas, never trust AI-generated arguments
|
|
35
|
+
2. **Use `execFile` not `exec`** — never pass user input through a shell
|
|
36
|
+
3. **Principle of least privilege** — request only the permissions you need
|
|
37
|
+
4. **No `eval()` or `new Function()`** — use safe parsers like `mathjs`
|
|
38
|
+
5. **Rate limit your endpoints** — protect against abuse
|
|
39
|
+
|
|
40
|
+
### Architecture
|
|
41
|
+
|
|
42
|
+
- **Encrypted keychain** — AES-256-GCM with machine-bound key derivation
|
|
43
|
+
- **Zod validation** — every tool input is validated before execution
|
|
44
|
+
- **Safe shell** — whitelist-based command filtering, no shell interpretation
|
|
45
|
+
- **Plugin sandboxing** — plugins run with minimal permissions
|
|
46
|
+
- **Approval workflow** — dangerous operations require explicit user approval
|
|
47
|
+
- **Rate limiting** — all endpoints protected against abuse
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# /conductor-setup
|
|
2
|
+
|
|
3
|
+
Set up Conductor integration hub for this project.
|
|
4
|
+
|
|
5
|
+
1. Check if Conductor is installed: `which conductor || npm list -g @thealxlabs/conductor`
|
|
6
|
+
2. If not installed: `npm install && npm run build` from the conductor repo root
|
|
7
|
+
3. Configure the MCP server: `conductor mcp setup`
|
|
8
|
+
4. Check status: `conductor mcp status`
|
|
9
|
+
5. List available plugins: `conductor plugins list`
|
|
10
|
+
|
|
11
|
+
Tell the user which services are configured and suggest running `conductor google` for Google services or `conductor slack setup` for Slack.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# /conductor-status
|
|
2
|
+
|
|
3
|
+
Check the current status of all Conductor integrations.
|
|
4
|
+
|
|
5
|
+
Use the `conductor_status` MCP tool to get active plugins, configured AI provider, and current user settings.
|
|
6
|
+
|
|
7
|
+
Then list what each active plugin can do and suggest any plugins the user might want to enable based on the current project context.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { PluginTool } from '../plugins/manager.js';
|
|
2
|
+
export interface AIToolCall {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
arguments: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
export interface AIMessage {
|
|
8
|
+
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
9
|
+
content: string;
|
|
10
|
+
tool_calls?: AIToolCall[];
|
|
11
|
+
tool_call_id?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AIResponse {
|
|
15
|
+
content: string;
|
|
16
|
+
model: string;
|
|
17
|
+
tokens_used?: number;
|
|
18
|
+
finish_reason?: string;
|
|
19
|
+
tool_calls?: AIToolCall[];
|
|
20
|
+
}
|
|
21
|
+
export interface AIProviderConfig {
|
|
22
|
+
apiKey?: string;
|
|
23
|
+
endpoint?: string;
|
|
24
|
+
model?: string;
|
|
25
|
+
maxTokens?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare abstract class AIProvider {
|
|
28
|
+
protected config: AIProviderConfig;
|
|
29
|
+
constructor(config: AIProviderConfig);
|
|
30
|
+
/** Send a message and get a response. */
|
|
31
|
+
abstract complete(messages: AIMessage[], tools?: PluginTool[]): Promise<AIResponse>;
|
|
32
|
+
/** Stream a response (for real-time output). */
|
|
33
|
+
abstract stream(messages: AIMessage[], tools?: PluginTool[]): AsyncGenerator<string>;
|
|
34
|
+
/** Test if the provider is configured correctly. */
|
|
35
|
+
abstract test(): Promise<boolean>;
|
|
36
|
+
/** Get provider display name. */
|
|
37
|
+
abstract getName(): string;
|
|
38
|
+
/**
|
|
39
|
+
* Parse user intent from a natural-language message.
|
|
40
|
+
* Used by the Telegram bot to route commands to plugins.
|
|
41
|
+
*/
|
|
42
|
+
parseIntent(userMessage: string): Promise<any>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/ai/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8BAAsB,UAAU;IAC9B,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBAEvB,MAAM,EAAE,gBAAgB;IAIpC,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAEnF,gDAAgD;IAChD,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC;IAEpF,oDAAoD;IACpD,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,CAAC,OAAO,IAAI,MAAM;IAE1B;;;OAGG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAqCrD"}
|
package/dist/ai/base.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export class AIProvider {
|
|
2
|
+
config;
|
|
3
|
+
constructor(config) {
|
|
4
|
+
this.config = config;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Parse user intent from a natural-language message.
|
|
8
|
+
* Used by the Telegram bot to route commands to plugins.
|
|
9
|
+
*/
|
|
10
|
+
async parseIntent(userMessage) {
|
|
11
|
+
const systemPrompt = `You are a command parser for Conductor, an integration hub.
|
|
12
|
+
Parse user messages into structured intents.
|
|
13
|
+
|
|
14
|
+
Available intents:
|
|
15
|
+
- install_plugin: { plugin: string }
|
|
16
|
+
- list_plugins: {}
|
|
17
|
+
- enable_plugin: { plugin: string }
|
|
18
|
+
- disable_plugin: { plugin: string }
|
|
19
|
+
- execute_action: { plugin: string, action: string, params: object }
|
|
20
|
+
- get_status: {}
|
|
21
|
+
- help: {}
|
|
22
|
+
- chat: { message: string }
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
"install github" → { "type": "install_plugin", "plugin": "github" }
|
|
26
|
+
"list my repos" → { "type": "execute_action", "plugin": "github", "action": "list_repos" }
|
|
27
|
+
"show status" → { "type": "get_status" }
|
|
28
|
+
"hello" → { "type": "chat", "message": "hello" }
|
|
29
|
+
|
|
30
|
+
Respond with JSON only. If unclear, use type "chat". Always use English for any string values.`;
|
|
31
|
+
const response = await this.complete([
|
|
32
|
+
{ role: 'system', content: systemPrompt },
|
|
33
|
+
{ role: 'user', content: userMessage },
|
|
34
|
+
]);
|
|
35
|
+
try {
|
|
36
|
+
const jsonMatch = response.content.match(/\{[\s\S]*\}/);
|
|
37
|
+
if (jsonMatch) {
|
|
38
|
+
return JSON.parse(jsonMatch[0]);
|
|
39
|
+
}
|
|
40
|
+
return { type: 'chat', message: userMessage };
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return { type: 'chat', message: userMessage };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/ai/base.ts"],"names":[],"mappings":"AAgCA,MAAM,OAAgB,UAAU;IACpB,MAAM,CAAmB;IAEnC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAcD;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,WAAmB;QACnC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;+FAmBsE,CAAC;QAE5F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;YACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACxD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AIProvider, AIMessage, AIResponse } from './base.js';
|
|
2
|
+
import { PluginTool } from '../plugins/manager.js';
|
|
3
|
+
export declare class ClaudeProvider extends AIProvider {
|
|
4
|
+
private client;
|
|
5
|
+
initialize(apiKey: string): Promise<void>;
|
|
6
|
+
getName(): string;
|
|
7
|
+
complete(messages: AIMessage[], tools?: PluginTool[]): Promise<AIResponse>;
|
|
8
|
+
stream(messages: AIMessage[], tools?: PluginTool[]): AsyncGenerator<string>;
|
|
9
|
+
test(): Promise<boolean>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/ai/claude.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,qBAAa,cAAe,SAAQ,UAAU;IAC5C,OAAO,CAAC,MAAM,CAA0B;IAElC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,OAAO,IAAI,MAAM;IAIX,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IA6EzE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC;IA6D5E,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ/B"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { AIProvider } from './base.js';
|
|
3
|
+
export class ClaudeProvider extends AIProvider {
|
|
4
|
+
client = null;
|
|
5
|
+
async initialize(apiKey) {
|
|
6
|
+
this.client = new Anthropic({ apiKey });
|
|
7
|
+
}
|
|
8
|
+
getName() {
|
|
9
|
+
return 'Claude';
|
|
10
|
+
}
|
|
11
|
+
async complete(messages, tools) {
|
|
12
|
+
if (!this.client)
|
|
13
|
+
throw new Error('Claude not initialized. Call initialize() first.');
|
|
14
|
+
const model = this.config.model || 'claude-3-5-sonnet-20241022';
|
|
15
|
+
const requestTools = tools?.map((t) => ({
|
|
16
|
+
name: t.name,
|
|
17
|
+
description: t.description,
|
|
18
|
+
input_schema: t.inputSchema,
|
|
19
|
+
}));
|
|
20
|
+
// Separate system message from conversation messages
|
|
21
|
+
const anthropicMessages = messages
|
|
22
|
+
.filter((m) => m.role !== 'system')
|
|
23
|
+
.map((m) => {
|
|
24
|
+
if (m.role === 'tool') {
|
|
25
|
+
return {
|
|
26
|
+
role: 'user',
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: 'tool_result',
|
|
30
|
+
tool_use_id: m.tool_call_id,
|
|
31
|
+
content: m.content,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else if (m.role === 'assistant' && m.tool_calls) {
|
|
37
|
+
const content = [];
|
|
38
|
+
if (m.content)
|
|
39
|
+
content.push({ type: 'text', text: m.content });
|
|
40
|
+
m.tool_calls.forEach((tc) => {
|
|
41
|
+
content.push({
|
|
42
|
+
type: 'tool_use',
|
|
43
|
+
id: tc.id,
|
|
44
|
+
name: tc.name,
|
|
45
|
+
input: tc.arguments,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
return { role: 'assistant', content };
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
role: m.role,
|
|
52
|
+
content: m.content,
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
const systemMessage = messages.find((m) => m.role === 'system');
|
|
56
|
+
const response = await this.client.messages.create({
|
|
57
|
+
model,
|
|
58
|
+
max_tokens: this.config.maxTokens || 4096,
|
|
59
|
+
system: systemMessage?.content,
|
|
60
|
+
messages: anthropicMessages,
|
|
61
|
+
tools: requestTools,
|
|
62
|
+
});
|
|
63
|
+
const toolCalls = response.content
|
|
64
|
+
.filter((c) => c.type === 'tool_use')
|
|
65
|
+
.map((c) => ({
|
|
66
|
+
id: c.id,
|
|
67
|
+
name: c.name,
|
|
68
|
+
arguments: c.input,
|
|
69
|
+
}));
|
|
70
|
+
const textContent = response.content
|
|
71
|
+
.filter((c) => c.type === 'text')
|
|
72
|
+
.map((c) => c.text)
|
|
73
|
+
.join('\n');
|
|
74
|
+
return {
|
|
75
|
+
content: textContent,
|
|
76
|
+
model: response.model,
|
|
77
|
+
tokens_used: response.usage.input_tokens + response.usage.output_tokens,
|
|
78
|
+
finish_reason: response.stop_reason || undefined,
|
|
79
|
+
tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async *stream(messages, tools) {
|
|
83
|
+
if (!this.client)
|
|
84
|
+
throw new Error('Claude not initialized');
|
|
85
|
+
const model = this.config.model || 'claude-3-5-sonnet-20241022';
|
|
86
|
+
const requestTools = tools?.map((t) => ({
|
|
87
|
+
name: t.name,
|
|
88
|
+
description: t.description,
|
|
89
|
+
input_schema: t.inputSchema,
|
|
90
|
+
}));
|
|
91
|
+
const anthropicMessages = messages
|
|
92
|
+
.filter((m) => m.role !== 'system')
|
|
93
|
+
.map((m) => {
|
|
94
|
+
if (m.role === 'tool') {
|
|
95
|
+
return {
|
|
96
|
+
role: 'user',
|
|
97
|
+
content: [
|
|
98
|
+
{
|
|
99
|
+
type: 'tool_result',
|
|
100
|
+
tool_use_id: m.tool_call_id,
|
|
101
|
+
content: m.content,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
else if (m.role === 'assistant' && m.tool_calls) {
|
|
107
|
+
const content = [];
|
|
108
|
+
if (m.content)
|
|
109
|
+
content.push({ type: 'text', text: m.content });
|
|
110
|
+
m.tool_calls.forEach((tc) => {
|
|
111
|
+
content.push({
|
|
112
|
+
type: 'tool_use',
|
|
113
|
+
id: tc.id,
|
|
114
|
+
name: tc.name,
|
|
115
|
+
input: tc.arguments,
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return { role: 'assistant', content };
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
role: m.role,
|
|
122
|
+
content: m.content,
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
const systemMessage = messages.find((m) => m.role === 'system');
|
|
126
|
+
const stream = await this.client.messages.stream({
|
|
127
|
+
model,
|
|
128
|
+
max_tokens: this.config.maxTokens || 4096,
|
|
129
|
+
system: systemMessage?.content,
|
|
130
|
+
messages: anthropicMessages,
|
|
131
|
+
tools: requestTools,
|
|
132
|
+
});
|
|
133
|
+
for await (const chunk of stream) {
|
|
134
|
+
if (chunk.type === 'content_block_delta' && chunk.delta.type === 'text_delta') {
|
|
135
|
+
yield chunk.delta.text;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async test() {
|
|
140
|
+
try {
|
|
141
|
+
await this.complete([{ role: 'user', content: 'Say "OK" if you can hear me.' }]);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/ai/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AIProvider, AIMessage, AIResponse } from './base.js';
|
|
2
|
+
import { PluginTool } from '../plugins/manager.js';
|
|
3
|
+
export declare class GeminiProvider extends AIProvider {
|
|
4
|
+
private client;
|
|
5
|
+
private oauth2Client;
|
|
6
|
+
getName(): string;
|
|
7
|
+
initialize(apiKey: string): Promise<void>;
|
|
8
|
+
initializeWithOAuth(clientId: string, clientSecret: string, redirectUri?: string): Promise<string>;
|
|
9
|
+
completeOAuthFlow(code: string): Promise<void>;
|
|
10
|
+
loginWithBrowser(): Promise<void>;
|
|
11
|
+
complete(messages: AIMessage[], tools?: PluginTool[]): Promise<AIResponse>;
|
|
12
|
+
stream(messages: AIMessage[], tools?: PluginTool[]): AsyncGenerator<string>;
|
|
13
|
+
test(): Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/ai/gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAkBnD,qBAAa,cAAe,SAAQ,UAAU;IAC5C,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,IAAI,MAAM;IAIX,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,SAA0C,GACpD,OAAO,CAAC,MAAM,CAAC;IAWZ,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAoDzE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC;IA2B5E,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ/B"}
|