From 9e54175449d062a4b3c147b4c6366c47f7642d9a Mon Sep 17 00:00:00 2001 From: tukuaiai Date: Tue, 19 May 2026 13:56:21 +0800 Subject: [PATCH] feat: skills - emit auto-tmux remote metadata --- skills/auto-tmux/SKILL.md | 2 +- skills/auto-tmux/references/automation.md | 2 +- .../auto-tmux/references/iteration-roadmap.md | 5 +-- skills/auto-tmux/references/session-safety.md | 1 + skills/auto-tmux/scripts/README.md | 3 +- skills/auto-tmux/scripts/remote-readonly.sh | 31 ++++++++++++++++++- .../auto-tmux/scripts/validate-auto-tmux.sh | 24 ++++++++++++++ 7 files changed, 62 insertions(+), 6 deletions(-) diff --git a/skills/auto-tmux/SKILL.md b/skills/auto-tmux/SKILL.md index a6dc1b2..40d7d82 100644 --- a/skills/auto-tmux/SKILL.md +++ b/skills/auto-tmux/SKILL.md @@ -291,7 +291,7 @@ skills/auto-tmux/scripts/swarm-dispatch.sh --role worker --target :/g' } +json_escape() { + local value="$1" + value="${value//\\/\\\\}" + value="${value//\"/\\\"}" + value="${value//$'\n'/\\n}" + value="${value//$'\r'/\\r}" + value="${value//$'\t'/\\t}" + printf '%s' "$value" +} + remote_script=' set -e session_filter="$1" @@ -103,18 +117,33 @@ if [[ "$dry_run" == "1" ]]; then fi mkdir -p "$out_dir" +created_at="$(date -Is)" ssh "$host" "bash -s" -- "$session" "$lines" < "$out_dir/remote-tmux.txt" $remote_script EOF +evidence_file="$out_dir/remote-tmux.txt" +evidence_bytes="$(wc -c < "$evidence_file" | tr -d '[:space:]')" +evidence_lines="$(wc -l < "$evidence_file" | tr -d '[:space:]')" +if command -v sha256sum >/dev/null 2>&1; then + evidence_sha256="$(sha256sum "$evidence_file" | awk '{print $1}')" +else + evidence_sha256="" +fi + +cat > "$out_dir/metadata.jsonl" <}")","lines":$lines,"evidence_file":"remote-tmux.txt","evidence_bytes":$evidence_bytes,"evidence_lines":$evidence_lines,"evidence_sha256":"$(json_escape "$evidence_sha256")","read_only":true,"redacted":true} +EOF + cat > "$out_dir/index.md" <}\` - lines: \`$lines\` - evidence: [remote-tmux.txt](./remote-tmux.txt) +- metadata: [metadata.jsonl](./metadata.jsonl) EOF printf 'remote readonly evidence written: %s\n' "$out_dir" diff --git a/skills/auto-tmux/scripts/validate-auto-tmux.sh b/skills/auto-tmux/scripts/validate-auto-tmux.sh index 3763027..6c1a9a2 100755 --- a/skills/auto-tmux/scripts/validate-auto-tmux.sh +++ b/skills/auto-tmux/scripts/validate-auto-tmux.sh @@ -76,6 +76,27 @@ run_gate() { fi } +test_remote_readonly_package() { + local tmp_dir fake_bin out_dir + tmp_dir="$(mktemp -d)" + fake_bin="$tmp_dir/bin" + out_dir="$tmp_dir/out" + mkdir -p "$fake_bin" + cat > "$fake_bin/ssh" <<'EOF' +#!/usr/bin/env bash +cat >/dev/null +printf 'session: ai-hub windows=1 attached=0\n' +printf '===== [ai-hub:0.0] =====\n' +printf 'OPENAI_API_KEY=sk-testsecret000000\n' +EOF + chmod +x "$fake_bin/ssh" + PATH="$fake_bin:$PATH" "$script_dir/remote-readonly.sh" --host example.com --session ai-hub --out "$out_dir" >/dev/null + grep -Fq 'metadata.jsonl' "$out_dir/index.md" + grep -Fq '"read_only":true' "$out_dir/metadata.jsonl" + grep -Fq '' "$out_dir/remote-tmux.txt" + rm -rf "$tmp_dir" +} + scripts=( "$script_dir/auto-tmux.sh" "$script_dir/swarm-state.sh" @@ -121,6 +142,7 @@ run_gate "swarm-assign help" "$script_dir/swarm-assign.sh" --help run_gate "swarm-health help" "$script_dir/swarm-health.sh" --help run_gate "remote-readonly help" "$script_dir/remote-readonly.sh" --help run_gate "remote-readonly dry-run" "$script_dir/remote-readonly.sh" --host example.com --dry-run +run_gate "remote-readonly package with fake ssh" test_remote_readonly_package run_gate "record-summary help" "$script_dir/record-summary.sh" --help run_gate "safety-check help" "$script_dir/safety-check.sh" --help run_gate "safety-check clean text" "$script_dir/safety-check.sh" --text "make test" @@ -157,6 +179,7 @@ require_contains "$skill_dir/references/README.md" "safety-policy.md" require_contains "$skill_dir/references/README.md" "session-safety.md" require_contains "$skill_dir/references/session-safety.md" "remote-readonly.sh" require_contains "$skill_dir/references/session-safety.md" "远程默认只读" +require_contains "$skill_dir/references/session-safety.md" "metadata.jsonl" require_contains "$script_dir/README.md" "validate-auto-tmux.sh" require_contains "$script_dir/README.md" "swarm-dispatch.sh" require_contains "$script_dir/README.md" "swarm-watch.sh" @@ -170,6 +193,7 @@ require_contains "$script_dir/README.md" "swarm-report-pack.sh" require_contains "$script_dir/README.md" "swarm-assign.sh" require_contains "$script_dir/README.md" "swarm-health.sh" require_contains "$script_dir/README.md" "remote-readonly.sh" +require_contains "$script_dir/README.md" "metadata.jsonl" require_contains "$script_dir/README.md" "record-summary.sh" require_contains "$script_dir/README.md" "completion.bash" require_contains "$script_dir/README.md" "safety-check.sh"