From c5238debf6cded545c207251bd9637efc91d2d3c Mon Sep 17 00:00:00 2001 From: Sparsh Date: Mon, 20 Apr 2026 15:26:34 +0530 Subject: [PATCH] fix(desktop): correct packaged shell assets --- .github/workflows/desktop-packaging.yml | 7 +- CLAUDE.md | 102 +----- gitnexus-desktop/src/126312502.png | Bin 5833 -> 0 bytes gitnexus-desktop/src/main/main.ts | 17 +- gitnexus-desktop/src/renderer/src/App.tsx | 356 ------------------- gitnexus-desktop/src/renderer/src/styles.css | 22 -- 6 files changed, 20 insertions(+), 484 deletions(-) delete mode 100644 gitnexus-desktop/src/126312502.png delete mode 100644 gitnexus-desktop/src/renderer/src/App.tsx delete mode 100644 gitnexus-desktop/src/renderer/src/styles.css diff --git a/.github/workflows/desktop-packaging.yml b/.github/workflows/desktop-packaging.yml index 371973a6a..dc2279a6c 100644 --- a/.github/workflows/desktop-packaging.yml +++ b/.github/workflows/desktop-packaging.yml @@ -7,11 +7,12 @@ on: - gitnexus-desktop/** workflow_dispatch: -permissions: {} +permissions: + contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: false + cancel-in-progress: true jobs: package: @@ -75,4 +76,4 @@ jobs: name: ${{ matrix.artifact_name }} path: ${{ matrix.artifact_paths }} if-no-files-found: error - retention-days: 14 \ No newline at end of file + retention-days: 14 diff --git a/CLAUDE.md b/CLAUDE.md index 6e15782b9..04150725d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -51,104 +51,4 @@ If always-on instructions grow, load deep conventions via conditional reads (e.g ## GitNexus rules -See the ` -# GitNexus — Code Intelligence - -This project is indexed by GitNexus as **gitnexus** (18208 symbols, 25369 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. - -> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. - -## Always Do - -- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. -- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. -- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. -- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. -- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. - -## When Debugging - -1. `gitnexus_query({query: ""})` — find execution flows related to the issue -2. `gitnexus_context({name: ""})` — see all callers, callees, and process participation -3. `READ gitnexus://repo/gitnexus/process/{processName}` — trace the full execution flow step by step -4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed - -## When Refactoring - -- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`. -- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code. -- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed. - -## Never Do - -- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. -- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. -- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. -- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. - -## Tools Quick Reference - -| Tool | When to use | Command | -|------|-------------|---------| -| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` | -| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` | -| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` | -| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` | -| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` | -| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` | - -## Impact Risk Levels - -| Depth | Meaning | Action | -|-------|---------|--------| -| d=1 | WILL BREAK — direct callers/importers | MUST update these | -| d=2 | LIKELY AFFECTED — indirect deps | Should test | -| d=3 | MAY NEED TESTING — transitive | Test if critical path | - -## Resources - -| Resource | Use for | -|----------|---------| -| `gitnexus://repo/gitnexus/context` | Codebase overview, check index freshness | -| `gitnexus://repo/gitnexus/clusters` | All functional areas | -| `gitnexus://repo/gitnexus/processes` | All execution flows | -| `gitnexus://repo/gitnexus/process/{name}` | Step-by-step execution trace | - -## Self-Check Before Finishing - -Before completing any code modification task, verify: -1. `gitnexus_impact` was run for all modified symbols -2. No HIGH/CRITICAL risk warnings were ignored -3. `gitnexus_detect_changes()` confirms changes match expected scope -4. All d=1 (WILL BREAK) dependents were updated - -## Keeping the Index Fresh - -After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it: - -```bash -npx gitnexus analyze -``` - -If the index previously included embeddings, preserve them by adding `--embeddings`: - -```bash -npx gitnexus analyze --embeddings -``` - -To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.** - -> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`. - -## CLI - -| Task | Read this skill file | -|------|---------------------| -| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | -| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | -| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | -| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | -| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | -| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | - -` block in **[AGENTS.md](AGENTS.md)** for the canonical MCP tools, impact analysis rules, and index instructions. +See the canonical `gitnexus:start` … `gitnexus:end` block in [AGENTS.md](AGENTS.md). diff --git a/gitnexus-desktop/src/126312502.png b/gitnexus-desktop/src/126312502.png deleted file mode 100644 index c338812a90e97e982eb2e7b5f1f7faff6830b1c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5833 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 TCNZ { const requestUrl = request.url ?? '/'; - const requestedPath = decodeURIComponent(new URL(requestUrl, 'http://127.0.0.1').pathname); + let requestedPath: string; + + try { + requestedPath = decodeURIComponent(new URL(requestUrl, 'http://127.0.0.1').pathname); + } catch (error) { + if (error instanceof URIError) { + response.writeHead(400, { 'Content-Type': 'text/plain; charset=utf-8' }); + response.end('Bad request'); + return; + } + + throw error; + } + sendStaticResponse(normalizeStaticPath(GITNEXUS_WEB_PACKAGED_DIR, requestedPath), response); }; @@ -611,7 +624,7 @@ const loadShellRenderer = async (window: BrowserWindow): Promise => { return; } - const rendererEntry = path.join(__dirname, '../renderer/src/renderer/index.html'); + const rendererEntry = path.join(__dirname, '../renderer/index.html'); console.info(`[gitnexus-desktop] Loading shell renderer file: ${rendererEntry}`); await window.loadFile(rendererEntry); }; diff --git a/gitnexus-desktop/src/renderer/src/App.tsx b/gitnexus-desktop/src/renderer/src/App.tsx deleted file mode 100644 index e30af9a0b..000000000 --- a/gitnexus-desktop/src/renderer/src/App.tsx +++ /dev/null @@ -1,356 +0,0 @@ -import { useEffect, useState } from 'react'; - -type DesktopShellState = { - appName: string; - isAlwaysOnTop: boolean; - isMaximized: boolean; - platform: string; - titleBarHeight: number; -}; - -type DesktopApi = { - appName: string; - close: () => Promise; - getShellState: () => Promise; - minimize: () => Promise; - onWindowStateChanged: (callback: (state: DesktopShellState) => void) => () => void; - platform: string; - titleBarHeight: number; - toggleAlwaysOnTop: () => Promise; - toggleMaximize: () => Promise; -}; - -const defaultDesktopState: DesktopShellState = { - appName: 'GitNexus Desktop', - isAlwaysOnTop: false, - isMaximized: false, - platform: 'win32', - titleBarHeight: 38, -}; - -const fallbackDesktopApi: DesktopApi = { - appName: defaultDesktopState.appName, - close: async () => {}, - getShellState: async () => defaultDesktopState, - minimize: async () => defaultDesktopState, - onWindowStateChanged: () => () => {}, - platform: defaultDesktopState.platform, - titleBarHeight: defaultDesktopState.titleBarHeight, - toggleAlwaysOnTop: async () => defaultDesktopState, - toggleMaximize: async () => defaultDesktopState, -}; - -const desktopApi = - (window as Window & { gitnexusDesktop?: DesktopApi }).gitnexusDesktop ?? fallbackDesktopApi; - -const styles = ` - :root { - color-scheme: dark; - } - - .desktop-shell { - --titlebar-height: 38px; - height: 100vh; - display: grid; - grid-template-rows: var(--titlebar-height) 1fr; - background: #0d0d0d; - color: #f4f4f5; - overflow: hidden; - } - - .desktop-shell__titlebar { - display: grid; - grid-template-columns: minmax(144px, 1fr) auto minmax(144px, 1fr); - align-items: center; - gap: 12px; - height: var(--titlebar-height); - padding: 0 10px; - background: #0d0d0d; - border-bottom: 1px solid rgba(255, 255, 255, 0.06); - -webkit-app-region: drag; - user-select: none; - } - - .desktop-shell__side { - display: flex; - align-items: center; - min-width: 144px; - min-height: 100%; - } - - .desktop-shell__side--end { - justify-content: flex-end; - } - - .desktop-shell__title { - justify-self: center; - font-family: 'Segoe UI Variable', 'Segoe UI', 'SF Pro Text', system-ui, sans-serif; - font-size: 12px; - font-weight: 600; - letter-spacing: 0.06em; - color: rgba(244, 244, 245, 0.9); - white-space: nowrap; - } - - .desktop-shell__spacer { - min-width: 118px; - min-height: 1px; - } - - .desktop-shell__content { - background: #0d0d0d; - } - - .desktop-shell__content::after { - content: ''; - display: block; - width: 100%; - height: 100%; - background: #0d0d0d; - } - - .window-controls, - .traffic-lights { - display: flex; - align-items: center; - gap: 0; - -webkit-app-region: no-drag; - } - - .window-control { - width: 46px; - height: calc(var(--titlebar-height) - 8px); - border: 0; - border-radius: 8px; - background: transparent; - color: rgba(244, 244, 245, 0.88); - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: background-color 120ms ease, color 120ms ease; - } - - .window-control:hover { - background: rgba(255, 255, 255, 0.08); - } - - .window-control--close:hover { - background: #c42b1c; - color: #ffffff; - } - - .window-control svg { - width: 10px; - height: 10px; - stroke: currentColor; - stroke-width: 1.2; - fill: none; - vector-effect: non-scaling-stroke; - } - - .traffic-lights { - gap: 8px; - } - - .traffic-light { - width: 12px; - height: 12px; - padding: 0; - border: 0; - border-radius: 999px; - cursor: pointer; - transition: filter 120ms ease, transform 120ms ease; - -webkit-app-region: no-drag; - } - - .traffic-light:hover { - filter: brightness(1.04); - } - - .traffic-light--close { - background: #ff5f57; - } - - .traffic-light--minimize { - background: #febc2e; - } - - .traffic-light--maximize { - background: #28c840; - } - - @media (max-width: 720px) { - .desktop-shell__titlebar { - grid-template-columns: minmax(116px, 1fr) auto minmax(116px, 1fr); - gap: 8px; - padding: 0 8px; - } - - .desktop-shell__side { - min-width: 116px; - } - - .window-control { - width: 42px; - } - } -`; - -function MinimizeIcon() { - return ( - - ); -} - -function MaximizeIcon({ isMaximized }: { isMaximized: boolean }) { - if (isMaximized) { - return ( - - ); - } - - return ( - - ); -} - -function CloseIcon() { - return ( - - ); -} - -export default function App() { - const [shellState, setShellState] = useState({ - ...defaultDesktopState, - appName: desktopApi.appName, - platform: desktopApi.platform, - titleBarHeight: desktopApi.titleBarHeight, - }); - - useEffect(() => { - let cancelled = false; - - void desktopApi.getShellState().then((state) => { - if (!cancelled && state) { - setShellState(state); - } - }); - - const unsubscribe = desktopApi.onWindowStateChanged((state) => { - if (!cancelled) { - setShellState(state); - } - }); - - return () => { - cancelled = true; - unsubscribe(); - }; - }, []); - - const isMac = shellState.platform === 'darwin'; - const handleMinimize = async (): Promise => { - const nextState = await desktopApi.minimize(); - - if (nextState) { - setShellState(nextState); - } - }; - - const handleToggleMaximize = async (): Promise => { - const nextState = await desktopApi.toggleMaximize(); - - if (nextState) { - setShellState(nextState); - } - }; - - const handleClose = async (): Promise => { - await desktopApi.close(); - }; - - return ( - <> - -
-
-
- {isMac ? ( -
-
- ) : ( - - -
{shellState.appName}
- -
- {isMac ? ( - -
- -
-
- - ); -} diff --git a/gitnexus-desktop/src/renderer/src/styles.css b/gitnexus-desktop/src/renderer/src/styles.css deleted file mode 100644 index 73a906450..000000000 --- a/gitnexus-desktop/src/renderer/src/styles.css +++ /dev/null @@ -1,22 +0,0 @@ -html, -body, -#root { - margin: 0; - min-height: 100%; -} - -body { - min-height: 100vh; - font-family: 'Segoe UI', sans-serif; - background: #101114; - color: #f5f7fb; -} - -.app-shell { - min-height: 100vh; - display: grid; - place-items: center; - font-size: 2rem; - font-weight: 600; - letter-spacing: 0.04em; -}