better-mem0-mcp 1.1.0b9__tar.gz → 1.1.0b17__tar.gz

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 (31) hide show
  1. better_mem0_mcp-1.1.0b17/.github/scripts/check-ci-cd-status.sh +86 -0
  2. better_mem0_mcp-1.1.0b17/.github/scripts/merge-with-auto-resolve.sh +85 -0
  3. better_mem0_mcp-1.1.0b17/.github/workflows/cd.yml +297 -0
  4. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.github/workflows/ci.yml +5 -5
  5. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.gitignore +2 -2
  6. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.mise.toml +1 -4
  7. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.releaserc.json +1 -1
  8. better_mem0_mcp-1.1.0b17/.vscode/better-mem0-mcp.code-workspace +8 -0
  9. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/CHANGELOG.md +56 -0
  10. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/PKG-INFO +1 -1
  11. better_mem0_mcp-1.1.0b17/package-lock.json +27 -0
  12. better_mem0_mcp-1.1.0b17/package.json +5 -0
  13. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/pyproject.toml +1 -2
  14. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/scripts/clean-venv.mjs +5 -5
  15. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/uv.lock +1 -1
  16. better_mem0_mcp-1.1.0b9/.github/workflows/cd.yml +0 -166
  17. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.dockerignore +0 -0
  18. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.editorconfig +0 -0
  19. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.pre-commit-config.yaml +0 -0
  20. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.python-version +0 -0
  21. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/CONTRIBUTING.md +0 -0
  22. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/Dockerfile +0 -0
  23. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/LICENSE +0 -0
  24. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/README.md +0 -0
  25. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/SECURITY.md +0 -0
  26. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/__init__.py +0 -0
  27. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/config.py +0 -0
  28. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/docs/memory.md +0 -0
  29. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/graph.py +0 -0
  30. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/py.typed +0 -0
  31. {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/server.py +0 -0
@@ -0,0 +1,86 @@
1
+ #!/bin/bash
2
+ # Check CI/CD workflow status before promoting
3
+ # Usage: ./check-ci-cd-status.sh [--branch=dev] [--ci-workflow=ci.yml] [--cd-workflow=cd.yml]
4
+ # Environment: GH_TOKEN must be set
5
+
6
+ set -euo pipefail
7
+
8
+ # Default values
9
+ BRANCH="${BRANCH:-dev}"
10
+ CI_WORKFLOW="${CI_WORKFLOW:-ci.yml}"
11
+ CD_WORKFLOW="${CD_WORKFLOW:-cd.yml}"
12
+
13
+ # Parse arguments
14
+ for arg in "$@"; do
15
+ case $arg in
16
+ --branch=*)
17
+ BRANCH="${arg#*=}"
18
+ ;;
19
+ --ci-workflow=*)
20
+ CI_WORKFLOW="${arg#*=}"
21
+ ;;
22
+ --cd-workflow=*)
23
+ CD_WORKFLOW="${arg#*=}"
24
+ ;;
25
+ *)
26
+ echo "Unknown argument: $arg"
27
+ exit 1
28
+ ;;
29
+ esac
30
+ done
31
+
32
+ echo "Checking CI/CD status on $BRANCH branch..."
33
+ FAILED=false
34
+
35
+ # Check CI workflow
36
+ echo "--- Checking CI workflow ($CI_WORKFLOW) ---"
37
+ CI_STATUS=$(gh run list --workflow="$CI_WORKFLOW" --branch="$BRANCH" --limit=1 --json status,conclusion --jq '.[0]' 2>/dev/null || echo "")
38
+
39
+ if [ -z "$CI_STATUS" ] || [ "$CI_STATUS" = "null" ]; then
40
+ echo "Warning: No CI runs found for $BRANCH branch"
41
+ else
42
+ CI_RUN_STATUS=$(echo "$CI_STATUS" | jq -r '.status')
43
+ CI_CONCLUSION=$(echo "$CI_STATUS" | jq -r '.conclusion')
44
+ echo "CI - Status: $CI_RUN_STATUS, Conclusion: $CI_CONCLUSION"
45
+
46
+ if [ "$CI_RUN_STATUS" != "completed" ]; then
47
+ echo "Error: CI is still running on $BRANCH branch"
48
+ FAILED=true
49
+ elif [ "$CI_CONCLUSION" != "success" ]; then
50
+ echo "Error: CI failed on $BRANCH branch"
51
+ FAILED=true
52
+ else
53
+ echo "✓ CI passed"
54
+ fi
55
+ fi
56
+
57
+ # Check CD workflow (only push events, not workflow_dispatch)
58
+ echo "--- Checking CD workflow ($CD_WORKFLOW) ---"
59
+ CD_STATUS=$(gh run list --workflow="$CD_WORKFLOW" --branch="$BRANCH" --event=push --limit=1 --json status,conclusion --jq '.[0]' 2>/dev/null || echo "")
60
+
61
+ if [ -z "$CD_STATUS" ] || [ "$CD_STATUS" = "null" ]; then
62
+ echo "Warning: No CD runs found for $BRANCH branch"
63
+ else
64
+ CD_RUN_STATUS=$(echo "$CD_STATUS" | jq -r '.status')
65
+ CD_CONCLUSION=$(echo "$CD_STATUS" | jq -r '.conclusion')
66
+ echo "CD - Status: $CD_RUN_STATUS, Conclusion: $CD_CONCLUSION"
67
+
68
+ if [ "$CD_RUN_STATUS" != "completed" ]; then
69
+ echo "Error: CD is still running on $BRANCH branch. Please wait for beta release to complete."
70
+ FAILED=true
71
+ elif [ "$CD_CONCLUSION" != "success" ]; then
72
+ echo "Error: CD failed on $BRANCH branch"
73
+ FAILED=true
74
+ else
75
+ echo "✓ CD passed"
76
+ fi
77
+ fi
78
+
79
+ if [ "$FAILED" = true ]; then
80
+ echo ""
81
+ echo "Please fix the issues or wait for workflows to complete before promoting."
82
+ exit 1
83
+ fi
84
+
85
+ echo ""
86
+ echo "✓ All checks passed. Proceeding with promotion..."
@@ -0,0 +1,85 @@
1
+ #!/bin/bash
2
+ # Merge source branch to target branch with auto-resolve for semantic-release managed files
3
+ # Usage: ./merge-with-auto-resolve.sh [--source=dev] [--target=main] [--files="CHANGELOG.md,package.json"]
4
+ # Environment: Must be run in a git repository with proper permissions
5
+
6
+ set -euo pipefail
7
+
8
+ # Default values
9
+ SOURCE_BRANCH="${SOURCE_BRANCH:-dev}"
10
+ TARGET_BRANCH="${TARGET_BRANCH:-main}"
11
+ AUTO_RESOLVE_FILES="${AUTO_RESOLVE_FILES:-CHANGELOG.md,package.json}"
12
+
13
+ # Parse arguments
14
+ for arg in "$@"; do
15
+ case $arg in
16
+ --source=*)
17
+ SOURCE_BRANCH="${arg#*=}"
18
+ ;;
19
+ --target=*)
20
+ TARGET_BRANCH="${arg#*=}"
21
+ ;;
22
+ --files=*)
23
+ AUTO_RESOLVE_FILES="${arg#*=}"
24
+ ;;
25
+ *)
26
+ echo "Unknown argument: $arg"
27
+ exit 1
28
+ ;;
29
+ esac
30
+ done
31
+
32
+ echo "Merging $SOURCE_BRANCH to $TARGET_BRANCH..."
33
+ echo "Auto-resolve files: $AUTO_RESOLVE_FILES"
34
+
35
+ # Setup git
36
+ git config user.name "github-actions[bot]"
37
+ git config user.email "github-actions[bot]@users.noreply.github.com"
38
+
39
+ # Fetch and checkout target
40
+ git fetch origin
41
+ git checkout "$TARGET_BRANCH"
42
+ git pull origin "$TARGET_BRANCH"
43
+
44
+ # Disable exit on error to handle merge conflicts gracefully
45
+ set +e
46
+
47
+ # Attempt merge
48
+ git merge "origin/$SOURCE_BRANCH" --no-ff -m "chore: promote $SOURCE_BRANCH to $TARGET_BRANCH"
49
+ MERGE_RESULT=$?
50
+
51
+ set -e
52
+
53
+ if [ $MERGE_RESULT -ne 0 ]; then
54
+ echo "Merge had conflicts, attempting auto-resolution..."
55
+
56
+ # Convert comma-separated list to array
57
+ IFS=',' read -ra FILES <<< "$AUTO_RESOLVE_FILES"
58
+
59
+ for file in "${FILES[@]}"; do
60
+ # Trim whitespace
61
+ file=$(echo "$file" | xargs)
62
+ if git diff --name-only --diff-filter=U | grep -q "^${file}$"; then
63
+ echo "Auto-resolving conflict in $file (accepting $SOURCE_BRANCH version)"
64
+ git checkout --theirs "$file"
65
+ git add "$file"
66
+ fi
67
+ done
68
+
69
+ # Check if there are remaining conflicts
70
+ if git diff --name-only --diff-filter=U | grep -q .; then
71
+ echo "Error: Unresolved conflicts in files not managed by semantic-release:"
72
+ git diff --name-only --diff-filter=U
73
+ exit 1
74
+ fi
75
+
76
+ # Complete the merge
77
+ git commit --no-edit
78
+ echo "✓ Conflicts resolved and merge completed"
79
+ else
80
+ echo "✓ Merge completed without conflicts"
81
+ fi
82
+
83
+ # Push
84
+ git push origin "$TARGET_BRANCH"
85
+ echo "✓ Successfully pushed to $TARGET_BRANCH"
@@ -0,0 +1,297 @@
1
+ name: CD
2
+
3
+ on:
4
+ push:
5
+ branches: [dev, main]
6
+ workflow_dispatch:
7
+ inputs:
8
+ action:
9
+ description: "Select action"
10
+ required: true
11
+ default: "promote-to-stable"
12
+ type: choice
13
+ options:
14
+ - promote-to-stable
15
+
16
+ permissions:
17
+ contents: write
18
+ packages: write
19
+ id-token: write
20
+
21
+ env:
22
+ DOCKERHUB_IMAGE: ${{ secrets.DOCKERHUB_USERNAME }}/better-mem0-mcp
23
+ GHCR_IMAGE: ghcr.io/${{ github.repository }}
24
+
25
+ concurrency:
26
+ group: cd-${{ github.repository }}
27
+ cancel-in-progress: false
28
+
29
+ jobs:
30
+ promote:
31
+ name: Promote to Stable
32
+ if: github.event_name == 'workflow_dispatch' && inputs.action == 'promote-to-stable'
33
+ runs-on: ubuntu-latest
34
+
35
+ steps:
36
+ - name: Checkout code
37
+ uses: actions/checkout@v6
38
+ with:
39
+ fetch-depth: 0
40
+ token: ${{ secrets.GH_PAT }}
41
+
42
+ - name: Check CI/CD status on dev branch
43
+ env:
44
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45
+ run: |
46
+ chmod +x .github/scripts/check-ci-cd-status.sh
47
+ ./.github/scripts/check-ci-cd-status.sh --branch=dev
48
+
49
+ - name: Merge dev to main
50
+ env:
51
+ AUTO_RESOLVE_FILES: "CHANGELOG.md,pyproject.toml"
52
+ run: |
53
+ chmod +x .github/scripts/merge-with-auto-resolve.sh
54
+ ./.github/scripts/merge-with-auto-resolve.sh --source=dev --target=main --files="$AUTO_RESOLVE_FILES"
55
+
56
+ release:
57
+ name: Semantic Release
58
+ if: github.event_name == 'push'
59
+ runs-on: ubuntu-latest
60
+ outputs:
61
+ released: ${{ steps.check.outputs.released }}
62
+ version: ${{ steps.check.outputs.version }}
63
+
64
+ steps:
65
+ - name: Checkout code
66
+ uses: actions/checkout@v6
67
+ with:
68
+ fetch-depth: 0
69
+ token: ${{ secrets.GH_PAT }}
70
+
71
+ - name: Setup Node.js
72
+ uses: actions/setup-node@v6
73
+ with:
74
+ node-version: "22"
75
+
76
+ - name: Install uv (for toml-cli)
77
+ uses: astral-sh/setup-uv@v5
78
+ with:
79
+ version: "latest"
80
+
81
+ - name: Install semantic-release
82
+ run: npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/exec
83
+
84
+ - name: Run semantic-release
85
+ env:
86
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
87
+ run: npx semantic-release
88
+
89
+ - name: Check release status
90
+ id: check
91
+ run: |
92
+ git fetch --tags
93
+ LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
94
+ CURRENT_COMMIT=$(git rev-parse HEAD)
95
+ TAG_COMMIT=$(git rev-list -n 1 "$LATEST_TAG" 2>/dev/null || echo "")
96
+
97
+ if [ -n "$LATEST_TAG" ] && [ "$CURRENT_COMMIT" = "$TAG_COMMIT" ]; then
98
+ echo "released=true" >> $GITHUB_OUTPUT
99
+ echo "version=${LATEST_TAG#v}" >> $GITHUB_OUTPUT
100
+ echo "New release detected: $LATEST_TAG"
101
+ else
102
+ echo "released=false" >> $GITHUB_OUTPUT
103
+ echo "No new release"
104
+ fi
105
+
106
+ publish-pypi:
107
+ name: Publish to PyPI
108
+ needs: release
109
+ if: needs.release.outputs.released == 'true'
110
+ runs-on: ubuntu-latest
111
+
112
+ steps:
113
+ - name: Checkout code
114
+ uses: actions/checkout@v6
115
+ with:
116
+ ref: ${{ github.ref }}
117
+
118
+ - name: Install uv
119
+ uses: astral-sh/setup-uv@v5
120
+
121
+ - name: Build package
122
+ run: uv build
123
+
124
+ - name: Publish to PyPI
125
+ env:
126
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
127
+ run: uv publish
128
+
129
+ build-docker:
130
+ name: Build Docker (${{ matrix.platform }})
131
+ needs: release
132
+ if: needs.release.outputs.released == 'true'
133
+ strategy:
134
+ fail-fast: false
135
+ matrix:
136
+ include:
137
+ - platform: linux/amd64
138
+ runner: ubuntu-latest
139
+ artifact: linux-amd64
140
+ - platform: linux/arm64
141
+ runner: ubuntu-24.04-arm
142
+ artifact: linux-arm64
143
+ runs-on: ${{ matrix.runner }}
144
+
145
+ steps:
146
+ - name: Checkout code
147
+ uses: actions/checkout@v6
148
+
149
+ - name: Set up Docker Buildx
150
+ uses: docker/setup-buildx-action@v3
151
+
152
+ - name: Login to Docker Hub
153
+ uses: docker/login-action@v3
154
+ with:
155
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
156
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
157
+
158
+ - name: Login to GitHub Container Registry
159
+ uses: docker/login-action@v3
160
+ with:
161
+ registry: ghcr.io
162
+ username: ${{ github.actor }}
163
+ password: ${{ secrets.GITHUB_TOKEN }}
164
+
165
+ - name: Build and push by digest
166
+ id: build
167
+ uses: docker/build-push-action@v6
168
+ with:
169
+ context: .
170
+ platforms: ${{ matrix.platform }}
171
+ outputs: type=image,"name=${{ env.DOCKERHUB_IMAGE }},${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true
172
+ cache-from: type=gha,scope=${{ github.ref_name }}-${{ matrix.artifact }}
173
+ cache-to: type=gha,mode=max,scope=${{ github.ref_name }}-${{ matrix.artifact }}
174
+
175
+ - name: Export digest
176
+ run: |
177
+ echo "Digest: ${{ steps.build.outputs.digest }}"
178
+ if [ -z "${{ steps.build.outputs.digest }}" ]; then
179
+ echo "Error: Digest is empty!"
180
+ exit 1
181
+ fi
182
+ mkdir -p ${{ runner.temp }}/digests
183
+ echo "${{ steps.build.outputs.digest }}" | sed 's/^sha256://' | xargs -I{} touch "${{ runner.temp }}/digests/{}"
184
+
185
+ - name: Upload digest
186
+ uses: actions/upload-artifact@v4
187
+ with:
188
+ name: digests-${{ matrix.artifact }}
189
+ path: ${{ runner.temp }}/digests/*
190
+ retention-days: 1
191
+
192
+ merge-docker:
193
+ name: Merge Docker Manifests
194
+ needs: [release, build-docker]
195
+ if: needs.release.outputs.released == 'true'
196
+ runs-on: ubuntu-latest
197
+
198
+ steps:
199
+ - name: Download digests
200
+ uses: actions/download-artifact@v4
201
+ with:
202
+ path: ${{ runner.temp }}/digests
203
+ pattern: digests-*
204
+ merge-multiple: true
205
+
206
+ - name: Set up Docker Buildx
207
+ uses: docker/setup-buildx-action@v3
208
+
209
+ - name: Login to Docker Hub
210
+ uses: docker/login-action@v3
211
+ with:
212
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
213
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
214
+
215
+ - name: Login to GitHub Container Registry
216
+ uses: docker/login-action@v3
217
+ with:
218
+ registry: ghcr.io
219
+ username: ${{ github.actor }}
220
+ password: ${{ secrets.GITHUB_TOKEN }}
221
+
222
+ - name: Create and push manifest (stable)
223
+ if: github.ref == 'refs/heads/main'
224
+ working-directory: ${{ runner.temp }}/digests
225
+ env:
226
+ VERSION: ${{ needs.release.outputs.version }}
227
+ run: |
228
+ MAJOR_MINOR=$(echo "$VERSION" | cut -d. -f1,2)
229
+ MAJOR=$(echo "$VERSION" | cut -d. -f1)
230
+
231
+ # Prepare sources
232
+ SOURCES_DOCKERHUB=""
233
+ SOURCES_GHCR=""
234
+ for digest in *; do
235
+ SOURCES_DOCKERHUB="$SOURCES_DOCKERHUB ${{ env.DOCKERHUB_IMAGE }}@sha256:$digest"
236
+ SOURCES_GHCR="$SOURCES_GHCR ${{ env.GHCR_IMAGE }}@sha256:$digest"
237
+ done
238
+
239
+ # Create manifests for Docker Hub
240
+ docker buildx imagetools create \
241
+ -t ${{ env.DOCKERHUB_IMAGE }}:latest \
242
+ -t ${{ env.DOCKERHUB_IMAGE }}:$VERSION \
243
+ -t ${{ env.DOCKERHUB_IMAGE }}:$MAJOR_MINOR \
244
+ -t ${{ env.DOCKERHUB_IMAGE }}:$MAJOR \
245
+ $SOURCES_DOCKERHUB
246
+
247
+ # Create manifests for GHCR
248
+ docker buildx imagetools create \
249
+ -t ${{ env.GHCR_IMAGE }}:latest \
250
+ -t ${{ env.GHCR_IMAGE }}:$VERSION \
251
+ -t ${{ env.GHCR_IMAGE }}:$MAJOR_MINOR \
252
+ -t ${{ env.GHCR_IMAGE }}:$MAJOR \
253
+ $SOURCES_GHCR
254
+
255
+ - name: Create and push manifest (beta)
256
+ if: github.ref == 'refs/heads/dev'
257
+ working-directory: ${{ runner.temp }}/digests
258
+ env:
259
+ VERSION: ${{ needs.release.outputs.version }}
260
+ run: |
261
+ SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7)
262
+
263
+ # Prepare sources
264
+ SOURCES_DOCKERHUB=""
265
+ SOURCES_GHCR=""
266
+ for digest in *; do
267
+ SOURCES_DOCKERHUB="$SOURCES_DOCKERHUB ${{ env.DOCKERHUB_IMAGE }}@sha256:$digest"
268
+ SOURCES_GHCR="$SOURCES_GHCR ${{ env.GHCR_IMAGE }}@sha256:$digest"
269
+ done
270
+
271
+ # Create manifests for Docker Hub
272
+ docker buildx imagetools create \
273
+ -t ${{ env.DOCKERHUB_IMAGE }}:beta \
274
+ -t ${{ env.DOCKERHUB_IMAGE }}:$VERSION \
275
+ -t ${{ env.DOCKERHUB_IMAGE }}:beta-$SHORT_SHA \
276
+ $SOURCES_DOCKERHUB
277
+
278
+ # Create manifests for GHCR
279
+ docker buildx imagetools create \
280
+ -t ${{ env.GHCR_IMAGE }}:beta \
281
+ -t ${{ env.GHCR_IMAGE }}:$VERSION \
282
+ -t ${{ env.GHCR_IMAGE }}:beta-$SHORT_SHA \
283
+ $SOURCES_GHCR
284
+
285
+ - name: Checkout code
286
+ if: github.ref == 'refs/heads/main'
287
+ uses: actions/checkout@v6
288
+
289
+ - name: Update Docker Hub Description
290
+ if: github.ref == 'refs/heads/main'
291
+ uses: peter-evans/dockerhub-description@v5
292
+ with:
293
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
294
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
295
+ repository: ${{ secrets.DOCKERHUB_USERNAME }}/better-mem0-mcp
296
+ short-description: ${{ github.event.repository.description }}
297
+ readme-filepath: ./README.md
@@ -17,7 +17,7 @@ jobs:
17
17
 
18
18
  steps:
19
19
  - name: Checkout code
20
- uses: actions/checkout@v4
20
+ uses: actions/checkout@v6
21
21
 
22
22
  - name: Install uv
23
23
  uses: astral-sh/setup-uv@v5
@@ -25,7 +25,7 @@ jobs:
25
25
  version: "latest"
26
26
 
27
27
  - name: Setup Python 3.13
28
- uses: actions/setup-python@v5
28
+ uses: actions/setup-python@v6
29
29
  with:
30
30
  python-version: "3.13"
31
31
 
@@ -51,7 +51,7 @@ jobs:
51
51
 
52
52
  - name: Comment PR on success
53
53
  if: success() && github.event_name == 'pull_request'
54
- uses: actions/github-script@v7
54
+ uses: actions/github-script@v8
55
55
  with:
56
56
  script: |
57
57
  github.rest.issues.createComment({
@@ -63,7 +63,7 @@ jobs:
63
63
 
64
64
  - name: Comment PR on failure
65
65
  if: failure() && github.event_name == 'pull_request'
66
- uses: actions/github-script@v7
66
+ uses: actions/github-script@v8
67
67
  with:
68
68
  script: |
69
69
  github.rest.issues.createComment({
@@ -80,7 +80,7 @@ jobs:
80
80
 
81
81
  steps:
82
82
  - name: Checkout code
83
- uses: actions/checkout@v4
83
+ uses: actions/checkout@v6
84
84
 
85
85
  - name: Dependency Review
86
86
  uses: actions/dependency-review-action@v4
@@ -27,7 +27,6 @@ ENV/
27
27
 
28
28
  # IDE
29
29
  .idea/
30
- .vscode/
31
30
  *.swp
32
31
  *.swo
33
32
  .cursor/
@@ -50,4 +49,5 @@ htmlcov/
50
49
  .ruff_cache/
51
50
 
52
51
  # Build artifacts
53
- *.whl
52
+ *.whl
53
+ node_modules/
@@ -22,10 +22,7 @@ run = [
22
22
  "node scripts/clean-venv.mjs",
23
23
  "uv pip install pre-commit",
24
24
  "uv run pre-commit install",
25
- "echo ''",
26
- "echo 'Setup complete!'",
27
- "echo ' -> Check: mise run check'",
28
- "echo ' -> Test: mise run test'"
25
+ "echo 'Setup complete!'"
29
26
  ]
30
27
 
31
28
  [tasks.check]
@@ -35,4 +35,4 @@
35
35
  }
36
36
  ]
37
37
  ]
38
- }
38
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "folders": [
3
+ {
4
+ "path": ".."
5
+ }
6
+ ],
7
+ "settings": {}
8
+ }
@@ -1,3 +1,59 @@
1
+ # [1.1.0-beta.17](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.16...v1.1.0-beta.17) (2026-01-05)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * correct semantic-release outputs detection ([eecfeea](https://github.com/n24q02m/better-mem0-mcp/commit/eecfeea50c9d4a758f6810d5989ae4c1eaf1398a))
7
+
8
+ # [1.1.0-beta.16](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.15...v1.1.0-beta.16) (2026-01-05)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * verify ci/cd workflow changes ([dfb6480](https://github.com/n24q02m/better-mem0-mcp/commit/dfb6480f13721a04606a3246947af5fd0764cc6a))
14
+
15
+ # [1.1.0-beta.15](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.14...v1.1.0-beta.15) (2026-01-04)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **ci:** verify CD workflow with beta and stable releases ([19e3150](https://github.com/n24q02m/better-mem0-mcp/commit/19e3150f903608cb57906b3f15af92df7bb29303))
21
+
22
+ # [1.1.0-beta.14](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.13...v1.1.0-beta.14) (2026-01-04)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * add comprehensive CD workflow for semantic release, PyPI publishing, and Docker image builds, and update project version. ([1c393c6](https://github.com/n24q02m/better-mem0-mcp/commit/1c393c644756eb96e33c3e7208a6aa10054fd2f6))
28
+
29
+ # [1.1.0-beta.13](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.12...v1.1.0-beta.13) (2026-01-04)
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * **cd:** use GH_PAT to enable workflow trigger on mainUsing GITHUB_TOKEN prevents push from triggering other workflows.Using GH_PAT allows promote-to-stable to trigger CD on main branch,which then runs semantic-release to create stable releases. ([66f703d](https://github.com/n24q02m/better-mem0-mcp/commit/66f703de163934222beca65524fcb4b61e0ea2c6))
35
+
36
+ # [1.1.0-beta.12](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.11...v1.1.0-beta.12) (2026-01-04)
37
+
38
+
39
+ ### Bug Fixes
40
+
41
+ * **cd:** add cd.yml to auto-resolve files list ([bd17665](https://github.com/n24q02m/better-mem0-mcp/commit/bd17665206305a4a5ac0c7641796db50cdb40776))
42
+
43
+ # [1.1.0-beta.11](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.10...v1.1.0-beta.11) (2026-01-04)
44
+
45
+
46
+ ### Bug Fixes
47
+
48
+ * **setup:** don't fail when venv is locked but unusable ([ba0eae4](https://github.com/n24q02m/better-mem0-mcp/commit/ba0eae47530a26a79adb01292f2082224a89e870))
49
+
50
+ # [1.1.0-beta.10](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.9...v1.1.0-beta.10) (2026-01-04)
51
+
52
+
53
+ ### Features
54
+
55
+ * **cd:** add shared scripts for promote workflow ([57a930a](https://github.com/n24q02m/better-mem0-mcp/commit/57a930a6e0021b8c7ff0c3b94a2f8d7b63cb18a0))
56
+
1
57
  # [1.1.0-beta.9](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.8...v1.1.0-beta.9) (2026-01-02)
2
58
 
3
59
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: better-mem0-mcp
3
- Version: 1.1.0b9
3
+ Version: 1.1.0b17
4
4
  Summary: Zero-setup MCP Server for AI memory - works with Neon/Supabase
5
5
  Project-URL: Homepage, https://github.com/n24q02m/better-mem0-mcp
6
6
  Project-URL: Repository, https://github.com/n24q02m/better-mem0-mcp.git
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "better-mem0-mcp",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "dependencies": {
8
+ "yaml": "^2.8.2"
9
+ }
10
+ },
11
+ "node_modules/yaml": {
12
+ "version": "2.8.2",
13
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
14
+ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
15
+ "license": "ISC",
16
+ "bin": {
17
+ "yaml": "bin.mjs"
18
+ },
19
+ "engines": {
20
+ "node": ">= 14.6"
21
+ },
22
+ "funding": {
23
+ "url": "https://github.com/sponsors/eemeli"
24
+ }
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "yaml": "^2.8.2"
4
+ }
5
+ }
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "better-mem0-mcp"
3
- version = "1.1.0-beta.9"
3
+ version = "1.1.0-beta.17"
4
4
  description = "Zero-setup MCP Server for AI memory - works with Neon/Supabase"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -71,4 +71,3 @@ python_files = ["test_*.py"]
71
71
  # - possibly-missing-attribute: Runtime-checked attributes
72
72
  # - invalid-assignment: Dynamic dict type inference issues
73
73
  rules = { unresolved-import = "ignore", unresolved-attribute = "ignore", possibly-missing-attribute = "ignore", invalid-assignment = "ignore" }
74
-
@@ -101,12 +101,12 @@ if (wasRemoved) {
101
101
  "If you experience issues, close VSCode and run 'mise run setup' again."
102
102
  );
103
103
  } else {
104
- console.error(
105
- "Error: .venv exists but is not usable, and we cannot remove it."
104
+ console.warn(
105
+ "Warning: .venv exists but is not usable, and we cannot remove it."
106
106
  );
107
- console.error(
108
- "Please close VSCode and any terminals using the venv, then try again."
107
+ console.warn(
108
+ "Skipping venv setup. Please close VSCode and run 'mise run setup' again if needed."
109
109
  );
110
- process.exit(1);
110
+ // Don't fail the entire setup, just warn and continue
111
111
  }
112
112
  }
@@ -136,7 +136,7 @@ wheels = [
136
136
 
137
137
  [[package]]
138
138
  name = "better-mem0-mcp"
139
- version = "0.1.0"
139
+ version = "1.1.0b15"
140
140
  source = { editable = "." }
141
141
  dependencies = [
142
142
  { name = "google-genai" },
@@ -1,166 +0,0 @@
1
- name: CD
2
-
3
- on:
4
- push:
5
- branches: [main, dev]
6
- workflow_dispatch:
7
- inputs:
8
- action:
9
- description: "Action to perform"
10
- required: true
11
- default: "promote-to-stable"
12
- type: choice
13
- options:
14
- - promote-to-stable
15
-
16
- permissions:
17
- contents: write
18
- packages: write
19
- id-token: write
20
-
21
- env:
22
- DOCKER_IMAGE: ghcr.io/${{ github.repository }}
23
-
24
- jobs:
25
- release:
26
- name: Semantic Release
27
- runs-on: ubuntu-latest
28
- if: github.event_name == 'push'
29
- outputs:
30
- released: ${{ steps.semantic.outputs.new_release_published }}
31
- version: ${{ steps.semantic.outputs.new_release_version }}
32
-
33
- steps:
34
- - name: Checkout code
35
- uses: actions/checkout@v4
36
- with:
37
- fetch-depth: 0
38
-
39
- - name: Setup Node.js
40
- uses: actions/setup-node@v4
41
- with:
42
- node-version: "22"
43
-
44
- - name: Install uv (for toml-cli)
45
- uses: astral-sh/setup-uv@v5
46
- with:
47
- version: "latest"
48
-
49
- - name: Install semantic-release
50
- run: npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/exec
51
-
52
- - name: Run semantic-release
53
- id: semantic
54
- env:
55
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
56
- run: |
57
- npx semantic-release --dry-run > release-output.txt 2>&1 || true
58
- if grep -q "Published release" release-output.txt || grep -q "Release notes" release-output.txt; then
59
- npx semantic-release
60
- LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
61
- if [ -n "$LATEST_TAG" ]; then
62
- echo "new_release_published=true" >> "$GITHUB_OUTPUT"
63
- echo "new_release_version=${LATEST_TAG#v}" >> "$GITHUB_OUTPUT"
64
- else
65
- echo "new_release_published=false" >> "$GITHUB_OUTPUT"
66
- fi
67
- else
68
- echo "new_release_published=false" >> "$GITHUB_OUTPUT"
69
- fi
70
-
71
- publish-pypi:
72
- name: Publish to PyPI
73
- needs: release
74
- if: needs.release.outputs.released == 'true'
75
- runs-on: ubuntu-latest
76
-
77
- steps:
78
- - name: Checkout code
79
- uses: actions/checkout@v4
80
- with:
81
- ref: v${{ needs.release.outputs.version }}
82
-
83
- - name: Install uv
84
- uses: astral-sh/setup-uv@v5
85
-
86
- - name: Build package
87
- run: uv build
88
-
89
- - name: Publish to PyPI
90
- env:
91
- UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
92
- run: uv publish
93
-
94
- publish-docker:
95
- name: Build & Push Docker Image
96
- needs: release
97
- if: needs.release.outputs.released == 'true'
98
- runs-on: ubuntu-latest
99
-
100
- steps:
101
- - name: Checkout code
102
- uses: actions/checkout@v4
103
- with:
104
- ref: v${{ needs.release.outputs.version }}
105
-
106
- - name: Set up Docker Buildx
107
- uses: docker/setup-buildx-action@v3
108
-
109
- - name: Login to Docker Hub
110
- uses: docker/login-action@v3
111
- with:
112
- username: ${{ secrets.DOCKERHUB_USERNAME }}
113
- password: ${{ secrets.DOCKERHUB_TOKEN }}
114
-
115
- - name: Login to GHCR
116
- uses: docker/login-action@v3
117
- with:
118
- registry: ghcr.io
119
- username: ${{ github.actor }}
120
- password: ${{ secrets.GITHUB_TOKEN }}
121
-
122
- - name: Determine tags
123
- id: tags
124
- run: |
125
- VERSION=${{ needs.release.outputs.version }}
126
- BRANCH=${{ github.ref_name }}
127
-
128
- if [ "$BRANCH" = "main" ]; then
129
- DOCKERHUB_TAGS="n24q02m/better-mem0-mcp:$VERSION,n24q02m/better-mem0-mcp:latest"
130
- GHCR_TAGS="${{ env.DOCKER_IMAGE }}:$VERSION,${{ env.DOCKER_IMAGE }}:latest"
131
- else
132
- DOCKERHUB_TAGS="n24q02m/better-mem0-mcp:$VERSION,n24q02m/better-mem0-mcp:beta"
133
- GHCR_TAGS="${{ env.DOCKER_IMAGE }}:$VERSION,${{ env.DOCKER_IMAGE }}:beta"
134
- fi
135
- echo "tags=$DOCKERHUB_TAGS,$GHCR_TAGS" >> $GITHUB_OUTPUT
136
-
137
- - name: Build and push
138
- uses: docker/build-push-action@v6
139
- with:
140
- context: .
141
- file: ./Dockerfile
142
- push: true
143
- tags: ${{ steps.tags.outputs.tags }}
144
-
145
- promote-stable:
146
- name: Promote to Stable
147
- if: github.event_name == 'workflow_dispatch' && inputs.action == 'promote-to-stable'
148
- runs-on: ubuntu-latest
149
-
150
- steps:
151
- - name: Checkout code
152
- uses: actions/checkout@v4
153
- with:
154
- ref: dev
155
- fetch-depth: 0
156
-
157
- - name: Setup Git
158
- run: |
159
- git config user.name "github-actions[bot]"
160
- git config user.email "github-actions[bot]@users.noreply.github.com"
161
-
162
- - name: Merge dev to main
163
- run: |
164
- git checkout main
165
- git merge dev --no-edit
166
- git push origin main