- fail closed on MCP input and compile database policy - add shared scan catalogs, finding queries, and tiered gates
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Generate Fold's C++ embedded skill header from the canonical SKILL.md."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
DELIMITER = "FOLDSKILL"
|
|
|
|
|
|
def render(skill: str) -> str:
|
|
terminator = f'){DELIMITER}"'
|
|
if terminator in skill:
|
|
raise ValueError(
|
|
f"skill contains reserved raw-string terminator {terminator!r}"
|
|
)
|
|
return (
|
|
"#pragma once\n\n"
|
|
"namespace fold::cli {\n\n"
|
|
f'inline constexpr const char* kEmbeddedFoldSkill = R"{DELIMITER}('
|
|
f"{skill}"
|
|
f'){DELIMITER}";\n\n'
|
|
"} // namespace fold::cli\n"
|
|
)
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--input", type=Path, required=True)
|
|
parser.add_argument("--output", type=Path, required=True)
|
|
parser.add_argument("--check", action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
generated = render(args.input.read_text(encoding="utf-8"))
|
|
if args.check:
|
|
if (
|
|
not args.output.exists()
|
|
or args.output.read_text(encoding="utf-8") != generated
|
|
):
|
|
print(f"generated embedded skill is stale: {args.output}")
|
|
return 1
|
|
return 0
|
|
|
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
|
args.output.write_text(generated, encoding="utf-8")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|