Skip to content

Releases: Life-Experimentalist/Code-Ledger

CodeLedger v1.4.4

06 Jun 10:57
51bffb3

Choose a tag to compare

Fixed

  • CWS rejection: remotely-hosted code — Chrome Web Store rejected this build for referencing \cdn.jsdelivr.net/chart.js\ in \handlers/git/github/pages-template.js. Chart.js 4.5.1 UMD source is now bundled in \src/vendor/chart-source.js\ and inlined into the generated GitHub Pages dashboard HTML. No remote requests are made by the extension.
  • Manifest: \web_accessible_resources\ missing UI modules — \ui/floating-ai.js, \ui/floating-timer.js, and \ui/components/AIMarkdownRenderer.js\ were incorrectly omitted in the v1.4.3 permission tightening pass.
  • *CI: release workflow read deleted \src/manifest.json* — Now reads \src/manifest-chromium.json.

Changed

  • Build: chart-source auto-regeneration — \dev/build.js\ auto-regenerates \chart-source.js\ when missing or version-mismatched. No manual vendor step after upgrading \chart.js.
  • Manifest permissions tightened — Removed unused \scripting, \webRequest, \ abs. Removed \�itbucket.org\ host permission. WAR matches narrowed to DSA platforms + landing page.
  • Landing page — Updated to v1.4.3; footer links to /privacy, /terms, /support.
  • Prettier standardised — \src//*.js, \dev//.js, \worker/src/**/.js\ formatted.

Added

  • Landing pages: Privacy, Terms, Support — Served from Cloudflare Worker.
  • CI: Chrome Web Store auto-publish — .github/workflows/publish-chrome.yml\ triggers on release published.

See CHANGELOG.md for full details.

v1.4.3

06 Jun 11:03
a2a48d7

Choose a tag to compare

[1.4.3] — 2026-06-05

Fixed

  • Conflict Resolution Modal: Banner persists after resolve — After applying resolved conflicts, the amber "conflicts detected" banner now clears immediately. Previously _pendingConflicts was zeroed in storage but the React settings state was not updated, so the banner remained until the next full reload.

CodeLedger v1.4.2

02 Jun 17:10
f9f1552

Choose a tag to compare

Added

  • Analytics: Monthly activity chart — AnalyticsView now shows a rolling 12-month bar chart of solve activity alongside the existing weekly chart.
  • Analytics: Day-of-week heatmap — New bar chart showing which day of the week you solve most; peak day is highlighted and surfaced as a "Best Day" stat.
  • Analytics: Rolling 7/30-day countslast7Days and last30Days replace the previous calendar-week/month counters so the numbers always reflect a true rolling window.
  • Floating AI: Guided (Socratic) mode — Default panel mode now leads the learner through questions instead of handing over the answer. A "Guided / Direct" toggle chip in the panel header lets you switch modes; selection is persisted to storage.
  • Floating AI: Apply-code button — AI-suggested code blocks now render an "Apply" button that writes the code directly into the active Monaco editor without copy-paste.
  • Floating AI: Alt+` keyboard hint — Keyboard shortcut hint displayed in the panel title bar.
  • Floating AI: Improved Monaco code extractiongetActiveCodeEditor() is tried first, then getEditors(), then getModels(), then DOM view-lines sorted by top CSS value for correct ordering; covers all LeetCode editor states.
  • Conflict Resolution Modal: SameCodeStep — When both versions have identical (normalised) code, the modal shows a compact three-way choice (local / remote / both) with an 8 s auto-resolve countdown and progress bar.
  • Conflict Resolution Modal: DiffApproachStep — When code differs the modal shows a three-way choice with per-side metadata (difficulty, language, date, AI review status, tag count) and the fields that differ.
  • PanelAI: Queue management controls — Settings → AI now polls and displays real-time review queue stats; exposes "Queue Missing Reviews", "Requeue All", and "Cancel" actions.
  • AIReviewPanel: QueueStatusCard — Inline status card in the review panel shows queue depth, snail-mode pause state, and time-to-next-batch.
  • Service worker: Snail Mode state — Persistent snailMode state (lastBatch, consecutiveErrors, isPaused, pausedUntil, totalProcessed, totalErrors) tracks AI review batch throttling across browser restarts.
  • Popup: settingsTab deep-linkopenLibrary() accepts a settingsTab parameter to deep-link directly to a Settings sub-panel from the popup.
  • DedupReviewQueue: "Let AI Decide" action — Per-conflict button that requests an AI comparison and auto-resolves within 10 s timeout; default countdown reduced from 12 s to 5 s.

Fixed

  • AI prompts: chatMode respectedbuildConversationSystemPrompt() now switches to the direct-answer prompt when context.chatMode === "direct", preventing Socratic rules from leaking into Direct mode sessions.
  • Floating AI: DOM line sort — View-lines are now sorted by style.top before joining, fixing incorrect line ordering when code spans the visible scroll window.

See CHANGELOG.md for full details.

CodeLedger v1.3.1

19 May 17:31
d7b8b22

Choose a tag to compare

[1.3.1] — 2026-05-19

Fixed

  • Auto AI review not triggering_requestAIReview flag was set on the local submission object but never included in the emitSolved() payload; the service worker always saw undefined and skipped the review. Flag is now forwarded correctly.
  • "Sync to Ledger" false positive — clicking the button while auto-sync was in progress caused _processSubmission to exit early due to _processingLock, but _manualSync still showed "✓ Synced". The button now waits up to 8 s for the in-progress sync to finish before reporting "✓ Auto-synced", and only shows "✓ Synced" when _processSubmission actually emitted a solve event.
  • Floating AI panel position — panel was anchored at bottom: 110px, sitting high above the window bottom. Moved to bottom: 20px to sit at the bottom edge.
  • AI system prompt context droppedbuildConversationSystemPrompt had a dead return base statement that prevented the context hints array (problem title, difficulty, request-type behaviour modifiers like "Return useful tests" for /test) from ever reaching the system prompt.
  • QoL copy/paste buttons lost on React re-render — LeetCode's React occasionally re-mounts the editor toolbar, silently removing injected buttons. A _maybeReinjectQoL() check is now wired to the existing MutationObserver so buttons are restored within ~600 ms of being removed.

Added

  • Monaco language detection in AI panel_getEditorLanguage() reads the language from monaco.editor.getModels()[0].getLanguageId() and maps it to a human-readable name (e.g. python3Python3). Language is now passed to the floating AI context so code blocks include the correct syntax identifier.
  • Problem statement auto-injected into AI panel context_readProblemStatement() reads the problem description from the DOM ([data-track-load="description_content"]) and passes it as problemStatement in the AI chat context, giving the AI full problem context without the user needing /problem.

See CHANGELOG.md for full details.

CodeLedger v1.3.0

17 May 10:38
a37df58

Choose a tag to compare

[1.3.0] — 2026-05-17

Added

  • Per-method AI review — each code approach in a multi-method problem gets its own AI review. MethodCard renders per-method code + AI review inline in the Methods tab of ProblemModal. Clicking "Generate Review" triggers an immediate on-demand review for that method alone.
  • Per-method AI review queuehandleQueueAllAIReviews now enqueues ${problemId}::method::${index} entries for methods without a review. processAIReviewQueue detects the ::method:: pattern and processes them separately from problem-level reviews.
  • MAINTENANCE_COMMIT alarm — every 10 minutes the service worker batches all pending AI reviews, metadata edits, and notes updates into a single atomic chore commit instead of one commit per edit.
  • Bulk import resilience — individual-mode sync (onboarding commit-per-problem) persists its state to chrome.storage.local. If the browser closes mid-import, a BULK_IMPORT_RESUME alarm fires 45 seconds after the next browser open to automatically resume.
  • Onboarding progress bar — the "done" step of GitHubOnboardingModal now shows a live progress bar (current/total) streamed from the SW via a sync-keepalive port. "Start Coding" is always enabled; the user can close the modal and sync continues in the background.
  • Refresh README Stats button — new button in Settings → Git that commits a fresh index.json and triggers a full infra rebuild (README + index.html) from current local data, without needing a new problem commit. Useful after repo recreation or when stats are stale.
  • Config backup in every commit — every problem commit and every resync now bundles .codeledger/sync.json (portable settings), .codeledger/behaviour-bank.json, and .codeledger/roadmaps.json into the same atomic tree, keeping user configuration always in sync with the latest solve. GitHub's Trees API deduplicates unchanged blobs so there is no overhead when nothing changed.
  • Collapsible hints in problem READMEbuildProblemMarkdown() now emits a <details><summary>Hint N</summary> block for each hint stored on the problem. Hints are collapsed by default and work in both GitHub's file view and raw markdown.
  • Canonical path resolution at commit time_handleResyncAllInner pre-loads the canonical map and enriches each problem with its canonical ID before building file paths. Problems previously committed without canonical (e.g., via bulk importer) are now placed under problems/{canonicalId}/{platform}/ on resync.
  • Two-phase resync with stable commit history_handleResyncAllInner now categorises problems into newProblems (never committed) and maintenanceItems (committed but layout/content drifted). Phase A commits only new problems (individual backdated or bulk). Phase B issues a single maintenance commit that atomically writes new-layout files and deletes stale old paths via opts.deletes → GitHub Trees API sha: null. Each problem appears in history exactly once for its initial solve; all subsequent path renames or content updates land in a single maintenance commit per sync cycle — no duplicate commits, no orphaned files.
  • _committedPaths tracking — after every commit (regular solve, resync, maintenance) the problem's committed file paths are stored in IndexedDB. Future resyncs use these to compute the exact deletion set instead of guessing.
  • Remote file tree inference — on resync, GET /git/trees/{sha}?recursive=1 fetches the full repo tree once. _inferCommittedPaths() matches problem directory prefixes (including ::submissionId-style old paths) to locate all blobs belonging to a problem, enabling correct deletions even for problems committed before _committedPaths tracking started.
  • Landing page library linksdata-cl-open added to the nav Library link and the CTA button; landing.js already rewrites these to the extension URL when the extension is detected.
  • Landing page platform icons — LeetCode, GeeksForGeeks, and Codeforces chips now use actual favicons instead of emoji.

Changed

  • Problem description file renamed to README.mddescriptionPath() now returns {dir}/README.md instead of {dir}/{platformId}.md. GitHub automatically renders this when browsing the problem directory.
  • Infra bundled into the last meaningful commitindex.json, README.md, index.html, and .codeledger/* are included in whichever commit is already happening (last problem commit in individual mode, the bulk commit, the maintenance commit). No separate trailing infra commit is issued when problem commits are made. An infra-only commit is still issued when all problems are already up-to-date.
  • GitHub Pages "src" link uses v3 pathrepoFileUrl() now reconstructs the correct v3 path (problems/{canonicalId}/{platform}/README.md or problems/{platformId}/README.md) instead of the old v1 slug-based format.
  • Language label normalization on GitHub Pagespythondata → "Python (Pandas)", mysql → "MySQL", postgresql → "PostgreSQL", etc., for cleaner display in the Recent Solves table and badges.
  • Recent Solves date includes year — dates in a prior year now display as "Jan 5, 2024" instead of "Jan 5" to avoid ambiguity.
  • Removed AI "Progress Summary" from README — the AI-generated narrative block is no longer included in the generated repository README; it produced inconsistent output and added noise.
  • Welcome page — removed the Diagnostics & Migration tab and DiagnosticsPanel component. Path fixes and the two-phase resync make manual layout repair tools unnecessary.

Fixed

  • ::submissionId suffix in problem pathsplatformId() now strips the ::number suffix that the LeetCode bulk importer appended (e.g. lc-best-time-to-buy-and-sell-stock::1427680302lc-best-time-to-buy-and-sell-stock). Affected paths are corrected on the next resync via the maintenance commit.
  • Stale README stats (one-commit-lag)buildInfraFiles now accepts an indexMetaOverride parameter. Callers pass the freshly-built index.json data so README stats reflect the new problem count in the same commit rather than the previous state.
  • Stale paths not deleted on layout change — old problem files ({slug}.md, ::submissionId dirs, pre-canonical paths) are now explicitly deleted in the maintenance commit via opts.deletes, eliminating orphaned files that accumulated across layout versions.
  • GitHub App read:org 401/user/orgs returns 401 for GitHub App tokens that lack read:org scope. The onboarding modal now silently treats this as an empty org list instead of clearing the valid auth token.
  • Avatar CORS failure — removed the Authorization header from avatar CDN fetches in library.js; avatars.githubusercontent.com is a public CDN that blocks auth headers via CORS.
  • LaTeX rendering\times, \leq, \geq, \neq, \rightarrow, Greek letters, and other LaTeX symbols are now substituted to Unicode in AI review output via substituteLatex() in katex-stub.js. Applied in both renderMath() and inline parseMarkdown().
  • ProblemModal null notes crash — the Notes tab show guard now uses p?.notes safe navigation, preventing a crash when p is null during modal initialisation.
  • AI review batch size — background queue processes 2 items per alarm tick (was 10) to avoid rate-limiting AI providers during backfill.
  • On-demand AI review no longer commits immediatelyhandleRegenerateAIReview marks the problem as pending for the MAINTENANCE_COMMIT batch instead of making an individual commit per review.

See CHANGELOG.md for full details.

CodeLedger v1.2.0

13 May 07:17
8553164

Choose a tag to compare

[1.2.0] — 2026-05-13

Added

  • AI Review Queue — Queue Missing button — dedicated button that queues only problems with no AI review yet, separate from the full re-queue action.
  • AI Review Queue — Requeue All button — queues every problem for re-review (including those already reviewed); asks for confirmation before submitting.
  • AI Review Queue — Cancel Queue button — gracefully cancels all pending reviews: any review currently processing finishes naturally, then the rest are removed. Button appears only when there are pending or processing items.
  • AI Review Queue — built-in dedupenqueueReview() now checks for an existing pending/processing entry before adding; duplicate submissions are silently skipped and reported as skipped in the response.
  • GitHub Pages heatmap full width — activity heatmap now fills the full card width. Cell size is computed from available width via a --hm-cell CSS variable set by a resizeHeatmap() function (minimum 8 px); re-runs on every window resize.
  • User repo README — social banner, logo & badges — generated README.md now opens with the CodeLedger social preview image, the extension logo, and four flat-square shields (total / easy / medium / hard counts) with difficulty colours, all using raw GitHub image links.
  • Auto-save settings to repo — every settings change in the Library UI now calls markSettingsPendingCommit() so the next problem commit automatically includes .codeledger/config.json with the updated portable settings. Manual "Force Commit Settings" and "Backup Config" buttons continue to work as before.
  • AI Behaviour Bank — personal memory layer for the AI assistant: Knowledge Bank (insights), user-defined Skills (trigger on command/difficulty/after-solve), and a learning Roadmap. All context is automatically injected into AI chat conversations. Accessible as a full Library tab.
  • MCP Tool-calling — AI assistant can now invoke tools mid-conversation: save/recall Knowledge Bank insights, open problems, set roadmap goals, list and delete chats. Tools are configurable per-provider in Settings → AI.
  • Cross-device AI chat sync — every AI conversation is committed as chats/YYYY-MM-DD-HH-mm-ss-{id}.md with YAML frontmatter. Bidirectional sync via GitHub on every startup; deleted chats are tombstoned and removed from remote.
  • Rolling GitHub backups — automatically snapshot local problems + settings to backups/YYYY-MM-DD-HH-mm-ss.json in the repo. Configurable interval (default every 20 commits) and retention count (default 10). Full restore from the Library Settings → Backups panel.
  • Deduplication engineduplicate-detector.js finds same-slug same-language duplicates; ai-deduplication.js generates AI merge proposals stored on the problem. A dedicated DedupReviewQueue modal lets users approve/reject proposed merges.
  • MissingMetadataModal — review queue for problems missing tags or difficulty; supports individual refresh, per-problem ignore, and bulk ignore/unignore with persistent state.
  • Setup completion notification — Library sidebar and main content area show a dismissable amber banner if GitHub is not connected or no repo is linked, with a direct link to the Welcome page.
  • Welcome page diagnostic tool — second tab "Diagnostics & Migration" scans the repo for layout version mismatches, missing infra files, and uncommitted problems; offers one-click repair and bulk/individual migration commit.
  • GitHub handler refactorcommit-builder.js (tree items + commit payload), api-client.js (REST wrappers), and infra-builder.js (README/index.html generation) extracted from the monolithic github/index.js.
  • Landing page v1.2 — dynamic "Open Library" links (extension URL when installed, web URL otherwise); "What's new in v1.2" features section; new FAQ entries for Behaviour Bank, MCP tools, sync, and migration.
  • Prettier formatter.prettierrc config; npm run format script formats all src/**/*.js and worker/public/assets/**/*.js files.
  • New repository path layout v2problems/{slug}/{slug}.{ext} (no platform subdir without canonical); problems/{slug}/{platform}/{slug}.{ext} when canonical is assigned. Solution files named after slug (two-sum.py) instead of verbose language name (Python3.py).
  • Commit taxonomy — structured commit messages: [solved], [update], [comprehensive-update], [maintenance], [chore], [init] via src/core/commit-messages.js.
  • Bulk progress-page import → GitHub — imported problems now build proper v2 paths and READMEs; a "Commit N to GitHub" button appears after import that fires a [comprehensive-update] commit.
  • Migration managerMIGRATE_REPO message for layout v1→v2 migration, RESET_REPO for full repo rebuild (self-healing). Finds old topics/ paths and replaces them atomically via GitHub Trees API.
  • Migration UI in Settings → GitHub — "Check layout version", "Migrate to v2 layout", and "Full rebuild" buttons.
  • Extension update detection on startup — compares manifest.version against stored version; sets extensionUpdated flag so UI can prompt user to run migration.
  • Slash-command autocomplete in floating AI assistant — typing / shows a dropdown of available commands; clicking inserts the command.
  • index.html and root README.md always regenerated on every GitHub commit (no longer "only if missing"). GitHub Trees API deduplicates unchanged blobs automatically.
  • index.json layout stats — now includes layoutVersion, byPlatform, and byLang breakdown fields.
  • Root README.md generated in user repos linking to their GitHub Pages stats dashboard (supports custom domains).
  • Under Construction badge in settings section renderer — sections with underConstruction: true show an amber badge and are visually marked.
  • Missing Metadata review modal — surfaces problems missing tags/difficulty and queues metadata refresh from the background.
  • Dedup review queue — same-language duplicate candidates now appear in a dedicated review modal with approve/reject actions.
  • AI merge proposals — same-language duplicates can generate an AI merge proposal that is stored on the problem and reviewed before applying.
  • Mirror repository settings — a dedicated settings panel manages additional git mirrors alongside the primary repository.
  • Cross-device auto-sync — periodic background sync is scheduled with chrome.alarms so remote changes are picked up automatically.
  • LeetCode: non-accepted submissions could auto-sync — submission detail pages now check statusCode === 10 (Accepted) before auto-committing; WA / TLE / Runtime Error submissions are silently skipped. Manual "Sync to Ledger" still works on any submission.
  • LeetCode: sync button appearance delay — replaced the 1200 ms setTimeout retry with a MutationObserver that injects the button the instant the action button row enters the DOM; button now appears as soon as the page renders.
  • LeetCode: Monaco code extraction — added _getCodeFromMonaco() fallback (window.monaco.editor.getModels()[0].getValue()) for cases where GraphQL returns an empty code field.
  • LeetCode: copy button only copied visible linesqol.js copy button now uses the Monaco model API as primary source, getting the full file regardless of scroll position; DOM .view-line scraping kept as fallback for edge cases.
  • LeetCode: copy button produced dirty code — both the copy button and _getCodeFromMonaco() now strip whitespace-visualization characters Monaco injects (U+00B7 middle dot, U+200C ZWNJ, U+00A0 NBSP) so clipboard output is clean, runnable code.
  • Graph: scroll zoom snaps to min/max — replaced binary 0.9/1.1 zoom step with Math.exp(−deltaY × 0.001), making trackpad pinch-to-zoom smooth and proportional while keeping single mouse-wheel notch at ≈ 9.5 % per step.
  • Graph: zoom buttons+ and buttons in the toolbar for click-to-zoom (centered on canvas), grouped with the existing Fit view (▣) button.

Fixed

  • import() banned in MV3 service workers — all dynamic await import(...) calls inside service-worker.js removed and replaced with top-level static imports. Affected modules: ai-review-queue.js, ai-deduplication.js, backup-manager.js, migration-manager.js, api-client.js, and path-builder.js. Fixes "Queue AI Reviews" and "Backup" features that were silently failing in production.
  • AI Review Queue — IndexedDB version conflictai-review-queue.js was opening a "CodeLedger" database at version 1 while the browser had an existing version 2, causing a hard error on every queue operation. Database renamed to "codeledger-queue" to open fresh at version 1.
  • git.apiFetch not a function in PanelGit.js — two call sites replaced with a direct call to ghGetCurrentUser(token) from the statically imported api-client.js. Fixed the manual import preview and individual-sync path when github_owner was unset.
  • 422 non-fast-forward on sequential commitsGitHubHandler.commit() now retries up to 3 times (500 ms, then 1 000 ms back-off), fetching a fresh ref and rebuilding the tree on each retry.
  • Stale index.json showing 0 problems after full sync — a repair commit is now issued when the remote index contains an empty problems: [] but local problems are already committed.
  • Repo name forced to lowercaseGitHubOnboardingModal.js sanitize() no longer calls .toLowerCase(); the allowed-character regex updated to [^a-zA-Z0-9._-] to match GitHub's actual rules.
  • /errors command in AI assistant always showed "no errors" — raw error string from readTestFailures() now passed directly to expandChatVariables, bypassing normalizeList() which was converting the string to [].
  • Manual sync blocked by submission dedup — `forceCommit:...
Read more

CodeLedger v1.1.0

06 May 20:29
2797a36

Choose a tag to compare

See CHANGELOG.md for full details.

[1.1.0] — 2026-05-07

Added

  • Syntax highlighting in the Code tab of ProblemModal — regex-based tokenizer for Python, JavaScript, TypeScript, Java, C++, C, Go, Rust, Kotlin, Swift; keywords in blue, strings in green, comments in gray, numbers in amber, types in purple.
  • src/lib/syntax-highlight.js — new module with highlightCode(code, lang) and cleanCode(code) helpers; no external dependencies, works inside the extension's strict CSP.
  • Mermaid diagram rendering via mermaid.ink — renders diagrams as images without loading external scripts (previously blocked by extension CSP). Includes a "View in Mermaid Live" fallback link.
  • Vertical-first Mermaid layout — flowcharts and graph diagrams without an explicit direction, or with LR/RL, are automatically rewritten to TD (top-down) for more readable AI-generated diagrams.
  • Extension handshake v2presence-marker.js now dispatches a CODELEDGER_HANDSHAKE CustomEvent (in addition to the existing DOM marker) carrying the browser-specific chrome-extension:// / moz-extension:// library URL. Works on Chrome, Edge, Brave, and Firefox.
  • Session-persistent install detectionlanding.js caches the handshake in sessionStorage to avoid the "flash of install link" on page refresh.
  • Firefox + all Chromium support for the handshake: presence-marker.js uses browser.* when available, falls back to chrome.*.
  • AICommandPalette scroll — pressing ArrowDown/ArrowUp now scrolls the active item into view inside the dropdown list.
  • Landing page improvements
    • Browser badges (Chrome/Brave/Edge, Firefox, GitHub Releases) dynamically linked from config.json
    • FAQ section (8 questions covering privacy, AI, platforms, BYOK)
    • Stats strip (platforms, AI providers, servers that see your code = 0)
    • JSON-LD structured data (SoftwareApplication) for better search indexing
    • Extended Open Graph and Twitter Card metadata
    • Extension-detected indicator ("Extension installed and ready") badge
    • Data attributes (data-cl-show-when-installed, data-cl-hide-when-installed) for dynamic UI based on install state
    • OpenRouter added to BYOK pills

Fixed

  • Copy issue with whitespace visualization characters — Monaco editor (LeetCode) injects U+00B7 (middle dot) and U+200C (zero-width non-joiner) as visible space indicators. cleanCode() strips these before display and before writing to clipboard, so copied code is clean.
  • Mermaid showed only raw code — CDN script injection was blocked by extension CSP; replaced with mermaid.ink image approach; code-block fallback now also provides an external link.
  • Double-escaping in markdown tables — fixed in previous sprint; tables now render properly.
  • KaTeX CSP violation — fixed in previous sprint; math blocks render as styled code spans.

Changed

  • Extension version bumped to 1.1.0 in manifest.json and package.json.
  • mermaid-stub.js — completely rewritten; no longer attempts CDN script injection.
  • presence-marker.js — now dispatches both DOM marker and CustomEvent for maximum reliability.
  • landing.js — extended with sessionStorage caching and CustomEvent listener.
  • index.html — substantially expanded with FAQ, stats, browser badges, and SEO improvements.

[1.0.0] — 2026-04 (Initial Release)

06 May 20:35
2797a36

Choose a tag to compare

[1.0.0] — 2026-04 (Initial Release)

Added

  • Core extension: LeetCode, GeeksForGeeks, and Codeforces platform handlers
  • GitHub integration via OAuth + Trees API (atomic multi-file commits)
  • AI code review (Gemini, OpenAI, Claude, DeepSeek, Ollama, OpenRouter)
  • Problem library (extension sidebar + standalone web app)
  • Analytics dashboard: heatmap, topic radar, difficulty donut, solve velocity, drilldown
  • Knowledge graph: force-directed, topic-linked problem network
  • Floating AI panel and timer on problem pages
  • AI chat with /mycode, /problem, /errors slash commands and @platform mentions
  • Multi-language AI input with command palette dropdown
  • Behavior bank for passive interaction tracking (opt-out)
  • Settings UI: General, AI, Git, Platforms, Backups, Advanced panels
  • Backup system: manual JSON export, scheduled snapshots, on-solve snapshots
  • Service worker: solve event pipeline, sync engine, alarm manager
  • Cross-device sync via GitHub index.json
  • First-run defaults: all AI providers disabled until user adds keys
  • Full Chrome + Firefox support via browser-compat.js shim