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.
- package/.claude/CLAUDE.md +1 -1
- package/.claude/agents/issue-plan-agent.md +21 -15
- package/.claude/agents/issue-queue-agent.md +114 -87
- package/.claude/commands/issue/discover.md +427 -0
- package/.claude/commands/issue/execute.md +195 -363
- package/.claude/commands/issue/new.md +13 -1
- package/.claude/commands/issue/plan.md +55 -32
- package/.claude/commands/issue/queue.md +145 -71
- package/.claude/commands/workflow/init.md +75 -29
- package/.claude/commands/workflow/lite-fix.md +8 -0
- package/.claude/commands/workflow/lite-plan.md +8 -0
- package/.claude/commands/workflow/review-module-cycle.md +4 -0
- package/.claude/commands/workflow/review-session-cycle.md +4 -0
- package/.claude/commands/workflow/review.md +4 -4
- package/.claude/commands/workflow/session/solidify.md +299 -0
- package/.claude/commands/workflow/session/start.md +10 -7
- package/.claude/commands/workflow/tools/context-gather.md +17 -10
- package/.claude/skills/software-manual/SKILL.md +184 -0
- package/.claude/skills/software-manual/phases/01-requirements-discovery.md +162 -0
- package/.claude/skills/software-manual/phases/02-project-exploration.md +101 -0
- package/.claude/skills/software-manual/phases/02.5-api-extraction.md +161 -0
- package/.claude/skills/software-manual/phases/03-parallel-analysis.md +183 -0
- package/.claude/skills/software-manual/phases/03.5-consolidation.md +82 -0
- package/.claude/skills/software-manual/phases/04-screenshot-capture.md +89 -0
- package/.claude/skills/software-manual/phases/05-html-assembly.md +132 -0
- package/.claude/skills/software-manual/phases/06-iterative-refinement.md +259 -0
- package/.claude/skills/software-manual/scripts/api-extractor.md +245 -0
- package/.claude/skills/software-manual/scripts/bundle-libraries.md +85 -0
- package/.claude/skills/software-manual/scripts/extract_apis.py +270 -0
- package/.claude/skills/software-manual/scripts/screenshot-helper.md +447 -0
- package/.claude/skills/software-manual/scripts/swagger-runner.md +419 -0
- package/.claude/skills/software-manual/scripts/typedoc-runner.md +357 -0
- package/.claude/skills/software-manual/specs/html-template.md +325 -0
- package/.claude/skills/software-manual/specs/quality-standards.md +253 -0
- package/.claude/skills/software-manual/specs/writing-style.md +298 -0
- package/.claude/skills/software-manual/templates/css/wiki-base.css +788 -0
- package/.claude/skills/software-manual/templates/css/wiki-dark.css +278 -0
- package/.claude/skills/software-manual/templates/tiddlywiki-shell.html +327 -0
- package/.claude/workflows/cli-templates/schemas/discovery-finding-schema.json +219 -0
- package/.claude/workflows/cli-templates/schemas/discovery-state-schema.json +125 -0
- package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +168 -74
- package/.claude/workflows/cli-templates/schemas/queue-schema.json +225 -108
- package/.claude/workflows/cli-templates/schemas/solution-schema.json +6 -28
- package/.claude/workflows/context-tools.md +17 -25
- package/.codex/AGENTS.md +10 -5
- package/.codex/prompts/issue-execute.md +174 -84
- package/.codex/prompts/issue-plan.md +106 -0
- package/.codex/prompts/issue-queue.md +225 -0
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +1 -0
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +443 -123
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
- package/ccw/dist/core/dashboard-generator.js +4 -1
- package/ccw/dist/core/dashboard-generator.js.map +1 -1
- package/ccw/dist/core/data-aggregator.d.ts +32 -0
- package/ccw/dist/core/data-aggregator.d.ts.map +1 -1
- package/ccw/dist/core/data-aggregator.js +55 -11
- package/ccw/dist/core/data-aggregator.js.map +1 -1
- package/ccw/dist/core/routes/discovery-routes.d.ts +37 -0
- package/ccw/dist/core/routes/discovery-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/discovery-routes.js +514 -0
- package/ccw/dist/core/routes/discovery-routes.js.map +1 -0
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +9 -1
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/tools/codex-lens.d.ts +12 -1
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +56 -7
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/src/cli.ts +1 -0
- package/ccw/src/commands/issue.ts +498 -158
- package/ccw/src/core/dashboard-generator.ts +4 -1
- package/ccw/src/core/data-aggregator.ts +94 -11
- package/ccw/src/core/routes/discovery-routes.ts +607 -0
- package/ccw/src/core/server.ts +9 -1
- package/ccw/src/templates/dashboard-css/34-discovery.css +783 -0
- package/ccw/src/templates/dashboard-js/components/cli-status.js +1 -78
- package/ccw/src/templates/dashboard-js/components/navigation.js +8 -0
- package/ccw/src/templates/dashboard-js/i18n.js +140 -4
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +0 -18
- package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +13 -3
- package/ccw/src/templates/dashboard-js/views/issue-discovery.js +730 -0
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +57 -26
- package/ccw/src/templates/dashboard-js/views/project-overview.js +153 -0
- package/ccw/src/templates/dashboard.html +5 -0
- package/ccw/src/tools/codex-lens.ts +75 -9
- package/package.json +1 -1
- 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
|
|
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
|
|
539
|
-
const
|
|
540
|
-
|
|
541
|
-
|
|
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
|
|
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
|
}
|