Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
372c51b
feat: Step 1 - kanban-mcp project scaffold and config
dimetron Feb 25, 2026
7125635
feat: Step 2 - kanban-mcp DB layer (models + manager)
dimetron Feb 25, 2026
eca05a9
feat: Step 3 - TaskService core CRUD tests
dimetron Feb 25, 2026
c439a08
feat: Step 4 - TaskService assign and subtask operations
dimetron Feb 25, 2026
182420f
feat: Step 5 - SSE Hub + broadcast integration
dimetron Feb 25, 2026
ca9cc91
feat: Step 6 - MCP server and 10 tools (stdio transport)
dimetron Feb 25, 2026
0ba3198
feat: Step 7 - HTTP server route wiring + MCP HTTP transport
dimetron Feb 25, 2026
3241ab4
feat: Step 8 - REST API handlers for kanban-mcp
dimetron Feb 25, 2026
6953b3e
feat: Step 9 - Embedded SPA Kanban UI
dimetron Feb 25, 2026
3d72d5a
feat: Step 10 - Postgres verification + Helm chart
dimetron Feb 25, 2026
2971db4
UI styles fixes
dimetron Feb 25, 2026
07819eb
feat: Step 1 - NamespaceProvider context for global namespace state
dimetron Feb 25, 2026
c913d18
feat: Step 2 - AppSidebarNav + static AppSidebar component
dimetron Feb 25, 2026
b763bf1
feat: Step 3 - Root layout migration (wire AppSidebar, remove Header/…
dimetron Feb 25, 2026
06c348f
feat: Step 4 - NamespaceSelector in sidebar header
dimetron Feb 25, 2026
76f292d
feat: Step 5 - Chat layout conflict resolution
dimetron Feb 25, 2026
98f6fca
feat: Step 6 - MobileTopBar with SidebarTrigger for mobile viewports
dimetron Feb 25, 2026
4f6bab1
feat: Step 7 - StatusIndicator + sidebar footer + accessibility
dimetron Feb 25, 2026
696f084
feat: Step 8 - Placeholder route stub pages for sidebar nav items
dimetron Feb 25, 2026
20214c9
UI styles fixes
dimetron Feb 25, 2026
db20dc1
Kanban Board WIP
dimetron Feb 25, 2026
cf94223
Kanban Board WIP
dimetron Feb 25, 2026
836f6bc
feat: add attachment support and labels to kanban-mcp
dimetron Feb 25, 2026
650c4f9
Kanban Board WIP
dimetron Feb 26, 2026
0ab1e72
feat: add AgentCronJob CRD type definition
dimetron Feb 26, 2026
169d6ed
feat: add AgentCronJob controller with scheduling logic
dimetron Feb 26, 2026
1f69f3f
feat: add HTTP server CRUD endpoints for AgentCronJob
dimetron Feb 26, 2026
bf547dd
feat: add UI list page and server actions for AgentCronJob
dimetron Feb 26, 2026
555b609
feat: add UI create/edit form for AgentCronJob
dimetron Feb 26, 2026
52d950f
test: add E2E tests for AgentCronJob
dimetron Feb 26, 2026
5489d9a
chore: add AgentCronJob RBAC to Helm chart ClusterRoles
dimetron Feb 26, 2026
f0db297
chore: auto-commit before merge (loop primary)
dimetron Feb 26, 2026
2ce8edd
feat: scaffold gitrepo-mcp CLI with SQLite storage
dimetron Feb 27, 2026
def206c
feat: add repo management (add, list, remove, sync) with git CLI
dimetron Feb 27, 2026
0dfc0cb
feat: add tree-sitter code chunking for 6 languages
dimetron Feb 27, 2026
19a6fda
feat: add embedding pipeline with hash embedder and indexer
dimetron Feb 27, 2026
d18a074
feat: add semantic search with cosine similarity and context extraction
dimetron Feb 27, 2026
80145df
feat: add ast-grep structural search wrapper and CLI command
dimetron Feb 27, 2026
7a490e8
feat: add REST API server with 11 endpoints and async operations
dimetron Feb 27, 2026
8d68842
feat: add MCP protocol server with 8 tools and stdio/HTTP transport
dimetron Feb 27, 2026
4084263
feat: add kagent proxy handlers for gitrepo-mcp service
dimetron Feb 27, 2026
4123962
feat: add kagent UI git repos list page and add form
dimetron Feb 27, 2026
c68d108
feat: add kagent UI semantic search for git repos
dimetron Feb 27, 2026
7fd4761
feat: add Dockerfile and Helm chart for gitrepo-mcp deployment
dimetron Feb 27, 2026
28ac9db
feat: add sync-all, auto re-index, and CronJob support for gitrepo-mcp
dimetron Feb 27, 2026
25c2225
Merge branch 'main' into feature/kanban-mcp
dimetron Mar 4, 2026
3312d4b
Merge branch 'main' into feature/kanban-mcp
dimetron Mar 4, 2026
73b1994
Merge branch 'refs/heads/main' into feature/kanban-mcp
dimetron Mar 5, 2026
0262cf9
Plugin system on top of GO Runtime
dimetron Mar 5, 2026
6845cba
Dynamic plugin routing
dimetron Mar 5, 2026
47259ca
feat: add PluginUISpec to RemoteMCPServer CRD for dynamic plugin UI r…
dimetron Mar 5, 2026
9950188
feat: add Plugin database model and client methods for plugin UI routing
dimetron Mar 5, 2026
f6354e4
feat: reconcile plugin UI metadata from RemoteMCPServer CRD
dimetron Mar 5, 2026
b03f2cd
feat: add /api/plugins discovery endpoint and /plugins/{name}/ revers…
dimetron Mar 5, 2026
2edb260
feat: replace hardcoded /kanban-mcp/ nginx route with dynamic /plugin…
dimetron Mar 5, 2026
3635301
feat: add Next.js plugin iframe page with postMessage bridge
dimetron Mar 5, 2026
8e84955
feat: dynamic plugin navigation in sidebar with badge support
dimetron Mar 5, 2026
fe0cc4e
feat: add kagent-plugin-bridge.js SDK for plugin developers
dimetron Mar 5, 2026
e774f56
feat: migrate kanban to dynamic plugin system
dimetron Mar 5, 2026
0e646ba
test: add unit tests for plugin reconciler and handler
dimetron Mar 5, 2026
a718f5d
test: add E2E test for plugin routing pipeline
dimetron Mar 5, 2026
75cbf88
feat: add Temporal + NATS SDK deps and package structure for workflow…
dimetron Mar 6, 2026
6a38faa
test: add unit tests for NATS streaming publisher/subscriber
dimetron Mar 6, 2026
46ce97b
feat: implement Temporal activities with NATS streaming
dimetron Mar 6, 2026
f4f077e
feat: implement AgentExecutionWorkflow with per-turn activities
dimetron Mar 6, 2026
44f9aa1
feat: implement HITL signal support in AgentExecutionWorkflow
dimetron Mar 6, 2026
ebd168f
feat: implement child workflows for A2A multi-agent orchestration
dimetron Mar 6, 2026
f3d2c51
feat: implement worker and client with GetWorkflowStatus and WaitForR…
dimetron Mar 6, 2026
7ecc707
feat: integrate Temporal executor into A2A pipeline with CRD spec gate
dimetron Mar 6, 2026
962f514
feat: add TemporalSpec to Agent CRD and translator
dimetron Mar 6, 2026
43d3f3f
feat: add Helm chart for Temporal server, NATS, and Temporal UI plugin
dimetron Mar 6, 2026
8cc4414
test: add E2E tests for Temporal workflow execution pipeline
dimetron Mar 6, 2026
f307b6b
chore: auto-commit before merge (loop primary)
dimetron Mar 6, 2026
80556ce
fix: separate plugin proxy path (/_p/) from browser URL (/plugins/)
dimetron Mar 6, 2026
07e787f
feat: add loading indicator and error state with retry to sidebar plu…
dimetron Mar 6, 2026
9a4b684
feat: add loading skeleton and error fallback with retry to plugin page
dimetron Mar 6, 2026
594d642
test: add reconcilePluginUI unit tests for create, defaults, delete, …
dimetron Mar 6, 2026
fa64374
feat: add --wait polling and --proxy check to check-plugins-api.sh, a…
dimetron Mar 6, 2026
bf5db1e
test: add Cypress browser E2E tests for plugin routing
dimetron Mar 6, 2026
757104a
chore: auto-commit before merge (loop primary)
dimetron Mar 6, 2026
7f6b566
feat: scaffold temporal-mcp plugin with config and Temporal client wr…
dimetron Mar 6, 2026
f5f9913
feat: add MCP tools, REST handlers, and SSE hub for temporal-mcp plugin
dimetron Mar 6, 2026
4b040df
feat: add embedded SPA, HTTP server wiring, and main.go for temporal-…
dimetron Mar 6, 2026
7a5204b
feat: add Helm chart for temporal-mcp plugin and clean up nav
dimetron Mar 6, 2026
bee26fe
chore: auto-commit before merge (loop primary)
dimetron Mar 6, 2026
8f53f6c
- Dynamic plugin routing - fixed kanban
dimetron Mar 6, 2026
be9ffaa
feat: enhance gitrepo-mcp Helm chart with PVC, health probes, and Cro…
dimetron Mar 6, 2026
9e545fc
test: add Cypress browser acceptance tests for git repos UI
dimetron Mar 6, 2026
1914b7d
feat: add search, filtering, and scroll layout to MCP Servers page
dimetron Mar 7, 2026
d487a31
chore: auto-commit before merge (loop primary)
dimetron Mar 7, 2026
8f7f9e2
- Dynamic plugin routing - fixed kanban
dimetron Mar 8, 2026
38e08ff
updated design docs
dimetron Mar 8, 2026
16cbf03
temporal wip
dimetron Mar 8, 2026
a7d7d43
temporal wip
dimetron Mar 9, 2026
8ceefec
temporal wip
dimetron Mar 9, 2026
69a7dd1
temporal wip
dimetron Mar 9, 2026
e28ef5e
temporal fix tool call ui
dimetron Mar 9, 2026
fe13c25
temporal fix tool call ui
dimetron Mar 9, 2026
b3258b3
feat: add WorkflowTemplate and WorkflowRun CRD types
dimetron Mar 10, 2026
4819560
feat: add DAG compiler with validation and execution plan generation
dimetron Mar 10, 2026
820223a
feat: add expression interpolation engine for workflow templates
dimetron Mar 10, 2026
f707576
feat: add DAGWorkflow Temporal interpreter for declarative workflow e…
dimetron Mar 10, 2026
e6a4ae2
feat: add Action Activity framework with registry and built-in handlers
dimetron Mar 10, 2026
cad325e
feat: add Agent Step child workflow with proper types and output mapping
dimetron Mar 10, 2026
7c3c617
feat: add WorkflowTemplate controller with DAG validation
dimetron Mar 10, 2026
56249b3
feat: add WorkflowRun controller with lifecycle management
dimetron Mar 10, 2026
6e9f716
feat: add WorkflowRun status syncer for Temporal state synchronization
dimetron Mar 10, 2026
1db734c
feat: add HTTP API endpoints for workflow templates and runs
dimetron Mar 10, 2026
8a49919
feat: add WorkflowRun retention controller with history limits and TT…
dimetron Mar 10, 2026
02e36a5
feat: add E2E tests, example workflows, and Helm CRD templates
dimetron Mar 10, 2026
778c6d4
chore: auto-commit before merge (loop primary)
dimetron Mar 10, 2026
d9c95e3
chore: update plan checklist, CRD comment cleanup, and spec addendum
dimetron Mar 10, 2026
4718d48
temporal fix tool call ui
dimetron Mar 10, 2026
2a2fa51
temporal UI wip
dimetron Mar 10, 2026
088e8e2
chore: auto-commit before merge (loop primary)
dimetron Mar 10, 2026
59b368d
fix: split ServiceAccount into separate Helm template for nats-activi…
dimetron Mar 10, 2026
b0d66b2
chore: auto-commit before merge (loop primary)
dimetron Mar 10, 2026
e8cc65a
temporal UI wip
dimetron Mar 10, 2026
10b3e9d
temporal UI wip
dimetron Mar 11, 2026
41e93c2
cron mcp/ui
dimetron Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,7 @@ go/bin/

## Test certificates
python/packages/kagent-adk/tests/fixtures/certs/*.pem
python/packages/kagent-adk/tests/fixtures/certs/*.srl
python/packages/kagent-adk/tests/fixtures/certs/*.srl
.worktrees/
/go/kanban-mcp
/go/gitrepo-mcp
25 changes: 25 additions & 0 deletions .reflex/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[index]
languages = [] # Empty = all supported languages
max_file_size = 10485760 # 10 MB
follow_symlinks = false

[index.include]
patterns = []

[index.exclude]
patterns = []

[search]
default_limit = 100
fuzzy_threshold = 0.8

[performance]
parallel_threads = 0 # 0 = auto (80% of available cores), or set a specific number
compression_level = 3 # zstd level

[semantic]
# Semantic query generation using LLMs
# Translate natural language questions into rfx query commands
provider = "groq" # Options: openai, anthropic, groq
# model = "llama-3.3-70b-versatile" # Optional: override provider default model
# auto_execute = false # Optional: auto-execute queries without confirmation
Binary file added .reflex/content.bin
Binary file not shown.
Binary file added .reflex/trigrams.bin
Binary file not shown.
97 changes: 92 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,35 @@ APP_IMAGE_NAME ?= app
KAGENT_ADK_IMAGE_NAME ?= kagent-adk
GOLANG_ADK_IMAGE_NAME ?= golang-adk
SKILLS_INIT_IMAGE_NAME ?= skills-init
KANBAN_MCP_IMAGE_NAME ?= kanban-mcp
GITREPO_MCP_IMAGE_NAME ?= gitrepo-mcp
TEMPORAL_MCP_IMAGE_NAME ?= temporal-mcp
NATS_ACTIVITY_FEED_IMAGE_NAME ?= nats-activity-feed
CRON_MCP_IMAGE_NAME ?= cron-mcp

CONTROLLER_IMAGE_TAG ?= $(VERSION)
UI_IMAGE_TAG ?= $(VERSION)
APP_IMAGE_TAG ?= $(VERSION)
KAGENT_ADK_IMAGE_TAG ?= $(VERSION)
GOLANG_ADK_IMAGE_TAG ?= $(VERSION)
SKILLS_INIT_IMAGE_TAG ?= $(VERSION)
KANBAN_MCP_IMAGE_TAG ?= $(VERSION)
GITREPO_MCP_IMAGE_TAG ?= $(VERSION)
TEMPORAL_MCP_IMAGE_TAG ?= $(VERSION)
NATS_ACTIVITY_FEED_IMAGE_TAG ?= $(VERSION)
CRON_MCP_IMAGE_TAG ?= $(VERSION)

CONTROLLER_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(CONTROLLER_IMAGE_NAME):$(CONTROLLER_IMAGE_TAG)
UI_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(UI_IMAGE_NAME):$(UI_IMAGE_TAG)
APP_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(APP_IMAGE_NAME):$(APP_IMAGE_TAG)
KAGENT_ADK_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(KAGENT_ADK_IMAGE_NAME):$(KAGENT_ADK_IMAGE_TAG)
GOLANG_ADK_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(GOLANG_ADK_IMAGE_NAME):$(GOLANG_ADK_IMAGE_TAG)
SKILLS_INIT_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(SKILLS_INIT_IMAGE_NAME):$(SKILLS_INIT_IMAGE_TAG)
KANBAN_MCP_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(KANBAN_MCP_IMAGE_NAME):$(KANBAN_MCP_IMAGE_TAG)
GITREPO_MCP_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(GITREPO_MCP_IMAGE_NAME):$(GITREPO_MCP_IMAGE_TAG)
TEMPORAL_MCP_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(TEMPORAL_MCP_IMAGE_NAME):$(TEMPORAL_MCP_IMAGE_TAG)
NATS_ACTIVITY_FEED_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(NATS_ACTIVITY_FEED_IMAGE_NAME):$(NATS_ACTIVITY_FEED_IMAGE_TAG)
CRON_MCP_IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_REPO)/$(CRON_MCP_IMAGE_NAME):$(CRON_MCP_IMAGE_TAG)

#take from go/core/go.mod
AWK ?= $(shell command -v gawk || command -v awk)
Expand Down Expand Up @@ -217,12 +232,10 @@ prune-docker-images:
docker images --filter dangling=true -q | xargs -r docker rmi || :

.PHONY: build
build: buildx-create build-controller build-ui build-app build-golang-adk build-skills-init
build: buildx-create build-controller build-ui build-golang-adk build-skills-init build-kanban-mcp build-gitrepo-mcp build-temporal-mcp build-nats-activity-feed build-cron-mcp
@echo "Build completed successfully."
@echo "Controller Image: $(CONTROLLER_IMG)"
@echo "UI Image: $(UI_IMG)"
@echo "App Image: $(APP_IMG)"
@echo "Kagent ADK Image: $(KAGENT_ADK_IMG)"
@echo "Golang ADK Image: $(GOLANG_ADK_IMG)"
@echo "Skills Init Image: $(SKILLS_INIT_IMG)"

Expand Down Expand Up @@ -253,7 +266,7 @@ lint:
make -C python lint

.PHONY: push
push: push-controller push-ui push-app push-kagent-adk push-golang-adk
push: push-controller push-ui push-golang-adk


.PHONY: controller-manifests
Expand Down Expand Up @@ -283,7 +296,27 @@ build-golang-adk: buildx-create

.PHONY: build-skills-init
build-skills-init: buildx-create
$(DOCKER_BUILDER) build $(DOCKER_BUILD_ARGS) -t $(SKILLS_INIT_IMG) -f docker/skills-init/Dockerfile docker/skills-init
$(DOCKER_BUILDER) build $(DOCKER_BUILD_ARGS) --build-arg BASE_IMAGE_REGISTRY=$(BASE_IMAGE_REGISTRY) -t $(SKILLS_INIT_IMG) -f docker/skills-init/Dockerfile docker/skills-init

.PHONY: build-kanban-mcp
build-kanban-mcp: buildx-create
$(DOCKER_BUILDER) build $(DOCKER_BUILD_ARGS) $(TOOLS_IMAGE_BUILD_ARGS) --build-arg BUILD_PACKAGE=./plugins/kanban-mcp/ -t $(KANBAN_MCP_IMG) -f go/Dockerfile ./go

.PHONY: build-gitrepo-mcp
build-gitrepo-mcp: buildx-create
$(DOCKER_BUILDER) build $(DOCKER_BUILD_ARGS) $(TOOLS_IMAGE_BUILD_ARGS) -t $(GITREPO_MCP_IMG) -f go/plugins/gitrepo-mcp/Dockerfile ./go

.PHONY: build-temporal-mcp
build-temporal-mcp: buildx-create
$(DOCKER_BUILDER) build $(DOCKER_BUILD_ARGS) $(TOOLS_IMAGE_BUILD_ARGS) --build-arg BUILD_PACKAGE=./plugins/temporal-mcp/ -t $(TEMPORAL_MCP_IMG) -f go/Dockerfile ./go

.PHONY: build-nats-activity-feed
build-nats-activity-feed: buildx-create
$(DOCKER_BUILDER) build $(DOCKER_BUILD_ARGS) $(TOOLS_IMAGE_BUILD_ARGS) --build-arg BUILD_PACKAGE=./plugins/nats-activity-feed/ -t $(NATS_ACTIVITY_FEED_IMG) -f go/Dockerfile ./go

.PHONY: build-cron-mcp
build-cron-mcp: buildx-create
$(DOCKER_BUILDER) build $(DOCKER_BUILD_ARGS) $(TOOLS_IMAGE_BUILD_ARGS) --build-arg BUILD_PACKAGE=./plugins/cron-mcp/ -t $(CRON_MCP_IMG) -f go/Dockerfile ./go

.PHONY: helm-cleanup
helm-cleanup:
Expand Down Expand Up @@ -329,6 +362,12 @@ helm-tools:
helm package -d $(HELM_DIST_FOLDER) helm/tools/grafana-mcp
VERSION=$(VERSION) envsubst < helm/tools/querydoc/Chart-template.yaml > helm/tools/querydoc/Chart.yaml
helm package -d $(HELM_DIST_FOLDER) helm/tools/querydoc
VERSION=$(VERSION) envsubst < helm/tools/kanban-mcp/Chart-template.yaml > helm/tools/kanban-mcp/Chart.yaml
helm package -d $(HELM_DIST_FOLDER) helm/tools/kanban-mcp
VERSION=$(VERSION) envsubst < helm/tools/gitrepo-mcp/Chart-template.yaml > helm/tools/gitrepo-mcp/Chart.yaml
helm package -d $(HELM_DIST_FOLDER) helm/tools/gitrepo-mcp
VERSION=$(VERSION) envsubst < helm/tools/cron-mcp/Chart-template.yaml > helm/tools/cron-mcp/Chart.yaml
helm package -d $(HELM_DIST_FOLDER) helm/tools/cron-mcp

.PHONY: helm-version
helm-version: helm-cleanup helm-agents helm-tools
Expand Down Expand Up @@ -371,7 +410,25 @@ helm-install-provider: helm-version check-api-key
--set providers.default=$(KAGENT_DEFAULT_MODEL_PROVIDER) \
--set kmcp.enabled=$(KMCP_ENABLED) \
--set kmcp.image.tag=$(KMCP_VERSION) \
--set tools.kanban-mcp.enabled=true \
--set kanban-mcp.image.registry=$(DOCKER_REGISTRY) \
--set kanban-mcp.image.repository=$(DOCKER_REPO)/$(KANBAN_MCP_IMAGE_NAME) \
--set kanban-mcp.image.tag=$(KANBAN_MCP_IMAGE_TAG) \
--set-string kanban-mcp.config.KANBAN_DB_PATH=/tmp/kanban.db \
--set tools.gitrepo-mcp.enabled=true \
--set gitrepo-mcp.image.registry=$(DOCKER_REGISTRY) \
--set gitrepo-mcp.image.repository=$(DOCKER_REPO)/$(GITREPO_MCP_IMAGE_NAME) \
--set gitrepo-mcp.image.tag=$(GITREPO_MCP_IMAGE_TAG) \
--set gitrepo-mcp.args[0]=serve \
--set-string gitrepo-mcp.config.GITREPO_ADDR=:8080 \
--set-string gitrepo-mcp.config.GITREPO_DATA_DIR=/tmp/gitrepo \
--set querydoc.openai.apiKey=$(OPENAI_API_KEY) \
--set temporal.mcp.image=$(TEMPORAL_MCP_IMG) \
--set tools.cron-mcp.enabled=true \
--set cron-mcp.image.registry=$(DOCKER_REGISTRY) \
--set cron-mcp.image.repository=$(DOCKER_REPO)/$(CRON_MCP_IMAGE_NAME) \
--set cron-mcp.image.tag=$(CRON_MCP_IMAGE_TAG) \
--set-string cron-mcp.config.CRON_DB_PATH=/tmp/cron.db \
$(KAGENT_HELM_EXTRA_ARGS)

.PHONY: helm-install
Expand Down Expand Up @@ -417,6 +474,11 @@ kagent-ui-port-forward: use-kind-cluster
open http://localhost:8082/
kubectl port-forward -n kagent service/kagent-ui 8082:8080

.PHONY: temporal-ui-port-forward
temporal-ui-port-forward: use-kind-cluster
open http://localhost:8084/
kubectl port-forward -n kagent service/kagent-temporal-ui 8084:8080

.PHONY: kagent-addon-install
kagent-addon-install: use-kind-cluster
# to test the kagent addons - installing istio, grafana, prometheus, metrics-server
Expand Down Expand Up @@ -449,6 +511,31 @@ kind-debug:
docker exec -it $(KIND_CLUSTER_NAME)-control-plane bash -c 'apt-get update && apt-get install -y btop htop'
docker exec -it $(KIND_CLUSTER_NAME)-control-plane bash -c 'btop --utf-force'

##@ Testing

.PHONY: test-e2e-plugins
test-e2e-plugins: ## Run plugin API + proxy smoke test against running cluster
bash scripts/check-plugins-api.sh --wait --proxy \
--url "$(KAGENT_URL)/api/plugins" \
--proxy-base-url "$(KAGENT_URL)" \
--plugin "$(PLUGIN_PATH_PREFIX)" \
--section "$(PLUGIN_SECTION)"

KAGENT_URL ?= http://localhost:8083
PLUGIN_PATH_PREFIX ?= kanban-mcp
PLUGIN_SECTION ?= AGENTS

.PHONY: test-e2e-go
test-e2e-go: ## Run Go E2E tests
make -C go e2e

.PHONY: test-e2e-browser
test-e2e-browser: ## Run Cypress browser E2E tests for plugin routing
cd ui && npx cypress run --spec cypress/e2e/plugin-routing.cy.ts

.PHONY: test-e2e-all
test-e2e-all: test-e2e-go test-e2e-plugins test-e2e-browser ## Run all E2E tests (Go + plugin smoke + browser)

.PHONY: audit
audit:
echo "Running CVE audit GO"
Expand Down
8 changes: 8 additions & 0 deletions contrib/tools/gitrepo-mcp/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: v2
name: gitrepo-mcp
description: Git repo MCP server for kagent — semantic search + ast-grep structural search via MCP tools + REST API
type: application
version: 0.1.0
appVersion: latest
sources:
- https://github.com/kagent-dev/kagent
56 changes: 56 additions & 0 deletions contrib/tools/gitrepo-mcp/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "gitrepo-mcp.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Create a default fully qualified app name.
*/}}
{{- define "gitrepo-mcp.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "gitrepo-mcp.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Common labels
*/}}
{{- define "gitrepo-mcp.labels" -}}
helm.sh/chart: {{ include "gitrepo-mcp.chart" . }}
{{ include "gitrepo-mcp.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

{{/*
Selector labels
*/}}
{{- define "gitrepo-mcp.selectorLabels" -}}
app.kubernetes.io/name: {{ include "gitrepo-mcp.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{/*
Create the gitrepo mcp server URL.
*/}}
{{- define "gitrepo-mcp.serverUrl" -}}
{{- printf "http://%s.%s:%d/mcp" (include "gitrepo-mcp.fullname" .) .Release.Namespace (.Values.service.port | int) }}
{{- end }}
52 changes: 52 additions & 0 deletions contrib/tools/gitrepo-mcp/templates/cronjob.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{{- if .Values.cronJob.enabled }}
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ include "gitrepo-mcp.fullname" . }}-sync
namespace: {{ .Release.Namespace }}
labels:
{{- include "gitrepo-mcp.labels" . | nindent 4 }}
spec:
schedule: {{ .Values.cronJob.schedule | quote }}
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: {{ .Values.cronJob.successfulJobsHistoryLimit | default 3 }}
failedJobsHistoryLimit: {{ .Values.cronJob.failedJobsHistoryLimit | default 1 }}
jobTemplate:
spec:
template:
metadata:
labels:
{{- include "gitrepo-mcp.selectorLabels" . | nindent 12 }}
spec:
restartPolicy: OnFailure
containers:
- name: sync
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command: ["gitrepo-mcp"]
args:
- "sync-all"
- "--reindex={{ .Values.cronJob.reindex }}"
env:
- name: GITREPO_DB_TYPE
value: {{ .Values.config.dbType | quote }}
- name: GITREPO_DB_PATH
value: {{ .Values.config.dbPath | quote }}
- name: GITREPO_DATA_DIR
value: {{ .Values.config.dataDir | quote }}
{{- if .Values.config.dbUrl }}
- name: GITREPO_DB_URL
value: {{ .Values.config.dbUrl | quote }}
{{- end }}
{{- if .Values.persistence.enabled }}
volumeMounts:
- name: data
mountPath: /data
{{- end }}
{{- if .Values.persistence.enabled }}
volumes:
- name: data
persistentVolumeClaim:
claimName: {{ include "gitrepo-mcp.fullname" . }}
{{- end }}
{{- end }}
57 changes: 57 additions & 0 deletions contrib/tools/gitrepo-mcp/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "gitrepo-mcp.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "gitrepo-mcp.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "gitrepo-mcp.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "gitrepo-mcp.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: gitrepo-mcp
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command: ["gitrepo-mcp"]
args: ["serve"]
env:
- name: GITREPO_ADDR
value: {{ .Values.config.addr | quote }}
- name: GITREPO_TRANSPORT
value: {{ .Values.config.transport | quote }}
- name: GITREPO_DB_TYPE
value: {{ .Values.config.dbType | quote }}
- name: GITREPO_DB_PATH
value: {{ .Values.config.dbPath | quote }}
- name: GITREPO_DATA_DIR
value: {{ .Values.config.dataDir | quote }}
- name: GITREPO_LOG_LEVEL
value: {{ .Values.config.logLevel | quote }}
{{- if .Values.config.dbUrl }}
- name: GITREPO_DB_URL
value: {{ .Values.config.dbUrl | quote }}
{{- end }}
ports:
- name: http
containerPort: 8090
protocol: TCP
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- if .Values.persistence.enabled }}
volumeMounts:
- name: data
mountPath: /data
{{- end }}
{{- if .Values.persistence.enabled }}
volumes:
- name: data
persistentVolumeClaim:
claimName: {{ include "gitrepo-mcp.fullname" . }}
{{- end }}
Loading
Loading