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.
- package/agents/clean-coder.md +275 -111
- package/agents/code-quality-agent.md +196 -209
- package/bin/install.mjs +81 -0
- package/bin/install.test.mjs +158 -0
- package/bin/install_mypy_ini.mjs +51 -0
- package/bin/install_mypy_ini.test.mjs +121 -0
- package/commands/hook-log-extract.md +70 -0
- package/commands/hook-log-init.md +76 -0
- package/hooks/blocking/code_rules_enforcer.py +5 -3
- package/hooks/blocking/destructive_command_blocker.py +187 -0
- package/hooks/blocking/question_to_user_enforcer.py +140 -0
- package/hooks/blocking/test_code_rules_enforcer_file_global_constants.py +39 -0
- package/hooks/blocking/test_destructive_command_blocker.py +397 -0
- package/hooks/blocking/test_question_to_user_enforcer.py +163 -0
- package/hooks/blocking/test_windows_rmtree_blocker.py +148 -0
- package/hooks/blocking/windows_rmtree_blocker.py +106 -0
- package/hooks/config/hook_log_extractor_constants.py +234 -0
- package/hooks/config/messages.py +3 -0
- package/hooks/config/session_env_cleanup_constants.py +18 -0
- package/hooks/config/test_hook_log_extractor_constants.py +123 -0
- package/hooks/config/test_messages.py +5 -0
- package/hooks/config/test_session_env_cleanup_constants.py +55 -0
- package/hooks/diagnostic/hook_log_extractor.py +907 -0
- package/hooks/diagnostic/hook_log_init.py +202 -0
- package/hooks/diagnostic/hook_log_stop_wrapper.py +172 -0
- package/hooks/diagnostic/migrations/2026-04-25-drop-themes-hook-events.sql +3 -0
- package/hooks/diagnostic/migrations/README.md +77 -0
- package/hooks/diagnostic/queries/block_details_for_hook.sql +26 -0
- package/hooks/diagnostic/queries/blocks_by_category.sql +10 -0
- package/hooks/diagnostic/queries/blocks_by_tool.sql +9 -0
- package/hooks/diagnostic/queries/blocks_last_7_days.sql +11 -0
- package/hooks/diagnostic/queries/top_blockers_last_24_hours.sql +12 -0
- package/hooks/diagnostic/queries/top_blockers_overall.sql +12 -0
- package/hooks/diagnostic/requirements-hook-logs-dev.txt +2 -0
- package/hooks/diagnostic/requirements-hook-logs.txt +1 -0
- package/hooks/diagnostic/schema.sql +51 -0
- package/hooks/diagnostic/test_hook_log_extractor.py +1531 -0
- package/hooks/diagnostic/test_hook_log_init.py +227 -0
- package/hooks/diagnostic/test_hook_log_stop_wrapper.py +345 -0
- package/hooks/hooks.json +25 -0
- package/hooks/session/session_env_cleanup.py +129 -0
- package/hooks/session/test_session_env_cleanup.py +278 -0
- package/package.json +1 -1
- package/rules/ask-user-question-required.md +44 -0
- package/rules/windows-filesystem-safe.md +93 -0
- package/scripts/config/test_spec_implementer_prompt.py +0 -4
- package/scripts/test_groq_bugteam_spec.py +0 -8
- package/skills/bugteam/SKILL.md +15 -1
- package/skills/bugteam/SKILL_EVALS.md +1 -1
- package/skills/bugteam/reference/teardown-publish-permissions.md +1 -1
- package/skills/bugteam/scripts/README.md +17 -0
- package/skills/bugteam/scripts/bugteam_fix_hookspath.py +238 -0
- package/skills/bugteam/scripts/test_bugteam_fix_hookspath.py +267 -0
- package/skills/logifix/SKILL.md +69 -0
- package/skills/logifix/scripts/logifix.ps1 +205 -0
- 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
|