#!/usr/bin/env python3 """prompt_audit_log — 每次提交 prompt 时生成独立日志文件。 替代原 PowerShell 版本,避免 Windows PowerShell 5.1 解析器 bug。 """ import json import os import sys from datetime import datetime, timezone, timedelta TZ_TAIPEI = timezone(timedelta(hours=8)) def main(): now = datetime.now(TZ_TAIPEI) prompt_id = f"P{now.strftime('%Y%m%d-%H%M%S')}" prompt_raw = os.environ.get("USER_PROMPT", "") # 截断过长的 prompt(避免展开的 #context 占用过多空间) if len(prompt_raw) > 20000: prompt_raw = prompt_raw[:5000] + "\n[TRUNCATED: prompt too long; possible expanded #context]" summary = " ".join(prompt_raw.split()).strip() if len(summary) > 120: summary = summary[:120] + "…" if not summary: summary = "(empty prompt)" # 写独立日志文件 log_dir = os.path.join("docs", "audit", "prompt_logs") os.makedirs(log_dir, exist_ok=True) filename = f"prompt_log_{now.strftime('%Y%m%d_%H%M%S')}.md" target = os.path.join(log_dir, filename) timestamp = now.strftime("%Y-%m-%d %H:%M:%S %z") entry = f"""- [{prompt_id}] {timestamp} - summary: {summary} - prompt: ```text {prompt_raw} ``` """ with open(target, "w", encoding="utf-8") as f: f.write(entry) # 保存 last prompt id 供 /audit 溯源 os.makedirs(os.path.join(".kiro", "state"), exist_ok=True) last_prompt = {"prompt_id": prompt_id, "at": now.isoformat()} with open(os.path.join(".kiro", "state", ".last_prompt_id.json"), "w", encoding="utf-8") as f: json.dump(last_prompt, f, indent=2, ensure_ascii=False) if __name__ == "__main__": try: main() except Exception: # 不阻塞 prompt 提交 pass