+
+ The full version history for Hikari Desktop is available in the Changelog
+ panel β open it from the menu to browse release notes for every version, fetched directly from the
+ releases page.
+
+
+
+
Recent Highlights
+
+ -
+ Guided Workflow β four-phase project orchestration (Discuss β Plan β Execute
+ β Verify) with Quick Mode and cross-panel navigation
+
+ -
+ Wave-based Task Loop β parallel task execution with dependency tracking, concurrency
+ control, and auto-commit support
+
+ -
+ PRD Creator β AI-assisted task list generation from plain-English project descriptions
+
+ -
+ Community Themes β Dracula, Catppuccin, Nord, Solarized, Gruvbox, and RosΓ© Pine
+ presets
+
+ -
+ Project Context Panel β persistent PROJECT.md / REQUIREMENTS.md / ROADMAP.md
+ / STATE.md context engineering
+
+ -
+ Codebase Mapper β auto-generated CODEBASE.md architectural summaries
+
+ -
+ Embedded Docs β this help panel with full documentation and keyboard navigation
+
+
+
+
+
+
+ To see the complete changelog with all versions and patch notes, open Changelog from the main menu.
+
+
+
diff --git a/src/lib/components/docs/DocsChatInput.svelte b/src/lib/components/docs/DocsChatInput.svelte
new file mode 100644
index 0000000..5f4afdf
--- /dev/null
+++ b/src/lib/components/docs/DocsChatInput.svelte
@@ -0,0 +1,105 @@
+
+
+
Sending Messages
+
+ - β’ Press Enter to send your message
+ - β’ Press Shift+Enter to insert a newline
+ - β’ Paste images directly into the input β Hikari can see and discuss them
+ - β’ Paste code or multi-line text β Hikari will handle it as context
+
+
+
+
+
Quick Actions
+
+ Click the β‘ lightning bolt icon in the input toolbar to open a panel of predefined
+ prompt shortcuts. These let you trigger common tasks (explain code, write tests, refactor, and more)
+ with a single click instead of typing.
+
+
+ Quick actions send a pre-written prompt to Hikari immediately β no extra typing needed.
+
+
+
+
+
Snippet Library
+
+ Click the snippet icon in the input toolbar to open your personal snippet library
+ β a collection of reusable text blocks you can insert into the input with one click.
+
+
+ - β’ Snippets are organised by category
+ - β’ Click a snippet to insert it at the cursor position
+ - β’ Default snippets are provided; add your own to build a personal library
+
+
+
+
+
Clipboard History
+
+ Click the clipboard icon in the input toolbar to browse your clipboard history
+ β a list of text you've previously copied or pasted during the session.
+
+
+ - β’ Longer text blocks and code snippets are captured automatically
+ - β’ Click an entry to insert it into the current input
+ - β’ Filter by language for code-specific entries
+
+
+
+
+
Drafts
+
+ Click the draft icon in the input toolbar to open the Drafts panel β a place to
+ save and retrieve partially written messages.
+
+
+ - β’ Save the current input as a draft for later
+ - β’ Click a saved draft to restore it to the input
+ - β’ Drafts persist across sessions so you can pick up where you left off
+
+
+
+
+
Compact Mode
+
+ Compact mode shrinks the app to a small 280Γ400 px floating window β useful for
+ keeping Hikari visible whilst working in another application.
+
+
+ -
+ β’ Toggle via Compact Mode in the menu or
+ Ctrl+Shift+M
+
+ - β’ Press the same shortcut again (or use the menu) to return to normal size
+ - β’ Your previous window size is restored automatically when you exit compact mode
+
+
+
+
+
Discord Rich Presence
+
+ Hikari Desktop can share your activity in Discord β showing the model you're using and session
+ duration as your Rich Presence status.
+
+
+ Toggle this in Settings (Ctrl+,) under the Discord section. Disable it
+ if you'd rather keep your coding sessions private.
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsFileEditor.svelte b/src/lib/components/docs/DocsFileEditor.svelte
new file mode 100644
index 0000000..3f4ac0e
--- /dev/null
+++ b/src/lib/components/docs/DocsFileEditor.svelte
@@ -0,0 +1,79 @@
+
+
+ The built-in file editor lets you read and edit project files directly in Hikari Desktop,
+ alongside your conversation. Open it via File Editor in the menu or press
+ Ctrl+E (requires an active connection).
+
+
+
+
File Browser
+
+ The file browser panel (toggle with Ctrl+B) shows your working
+ directory tree. From it you can:
+
+
+ - β’ Click a file to open it in a new editor tab
+ - β’ Right-click for context menu options (rename, delete)
+ - β’ Press Ctrl+N to create a new file
+
+
+
+
+
Editor Tabs
+
Each open file gets its own tab. You can have multiple files open at once.
+
+ - β’ Click a tab to switch to that file
+ - β’ Click Γ on a tab to close it (Ctrl+W)
+ - β’ Unsaved changes are indicated with a dot on the tab
+ - β’ Press Ctrl+S to save the current file
+
+
+
+
+
Syntax Highlighting
+
+ The editor automatically applies syntax highlighting for a wide range of languages, including:
+
+
+ JavaScript Β· TypeScript Β· Python Β· Rust Β· Go Β· Java Β· C++ Β· HTML Β· CSS Β· JSON Β· YAML Β·
+ Markdown Β· SQL Β· Shell Β· PHP Β· Ruby Β· Swift Β· R Β· TOML Β· Dockerfile Β· PowerShell
+
+
+ The editor theme follows your app theme β dark themes use dark editor backgrounds.
+
+
+
+
+
Editor Features
+
+ - β’ Line numbers, bracket matching, and code folding
+ - β’ Search and replace (Ctrl+F in most editors)
+ - β’ Right-click context menu for common operations
+ - β’ Full CodeMirror keybindings
+
+
+
+
+
Working with Hikari
+
+ Hikari can read and edit files directly through her tool access β you don't need the file
+ editor open for her to work on files. The editor is most useful for reviewing changes she's
+ made, manually editing files alongside the conversation, or browsing the project structure.
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsGettingStarted.svelte b/src/lib/components/docs/DocsGettingStarted.svelte
new file mode 100644
index 0000000..b642ced
--- /dev/null
+++ b/src/lib/components/docs/DocsGettingStarted.svelte
@@ -0,0 +1,61 @@
+
+
+
1. Enter your API key
+
+ Open Settings (Ctrl+,) and paste your Anthropic API key. Keys are
+ stored locally on your device and never sent anywhere except the Anthropic API.
+
+
+
+
+
2. Set a working directory
+
+ Click the folder icon in the connection bar and choose the project directory you want Hikari
+ to work in. This gives her context for your files and project structure.
+
+
+
+
+
3. Connect
+
+ Click Connect to start a Claude Code session. The status indicator will turn green
+ when you're connected.
+
+
+
+
+
4. Start chatting
+
+ Type a message and press Enter (or Ctrl+Enter)
+ to send. Hikari can read, write, and edit files; run terminal commands; search code; fetch web
+ content; and connect to external tools via MCP.
+
+
+
+
+
Key Features
+
+ - ποΈ File Management β read, write, and edit files in your project
+ - π» Terminal Access β execute commands and run scripts
+ - π Code Search β find files and search through code
+ - π Web Access β fetch information from the web
+ - π MCP Servers β connect external tools via Model Context Protocol
+ - π Multi-tab Support β work on multiple conversations simultaneously
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsGitPanel.svelte b/src/lib/components/docs/DocsGitPanel.svelte
new file mode 100644
index 0000000..40c5f42
--- /dev/null
+++ b/src/lib/components/docs/DocsGitPanel.svelte
@@ -0,0 +1,61 @@
+
+
+ The Git panel gives you a visual interface for git operations directly inside Hikari Desktop.
+ Open it via Git Panel in the menu.
+
+
+
+
Changes Tab
+
Shows all modified, staged, and untracked files in your working directory.
+
+ - β’ Click a file to view its diff
+ - β’ Stage individual files or all changes at once
+ - β’ Unstage files you don't want in the next commit
+ - β’ Discard changes to revert a file to its last committed state
+ - β’ Enter a commit message and click Commit to create a commit
+
+
+
+
+
Branches Tab
+
Manage your local and remote branches.
+
+ - β’ View all local and remote branches
+ - β’ Click a branch to check it out
+ - β’ Create new branches from the current HEAD
+ - β’ See how many commits your branch is ahead/behind its remote
+
+
+
+
+
History Tab
+
Browse your commit history with author names, dates, and commit messages.
+
+ - β’ Scrollable log of recent commits
+ - β’ Abbreviated commit hashes for easy reference
+
+
+
+
+
Sync Actions
+
+ Use the quick action buttons to fetch, pull, and push changes to your remote β all without
+ leaving Hikari Desktop.
+
+
+
+
+
Working with Hikari
+
+ Hikari can also run git commands for you through the terminal β just ask her to commit, push,
+ create a branch, or check the status. The Git panel is useful for reviewing changes visually
+ and for quick operations you want to do yourself.
+
+
+ The Task Loop auto-commit feature can automatically commit after each completed
+ task β configure it via the β icon in the Task Loop panel.
+
+
+
diff --git a/src/lib/components/docs/DocsKeyboardShortcuts.svelte b/src/lib/components/docs/DocsKeyboardShortcuts.svelte
new file mode 100644
index 0000000..5244f5d
--- /dev/null
+++ b/src/lib/components/docs/DocsKeyboardShortcuts.svelte
@@ -0,0 +1,130 @@
+
+
+
API Key
+
+ Enter your Anthropic API key in Settings (Ctrl+,). The key is stored
+ locally on your device and used only to authenticate requests to the Anthropic API.
+
+
+ Get your API key at console.anthropic.com.
+
+
+
+
+
Model Selection
+
Choose from available Claude models:
+
+ -
+ claude-opus-4-6 β most capable, highest quality; best for complex tasks
+
+ -
+ claude-sonnet-4-6 β balanced speed and quality
+ (recommended)
+
+ -
+ claude-haiku-4-5 β fastest and most cost-efficient; good for quick tasks
+
+
+
+
+
+
Custom Instructions
+
+ Add persistent instructions in Settings that are prepended to every conversation. Use this to
+ set coding preferences, project conventions, or communication style.
+
+
+
+
+
MCP Servers
+
+ Model Context Protocol (MCP) servers extend Hikari's capabilities with external tools and data
+ sources β databases, APIs, version control systems, and more.
+
+
+ Open MCP Servers from the menu to add and manage server configurations. Each server
+ is defined with a command and optional arguments.
+
+
+
+
+
Permission Mode
+
+ Controls how Hikari asks for tool use permissions. Choose between asking every time,
+ auto-approving trusted tools, or running in a more restricted mode.
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsPanelsTools.svelte b/src/lib/components/docs/DocsPanelsTools.svelte
new file mode 100644
index 0000000..71dcaa8
--- /dev/null
+++ b/src/lib/components/docs/DocsPanelsTools.svelte
@@ -0,0 +1,128 @@
+
+
+
Agent Monitor
+
+ Displays a live dashboard of all Claude Code agents running during a session β useful when
+ using the Task Loop or any feature that spawns subagents.
+
+
+ - β’ Hierarchical tree view showing parent agents and their subagents
+ -
+ β’ Status indicators: β running,
+ β completed,
+ β errored
+
+ - β’ Live duration timers for running agents
+ - β’ Kill all / clear finished buttons
+ - β’ A badge on the menu icon shows the count of active agents
+
+
+
+
+
To-Do List
+
+ Shows Hikari's internal todo list in real time β the same tasks she tracks using the
+ TodoWrite tool during complex multi-step work.
+
+
+ - β’ See pending, in-progress, and completed tasks at a glance
+ - β’ Progress bar shows overall completion percentage
+ - β’ Updates live as Hikari works through her plan
+
+
+
+
+
Profile
+
Your personal profile within Hikari Desktop, with lifetime stats and sharing.
+
+ - β’ Edit your display name and bio
+ - β’ Upload a profile avatar
+ -
+ β’ View lifetime stats: messages sent, tokens used, code blocks generated, files
+ created/edited, total spend
+
+ - β’ Track achievement progress
+ - β’ Generate a shareable profile card image
+
+
+
+
+
Achievements
+
+ Hikari Desktop includes a fun achievement system that unlocks as you use the app β milestones
+ like your first message, first code block, staying up late, and more.
+
+
+ Open Achievements from the menu to see your progress. Newly unlocked achievements
+ show a badge count on the menu item.
+
+
+
+
+
Plugins
+
+ Plugins extend Hikari's capabilities with community-built additions. Open
+ Plugins from the menu to manage them.
+
+
+ - β’ Install plugins from named sources or custom marketplace URLs
+ - β’ Enable or disable individual plugins without uninstalling them
+ - β’ Update plugins to their latest versions
+ - β’ Add custom plugin marketplace sources (GitHub-hosted)
+
+
+
+
+
Debug Console
+
+ A developer-facing log console that captures frontend events, errors, and debug output. Open
+ it via Debug Console in the menu or press
+ Ctrl+`.
+
+
+ Useful when troubleshooting unexpected behaviour or reporting issues. Filter by log level
+ (info, warn, error, debug).
+
+
+
+
+
Workspace Trust
+
+ When you connect to a working directory, Hikari scans it for potentially powerful
+ configurations and may display a trust prompt before proceeding. This includes:
+
+
+ - β’ Hooks β shell commands that run automatically during sessions
+ - β’ MCP servers β local processes with system-level access
+ - β’ Custom slash commands β instructions that execute at invocation
+
+
+ Review each item carefully. Click Trust & Connect to proceed or
+ Cancel to abort. Trusted workspaces remember your decision for future sessions.
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsSessionManagement.svelte b/src/lib/components/docs/DocsSessionManagement.svelte
new file mode 100644
index 0000000..d1bbbc1
--- /dev/null
+++ b/src/lib/components/docs/DocsSessionManagement.svelte
@@ -0,0 +1,80 @@
+
+
+
Multiple Conversations
+
+ Use tabs at the top of the chat area to manage multiple simultaneous sessions with Hikari.
+
+
+ - β’ Click + to open a new conversation tab
+ - β’ Click a tab to switch between active conversations
+ - β’ Click Γ on a tab to close that conversation
+
+
+ Each tab runs its own independent Claude Code session with separate context and history.
+
+
+
+
+
Session History
+
+ Open Session History from the menu to browse and restore past conversations. Sessions
+ are saved automatically and indexed by date.
+
+
+
+
+
Context Compaction
+
+ As conversations grow long, use Compact Conversation from the menu to summarise
+ the history and free up context window space β without losing important information.
+
+
+ Start Fresh with Context creates a brand-new session but carries over a summary
+ of the previous conversation.
+
+
+
+
+
Tool Permissions
+
+ When Hikari needs to use a tool (file access, terminal, web fetch, etc.) she may ask for your
+ approval first. You can:
+
+
+ - β’ Allow once β approve this single use
+ - β’ Allow for session β approve all uses of this tool this session
+ - β’ Deny β block the action
+
+
+
+
+
Stats Panel
+
+ Open Stats from the menu to see real-time usage data: token counts, estimated cost,
+ context window usage, and per-session totals.
+
+
+
+
+
Streamer Mode
+
+ Toggle streamer mode (Ctrl+Shift+S) to redact your API key and other
+ sensitive information from the display β useful for streaming or screen sharing.
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsTaskLoop.svelte b/src/lib/components/docs/DocsTaskLoop.svelte
new file mode 100644
index 0000000..d774976
--- /dev/null
+++ b/src/lib/components/docs/DocsTaskLoop.svelte
@@ -0,0 +1,102 @@
+
+
+ Hikari Desktop includes a full project automation suite β open any of these tools from the menu.
+
+
+
+
Guided Workflow
+
A four-phase project workflow that orchestrates the other automation tools:
+
+ -
+ 1. Discuss β describe your project; Hikari writes a
+
CONTEXT.md file capturing requirements and goals
+
+ -
+ 2. Plan β use the PRD Creator to break the project into tasks
+
+ -
+ 3. Execute β run the Task Loop to complete all tasks automatically
+
+ -
+ 4. Verify β check acceptance criteria; Hikari writes
+
VERIFY.md
+
+
+
+ Enable Quick Mode to skip Claude interactions in steps 1 and 4.
+
+
+
+
+
PRD Creator
+
+ Describe your project in plain English and Hikari will generate a structured
+ hikari-tasks.json task list. Tasks include titles, prompts, priorities,
+ and dependency relationships.
+
+
+
+
+
Task Loop
+
+ Executes tasks from hikari-tasks.json automatically. Features include:
+
+
+ -
+ β’ Wave-based parallelism β independent tasks run concurrently; dependent tasks
+ wait for their prerequisites
+
+ -
+ β’ Concurrency control β adjust the [β] N [+] control to
+ limit how many tasks run in parallel
+
+ - β’ Blocked detection β tasks whose dependencies failed are marked β
+ -
+ β’ Auto-commit β optionally commit changes after each task completes, with a configurable
+ prefix and optional SUMMARY.md
+
+
+
+
+
+
Project Context Panel
+
+ Manage persistent context files that are injected into every conversation:
+ PROJECT.md, REQUIREMENTS.md,
+ ROADMAP.md, and STATE.md. These help
+ Hikari maintain consistent project understanding across sessions.
+
+
+
+
+
Codebase Mapper
+
+ Generates a CODEBASE.md architectural summary of your project β directory
+ structure, key files, and their roles. Useful for onboarding Hikari to large codebases quickly.
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsThemeCustomisation.svelte b/src/lib/components/docs/DocsThemeCustomisation.svelte
new file mode 100644
index 0000000..fc4dd81
--- /dev/null
+++ b/src/lib/components/docs/DocsThemeCustomisation.svelte
@@ -0,0 +1,85 @@
+
+
+ Open Settings (Ctrl+,) and scroll to the Appearance
+ section to customise your theme.
+
+
+
+
Built-in Themes
+
+ - β’ Default Dark β the classic dark Hikari look
+ - β’ Default Light β a bright, clean light theme
+ - β’ High Contrast β maximum contrast for accessibility
+
+
+
+
+
Community Presets
+
+ - β’ Dracula
+ - β’ Catppuccin Mocha
+ - β’ Catppuccin Latte
+ - β’ Nord
+ - β’ Solarized Dark
+ - β’ Solarized Light
+ - β’ Gruvbox Dark
+ - β’ Gruvbox Light
+ - β’ RosΓ© Pine
+ - β’ RosΓ© Pine Dawn
+
+
+
+
+
Custom Colours
+
+ Select Custom from the theme dropdown to set individual colours for each UI element:
+
+
+ - β’ Text: primary, secondary, and tertiary levels
+ - β’ Backgrounds: primary, secondary, and header
+ - β’ Border colour
+ - β’ Accent and pink highlight colours
+ - β’ Trans flag stripe colours
+
+
+
+
+
Custom Fonts
+
+ Upload a .ttf or .otf font file to apply a custom
+ UI font across the entire app.
+
+
+
+
+
Background Image
+
+ Set a custom background image that renders behind the chat area. Adjust opacity to keep it
+ subtle.
+
+
+
+
+
diff --git a/src/lib/components/docs/DocsTroubleshooting.svelte b/src/lib/components/docs/DocsTroubleshooting.svelte
new file mode 100644
index 0000000..95c051c
--- /dev/null
+++ b/src/lib/components/docs/DocsTroubleshooting.svelte
@@ -0,0 +1,125 @@
+
+
+
Can't Connect
+
+ -
+ β’ Check that your API key is entered correctly in Settings (Ctrl+,)
+
+ -
+ β’ Ensure you have an active internet connection β Hikari needs to reach the Anthropic API
+
+ - β’ Try setting an explicit working directory rather than leaving it blank
+ - β’ Check the Debug Console (Ctrl+`) for error details
+
+
+
+
+
+ Hikari Seems Stuck or Stopped Responding
+
+
+ -
+ β’ Press Ctrl+C (when no text is selected) to interrupt the current process
+
+ - β’ If that doesn't work, disconnect and reconnect from the connection bar
+ -
+ β’ Check the Stats panel for context window usage β if it's near 100%, use
+ Compact Conversation to free up space
+
+
+
+
+
+
API Errors or Rate Limits
+
+ - β’ Verify your API key is valid at console.anthropic.com
+ - β’ Check that your account has sufficient API credits
+ -
+ β’ If you hit rate limits frequently, consider switching to a faster/cheaper model in
+ Settings
+
+ - β’ The Debug Console will show the specific error returned by the API
+
+
+
+
+
Tool Permissions Blocking Work
+
+ -
+ β’ When prompted, you can choose Allow for session to avoid repeated prompts
+
+ - β’ Adjust the permission mode in Settings to auto-approve trusted tools
+ -
+ β’ If a tool call was denied by mistake, simply ask Hikari to try again β she'll prompt you
+ once more
+
+
+
+
+
+
+ Missing Features or Greyed-Out Buttons
+
+
+ - β’ Some features require an active connection β connect to a working directory first
+ -
+ β’ The File Editor (Ctrl+E) is only available when connected
+
+ - β’ The Agent Monitor shows activity only during Task Loop or multi-agent sessions
+
+
+
+
+
Workspace Trust Prompt
+
+ If you see a trust prompt when connecting, it means Hikari detected hooks, MCP servers, or
+ slash commands in your working directory. Review them carefully before clicking
+ Trust & Connect. See the Panels & Tools page for more
+ details.
+
+
+
+
+
Context Window Full
+
Watch the context bar in the Stats panel. When it approaches 100%:
+
+ -
+ β’ Use Compact Conversation from the menu to summarise and compress the history
+
+ -
+ β’ Use Start Fresh with Context to begin a new session that carries over a summary
+
+
+
+
+
+
Reporting Issues
+
+ If you encounter a bug or unexpected behaviour, please report it on our
+ GitHub issues page. Include:
+
+
+ - β’ What you were doing when the issue occurred
+ - β’ Any error messages from the Debug Console
+ - β’ The app version (shown in the About panel)
+
+
+ You can also join our Discord community (link in the menu) for real-time support.
+
+
+
+
+
diff --git a/src/lib/components/docs/helpPages.test.ts b/src/lib/components/docs/helpPages.test.ts
new file mode 100644
index 0000000..05f5e13
--- /dev/null
+++ b/src/lib/components/docs/helpPages.test.ts
@@ -0,0 +1,99 @@
+import { describe, it, expect } from "vitest";
+import { HELP_PAGES, nextPage, prevPage, clampPage, isFirstPage, isLastPage } from "./helpPages";
+
+describe("HELP_PAGES", () => {
+ it("contains 12 pages", () => {
+ expect(HELP_PAGES).toHaveLength(12);
+ });
+
+ it("has unique ids", () => {
+ const ids = HELP_PAGES.map((p) => p.id);
+ expect(new Set(ids).size).toBe(ids.length);
+ });
+
+ it("has non-empty titles", () => {
+ for (const page of HELP_PAGES) {
+ expect(page.title.length).toBeGreaterThan(0);
+ }
+ });
+});
+
+describe("nextPage", () => {
+ it("advances to the next page", () => {
+ expect(nextPage(0, 7)).toBe(1);
+ expect(nextPage(3, 7)).toBe(4);
+ });
+
+ it("does not go past the last page", () => {
+ expect(nextPage(6, 7)).toBe(6);
+ });
+
+ it("clamps when already at the last page", () => {
+ expect(nextPage(10, 7)).toBe(6);
+ });
+});
+
+describe("prevPage", () => {
+ it("goes back to the previous page", () => {
+ expect(prevPage(3)).toBe(2);
+ expect(prevPage(1)).toBe(0);
+ });
+
+ it("does not go before the first page", () => {
+ expect(prevPage(0)).toBe(0);
+ });
+
+ it("clamps when already at the first page", () => {
+ expect(prevPage(-1)).toBe(0);
+ });
+});
+
+describe("clampPage", () => {
+ it("returns the page unchanged when in range", () => {
+ expect(clampPage(3, 7)).toBe(3);
+ expect(clampPage(0, 7)).toBe(0);
+ expect(clampPage(6, 7)).toBe(6);
+ });
+
+ it("clamps negative indices to 0", () => {
+ expect(clampPage(-1, 7)).toBe(0);
+ });
+
+ it("clamps over-range indices to the last page", () => {
+ expect(clampPage(10, 7)).toBe(6);
+ });
+
+ it("returns 0 when totalPages is 0", () => {
+ expect(clampPage(3, 0)).toBe(0);
+ });
+
+ it("returns 0 when totalPages is negative", () => {
+ expect(clampPage(3, -1)).toBe(0);
+ });
+});
+
+describe("isFirstPage", () => {
+ it("returns true for index 0", () => {
+ expect(isFirstPage(0)).toBe(true);
+ });
+
+ it("returns false for index greater than 0", () => {
+ expect(isFirstPage(1)).toBe(false);
+ expect(isFirstPage(6)).toBe(false);
+ });
+});
+
+describe("isLastPage", () => {
+ it("returns true for the last index", () => {
+ expect(isLastPage(6, 7)).toBe(true);
+ });
+
+ it("returns false for indices before the last", () => {
+ expect(isLastPage(5, 7)).toBe(false);
+ expect(isLastPage(0, 7)).toBe(false);
+ });
+
+ it("returns true when index exceeds total", () => {
+ expect(isLastPage(10, 7)).toBe(true);
+ });
+});
diff --git a/src/lib/components/docs/helpPages.ts b/src/lib/components/docs/helpPages.ts
new file mode 100644
index 0000000..bc9cc06
--- /dev/null
+++ b/src/lib/components/docs/helpPages.ts
@@ -0,0 +1,40 @@
+export type HelpPageDef = {
+ id: string;
+ title: string;
+};
+
+export const HELP_PAGES: HelpPageDef[] = [
+ { id: "getting-started", title: "Getting Started" },
+ { id: "keyboard-shortcuts", title: "Keyboard Shortcuts" },
+ { id: "chat-input", title: "Chat & Input" },
+ { id: "file-editor", title: "File Editor" },
+ { id: "git-panel", title: "Git & Version Control" },
+ { id: "theme-customisation", title: "Theme Customisation" },
+ { id: "model-config", title: "Model & API Configuration" },
+ { id: "session-management", title: "Session Management" },
+ { id: "task-loop", title: "Task Loop & Automation" },
+ { id: "panels-tools", title: "Panels & Tools" },
+ { id: "troubleshooting", title: "Troubleshooting" },
+ { id: "changelog", title: "Changelog" },
+];
+
+export function nextPage(currentIndex: number, totalPages: number): number {
+ return Math.min(currentIndex + 1, totalPages - 1);
+}
+
+export function prevPage(currentIndex: number): number {
+ return Math.max(currentIndex - 1, 0);
+}
+
+export function clampPage(pageIndex: number, totalPages: number): number {
+ if (totalPages <= 0) return 0;
+ return Math.max(0, Math.min(pageIndex, totalPages - 1));
+}
+
+export function isFirstPage(currentIndex: number): boolean {
+ return currentIndex === 0;
+}
+
+export function isLastPage(currentIndex: number, totalPages: number): boolean {
+ return currentIndex >= totalPages - 1;
+}