changelog记录在debug mode中不触发

This commit is contained in:
2026-04-13 23:43:57 +08:00
parent d3d41b20d7
commit 97bbb3f306
3 changed files with 35 additions and 22 deletions

View File

@@ -1,46 +1,64 @@
# Changelog sync guard: compare source file mtime vs changelog mtime.
# If source files are newer than changelog, inject a followup_message
# reminding the agent to write changelog entries.
# Changelog sync guard — 统一 stop hook合并了原 prompt hook 和 command hook
#
# 用确定性逻辑检查:
# 1. 源文件是否比 changelog 更新mtime 比较)
# 2. stdin 中的 agent 上下文是否显示有源文件编辑操作
#
# 静默条件(不触发提醒):
# 1. 环境变量 CURSOR_SKIP_CHANGELOG 被设置(sessionStart hook 在非 agent 模式设置)
# 2. Debug 模式 — 项目根目录存在 debug-*.log 文件,说明正在调试
# 1. 环境变量 CURSOR_SKIP_CHANGELOG 被设置sessionStart 在非 agent 模式设置)
# 2. stdin JSON 中 composer_mode 不是 "agent"(如 debug/ask/edit 模式)
# 3. changelog 文件不存在
# 4. .changelog-ack 标记文件存在且足够新(本会话已确认过 changelog 状态)
# 5. 没有源文件比 changelog 更新
$input = [Console]::In.ReadToEnd()
# 检测 sessionStart 设置的跳过标志(覆盖一开始就是 debug/ask 模式的场景)
# === 豁免检查 1环境变量跳过标志 ===
if ($env:CURSOR_SKIP_CHANGELOG) {
Write-Output '{}'
exit 0
}
# === 豁免检查 2从 stdin 解析 composer_mode ===
try {
$data = $input | ConvertFrom-Json
$mode = $data.composer_mode
if ($mode -and $mode -ne "agent") {
Write-Output '{}'
exit 0
}
} catch {
# JSON 解析失败,继续后续检查
}
# === 豁免检查 3从 stdin 文本匹配 debug 上下文关键词 ===
# stop hook 的 $ARGUMENTS 可能包含对话/工具上下文,检测 debug 相关信号
if ($input -match '"mode"\s*:\s*"debug"' -or
$input -match 'debug[\s_-]?mode' -or
$input -match 'Debug Mode') {
Write-Output '{}'
exit 0
}
$changelog = ".cursor\changelog\changelog-headlines.md"
$srcDir = "art-agent"
# === 豁免检查 4changelog 文件不存在 ===
if (-not (Test-Path $changelog)) {
Write-Output '{}'
exit 0
}
# 检测 debug 模式:项目中存在活跃的 debug 日志文件
$debugLogs = Get-ChildItem -Path "." -Filter "debug-*.log" -Recurse -Depth 3 -ErrorAction SilentlyContinue |
Where-Object { $_.FullName -notlike "*node_modules*" -and $_.FullName -notlike "*venv*" }
if ($debugLogs) {
Write-Output '{}'
exit 0
}
$clMtime = (Get-Item $changelog).LastWriteTime
# 检测 ack 标记文件Agent 已确认 changelog 状态(写入或跳过),本会话不再提醒
# === 豁免检查 5ack 标记文件足够新 ===
$ackFile = ".cursor\changelog\.changelog-ack"
if ((Test-Path $ackFile) -and (Get-Item $ackFile).LastWriteTime -ge $clMtime) {
Write-Output '{}'
exit 0
}
# === 核心检查:是否有源文件比 changelog 更新 ===
$extensions = @("*.py", "*.tsx", "*.ts", "*.css")
$excludeDirs = @("node_modules", ".next", "__pycache__", "venv")