Releases: aiperceivable/apexe
Releases · aiperceivable/apexe
Release 0.2.0
Added
- 6 new
apexe serveflags —--tags,--prefix,--acl,--enable-approval,--no-logging,--skip-validationfor full McpServerBuilder control from CLI. - Expanded help fallback — Scanner tries
--help alland-hwhen--helpyields few flags. Fixes curl (0 → 12 flags on macOS). - GNU regex relaxation — Flag regex now matches 1-space indent (
\s{1,}) for curl-style help format. apexe --man— Generates complete roff man page viaapcore_cli::build_program_man_page(), including commands, flags, exit codes, and docs URL.- Documentation URL —
set_docs_url()setshttps://github.com/aiperceivable/apexein help/man output. - Explorer
allow_execute—serve_with_options()enables tool execution from Explorer UI. - Env var test stability — Global
ENV_LOCKMutex prevents parallel test race conditions on environment variables.
Changed
- Dependencies switched to crates.io —
apcore = "0.14",apcore-cli = "0.4",apcore-mcp = "0.11",apcore-toolkit = "0.4". Zero path dependencies. - ACL opt-in only —
--acl <path>required to enable access control. Without it, all tools are allowed (fixes ExplorerAclDeniedissue). require_authremoved — Was silently ineffective without JWT authenticator. Removed to prevent false security assumptions.- Config override validation — CLI
scan_depth(1-5) andtimeout(>0) overrides now range-checked with warning on rejection.
Fixed
- Explorer UI empty response — Fixed by using
serve_with_options()withExplorerOptions { explorer: true, allow_execute: true }instead ofserve(). - clippy
result_large_err— Suppressed onexecute_subprocess(Rust 1.94 stricter closure checking). - Flaky env var tests — Eliminated race condition with
ENV_LOCKmutex.
Release 0.1.0
First release with full apcore ecosystem integration.
Added
Scanning Engine
- Three-tier deterministic CLI scanner:
--helpparsing (GNU, Click, Cobra, Clap), man page enrichment (DESCRIPTION + OPTIONS sections), shell completion subcommand discovery ParserPipelinewith automatic format detection and priority routingSubcommandDiscoverywith recursive scanning up to depth 5ScanCachewith JSON filesystem caching and version-based invalidationToolResolverwith binary path resolution and version detection- Plugin system via
CliParsertrait for custom parser registration - Tier 3 completion-discovered subcommands merged back into scan results
Adapter Layer (ScannedCLITool → ScannedModule)
CliToolConverter: recursive subcommand tree flattening, dot-separated module IDs (cli.git.commit)- JSON Schema generation with full type mapping: String, Integer, Float, Boolean, Path (
format: path), URL (format: uri), Enum (enum: [...]) - Repeatable flags → array schemas, required flags →
requiredarray, default value coercion - Behavioral annotation inference from command names (readonly/destructive patterns) and flag boosting (
--force→ requires_approval,--dry-run→ idempotent) DisplayResolverintegration: auto-generated MCP aliases (cli.git.commit→git_commit), per-surface display metadata
Module Executor
CliModule: implements apcoreModuletrait for CLI subprocess execution- Async execution via
tokio::task::spawn_blockingwithtokio::time::timeout - Shell injection prevention: 15-character blacklist validated at construction time and runtime
- Context integration:
trace_id,identity,duration_mspropagated through execution ai_guidanceon non-zero exit codes with stderr context for AI self-correction
MCP Server
McpServerBuilder: fluent API for module loading → Registry → Executor → APCoreMCP- Transports: stdio (Claude Desktop/Cursor), streamable-http, SSE
LoggingMiddlewareenabled by default (structured logging with redaction)ElicitationApprovalHandlerfor interactive destructive command approval (opt-in)- Tags and prefix filtering for tool access control
- Explorer UI support (HTTP transports)
export_openai_tools(): OpenAI function calling format export- Config snippet generation for Claude Desktop and Cursor
Governance
AclManager: wrapsapcore::ACL, auto-generates default-deny rules from annotationsAuditManager: wrapsapcore_cli::AuditLogger, JSONL append-only with SHA-256 input hashingSandboxManager: wrapsapcore_cli::Sandbox, subprocess isolation with timeout enforcement
Output
YamlOutput: wrapsapcore_toolkit::YAMLWriterwith optional verificationload_modules_from_dir(): reads.binding.yamlfiles asVec<ScannedModule>
Configuration
- 4-tier config resolution: CLI flags > env vars > config file > defaults
- 5 environment variables:
APEXE_MODULES_DIR,APEXE_CACHE_DIR,APEXE_LOG_LEVEL,APEXE_TIMEOUT,APEXE_SCAN_DEPTH - Optional
apcore::Configintegration via~/.apexe/apcore.yaml - Range validation on all numeric config overrides
Error Handling
From<ApexeError> for ModuleError: all 9 error variants mapped withai_guidanceinto_module_error_with_trace()for trace_id attachment- Rich error display in CLI with suggestion text
CLI
apexe scan <TOOLS>...— scan with --depth, --no-cache, --format, --output-dirapexe serve— --transport, --host, --port, --explorer, --name, --show-configapexe list— --format, --modules-dirapexe config— --show, --init
Documentation
- Quick Start guide (
docs/quickstart.md) - Full User Manual with 15 chapters (
docs/user-manual.md) - Technical Design document (
docs/apcore-integration/tech-design.md) - 7 feature specifications (
docs/features/v2-f1..f7) - Feature Manifest with module map (
docs/FEATURE_MANIFEST.md)
Examples
examples/basic/— Shell script walkthrough: scan → list → serveexamples/programmatic.rs— Rust library API: scan → convert → export → build server
Dependencies
| Crate | Version | Role |
|---|---|---|
| apcore | 0.14 | Core types: Module, Registry, ACL, ModuleError, Config |
| apcore-toolkit | 0.4 | ScannedModule, YAMLWriter, DisplayResolver, Verifier |
| apcore-mcp | 0.11 | MCP server: APCoreMCP, transports, auth, Explorer |
| apcore-cli | 0.3 | AuditLogger, Sandbox |
Stats
- 39 source files, ~8,850 lines of Rust
- 338 tests, 0 failures
- All quality gates pass:
cargo fmt,cargo clippy -D warnings,cargo test --all-features