micro-models-agent 0.57.0 → 0.57.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/CHANGELOG.md +518 -476
  2. package/README.md +358 -358
  3. package/dist/certification/certifications.json +493 -493
  4. package/dist/cli/commands.js +447 -0
  5. package/dist/cli/completer.js +167 -0
  6. package/dist/cli/index.js +2 -0
  7. package/dist/cli/main.js +153 -0
  8. package/dist/cli/plugin-commands.js +36 -0
  9. package/dist/cli/repl-commands.js +761 -0
  10. package/dist/cli/repl.js +702 -0
  11. package/dist/cli/run-result.js +33 -0
  12. package/dist/cli/security-commands.js +164 -0
  13. package/dist/cli/setup.js +237 -0
  14. package/dist/config/config.js +276 -0
  15. package/dist/config/defaults.js +141 -0
  16. package/dist/config/domains.js +179 -0
  17. package/dist/config/experts.js +15 -0
  18. package/dist/config/index.js +4 -0
  19. package/dist/config/security.js +213 -0
  20. package/dist/config/types.js +1 -0
  21. package/dist/core/agent-moe.js +102 -0
  22. package/dist/core/agent.js +1018 -0
  23. package/dist/core/bootstrap.js +481 -0
  24. package/dist/core/crash-handler.js +51 -0
  25. package/dist/core/environment.js +199 -0
  26. package/dist/core/index.js +2 -0
  27. package/dist/core/prompt-builder.js +76 -0
  28. package/dist/core/session-logger.js +251 -0
  29. package/dist/core/types.js +1 -0
  30. package/dist/core/version.js +26 -0
  31. package/dist/core/workspace.js +76 -0
  32. package/dist/i18n/en.json +679 -0
  33. package/dist/i18n/index.js +46 -0
  34. package/dist/i18n/ru.json +679 -0
  35. package/dist/index.js +22 -0
  36. package/dist/llm/image-utils.js +143 -0
  37. package/dist/llm/index.js +4 -0
  38. package/dist/llm/model-loader.js +78 -0
  39. package/dist/llm/openai-compat.js +497 -0
  40. package/dist/llm/orchestrator.js +200 -0
  41. package/dist/llm/provider.js +10 -0
  42. package/dist/llm/response.js +39 -0
  43. package/dist/llm/token-counter.js +39 -0
  44. package/dist/llm/types.js +1 -0
  45. package/dist/logger/app-logger.js +189 -0
  46. package/dist/logger/file-log.js +151 -0
  47. package/dist/logger/index.js +1 -0
  48. package/dist/main.js +2351 -1640
  49. package/dist/migration/backup.js +45 -0
  50. package/dist/migration/detect.js +50 -0
  51. package/dist/migration/index.js +2 -0
  52. package/dist/modules/artifacts/store.js +61 -0
  53. package/dist/modules/browser/actions.js +76 -0
  54. package/dist/modules/browser/bridge-client.js +199 -0
  55. package/dist/modules/browser/bridge-path.js +10 -0
  56. package/dist/modules/browser/bridge-server.mjs +219 -219
  57. package/dist/modules/browser/cookie-store.js +24 -0
  58. package/dist/modules/browser/driver.js +136 -0
  59. package/dist/modules/browser/index.js +7 -0
  60. package/dist/modules/browser/module.js +29 -0
  61. package/dist/modules/browser/session.js +342 -0
  62. package/dist/modules/browser/snapshot.js +148 -0
  63. package/dist/modules/browser/types.js +12 -0
  64. package/dist/modules/certification/cli.js +213 -0
  65. package/dist/modules/certification/fact-checker.js +82 -0
  66. package/dist/modules/certification/loader.js +106 -0
  67. package/dist/modules/certification/manifest.js +58 -0
  68. package/dist/modules/certification/runner.js +245 -0
  69. package/dist/modules/certification/scenarios.js +407 -0
  70. package/dist/modules/certification/types.js +1 -0
  71. package/dist/modules/context/chunk-query.js +100 -0
  72. package/dist/modules/context/fact-extractor.js +168 -0
  73. package/dist/modules/context/history.js +15 -0
  74. package/dist/modules/context/index.js +1 -0
  75. package/dist/modules/context/manager.js +440 -0
  76. package/dist/modules/execution/audit-runners.js +206 -0
  77. package/dist/modules/execution/auditor.js +218 -0
  78. package/dist/modules/execution/execution-plugin.js +431 -0
  79. package/dist/modules/execution/index.js +8 -0
  80. package/dist/modules/execution/module.js +625 -0
  81. package/dist/modules/execution/moe-executor.js +304 -0
  82. package/dist/modules/execution/plan-coverage.js +68 -0
  83. package/dist/modules/execution/plan-persister.js +46 -0
  84. package/dist/modules/execution/plan-store.js +196 -0
  85. package/dist/modules/execution/plan-tool.js +677 -0
  86. package/dist/modules/execution/plan-validator.js +153 -0
  87. package/dist/modules/execution/planner.js +94 -0
  88. package/dist/modules/execution/stuck-detector.js +746 -0
  89. package/dist/modules/execution/tracker.js +69 -0
  90. package/dist/modules/execution/types.js +1 -0
  91. package/dist/modules/execution/verifier.js +235 -0
  92. package/dist/modules/execution/windows-commands.js +41 -0
  93. package/dist/modules/hallucination/confidence.js +66 -0
  94. package/dist/modules/hallucination/consistency.js +26 -0
  95. package/dist/modules/hallucination/detector.js +47 -0
  96. package/dist/modules/hallucination/factual.js +169 -0
  97. package/dist/modules/hallucination/index.js +5 -0
  98. package/dist/modules/hallucination/js-identifiers.js +262 -0
  99. package/dist/modules/hallucination/llm-judge.js +101 -0
  100. package/dist/modules/index.js +5 -0
  101. package/dist/modules/indexer/cache.js +40 -0
  102. package/dist/modules/indexer/index.js +3 -0
  103. package/dist/modules/indexer/module.js +246 -0
  104. package/dist/modules/indexer/project-profile.js +183 -0
  105. package/dist/modules/indexer/walker.js +101 -0
  106. package/dist/modules/lsp/check-tool.js +58 -0
  107. package/dist/modules/lsp/client.js +389 -0
  108. package/dist/modules/lsp/command.js +60 -0
  109. package/dist/modules/lsp/config.js +135 -0
  110. package/dist/modules/lsp/index.js +3 -0
  111. package/dist/modules/lsp/module.js +260 -0
  112. package/dist/modules/lsp/probe.js +86 -0
  113. package/dist/modules/lsp/project-root.js +32 -0
  114. package/dist/modules/lsp/startup-check.js +144 -0
  115. package/dist/modules/lsp/types.js +1 -0
  116. package/dist/modules/mcp/client.js +399 -0
  117. package/dist/modules/mcp/index.js +3 -0
  118. package/dist/modules/mcp/module.js +142 -0
  119. package/dist/modules/mcp/registry.js +15 -0
  120. package/dist/modules/memory/index.js +1 -0
  121. package/dist/modules/memory/module.js +96 -0
  122. package/dist/modules/memory/search.js +42 -0
  123. package/dist/modules/memory/store.js +69 -0
  124. package/dist/modules/pipelines/engine.js +60 -0
  125. package/dist/modules/pipelines/index.js +3 -0
  126. package/dist/modules/pipelines/parser.js +56 -0
  127. package/dist/modules/pipelines/template.js +14 -0
  128. package/dist/modules/plugins/builtin/lint-on-write.js +334 -0
  129. package/dist/modules/plugins/builtin/notify.js +9 -0
  130. package/dist/modules/plugins/index.js +1 -0
  131. package/dist/modules/plugins/loader.js +70 -0
  132. package/dist/modules/plugins/manager.js +261 -0
  133. package/dist/modules/plugins/types.js +1 -0
  134. package/dist/modules/pricing/index.js +61 -0
  135. package/dist/modules/pricing/prices.js +129 -0
  136. package/dist/modules/processes/detect.js +34 -0
  137. package/dist/modules/processes/index.js +2 -0
  138. package/dist/modules/processes/registry.js +327 -0
  139. package/dist/modules/processes/runner.js +23 -0
  140. package/dist/modules/providers/create.js +22 -0
  141. package/dist/modules/providers/fallback.js +79 -0
  142. package/dist/modules/providers/health.js +46 -0
  143. package/dist/modules/providers/index.js +5 -0
  144. package/dist/modules/providers/manager.js +161 -0
  145. package/dist/modules/providers/presets.js +128 -0
  146. package/dist/modules/providers/registry.js +22 -0
  147. package/dist/modules/providers/types.js +1 -0
  148. package/dist/modules/registry.js +48 -0
  149. package/dist/modules/security/audit-log.js +136 -0
  150. package/dist/modules/security/audit-notifier.js +292 -0
  151. package/dist/modules/security/command-validator.js +219 -0
  152. package/dist/modules/security/content-scanner.js +53 -0
  153. package/dist/modules/security/data-sanitizer.js +89 -0
  154. package/dist/modules/security/encryption.js +242 -0
  155. package/dist/modules/security/index.js +14 -0
  156. package/dist/modules/security/network-validator.js +88 -0
  157. package/dist/modules/security/path-validator.js +203 -0
  158. package/dist/modules/security/rate-limiter.js +119 -0
  159. package/dist/modules/security/security-policies.js +531 -0
  160. package/dist/modules/security/session-encryption.js +210 -0
  161. package/dist/modules/security/session-isolation.js +95 -0
  162. package/dist/modules/session/index.js +3 -0
  163. package/dist/modules/session/manager.js +172 -0
  164. package/dist/modules/session/module.js +24 -0
  165. package/dist/modules/session/store.js +222 -0
  166. package/dist/modules/session/types.js +1 -0
  167. package/dist/modules/skills/index.js +2 -0
  168. package/dist/modules/skills/loader.js +72 -0
  169. package/dist/modules/skills/matcher.js +27 -0
  170. package/dist/modules/skills/module.js +129 -0
  171. package/dist/modules/types.js +1 -0
  172. package/dist/modules/updater/checker.js +96 -0
  173. package/dist/modules/updater/index.js +2 -0
  174. package/dist/modules/updater/module.js +116 -0
  175. package/dist/modules/user-profile/compressor.js +16 -0
  176. package/dist/modules/user-profile/index.js +1 -0
  177. package/dist/modules/user-profile/profile.js +68 -0
  178. package/dist/skills/builtin/git.md +36 -36
  179. package/dist/skills/builtin/typescript.md +35 -35
  180. package/dist/tools/approve.js +33 -0
  181. package/dist/tools/attach-image.js +101 -0
  182. package/dist/tools/bash.js +519 -0
  183. package/dist/tools/browser.js +115 -0
  184. package/dist/tools/chunk-query.js +100 -0
  185. package/dist/tools/create-dir.js +56 -0
  186. package/dist/tools/delete-file.js +63 -0
  187. package/dist/tools/download-file.js +117 -0
  188. package/dist/tools/edit-file.js +80 -0
  189. package/dist/tools/enable-tools.js +59 -0
  190. package/dist/tools/executor.js +154 -0
  191. package/dist/tools/file-info.js +47 -0
  192. package/dist/tools/filter-tools.js +17 -0
  193. package/dist/tools/glob-tool.js +27 -0
  194. package/dist/tools/grep-tool.js +125 -0
  195. package/dist/tools/hidden-tools-block.js +37 -0
  196. package/dist/tools/index.js +78 -0
  197. package/dist/tools/list-dir.js +49 -0
  198. package/dist/tools/load-skill.js +43 -0
  199. package/dist/tools/mcp-call.js +69 -0
  200. package/dist/tools/move-file.js +86 -0
  201. package/dist/tools/path-utils.js +101 -0
  202. package/dist/tools/pipeline-run.js +145 -0
  203. package/dist/tools/preview.js +2 -0
  204. package/dist/tools/process-kill.js +40 -0
  205. package/dist/tools/process-list.js +37 -0
  206. package/dist/tools/process-log.js +54 -0
  207. package/dist/tools/question.js +141 -0
  208. package/dist/tools/read-file.js +179 -0
  209. package/dist/tools/recall.js +118 -0
  210. package/dist/tools/registry.js +47 -0
  211. package/dist/tools/remember.js +68 -0
  212. package/dist/tools/scope-check.js +32 -0
  213. package/dist/tools/search-history.js +85 -0
  214. package/dist/tools/subagent.js +196 -0
  215. package/dist/tools/types.js +1 -0
  216. package/dist/tools/user-input.js +123 -0
  217. package/dist/tools/web-browse.js +87 -0
  218. package/dist/tools/web-fetch.js +119 -0
  219. package/dist/tools/web-search.js +105 -0
  220. package/dist/tools/write-file.js +82 -0
  221. package/dist/ui/box.js +77 -0
  222. package/dist/ui/colors.js +4 -0
  223. package/dist/ui/diff.js +178 -0
  224. package/dist/ui/index.js +6 -0
  225. package/dist/ui/line-editor.js +822 -0
  226. package/dist/ui/line-math.js +73 -0
  227. package/dist/ui/md-formatter.js +212 -0
  228. package/dist/ui/output.js +13 -0
  229. package/dist/ui/plan-view.js +103 -0
  230. package/dist/ui/renderer.js +259 -0
  231. package/dist/ui/spinner.js +70 -0
  232. package/dist/ui/table.js +144 -0
  233. package/package.json +51 -51
package/CHANGELOG.md CHANGED
@@ -1,476 +1,518 @@
1
- # Changelog
2
-
3
- All notable changes to Micro Models Agent (MMA) will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
6
-
7
- ## [0.57.0] - 2026-08-28
8
-
9
- ### Changed
10
- - **MCP**: lazy connect server connections deferred to first tool call. Startup no longer blocks on unreachable MCP servers (e.g. context7 offline). Discovery runs in background with 5s timeout.
11
- - **Updater**: `checkOnStart` and `autoInstall` disabled by default. Reduced `waitForIdle` timeout from 130s to 10s.
12
- - **Config**: `updater.checkOnStart` default changed from `true` to `false`
13
-
14
- ### Added
15
- - **MCP**: HTTP request timeouts (10s) on `connectSSE`, `listToolsHTTP`, `callToolHTTP`
16
- - **MCP**: `failedServers` tracking servers that fail discovery are not retried
17
- - **MCP**: placeholder `connect` tool for not-yet-discovered servers (LLM can trigger lazy discovery)
18
- - **Reasoning**: persistent disk cache (`~/.mma/reasoning-cache.json`) with 24h TTL avoids re-probing LLM on every restart
19
-
20
- ## [0.56.5] - 2026-08-27
21
-
22
- ### Fixed
23
- - **Hallucination**: `FactualCheck` now receives deleted files from `ConsistencyCheck` — no longer false-positives on files that were intentionally deleted in the same session
24
-
25
- ## [0.56.4] - 2026-08-27
26
-
27
- ### Fixed
28
- - **Tools**: `list_dir` now filters `.mma/`, `node_modules/`, `.git/`, `dist/`, `build/`, `coverage/` from directory listings (consistent with indexer)
29
- - **Hallucination**: `dotfileVariants` now tries dot-prefixing each directory component, not just basename (fixes false positive on `.mma/index-cache.json``mma/index-cache.json`)
30
-
31
- ## [0.56.1] - 2026-08-27
32
-
33
- ### Added
34
- - **CLI**: `mma changelog` command show latest changelog entry or diff between versions (`--from <version>`)
35
- - **Updater**: show changelog after auto-update install (`updater.installed` message includes new version's changelog)
36
- - **Docs**: `CHANGELOG.md` included in npm package (visible via `npm info micro-models-agent`)
37
- - **Docs**: rule to maintain changelog in `AGENTS.md`
38
-
39
- ## [0.56.0] - 2026-08-27
40
-
41
- ### Added
42
- - **MoE**: live re-plan loop in `runWithMoE` orchestrator re-plans on structural failures
43
- - **MoE**: scope expansion protocol (`scope_request`) for cross-expert file access
44
- - **MoE**: Esc/interrupt support in the MoE execution path
45
- - **MoE**: `input_from` cross-expert data flow for subtask dependencies
46
- - **LSP**: Angular language server support (`@angular/language-server` for `.html` in Angular workspaces)
47
- - **Tools**: syntax pre-validation and auto-fix for `write_file`/`edit_file`
48
-
49
- ### Fixed
50
- - **Security**: SSRF via IPv6-mapped IPv4 and raw numeric hostnames
51
- - **Security**: command-validator blacklist bypasses (shell expansions, encoded chars)
52
- - **Security**: audit webhook retry queue drained forever (infinite loop + duplicate notifications)
53
- - **Core**: dangling `tool_calls` on interrupt synthesized tool messages keep assistant/tool pairing
54
- - **Core**: live reasoning policy + `set_thinking` override integration
55
- - **Core**: deep-clone config defaults to prevent cross-session mutation
56
- - **Config**: preserve `provider.fallback` on hot-swap
57
- - **Tools**: path/scope escape holes in filesystem and read tools closed
58
- - **Tools**: clear timeout timer & abort listener after race settles; log discarded losers
59
- - **MCP**: stdio timer leaks + null deref after disconnect; added initialize handshake
60
- - **LSP**: spawn servers detached on POSIX so `killTree` reaches the whole chain
61
- - **Browser**: bridge leaked Chromium on SIGTERM and parent death
62
- - **UI**: diff LCS memory cap; one bad encrypted line no longer kills session history
63
- - **CLI**: `/config migrate` was unreachable
64
- - **MoE**: locale-independent artifact path + no retry on user abort
65
-
66
- ## [0.55.1] - 2026-08-25
67
-
68
- ### Fixed
69
- - **LLM**: NDJSON-tolerant stream parser for Ollama backends
70
- - **LLM**: mid-stream provider errors surfaced (Ollama generation failures)
71
- - **LLM**: `delta.reasoning` alias for thinking models
72
- - **LLM**: wire-level debug logging for diagnostics
73
-
74
- ## [0.55.0] - 2026-08-25
75
-
76
- ### Added
77
- - **Certification**: targeted re-run (`--scenarios <ids>`) with result merging
78
- - **Certification**: per-rep timeout (`--timeout <ms>` + per-scenario `timeoutMs`)
79
- - **Certification**: audit-gate bypass fix for `--exit-on-complete`
80
-
81
- ### Fixed
82
- - **Certification**: stale-label wording (removed impossible user instruction)
83
- - **Dependencies**: typescript pinned to ^5.9 (TS7 preview breaks `@types/node`)
84
-
85
- ## [0.54.0] - 2026-08-24
86
-
87
- ### Added
88
- - **Certification**: global manifest shipped with package updates (`~/.mma/certifications.json`)
89
- - **Certification**: bundled manifest + startup sync from package
90
-
91
- ### Fixed
92
- - **Certification**: marks only showed when running from repo root
93
-
94
- ## [0.53.0] - 2026-08-24
95
-
96
- ### Added
97
- - **Certification**: qwen3.5-9b certified 20/20
98
- - **Config**: `provider.maxCompletionTokens` option
99
- - **Certification**: label text in `mma model list` and REPL `/model`
100
-
101
- ### Fixed
102
- - **Certification**: reasoning-heavy models truncated tool_call arguments at default 4096 cap
103
- - **Certification**: scenario 3.5 prompt disambiguation
104
-
105
- ## [0.52.0] - 2026-08-23
106
-
107
- ### Added
108
- - **Execution**: `FS_MUTATING_TOOLS` — plan auto-advance after bash/download/subagent/mcp/pipeline/browser tools
109
- - **Config**: `provider.maxCompletionTokens` plumbing through ProviderManager → agent
110
-
111
- ### Fixed
112
- - **Execution**: small models create files via bash instead of `write_file`, stalling plans
113
- - **Execution**: `maxCompletionTokens` was never read from config
114
-
115
- ## [0.51.0] - 2026-08-23
116
-
117
- ### Added
118
- - **Plugin**: `HostBridge` interface for bidirectional agent communication
119
- - **Plugin**: `onTurnEnd(ctx, TurnSummary)` hook dispatched once per completed run
120
- - **Plugin**: `web-ui` example plugin browser-based chat with SSE streaming
121
- - **CLI**: REPL bridge wiring for web-ui submit/interrupt
122
-
123
- ### Fixed
124
- - **REPL**: `/config migrate` unreachable
125
-
126
- ## [0.50.3] - 2026-08-22
127
-
128
- ### Fixed
129
- - **UI**: REPL line editor scroll-proof rendering (absolute anchoring via DSR query)
130
-
131
- ## [0.50.2] - 2026-08-22
132
-
133
- ### Fixed
134
- - **LLM**: idle stream timeout increased 60s 180s (LM Studio buffering)
135
- - **LLM**: stall diagnosis with dedicated message for SSE buffering
136
- - **LLM**: truncation no longer masquerades as empty response
137
- - **LLM**: recoverable LLM errors fed back into context instead of dying
138
- - **Execution**: bash flailing detector (≥4 failed bash attempts in last 6)
139
-
140
- ## [0.50.1] - 2026-08-21
141
-
142
- ### Fixed
143
- - **Security**: no longer silently overrides explicit user opt-out
144
- - **Lint**: skips missing lint binary (was appending error to every write)
145
- - **Stuck**: anti-spam for stuck-warnings (dedup via key, decay per-tool counters)
146
- - **Plan**: unified progress counting (done+skipped as settled)
147
- - **Plan**: bulk `steps[]` rewrite guarded on progressed plans
148
- - **Plan**: archived plans answer read-only
149
- - **Process**: usage hints for `process_kill`/`process_log` without id
150
-
151
- ## [0.50.0] - 2026-08-21
152
-
153
- ### Added
154
- - **Provider**: health probe (`probeProviders()` + `mma provider check`)
155
- - **Provider**: code-only capability routing (`ProviderManager.pickFor()`)
156
- - **Provider**: per-entry isolation + priority fallback order
157
- - **Pricing**: per-provider cost attribution + breakdown
158
-
159
- ### Fixed
160
- - **Provider**: transparent failover on 429/5xx/network errors
161
-
162
- ## [0.49.0] - 2026-08-20
163
-
164
- ### Fixed
165
- - **REPL**: stale-plan leaks — plan state no longer persists across sessions
166
- - **REPL**: plan checklist prints only on plan/todo tool-end events
167
- - **Plan**: `PlanStore` is single source of truth for UI consumers
168
-
169
- ## [0.48.3] - 2026-08-20
170
-
171
- ### Fixed
172
- - **Hallucination**: dotfile false-positive (`.prettierrc.json` extracted as `prettierrc.json`)
173
-
174
- ## [0.48.2] - 2026-08-20
175
-
176
- ### Fixed
177
- - **REPL**: stale plan printed on first agent run of a session
178
-
179
- ## [0.47.0] - 2026-08-19
180
-
181
- ### Added
182
- - **Session**: startup diagnostics logging (environment, LSP probe, baseline typecheck)
183
- - **Session**: `logBaselineTypecheck()` for post-mortem visibility
184
-
185
- ## [0.46.1] - 2026-08-19
186
-
187
- ### Fixed
188
- - **LLM**: connection-break hardening (stream-level retry, no-data timeout, `[DONE]` tracking)
189
- - **LLM**: non-streaming timeout (was missing, could hang forever)
190
- - **Config**: `retry.maxStreamRetries`, `retry.noDataTimeoutMs` options
191
-
192
- ## [0.46.0] - 2026-08-19
193
-
194
- ### Added
195
- - **Provider**: multi-provider + hot-swap + per-message provenance
196
- - **Provider**: `ProviderManager` with entry-based config
197
- - **CLI**: `mma provider add/list/use`
198
- - **REPL**: `/provider list/use`
199
-
200
- ### Fixed
201
- - **Path**: `safeResolvePath` POSIX bug (absolute paths re-resolved against baseDir)
202
-
203
- ## [0.45.0] - 2026-08-18
204
-
205
- ### Added
206
- - **Provider**: provider module Phase 1 (registry, presets, `createProvider()`)
207
- - **Provider**: `openrouter` preset
208
- - **Setup**: wizard menu built from `BUILTIN_PROVIDERS`
209
-
210
- ## [0.44.0] - 2026-08-18
211
-
212
- ### Added
213
- - **Plugins**: folder plugins (subdirectory with entry file)
214
- - **Plugin**: `trace-server` split into folder plugin
215
-
216
- ### Fixed
217
- - **Plugin**: template-literal page inlining broke `\n` in JS strings
218
-
219
- ## [0.43.2] - 2026-08-17
220
-
221
- ### Fixed
222
- - **Execution**: plan done-gate on known compile failures (typecheck gate)
223
- - **Bootstrap**: live getters for `sessionId`/`sessionContext` after session switch
224
- - **Edit**: `edit_file` "String not found" hint to `read_file` first
225
-
226
- ## [0.43.1] - 2026-08-17
227
-
228
- ### Fixed
229
- - **Agent**: session-interrupt no longer renders tool results after "Session ended"
230
- - **Executor**: `onAfterTool` plugins skipped when signal is aborted
231
- - **Lint**: abortable syntax checks on Esc
232
-
233
- ## [0.43.0] - 2026-08-17
234
-
235
- ### Added
236
- - **Plan**: `plan delete <id>` + `plan purge` actions
237
- - **Plan**: `abort` honors `id` parameter
238
- - **Plan**: `replan` renumbers ids for kept steps
239
- - **Audit**: `resolveTestCommand` picks the project's real test runner
240
-
241
- ### Fixed
242
- - **Plan**: `switch` to already-active plan is a no-op
243
- - **Plan**: final audit runs for a completed plan
244
- - **Plan**: evidence-based plan nudge (replaces iteration counter)
245
- - **Plan**: `checkPlanAlignment` scans path arguments only
246
- - **Plan**: `isDepsStep` requires a package-manager verb
247
- - **Plan**: auto-advance resolves nested files
248
-
249
- ## [0.42.0] - 2026-08-16
250
-
251
- ### Added
252
- - **Execution**: automatic error web search (≥5 same-error repeats → web search → inject results)
253
- - **Config**: `errorWebSearch` section
254
-
255
- ### Fixed
256
- - **Execution**: `onAfterTool` double-counted typecheck + failure errors
257
-
258
- ## [0.41.1] - 2026-08-16
259
-
260
- ### Fixed
261
- - **LSP**: `typescript@5` pin + `--yes` for npx
262
- - **LSP**: sequential probing (waves) to avoid npx cache lock contention
263
- - **LSP**: stale config normalization
264
- - **LSP**: Windows process leak in `shutdown()`
265
- - **REPL**: non-blocking LSP banner
266
- - **Bootstrap**: lazy startup health check
267
-
268
- ## [0.41.0] - 2026-08-15
269
-
270
- ### Added
271
- - **REPL**: live plan checklist with progress bar
272
- - **UI**: tool-to-step binding (`← step N` suffix in tool headers)
273
- - **UI**: background command output preview
274
-
275
- ## [0.40.1] - 2026-08-15
276
-
277
- ### Fixed
278
- - **LSP**: broken package names (`vscode-html-languageserver` → `vscode-langservers-extracted`)
279
-
280
- ## [0.40.0] - 2026-08-15
281
-
282
- ### Added
283
- - **Tools**: tool-set narrowing (on-demand enable via `enable_tools`)
284
- - **Config**: `tools.defaultTags` + `tools.enableOnDemand`
285
- - **Tools**: `alwaysOn` flag for structural tools
286
-
287
- ## [0.39.1] - 2026-08-14
288
-
289
- ### Fixed
290
- - **Plugins**: dedup by version, compatibility gate, source tracking
291
- - **CLI**: `mma plugins list` command
292
-
293
- ## [0.38.0] - 2026-08-14
294
-
295
- ### Added
296
- - **LSP**: `lsp_check` tool for on-demand diagnostics
297
- - **Plan**: `plan create` guard (blocks when active plan has progress)
298
-
299
- ### Fixed
300
- - **Context**: compaction summary carries plan + read state
301
- - **Browser**: bridge path resolution in bundled dist
302
-
303
- ## [0.37.0] - 2026-08-13
304
-
305
- ### Added
306
- - **Plugins**: folder plugin support in `PluginLoader`
307
-
308
- ### Fixed
309
- - **Plugin**: template-literal page inlining broke `\n` in JS
310
-
311
- ## [0.36.3] - 2026-08-13
312
-
313
- ### Fixed
314
- - **UI**: REPL paste fix (batch single-render, CRLF collapse)
315
-
316
- ## [0.36.2] - 2026-08-13
317
-
318
- ### Fixed
319
- - **Updater**: silent logger, one-shot `process.exit()` killed background install, semver-aware check
320
-
321
- ## [0.36.1] - 2026-08-13
322
-
323
- ### Fixed
324
- - **Audit**: nested-file resolution, non-zero test run blocks
325
- - **Browser**: bridge diagnostics + one-shot restart
326
- - **LSP**: per-server disable + initialize retry + CSS timeout
327
- - **Bash**: npm exec hint
328
-
329
- ## [0.36.0] - 2026-08-12
330
-
331
- ### Added
332
- - **Plan**: model-declared `kind: "create"|"delete"` for steps
333
- - **Execution**: `FS_MUTATING_TOOLS` for plan auto-advance
334
- - **Config**: `provider.maxCompletionTokens` option
335
-
336
- ### Fixed
337
- - **Context**: compaction preserves session `mission`
338
- - **Context**: deleted files leave compaction `[Files:]` list
339
- - **Audit**: final audit runs real `tsc --noEmit --skipLibCheck`
340
- - **Bash**: repeated forbidden Windows commands hard-stopped after 2 failures
341
-
342
- ## [0.35.5] - 2026-08-12
343
-
344
- ### Fixed
345
- - **Execution**: plan-alignment phantom paths (domains/extensions treated as files)
346
- - **Execution**: hint/recovery dedup in `StuckDetector`
347
-
348
- ## [0.35.3] - 2026-08-11
349
-
350
- ### Fixed
351
- - **LSP**: workspace root resolved from edited file's project
352
- - **Audit**: skipped steps treated as terminal
353
- - **Bash**: Windows hint keys on original command word
354
- - **Tools**: boundedOutput tools never budget-truncated
355
-
356
- ## [0.35.0] - 2026-08-11
357
-
358
- ### Added
359
- - **Tools**: `download_file` tool for binary file downloads
360
-
361
- ## [0.34.0] - 2026-08-10
362
-
363
- ### Added
364
- - **Indexer**: project profile (`[Stack: ...]` summary from manifest)
365
- - **Indexer**: dynamic map refresh inside sessions
366
-
367
- ## [0.33.3] - 2026-08-10
368
-
369
- ### Fixed
370
- - **Audit**: nested-file resolution (basename + path-suffix match)
371
- - **Plan**: `plan show` honors `id` parameter
372
- - **Context**: compaction interval reset per user turn
373
- - **Context**: `extractFacts` captures `edit_file` paths + Windows drive-letter paths
374
- - **Execution**: stuck detector read-only loop detection
375
- - **Read**: default limit 15 → 300 lines
376
- - **LSP**: `spawn` on Windows (`.cmd` shim resolution)
377
- - **Todo**: `todo add` tracks subtasks, `todo done` marks individual sub-task
378
- - **Memory**: learns repeated per-tool failures (≥3×)
379
- - **Context**: compaction preserves user's task
380
-
381
- ## [0.33.2] - 2026-08-09
382
-
383
- ### Fixed
384
- - **UI**: REPL conversation layout (user/agent message dividers)
385
- - **Tools**: `isFilePathLike` uses allow-list of file extensions
386
-
387
- ## [0.33.1] - 2026-08-09
388
-
389
- ### Fixed
390
- - **UI**: REPL line editor redraw fix (no duplicated multi-line input)
391
- - **Tools**: `web_fetch`/`web_browse` description clarifications
392
-
393
- ## [0.33.0] - 2026-08-09
394
-
395
- ### Added
396
- - **RLM**: pass-by-reference sub-agent results (`ArtifactStore`)
397
- - **RLM**: chunked parallel queries (`chunk_query` tool)
398
- - **Config**: `subagent.resultMode`, `maxSummaryChars`, `artifactsDir`, `stableSystemPrompt`
399
-
400
- ## [0.32.0] - 2026-08-08
401
-
402
- ### Added
403
- - **Browser**: driver abstraction (`PlaywrightDriver` + `BridgeDriver`)
404
- - **Browser**: Node bridge for Bun compatibility
405
- - **Config**: `browser.maxConsoleLineChars`
406
-
407
- ## [0.31.0] - 2026-08-08
408
-
409
- ### Added
410
- - **Security**: session file encryption (AES-256-GCM)
411
- - **Security**: audit notifications (file + webhook)
412
- - **Security**: security policies (strict/balanced/permissive)
413
- - **CLI**: `mma security` commands
414
-
415
- ## [0.30.0] - 2026-08-07
416
-
417
- ### Added
418
- - **Execution**: final audit gate (runs `bun test` for verification steps)
419
- - **Execution**: `detectTestResults()` auto-verification in bash
420
-
421
- ### Fixed
422
- - **Execution**: empty-CLI entry-point hint
423
- - **Bash**: Windows anti-patterns documentation
424
-
425
- ## [0.29.0] - 2026-08-07
426
-
427
- ### Added
428
- - **Bash**: smart UTF-8/OEM line decoding (fixes Cyrillic on Windows)
429
- - **Bash**: behavior-based background detection
430
- - **Bash**: stuck-detector bash awareness
431
-
432
- ## [0.28.0] - 2026-08-06
433
-
434
- ### Fixed
435
- - **Agent**: double-Esc interrupt fix (Bun readline keypress collapsing)
436
- - **Agent**: abortable in-flight LLM requests on interrupt
437
- - **UI**: clipboard paste hint
438
-
439
- ## [0.27.0] - 2026-08-06
440
-
441
- ### Fixed
442
- - **Security**: Windows hardening
443
- - **Hallucination**: fixes
444
-
445
- ## [0.26.0] - 2026-08-05
446
-
447
- ### Added
448
- - **UI**: opencode-style inline tool headers (`ui.toolStyle`)
449
- - **UI**: model commentary next to tool calls (`ui.toolComments`)
450
- - **UI**: diffs without background color
451
-
452
- ## [0.25.0] - 2026-08-05
453
-
454
- ### Added
455
- - **LSP**: LSP module (typescript, CSS, HTML, JSON, Python, Rust, Go)
456
- - **Execution**: audit gate language-agnostic
457
- - **Bash**: Windows command hints
458
-
459
- ## [0.24.0] - 2026-08-04
460
-
461
- ### Added
462
- - **Context**: quality formula upgrade (token load + compaction loss + error density + freshness)
463
- - **Read**: display mode (show only header in REPL, full content to LLM)
464
-
465
- ## [0.23.0] - 2026-08-04
466
-
467
- ### Added
468
- - **Certification**: model certification module (`mma model certify`)
469
- - **CLI**: cert checkmarks in model lists
470
-
471
- ## [0.22.0] - 2026-08-03
472
-
473
- ### Added
474
- - **Security**: `enabled` flag (disabled by default)
475
- - **CLI**: init/first-run apply wizard security answers
476
- - **Prompt**: system prompt & recovery messages cleanup
1
+ # Changelog
2
+
3
+ All notable changes to Micro Models Agent (MMA) will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [0.57.2] - 2026-08-30
8
+
9
+ ### Changed
10
+ - **KV-cache**: plan block removed from system prompt; plan status now injected into `<system-summary>` envelope after every tool batch. System prompt is immutable per session local backends retain prefix cache.
11
+ - **Provenance**: provider entry resolution uses active entry label, not bare `provider.type`
12
+ - **Reasoning signals**: `consecutiveToolSuccesses` and `isRepetitive` now feed real values to the reasoning policy (were hardcoded)
13
+ - **Token estimation**: tool-def token estimate in agent loop uses `estimateTokens()` instead of flat `/4`
14
+ - **Agent split**: `agent.ts` 1550→950 lines; 10 extracted modules (`loop-state`, `compaction`, `tool-batch`, `hallucination-gate`, `audit-gate`, `reasoning-resolver`, `token-tracker`, `context-renderer`, `tool-output`, `constants`)
15
+ - **Plan-tool**: `plan-tool.ts` 741→232 lines; per-action handlers in `plan-actions.ts`
16
+ - **CLI**: `createProgram` 513→thin orchestrator; `registerMmaCommands` 470→8 lines (5 per-domain registers)
17
+ - **Bash handler**: `bash.ts` 236→~100 lines (`resolveBashSecurityConfig`, `decorateCommandOutput`)
18
+ - **Orchestrator**: reuse `parseChunks` instead of hand-rolled `any[]` aggregation; `createPlan` uses own `parseJSON`; constructor deduplicated via `createProviderInstance`
19
+ - **Shared utils**: `src/utils/` with `errMsg()`, `sleep()`, `truncate()`, `backoffDelay()`
20
+ - **errMsg**: replaces 23 occurrences of `e instanceof Error ? e.message : String(e)` across 12 files
21
+
22
+ ### Fixed
23
+ - **chunk_query**: one failing chunk no longer kills the entire query; per-chunk `catch` `[FAILED]`
24
+ - **chunk_query**: synthesis prompt capped at 20K chars with `[TRUNCATED]` marker
25
+ - **chunk_query**: `AbortSignal` propagated to `chatText` for cancellation support
26
+ - **Executor**: `failFast` cleanup guard prevents nested scope clobbering
27
+ - **probe.ts**: transient errors (network/auth) no longer cached as "reasoning not supported" for 24h; returns `null` → caller skips cache
28
+ - **LSP**: startup timeout unified on `DEFAULT_TIMEOUT` (15000) instead of conflicting hardcoded 10000
29
+ - **Browser**: `BridgeResponse.data` typed (was `any`)
30
+ - **Agent**: `Agent.runTool()` public API replaces `(ctx.agent as any).deps` reach-in; `/reload` no longer mutates readonly context
31
+ - **LSP /lsp check**: fixed latent bug where `.execute()` was called with `.executeByName` signature
32
+
33
+ ### Added
34
+ - **Plan Reminder**: static `[Plan Reminder]` block in system prompt (never mutates)
35
+ - **Documentation**: reentrancy warning on `executeByName()`, `PlanResult` JSDoc
36
+ - **Tests**: `probe.test.ts` (6 cases), `command-suggest.test.ts`, `providers-factory.test.ts`, `subagent-tool.test.ts`, `agent-moe-write.test.ts`, `chunk-query.test.ts`
37
+ - **probe.ts**: `null` return for transient errors; bootstrap skips cache on `null`
38
+ - **Execution-plugin**: `resetStepFlags`/`resetPlanState` helpers (dedup 3 inline reset blocks)
39
+ - **Security-policies**: `comparePolicies` typed (`keyof SecurityConfig` replaces `as any`)
40
+
41
+ ### Removed
42
+ - **Browser**: dead `buildWaitScript` export (never imported)
43
+
44
+ ## [0.57.1] - 2026-08-28
45
+
46
+ ### Fixed
47
+ - **Publish**: republish after version bump
48
+
49
+ ## [0.57.0] - 2026-08-28
50
+
51
+ ### Changed
52
+ - **MCP**: lazy connect server connections deferred to first tool call. Startup no longer blocks on unreachable MCP servers (e.g. context7 offline). Discovery runs in background with 5s timeout.
53
+ - **Updater**: `checkOnStart` and `autoInstall` disabled by default. Reduced `waitForIdle` timeout from 130s to 10s.
54
+ - **Config**: `updater.checkOnStart` default changed from `true` to `false`
55
+
56
+ ### Added
57
+ - **MCP**: HTTP request timeouts (10s) on `connectSSE`, `listToolsHTTP`, `callToolHTTP`
58
+ - **MCP**: `failedServers` tracking servers that fail discovery are not retried
59
+ - **MCP**: placeholder `connect` tool for not-yet-discovered servers (LLM can trigger lazy discovery)
60
+ - **Reasoning**: persistent disk cache (`~/.mma/reasoning-cache.json`) with 24h TTL avoids re-probing LLM on every restart
61
+
62
+ ## [0.56.5] - 2026-08-27
63
+
64
+ ### Fixed
65
+ - **Hallucination**: `FactualCheck` now receives deleted files from `ConsistencyCheck` — no longer false-positives on files that were intentionally deleted in the same session
66
+
67
+ ## [0.56.4] - 2026-08-27
68
+
69
+ ### Fixed
70
+ - **Tools**: `list_dir` now filters `.mma/`, `node_modules/`, `.git/`, `dist/`, `build/`, `coverage/` from directory listings (consistent with indexer)
71
+ - **Hallucination**: `dotfileVariants` now tries dot-prefixing each directory component, not just basename (fixes false positive on `.mma/index-cache.json` → `mma/index-cache.json`)
72
+
73
+ ## [0.56.1] - 2026-08-27
74
+
75
+ ### Added
76
+ - **CLI**: `mma changelog` command — show latest changelog entry or diff between versions (`--from <version>`)
77
+ - **Updater**: show changelog after auto-update install (`updater.installed` message includes new version's changelog)
78
+ - **Docs**: `CHANGELOG.md` included in npm package (visible via `npm info micro-models-agent`)
79
+ - **Docs**: rule to maintain changelog in `AGENTS.md`
80
+
81
+ ## [0.56.0] - 2026-08-27
82
+
83
+ ### Added
84
+ - **MoE**: live re-plan loop in `runWithMoE` — orchestrator re-plans on structural failures
85
+ - **MoE**: scope expansion protocol (`scope_request`) for cross-expert file access
86
+ - **MoE**: Esc/interrupt support in the MoE execution path
87
+ - **MoE**: `input_from` cross-expert data flow for subtask dependencies
88
+ - **LSP**: Angular language server support (`@angular/language-server` for `.html` in Angular workspaces)
89
+ - **Tools**: syntax pre-validation and auto-fix for `write_file`/`edit_file`
90
+
91
+ ### Fixed
92
+ - **Security**: SSRF via IPv6-mapped IPv4 and raw numeric hostnames
93
+ - **Security**: command-validator blacklist bypasses (shell expansions, encoded chars)
94
+ - **Security**: audit webhook retry queue drained forever (infinite loop + duplicate notifications)
95
+ - **Core**: dangling `tool_calls` on interrupt — synthesized tool messages keep assistant/tool pairing
96
+ - **Core**: live reasoning policy + `set_thinking` override integration
97
+ - **Core**: deep-clone config defaults to prevent cross-session mutation
98
+ - **Config**: preserve `provider.fallback` on hot-swap
99
+ - **Tools**: path/scope escape holes in filesystem and read tools closed
100
+ - **Tools**: clear timeout timer & abort listener after race settles; log discarded losers
101
+ - **MCP**: stdio timer leaks + null deref after disconnect; added initialize handshake
102
+ - **LSP**: spawn servers detached on POSIX so `killTree` reaches the whole chain
103
+ - **Browser**: bridge leaked Chromium on SIGTERM and parent death
104
+ - **UI**: diff LCS memory cap; one bad encrypted line no longer kills session history
105
+ - **CLI**: `/config migrate` was unreachable
106
+ - **MoE**: locale-independent artifact path + no retry on user abort
107
+
108
+ ## [0.55.1] - 2026-08-25
109
+
110
+ ### Fixed
111
+ - **LLM**: NDJSON-tolerant stream parser for Ollama backends
112
+ - **LLM**: mid-stream provider errors surfaced (Ollama generation failures)
113
+ - **LLM**: `delta.reasoning` alias for thinking models
114
+ - **LLM**: wire-level debug logging for diagnostics
115
+
116
+ ## [0.55.0] - 2026-08-25
117
+
118
+ ### Added
119
+ - **Certification**: targeted re-run (`--scenarios <ids>`) with result merging
120
+ - **Certification**: per-rep timeout (`--timeout <ms>` + per-scenario `timeoutMs`)
121
+ - **Certification**: audit-gate bypass fix for `--exit-on-complete`
122
+
123
+ ### Fixed
124
+ - **Certification**: stale-label wording (removed impossible user instruction)
125
+ - **Dependencies**: typescript pinned to ^5.9 (TS7 preview breaks `@types/node`)
126
+
127
+ ## [0.54.0] - 2026-08-24
128
+
129
+ ### Added
130
+ - **Certification**: global manifest shipped with package updates (`~/.mma/certifications.json`)
131
+ - **Certification**: bundled manifest + startup sync from package
132
+
133
+ ### Fixed
134
+ - **Certification**: marks only showed when running from repo root
135
+
136
+ ## [0.53.0] - 2026-08-24
137
+
138
+ ### Added
139
+ - **Certification**: qwen3.5-9b certified 20/20
140
+ - **Config**: `provider.maxCompletionTokens` option
141
+ - **Certification**: label text in `mma model list` and REPL `/model`
142
+
143
+ ### Fixed
144
+ - **Certification**: reasoning-heavy models truncated tool_call arguments at default 4096 cap
145
+ - **Certification**: scenario 3.5 prompt disambiguation
146
+
147
+ ## [0.52.0] - 2026-08-23
148
+
149
+ ### Added
150
+ - **Execution**: `FS_MUTATING_TOOLS` — plan auto-advance after bash/download/subagent/mcp/pipeline/browser tools
151
+ - **Config**: `provider.maxCompletionTokens` plumbing through ProviderManager → agent
152
+
153
+ ### Fixed
154
+ - **Execution**: small models create files via bash instead of `write_file`, stalling plans
155
+ - **Execution**: `maxCompletionTokens` was never read from config
156
+
157
+ ## [0.51.0] - 2026-08-23
158
+
159
+ ### Added
160
+ - **Plugin**: `HostBridge` interface for bidirectional agent communication
161
+ - **Plugin**: `onTurnEnd(ctx, TurnSummary)` hook — dispatched once per completed run
162
+ - **Plugin**: `web-ui` example plugin — browser-based chat with SSE streaming
163
+ - **CLI**: REPL bridge wiring for web-ui submit/interrupt
164
+
165
+ ### Fixed
166
+ - **REPL**: `/config migrate` unreachable
167
+
168
+ ## [0.50.3] - 2026-08-22
169
+
170
+ ### Fixed
171
+ - **UI**: REPL line editor scroll-proof rendering (absolute anchoring via DSR query)
172
+
173
+ ## [0.50.2] - 2026-08-22
174
+
175
+ ### Fixed
176
+ - **LLM**: idle stream timeout increased 60s → 180s (LM Studio buffering)
177
+ - **LLM**: stall diagnosis with dedicated message for SSE buffering
178
+ - **LLM**: truncation no longer masquerades as empty response
179
+ - **LLM**: recoverable LLM errors fed back into context instead of dying
180
+ - **Execution**: bash flailing detector (≥4 failed bash attempts in last 6)
181
+
182
+ ## [0.50.1] - 2026-08-21
183
+
184
+ ### Fixed
185
+ - **Security**: no longer silently overrides explicit user opt-out
186
+ - **Lint**: skips missing lint binary (was appending error to every write)
187
+ - **Stuck**: anti-spam for stuck-warnings (dedup via key, decay per-tool counters)
188
+ - **Plan**: unified progress counting (done+skipped as settled)
189
+ - **Plan**: bulk `steps[]` rewrite guarded on progressed plans
190
+ - **Plan**: archived plans answer read-only
191
+ - **Process**: usage hints for `process_kill`/`process_log` without id
192
+
193
+ ## [0.50.0] - 2026-08-21
194
+
195
+ ### Added
196
+ - **Provider**: health probe (`probeProviders()` + `mma provider check`)
197
+ - **Provider**: code-only capability routing (`ProviderManager.pickFor()`)
198
+ - **Provider**: per-entry isolation + priority fallback order
199
+ - **Pricing**: per-provider cost attribution + breakdown
200
+
201
+ ### Fixed
202
+ - **Provider**: transparent failover on 429/5xx/network errors
203
+
204
+ ## [0.49.0] - 2026-08-20
205
+
206
+ ### Fixed
207
+ - **REPL**: stale-plan leaks — plan state no longer persists across sessions
208
+ - **REPL**: plan checklist prints only on plan/todo tool-end events
209
+ - **Plan**: `PlanStore` is single source of truth for UI consumers
210
+
211
+ ## [0.48.3] - 2026-08-20
212
+
213
+ ### Fixed
214
+ - **Hallucination**: dotfile false-positive (`.prettierrc.json` extracted as `prettierrc.json`)
215
+
216
+ ## [0.48.2] - 2026-08-20
217
+
218
+ ### Fixed
219
+ - **REPL**: stale plan printed on first agent run of a session
220
+
221
+ ## [0.47.0] - 2026-08-19
222
+
223
+ ### Added
224
+ - **Session**: startup diagnostics logging (environment, LSP probe, baseline typecheck)
225
+ - **Session**: `logBaselineTypecheck()` for post-mortem visibility
226
+
227
+ ## [0.46.1] - 2026-08-19
228
+
229
+ ### Fixed
230
+ - **LLM**: connection-break hardening (stream-level retry, no-data timeout, `[DONE]` tracking)
231
+ - **LLM**: non-streaming timeout (was missing, could hang forever)
232
+ - **Config**: `retry.maxStreamRetries`, `retry.noDataTimeoutMs` options
233
+
234
+ ## [0.46.0] - 2026-08-19
235
+
236
+ ### Added
237
+ - **Provider**: multi-provider + hot-swap + per-message provenance
238
+ - **Provider**: `ProviderManager` with entry-based config
239
+ - **CLI**: `mma provider add/list/use`
240
+ - **REPL**: `/provider list/use`
241
+
242
+ ### Fixed
243
+ - **Path**: `safeResolvePath` POSIX bug (absolute paths re-resolved against baseDir)
244
+
245
+ ## [0.45.0] - 2026-08-18
246
+
247
+ ### Added
248
+ - **Provider**: provider module Phase 1 (registry, presets, `createProvider()`)
249
+ - **Provider**: `openrouter` preset
250
+ - **Setup**: wizard menu built from `BUILTIN_PROVIDERS`
251
+
252
+ ## [0.44.0] - 2026-08-18
253
+
254
+ ### Added
255
+ - **Plugins**: folder plugins (subdirectory with entry file)
256
+ - **Plugin**: `trace-server` split into folder plugin
257
+
258
+ ### Fixed
259
+ - **Plugin**: template-literal page inlining broke `\n` in JS strings
260
+
261
+ ## [0.43.2] - 2026-08-17
262
+
263
+ ### Fixed
264
+ - **Execution**: plan done-gate on known compile failures (typecheck gate)
265
+ - **Bootstrap**: live getters for `sessionId`/`sessionContext` after session switch
266
+ - **Edit**: `edit_file` "String not found" hint to `read_file` first
267
+
268
+ ## [0.43.1] - 2026-08-17
269
+
270
+ ### Fixed
271
+ - **Agent**: session-interrupt no longer renders tool results after "Session ended"
272
+ - **Executor**: `onAfterTool` plugins skipped when signal is aborted
273
+ - **Lint**: abortable syntax checks on Esc
274
+
275
+ ## [0.43.0] - 2026-08-17
276
+
277
+ ### Added
278
+ - **Plan**: `plan delete <id>` + `plan purge` actions
279
+ - **Plan**: `abort` honors `id` parameter
280
+ - **Plan**: `replan` renumbers ids for kept steps
281
+ - **Audit**: `resolveTestCommand` picks the project's real test runner
282
+
283
+ ### Fixed
284
+ - **Plan**: `switch` to already-active plan is a no-op
285
+ - **Plan**: final audit runs for a completed plan
286
+ - **Plan**: evidence-based plan nudge (replaces iteration counter)
287
+ - **Plan**: `checkPlanAlignment` scans path arguments only
288
+ - **Plan**: `isDepsStep` requires a package-manager verb
289
+ - **Plan**: auto-advance resolves nested files
290
+
291
+ ## [0.42.0] - 2026-08-16
292
+
293
+ ### Added
294
+ - **Execution**: automatic error web search (≥5 same-error repeats → web search → inject results)
295
+ - **Config**: `errorWebSearch` section
296
+
297
+ ### Fixed
298
+ - **Execution**: `onAfterTool` double-counted typecheck + failure errors
299
+
300
+ ## [0.41.1] - 2026-08-16
301
+
302
+ ### Fixed
303
+ - **LSP**: `typescript@5` pin + `--yes` for npx
304
+ - **LSP**: sequential probing (waves) to avoid npx cache lock contention
305
+ - **LSP**: stale config normalization
306
+ - **LSP**: Windows process leak in `shutdown()`
307
+ - **REPL**: non-blocking LSP banner
308
+ - **Bootstrap**: lazy startup health check
309
+
310
+ ## [0.41.0] - 2026-08-15
311
+
312
+ ### Added
313
+ - **REPL**: live plan checklist with progress bar
314
+ - **UI**: tool-to-step binding (`← step N` suffix in tool headers)
315
+ - **UI**: background command output preview
316
+
317
+ ## [0.40.1] - 2026-08-15
318
+
319
+ ### Fixed
320
+ - **LSP**: broken package names (`vscode-html-languageserver` → `vscode-langservers-extracted`)
321
+
322
+ ## [0.40.0] - 2026-08-15
323
+
324
+ ### Added
325
+ - **Tools**: tool-set narrowing (on-demand enable via `enable_tools`)
326
+ - **Config**: `tools.defaultTags` + `tools.enableOnDemand`
327
+ - **Tools**: `alwaysOn` flag for structural tools
328
+
329
+ ## [0.39.1] - 2026-08-14
330
+
331
+ ### Fixed
332
+ - **Plugins**: dedup by version, compatibility gate, source tracking
333
+ - **CLI**: `mma plugins list` command
334
+
335
+ ## [0.38.0] - 2026-08-14
336
+
337
+ ### Added
338
+ - **LSP**: `lsp_check` tool for on-demand diagnostics
339
+ - **Plan**: `plan create` guard (blocks when active plan has progress)
340
+
341
+ ### Fixed
342
+ - **Context**: compaction summary carries plan + read state
343
+ - **Browser**: bridge path resolution in bundled dist
344
+
345
+ ## [0.37.0] - 2026-08-13
346
+
347
+ ### Added
348
+ - **Plugins**: folder plugin support in `PluginLoader`
349
+
350
+ ### Fixed
351
+ - **Plugin**: template-literal page inlining broke `\n` in JS
352
+
353
+ ## [0.36.3] - 2026-08-13
354
+
355
+ ### Fixed
356
+ - **UI**: REPL paste fix (batch single-render, CRLF collapse)
357
+
358
+ ## [0.36.2] - 2026-08-13
359
+
360
+ ### Fixed
361
+ - **Updater**: silent logger, one-shot `process.exit()` killed background install, semver-aware check
362
+
363
+ ## [0.36.1] - 2026-08-13
364
+
365
+ ### Fixed
366
+ - **Audit**: nested-file resolution, non-zero test run blocks
367
+ - **Browser**: bridge diagnostics + one-shot restart
368
+ - **LSP**: per-server disable + initialize retry + CSS timeout
369
+ - **Bash**: npm exec hint
370
+
371
+ ## [0.36.0] - 2026-08-12
372
+
373
+ ### Added
374
+ - **Plan**: model-declared `kind: "create"|"delete"` for steps
375
+ - **Execution**: `FS_MUTATING_TOOLS` for plan auto-advance
376
+ - **Config**: `provider.maxCompletionTokens` option
377
+
378
+ ### Fixed
379
+ - **Context**: compaction preserves session `mission`
380
+ - **Context**: deleted files leave compaction `[Files:]` list
381
+ - **Audit**: final audit runs real `tsc --noEmit --skipLibCheck`
382
+ - **Bash**: repeated forbidden Windows commands hard-stopped after 2 failures
383
+
384
+ ## [0.35.5] - 2026-08-12
385
+
386
+ ### Fixed
387
+ - **Execution**: plan-alignment phantom paths (domains/extensions treated as files)
388
+ - **Execution**: hint/recovery dedup in `StuckDetector`
389
+
390
+ ## [0.35.3] - 2026-08-11
391
+
392
+ ### Fixed
393
+ - **LSP**: workspace root resolved from edited file's project
394
+ - **Audit**: skipped steps treated as terminal
395
+ - **Bash**: Windows hint keys on original command word
396
+ - **Tools**: boundedOutput tools never budget-truncated
397
+
398
+ ## [0.35.0] - 2026-08-11
399
+
400
+ ### Added
401
+ - **Tools**: `download_file` tool for binary file downloads
402
+
403
+ ## [0.34.0] - 2026-08-10
404
+
405
+ ### Added
406
+ - **Indexer**: project profile (`[Stack: ...]` summary from manifest)
407
+ - **Indexer**: dynamic map refresh inside sessions
408
+
409
+ ## [0.33.3] - 2026-08-10
410
+
411
+ ### Fixed
412
+ - **Audit**: nested-file resolution (basename + path-suffix match)
413
+ - **Plan**: `plan show` honors `id` parameter
414
+ - **Context**: compaction interval reset per user turn
415
+ - **Context**: `extractFacts` captures `edit_file` paths + Windows drive-letter paths
416
+ - **Execution**: stuck detector read-only loop detection
417
+ - **Read**: default limit 15 → 300 lines
418
+ - **LSP**: `spawn` on Windows (`.cmd` shim resolution)
419
+ - **Todo**: `todo add` tracks subtasks, `todo done` marks individual sub-task
420
+ - **Memory**: learns repeated per-tool failures (≥3×)
421
+ - **Context**: compaction preserves user's task
422
+
423
+ ## [0.33.2] - 2026-08-09
424
+
425
+ ### Fixed
426
+ - **UI**: REPL conversation layout (user/agent message dividers)
427
+ - **Tools**: `isFilePathLike` uses allow-list of file extensions
428
+
429
+ ## [0.33.1] - 2026-08-09
430
+
431
+ ### Fixed
432
+ - **UI**: REPL line editor redraw fix (no duplicated multi-line input)
433
+ - **Tools**: `web_fetch`/`web_browse` description clarifications
434
+
435
+ ## [0.33.0] - 2026-08-09
436
+
437
+ ### Added
438
+ - **RLM**: pass-by-reference sub-agent results (`ArtifactStore`)
439
+ - **RLM**: chunked parallel queries (`chunk_query` tool)
440
+ - **Config**: `subagent.resultMode`, `maxSummaryChars`, `artifactsDir`, `stableSystemPrompt`
441
+
442
+ ## [0.32.0] - 2026-08-08
443
+
444
+ ### Added
445
+ - **Browser**: driver abstraction (`PlaywrightDriver` + `BridgeDriver`)
446
+ - **Browser**: Node bridge for Bun compatibility
447
+ - **Config**: `browser.maxConsoleLineChars`
448
+
449
+ ## [0.31.0] - 2026-08-08
450
+
451
+ ### Added
452
+ - **Security**: session file encryption (AES-256-GCM)
453
+ - **Security**: audit notifications (file + webhook)
454
+ - **Security**: security policies (strict/balanced/permissive)
455
+ - **CLI**: `mma security` commands
456
+
457
+ ## [0.30.0] - 2026-08-07
458
+
459
+ ### Added
460
+ - **Execution**: final audit gate (runs `bun test` for verification steps)
461
+ - **Execution**: `detectTestResults()` auto-verification in bash
462
+
463
+ ### Fixed
464
+ - **Execution**: empty-CLI entry-point hint
465
+ - **Bash**: Windows anti-patterns documentation
466
+
467
+ ## [0.29.0] - 2026-08-07
468
+
469
+ ### Added
470
+ - **Bash**: smart UTF-8/OEM line decoding (fixes Cyrillic on Windows)
471
+ - **Bash**: behavior-based background detection
472
+ - **Bash**: stuck-detector bash awareness
473
+
474
+ ## [0.28.0] - 2026-08-06
475
+
476
+ ### Fixed
477
+ - **Agent**: double-Esc interrupt fix (Bun readline keypress collapsing)
478
+ - **Agent**: abortable in-flight LLM requests on interrupt
479
+ - **UI**: clipboard paste hint
480
+
481
+ ## [0.27.0] - 2026-08-06
482
+
483
+ ### Fixed
484
+ - **Security**: Windows hardening
485
+ - **Hallucination**: fixes
486
+
487
+ ## [0.26.0] - 2026-08-05
488
+
489
+ ### Added
490
+ - **UI**: opencode-style inline tool headers (`ui.toolStyle`)
491
+ - **UI**: model commentary next to tool calls (`ui.toolComments`)
492
+ - **UI**: diffs without background color
493
+
494
+ ## [0.25.0] - 2026-08-05
495
+
496
+ ### Added
497
+ - **LSP**: LSP module (typescript, CSS, HTML, JSON, Python, Rust, Go)
498
+ - **Execution**: audit gate language-agnostic
499
+ - **Bash**: Windows command hints
500
+
501
+ ## [0.24.0] - 2026-08-04
502
+
503
+ ### Added
504
+ - **Context**: quality formula upgrade (token load + compaction loss + error density + freshness)
505
+ - **Read**: display mode (show only header in REPL, full content to LLM)
506
+
507
+ ## [0.23.0] - 2026-08-04
508
+
509
+ ### Added
510
+ - **Certification**: model certification module (`mma model certify`)
511
+ - **CLI**: cert checkmarks in model lists
512
+
513
+ ## [0.22.0] - 2026-08-03
514
+
515
+ ### Added
516
+ - **Security**: `enabled` flag (disabled by default)
517
+ - **CLI**: init/first-run apply wizard security answers
518
+ - **Prompt**: system prompt & recovery messages cleanup