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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Keep SQLx migration checksums stable across Windows and Git clients.
src-tauri/migrations/*.sql text eol=lf
16 changes: 15 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,4 +132,18 @@ jobs:

- name: Rust dependency audit
working-directory: src-tauri
run: cargo audit --ignore RUSTSEC-2026-0187 --ignore RUSTSEC-2026-0185 --ignore RUSTSEC-2023-0071
shell: pwsh
run: |
$quinnTree = cargo tree --target all -i quinn-proto 2>&1 | Out-String
if ($quinnTree -notmatch "nothing to print") {
Write-Error "RUSTSEC-2026-0185 ignore is no longer valid: quinn-proto is in the compiled Cargo tree."
exit 1
}

$rsaTree = cargo tree --target all -i rsa 2>&1 | Out-String
if ($rsaTree -notmatch "nothing to print") {
Write-Error "RUSTSEC-2023-0071 ignore is no longer valid: rsa is in the compiled Cargo tree."
exit 1
}

cargo audit --ignore RUSTSEC-2026-0185 --ignore RUSTSEC-2023-0071
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,20 @@ dist-ssr

# Trier OS Specific Exclusions
.env
.dev-app-data/
*.db
*.db-shm
*.db-wal
*.db-journal
*.sqlite
*.sqlite3
*.sqlite-shm
*.sqlite-wal
*.sqlite-journal
*.sqlite3-shm
*.sqlite3-wal
*.sqlite3-journal
keys.meta

# Developer scratch artifacts
*.bak
Expand Down Expand Up @@ -78,6 +89,12 @@ src-tauri/target-check/
# Split parts ARE tracked (each <100 MB for GitHub)
# !src-tauri/resources/splits/

# Local CUDA llama.cpp payloads are too large for normal Git; use the
# runtime/download cache or Git LFS if these need to be versioned.
src-tauri/resources/bitnet_engine/cublas*_12.dll
src-tauri/resources/bitnet_engine/cudart64_12.dll
src-tauri/resources/bitnet_engine/ggml-cuda.dll

# Local media tooling used for README capture output
vendor/ffmpeg-release-essentials.zip
vendor/ffmpeg-workspace/
Expand Down
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,32 @@ All notable changes are documented here. Versions follow [Semantic Versioning](h

---

## [1.10.0] - 2026-06-29

### Local Runtimes

- **CUDA-ready llama.cpp packaging** - release builds now bundle the local llama.cpp / BitNet engine folder when present, including CUDA runtime DLLs for NVIDIA systems while keeping large runtime payloads out of normal source Git.
- **GPU load routing** - local GGUF models now expose GPU/CPU/hybrid load preferences and use GPU offload by default for larger llama.cpp models when hardware supports it.
- **Model startup truthfulness** - llama.cpp loading now treats `503 Loading model` as warmup instead of immediate failure, and the UI surfaces resource-lane badges so users can see whether a model is running on GPU, CPU, or hybrid memory.

### IDE

- **Agent routing** - Agent Mode now keeps one tool-capable primary agent and moves non-tool-capable selections into Chat Coding companion roles instead of blocking the whole run.
- **Beginner model recommendation** - Granite 4.1 8B is promoted as the preferred local IDE Agent recommendation for 16 GB VRAM systems after local tool-calling validation.

### Release Safety

- **Migration byte guard** - SQL migration files are pinned to LF line endings so Windows checkouts do not mutate old SQLx migration checksums during release builds.

## [1.0.9] - 2026-06-28

### Security

- **PDF parsing hardening** - rebuilt with the vendored `lopdf` nesting guard so deeply nested PDF objects fail safely instead of risking stack exhaustion during PDF handling.
- **Release metadata** - bumped package, Tauri, Cargo, About modal, installer guidance, and offline export sample versions for the security rebuild.

---

## [1.0.8] — 2026-06-26

### Game Engine — Stability & Agent Reliability
Expand Down
191 changes: 191 additions & 0 deletions ChatGTP Playwrite IDE Audit.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
# ChatGTP Playwrite IDE Audit

Date: 2026-06-28
Scope: More AI by Trier OS IDE functions only.

## Executive Summary

The mocked no-money IDE Playwright suite now passes across the main IDE workflows I could exercise safely: model selection, command palette, editor/Monaco controls, markdown preview, file creation, center tabs, terminal, inbox directives, Search/Replace, Git panel, Agent permissions, Conductor assignment, command approval, write-file refresh, and responsive layout.

I also ran a tiny local Ollama smoke test. Ollama itself is reachable and `qwen:latest` returned `IDE_OK`, but `bitnet-b1.58-2b:latest` is advertised by Ollama and fails to load from disk. That is a real user-facing risk if the IDE auto-selects or recommends that local model without validating generation readiness.

## Fix Pass - 2026-06-28

Fixed in this pass:

- Command palette modal now sits above the app header and closes with Escape.
- IDE local model selection now probes actual generation readiness before accepting a local/Ollama model for IDE work.
- IDE context persistence now stores metadata only and rehydrates file content from disk on send.
- Manual context add/remove now uses normalized file paths instead of file names.
- Active Hard Stop now has dedicated long-running-agent Playwright coverage that verifies `kernel_cancel_all_sessions` and `cancel_agent_loop` IPC.
- `ide-complete-audit.spec.ts` has a named package script entry.

Live model evidence:

- Installed `granite4.1:8b` through local Ollama. It returned a native `tool_calls` payload for a fake `write_file` tool and then wrote `F:\Agent IDE test\granite_ide_chat_probe.txt` with `GRANITE_IDE_CHAT_OK`.
- No DeepSeek environment key name was available in this shell. `OPENAI_API_KEY` was available, so I used `gpt-5.5` for one tiny API tool-call smoke. It wrote `F:\Agent IDE test\openai_api_tool_probe.txt` with `OPENAI_IDE_TOOL_OK`.

## Model Routing Matrix Pass - 2026-06-28

Goal tested: prove local Chat Coding models and API coding models can be selected together, either manually or through a swarm/tool route.

Results:

- Manual Chat Coding local+API: passed in mocked UI. `execute_prompt` receives both `test-2` local and `deepseek-v4-flash-openrouter-free` API model ids.
- Manual Agent/tool Coding local+API: passed in mocked UI. Agent Mode chooses one primary tool agent and routes every other selected model as a Chat Coding companion/reviewer, so non-tool models still participate without being misrepresented as tool-call agents.
- Manual Agent/tool Coding with a non-tool model: passed in mocked UI. A deliberately chat-only OpenRouter fixture is moved to Chat Coding companion while `test-2` remains the primary tool agent.
- Manual Agent/tool Coding with chat-only selected first: passed in mocked UI. The chat-only model no longer blocks a later tool-capable model from starting Agent Mode.
- Manual Agent/tool Coding with Write Files on and a read-only tool primary: passed in mocked UI. The primary starts with read-only tools and the companion stays in Chat Coding instead of forcing the entire team to Chat Coding.
- Conductor mixed local+API tool swarm: passed in mocked UI. `execute_conductor_session` receives `deepseek-v4-pro-openrouter-free` as conductor and both local/API worker ids.
- Live provider-boundary local Chat Coding: passed with `granite4.1:8b`, artifact `F:\Agent IDE test\local_chat_probe_response.md`.
- Live provider-boundary local tool-call coding: passed with `granite4.1:8b`, artifact `F:\Agent IDE test\local_tool_probe.txt`.
- Live provider-boundary API Chat Coding: passed with OpenAI `gpt-5.5`, artifact `F:\Agent IDE test\openai_chat_probe_response.md`.
- Live provider-boundary API tool-call coding: passed with OpenAI `gpt-5.5`, artifact `F:\Agent IDE test\openai_tool_probe.txt`.
- Live mixed local+API proofs: passed for manual-chat-style parallel provider calls and conductor-style tool-worker mix.
- DeepSeek V4 Flash/Pro live test: skipped because no DeepSeek key environment name was available to this shell.

Evidence files:

```text
F:\Agent IDE test\live_ide_model_matrix_summary.json
scripts\live_ide_model_matrix_smoke.cjs
e2e\ide-model-routing-matrix.spec.ts
```

Important UX decision:

Manual Agent Mode does not run multiple selected models as independent tool agents. It runs one eligible primary tool agent and launches the other selected models as Chat Coding companions with review/draft instructions and no automatic file writes. A chat-only model cannot block a tool-capable selected model from starting. If the primary tool route is read-only while Write Files is on, the app downgrades only that primary run to read-only tools instead of moving the whole team to Chat Coding. For coordinated mixed local/API multi-tool-agent work, the proven path is Conductor mode. The UI now says that directly in the Agent controls.

## Verification Run

Passed:

```powershell
node scripts\test_coe_ide_contract.cjs
node scripts\test_ide_release_blockers_contract.cjs
node scripts\test_monaco_editor_contract.cjs
.\node_modules\.bin\playwright.cmd test ide-complete-audit.spec.ts ide-release-blockers.spec.ts ide-world-class-layout.spec.ts --reporter=list --workers=1
.\node_modules\.bin\playwright.cmd test ide-model-routing-matrix.spec.ts ide-complete-audit.spec.ts ide-release-blockers.spec.ts ide-world-class-layout.spec.ts --reporter=list --workers=1
node scripts\live_ide_model_matrix_smoke.cjs --out "F:\Agent IDE test"
.\node_modules\.bin\tsc.cmd --noEmit
npm run lint
```

Final Playwright result:

```text
16 passed
```

Local model smoke:

```text
Ollama /api/tags: reachable, 12 local models listed after Granite install.
bitnet-b1.58-2b:latest: failed to load model blob.
qwen:latest: returned IDE_OK, done=true, total_duration about 2.7s.
granite4.1:8b: installed successfully, returned native tool_calls for write_file.
```

Online API live smoke:

```text
DeepSeek: skipped because no DeepSeek key name was available to this shell.
OpenAI gpt-5.5: passed native tool-call smoke and wrote OPENAI_IDE_TOOL_OK.
OpenAI gpt-5.5: passed Chat Coding file-block smoke and wrote API_CHAT_OK.
```

## Playwright Coverage Added

New focused spec:

```text
e2e/ide-complete-audit.spec.ts
```

Test harness updates:

```text
e2e/mock-tauri.ts
e2e/helpers.ts
e2e/ide-release-blockers.spec.ts
e2e/ide-world-class-layout.spec.ts
e2e/ide-model-routing-matrix.spec.ts
```

The mock harness now covers IDE commands needed by the audit traversal: workspace context collection, terminal execution/cancel, Git status/diff/stage actions, session tools, write confirmation, command approval, and Hard Stop IPC.

## Findings

### P1 - Command Palette Can Render Under The Fixed Header

Evidence: Playwright could see the `Close command palette` button, but normal click was intercepted by the COE/header metrics area. Source cause is z-index ordering: `.app-header` uses `z-index: 2147482000`, while `.ide-command-palette-overlay` uses `z-index: 12000`.

Impact: A user may open the IDE command palette and be unable to click its close button in some viewport/header states. Overlay click outside the palette still works when clicking below the header, but the visible close button is not reliable.

Status: fixed. The overlay z-index now clears the fixed app header, Escape closes the palette, and Playwright verifies Escape plus close-button dismissal.

### P1 - Local Model List Can Contain Broken Models

Evidence: Ollama listed `bitnet-b1.58-2b:latest`, but `/api/generate` failed with an unable-to-load-model blob error. `qwen:latest` responded successfully.

Impact: The IDE may show or pick a local model that looks installed but cannot generate. Users would experience failed agent runs even though the model appears available.

Status: fixed. Local/Ollama IDE model selection now runs a tiny capped generation probe, caches ready/failed state in the UI, and blocks broken models with repair/re-pull guidance.

### P2 - IDE Context Files Persist Full File Contents In localStorage

Source: `src/components/IdeWorkspace.tsx` persists `ide_context_files` with full `content` fields.

Impact: Entire-project or large custom context can exceed localStorage quota, slow startup, or silently drop context because storage failures are caught and ignored. It can also persist sensitive project text longer than the user expects.

Status: fixed. Persisted context is now metadata-only; IDE sends rehydrate file content from disk immediately before execution.

### P2 - Manual Context De-Dupes And Removes By File Name Only

Source: `handleAddContext` prevents duplicates by `f.name === activeFile.name`; `handleRemoveContext` removes by name.

Impact: A user cannot add both `src/config.json` and `tests/config.json`. Removing one duplicate name can remove the wrong context entry.

Status: fixed. Context add/remove identity now uses normalized full paths.

### P2 - Hard Stop Active-Run Path Needs Dedicated Long-Running Test

Status: fixed. A new release-blocker test starts a long-running mocked agent route, verifies Hard Stop becomes enabled, clicks it, verifies the UI reports cancellation, and asserts `kernel_cancel_all_sessions` plus `cancel_agent_loop` were invoked.

### P3 - Broad IDE Test Coverage Was Previously Behind The UI

Before this pass, release-blocker tests covered important agent approval/write refresh flows, but there was no single broad IDE traversal touching model bar, command palette, editor toggles, terminal, inbox, Search/Replace, Git, Plugins, and layout together.

Status: fixed. `e2e:ide-complete-audit` was added to `package.json`; local verification used the repo-local Playwright binary because the global npm shim on this machine failed to resolve `npm-cli.js`.

## Areas Verified As Working In Mocked IDE

- IDE shell loads with mocked Tauri bridge.
- Model band collapses and expands.
- Online API and OpenRouter model popovers open.
- Safe/free model selection is enforced in no-money mode.
- Command palette opens and command labels render.
- File tree opens markdown content.
- Markdown preview toggles.
- Monaco minimap and inline autocomplete toggles render.
- New file overlay creates a workspace file in the mocked bridge.
- Agent, Tools, Plugins, and Editor center tabs render current surfaces.
- Terminal command execution returns mocked output.
- Terminal transcript clear works.
- Inbox directive path appends mocked directive file.
- Workspace Search/Replace finds, previews, and renders replacement text.
- Git panel refreshes, shows branch status, and loads diff text.
- Agent permission toggles for write, run commands, and auto-approve commands render expected state.
- Conductor mode assigns no-money selectable workers.
- Command approval dialog appears, accepts, and resumes.
- Auto-approve command path suppresses the prompt and resumes.
- Agent write-file result refreshes the file explorer.
- Layout remains usable at 1366x768, 1600x900, 1920x1080, and 2560x1080 ultrawide.

## Recommended Next Work

1. Add an app-bound live-provider IDE smoke harness that uses the encrypted key store and records only pass/fail, model id, latency, and sanitized error class.
2. Run the DeepSeek V4 Flash/Pro live smoke once a DeepSeek key is available to the test boundary.
3. Repair or re-pull `bitnet-b1.58-2b:latest`, or keep it blocked from IDE placement until its generation probe passes.
4. Repair the local global npm shim (`npm run ...` currently fails looking for `npm-cli.js`); CI should still use its own clean Node/npm install.
5. Consider a future true multi-agent manual tool mode only if we want multiple independent tool agents without using Conductor; today that route is explicitly Conductor.
9 changes: 4 additions & 5 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
Download the latest **NSIS EXE installer** from the [GitHub Releases](https://github.com/DougTrier/MoreAI/releases) page.

```
More AI by Trier OS_1.0.8_x64-setup.exe
More AI by Trier OS_1.10.0_x64-setup.exe
```

Run the installer — no administrator rights required. Installs to your user profile. The installer bundles:
Expand All @@ -19,15 +19,15 @@ Run the installer — no administrator rights required. Installs to your user pr
- All pip packages for all servers pre-installed (torch CPU, TTS, fastapi, transformers, etc.)
- Music generation runtime (`python_music_env.zip`)
- FFmpeg binary
- BitNet engine binary
- llama.cpp / BitNet engine binary (CPU/Vulkan-ready by default; CUDA DLL pack can be added separately)
- Governance pack files

**No internet connection required after install**, except for:
- AI model weights (downloaded on first use — hardware-specific, too large to bundle)
- AI model weights such as Granite 4.1 8B (downloaded on first use — hardware-specific, too large to bundle)
- PyTorch CUDA upgrade (offered during onboarding if an NVIDIA GPU is detected)
- P2P Collaborate peer discovery (requires outbound WebSocket to Nostr relay servers)

> **MSI note:** The MSI is built alongside the NSIS EXE but is not the recommended installer for most users. Use the EXE.
> **MSI note:** The official release script currently packages the NSIS EXE only. MSI remains blocked until it has its own validation path.

---

Expand All @@ -47,7 +47,6 @@ npm install

# Installer output:
# src-tauri/target/release/bundle/nsis/ ← use this
# src-tauri/target/release/bundle/msi/
```

See [docs/RELEASE_BUILD_PROCESS.md](docs/RELEASE_BUILD_PROCESS.md) for full release build documentation.
Expand Down
2 changes: 1 addition & 1 deletion VERSION.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.7
1.10.0
2 changes: 1 addition & 1 deletion docs/OFFLINE_INSTALLER_EXPORT_SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Each export writes `offline_manifest.json` with:
```json
{
"created_at": "2026-06-09T00:00:00Z",
"more_ai_version": "1.0.8",
"more_ai_version": "1.10.0",
"platform": "windows-x64",
"runtimes": [],
"models": [],
Expand Down
Loading
Loading