@meridiona/meridian-darwin-arm64 1.10.0 → 1.11.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.0
1
+ 1.11.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.0",
3
+ "version": "1.11.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,40 @@ 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
+ deps_hash() { shasum -a 256 "${APP_ROOT}/services/pyproject.toml" 2>/dev/null | cut -d' ' -f1; }
269
+ want_hash="$(deps_hash)"
270
+
271
+ fresh_venv=0
272
+ if [[ ! -x "${VENV}/bin/python" ]]; then
273
+ info "Creating Python venv…"
274
+ rm -rf "${VENV}"
275
+ "${PYTHON_BIN}" -m venv "${VENV}"
276
+ fresh_venv=1
277
+ fi
278
+
279
+ have_hash=""
280
+ [[ -f "${DEPS_STAMP}" ]] && have_hash="$(cat "${DEPS_STAMP}" 2>/dev/null)"
281
+
282
+ if [[ "${fresh_venv}" -eq 1 || "${want_hash}" != "${have_hash}" || -z "${want_hash}" ]]; then
283
+ info "Installing Python + MLX deps (mlx-lm/outlines/fastapi; downloads ~ a few hundred MB on first run)…"
284
+ "${VENV}/bin/pip" install --quiet --upgrade pip
285
+ if "${VENV}/bin/pip" install --quiet -e "${APP_ROOT}/services[mlx]"; then
286
+ [[ -n "${want_hash}" ]] && printf '%s\n' "${want_hash}" > "${DEPS_STAMP}"
287
+ ok "Python services ready"
288
+ else
289
+ warn "pip install failed — leaving venv as-is; re-run 'meridian setup' to retry"
290
+ fi
291
+ else
292
+ ok "Python deps unchanged — reusing existing venv (skipped pip install)"
293
+ fi
267
294
 
268
295
  # ── 5. macOS permissions for screenpipe (manual — can't be automated) ────────
269
296
  if [[ "${SKIP_PERMISSIONS}" -eq 0 ]]; then
@@ -31,12 +31,31 @@ if [[ ! -f "${TEMPLATE}" ]]; then
31
31
  exit 1
32
32
  fi
33
33
 
34
- # Locate the screenpipe binary.
34
+ # Locate the screenpipe binary. The npm package ships a Node *wrapper* at
35
+ # `command -v screenpipe` (a cli.js shim) that spawns the real arm64 Mach-O. If
36
+ # the launchd agent launches that wrapper, macOS attributes Screen Recording /
37
+ # Accessibility to `node` (the responsible process) — a broad, fragile grant
38
+ # (breaks on node upgrades) that also shows a scary "node wants to record your
39
+ # screen" prompt. Resolve the real Mach-O and launch it directly so the grant
40
+ # attaches to a stable binary named `screenpipe` (and survives reinstalls of the
41
+ # same version, since its path is fixed). Falls back to whatever `command -v`
42
+ # found when screenpipe is a native binary (Homebrew) rather than the npm shim.
35
43
  SCREENPIPE_BIN="$(command -v screenpipe)" || true
36
44
  if [[ -z "${SCREENPIPE_BIN}" ]]; then
37
45
  echo "✗ screenpipe binary not found in PATH — install with: npm install -g screenpipe" >&2
38
46
  exit 1
39
47
  fi
48
+ _npm_root="$(npm root -g 2>/dev/null || true)"
49
+ if [[ -n "${_npm_root}" && -d "${_npm_root}/screenpipe" ]]; then
50
+ _real=""
51
+ while IFS= read -r _cand; do
52
+ if file "${_cand}" 2>/dev/null | grep -q "Mach-O"; then _real="${_cand}"; break; fi
53
+ done < <(find "${_npm_root}/screenpipe" -type f -name screenpipe -perm +0111 2>/dev/null)
54
+ if [[ -n "${_real}" ]]; then
55
+ SCREENPIPE_BIN="${_real}"
56
+ echo "→ using the real screenpipe binary (not the node wrapper): ${SCREENPIPE_BIN}"
57
+ fi
58
+ fi
40
59
 
41
60
  mkdir -p "${HOME}/.meridian/logs"
42
61
  mkdir -p "${LAUNCH_AGENTS}"
@@ -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.0"
7
+ version = "1.11.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" }]
package/ui.tar.gz CHANGED
Binary file