Skip to content

Commit d4429ef

Browse files
tercelclaude
andcommitted
docs: update CHANGELOG.md with complete 0.2.0 release notes
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1 parent 22001fa commit d4429ef

File tree

1 file changed

+60
-8
lines changed

1 file changed

+60
-8
lines changed

CHANGELOG.md

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,65 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
55

66
## [Unreleased]
77

8-
## [0.2.0] - 2026-03-17
8+
## [0.2.0] - 2026-03-18
99

1010
### Added
11-
- Initial project scaffold ported from apcore-cli-python 0.2.0
12-
- `src/` module stubs: cli, config, discovery, output, approval, ref_resolver,
13-
schema_parser, shell, _sandbox_runner, security/{audit,auth,config_encryptor,sandbox}
14-
- Integration test stubs in `tests/` (TDD red phase)
15-
- Example extension modules: math/{add,multiply}, text/{upper,reverse,wordcount},
16-
sysutil/{info,disk,env}
17-
- `examples/run_examples.sh` demo script
11+
12+
**Core Features (ported from apcore-cli-python 0.2.0)**
13+
14+
- **ConfigResolver** — 4-tier configuration precedence (CLI flag > env var > YAML file > defaults)
15+
- **Core Dispatcher**`validate_module_id`, `collect_input` (STDIN + CLI merge, 10MiB limit), `LazyModuleGroup` (lazy command cache), `build_module_command` (schema-to-clap), `dispatch_module` (full execution pipeline with SIGINT handling)
16+
- **Schema Parser**`schema_to_clap_args` converting JSON Schema to clap `Arg` instances, boolean flag pairs (`--flag`/`--no-flag`), enum choices with `PossibleValuesParser`, `reconvert_enum_values` for type coercion, `extract_help` with 200-char truncation
17+
- **Ref Resolver**`resolve_refs` with `$ref` inlining, `allOf` merge, `anyOf`/`oneOf` intersection, depth limit (32), circular detection
18+
- **Output Formatter** — TTY-adaptive rendering (`comfy-table` for terminals, JSON for pipes), `format_module_list`, `format_module_detail`, `format_exec_result`, `resolve_format`, `truncate`
19+
- **Discovery**`list` command with AND tag filtering, `describe` command with exit-44 on not found, `RegistryProvider` trait, `ApCoreRegistryProvider` adapter
20+
- **Approval Gate** — TTY-aware HITL prompts, `--yes` and `APCORE_CLI_AUTO_APPROVE=1` bypass, 60s `tokio::select!` timeout, `NonInteractive` error for non-TTY, all variants exit 46
21+
- **Shell Integration**`completion` command (bash/zsh/fish/elvish/powershell via `clap_complete`), `man` command (roff format with EXIT CODES and ENVIRONMENT sections)
22+
- **Security**`AuthProvider` (env/config/keyring with Bearer header), `ConfigEncryptor` (AES-256-GCM + PBKDF2, keyring fallback), `AuditLogger` (JSONL append, salted SHA-256 input hash), `Sandbox` (tokio subprocess, env whitelist, 300s timeout)
23+
24+
**Dispatch & Execution**
25+
26+
- `exec` subcommand — first-class clap subcommand for module execution
27+
- External subcommand routing — `apcore-cli math.add --a 5` routes through `dispatch_module`
28+
- Schema-derived flags — external subcommands look up module descriptor to build `--a`, `--b` etc. from `input_schema`
29+
- `FsDiscoverer` — recursively scans extensions directory for `module.json` descriptors
30+
- Script-based execution — modules with `run.sh` next to `module.json` execute as subprocesses (JSON stdin/stdout protocol)
31+
- Path-traversal validation — executable paths canonicalized and verified to stay within extensions root
32+
33+
**Examples**
34+
35+
- 8 example modules: `math.add`, `math.multiply`, `text.upper`, `text.reverse`, `text.wordcount`, `sysutil.info`, `sysutil.env`, `sysutil.disk`
36+
- Each module has `module.json` (descriptor) + `run.sh` (execution script)
37+
- `examples/run_examples.sh` — runs all 15 demo scenarios
38+
- `examples/README.md` — module authoring guide
39+
40+
**Developer Experience**
41+
42+
- `Makefile` with `setup`, `build`, `check` (fmt + clippy + tests), `clean` targets
43+
- `.bin/` local binary directory to avoid PATH conflict with Python `apcore-cli`
44+
- Pre-commit hook (fmt, clippy, check-chars)
45+
- 458 tests across 17 test files, 0 failures
46+
- `cargo clippy --all-targets --all-features -- -D warnings` clean
47+
48+
**Infrastructure**
49+
50+
- 10 exit codes matching the apcore protocol (0, 1, 2, 44, 45, 46, 47, 48, 77, 130)
51+
- `add_dispatch_flags()` shared helper for exec and external subcommand flags
52+
- `test-support` cargo feature for gating test utilities (`MockRegistry`, `mock_module`)
53+
- Unified `RegistryProvider` trait (consolidated from separate `ModuleRegistry` + `RegistryProvider`)
54+
55+
### Dependencies
56+
57+
- `apcore` 0.13.0
58+
- `clap` 4 (derive + env + string)
59+
- `tokio` 1 (rt-multi-thread, macros, time, process, io-util, io-std, signal)
60+
- `serde` + `serde_json` + `serde_yaml` 0.9
61+
- `comfy-table` 6
62+
- `aes-gcm` 0.10 + `sha2` 0.10 + `pbkdf2` 0.12
63+
- `keyring` 2
64+
- `clap_complete` 4
65+
- `thiserror` 1 + `anyhow` 1
66+
- `tracing` 0.1 + `tracing-subscriber` 0.3
67+
- `reqwest` 0.12
68+
- `async-trait` 0.1
69+
- `base64` 0.22, `gethostname` 0.4, `chrono` 0.4, `dirs` 5, `tempfile` 3

0 commit comments

Comments
 (0)