From 114b9130cd508e1a4c2b2024bff5694cf6a3b658 Mon Sep 17 00:00:00 2001 From: sck_0 Date: Sun, 15 Mar 2026 08:42:49 +0100 Subject: [PATCH] fix: improve robustness for local tooling --- skills/alpha-vantage/SKILL.md | 1 - .../suggest-compact.sh | 6 +- .../scripts/__pycache__/core.cpython-314.pyc | Bin 12630 -> 0 bytes .../__pycache__/design_system.cpython-314.pyc | Bin 31280 -> 0 bytes skills/videodb/scripts/ws_listener.py | 5 +- tools/scripts/tests/local_temp_safety.test.js | 19 +++++ .../tests/repo_hygiene_security.test.js | 22 ++++++ .../test_frontmatter_parsing_security.py | 65 ++++++++++++++++++ tools/scripts/validate_skills.py | 8 ++- 9 files changed, 121 insertions(+), 5 deletions(-) delete mode 100644 skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc delete mode 100644 skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc create mode 100644 tools/scripts/tests/local_temp_safety.test.js create mode 100644 tools/scripts/tests/repo_hygiene_security.test.js create mode 100644 tools/scripts/tests/test_frontmatter_parsing_security.py diff --git a/skills/alpha-vantage/SKILL.md b/skills/alpha-vantage/SKILL.md index ed733938..cdd3702d 100644 --- a/skills/alpha-vantage/SKILL.md +++ b/skills/alpha-vantage/SKILL.md @@ -3,7 +3,6 @@ name: alpha-vantage description: Access real-time and historical stock market data, forex rates, cryptocurrency prices, commodities, economic indicators, and 50+ technical indicators via the Alpha Vantage API. Use when fetching stock prices (OHLCV), company fundamentals (income statement, balance sheet, cash... risk: unknown source: community ---- Unknown metadata: skill-author: K-Dense Inc. --- diff --git a/skills/cc-skill-strategic-compact/suggest-compact.sh b/skills/cc-skill-strategic-compact/suggest-compact.sh index ea14920e..d3a7d291 100755 --- a/skills/cc-skill-strategic-compact/suggest-compact.sh +++ b/skills/cc-skill-strategic-compact/suggest-compact.sh @@ -27,8 +27,10 @@ # - Transitioning from research/exploration to implementation # - Plan has been finalized -# Track tool call count (increment in a temp file) -COUNTER_FILE="/tmp/claude-tool-count-$$" +# Track tool call count in a user-owned state directory +COUNTER_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/strategic-compact" +mkdir -p "$COUNTER_DIR" +COUNTER_FILE="$COUNTER_DIR/tool-count" THRESHOLD=${COMPACT_THRESHOLD:-50} # Initialize or increment counter diff --git a/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc b/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc deleted file mode 100644 index 22094ffb0ae35ba545fc272e410855060a13bf08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12630 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 b9(8lucCMcIk_+*UNBg<`NB@pe3?ctN`L^O2 diff --git a/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc b/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc deleted file mode 100644 index 3401d980dd47848b19b70fe17dd84062cea0753f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31280 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