Skip to content

Release v0.1.5#16

Merged
ApiliumDevTeam merged 119 commits intomainfrom
dev
Mar 6, 2026
Merged

Release v0.1.5#16
ApiliumDevTeam merged 119 commits intomainfrom
dev

Conversation

@ApiliumDevTeam
Copy link
Collaborator

Summary

Production release of Mayros v0.1.5 — 119 commits, 311 files changed.

Coding CLI Tools

  • Full code tools suite: code_edit, code_read, code_write, code_glob, code_grep, code_shell, code_ls, code_multi_edit, code_shell_interactive, web_fetch, web_search, notebook editing
  • Diff preview with colored output and stats in tool execution display
  • Screen reader accessible TUI mode (--a11y)
  • Media capability warnings for unsupported model/attachment combos
  • Zero-config setup redirect on mayros code

New Extensions

  • Browser automation with CDP client
  • MCP server for exposing Mayros as an MCP provider
  • Container sandbox with Docker/Podman/gVisor detection
  • Analytics with privacy controls and batch delivery
  • OAuth2 for MCP servers with PKCE and device code flow

SDK

  • Programmatic Mayros integration with transport-agnostic agentic loop

Production Hardening (107 fixes across 51 commits)

  • Timer leak fixes (Promise.race, PTY, gateway client, retry handles)
  • Prototype pollution guards in config deep-merge
  • Eval injection elimination in shell scripts
  • JetBrains plugin: daemon threads, PasswordSafe, Disposable lifecycle, thread-safe buffering (34 fixes)
  • VSCode extension: webview listener disposal, tree provider cleanup, require→ESM (11 fixes)
  • Silent catch elimination with proper error logging across all extensions

Infrastructure

  • Cross-platform installer scripts with Node.js detection
  • Model aliases and intelligent model router
  • Managed settings, policy engine, trusted folders
  • Cross-session search with streaming JSONL parsing
  • Auto-update, session cleanup, prompt cache services

README

  • Complete rewrite with competitive comparison table, architecture diagram, and CLI screenshot

Test plan

  • pnpm build — no type errors
  • pnpm test — 9200+ tests across 900+ files
  • mayros code end-to-end session
  • JetBrains and VSCode extensions load without errors
  • Tag v0.1.5 after merge

…rt on code CLI

- Strip <final>/<think> tags from assistantTexts before building reply
  payloads, preventing </final> from leaking into CLI/channel output
- Default cleanStart to true in `mayros code` so the startup screen
  is always visible
New extension at extensions/code-tools/ providing the foundation for
local filesystem and shell tools. Includes TypeBox config schema with
workspace root, file size limits, shell timeout, and glob/grep caps.
Path utilities enforce workspace-scoped access with traversal protection.
…port

Reads local files with cat-n style line numbering. Supports offset/limit
for large files, detects binary content via null-byte scan, returns images
via imageResultFromFile, and enforces max file size from config.
Writes files to disk, creating parent directories as needed. When
overwriting an existing file, generates a unified diff showing changes.
Returns bytes written and whether the file is new or updated.
…k tools

code_edit: exact string replacement with uniqueness check and unified diff
code_glob: fast-glob file search with mtime sort and .gitignore respect
code_grep: regex search with ripgrep backend and built-in fallback
code_ls: directory listing sorted dirs-first with file sizes
code_shell: bash command execution with timeout and sandbox compatibility
code_notebook: Jupyter .ipynb read/edit at cell level with output parsing
Register 9 code tools in plugin index, add display entries with
emoji indicators and detail key resolvers for shell, read, and
write tool categories.
Load .mayros/context.md (global + project) and MAYROS.md fallback,
index as Cortex triples, inject into system prompt. Trigger
auto-compaction when context usage exceeds 95% threshold.
…ew action

Tier 2 features: git stash-based /undo with list support, @file
mention expansion in prompts, token cost display verification tests,
slash command and handler wiring, and GitHub Action for automated
PR review with mayros headless mode.
Tier 3 features: session export/import via zlib-compressed
base64url tokens with MYR1 magic prefix, and initial mayros-sdk
package with agent loop, tool definitions, and type system.
… path linkification

Refine terminal ANSI utilities, table column rendering, theme
palette presets, tool execution component, and add clickable
file path linkification with tests.
Strategy document and detailed analysis covering feature gaps,
tier prioritization, and competitive positioning against Claude
Code, Cursor, Windsurf, and Aider.
Replace stub agent loop with full tool execution cycle: sendMessage
callback, tool dispatch, result accumulation, abort signal, event
emission, and dry-run mode for backward compatibility. 29 tests.
Fix estimateTokenSize to decompress and count messages, add binary
file detection in @file mentions, wrap notebook JSON.parse in
ToolInputError, add nbformat validation, harden GitHub Action with
API key input, diff truncation, Node.js setup, and concurrency.
Add compaction-trigger, token-accumulator, and export globFiles,
grepBuiltin, listDirectory for direct testing. Rewrite 5 test files
from stub math to real integration tests with temp dirs and edge
cases. 54 tests replace 15 trivial assertions.
… isolation

- Container runtime detection: Docker, Podman, gVisor with security flag validation
- Container security: mount restriction checks and capability enforcement
- Network sandbox: outbound connection filtering and domain allowlisting
- Updated bash-sandbox config and index to integrate container features
- Auth Code + PKCE flow for browser-capable environments
- Device Code flow for headless/SSH sessions
- RFC 8414 metadata discovery for authorization server endpoints
- File-based token store with secure persistence and refresh
- Updated MCP client config, transport, and index for OAuth2 integration
- SGR 1006 mouse protocol parser with button/modifier detection
- MouseHandler with scroll acceleration and input listener factory
- Virtual scroll in ChatLog with scroll-up indicator and auto-scroll-to-bottom
- Pricing catalog for 14 models across Anthropic, OpenAI, and Google
- Exact and prefix-based model lookup with case-insensitive provider matching
- Per-model usage tracking with provider:model keyed accumulation
- Persisted model usage breakdown in budget file with daily rollover
- New tools: budget_model_usage, budget_pricing_catalog
- CLI commands: budget models, budget pricing
- git_commit: stage files and create commits with message validation
- git_push: push branch to remote with tracking setup
- git_create_pr: create pull requests via gh CLI
- Utility functions for branch, status, diff, and remote detection
- Uses execFileSync to prevent shell injection
- Removed competitive analysis, roadmaps, gap analysis, experiments,
  proposals, and refactoring plans from tracked docs
- Created secret/ directory for internal strategic documentation
- Added secret/, docs/experiments/, docs/refactor/, and individual
  strategy files to .gitignore to prevent accidental commits
…web-search

- code_multi_edit: batch file edits across multiple files in one call
- code_read_many: parallel reading of multiple files with glob support
- code_shell_interactive: PTY-based shell sessions with command history
- web_fetch: URL content retrieval with HTML-to-markdown conversion
- web_search: web search integration with result extraction
- diff-format test coverage for unified diff parsing
- Updated code-edit tool and index with new tool registrations
- Event schema with 7 categories and unique ID generation
- EventQueue: buffer, timer-based flush, exponential backoff, TTL, graceful shutdown
- Privacy modes: anonymous (SHA-256 hashed IDs), identified, off
- MAYROS_ANALYTICS_DISABLED env override for CI/testing
- Hooks: session_start/end, after_tool_call, llm_output tracking
- analytics_status tool and CLI commands (status, flush)
- Glob-style wildcard matching for tool names and file paths
- Policy store integration for pattern-based permission rules
- Updated interactive-permissions index and policy store
- BrowserClient for Chrome DevTools Protocol communication
- Page navigation, element interaction, and screenshot capture
- Plugin registration with browser_navigate and browser_screenshot tools
- MCP protocol implementation with JSON-RPC message handling
- Tool adapter bridging internal tools to MCP tool interface
- Resource and prompt providers for MCP capabilities
- stdio and HTTP transports with connection lifecycle management
- Server configuration with security and access control
- Session file discovery and streaming line-by-line JSONL parsing
- Case-insensitive substring matching with context snippet extraction
- Search CLI: mayros search <query> with role, date, and session filters
- A11yRenderer with semantic prefixes for screen reader compatibility
- Linear output mode without alternate screen buffer
- MAYROS_ACCESSIBILITY=1 env detection for automatic activation
- Detect unsupported media types and generate user-facing warnings
- Media mention resolver for @file references with type detection
- Warning extraction from media understanding decisions
- Colored diff rendering for code_edit, code_write, code_multi_edit results
- Diff stats summary line with additions/deletions count
- Expandable preview with configurable line limit
- Test coverage for diff detection, formatting, and expand/collapse
…ine, trusted folders

- Managed settings for organization-level config enforcement
- Mayrosignore parser for file/path exclusion patterns
- Policy engine for declarative permission policy evaluation
- Trusted folders registry for workspace security boundaries
TailscaleNetwork: add guard let for ifa_addr before dereferencing
to prevent EXC_BAD_ACCESS on link-layer interface entries.
WideAreaGatewayDiscovery: replace try? readToEnd() with the
existing readToEndSafely() wrapper for proper error handling.
Ensures the 30-second abort timer is always cleared regardless
of whether the fetch succeeds or throws an exception.
Wrap download/detectMime/rename sequence in try/catch that
removes the temp file before re-throwing on error.
Store the message handler reference and call removeEventListener
in disconnect() to prevent listener accumulation on reconnect.
Store the onDidReceiveMessage disposable and clean it up in
onDidDispose to match the pattern used by other panels.
Use local val captures with early return instead of !! operators
on voiceId and apiKey to prevent NullPointerException.
Replace single pendingCacheKey variable with a Map keyed by
event.runId to correctly track cache keys across concurrent
LLM requests.
Call removeAllListeners() on the child process before killing it
to prevent listener accumulation on reconnect cycles.
telegram: await server.close() callback before proceeding with
bot.stop() to prevent dropping in-flight webhook requests.
chutes-oauth: call resolve/reject before server.close() so the
HTTP response flushes before the socket tears down.
AgentsPanel, SkillsPanel, KgPanel: implement Disposable with
service.removeListener(this) to prevent listener accumulation.
MayrosMainPanel: dispose all child panels including agents/skills/kg.
All panels: set isDaemon=true on background threads to allow
clean IDE shutdown when gateway is unresponsive.
Remove gatewayToken from State data class and store it securely
via CredentialAttributes. Add validation for reconnect settings
with coerceAtLeast/coerceIn to prevent invalid values.
Add @synchronized to disconnect() matching connect() since both
methods access shared mutable state (ws, connected, pendingRequests).
streamBuffer is written from WebSocket thread and read from EDT.
StringBuffer provides synchronized access. Use setLength(0) instead
of clear() for StringBuffer compatibility.
Add clearRegisteredListeners() that calls client.off() before
clearing, matching ChatPanel and TracesPanel pattern. Set daemon
flag on background threads and log refreshSessions failures.
TracesPanel: set isDaemon on fetchFilteredEvents thread.
SettingsPanel: implement Disposable with service.removeListener
and set isDaemon on connect thread.
ExplainCodeAction, SendSelectionAction, MayrosLineMarkerProvider:
set isDaemon=true on background threads and replace silent catch
blocks with Logger.warn for diagnostic visibility.
AgentsPanelFactory, SkillsPanelFactory, KgPanelFactory: call
content.setDisposer(panel) so dispose() runs when the tool
window tab is closed, preventing listener leaks.
Always disconnect old client in rewireClient regardless of state
to prevent orphaned WebSocket connections from reconnect timers.
Store auto-connect retry setTimeout handle and clear on deactivate.
ChatPanel, PlanPanel, TracePanel: capture onDidReceiveMessage
disposable and clean it up in onDidDispose, matching KgPanel pattern.
emit(): log handler exceptions with console.warn.
storeDeviceToken/loadDeviceIdentity: log errors instead of silencing.
call(): capture ws in local variable instead of using force assertion.
SessionsTreeProvider, AgentsTreeProvider, SkillsTreeProvider:
add dispose() that cleans up the EventEmitter instance. Providers
are registered in context.subscriptions for automatic disposal.
Trim allEvents to the most recent MAX_TRACE_EVENTS entries on both
streaming append and bulk replace paths to prevent memory exhaustion
in long-running sessions.
…llution guard to managed-settings

- headless-cli.ts: Store setTimeout handle and clearTimeout in finally block
  to prevent keeping the event loop alive after command completes
- managed-settings.ts: Import and use isBlockedObjectKey() in deepMerge,
  matching the defense-in-depth pattern from includes.ts
…ards

- team-manager.ts: Accept null for nsMgr and fusion params, add runtime
  null checks before usage in createTeam and finalizeTeam
- dashboard-cli.ts: Replace unsafe 'null as never' casts with plain null
Eliminates command injection risk via user-controlled -s and -c arguments
by building the command as a bash array instead of string concatenation
passed to eval.
Store setTimeout handle from input feeding loop and clear it in the
settle function to prevent orphaned timers in the event loop.
…reenshot

- package.json: version 0.1.5, fix homepage URL, add keywords, English description
- README.md: rewrite with competitive comparison table, coding CLI section first,
  architecture diagram, collapsible channel setup, security layers table,
  fix install command to @apilium/mayros, remove "Everything we built" laundry list
- Add CLI terminal interface screenshot for README hero section
)

## Summary

- **Code tools extension**: Full suite — `code_edit`, `code_read`,
`code_write`, `code_glob`, `code_grep`, `code_shell`, `code_ls`,
`code_multi_edit`, `code_shell_interactive`, `web_fetch`, `web_search`,
and notebook editing
- **Production hardening**: 107 issues fixed across 51 commits — timer
leaks, prototype pollution guards, eval injection, null safety, dispose
patterns, error logging, and silent-catch elimination
- **JetBrains plugin**: Daemon threads, PasswordSafe token storage,
Disposable lifecycle, thread-safe buffering (34 fixes)
- **VSCode extension**: Webview listener disposal, tree provider
cleanup, require→ESM migration (11 fixes)
- **SDK module**: Programmatic Mayros integration with
transport-agnostic agentic loop
- **README rewrite**: Competitive positioning, comparison table,
architecture diagram, CLI screenshot
- **Version bump**: 0.1.4 → 0.1.5

## Test plan

- [ ] `pnpm build` passes with no type errors
- [ ] `pnpm test` — 9200+ tests across 900+ files
- [ ] Verify `mayros code` triggers onboard wizard on fresh install
- [ ] Verify code tools work end-to-end in TUI session
- [ ] Verify JetBrains and VSCode extensions load without errors
@ApiliumDevTeam ApiliumDevTeam merged commit 572c39e into main Mar 6, 2026
4 of 5 checks passed
ApiliumDevTeam added a commit that referenced this pull request Mar 9, 2026
## Summary

Production release of Mayros v0.1.5 — 119 commits, 311 files changed.

### Coding CLI Tools
- Full code tools suite: `code_edit`, `code_read`, `code_write`,
`code_glob`, `code_grep`, `code_shell`, `code_ls`, `code_multi_edit`,
`code_shell_interactive`, `web_fetch`, `web_search`, notebook editing
- Diff preview with colored output and stats in tool execution display
- Screen reader accessible TUI mode (`--a11y`)
- Media capability warnings for unsupported model/attachment combos
- Zero-config setup redirect on `mayros code`

### New Extensions
- **Browser automation** with CDP client
- **MCP server** for exposing Mayros as an MCP provider
- **Container sandbox** with Docker/Podman/gVisor detection
- **Analytics** with privacy controls and batch delivery
- **OAuth2** for MCP servers with PKCE and device code flow

### SDK
- Programmatic Mayros integration with transport-agnostic agentic loop

### Production Hardening (107 fixes across 51 commits)
- Timer leak fixes (Promise.race, PTY, gateway client, retry handles)
- Prototype pollution guards in config deep-merge
- Eval injection elimination in shell scripts
- JetBrains plugin: daemon threads, PasswordSafe, Disposable lifecycle,
thread-safe buffering (34 fixes)
- VSCode extension: webview listener disposal, tree provider cleanup,
require→ESM (11 fixes)
- Silent catch elimination with proper error logging across all
extensions

### Infrastructure
- Cross-platform installer scripts with Node.js detection
- Model aliases and intelligent model router
- Managed settings, policy engine, trusted folders
- Cross-session search with streaming JSONL parsing
- Auto-update, session cleanup, prompt cache services

### README
- Complete rewrite with competitive comparison table, architecture
diagram, and CLI screenshot

## Test plan

- [ ] `pnpm build` — no type errors
- [ ] `pnpm test` — 9200+ tests across 900+ files
- [ ] `mayros code` end-to-end session
- [ ] JetBrains and VSCode extensions load without errors
- [ ] Tag `v0.1.5` after merge
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant