claude-code-workflow 6.3.9 → 6.3.11

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 (91) hide show
  1. package/.claude/CLAUDE.md +1 -1
  2. package/.claude/agents/issue-plan-agent.md +21 -15
  3. package/.claude/agents/issue-queue-agent.md +114 -87
  4. package/.claude/commands/issue/discover.md +427 -0
  5. package/.claude/commands/issue/execute.md +195 -363
  6. package/.claude/commands/issue/new.md +13 -1
  7. package/.claude/commands/issue/plan.md +55 -32
  8. package/.claude/commands/issue/queue.md +145 -71
  9. package/.claude/commands/workflow/init.md +75 -29
  10. package/.claude/commands/workflow/lite-fix.md +8 -0
  11. package/.claude/commands/workflow/lite-plan.md +8 -0
  12. package/.claude/commands/workflow/review-module-cycle.md +4 -0
  13. package/.claude/commands/workflow/review-session-cycle.md +4 -0
  14. package/.claude/commands/workflow/review.md +4 -4
  15. package/.claude/commands/workflow/session/solidify.md +299 -0
  16. package/.claude/commands/workflow/session/start.md +10 -7
  17. package/.claude/commands/workflow/tools/context-gather.md +17 -10
  18. package/.claude/skills/software-manual/SKILL.md +184 -0
  19. package/.claude/skills/software-manual/phases/01-requirements-discovery.md +162 -0
  20. package/.claude/skills/software-manual/phases/02-project-exploration.md +101 -0
  21. package/.claude/skills/software-manual/phases/02.5-api-extraction.md +161 -0
  22. package/.claude/skills/software-manual/phases/03-parallel-analysis.md +183 -0
  23. package/.claude/skills/software-manual/phases/03.5-consolidation.md +82 -0
  24. package/.claude/skills/software-manual/phases/04-screenshot-capture.md +89 -0
  25. package/.claude/skills/software-manual/phases/05-html-assembly.md +132 -0
  26. package/.claude/skills/software-manual/phases/06-iterative-refinement.md +259 -0
  27. package/.claude/skills/software-manual/scripts/api-extractor.md +245 -0
  28. package/.claude/skills/software-manual/scripts/bundle-libraries.md +85 -0
  29. package/.claude/skills/software-manual/scripts/extract_apis.py +270 -0
  30. package/.claude/skills/software-manual/scripts/screenshot-helper.md +447 -0
  31. package/.claude/skills/software-manual/scripts/swagger-runner.md +419 -0
  32. package/.claude/skills/software-manual/scripts/typedoc-runner.md +357 -0
  33. package/.claude/skills/software-manual/specs/html-template.md +325 -0
  34. package/.claude/skills/software-manual/specs/quality-standards.md +253 -0
  35. package/.claude/skills/software-manual/specs/writing-style.md +298 -0
  36. package/.claude/skills/software-manual/templates/css/wiki-base.css +788 -0
  37. package/.claude/skills/software-manual/templates/css/wiki-dark.css +278 -0
  38. package/.claude/skills/software-manual/templates/tiddlywiki-shell.html +327 -0
  39. package/.claude/workflows/cli-templates/schemas/discovery-finding-schema.json +219 -0
  40. package/.claude/workflows/cli-templates/schemas/discovery-state-schema.json +125 -0
  41. package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +168 -74
  42. package/.claude/workflows/cli-templates/schemas/queue-schema.json +225 -108
  43. package/.claude/workflows/cli-templates/schemas/solution-schema.json +6 -28
  44. package/.claude/workflows/context-tools.md +17 -25
  45. package/.codex/AGENTS.md +10 -5
  46. package/.codex/prompts/issue-execute.md +174 -84
  47. package/.codex/prompts/issue-plan.md +106 -0
  48. package/.codex/prompts/issue-queue.md +225 -0
  49. package/ccw/dist/cli.d.ts.map +1 -1
  50. package/ccw/dist/cli.js +1 -0
  51. package/ccw/dist/cli.js.map +1 -1
  52. package/ccw/dist/commands/issue.d.ts.map +1 -1
  53. package/ccw/dist/commands/issue.js +443 -123
  54. package/ccw/dist/commands/issue.js.map +1 -1
  55. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  56. package/ccw/dist/core/dashboard-generator.js +4 -1
  57. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  58. package/ccw/dist/core/data-aggregator.d.ts +32 -0
  59. package/ccw/dist/core/data-aggregator.d.ts.map +1 -1
  60. package/ccw/dist/core/data-aggregator.js +55 -11
  61. package/ccw/dist/core/data-aggregator.js.map +1 -1
  62. package/ccw/dist/core/routes/discovery-routes.d.ts +37 -0
  63. package/ccw/dist/core/routes/discovery-routes.d.ts.map +1 -0
  64. package/ccw/dist/core/routes/discovery-routes.js +514 -0
  65. package/ccw/dist/core/routes/discovery-routes.js.map +1 -0
  66. package/ccw/dist/core/server.d.ts.map +1 -1
  67. package/ccw/dist/core/server.js +9 -1
  68. package/ccw/dist/core/server.js.map +1 -1
  69. package/ccw/dist/tools/codex-lens.d.ts +12 -1
  70. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  71. package/ccw/dist/tools/codex-lens.js +56 -7
  72. package/ccw/dist/tools/codex-lens.js.map +1 -1
  73. package/ccw/src/cli.ts +1 -0
  74. package/ccw/src/commands/issue.ts +498 -158
  75. package/ccw/src/core/dashboard-generator.ts +4 -1
  76. package/ccw/src/core/data-aggregator.ts +94 -11
  77. package/ccw/src/core/routes/discovery-routes.ts +607 -0
  78. package/ccw/src/core/server.ts +9 -1
  79. package/ccw/src/templates/dashboard-css/34-discovery.css +783 -0
  80. package/ccw/src/templates/dashboard-js/components/cli-status.js +1 -78
  81. package/ccw/src/templates/dashboard-js/components/navigation.js +8 -0
  82. package/ccw/src/templates/dashboard-js/i18n.js +140 -4
  83. package/ccw/src/templates/dashboard-js/views/cli-manager.js +0 -18
  84. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +13 -3
  85. package/ccw/src/templates/dashboard-js/views/issue-discovery.js +730 -0
  86. package/ccw/src/templates/dashboard-js/views/issue-manager.js +57 -26
  87. package/ccw/src/templates/dashboard-js/views/project-overview.js +153 -0
  88. package/ccw/src/templates/dashboard.html +5 -0
  89. package/ccw/src/tools/codex-lens.ts +75 -9
  90. package/package.json +1 -1
  91. package/.claude/workflows/context-tools-ace.md +0 -105
@@ -47,7 +47,8 @@ const MODULE_CSS_FILES = [
47
47
  '28-mcp-manager.css',
48
48
  '29-help.css',
49
49
  '30-core-memory.css',
50
- '31-api-settings.css'
50
+ '31-api-settings.css',
51
+ '34-discovery.css'
51
52
  ];
52
53
 
53
54
  const MODULE_FILES = [
@@ -97,6 +98,8 @@ const MODULE_FILES = [
97
98
  'views/rules-manager.js',
98
99
  'views/claude-manager.js',
99
100
  'views/api-settings.js',
101
+ 'views/issue-manager.js',
102
+ 'views/issue-discovery.js',
100
103
  'views/help.js',
101
104
  'main.js'
102
105
  ];
@@ -110,6 +110,34 @@ interface SessionReviewData {
110
110
  findings: Array<Finding & { dimension: string }>;
111
111
  }
112
112
 
113
+ interface ProjectGuidelines {
114
+ conventions: {
115
+ coding_style: string[];
116
+ naming_patterns: string[];
117
+ file_structure: string[];
118
+ documentation: string[];
119
+ };
120
+ constraints: {
121
+ architecture: string[];
122
+ tech_stack: string[];
123
+ performance: string[];
124
+ security: string[];
125
+ };
126
+ quality_rules: Array<{ rule: string; scope: string; enforced_by?: string }>;
127
+ learnings: Array<{
128
+ date: string;
129
+ session_id?: string;
130
+ insight: string;
131
+ context?: string;
132
+ category?: string;
133
+ }>;
134
+ _metadata?: {
135
+ created_at: string;
136
+ updated_at?: string;
137
+ version: string;
138
+ };
139
+ }
140
+
113
141
  interface ProjectOverview {
114
142
  projectName: string;
115
143
  description: string;
@@ -144,6 +172,7 @@ interface ProjectOverview {
144
172
  analysis_timestamp: string | null;
145
173
  analysis_mode: string;
146
174
  };
175
+ guidelines: ProjectGuidelines | null;
147
176
  }
148
177
 
149
178
  /**
@@ -156,11 +185,13 @@ export async function aggregateData(sessions: ScanSessionsResult, workflowDir: s
156
185
  // Initialize cache manager
157
186
  const cache = createDashboardCache(workflowDir);
158
187
 
159
- // Prepare paths to watch for changes
188
+ // Prepare paths to watch for changes (includes both new dual files and legacy)
160
189
  const watchPaths = [
161
190
  join(workflowDir, 'active'),
162
191
  join(workflowDir, 'archives'),
163
- join(workflowDir, 'project.json'),
192
+ join(workflowDir, 'project-tech.json'),
193
+ join(workflowDir, 'project-guidelines.json'),
194
+ join(workflowDir, 'project.json'), // Legacy support
164
195
  ...sessions.active.map(s => s.path),
165
196
  ...sessions.archived.map(s => s.path)
166
197
  ];
@@ -516,12 +547,19 @@ function sortTaskIds(a: string, b: string): number {
516
547
  }
517
548
 
518
549
  /**
519
- * Load project overview from project.json
550
+ * Load project overview from project-tech.json and project-guidelines.json
551
+ * Supports dual file structure with backward compatibility for legacy project.json
520
552
  * @param workflowDir - Path to .workflow directory
521
553
  * @returns Project overview data or null if not found
522
554
  */
523
555
  function loadProjectOverview(workflowDir: string): ProjectOverview | null {
524
- const projectFile = join(workflowDir, 'project.json');
556
+ const techFile = join(workflowDir, 'project-tech.json');
557
+ const guidelinesFile = join(workflowDir, 'project-guidelines.json');
558
+ const legacyFile = join(workflowDir, 'project.json');
559
+
560
+ // Check for new dual file structure first, fallback to legacy
561
+ const useLegacy = !existsSync(techFile) && existsSync(legacyFile);
562
+ const projectFile = useLegacy ? legacyFile : techFile;
525
563
 
526
564
  if (!existsSync(projectFile)) {
527
565
  console.log(`Project file not found at: ${projectFile}`);
@@ -532,15 +570,59 @@ function loadProjectOverview(workflowDir: string): ProjectOverview | null {
532
570
  const fileContent = readFileSync(projectFile, 'utf8');
533
571
  const projectData = JSON.parse(fileContent) as Record<string, unknown>;
534
572
 
535
- console.log(`Successfully loaded project overview: ${projectData.project_name || 'Unknown'}`);
573
+ console.log(`Successfully loaded project overview: ${projectData.project_name || 'Unknown'} (${useLegacy ? 'legacy' : 'tech'})`);
536
574
 
575
+ // Parse tech data (compatible with both legacy and new structure)
537
576
  const overview = projectData.overview as Record<string, unknown> | undefined;
538
- const technologyStack = overview?.technology_stack as Record<string, unknown[]> | undefined;
539
- const architecture = overview?.architecture as Record<string, unknown> | undefined;
540
- const developmentIndex = projectData.development_index as Record<string, unknown[]> | undefined;
541
- const statistics = projectData.statistics as Record<string, unknown> | undefined;
577
+ const technologyAnalysis = projectData.technology_analysis as Record<string, unknown> | undefined;
578
+ const developmentStatus = projectData.development_status as Record<string, unknown> | undefined;
579
+
580
+ // Support both old and new schema field names
581
+ const technologyStack = (overview?.technology_stack || technologyAnalysis?.technology_stack) as Record<string, unknown[]> | undefined;
582
+ const architecture = (overview?.architecture || technologyAnalysis?.architecture) as Record<string, unknown> | undefined;
583
+ const developmentIndex = (projectData.development_index || developmentStatus?.development_index) as Record<string, unknown[]> | undefined;
584
+ const statistics = (projectData.statistics || developmentStatus?.statistics) as Record<string, unknown> | undefined;
542
585
  const metadata = projectData._metadata as Record<string, unknown> | undefined;
543
586
 
587
+ // Load guidelines from separate file if exists
588
+ let guidelines: ProjectGuidelines | null = null;
589
+ if (existsSync(guidelinesFile)) {
590
+ try {
591
+ const guidelinesContent = readFileSync(guidelinesFile, 'utf8');
592
+ const guidelinesData = JSON.parse(guidelinesContent) as Record<string, unknown>;
593
+
594
+ const conventions = guidelinesData.conventions as Record<string, string[]> | undefined;
595
+ const constraints = guidelinesData.constraints as Record<string, string[]> | undefined;
596
+
597
+ guidelines = {
598
+ conventions: {
599
+ coding_style: conventions?.coding_style || [],
600
+ naming_patterns: conventions?.naming_patterns || [],
601
+ file_structure: conventions?.file_structure || [],
602
+ documentation: conventions?.documentation || []
603
+ },
604
+ constraints: {
605
+ architecture: constraints?.architecture || [],
606
+ tech_stack: constraints?.tech_stack || [],
607
+ performance: constraints?.performance || [],
608
+ security: constraints?.security || []
609
+ },
610
+ quality_rules: (guidelinesData.quality_rules as Array<{ rule: string; scope: string; enforced_by?: string }>) || [],
611
+ learnings: (guidelinesData.learnings as Array<{
612
+ date: string;
613
+ session_id?: string;
614
+ insight: string;
615
+ context?: string;
616
+ category?: string;
617
+ }>) || [],
618
+ _metadata: guidelinesData._metadata as ProjectGuidelines['_metadata'] | undefined
619
+ };
620
+ console.log(`Successfully loaded project guidelines`);
621
+ } catch (guidelinesErr) {
622
+ console.error(`Failed to parse project-guidelines.json:`, (guidelinesErr as Error).message);
623
+ }
624
+ }
625
+
544
626
  return {
545
627
  projectName: (projectData.project_name as string) || 'Unknown',
546
628
  description: (overview?.description as string) || '',
@@ -574,10 +656,11 @@ function loadProjectOverview(workflowDir: string): ProjectOverview | null {
574
656
  initialized_by: (metadata?.initialized_by as string) || 'unknown',
575
657
  analysis_timestamp: (metadata?.analysis_timestamp as string) || null,
576
658
  analysis_mode: (metadata?.analysis_mode as string) || 'unknown'
577
- }
659
+ },
660
+ guidelines
578
661
  };
579
662
  } catch (err) {
580
- console.error(`Failed to parse project.json at ${projectFile}:`, (err as Error).message);
663
+ console.error(`Failed to parse project file at ${projectFile}:`, (err as Error).message);
581
664
  console.error('Error stack:', (err as Error).stack);
582
665
  return null;
583
666
  }