xtap_core_lib/mcp/instructions.rs
1/*
2 * mcp/instructions.rs
3 * Project: core_lib
4 * Description: 编译期 `_ai_instructions` 字符串构造宏
5 *
6 * 设计(抄 sts-x src/types/format.rs:17-21 的 concat!(env!("CARGO_PKG_VERSION"), ...) 模式):
7 * - 全部在编译期用 concat! 拼成 &'static str,零运行时开销
8 * - env!("CARGO_PKG_VERSION") 在“调用方 crate”展开,故版本号是使用该宏的 app 自己的版本
9 * - 目的:让每个 MCP 工具的 JSON 输出都带一段自解释指令,AI 自发现、零学习成本
10 */
11
12/// 构造一段编译期 `_ai_instructions` 文本。
13///
14/// 用法:
15/// ```ignore
16/// // 在使用方 crate(例如 sts-x)里:
17/// const HINT: &str = core_lib::ai_instructions!(
18/// "STS-X",
19/// "unified code+file search. CLI: sts-x search \"q\". MCP: POST /search."
20/// );
21/// // 展开 ≈ "I am STS-X 3.1.2. unified code+file search. ..."
22/// ```
23///
24/// 第一个参数是服务名,其余参数按 `concat!` 依次拼接。版本号取自调用方 crate 的
25/// `CARGO_PKG_VERSION`,因此各 app 无需手写版本。
26#[macro_export]
27macro_rules! ai_instructions {
28 ($service:expr $(, $part:expr)+ $(,)?) => {
29 concat!("I am ", $service, " ", env!("CARGO_PKG_VERSION"), ". " $(, $part)+)
30 };
31 ($service:expr $(,)?) => {
32 concat!("I am ", $service, " ", env!("CARGO_PKG_VERSION"), ".")
33 };
34}