Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b6aa342
docs: design spec for the help-first assistant merger with notes editing
barrulus Sep 5, 2026
2cf423e
docs: implementation plan for the assistant merger
barrulus Sep 5, 2026
c0437ca
Merge upstream/help-assistant into the assistant-merger worktree
barrulus Sep 5, 2026
ff00907
docs: tick merge step
barrulus Sep 5, 2026
0671b03
feat(agent): generic tool dispatch in the session loop
barrulus Sep 5, 2026
89a8bc4
feat(agent): notes prompt section, per-turn context block, edit entries
barrulus Sep 5, 2026
defa7a9
feat(notes): editor bridge (current/write/remove/selection) and rich-…
barrulus Sep 5, 2026
1e3f069
feat(assistant): note context, write_note tool and undo
barrulus Sep 5, 2026
fe7e937
feat(assistant): two-panel shell — Help first, This map behind a click
barrulus Sep 5, 2026
27e7868
feat(assistant): This map panel with settings drawer, note chip and e…
barrulus Sep 5, 2026
af6969b
feat(assistant): route Tools and notes-editor entry points into the a…
barrulus Sep 5, 2026
bfe4fc4
test(e2e): assistant dialog — help first, note editing with undo, key…
barrulus Sep 5, 2026
e4eb8cf
fix(assistant): bring the dialog to the front when re-opened from the…
barrulus Sep 5, 2026
baf6a77
docs: verification checklist
barrulus Sep 5, 2026
52c480f
start
Azgaar Sep 5, 2026
5e9866f
chore: add quill 2 as a dependency
barrulus Sep 5, 2026
151a4cd
fix(ui): stack the tour prompt above the help bubble instead of overl…
barrulus Sep 5, 2026
facf192
feat: rich text helpers for the notes editor on quill
barrulus Sep 5, 2026
57afa9e
dialog restyle
Azgaar Sep 5, 2026
cca5c04
feat: notes editor on quill instead of the remote tinymce
barrulus Sep 5, 2026
357f2bb
Merge origin/main (1.151.2 sync, fork PR #68) into the assistant-merg…
barrulus Sep 5, 2026
37f86ec
chore: drop the bundled tinymce
barrulus Sep 5, 2026
94b1f09
Merge feat/notes-editor-quill; notes bridge over Quill
barrulus Sep 5, 2026
522b3a0
docs: tick the Quill merge in the verification checklist
barrulus Sep 5, 2026
4a8731a
fix: guard a leading script or style tag in the rich text check
barrulus Sep 5, 2026
63f6732
test: notes editor e2e on the bundled quill editor
barrulus Sep 5, 2026
9446746
fix: keep ordinary spaces in saved notes and treat table headers as r…
barrulus Sep 5, 2026
8991dab
chore: bump to 1.151.3, changelog entry
barrulus Sep 5, 2026
a53a5c2
Merge final feat/notes-editor-quill (8991dabc); selection bridge keep…
barrulus Sep 5, 2026
10ab539
docs: record the second Quill merge in the checklist
barrulus Sep 5, 2026
d572800
Merge upstream/assistant-ui; both assistant panels wear Azgaar's mess…
barrulus Sep 5, 2026
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
1,967 changes: 1,967 additions & 0 deletions docs/superpowers/plans/2026-09-05-help-assistant-ai-merger.md

Large diffs are not rendered by default.

310 changes: 310 additions & 0 deletions docs/superpowers/specs/2026-09-05-help-assistant-ai-merger-design.md

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions docs/wiki/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ Check out [Dev board](https://github.com/users/Azgaar/projects/3/views/1?sumFiel

Current version of the Fantasy Map Generator is the latest `master` branch. You can download it here: https://github.com/Azgaar/Fantasy-Map-Generator/archive/refs/heads/master.zip. Also see [the wiki](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Q&A#can-i-use-the-generator-offline).

- Help assistant: ask questions about the Generator in the app, answered from the wiki and Discord knowledge by _[barrulus](https://github.com/barrulus)_ [1.151.2]
- Notes Editor: TinyMCE replaced with a bundled Quill 2 rich text editor by _[barrulus](https://github.com/barrulus)_ [1.151.3]
- Assistant: ask about the map you have open, and have it write your notes, with your own AI key by _[barrulus](https://github.com/barrulus)_ [1.151.3]
- Help assistant: ask questions about FMG by _[barrulus](https://github.com/barrulus)_ [1.151.2]
- Annex states and provinces by clicking on the map by _[barrulus](https://github.com/barrulus)_ [1.151.2]
- Option to redraw labels, icons and relief only after a zoom by _[barrulus](https://github.com/barrulus)_ [1.151.2]
- Fix burg label tiers hidden at every zoom on maps migrated from pre-1.140 versions by _[barrulus](https://github.com/barrulus)_ [1.151.2]
- Brushes stamp by distance travelled: smooth, gap-free painting at any refresh rate by _[barrulus](https://github.com/barrulus)_ [1.151.1]
- Brushes stamp by distance travelled by _[barrulus](https://github.com/barrulus)_ [1.151.1]

# Releases

Expand Down
2 changes: 1 addition & 1 deletion docs/wiki/Dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ The source build uses these runtime packages:
* [Lineclip](https://github.com/mapbox/lineclip) by Vladimir Agafonkin
* [Three.js](https://github.com/mrdoob/three.js) by mrdoob and Three.js contributors
* [Driver.js](https://driverjs.com) for the guided UI tour
* [Quill 2](https://quilljs.com) — the rich text editor in the Notes editor
* [Alea](https://github.com/coverslide/node-alea) for seeded random numbers

Vite, TypeScript, Vitest, Playwright and Biome are used as development tools. Node.js 24 or newer is required to build.
Expand All @@ -34,5 +35,4 @@ Loaded on demand:
* [Three.js](https://threejs.org) with `OrbitControls`, `mapControls`, `loopsubdivison` and `OBJExporter` — the 3D scene
* [JSZip](https://github.com/Stuk/jszip) by Stuart Knightley, David Duponchel, Franz Buchinger and António Afonso — tile export
* [Dropbox SDK](https://github.com/dropbox/dropbox-sdk-js) — saving to and loading from Dropbox
* [TinyMCE](https://www.tiny.cloud) — the rich text editor in the Notes editor
* Help gateway at [ask.azgaarsfmg.com](https://ask.azgaarsfmg.com) — answers the in-app help assistant; nothing is bundled, the app only calls it when a question is asked
3 changes: 2 additions & 1 deletion docs/wiki/Home.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ The project is under active development. Join our [Discord server](https://disco
[URL parameters](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/URL-parameters) ·
[GIS data export](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/GIS-data-export) ·
[Ollama text generation](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Ollama-text-generation) ·
[Dependencies](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Dependencies)
[Dependencies](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Dependencies) ·
[Policy](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Policy)

## How can I use the tool?

Expand Down
4 changes: 2 additions & 2 deletions docs/wiki/Knowledge Base.md
Original file line number Diff line number Diff line change
Expand Up @@ -538,11 +538,11 @@ To hide the Assistant, go to Options -> Generator settings and set `Azgaar assis

### The assistant says 'No questions left today'. What now?

Questions are budgeted per day to keep the shared service affordable. Anonymous use gets a small allowance; click 'Sign in with Discord for more' in the assistant panel for a larger one. The wiki and the Discord server hold the same knowledge the assistant answers from
Questions are budgeted per day to keep the shared service affordable. Anonymous use gets a small allowance; click 'Sign in' at the bottom of the assistant panel to sign in with Discord for a larger one. The wiki and the Discord server hold the same knowledge the assistant answers from

### What does the assistant send, and where?

Only the question you type and a conversation id go to the project's help gateway at ask.azgaarsfmg.com; nothing from your map or browser is sent. Answers are drawn from the wiki and Discord knowledge. Signing in with Discord stores a token in this browser, and 'Sign out' removes it
Only the question you type and a conversation id go to the project's help gateway at ask.azgaarsfmg.com; nothing from your map or browser is sent. Answers are drawn from the wiki and Discord knowledge. Signing in with Discord stores a token in this browser, and 'Sign out' removes it. Questions are kept for 90 days to improve the documentation; the 'Policy' link at the bottom of the panel opens the full details at https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Policy

### How to make a river?

Expand Down
60 changes: 60 additions & 0 deletions docs/wiki/Policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
This page describes what data the _Fantasy Map Generator_ (FMG) handles, where it goes, and how long it is kept. It covers the tool as published at [azgaar.github.io/Fantasy-Map-Generator](https://azgaar.github.io/Fantasy-Map-Generator/); a self-hosted or offline copy has no server side at all beyond what you connect yourself.

FMG is a hobby project, not a company. There is no account system, no user profile and nothing is sold to anyone.

## Your maps stay in your browser

Map generation and editing run entirely in the browser. A generated world is never uploaded anywhere.

* **Autosave** writes the current map into your browser's own storage (IndexedDB) so it can be restored when you come back. Clearing the site data removes it. You can turn autosave off in _Options → Generator settings_.
* **Save** and **Load** work with files on your own machine.
* **Settings** (theme, units, locked options, "don't ask again" flags) are stored in this browser's `localStorage`.
* Nothing in this group is readable by the project.

## Optional services you connect yourself

These are off by default. Using one means sending data to that third party under their own terms.

* **Dropbox** — only if you sign in from _Save/Load → Cloud_, and only the map files you choose to store there.
* **Google Translate** — only if you switch the interface language; the page text is then processed by Google.
* **AI text generation** (_Tools → AI generator_) — your prompt goes directly from your browser to the provider you pick (OpenAI, Anthropic, or a local Ollama instance). The API key you enter is kept in this browser's `localStorage` and is sent only to that provider. The project never sees the prompt or the key.

## Azgaar Assistant

The Assistant answers questions about using the Generator. It talks to the project's help gateway at `ask.azgaarsfmg.com`, which is the only FMG server involved anywhere in the tool.

**What is sent.** The question you type and a conversation id. Nothing from your map, your files or your browser is sent — the Assistant cannot see the world you are working on and cannot describe it back to you.

**How long questions are kept.** Questions and the answers given to them are retained for **90 days**, then deleted. They are read only to fix wrong answers and to find gaps in the wiki. They are not published, shared or used to identify anyone.

**Conversation memory.** The Assistant remembers the current thread so follow-up questions make sense. Only the server-issued conversation id is stored in your browser, in `sessionStorage`, which means one tab and one sitting. The gateway forgets the thread two hours after the last question, and the panel marks the boundary with a _new conversation_ line. The **New chat** button in the panel's title bar drops the id and clears the transcript immediately.

**Feedback.** The 👍 / 👎 buttons post the rating and the id of that one answer. No text is attached.

**Daily limits.** Questions are budgeted per day to keep a shared free service affordable. The count is tied to your sign-in when you are signed in, and otherwise to a coarse anonymous bucket.

**Availability.** The gateway only accepts requests from the official site. On a self-hosted copy the panel says so and offers the wiki instead.

**Turning it off.** _Options → Generator settings → Azgaar assistant → Hide_ removes the button and the panel. Nothing is sent when you do not ask a question.

## Signing in with Discord

Signing in raises your daily question allowance. It is optional; the Assistant works without it.

* Sign-in is a redirect to Discord's own OAuth screen. FMG never sees your Discord password.
* The gateway learns your Discord account id so it can count your questions against your own allowance.
* A token is stored in this browser's `localStorage`. **Sign out** in the panel deletes it, on the server and here.

## Analytics

The official site loads Google Analytics, which records anonymous usage such as page views and rough location. It tells the project how many people use the tool and which features are worth maintaining. It is not linked to your maps or to your Assistant questions. Browser-level tracking protection or an ad blocker stops it, and the Generator works exactly the same with it blocked. A self-hosted copy of the repository does not load it.

## Licence and your work

The Generator's source is [MIT-licensed](https://github.com/Azgaar/Fantasy-Map-Generator/blob/master/LICENSE). Maps you create are yours, for any purpose, commercial included, with no attribution required — though a link back is always appreciated. Some bundled assets (fonts, icon sets, coat-of-arms artwork) carry their own licences; see [Dependencies](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Dependencies).

The tool is provided as is, without warranty of any kind, as the licence states.

## Questions and removal requests

Ask on the [Discord server](https://discordapp.com/invite/X7E84HU), open an [issue](https://github.com/Azgaar/Fantasy-Map-Generator/issues), or write to azgaar.fmg@yandex.com. To have an Assistant question removed before the 90 days are up, include roughly when you asked it and what it was about.
2 changes: 1 addition & 1 deletion docs/wiki/_Footer.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[Main Page](https://github.com/Azgaar/Fantasy-Map-Generator/wiki) | [Quick Start Tutorial](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Quick-Start-Tutorial) | [Q&A](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Q&A) | [Shortcuts](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Hotkeys) | [URL parameters](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/URL-parameters) | [Changelog](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Changelog)
[Main Page](https://github.com/Azgaar/Fantasy-Map-Generator/wiki) | [Quick Start Tutorial](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Quick-Start-Tutorial) | [Q&A](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Q&A) | [Shortcuts](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Hotkeys) | [URL parameters](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/URL-parameters) | [Changelog](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Changelog) | [Policy](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Policy)

_These pages are maintained in the [main repository](https://github.com/Azgaar/Fantasy-Map-Generator/tree/master/docs/wiki) and synced automatically. Edits made here will be overwritten — please open a pull request instead._
65 changes: 62 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "fantasy-map-generator",
"productName": "Fantasy Map Generator",
"version": "1.151.2-fork.1",
"version": "1.151.3",
"description": "Azgaar's _Fantasy Map Generator_ is a free web application that helps fantasy writers, game masters, and cartographers create and edit fantasy maps.",
"homepage": "https://github.com/Azgaar/Fantasy-Map-Generator#readme",
"bugs": {
Expand Down Expand Up @@ -61,6 +61,7 @@
"driver.js": "^1.4.0",
"lineclip": "^2.0.0",
"polylabel": "^2.0.1",
"quill": "^2.0.3",
"three": "^0.184.0",
"zod": "^4.4.3"
},
Expand Down
14 changes: 14 additions & 0 deletions playwright.local.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { defineConfig } from "@playwright/test";
import base from "./playwright.config";

// Runs against this worktree's own dev server on 5211. Port 5173 belongs to the user's session.
export default defineConfig({
...base,
use: { ...base.use, baseURL: "http://localhost:5211" },
webServer: {
command: "npx vite --port 5211 --strictPort",
url: "http://localhost:5211",
reuseExistingServer: true,
timeout: 120000
}
});
Loading
Loading