progress
This commit is contained in:
42
MainContext.md
Normal file
42
MainContext.md
Normal file
@@ -0,0 +1,42 @@
|
||||
**manual_slop** is a local GUI tool for manually curating and sending context to AI APIs. It aggregates files, screenshots, and discussion history into a structured markdown file and sends it to a chosen AI provider with a user-written message.
|
||||
|
||||
**Stack:**
|
||||
- `dearpygui` - GUI with docking/floating/resizable panels
|
||||
- `google-genai` - Gemini API
|
||||
- `anthropic` - Anthropic API
|
||||
- `tomli-w` - TOML writing
|
||||
- `uv` - package/env management
|
||||
|
||||
**Files:**
|
||||
- `gui.py` - main GUI, `App` class, all panels, all callbacks
|
||||
- `ai_client.py` - unified provider wrapper, model listing, session management, send
|
||||
- `aggregate.py` - reads config, collects files/screenshots/discussion, writes numbered `.md` files to `output_dir/md_gen/`
|
||||
- `config.toml` - namespace, output_dir, files paths+base_dir, screenshots paths+base_dir, discussion history array, ai provider+model
|
||||
- `credentials.toml` - gemini api_key, anthropic api_key
|
||||
|
||||
**GUI Panels:**
|
||||
- **Config** - namespace, output dir, save
|
||||
- **Files** - base_dir, scrollable path list with remove, add file(s), add wildcard
|
||||
- **Screenshots** - base_dir, scrollable path list with remove, add screenshot(s)
|
||||
- **Discussion History** - multiline text box, `---` as separator between excerpts, save splits on `---` back into toml array
|
||||
- **Provider** - provider combo (gemini/anthropic), model listbox populated from API, fetch models button, status line
|
||||
- **Message** - multiline input, Gen+Send button, MD Only button, Reset session button
|
||||
- **Response** - readonly multiline displaying last AI response
|
||||
|
||||
**Data flow:**
|
||||
1. GUI edits are held in `App` state lists (`self.files`, `self.screenshots`, `self.history`) and dpg widget values
|
||||
2. `_flush_to_config()` pulls all widget values into `self.config` dict
|
||||
3. `_do_generate()` calls `_flush_to_config()`, saves `config.toml`, calls `aggregate.run(config)` which writes the md and returns `(markdown_str, path)`
|
||||
4. `cb_generate_send()` calls `_do_generate()` then threads a call to `ai_client.send(md, message)`
|
||||
5. `ai_client.send()` prepends the md as a `<context>` block to the user message and sends via the active provider chat session
|
||||
6. Sessions are stateful within a run (chat history maintained), `Reset` clears them
|
||||
|
||||
**Config persistence:**
|
||||
- Every send and save writes `config.toml` with current state including selected provider and model under `[ai]`
|
||||
- Discussion history is stored as a TOML array of strings in `[discussion] history`
|
||||
- File and screenshot paths are stored as TOML arrays, support absolute paths, relative paths from base_dir, and `**/*` wildcards
|
||||
|
||||
**Known extension points:**
|
||||
- Add more providers by adding a section to `credentials.toml`, a `_list_*` and `_send_*` function in `ai_client.py`, and the provider name to the `PROVIDERS` list in `gui.py`
|
||||
- System prompt support could be added as a field in `config.toml` and passed in `ai_client.send()`
|
||||
- Discussion history excerpts could be individually toggleable for inclusion in the generated md
|
||||
11
config.toml
11
config.toml
@@ -1,10 +1,17 @@
|
||||
[output]
|
||||
namespace = "colorforth_bootslop"
|
||||
output_dir = "."
|
||||
namespace = "manual_slop"
|
||||
output_dir = "./md_gen"
|
||||
|
||||
[files]
|
||||
base_dir = "C:/projects/manual_slop"
|
||||
paths = [
|
||||
"config.toml",
|
||||
"ai_client.py",
|
||||
"aggregate.py",
|
||||
"gemini.py",
|
||||
"gui.py",
|
||||
"pyproject.toml",
|
||||
"MainContext.md"
|
||||
]
|
||||
|
||||
[screenshots]
|
||||
|
||||
Reference in New Issue
Block a user