Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
0991754
Strip leaked reasoning tags from final payloads, default to clean sta…
ApiliumDevTeam Mar 6, 2026
132440f
Add code-tools extension scaffold with config and path utilities
ApiliumDevTeam Mar 6, 2026
d9ae163
Add code_read tool with line numbers, binary detection, and image sup…
ApiliumDevTeam Mar 6, 2026
68806ec
Add code_write tool with diff preview and parent directory creation
ApiliumDevTeam Mar 6, 2026
1097e45
Add code_edit, code_glob, code_grep, code_ls, code_shell, and noteboo…
ApiliumDevTeam Mar 6, 2026
8241351
Add code-tools plugin registration and tool display metadata
ApiliumDevTeam Mar 6, 2026
49b06a3
Add project context loader and auto-compaction trigger
ApiliumDevTeam Mar 6, 2026
3da885b
Add undo manager, file mentions, token cost verification, and PR revi…
ApiliumDevTeam Mar 6, 2026
084fbe2
Add session teleport and Agent SDK scaffold
ApiliumDevTeam Mar 6, 2026
2ad74d0
Polish TUI rendering: ANSI helpers, table layout, theme palettes, and…
ApiliumDevTeam Mar 6, 2026
acf9863
Add competitive analysis documentation for coding CLI landscape
ApiliumDevTeam Mar 6, 2026
f12ad29
Implement real agentic loop in SDK with transport-agnostic sendMessage
ApiliumDevTeam Mar 6, 2026
2e7b159
Harden teleport, file mentions, notebook parser, and PR review action
ApiliumDevTeam Mar 6, 2026
4dd5c29
Extract testable functions and rewrite stub tests with real assertions
ApiliumDevTeam Mar 6, 2026
de0a4c3
Add container sandbox with Docker/Podman/gVisor detection and network…
ApiliumDevTeam Mar 6, 2026
d72f161
Add OAuth2 authentication for MCP servers with PKCE and device code flow
ApiliumDevTeam Mar 6, 2026
4c6f8a0
Add mouse parsing and virtual scroll for TUI chat log
ApiliumDevTeam Mar 6, 2026
fe96c64
Add built-in model pricing catalog and per-model cost tracking
ApiliumDevTeam Mar 6, 2026
6f9adb9
Add git commit, push, and PR creation tools
ApiliumDevTeam Mar 6, 2026
35f395b
Move strategic analysis docs to secret/ and update .gitignore
ApiliumDevTeam Mar 6, 2026
4cb4ca4
Add code tools: multi-edit, read-many, shell-interactive, web-fetch, …
ApiliumDevTeam Mar 6, 2026
dfd5876
Add opt-in analytics extension with privacy controls and batch delivery
ApiliumDevTeam Mar 6, 2026
59e565d
Add wildcard matcher for interactive permissions policy rules
ApiliumDevTeam Mar 6, 2026
9b1b2e8
Add browser automation extension with CDP client
ApiliumDevTeam Mar 6, 2026
474be33
Add MCP server extension for exposing Mayros as an MCP provider
ApiliumDevTeam Mar 6, 2026
367eddd
Add cross-session search with streaming JSONL parsing
ApiliumDevTeam Mar 6, 2026
699bc22
Add screen reader accessible TUI mode
ApiliumDevTeam Mar 6, 2026
590d001
Add media capability warnings and media mention handler
ApiliumDevTeam Mar 6, 2026
74b6a6f
Enhance diff preview in tool execution display
ApiliumDevTeam Mar 6, 2026
dae1e21
Add config infrastructure: managed settings, mayrosignore, policy eng…
ApiliumDevTeam Mar 6, 2026
7379fb7
Add model aliases and intelligent model router
ApiliumDevTeam Mar 6, 2026
19da78a
Add output masking for sensitive data in terminal output
ApiliumDevTeam Mar 6, 2026
b879731
Add SDK module for programmatic Mayros integration
ApiliumDevTeam Mar 6, 2026
14a8204
Add core services: auto-update, file-discovery, loop-detection, promp…
ApiliumDevTeam Mar 6, 2026
3eb646a
Add TUI utilities: compact handler, input history, session manager, s…
ApiliumDevTeam Mar 6, 2026
e8541cf
Add cross-platform installer scripts with Node.js detection
ApiliumDevTeam Mar 6, 2026
f8d0ce9
Add PR review sessions, remote CLI, and serve CLI
ApiliumDevTeam Mar 6, 2026
b408965
Harden file mention resolution and session teleport parsing
ApiliumDevTeam Mar 6, 2026
d3ef1d4
Expand theme palettes with additional presets and validation
ApiliumDevTeam Mar 6, 2026
149a319
Add tool display entries for git, web, and expanded code tools
ApiliumDevTeam Mar 6, 2026
41f6a07
Add zero-config setup redirect and improve CLI entrypoints
ApiliumDevTeam Mar 6, 2026
0e4be17
Wire new features into TUI, config, and CLI registration
ApiliumDevTeam Mar 6, 2026
8696266
Fix workflow orchestrator to dispatch real agent tasks instead of sim…
ApiliumDevTeam Mar 6, 2026
478bfa8
Wire callLlm into plugin API so LLM hooks can evaluate conditions
ApiliumDevTeam Mar 6, 2026
fd13fd3
Optimize mailbox stats to use parallel count queries instead of N ser…
ApiliumDevTeam Mar 6, 2026
c69610d
Add TTL cache to project memory stats and reduce query limits
ApiliumDevTeam Mar 6, 2026
07bad13
Paginate session event loading with timeout and parallel reconstruction
ApiliumDevTeam Mar 6, 2026
ff4ea64
Fix MCP reconnect counter to increment only after confirmed failure
ApiliumDevTeam Mar 6, 2026
f903c48
Fix network sandbox to apply wrappedCommand and respect Linux allowlist
ApiliumDevTeam Mar 6, 2026
c49afca
Fix PTY shell to reject promise on spawn failure and add hard timeout
ApiliumDevTeam Mar 6, 2026
2d8924f
Include direct dependencies in hub_install resolution seed
ApiliumDevTeam Mar 6, 2026
1b617b1
Prevent duplicate event handler registration on LLM hooks reload
ApiliumDevTeam Mar 6, 2026
771e467
Replace substring matching with token-based search and relevance scoring
ApiliumDevTeam Mar 6, 2026
f123591
Invoke onKnowledgeExtracted callback with error handling in compact h…
ApiliumDevTeam Mar 6, 2026
9ced71a
Reject in-flight CDP promises on browser client disconnect
ApiliumDevTeam Mar 6, 2026
06621af
Wrap CortexAudit.record calls in try/catch to prevent mid-session cra…
ApiliumDevTeam Mar 6, 2026
3ae2564
Track merge errors in workflow phase results instead of silencing them
ApiliumDevTeam Mar 6, 2026
adfc384
Parallelize listTasks with batched Promise.all instead of sequential …
ApiliumDevTeam Mar 6, 2026
d4b8285
Parallelize scope queries in removeRule and getRule with Promise.all
ApiliumDevTeam Mar 6, 2026
d5f96cc
Distinguish search failure from empty results in web_search tool
ApiliumDevTeam Mar 6, 2026
1c283c3
Wrap teleport token parsing in try/catch for user-friendly error mess…
ApiliumDevTeam Mar 6, 2026
fdfc15e
Implement actual analytics delivery with configurable endpoint
ApiliumDevTeam Mar 6, 2026
38f14bc
Wire teleport import, compact, batch, onboard, and ecosystem commands…
ApiliumDevTeam Mar 6, 2026
bc713bd
Forward agent and model options in SDK and fix abort to send signal
ApiliumDevTeam Mar 6, 2026
b1ccb3e
Replace console.error with process.stderr.write in compact handler
ApiliumDevTeam Mar 6, 2026
c42efca
Remove dead sendText guards in Twitch outbound and actions
ApiliumDevTeam Mar 6, 2026
5ad92ca
Wire MCP server collectTools to plugin registry and connect getConven…
ApiliumDevTeam Mar 6, 2026
bfcd5e1
Replace fake Discord credentials with proper gateway-mode configuration
ApiliumDevTeam Mar 6, 2026
9b3c0d6
Poll GitHub Actions API for real run ID after workflow dispatch
ApiliumDevTeam Mar 6, 2026
9ee962d
Detect OAuth placeholder values and return undefined for proper error…
ApiliumDevTeam Mar 6, 2026
2c2d03b
Guard MockProvider behind test env and add verification skip warnings
ApiliumDevTeam Mar 6, 2026
c41738f
Replace require() calls with ESM imports in VSCode extension
ApiliumDevTeam Mar 6, 2026
0bca09b
Fix JetBrains listener leak and document session key lifecycle
ApiliumDevTeam Mar 6, 2026
ab1bf1b
Document CDP Runtime.evaluate usage as browser-scoped, not host eval
ApiliumDevTeam Mar 6, 2026
b2e9012
Remove empty placeholder test from macOS test target
ApiliumDevTeam Mar 6, 2026
cabea4d
Add warning log and abort check to Matrix waitForMatrixSync
ApiliumDevTeam Mar 6, 2026
354274b
Document test-runtime.ts location rationale in MSTeams extension
ApiliumDevTeam Mar 6, 2026
d72bf40
Annotate internal-only exports in trace-emitter and enrichment-sanitizer
ApiliumDevTeam Mar 6, 2026
e9fe8fa
Add diagnostic logging to silent catch blocks in TUI handlers
ApiliumDevTeam Mar 6, 2026
8afccc9
Flush stderr before process.exit in critical error handlers
ApiliumDevTeam Mar 6, 2026
c3d1f6e
Add error handling to setInterval async callbacks in extensions
ApiliumDevTeam Mar 6, 2026
c35dc90
Add null guards and error logging to VSCode extension
ApiliumDevTeam Mar 6, 2026
d306265
Replace silent try? with do/catch logging in LaunchdManager
ApiliumDevTeam Mar 6, 2026
80ce9fa
Fix Sparkle feed URL to point to correct ApiliumCode/mayros repo
ApiliumDevTeam Mar 6, 2026
b401173
Wrap JSON.parse in skill-packager with descriptive error handling
ApiliumDevTeam Mar 6, 2026
1962620
Store and clear all timers in gateway client stop()
ApiliumDevTeam Mar 6, 2026
874eac5
Log queue state failures instead of silently catching in deliver
ApiliumDevTeam Mar 6, 2026
d52c790
Add cleanup failure logging in media server and store
ApiliumDevTeam Mar 6, 2026
b472f88
Fix error handling in mattermost, phone-control, and tlon extensions
ApiliumDevTeam Mar 6, 2026
0184c86
Remove debug leftover and unused diagnostic timer
ApiliumDevTeam Mar 6, 2026
d3fbc7c
Use process.once for SIGINT and log update check failures
ApiliumDevTeam Mar 6, 2026
969a55f
Guard null ifa_addr pointer and use safe file read in macOS discovery
ApiliumDevTeam Mar 6, 2026
be12a4a
Move abort timer clearTimeout into finally block in web-fetch
ApiliumDevTeam Mar 6, 2026
1b0a2bd
Clean up temp file on download failure in media store
ApiliumDevTeam Mar 6, 2026
746b77d
Remove WebSocket message listener on disconnect in MCP transport
ApiliumDevTeam Mar 6, 2026
acdd7bf
Dispose webview message listener on KgPanel close
ApiliumDevTeam Mar 6, 2026
c632078
Replace force-unwrap with safe null checks in TalkModeManager
ApiliumDevTeam Mar 6, 2026
e973b40
Use per-request cache key map in token-economy for concurrency
ApiliumDevTeam Mar 6, 2026
ff214bf
Remove process listeners before kill in StdioTransport disconnect
ApiliumDevTeam Mar 6, 2026
3829068
Await server.close and fix shutdown order in webhook and OAuth
ApiliumDevTeam Mar 6, 2026
8b44600
Implement Disposable on JetBrains panels and use daemon threads
ApiliumDevTeam Mar 6, 2026
47e1621
Migrate gateway token from plaintext XML to IntelliJ PasswordSafe
ApiliumDevTeam Mar 6, 2026
a760cca
Synchronize disconnect() to prevent race with connect()
ApiliumDevTeam Mar 6, 2026
2eb50f8
Replace StringBuilder with StringBuffer for thread-safe stream buffering
ApiliumDevTeam Mar 6, 2026
708010e
Fix PlanPanel listener cleanup, daemon threads, and error logging
ApiliumDevTeam Mar 6, 2026
87bf426
Fix TracesPanel daemon thread and SettingsPanel listener leak
ApiliumDevTeam Mar 6, 2026
ce04469
Add daemon threads and error logging to JetBrains actions
ApiliumDevTeam Mar 6, 2026
7b93706
Add setDisposer to panel factories for proper lifecycle cleanup
ApiliumDevTeam Mar 6, 2026
b953cfe
Dispose old client on config change and store retry timer handle
ApiliumDevTeam Mar 6, 2026
9c9feae
Store and dispose webview message listeners in all panels
ApiliumDevTeam Mar 6, 2026
3d52dca
Add logging to silent catches and fix ws null assertion in client
ApiliumDevTeam Mar 6, 2026
b6c5428
Add dispose method to tree providers for EventEmitter cleanup
ApiliumDevTeam Mar 6, 2026
bb14271
Cap trace events array at 5000 entries to prevent unbounded growth
ApiliumDevTeam Mar 6, 2026
08b39be
Clear timeout timer in headless CLI Promise.race and add prototype po…
ApiliumDevTeam Mar 6, 2026
af6aaf0
Make TeamManager nsMgr and fusion parameters nullable with runtime gu…
ApiliumDevTeam Mar 6, 2026
2a027d5
Replace eval with array-based command execution in mayroslog.sh
ApiliumDevTeam Mar 6, 2026
6716a78
Clear feedNext timer chain on PTY exit or kill in code-shell-interactive
ApiliumDevTeam Mar 6, 2026
82d2554
Bump to v0.1.5, rewrite README for better positioning, and add CLI sc…
ApiliumDevTeam Mar 6, 2026
c8d8cac
v0.1.5: Production hardening, coding CLI tools, and README overhaul (…
ApiliumDevTeam Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
213 changes: 213 additions & 0 deletions .github/actions/mayros-review/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
name: "Mayros PR Review"
description: "Automated code review using Mayros CLI"
branding:
icon: "code"
color: "blue"

inputs:
mayros-version:
description: "Mayros CLI version to install"
required: false
default: "latest"
prompt:
description: "Custom review prompt"
required: false
default: "Review this pull request. Focus on: code quality, security issues, performance concerns, and adherence to project conventions. Be concise and actionable."
model:
description: "LLM model identifier"
required: false
default: "anthropic/claude-sonnet-4-20250514"
github-token:
description: "GitHub token for posting comments"
required: true
anthropic-api-key:
description: "Anthropic API key for LLM calls"
required: true
max-diff-lines:
description: "Maximum diff lines to include in the review prompt (0 = unlimited)"
required: false
default: "3000"
node-version:
description: "Node.js version to use"
required: false
default: "22"

outputs:
review-posted:
description: "Whether a review comment was posted (true/false)"
value: ${{ steps.post-review.outputs.posted }}
review-length:
description: "Character count of the generated review"
value: ${{ steps.run-review.outputs.review-length }}
diff-lines:
description: "Number of diff lines analyzed"
value: ${{ steps.get-diff.outputs.diff-lines }}
diff-truncated:
description: "Whether the diff was truncated (true/false)"
value: ${{ steps.get-diff.outputs.truncated }}

runs:
using: "composite"
steps:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}

- name: Install Mayros
id: install-mayros
shell: bash
run: |
MAYROS_VERSION="${{ inputs.mayros-version }}"
# Sanitize version string: only allow semver chars and "latest"
if [[ ! "$MAYROS_VERSION" =~ ^[a-zA-Z0-9.\-]+$ ]]; then
echo "::error::Invalid mayros-version format: ${MAYROS_VERSION}"
exit 1
fi

echo "Installing mayros@${MAYROS_VERSION}..."
if npm install -g "mayros@${MAYROS_VERSION}"; then
echo "installed=global" >> "$GITHUB_OUTPUT"
echo "Mayros installed globally"
mayros --version || true
else
echo "::warning::Global install failed, will fall back to npx"
echo "installed=npx" >> "$GITHUB_OUTPUT"
fi

- name: Get PR diff
id: get-diff
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token }}
MAX_DIFF_LINES: ${{ inputs.max-diff-lines }}
run: |
PR_NUMBER="${{ github.event.pull_request.number }}"
if [ -z "$PR_NUMBER" ] || [ "$PR_NUMBER" = "" ]; then
echo "::error::This action must run on a pull_request event"
exit 1
fi

# Use -- to prevent argument injection
if ! gh pr diff -- "$PR_NUMBER" > /tmp/pr-diff-raw.txt 2>/tmp/pr-diff-err.txt; then
echo "::error::Failed to fetch diff for PR #${PR_NUMBER}: $(cat /tmp/pr-diff-err.txt)"
exit 1
fi

TOTAL_LINES=$(wc -l < /tmp/pr-diff-raw.txt | tr -d ' ')
echo "diff-lines=${TOTAL_LINES}" >> "$GITHUB_OUTPUT"

if [ "$TOTAL_LINES" -eq 0 ]; then
echo "::warning::PR #${PR_NUMBER} has an empty diff, skipping review"
echo "truncated=false" >> "$GITHUB_OUTPUT"
echo "empty=true" >> "$GITHUB_OUTPUT"
exit 0
fi

# Truncate if needed
TRUNCATED="false"
if [ "$MAX_DIFF_LINES" -gt 0 ] && [ "$TOTAL_LINES" -gt "$MAX_DIFF_LINES" ]; then
head -n "$MAX_DIFF_LINES" /tmp/pr-diff-raw.txt > /tmp/pr-diff.txt
TRUNCATED="true"
echo "::notice::Diff truncated from ${TOTAL_LINES} to ${MAX_DIFF_LINES} lines"
else
cp /tmp/pr-diff-raw.txt /tmp/pr-diff.txt
fi

# Hard cap at 50K characters to avoid token limits
CHAR_COUNT=$(wc -c < /tmp/pr-diff.txt | tr -d ' ')
if [ "$CHAR_COUNT" -gt 50000 ]; then
head -c 50000 /tmp/pr-diff.txt > /tmp/pr-diff-capped.txt
mv /tmp/pr-diff-capped.txt /tmp/pr-diff.txt
TRUNCATED="true"
echo "::notice::Diff truncated to 50K characters (was ${CHAR_COUNT} chars)"
fi

echo "truncated=${TRUNCATED}" >> "$GITHUB_OUTPUT"
echo "empty=false" >> "$GITHUB_OUTPUT"
FINAL_LINES=$(wc -l < /tmp/pr-diff.txt | tr -d ' ')
echo "PR #${PR_NUMBER} diff: ${TOTAL_LINES} total lines, ${FINAL_LINES} included (truncated=${TRUNCATED})"

- name: Run Mayros review
id: run-review
if: steps.get-diff.outputs.empty != 'true'
shell: bash
env:
ANTHROPIC_API_KEY: ${{ inputs.anthropic-api-key }}
INPUT_PROMPT: ${{ inputs.prompt }}
INPUT_MODEL: ${{ inputs.model }}
run: |
# Build prompt from file to avoid shell quoting issues
{
echo "${INPUT_PROMPT}"
echo ""
echo "Here is the PR diff to review:"
echo ""
echo '```diff'
cat /tmp/pr-diff.txt
echo '```'
} > /tmp/review-prompt.txt

if [ "${{ steps.get-diff.outputs.truncated }}" = "true" ]; then
echo "" >> /tmp/review-prompt.txt
echo "NOTE: This diff was truncated. Focus your review on the code shown above." >> /tmp/review-prompt.txt
fi

PROMPT_CONTENT=$(cat /tmp/review-prompt.txt)

# Run review with proper argument separation
set +e
REVIEW=$(npx mayros -p "$PROMPT_CONTENT" --model "$INPUT_MODEL" 2>/tmp/mayros-stderr.txt)
EXIT_CODE=$?
set -e

if [ $EXIT_CODE -ne 0 ]; then
STDERR_MSG=$(cat /tmp/mayros-stderr.txt 2>/dev/null || echo "unknown error")
echo "::error::Mayros review failed (exit ${EXIT_CODE}): ${STDERR_MSG}"
echo "review-length=0" >> "$GITHUB_OUTPUT"
echo "failed=true" >> "$GITHUB_OUTPUT"
exit 1
fi

if [ -z "$REVIEW" ]; then
echo "::error::Mayros returned an empty review"
echo "review-length=0" >> "$GITHUB_OUTPUT"
echo "failed=true" >> "$GITHUB_OUTPUT"
exit 1
fi

echo "$REVIEW" > /tmp/review-output.txt
REVIEW_LEN=${#REVIEW}
echo "review-length=${REVIEW_LEN}" >> "$GITHUB_OUTPUT"
echo "failed=false" >> "$GITHUB_OUTPUT"
echo "Review generated (${REVIEW_LEN} characters)"

- name: Post review comment
id: post-review
if: steps.run-review.outputs.failed != 'true' && steps.get-diff.outputs.empty != 'true'
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token }}
run: |
PR_NUMBER="${{ github.event.pull_request.number }}"
REVIEW=$(cat /tmp/review-output.txt)

# Build comment body via file to avoid HEREDOC quoting issues
{
echo "## Mayros Code Review"
echo ""
echo "$REVIEW"
echo ""
echo "---"
echo "*Automated review by [Mayros](https://mayros.apilium.com)*"
} > /tmp/comment-body.txt

# Post comment using -- to prevent argument injection
if gh pr comment -- "$PR_NUMBER" --body-file /tmp/comment-body.txt; then
echo "posted=true" >> "$GITHUB_OUTPUT"
echo "Review posted to PR #${PR_NUMBER}"
else
echo "::error::Failed to post review comment to PR #${PR_NUMBER}"
echo "posted=false" >> "$GITHUB_OUTPUT"
exit 1
fi
33 changes: 33 additions & 0 deletions .github/workflows/mayros-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Mayros PR Review

on:
pull_request:
types: [opened, synchronize]
paths-ignore:
- "docs/**"
- "*.md"
- "LICENSE"
- ".gitignore"

permissions:
contents: read
pull-requests: write

concurrency:
group: mayros-review-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
review:
runs-on: ubuntu-latest
if: github.event.pull_request.draft == false
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: ./.github/actions/mayros-review
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ CLAUDE.md
.claude/RULES.md

docs/evolution/
docs/experiments/
docs/refactor/
secret/

# JetBrains plugin build artifacts
tools/jetbrains-plugin/.gradle/
Expand Down
Loading
Loading