- W12.1 context_plugin (engineer-zhou): wrap C ABI surface in try/catch,
add OOM-safe strdup_message_fields helper, make g_max_tokens drive
message-count trim (option A).
- W12.2 config refactor (architect-lin): introduce
plugins/config/include/toml_parse.h to eliminate 74-line parser
duplication; config_plugin delegates to host->config_get/set,
collapsing the dual-store data island; ConfigStore::get() now copies
via thread_local std::string to remove c_str() dangling under
concurrent set(). Zero ABI changes.
- W12.3 CLI command parsing (engineer-zhao): guard /clear and /context
on missing session service; refactor /file dispatch so bare
/file write hits usage instead of unknown-command.
- W12.4 build path unification (devops-hu): set per-target
RUNTIME_OUTPUT_DIRECTORY on dstalk-cli; remove stale
build/dstalk-cli/dstalk-cli.exe so build/bin/ is the sole binary.
- W12.5 STATUS.md auto-refresh (engineer-li): run W11.6 script to
regenerate STATUS from live profile/group data.
- W12.6 plugin-abi.md (writer-deng): add §8 exception safety across
ABI boundary and §9 string return lifetime; reference real
audit-found violations as anti-examples.
Verified: cmake build 0 error 0 warning, ctest 4/4 pass.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Architecture overhaul (Wave 1-4 collaborative work):
- Migrated dstalk-core from monolithic api.cpp to plugin-based design with
host/service_registry/event_bus/plugin_loader and topological initialization.
- Split public headers into dstalk_host.h / dstalk_services.h /
dstalk_lsp.h / dstalk_types.h; deleted obsolete dstalk_api.h and inlined
TLS/file/net code now provided by plugins.
- Added 9 plugins: deepseek, anthropic, network, session, context, tools,
config, file-io, lsp; AI plugins register as "ai.<provider>" services.
B3 CLI interaction enhancement:
- Prompt now shows current model name (A1).
- /status command prints model/base_url/api_key (sanitized: shown only
as set/unset)/services readiness (A2).
- SIGINT/Ctrl+C handled on POSIX (signal) and Windows (SetConsoleCtrlHandler);
/quit no longer std::exit(0) but sets a quit flag so dstalk_shutdown runs
exactly once via natural control flow (B1+B2).
- Cross-DLL free fixed: print_file uses dstalk_free instead of std::free (B4).
- --batch mode plus isatty auto-detection for piped stdin (C1).
- fgets truncation detection with friendly error and stdin draining (C3).
- Distinct exit codes (init/AI/service-unavailable) (C4).
- /model rejects empty model name (C5).
C2 smoke test extension:
- 4 new test blocks: null-safety (file_io/session/tools/config),
escape-boundary round-trip, tools->execute call chain, session robustness
(add(nullptr), clear -> token_count == 0).
C3 CI build scripts:
- scripts/ci-build.sh and scripts/ci-build.bat invoke cmake configure +
parallel build + ctest, suitable for GitHub Actions.
Build verified: dstalk-cli compiles, smoke test passes via ctest.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Simplifies the active Windows build path around Boost.Beast/OpenSSL, fixes VS2017/clang-cl compatibility, and removes unused BearSSL/WinHTTP remnants so the project builds and tests cleanly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Align documented commands with the CLI, enable optional GUI/test targets, and remove committed API secrets so the project is safer to build and run.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Repair streaming callback/error handling and make file/session handling safer so the core API behaves correctly under real usage.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>