claude-code-workflow 6.3.2 → 6.3.5

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 (80) hide show
  1. package/.claude/CLAUDE.md +9 -1
  2. package/.claude/commands/{clean.md → workflow/clean.md} +5 -5
  3. package/.claude/commands/workflow/docs/analyze.md +1467 -0
  4. package/.claude/commands/workflow/docs/copyright.md +1265 -0
  5. package/.claude/commands/workflow/lite-plan.md +1 -1
  6. package/.claude/commands/workflow/tools/conflict-resolution.md +76 -240
  7. package/.claude/commands/workflow/tools/task-generate-agent.md +81 -8
  8. package/.claude/skills/_shared/mermaid-utils.md +584 -0
  9. package/.claude/skills/copyright-docs/SKILL.md +132 -0
  10. package/.claude/skills/copyright-docs/phases/01-metadata-collection.md +78 -0
  11. package/.claude/skills/copyright-docs/phases/02-deep-analysis.md +454 -0
  12. package/.claude/skills/copyright-docs/phases/02.5-consolidation.md +192 -0
  13. package/.claude/skills/copyright-docs/phases/04-document-assembly.md +261 -0
  14. package/.claude/skills/copyright-docs/phases/05-compliance-refinement.md +192 -0
  15. package/.claude/skills/copyright-docs/specs/cpcc-requirements.md +121 -0
  16. package/.claude/skills/copyright-docs/templates/agent-base.md +200 -0
  17. package/.claude/skills/project-analyze/SKILL.md +162 -0
  18. package/.claude/skills/project-analyze/phases/01-requirements-discovery.md +79 -0
  19. package/.claude/skills/project-analyze/phases/02-project-exploration.md +75 -0
  20. package/.claude/skills/project-analyze/phases/03-deep-analysis.md +640 -0
  21. package/.claude/skills/project-analyze/phases/03.5-consolidation.md +208 -0
  22. package/.claude/skills/project-analyze/phases/04-report-generation.md +217 -0
  23. package/.claude/skills/project-analyze/phases/05-iterative-refinement.md +124 -0
  24. package/.claude/skills/project-analyze/specs/quality-standards.md +115 -0
  25. package/.claude/skills/project-analyze/specs/writing-style.md +152 -0
  26. package/.claude/workflows/cli-templates/schemas/conflict-resolution-schema.json +79 -65
  27. package/.claude/workflows/cli-tools-usage.md +515 -516
  28. package/README.md +11 -1
  29. package/ccw/dist/cli.d.ts.map +1 -1
  30. package/ccw/dist/cli.js +7 -1
  31. package/ccw/dist/cli.js.map +1 -1
  32. package/ccw/dist/commands/cli.d.ts +1 -1
  33. package/ccw/dist/commands/cli.d.ts.map +1 -1
  34. package/ccw/dist/commands/cli.js +116 -14
  35. package/ccw/dist/commands/cli.js.map +1 -1
  36. package/ccw/dist/core/routes/cli-routes.js +2 -2
  37. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  38. package/ccw/dist/tools/claude-cli-tools.d.ts +7 -3
  39. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  40. package/ccw/dist/tools/claude-cli-tools.js +31 -17
  41. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  42. package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
  43. package/ccw/dist/tools/cli-executor.js +19 -7
  44. package/ccw/dist/tools/cli-executor.js.map +1 -1
  45. package/ccw/dist/tools/cli-history-store.d.ts +33 -0
  46. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  47. package/ccw/dist/tools/cli-history-store.js +89 -5
  48. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  49. package/ccw/dist/tools/smart-search.d.ts +25 -0
  50. package/ccw/dist/tools/smart-search.d.ts.map +1 -1
  51. package/ccw/dist/tools/smart-search.js +121 -17
  52. package/ccw/dist/tools/smart-search.js.map +1 -1
  53. package/ccw/src/cli.ts +264 -258
  54. package/ccw/src/commands/cli.ts +1009 -884
  55. package/ccw/src/core/routes/cli-routes.ts +3 -3
  56. package/ccw/src/templates/dashboard-js/components/cli-history.js +40 -13
  57. package/ccw/src/templates/dashboard-js/components/cli-status.js +26 -2
  58. package/ccw/src/templates/dashboard-js/views/cli-manager.js +5 -0
  59. package/ccw/src/templates/dashboard-js/views/history.js +19 -4
  60. package/ccw/src/tools/claude-cli-tools.ts +37 -20
  61. package/ccw/src/tools/cli-executor.ts +20 -7
  62. package/ccw/src/tools/cli-history-store.ts +125 -5
  63. package/ccw/src/tools/smart-search.ts +157 -16
  64. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  65. package/codex-lens/src/codexlens/config.py +8 -0
  66. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  67. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  68. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  69. package/codex-lens/src/codexlens/search/chain_search.py +71 -1
  70. package/codex-lens/src/codexlens/search/hybrid_search.py +144 -11
  71. package/codex-lens/src/codexlens/search/ranking.py +540 -274
  72. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
  73. package/codex-lens/src/codexlens/semantic/chunker.py +55 -10
  74. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  75. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-313.pyc +0 -0
  76. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  77. package/codex-lens/src/codexlens/storage/dir_index.py +1888 -1850
  78. package/codex-lens/src/codexlens/storage/global_index.py +365 -0
  79. package/codex-lens/src/codexlens/storage/index_tree.py +83 -10
  80. package/package.json +2 -2
@@ -392,6 +392,22 @@ class HybridChunker:
392
392
  filtered.append(symbol)
393
393
  return filtered
394
394
 
395
+ def _find_parent_symbol(
396
+ self,
397
+ start_line: int,
398
+ end_line: int,
399
+ symbols: List[Symbol],
400
+ ) -> Optional[Symbol]:
401
+ """Find the smallest symbol range that fully contains a docstring span."""
402
+ candidates: List[Symbol] = []
403
+ for symbol in symbols:
404
+ sym_start, sym_end = symbol.range
405
+ if sym_start <= start_line and end_line <= sym_end:
406
+ candidates.append(symbol)
407
+ if not candidates:
408
+ return None
409
+ return min(candidates, key=lambda s: (s.range[1] - s.range[0], s.range[0]))
410
+
395
411
  def chunk_file(
396
412
  self,
397
413
  content: str,
@@ -414,24 +430,53 @@ class HybridChunker:
414
430
  chunks: List[SemanticChunk] = []
415
431
 
416
432
  # Step 1: Extract docstrings as dedicated chunks
417
- docstrings = self.docstring_extractor.extract_docstrings(content, language)
433
+ docstrings: List[Tuple[str, int, int]] = []
434
+ if language == "python":
435
+ # Fast path: avoid expensive docstring extraction if delimiters are absent.
436
+ if '"""' in content or "'''" in content:
437
+ docstrings = self.docstring_extractor.extract_docstrings(content, language)
438
+ elif language in {"javascript", "typescript"}:
439
+ if "/**" in content:
440
+ docstrings = self.docstring_extractor.extract_docstrings(content, language)
441
+ else:
442
+ docstrings = self.docstring_extractor.extract_docstrings(content, language)
443
+
444
+ # Fast path: no docstrings -> delegate to base chunker directly.
445
+ if not docstrings:
446
+ if symbols:
447
+ base_chunks = self.base_chunker.chunk_by_symbol(
448
+ content, symbols, file_path, language, symbol_token_counts
449
+ )
450
+ else:
451
+ base_chunks = self.base_chunker.chunk_sliding_window(content, file_path, language)
452
+
453
+ for chunk in base_chunks:
454
+ chunk.metadata["strategy"] = "hybrid"
455
+ chunk.metadata["chunk_type"] = "code"
456
+ return base_chunks
418
457
 
419
458
  for docstring_content, start_line, end_line in docstrings:
420
459
  if len(docstring_content.strip()) >= self.config.min_chunk_size:
460
+ parent_symbol = self._find_parent_symbol(start_line, end_line, symbols)
421
461
  # Use base chunker's token estimation method
422
462
  token_count = self.base_chunker._estimate_token_count(docstring_content)
463
+ metadata = {
464
+ "file": str(file_path),
465
+ "language": language,
466
+ "chunk_type": "docstring",
467
+ "start_line": start_line,
468
+ "end_line": end_line,
469
+ "strategy": "hybrid",
470
+ "token_count": token_count,
471
+ }
472
+ if parent_symbol is not None:
473
+ metadata["parent_symbol"] = parent_symbol.name
474
+ metadata["parent_symbol_kind"] = parent_symbol.kind
475
+ metadata["parent_symbol_range"] = parent_symbol.range
423
476
  chunks.append(SemanticChunk(
424
477
  content=docstring_content,
425
478
  embedding=None,
426
- metadata={
427
- "file": str(file_path),
428
- "language": language,
429
- "chunk_type": "docstring",
430
- "start_line": start_line,
431
- "end_line": end_line,
432
- "strategy": "hybrid",
433
- "token_count": token_count,
434
- }
479
+ metadata=metadata
435
480
  ))
436
481
 
437
482
  # Step 2: Get line ranges occupied by docstrings