feat: Claude Code Monitor — lanes, pipelines and a merged workspace
Internal SmartGift build of a Claude Code monitoring dashboard. Lanes: a durable unit of parallel agent work, one per working directory, tracked across session restarts. Managed lanes are git worktrees the dashboard provisions and can reset or remove behind a three-check destroy guard and a counted preflight; adopted lanes are directories you already own and are never destroyable. Pipelines: a lane moves through pipeline stages. A stage the agent declares with evidence renders green; a stage inferred from the tool-event stream renders dashed amber and never counts as done. Detection is forward-only within a 30-minute window, and never writes the declared stage. Workspace: one page at /run with a lane grid, the selected lane's pipeline, and a full Claude console behind a disclosure.
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
╔══════════════════════════════════════════════════════════════════════╗
|
||||
║ Claude Code Agent Monitor - Deployment Notes ║
|
||||
╚══════════════════════════════════════════════════════════════════════╝
|
||||
|
||||
{{- $fullName := include "agent-monitor.fullname" . -}}
|
||||
|
||||
🎉 {{ $fullName }} has been deployed to namespace "{{ .Release.Namespace }}"!
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📡 Accessing the Dashboard:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range $host := .Values.ingress.hosts }}
|
||||
{{- range .paths }}
|
||||
|
||||
URL: http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
|
||||
export NODE_PORT=$(kubectl get -n {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ $fullName }})
|
||||
export NODE_IP=$(kubectl get nodes -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo "Dashboard URL: http://$NODE_IP:$NODE_PORT"
|
||||
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
Watch status with:
|
||||
kubectl get -n {{ .Release.Namespace }} svc {{ $fullName }} -w
|
||||
|
||||
export SERVICE_IP=$(kubectl get svc -n {{ .Release.Namespace }} {{ $fullName }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo "Dashboard URL: http://$SERVICE_IP:{{ .Values.service.port }}"
|
||||
|
||||
{{- else }}
|
||||
|
||||
Port-forward to access locally:
|
||||
kubectl port-forward -n {{ .Release.Namespace }} svc/{{ $fullName }} 4820:{{ .Values.service.port }}
|
||||
|
||||
Then open: http://localhost:4820
|
||||
|
||||
{{- end }}
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🔍 Health Check:
|
||||
kubectl exec -n {{ .Release.Namespace }} deploy/{{ $fullName }} -- wget -qO- http://localhost:{{ .Values.service.targetPort }}/api/health
|
||||
|
||||
🧪 Run Tests:
|
||||
helm test {{ .Release.Name }} -n {{ .Release.Namespace }}
|
||||
|
||||
📊 View Logs:
|
||||
kubectl logs -n {{ .Release.Namespace }} -l app.kubernetes.io/name={{ include "agent-monitor.name" . }} -f
|
||||
|
||||
📈 Check Pods:
|
||||
kubectl get pods -n {{ .Release.Namespace }} -l app.kubernetes.io/name={{ include "agent-monitor.name" . }}
|
||||
|
||||
{{- if .Values.persistence.enabled }}
|
||||
|
||||
💾 Persistent Storage:
|
||||
SQLite data is stored on PVC: {{ $fullName }}-data ({{ .Values.persistence.size }})
|
||||
{{- end }}
|
||||
|
||||
{{- if .Values.mcp.enabled }}
|
||||
|
||||
🔌 MCP Sidecar:
|
||||
MCP server is running on port {{ .Values.mcp.port }}
|
||||
Access via: kubectl port-forward -n {{ .Release.Namespace }} svc/{{ $fullName }} {{ .Values.mcp.port }}:{{ .Values.mcp.port }}
|
||||
{{- end }}
|
||||
|
||||
{{- if .Values.autoscaling.enabled }}
|
||||
|
||||
📐 Autoscaling:
|
||||
Min replicas: {{ .Values.autoscaling.minReplicas }}
|
||||
Max replicas: {{ .Values.autoscaling.maxReplicas }}
|
||||
CPU target: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}%
|
||||
Memory target: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}%
|
||||
{{- end }}
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Reference in New Issue
Block a user