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.
Files changed (99) hide show
  1. package/.claude/agents/team-worker.md +2 -2
  2. package/.claude/skills/team-arch-opt/SKILL.md +1 -1
  3. package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +1 -1
  4. package/.claude/skills/team-arch-opt/specs/team-config.json +1 -1
  5. package/.claude/skills/team-brainstorm/SKILL.md +2 -2
  6. package/.claude/skills/team-brainstorm/roles/coordinator/commands/monitor.md +1 -1
  7. package/.claude/skills/team-designer/SKILL.md +2 -2
  8. package/.claude/skills/team-designer/phases/03-content-generation.md +2 -2
  9. package/.claude/skills/team-edict/SKILL.md +1 -1
  10. package/.claude/skills/team-edict/role-specs/xingbu.md +1 -1
  11. package/.claude/skills/team-edict/roles/coordinator/role.md +4 -4
  12. package/.claude/skills/team-frontend/SKILL.md +1 -1
  13. package/.claude/skills/team-frontend/roles/coordinator/commands/monitor.md +1 -1
  14. package/.claude/skills/team-frontend-debug/SKILL.md +1 -1
  15. package/.claude/skills/team-frontend-debug/roles/coordinator/commands/dispatch.md +11 -11
  16. package/.claude/skills/team-issue/SKILL.md +2 -2
  17. package/.claude/skills/team-issue/roles/coordinator/commands/monitor.md +2 -2
  18. package/.claude/skills/team-iterdev/SKILL.md +1 -1
  19. package/.claude/skills/team-iterdev/roles/coordinator/commands/monitor.md +1 -1
  20. package/.claude/skills/team-lifecycle-v4/SKILL.md +2 -2
  21. package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +2 -2
  22. package/.claude/skills/team-perf-opt/SKILL.md +1 -1
  23. package/.claude/skills/team-perf-opt/roles/coordinator/commands/monitor.md +1 -1
  24. package/.claude/skills/team-perf-opt/roles/coordinator/role.md +1 -1
  25. package/.claude/skills/team-perf-opt/specs/team-config.json +1 -1
  26. package/.claude/skills/team-planex/SKILL.md +1 -1
  27. package/.claude/skills/team-planex/roles/coordinator/commands/monitor.md +1 -1
  28. package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
  29. package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +1 -1
  30. package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +3 -3
  31. package/.claude/skills/team-review/SKILL.md +1 -1
  32. package/.claude/skills/team-review/roles/coordinator/commands/dispatch.md +1 -1
  33. package/.claude/skills/team-review/roles/coordinator/commands/monitor.md +4 -4
  34. package/.claude/skills/team-roadmap-dev/SKILL.md +1 -1
  35. package/.claude/skills/team-roadmap-dev/roles/coordinator/commands/monitor.md +4 -4
  36. package/.claude/skills/team-roadmap-dev/specs/pipelines.md +3 -3
  37. package/.claude/skills/team-roadmap-dev/specs/team-config.json +1 -1
  38. package/.claude/skills/team-tech-debt/SKILL.md +1 -1
  39. package/.claude/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
  40. package/.claude/skills/team-testing/SKILL.md +1 -1
  41. package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +1 -1
  42. package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +7 -7
  43. package/.claude/skills/team-uidesign/SKILL.md +1 -1
  44. package/.claude/skills/team-uidesign/roles/coordinator/commands/monitor.md +1 -1
  45. package/.claude/skills/team-ultra-analyze/SKILL.md +1 -1
  46. package/.claude/skills/team-ultra-analyze/roles/coordinator/commands/monitor.md +5 -5
  47. package/.claude/skills/team-ultra-analyze/roles/coordinator/role.md +1 -1
  48. package/.claude/skills/team-ux-improve/SKILL.md +1 -1
  49. package/.claude/skills/team-ux-improve/roles/coordinator/commands/monitor.md +1 -1
  50. package/.claude/skills/team-ux-improve/roles/coordinator/role.md +2 -2
  51. package/.claude/skills/team-ux-improve/specs/pipelines.md +1 -1
  52. package/.claude/skills/team-ux-improve/specs/team-config.json +1 -1
  53. package/.codex/skills/team-arch-opt/SKILL.md +38 -0
  54. package/.codex/skills/team-arch-opt/instructions/agent-instruction.md +114 -114
  55. package/.codex/skills/team-brainstorm/SKILL.md +725 -687
  56. package/.codex/skills/team-coordinate/SKILL.md +38 -0
  57. package/.codex/skills/team-designer/SKILL.md +691 -653
  58. package/.codex/skills/team-designer/schemas/tasks-schema.md +180 -180
  59. package/.codex/skills/team-edict/SKILL.md +781 -742
  60. package/.codex/skills/team-edict/agents/aggregator.md +246 -246
  61. package/.codex/skills/team-edict/agents/qa-verifier.md +274 -274
  62. package/.codex/skills/team-edict/agents/shangshu-dispatcher.md +247 -247
  63. package/.codex/skills/team-edict/agents/zhongshu-planner.md +198 -198
  64. package/.codex/skills/team-edict/instructions/agent-instruction.md +177 -177
  65. package/.codex/skills/team-executor/SKILL.md +38 -0
  66. package/.codex/skills/team-frontend/SKILL.md +38 -0
  67. package/.codex/skills/team-frontend-debug/SKILL.md +38 -0
  68. package/.codex/skills/team-issue/SKILL.md +740 -702
  69. package/.codex/skills/team-iterdev/SKILL.md +826 -788
  70. package/.codex/skills/team-lifecycle/SKILL.md +38 -0
  71. package/.codex/skills/team-lifecycle/agents/analyst.md +6 -6
  72. package/.codex/skills/team-lifecycle/agents/discuss-agent.md +1 -1
  73. package/.codex/skills/team-lifecycle/agents/explore-agent.md +3 -3
  74. package/.codex/skills/team-lifecycle/agents/writer.md +3 -3
  75. package/.codex/skills/team-lifecycle/phases/01-requirement-clarification.md +1 -1
  76. package/.codex/skills/team-lifecycle/phases/02-team-initialization.md +1 -1
  77. package/.codex/skills/team-lifecycle/phases/03-task-chain-creation.md +1 -1
  78. package/.codex/skills/team-lifecycle/phases/04-pipeline-coordination.md +1 -1
  79. package/.codex/skills/team-lifecycle/phases/05-completion-report.md +1 -1
  80. package/.codex/skills/team-lifecycle-v4/SKILL.md +775 -737
  81. package/.codex/skills/team-perf-opt/SKILL.md +38 -0
  82. package/.codex/skills/team-perf-opt/instructions/agent-instruction.md +122 -122
  83. package/.codex/skills/team-planex/SKILL.md +38 -0
  84. package/.codex/skills/team-planex-v2/SKILL.md +39 -1
  85. package/.codex/skills/team-quality-assurance/SKILL.md +38 -0
  86. package/.codex/skills/team-review/SKILL.md +38 -0
  87. package/.codex/skills/team-roadmap-dev/SKILL.md +38 -0
  88. package/.codex/skills/team-tech-debt/SKILL.md +38 -0
  89. package/.codex/skills/team-testing/SKILL.md +38 -0
  90. package/.codex/skills/team-uidesign/SKILL.md +38 -0
  91. package/.codex/skills/team-ultra-analyze/SKILL.md +787 -749
  92. package/.codex/skills/team-ux-improve/SKILL.md +38 -0
  93. package/ccw/dist/tools/smart-search.d.ts +23 -0
  94. package/ccw/dist/tools/smart-search.d.ts.map +1 -1
  95. package/ccw/dist/tools/smart-search.js +41 -10
  96. package/ccw/dist/tools/smart-search.js.map +1 -1
  97. package/codex-lens/src/codexlens/config.py +32 -0
  98. package/codex-lens/src/codexlens/storage/index_tree.py +101 -33
  99. 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 d not in self.IGNORE_DIRS and not d.startswith(".")
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 dir_path.name in self.IGNORE_DIRS or dir_path.name.startswith("."):
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 item.name in self.IGNORE_DIRS or item.name.startswith("."):
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 item.name in self.IGNORE_DIRS or item.name.startswith("."):
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 d.name not in self.IGNORE_DIRS
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
- ignore_dirs = {
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 d.name not in ignore_dirs and not d.name.startswith(".")
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",
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",