@cybermem/cli 0.9.12 → 0.13.3

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.
Files changed (56) hide show
  1. package/dist/commands/install.js +430 -0
  2. package/dist/commands/reset.js +18 -2
  3. package/dist/commands/uninstall.js +145 -0
  4. package/dist/commands/upgrade.js +91 -52
  5. package/dist/index.js +18 -5
  6. package/dist/templates/ansible/playbooks/deploy-cybermem.yml +201 -24
  7. package/dist/templates/ansible/playbooks/reset-db.yml +44 -0
  8. package/dist/templates/auth-sidecar/Dockerfile +2 -10
  9. package/dist/templates/auth-sidecar/package.json +1 -3
  10. package/dist/templates/auth-sidecar/server.js +149 -110
  11. package/dist/templates/charts/cybermem/.helmignore +13 -0
  12. package/dist/templates/charts/cybermem/templates/dashboard-deployment.yaml +31 -7
  13. package/dist/templates/charts/cybermem/templates/dashboard-service.yaml +4 -4
  14. package/dist/templates/charts/cybermem/templates/openmemory-deployment.yaml +14 -8
  15. package/dist/templates/charts/cybermem/templates/openmemory-service.yaml +3 -3
  16. package/dist/templates/charts/cybermem/templates/secret.yaml +9 -0
  17. package/dist/templates/charts/cybermem/templates/traefik-config.yaml +67 -0
  18. package/dist/templates/charts/cybermem/templates/traefik-deployment.yaml +53 -0
  19. package/dist/templates/charts/cybermem/templates/traefik-service.yaml +17 -0
  20. package/dist/templates/charts/cybermem/values-vps.yaml +8 -4
  21. package/dist/templates/charts/cybermem/values.yaml +17 -9
  22. package/dist/templates/docker-compose.yml +103 -78
  23. package/dist/templates/monitoring/log_exporter/exporter.py +22 -29
  24. package/dist/templates/monitoring/traefik/traefik.yml +1 -4
  25. package/package.json +9 -3
  26. package/templates/ansible/playbooks/deploy-cybermem.yml +201 -24
  27. package/templates/ansible/playbooks/reset-db.yml +44 -0
  28. package/templates/auth-sidecar/Dockerfile +2 -10
  29. package/templates/auth-sidecar/package.json +1 -3
  30. package/templates/auth-sidecar/server.js +149 -110
  31. package/templates/charts/cybermem/.helmignore +13 -0
  32. package/templates/charts/cybermem/templates/dashboard-deployment.yaml +31 -7
  33. package/templates/charts/cybermem/templates/dashboard-service.yaml +4 -4
  34. package/templates/charts/cybermem/templates/openmemory-deployment.yaml +14 -8
  35. package/templates/charts/cybermem/templates/openmemory-service.yaml +3 -3
  36. package/templates/charts/cybermem/templates/secret.yaml +9 -0
  37. package/templates/charts/cybermem/templates/traefik-config.yaml +67 -0
  38. package/templates/charts/cybermem/templates/traefik-deployment.yaml +53 -0
  39. package/templates/charts/cybermem/templates/traefik-service.yaml +17 -0
  40. package/templates/charts/cybermem/values-vps.yaml +8 -4
  41. package/templates/charts/cybermem/values.yaml +17 -9
  42. package/templates/docker-compose.yml +103 -78
  43. package/templates/monitoring/log_exporter/exporter.py +22 -29
  44. package/templates/monitoring/traefik/traefik.yml +1 -4
  45. package/dist/commands/__tests__/backup.test.js +0 -75
  46. package/dist/commands/__tests__/restore.test.js +0 -70
  47. package/dist/commands/deploy.js +0 -239
  48. package/dist/commands/init.js +0 -362
  49. package/dist/commands/login.js +0 -165
  50. package/dist/templates/envs/local.example +0 -27
  51. package/dist/templates/envs/rpi.example +0 -27
  52. package/dist/templates/envs/vps.example +0 -25
  53. package/dist/templates/monitoring/instructions_injector/Dockerfile +0 -15
  54. package/dist/templates/monitoring/instructions_injector/injector.py +0 -137
  55. package/dist/templates/monitoring/instructions_injector/requirements.txt +0 -3
  56. package/dist/templates/openmemory/Dockerfile +0 -19
@@ -1,29 +1,53 @@
1
1
  apiVersion: apps/v1
2
2
  kind: Deployment
3
3
  metadata:
4
- name: {{ .Chart.Name }}-dashboard
4
+ name: "{{ .Chart.Name }}-{{ .Values.global.dashboard.serviceName }}"
5
5
  labels:
6
- app.kubernetes.io/name: dashboard
6
+ app.kubernetes.io/name: "{{ .Values.global.dashboard.serviceName }}"
7
7
  spec:
8
8
  replicas: {{ .Values.dashboard.replicaCount }}
9
9
  selector:
10
10
  matchLabels:
11
- app.kubernetes.io/name: dashboard
11
+ app.kubernetes.io/name: "{{ .Values.global.dashboard.serviceName }}"
12
12
  template:
13
13
  metadata:
14
14
  labels:
15
- app.kubernetes.io/name: dashboard
15
+ app.kubernetes.io/name: "{{ .Values.global.dashboard.serviceName }}"
16
16
  spec:
17
17
  containers:
18
- - name: dashboard
18
+ - name: "{{ .Values.global.dashboard.serviceName }}"
19
19
  image: "{{ .Values.dashboard.image.repository }}:{{ .Values.dashboard.image.tag }}"
20
20
  imagePullPolicy: {{ .Values.dashboard.image.pullPolicy }}
21
21
  ports:
22
22
  - name: http
23
- containerPort: 3000
23
+ containerPort: {{ .Values.global.dashboard.port }}
24
24
  protocol: TCP
25
25
  env:
26
26
  - name: NEXT_PUBLIC_API_URL
27
- value: "http://{{ .Chart.Name }}-openmemory:8080"
27
+ value: "http://{{ .Chart.Name }}-{{ .Values.global.openmemory.serviceName }}:{{ .Values.global.openmemory.port }}"
28
+ - name: CYBERMEM_INSTANCE
29
+ value: "vps"
30
+ - name: CYBERMEM_ENV
31
+ value: {{ .Values.env.CYBERMEM_ENV | default "prod" | quote }}
32
+ - name: POM_API_KEY
33
+ value: {{ .Values.env.OPENMEMORY_API_KEY | quote }}
34
+ - name: OM_API_KEY
35
+ value: {{ .Values.env.OPENMEMORY_API_KEY | quote }}
36
+ - name: PORT
37
+ value: {{ .Values.global.dashboard.port | quote }}
38
+ volumeMounts:
39
+ - name: data
40
+ mountPath: /data
41
+ - name: api-key
42
+ mountPath: /run/secrets/om_api_key
43
+ subPath: om_api_key
44
+ readOnly: true
28
45
  resources:
29
46
  {{- toYaml .Values.dashboard.resources | nindent 12 }}
47
+ volumes:
48
+ - name: data
49
+ persistentVolumeClaim:
50
+ claimName: "{{ .Chart.Name }}-{{ .Values.global.openmemory.serviceName }}-pvc"
51
+ - name: api-key
52
+ secret:
53
+ secretName: "{{ .Chart.Name }}-api-key"
@@ -1,20 +1,20 @@
1
1
  apiVersion: v1
2
2
  kind: Service
3
3
  metadata:
4
- name: {{ .Chart.Name }}-dashboard
4
+ name: {{ .Chart.Name }}-{{ .Values.global.dashboard.serviceName }}
5
5
  spec:
6
6
  type: {{ .Values.dashboard.service.type }}
7
7
  ports:
8
- - port: {{ .Values.dashboard.service.port }}
8
+ - port: {{ .Values.global.dashboard.port }}
9
9
  targetPort: http
10
10
  protocol: TCP
11
11
  name: http
12
12
  {{- if eq .Values.dashboard.service.type "NodePort" }}
13
- - port: {{ .Values.dashboard.service.port }}
13
+ - port: {{ .Values.global.dashboard.port }}
14
14
  targetPort: http
15
15
  nodePort: {{ .Values.dashboard.service.nodePort }}
16
16
  protocol: TCP
17
17
  name: http-node
18
18
  {{- end }}
19
19
  selector:
20
- app.kubernetes.io/name: dashboard
20
+ app.kubernetes.io/name: {{ .Values.global.dashboard.serviceName }}
@@ -1,34 +1,40 @@
1
1
  apiVersion: apps/v1
2
2
  kind: Deployment
3
3
  metadata:
4
- name: {{ .Chart.Name }}-openmemory
4
+ name: {{ .Chart.Name }}-{{ .Values.global.openmemory.serviceName }}
5
5
  labels:
6
- app.kubernetes.io/name: openmemory
6
+ app.kubernetes.io/name: {{ .Values.global.openmemory.serviceName }}
7
7
  spec:
8
8
  replicas: {{ .Values.openmemory.replicaCount }}
9
9
  selector:
10
10
  matchLabels:
11
- app.kubernetes.io/name: openmemory
11
+ app.kubernetes.io/name: {{ .Values.global.openmemory.serviceName }}
12
12
  template:
13
13
  metadata:
14
14
  labels:
15
- app.kubernetes.io/name: openmemory
15
+ app.kubernetes.io/name: {{ .Values.global.openmemory.serviceName }}
16
16
  spec:
17
17
  containers:
18
- - name: openmemory
18
+ - name: {{ .Values.global.openmemory.serviceName }}
19
19
  image: "{{ .Values.openmemory.image.repository }}:{{ .Values.openmemory.image.tag }}"
20
20
  imagePullPolicy: {{ .Values.openmemory.image.pullPolicy }}
21
21
  ports:
22
22
  - name: http
23
- containerPort: 8080
23
+ containerPort: {{ .Values.global.openmemory.port }}
24
24
  protocol: TCP
25
25
  env:
26
26
  - name: OPENMEMORY_API_KEY
27
27
  value: {{ .Values.env.OPENMEMORY_API_KEY | quote }}
28
28
  - name: OPENAI_API_KEY
29
29
  value: {{ .Values.env.OPENAI_API_KEY | quote }}
30
- - name: DB_PATH
30
+ - name: OM_DB_PATH
31
31
  value: "/data/openmemory.sqlite"
32
+ - name: OM_PORT
33
+ value: {{ .Values.global.openmemory.port | quote }}
34
+ - name: CYBERMEM_INSTANCE
35
+ value: "vps"
36
+ - name: CYBERMEM_ENV
37
+ value: "staging"
32
38
  volumeMounts:
33
39
  - name: data
34
40
  mountPath: /data
@@ -37,4 +43,4 @@ spec:
37
43
  volumes:
38
44
  - name: data
39
45
  persistentVolumeClaim:
40
- claimName: {{ .Chart.Name }}-openmemory-pvc
46
+ claimName: {{ .Chart.Name }}-{{ .Values.global.openmemory.serviceName }}-pvc
@@ -1,13 +1,13 @@
1
1
  apiVersion: v1
2
2
  kind: Service
3
3
  metadata:
4
- name: {{ .Chart.Name }}-openmemory
4
+ name: {{ .Chart.Name }}-{{ .Values.global.openmemory.serviceName }}
5
5
  spec:
6
6
  type: {{ .Values.openmemory.service.type }}
7
7
  ports:
8
- - port: {{ .Values.openmemory.service.port }}
8
+ - port: {{ .Values.global.openmemory.port }}
9
9
  targetPort: http
10
10
  protocol: TCP
11
11
  name: http
12
12
  selector:
13
- app.kubernetes.io/name: openmemory
13
+ app.kubernetes.io/name: {{ .Values.global.openmemory.serviceName }}
@@ -0,0 +1,9 @@
1
+ apiVersion: v1
2
+ kind: Secret
3
+ metadata:
4
+ name: "{{ .Chart.Name }}-api-key"
5
+ labels:
6
+ app.kubernetes.io/name: "{{ .Chart.Name }}"
7
+ type: Opaque
8
+ stringData:
9
+ om_api_key: "{{ .Values.env.OPENMEMORY_API_KEY }}"
@@ -0,0 +1,67 @@
1
+ apiVersion: v1
2
+ kind: ConfigMap
3
+ metadata:
4
+ name: {{ .Chart.Name }}-traefik-config
5
+ data:
6
+ traefik.yml: |
7
+ accessLog: {}
8
+ entryPoints:
9
+ web:
10
+ address: ":{{ .Values.global.traefik.port }}"
11
+ providers:
12
+ file:
13
+ filename: /etc/traefik/dynamic.yml
14
+ dynamic.yml: |
15
+ http:
16
+ routers:
17
+ mcp-delete:
18
+ rule: "Method(`DELETE`)"
19
+ service: mcp-service
20
+ entryPoints:
21
+ - web
22
+ priority: 300
23
+ mcp-add:
24
+ rule: "PathPrefix(`/add`)"
25
+ service: mcp-service
26
+ entryPoints:
27
+ - web
28
+ priority: 250
29
+ mcp-query:
30
+ rule: "PathPrefix(`/query`)"
31
+ service: mcp-service
32
+ entryPoints:
33
+ - web
34
+ priority: 250
35
+ mcp-all:
36
+ rule: "PathPrefix(`/all`)"
37
+ service: mcp-service
38
+ entryPoints:
39
+ - web
40
+ priority: 250
41
+ mcp-api:
42
+ rule: "PathPrefix(`/mcp`) || PathPrefix(`/sse`)"
43
+ service: mcp-service
44
+ entryPoints:
45
+ - web
46
+ priority: 200
47
+ mcp-public:
48
+ rule: "PathPrefix(`/health`) || PathPrefix(`/metrics`)"
49
+ service: mcp-service
50
+ entryPoints:
51
+ - web
52
+ priority: 200
53
+ dashboard:
54
+ rule: "PathPrefix(`/`)"
55
+ service: dashboard-service
56
+ entryPoints:
57
+ - web
58
+ priority: 1
59
+ services:
60
+ mcp-service:
61
+ loadBalancer:
62
+ servers:
63
+ - url: "http://{{ .Chart.Name }}-{{ .Values.global.openmemory.serviceName }}:{{ .Values.global.openmemory.port }}"
64
+ dashboard-service:
65
+ loadBalancer:
66
+ servers:
67
+ - url: "http://{{ .Chart.Name }}-{{ .Values.global.dashboard.serviceName }}:{{ .Values.global.dashboard.port }}"
@@ -0,0 +1,53 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: "{{ .Chart.Name }}-traefik"
5
+ labels:
6
+ app.kubernetes.io/name: traefik
7
+ spec:
8
+ replicas: 1
9
+ selector:
10
+ matchLabels:
11
+ app.kubernetes.io/name: traefik
12
+ template:
13
+ metadata:
14
+ labels:
15
+ app.kubernetes.io/name: traefik
16
+ annotations:
17
+ # Standard k8s pattern to trigger restart when ConfigMap changes
18
+ checksum/config: {{ include (print $.Template.BasePath "/traefik-config.yaml") . | sha256sum }}
19
+ spec:
20
+ containers:
21
+ - name: traefik
22
+ image: traefik:v3.0
23
+ args:
24
+ - --api.dashboard=true
25
+ - --api.insecure=true
26
+ - --providers.kubernetes-ingress=false
27
+ - --providers.kubernetes-crd=false
28
+ - --entrypoints.web.address=:{{ .Values.global.traefik.port }}
29
+ ports:
30
+ - name: web
31
+ containerPort: {{ .Values.global.traefik.port }}
32
+ - name: admin
33
+ containerPort: 8080
34
+ volumeMounts:
35
+ - name: config
36
+ mountPath: /etc/traefik/traefik.yml
37
+ subPath: traefik.yml
38
+ - name: dynamic
39
+ mountPath: /etc/traefik/dynamic.yml
40
+ subPath: dynamic.yml
41
+ volumes:
42
+ - name: config
43
+ configMap:
44
+ name: {{ .Chart.Name }}-traefik-config
45
+ items:
46
+ - key: traefik.yml
47
+ path: traefik.yml
48
+ - name: dynamic
49
+ configMap:
50
+ name: {{ .Chart.Name }}-traefik-config
51
+ items:
52
+ - key: dynamic.yml
53
+ path: dynamic.yml
@@ -0,0 +1,17 @@
1
+ apiVersion: v1
2
+ kind: Service
3
+ metadata:
4
+ name: {{ .Chart.Name }}-lb
5
+ spec:
6
+ type: LoadBalancer
7
+ ports:
8
+ - port: 80
9
+ targetPort: web
10
+ protocol: TCP
11
+ name: http
12
+ - port: {{ .Values.global.traefik.port }}
13
+ targetPort: web
14
+ protocol: TCP
15
+ name: web
16
+ selector:
17
+ app.kubernetes.io/name: traefik
@@ -1,16 +1,20 @@
1
- # VPS Overrides
1
+ global:
2
+ traefik:
3
+ port: 8625
2
4
 
3
5
  openmemory:
4
6
  image:
5
- repository: ghcr.io/mikhailkogan17/cybermem-openmemory
6
- pullPolicy: Always
7
+ repository: ghcr.io/mikhailkogan17/cybermem-mcp
8
+ pullPolicy: IfNotPresent
9
+ tag: "v0.12.5-local"
7
10
  service:
8
11
  type: ClusterIP
9
12
 
10
13
  dashboard:
11
14
  image:
12
15
  repository: ghcr.io/mikhailkogan17/cybermem-dashboard
13
- pullPolicy: Always
16
+ pullPolicy: IfNotPresent
17
+ tag: "v0.12.5-local"
14
18
 
15
19
  env:
16
20
  OPENMEMORY_API_KEY: "prod-secret-key-CHANGE-ME"
@@ -1,14 +1,24 @@
1
1
  # Default values for cybermem.
2
2
 
3
+ # Global settings for SSoT
4
+ global:
5
+ traefik:
6
+ port: 8625
7
+ openmemory:
8
+ serviceName: "openmemory"
9
+ port: 8080
10
+ dashboard:
11
+ serviceName: "dashboard"
12
+ port: 3000
13
+
3
14
  openmemory:
4
15
  image:
5
- repository: cybermem-openmemory
6
- pullPolicy: IfNotPresent
16
+ repository: ghcr.io/mikhailkogan17/cybermem-mcp
17
+ pullPolicy: Always
7
18
  tag: "latest"
8
19
  replicaCount: 1
9
20
  service:
10
21
  type: ClusterIP
11
- port: 8080
12
22
  persistence:
13
23
  enabled: true
14
24
  size: 10Gi
@@ -20,23 +30,21 @@ openmemory:
20
30
  requests:
21
31
  cpu: 100m
22
32
  memory: 256Mi
23
- env:
24
- # Passed to the container
25
- OM_PORT: "8080"
33
+ env: {}
26
34
 
27
35
  dashboard:
28
36
  image:
29
- repository: cybermem-dashboard
37
+ repository: ghcr.io/mikhailkogan17/cybermem-dashboard
30
38
  pullPolicy: IfNotPresent
31
39
  tag: "latest"
32
40
  replicaCount: 1
33
41
  service:
34
42
  type: ClusterIP
35
- port: 3000
36
43
  nodePort: 30000 # For k3d/local access if needed
37
44
  resources: {}
38
45
 
39
46
  env:
40
47
  # Shared secrets
41
- OPENMEMORY_API_KEY: "dev-secret-key"
48
+ OPENMEMORY_API_KEY: "sk-74d94d0021f1a9a525e1c311cfd16575"
42
49
  OPENAI_API_KEY: ""
50
+ CYBERMEM_ENV: "staging"