prism-mcp-server 20.22.1 → 20.22.3
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/README.md +30 -3
- package/dist/config.js +4 -3
- package/dist/tools/prismInferHandler.js +5 -3
- package/dist/utils/omlxProvider.js +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -70,9 +70,9 @@ It reads `OMLX_API_KEY` or the local `~/.omlx/settings.json` key, and model/cont
|
|
|
70
70
|
settings from `~/.omlx/model_settings.json`; `OMLX_MODEL` and a loopback-only
|
|
71
71
|
`OMLX_BASE_URL` can select local configuration. Redirects are refused.
|
|
72
72
|
|
|
73
|
-
**Requires**
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
**Requires** the [stable Prism integration of oMLX](https://github.com/dcostenco/omlx),
|
|
74
|
+
based on upstream `v0.7.1` with Prism's control routes
|
|
75
|
+
([install and settings](https://github.com/dcostenco/omlx/blob/main/PRISM.md)). With stock
|
|
76
76
|
oMLX every call is refused. Generation runs as an owned
|
|
77
77
|
job through those routes, so a timeout or cancel is reported only once the
|
|
78
78
|
server confirms the request stopped. An unconfirmed stop refuses later calls
|
|
@@ -235,6 +235,33 @@ or by re-enabling after each run.
|
|
|
235
235
|
<details>
|
|
236
236
|
<summary>Release history (optional)</summary>
|
|
237
237
|
|
|
238
|
+
## What's New in v20.22.3
|
|
239
|
+
|
|
240
|
+
- **Dependency fixes:** Hono 4.13.11 addresses its static-path middleware
|
|
241
|
+
bypass advisory; Vite 8.2.4 addresses its development editor-launch advisories.
|
|
242
|
+
- **Local resource probes use numeric loopback by default.** The default
|
|
243
|
+
Ollama endpoint is now `http://127.0.0.1:11434`, so a stalled `localhost`
|
|
244
|
+
DNS lookup cannot block those probes. Explicit URL overrides are preserved;
|
|
245
|
+
IPv6-only servers need an explicit URL.
|
|
246
|
+
- **Read-only oMLX inspection accepts release-candidate versions.** Valid
|
|
247
|
+
`rcN` labels no longer invalidate status. Inspection still reports
|
|
248
|
+
generation disabled and the provider not qualified; it is not an activation
|
|
249
|
+
or a generation check.
|
|
250
|
+
- **Stable oMLX setup:** the current setup link uses the Prism integration
|
|
251
|
+
based on upstream `v0.7.1`. Stock oMLX still lacks the required control routes.
|
|
252
|
+
|
|
253
|
+
## What's New in v20.22.2
|
|
254
|
+
|
|
255
|
+
**Why it matters:** an agent that followed `session_task_route`'s advice was
|
|
256
|
+
refused on explicit oMLX before anything ran.
|
|
257
|
+
|
|
258
|
+
- **A complexity hint no longer refuses explicit oMLX.** `session_task_route`
|
|
259
|
+
recommends a `task_complexity` for every code task. That hint picks Ollama's
|
|
260
|
+
starting tier, but on explicit oMLX it lowered the model ceiling, so a call
|
|
261
|
+
that passed the recommended arguments was refused with `omlx_model_ceiling`.
|
|
262
|
+
Now only an explicit `model_ceiling` below the top tier, or a plan below it,
|
|
263
|
+
refuses. Thinking on oMLX stays with the server's settings.
|
|
264
|
+
|
|
238
265
|
## What's New in v20.22.1
|
|
239
266
|
|
|
240
267
|
**Why it matters:** on explicit oMLX, a long prompt could keep the device busy
|
package/dist/config.js
CHANGED
|
@@ -345,15 +345,16 @@ export const PRISM_TURBOQUANT_TIEBREAKER_EPSILON = Number.isFinite(rawTiebreaker
|
|
|
345
345
|
//
|
|
346
346
|
// Set PRISM_LOCAL_LLM_ENABLED=true to activate.
|
|
347
347
|
// Set PRISM_LOCAL_LLM_MODEL to override the model tag.
|
|
348
|
-
// Set PRISM_LOCAL_LLM_URL to override the Ollama endpoint (default:
|
|
348
|
+
// Set PRISM_LOCAL_LLM_URL to override the Ollama endpoint (default: 127.0.0.1:11434).
|
|
349
349
|
// Set PRISM_LOCAL_LLM_TIMEOUT_MS to override per-call timeout (default: 60000, max: 300000).
|
|
350
350
|
// Set PRISM_STRICT_LOCAL_MODE=true to block cloud fallback when local LLM is enabled (HIPAA).
|
|
351
351
|
/** Master switch — enables the local prism-coder LLM for background tasks. */
|
|
352
352
|
export const PRISM_LOCAL_LLM_ENABLED = process.env.PRISM_LOCAL_LLM_ENABLED === "true"; // Opt-in, default false
|
|
353
353
|
/** Ollama model tag to use for local LLM calls. */
|
|
354
354
|
export const PRISM_LOCAL_LLM_MODEL = (process.env.PRISM_LOCAL_LLM_MODEL || "prism-coder:9b").trim();
|
|
355
|
-
/**
|
|
356
|
-
|
|
355
|
+
/** Numeric loopback avoids queuing local health probes behind getaddrinfo work.
|
|
356
|
+
* Explicit overrides still support custom hostnames and IPv6-only listeners. */
|
|
357
|
+
export const PRISM_LOCAL_LLM_URL = (process.env.PRISM_LOCAL_LLM_URL || "http://127.0.0.1:11434").trim();
|
|
357
358
|
/** Per-call timeout in ms. Prevents stalled background tasks. Capped at 300s. */
|
|
358
359
|
export const PRISM_LOCAL_LLM_TIMEOUT_MS = (() => {
|
|
359
360
|
const raw = parseInt(process.env.PRISM_LOCAL_LLM_TIMEOUT_MS || "60000", 10);
|
|
@@ -2206,12 +2206,14 @@ async function runInferAfterInputSafety(args, deps, t0, temperature) {
|
|
|
2206
2206
|
// No trusted binding maps an oMLX model to a logical tier, and the
|
|
2207
2207
|
// configured Flash model outweighs every Ollama tier. Below the top
|
|
2208
2208
|
// ceiling, from the caller or the plan, refuse before any network,
|
|
2209
|
-
// classification or residency change.
|
|
2210
|
-
|
|
2209
|
+
// classification or residency change. A task_complexity hint only picks
|
|
2210
|
+
// Ollama's starting tier (session_task_route recommends one for every
|
|
2211
|
+
// code task), so it is not a ceiling here; an explicit model_ceiling is.
|
|
2212
|
+
if (clampCeiling(args.model_ceiling ?? "27b", ent.model_ceiling) !== "27b") {
|
|
2211
2213
|
attempts.push({ tier: "omlx", reason: "omlx_model_ceiling" });
|
|
2212
2214
|
if (wantReport)
|
|
2213
2215
|
return refusedResult("omlx_model_ceiling");
|
|
2214
|
-
throw new Error("prism_infer: omlx_model_ceiling; explicit oMLX needs the top model ceiling");
|
|
2216
|
+
throw new Error("prism_infer: omlx_model_ceiling; explicit oMLX needs the top model ceiling from model_ceiling and the plan");
|
|
2215
2217
|
}
|
|
2216
2218
|
if (!Number.isInteger(localMaxTokens) || localMaxTokens <= 0
|
|
2217
2219
|
|| !Number.isFinite(temperature) || temperature < 0
|
|
@@ -438,7 +438,7 @@ export async function inspectOmlx(options = {}) {
|
|
|
438
438
|
if (new Set(advertised).size !== advertised.length)
|
|
439
439
|
throw new OmlxError("omlx_inspection_models_invalid");
|
|
440
440
|
if (typeof raw.version !== "string" || raw.version.length > 32 || raw.version.includes(apiKey)
|
|
441
|
-
|| !/^[0-9]+\.[0-9]+\.[0-9]+(?:[.+-][A-Za-z0-9.-]+)?$/.test(raw.version)
|
|
441
|
+
|| !/^[0-9]+\.[0-9]+\.[0-9]+(?:rc[0-9]+)?(?:[.+-][A-Za-z0-9.-]+)?$/.test(raw.version)
|
|
442
442
|
|| typeof raw.uptime_seconds !== "number" || !Number.isFinite(raw.uptime_seconds) || raw.uptime_seconds < 0
|
|
443
443
|
|| !STATUS_COUNTS.every(key => Number.isSafeInteger(raw[key]) && raw[key] >= 0)
|
|
444
444
|
|| ![raw.model_memory_used, raw.model_memory_max].every(value => typeof value === "number" && Number.isFinite(value) && value >= 0)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prism-mcp-server",
|
|
3
|
-
"version": "20.22.
|
|
3
|
+
"version": "20.22.3",
|
|
4
4
|
"mcpName": "io.github.dcostenco/prism-coder",
|
|
5
5
|
"description": "Persistent session memory for AI coding agents that never leaves your machine — including the on-device model that reasons over it. Restores your prior decisions, open TODOs, and changed files across sessions; adds associative recall of related past work, semantic drift detection, and local inference. Local-first by default. Works with Claude Code, Cursor, and Codex.",
|
|
6
6
|
"module": "index.ts",
|
|
@@ -80,7 +80,8 @@
|
|
|
80
80
|
"@hono/node-server": "^2.0.5",
|
|
81
81
|
"body-parser": "^2.3.0",
|
|
82
82
|
"fast-uri": "^3.1.8",
|
|
83
|
-
"hono": "
|
|
83
|
+
"hono": "4.13.11",
|
|
84
|
+
"vite": "8.2.4",
|
|
84
85
|
"ip-address": "^10.2.0",
|
|
85
86
|
"protobufjs": "^7.6.5",
|
|
86
87
|
"sharp": "^0.35.5",
|