@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conductor Core Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Narrow interfaces that break the God-object dependency.
|
|
5
|
+
* Consumers should depend on these interfaces, not on concrete classes.
|
|
6
|
+
*/
|
|
7
|
+
import { AIMessage } from '../ai/base.js';
|
|
8
|
+
export interface IConfig {
|
|
9
|
+
/** Read a value by dot-notation key, e.g. "ai.provider" */
|
|
10
|
+
get<T>(key: string): T | undefined;
|
|
11
|
+
/** Persist a value by dot-notation key */
|
|
12
|
+
set(key: string, value: unknown): Promise<void>;
|
|
13
|
+
/** Absolute path to the config directory (~/.conductor by default) */
|
|
14
|
+
getConfigDir(): string;
|
|
15
|
+
/** The full config object as a plain record */
|
|
16
|
+
getConfig(): Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface IDatabase {
|
|
19
|
+
/** Persist a full AIMessage for a user */
|
|
20
|
+
addMessage(userId: string, message: AIMessage): Promise<void>;
|
|
21
|
+
/** Retrieve conversation history for a user */
|
|
22
|
+
getHistory(userId: string, limit?: number): Promise<AIMessage[]>;
|
|
23
|
+
/** Full-text search across a user's messages */
|
|
24
|
+
searchMessages(userId: string, query: string, limit?: number): Promise<AIMessage[]>;
|
|
25
|
+
/** Record an activity log entry */
|
|
26
|
+
logActivity(userId: string, action: string, plugin?: string, details?: string, success?: boolean): Promise<void>;
|
|
27
|
+
/** Recent activity entries for the dashboard / proactive context */
|
|
28
|
+
getRecentActivity(limit?: number): Promise<any[]>;
|
|
29
|
+
}
|
|
30
|
+
import { Plugin } from '../plugins/manager.js';
|
|
31
|
+
export interface IPluginRegistry {
|
|
32
|
+
getPlugin(name: string): Promise<Plugin | undefined>;
|
|
33
|
+
listPlugins(): Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
description: string;
|
|
37
|
+
version: string;
|
|
38
|
+
}>;
|
|
39
|
+
getEnabledTools(): Promise<import('../plugins/manager.js').PluginTool[]>;
|
|
40
|
+
isPluginEnabled(name: string): boolean;
|
|
41
|
+
enablePlugin(name: string): Promise<void>;
|
|
42
|
+
disablePlugin(name: string): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
export interface ToolContext {
|
|
45
|
+
/** User ID of the person running the conversation (Telegram ID, 'system', etc.) */
|
|
46
|
+
userId: string;
|
|
47
|
+
/** Channel the conversation is happening in: 'telegram', 'slack', 'cli', 'mcp' */
|
|
48
|
+
channel: string;
|
|
49
|
+
/** Config interface for tool handlers that need to read settings */
|
|
50
|
+
conductorConfig: IConfig;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Structured notification type for proactive cycle alerts.
|
|
54
|
+
* Replaces hard-coded Telegram Markdown strings so each runtime can format
|
|
55
|
+
* appropriately (Telegram Markdown, Slack Block Kit, plain text, etc.).
|
|
56
|
+
*/
|
|
57
|
+
export interface ConductorNotification {
|
|
58
|
+
title: string;
|
|
59
|
+
body: string;
|
|
60
|
+
codeBlock?: string;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,OAAO;IACtB,2DAA2D;IAC3D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACnC,0CAA0C;IAC1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,sEAAsE;IACtE,YAAY,IAAI,MAAM,CAAC;IACvB,+CAA+C;IAC/C,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAID,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,+CAA+C;IAC/C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,gDAAgD;IAChD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACpF,mCAAmC;IAEnC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjH,oEAAoE;IAEpE,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CACnD;AAID,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACrD,WAAW,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/F,eAAe,IAAI,OAAO,CAAC,OAAO,uBAAuB,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAID,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logging with Pino.
|
|
3
|
+
*
|
|
4
|
+
* All logs go to stderr (stdout is reserved for MCP protocol).
|
|
5
|
+
* In production, logs are JSON-structured for ingestion by log aggregators.
|
|
6
|
+
* In development, logs are pretty-printed for readability.
|
|
7
|
+
*/
|
|
8
|
+
import pino from 'pino';
|
|
9
|
+
export declare const logger: pino.Logger<never, boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* Create a child logger with a specific context.
|
|
12
|
+
* Use this for module-specific logging.
|
|
13
|
+
*/
|
|
14
|
+
export declare function childLogger(context: string): pino.Logger<never, boolean>;
|
|
15
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,eAAO,MAAM,MAAM,6BAYjB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,+BAE1C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logging with Pino.
|
|
3
|
+
*
|
|
4
|
+
* All logs go to stderr (stdout is reserved for MCP protocol).
|
|
5
|
+
* In production, logs are JSON-structured for ingestion by log aggregators.
|
|
6
|
+
* In development, logs are pretty-printed for readability.
|
|
7
|
+
*/
|
|
8
|
+
import pino from 'pino';
|
|
9
|
+
const isDev = process.env.NODE_ENV !== 'production';
|
|
10
|
+
export const logger = pino({
|
|
11
|
+
level: process.env.LOG_LEVEL ?? (isDev ? 'debug' : 'info'),
|
|
12
|
+
transport: isDev
|
|
13
|
+
? {
|
|
14
|
+
target: 'pino-pretty',
|
|
15
|
+
options: {
|
|
16
|
+
colorize: true,
|
|
17
|
+
translateTime: 'SYS:standard',
|
|
18
|
+
ignore: 'pid,hostname',
|
|
19
|
+
},
|
|
20
|
+
}
|
|
21
|
+
: undefined,
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Create a child logger with a specific context.
|
|
25
|
+
* Use this for module-specific logging.
|
|
26
|
+
*/
|
|
27
|
+
export function childLogger(context) {
|
|
28
|
+
return logger.child({ context });
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1D,SAAS,EAAE,KAAK;QACd,CAAC,CAAC;YACE,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,cAAc;gBAC7B,MAAM,EAAE,cAAc;aACvB;SACF;QACH,CAAC,CAAC,SAAS;CACd,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC — Role-Based Access Control foundation for multi-user Conductor.
|
|
3
|
+
*
|
|
4
|
+
* Provides role definitions, permission checks, user management, and
|
|
5
|
+
* persistence. Designed to be plugged into the MCP server's tool routing
|
|
6
|
+
* so every tool call is authorized before execution.
|
|
7
|
+
*
|
|
8
|
+
* Default roles:
|
|
9
|
+
* admin — full access to all resources and actions
|
|
10
|
+
* editor — create / read / update / execute (no delete)
|
|
11
|
+
* viewer — read-only
|
|
12
|
+
* service_account — execute only (for automated tool calls)
|
|
13
|
+
*/
|
|
14
|
+
export declare enum Role {
|
|
15
|
+
ADMIN = "admin",
|
|
16
|
+
EDITOR = "editor",
|
|
17
|
+
VIEWER = "viewer",
|
|
18
|
+
SERVICE_ACCOUNT = "service_account"
|
|
19
|
+
}
|
|
20
|
+
export declare enum Action {
|
|
21
|
+
CREATE = "create",
|
|
22
|
+
READ = "read",
|
|
23
|
+
UPDATE = "update",
|
|
24
|
+
DELETE = "delete",
|
|
25
|
+
EXECUTE = "execute"
|
|
26
|
+
}
|
|
27
|
+
export interface Permission {
|
|
28
|
+
resource: string;
|
|
29
|
+
action: Action;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Maps each role to the set of (resource, action) pairs it is allowed to perform.
|
|
33
|
+
*
|
|
34
|
+
* The special resource '*' is a wildcard meaning "all resources".
|
|
35
|
+
*/
|
|
36
|
+
export type RolePermissions = Map<Role, Permission[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Default permission assignments for built-in roles.
|
|
39
|
+
*/
|
|
40
|
+
export declare function defaultRolePermissions(): RolePermissions;
|
|
41
|
+
export interface User {
|
|
42
|
+
id: string;
|
|
43
|
+
email: string;
|
|
44
|
+
role: Role;
|
|
45
|
+
createdAt: Date;
|
|
46
|
+
lastLoginAt: Date | null;
|
|
47
|
+
}
|
|
48
|
+
export interface RBACAuditEntry {
|
|
49
|
+
timestamp: Date;
|
|
50
|
+
userId: string;
|
|
51
|
+
resource: string;
|
|
52
|
+
action: string;
|
|
53
|
+
granted: boolean;
|
|
54
|
+
}
|
|
55
|
+
export declare class RBACManager {
|
|
56
|
+
private users;
|
|
57
|
+
private permissions;
|
|
58
|
+
private auditLog;
|
|
59
|
+
constructor(permissions?: RolePermissions);
|
|
60
|
+
/**
|
|
61
|
+
* Add a user. Throws if the user id already exists.
|
|
62
|
+
*/
|
|
63
|
+
addUser(user: User): void;
|
|
64
|
+
/**
|
|
65
|
+
* Remove a user by id. Returns true if the user existed and was removed.
|
|
66
|
+
*/
|
|
67
|
+
removeUser(userId: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Retrieve a user by id, or undefined if not found.
|
|
70
|
+
*/
|
|
71
|
+
getUser(userId: string): User | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Return a snapshot of all users.
|
|
74
|
+
*/
|
|
75
|
+
listUsers(): User[];
|
|
76
|
+
/**
|
|
77
|
+
* Assign a new role to an existing user. Returns false if the user doesn't exist.
|
|
78
|
+
*/
|
|
79
|
+
assignRole(userId: string, role: Role): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Record a login timestamp for a user. Returns false if the user doesn't exist.
|
|
82
|
+
*/
|
|
83
|
+
recordLogin(userId: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Check whether a user has permission to perform `action` on `resource`.
|
|
86
|
+
*
|
|
87
|
+
* The check consults the user's role against the RolePermissions map.
|
|
88
|
+
* Wildcard resource '*' in the permission set grants access to all resources.
|
|
89
|
+
*
|
|
90
|
+
* Every check (granted or denied) is appended to the in-memory audit log.
|
|
91
|
+
*/
|
|
92
|
+
checkPermission(userId: string, resource: string, action: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Check multiple permissions at once. Returns true only if ALL are granted.
|
|
95
|
+
*/
|
|
96
|
+
checkPermissions(userId: string, checks: {
|
|
97
|
+
resource: string;
|
|
98
|
+
action: string;
|
|
99
|
+
}[]): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Add a custom permission entry for a specific role.
|
|
102
|
+
*/
|
|
103
|
+
addPermission(role: Role, permission: Permission): void;
|
|
104
|
+
/**
|
|
105
|
+
* Remove a permission entry from a role.
|
|
106
|
+
*/
|
|
107
|
+
removePermission(role: Role, resource: string, action: Action): void;
|
|
108
|
+
/**
|
|
109
|
+
* Get all permissions for a role.
|
|
110
|
+
*/
|
|
111
|
+
getRolePermissions(role: Role): Permission[];
|
|
112
|
+
/**
|
|
113
|
+
* Return the in-memory audit log.
|
|
114
|
+
*/
|
|
115
|
+
getAuditLog(): RBACAuditEntry[];
|
|
116
|
+
/**
|
|
117
|
+
* Clear the audit log (useful for tests or after flushing to persistent storage).
|
|
118
|
+
*/
|
|
119
|
+
clearAuditLog(): void;
|
|
120
|
+
private audit;
|
|
121
|
+
/**
|
|
122
|
+
* Serialise the entire RBAC state (users + custom permissions) to a JSON string.
|
|
123
|
+
* The audit log is intentionally excluded — it should be flushed separately.
|
|
124
|
+
*/
|
|
125
|
+
serialize(): string;
|
|
126
|
+
/**
|
|
127
|
+
* Restore RBAC state from a previously serialised JSON string.
|
|
128
|
+
* Replaces all existing users and permissions.
|
|
129
|
+
*/
|
|
130
|
+
deserialize(data: string): void;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=rbac.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../../src/core/rbac.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,oBAAY,IAAI;IACd,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,eAAe,oBAAoB;CACpC;AAID,oBAAY,MAAM;IAChB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAID,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAEtD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,CA0BxD;AAID,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAID,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAmBD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAwB;gBAE5B,WAAW,CAAC,EAAE,eAAe;IAMzC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAOzB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIzC;;OAEG;IACH,SAAS,IAAI,IAAI,EAAE;IAMnB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAO/C;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASpC;;;;;;;OAOG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAmB1E;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO;IAMzF;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IASvD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOpE;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,EAAE;IAM5C;;OAEG;IACH,WAAW,IAAI,cAAc,EAAE;IAI/B;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB,OAAO,CAAC,KAAK;IAMb;;;OAGG;IACH,SAAS,IAAI,MAAM;IAmBnB;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAuBhC"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC — Role-Based Access Control foundation for multi-user Conductor.
|
|
3
|
+
*
|
|
4
|
+
* Provides role definitions, permission checks, user management, and
|
|
5
|
+
* persistence. Designed to be plugged into the MCP server's tool routing
|
|
6
|
+
* so every tool call is authorized before execution.
|
|
7
|
+
*
|
|
8
|
+
* Default roles:
|
|
9
|
+
* admin — full access to all resources and actions
|
|
10
|
+
* editor — create / read / update / execute (no delete)
|
|
11
|
+
* viewer — read-only
|
|
12
|
+
* service_account — execute only (for automated tool calls)
|
|
13
|
+
*/
|
|
14
|
+
// ── Role ──────────────────────────────────────────────────────────────────────
|
|
15
|
+
export var Role;
|
|
16
|
+
(function (Role) {
|
|
17
|
+
Role["ADMIN"] = "admin";
|
|
18
|
+
Role["EDITOR"] = "editor";
|
|
19
|
+
Role["VIEWER"] = "viewer";
|
|
20
|
+
Role["SERVICE_ACCOUNT"] = "service_account";
|
|
21
|
+
})(Role || (Role = {}));
|
|
22
|
+
// ── Action ────────────────────────────────────────────────────────────────────
|
|
23
|
+
export var Action;
|
|
24
|
+
(function (Action) {
|
|
25
|
+
Action["CREATE"] = "create";
|
|
26
|
+
Action["READ"] = "read";
|
|
27
|
+
Action["UPDATE"] = "update";
|
|
28
|
+
Action["DELETE"] = "delete";
|
|
29
|
+
Action["EXECUTE"] = "execute";
|
|
30
|
+
})(Action || (Action = {}));
|
|
31
|
+
/**
|
|
32
|
+
* Default permission assignments for built-in roles.
|
|
33
|
+
*/
|
|
34
|
+
export function defaultRolePermissions() {
|
|
35
|
+
const perms = new Map();
|
|
36
|
+
perms.set(Role.ADMIN, [
|
|
37
|
+
{ resource: '*', action: Action.CREATE },
|
|
38
|
+
{ resource: '*', action: Action.READ },
|
|
39
|
+
{ resource: '*', action: Action.UPDATE },
|
|
40
|
+
{ resource: '*', action: Action.DELETE },
|
|
41
|
+
{ resource: '*', action: Action.EXECUTE },
|
|
42
|
+
]);
|
|
43
|
+
perms.set(Role.EDITOR, [
|
|
44
|
+
{ resource: '*', action: Action.CREATE },
|
|
45
|
+
{ resource: '*', action: Action.READ },
|
|
46
|
+
{ resource: '*', action: Action.UPDATE },
|
|
47
|
+
{ resource: '*', action: Action.EXECUTE },
|
|
48
|
+
]);
|
|
49
|
+
perms.set(Role.VIEWER, [{ resource: '*', action: Action.READ }]);
|
|
50
|
+
perms.set(Role.SERVICE_ACCOUNT, [
|
|
51
|
+
{ resource: '*', action: Action.EXECUTE },
|
|
52
|
+
{ resource: '*', action: Action.READ },
|
|
53
|
+
]);
|
|
54
|
+
return perms;
|
|
55
|
+
}
|
|
56
|
+
// ── RBACManager ───────────────────────────────────────────────────────────────
|
|
57
|
+
export class RBACManager {
|
|
58
|
+
users = new Map();
|
|
59
|
+
permissions;
|
|
60
|
+
auditLog = [];
|
|
61
|
+
constructor(permissions) {
|
|
62
|
+
this.permissions = permissions ?? defaultRolePermissions();
|
|
63
|
+
}
|
|
64
|
+
// ── User CRUD ────────────────────────────────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* Add a user. Throws if the user id already exists.
|
|
67
|
+
*/
|
|
68
|
+
addUser(user) {
|
|
69
|
+
if (this.users.has(user.id)) {
|
|
70
|
+
throw new Error(`User already exists: ${user.id}`);
|
|
71
|
+
}
|
|
72
|
+
this.users.set(user.id, { ...user });
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Remove a user by id. Returns true if the user existed and was removed.
|
|
76
|
+
*/
|
|
77
|
+
removeUser(userId) {
|
|
78
|
+
return this.users.delete(userId);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Retrieve a user by id, or undefined if not found.
|
|
82
|
+
*/
|
|
83
|
+
getUser(userId) {
|
|
84
|
+
return this.users.get(userId);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Return a snapshot of all users.
|
|
88
|
+
*/
|
|
89
|
+
listUsers() {
|
|
90
|
+
return Array.from(this.users.values());
|
|
91
|
+
}
|
|
92
|
+
// ── Role management ──────────────────────────────────────────────────────
|
|
93
|
+
/**
|
|
94
|
+
* Assign a new role to an existing user. Returns false if the user doesn't exist.
|
|
95
|
+
*/
|
|
96
|
+
assignRole(userId, role) {
|
|
97
|
+
const user = this.users.get(userId);
|
|
98
|
+
if (!user)
|
|
99
|
+
return false;
|
|
100
|
+
user.role = role;
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Record a login timestamp for a user. Returns false if the user doesn't exist.
|
|
105
|
+
*/
|
|
106
|
+
recordLogin(userId) {
|
|
107
|
+
const user = this.users.get(userId);
|
|
108
|
+
if (!user)
|
|
109
|
+
return false;
|
|
110
|
+
user.lastLoginAt = new Date();
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
// ── Permission checks ────────────────────────────────────────────────────
|
|
114
|
+
/**
|
|
115
|
+
* Check whether a user has permission to perform `action` on `resource`.
|
|
116
|
+
*
|
|
117
|
+
* The check consults the user's role against the RolePermissions map.
|
|
118
|
+
* Wildcard resource '*' in the permission set grants access to all resources.
|
|
119
|
+
*
|
|
120
|
+
* Every check (granted or denied) is appended to the in-memory audit log.
|
|
121
|
+
*/
|
|
122
|
+
checkPermission(userId, resource, action) {
|
|
123
|
+
const user = this.users.get(userId);
|
|
124
|
+
if (!user) {
|
|
125
|
+
this.audit({ userId, resource, action, granted: false });
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
const rolePerms = this.permissions.get(user.role);
|
|
129
|
+
if (!rolePerms || rolePerms.length === 0) {
|
|
130
|
+
this.audit({ userId, resource, action, granted: false });
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
const granted = rolePerms.some((p) => (p.resource === '*' || p.resource === resource) && p.action === action);
|
|
134
|
+
this.audit({ userId, resource, action, granted });
|
|
135
|
+
return granted;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check multiple permissions at once. Returns true only if ALL are granted.
|
|
139
|
+
*/
|
|
140
|
+
checkPermissions(userId, checks) {
|
|
141
|
+
return checks.every((c) => this.checkPermission(userId, c.resource, c.action));
|
|
142
|
+
}
|
|
143
|
+
// ── Custom permissions ───────────────────────────────────────────────────
|
|
144
|
+
/**
|
|
145
|
+
* Add a custom permission entry for a specific role.
|
|
146
|
+
*/
|
|
147
|
+
addPermission(role, permission) {
|
|
148
|
+
const existing = this.permissions.get(role) ?? [];
|
|
149
|
+
// Avoid duplicates
|
|
150
|
+
if (!existing.some((p) => p.resource === permission.resource && p.action === permission.action)) {
|
|
151
|
+
existing.push(permission);
|
|
152
|
+
this.permissions.set(role, existing);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Remove a permission entry from a role.
|
|
157
|
+
*/
|
|
158
|
+
removePermission(role, resource, action) {
|
|
159
|
+
const existing = this.permissions.get(role);
|
|
160
|
+
if (!existing)
|
|
161
|
+
return;
|
|
162
|
+
const filtered = existing.filter((p) => !(p.resource === resource && p.action === action));
|
|
163
|
+
this.permissions.set(role, filtered);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get all permissions for a role.
|
|
167
|
+
*/
|
|
168
|
+
getRolePermissions(role) {
|
|
169
|
+
return [...(this.permissions.get(role) ?? [])];
|
|
170
|
+
}
|
|
171
|
+
// ── Audit log ────────────────────────────────────────────────────────────
|
|
172
|
+
/**
|
|
173
|
+
* Return the in-memory audit log.
|
|
174
|
+
*/
|
|
175
|
+
getAuditLog() {
|
|
176
|
+
return [...this.auditLog];
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Clear the audit log (useful for tests or after flushing to persistent storage).
|
|
180
|
+
*/
|
|
181
|
+
clearAuditLog() {
|
|
182
|
+
this.auditLog = [];
|
|
183
|
+
}
|
|
184
|
+
audit(entry) {
|
|
185
|
+
this.auditLog.push({ ...entry, timestamp: new Date() });
|
|
186
|
+
}
|
|
187
|
+
// ── Persistence ──────────────────────────────────────────────────────────
|
|
188
|
+
/**
|
|
189
|
+
* Serialise the entire RBAC state (users + custom permissions) to a JSON string.
|
|
190
|
+
* The audit log is intentionally excluded — it should be flushed separately.
|
|
191
|
+
*/
|
|
192
|
+
serialize() {
|
|
193
|
+
const state = {
|
|
194
|
+
users: Array.from(this.users.values()).map((u) => ({
|
|
195
|
+
id: u.id,
|
|
196
|
+
email: u.email,
|
|
197
|
+
role: u.role,
|
|
198
|
+
createdAt: u.createdAt.toISOString(),
|
|
199
|
+
lastLoginAt: u.lastLoginAt?.toISOString() ?? null,
|
|
200
|
+
})),
|
|
201
|
+
permissions: Object.fromEntries(Array.from(this.permissions.entries()).map(([role, perms]) => [
|
|
202
|
+
role,
|
|
203
|
+
perms.map((p) => ({ resource: p.resource, action: p.action })),
|
|
204
|
+
])),
|
|
205
|
+
};
|
|
206
|
+
return JSON.stringify(state);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Restore RBAC state from a previously serialised JSON string.
|
|
210
|
+
* Replaces all existing users and permissions.
|
|
211
|
+
*/
|
|
212
|
+
deserialize(data) {
|
|
213
|
+
const state = JSON.parse(data);
|
|
214
|
+
this.users = new Map(state.users.map((u) => [
|
|
215
|
+
u.id,
|
|
216
|
+
{
|
|
217
|
+
id: u.id,
|
|
218
|
+
email: u.email,
|
|
219
|
+
role: u.role,
|
|
220
|
+
createdAt: new Date(u.createdAt),
|
|
221
|
+
lastLoginAt: u.lastLoginAt ? new Date(u.lastLoginAt) : null,
|
|
222
|
+
},
|
|
223
|
+
]));
|
|
224
|
+
this.permissions = new Map(Object.entries(state.permissions).map(([roleStr, perms]) => [
|
|
225
|
+
roleStr,
|
|
226
|
+
perms.map((p) => ({ resource: p.resource, action: p.action })),
|
|
227
|
+
]));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=rbac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac.js","sourceRoot":"","sources":["../../src/core/rbac.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,iFAAiF;AAEjF,MAAM,CAAN,IAAY,IAKX;AALD,WAAY,IAAI;IACd,uBAAe,CAAA;IACf,yBAAiB,CAAA;IACjB,yBAAiB,CAAA;IACjB,2CAAmC,CAAA;AACrC,CAAC,EALW,IAAI,KAAJ,IAAI,QAKf;AAED,iFAAiF;AAEjF,MAAM,CAAN,IAAY,MAMX;AAND,WAAY,MAAM;IAChB,2BAAiB,CAAA;IACjB,uBAAa,CAAA;IACb,2BAAiB,CAAA;IACjB,2BAAiB,CAAA;IACjB,6BAAmB,CAAA;AACrB,CAAC,EANW,MAAM,KAAN,MAAM,QAMjB;AAkBD;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE5C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;QACpB,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACxC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACtC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACxC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACxC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;KAC1C,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;QACrB,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACxC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACtC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACxC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;KAC1C,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEjE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE;QAC9B,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;QACzC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;KACvC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAqCD,iFAAiF;AAEjF,MAAM,OAAO,WAAW;IACd,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IACrC,WAAW,CAAkB;IAC7B,QAAQ,GAAqB,EAAE,CAAC;IAExC,YAAY,WAA6B;QACvC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,sBAAsB,EAAE,CAAC;IAC7D,CAAC;IAED,4EAA4E;IAE5E;;OAEG;IACH,OAAO,CAAC,IAAU;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,4EAA4E;IAE5E;;OAEG;IACH,UAAU,CAAC,MAAc,EAAE,IAAU;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAc;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAE5E;;;;;;;OAOG;IACH,eAAe,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAc;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE9G,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAc,EAAE,MAA8C;QAC7E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,4EAA4E;IAE5E;;OAEG;IACH,aAAa,CAAC,IAAU,EAAE,UAAsB;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClD,mBAAmB;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAChG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAU,EAAE,QAAgB,EAAE,MAAc;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAU;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,4EAA4E;IAE5E;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,KAAwC;QACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACH,SAAS;QACP,MAAM,KAAK,GAAoB;YAC7B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjD,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;gBACpC,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,IAAI;aAClD,CAAC,CAAC;YACH,WAAW,EAAE,MAAM,CAAC,WAAW,CAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5D,IAAI;gBACJ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAC/D,CAAC,CACH;SACF,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAClB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACrB,CAAC,CAAC,EAAE;YACJ;gBACE,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChC,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;aAC5D;SACF,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC1D,OAAe;YACf,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/D,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry with exponential backoff and jitter.
|
|
3
|
+
*
|
|
4
|
+
* Every tool call is automatically retried on transient failures.
|
|
5
|
+
* Backoff: baseDelay * 2^attempt + random jitter
|
|
6
|
+
*
|
|
7
|
+
* Designed for API rate limits, network blips, and temporary outages.
|
|
8
|
+
*/
|
|
9
|
+
export interface RetryOptions {
|
|
10
|
+
/** Maximum number of attempts (including the first) */
|
|
11
|
+
maxAttempts: number;
|
|
12
|
+
/** Base delay in ms */
|
|
13
|
+
baseDelay: number;
|
|
14
|
+
/** Maximum delay in ms */
|
|
15
|
+
maxDelay: number;
|
|
16
|
+
/** Retry only on these error codes/messages */
|
|
17
|
+
retryableErrors?: string[];
|
|
18
|
+
/** Callback for each retry attempt */
|
|
19
|
+
onRetry?: (attempt: number, error: Error, delay: number) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: Partial<RetryOptions>): Promise<T>;
|
|
22
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/core/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAQD,wBAAsB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAgCpG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry with exponential backoff and jitter.
|
|
3
|
+
*
|
|
4
|
+
* Every tool call is automatically retried on transient failures.
|
|
5
|
+
* Backoff: baseDelay * 2^attempt + random jitter
|
|
6
|
+
*
|
|
7
|
+
* Designed for API rate limits, network blips, and temporary outages.
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULTS = {
|
|
10
|
+
maxAttempts: 3,
|
|
11
|
+
baseDelay: 1000,
|
|
12
|
+
maxDelay: 30000,
|
|
13
|
+
};
|
|
14
|
+
export async function withRetry(fn, options) {
|
|
15
|
+
const opts = { ...DEFAULTS, ...options };
|
|
16
|
+
let lastError;
|
|
17
|
+
for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {
|
|
18
|
+
try {
|
|
19
|
+
return await fn();
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
23
|
+
// Don't retry if error is not retryable
|
|
24
|
+
if (opts.retryableErrors && opts.retryableErrors.length > 0) {
|
|
25
|
+
if (!opts.retryableErrors.some((pattern) => lastError.message.includes(pattern))) {
|
|
26
|
+
throw lastError;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Don't retry on last attempt
|
|
30
|
+
if (attempt === opts.maxAttempts) {
|
|
31
|
+
throw lastError;
|
|
32
|
+
}
|
|
33
|
+
// Calculate delay with exponential backoff and jitter
|
|
34
|
+
const delay = Math.min(opts.baseDelay * Math.pow(2, attempt - 1) + Math.random() * 1000, opts.maxDelay);
|
|
35
|
+
opts.onRetry?.(attempt, lastError, delay);
|
|
36
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
throw lastError;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/core/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,MAAM,QAAQ,GAAiB;IAC7B,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,EAAoB,EAAE,OAA+B;IACtF,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IACzC,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhE,wCAAwC;YACxC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBAClF,MAAM,SAAS,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,MAAM,SAAS,CAAC;YAClB,CAAC;YAED,sDAAsD;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAExG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAE1C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,SAAU,CAAC;AACnB,CAAC"}
|