Add initial planning files from ChatGPT research here
This commit is contained in:
@@ -0,0 +1,420 @@
|
||||
# Adventure Storyteller — Specification
|
||||
|
||||
**Status:** Draft v0.1
|
||||
**Purpose:** Define what the system must do, independent of implementation choice.
|
||||
|
||||
## 1. Product Goal
|
||||
|
||||
Build a local-first, browser-based interactive storytelling application that uses a locally hosted AI model to act as narrator and story collaborator.
|
||||
|
||||
The initial target is fantasy adventure fiction, but the system must remain genre-agnostic so the same engine can support science fiction, mystery, horror, historical fiction, westerns, and other settings through campaign configuration and imported local material.
|
||||
|
||||
This is primarily an **interactive story**, not a rules-driven role-playing game.
|
||||
|
||||
The application must preserve story continuity, authoritative world state, long-term memory, checkpoints, rollback, and branching without depending on the language model to remember everything correctly.
|
||||
|
||||
## 2. Core Principles
|
||||
|
||||
1. **Local first**
|
||||
- Primary operation must not require Internet access.
|
||||
- AI inference must use a local Ollama instance for v1.
|
||||
- Imported story/reference material must remain local.
|
||||
- No telemetry, analytics, remote fonts, remote assets, or automatic external content retrieval in the production configuration.
|
||||
- No cloud inference providers in v1.
|
||||
|
||||
2. **Authoritative application state**
|
||||
- The language model produces narration and proposed story developments.
|
||||
- The application owns the authoritative transcript, state, history, branches, checkpoints, and canon.
|
||||
- The model must not be treated as the system of record.
|
||||
|
||||
3. **Persistent stories**
|
||||
- Campaigns must survive application restarts.
|
||||
- A user must be able to leave a story and resume later.
|
||||
- The full original transcript must remain preserved even when only a subset is sent to the model.
|
||||
|
||||
4. **Recoverability**
|
||||
- Every accepted turn should be recoverable.
|
||||
- Users must be able to return to an earlier point.
|
||||
- Restoring an earlier point should preserve abandoned future history as an alternate branch rather than destructively erasing it.
|
||||
|
||||
5. **Closed-corpus authority**
|
||||
- Story canon may come from:
|
||||
- explicit campaign setup,
|
||||
- user-imported local files,
|
||||
- authoritative story state,
|
||||
- prior accepted story events,
|
||||
- newly invented material accepted into the story.
|
||||
- The model's pretrained knowledge may assist with language generation, but it must not silently override established campaign canon.
|
||||
|
||||
6. **Genre independence**
|
||||
- No fantasy-specific mechanics should be hard-coded into the core data model.
|
||||
- Generic concepts should include characters, locations, organizations, items, vehicles, events, relationships, facts, scenes, and story threads.
|
||||
|
||||
7. **Future media support**
|
||||
- v1 does not need image or video generation.
|
||||
- The architecture must preserve enough structured scene and character information to support future image, video, audio, and other media generation.
|
||||
|
||||
## 3. Primary User Experience
|
||||
|
||||
The user opens a local browser interface and can:
|
||||
|
||||
- create a new campaign,
|
||||
- select or enter a genre/story profile,
|
||||
- define the protagonist and initial setting,
|
||||
- import local canon/reference/inspiration files,
|
||||
- begin or resume a story,
|
||||
- enter natural-language actions, dialogue, or narrative direction,
|
||||
- read streamed narration from the local model,
|
||||
- inspect story state and relevant context,
|
||||
- create named checkpoints,
|
||||
- move back to earlier turns,
|
||||
- branch into alternate continuations,
|
||||
- inspect or edit authoritative canon/state,
|
||||
- export or back up a campaign.
|
||||
|
||||
The experience should feel like collaborative fiction with a persistent AI narrator, not a character-stat game.
|
||||
|
||||
## 4. Campaign Setup
|
||||
|
||||
A campaign should support:
|
||||
|
||||
- title,
|
||||
- genre/profile,
|
||||
- tone,
|
||||
- writing style,
|
||||
- protagonist description,
|
||||
- world description,
|
||||
- narrative rules,
|
||||
- campaign-specific canon,
|
||||
- optional imported local reference material,
|
||||
- optional imported inspiration material,
|
||||
- local model selection from installed Ollama models,
|
||||
- generation settings.
|
||||
|
||||
Examples of profiles:
|
||||
|
||||
- low fantasy,
|
||||
- high fantasy,
|
||||
- hard science fiction,
|
||||
- space opera,
|
||||
- noir detective,
|
||||
- historical adventure,
|
||||
- horror.
|
||||
|
||||
Profiles should be data/configuration, not separate code paths.
|
||||
|
||||
## 5. Story Interaction Modes
|
||||
|
||||
The minimum interaction should support:
|
||||
|
||||
- **Action / direction:** user describes what the protagonist does.
|
||||
- **Dialogue:** user specifies what the protagonist says.
|
||||
- **Story direction:** user gives out-of-character guidance about pacing, tone, or desired developments.
|
||||
- **Continue:** narrator continues without a new user action.
|
||||
- **Retry:** generate an alternate response from the same parent state.
|
||||
- **Edit prior user or narrator text:** where safe and supported by branch/state rules.
|
||||
|
||||
The exact UI labels may change during design.
|
||||
|
||||
## 6. Persistence and Story History
|
||||
|
||||
### 6.1 Turn preservation
|
||||
|
||||
Every accepted turn should record at minimum:
|
||||
|
||||
- unique turn ID,
|
||||
- campaign ID,
|
||||
- branch ID,
|
||||
- parent turn ID,
|
||||
- user input,
|
||||
- model response,
|
||||
- timestamp,
|
||||
- model identifier,
|
||||
- generation settings,
|
||||
- exact prompt/context snapshot or reproducible equivalent,
|
||||
- retrieved memory/lore references,
|
||||
- associated structured state snapshot or state version,
|
||||
- associated scene snapshot.
|
||||
|
||||
### 6.2 Story tree
|
||||
|
||||
The story history must support branching.
|
||||
|
||||
Conceptually:
|
||||
|
||||
```text
|
||||
Turn 100
|
||||
|
|
||||
Turn 101
|
||||
/ \
|
||||
102A 102B
|
||||
| |
|
||||
103A 103B
|
||||
```
|
||||
|
||||
Alternate continuations must remain available unless the user explicitly deletes them.
|
||||
|
||||
### 6.3 Checkpoints
|
||||
|
||||
Support:
|
||||
|
||||
- automatic recoverability at every accepted turn,
|
||||
- named checkpoints,
|
||||
- restore/jump to prior turn,
|
||||
- branch from any recoverable point,
|
||||
- export/backup.
|
||||
|
||||
## 7. Narrative State
|
||||
|
||||
The application should maintain structured narrative continuity where useful.
|
||||
|
||||
Generic state categories may include:
|
||||
|
||||
- characters,
|
||||
- locations,
|
||||
- organizations/factions,
|
||||
- possessions/items,
|
||||
- vehicles,
|
||||
- relationships,
|
||||
- known facts,
|
||||
- unresolved story threads,
|
||||
- promises/debts/commitments,
|
||||
- injuries/conditions where narratively relevant,
|
||||
- timelines and chronology,
|
||||
- scene participants,
|
||||
- current location,
|
||||
- current scene,
|
||||
- established world rules.
|
||||
|
||||
This state is not intended to become a D&D-style stat system unless a future optional module adds one.
|
||||
|
||||
## 8. Long-Term Memory
|
||||
|
||||
The application must not rely on sending the entire transcript to Ollama.
|
||||
|
||||
Context construction should support:
|
||||
|
||||
- permanent campaign instructions,
|
||||
- current authoritative state,
|
||||
- high-level story summary,
|
||||
- chapter/arc summary,
|
||||
- recent turns,
|
||||
- relevant older story memories,
|
||||
- relevant local canon/reference/inspiration passages,
|
||||
- current user input.
|
||||
|
||||
The full original transcript must remain preserved even if older turns are summarized or omitted from the active model context.
|
||||
|
||||
## 9. Local Knowledge Library
|
||||
|
||||
Users should be able to import local material.
|
||||
|
||||
Initial file types:
|
||||
- `.txt`
|
||||
- `.md`
|
||||
|
||||
Later candidates:
|
||||
- `.pdf`
|
||||
- `.epub`
|
||||
- `.docx`
|
||||
- structured JSON/TOML/YAML campaign packs.
|
||||
|
||||
Each source should be classified as one of:
|
||||
|
||||
### Canon
|
||||
Authoritative facts that are true in the campaign.
|
||||
|
||||
### Reference
|
||||
Supporting factual or descriptive material the narrator may use.
|
||||
|
||||
### Inspiration
|
||||
Material that may influence atmosphere, situations, and prose but must not override canon.
|
||||
|
||||
The application should preserve source provenance for retrieved passages.
|
||||
|
||||
## 10. Retrieval
|
||||
|
||||
Retrieval should be local.
|
||||
|
||||
Potential mechanisms:
|
||||
- SQLite full-text search,
|
||||
- local embeddings generated through Ollama,
|
||||
- hybrid lexical/vector retrieval.
|
||||
|
||||
The final mechanism will be selected during Phase 0 research.
|
||||
|
||||
Requirements:
|
||||
- no remote vector database,
|
||||
- no external embedding service,
|
||||
- source provenance retained,
|
||||
- campaign-specific scoping,
|
||||
- retrieval inspectable for debugging.
|
||||
|
||||
## 11. Prompt Transparency
|
||||
|
||||
For troubleshooting and reproducibility, the user should be able to inspect what the narrator was given for a turn.
|
||||
|
||||
This should include, directly or indirectly:
|
||||
|
||||
- system/narrator instructions,
|
||||
- campaign rules,
|
||||
- state,
|
||||
- summaries,
|
||||
- recent turns,
|
||||
- retrieved memories,
|
||||
- retrieved lore/reference passages,
|
||||
- current user input.
|
||||
|
||||
## 12. Local-Only Security Requirements
|
||||
|
||||
Production defaults must:
|
||||
|
||||
- bind the application to loopback unless intentionally configured otherwise,
|
||||
- connect to Ollama through a local/approved endpoint,
|
||||
- reject or warn on non-local model endpoints,
|
||||
- include no telemetry,
|
||||
- include no analytics,
|
||||
- avoid remote fonts and CDN-delivered runtime dependencies,
|
||||
- avoid automatic URL retrieval,
|
||||
- avoid cloud model providers,
|
||||
- avoid executable imported content,
|
||||
- treat imported files as untrusted data,
|
||||
- document all outbound network behavior,
|
||||
- allow operation with the machine disconnected from the Internet.
|
||||
|
||||
A future LAN-access mode may be considered separately.
|
||||
|
||||
## 13. Browser-First Interface
|
||||
|
||||
The primary interface should be browser-based.
|
||||
|
||||
Expected areas include:
|
||||
|
||||
- campaign selection,
|
||||
- story transcript,
|
||||
- input composer,
|
||||
- checkpoint/story-tree navigation,
|
||||
- narrative state inspector,
|
||||
- knowledge/library management,
|
||||
- settings,
|
||||
- prompt/context inspection,
|
||||
- future media gallery.
|
||||
|
||||
Terminal tooling may exist for administration, migration, diagnostics, or development, but must not be the primary user experience.
|
||||
|
||||
## 14. Scene Model and Future Media
|
||||
|
||||
v1 should preserve enough information for future media generation.
|
||||
|
||||
A scene snapshot may include:
|
||||
|
||||
- scene ID,
|
||||
- source turn range,
|
||||
- location,
|
||||
- time/day/lighting,
|
||||
- mood,
|
||||
- characters present,
|
||||
- visual character descriptors,
|
||||
- significant objects,
|
||||
- important actions,
|
||||
- environment,
|
||||
- continuity notes.
|
||||
|
||||
Character records should allow optional visual descriptors.
|
||||
|
||||
Location records should allow optional visual profiles.
|
||||
|
||||
The system should reserve a generic media abstraction for future:
|
||||
|
||||
- scene images,
|
||||
- character portraits,
|
||||
- location art,
|
||||
- storyboards,
|
||||
- recap images,
|
||||
- multi-turn video clips,
|
||||
- audio/voice.
|
||||
|
||||
Media generation must remain optional and separable from the core story engine.
|
||||
|
||||
## 15. Future Media Provider Concept
|
||||
|
||||
The core application should eventually be able to call provider adapters such as:
|
||||
|
||||
```text
|
||||
Media Provider
|
||||
├── Image Provider
|
||||
├── Video Provider
|
||||
└── Audio Provider
|
||||
```
|
||||
|
||||
The story engine must not depend on a specific image or video backend.
|
||||
|
||||
Potential local media systems can be evaluated later.
|
||||
|
||||
## 16. Export and Backup
|
||||
|
||||
A campaign export should eventually be capable of including:
|
||||
|
||||
- transcript,
|
||||
- branches,
|
||||
- checkpoints,
|
||||
- structured state,
|
||||
- campaign configuration,
|
||||
- summaries,
|
||||
- imported knowledge metadata,
|
||||
- scene snapshots,
|
||||
- generated media metadata,
|
||||
- optionally generated media files.
|
||||
|
||||
The export format should be portable and documented.
|
||||
|
||||
## 17. Explicit Non-Goals for v1
|
||||
|
||||
Unless Phase 0 changes the decision, v1 should not require:
|
||||
|
||||
- D&D or other RPG rules,
|
||||
- dice,
|
||||
- hit points,
|
||||
- combat simulation,
|
||||
- multiplayer,
|
||||
- cloud accounts,
|
||||
- cloud inference,
|
||||
- Internet search,
|
||||
- automatic online content downloading,
|
||||
- image generation,
|
||||
- video generation,
|
||||
- mobile-native apps,
|
||||
- hosted SaaS deployment.
|
||||
|
||||
## 18. Candidate Starting Projects
|
||||
|
||||
Phase 0 will evaluate at minimum:
|
||||
|
||||
- Open Dungeon — `newideas99/open-dungeon`
|
||||
- AI-DnD — `parththakkar106/AI-DnD`
|
||||
- Local Adventure Engine / ai-adventure — `CaoRuiming/ai-adventure`
|
||||
- aiMultiFool
|
||||
- additional credible candidates discovered during research
|
||||
|
||||
Reference-only projects may include:
|
||||
|
||||
- SillyTavern,
|
||||
- RisuAI,
|
||||
- KoboldAI,
|
||||
- Chronicler,
|
||||
- other local interactive-fiction or long-memory systems.
|
||||
|
||||
## 19. Acceptance Criteria for Specification v1.0
|
||||
|
||||
Before implementation planning begins, the project must have:
|
||||
|
||||
- a selected base/fork strategy,
|
||||
- confirmed licensing compatibility,
|
||||
- confirmed local-only security approach,
|
||||
- confirmed persistence/story-tree model,
|
||||
- confirmed memory/retrieval strategy,
|
||||
- confirmed browser architecture,
|
||||
- confirmed Ollama integration model,
|
||||
- confirmed campaign export/backup strategy,
|
||||
- identified future media extension points,
|
||||
- technical risks and tradeoffs documented.
|
||||
Reference in New Issue
Block a user