From c9580f588f391649548f29eb803381ef815ddac6 Mon Sep 17 00:00:00 2001 From: hkimw <54717101+hkimw@users.noreply.github.com> Date: Wed, 6 May 2026 21:02:34 +0900 Subject: [PATCH 1/5] feat(ui): integrate pccx-UI theme and logo --- editors/vscode-prototype/README.md | 14 ++ .../vscode-prototype/assets/PCCX_UI_NOTICE.md | 11 + .../assets/logo/aperture-mark-128.png | Bin 0 -> 1383 bytes .../assets/logo/aperture-mark.svg | 7 + .../assets/logo/lockup-horizontal.svg | 13 + editors/vscode-prototype/package.json | 8 + .../test/extension-manifest.test.mjs | 41 ++++ .../pccx-systemverilog-light-color-theme.json | 230 ++++++++++++++++++ 8 files changed, 324 insertions(+) create mode 100644 editors/vscode-prototype/assets/PCCX_UI_NOTICE.md create mode 100644 editors/vscode-prototype/assets/logo/aperture-mark-128.png create mode 100644 editors/vscode-prototype/assets/logo/aperture-mark.svg create mode 100644 editors/vscode-prototype/assets/logo/lockup-horizontal.svg create mode 100644 editors/vscode-prototype/themes/pccx-systemverilog-light-color-theme.json diff --git a/editors/vscode-prototype/README.md b/editors/vscode-prototype/README.md index 5ebd2d1..574fc40 100644 --- a/editors/vscode-prototype/README.md +++ b/editors/vscode-prototype/README.md @@ -13,6 +13,12 @@ integration tests, and they run without npm install, Vivado, xsim, or hardware. A limited opt-in Extension Host runtime smoke exists for local dependency-policy review; it is not a product claim. +The package includes a copied pccx aperture-mark icon and a light +`pccx SystemVerilog Light` color theme derived from the local +`pccx-UI/Systemverilog-IDE` design-system package. These assets are +visual branding only; they do not replace the host-theme-first +presentation boundary and do not make the theme surface complete. + ## Boundary Roles `systemverilog-ide` is the editor cockpit: it owns VS Code command @@ -148,6 +154,14 @@ The contributed commands are: - `pccxSystemVerilog.showPccxLabBackendStatus` - `pccxSystemVerilog.showDiagnosticsHandoffSummary` +The contributed color theme is: + +- `pccx SystemVerilog Light` + +The extension icon is `assets/logo/aperture-mark-128.png`, with source +SVG logo assets retained under `assets/logo/`. The copied-asset notice is +tracked in `assets/PCCX_UI_NOTICE.md`. + The prototype-only settings are: - `pccxSystemVerilog.mode`, default `checkedExample` diff --git a/editors/vscode-prototype/assets/PCCX_UI_NOTICE.md b/editors/vscode-prototype/assets/PCCX_UI_NOTICE.md new file mode 100644 index 0000000..12f3486 --- /dev/null +++ b/editors/vscode-prototype/assets/PCCX_UI_NOTICE.md @@ -0,0 +1,11 @@ +# pccx-UI Asset Notice + +The logo and color theme assets under `editors/vscode-prototype/assets/` +and `editors/vscode-prototype/themes/` were derived from the local +`/home/hwkim/Desktop/pccx-UI/Systemverilog-IDE/` design-system package. + +No `LICENSE` or `NOTICE` file was present in that source package when +these assets were copied. The files are included here as pccxai project +branding and visual theme assets only. They do not change extension +runtime behavior, LSP scope, marketplace packaging, or stable API/ABI +claims. diff --git a/editors/vscode-prototype/assets/logo/aperture-mark-128.png b/editors/vscode-prototype/assets/logo/aperture-mark-128.png new file mode 100644 index 0000000000000000000000000000000000000000..75efe0db57262594cd66b2e5374c7ddd89394d78 GIT binary patch literal 1383 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&DI|LY`7$t6sR6}X7#MzmnTu$sZZAYL$MSD+081LOMupAc7|0`B<#Tp9oQgcZ0F|8wR12Xg6&ID7wd z#e-~zA|ZKR5oK<-?cC8{dF7n=gyaxXa5X>%M49^zoXYq`f!euazH!I><96G|$IS`y zU>2%f$Oe+dX5adsD*?&z2#4+Fm3Kin9_U(OB_8`lywc_fL6BluUNLR%(8t`dzj^eF z`2?gm`zQ$fIFMtYfeE#7A$Q~lUMY~J+)*EZalP!P@)004qa?^L7)S#FBNwl*qy!%~ z^OOU74<0?TZ-Nxd$-~NrDrV1|G3(0DB~_g7Ri&pgP0m@hY}xW#zt%5ZtoYmb#DYbO z7T@@}X3@giQhfY;g0nwp@NqFunLYW%DK(2 zvu4e{x^&i!U%!6+{r&5kk%^J%s!tw-i17^Pg|sRQ_F8SF`TD{5Pxh*DK5XJUE~^hv*nMjsA`?B&~jzBXsPaqFM+{-pu@3=B#Pu18hxY3pjMGhEkN_j*rwq^ev% z<>O@sv#*+NH~aDUz}s8a_w-FAx{orKu*sXZUcYkpFb#`wLC5j-@bgF?B17emBTN7;s5es zb@_E$4Y>!K7et<5X=rH>`Yo{b;lx0u59M#(p5x{!H_a1e(U`Fz=#szRUgc|(_Wn0m zyFAVG*XQ`n8~S_1x4ygj@V^7&frIQP>^)h2*ce+s&!~II&G=*0%;$b*^t4p(rB2=; z^5%CBLjqsKw%Wz1!Rrm~Wqz&w%D(pM)-?@$9vrew{}`9Q6Wn~8omUCuTu)a&mvv4F FO#n&S`uP9= literal 0 HcmV?d00001 diff --git a/editors/vscode-prototype/assets/logo/aperture-mark.svg b/editors/vscode-prototype/assets/logo/aperture-mark.svg new file mode 100644 index 0000000..69b0312 --- /dev/null +++ b/editors/vscode-prototype/assets/logo/aperture-mark.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/editors/vscode-prototype/assets/logo/lockup-horizontal.svg b/editors/vscode-prototype/assets/logo/lockup-horizontal.svg new file mode 100644 index 0000000..bc10eae --- /dev/null +++ b/editors/vscode-prototype/assets/logo/lockup-horizontal.svg @@ -0,0 +1,13 @@ + + + + + + + + + + pccx + + + \ No newline at end of file diff --git a/editors/vscode-prototype/package.json b/editors/vscode-prototype/package.json index b9e0650..b1087bb 100644 --- a/editors/vscode-prototype/package.json +++ b/editors/vscode-prototype/package.json @@ -6,6 +6,7 @@ "private": true, "type": "module", "main": "./src/extension.cjs", + "icon": "assets/logo/aperture-mark-128.png", "engines": { "vscode": "^1.90.0" }, @@ -127,6 +128,13 @@ "title": "PCCX SystemVerilog: Show Diagnostics Handoff Summary (Experimental)" } ], + "themes": [ + { + "label": "pccx SystemVerilog Light", + "uiTheme": "vs", + "path": "./themes/pccx-systemverilog-light-color-theme.json" + } + ], "configuration": { "title": "PCCX SystemVerilog IDE Prototype", "properties": { diff --git a/editors/vscode-prototype/test/extension-manifest.test.mjs b/editors/vscode-prototype/test/extension-manifest.test.mjs index 7959d4c..8192777 100644 --- a/editors/vscode-prototype/test/extension-manifest.test.mjs +++ b/editors/vscode-prototype/test/extension-manifest.test.mjs @@ -37,6 +37,10 @@ async function readText(path) { return readFile(path, "utf8"); } +async function readBytes(path) { + return readFile(path); +} + async function readPackageJson() { return JSON.parse(await readText(resolve(EXTENSION_ROOT, "package.json"))); } @@ -67,6 +71,7 @@ async function testPackageManifestShape() { assert.doesNotMatch(manifest.description, /marketplace/i); assert.ok(manifest.engines?.vscode); assert.equal(manifest.main, "./src/extension.cjs"); + assert.equal(manifest.icon, "assets/logo/aperture-mark-128.png"); } async function testNoMarketplacePublishingShape() { @@ -108,6 +113,41 @@ async function testCommandContributions() { assert.equal(contributedCommands.size, COMMAND_IDS.length); } +async function testVisualAssetContributions() { + const manifest = await readPackageJson(); + const themes = manifest.contributes?.themes ?? []; + + assert.deepEqual(themes, [ + { + label: "pccx SystemVerilog Light", + uiTheme: "vs", + path: "./themes/pccx-systemverilog-light-color-theme.json", + }, + ]); + + const icon = await readBytes(resolve(EXTENSION_ROOT, manifest.icon)); + assert.ok(icon.length > 0); + + const mark = await readText(resolve(EXTENSION_ROOT, "assets/logo/aperture-mark.svg")); + assert.match(mark, /#0b5fff/); + assert.match(mark, /#0e1320/); + + const theme = JSON.parse(await readText(resolve( + EXTENSION_ROOT, + "themes/pccx-systemverilog-light-color-theme.json", + ))); + assert.equal(theme.type, "light"); + assert.equal(theme.colors["editor.background"], "#ffffff"); + assert.equal(theme.colors["editor.foreground"], "#0e1320"); + assert.equal(theme.colors["button.background"], "#0b5fff"); + assert.ok(theme.tokenColors.some((token) => ( + token.name === "Keywords" && token.settings?.foreground === "#7c3aed" + ))); + assert.ok(theme.tokenColors.some((token) => ( + token.name === "Types" && token.settings?.foreground === "#0d9488" + ))); +} + async function testDocsKeepExperimentalScope() { const readme = await readText(resolve(EXTENSION_ROOT, "README.md")); const contract = await readText(resolve(ROOT, "docs/EDITOR_BRIDGE_CONTRACT.md")); @@ -146,6 +186,7 @@ async function testDocsKeepExperimentalScope() { await testPackageManifestShape(); await testNoMarketplacePublishingShape(); await testCommandContributions(); +await testVisualAssetContributions(); await testDocsKeepExperimentalScope(); console.log("vscode extension manifest tests ok"); diff --git a/editors/vscode-prototype/themes/pccx-systemverilog-light-color-theme.json b/editors/vscode-prototype/themes/pccx-systemverilog-light-color-theme.json new file mode 100644 index 0000000..8c7837d --- /dev/null +++ b/editors/vscode-prototype/themes/pccx-systemverilog-light-color-theme.json @@ -0,0 +1,230 @@ +{ + "name": "pccx SystemVerilog Light", + "type": "light", + "semanticHighlighting": true, + "colors": { + "activityBar.background": "#ffffff", + "activityBar.foreground": "#0e1320", + "activityBar.inactiveForeground": "#6b7280", + "activityBar.border": "#e5e7eb", + "activityBarBadge.background": "#0b5fff", + "activityBarBadge.foreground": "#ffffff", + "badge.background": "#eef2ff", + "badge.foreground": "#0e1320", + "button.background": "#0b5fff", + "button.foreground": "#ffffff", + "button.hoverBackground": "#0a52df", + "checkbox.background": "#ffffff", + "checkbox.border": "#d1d5db", + "checkbox.foreground": "#0b5fff", + "commandCenter.background": "#ffffff", + "commandCenter.border": "#e5e7eb", + "commandCenter.foreground": "#0e1320", + "commandCenter.inactiveForeground": "#6b7280", + "debugToolBar.background": "#ffffff", + "debugToolBar.border": "#e5e7eb", + "descriptionForeground": "#6b7280", + "dropdown.background": "#ffffff", + "dropdown.border": "#d1d5db", + "dropdown.foreground": "#0e1320", + "editor.background": "#ffffff", + "editor.foreground": "#0e1320", + "editor.findMatchBackground": "#fef3c7", + "editor.findMatchBorder": "#d97706", + "editor.findMatchHighlightBackground": "#eef2ff", + "editor.lineHighlightBackground": "#f9fafb", + "editor.selectionBackground": "#eef2ff", + "editor.selectionHighlightBackground": "#f3f4f6", + "editor.wordHighlightBackground": "#f3f4f6", + "editorBracketMatch.background": "#eef2ff", + "editorBracketMatch.border": "#0b5fff", + "editorCursor.foreground": "#0b5fff", + "editorError.foreground": "#dc2626", + "editorGutter.addedBackground": "#16a34a", + "editorGutter.background": "#ffffff", + "editorGutter.deletedBackground": "#dc2626", + "editorGutter.modifiedBackground": "#0b5fff", + "editorIndentGuide.activeBackground1": "#d1d5db", + "editorIndentGuide.background1": "#e5e7eb", + "editorInfo.foreground": "#0b5fff", + "editorLineNumber.activeForeground": "#0e1320", + "editorLineNumber.foreground": "#6b7280", + "editorRuler.foreground": "#e5e7eb", + "editorWarning.foreground": "#d97706", + "editorWidget.background": "#ffffff", + "editorWidget.border": "#e5e7eb", + "errorForeground": "#dc2626", + "focusBorder": "#0b5fff", + "foreground": "#0e1320", + "input.background": "#ffffff", + "input.border": "#d1d5db", + "input.foreground": "#0e1320", + "input.placeholderForeground": "#6b7280", + "inputOption.activeBackground": "#eef2ff", + "inputOption.activeBorder": "#0b5fff", + "list.activeSelectionBackground": "#eef2ff", + "list.activeSelectionForeground": "#0e1320", + "list.focusBackground": "#eef2ff", + "list.highlightForeground": "#0b5fff", + "list.hoverBackground": "#f3f4f6", + "list.inactiveSelectionBackground": "#f3f4f6", + "notificationCenter.border": "#e5e7eb", + "notifications.background": "#ffffff", + "notifications.border": "#e5e7eb", + "notifications.foreground": "#0e1320", + "panel.background": "#ffffff", + "panel.border": "#e5e7eb", + "panelTitle.activeBorder": "#0b5fff", + "panelTitle.activeForeground": "#0e1320", + "panelTitle.inactiveForeground": "#6b7280", + "peekView.border": "#e5e7eb", + "peekViewEditor.background": "#ffffff", + "peekViewResult.background": "#ffffff", + "peekViewResult.selectionBackground": "#eef2ff", + "pickerGroup.border": "#e5e7eb", + "pickerGroup.foreground": "#6b7280", + "progressBar.background": "#0b5fff", + "quickInput.background": "#ffffff", + "quickInput.foreground": "#0e1320", + "quickInputList.focusBackground": "#eef2ff", + "scrollbar.shadow": "#00000000", + "scrollbarSlider.activeBackground": "#9ca3af", + "scrollbarSlider.background": "#d1d5db", + "scrollbarSlider.hoverBackground": "#9ca3af", + "sideBar.background": "#ffffff", + "sideBar.border": "#e5e7eb", + "sideBar.foreground": "#0e1320", + "sideBarSectionHeader.background": "#ffffff", + "sideBarSectionHeader.border": "#e5e7eb", + "sideBarSectionHeader.foreground": "#0e1320", + "sideBarTitle.foreground": "#0e1320", + "statusBar.background": "#ffffff", + "statusBar.border": "#e5e7eb", + "statusBar.debuggingBackground": "#eef2ff", + "statusBar.debuggingForeground": "#0e1320", + "statusBar.foreground": "#0e1320", + "statusBar.noFolderBackground": "#ffffff", + "statusBar.noFolderForeground": "#0e1320", + "statusBarItem.hoverBackground": "#f3f4f6", + "statusBarItem.prominentBackground": "#0b5fff", + "statusBarItem.prominentForeground": "#ffffff", + "tab.activeBackground": "#ffffff", + "tab.activeBorderTop": "#0b5fff", + "tab.activeForeground": "#0e1320", + "tab.border": "#e5e7eb", + "tab.hoverBackground": "#f3f4f6", + "tab.inactiveBackground": "#f9fafb", + "tab.inactiveForeground": "#6b7280", + "terminal.ansiBlack": "#0e1320", + "terminal.ansiBlue": "#0b5fff", + "terminal.ansiBrightBlack": "#6b7280", + "terminal.ansiBrightBlue": "#0b5fff", + "terminal.ansiBrightCyan": "#0d9488", + "terminal.ansiBrightGreen": "#16a34a", + "terminal.ansiBrightMagenta": "#7c3aed", + "terminal.ansiBrightRed": "#dc2626", + "terminal.ansiBrightWhite": "#ffffff", + "terminal.ansiBrightYellow": "#d97706", + "terminal.ansiCyan": "#0d9488", + "terminal.ansiGreen": "#16a34a", + "terminal.ansiMagenta": "#7c3aed", + "terminal.ansiRed": "#dc2626", + "terminal.ansiWhite": "#ffffff", + "terminal.ansiYellow": "#d97706", + "terminal.background": "#ffffff", + "terminal.foreground": "#0e1320", + "textBlockQuote.background": "#f9fafb", + "textBlockQuote.border": "#e5e7eb", + "textCodeBlock.background": "#f9fafb", + "textLink.activeForeground": "#0a52df", + "textLink.foreground": "#0b5fff", + "titleBar.activeBackground": "#ffffff", + "titleBar.activeForeground": "#0e1320", + "titleBar.border": "#e5e7eb", + "titleBar.inactiveBackground": "#ffffff", + "titleBar.inactiveForeground": "#6b7280" + }, + "tokenColors": [ + { + "name": "Comments", + "scope": [ + "comment", + "punctuation.definition.comment" + ], + "settings": { + "foreground": "#6b7280" + } + }, + { + "name": "Keywords", + "scope": [ + "keyword", + "storage.type", + "storage.modifier", + "constant.language" + ], + "settings": { + "foreground": "#7c3aed" + } + }, + { + "name": "Types", + "scope": [ + "entity.name.type", + "support.type", + "support.class", + "variable.language.this" + ], + "settings": { + "foreground": "#0d9488" + } + }, + { + "name": "Identifiers", + "scope": [ + "entity.name.function", + "entity.name.module", + "entity.name.tag", + "variable.other.readwrite", + "variable.parameter" + ], + "settings": { + "foreground": "#0b5fff" + } + }, + { + "name": "Literals", + "scope": [ + "constant.numeric", + "constant.other", + "string", + "string.quoted" + ], + "settings": { + "foreground": "#d97706" + } + }, + { + "name": "Diagnostics And Invalid", + "scope": [ + "invalid", + "invalid.illegal", + "invalid.deprecated" + ], + "settings": { + "foreground": "#dc2626" + } + }, + { + "name": "Source Default", + "scope": [ + "source", + "punctuation", + "meta" + ], + "settings": { + "foreground": "#0e1320" + } + } + ] +} From 480167edacf4fe54f06bb99fc27756ab6fb699ee Mon Sep 17 00:00:00 2001 From: Hyunwoo Kim Date: Thu, 21 May 2026 02:53:12 +0900 Subject: [PATCH 2/5] docs(orient): repo orientation (#143) --- README.md | 3 ++ docs/WORKSPACE_ORIENTATION.md | 95 +++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 docs/WORKSPACE_ORIENTATION.md diff --git a/README.md b/README.md index 566e284..c194fa5 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ in [`docs/PROJECT_DIRECTION_AND_STYLE.md`](./docs/PROJECT_DIRECTION_AND_STYLE.md New code files and changed legacy code files are expected to carry the repository SPDX/Copyright header. +A one-page contributor orientation is available in +[`docs/WORKSPACE_ORIENTATION.md`](./docs/WORKSPACE_ORIENTATION.md). + The initial Now / Next / Later roadmap is tracked in [`docs/ROADMAP.md`](./docs/ROADMAP.md). The SystemVerilog workflow boundary is tracked in diff --git a/docs/WORKSPACE_ORIENTATION.md b/docs/WORKSPACE_ORIENTATION.md new file mode 100644 index 0000000..4881440 --- /dev/null +++ b/docs/WORKSPACE_ORIENTATION.md @@ -0,0 +1,95 @@ +# Workspace Orientation + +This repository is the SystemVerilog IDE spin-out from `pccx-lab`. Its +near-term job is to provide editor-facing surfaces over controlled CLI and +data contracts: diagnostics, declaration navigation, module organization +views, checked examples, local VS Code prototype commands, and bounded +status/context summaries. + +The repo is intentionally data-boundary-first. Reusable analysis and +verification behavior belongs behind the `pccx-lab` CLI/core boundary. +Launcher, provider, hardware, marketplace, telemetry, upload, release, +and write-back paths are outside this repository unless a later reviewed +boundary explicitly adds them. + +## Top-Level Map + +| Path | Role | +|---|---| +| `src/pccx_ide_cli/` | Python CLI facade and scanner-based data exporters. | +| `tests/` | Pytest coverage for CLI contracts, schema shape, fixtures, and repository hygiene. | +| `fixtures/` | Small SystemVerilog and log inputs used by CLI tests and examples. | +| `schema/diagnostics-v0.json` | Current diagnostics envelope schema consumed by tests and examples. | +| `docs/` | Direction, handoff, workflow, editor bridge, and module organization docs. | +| `docs/examples/` | Checked JSON examples for editor bridge and handoff consumers. | +| `editors/vscode-prototype/` | Experimental local VS Code extension scaffold and command facade. | +| `scripts/` | Smoke checks and source-header policy guard. | + +## Main Entry Points + +- `python3 -m pccx_ide_cli check ` emits the diagnostics envelope + from the local scaffold or, when explicitly selected, the `pccx-lab` + backend. +- `python3 -m pccx_ide_cli index ` and + `python3 -m pccx_ide_cli locate ` provide early + scanner-based declaration data for editor navigation. +- `python3 -m pccx_ide_cli organization ` plus the related + hierarchy, dependency, module-health, module-context, and refactor + proposal commands provide read-only module organization data. +- `python3 -m pccx_ide_cli xsim-log ` and + `python3 -m pccx_ide_cli problems ...` transform existing local + diagnostics/log data into editor-friendly problem records. +- `node editors/vscode-prototype/bin/pccx-vscode-prototype.mjs ...` + exercises the VS Code prototype translation layer in checked-example or + explicit live mode. + +## Development Loop + +Use the Python package from the repository root: + +```bash +python3 -m pccx_ide_cli check fixtures/missing_endmodule.sv +python3 -m pccx_ide_cli index fixtures/modules/ --format text +python3 -m pccx_ide_cli module-health fixtures/organization/hierarchy_top.sv --format json +``` + +Run the default checks: + +```bash +python3 -m pytest -q +bash scripts/editor-bridge-smoke.sh +bash scripts/vscode-adapter-smoke.sh +python3 scripts/check-source-headers.py +``` + +The VS Code prototype tests live under `editors/vscode-prototype/test/` +and are Node-based. They are mostly static/mock tests and checked-example +tests; the Extension Host smoke is a guarded local runtime smoke, not a +product claim. + +## Boundary Rules To Preserve + +- Keep the IDE as an editor cockpit over data contracts and controlled + command shapes. +- Do not duplicate reusable `pccx-lab` analysis logic in this repo. +- Do not add launcher execution, provider calls, KV260 runtime access, + raw shell command strings, background workspace scanning, telemetry, + upload, release, or write-back behavior. +- Keep live workspace behavior explicit and opt-in. +- Keep adapter outputs deterministic, bounded, and testable. +- Treat CLI/editor payloads as pre-stable unless their owning contract + says otherwise. + +## Where To Read Next + +- [`PROJECT_DIRECTION_AND_STYLE.md`](./PROJECT_DIRECTION_AND_STYLE.md) + pins current direction, safety boundaries, and style policy. +- [`EDITOR_BRIDGE_CONTRACT.md`](./EDITOR_BRIDGE_CONTRACT.md) describes + the external editor bridge payloads. +- [`MODULE_ORGANIZATION_WORKFLOW.md`](./MODULE_ORGANIZATION_WORKFLOW.md) + documents scanner-based hierarchy, dependency, and proposal-only + refactor planning data. +- [`HANDOFF.md`](./HANDOFF.md) tracks integration boundaries with + `pccx-lab`, launcher handoff examples, and read-only status surfaces. +- [`../editors/vscode-prototype/README.md`](../editors/vscode-prototype/README.md) + explains the local VS Code extension scaffold and command facade. From cfd36b1b45456bd44f75e7482e26fc3070103bb6 Mon Sep 17 00:00:00 2001 From: Hyunwoo Kim Date: Thu, 21 May 2026 02:53:17 +0900 Subject: [PATCH 3/5] docs(oss): open-source components disclosure (#142) --- README.md | 3 ++ docs/OPEN_SOURCE_COMPONENTS.md | 79 ++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 docs/OPEN_SOURCE_COMPONENTS.md diff --git a/README.md b/README.md index c194fa5..5b50575 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,9 @@ The later-track external editor integration plan is tracked in [`docs/EXTERNAL_EDITOR_INTEGRATION_PLAN.md`](./docs/EXTERNAL_EDITOR_INTEGRATION_PLAN.md). The module organization workflow is tracked in [`docs/MODULE_ORGANIZATION_WORKFLOW.md`](./docs/MODULE_ORGANIZATION_WORKFLOW.md). +Open-source component disclosure for the npm and Python dependency +manifests is tracked in +[`docs/OPEN_SOURCE_COMPONENTS.md`](./docs/OPEN_SOURCE_COMPONENTS.md). ## Integration model diff --git a/docs/OPEN_SOURCE_COMPONENTS.md b/docs/OPEN_SOURCE_COMPONENTS.md new file mode 100644 index 0000000..4b7ca70 --- /dev/null +++ b/docs/OPEN_SOURCE_COMPONENTS.md @@ -0,0 +1,79 @@ +# Open-source components + +This repository keeps the IDE surface pre-stable and dependency-light. +The component list below is derived from committed dependency manifests +only; it does not use environment inspection. + +## Sources + +| Ecosystem | Source file | Scope | +|---|---|---| +| npm | `editors/vscode-prototype/package.json` | Declared VS Code prototype dependencies | +| npm | `editors/vscode-prototype/package-lock.json` | Resolved VS Code prototype dependency tree | +| Python | `pyproject.toml` | Build, runtime, and optional test dependencies | + +## npm components + +The VS Code prototype declares no runtime npm dependencies. Its test +tooling dependency is listed below with the resolved lockfile tree. + +| Component | Version | Scope | License in lockfile | +|---|---:|---|---| +| `@vscode/test-electron` | 2.5.2 | direct dev dependency | MIT | +| `agent-base` | 7.1.4 | transitive dev dependency | MIT | +| `ansi-regex` | 6.2.2 | transitive dev dependency | MIT | +| `chalk` | 5.6.2 | transitive dev dependency | MIT | +| `cli-cursor` | 5.0.0 | transitive dev dependency | MIT | +| `cli-spinners` | 2.9.2 | transitive dev dependency | MIT | +| `core-util-is` | 1.0.3 | transitive dev dependency | MIT | +| `debug` | 4.4.3 | transitive dev dependency | MIT | +| `emoji-regex` | 10.6.0 | transitive dev dependency | MIT | +| `get-east-asian-width` | 1.5.0 | transitive dev dependency | MIT | +| `http-proxy-agent` | 7.0.2 | transitive dev dependency | MIT | +| `https-proxy-agent` | 7.0.6 | transitive dev dependency | MIT | +| `immediate` | 3.0.6 | transitive dev dependency | MIT | +| `inherits` | 2.0.4 | transitive dev dependency | ISC | +| `is-interactive` | 2.0.0 | transitive dev dependency | MIT | +| `is-unicode-supported` | 2.1.0 | transitive dev dependency | MIT | +| `isarray` | 1.0.0 | transitive dev dependency | MIT | +| `jszip` | 3.10.1 | transitive dev dependency | MIT OR GPL-3.0-or-later | +| `lie` | 3.3.0 | transitive dev dependency | MIT | +| `log-symbols` | 6.0.0 | transitive dev dependency | MIT | +| `log-symbols/node_modules/is-unicode-supported` | 1.3.0 | transitive dev dependency | MIT | +| `mimic-function` | 5.0.1 | transitive dev dependency | MIT | +| `ms` | 2.1.3 | transitive dev dependency | MIT | +| `onetime` | 7.0.0 | transitive dev dependency | MIT | +| `ora` | 8.2.0 | transitive dev dependency | MIT | +| `pako` | 1.0.11 | transitive dev dependency | MIT AND Zlib | +| `process-nextick-args` | 2.0.1 | transitive dev dependency | MIT | +| `readable-stream` | 2.3.8 | transitive dev dependency | MIT | +| `restore-cursor` | 5.1.0 | transitive dev dependency | MIT | +| `safe-buffer` | 5.1.2 | transitive dev dependency | MIT | +| `semver` | 7.7.4 | transitive dev dependency | ISC | +| `setimmediate` | 1.0.5 | transitive dev dependency | MIT | +| `signal-exit` | 4.1.0 | transitive dev dependency | ISC | +| `stdin-discarder` | 0.2.2 | transitive dev dependency | MIT | +| `string_decoder` | 1.1.1 | transitive dev dependency | MIT | +| `string-width` | 7.2.0 | transitive dev dependency | MIT | +| `strip-ansi` | 7.2.0 | transitive dev dependency | MIT | +| `util-deprecate` | 1.0.2 | transitive dev dependency | MIT | + +## Python components + +Python dependencies are declared in `pyproject.toml`. The repository does +not currently commit a Python lockfile, so this table lists the static +declared requirements rather than resolved transitive packages. + +| Component | Version specifier | Scope | +|---|---|---| +| `hatchling` | any version accepted by the build frontend | build backend | +| `jsonschema` | `>=4` | runtime dependency | +| `pytest` | any version accepted by the installer | optional `test` extra | + +## Notes + +- The repository package itself is licensed under the `LICENSE` file. +- The npm license column is copied from the committed lockfile. +- Python dependency license metadata is not declared in `pyproject.toml`; + verify it from the package artifacts selected by the installer when + preparing a release artifact. From 257dd63ea471c5308efd02e025c5f3e64e2a4884 Mon Sep 17 00:00:00 2001 From: Hyunwoo Kim Date: Thu, 21 May 2026 02:53:35 +0900 Subject: [PATCH 4/5] docs(examples): typical use (#137) --- editors/vscode-prototype/README.md | 4 + .../docs/typical-first-time-use.md | 141 ++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 editors/vscode-prototype/docs/typical-first-time-use.md diff --git a/editors/vscode-prototype/README.md b/editors/vscode-prototype/README.md index 574fc40..173a452 100644 --- a/editors/vscode-prototype/README.md +++ b/editors/vscode-prototype/README.md @@ -19,6 +19,10 @@ The package includes a copied pccx aperture-mark icon and a light visual branding only; they do not replace the host-theme-first presentation boundary and do not make the theme surface complete. +A text-only first-use walkthrough for the command palette, Problems/Output +panels, and current status-bar boundary is tracked in +[`docs/typical-first-time-use.md`](./docs/typical-first-time-use.md). + ## Boundary Roles `systemverilog-ide` is the editor cockpit: it owns VS Code command diff --git a/editors/vscode-prototype/docs/typical-first-time-use.md b/editors/vscode-prototype/docs/typical-first-time-use.md new file mode 100644 index 0000000..d1327ed --- /dev/null +++ b/editors/vscode-prototype/docs/typical-first-time-use.md @@ -0,0 +1,141 @@ +# Typical First-Time Use + +This page describes a typical first run of the experimental local VS Code +prototype. It is text-only documentation: no real screenshots are captured, +checked in, or required for this flow. + +The prototype is not published, not LSP, and not a stable API. First-time +use should start with checked-example commands because they exercise the +presentation boundary without scanning a user workspace or running arbitrary +commands. + +## Starting Point + +Open the repository in a VS Code Extension Development Host with the prototype +extension active. The default mode is `checkedExample`, so the command +palette examples use checked fixture data unless live workspace mode is +explicitly enabled. + +Expected initial surfaces: + +- Command Palette entries prefixed with `PCCX SystemVerilog:`. +- Problems panel entries after publishing diagnostics. +- Output panel channel named `PCCX SystemVerilog IDE Prototype`. +- Output panel channel named `PCCX SystemVerilog Validation Results` after + validation-result commands are used. +- No persistent PCCX status-bar item yet. + +## Command Palette + +The command palette is the primary first-use entry point. A typical first +pass is: + +```text +Command Palette +> PCCX SystemVerilog: Publish Checked Example Diagnostics (Experimental) +> PCCX SystemVerilog: Show Checked Example Navigation (Experimental) +> PCCX SystemVerilog: Show Local Workflow Status (Experimental) +> PCCX SystemVerilog: Show pccx-lab Backend Status (Experimental) +``` + +`Publish Checked Example Diagnostics` publishes the checked +`check-missing-endmodule` fixture as VS Code diagnostics. The user-facing +result is a VS Code notification plus diagnostics in the Problems panel. + +`Show Checked Example Navigation` opens a Quick Pick titled +`PCCX SystemVerilog Navigation`. The listed items come from checked +declaration fixture data and preserve kind, name, file, line, and column. + +`Show Local Workflow Status` writes a bounded local status summary to the +prototype output channel. It reports mode, live-workspace opt-in state, +validation runner state, recent validation cache status, pccx-lab descriptor +state, fixture-backed launcher state, and read-only handoff/readiness +summaries. + +`Show pccx-lab Backend Status` is status-only. It reports the configured +future pccx-lab command boundary and does not execute pccx-lab. + +## Panel View + +The first panel to check is VS Code's Problems panel. After the checked +diagnostics command runs, it should show the fixture diagnostic for +`fixtures/missing_endmodule.sv`. + +```text +Problems +fixtures/missing_endmodule.sv + error PCCX-SCAFFOLD-003 module declared but no matching endmodule found +``` + +The second panel to check is the Output panel. Select +`PCCX SystemVerilog IDE Prototype` from the output channel picker. +Command results are appended there as bounded JSON or formatted status text, +depending on the command. + +```text +Output: PCCX SystemVerilog IDE Prototype +Local Workflow Status +extensionMode: checkedExample +liveWorkspaceEnabled: no +validationRunner: disabled (disabled) +... +safety: no provider calls, no launcher calls, no pccx-lab execution, no FPGA repo access, no KV260 runtime +``` + +Validation runner output, when explicitly enabled and invoked through an +allowlisted proposal, uses the separate +`PCCX SystemVerilog Validation Results` output channel. The default first-use +path does not require enabling validation execution. + +## Status Bar + +The current prototype does not contribute a persistent status-bar item. For +first-time use, status is surfaced through command palette commands, +notifications, the Problems panel, and the Output panel. + +This is intentional for the current boundary: status commands are explicit, +bounded, and data-only. A future status-bar surface should mirror the same +bounded summaries and must not imply provider calls, launcher execution, +pccx-lab execution, FPGA access, KV260 runtime execution, LSP support, +marketplace packaging, telemetry, automatic upload, or write-back behavior. + +## Live Workspace Opt-In + +After the checked-example path is understood, live workspace mode can be +tested explicitly. It requires both settings: + +```text +pccxSystemVerilog.mode = liveWorkspace +pccxSystemVerilog.liveWorkspace.enabled = true +``` + +Then use: + +```text +Command Palette +> PCCX SystemVerilog: Publish Live Workspace Diagnostics (Experimental, Opt-In) +> PCCX SystemVerilog: Show Live Workspace Navigation (Experimental, Opt-In) +``` + +Live workspace commands use known facade argument arrays only. They do not +silently fall back to checked examples, do not start background scanning, do +not add file watchers, do not check on save, and do not accept raw shell +commands. + +## Text-Only Capture Checklist + +Use this checklist when documenting or reviewing first-use behavior without +real screenshots: + +- Command palette: command names are visible and use the contributed titles. +- Problems panel: checked diagnostics appear after the checked diagnostics + command. +- Output panel: local workflow and backend status commands append bounded + summaries to `PCCX SystemVerilog IDE Prototype`. +- Validation output: validation-result commands use + `PCCX SystemVerilog Validation Results`. +- Status bar: no persistent PCCX status-bar item is expected in the current + prototype. +- Safety boundary: the first-use path does not execute pccx-lab, call a + launcher, call provider/runtime services, access FPGA hardware, upload + telemetry, or write back to the workspace. From 9a97cc7d514049f6df0d65aea6d6921119223170 Mon Sep 17 00:00:00 2001 From: Hyunwoo Kim Date: Thu, 21 May 2026 02:53:49 +0900 Subject: [PATCH 5/5] feat(theme): dark variant (#132) * feat(theme): add dark SystemVerilog variant * docs(theme): consistency rules (#140) --- editors/vscode-prototype/README.md | 12 +- .../docs/theme-consistency.md | 97 ++++++++ editors/vscode-prototype/package.json | 5 + .../test/extension-manifest.test.mjs | 20 ++ .../pccx-systemverilog-dark-color-theme.json | 230 ++++++++++++++++++ 5 files changed, 360 insertions(+), 4 deletions(-) create mode 100644 editors/vscode-prototype/docs/theme-consistency.md create mode 100644 editors/vscode-prototype/themes/pccx-systemverilog-dark-color-theme.json diff --git a/editors/vscode-prototype/README.md b/editors/vscode-prototype/README.md index 173a452..e104ea8 100644 --- a/editors/vscode-prototype/README.md +++ b/editors/vscode-prototype/README.md @@ -13,9 +13,9 @@ integration tests, and they run without npm install, Vivado, xsim, or hardware. A limited opt-in Extension Host runtime smoke exists for local dependency-policy review; it is not a product claim. -The package includes a copied pccx aperture-mark icon and a light -`pccx SystemVerilog Light` color theme derived from the local -`pccx-UI/Systemverilog-IDE` design-system package. These assets are +The package includes a copied pccx aperture-mark icon and +`pccx SystemVerilog Light` / `pccx SystemVerilog Dark` color themes derived +from the local `pccx-UI/Systemverilog-IDE` design-system package. These assets are visual branding only; they do not replace the host-theme-first presentation boundary and do not make the theme surface complete. @@ -158,9 +158,13 @@ The contributed commands are: - `pccxSystemVerilog.showPccxLabBackendStatus` - `pccxSystemVerilog.showDiagnosticsHandoffSummary` -The contributed color theme is: +The contributed color themes are: - `pccx SystemVerilog Light` +- `pccx SystemVerilog Dark` + +Light/dark maintenance expectations are documented in +[`docs/theme-consistency.md`](./docs/theme-consistency.md). The extension icon is `assets/logo/aperture-mark-128.png`, with source SVG logo assets retained under `assets/logo/`. The copied-asset notice is diff --git a/editors/vscode-prototype/docs/theme-consistency.md b/editors/vscode-prototype/docs/theme-consistency.md new file mode 100644 index 0000000..c26b9e1 --- /dev/null +++ b/editors/vscode-prototype/docs/theme-consistency.md @@ -0,0 +1,97 @@ +# Theme Consistency Rules + +The VS Code prototype contributes paired local themes: +`pccx SystemVerilog Light` and `pccx SystemVerilog Dark`. The light theme +comes from the pccx-UI integration work and the dark theme is its follow-up +variant. Keep them reviewed as one pair so the dark theme stays a contrast +variant of the same SystemVerilog editor surface, not a separate design +system. + +This document is a maintenance rule set for: + +- `../themes/pccx-systemverilog-light-color-theme.json` +- `../themes/pccx-systemverilog-dark-color-theme.json` +- the `contributes.themes` entries in `../package.json` + +It does not make the prototype marketplace-ready, LSP-backed, or a complete +custom theme engine. The presentation policy remains host-theme-first for +runtime UI records and future webview-like surfaces. + +## Pairing Rules + +- Both theme files must keep `semanticHighlighting: true`. +- Both theme files must keep the same top-level shape: `name`, `type`, + `semanticHighlighting`, `colors`, and `tokenColors`. +- `package.json` must contribute both themes together. The light entry uses + `uiTheme: "vs"` and the dark entry uses `uiTheme: "vs-dark"`. +- The `colors` maps should keep the same VS Code color keys unless a key is + demonstrably unavailable or inappropriate for one theme. Any exception + should be documented in this file or the adjacent review notes. +- The `tokenColors` arrays must keep the same bucket names, bucket order, and + scope lists. Only foreground values should differ between light and dark. +- Shared SystemVerilog token buckets are comments, keywords, types, + identifiers, literals, diagnostics/invalid tokens, and source default. +- Shared workbench surface groups are activity bar, title bar, command center, + editor, gutter, side bar, list, panel, tabs, status bar, notifications, + quick input, terminal, and text links. + +## Shared Semantic Roles + +Use the same semantic role when choosing different light and dark values. + +| Role | Light rule | Dark rule | +| --- | --- | --- | +| Primary pccx action/accent | Use `#0b5fff` for primary action and focus surfaces. | Keep `#0b5fff` for the same structural accent surfaces. | +| Editor foreground/background | Dark text on white or near-white editor surfaces. | Light text on near-black editor surfaces. | +| Muted text | Lower-contrast gray that remains readable on light surfaces. | Higher-luminance gray that remains readable on dark surfaces. | +| Selection/focus fill | Low-saturation blue fill that does not obscure syntax. | Deeper blue fill with enough contrast from the editor shell. | +| Hover/secondary fill | Neutral gray fill distinct from the editor background. | Near-black or slate fill distinct from the editor background. | +| Error/deleted | Red role for diagnostics and deletion. | Brighter red role for diagnostics and deletion. | +| Warning/literals | Amber role for warnings and literal-like tokens. | Brighter amber role for warnings and literal-like tokens. | +| Info/identifier | Blue role for information and identifier-like tokens. | Brighter blue role for information and identifier-like tokens. | +| Added | Green role for additions. | Brighter green role for additions. | + +The shared accent `#0b5fff` is expected on paired structural surfaces such as +buttons, focus borders, progress bars, modified gutters, activity badges, tab +active borders, panel active borders, and prominent status bar items. A dark +theme may use a brighter related value for hover text, links, cursor, or syntax +when contrast requires it. + +## Allowed Differences + +The dark theme may differ from the light theme for contrast and legibility: + +- background luminance and shell layering; +- default, muted, inactive, and placeholder foreground values; +- selection, hover, line-highlight, and find-match fills; +- action hover colors; +- terminal ANSI bright colors; +- diagnostic foreground brightness; +- link and cursor foreground brightness. + +Avoid introducing a new hue family or changing the meaning of a token bucket +in only one theme. For example, if keywords are purple in the light theme, +the dark theme should use a contrast-adjusted purple rather than moving +keywords to blue or green. + +## Review Checklist + +Before merging future theme changes: + +- Compare the two JSON files for key parity in `colors`. +- Compare the two `tokenColors` arrays for matching bucket names, order, and + scope lists. +- Confirm both themes still appear in `package.json` with the expected + `uiTheme` values and file paths. +- Check that the primary pccx action/accent surfaces still use `#0b5fff` + unless a specific contrast exception is recorded. +- Review diagnostics, gutter, and terminal colors as semantic pairs, not as + isolated palette values. +- Capture or review both themes with the same fixture workspace, editor tab, + side bar, panel, status bar, selection state, and representative + SystemVerilog syntax. + +Do not use theme documentation or screenshots to imply marketplace +availability, production readiness, stable API/ABI, LSP support, provider +runtime calls, launcher calls, pccx-lab execution, or completed custom theme +support. diff --git a/editors/vscode-prototype/package.json b/editors/vscode-prototype/package.json index b1087bb..f74b70c 100644 --- a/editors/vscode-prototype/package.json +++ b/editors/vscode-prototype/package.json @@ -133,6 +133,11 @@ "label": "pccx SystemVerilog Light", "uiTheme": "vs", "path": "./themes/pccx-systemverilog-light-color-theme.json" + }, + { + "label": "pccx SystemVerilog Dark", + "uiTheme": "vs-dark", + "path": "./themes/pccx-systemverilog-dark-color-theme.json" } ], "configuration": { diff --git a/editors/vscode-prototype/test/extension-manifest.test.mjs b/editors/vscode-prototype/test/extension-manifest.test.mjs index 8192777..7627cc7 100644 --- a/editors/vscode-prototype/test/extension-manifest.test.mjs +++ b/editors/vscode-prototype/test/extension-manifest.test.mjs @@ -123,6 +123,11 @@ async function testVisualAssetContributions() { uiTheme: "vs", path: "./themes/pccx-systemverilog-light-color-theme.json", }, + { + label: "pccx SystemVerilog Dark", + uiTheme: "vs-dark", + path: "./themes/pccx-systemverilog-dark-color-theme.json", + }, ]); const icon = await readBytes(resolve(EXTENSION_ROOT, manifest.icon)); @@ -148,6 +153,20 @@ async function testVisualAssetContributions() { ))); } +async function testThemeJsonTypes() { + const manifest = await readPackageJson(); + const themes = manifest.contributes?.themes ?? []; + + for (const contribution of themes) { + const theme = JSON.parse(await readText(resolve(EXTENSION_ROOT, contribution.path))); + if (contribution.uiTheme === "vs-dark") { + assert.equal(theme.type, "dark"); + } else { + assert.equal(theme.type, "light"); + } + } +} + async function testDocsKeepExperimentalScope() { const readme = await readText(resolve(EXTENSION_ROOT, "README.md")); const contract = await readText(resolve(ROOT, "docs/EDITOR_BRIDGE_CONTRACT.md")); @@ -187,6 +206,7 @@ await testPackageManifestShape(); await testNoMarketplacePublishingShape(); await testCommandContributions(); await testVisualAssetContributions(); +await testThemeJsonTypes(); await testDocsKeepExperimentalScope(); console.log("vscode extension manifest tests ok"); diff --git a/editors/vscode-prototype/themes/pccx-systemverilog-dark-color-theme.json b/editors/vscode-prototype/themes/pccx-systemverilog-dark-color-theme.json new file mode 100644 index 0000000..5b2d55b --- /dev/null +++ b/editors/vscode-prototype/themes/pccx-systemverilog-dark-color-theme.json @@ -0,0 +1,230 @@ +{ + "name": "pccx SystemVerilog Dark", + "type": "dark", + "semanticHighlighting": true, + "colors": { + "activityBar.background": "#070a12", + "activityBar.foreground": "#e5e7eb", + "activityBar.inactiveForeground": "#8b95a7", + "activityBar.border": "#1f2937", + "activityBarBadge.background": "#0b5fff", + "activityBarBadge.foreground": "#ffffff", + "badge.background": "#123a7a", + "badge.foreground": "#dbeafe", + "button.background": "#0b5fff", + "button.foreground": "#ffffff", + "button.hoverBackground": "#3b82f6", + "checkbox.background": "#0b1020", + "checkbox.border": "#2f3b52", + "checkbox.foreground": "#0b5fff", + "commandCenter.background": "#0b1020", + "commandCenter.border": "#1f2937", + "commandCenter.foreground": "#e5e7eb", + "commandCenter.inactiveForeground": "#8b95a7", + "debugToolBar.background": "#0e1320", + "debugToolBar.border": "#1f2937", + "descriptionForeground": "#8b95a7", + "dropdown.background": "#0b1020", + "dropdown.border": "#2f3b52", + "dropdown.foreground": "#e5e7eb", + "editor.background": "#070a12", + "editor.foreground": "#e5e7eb", + "editor.findMatchBackground": "#5f3b08", + "editor.findMatchBorder": "#f59e0b", + "editor.findMatchHighlightBackground": "#123a7a", + "editor.lineHighlightBackground": "#0b1020", + "editor.selectionBackground": "#123a7a", + "editor.selectionHighlightBackground": "#111827", + "editor.wordHighlightBackground": "#111827", + "editorBracketMatch.background": "#123a7a", + "editorBracketMatch.border": "#0b5fff", + "editorCursor.foreground": "#60a5fa", + "editorError.foreground": "#f87171", + "editorGutter.addedBackground": "#22c55e", + "editorGutter.background": "#070a12", + "editorGutter.deletedBackground": "#f87171", + "editorGutter.modifiedBackground": "#0b5fff", + "editorIndentGuide.activeBackground1": "#4b5563", + "editorIndentGuide.background1": "#1f2937", + "editorInfo.foreground": "#60a5fa", + "editorLineNumber.activeForeground": "#dbeafe", + "editorLineNumber.foreground": "#8b95a7", + "editorRuler.foreground": "#1f2937", + "editorWarning.foreground": "#fbbf24", + "editorWidget.background": "#0b1020", + "editorWidget.border": "#1f2937", + "errorForeground": "#f87171", + "focusBorder": "#0b5fff", + "foreground": "#e5e7eb", + "input.background": "#0b1020", + "input.border": "#2f3b52", + "input.foreground": "#e5e7eb", + "input.placeholderForeground": "#8b95a7", + "inputOption.activeBackground": "#123a7a", + "inputOption.activeBorder": "#0b5fff", + "list.activeSelectionBackground": "#123a7a", + "list.activeSelectionForeground": "#ffffff", + "list.focusBackground": "#123a7a", + "list.highlightForeground": "#60a5fa", + "list.hoverBackground": "#111827", + "list.inactiveSelectionBackground": "#111827", + "notificationCenter.border": "#1f2937", + "notifications.background": "#0b1020", + "notifications.border": "#1f2937", + "notifications.foreground": "#e5e7eb", + "panel.background": "#0b1020", + "panel.border": "#1f2937", + "panelTitle.activeBorder": "#0b5fff", + "panelTitle.activeForeground": "#e5e7eb", + "panelTitle.inactiveForeground": "#8b95a7", + "peekView.border": "#1f2937", + "peekViewEditor.background": "#070a12", + "peekViewResult.background": "#0b1020", + "peekViewResult.selectionBackground": "#123a7a", + "pickerGroup.border": "#1f2937", + "pickerGroup.foreground": "#8b95a7", + "progressBar.background": "#0b5fff", + "quickInput.background": "#0b1020", + "quickInput.foreground": "#e5e7eb", + "quickInputList.focusBackground": "#123a7a", + "scrollbar.shadow": "#00000000", + "scrollbarSlider.activeBackground": "#4b5563", + "scrollbarSlider.background": "#2f3b52", + "scrollbarSlider.hoverBackground": "#4b5563", + "sideBar.background": "#090d18", + "sideBar.border": "#1f2937", + "sideBar.foreground": "#e5e7eb", + "sideBarSectionHeader.background": "#0b1020", + "sideBarSectionHeader.border": "#1f2937", + "sideBarSectionHeader.foreground": "#e5e7eb", + "sideBarTitle.foreground": "#e5e7eb", + "statusBar.background": "#0e1320", + "statusBar.border": "#1f2937", + "statusBar.debuggingBackground": "#123a7a", + "statusBar.debuggingForeground": "#ffffff", + "statusBar.foreground": "#e5e7eb", + "statusBar.noFolderBackground": "#0e1320", + "statusBar.noFolderForeground": "#e5e7eb", + "statusBarItem.hoverBackground": "#111827", + "statusBarItem.prominentBackground": "#0b5fff", + "statusBarItem.prominentForeground": "#ffffff", + "tab.activeBackground": "#070a12", + "tab.activeBorderTop": "#0b5fff", + "tab.activeForeground": "#e5e7eb", + "tab.border": "#1f2937", + "tab.hoverBackground": "#111827", + "tab.inactiveBackground": "#0b1020", + "tab.inactiveForeground": "#8b95a7", + "terminal.ansiBlack": "#070a12", + "terminal.ansiBlue": "#0b5fff", + "terminal.ansiBrightBlack": "#8b95a7", + "terminal.ansiBrightBlue": "#60a5fa", + "terminal.ansiBrightCyan": "#2dd4bf", + "terminal.ansiBrightGreen": "#22c55e", + "terminal.ansiBrightMagenta": "#a78bfa", + "terminal.ansiBrightRed": "#f87171", + "terminal.ansiBrightWhite": "#ffffff", + "terminal.ansiBrightYellow": "#fbbf24", + "terminal.ansiCyan": "#2dd4bf", + "terminal.ansiGreen": "#22c55e", + "terminal.ansiMagenta": "#a78bfa", + "terminal.ansiRed": "#f87171", + "terminal.ansiWhite": "#e5e7eb", + "terminal.ansiYellow": "#fbbf24", + "terminal.background": "#070a12", + "terminal.foreground": "#e5e7eb", + "textBlockQuote.background": "#0b1020", + "textBlockQuote.border": "#1f2937", + "textCodeBlock.background": "#0b1020", + "textLink.activeForeground": "#93c5fd", + "textLink.foreground": "#60a5fa", + "titleBar.activeBackground": "#0e1320", + "titleBar.activeForeground": "#e5e7eb", + "titleBar.border": "#1f2937", + "titleBar.inactiveBackground": "#070a12", + "titleBar.inactiveForeground": "#8b95a7" + }, + "tokenColors": [ + { + "name": "Comments", + "scope": [ + "comment", + "punctuation.definition.comment" + ], + "settings": { + "foreground": "#8b95a7" + } + }, + { + "name": "Keywords", + "scope": [ + "keyword", + "storage.type", + "storage.modifier", + "constant.language" + ], + "settings": { + "foreground": "#a78bfa" + } + }, + { + "name": "Types", + "scope": [ + "entity.name.type", + "support.type", + "support.class", + "variable.language.this" + ], + "settings": { + "foreground": "#2dd4bf" + } + }, + { + "name": "Identifiers", + "scope": [ + "entity.name.function", + "entity.name.module", + "entity.name.tag", + "variable.other.readwrite", + "variable.parameter" + ], + "settings": { + "foreground": "#60a5fa" + } + }, + { + "name": "Literals", + "scope": [ + "constant.numeric", + "constant.other", + "string", + "string.quoted" + ], + "settings": { + "foreground": "#fbbf24" + } + }, + { + "name": "Diagnostics And Invalid", + "scope": [ + "invalid", + "invalid.illegal", + "invalid.deprecated" + ], + "settings": { + "foreground": "#f87171" + } + }, + { + "name": "Source Default", + "scope": [ + "source", + "punctuation", + "meta" + ], + "settings": { + "foreground": "#e5e7eb" + } + } + ] +}