@appchy/jarvis 0.1.54 → 0.1.55

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/dist/bin.js CHANGED
@@ -9891,7 +9891,7 @@ import { createRequire as createRequire2 } from "module";
9891
9891
  var _require = createRequire2(import.meta.url);
9892
9892
  var VERSION2 = _require("../package.json").version ?? "0.0.0";
9893
9893
  var IS_DEV = String(_require("../package.json").name ?? "").endsWith("-dev");
9894
- var SHA = "a2cf66f";
9894
+ var SHA = "60b2448";
9895
9895
  var BUILT = "2026-09-09";
9896
9896
  var BUILD = SHA ?? "source";
9897
9897
  var BUILD_LABEL = `${SHA ? `${VERSION2} (${SHA}${BUILT ? ` ${BUILT}` : ""})` : `${VERSION2} (source)`}${IS_DEV ? " \u2014 development build" : ""}`;
@@ -10,6 +10,7 @@ import json
10
10
  import os
11
11
  import platform
12
12
  import re
13
+ import shutil
13
14
  import sys
14
15
  from datetime import date
15
16
  from pathlib import Path
@@ -137,6 +138,31 @@ def cmd_id_new(args) -> int:
137
138
  return 0
138
139
 
139
140
 
141
+ #: The extractor `jarvis build graph` shells out to. The npm package is `graphifyy`
142
+ #: and the binary it installs is `graphify` — a letter apart, which is its own small
143
+ #: trap when somebody checks for the wrong one.
144
+ GRAPH_TOOL = "graphify"
145
+
146
+ #: Where a tool lands when it is installed and still not reachable. `uv` uses the
147
+ #: first; the rest are the ordinary places a user-level binary goes on macOS and
148
+ #: Linux, so the "installed but invisible" message can name the actual path rather
149
+ #: than guessing at one.
150
+ _TOOL_DIRS = ("~/.local/bin", "~/.cargo/bin", "/opt/homebrew/bin", "/usr/local/bin")
151
+
152
+
153
+ def _installed_elsewhere(tool: str):
154
+ """The tool's path if it is on disk somewhere PATH does not reach, else None.
155
+
156
+ Asked only after `shutil.which` has already said no, so a hit here means exactly
157
+ one thing: it is installed and the shell cannot see it.
158
+ """
159
+ for d in _TOOL_DIRS:
160
+ candidate = Path(d).expanduser() / tool
161
+ if candidate.exists():
162
+ return candidate
163
+ return None
164
+
165
+
140
166
  def _mcp_declared(repo: Path, server: str) -> bool:
141
167
  """Whether any `.mcp.json` in the project declares `server`."""
142
168
  for p in (repo / ".mcp.json", repo / ".claude" / ".mcp.json"):
@@ -299,6 +325,38 @@ def cmd_doctor(args) -> int:
299
325
  f"plugin — this checks declarations, it cannot probe a "
300
326
  f"live server from here.")
301
327
 
328
+ # The extractor `jarvis build graph` shells out to. Only asked about in a repo
329
+ # that actually maps itself — a repo with no `jarvis.config.ts` neither needs
330
+ # the tool nor should be told to install it.
331
+ #
332
+ # **PATH, not installedness, and the difference is the whole check.** `uv tool
333
+ # install graphifyy` puts the binary in `~/.local/bin`, which a fresh macOS
334
+ # shell does not carry, and `uv` says so on the line before the scroll takes
335
+ # it. So the machine that most needs this check has the tool INSTALLED and
336
+ # UNREACHABLE — and a check asking `uv tool list` reports green on exactly
337
+ # that machine, which is how the failure survived being looked for. The two
338
+ # states get different messages because they need different instructions:
339
+ # one is "install it", the other is "your PATH is wrong", and telling
340
+ # somebody to reinstall a tool they already have is how a doctor loses its
341
+ # reader.
342
+ if (repo / "jarvis.config.ts").is_file():
343
+ found = shutil.which(GRAPH_TOOL)
344
+ if found:
345
+ ok("map tool", f"{GRAPH_TOOL} on PATH at {found}")
346
+ else:
347
+ stray = _installed_elsewhere(GRAPH_TOOL)
348
+ if stray:
349
+ bad("map tool", f"{GRAPH_TOOL} is INSTALLED but not on PATH — it "
350
+ f"is at {stray}, and your shell cannot see it, so "
351
+ f"`jarvis build graph` fails as though it were "
352
+ f"missing. Add its directory to PATH:\n"
353
+ f" export PATH=\"{stray.parent}:$PATH\"")
354
+ else:
355
+ bad("map tool", f"{GRAPH_TOOL} is not installed, so `jarvis build "
356
+ f"graph` cannot run and this repo has no map. "
357
+ f"Install it:\n"
358
+ f" uv tool install graphifyy")
359
+
302
360
  if cfg["verify"]:
303
361
  ok("verify", ", ".join(sorted(cfg["verify"])))
304
362
  else:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appchy/jarvis",
3
- "version": "0.1.54",
3
+ "version": "0.1.55",
4
4
  "description": "Jarvis — local AI coding assistant CLI",
5
5
  "private": false,
6
6
  "type": "module",
@@ -63,8 +63,8 @@
63
63
  "@jarvis/errors": "1.0.0",
64
64
  "@jarvis/logger": "1.0.0",
65
65
  "@jarvis/rpc": "1.0.0",
66
- "@jarvis/types": "1.0.0",
67
66
  "@jarvis/typescript-config": "1.0.0",
67
+ "@jarvis/types": "1.0.0",
68
68
  "@jarvis/ui": "0.1.0",
69
69
  "@jarvis/vitest-config": "1.0.0"
70
70
  },