claude-dev-env 1.30.1 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/agents/clean-coder.md +275 -111
  2. package/agents/code-quality-agent.md +196 -209
  3. package/bin/install.mjs +81 -0
  4. package/bin/install.test.mjs +158 -0
  5. package/bin/install_mypy_ini.mjs +51 -0
  6. package/bin/install_mypy_ini.test.mjs +121 -0
  7. package/commands/hook-log-extract.md +70 -0
  8. package/commands/hook-log-init.md +76 -0
  9. package/hooks/blocking/code_rules_enforcer.py +5 -3
  10. package/hooks/blocking/destructive_command_blocker.py +187 -0
  11. package/hooks/blocking/question_to_user_enforcer.py +140 -0
  12. package/hooks/blocking/test_code_rules_enforcer_file_global_constants.py +39 -0
  13. package/hooks/blocking/test_destructive_command_blocker.py +397 -0
  14. package/hooks/blocking/test_question_to_user_enforcer.py +163 -0
  15. package/hooks/blocking/test_windows_rmtree_blocker.py +148 -0
  16. package/hooks/blocking/windows_rmtree_blocker.py +106 -0
  17. package/hooks/config/hook_log_extractor_constants.py +234 -0
  18. package/hooks/config/messages.py +3 -0
  19. package/hooks/config/session_env_cleanup_constants.py +18 -0
  20. package/hooks/config/test_hook_log_extractor_constants.py +123 -0
  21. package/hooks/config/test_messages.py +5 -0
  22. package/hooks/config/test_session_env_cleanup_constants.py +55 -0
  23. package/hooks/diagnostic/hook_log_extractor.py +907 -0
  24. package/hooks/diagnostic/hook_log_init.py +202 -0
  25. package/hooks/diagnostic/hook_log_stop_wrapper.py +172 -0
  26. package/hooks/diagnostic/migrations/2026-04-25-drop-themes-hook-events.sql +3 -0
  27. package/hooks/diagnostic/migrations/README.md +77 -0
  28. package/hooks/diagnostic/queries/block_details_for_hook.sql +26 -0
  29. package/hooks/diagnostic/queries/blocks_by_category.sql +10 -0
  30. package/hooks/diagnostic/queries/blocks_by_tool.sql +9 -0
  31. package/hooks/diagnostic/queries/blocks_last_7_days.sql +11 -0
  32. package/hooks/diagnostic/queries/top_blockers_last_24_hours.sql +12 -0
  33. package/hooks/diagnostic/queries/top_blockers_overall.sql +12 -0
  34. package/hooks/diagnostic/requirements-hook-logs-dev.txt +2 -0
  35. package/hooks/diagnostic/requirements-hook-logs.txt +1 -0
  36. package/hooks/diagnostic/schema.sql +51 -0
  37. package/hooks/diagnostic/test_hook_log_extractor.py +1531 -0
  38. package/hooks/diagnostic/test_hook_log_init.py +227 -0
  39. package/hooks/diagnostic/test_hook_log_stop_wrapper.py +345 -0
  40. package/hooks/hooks.json +25 -0
  41. package/hooks/session/session_env_cleanup.py +129 -0
  42. package/hooks/session/test_session_env_cleanup.py +278 -0
  43. package/package.json +1 -1
  44. package/rules/ask-user-question-required.md +44 -0
  45. package/rules/windows-filesystem-safe.md +93 -0
  46. package/scripts/config/test_spec_implementer_prompt.py +0 -4
  47. package/scripts/test_groq_bugteam_spec.py +0 -8
  48. package/skills/bugteam/SKILL.md +15 -1
  49. package/skills/bugteam/SKILL_EVALS.md +1 -1
  50. package/skills/bugteam/reference/teardown-publish-permissions.md +1 -1
  51. package/skills/bugteam/scripts/README.md +17 -0
  52. package/skills/bugteam/scripts/bugteam_fix_hookspath.py +238 -0
  53. package/skills/bugteam/scripts/test_bugteam_fix_hookspath.py +267 -0
  54. package/skills/logifix/SKILL.md +69 -0
  55. package/skills/logifix/scripts/logifix.ps1 +205 -0
  56. package/skills/rebase/SKILL.md +157 -0
@@ -0,0 +1,55 @@
1
+ """Tests for session_env_cleanup_constants — behavioral checks on SESSION_ID_PATTERN."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ from pathlib import Path
7
+
8
+ _CONFIG_DIRECTORY = Path(__file__).resolve().parent
9
+ _HOOKS_ROOT = _CONFIG_DIRECTORY.parent
10
+ for each_sys_path_entry in (str(_CONFIG_DIRECTORY), str(_HOOKS_ROOT)):
11
+ if each_sys_path_entry not in sys.path:
12
+ sys.path.insert(0, each_sys_path_entry)
13
+
14
+ from config.session_env_cleanup_constants import SESSION_ID_PATTERN
15
+
16
+
17
+ class TestSessionIdPatternAccepts:
18
+ def test_accepts_uuid_with_hyphens(self) -> None:
19
+ valid_uuid_input = "5fcc01b3-138b-49e1-9976-ff1035013a4f"
20
+ matched = SESSION_ID_PATTERN.fullmatch(valid_uuid_input)
21
+ assert matched.group(0) == valid_uuid_input
22
+
23
+ def test_accepts_alphanumeric_only(self) -> None:
24
+ alphanumeric_input = "abc123XYZ"
25
+ matched = SESSION_ID_PATTERN.fullmatch(alphanumeric_input)
26
+ assert matched.group(0) == alphanumeric_input
27
+
28
+ def test_accepts_underscore_separated(self) -> None:
29
+ underscore_input = "session_42_alpha"
30
+ matched = SESSION_ID_PATTERN.fullmatch(underscore_input)
31
+ assert matched.group(0) == underscore_input
32
+
33
+
34
+ class TestSessionIdPatternRejects:
35
+ def test_rejects_forward_slash(self) -> None:
36
+ assert SESSION_ID_PATTERN.match("etc/passwd") is None
37
+
38
+ def test_rejects_back_slash(self) -> None:
39
+ assert SESSION_ID_PATTERN.match("Users\\jon") is None
40
+
41
+ def test_rejects_parent_traversal(self) -> None:
42
+ assert SESSION_ID_PATTERN.match("..") is None
43
+
44
+ def test_rejects_absolute_windows_path(self) -> None:
45
+ assert SESSION_ID_PATTERN.match("C:\\Windows\\Temp") is None
46
+
47
+ def test_rejects_empty_string(self) -> None:
48
+ assert SESSION_ID_PATTERN.match("") is None
49
+
50
+ def test_rejects_overlong_input(self) -> None:
51
+ overlong_input = "a" * 65
52
+ assert SESSION_ID_PATTERN.match(overlong_input) is None
53
+
54
+ def test_rejects_dot_in_middle(self) -> None:
55
+ assert SESSION_ID_PATTERN.match("session.uuid") is None