@meridiona/meridian-darwin-arm64 1.32.1 → 1.34.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/.env.example +18 -1
- package/VERSION +1 -1
- package/bin/meridian +0 -0
- package/package.json +1 -1
- package/scripts/bootstrap.sh +2 -2
- package/scripts/install-from-bundle.sh +36 -1
- package/services/pyproject.toml +5 -5
- package/ui.tar.gz +0 -0
package/.env.example
CHANGED
|
@@ -24,12 +24,29 @@
|
|
|
24
24
|
# MERIDIAN_UI_PORT=3939
|
|
25
25
|
|
|
26
26
|
# ---------------------------------------------------------------------------
|
|
27
|
-
# Jira
|
|
27
|
+
# Jira — choose ONE auth path:
|
|
28
|
+
#
|
|
29
|
+
# (A) Browser OAuth (recommended): just run `meridian oauth-login jira`.
|
|
30
|
+
# It opens your browser, you click Accept, and tokens land in
|
|
31
|
+
# ~/.meridian/oauth/jira.json (auto-refreshed). No env vars, no API
|
|
32
|
+
# token; the site is discovered automatically. Then `meridian restart`.
|
|
33
|
+
#
|
|
34
|
+
# (B) Static API token (legacy): set JIRA_BASE_URL + JIRA_EMAIL + JIRA_API_TOKEN.
|
|
35
|
+
#
|
|
36
|
+
# If both are present, OAuth wins. JIRA_PROJECT_KEYS applies to either.
|
|
28
37
|
# ---------------------------------------------------------------------------
|
|
29
38
|
|
|
39
|
+
# (A) OAuth needs NO config — Meridian ships a public client id. The vars below are
|
|
40
|
+
# optional overrides (e.g. a self-hosted app or a non-default redirect port).
|
|
41
|
+
# JIRA_OAUTH_CLIENT_ID=your-atlassian-app-client-id # override the baked-in client id
|
|
42
|
+
# JIRA_OAUTH_REDIRECT_PORT=9123 # must match the app's registered redirect
|
|
43
|
+
# http://127.0.0.1:<port>/callback
|
|
44
|
+
|
|
45
|
+
# (B) Static API token
|
|
30
46
|
# JIRA_BASE_URL=https://your-org.atlassian.net
|
|
31
47
|
# JIRA_EMAIL=you@your-org.com
|
|
32
48
|
# JIRA_API_TOKEN=your-api-token-here
|
|
49
|
+
|
|
33
50
|
# JIRA_PROJECT_KEYS=KAN,ENG # optional — comma-separated; empty = all projects
|
|
34
51
|
|
|
35
52
|
# ---------------------------------------------------------------------------
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.34.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.
|
|
3
|
+
"version": "1.34.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": {
|
package/scripts/bootstrap.sh
CHANGED
|
@@ -86,8 +86,8 @@ fi
|
|
|
86
86
|
|
|
87
87
|
# ── 4. Install @meridiona/meridian ───────────────────────────────────────────
|
|
88
88
|
info "Installing @meridiona/meridian@latest…"
|
|
89
|
-
info " The npm package is small;
|
|
90
|
-
info "
|
|
89
|
+
info " The npm package is small; Python deps + Node runtime download once during"
|
|
90
|
+
info " 'meridian setup' below. Budget 2–4 min on a typical connection."
|
|
91
91
|
npm install -g @meridiona/meridian@latest
|
|
92
92
|
ok "meridian installed ($(meridian --version 2>/dev/null || echo 'version unknown'))"
|
|
93
93
|
|
|
@@ -84,6 +84,9 @@ collect_credentials() {
|
|
|
84
84
|
echo " (edit later anytime: meridian config edit)" >&2
|
|
85
85
|
echo >&2
|
|
86
86
|
if prompt_category "Jira"; then
|
|
87
|
+
info "Easiest: skip the token prompts below and, after install, run"
|
|
88
|
+
info " meridian oauth-login jira — connect in your browser, no API token."
|
|
89
|
+
info "Or fill these in for the legacy API-token path:"
|
|
87
90
|
prompt_env_var "JIRA_BASE_URL" "Jira URL (e.g. https://your-org.atlassian.net)" 0 "$env_file"
|
|
88
91
|
# The Python side reads JIRA_URL, the Rust side JIRA_BASE_URL — keep both in sync.
|
|
89
92
|
local jira_url; jira_url="$(get_env_value JIRA_BASE_URL "$env_file")"
|
|
@@ -568,10 +571,42 @@ else
|
|
|
568
571
|
info "Installing MLX inference server launchd agent…"
|
|
569
572
|
bash "${APP_ROOT}/services/scripts/install-mlx-server-daemon.sh" --port "${MLX_PORT}" || warn "MLX agent install failed"
|
|
570
573
|
info "Waiting for the MLX server to load the model…"
|
|
574
|
+
_MLX_LOG="${HOME}/.meridian/logs/mlx-server.log"
|
|
575
|
+
_MLX_ERR="${HOME}/.meridian/logs/mlx-server-error.log"
|
|
571
576
|
_w=0
|
|
577
|
+
|
|
578
|
+
# Stream both log files while polling so the user can see which model is
|
|
579
|
+
# loading and whether a download is in progress.
|
|
580
|
+
# mlx-server.log — JSON structured logs: model selection, readiness
|
|
581
|
+
# mlx-server-error.log — raw stderr: huggingface_hub download progress
|
|
582
|
+
# tail -F follows by name and retries if the file doesn't exist yet.
|
|
583
|
+
(tail -F "${_MLX_LOG}" 2>/dev/null | python3 -u -c '
|
|
584
|
+
import sys, json
|
|
585
|
+
for line in sys.stdin:
|
|
586
|
+
line = line.rstrip()
|
|
587
|
+
if not line:
|
|
588
|
+
continue
|
|
589
|
+
try:
|
|
590
|
+
d = json.loads(line)
|
|
591
|
+
lvl = d.get("level", "INFO")
|
|
592
|
+
msg = d.get("message", line)
|
|
593
|
+
prefix = " ⚠ " if lvl in ("WARNING", "ERROR") else " · "
|
|
594
|
+
print(prefix + msg, flush=True)
|
|
595
|
+
except Exception:
|
|
596
|
+
print(" " + line, flush=True)
|
|
597
|
+
') &
|
|
598
|
+
_log_pid=$!
|
|
599
|
+
(tail -F "${_MLX_ERR}" 2>/dev/null | while IFS= read -r _eline; do
|
|
600
|
+
printf ' %s\n' "${_eline}"
|
|
601
|
+
done) &
|
|
602
|
+
_err_pid=$!
|
|
603
|
+
|
|
572
604
|
until curl -sf "http://127.0.0.1:${MLX_PORT}/health" >/dev/null 2>&1; do
|
|
573
|
-
sleep 3; _w=$((_w+3))
|
|
605
|
+
sleep 3; _w=$((_w+3))
|
|
606
|
+
[[ $_w -ge 300 ]] && { warn "MLX not ready after 300s — check: meridian logs mlx-server"; break; }
|
|
574
607
|
done
|
|
608
|
+
{ kill "${_log_pid}" "${_err_pid}" 2>/dev/null; wait "${_log_pid}" "${_err_pid}" 2>/dev/null; } || true
|
|
609
|
+
|
|
575
610
|
# Only stamp after confirmed ready — prevents stale stamp on a failed restart.
|
|
576
611
|
if curl -sf "http://127.0.0.1:${MLX_PORT}/health" >/dev/null 2>&1; then
|
|
577
612
|
ok "MLX server ready (${_w}s)"
|
package/services/pyproject.toml
CHANGED
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "meridian-agents"
|
|
7
|
-
version = "1.
|
|
8
|
-
description = "Meridian agents —
|
|
7
|
+
version = "1.34.0"
|
|
8
|
+
description = "Meridian agents — MLX classifier server and Jira worklog synthesis for meridian.db"
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
authors = [{ name = "Meridiona" }]
|
|
11
11
|
license = { text = "MIT" }
|
|
@@ -53,9 +53,9 @@ meridian-server = "agents.server:main"
|
|
|
53
53
|
|
|
54
54
|
[tool.uv]
|
|
55
55
|
# Lock all extras so `uv lock` produces a complete, reproducible uv.lock.
|
|
56
|
-
#
|
|
57
|
-
#
|
|
58
|
-
#
|
|
56
|
+
# At install time both extras are synced — `uv sync --extra mlx --extra
|
|
57
|
+
# pm_worklog_update` — because the one MLX server serves /classify_sessions
|
|
58
|
+
# (mlx) AND /synthesise_worklog (agno, pm_worklog_update).
|
|
59
59
|
constraint-dependencies = []
|
|
60
60
|
|
|
61
61
|
[tool.setuptools.packages.find]
|
package/ui.tar.gz
CHANGED
|
Binary file
|