claude-code-workflow 7.2.3 → 7.2.4
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/.claude/agents/team-worker.md +2 -2
- package/.claude/skills/team-arch-opt/SKILL.md +1 -1
- package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-arch-opt/specs/team-config.json +1 -1
- package/.claude/skills/team-brainstorm/SKILL.md +2 -2
- package/.claude/skills/team-brainstorm/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-designer/SKILL.md +2 -2
- package/.claude/skills/team-designer/phases/03-content-generation.md +2 -2
- package/.claude/skills/team-edict/SKILL.md +1 -1
- package/.claude/skills/team-edict/role-specs/xingbu.md +1 -1
- package/.claude/skills/team-edict/roles/coordinator/role.md +4 -4
- package/.claude/skills/team-frontend/SKILL.md +1 -1
- package/.claude/skills/team-frontend/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-frontend-debug/SKILL.md +1 -1
- package/.claude/skills/team-frontend-debug/roles/coordinator/commands/dispatch.md +11 -11
- package/.claude/skills/team-issue/SKILL.md +2 -2
- package/.claude/skills/team-issue/roles/coordinator/commands/monitor.md +2 -2
- package/.claude/skills/team-iterdev/SKILL.md +1 -1
- package/.claude/skills/team-iterdev/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-lifecycle-v4/SKILL.md +2 -2
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +2 -2
- package/.claude/skills/team-perf-opt/SKILL.md +1 -1
- package/.claude/skills/team-perf-opt/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-perf-opt/roles/coordinator/role.md +1 -1
- package/.claude/skills/team-perf-opt/specs/team-config.json +1 -1
- package/.claude/skills/team-planex/SKILL.md +1 -1
- package/.claude/skills/team-planex/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +1 -1
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +3 -3
- package/.claude/skills/team-review/SKILL.md +1 -1
- package/.claude/skills/team-review/roles/coordinator/commands/dispatch.md +1 -1
- package/.claude/skills/team-review/roles/coordinator/commands/monitor.md +4 -4
- package/.claude/skills/team-roadmap-dev/SKILL.md +1 -1
- package/.claude/skills/team-roadmap-dev/roles/coordinator/commands/monitor.md +4 -4
- package/.claude/skills/team-roadmap-dev/specs/pipelines.md +3 -3
- package/.claude/skills/team-roadmap-dev/specs/team-config.json +1 -1
- package/.claude/skills/team-tech-debt/SKILL.md +1 -1
- package/.claude/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-testing/SKILL.md +1 -1
- package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +1 -1
- package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +7 -7
- package/.claude/skills/team-uidesign/SKILL.md +1 -1
- package/.claude/skills/team-uidesign/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-ultra-analyze/SKILL.md +1 -1
- package/.claude/skills/team-ultra-analyze/roles/coordinator/commands/monitor.md +5 -5
- package/.claude/skills/team-ultra-analyze/roles/coordinator/role.md +1 -1
- package/.claude/skills/team-ux-improve/SKILL.md +1 -1
- package/.claude/skills/team-ux-improve/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-ux-improve/roles/coordinator/role.md +2 -2
- package/.claude/skills/team-ux-improve/specs/pipelines.md +1 -1
- package/.claude/skills/team-ux-improve/specs/team-config.json +1 -1
- package/.codex/skills/team-arch-opt/SKILL.md +38 -0
- package/.codex/skills/team-arch-opt/instructions/agent-instruction.md +114 -114
- package/.codex/skills/team-brainstorm/SKILL.md +725 -687
- package/.codex/skills/team-coordinate/SKILL.md +38 -0
- package/.codex/skills/team-designer/SKILL.md +691 -653
- package/.codex/skills/team-designer/schemas/tasks-schema.md +180 -180
- package/.codex/skills/team-edict/SKILL.md +781 -742
- package/.codex/skills/team-edict/agents/aggregator.md +246 -246
- package/.codex/skills/team-edict/agents/qa-verifier.md +274 -274
- package/.codex/skills/team-edict/agents/shangshu-dispatcher.md +247 -247
- package/.codex/skills/team-edict/agents/zhongshu-planner.md +198 -198
- package/.codex/skills/team-edict/instructions/agent-instruction.md +177 -177
- package/.codex/skills/team-executor/SKILL.md +38 -0
- package/.codex/skills/team-frontend/SKILL.md +38 -0
- package/.codex/skills/team-frontend-debug/SKILL.md +38 -0
- package/.codex/skills/team-issue/SKILL.md +740 -702
- package/.codex/skills/team-iterdev/SKILL.md +826 -788
- package/.codex/skills/team-lifecycle/SKILL.md +38 -0
- package/.codex/skills/team-lifecycle/agents/analyst.md +6 -6
- package/.codex/skills/team-lifecycle/agents/discuss-agent.md +1 -1
- package/.codex/skills/team-lifecycle/agents/explore-agent.md +3 -3
- package/.codex/skills/team-lifecycle/agents/writer.md +3 -3
- package/.codex/skills/team-lifecycle/phases/01-requirement-clarification.md +1 -1
- package/.codex/skills/team-lifecycle/phases/02-team-initialization.md +1 -1
- package/.codex/skills/team-lifecycle/phases/03-task-chain-creation.md +1 -1
- package/.codex/skills/team-lifecycle/phases/04-pipeline-coordination.md +1 -1
- package/.codex/skills/team-lifecycle/phases/05-completion-report.md +1 -1
- package/.codex/skills/team-lifecycle-v4/SKILL.md +775 -737
- package/.codex/skills/team-perf-opt/SKILL.md +38 -0
- package/.codex/skills/team-perf-opt/instructions/agent-instruction.md +122 -122
- package/.codex/skills/team-planex/SKILL.md +38 -0
- package/.codex/skills/team-planex-v2/SKILL.md +39 -1
- package/.codex/skills/team-quality-assurance/SKILL.md +38 -0
- package/.codex/skills/team-review/SKILL.md +38 -0
- package/.codex/skills/team-roadmap-dev/SKILL.md +38 -0
- package/.codex/skills/team-tech-debt/SKILL.md +38 -0
- package/.codex/skills/team-testing/SKILL.md +38 -0
- package/.codex/skills/team-uidesign/SKILL.md +38 -0
- package/.codex/skills/team-ultra-analyze/SKILL.md +787 -749
- package/.codex/skills/team-ux-improve/SKILL.md +38 -0
- package/ccw/dist/tools/smart-search.d.ts +23 -0
- package/ccw/dist/tools/smart-search.d.ts.map +1 -1
- package/ccw/dist/tools/smart-search.js +41 -10
- package/ccw/dist/tools/smart-search.js.map +1 -1
- package/codex-lens/src/codexlens/config.py +32 -0
- package/codex-lens/src/codexlens/storage/index_tree.py +101 -33
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ Each directory maintains its own _index.db with files and subdirectory links.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
import fnmatch
|
|
9
10
|
import logging
|
|
10
11
|
import os
|
|
11
12
|
import re
|
|
@@ -24,6 +25,46 @@ from codexlens.storage.path_mapper import PathMapper
|
|
|
24
25
|
from codexlens.storage.registry import ProjectInfo, RegistryStore
|
|
25
26
|
|
|
26
27
|
|
|
28
|
+
DEFAULT_IGNORE_DIRS: Set[str] = {
|
|
29
|
+
".git",
|
|
30
|
+
".svn",
|
|
31
|
+
".hg",
|
|
32
|
+
".venv",
|
|
33
|
+
"venv",
|
|
34
|
+
"env",
|
|
35
|
+
"node_modules",
|
|
36
|
+
"bower_components",
|
|
37
|
+
"__pycache__",
|
|
38
|
+
".pytest_cache",
|
|
39
|
+
".mypy_cache",
|
|
40
|
+
".ruff_cache",
|
|
41
|
+
".npm",
|
|
42
|
+
".yarn",
|
|
43
|
+
".codexlens",
|
|
44
|
+
".idea",
|
|
45
|
+
".vscode",
|
|
46
|
+
".vs",
|
|
47
|
+
".eclipse",
|
|
48
|
+
"dist",
|
|
49
|
+
"build",
|
|
50
|
+
"out",
|
|
51
|
+
"target",
|
|
52
|
+
"bin",
|
|
53
|
+
"obj",
|
|
54
|
+
"_build",
|
|
55
|
+
"coverage",
|
|
56
|
+
"htmlcov",
|
|
57
|
+
".cache",
|
|
58
|
+
".parcel-cache",
|
|
59
|
+
".turbo",
|
|
60
|
+
".next",
|
|
61
|
+
".nuxt",
|
|
62
|
+
"logs",
|
|
63
|
+
"tmp",
|
|
64
|
+
"temp",
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
27
68
|
@dataclass
|
|
28
69
|
class BuildResult:
|
|
29
70
|
"""Complete build operation result."""
|
|
@@ -67,16 +108,7 @@ class IndexTreeBuilder:
|
|
|
67
108
|
"""
|
|
68
109
|
|
|
69
110
|
# Directories to skip during indexing
|
|
70
|
-
IGNORE_DIRS: Set[str] =
|
|
71
|
-
".git",
|
|
72
|
-
".venv",
|
|
73
|
-
"venv",
|
|
74
|
-
"node_modules",
|
|
75
|
-
"__pycache__",
|
|
76
|
-
".codexlens",
|
|
77
|
-
".idea",
|
|
78
|
-
".vscode",
|
|
79
|
-
}
|
|
111
|
+
IGNORE_DIRS: Set[str] = DEFAULT_IGNORE_DIRS
|
|
80
112
|
|
|
81
113
|
def __init__(
|
|
82
114
|
self, registry: RegistryStore, mapper: PathMapper, config: Config = None, incremental: bool = True
|
|
@@ -95,6 +127,37 @@ class IndexTreeBuilder:
|
|
|
95
127
|
self.parser_factory = ParserFactory(self.config)
|
|
96
128
|
self.logger = logging.getLogger(__name__)
|
|
97
129
|
self.incremental = incremental
|
|
130
|
+
self.ignore_patterns = self._resolve_ignore_patterns()
|
|
131
|
+
|
|
132
|
+
def _resolve_ignore_patterns(self) -> Tuple[str, ...]:
|
|
133
|
+
configured_patterns = getattr(self.config, "ignore_patterns", None)
|
|
134
|
+
raw_patterns = configured_patterns if configured_patterns else list(DEFAULT_IGNORE_DIRS)
|
|
135
|
+
cleaned: List[str] = []
|
|
136
|
+
for item in raw_patterns:
|
|
137
|
+
pattern = str(item).strip().replace('\\', '/').rstrip('/')
|
|
138
|
+
if pattern:
|
|
139
|
+
cleaned.append(pattern)
|
|
140
|
+
return tuple(dict.fromkeys(cleaned))
|
|
141
|
+
|
|
142
|
+
def _is_ignored_dir(self, dir_path: Path, source_root: Optional[Path] = None) -> bool:
|
|
143
|
+
name = dir_path.name
|
|
144
|
+
if name.startswith('.'):
|
|
145
|
+
return True
|
|
146
|
+
|
|
147
|
+
rel_path: Optional[str] = None
|
|
148
|
+
if source_root is not None:
|
|
149
|
+
try:
|
|
150
|
+
rel_path = dir_path.relative_to(source_root).as_posix()
|
|
151
|
+
except ValueError:
|
|
152
|
+
rel_path = None
|
|
153
|
+
|
|
154
|
+
for pattern in self.ignore_patterns:
|
|
155
|
+
if pattern == name or fnmatch.fnmatch(name, pattern):
|
|
156
|
+
return True
|
|
157
|
+
if rel_path and (pattern == rel_path or fnmatch.fnmatch(rel_path, pattern)):
|
|
158
|
+
return True
|
|
159
|
+
|
|
160
|
+
return False
|
|
98
161
|
|
|
99
162
|
def build(
|
|
100
163
|
self,
|
|
@@ -377,10 +440,11 @@ class IndexTreeBuilder:
|
|
|
377
440
|
|
|
378
441
|
for root, dirnames, _ in os.walk(source_root):
|
|
379
442
|
# Filter out ignored directories
|
|
443
|
+
root_path = Path(root)
|
|
380
444
|
dirnames[:] = [
|
|
381
445
|
d
|
|
382
446
|
for d in dirnames
|
|
383
|
-
if
|
|
447
|
+
if not self._is_ignored_dir(root_path / d, source_root)
|
|
384
448
|
]
|
|
385
449
|
|
|
386
450
|
root_path = Path(root)
|
|
@@ -390,7 +454,7 @@ class IndexTreeBuilder:
|
|
|
390
454
|
continue
|
|
391
455
|
|
|
392
456
|
# Check if this directory should be indexed
|
|
393
|
-
if not self._should_index_dir(root_path, languages):
|
|
457
|
+
if not self._should_index_dir(root_path, languages, source_root=source_root):
|
|
394
458
|
continue
|
|
395
459
|
|
|
396
460
|
# Calculate depth relative to source_root
|
|
@@ -406,7 +470,7 @@ class IndexTreeBuilder:
|
|
|
406
470
|
|
|
407
471
|
return dirs_by_depth
|
|
408
472
|
|
|
409
|
-
def _should_index_dir(self, dir_path: Path, languages: List[str] = None) -> bool:
|
|
473
|
+
def _should_index_dir(self, dir_path: Path, languages: List[str] = None, source_root: Optional[Path] = None) -> bool:
|
|
410
474
|
"""Check if directory should be indexed.
|
|
411
475
|
|
|
412
476
|
A directory is indexed if:
|
|
@@ -423,7 +487,7 @@ class IndexTreeBuilder:
|
|
|
423
487
|
True if directory should be indexed
|
|
424
488
|
"""
|
|
425
489
|
# Check directory name
|
|
426
|
-
if
|
|
490
|
+
if self._is_ignored_dir(dir_path, source_root):
|
|
427
491
|
return False
|
|
428
492
|
|
|
429
493
|
# Check for supported files in this directory
|
|
@@ -436,15 +500,15 @@ class IndexTreeBuilder:
|
|
|
436
500
|
for item in dir_path.iterdir():
|
|
437
501
|
if not item.is_dir():
|
|
438
502
|
continue
|
|
439
|
-
if
|
|
503
|
+
if self._is_ignored_dir(item, source_root):
|
|
440
504
|
continue
|
|
441
505
|
# Recursively check subdirectories
|
|
442
|
-
if self._has_indexable_files_recursive(item, languages):
|
|
506
|
+
if self._has_indexable_files_recursive(item, languages, source_root=source_root):
|
|
443
507
|
return True
|
|
444
508
|
|
|
445
509
|
return False
|
|
446
510
|
|
|
447
|
-
def _has_indexable_files_recursive(self, dir_path: Path, languages: List[str] = None) -> bool:
|
|
511
|
+
def _has_indexable_files_recursive(self, dir_path: Path, languages: List[str] = None, source_root: Optional[Path] = None) -> bool:
|
|
448
512
|
"""Check if directory or any subdirectory has indexable files.
|
|
449
513
|
|
|
450
514
|
Args:
|
|
@@ -464,9 +528,9 @@ class IndexTreeBuilder:
|
|
|
464
528
|
for item in dir_path.iterdir():
|
|
465
529
|
if not item.is_dir():
|
|
466
530
|
continue
|
|
467
|
-
if
|
|
531
|
+
if self._is_ignored_dir(item, source_root):
|
|
468
532
|
continue
|
|
469
|
-
if self._has_indexable_files_recursive(item, languages):
|
|
533
|
+
if self._has_indexable_files_recursive(item, languages, source_root=source_root):
|
|
470
534
|
return True
|
|
471
535
|
except PermissionError:
|
|
472
536
|
pass
|
|
@@ -520,6 +584,7 @@ class IndexTreeBuilder:
|
|
|
520
584
|
"static_graph_enabled": self.config.static_graph_enabled,
|
|
521
585
|
"static_graph_relationship_types": self.config.static_graph_relationship_types,
|
|
522
586
|
"use_astgrep": getattr(self.config, "use_astgrep", False),
|
|
587
|
+
"ignore_patterns": list(getattr(self.config, "ignore_patterns", [])),
|
|
523
588
|
}
|
|
524
589
|
|
|
525
590
|
worker_args = [
|
|
@@ -666,8 +731,7 @@ class IndexTreeBuilder:
|
|
|
666
731
|
d.name
|
|
667
732
|
for d in dir_path.iterdir()
|
|
668
733
|
if d.is_dir()
|
|
669
|
-
and
|
|
670
|
-
and not d.name.startswith(".")
|
|
734
|
+
and not self._is_ignored_dir(d)
|
|
671
735
|
]
|
|
672
736
|
|
|
673
737
|
store.update_merkle_root()
|
|
@@ -963,6 +1027,19 @@ def _compute_graph_neighbors(
|
|
|
963
1027
|
# === Worker Function for ProcessPoolExecutor ===
|
|
964
1028
|
|
|
965
1029
|
|
|
1030
|
+
def _matches_ignore_patterns(path: Path, patterns: List[str]) -> bool:
|
|
1031
|
+
name = path.name
|
|
1032
|
+
if name.startswith('.'):
|
|
1033
|
+
return True
|
|
1034
|
+
for pattern in patterns:
|
|
1035
|
+
normalized = str(pattern).strip().replace('\\', '/').rstrip('/')
|
|
1036
|
+
if not normalized:
|
|
1037
|
+
continue
|
|
1038
|
+
if normalized == name or fnmatch.fnmatch(name, normalized):
|
|
1039
|
+
return True
|
|
1040
|
+
return False
|
|
1041
|
+
|
|
1042
|
+
|
|
966
1043
|
def _build_dir_worker(args: tuple) -> DirBuildResult:
|
|
967
1044
|
"""Worker function for parallel directory building.
|
|
968
1045
|
|
|
@@ -986,6 +1063,7 @@ def _build_dir_worker(args: tuple) -> DirBuildResult:
|
|
|
986
1063
|
static_graph_enabled=bool(config_dict.get("static_graph_enabled", False)),
|
|
987
1064
|
static_graph_relationship_types=list(config_dict.get("static_graph_relationship_types", ["imports", "inherits"])),
|
|
988
1065
|
use_astgrep=bool(config_dict.get("use_astgrep", False)),
|
|
1066
|
+
ignore_patterns=list(config_dict.get("ignore_patterns", [])),
|
|
989
1067
|
)
|
|
990
1068
|
|
|
991
1069
|
parser_factory = ParserFactory(config)
|
|
@@ -1064,21 +1142,11 @@ def _build_dir_worker(args: tuple) -> DirBuildResult:
|
|
|
1064
1142
|
_compute_graph_neighbors(store)
|
|
1065
1143
|
|
|
1066
1144
|
# Get subdirectories
|
|
1067
|
-
|
|
1068
|
-
".git",
|
|
1069
|
-
".venv",
|
|
1070
|
-
"venv",
|
|
1071
|
-
"node_modules",
|
|
1072
|
-
"__pycache__",
|
|
1073
|
-
".codexlens",
|
|
1074
|
-
".idea",
|
|
1075
|
-
".vscode",
|
|
1076
|
-
}
|
|
1077
|
-
|
|
1145
|
+
ignore_patterns = list(config_dict.get("ignore_patterns", [])) or list(DEFAULT_IGNORE_DIRS)
|
|
1078
1146
|
subdirs = [
|
|
1079
1147
|
d.name
|
|
1080
1148
|
for d in dir_path.iterdir()
|
|
1081
|
-
if d.is_dir() and
|
|
1149
|
+
if d.is_dir() and not _matches_ignore_patterns(d, ignore_patterns)
|
|
1082
1150
|
]
|
|
1083
1151
|
|
|
1084
1152
|
store.update_merkle_root()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-code-workflow",
|
|
3
|
-
"version": "7.2.
|
|
3
|
+
"version": "7.2.4",
|
|
4
4
|
"description": "JSON-driven multi-agent development framework with intelligent CLI orchestration (Gemini/Qwen/Codex), context-first architecture, and automated workflow execution",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "ccw/dist/index.js",
|