@colbymchenry/codegraph 0.7.6 → 0.7.10

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.
Files changed (79) hide show
  1. package/README.md +35 -10
  2. package/dist/bin/codegraph.js +94 -24
  3. package/dist/bin/codegraph.js.map +1 -1
  4. package/dist/bin/node-version-check.d.ts +3 -0
  5. package/dist/bin/node-version-check.d.ts.map +1 -1
  6. package/dist/bin/node-version-check.js +5 -2
  7. package/dist/bin/node-version-check.js.map +1 -1
  8. package/dist/bin/uninstall.d.ts +7 -7
  9. package/dist/bin/uninstall.d.ts.map +1 -1
  10. package/dist/bin/uninstall.js +23 -135
  11. package/dist/bin/uninstall.js.map +1 -1
  12. package/dist/db/queries.d.ts.map +1 -1
  13. package/dist/db/queries.js +7 -1
  14. package/dist/db/queries.js.map +1 -1
  15. package/dist/installer/claude-md-template.d.ts +10 -6
  16. package/dist/installer/claude-md-template.d.ts.map +1 -1
  17. package/dist/installer/claude-md-template.js +15 -40
  18. package/dist/installer/claude-md-template.js.map +1 -1
  19. package/dist/installer/config-writer.d.ts +17 -24
  20. package/dist/installer/config-writer.d.ts.map +1 -1
  21. package/dist/installer/config-writer.js +44 -239
  22. package/dist/installer/config-writer.js.map +1 -1
  23. package/dist/installer/index.d.ts +45 -4
  24. package/dist/installer/index.d.ts.map +1 -1
  25. package/dist/installer/index.js +216 -79
  26. package/dist/installer/index.js.map +1 -1
  27. package/dist/installer/instructions-template.d.ts +28 -0
  28. package/dist/installer/instructions-template.d.ts.map +1 -0
  29. package/dist/installer/instructions-template.js +63 -0
  30. package/dist/installer/instructions-template.js.map +1 -0
  31. package/dist/installer/targets/claude.d.ts +27 -0
  32. package/dist/installer/targets/claude.d.ts.map +1 -0
  33. package/dist/installer/targets/claude.js +246 -0
  34. package/dist/installer/targets/claude.js.map +1 -0
  35. package/dist/installer/targets/codex.d.ts +18 -0
  36. package/dist/installer/targets/codex.d.ts.map +1 -0
  37. package/dist/installer/targets/codex.js +185 -0
  38. package/dist/installer/targets/codex.js.map +1 -0
  39. package/dist/installer/targets/cursor.d.ts +35 -0
  40. package/dist/installer/targets/cursor.d.ts.map +1 -0
  41. package/dist/installer/targets/cursor.js +229 -0
  42. package/dist/installer/targets/cursor.js.map +1 -0
  43. package/dist/installer/targets/opencode.d.ts +30 -0
  44. package/dist/installer/targets/opencode.d.ts.map +1 -0
  45. package/dist/installer/targets/opencode.js +235 -0
  46. package/dist/installer/targets/opencode.js.map +1 -0
  47. package/dist/installer/targets/registry.d.ts +35 -0
  48. package/dist/installer/targets/registry.d.ts.map +1 -0
  49. package/dist/installer/targets/registry.js +83 -0
  50. package/dist/installer/targets/registry.js.map +1 -0
  51. package/dist/installer/targets/shared.d.ts +77 -0
  52. package/dist/installer/targets/shared.d.ts.map +1 -0
  53. package/dist/installer/targets/shared.js +246 -0
  54. package/dist/installer/targets/shared.js.map +1 -0
  55. package/dist/installer/targets/toml.d.ts +52 -0
  56. package/dist/installer/targets/toml.d.ts.map +1 -0
  57. package/dist/installer/targets/toml.js +147 -0
  58. package/dist/installer/targets/toml.js.map +1 -0
  59. package/dist/installer/targets/types.d.ts +116 -0
  60. package/dist/installer/targets/types.d.ts.map +1 -0
  61. package/dist/installer/targets/types.js +16 -0
  62. package/dist/installer/targets/types.js.map +1 -0
  63. package/dist/mcp/index.d.ts +4 -0
  64. package/dist/mcp/index.d.ts.map +1 -1
  65. package/dist/mcp/index.js +34 -9
  66. package/dist/mcp/index.js.map +1 -1
  67. package/dist/mcp/tools.d.ts +16 -3
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +86 -17
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/dist/ui/glyphs.d.ts +42 -0
  72. package/dist/ui/glyphs.d.ts.map +1 -0
  73. package/dist/ui/glyphs.js +78 -0
  74. package/dist/ui/glyphs.js.map +1 -0
  75. package/dist/ui/shimmer-worker.js +17 -11
  76. package/dist/ui/shimmer-worker.js.map +1 -1
  77. package/package.json +2 -1
  78. package/scripts/local-install.sh +41 -0
  79. package/scripts/release.sh +70 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * Glyph selection for CLI output.
4
+ *
5
+ * On Windows, console output is interpreted via the active output
6
+ * codepage. PowerShell 5.1 and cmd.exe default to OEM codepages
7
+ * (CP437, CP936, ...), so UTF-8 bytes written to the console render
8
+ * as mojibake (see #168). The shimmer worker is hit hardest because
9
+ * it uses `fs.writeSync(1, ...)` (raw bytes, no TTY-aware encoding
10
+ * conversion) to keep animation smooth while the main thread is
11
+ * blocked in SQLite. To stay readable everywhere, we fall back to
12
+ * ASCII glyphs whenever the terminal is not known to handle UTF-8.
13
+ *
14
+ * Detection is intentionally simple:
15
+ * - `CODEGRAPH_ASCII=1` -> ASCII (escape hatch for any terminal)
16
+ * - `CODEGRAPH_UNICODE=1` -> Unicode (opt-in on Windows)
17
+ * - Windows -> ASCII by default
18
+ * - Linux kernel console (`TERM=linux`) -> ASCII
19
+ * - Everything else -> Unicode
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.ASCII_GLYPHS = exports.UNICODE_GLYPHS = void 0;
23
+ exports.supportsUnicode = supportsUnicode;
24
+ exports.getGlyphs = getGlyphs;
25
+ exports._resetGlyphsCache = _resetGlyphsCache;
26
+ function supportsUnicode() {
27
+ if (process.env.CODEGRAPH_ASCII === '1')
28
+ return false;
29
+ if (process.env.CODEGRAPH_UNICODE === '1')
30
+ return true;
31
+ if (process.platform === 'win32')
32
+ return false;
33
+ return process.env.TERM !== 'linux';
34
+ }
35
+ exports.UNICODE_GLYPHS = {
36
+ ok: '✓',
37
+ err: '✗',
38
+ info: 'ℹ',
39
+ warn: '⚠',
40
+ spinner: ['·', '✢', '✳', '✶', '✻', '✽'],
41
+ barFilled: '█',
42
+ barEmpty: '░',
43
+ rail: '│',
44
+ phaseDone: '◆',
45
+ dash: '—',
46
+ hLine: '─',
47
+ treeBranch: '├── ',
48
+ treeLast: '└── ',
49
+ treePipe: '│ ',
50
+ };
51
+ exports.ASCII_GLYPHS = {
52
+ ok: '[OK]',
53
+ err: '[ERR]',
54
+ info: '[i]',
55
+ warn: '[!]',
56
+ spinner: ['.', '*', '+', 'x', 'o', 'O'],
57
+ barFilled: '#',
58
+ barEmpty: '-',
59
+ rail: '|',
60
+ phaseDone: '*',
61
+ dash: '-',
62
+ hLine: '-',
63
+ treeBranch: '|-- ',
64
+ treeLast: '`-- ',
65
+ treePipe: '| ',
66
+ };
67
+ let cached = null;
68
+ function getGlyphs() {
69
+ if (cached === null) {
70
+ cached = supportsUnicode() ? exports.UNICODE_GLYPHS : exports.ASCII_GLYPHS;
71
+ }
72
+ return cached;
73
+ }
74
+ /** Reset the cached glyph set. Test-only; production code should call `getGlyphs()`. */
75
+ function _resetGlyphsCache() {
76
+ cached = null;
77
+ }
78
+ //# sourceMappingURL=glyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glyphs.js","sourceRoot":"","sources":["../../src/ui/glyphs.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAEH,0CAKC;AAuDD,8BAKC;AAGD,8CAEC;AAtED,SAAgB,eAAe;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;AACtC,CAAC;AAmBY,QAAA,cAAc,GAAW;IACpC,EAAE,EAAE,GAAG;IACP,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACvC,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,GAAG;IACd,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEW,QAAA,YAAY,GAAW;IAClC,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,OAAO;IACZ,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACvC,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,GAAG;IACd,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAgB,SAAS;IACvB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC,sBAAc,CAAC,CAAC,CAAC,oBAAY,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wFAAwF;AACxF,SAAgB,iBAAiB;IAC/B,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC"}
@@ -2,15 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const worker_threads_1 = require("worker_threads");
4
4
  const fs_1 = require("fs");
5
+ const glyphs_1 = require("./glyphs");
5
6
  // Write directly to fd 1 (stdout) instead of writeStdout().
6
7
  // In Node.js worker threads, process.stdout is proxied through the main
7
8
  // thread's event loop — so if the main thread is blocked (e.g. SQLite),
8
9
  // stdout writes from the worker queue up and the animation freezes.
9
10
  // fs.writeSync(1, ...) is a direct kernel syscall that bypasses this.
11
+ //
12
+ // Side effect: bypasses Node's TTY-aware encoding conversion on Windows,
13
+ // so UTF-8 bytes hit the console raw and mojibake on OEM codepages.
14
+ // `getGlyphs()` returns ASCII fallbacks on Windows to avoid this (#168).
10
15
  function writeStdout(s) {
11
16
  (0, fs_1.writeSync)(1, s);
12
17
  }
13
- const SPINNER_GLYPHS = ['·', '✢', '✳', '✶', '✻', '✽'];
18
+ const G = (0, glyphs_1.getGlyphs)();
19
+ const SPINNER_GLYPHS = G.spinner;
14
20
  const ANIM_INTERVAL = 150;
15
21
  const FRAMES_PER_GLYPH = 3;
16
22
  const RST = '\x1b[0m';
@@ -36,7 +42,7 @@ function formatNumber(n) {
36
42
  }
37
43
  function renderBar(frame, filled, empty) {
38
44
  if (filled === 0)
39
- return `${DM}${'░'.repeat(empty)}${RST}`;
45
+ return `${DM}${G.barEmpty.repeat(empty)}${RST}`;
40
46
  const cycleFrames = 24;
41
47
  const shimmerPos = ((frame % cycleFrames) / cycleFrames) * (filled + 6) - 3;
42
48
  const shimmerWidth = 3;
@@ -47,9 +53,9 @@ function renderBar(frame, filled, empty) {
47
53
  const r = lerp(160, 251, t);
48
54
  const g = lerp(100, 191, t);
49
55
  const b = lerp(9, 36, t);
50
- bar += `\x1b[38;2;${r};${g};${b}m${BOLD}█`;
56
+ bar += `\x1b[38;2;${r};${g};${b}m${BOLD}${G.barFilled}`;
51
57
  }
52
- bar += `${RST}${DM}${'░'.repeat(empty)}${RST}`;
58
+ bar += `${RST}${DM}${G.barEmpty.repeat(empty)}${RST}`;
53
59
  return bar;
54
60
  }
55
61
  // Mutable state
@@ -61,20 +67,20 @@ function render() {
61
67
  return;
62
68
  const frame = animFrame();
63
69
  const glyphIdx = Math.floor(frame / FRAMES_PER_GLYPH) % SPINNER_GLYPHS.length;
64
- const glyph = SPINNER_GLYPHS[glyphIdx] ?? '·';
70
+ const glyph = SPINNER_GLYPHS[glyphIdx] ?? SPINNER_GLYPHS[0] ?? '.';
65
71
  const color = shimmerColor(frame);
66
72
  let line;
67
73
  if (currentPercent >= 0) {
68
74
  const barWidth = 25;
69
75
  const filled = Math.round(barWidth * currentPercent / 100);
70
76
  const empty = barWidth - filled;
71
- line = `${DM}│${RST} ${color}${glyph}${RST} ${currentMessage} ${renderBar(frame, filled, empty)} ${currentPercent}%`;
77
+ line = `${DM}${G.rail}${RST} ${color}${glyph}${RST} ${currentMessage} ${renderBar(frame, filled, empty)} ${currentPercent}%`;
72
78
  }
73
79
  else if (currentCount > 0) {
74
- line = `${DM}│${RST} ${color}${glyph}${RST} ${currentMessage}... ${formatNumber(currentCount)} found`;
80
+ line = `${DM}${G.rail}${RST} ${color}${glyph}${RST} ${currentMessage}... ${formatNumber(currentCount)} found`;
75
81
  }
76
82
  else {
77
- line = `${DM}│${RST} ${color}${glyph}${RST} ${currentMessage}...`;
83
+ line = `${DM}${G.rail}${RST} ${color}${glyph}${RST} ${currentMessage}...`;
78
84
  }
79
85
  writeStdout(`\r\x1b[K${line}`);
80
86
  }
@@ -84,10 +90,10 @@ function finishPhase() {
84
90
  writeStdout(`\r\x1b[K`);
85
91
  let detail = '';
86
92
  if (currentPercent >= 0)
87
- detail = ' done';
93
+ detail = ` ${G.dash} done`;
88
94
  else if (currentCount > 0)
89
- detail = ` ${formatNumber(currentCount)} found`;
90
- writeStdout(`${DM}│${RST} ${GRN}◆${RST} ${currentMessage}${detail}\n`);
95
+ detail = ` ${G.dash} ${formatNumber(currentCount)} found`;
96
+ writeStdout(`${DM}${G.rail}${RST} ${GRN}${G.phaseDone}${RST} ${currentMessage}${detail}\n`);
91
97
  currentMessage = '';
92
98
  currentPercent = -1;
93
99
  currentCount = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"shimmer-worker.js","sourceRoot":"","sources":["../../src/ui/shimmer-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shimmer-worker.js","sourceRoot":"","sources":["../../src/ui/shimmer-worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colbymchenry/codegraph",
3
- "version": "0.7.6",
3
+ "version": "0.7.10",
4
4
  "description": "Supercharge Claude Code with semantic code intelligence. 94% fewer tool calls • 77% faster exploration • 100% local.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -36,6 +36,7 @@
36
36
  "commander": "^14.0.2",
37
37
  "fast-string-width": "^3.0.2",
38
38
  "fast-wrap-ansi": "^0.2.0",
39
+ "jsonc-parser": "^3.3.1",
39
40
  "node-sqlite3-wasm": "^0.8.30",
40
41
  "picomatch": "^4.0.3",
41
42
  "sisteransi": "^1.0.5",
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+ # Build the current branch and link it as the global `codegraph` for
3
+ # hands-on testing. Replaces any existing global install for as long
4
+ # as the symlink is in place.
5
+ #
6
+ # Usage:
7
+ # ./scripts/local-install.sh # build + link
8
+ # ./scripts/local-install.sh --undo # unlink + restore the published version
9
+
10
+ set -euo pipefail
11
+
12
+ cd "$(dirname "$0")/.."
13
+
14
+ PKG=$(node -p "require('./package.json').name")
15
+ VERSION=$(node -p "require('./package.json').version")
16
+ BRANCH=$(git rev-parse --abbrev-ref HEAD)
17
+
18
+ if [ "${1:-}" = "--undo" ]; then
19
+ echo "→ unlinking ${PKG}"
20
+ npm unlink -g "${PKG}" >/dev/null 2>&1 || true
21
+ echo "→ reinstalling published ${PKG}"
22
+ npm install -g "${PKG}"
23
+ echo "done: global codegraph -> $(command -v codegraph)"
24
+ exit 0
25
+ fi
26
+
27
+ echo "→ building ${PKG} ${VERSION} (${BRANCH})"
28
+ npm run build
29
+
30
+ echo "→ linking globally"
31
+ npm link
32
+
33
+ LINKED=$(command -v codegraph || echo "(not on PATH)")
34
+ echo
35
+ echo "✓ global codegraph now points to this branch"
36
+ echo " binary: ${LINKED}"
37
+ echo " branch: ${BRANCH}"
38
+ echo " version: ${VERSION}"
39
+ echo
40
+ echo "To restore the published version:"
41
+ echo " ./scripts/local-install.sh --undo"
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env bash
2
+ # Tag the current commit with the version in package.json and publish a
3
+ # matching GitHub Release whose body is the corresponding CHANGELOG.md entry.
4
+ #
5
+ # Run AFTER you have:
6
+ # - bumped package.json
7
+ # - added a `## [X.Y.Z] - YYYY-MM-DD` block at the top of CHANGELOG.md
8
+ # - committed, pushed to origin, and run `npm publish`
9
+ #
10
+ # Idempotent: safe to re-run after a partial failure. Skips steps that are
11
+ # already done (tag created, tag pushed, release published).
12
+ #
13
+ # Usage: ./scripts/release.sh
14
+
15
+ set -euo pipefail
16
+
17
+ cd "$(dirname "$0")/.."
18
+
19
+ VERSION=$(node -p "require('./package.json').version")
20
+ TAG="v${VERSION}"
21
+
22
+ REPO=$(git remote get-url origin | sed -E 's|.*github\.com[:/]||; s|\.git$||')
23
+ if [ -z "${REPO}" ]; then
24
+ echo "error: could not derive owner/repo from origin remote URL" >&2
25
+ exit 1
26
+ fi
27
+
28
+ if ! grep -q "^## \[${VERSION}\]" CHANGELOG.md; then
29
+ echo "error: no '## [${VERSION}]' entry found in CHANGELOG.md" >&2
30
+ exit 1
31
+ fi
32
+
33
+ NOTES=$(awk -v v="${VERSION}" '
34
+ /^## \[/ {
35
+ if (p) exit
36
+ if ($0 ~ "^## \\[" v "\\]") p = 1
37
+ }
38
+ p
39
+ ' CHANGELOG.md)
40
+
41
+ if [ -z "${NOTES}" ]; then
42
+ echo "error: failed to extract changelog notes for ${VERSION}" >&2
43
+ exit 1
44
+ fi
45
+
46
+ if git rev-parse "${TAG}" >/dev/null 2>&1; then
47
+ echo "✓ tag ${TAG} already exists locally"
48
+ else
49
+ echo "→ tagging ${TAG}"
50
+ git tag "${TAG}"
51
+ fi
52
+
53
+ if git ls-remote --exit-code --tags origin "${TAG}" >/dev/null 2>&1; then
54
+ echo "✓ tag ${TAG} already on origin"
55
+ else
56
+ echo "→ pushing ${TAG} to origin"
57
+ git push origin "${TAG}"
58
+ fi
59
+
60
+ if gh release view "${TAG}" --repo "${REPO}" >/dev/null 2>&1; then
61
+ echo "✓ release ${TAG} already published"
62
+ else
63
+ echo "→ creating GitHub Release ${TAG} on ${REPO}"
64
+ gh release create "${TAG}" \
65
+ --repo "${REPO}" \
66
+ --title "${TAG}" \
67
+ --notes "${NOTES}"
68
+ fi
69
+
70
+ echo "done: https://github.com/${REPO}/releases/tag/${TAG}"