@meridiona/meridian-darwin-arm64 1.10.1 → 1.12.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.10.1
1
+ 1.12.0
package/bin/meridian CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meridiona/meridian-darwin-arm64",
3
- "version": "1.10.1",
3
+ "version": "1.12.0",
4
4
  "description": "Prebuilt Meridian app for macOS arm64 (daemon binary + dashboard + Python services). Installed via @meridiona/meridian.",
5
5
  "homepage": "https://github.com/Meridiona/meridian",
6
6
  "repository": {
@@ -257,13 +257,58 @@ else
257
257
  ok "meridian-daemon + meridian → ~/.local/bin"
258
258
  fi
259
259
 
260
- # ── 4. Python venv + MLX deps (the one install-time download) ────────────────
261
- info "Setting up Python venv + MLX inference deps (downloads ~ a few hundred MB)…"
260
+ # ── 4. Python venv + MLX deps ────────────────────────────────────────────────
261
+ # meridian-npm-setup.sh preserves an existing venv across updates, so on a normal
262
+ # update the venv is already here. The pip install (mlx-lm/outlines/fastapi) costs
263
+ # minutes, so we skip it when the dependency spec is unchanged: hash the parts of
264
+ # pyproject.toml that define the deps and stamp it in the venv. Re-pip only when a
265
+ # fresh venv was created or the hash differs (a release that bumped Python deps).
262
266
  VENV="${APP_ROOT}/services/.venv"
263
- [[ -d "${VENV}" ]] || "${PYTHON_BIN}" -m venv "${VENV}"
264
- "${VENV}/bin/pip" install --quiet --upgrade pip
265
- "${VENV}/bin/pip" install --quiet -e "${APP_ROOT}/services[mlx]"
266
- ok "Python services ready"
267
+ DEPS_STAMP="${VENV}/.meridian-deps-hash"
268
+ # Reproducible runtime: install the exact pinned set from requirements-mlx.lock,
269
+ # not the [mlx] extra resolved fresh from PyPI within version ranges (where a new
270
+ # upstream release could break a fresh install). Hash the lock (its source of
271
+ # truth) so a changed lock re-pips; fall back to pyproject when no lock shipped.
272
+ MLX_LOCK="${APP_ROOT}/services/requirements-mlx.lock"
273
+ deps_hash() {
274
+ local f="${MLX_LOCK}"; [[ -f "$f" ]] || f="${APP_ROOT}/services/pyproject.toml"
275
+ shasum -a 256 "$f" 2>/dev/null | cut -d' ' -f1
276
+ }
277
+ want_hash="$(deps_hash)"
278
+
279
+ fresh_venv=0
280
+ if [[ ! -x "${VENV}/bin/python" ]]; then
281
+ info "Creating Python venv…"
282
+ rm -rf "${VENV}"
283
+ "${PYTHON_BIN}" -m venv "${VENV}"
284
+ fresh_venv=1
285
+ fi
286
+
287
+ have_hash=""
288
+ [[ -f "${DEPS_STAMP}" ]] && have_hash="$(cat "${DEPS_STAMP}" 2>/dev/null)"
289
+
290
+ if [[ "${fresh_venv}" -eq 1 || "${want_hash}" != "${have_hash}" || -z "${want_hash}" ]]; then
291
+ info "Installing Python + MLX deps (mlx-lm/outlines/fastapi; downloads ~ a few hundred MB on first run)…"
292
+ "${VENV}/bin/pip" install --quiet --upgrade pip
293
+ _deps_ok=0
294
+ if [[ -f "${MLX_LOCK}" ]]; then
295
+ # Pinned lock + the local package WITHOUT re-resolving its deps.
296
+ "${VENV}/bin/pip" install --quiet -r "${MLX_LOCK}" \
297
+ && "${VENV}/bin/pip" install --quiet --no-deps -e "${APP_ROOT}/services" \
298
+ && _deps_ok=1
299
+ else
300
+ warn "no requirements-mlx.lock in bundle — resolving [mlx] from version ranges (not pinned)"
301
+ "${VENV}/bin/pip" install --quiet -e "${APP_ROOT}/services[mlx]" && _deps_ok=1
302
+ fi
303
+ if [[ "${_deps_ok}" -eq 1 ]]; then
304
+ [[ -n "${want_hash}" ]] && printf '%s\n' "${want_hash}" > "${DEPS_STAMP}"
305
+ ok "Python services ready"
306
+ else
307
+ warn "pip install failed — leaving venv as-is; re-run 'meridian setup' to retry"
308
+ fi
309
+ else
310
+ ok "Python deps unchanged — reusing existing venv (skipped pip install)"
311
+ fi
267
312
 
268
313
  # ── 5. macOS permissions for screenpipe (manual — can't be automated) ────────
269
314
  if [[ "${SKIP_PERMISSIONS}" -eq 0 ]]; then
@@ -20,13 +20,29 @@ mkdir -p "$(dirname "${APP}")"
20
20
  keep=""
21
21
  if [[ -f "${APP}/.env" ]]; then keep="$(mktemp)"; cp "${APP}/.env" "${keep}"; fi
22
22
 
23
+ # Preserve the Python venv across updates. Rebuilding it (python -m venv + pip
24
+ # install mlx-lm/outlines/…) costs minutes; most releases don't change Python
25
+ # deps, so move it aside and restore it to the SAME absolute path (its baked-in
26
+ # shebangs stay valid). install-from-bundle.sh then only re-pips when the deps
27
+ # hash actually changes. Kept in a sibling dir under ~/.meridian so the move is
28
+ # an instant rename (same filesystem), never a cross-volume copy.
29
+ venv_keep="${HOME}/.meridian/.venv-update-keep"
30
+ rm -rf "${venv_keep}"
31
+ if [[ -d "${APP}/services/.venv" ]]; then mv "${APP}/services/.venv" "${venv_keep}"; fi
32
+
23
33
  rm -rf "${APP}"
24
34
  mkdir -p "${APP}"
25
- # Copy the prebuilt payload (bin/ ui/ services/ scripts/ .env.example VERSION).
35
+ # Copy the prebuilt payload (bin/ ui.tar.gz services/ scripts/ .env.example VERSION).
26
36
  cp -R "${BUNDLE}/." "${APP}/"
27
37
  # Drop npm-package metadata that isn't part of the app.
28
38
  rm -f "${APP}/package.json" "${APP}/README.md" "${APP}/.gitignore" "${APP}/.npmignore"
29
39
 
30
40
  [[ -n "${keep}" ]] && { cp "${keep}" "${APP}/.env"; rm -f "${keep}"; }
41
+ # Restore the preserved venv (the bundle ships services/ source but no venv).
42
+ if [[ -d "${venv_keep}" ]]; then
43
+ mkdir -p "${APP}/services"
44
+ rm -rf "${APP}/services/.venv"
45
+ mv "${venv_keep}" "${APP}/services/.venv"
46
+ fi
31
47
 
32
48
  exec bash "${APP}/scripts/install-from-bundle.sh" "$@"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "meridian-agents"
7
- version = "1.10.1"
7
+ version = "1.12.0"
8
8
  description = "Meridian agents — hermes task linking and Jira progress updates for meridian.db"
9
9
  requires-python = ">=3.11"
10
10
  authors = [{ name = "Meridiona" }]
@@ -0,0 +1,112 @@
1
+ # meridian — pinned dependency lock for the MLX inference server (services[mlx]).
2
+ #
3
+ # The exact, verified runtime set for the FastAPI MLX classifier/summariser.
4
+ # The installer installs from THIS file so every install is identical, instead
5
+ # of re-resolving mlx-lm/outlines/fastapi from PyPI within version ranges (which
6
+ # could pull an untested/broken upstream release into a fresh install).
7
+ #
8
+ # Regenerate after an intentional dep bump, from a known-good venv:
9
+ # uv pip compile services/pyproject.toml --extra mlx -o services/requirements-mlx.lock
10
+ # (or: python3.11 -m venv /tmp/le && /tmp/le/bin/pip install -e 'services[mlx]' \
11
+ # && /tmp/le/bin/pip freeze --exclude-editable > services/requirements-mlx.lock)
12
+ #
13
+ # Pinned from the verified arm64 venv on 2026-06-02 (mlx 0.31.2 / mlx-lm 0.31.3 /
14
+ # outlines 1.3.0 / fastapi 0.136.3). Not hashed yet — version pins first.
15
+
16
+ aiohappyeyeballs==2.6.2
17
+ aiohttp==3.14.0
18
+ aiosignal==1.4.0
19
+ annotated-doc==0.0.4
20
+ annotated-types==0.7.0
21
+ anyio==4.13.0
22
+ attrs==26.1.0
23
+ certifi==2026.5.20
24
+ cffi==2.0.0
25
+ charset-normalizer==3.4.7
26
+ click==8.4.1
27
+ cloudpickle==3.1.2
28
+ cryptography==48.0.0
29
+ datasets==4.8.5
30
+ dill==0.4.1
31
+ diskcache==5.6.3
32
+ distro==1.9.0
33
+ fastapi==0.136.3
34
+ filelock==3.29.0
35
+ frozenlist==1.8.0
36
+ fsspec==2026.2.0
37
+ genson==1.3.0
38
+ googleapis-common-protos==1.75.0
39
+ h11==0.16.0
40
+ hf-xet==1.5.0
41
+ httpcore==1.0.9
42
+ httpx==0.28.1
43
+ httpx-sse==0.4.3
44
+ huggingface_hub==1.17.0
45
+ idna==3.17
46
+ Jinja2==3.1.6
47
+ jiter==0.15.0
48
+ jsonpath-ng==1.8.0
49
+ jsonschema==4.26.0
50
+ jsonschema-specifications==2025.9.1
51
+ markdown-it-py==4.2.0
52
+ MarkupSafe==3.0.3
53
+ mcp==1.27.2
54
+ mdurl==0.1.2
55
+ mlx==0.31.2
56
+ mlx-lm==0.31.3
57
+ mlx-metal==0.31.2
58
+ multidict==6.7.1
59
+ multiprocess==0.70.19
60
+ numpy==2.4.6
61
+ openai==2.40.0
62
+ opentelemetry-api==1.42.1
63
+ opentelemetry-exporter-otlp-proto-common==1.42.1
64
+ opentelemetry-exporter-otlp-proto-http==1.42.1
65
+ opentelemetry-instrumentation==0.63b1
66
+ opentelemetry-instrumentation-logging==0.63b1
67
+ opentelemetry-proto==1.42.1
68
+ opentelemetry-sdk==1.42.1
69
+ opentelemetry-semantic-conventions==0.63b1
70
+ outlines==1.3.0
71
+ outlines_core==0.2.14
72
+ packaging==26.2
73
+ pandas==3.0.3
74
+ pillow==12.2.0
75
+ propcache==0.5.2
76
+ protobuf==6.33.6
77
+ psutil==6.1.1
78
+ pyarrow==24.0.0
79
+ pycparser==3.0
80
+ pydantic==2.13.4
81
+ pydantic-settings==2.14.1
82
+ pydantic_core==2.46.4
83
+ Pygments==2.20.0
84
+ PyJWT==2.13.0
85
+ python-dateutil==2.9.0.post0
86
+ python-dotenv==1.2.2
87
+ python-json-logger==2.0.7
88
+ python-multipart==0.0.30
89
+ PyYAML==6.0.3
90
+ referencing==0.37.0
91
+ regex==2026.5.9
92
+ requests==2.34.2
93
+ rich==15.0.0
94
+ rpds-py==2026.5.1
95
+ safetensors==0.7.0
96
+ sentencepiece==0.2.1
97
+ shellingham==1.5.4
98
+ six==1.17.0
99
+ sniffio==1.3.1
100
+ sse-starlette==3.4.4
101
+ starlette==1.2.1
102
+ tokenizers==0.22.2
103
+ tqdm==4.67.3
104
+ transformers==5.9.0
105
+ typer==0.25.1
106
+ typing-inspection==0.4.2
107
+ typing_extensions==4.15.0
108
+ urllib3==2.7.0
109
+ uvicorn==0.48.0
110
+ wrapt==2.2.1
111
+ xxhash==3.7.0
112
+ yarl==1.24.2
package/ui.tar.gz CHANGED
Binary file