better-mem0-mcp 1.1.6__tar.gz → 1.2.0__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 (38) hide show
  1. better_mem0_mcp-1.2.0/.github/rulesets/development.json +47 -0
  2. better_mem0_mcp-1.2.0/.github/rulesets/production.json +68 -0
  3. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.github/workflows/cd.yml +107 -66
  4. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.github/workflows/ci.yml +3 -27
  5. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.mise.toml +2 -2
  6. better_mem0_mcp-1.2.0/.release-please-manifest.json +3 -0
  7. better_mem0_mcp-1.2.0/.vscode/better-mem0-mcp.code-workspace +23 -0
  8. better_mem0_mcp-1.2.0/CHANGELOG.md +233 -0
  9. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/PKG-INFO +17 -18
  10. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/README.md +8 -9
  11. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/pyproject.toml +14 -14
  12. better_mem0_mcp-1.2.0/release-please-config.json +66 -0
  13. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/src/better_mem0_mcp/config.py +14 -21
  14. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/uv.lock +16 -517
  15. better_mem0_mcp-1.1.6/.github/scripts/merge-with-auto-resolve.sh +0 -85
  16. better_mem0_mcp-1.1.6/.releaserc.json +0 -38
  17. better_mem0_mcp-1.1.6/.vscode/better-mem0-mcp.code-workspace +0 -8
  18. better_mem0_mcp-1.1.6/CHANGELOG.md +0 -166
  19. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.dockerignore +0 -0
  20. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.editorconfig +0 -0
  21. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.github/scripts/check-ci-cd-status.sh +0 -0
  22. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.gitignore +0 -0
  23. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.pre-commit-config.yaml +0 -0
  24. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/.python-version +0 -0
  25. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/CODE_OF_CONDUCT.md +0 -0
  26. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/CONTRIBUTING.md +0 -0
  27. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/Dockerfile +0 -0
  28. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/LICENSE +0 -0
  29. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/SECURITY.md +0 -0
  30. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/package-lock.json +0 -0
  31. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/package.json +0 -0
  32. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/scripts/clean-venv.mjs +0 -0
  33. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/src/better_mem0_mcp/__init__.py +0 -0
  34. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/src/better_mem0_mcp/__main__.py +0 -0
  35. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/src/better_mem0_mcp/docs/memory.md +0 -0
  36. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/src/better_mem0_mcp/graph.py +0 -0
  37. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/src/better_mem0_mcp/py.typed +0 -0
  38. {better_mem0_mcp-1.1.6 → better_mem0_mcp-1.2.0}/src/better_mem0_mcp/server.py +0 -0
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "Development Ruleset",
3
+ "target": "branch",
4
+ "source_type": "Repository",
5
+ "source": "n24q02m/better-mem0-mcp",
6
+ "enforcement": "active",
7
+ "conditions": {
8
+ "ref_name": {
9
+ "exclude": [],
10
+ "include": [
11
+ "refs/heads/dev"
12
+ ]
13
+ }
14
+ },
15
+ "rules": [
16
+ {
17
+ "type": "deletion"
18
+ },
19
+ {
20
+ "type": "non_fast_forward"
21
+ },
22
+ {
23
+ "type": "required_linear_history"
24
+ },
25
+ {
26
+ "type": "pull_request",
27
+ "parameters": {
28
+ "required_approving_review_count": 0,
29
+ "dismiss_stale_reviews_on_push": true,
30
+ "required_reviewers": [],
31
+ "require_code_owner_review": true,
32
+ "require_last_push_approval": false,
33
+ "required_review_thread_resolution": false,
34
+ "allowed_merge_methods": [
35
+ "squash"
36
+ ]
37
+ }
38
+ }
39
+ ],
40
+ "bypass_actors": [
41
+ {
42
+ "actor_id": 5,
43
+ "actor_type": "RepositoryRole",
44
+ "bypass_mode": "always"
45
+ }
46
+ ]
47
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "Production Ruleset",
3
+ "target": "branch",
4
+ "source_type": "Repository",
5
+ "source": "n24q02m/better-mem0-mcp",
6
+ "enforcement": "active",
7
+ "conditions": {
8
+ "ref_name": {
9
+ "exclude": [],
10
+ "include": [
11
+ "~DEFAULT_BRANCH"
12
+ ]
13
+ }
14
+ },
15
+ "rules": [
16
+ {
17
+ "type": "deletion"
18
+ },
19
+ {
20
+ "type": "non_fast_forward"
21
+ },
22
+ {
23
+ "type": "required_linear_history"
24
+ },
25
+ {
26
+ "type": "pull_request",
27
+ "parameters": {
28
+ "required_approving_review_count": 1,
29
+ "dismiss_stale_reviews_on_push": true,
30
+ "required_reviewers": [],
31
+ "require_code_owner_review": true,
32
+ "require_last_push_approval": false,
33
+ "required_review_thread_resolution": false,
34
+ "allowed_merge_methods": [
35
+ "squash"
36
+ ]
37
+ }
38
+ },
39
+ {
40
+ "type": "update"
41
+ },
42
+ {
43
+ "type": "code_quality",
44
+ "parameters": {
45
+ "severity": "errors"
46
+ }
47
+ },
48
+ {
49
+ "type": "code_scanning",
50
+ "parameters": {
51
+ "code_scanning_tools": [
52
+ {
53
+ "tool": "CodeQL",
54
+ "security_alerts_threshold": "high_or_higher",
55
+ "alerts_threshold": "errors"
56
+ }
57
+ ]
58
+ }
59
+ }
60
+ ],
61
+ "bypass_actors": [
62
+ {
63
+ "actor_id": 5,
64
+ "actor_type": "RepositoryRole",
65
+ "bypass_mode": "always"
66
+ }
67
+ ]
68
+ }
@@ -15,6 +15,7 @@ on:
15
15
 
16
16
  permissions:
17
17
  contents: write
18
+ pull-requests: write
18
19
  packages: write
19
20
  id-token: write
20
21
 
@@ -27,11 +28,11 @@ concurrency:
27
28
  cancel-in-progress: false
28
29
 
29
30
  jobs:
31
+ # ═══════════════════ Manual: Promote dev -> main ═══════════════════
30
32
  promote:
31
33
  name: Promote to Stable
32
34
  if: github.event_name == 'workflow_dispatch' && inputs.action == 'promote-to-stable'
33
35
  runs-on: ubuntu-latest
34
-
35
36
  steps:
36
37
  - name: Checkout code
37
38
  uses: actions/checkout@v6
@@ -39,76 +40,93 @@ jobs:
39
40
  fetch-depth: 0
40
41
  token: ${{ secrets.GH_PAT }}
41
42
 
42
- - name: Check CI/CD status on dev branch
43
+ - name: Check CI/CD status on dev
43
44
  env:
44
45
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45
46
  run: |
46
47
  chmod +x .github/scripts/check-ci-cd-status.sh
47
48
  ./.github/scripts/check-ci-cd-status.sh --branch=dev
48
49
 
49
- - name: Merge dev to main
50
+ - name: Create PR dev -> main
50
51
  env:
51
- AUTO_RESOLVE_FILES: "CHANGELOG.md,pyproject.toml"
52
+ GH_TOKEN: ${{ secrets.GH_PAT }}
52
53
  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"
54
+ EXISTING_PR=$(gh pr list --base main --head dev --json number --jq '.[0].number')
55
+ if [ -n "$EXISTING_PR" ]; then
56
+ echo "PR #$EXISTING_PR already exists for dev -> main"
57
+ echo "URL: https://github.com/${{ github.repository }}/pull/$EXISTING_PR"
58
+ exit 0
59
+ fi
60
+
61
+ LATEST_TAG=$(git describe --tags --abbrev=0 origin/dev 2>/dev/null || echo "")
62
+ if [ -z "$LATEST_TAG" ]; then
63
+ PR_TITLE="feat: promote dev to main"
64
+ else
65
+ PR_TITLE="feat: promote dev to main ($LATEST_TAG)"
66
+ fi
55
67
 
56
- release:
57
- name: Semantic Release
58
- if: github.event_name == 'push'
68
+ gh pr create \
69
+ --base main \
70
+ --head dev \
71
+ --title "$PR_TITLE" \
72
+ --body "## Promote dev to main
73
+
74
+ This PR promotes the latest changes from \`dev\` branch to \`main\`.
75
+
76
+ ### Pre-checks passed:
77
+ - CI workflow passed on dev
78
+ - CD workflow passed on dev
79
+
80
+ ### Latest beta version: $LATEST_TAG"
81
+
82
+ # ═══════════════════ Release Please (beta on dev) ═══════════════════
83
+ release-beta:
84
+ name: Release Please (Beta)
85
+ if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
59
86
  runs-on: ubuntu-latest
60
87
  outputs:
61
- released: ${{ steps.check.outputs.released }}
62
- version: ${{ steps.check.outputs.version }}
63
-
88
+ release_created: ${{ steps.release.outputs.release_created }}
89
+ tag_name: ${{ steps.release.outputs.tag_name }}
90
+ version: ${{ steps.release.outputs.version }}
64
91
  steps:
65
- - name: Checkout code
66
- uses: actions/checkout@v6
92
+ - uses: googleapis/release-please-action@v4
93
+ id: release
67
94
  with:
68
- fetch-depth: 0
69
95
  token: ${{ secrets.GH_PAT }}
70
-
71
- - name: Setup Node.js
72
- uses: actions/setup-node@v6
73
- with:
74
- node-version: "24"
75
-
76
- - name: Install uv (for toml-cli)
77
- uses: astral-sh/setup-uv@v5
96
+ config-file: release-please-config.json
97
+ manifest-file: .release-please-manifest.json
98
+ target-branch: dev
99
+ prerelease: true
100
+ prerelease-type: beta
101
+
102
+ # ═══════════════════ Release Please (stable on main) ═══════════════════
103
+ release-stable:
104
+ name: Release Please (Stable)
105
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
106
+ runs-on: ubuntu-latest
107
+ outputs:
108
+ release_created: ${{ steps.release.outputs.release_created }}
109
+ tag_name: ${{ steps.release.outputs.tag_name }}
110
+ version: ${{ steps.release.outputs.version }}
111
+ steps:
112
+ - uses: googleapis/release-please-action@v4
113
+ id: release
78
114
  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
115
+ token: ${{ secrets.GH_PAT }}
116
+ config-file: release-please-config.json
117
+ manifest-file: .release-please-manifest.json
118
+ target-branch: main
105
119
 
120
+ # ═══════════════════ Publish to PyPI ═══════════════════
106
121
  publish-pypi:
107
122
  name: Publish to PyPI
108
- needs: release
109
- if: needs.release.outputs.released == 'true'
123
+ needs: [release-beta, release-stable]
124
+ if: |
125
+ always() && (
126
+ needs.release-beta.outputs.release_created == 'true' ||
127
+ needs.release-stable.outputs.release_created == 'true'
128
+ )
110
129
  runs-on: ubuntu-latest
111
-
112
130
  steps:
113
131
  - name: Checkout code
114
132
  uses: actions/checkout@v6
@@ -126,10 +144,15 @@ jobs:
126
144
  UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
127
145
  run: uv publish
128
146
 
147
+ # ═══════════════════ Build Docker (multi-arch) ═══════════════════
129
148
  build-docker:
130
149
  name: Build Docker (${{ matrix.platform }})
131
- needs: release
132
- if: needs.release.outputs.released == 'true'
150
+ needs: [release-beta, release-stable]
151
+ if: |
152
+ always() && (
153
+ needs.release-beta.outputs.release_created == 'true' ||
154
+ needs.release-stable.outputs.release_created == 'true'
155
+ )
133
156
  strategy:
134
157
  fail-fast: false
135
158
  matrix:
@@ -141,7 +164,6 @@ jobs:
141
164
  runner: ubuntu-24.04-arm
142
165
  artifact: linux-arm64
143
166
  runs-on: ${{ matrix.runner }}
144
-
145
167
  steps:
146
168
  - name: Checkout code
147
169
  uses: actions/checkout@v6
@@ -189,12 +211,16 @@ jobs:
189
211
  path: ${{ runner.temp }}/digests/*
190
212
  retention-days: 1
191
213
 
214
+ # ═══════════════════ Merge Docker Manifests ═══════════════════
192
215
  merge-docker:
193
216
  name: Merge Docker Manifests
194
- needs: [release, build-docker]
195
- if: needs.release.outputs.released == 'true'
217
+ needs: [release-beta, release-stable, build-docker]
218
+ if: |
219
+ always() && (
220
+ needs.release-beta.outputs.release_created == 'true' ||
221
+ needs.release-stable.outputs.release_created == 'true'
222
+ )
196
223
  runs-on: ubuntu-latest
197
-
198
224
  steps:
199
225
  - name: Download digests
200
226
  uses: actions/download-artifact@v4
@@ -223,12 +249,11 @@ jobs:
223
249
  if: github.ref == 'refs/heads/main'
224
250
  working-directory: ${{ runner.temp }}/digests
225
251
  env:
226
- VERSION: ${{ needs.release.outputs.version }}
252
+ VERSION: ${{ needs.release-stable.outputs.version }}
227
253
  run: |
228
254
  MAJOR_MINOR=$(echo "$VERSION" | cut -d. -f1,2)
229
255
  MAJOR=$(echo "$VERSION" | cut -d. -f1)
230
256
 
231
- # Prepare sources
232
257
  SOURCES_DOCKERHUB=""
233
258
  SOURCES_GHCR=""
234
259
  for digest in *; do
@@ -236,7 +261,6 @@ jobs:
236
261
  SOURCES_GHCR="$SOURCES_GHCR ${{ env.GHCR_IMAGE }}@sha256:$digest"
237
262
  done
238
263
 
239
- # Create manifests for Docker Hub
240
264
  docker buildx imagetools create \
241
265
  -t ${{ env.DOCKERHUB_IMAGE }}:latest \
242
266
  -t ${{ env.DOCKERHUB_IMAGE }}:$VERSION \
@@ -244,7 +268,6 @@ jobs:
244
268
  -t ${{ env.DOCKERHUB_IMAGE }}:$MAJOR \
245
269
  $SOURCES_DOCKERHUB
246
270
 
247
- # Create manifests for GHCR
248
271
  docker buildx imagetools create \
249
272
  -t ${{ env.GHCR_IMAGE }}:latest \
250
273
  -t ${{ env.GHCR_IMAGE }}:$VERSION \
@@ -256,11 +279,10 @@ jobs:
256
279
  if: github.ref == 'refs/heads/dev'
257
280
  working-directory: ${{ runner.temp }}/digests
258
281
  env:
259
- VERSION: ${{ needs.release.outputs.version }}
282
+ VERSION: ${{ needs.release-beta.outputs.version }}
260
283
  run: |
261
284
  SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7)
262
285
 
263
- # Prepare sources
264
286
  SOURCES_DOCKERHUB=""
265
287
  SOURCES_GHCR=""
266
288
  for digest in *; do
@@ -268,14 +290,12 @@ jobs:
268
290
  SOURCES_GHCR="$SOURCES_GHCR ${{ env.GHCR_IMAGE }}@sha256:$digest"
269
291
  done
270
292
 
271
- # Create manifests for Docker Hub
272
293
  docker buildx imagetools create \
273
294
  -t ${{ env.DOCKERHUB_IMAGE }}:beta \
274
295
  -t ${{ env.DOCKERHUB_IMAGE }}:$VERSION \
275
296
  -t ${{ env.DOCKERHUB_IMAGE }}:beta-$SHORT_SHA \
276
297
  $SOURCES_DOCKERHUB
277
298
 
278
- # Create manifests for GHCR
279
299
  docker buildx imagetools create \
280
300
  -t ${{ env.GHCR_IMAGE }}:beta \
281
301
  -t ${{ env.GHCR_IMAGE }}:$VERSION \
@@ -295,3 +315,24 @@ jobs:
295
315
  repository: ${{ secrets.DOCKERHUB_USERNAME }}/better-mem0-mcp
296
316
  short-description: ${{ github.event.repository.description }}
297
317
  readme-filepath: ./README.md
318
+
319
+ # ═══════════════════ Sync dev from main after stable release ═══════════════════
320
+ sync-dev:
321
+ name: Sync Dev Branch
322
+ needs: [release-stable]
323
+ if: always() && needs.release-stable.outputs.release_created == 'true'
324
+ runs-on: ubuntu-latest
325
+ steps:
326
+ - name: Checkout main
327
+ uses: actions/checkout@v6
328
+ with:
329
+ ref: main
330
+ fetch-depth: 0
331
+ token: ${{ secrets.GH_PAT }}
332
+
333
+ - name: Recreate dev from main
334
+ run: |
335
+ git push origin --delete dev || true
336
+ git checkout -b dev
337
+ git push origin dev
338
+ echo "Dev branch synced from main"
@@ -11,8 +11,8 @@ permissions:
11
11
  pull-requests: write
12
12
 
13
13
  jobs:
14
- lint-and-check:
15
- name: Lint & Type Check
14
+ lint-and-test:
15
+ name: Lint & Test
16
16
  runs-on: ubuntu-latest
17
17
 
18
18
  steps:
@@ -41,7 +41,7 @@ jobs:
41
41
  - name: Run ty type check
42
42
  run: uv run ty check
43
43
 
44
- - name: Run tests (if exist)
44
+ - name: Run tests
45
45
  run: |
46
46
  if [ -d "tests" ] && [ "$(ls -A tests/*.py 2>/dev/null)" ]; then
47
47
  uv run pytest --tb=short
@@ -49,30 +49,6 @@ jobs:
49
49
  echo "No tests found, skipping..."
50
50
  fi
51
51
 
52
- - name: Comment PR on success
53
- if: success() && github.event_name == 'pull_request'
54
- uses: actions/github-script@v8
55
- with:
56
- script: |
57
- github.rest.issues.createComment({
58
- issue_number: context.issue.number,
59
- owner: context.repo.owner,
60
- repo: context.repo.repo,
61
- body: '✅ **CI Checks Passed**\n\n- Ruff Check: ✓\n- Format: ✓\n- Type Check: ✓\n\nReady for review!'
62
- })
63
-
64
- - name: Comment PR on failure
65
- if: failure() && github.event_name == 'pull_request'
66
- uses: actions/github-script@v8
67
- with:
68
- script: |
69
- github.rest.issues.createComment({
70
- issue_number: context.issue.number,
71
- owner: context.repo.owner,
72
- repo: context.repo.repo,
73
- body: '❌ **CI Checks Failed**\n\nPlease fix the issues:\n- Run `mise run check` locally\n- Check workflow logs for details'
74
- })
75
-
76
52
  dependency-review:
77
53
  name: Dependency Review
78
54
  if: github.event_name == 'pull_request'
@@ -18,14 +18,14 @@ UV_LINK_MODE = "copy"
18
18
  description = "Setup development environment"
19
19
  run = [
20
20
  "mise install",
21
- "uv sync --group dev",
22
21
  "node scripts/clean-venv.mjs",
22
+ "uv sync --group dev",
23
23
  "uv pip install pre-commit",
24
24
  "uv run pre-commit install",
25
25
  "echo 'Setup complete!'"
26
26
  ]
27
27
 
28
- [tasks.check]
28
+ [tasks.lint]
29
29
  description = "Run all quality checks (ruff + ty)"
30
30
  run = [
31
31
  "uv run ruff check .",
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.2.0"
3
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "folders": [
3
+ {
4
+ "path": ".."
5
+ },
6
+ {
7
+ "path": "../../EchoVault"
8
+ },
9
+ {
10
+ "path": "../../wet-mcp"
11
+ },
12
+ {
13
+ "path": "../../better-notion-mcp"
14
+ },
15
+ {
16
+ "path": "../../KnowledgePrism"
17
+ },
18
+ {
19
+ "path": "../../QuikShipping"
20
+ }
21
+ ],
22
+ "settings": {}
23
+ }