{ "name": "mlsysbook-workbench", "displayName": "MLSysBook Workbench", "description": "Build, debug, validate, and publish the ML Systems textbook", "version": "0.1.0", "publisher": "mlsysbook", "icon": "resources/icon.png", "engines": { "vscode": "^1.85.0" }, "categories": ["Other"], "activationEvents": [ "onStartupFinished", "workspaceContains:book/binder", "onView:mlsysbook.build", "onView:mlsysbook.debug", "onView:mlsysbook.runs", "onView:mlsysbook.navigator", "onView:mlsysbook.precommit", "onView:mlsysbook.maintenance", "onView:mlsysbook.info", "onView:mlsysbook.publish", "onView:mlsysbook.config" ], "main": "./out/extension.js", "scripts": { "vscode:prepublish": "npm run compile", "compile": "tsc -p ./", "watch": "tsc -watch -p ./", "test:palette": "npm run compile && node ./scripts/verify-highlight-palette.js", "test:ux-smoke": "python3 ./scripts/smoke_extension_ux.py" }, "devDependencies": { "@types/vscode": "^1.85.0", "@types/node": "^20.0.0", "typescript": "^5.3.0" }, "contributes": { "viewsContainers": { "activitybar": [ { "id": "mlsysbook", "title": "MLSysBook", "icon": "resources/icon.svg" } ] }, "views": { "mlsysbook": [ { "id": "mlsysbook.navigator", "name": "Chapter Navigator" }, { "id": "mlsysbook.runs", "name": "Recent Runs" }, { "id": "mlsysbook.build", "name": "Build" }, { "id": "mlsysbook.debug", "name": "Debug" }, { "id": "mlsysbook.precommit", "name": "Pre-commit / Validate / Cleanup" }, { "id": "mlsysbook.publish", "name": "Publish" }, { "id": "mlsysbook.info", "name": "Info & Stats" }, { "id": "mlsysbook.maintenance", "name": "Maintenance" }, { "id": "mlsysbook.config", "name": "Configuration" } ] }, "snippets": [ { "language": "markdown", "path": "./snippets/qmd.code-snippets" } ], "commands": [ { "command": "mlsysbook.buildChapterHtml", "title": "MLSysBook: Build Chapter (HTML)" }, { "command": "mlsysbook.buildChapterPdf", "title": "MLSysBook: Build Chapter (PDF)" }, { "command": "mlsysbook.buildChapterEpub", "title": "MLSysBook: Build Chapter (EPUB)" }, { "command": "mlsysbook.previewChapter", "title": "MLSysBook: Preview Chapter" }, { "command": "mlsysbook.buildVolumeHtml", "title": "MLSysBook: Build Full Volume (HTML)" }, { "command": "mlsysbook.buildVolumePdf", "title": "MLSysBook: Build Full Volume (PDF)" }, { "command": "mlsysbook.buildVolumeEpub", "title": "MLSysBook: Build Full Volume (EPUB)" }, { "command": "mlsysbook.buildFullVolume", "title": "MLSysBook: Build Full Volume..." }, { "command": "mlsysbook.buildSelectedChapters", "title": "MLSysBook: Build Chapters..." }, { "command": "mlsysbook.resetQuartoConfig", "title": "Reset Quarto Config" }, { "command": "mlsysbook.debugAllChapters", "title": "MLSysBook: Build All Chapters (Sequential)" }, { "command": "mlsysbook.testAllChaptersParallel", "title": "MLSysBook: Build All Chapters (Parallel)" }, { "command": "mlsysbook.cancelParallelSession", "title": "MLSysBook: Cancel Current Parallel Session" }, { "command": "mlsysbook.rerunFailedParallel", "title": "MLSysBook: Rerun Failed Chapters" }, { "command": "mlsysbook.quickBuildCurrentChapterPdf", "title": "MLSysBook: Quick Build Current Chapter (PDF)" }, { "command": "mlsysbook.renameLabelReferences", "title": "MLSysBook: Rename Label and References" }, { "command": "mlsysbook.addSectionIds", "title": "MLSysBook: Add Missing Section IDs" }, { "command": "mlsysbook.verifySectionIds", "title": "MLSysBook: Verify Section IDs" }, { "command": "mlsysbook.validateCrossReferences", "title": "MLSysBook: Validate Cross-References" }, { "command": "mlsysbook.historyRerunSession", "title": "MLSysBook: Rerun Run Session" }, { "command": "mlsysbook.historyRerunFailed", "title": "MLSysBook: Rerun Failed Chapters (Run Session)" }, { "command": "mlsysbook.historyOpenOutput", "title": "MLSysBook: Open Run Output" }, { "command": "mlsysbook.historyOpenFailedWorktree", "title": "MLSysBook: Open Failed Worktree" }, { "command": "mlsysbook.historyOpenFailureLocation", "title": "MLSysBook: Open Failure Location" }, { "command": "mlsysbook.precommitRunAll", "title": "MLSysBook: Run All Pre-commit Hooks" }, { "command": "mlsysbook.precommitRunHook", "title": "MLSysBook: Run Pre-commit Hook" }, { "command": "mlsysbook.precommitRunHookCurrentFile", "title": "MLSysBook: Run Pre-commit Hook (Current File)" }, { "command": "mlsysbook.precommitRunFixersCurrentFile", "title": "MLSysBook: Run QMD Fixers (Current File)" }, { "command": "mlsysbook.runAction", "title": "MLSysBook: Run Action" }, { "command": "mlsysbook.cleanArtifacts", "title": "MLSysBook: Clean Build Artifacts" }, { "command": "mlsysbook.doctor", "title": "MLSysBook: Doctor (Health Check)" }, { "command": "mlsysbook.buildGlossary", "title": "MLSysBook: Build Global Glossary" }, { "command": "mlsysbook.compressImages", "title": "MLSysBook: Compress Images" }, { "command": "mlsysbook.repoHealth", "title": "MLSysBook: Repo Health Check" }, { "command": "mlsysbook.contextBuildHtml", "title": "MLSysBook: Build as HTML" }, { "command": "mlsysbook.contextBuildPdf", "title": "MLSysBook: Build as PDF" }, { "command": "mlsysbook.contextBuildEpub", "title": "MLSysBook: Build as EPUB" }, { "command": "mlsysbook.contextPreview", "title": "MLSysBook: Preview" }, { "command": "mlsysbook.contextDebugSections", "title": "MLSysBook: Debug Sections" }, { "command": "mlsysbook.openNavigatorLocation", "title": "MLSysBook: Open Navigator Location" }, { "command": "mlsysbook.refreshNavigator", "title": "MLSysBook: Refresh Chapter Navigator", "icon": "$(refresh)" }, { "command": "mlsysbook.navigatorExpandAll", "title": "MLSysBook: Navigator Expand All", "icon": "$(add)" }, { "command": "mlsysbook.navigatorCollapseAll", "title": "MLSysBook: Navigator Collapse All", "icon": "$(remove)" }, { "command": "mlsysbook.refreshRunHistory", "title": "MLSysBook: Refresh Run History", "icon": "$(refresh)" }, { "command": "mlsysbook.refreshBuildTree", "title": "Refresh", "icon": "$(refresh)" }, { "command": "mlsysbook.rerunLastCommand", "title": "MLSysBook: Rerun Last Command", "icon": "$(history)" }, { "command": "mlsysbook.rerunLastCommandRaw", "title": "MLSysBook: Rerun Last Command (Raw Terminal)" }, { "command": "mlsysbook.revealTerminal", "title": "MLSysBook: Reveal Build Terminal", "icon": "$(terminal)" }, { "command": "mlsysbook.historyRerunCommand", "title": "MLSysBook: Rerun Command (Recent Runs)" }, { "command": "mlsysbook.openLastFailureDetails", "title": "MLSysBook: Open Last Failure Details" }, { "command": "mlsysbook.setChapterOrderSource", "title": "Set Chapter Order Source" }, { "command": "mlsysbook.setQmdVisualPreset", "title": "Set QMD Visual Preset" }, { "command": "mlsysbook.openSettings", "title": "Open Extension Settings" }, { "command": "mlsysbook.showHealthDetails", "title": "MLSysBook: Show Health Details" } ], "configuration": { "title": "MLSysBook Workbench", "properties": { "mlsysbook.chapterOrderSource": { "type": "string", "enum": ["auto", "pdf", "epub", "html", "pdfCopyedit"], "default": "auto", "description": "Source file preference for chapter ordering in Build/Debug lists. Auto tries PDF first, then EPUB, then HTML, then PDF copyedit." }, "mlsysbook.revealTerminalOnFailure": { "type": "boolean", "default": true, "description": "Show a Reveal Terminal action when a focused run fails." }, "mlsysbook.parallelDebugWorkers": { "type": "number", "default": 4, "minimum": 1, "maximum": 16, "description": "Default worker count for parallel chapter debug jobs." }, "mlsysbook.keepFailedWorktrees": { "type": "boolean", "default": true, "description": "Keep temporary worktrees for failed parallel debug jobs for manual inspection." }, "mlsysbook.parallelDebugRoot": { "type": "string", "default": ".mlsysbook/worktrees", "description": "Relative directory under the repo root where parallel debug worktrees are created." }, "mlsysbook.enableQmdChunkHighlight": { "type": "boolean", "default": true, "description": "Apply subtle editor background highlighting for QMD chunks (callouts, divs, fenced code, and labeled figure/table/listing lines)." }, "mlsysbook.qmdVisualPreset": { "type": "string", "enum": ["subtle", "balanced", "highContrast"], "default": "balanced", "description": "Visual intensity preset for QMD highlighting (inline refs, label definitions, and structural region emphasis)." }, "mlsysbook.highlightInlineReferences": { "type": "boolean", "default": true, "description": "Highlight inline @references in QMD prose (including @fig-/@tbl-/@sec- style references)." }, "mlsysbook.highlightLabelDefinitions": { "type": "boolean", "default": true, "description": "Highlight label definition patterns like {#fig-...} and #| label: fig-...." }, "mlsysbook.highlightCalloutBackground": { "type": "boolean", "default": false, "description": "Apply a background color to callout and div block regions. The ::: fence markers are controlled separately by highlightDivFenceMarkers." }, "mlsysbook.highlightSectionHeaders": { "type": "boolean", "default": true, "description": "Highlight section headers (## to ######) with depth-based background intensity." }, "mlsysbook.highlightTables": { "type": "boolean", "default": false, "description": "Highlight markdown pipe table regions with a background color. Table label definitions ({#tbl-...}) and @tbl- references are always colored regardless of this setting." }, "mlsysbook.highlightFootnotes": { "type": "boolean", "default": true, "description": "Highlight footnote references and definition markers (e.g. [^fn-...] and [^fn-...]:)." }, "mlsysbook.highlightFootnoteBlockBackground": { "type": "boolean", "default": false, "description": "Highlight footnote definition block backgrounds. Disabled by default to reduce visual noise." }, "mlsysbook.highlightInlinePython": { "type": "boolean", "default": true, "description": "Highlight inline Python variable references (`{python} var_name`) with a distinctive rose/pink color." }, "mlsysbook.showInlinePythonValues": { "type": "boolean", "default": true, "description": "Show resolved Python variable values as dimmed ghost text after inline references (e.g., `{python} google_search_b_str` → 8.5). Requires python3 with the book's dependencies." }, "mlsysbook.showInlinePythonCodeLens": { "type": "boolean", "default": true, "description": "Show a CodeLens above Python code blocks displaying all exported variable values." }, "mlsysbook.autoFoldOnOpen": { "type": "boolean", "default": true, "description": "Automatically fold configured QMD block kinds when opening a chapter file." }, "mlsysbook.autoFoldKinds": { "type": "array", "items": { "type": "string", "enum": ["tikz", "fencedCode", "divs"] }, "default": ["tikz"], "description": "Controls which block kinds are auto-folded on open. Default folds TikZ regions only." }, "mlsysbook.navigatorFollowCursor": { "type": "boolean", "default": true, "description": "Automatically reveal the current section in Chapter Navigator as cursor moves through a QMD file." }, "mlsysbook.navigatorClickToOpen": { "type": "boolean", "default": false, "description": "Open editor location when clicking a navigator item. Keep disabled to avoid accidental jumps while browsing." }, "mlsysbook.navigatorVisibleEntryKinds": { "type": "array", "items": { "type": "string", "enum": ["figures", "tables", "listings", "equations", "callouts"] }, "default": ["figures", "tables", "listings", "equations", "callouts"], "description": "Content types shown in Chapter Navigator under each section (figures, tables, code listings, equations, callouts). All are shown by default." } } }, "menus": { "explorer/context": [ { "command": "mlsysbook.contextBuildHtml", "when": "resourceExtname == .qmd", "group": "mlsysbook@1" }, { "command": "mlsysbook.contextBuildPdf", "when": "resourceExtname == .qmd", "group": "mlsysbook@2" }, { "command": "mlsysbook.contextBuildEpub", "when": "resourceExtname == .qmd", "group": "mlsysbook@3" }, { "command": "mlsysbook.contextPreview", "when": "resourceExtname == .qmd", "group": "mlsysbook@4" }, { "command": "mlsysbook.contextDebugSections", "when": "resourceExtname == .qmd", "group": "mlsysbook@5" } ], "view/title": [ { "command": "mlsysbook.refreshBuildTree", "when": "view == mlsysbook.build", "group": "navigation@1" }, { "command": "mlsysbook.rerunLastCommand", "when": "view == mlsysbook.build", "group": "navigation@2" }, { "command": "mlsysbook.revealTerminal", "when": "view == mlsysbook.build", "group": "navigation@3" }, { "command": "mlsysbook.refreshNavigator", "when": "view == mlsysbook.navigator", "group": "navigation@1" }, { "command": "mlsysbook.navigatorExpandAll", "when": "view == mlsysbook.navigator", "group": "navigation@2" }, { "command": "mlsysbook.navigatorCollapseAll", "when": "view == mlsysbook.navigator", "group": "navigation@3" }, { "command": "mlsysbook.refreshRunHistory", "when": "view == mlsysbook.runs", "group": "navigation" }, { "command": "mlsysbook.resetQuartoConfig", "when": "view == mlsysbook.config", "group": "navigation@0" }, { "command": "mlsysbook.setChapterOrderSource", "when": "view == mlsysbook.config", "group": "navigation@1" }, { "command": "mlsysbook.setQmdVisualPreset", "when": "view == mlsysbook.config", "group": "navigation@2" }, { "command": "mlsysbook.openSettings", "when": "view == mlsysbook.config", "group": "navigation@3" } ], "editor/context": [ { "command": "mlsysbook.renameLabelReferences", "when": "resourceExtname == .qmd", "group": "mlsysbook@1" } ] } } }