@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.
- package/dist/commands/install.js +430 -0
- package/dist/commands/reset.js +18 -2
- package/dist/commands/uninstall.js +145 -0
- package/dist/commands/upgrade.js +91 -52
- package/dist/index.js +18 -5
- package/dist/templates/ansible/playbooks/deploy-cybermem.yml +201 -24
- package/dist/templates/ansible/playbooks/reset-db.yml +44 -0
- package/dist/templates/auth-sidecar/Dockerfile +2 -10
- package/dist/templates/auth-sidecar/package.json +1 -3
- package/dist/templates/auth-sidecar/server.js +149 -110
- package/dist/templates/charts/cybermem/.helmignore +13 -0
- package/dist/templates/charts/cybermem/templates/dashboard-deployment.yaml +31 -7
- package/dist/templates/charts/cybermem/templates/dashboard-service.yaml +4 -4
- package/dist/templates/charts/cybermem/templates/openmemory-deployment.yaml +14 -8
- package/dist/templates/charts/cybermem/templates/openmemory-service.yaml +3 -3
- package/dist/templates/charts/cybermem/templates/secret.yaml +9 -0
- package/dist/templates/charts/cybermem/templates/traefik-config.yaml +67 -0
- package/dist/templates/charts/cybermem/templates/traefik-deployment.yaml +53 -0
- package/dist/templates/charts/cybermem/templates/traefik-service.yaml +17 -0
- package/dist/templates/charts/cybermem/values-vps.yaml +8 -4
- package/dist/templates/charts/cybermem/values.yaml +17 -9
- package/dist/templates/docker-compose.yml +103 -78
- package/dist/templates/monitoring/log_exporter/exporter.py +22 -29
- package/dist/templates/monitoring/traefik/traefik.yml +1 -4
- package/package.json +9 -3
- package/templates/ansible/playbooks/deploy-cybermem.yml +201 -24
- package/templates/ansible/playbooks/reset-db.yml +44 -0
- package/templates/auth-sidecar/Dockerfile +2 -10
- package/templates/auth-sidecar/package.json +1 -3
- package/templates/auth-sidecar/server.js +149 -110
- package/templates/charts/cybermem/.helmignore +13 -0
- package/templates/charts/cybermem/templates/dashboard-deployment.yaml +31 -7
- package/templates/charts/cybermem/templates/dashboard-service.yaml +4 -4
- package/templates/charts/cybermem/templates/openmemory-deployment.yaml +14 -8
- package/templates/charts/cybermem/templates/openmemory-service.yaml +3 -3
- package/templates/charts/cybermem/templates/secret.yaml +9 -0
- package/templates/charts/cybermem/templates/traefik-config.yaml +67 -0
- package/templates/charts/cybermem/templates/traefik-deployment.yaml +53 -0
- package/templates/charts/cybermem/templates/traefik-service.yaml +17 -0
- package/templates/charts/cybermem/values-vps.yaml +8 -4
- package/templates/charts/cybermem/values.yaml +17 -9
- package/templates/docker-compose.yml +103 -78
- package/templates/monitoring/log_exporter/exporter.py +22 -29
- package/templates/monitoring/traefik/traefik.yml +1 -4
- package/dist/commands/__tests__/backup.test.js +0 -75
- package/dist/commands/__tests__/restore.test.js +0 -70
- package/dist/commands/deploy.js +0 -239
- package/dist/commands/init.js +0 -362
- package/dist/commands/login.js +0 -165
- package/dist/templates/envs/local.example +0 -27
- package/dist/templates/envs/rpi.example +0 -27
- package/dist/templates/envs/vps.example +0 -25
- package/dist/templates/monitoring/instructions_injector/Dockerfile +0 -15
- package/dist/templates/monitoring/instructions_injector/injector.py +0 -137
- package/dist/templates/monitoring/instructions_injector/requirements.txt +0 -3
- 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:
|
|
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:
|
|
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.
|
|
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.
|
|
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:
|
|
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:
|
|
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.
|
|
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,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
|
-
|
|
1
|
+
global:
|
|
2
|
+
traefik:
|
|
3
|
+
port: 8625
|
|
2
4
|
|
|
3
5
|
openmemory:
|
|
4
6
|
image:
|
|
5
|
-
repository: ghcr.io/mikhailkogan17/cybermem-
|
|
6
|
-
pullPolicy:
|
|
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:
|
|
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-
|
|
6
|
-
pullPolicy:
|
|
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: "
|
|
48
|
+
OPENMEMORY_API_KEY: "sk-74d94d0021f1a9a525e1c311cfd16575"
|
|
42
49
|
OPENAI_API_KEY: ""
|
|
50
|
+
CYBERMEM_ENV: "staging"
|