Skip to content

feat: 4 agentic polish — permissions, search, compaction, JSON mode#41

Merged
kienbui1995 merged 1 commit intomainfrom
feat/agentic-polish
Apr 12, 2026
Merged

feat: 4 agentic polish — permissions, search, compaction, JSON mode#41
kienbui1995 merged 1 commit intomainfrom
feat/agentic-polish

Conversation

@kienbui1995
Copy link
Copy Markdown
Owner

@kienbui1995 kienbui1995 commented Apr 12, 2026

Final 4 agentic gaps closed:

  1. Auto-permission learning — approved tools remembered in session
  2. Conversation searchSession.search() with snippets
  3. Smart compaction — importance scoring keeps errors/writes/instructions
  4. Structured outputResponseFormat::Json / JsonSchema for OpenAI

192 tests pass. Zero critical gaps remaining.

Summary by CodeRabbit

Release Notes

  • New Features

    • Added search functionality to query session messages
    • Added response format specification support (JSON and JSON Schema)
    • Added permission learning to remember and auto-allow previously authorized tool actions
  • Improvements

    • Enhanced message compaction logic to intelligently preserve high-importance messages
  • Tests

    • Updated integration tests to reflect improved message compaction behavior

…, structured output

1. Auto-permission learning:
   - PermissionPolicy remembers approved tool+pattern combos
   - Subsequent calls with same pattern auto-allowed (session-scoped)
   - Works for both Auto and Prompt modes

2. Conversation search:
   - Session.search(query) returns matching messages with snippets
   - Case-insensitive, shows context around matches

3. Smart compaction with importance scoring:
   - Scores messages: errors (3.0), user instructions (2.0), writes (1.5)
   - Keeps up to 5 high-importance messages during compaction
   - Rest summarized as before

4. Structured output / JSON mode:
   - ResponseFormat enum: Json, JsonSchema
   - Wired in GenericProvider (OpenAI-compatible)
   - response_format field on CompletionRequest

192 tests pass.
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 12, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0459cb33-bca9-45bc-a707-5223533bbb36

📥 Commits

Reviewing files that changed from the base of the PR and between 7357b0f and 7d8f4ee.

📒 Files selected for processing (11)
  • mc/crates/mc-cli/src/main.rs
  • mc/crates/mc-core/src/compact.rs
  • mc/crates/mc-core/src/runtime.rs
  • mc/crates/mc-core/src/session.rs
  • mc/crates/mc-core/src/subagent.rs
  • mc/crates/mc-core/tests/integration.rs
  • mc/crates/mc-provider/src/gemini.rs
  • mc/crates/mc-provider/src/generic.rs
  • mc/crates/mc-provider/src/lib.rs
  • mc/crates/mc-provider/src/types.rs
  • mc/crates/mc-tools/src/permissions.rs

📝 Walkthrough

Walkthrough

The PR extends the completion request API with optional response format specifications, implements importance-scored message compaction in sessions, adds session message search functionality, and introduces permission learning through a shared allowlist mechanism across multiple crate modules.

Changes

Cohort / File(s) Summary
Response Format Support
mc/crates/mc-provider/src/types.rs, mc/crates/mc-provider/src/lib.rs
Added new ResponseFormat enum with Json and JsonSchema variants; introduced response_format: Option<ResponseFormat> field to CompletionRequest struct and exported ResponseFormat in public API.
Request Building & Provider Integration
mc/crates/mc-provider/src/generic.rs, mc/crates/mc-provider/src/gemini.rs
Updated request-body construction to conditionally inject OpenAI-compatible response format JSON; added test fixtures with response_format: None.
Completion Request Initialization
mc/crates/mc-cli/src/main.rs, mc/crates/mc-core/src/runtime.rs, mc/crates/mc-core/src/subagent.rs, mc/crates/mc-core/src/compact.rs
Explicitly set response_format: None in four locations where CompletionRequest is constructed.
Message Compaction Importance Scoring
mc/crates/mc-core/src/compact.rs
Refactored compact_session to score messages based on content length, error ToolResults, and specific ToolUse names; retains up to 5 high-importance messages (score > 1.0) separately before summarizing low-importance ones.
Session Search Functionality
mc/crates/mc-core/src/session.rs
Added public search() method performing case-insensitive text matching within Block::Text, returning message index, role description, and surrounding snippet (±50 characters).
Permission Learning System
mc/crates/mc-tools/src/permissions.rs
Extended PermissionPolicy with learned_allows tracking set; added learn_allow() and is_learned() public methods; updated authorize control flow to check learned state before classification/prompting and record learned keys on allow outcomes.
Integration Test Update
mc/crates/mc-core/tests/integration.rs
Modified compaction test assertion from requiring exactly 5 post-compaction messages to allowing a range of 5–10 to accommodate additional retained high-importance messages.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Possibly related PRs

Poem

🐰 A rabbit hops through sessions bright,
With importance scores in steady flight,
Response formats polished clean,
Permissions learned, not unforeseen,
Searching messages with glee so keen!

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/agentic-polish

Comment @coderabbitai help to get the list of available commands and usage tips.

@kienbui1995 kienbui1995 merged commit 839fba2 into main Apr 12, 2026
4 of 5 checks passed
@kienbui1995 kienbui1995 deleted the feat/agentic-polish branch April 12, 2026 15:47
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