Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 57 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build and Package Electron App (Windows Only)
name: Build and Package Electron App (Windows & Linux)

on:
push:
Expand Down Expand Up @@ -67,3 +67,59 @@ jobs:
dist/*.zip
retention-days: 3
if-no-files-found: error

build-linux:
name: Build for Linux
runs-on: ubuntu-latest
timeout-minutes: 30

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'

- name: Install Dependencies
run: npm ci

- name: Run Tests
run: npm test

- name: Build Frontend Assets
run: npm run build --if-present

# Always build without publishing — release step handles upload separately
- name: Package Electron App
run: npm run package -- --linux --publish never
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# On version tag → create a GitHub Release and attach the built installers
# Tags with -beta / -alpha / -rc are automatically marked as pre-release
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: |
dist/*.AppImage
dist/*.deb
draft: false
prerelease: ${{ contains(github.ref, '-beta') || contains(github.ref, '-alpha') || contains(github.ref, '-rc') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# On branch / PR builds → upload as a temporary artifact (expires in 3 days)
- name: Upload Artifacts (non-release builds)
if: "!startsWith(github.ref, 'refs/tags/')"
uses: actions/upload-artifact@v4
with:
name: electron-linux-build
path: |
dist/*.AppImage
dist/*.deb
retention-days: 3
if-no-files-found: error
61 changes: 61 additions & 0 deletions AI_SETUP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# AI Configuration & Model Setup Guide

MoilStack .md uses the standard OpenAI Chat Completions API format for its AI capabilities. This guide provides detailed instructions on configuring both cloud infrastructure and local offline models[cite: 1].

---

## Cloud API Providers

To connect a cloud provider, navigate to **Settings** (⚙ gear icon) → **AI Models** → **Add Model**, choose a provider type, and input your credentials[cite: 1].

| Provider | Base URL | Free Tier Details |
|---|---|---|
| [Groq](https://console.groq.com) | `https://api.groq.com/openai/v1` | ✅ No credit card required[cite: 1] |
| [Google Gemini](https://aistudio.google.com/app/apikey) | `https://generativelanguage.googleapis.com/v1beta/openai/` | ✅ Free tier available[cite: 1] |
| [OpenRouter](https://openrouter.ai/keys) | `https://openrouter.ai/api/v1` | ✅ Free models available (append `:free`)[cite: 1] |
| [Mistral](https://console.mistral.ai) | `https://api.mistral.ai/v1` | ✅ Free tier available[cite: 1] |
| [Together AI](https://api.together.ai) | `https://api.together.xyz/v1` | ✅ $1 credit on signup[cite: 1] |
| [OpenAI](https://platform.openai.com/api-keys) | `https://api.openai.com/v1` | Paid tier only[cite: 1] |

---

## Local Ollama Setup (Fully Private)

For maximum data privacy, you can run large language models completely local to your machine with zero data leakage[cite: 1].

1. Download and install the core framework from [ollama.com/download](https://ollama.com/download)[cite: 1].
2. Open your local terminal window and pull your preferred model[cite: 1]. We highly recommend running `ollama pull qwen2.5:7b` or `ollama pull llama3.2`[cite: 1].
3. Inside MoilStack .md, open the Settings menu, add a new model with the type set to **Ollama**, and click **Detect** to auto-discover your active local engines[cite: 1].

> *Note: Running local models under 7B parameters may yield less reliable results when processing strict inline document edits[cite: 1].*

---

## Recommended Models

| Model Name | Integration Provider | Editing Accuracy | Speed Metrics |
|---|---|---|---|
| `llama-3.3-70b-versatile` | Groq (Free) | ⭐⭐⭐⭐⭐ | Ultra Fast[cite: 1] |
| `gemini-2.0-flash` | Google (Free) | ⭐⭐⭐⭐⭐ | Exceptionally Fast[cite: 1] |
| `gpt-4o-mini` | OpenAI (Paid) | ⭐⭐⭐⭐⭐ | Fast[cite: 1] |
| `qwen2.5:7b` | Ollama (Local) | ⭐⭐⭐⭐ | Medium[cite: 1] |
| `llama3.2` | Ollama (Local) | ⭐⭐⭐ | Fast[cite: 1] |

---

## Core Provider Compatibility

| Provider Integration | Support Status | Architecture Notes |
|---|---|---|
| Groq | ✅ Fully Supported | Standard OpenAI format integration with free options[cite: 1]. |
| OpenAI | ✅ Fully Supported | Native standard compatibility[cite: 1]. |
| Together AI | ✅ Fully Supported | Native standard compatibility[cite: 1]. |
| Mistral AI | ✅ Fully Supported | Native standard compatibility[cite: 1]. |
| OpenRouter | ✅ Fully Supported | Native standard compatibility[cite: 1]. |
| Google Gemini | ✅ Fully Supported | Accessible via standard OpenAI-compatible endpoints[cite: 1]. |
| Cerebras | ✅ Fully Supported | Native standard compatibility[cite: 1]. |
| Perplexity | ✅ Fully Supported | Native standard compatibility[cite: 1]. |
| Azure OpenAI | ⚠️ Partial Support | Utilizes a unique deployment URL layout rather than global endpoints[cite: 1]. |
| Anthropic Claude | ❌ Not Supported | Relies on a non-standard API structure that is not yet supported[cite: 1]. |
| AWS Bedrock | ❌ Not Supported | Demands AWS SigV4 request signatures which are not yet supported[cite: 1]. |
| Ollama | ✅ Fully Supported | Integrated via dedicated Ollama NDJSON streaming endpoints[cite: 1]. |
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,30 @@ All notable new features and critical fixes for MoilStack .md.

---

## [1.1.0] - 2026-07-18

### Added
- **Copy / Paste in the editor context menu** — added as a new group at the top, above the formatting options, with `Ctrl C` / `Ctrl V` shown as hints
- **Ctrl+Shift+N — New File (Explorer)** — creates a file on disk in the active Explorer folder (prompting to open a folder first if none is active), distinct from Ctrl+N's in-memory untitled buffer; also added to the hamburger menu
- **File tagging** — right-click → "Add Tags…" opens a small modal to add/edit a file's tags, stored in its YAML frontmatter (`tags: [work, project]`); pre-fills with existing tags and preserves cursor position in the document body when saved
- Tags are shown as `#tag` pills next to filenames in Root folder only Explorer mode
- Search by tag with `#tag` or `tag:name` in the header search box — works across Multi-level, Root-only, and Custom (Recents) explorer modes, matching only real frontmatter tags rather than plain text
- Settings → File Explorer now explains the frontmatter format and search syntax directly in the Explorer Mode description
- **Quick jump to Explorer settings** — clicking the "Explorer" label in the sidebar header (now shown with a small gear icon) opens Settings, switches to the Explorer tab, and scrolls to/highlights the Explorer Mode row
- **Remove recent folders** — a hover-revealed × button now lets you remove a folder from the recents list without switching to it first, in both the Welcome screen's Recents list and the header folder-path dropdown

### Changed
- **Editor context menu decluttered** — removed Bullet List and Numbered List (they only ever applied to the first level and behaved inconsistently on nested lists) and Divider/horizontal-rule; users can still type Markdown list/`---` syntax directly
- **File tags are frontmatter-only** — dropped the inline `#hashtag`-in-body fallback for tag detection (it produced false positives from URLs, anchors, and code); a file's tags now only come from an explicit `tags:` field in YAML frontmatter
- **Image toolbar/context-menu action** — selected text now becomes the image's alt text (`![alt](url)`), matching how the Link action already worked, instead of incorrectly becoming the image path

### Fixed
- **Ctrl+Z not undoing context-menu formatting actions** — Bold, Italic, Strikethrough, headings, lists, blockquote, code block, and table insert now push an undo snapshot before editing, so Ctrl+Z correctly reverts them (previously these used a text-insertion method that the browser's native undo history didn't track)
- **Long tag lists squeezing the filename out of view** — in Root folder only Explorer mode, a file with several tags could shrink its filename down to nothing; the filename now keeps a minimum width and the tag list clips instead
- **"Untitled (unsaved)" row disappearing after Save As** — the Recent Files sidebar now always shows an "Untitled (unsaved)" row, so there's a one-click way back to a blank document after saving instead of having to press Ctrl+N again

---

## [1.0.1] - 2026-07-08

### Added
Expand Down
Loading
Loading