feat(plugins): add source-control extension contracts (#2117)

This commit is contained in:
José Almeida
2026-08-13 08:29:29 +01:00
committed by GitHub
parent 064b852884
commit f218880ecb
530 changed files with 39054 additions and 7518 deletions
+229 -45
View File
@@ -6,24 +6,45 @@
"audiences": ["user", "operator"],
"stability": "stable",
"docs": ["index", "use-kandev", "cli", "desktop-app", "run-as-a-service"],
"sources": ["apps/cli/bin/native-shim.js", "apps/backend/internal/launcher/launcher.go", "apps/desktop/src-tauri/src/lib.rs"],
"tests": ["apps/cli/bin/native-shim.test.mjs", "apps/desktop/e2e/desktop-launch-smoke.test.mjs"]
"sources": [
"apps/cli/bin/native-shim.js",
"apps/backend/internal/launcher/launcher.go",
"apps/desktop/src-tauri/src/lib.rs"
],
"tests": [
"apps/cli/bin/native-shim.test.mjs",
"apps/desktop/e2e/desktop-launch-smoke.test.mjs"
]
},
{
"id": "backend-configuration",
"audiences": ["operator", "contributor"],
"stability": "stable",
"docs": ["configuration", "operations", "cli"],
"sources": ["apps/backend/internal/common/config/config.go", "apps/backend/internal/agentctl/server/config/config.go", "apps/backend/internal/profiles/profiles.go"],
"tests": ["apps/backend/internal/common/config/config_test.go", "apps/backend/internal/agentctl/server/config/config_test.go", "apps/backend/internal/profiles/profiles_test.go"]
"sources": [
"apps/backend/internal/common/config/config.go",
"apps/backend/internal/agentctl/server/config/config.go",
"apps/backend/internal/profiles/profiles.go"
],
"tests": [
"apps/backend/internal/common/config/config_test.go",
"apps/backend/internal/agentctl/server/config/config_test.go",
"apps/backend/internal/profiles/profiles_test.go"
]
},
{
"id": "workspaces-and-repositories",
"audiences": ["user"],
"stability": "stable",
"docs": ["use-kandev", "tasks-and-workflows", "configuration"],
"sources": ["apps/backend/internal/task/handlers/workspace_handlers.go", "apps/web/components/app-sidebar/app-sidebar-workspace-picker.tsx"],
"tests": ["apps/backend/internal/task/handlers/workspace_handlers_test.go", "apps/web/components/app-sidebar/app-sidebar-workspace-picker.test.tsx"],
"sources": [
"apps/backend/internal/task/handlers/workspace_handlers.go",
"apps/web/components/app-sidebar/app-sidebar-workspace-picker.tsx"
],
"tests": [
"apps/backend/internal/task/handlers/workspace_handlers_test.go",
"apps/web/components/app-sidebar/app-sidebar-workspace-picker.test.tsx"
],
"settingsRoutes": ["/settings/workspace", "/settings/workspaces"],
"mcpTools": ["list_repositories_kandev", "list_workspaces_kandev"]
},
@@ -31,9 +52,20 @@
"id": "tasks-and-workflows",
"audiences": ["user"],
"stability": "stable",
"docs": ["tasks-and-workflows", "workflow-tips", "workflow-import-export", "workflow-sync"],
"sources": ["apps/backend/internal/orchestrator/workflow_store.go", "apps/web/components/kanban-with-preview.tsx"],
"tests": ["apps/backend/internal/orchestrator/workflow_store_test.go", "apps/web/components/kanban-with-preview.test.ts"],
"docs": [
"tasks-and-workflows",
"workflow-tips",
"workflow-import-export",
"workflow-sync"
],
"sources": [
"apps/backend/internal/orchestrator/workflow_store.go",
"apps/web/components/kanban-with-preview.tsx"
],
"tests": [
"apps/backend/internal/orchestrator/workflow_store_test.go",
"apps/web/components/kanban-with-preview.test.ts"
],
"mcpTools": [
"create_workflow_kandev",
"create_workflow_step_kandev",
@@ -92,9 +124,22 @@
"id": "sessions-and-coordination",
"audiences": ["user"],
"stability": "stable",
"docs": ["sessions-and-review", "coordination", "automation-and-mcp", "agent-communication"],
"sources": ["apps/backend/internal/mcp/handlers/spawn_session.go", "apps/backend/internal/mcp/handlers/parent_question.go", "apps/web/components/task/dockview-session-tabs.ts"],
"tests": ["apps/backend/internal/mcp/handlers/spawn_session_test.go", "apps/backend/internal/mcp/handlers/parent_question_test.go", "apps/web/components/task/dockview-session-tabs.test.ts"],
"docs": [
"sessions-and-review",
"coordination",
"automation-and-mcp",
"agent-communication"
],
"sources": [
"apps/backend/internal/mcp/handlers/spawn_session.go",
"apps/backend/internal/mcp/handlers/parent_question.go",
"apps/web/components/task/dockview-session-tabs.ts"
],
"tests": [
"apps/backend/internal/mcp/handlers/spawn_session_test.go",
"apps/backend/internal/mcp/handlers/parent_question_test.go",
"apps/web/components/task/dockview-session-tabs.test.ts"
],
"mcpTools": [
"ask_parent_question_kandev",
"ask_user_question_kandev",
@@ -209,8 +254,14 @@
"audiences": ["user", "operator"],
"stability": "stable",
"docs": ["executors", "remote-cloud-environment", "docker", "k8s"],
"sources": ["apps/backend/internal/agent/executor/executor.go", "apps/web/app/settings/executors/page.tsx"],
"tests": ["apps/web/e2e/tests/docker/docker-launch.spec.ts", "apps/web/e2e/tests/ssh/executor-crud.spec.ts"],
"sources": [
"apps/backend/internal/agent/executor/executor.go",
"apps/web/app/settings/executors/page.tsx"
],
"tests": [
"apps/web/e2e/tests/docker/docker-launch.spec.ts",
"apps/web/e2e/tests/ssh/executor-crud.spec.ts"
],
"settingsRoutes": ["/settings/executor/new", "/settings/executors"],
"mcpTools": [
"create_executor_profile_kandev",
@@ -225,8 +276,26 @@
"audiences": ["user", "operator"],
"stability": "stable",
"docs": ["integrations", "configuration"],
"sources": ["apps/web/components/app-sidebar/sections/integrations-section.tsx", "apps/backend/internal/integrations/workspacescope/workspacescope.go", "apps/backend/internal/azuredevops/service.go", "apps/web/app/azure-devops/azure-devops-page-client.tsx", "apps/backend/internal/github/app_registration_lifecycle_service.go", "apps/backend/internal/github/app_registration_import.go", "apps/web/lib/api/domains/github-auth-api.ts", "apps/backend/internal/mcp/server/server.go"],
"tests": ["apps/web/components/app-sidebar/sections/integrations-section.test.tsx", "apps/backend/internal/integrations/workspacescope/workspacescope_test.go", "apps/backend/internal/azuredevops/service_test.go", "apps/web/e2e/tests/integrations/azure-devops.spec.ts", "apps/backend/internal/github/controller_app_registration_test.go", "apps/backend/internal/github/app_registration_import_test.go", "apps/web/e2e/tests/settings/github-app-registration.spec.ts", "apps/backend/internal/mcp/server/handlers_test.go"],
"sources": [
"apps/web/components/app-sidebar/sections/integrations-section.tsx",
"apps/backend/internal/integrations/workspacescope/workspacescope.go",
"apps/backend/internal/azuredevops/service.go",
"apps/web/app/azure-devops/azure-devops-page-client.tsx",
"apps/backend/internal/github/app_registration_lifecycle_service.go",
"apps/backend/internal/github/app_registration_import.go",
"apps/web/lib/api/domains/github-auth-api.ts",
"apps/backend/internal/mcp/server/server.go"
],
"tests": [
"apps/web/components/app-sidebar/sections/integrations-section.test.tsx",
"apps/backend/internal/integrations/workspacescope/workspacescope_test.go",
"apps/backend/internal/azuredevops/service_test.go",
"apps/web/e2e/tests/integrations/azure-devops.spec.ts",
"apps/backend/internal/github/controller_app_registration_test.go",
"apps/backend/internal/github/app_registration_import_test.go",
"apps/web/e2e/tests/settings/github-app-registration.spec.ts",
"apps/backend/internal/mcp/server/handlers_test.go"
],
"settingsRoutes": [
"/settings/integrations",
"/settings/integrations/azure-devops",
@@ -248,8 +317,14 @@
"audiences": ["user", "operator"],
"stability": "stable",
"docs": ["automation-and-mcp", "integrations", "workflow-tips"],
"sources": ["apps/backend/internal/automation/service.go", "apps/backend/internal/mcp/server/server.go"],
"tests": ["apps/backend/internal/automation/service_test.go", "apps/backend/internal/mcp/server/server_test.go"],
"sources": [
"apps/backend/internal/automation/service.go",
"apps/backend/internal/mcp/server/server.go"
],
"tests": [
"apps/backend/internal/automation/service_test.go",
"apps/backend/internal/mcp/server/server_test.go"
],
"settingsRoutes": ["/settings/automations", "/settings/external-mcp"],
"mcpTools": ["get_mcp_config_kandev", "update_mcp_config_kandev"]
},
@@ -257,9 +332,25 @@
"id": "personal-settings-and-secrets",
"audiences": ["user"],
"stability": "stable",
"docs": ["security", "configuration", "developer-tools", "operations", "sessions-and-review"],
"sources": ["apps/web/src/settings-routes.tsx", "apps/web/components/settings/settings-index.tsx", "apps/web/components/settings/general-settings.tsx", "apps/web/components/settings/layouts/layout-settings.tsx"],
"tests": ["apps/web/src/settings-routes.test.ts", "apps/web/components/settings/settings-index.test.tsx", "apps/web/components/settings/terminal-settings.test.ts", "apps/web/lib/layout/layout-profiles.test.ts"],
"docs": [
"security",
"configuration",
"developer-tools",
"operations",
"sessions-and-review"
],
"sources": [
"apps/web/src/settings-routes.tsx",
"apps/web/components/settings/settings-index.tsx",
"apps/web/components/settings/general-settings.tsx",
"apps/web/components/settings/layouts/layout-settings.tsx"
],
"tests": [
"apps/web/src/settings-routes.test.ts",
"apps/web/components/settings/settings-index.test.tsx",
"apps/web/components/settings/terminal-settings.test.ts",
"apps/web/lib/layout/layout-profiles.test.ts"
],
"settingsRoutes": [
"/settings",
"/settings/preferences",
@@ -286,18 +377,44 @@
"id": "security-and-trust",
"audiences": ["user", "operator"],
"stability": "stable",
"docs": ["security", "configuration", "executors", "automation-and-mcp", "operations"],
"sources": ["apps/backend/internal/backendapp/middleware.go", "apps/backend/internal/gateway/websocket/origin.go", "apps/backend/internal/secrets/crypto.go"],
"tests": ["apps/backend/internal/backendapp/middleware_test.go", "apps/backend/internal/gateway/websocket/origin_test.go"]
"docs": [
"security",
"configuration",
"executors",
"automation-and-mcp",
"operations"
],
"sources": [
"apps/backend/internal/backendapp/middleware.go",
"apps/backend/internal/gateway/websocket/origin.go",
"apps/backend/internal/secrets/crypto.go"
],
"tests": [
"apps/backend/internal/backendapp/middleware_test.go",
"apps/backend/internal/gateway/websocket/origin_test.go"
]
},
{
"id": "authentication-and-access",
"audiences": ["user", "operator"],
"stability": "beta",
"docs": ["authentication"],
"sources": ["apps/backend/internal/auth/httpmw/middleware.go", "apps/backend/internal/auth/service.go", "apps/backend/internal/auth/httpapi/handlers.go", "apps/web/components/app-sidebar/current-user-chip.tsx"],
"tests": ["apps/backend/internal/auth/httpapi/handlers_test.go", "apps/backend/internal/auth/httpmw/middleware_test.go", "apps/web/lib/state/slices/auth/auth-slice.test.ts"],
"settingsRoutes": ["/settings/system/users", "/settings/account/security", "/settings/account/tokens"]
"sources": [
"apps/backend/internal/auth/httpmw/middleware.go",
"apps/backend/internal/auth/service.go",
"apps/backend/internal/auth/httpapi/handlers.go",
"apps/web/components/app-sidebar/current-user-chip.tsx"
],
"tests": [
"apps/backend/internal/auth/httpapi/handlers_test.go",
"apps/backend/internal/auth/httpmw/middleware_test.go",
"apps/web/lib/state/slices/auth/auth-slice.test.ts"
],
"settingsRoutes": [
"/settings/system/users",
"/settings/account/security",
"/settings/account/tokens"
]
},
{
"id": "system-health-and-maintenance",
@@ -343,7 +460,13 @@
"id": "deployment-and-platforms",
"audiences": ["operator"],
"stability": "stable",
"docs": ["docker", "k8s", "run-as-a-service", "windows-support", "operations"],
"docs": [
"docker",
"k8s",
"run-as-a-service",
"windows-support",
"operations"
],
"sources": ["Dockerfile", "apps/backend/internal/launcher/service.go"],
"tests": ["apps/web/e2e/tests/docker/docker-launch.spec.ts"]
},
@@ -352,52 +475,113 @@
"audiences": ["user", "operator"],
"stability": "experimental",
"docs": ["coordination", "feature-status", "office-provider-routing"],
"sources": ["apps/backend/internal/office/routes.go", "apps/web/src/office-routes.tsx"],
"tests": ["apps/backend/internal/office/onboarding/service_test.go", "apps/web/src/office-routes.test.ts"]
"sources": [
"apps/backend/internal/office/routes.go",
"apps/web/src/office-routes.tsx"
],
"tests": [
"apps/backend/internal/office/onboarding/service_test.go",
"apps/web/src/office-routes.test.ts"
]
},
{
"id": "plugin-system",
"audiences": ["operator", "contributor"],
"stability": "experimental",
"docs": ["plugins", "plugins-authoring", "plugins-manifest"],
"sources": ["apps/backend/internal/plugins/handlers.go", "apps/backend/pkg/pluginsdk/host.go", "apps/web/lib/plugins/host-api.ts"],
"tests": ["apps/backend/internal/plugins/service_test.go", "apps/backend/internal/plugins/manifest/manifest_test.go", "apps/web/lib/plugins/host-api.test.ts"]
"sources": [
"apps/backend/internal/plugins/handlers.go",
"apps/backend/pkg/pluginsdk/host.go",
"apps/web/lib/plugins/host-api.ts"
],
"tests": [
"apps/backend/internal/plugins/service_test.go",
"apps/backend/internal/plugins/manifest/manifest_test.go",
"apps/web/lib/plugins/host-api.test.ts"
]
},
{
"id": "plugin-marketplace",
"audiences": ["operator", "contributor"],
"stability": "experimental",
"docs": ["plugins-marketplace"],
"sources": ["apps/backend/internal/plugins/marketplace/catalog.go", "apps/backend/internal/plugins/marketplace/sourcestore.go", "apps/web/lib/api/domains/marketplace-api.ts"],
"tests": ["apps/backend/internal/plugins/marketplace/catalog_test.go", "apps/backend/internal/plugins/marketplace/sourcestore_test.go", "apps/web/hooks/domains/plugins/use-marketplace.test.ts"]
"sources": [
"apps/backend/internal/plugins/marketplace/catalog.go",
"apps/backend/internal/plugins/marketplace/sourcestore.go",
"apps/web/lib/api/domains/marketplace-api.ts"
],
"tests": [
"apps/backend/internal/plugins/marketplace/catalog_test.go",
"apps/backend/internal/plugins/marketplace/sourcestore_test.go",
"apps/web/hooks/domains/plugins/use-marketplace.test.ts"
]
},
{
"id": "websocket-protocol",
"audiences": ["contributor", "integrator"],
"stability": "stable",
"docs": ["websocket-api", "architecture", "extending-kandev"],
"sources": ["apps/backend/pkg/websocket/actions.go", "apps/backend/pkg/websocket/handler.go"],
"tests": ["apps/backend/pkg/websocket/handler_test.go", "apps/backend/pkg/websocket/handler_race_test.go"]
"sources": [
"apps/backend/pkg/websocket/actions.go",
"apps/backend/pkg/websocket/handler.go"
],
"tests": [
"apps/backend/pkg/websocket/handler_test.go",
"apps/backend/pkg/websocket/handler_race_test.go"
]
},
{
"id": "contributor-workflow",
"audiences": ["contributor"],
"stability": "stable",
"docs": ["contributing", "architecture", "backend-development", "web-development", "testing", "remote-cloud-environment", "extending-kandev", "release-process"],
"docs": [
"contributing",
"architecture",
"backend-development",
"web-development",
"testing",
"remote-cloud-environment",
"extending-kandev",
"release-process"
],
"sources": ["CONTRIBUTING.md", "Makefile"],
"tests": ["scripts/lint-harness-files.test.py", ".github/scripts/lint-action-pinning_test.py"]
"tests": [
"scripts/lint-harness-files.test.py",
".github/scripts/lint-action-pinning_test.py"
]
}
],
"exclusions": {
"settingsRoutes": [
{ "route": "/settings/changelog", "reason": "Redirect to System updates." },
{ "route": "/settings/general/changes-panel", "reason": "Legacy redirect to Appearance." },
{ "route": "/settings/general/chat-input", "reason": "Legacy redirect to Keyboard Shortcuts." },
{ "route": "/settings/general/resource-metrics", "reason": "Legacy redirect to Appearance." },
{ "route": "/settings/general/shell", "reason": "Legacy redirect to Terminal." },
{ "route": "/settings/plugins", "reason": "Experimental feature intentionally omitted until its public contract stabilizes." },
{
"route": "/settings/changelog",
"reason": "Redirect to System updates."
},
{
"route": "/settings/general/changes-panel",
"reason": "Legacy redirect to Appearance."
},
{
"route": "/settings/general/chat-input",
"reason": "Legacy redirect to Keyboard Shortcuts."
},
{
"route": "/settings/general/resource-metrics",
"reason": "Legacy redirect to Appearance."
},
{
"route": "/settings/general/shell",
"reason": "Legacy redirect to Terminal."
},
{
"route": "/settings/plugins",
"reason": "Experimental feature intentionally omitted until its public contract stabilizes."
},
{ "route": "/settings/system", "reason": "Redirect to System status." },
{ "route": "/settings/system/message-queue", "reason": "Legacy redirect to General Message Queue." }
{
"route": "/settings/system/message-queue",
"reason": "Legacy redirect to General Message Queue."
}
],
"mcpTools": []
}