@fideliosai/server 2026.331.0-canary.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/LICENSE +22 -0
- package/dist/adapters/codex-models.d.ts +4 -0
- package/dist/adapters/codex-models.d.ts.map +1 -0
- package/dist/adapters/codex-models.js +98 -0
- package/dist/adapters/codex-models.js.map +1 -0
- package/dist/adapters/cursor-models.d.ts +13 -0
- package/dist/adapters/cursor-models.d.ts.map +1 -0
- package/dist/adapters/cursor-models.js +148 -0
- package/dist/adapters/cursor-models.js.map +1 -0
- package/dist/adapters/http/execute.d.ts +3 -0
- package/dist/adapters/http/execute.d.ts.map +1 -0
- package/dist/adapters/http/execute.js +39 -0
- package/dist/adapters/http/execute.js.map +1 -0
- package/dist/adapters/http/index.d.ts +3 -0
- package/dist/adapters/http/index.d.ts.map +1 -0
- package/dist/adapters/http/index.js +20 -0
- package/dist/adapters/http/index.js.map +1 -0
- package/dist/adapters/http/test.d.ts +3 -0
- package/dist/adapters/http/test.d.ts.map +1 -0
- package/dist/adapters/http/test.js +106 -0
- package/dist/adapters/http/test.js.map +1 -0
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/process/execute.d.ts +3 -0
- package/dist/adapters/process/execute.d.ts.map +1 -0
- package/dist/adapters/process/execute.js +63 -0
- package/dist/adapters/process/execute.js.map +1 -0
- package/dist/adapters/process/index.d.ts +3 -0
- package/dist/adapters/process/index.d.ts.map +1 -0
- package/dist/adapters/process/index.js +23 -0
- package/dist/adapters/process/index.js.map +1 -0
- package/dist/adapters/process/test.d.ts +3 -0
- package/dist/adapters/process/test.d.ts.map +1 -0
- package/dist/adapters/process/test.js +77 -0
- package/dist/adapters/process/test.js.map +1 -0
- package/dist/adapters/registry.d.ts +14 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +164 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/types.d.ts +2 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/utils.d.ts +10 -0
- package/dist/adapters/utils.d.ts.map +1 -0
- package/dist/adapters/utils.js +14 -0
- package/dist/adapters/utils.js.map +1 -0
- package/dist/agent-auth-jwt.d.ts +14 -0
- package/dist/agent-auth-jwt.d.ts.map +1 -0
- package/dist/agent-auth-jwt.js +117 -0
- package/dist/agent-auth-jwt.js.map +1 -0
- package/dist/app.d.ts +25 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +265 -0
- package/dist/app.js.map +1 -0
- package/dist/attachment-types.d.ts +33 -0
- package/dist/attachment-types.d.ts.map +1 -0
- package/dist/attachment-types.js +67 -0
- package/dist/attachment-types.js.map +1 -0
- package/dist/auth/better-auth.d.ts +24 -0
- package/dist/auth/better-auth.d.ts.map +1 -0
- package/dist/auth/better-auth.js +108 -0
- package/dist/auth/better-auth.js.map +1 -0
- package/dist/board-claim.d.ts +23 -0
- package/dist/board-claim.d.ts.map +1 -0
- package/dist/board-claim.js +115 -0
- package/dist/board-claim.js.map +1 -0
- package/dist/config-file.d.ts +3 -0
- package/dist/config-file.d.ts.map +1 -0
- package/dist/config-file.js +16 -0
- package/dist/config-file.js.map +1 -0
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +171 -0
- package/dist/config.js.map +1 -0
- package/dist/dev-server-status.d.ts +27 -0
- package/dist/dev-server-status.d.ts.map +1 -0
- package/dist/dev-server-status.js +70 -0
- package/dist/dev-server-status.js.map +1 -0
- package/dist/dev-watch-ignore.d.ts +2 -0
- package/dist/dev-watch-ignore.d.ts.map +1 -0
- package/dist/dev-watch-ignore.js +33 -0
- package/dist/dev-watch-ignore.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +28 -0
- package/dist/errors.js.map +1 -0
- package/dist/home-paths.d.ts +17 -0
- package/dist/home-paths.d.ts.map +1 -0
- package/dist/home-paths.js +75 -0
- package/dist/home-paths.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +642 -0
- package/dist/index.js.map +1 -0
- package/dist/log-redaction.d.ts +11 -0
- package/dist/log-redaction.d.ts.map +1 -0
- package/dist/log-redaction.js +118 -0
- package/dist/log-redaction.js.map +1 -0
- package/dist/middleware/auth.d.ts +12 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +144 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/board-mutation-guard.d.ts +3 -0
- package/dist/middleware/board-mutation-guard.d.ts.map +1 -0
- package/dist/middleware/board-mutation-guard.js +59 -0
- package/dist/middleware/board-mutation-guard.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +17 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +37 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +4 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logger.d.ts +4 -0
- package/dist/middleware/logger.d.ts.map +1 -0
- package/dist/middleware/logger.js +87 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/private-hostname-guard.d.ts +11 -0
- package/dist/middleware/private-hostname-guard.d.ts.map +1 -0
- package/dist/middleware/private-hostname-guard.js +78 -0
- package/dist/middleware/private-hostname-guard.js.map +1 -0
- package/dist/middleware/validate.d.ts +4 -0
- package/dist/middleware/validate.d.ts.map +1 -0
- package/dist/middleware/validate.js +7 -0
- package/dist/middleware/validate.js.map +1 -0
- package/dist/onboarding-assets/ceo/AGENTS.md +54 -0
- package/dist/onboarding-assets/ceo/HEARTBEAT.md +72 -0
- package/dist/onboarding-assets/ceo/SOUL.md +33 -0
- package/dist/onboarding-assets/ceo/TOOLS.md +3 -0
- package/dist/onboarding-assets/default/AGENTS.md +3 -0
- package/dist/paths.d.ts +3 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +31 -0
- package/dist/paths.js.map +1 -0
- package/dist/realtime/live-events-ws.d.ts +28 -0
- package/dist/realtime/live-events-ws.d.ts.map +1 -0
- package/dist/realtime/live-events-ws.js +187 -0
- package/dist/realtime/live-events-ws.js.map +1 -0
- package/dist/redaction.d.ts +4 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +63 -0
- package/dist/redaction.js.map +1 -0
- package/dist/routes/access.d.ts +61 -0
- package/dist/routes/access.d.ts.map +1 -0
- package/dist/routes/access.js +2265 -0
- package/dist/routes/access.js.map +1 -0
- package/dist/routes/activity.d.ts +3 -0
- package/dist/routes/activity.d.ts.map +1 -0
- package/dist/routes/activity.js +78 -0
- package/dist/routes/activity.js.map +1 -0
- package/dist/routes/agents.d.ts +3 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +1828 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/approvals.d.ts +3 -0
- package/dist/routes/approvals.d.ts.map +1 -0
- package/dist/routes/approvals.js +275 -0
- package/dist/routes/approvals.js.map +1 -0
- package/dist/routes/assets.d.ts +4 -0
- package/dist/routes/assets.d.ts.map +1 -0
- package/dist/routes/assets.js +309 -0
- package/dist/routes/assets.js.map +1 -0
- package/dist/routes/authz.d.ts +16 -0
- package/dist/routes/authz.d.ts.map +1 -0
- package/dist/routes/authz.js +47 -0
- package/dist/routes/authz.js.map +1 -0
- package/dist/routes/companies.d.ts +4 -0
- package/dist/routes/companies.d.ts.map +1 -0
- package/dist/routes/companies.js +303 -0
- package/dist/routes/companies.js.map +1 -0
- package/dist/routes/company-skills.d.ts +3 -0
- package/dist/routes/company-skills.d.ts.map +1 -0
- package/dist/routes/company-skills.js +228 -0
- package/dist/routes/company-skills.js.map +1 -0
- package/dist/routes/costs.d.ts +3 -0
- package/dist/routes/costs.d.ts.map +1 -0
- package/dist/routes/costs.js +268 -0
- package/dist/routes/costs.js.map +1 -0
- package/dist/routes/dashboard.d.ts +3 -0
- package/dist/routes/dashboard.d.ts.map +1 -0
- package/dist/routes/dashboard.js +15 -0
- package/dist/routes/dashboard.js.map +1 -0
- package/dist/routes/execution-workspaces.d.ts +3 -0
- package/dist/routes/execution-workspaces.d.ts.map +1 -0
- package/dist/routes/execution-workspaces.js +165 -0
- package/dist/routes/execution-workspaces.js.map +1 -0
- package/dist/routes/goals.d.ts +3 -0
- package/dist/routes/goals.d.ts.map +1 -0
- package/dist/routes/goals.js +95 -0
- package/dist/routes/goals.js.map +1 -0
- package/dist/routes/health.d.ts +9 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +69 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +18 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +18 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/instance-settings.d.ts +3 -0
- package/dist/routes/instance-settings.d.ts.map +1 -0
- package/dist/routes/instance-settings.js +71 -0
- package/dist/routes/instance-settings.js.map +1 -0
- package/dist/routes/issues-checkout-wakeup.d.ts +9 -0
- package/dist/routes/issues-checkout-wakeup.d.ts.map +1 -0
- package/dist/routes/issues-checkout-wakeup.js +12 -0
- package/dist/routes/issues-checkout-wakeup.js.map +1 -0
- package/dist/routes/issues.d.ts +4 -0
- package/dist/routes/issues.d.ts.map +1 -0
- package/dist/routes/issues.js +1520 -0
- package/dist/routes/issues.js.map +1 -0
- package/dist/routes/llms.d.ts +3 -0
- package/dist/routes/llms.d.ts.map +1 -0
- package/dist/routes/llms.js +78 -0
- package/dist/routes/llms.js.map +1 -0
- package/dist/routes/org-chart-svg.d.ts +25 -0
- package/dist/routes/org-chart-svg.d.ts.map +1 -0
- package/dist/routes/org-chart-svg.js +657 -0
- package/dist/routes/org-chart-svg.js.map +1 -0
- package/dist/routes/plugin-ui-static.d.ts +69 -0
- package/dist/routes/plugin-ui-static.d.ts.map +1 -0
- package/dist/routes/plugin-ui-static.js +411 -0
- package/dist/routes/plugin-ui-static.js.map +1 -0
- package/dist/routes/plugins.d.ts +120 -0
- package/dist/routes/plugins.d.ts.map +1 -0
- package/dist/routes/plugins.js +1784 -0
- package/dist/routes/plugins.js.map +1 -0
- package/dist/routes/projects.d.ts +3 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +257 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/routines.d.ts +3 -0
- package/dist/routes/routines.d.ts.map +1 -0
- package/dist/routes/routines.js +277 -0
- package/dist/routes/routines.js.map +1 -0
- package/dist/routes/secrets.d.ts +3 -0
- package/dist/routes/secrets.d.ts.map +1 -0
- package/dist/routes/secrets.js +128 -0
- package/dist/routes/secrets.js.map +1 -0
- package/dist/routes/sidebar-badges.d.ts +3 -0
- package/dist/routes/sidebar-badges.d.ts.map +1 -0
- package/dist/routes/sidebar-badges.js +45 -0
- package/dist/routes/sidebar-badges.js.map +1 -0
- package/dist/secrets/external-stub-providers.d.ts +5 -0
- package/dist/secrets/external-stub-providers.d.ts.map +1 -0
- package/dist/secrets/external-stub-providers.js +21 -0
- package/dist/secrets/external-stub-providers.js.map +1 -0
- package/dist/secrets/local-encrypted-provider.d.ts +3 -0
- package/dist/secrets/local-encrypted-provider.d.ts.map +1 -0
- package/dist/secrets/local-encrypted-provider.js +116 -0
- package/dist/secrets/local-encrypted-provider.js.map +1 -0
- package/dist/secrets/provider-registry.d.ts +5 -0
- package/dist/secrets/provider-registry.d.ts.map +1 -0
- package/dist/secrets/provider-registry.js +20 -0
- package/dist/secrets/provider-registry.js.map +1 -0
- package/dist/secrets/types.d.ts +21 -0
- package/dist/secrets/types.d.ts.map +1 -0
- package/dist/secrets/types.js +2 -0
- package/dist/secrets/types.js.map +1 -0
- package/dist/services/access.d.ts +113 -0
- package/dist/services/access.d.ts.map +1 -0
- package/dist/services/access.js +247 -0
- package/dist/services/access.js.map +1 -0
- package/dist/services/activity-log.d.ts +17 -0
- package/dist/services/activity-log.d.ts.map +1 -0
- package/dist/services/activity-log.js +74 -0
- package/dist/services/activity-log.js.map +1 -0
- package/dist/services/activity.d.ts +764 -0
- package/dist/services/activity.d.ts.map +1 -0
- package/dist/services/activity.js +105 -0
- package/dist/services/activity.js.map +1 -0
- package/dist/services/agent-instructions.d.ts +91 -0
- package/dist/services/agent-instructions.d.ts.map +1 -0
- package/dist/services/agent-instructions.js +580 -0
- package/dist/services/agent-instructions.js.map +1 -0
- package/dist/services/agent-permissions.d.ts +6 -0
- package/dist/services/agent-permissions.d.ts.map +1 -0
- package/dist/services/agent-permissions.js +18 -0
- package/dist/services/agent-permissions.js.map +1 -0
- package/dist/services/agents.d.ts +1670 -0
- package/dist/services/agents.d.ts.map +1 -0
- package/dist/services/agents.js +566 -0
- package/dist/services/agents.js.map +1 -0
- package/dist/services/approvals.d.ts +546 -0
- package/dist/services/approvals.d.ts.map +1 -0
- package/dist/services/approvals.js +212 -0
- package/dist/services/approvals.js.map +1 -0
- package/dist/services/assets.d.ts +33 -0
- package/dist/services/assets.d.ts.map +1 -0
- package/dist/services/assets.js +17 -0
- package/dist/services/assets.js.map +1 -0
- package/dist/services/board-auth.d.ts +234 -0
- package/dist/services/board-auth.d.ts.map +1 -0
- package/dist/services/board-auth.js +295 -0
- package/dist/services/board-auth.js.map +1 -0
- package/dist/services/budgets.d.ts +38 -0
- package/dist/services/budgets.d.ts.map +1 -0
- package/dist/services/budgets.js +784 -0
- package/dist/services/budgets.js.map +1 -0
- package/dist/services/companies.d.ts +124 -0
- package/dist/services/companies.d.ts.map +1 -0
- package/dist/services/companies.js +256 -0
- package/dist/services/companies.js.map +1 -0
- package/dist/services/company-export-readme.d.ts +17 -0
- package/dist/services/company-export-readme.d.ts.map +1 -0
- package/dist/services/company-export-readme.js +148 -0
- package/dist/services/company-export-readme.js.map +1 -0
- package/dist/services/company-portability.d.ts +23 -0
- package/dist/services/company-portability.d.ts.map +1 -0
- package/dist/services/company-portability.js +3739 -0
- package/dist/services/company-portability.js.map +1 -0
- package/dist/services/company-skills.d.ts +77 -0
- package/dist/services/company-skills.d.ts.map +1 -0
- package/dist/services/company-skills.js +2042 -0
- package/dist/services/company-skills.js.map +1 -0
- package/dist/services/costs.d.ts +114 -0
- package/dist/services/costs.d.ts.map +1 -0
- package/dist/services/costs.js +294 -0
- package/dist/services/costs.js.map +1 -0
- package/dist/services/cron.d.ts +80 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +300 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/dashboard.d.ts +26 -0
- package/dist/services/dashboard.d.ts.map +1 -0
- package/dist/services/dashboard.js +98 -0
- package/dist/services/dashboard.js.map +1 -0
- package/dist/services/default-agent-instructions.d.ts +9 -0
- package/dist/services/default-agent-instructions.d.ts.map +1 -0
- package/dist/services/default-agent-instructions.js +20 -0
- package/dist/services/default-agent-instructions.js.map +1 -0
- package/dist/services/documents.d.ts +164 -0
- package/dist/services/documents.d.ts.map +1 -0
- package/dist/services/documents.js +382 -0
- package/dist/services/documents.js.map +1 -0
- package/dist/services/execution-workspace-policy.d.ts +21 -0
- package/dist/services/execution-workspace-policy.d.ts.map +1 -0
- package/dist/services/execution-workspace-policy.js +177 -0
- package/dist/services/execution-workspace-policy.js.map +1 -0
- package/dist/services/execution-workspaces.d.ts +19 -0
- package/dist/services/execution-workspaces.d.ts.map +1 -0
- package/dist/services/execution-workspaces.js +87 -0
- package/dist/services/execution-workspaces.js.map +1 -0
- package/dist/services/finance.d.ts +93 -0
- package/dist/services/finance.d.ts.map +1 -0
- package/dist/services/finance.js +120 -0
- package/dist/services/finance.js.map +1 -0
- package/dist/services/goals.d.ts +433 -0
- package/dist/services/goals.d.ts.map +1 -0
- package/dist/services/goals.js +54 -0
- package/dist/services/goals.js.map +1 -0
- package/dist/services/heartbeat-run-summary.d.ts +2 -0
- package/dist/services/heartbeat-run-summary.d.ts.map +1 -0
- package/dist/services/heartbeat-run-summary.js +30 -0
- package/dist/services/heartbeat-run-summary.js.map +1 -0
- package/dist/services/heartbeat.d.ts +812 -0
- package/dist/services/heartbeat.d.ts.map +1 -0
- package/dist/services/heartbeat.js +3156 -0
- package/dist/services/heartbeat.js.map +1 -0
- package/dist/services/hire-hook.d.ts +14 -0
- package/dist/services/hire-hook.d.ts.map +1 -0
- package/dist/services/hire-hook.js +85 -0
- package/dist/services/hire-hook.js.map +1 -0
- package/dist/services/index.d.ts +33 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +33 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/instance-settings.d.ts +11 -0
- package/dist/services/instance-settings.d.ts.map +1 -0
- package/dist/services/instance-settings.js +116 -0
- package/dist/services/instance-settings.js.map +1 -0
- package/dist/services/issue-approvals.d.ts +56 -0
- package/dist/services/issue-approvals.d.ts.map +1 -0
- package/dist/services/issue-approvals.js +153 -0
- package/dist/services/issue-approvals.js.map +1 -0
- package/dist/services/issue-assignment-wakeup.d.ts +29 -0
- package/dist/services/issue-assignment-wakeup.d.ts.map +1 -0
- package/dist/services/issue-assignment-wakeup.js +22 -0
- package/dist/services/issue-assignment-wakeup.js.map +1 -0
- package/dist/services/issue-goal-fallback.d.ts +18 -0
- package/dist/services/issue-goal-fallback.d.ts.map +1 -0
- package/dist/services/issue-goal-fallback.js +33 -0
- package/dist/services/issue-goal-fallback.js.map +1 -0
- package/dist/services/issues.d.ts +560 -0
- package/dist/services/issues.d.ts.map +1 -0
- package/dist/services/issues.js +1478 -0
- package/dist/services/issues.js.map +1 -0
- package/dist/services/live-events.d.ts +17 -0
- package/dist/services/live-events.d.ts.map +1 -0
- package/dist/services/live-events.js +33 -0
- package/dist/services/live-events.js.map +1 -0
- package/dist/services/plugin-capability-validator.d.ts +108 -0
- package/dist/services/plugin-capability-validator.d.ts.map +1 -0
- package/dist/services/plugin-capability-validator.js +268 -0
- package/dist/services/plugin-capability-validator.js.map +1 -0
- package/dist/services/plugin-config-validator.d.ts +26 -0
- package/dist/services/plugin-config-validator.d.ts.map +1 -0
- package/dist/services/plugin-config-validator.js +41 -0
- package/dist/services/plugin-config-validator.js.map +1 -0
- package/dist/services/plugin-dev-watcher.d.ts +30 -0
- package/dist/services/plugin-dev-watcher.d.ts.map +1 -0
- package/dist/services/plugin-dev-watcher.js +241 -0
- package/dist/services/plugin-dev-watcher.js.map +1 -0
- package/dist/services/plugin-event-bus.d.ts +149 -0
- package/dist/services/plugin-event-bus.d.ts.map +1 -0
- package/dist/services/plugin-event-bus.js +258 -0
- package/dist/services/plugin-event-bus.js.map +1 -0
- package/dist/services/plugin-host-service-cleanup.d.ts +14 -0
- package/dist/services/plugin-host-service-cleanup.d.ts.map +1 -0
- package/dist/services/plugin-host-service-cleanup.js +37 -0
- package/dist/services/plugin-host-service-cleanup.js.map +1 -0
- package/dist/services/plugin-host-services.d.ts +13 -0
- package/dist/services/plugin-host-services.d.ts.map +1 -0
- package/dist/services/plugin-host-services.js +969 -0
- package/dist/services/plugin-host-services.js.map +1 -0
- package/dist/services/plugin-job-coordinator.d.ts +81 -0
- package/dist/services/plugin-job-coordinator.d.ts.map +1 -0
- package/dist/services/plugin-job-coordinator.js +172 -0
- package/dist/services/plugin-job-coordinator.js.map +1 -0
- package/dist/services/plugin-job-scheduler.d.ts +163 -0
- package/dist/services/plugin-job-scheduler.d.ts.map +1 -0
- package/dist/services/plugin-job-scheduler.js +454 -0
- package/dist/services/plugin-job-scheduler.js.map +1 -0
- package/dist/services/plugin-job-store.d.ts +208 -0
- package/dist/services/plugin-job-store.d.ts.map +1 -0
- package/dist/services/plugin-job-store.js +350 -0
- package/dist/services/plugin-job-store.js.map +1 -0
- package/dist/services/plugin-lifecycle.d.ts +203 -0
- package/dist/services/plugin-lifecycle.d.ts.map +1 -0
- package/dist/services/plugin-lifecycle.js +476 -0
- package/dist/services/plugin-lifecycle.js.map +1 -0
- package/dist/services/plugin-loader.d.ts +441 -0
- package/dist/services/plugin-loader.d.ts.map +1 -0
- package/dist/services/plugin-loader.js +1192 -0
- package/dist/services/plugin-loader.js.map +1 -0
- package/dist/services/plugin-log-retention.d.ts +20 -0
- package/dist/services/plugin-log-retention.d.ts.map +1 -0
- package/dist/services/plugin-log-retention.js +63 -0
- package/dist/services/plugin-log-retention.js.map +1 -0
- package/dist/services/plugin-manifest-validator.d.ts +79 -0
- package/dist/services/plugin-manifest-validator.d.ts.map +1 -0
- package/dist/services/plugin-manifest-validator.js +84 -0
- package/dist/services/plugin-manifest-validator.js.map +1 -0
- package/dist/services/plugin-registry.d.ts +2542 -0
- package/dist/services/plugin-registry.d.ts.map +1 -0
- package/dist/services/plugin-registry.js +539 -0
- package/dist/services/plugin-registry.js.map +1 -0
- package/dist/services/plugin-runtime-sandbox.d.ts +40 -0
- package/dist/services/plugin-runtime-sandbox.d.ts.map +1 -0
- package/dist/services/plugin-runtime-sandbox.js +154 -0
- package/dist/services/plugin-runtime-sandbox.js.map +1 -0
- package/dist/services/plugin-secrets-handler.d.ts +81 -0
- package/dist/services/plugin-secrets-handler.d.ts.map +1 -0
- package/dist/services/plugin-secrets-handler.js +275 -0
- package/dist/services/plugin-secrets-handler.js.map +1 -0
- package/dist/services/plugin-state-store.d.ts +92 -0
- package/dist/services/plugin-state-store.d.ts.map +1 -0
- package/dist/services/plugin-state-store.js +190 -0
- package/dist/services/plugin-state-store.js.map +1 -0
- package/dist/services/plugin-stream-bus.d.ts +29 -0
- package/dist/services/plugin-stream-bus.d.ts.map +1 -0
- package/dist/services/plugin-stream-bus.js +48 -0
- package/dist/services/plugin-stream-bus.js.map +1 -0
- package/dist/services/plugin-tool-dispatcher.d.ts +180 -0
- package/dist/services/plugin-tool-dispatcher.d.ts.map +1 -0
- package/dist/services/plugin-tool-dispatcher.js +224 -0
- package/dist/services/plugin-tool-dispatcher.js.map +1 -0
- package/dist/services/plugin-tool-registry.d.ts +192 -0
- package/dist/services/plugin-tool-registry.d.ts.map +1 -0
- package/dist/services/plugin-tool-registry.js +224 -0
- package/dist/services/plugin-tool-registry.js.map +1 -0
- package/dist/services/plugin-worker-manager.d.ts +260 -0
- package/dist/services/plugin-worker-manager.d.ts.map +1 -0
- package/dist/services/plugin-worker-manager.js +835 -0
- package/dist/services/plugin-worker-manager.js.map +1 -0
- package/dist/services/projects.d.ts +87 -0
- package/dist/services/projects.d.ts.map +1 -0
- package/dist/services/projects.js +656 -0
- package/dist/services/projects.js.map +1 -0
- package/dist/services/quota-windows.d.ts +9 -0
- package/dist/services/quota-windows.d.ts.map +1 -0
- package/dist/services/quota-windows.js +56 -0
- package/dist/services/quota-windows.js.map +1 -0
- package/dist/services/routines.d.ts +135 -0
- package/dist/services/routines.d.ts.map +1 -0
- package/dist/services/routines.js +1105 -0
- package/dist/services/routines.js.map +1 -0
- package/dist/services/run-log-store.d.ts +34 -0
- package/dist/services/run-log-store.d.ts.map +1 -0
- package/dist/services/run-log-store.js +109 -0
- package/dist/services/run-log-store.js.map +1 -0
- package/dist/services/secrets.d.ts +511 -0
- package/dist/services/secrets.d.ts.map +1 -0
- package/dist/services/secrets.js +289 -0
- package/dist/services/secrets.js.map +1 -0
- package/dist/services/sidebar-badges.d.ts +9 -0
- package/dist/services/sidebar-badges.d.ts.map +1 -0
- package/dist/services/sidebar-badges.js +33 -0
- package/dist/services/sidebar-badges.js.map +1 -0
- package/dist/services/work-products.d.ts +14 -0
- package/dist/services/work-products.d.ts.map +1 -0
- package/dist/services/work-products.js +100 -0
- package/dist/services/work-products.js.map +1 -0
- package/dist/services/workspace-operation-log-store.d.ts +33 -0
- package/dist/services/workspace-operation-log-store.d.ts.map +1 -0
- package/dist/services/workspace-operation-log-store.js +110 -0
- package/dist/services/workspace-operation-log-store.js.map +1 -0
- package/dist/services/workspace-operations.d.ts +44 -0
- package/dist/services/workspace-operations.d.ts.map +1 -0
- package/dist/services/workspace-operations.js +211 -0
- package/dist/services/workspace-operations.js.map +1 -0
- package/dist/services/workspace-runtime.d.ts +164 -0
- package/dist/services/workspace-runtime.d.ts.map +1 -0
- package/dist/services/workspace-runtime.js +1235 -0
- package/dist/services/workspace-runtime.js.map +1 -0
- package/dist/startup-banner.d.ts +31 -0
- package/dist/startup-banner.d.ts.map +1 -0
- package/dist/startup-banner.js +117 -0
- package/dist/startup-banner.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +29 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local-disk-provider.d.ts +3 -0
- package/dist/storage/local-disk-provider.d.ts.map +1 -0
- package/dist/storage/local-disk-provider.js +79 -0
- package/dist/storage/local-disk-provider.js.map +1 -0
- package/dist/storage/provider-registry.d.ts +4 -0
- package/dist/storage/provider-registry.d.ts.map +1 -0
- package/dist/storage/provider-registry.js +15 -0
- package/dist/storage/provider-registry.js.map +1 -0
- package/dist/storage/s3-provider.d.ts +11 -0
- package/dist/storage/s3-provider.d.ts.map +1 -0
- package/dist/storage/s3-provider.js +123 -0
- package/dist/storage/s3-provider.js.map +1 -0
- package/dist/storage/service.d.ts +3 -0
- package/dist/storage/service.d.ts.map +1 -0
- package/dist/storage/service.js +120 -0
- package/dist/storage/service.js.map +1 -0
- package/dist/storage/types.d.ts +55 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/ui-branding.d.ts +13 -0
- package/dist/ui-branding.d.ts.map +1 -0
- package/dist/ui-branding.js +188 -0
- package/dist/ui-branding.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/worktree-config.d.ts +19 -0
- package/dist/worktree-config.d.ts.map +1 -0
- package/dist/worktree-config.js +365 -0
- package/dist/worktree-config.js.map +1 -0
- package/package.json +90 -0
- package/skills/fidelios/SKILL.md +365 -0
- package/skills/fidelios/references/api-reference.md +647 -0
- package/skills/fidelios/references/company-skills.md +193 -0
- package/skills/fidelios-create-agent/SKILL.md +142 -0
- package/skills/fidelios-create-agent/references/api-reference.md +105 -0
- package/skills/fidelios-create-plugin/SKILL.md +101 -0
- package/skills/para-memory-files/SKILL.md +104 -0
- package/skills/para-memory-files/references/schemas.md +35 -0
- package/ui-dist/android-chrome-192x192.png +0 -0
- package/ui-dist/android-chrome-512x512.png +0 -0
- package/ui-dist/apple-touch-icon.png +0 -0
- package/ui-dist/assets/_basePickBy-DDS8rFE9.js +1 -0
- package/ui-dist/assets/_baseUniq-BTIdqnfJ.js +1 -0
- package/ui-dist/assets/apl-B4CMkyY2.js +1 -0
- package/ui-dist/assets/arc-CER6ytAf.js +1 -0
- package/ui-dist/assets/architectureDiagram-VXUJARFQ-CrJvVSPh.js +36 -0
- package/ui-dist/assets/asciiarmor-Df11BRmG.js +1 -0
- package/ui-dist/assets/asn1-EdZsLKOL.js +1 -0
- package/ui-dist/assets/asterisk-B-8jnY81.js +1 -0
- package/ui-dist/assets/blockDiagram-VD42YOAC-p-DB7nkA.js +122 -0
- package/ui-dist/assets/brainfuck-C4LP7Hcl.js +1 -0
- package/ui-dist/assets/c4Diagram-YG6GDRKO-D1K75fYz.js +10 -0
- package/ui-dist/assets/channel-B1viE-VZ.js +1 -0
- package/ui-dist/assets/chunk-4BX2VUAB-C1J-fCaK.js +1 -0
- package/ui-dist/assets/chunk-55IACEB6-CjEOgVYA.js +1 -0
- package/ui-dist/assets/chunk-B4BG7PRW-CGZwFaze.js +165 -0
- package/ui-dist/assets/chunk-DI55MBZ5-Dp2ZahPN.js +220 -0
- package/ui-dist/assets/chunk-FMBD7UC4-nXC1OkzD.js +15 -0
- package/ui-dist/assets/chunk-QN33PNHL-D_uFCkMK.js +1 -0
- package/ui-dist/assets/chunk-QZHKN3VN-CG3WK_AN.js +1 -0
- package/ui-dist/assets/chunk-TZMSLE5B-COlBSWdP.js +1 -0
- package/ui-dist/assets/classDiagram-2ON5EDUG-Cs4NEMXI.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-Cs4NEMXI.js +1 -0
- package/ui-dist/assets/clike-B9uivgTg.js +1 -0
- package/ui-dist/assets/clojure-BMjYHr_A.js +1 -0
- package/ui-dist/assets/clone-CGwZV8ud.js +1 -0
- package/ui-dist/assets/cmake-BQqOBYOt.js +1 -0
- package/ui-dist/assets/cobol-CWcv1MsR.js +1 -0
- package/ui-dist/assets/coffeescript-S37ZYGWr.js +1 -0
- package/ui-dist/assets/commonlisp-DBKNyK5s.js +1 -0
- package/ui-dist/assets/cose-bilkent-S5V4N54A-B9XYqCMb.js +1 -0
- package/ui-dist/assets/crystal-SjHAIU92.js +1 -0
- package/ui-dist/assets/css-BnMrqG3P.js +1 -0
- package/ui-dist/assets/cypher-C_CwsFkJ.js +1 -0
- package/ui-dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
- package/ui-dist/assets/d-pRatUO7H.js +1 -0
- package/ui-dist/assets/dagre-6UL2VRFP-DcCdBLC7.js +4 -0
- package/ui-dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/ui-dist/assets/diagram-PSM6KHXK-np1kLquy.js +24 -0
- package/ui-dist/assets/diagram-QEK2KX5R-C-b4qIN1.js +43 -0
- package/ui-dist/assets/diagram-S2PKOQOG-Ba-173Ug.js +24 -0
- package/ui-dist/assets/diff-DbItnlRl.js +1 -0
- package/ui-dist/assets/dockerfile-BKs6k2Af.js +1 -0
- package/ui-dist/assets/dtd-DF_7sFjM.js +1 -0
- package/ui-dist/assets/dylan-DwRh75JA.js +1 -0
- package/ui-dist/assets/ebnf-CDyGwa7X.js +1 -0
- package/ui-dist/assets/ecl-Cabwm37j.js +1 -0
- package/ui-dist/assets/eiffel-CnydiIhH.js +1 -0
- package/ui-dist/assets/elm-vLlmbW-K.js +1 -0
- package/ui-dist/assets/erDiagram-Q2GNP2WA-BBmkHiJP.js +60 -0
- package/ui-dist/assets/erlang-BNw1qcRV.js +1 -0
- package/ui-dist/assets/factor-kuTfRLto.js +1 -0
- package/ui-dist/assets/fcl-Kvtd6kyn.js +1 -0
- package/ui-dist/assets/flowDiagram-NV44I4VS-Dj_iTDkp.js +162 -0
- package/ui-dist/assets/forth-Ffai-XNe.js +1 -0
- package/ui-dist/assets/fortran-DYz_wnZ1.js +1 -0
- package/ui-dist/assets/ganttDiagram-JELNMOA3-Bn1hanTg.js +267 -0
- package/ui-dist/assets/gas-Bneqetm1.js +1 -0
- package/ui-dist/assets/gherkin-heZmZLOM.js +1 -0
- package/ui-dist/assets/gitGraphDiagram-V2S2FVAM-BjmRpty0.js +65 -0
- package/ui-dist/assets/graph-CWBOAGTW.js +1 -0
- package/ui-dist/assets/groovy-D9Dt4D0W.js +1 -0
- package/ui-dist/assets/haskell-Cw1EW3IL.js +1 -0
- package/ui-dist/assets/haxe-H-WmDvRZ.js +1 -0
- package/ui-dist/assets/http-DBlCnlav.js +1 -0
- package/ui-dist/assets/idl-BEugSyMb.js +1 -0
- package/ui-dist/assets/index-B52MtqBm.js +1 -0
- package/ui-dist/assets/index-BEBYIFOJ.js +1 -0
- package/ui-dist/assets/index-BIvl9YFB.js +1 -0
- package/ui-dist/assets/index-BNyP1gwD.js +1 -0
- package/ui-dist/assets/index-BRW6bV_B.js +6 -0
- package/ui-dist/assets/index-BcQTWaKH.js +1 -0
- package/ui-dist/assets/index-BfKYbH5T.js +13 -0
- package/ui-dist/assets/index-BhX49pA0.js +1 -0
- package/ui-dist/assets/index-BoFaTgOC.js +2 -0
- package/ui-dist/assets/index-C-Es83iE.js +7 -0
- package/ui-dist/assets/index-C3LG8kvr.js +1 -0
- package/ui-dist/assets/index-C5Z9j0rD.js +1 -0
- package/ui-dist/assets/index-CFlEF-gp.js +1 -0
- package/ui-dist/assets/index-Cjm12V39.js +1 -0
- package/ui-dist/assets/index-Cp84QmJD.css +1 -0
- package/ui-dist/assets/index-D2t01AH0.js +1 -0
- package/ui-dist/assets/index-DEt1jkxJ.js +1 -0
- package/ui-dist/assets/index-DeAKBJuz.js +3 -0
- package/ui-dist/assets/index-Du65R_Zq.js +1 -0
- package/ui-dist/assets/index-WUHteAuP.js +1 -0
- package/ui-dist/assets/index-Y_jO6IK_.js +1180 -0
- package/ui-dist/assets/index-ZQU9QA5y.js +1 -0
- package/ui-dist/assets/index-f6wRGThx.js +1 -0
- package/ui-dist/assets/index-hMuLlvYa.js +1 -0
- package/ui-dist/assets/infoDiagram-HS3SLOUP-CVMKJlmV.js +2 -0
- package/ui-dist/assets/init-Gi6I4Gst.js +1 -0
- package/ui-dist/assets/javascript-iXu5QeM3.js +1 -0
- package/ui-dist/assets/journeyDiagram-XKPGCS4Q-FrNTHHMi.js +139 -0
- package/ui-dist/assets/julia-DuME0IfC.js +1 -0
- package/ui-dist/assets/kanban-definition-3W4ZIXB7-BQYKwdVh.js +89 -0
- package/ui-dist/assets/katex-O9d3_IXG.js +261 -0
- package/ui-dist/assets/layout-BxccZ6zb.js +1 -0
- package/ui-dist/assets/linear-Db-Yv5jO.js +1 -0
- package/ui-dist/assets/livescript-BwQOo05w.js +1 -0
- package/ui-dist/assets/lua-BgMRiT3U.js +1 -0
- package/ui-dist/assets/mathematica-DTrFuWx2.js +1 -0
- package/ui-dist/assets/mbox-CNhZ1qSd.js +1 -0
- package/ui-dist/assets/mermaid.core-BCE9tDOe.js +256 -0
- package/ui-dist/assets/mindmap-definition-VGOIOE7T-ZWLuqirD.js +68 -0
- package/ui-dist/assets/mirc-CjQqDB4T.js +1 -0
- package/ui-dist/assets/mllike-CXdrOF99.js +1 -0
- package/ui-dist/assets/modelica-Dc1JOy9r.js +1 -0
- package/ui-dist/assets/mscgen-BA5vi2Kp.js +1 -0
- package/ui-dist/assets/mumps-BT43cFF4.js +1 -0
- package/ui-dist/assets/nginx-DdIZxoE0.js +1 -0
- package/ui-dist/assets/nsis-LdVXkNf5.js +1 -0
- package/ui-dist/assets/ntriples-BfvgReVJ.js +1 -0
- package/ui-dist/assets/octave-Ck1zUtKM.js +1 -0
- package/ui-dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/ui-dist/assets/oz-BzwKVEFT.js +1 -0
- package/ui-dist/assets/pascal--L3eBynH.js +1 -0
- package/ui-dist/assets/perl-CdXCOZ3F.js +1 -0
- package/ui-dist/assets/pieDiagram-ADFJNKIX-D01HRHJF.js +30 -0
- package/ui-dist/assets/pig-CevX1Tat.js +1 -0
- package/ui-dist/assets/powershell-CFHJl5sT.js +1 -0
- package/ui-dist/assets/properties-C78fOPTZ.js +1 -0
- package/ui-dist/assets/protobuf-ChK-085T.js +1 -0
- package/ui-dist/assets/pug-DeIclll2.js +1 -0
- package/ui-dist/assets/puppet-DMA9R1ak.js +1 -0
- package/ui-dist/assets/python-BuPzkPfP.js +1 -0
- package/ui-dist/assets/q-pXgVlZs6.js +1 -0
- package/ui-dist/assets/quadrantDiagram-AYHSOK5B-lAmOPnB4.js +7 -0
- package/ui-dist/assets/r-B6wPVr8A.js +1 -0
- package/ui-dist/assets/requirementDiagram-UZGBJVZJ-ByNWbh-O.js +64 -0
- package/ui-dist/assets/rpm-CTu-6PCP.js +1 -0
- package/ui-dist/assets/ruby-B2Rjki9n.js +1 -0
- package/ui-dist/assets/sankeyDiagram-TZEHDZUN-Cf_Gq84u.js +10 -0
- package/ui-dist/assets/sas-B4kiWyti.js +1 -0
- package/ui-dist/assets/scheme-C41bIUwD.js +1 -0
- package/ui-dist/assets/sequenceDiagram-WL72ISMW-Bx2VZbdr.js +145 -0
- package/ui-dist/assets/shell-CjFT_Tl9.js +1 -0
- package/ui-dist/assets/sieve-C3Gn_uJK.js +1 -0
- package/ui-dist/assets/simple-mode-GW_nhZxv.js +1 -0
- package/ui-dist/assets/smalltalk-CnHTOXQT.js +1 -0
- package/ui-dist/assets/solr-DehyRSwq.js +1 -0
- package/ui-dist/assets/sparql-DkYu6x3z.js +1 -0
- package/ui-dist/assets/spreadsheet-BCZA_wO0.js +1 -0
- package/ui-dist/assets/sql-D0XecflT.js +1 -0
- package/ui-dist/assets/stateDiagram-FKZM4ZOC-vP7G7A65.js +1 -0
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-C2xpsAAO.js +1 -0
- package/ui-dist/assets/stex-C3f8Ysf7.js +1 -0
- package/ui-dist/assets/stylus-B533Al4x.js +1 -0
- package/ui-dist/assets/swift-BzpIVaGY.js +1 -0
- package/ui-dist/assets/tcl-DVfN8rqt.js +1 -0
- package/ui-dist/assets/textile-CnDTJFAw.js +1 -0
- package/ui-dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
- package/ui-dist/assets/tiki-DGYXhP31.js +1 -0
- package/ui-dist/assets/timeline-definition-IT6M3QCI-BJww-sEp.js +61 -0
- package/ui-dist/assets/toml-Bm5Em-hy.js +1 -0
- package/ui-dist/assets/treemap-GDKQZRPO-DUux14NY.js +162 -0
- package/ui-dist/assets/troff-wAsdV37c.js +1 -0
- package/ui-dist/assets/ttcn-CfJYG6tj.js +1 -0
- package/ui-dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
- package/ui-dist/assets/turtle-B1tBg_DP.js +1 -0
- package/ui-dist/assets/vb-CmGdzxic.js +1 -0
- package/ui-dist/assets/vbscript-BuJXcnF6.js +1 -0
- package/ui-dist/assets/velocity-D8B20fx6.js +1 -0
- package/ui-dist/assets/verilog-C6RDOZhf.js +1 -0
- package/ui-dist/assets/vhdl-lSbBsy5d.js +1 -0
- package/ui-dist/assets/webidl-ZXfAyPTL.js +1 -0
- package/ui-dist/assets/xquery-DzFWVndE.js +1 -0
- package/ui-dist/assets/xychartDiagram-PRI3JC2R-AU5ZOwAw.js +7 -0
- package/ui-dist/assets/yacas-BJ4BC0dw.js +1 -0
- package/ui-dist/assets/z80-Hz9HOZM7.js +1 -0
- package/ui-dist/brands/opencode-logo-dark-square.svg +18 -0
- package/ui-dist/brands/opencode-logo-light-square.svg +18 -0
- package/ui-dist/favicon-16x16.png +0 -0
- package/ui-dist/favicon-32x32.png +0 -0
- package/ui-dist/favicon-96x96.png +0 -0
- package/ui-dist/favicon.ico +0 -0
- package/ui-dist/favicon.svg +3 -0
- package/ui-dist/index.html +48 -0
- package/ui-dist/site.webmanifest +21 -0
- package/ui-dist/sw.js +42 -0
- package/ui-dist/worktree-favicon-16x16.png +0 -0
- package/ui-dist/worktree-favicon-32x32.png +0 -0
- package/ui-dist/worktree-favicon.ico +0 -0
- package/ui-dist/worktree-favicon.svg +3 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginToolDispatcher — orchestrates plugin tool discovery, lifecycle
|
|
3
|
+
* integration, and execution routing for the agent service.
|
|
4
|
+
*
|
|
5
|
+
* This service sits between the agent service and the lower-level
|
|
6
|
+
* `PluginToolRegistry` + `PluginWorkerManager`, providing a clean API that:
|
|
7
|
+
*
|
|
8
|
+
* - Discovers tools from loaded plugin manifests and registers them
|
|
9
|
+
* in the tool registry.
|
|
10
|
+
* - Hooks into `PluginLifecycleManager` events to automatically register
|
|
11
|
+
* and unregister tools when plugins are enabled or disabled.
|
|
12
|
+
* - Exposes the tool list in an agent-friendly format (with namespaced
|
|
13
|
+
* names, descriptions, parameter schemas).
|
|
14
|
+
* - Routes `executeTool` calls to the correct plugin worker and returns
|
|
15
|
+
* structured results.
|
|
16
|
+
* - Validates tool parameters against declared schemas before dispatch.
|
|
17
|
+
*
|
|
18
|
+
* The dispatcher is created once at server startup and shared across
|
|
19
|
+
* the application.
|
|
20
|
+
*
|
|
21
|
+
* @see PLUGIN_SPEC.md §11 — Agent Tools
|
|
22
|
+
* @see PLUGIN_SPEC.md §13.10 — `executeTool`
|
|
23
|
+
*/
|
|
24
|
+
import { createPluginToolRegistry, } from "./plugin-tool-registry.js";
|
|
25
|
+
import { pluginRegistryService } from "./plugin-registry.js";
|
|
26
|
+
import { logger } from "../middleware/logger.js";
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Factory: createPluginToolDispatcher
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Create a new `PluginToolDispatcher`.
|
|
32
|
+
*
|
|
33
|
+
* The dispatcher:
|
|
34
|
+
* 1. Creates and owns a `PluginToolRegistry` backed by the given worker manager.
|
|
35
|
+
* 2. Listens for lifecycle events (plugin.enabled, plugin.disabled, plugin.unloaded)
|
|
36
|
+
* to automatically register and unregister tools.
|
|
37
|
+
* 3. On `initialize()`, loads tools from all currently-ready plugins via the DB.
|
|
38
|
+
*
|
|
39
|
+
* @param options - Configuration options
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* // At server startup
|
|
44
|
+
* const dispatcher = createPluginToolDispatcher({
|
|
45
|
+
* workerManager,
|
|
46
|
+
* lifecycleManager,
|
|
47
|
+
* db,
|
|
48
|
+
* });
|
|
49
|
+
* await dispatcher.initialize();
|
|
50
|
+
*
|
|
51
|
+
* // In agent service — list tools for prompt construction
|
|
52
|
+
* const tools = dispatcher.listToolsForAgent();
|
|
53
|
+
*
|
|
54
|
+
* // In agent service — execute a tool
|
|
55
|
+
* const result = await dispatcher.executeTool(
|
|
56
|
+
* "acme.linear:search-issues",
|
|
57
|
+
* { query: "auth bug" },
|
|
58
|
+
* { agentId: "a-1", runId: "r-1", companyId: "c-1", projectId: "p-1" },
|
|
59
|
+
* );
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export function createPluginToolDispatcher(options = {}) {
|
|
63
|
+
const { workerManager, lifecycleManager, db } = options;
|
|
64
|
+
const log = logger.child({ service: "plugin-tool-dispatcher" });
|
|
65
|
+
// Create the underlying tool registry, backed by the worker manager
|
|
66
|
+
const registry = createPluginToolRegistry(workerManager);
|
|
67
|
+
// Track lifecycle event listeners so we can remove them on teardown
|
|
68
|
+
let enabledListener = null;
|
|
69
|
+
let disabledListener = null;
|
|
70
|
+
let unloadedListener = null;
|
|
71
|
+
let initialized = false;
|
|
72
|
+
// -----------------------------------------------------------------------
|
|
73
|
+
// Internal helpers
|
|
74
|
+
// -----------------------------------------------------------------------
|
|
75
|
+
/**
|
|
76
|
+
* Attempt to register tools for a plugin by looking up its manifest
|
|
77
|
+
* from the DB. No-ops gracefully if the plugin or manifest is missing.
|
|
78
|
+
*/
|
|
79
|
+
async function registerFromDb(pluginId) {
|
|
80
|
+
if (!db) {
|
|
81
|
+
log.warn({ pluginId }, "cannot register tools from DB — no database connection configured");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const pluginRegistry = pluginRegistryService(db);
|
|
85
|
+
const plugin = await pluginRegistry.getById(pluginId);
|
|
86
|
+
if (!plugin) {
|
|
87
|
+
log.warn({ pluginId }, "plugin not found in registry, cannot register tools");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const manifest = plugin.manifestJson;
|
|
91
|
+
if (!manifest) {
|
|
92
|
+
log.warn({ pluginId }, "plugin has no manifest, cannot register tools");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
registry.registerPlugin(plugin.pluginKey, manifest, plugin.id);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Convert a `RegisteredTool` to an `AgentToolDescriptor`.
|
|
99
|
+
*/
|
|
100
|
+
function toAgentDescriptor(tool) {
|
|
101
|
+
return {
|
|
102
|
+
name: tool.namespacedName,
|
|
103
|
+
displayName: tool.displayName,
|
|
104
|
+
description: tool.description,
|
|
105
|
+
parametersSchema: tool.parametersSchema,
|
|
106
|
+
pluginId: tool.pluginDbId,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// -----------------------------------------------------------------------
|
|
110
|
+
// Lifecycle event handlers
|
|
111
|
+
// -----------------------------------------------------------------------
|
|
112
|
+
function handlePluginEnabled(payload) {
|
|
113
|
+
log.debug({ pluginId: payload.pluginId, pluginKey: payload.pluginKey }, "plugin enabled — registering tools");
|
|
114
|
+
// Async registration from DB — we fire-and-forget since the lifecycle
|
|
115
|
+
// event handler must be synchronous. Any errors are logged.
|
|
116
|
+
void registerFromDb(payload.pluginId).catch((err) => {
|
|
117
|
+
log.error({ pluginId: payload.pluginId, err: err instanceof Error ? err.message : String(err) }, "failed to register tools after plugin enabled");
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function handlePluginDisabled(payload) {
|
|
121
|
+
log.debug({ pluginId: payload.pluginId, pluginKey: payload.pluginKey }, "plugin disabled — unregistering tools");
|
|
122
|
+
registry.unregisterPlugin(payload.pluginKey);
|
|
123
|
+
}
|
|
124
|
+
function handlePluginUnloaded(payload) {
|
|
125
|
+
log.debug({ pluginId: payload.pluginId, pluginKey: payload.pluginKey }, "plugin unloaded — unregistering tools");
|
|
126
|
+
registry.unregisterPlugin(payload.pluginKey);
|
|
127
|
+
}
|
|
128
|
+
// -----------------------------------------------------------------------
|
|
129
|
+
// Public API
|
|
130
|
+
// -----------------------------------------------------------------------
|
|
131
|
+
return {
|
|
132
|
+
async initialize() {
|
|
133
|
+
if (initialized) {
|
|
134
|
+
log.warn("dispatcher already initialized, skipping");
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
log.info("initializing plugin tool dispatcher");
|
|
138
|
+
// Step 1: Load tools from all currently-ready plugins
|
|
139
|
+
if (db) {
|
|
140
|
+
const pluginRegistry = pluginRegistryService(db);
|
|
141
|
+
const readyPlugins = await pluginRegistry.listByStatus("ready");
|
|
142
|
+
let totalTools = 0;
|
|
143
|
+
for (const plugin of readyPlugins) {
|
|
144
|
+
const manifest = plugin.manifestJson;
|
|
145
|
+
if (manifest?.tools && manifest.tools.length > 0) {
|
|
146
|
+
registry.registerPlugin(plugin.pluginKey, manifest, plugin.id);
|
|
147
|
+
totalTools += manifest.tools.length;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
log.info({ readyPlugins: readyPlugins.length, registeredTools: totalTools }, "loaded tools from ready plugins");
|
|
151
|
+
}
|
|
152
|
+
// Step 2: Subscribe to lifecycle events for dynamic updates
|
|
153
|
+
if (lifecycleManager) {
|
|
154
|
+
enabledListener = handlePluginEnabled;
|
|
155
|
+
disabledListener = handlePluginDisabled;
|
|
156
|
+
unloadedListener = handlePluginUnloaded;
|
|
157
|
+
lifecycleManager.on("plugin.enabled", enabledListener);
|
|
158
|
+
lifecycleManager.on("plugin.disabled", disabledListener);
|
|
159
|
+
lifecycleManager.on("plugin.unloaded", unloadedListener);
|
|
160
|
+
log.debug("subscribed to lifecycle events");
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
log.warn("no lifecycle manager provided — tools will not auto-update on plugin state changes");
|
|
164
|
+
}
|
|
165
|
+
initialized = true;
|
|
166
|
+
log.info({ totalTools: registry.toolCount() }, "plugin tool dispatcher initialized");
|
|
167
|
+
},
|
|
168
|
+
teardown() {
|
|
169
|
+
if (!initialized)
|
|
170
|
+
return;
|
|
171
|
+
// Unsubscribe from lifecycle events
|
|
172
|
+
if (lifecycleManager) {
|
|
173
|
+
if (enabledListener)
|
|
174
|
+
lifecycleManager.off("plugin.enabled", enabledListener);
|
|
175
|
+
if (disabledListener)
|
|
176
|
+
lifecycleManager.off("plugin.disabled", disabledListener);
|
|
177
|
+
if (unloadedListener)
|
|
178
|
+
lifecycleManager.off("plugin.unloaded", unloadedListener);
|
|
179
|
+
enabledListener = null;
|
|
180
|
+
disabledListener = null;
|
|
181
|
+
unloadedListener = null;
|
|
182
|
+
}
|
|
183
|
+
// Note: we do NOT clear the registry here because teardown may be
|
|
184
|
+
// called during graceful shutdown where in-flight tool calls should
|
|
185
|
+
// still be able to resolve their tool entries.
|
|
186
|
+
initialized = false;
|
|
187
|
+
log.info("plugin tool dispatcher torn down");
|
|
188
|
+
},
|
|
189
|
+
listToolsForAgent(filter) {
|
|
190
|
+
return registry.listTools(filter).map(toAgentDescriptor);
|
|
191
|
+
},
|
|
192
|
+
getTool(namespacedName) {
|
|
193
|
+
return registry.getTool(namespacedName);
|
|
194
|
+
},
|
|
195
|
+
async executeTool(namespacedName, parameters, runContext) {
|
|
196
|
+
log.debug({
|
|
197
|
+
tool: namespacedName,
|
|
198
|
+
agentId: runContext.agentId,
|
|
199
|
+
runId: runContext.runId,
|
|
200
|
+
}, "dispatching tool execution");
|
|
201
|
+
const result = await registry.executeTool(namespacedName, parameters, runContext);
|
|
202
|
+
log.debug({
|
|
203
|
+
tool: namespacedName,
|
|
204
|
+
pluginId: result.pluginId,
|
|
205
|
+
hasContent: !!result.result.content,
|
|
206
|
+
hasError: !!result.result.error,
|
|
207
|
+
}, "tool execution completed");
|
|
208
|
+
return result;
|
|
209
|
+
},
|
|
210
|
+
registerPluginTools(pluginId, manifest) {
|
|
211
|
+
registry.registerPlugin(pluginId, manifest);
|
|
212
|
+
},
|
|
213
|
+
unregisterPluginTools(pluginId) {
|
|
214
|
+
registry.unregisterPlugin(pluginId);
|
|
215
|
+
},
|
|
216
|
+
toolCount(pluginId) {
|
|
217
|
+
return registry.toolCount(pluginId);
|
|
218
|
+
},
|
|
219
|
+
getRegistry() {
|
|
220
|
+
return registry;
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=plugin-tool-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-tool-dispatcher.js","sourceRoot":"","sources":["../../src/services/plugin-tool-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginToolRegistry — host-side registry for plugin-contributed agent tools.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Store tool declarations (from plugin manifests) alongside routing metadata
|
|
6
|
+
* so the host can resolve namespaced tool names to the owning plugin worker.
|
|
7
|
+
* - Namespace tools automatically: a tool `"search-issues"` from plugin
|
|
8
|
+
* `"acme.linear"` is exposed to agents as `"acme.linear:search-issues"`.
|
|
9
|
+
* - Route `executeTool` calls to the correct plugin worker via the
|
|
10
|
+
* `PluginWorkerManager`.
|
|
11
|
+
* - Provide tool discovery queries so agents can list available tools.
|
|
12
|
+
* - Clean up tool registrations when a plugin is unloaded or its worker stops.
|
|
13
|
+
*
|
|
14
|
+
* The registry is an in-memory structure — tool declarations are derived from
|
|
15
|
+
* the plugin manifest at load time and do not need persistence. When a plugin
|
|
16
|
+
* worker restarts, the host re-registers its manifest tools.
|
|
17
|
+
*
|
|
18
|
+
* @see PLUGIN_SPEC.md §11 — Agent Tools
|
|
19
|
+
* @see PLUGIN_SPEC.md §13.10 — `executeTool`
|
|
20
|
+
*/
|
|
21
|
+
import type { FideliOSPluginManifestV1 } from "@fideliosai/shared";
|
|
22
|
+
import type { ToolRunContext, ToolResult } from "@fideliosai/plugin-sdk";
|
|
23
|
+
import type { PluginWorkerManager } from "./plugin-worker-manager.js";
|
|
24
|
+
/**
|
|
25
|
+
* Separator between plugin ID and tool name in the namespaced tool identifier.
|
|
26
|
+
*
|
|
27
|
+
* Example: `"acme.linear:search-issues"`
|
|
28
|
+
*/
|
|
29
|
+
export declare const TOOL_NAMESPACE_SEPARATOR = ":";
|
|
30
|
+
/**
|
|
31
|
+
* A registered tool entry stored in the registry.
|
|
32
|
+
*
|
|
33
|
+
* Combines the manifest-level declaration with routing metadata so the host
|
|
34
|
+
* can resolve a namespaced tool name → plugin worker in O(1).
|
|
35
|
+
*/
|
|
36
|
+
export interface RegisteredTool {
|
|
37
|
+
/** The plugin key used for namespacing (e.g. `"acme.linear"`). */
|
|
38
|
+
pluginId: string;
|
|
39
|
+
/**
|
|
40
|
+
* The plugin's database UUID, used for worker routing and availability
|
|
41
|
+
* checks. Falls back to `pluginId` when not provided (e.g. in tests
|
|
42
|
+
* where `id === pluginKey`).
|
|
43
|
+
*/
|
|
44
|
+
pluginDbId: string;
|
|
45
|
+
/** The tool's bare name (without namespace prefix). */
|
|
46
|
+
name: string;
|
|
47
|
+
/** Fully namespaced identifier: `"<pluginId>:<toolName>"`. */
|
|
48
|
+
namespacedName: string;
|
|
49
|
+
/** Human-readable display name. */
|
|
50
|
+
displayName: string;
|
|
51
|
+
/** Description provided to the agent so it knows when to use this tool. */
|
|
52
|
+
description: string;
|
|
53
|
+
/** JSON Schema describing the tool's input parameters. */
|
|
54
|
+
parametersSchema: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Filter criteria for listing available tools.
|
|
58
|
+
*/
|
|
59
|
+
export interface ToolListFilter {
|
|
60
|
+
/** Only return tools owned by this plugin. */
|
|
61
|
+
pluginId?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Result of executing a tool, extending `ToolResult` with routing metadata.
|
|
65
|
+
*/
|
|
66
|
+
export interface ToolExecutionResult {
|
|
67
|
+
/** The plugin that handled the tool call. */
|
|
68
|
+
pluginId: string;
|
|
69
|
+
/** The bare tool name that was executed. */
|
|
70
|
+
toolName: string;
|
|
71
|
+
/** The result returned by the plugin's tool handler. */
|
|
72
|
+
result: ToolResult;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The host-side tool registry — held by the host process.
|
|
76
|
+
*
|
|
77
|
+
* Created once at server startup and shared across the application. Plugins
|
|
78
|
+
* register their tools when their worker starts, and unregister when the
|
|
79
|
+
* worker stops or the plugin is uninstalled.
|
|
80
|
+
*/
|
|
81
|
+
export interface PluginToolRegistry {
|
|
82
|
+
/**
|
|
83
|
+
* Register all tools declared in a plugin's manifest.
|
|
84
|
+
*
|
|
85
|
+
* Called when a plugin worker starts and its manifest is loaded. Any
|
|
86
|
+
* previously registered tools for the same plugin are replaced (idempotent).
|
|
87
|
+
*
|
|
88
|
+
* @param pluginId - The plugin's unique identifier (e.g. `"acme.linear"`)
|
|
89
|
+
* @param manifest - The plugin manifest containing the `tools` array
|
|
90
|
+
* @param pluginDbId - The plugin's database UUID, used for worker routing
|
|
91
|
+
* and availability checks. If omitted, `pluginId` is used (backwards-compat).
|
|
92
|
+
*/
|
|
93
|
+
registerPlugin(pluginId: string, manifest: FideliOSPluginManifestV1, pluginDbId?: string): void;
|
|
94
|
+
/**
|
|
95
|
+
* Remove all tool registrations for a plugin.
|
|
96
|
+
*
|
|
97
|
+
* Called when a plugin worker stops, crashes, or is uninstalled.
|
|
98
|
+
*
|
|
99
|
+
* @param pluginId - The plugin to clear
|
|
100
|
+
*/
|
|
101
|
+
unregisterPlugin(pluginId: string): void;
|
|
102
|
+
/**
|
|
103
|
+
* Look up a registered tool by its namespaced name.
|
|
104
|
+
*
|
|
105
|
+
* @param namespacedName - Fully qualified name, e.g. `"acme.linear:search-issues"`
|
|
106
|
+
* @returns The registered tool entry, or `null` if not found
|
|
107
|
+
*/
|
|
108
|
+
getTool(namespacedName: string): RegisteredTool | null;
|
|
109
|
+
/**
|
|
110
|
+
* Look up a registered tool by plugin ID and bare tool name.
|
|
111
|
+
*
|
|
112
|
+
* @param pluginId - The owning plugin
|
|
113
|
+
* @param toolName - The bare tool name (without namespace prefix)
|
|
114
|
+
* @returns The registered tool entry, or `null` if not found
|
|
115
|
+
*/
|
|
116
|
+
getToolByPlugin(pluginId: string, toolName: string): RegisteredTool | null;
|
|
117
|
+
/**
|
|
118
|
+
* List all registered tools, optionally filtered.
|
|
119
|
+
*
|
|
120
|
+
* @param filter - Optional filter criteria
|
|
121
|
+
* @returns Array of registered tool entries
|
|
122
|
+
*/
|
|
123
|
+
listTools(filter?: ToolListFilter): RegisteredTool[];
|
|
124
|
+
/**
|
|
125
|
+
* Parse a namespaced tool name into plugin ID and bare tool name.
|
|
126
|
+
*
|
|
127
|
+
* @param namespacedName - e.g. `"acme.linear:search-issues"`
|
|
128
|
+
* @returns `{ pluginId, toolName }` or `null` if the format is invalid
|
|
129
|
+
*/
|
|
130
|
+
parseNamespacedName(namespacedName: string): {
|
|
131
|
+
pluginId: string;
|
|
132
|
+
toolName: string;
|
|
133
|
+
} | null;
|
|
134
|
+
/**
|
|
135
|
+
* Build a namespaced tool name from a plugin ID and bare tool name.
|
|
136
|
+
*
|
|
137
|
+
* @param pluginId - e.g. `"acme.linear"`
|
|
138
|
+
* @param toolName - e.g. `"search-issues"`
|
|
139
|
+
* @returns The namespaced name, e.g. `"acme.linear:search-issues"`
|
|
140
|
+
*/
|
|
141
|
+
buildNamespacedName(pluginId: string, toolName: string): string;
|
|
142
|
+
/**
|
|
143
|
+
* Execute a tool by its namespaced name, routing to the correct plugin worker.
|
|
144
|
+
*
|
|
145
|
+
* Resolves the namespaced name to the owning plugin, validates the tool
|
|
146
|
+
* exists, and dispatches the `executeTool` RPC call to the worker.
|
|
147
|
+
*
|
|
148
|
+
* @param namespacedName - Fully qualified tool name (e.g. `"acme.linear:search-issues"`)
|
|
149
|
+
* @param parameters - The parsed parameters matching the tool's schema
|
|
150
|
+
* @param runContext - Agent run context
|
|
151
|
+
* @returns The execution result with routing metadata
|
|
152
|
+
* @throws {Error} if the tool is not found or the worker is not running
|
|
153
|
+
*/
|
|
154
|
+
executeTool(namespacedName: string, parameters: unknown, runContext: ToolRunContext): Promise<ToolExecutionResult>;
|
|
155
|
+
/**
|
|
156
|
+
* Get the number of registered tools, optionally scoped to a plugin.
|
|
157
|
+
*
|
|
158
|
+
* @param pluginId - If provided, count only this plugin's tools
|
|
159
|
+
*/
|
|
160
|
+
toolCount(pluginId?: string): number;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create a new `PluginToolRegistry`.
|
|
164
|
+
*
|
|
165
|
+
* The registry is backed by two in-memory maps:
|
|
166
|
+
* - `byNamespace`: namespaced name → `RegisteredTool` for O(1) lookups.
|
|
167
|
+
* - `byPlugin`: pluginId → Set of namespaced names for efficient per-plugin ops.
|
|
168
|
+
*
|
|
169
|
+
* @param workerManager - The worker manager used to dispatch `executeTool` RPC
|
|
170
|
+
* calls to plugin workers. If not provided, `executeTool` will throw.
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```ts
|
|
174
|
+
* const toolRegistry = createPluginToolRegistry(workerManager);
|
|
175
|
+
*
|
|
176
|
+
* // Register tools from a plugin manifest
|
|
177
|
+
* toolRegistry.registerPlugin("acme.linear", linearManifest);
|
|
178
|
+
*
|
|
179
|
+
* // List all available tools for agents
|
|
180
|
+
* const tools = toolRegistry.listTools();
|
|
181
|
+
* // → [{ namespacedName: "acme.linear:search-issues", ... }]
|
|
182
|
+
*
|
|
183
|
+
* // Execute a tool
|
|
184
|
+
* const result = await toolRegistry.executeTool(
|
|
185
|
+
* "acme.linear:search-issues",
|
|
186
|
+
* { query: "auth bug" },
|
|
187
|
+
* { agentId: "agent-1", runId: "run-1", companyId: "co-1", projectId: "proj-1" },
|
|
188
|
+
* );
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
export declare function createPluginToolRegistry(workerManager?: PluginWorkerManager): PluginToolRegistry;
|
|
192
|
+
//# sourceMappingURL=plugin-tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-tool-registry.d.ts","sourceRoot":"","sources":["../../src/services/plugin-tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAqB,MAAM,wBAAwB,CAAC;AAC5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAOtE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAM5C;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,UAAU,CAAC;CACpB;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;OAUG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhG;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzC;;;;;OAKG;IACH,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAEvD;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAE3E;;;;;OAKG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IAErD;;;;;OAKG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAE3F;;;;;;OAMG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhE;;;;;;;;;;;OAWG;IACH,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEhC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACtC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,CAAC,EAAE,mBAAmB,GAClC,kBAAkB,CA4NpB"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginToolRegistry — host-side registry for plugin-contributed agent tools.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Store tool declarations (from plugin manifests) alongside routing metadata
|
|
6
|
+
* so the host can resolve namespaced tool names to the owning plugin worker.
|
|
7
|
+
* - Namespace tools automatically: a tool `"search-issues"` from plugin
|
|
8
|
+
* `"acme.linear"` is exposed to agents as `"acme.linear:search-issues"`.
|
|
9
|
+
* - Route `executeTool` calls to the correct plugin worker via the
|
|
10
|
+
* `PluginWorkerManager`.
|
|
11
|
+
* - Provide tool discovery queries so agents can list available tools.
|
|
12
|
+
* - Clean up tool registrations when a plugin is unloaded or its worker stops.
|
|
13
|
+
*
|
|
14
|
+
* The registry is an in-memory structure — tool declarations are derived from
|
|
15
|
+
* the plugin manifest at load time and do not need persistence. When a plugin
|
|
16
|
+
* worker restarts, the host re-registers its manifest tools.
|
|
17
|
+
*
|
|
18
|
+
* @see PLUGIN_SPEC.md §11 — Agent Tools
|
|
19
|
+
* @see PLUGIN_SPEC.md §13.10 — `executeTool`
|
|
20
|
+
*/
|
|
21
|
+
import { logger } from "../middleware/logger.js";
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Constants
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/**
|
|
26
|
+
* Separator between plugin ID and tool name in the namespaced tool identifier.
|
|
27
|
+
*
|
|
28
|
+
* Example: `"acme.linear:search-issues"`
|
|
29
|
+
*/
|
|
30
|
+
export const TOOL_NAMESPACE_SEPARATOR = ":";
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Factory: createPluginToolRegistry
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
/**
|
|
35
|
+
* Create a new `PluginToolRegistry`.
|
|
36
|
+
*
|
|
37
|
+
* The registry is backed by two in-memory maps:
|
|
38
|
+
* - `byNamespace`: namespaced name → `RegisteredTool` for O(1) lookups.
|
|
39
|
+
* - `byPlugin`: pluginId → Set of namespaced names for efficient per-plugin ops.
|
|
40
|
+
*
|
|
41
|
+
* @param workerManager - The worker manager used to dispatch `executeTool` RPC
|
|
42
|
+
* calls to plugin workers. If not provided, `executeTool` will throw.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const toolRegistry = createPluginToolRegistry(workerManager);
|
|
47
|
+
*
|
|
48
|
+
* // Register tools from a plugin manifest
|
|
49
|
+
* toolRegistry.registerPlugin("acme.linear", linearManifest);
|
|
50
|
+
*
|
|
51
|
+
* // List all available tools for agents
|
|
52
|
+
* const tools = toolRegistry.listTools();
|
|
53
|
+
* // → [{ namespacedName: "acme.linear:search-issues", ... }]
|
|
54
|
+
*
|
|
55
|
+
* // Execute a tool
|
|
56
|
+
* const result = await toolRegistry.executeTool(
|
|
57
|
+
* "acme.linear:search-issues",
|
|
58
|
+
* { query: "auth bug" },
|
|
59
|
+
* { agentId: "agent-1", runId: "run-1", companyId: "co-1", projectId: "proj-1" },
|
|
60
|
+
* );
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function createPluginToolRegistry(workerManager) {
|
|
64
|
+
const log = logger.child({ service: "plugin-tool-registry" });
|
|
65
|
+
// Primary index: namespaced name → tool entry
|
|
66
|
+
const byNamespace = new Map();
|
|
67
|
+
// Secondary index: pluginId → set of namespaced names (for bulk operations)
|
|
68
|
+
const byPlugin = new Map();
|
|
69
|
+
// -----------------------------------------------------------------------
|
|
70
|
+
// Internal helpers
|
|
71
|
+
// -----------------------------------------------------------------------
|
|
72
|
+
function buildName(pluginId, toolName) {
|
|
73
|
+
return `${pluginId}${TOOL_NAMESPACE_SEPARATOR}${toolName}`;
|
|
74
|
+
}
|
|
75
|
+
function parseName(namespacedName) {
|
|
76
|
+
const sepIndex = namespacedName.lastIndexOf(TOOL_NAMESPACE_SEPARATOR);
|
|
77
|
+
if (sepIndex <= 0 || sepIndex >= namespacedName.length - 1) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
pluginId: namespacedName.slice(0, sepIndex),
|
|
82
|
+
toolName: namespacedName.slice(sepIndex + 1),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function addTool(pluginId, decl, pluginDbId) {
|
|
86
|
+
const namespacedName = buildName(pluginId, decl.name);
|
|
87
|
+
const entry = {
|
|
88
|
+
pluginId,
|
|
89
|
+
pluginDbId,
|
|
90
|
+
name: decl.name,
|
|
91
|
+
namespacedName,
|
|
92
|
+
displayName: decl.displayName,
|
|
93
|
+
description: decl.description,
|
|
94
|
+
parametersSchema: decl.parametersSchema,
|
|
95
|
+
};
|
|
96
|
+
byNamespace.set(namespacedName, entry);
|
|
97
|
+
let pluginTools = byPlugin.get(pluginId);
|
|
98
|
+
if (!pluginTools) {
|
|
99
|
+
pluginTools = new Set();
|
|
100
|
+
byPlugin.set(pluginId, pluginTools);
|
|
101
|
+
}
|
|
102
|
+
pluginTools.add(namespacedName);
|
|
103
|
+
}
|
|
104
|
+
function removePluginTools(pluginId) {
|
|
105
|
+
const pluginTools = byPlugin.get(pluginId);
|
|
106
|
+
if (!pluginTools)
|
|
107
|
+
return 0;
|
|
108
|
+
const count = pluginTools.size;
|
|
109
|
+
for (const name of pluginTools) {
|
|
110
|
+
byNamespace.delete(name);
|
|
111
|
+
}
|
|
112
|
+
byPlugin.delete(pluginId);
|
|
113
|
+
return count;
|
|
114
|
+
}
|
|
115
|
+
// -----------------------------------------------------------------------
|
|
116
|
+
// Public API
|
|
117
|
+
// -----------------------------------------------------------------------
|
|
118
|
+
return {
|
|
119
|
+
registerPlugin(pluginId, manifest, pluginDbId) {
|
|
120
|
+
const dbId = pluginDbId ?? pluginId;
|
|
121
|
+
// Remove any previously registered tools for this plugin (idempotent)
|
|
122
|
+
const previousCount = removePluginTools(pluginId);
|
|
123
|
+
if (previousCount > 0) {
|
|
124
|
+
log.debug({ pluginId, previousCount }, "cleared previous tool registrations before re-registering");
|
|
125
|
+
}
|
|
126
|
+
const tools = manifest.tools ?? [];
|
|
127
|
+
if (tools.length === 0) {
|
|
128
|
+
log.debug({ pluginId }, "plugin declares no tools");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
for (const decl of tools) {
|
|
132
|
+
addTool(pluginId, decl, dbId);
|
|
133
|
+
}
|
|
134
|
+
log.info({
|
|
135
|
+
pluginId,
|
|
136
|
+
toolCount: tools.length,
|
|
137
|
+
tools: tools.map((t) => buildName(pluginId, t.name)),
|
|
138
|
+
}, `registered ${tools.length} tool(s) for plugin`);
|
|
139
|
+
},
|
|
140
|
+
unregisterPlugin(pluginId) {
|
|
141
|
+
const removed = removePluginTools(pluginId);
|
|
142
|
+
if (removed > 0) {
|
|
143
|
+
log.info({ pluginId, removedCount: removed }, `unregistered ${removed} tool(s) for plugin`);
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
getTool(namespacedName) {
|
|
147
|
+
return byNamespace.get(namespacedName) ?? null;
|
|
148
|
+
},
|
|
149
|
+
getToolByPlugin(pluginId, toolName) {
|
|
150
|
+
const namespacedName = buildName(pluginId, toolName);
|
|
151
|
+
return byNamespace.get(namespacedName) ?? null;
|
|
152
|
+
},
|
|
153
|
+
listTools(filter) {
|
|
154
|
+
if (filter?.pluginId) {
|
|
155
|
+
const pluginTools = byPlugin.get(filter.pluginId);
|
|
156
|
+
if (!pluginTools)
|
|
157
|
+
return [];
|
|
158
|
+
const result = [];
|
|
159
|
+
for (const name of pluginTools) {
|
|
160
|
+
const tool = byNamespace.get(name);
|
|
161
|
+
if (tool)
|
|
162
|
+
result.push(tool);
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
return Array.from(byNamespace.values());
|
|
167
|
+
},
|
|
168
|
+
parseNamespacedName(namespacedName) {
|
|
169
|
+
return parseName(namespacedName);
|
|
170
|
+
},
|
|
171
|
+
buildNamespacedName(pluginId, toolName) {
|
|
172
|
+
return buildName(pluginId, toolName);
|
|
173
|
+
},
|
|
174
|
+
async executeTool(namespacedName, parameters, runContext) {
|
|
175
|
+
// 1. Resolve the namespaced name
|
|
176
|
+
const parsed = parseName(namespacedName);
|
|
177
|
+
if (!parsed) {
|
|
178
|
+
throw new Error(`Invalid tool name "${namespacedName}". Expected format: "<pluginId>${TOOL_NAMESPACE_SEPARATOR}<toolName>"`);
|
|
179
|
+
}
|
|
180
|
+
const { pluginId, toolName } = parsed;
|
|
181
|
+
// 2. Verify the tool is registered
|
|
182
|
+
const tool = byNamespace.get(namespacedName);
|
|
183
|
+
if (!tool) {
|
|
184
|
+
throw new Error(`Tool "${namespacedName}" is not registered. ` +
|
|
185
|
+
`The plugin may not be installed or its worker may not be running.`);
|
|
186
|
+
}
|
|
187
|
+
// 3. Verify the worker manager is available
|
|
188
|
+
if (!workerManager) {
|
|
189
|
+
throw new Error(`Cannot execute tool "${namespacedName}" — no worker manager configured. ` +
|
|
190
|
+
`Tool execution requires a PluginWorkerManager.`);
|
|
191
|
+
}
|
|
192
|
+
// 4. Verify the plugin worker is running (use DB UUID for worker lookup)
|
|
193
|
+
const dbId = tool.pluginDbId;
|
|
194
|
+
if (!workerManager.isRunning(dbId)) {
|
|
195
|
+
throw new Error(`Cannot execute tool "${namespacedName}" — ` +
|
|
196
|
+
`worker for plugin "${pluginId}" is not running.`);
|
|
197
|
+
}
|
|
198
|
+
// 5. Dispatch the executeTool RPC call to the worker
|
|
199
|
+
log.debug({ pluginId, pluginDbId: dbId, toolName, namespacedName, agentId: runContext.agentId, runId: runContext.runId }, "executing tool via plugin worker");
|
|
200
|
+
const rpcParams = {
|
|
201
|
+
toolName,
|
|
202
|
+
parameters,
|
|
203
|
+
runContext,
|
|
204
|
+
};
|
|
205
|
+
const result = await workerManager.call(dbId, "executeTool", rpcParams);
|
|
206
|
+
log.debug({
|
|
207
|
+
pluginId,
|
|
208
|
+
toolName,
|
|
209
|
+
namespacedName,
|
|
210
|
+
hasContent: !!result.content,
|
|
211
|
+
hasData: result.data !== undefined,
|
|
212
|
+
hasError: !!result.error,
|
|
213
|
+
}, "tool execution completed");
|
|
214
|
+
return { pluginId, toolName, result };
|
|
215
|
+
},
|
|
216
|
+
toolCount(pluginId) {
|
|
217
|
+
if (pluginId !== undefined) {
|
|
218
|
+
return byPlugin.get(pluginId)?.size ?? 0;
|
|
219
|
+
}
|
|
220
|
+
return byNamespace.size;
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=plugin-tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-tool-registry.js","sourceRoot":"","sources":["../../src/services/plugin-tool-registry.ts"],"names":[],"mappings":"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"}
|