glassbox 0.19.0 → 0.20.0-beta.1

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/cli.js CHANGED
@@ -23551,8 +23551,10 @@ function getFileDiffs(mode, cwd) {
23551
23551
  const diffArgs = getDiffArgs(mode);
23552
23552
  const rawDiff = gitOrEmpty([...diffArgs, "-U3"], repoRoot);
23553
23553
  const diffs = parseDiff(rawDiff);
23554
- if (mode.type === "uncommitted") {
23555
- const untracked = git(["ls-files", "--others", "--exclude-standard"], repoRoot).trim();
23554
+ if (mode.type === "uncommitted" || mode.type === "files") {
23555
+ const lsArgs = ["ls-files", "--others", "--exclude-standard"];
23556
+ if (mode.type === "files") lsArgs.push("--", ...mode.patterns);
23557
+ const untracked = git(lsArgs, repoRoot).trim();
23556
23558
  if (untracked) {
23557
23559
  for (const file2 of untracked.split("\n").filter(Boolean)) {
23558
23560
  if (!diffs.some((d) => d.filePath === file2)) {
@@ -29884,6 +29886,7 @@ function Layout({ title, reviewId, difftool, children }) {
29884
29886
  /* @__PURE__ */ jsx5("meta", { charSet: "utf-8" }),
29885
29887
  /* @__PURE__ */ jsx5("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }),
29886
29888
  /* @__PURE__ */ jsx5("title", { children: title }),
29889
+ /* @__PURE__ */ jsx5("link", { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" }),
29887
29890
  /* @__PURE__ */ jsx5("link", { rel: "stylesheet", href: "/static/styles.css" })
29888
29891
  ] }),
29889
29892
  /* @__PURE__ */ jsxs5("body", { "data-review-id": reviewId, "data-difftool": difftool === true ? "1" : void 0, children: [
@@ -30499,6 +30502,10 @@ async function startServer(port, reviewId, repoRoot, options) {
30499
30502
  const js = readFileSync17(join16(distDir, "history.global.js"), "utf-8");
30500
30503
  return c.text(js, 200, { "Content-Type": "application/javascript", "Cache-Control": "no-cache" });
30501
30504
  });
30505
+ app.get("/favicon.svg", (c) => {
30506
+ const svg = readFileSync17(join16(distDir, "favicon.svg"), "utf-8");
30507
+ return c.body(svg, 200, { "Content-Type": "image/svg+xml", "Cache-Control": "no-cache" });
30508
+ });
30502
30509
  app.get("/favicon.ico", (c) => c.body(null, 204));
30503
30510
  app.route("/api", apiRoutes);
30504
30511
  app.route("/api/ai", aiApiRoutes);
@@ -31001,7 +31008,7 @@ async function main() {
31001
31008
  console.log("AI service test mode enabled \u2014 using mock AI responses");
31002
31009
  }
31003
31010
  if (debug) {
31004
- console.log(`[debug] Build timestamp: ${"2026-07-02T05:52:03.288Z"}`);
31011
+ console.log(`[debug] Build timestamp: ${"2026-07-02T09:57:40.917Z"}`);
31005
31012
  }
31006
31013
  if (projectDir !== null) {
31007
31014
  if (!existsSync17(projectDir) || !statSync6(projectDir).isDirectory()) {
@@ -0,0 +1,60 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="340px" height="384px" viewBox="0 0 340 384" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>favicon</title>
4
+ <defs>
5
+ <path d="M182.605615,3.37070706 L327.369259,86.7639587 C335.182106,91.2646465 340,99.5909082 340,108.606796 L340,275.393228 C340,284.409113 335.182101,292.735367 327.36928,297.23604 L295.199591,315.767865 L263.029895,334.299698 C228.115078,354.4129 205.744837,367.299603 182.605581,380.629288 C174.803837,385.123571 165.196176,385.123571 157.394398,380.629269 L12.6307727,297.236063 C4.81791689,292.735385 0,284.409125 0,275.393228 L0,108.606796 C0,99.59092 4.81787612,91.2646642 12.6307059,86.7639718 C68.1757864,54.766412 113.684083,28.5506992 157.394371,3.37077067 C165.196128,-1.12356751 174.803835,-1.12359174 182.605615,3.37070706 Z" id="path-1"></path>
6
+ <linearGradient x1="6.32575976%" y1="62.940491%" x2="93.7393257%" y2="37.059509%" id="linearGradient-3">
7
+ <stop stop-color="#72C8CE" offset="0%"></stop>
8
+ <stop stop-color="#78C1C7" offset="100%"></stop>
9
+ </linearGradient>
10
+ </defs>
11
+ <g id="favicon" stroke="none" fill="none" fill-rule="evenodd" stroke-width="1">
12
+ <g id="Group" transform="translate(-0, 0)">
13
+ <mask id="mask-2" fill="white">
14
+ <use xlink:href="#path-1" transform="translate(170, 192) rotate(180) translate(-170, -192)"></use>
15
+ </mask>
16
+ <use id="Path" fill="#6DD1DB" fill-rule="nonzero" transform="translate(170, 192) rotate(180) translate(-170, -192)" xlink:href="#path-1"></use>
17
+ <g mask="url(#mask-2)" fill="#2C6C74" id="Shape" opacity="0.94">
18
+ <g transform="translate(24.8951, 24.4991)">
19
+ <path d="M0,91.732569 L137.526254,170.956122 L137.526254,329.403718 L0,250.179701 L0,91.732569 Z M289.527306,91.732569 L289.527306,250.179701 L152.001142,329.40368 L152.001142,170.956122 L289.527306,91.732569 Z M144.763653,0 L282.289144,79.2235659 L144.763653,158.447158 L7.23822662,79.2235272 L144.763653,0 Z"></path>
20
+ </g>
21
+ </g>
22
+ <g id="Group-Copy-2" mask="url(#mask-2)">
23
+ <g transform="translate(170, 192) rotate(180) translate(-170, -192)translate(15, 15)" id="Shape">
24
+ <path d="M304.881817,269.238429 L160.118151,352.631658 C156.95103,354.456114 153.048983,354.456114 149.881862,352.631658 L5.1181962,269.238429 C1.95104808,267.41396 0,264.042186 0,260.393228 L0,93.6067956 C0,89.9578384 1.95102803,86.5860598 5.11817032,84.7615822 C53.3727213,56.9638391 101.627285,29.166096 149.881862,1.36836577 C153.048989,-0.456112703 156.951054,-0.456122542 160.11819,1.36833996 L304.881817,84.7615822 C308.048964,86.5860566 310,89.9578358 310,93.6067956 L310,260.393228 C310,264.042184 308.04896,267.413957 304.881817,269.238429 Z M2.99816577,264.562918 L147.762621,347.956147 L147.762621,181.16965 L10.2363665,101.946097 L2.99816577,97.7764332 L2.99816577,264.562918 Z M307.001873,97.7764332 L162.237509,181.16965 L162.237509,347.956147 L307.001873,264.562918 L307.001873,97.7764332 Z M155.000019,1.87420073 L10.2363665,85.267443 L155.000019,168.660685 L292.52551,89.4370934 L299.763672,85.267443 L155.000019,1.87420073 Z" fill="#2D6D74"></path>
25
+ <path d="M2.99816577,97.7764332 L10.2363665,101.946097 L10.2363665,260.393228 L147.762621,339.617246 L147.762621,347.956147 L2.99816577,264.562918 L2.99816577,97.7764332 Z M155.000019,1.87420073 L155.000019,10.2135275 L292.52551,89.4370934 L299.763672,85.267443 L155.000019,1.87420073 Z M10.2363665,85.267443 L17.4745931,89.4370547 L155.000019,10.2135275 L155.000019,1.87420073 L10.2363665,85.267443 Z M307.001873,97.7764332 L307.001873,264.562918 L162.237509,347.956147 L162.237509,339.617207 L299.763672,260.393228 L299.763672,101.946097 L307.001873,97.7764332 Z" fill="#428192" opacity="0.6"></path>
26
+ </g>
27
+ </g>
28
+ <g mask="url(#mask-2)">
29
+ <g transform="translate(14.6587, 14.2855)">
30
+ <path d="M304.881817,269.238429 L160.118151,352.631658 C156.95103,354.456114 153.048983,354.456114 149.881862,352.631658 L5.1181962,269.238429 C1.95104808,267.41396 0,264.042186 0,260.393228 L0,93.6067956 C0,89.9578384 1.95102803,86.5860598 5.11817032,84.7615822 C53.3727213,56.9638391 101.627285,29.166096 149.881862,1.36836577 C153.048989,-0.456112703 156.951054,-0.456122542 160.11819,1.36833996 L304.881817,84.7615822 C308.048964,86.5860566 310,89.9578358 310,93.6067956 L310,260.393228 C310,264.042184 308.04896,267.413957 304.881817,269.238429 Z M2.99816577,264.562918 L147.762621,347.956147 L147.762621,181.16965 L10.2363665,101.946097 L2.99816577,97.7764332 L2.99816577,264.562918 Z M307.001873,97.7764332 L162.237509,181.16965 L162.237509,347.956147 L307.001873,264.562918 L307.001873,97.7764332 Z M155.000019,1.87420073 L10.2363665,85.267443 L155.000019,168.660685 L292.52551,89.4370934 L299.763672,85.267443 L155.000019,1.87420073 Z" id="Shape" fill="#5F9FA6"></path>
31
+ <path d="M2.99816577,97.7764332 L10.2363665,101.946097 L10.2363665,260.393228 L147.762621,339.617246 L147.762621,347.956147 L2.99816577,264.562918 L2.99816577,97.7764332 Z M155.000019,1.87420073 L155.000019,10.2135275 L292.52551,89.4370934 L299.763672,85.267443 L155.000019,1.87420073 Z M10.2363665,85.267443 L17.4745931,89.4370547 L155.000019,10.2135275 L155.000019,1.87420073 L10.2363665,85.267443 Z M307.001873,97.7764332 L307.001873,264.562918 L162.237509,347.956147 L162.237509,339.617207 L299.763672,260.393228 L299.763672,101.946097 L307.001873,97.7764332 Z" id="Combined-Shape" fill="#181E37" opacity="0.6"></path>
32
+ </g>
33
+ </g>
34
+ <g mask="url(#mask-2)" id="Path">
35
+ <g transform="translate(24.8951, 59.3497)">
36
+ <path d="M12.5245535,40.2948851 L13.7348185,40.6296456 L7.23822662,44.3729435 L0,40.2033318 L4.40628169,37.6650464 C7.00449923,38.6227214 9.71474137,39.5015261 12.5245535,40.2948851 L12.5245535,40.2948851 Z" fill="#4E66C7"></path>
37
+ <path d="M4.40628169,37.6650464 L64.1519258,3.24804505 C70.4765779,2.51995209 76.6498569,1.54296687 82.6411284,0.335122373 L84.2705759,0 L13.7348185,40.6296456 L12.5245535,40.2948851 C9.71474137,39.5015261 7.00449923,38.6227214 4.40628169,37.6650464 Z" fill="url(#linearGradient-3)"></path>
38
+ </g>
39
+ </g>
40
+ <g id="Group-3" mask="url(#mask-2)">
41
+ <g transform="translate(67.0304, 301.1632) scale(1, -1) translate(-67.0304, -301.1632)translate(24.8951, 278.9767)" id="Path">
42
+ <path d="M12.5245535,40.2948851 L13.7348185,40.6296456 L7.23822662,44.3729435 L0,40.2033318 L4.40628169,37.6650464 C7.00449923,38.6227214 9.71474137,39.5015261 12.5245535,40.2948851 L12.5245535,40.2948851 Z" fill="#4E66C7"></path>
43
+ <path d="M4.40628169,37.6650464 L64.1519258,3.24804505 C70.4765779,2.51995209 76.6498569,1.54296687 82.6411284,0.335122373 L84.2705759,0 L13.7348185,40.6296456 L12.5245535,40.2948851 C9.71474137,39.5015261 7.00449923,38.6227214 4.40628169,37.6650464 Z" fill="url(#linearGradient-3)"></path>
44
+ </g>
45
+ </g>
46
+ <g id="Group-2" mask="url(#mask-2)">
47
+ <g transform="translate(272.2871, 81.5361) scale(-1, 1) translate(-272.2871, -81.5361)translate(230.1518, 59.3497)" id="Path">
48
+ <path d="M12.5245535,40.2948851 L13.7348185,40.6296456 L7.23822662,44.3729435 L0,40.2033318 L4.40628169,37.6650464 C7.00449923,38.6227214 9.71474137,39.5015261 12.5245535,40.2948851 L12.5245535,40.2948851 Z" fill="#4E66C7"></path>
49
+ <path d="M4.40628169,37.6650464 L64.1519258,3.24804505 C70.4765779,2.51995209 76.6498569,1.54296687 82.6411284,0.335122373 L84.2705759,0 L13.7348185,40.6296456 L12.5245535,40.2948851 C9.71474137,39.5015261 7.00449923,38.6227214 4.40628169,37.6650464 Z" fill="url(#linearGradient-3)"></path>
50
+ </g>
51
+ </g>
52
+ <g id="Group-4" mask="url(#mask-2)">
53
+ <g transform="translate(272.2871, 301.1632) scale(-1, -1) translate(-272.2871, -301.1632)translate(230.1518, 278.9767)" id="Path">
54
+ <path d="M12.5245535,40.2948851 L13.7348185,40.6296456 L7.23822662,44.3729435 L0,40.2033318 L4.40628169,37.6650464 C7.00449923,38.6227214 9.71474137,39.5015261 12.5245535,40.2948851 L12.5245535,40.2948851 Z" fill="#4E66C7"></path>
55
+ <path d="M4.40628169,37.6650464 L64.1519258,3.24804505 C70.4765779,2.51995209 76.6498569,1.54296687 82.6411284,0.335122373 L84.2705759,0 L13.7348185,40.6296456 L12.5245535,40.2948851 C9.71474137,39.5015261 7.00449923,38.6227214 4.40628169,37.6650464 Z" fill="url(#linearGradient-3)"></path>
56
+ </g>
57
+ </g>
58
+ </g>
59
+ </g>
60
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glassbox",
3
- "version": "0.19.0",
3
+ "version": "0.20.0-beta.1",
4
4
  "description": "A local code review tool for AI-generated code. Review diffs, annotate lines, and export structured feedback that AI tools can act on.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "scripts": {
32
32
  "dev": "npm run build:client && tsx --tsconfig tsconfig.json src/cli.ts",
33
33
  "build": "tsup",
34
- "build:client": "node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs && npx esbuild src/client/history.tsx --bundle --format=iife --outfile=dist/client/history.global.js --target=es2020 --minify --sourcemap --jsx=automatic --jsx-import-source=kerfjs && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map",
34
+ "build:client": "node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs && npx esbuild src/client/history.tsx --bundle --format=iife --outfile=dist/client/history.global.js --target=es2020 --minify --sourcemap --jsx=automatic --jsx-import-source=kerfjs && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map && node -e \"require('fs').copyFileSync('assets/favicon.svg','dist/client/favicon.svg')\"",
35
35
  "dev:server": "npm run build:client && tsx --tsconfig tsconfig.json src/cli.ts --no-open --strict-port",
36
36
  "tauri": "tauri",
37
37
  "tauri:clean": "rm -rf src-tauri/target",