create-hq 5.0.0
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/dist/deps.d.ts +4 -0
- package/dist/deps.d.ts.map +1 -0
- package/dist/deps.js +65 -0
- package/dist/deps.js.map +1 -0
- package/dist/git.d.ts +3 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +19 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold.d.ts +8 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +130 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/ui.d.ts +7 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +36 -0
- package/dist/ui.js.map +1 -0
- package/package.json +41 -0
- package/template/.claude/CLAUDE.md +202 -0
- package/template/.claude/commands/checkpoint.md +127 -0
- package/template/.claude/commands/cleanup.md +307 -0
- package/template/.claude/commands/execute-task.md +440 -0
- package/template/.claude/commands/exit-plan.md +41 -0
- package/template/.claude/commands/handoff.md +97 -0
- package/template/.claude/commands/learn.md +218 -0
- package/template/.claude/commands/metrics.md +118 -0
- package/template/.claude/commands/newworker.md +162 -0
- package/template/.claude/commands/nexttask.md +67 -0
- package/template/.claude/commands/prd.md +238 -0
- package/template/.claude/commands/reanchor.md +51 -0
- package/template/.claude/commands/remember.md +126 -0
- package/template/.claude/commands/run-project.md +348 -0
- package/template/.claude/commands/run.md +110 -0
- package/template/.claude/commands/search-reindex.md +62 -0
- package/template/.claude/commands/search.md +100 -0
- package/template/.claude/commands/setup.md +381 -0
- package/template/.claude/scripts/pure-ralph-loop.ps1 +312 -0
- package/template/.claude/scripts/pure-ralph-loop.sh +859 -0
- package/template/CHANGELOG.md +220 -0
- package/template/LICENSE +21 -0
- package/template/MIGRATION.md +259 -0
- package/template/README.md +368 -0
- package/template/data/journal/.gitkeep +0 -0
- package/template/docs/images/ascii-banner-options.md +122 -0
- package/template/docs/images/hq-banner.svg +105 -0
- package/template/knowledge/Ralph/01-overview.md +71 -0
- package/template/knowledge/Ralph/02-core-concepts.md +114 -0
- package/template/knowledge/Ralph/03-how-ralph-works.md +184 -0
- package/template/knowledge/Ralph/04-back-pressure.md +222 -0
- package/template/knowledge/Ralph/05-specifications.md +210 -0
- package/template/knowledge/Ralph/06-agents-md.md +222 -0
- package/template/knowledge/Ralph/07-implementation.md +316 -0
- package/template/knowledge/Ralph/08-economics.md +182 -0
- package/template/knowledge/Ralph/09-resources.md +145 -0
- package/template/knowledge/Ralph/10-claude-code-workflow.md +212 -0
- package/template/knowledge/Ralph/11-team-training-guide.md +383 -0
- package/template/knowledge/Ralph/README.md +40 -0
- package/template/knowledge/ai-security-framework/CONTRIBUTING.md +139 -0
- package/template/knowledge/ai-security-framework/GLOSSARY.md +176 -0
- package/template/knowledge/ai-security-framework/LICENSE +21 -0
- package/template/knowledge/ai-security-framework/QUICK-START.md +172 -0
- package/template/knowledge/ai-security-framework/README.md +232 -0
- package/template/knowledge/ai-security-framework/checklists/browser-security.md +301 -0
- package/template/knowledge/ai-security-framework/checklists/credential-isolation.md +322 -0
- package/template/knowledge/ai-security-framework/checklists/incident-response.md +288 -0
- package/template/knowledge/ai-security-framework/checklists/pre-flight.md +249 -0
- package/template/knowledge/ai-security-framework/checklists/weekly-audit.md +159 -0
- package/template/knowledge/ai-security-framework/configs/audit-logging.md +372 -0
- package/template/knowledge/ai-security-framework/configs/kill-switches.md +354 -0
- package/template/knowledge/ai-security-framework/docs/01-core-principles.md +256 -0
- package/template/knowledge/ai-security-framework/docs/02-threat-landscape.md +326 -0
- package/template/knowledge/ai-security-framework/docs/03-security-posture.md +250 -0
- package/template/knowledge/ai-security-framework/templates/agents-security.md +233 -0
- package/template/knowledge/design-styles/README.md +42 -0
- package/template/knowledge/design-styles/american-industrial.md +136 -0
- package/template/knowledge/design-styles/ethereal-abstract.md +133 -0
- package/template/knowledge/design-styles/liminal-portal.md +111 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-3m4YPW0AADdu2.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-JJlt5WwAABK3K.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-JJmj5W0AEbJ-7.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ (1).jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G7fVkn3WEAAM-ST.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G8ECO5JWEAIksyn.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G9-3GQSWoAA8eqZ.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G9xEOqrXkAEZRcs.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G_MVeJrXQAA8sx4.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G_RSkmGXkAAgAVZ.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/README.md +31 -0
- package/template/knowledge/design-styles/swipes/american-industrial/qyqtg7Dq.png +0 -0
- package/template/knowledge/dev-team/README.md +35 -0
- package/template/knowledge/dev-team/patterns/README.md +34 -0
- package/template/knowledge/dev-team/patterns/frontend/react-best-practices.md +178 -0
- package/template/knowledge/dev-team/troubleshooting/README.md +31 -0
- package/template/knowledge/dev-team/workflows/README.md +49 -0
- package/template/knowledge/hq/checkpoint-schema.json +51 -0
- package/template/knowledge/hq/index-md-spec.md +74 -0
- package/template/knowledge/hq/thread-schema.md +153 -0
- package/template/knowledge/hq-core/checkpoint-schema.json +51 -0
- package/template/knowledge/hq-core/index-md-spec.md +74 -0
- package/template/knowledge/hq-core/thread-schema.md +153 -0
- package/template/knowledge/loom/README.md +51 -0
- package/template/knowledge/loom/architecture.md +125 -0
- package/template/knowledge/loom/code-style.md +169 -0
- package/template/knowledge/loom/llm-proxy.md +132 -0
- package/template/knowledge/loom/state-machine.md +131 -0
- package/template/knowledge/loom/thread-system.md +117 -0
- package/template/knowledge/loom/tools.md +94 -0
- package/template/knowledge/loom/weaver.md +96 -0
- package/template/knowledge/loom/web-frontend.md +131 -0
- package/template/knowledge/projects/README.md +72 -0
- package/template/knowledge/projects/templates/README.template.md +28 -0
- package/template/knowledge/workers/README.md +195 -0
- package/template/knowledge/workers/ralph-loop-pattern.md +157 -0
- package/template/knowledge/workers/skill-schema.md +182 -0
- package/template/knowledge/workers/state-machine.md +102 -0
- package/template/knowledge/workers/templates/base-worker.yaml +73 -0
- package/template/knowledge/workers/templates/code-worker.yaml +85 -0
- package/template/knowledge/workers/templates/skill.yaml +49 -0
- package/template/knowledge/workers/templates/social-worker.yaml +70 -0
- package/template/modules/examples/full-manifest.yaml +92 -0
- package/template/modules/examples/minimal.yaml +14 -0
- package/template/modules/modules.yaml +59 -0
- package/template/projects/.gitkeep +0 -0
- package/template/projects/incorporate-workers-into-pure-ralph/prd.json +88 -0
- package/template/projects/pure-ralph-branch-isolation/README.md +114 -0
- package/template/projects/pure-ralph-branch-isolation/prd.json +123 -0
- package/template/projects/purist-ralph-loop/README.md +148 -0
- package/template/projects/purist-ralph-loop/prd.json +135 -0
- package/template/projects/ralph-test/prd.json +50 -0
- package/template/prompts/pure-ralph-base.md +551 -0
- package/template/settings/.gitkeep +0 -0
- package/template/settings/pure-ralph.json +42 -0
- package/template/social-content/drafts/INDEX.md +21 -0
- package/template/social-content/drafts/linkedin/.gitkeep +1 -0
- package/template/social-content/drafts/x/.gitkeep +1 -0
- package/template/social-content/images/.gitkeep +1 -0
- package/template/starter-projects/code-worker/README.md +97 -0
- package/template/starter-projects/code-worker/prd.json +45 -0
- package/template/starter-projects/personal-assistant/README.md +42 -0
- package/template/starter-projects/personal-assistant/prd.json +43 -0
- package/template/starter-projects/social-media/README.md +60 -0
- package/template/starter-projects/social-media/prd.json +43 -0
- package/template/workers/content-brand/README.md +59 -0
- package/template/workers/content-brand/skills/messaging-alignment.md +91 -0
- package/template/workers/content-brand/skills/tone-check.md +76 -0
- package/template/workers/content-brand/skills/voice-analysis.md +68 -0
- package/template/workers/content-brand/worker.yaml +81 -0
- package/template/workers/content-legal/README.md +80 -0
- package/template/workers/content-legal/skills/claim-substantiation.md +150 -0
- package/template/workers/content-legal/skills/compliance-scan.md +123 -0
- package/template/workers/content-legal/skills/disclaimer-check.md +146 -0
- package/template/workers/content-legal/worker.yaml +118 -0
- package/template/workers/content-product/README.md +77 -0
- package/template/workers/content-product/skills/claim-verification.md +96 -0
- package/template/workers/content-product/skills/feature-accuracy.md +117 -0
- package/template/workers/content-product/skills/stats-check.md +128 -0
- package/template/workers/content-product/worker.yaml +97 -0
- package/template/workers/content-sales/README.md +70 -0
- package/template/workers/content-sales/skills/conversion-analysis.md +96 -0
- package/template/workers/content-sales/skills/cta-audit.md +107 -0
- package/template/workers/content-sales/skills/value-prop-check.md +114 -0
- package/template/workers/content-sales/worker.yaml +93 -0
- package/template/workers/content-shared/cli.ts +242 -0
- package/template/workers/content-shared/index.ts +234 -0
- package/template/workers/content-shared/lib/accuracy-analyzer.ts +661 -0
- package/template/workers/content-shared/lib/analyze.ts +370 -0
- package/template/workers/content-shared/lib/brand-analyzer.ts +526 -0
- package/template/workers/content-shared/lib/cms-integration.ts +446 -0
- package/template/workers/content-shared/lib/compliance-analyzer.ts +655 -0
- package/template/workers/content-shared/lib/conversion-analyzer.ts +555 -0
- package/template/workers/content-shared/lib/github-integration.ts +582 -0
- package/template/workers/content-shared/lib/output.ts +373 -0
- package/template/workers/content-shared/lib/parser.ts +771 -0
- package/template/workers/content-shared/lib/priority.ts +439 -0
- package/template/workers/content-shared/lib/recommendations.ts +512 -0
- package/template/workers/content-shared/lib/reporter.ts +749 -0
- package/template/workers/content-shared/lib/restructure.ts +664 -0
- package/template/workers/content-shared/lib/scorer.ts +140 -0
- package/template/workers/content-shared/lib/types.ts +227 -0
- package/template/workers/content-shared/lib/variants.ts +595 -0
- package/template/workers/content-shared/package.json +51 -0
- package/template/workers/content-shared/pnpm-lock.yaml +39 -0
- package/template/workers/content-shared/test/sample-page.json +115 -0
- package/template/workers/content-shared/tsconfig.json +20 -0
- package/template/workers/dev-team/README.md +166 -0
- package/template/workers/dev-team/_template.yaml +70 -0
- package/template/workers/dev-team/architect/package.json +27 -0
- package/template/workers/dev-team/architect/skills/api-design.md +89 -0
- package/template/workers/dev-team/architect/skills/refactor-plan.md +96 -0
- package/template/workers/dev-team/architect/skills/system-design.md +100 -0
- package/template/workers/dev-team/architect/src/index.ts +49 -0
- package/template/workers/dev-team/architect/src/mcp-server.ts +122 -0
- package/template/workers/dev-team/architect/src/skills/api-design.ts +316 -0
- package/template/workers/dev-team/architect/src/skills/refactor-plan.ts +264 -0
- package/template/workers/dev-team/architect/src/skills/system-design.ts +212 -0
- package/template/workers/dev-team/architect/tsconfig.json +19 -0
- package/template/workers/dev-team/architect/worker.yaml +128 -0
- package/template/workers/dev-team/backend-dev/package-lock.json +1252 -0
- package/template/workers/dev-team/backend-dev/package.json +27 -0
- package/template/workers/dev-team/backend-dev/skills/implement-endpoint.md +70 -0
- package/template/workers/dev-team/backend-dev/skills/implement-service.md +62 -0
- package/template/workers/dev-team/backend-dev/src/index.ts +51 -0
- package/template/workers/dev-team/backend-dev/src/mcp-server.ts +109 -0
- package/template/workers/dev-team/backend-dev/src/skills/implement-endpoint.ts +122 -0
- package/template/workers/dev-team/backend-dev/src/skills/implement-service.ts +126 -0
- package/template/workers/dev-team/backend-dev/tsconfig.json +19 -0
- package/template/workers/dev-team/backend-dev/worker.yaml +128 -0
- package/template/workers/dev-team/code-reviewer/package-lock.json +1080 -0
- package/template/workers/dev-team/code-reviewer/package.json +24 -0
- package/template/workers/dev-team/code-reviewer/skills/merge-to-production.md +61 -0
- package/template/workers/dev-team/code-reviewer/skills/merge-to-staging.md +54 -0
- package/template/workers/dev-team/code-reviewer/skills/request-changes.md +63 -0
- package/template/workers/dev-team/code-reviewer/skills/review-pr.md +77 -0
- package/template/workers/dev-team/code-reviewer/src/index.ts +56 -0
- package/template/workers/dev-team/code-reviewer/src/mcp-server.ts +101 -0
- package/template/workers/dev-team/code-reviewer/tsconfig.json +19 -0
- package/template/workers/dev-team/code-reviewer/worker.yaml +90 -0
- package/template/workers/dev-team/database-dev/package.json +22 -0
- package/template/workers/dev-team/database-dev/skills/create-schema.md +48 -0
- package/template/workers/dev-team/database-dev/src/index.ts +50 -0
- package/template/workers/dev-team/database-dev/src/mcp-server.ts +76 -0
- package/template/workers/dev-team/database-dev/tsconfig.json +18 -0
- package/template/workers/dev-team/database-dev/worker.yaml +90 -0
- package/template/workers/dev-team/frontend-dev/package.json +22 -0
- package/template/workers/dev-team/frontend-dev/skills/create-component.md +26 -0
- package/template/workers/dev-team/frontend-dev/src/index.ts +50 -0
- package/template/workers/dev-team/frontend-dev/src/mcp-server.ts +77 -0
- package/template/workers/dev-team/frontend-dev/tsconfig.json +18 -0
- package/template/workers/dev-team/frontend-dev/worker.yaml +132 -0
- package/template/workers/dev-team/infra-dev/package.json +24 -0
- package/template/workers/dev-team/infra-dev/skills/add-monitoring.md +73 -0
- package/template/workers/dev-team/infra-dev/skills/configure-deployment.md +80 -0
- package/template/workers/dev-team/infra-dev/skills/create-dockerfile.md +62 -0
- package/template/workers/dev-team/infra-dev/skills/setup-cicd.md +63 -0
- package/template/workers/dev-team/infra-dev/src/index.ts +55 -0
- package/template/workers/dev-team/infra-dev/src/mcp-server.ts +82 -0
- package/template/workers/dev-team/infra-dev/tsconfig.json +19 -0
- package/template/workers/dev-team/infra-dev/worker.yaml +92 -0
- package/template/workers/dev-team/knowledge-curator/package.json +24 -0
- package/template/workers/dev-team/knowledge-curator/skills/curate-troubleshooting.md +63 -0
- package/template/workers/dev-team/knowledge-curator/skills/process-learnings.md +61 -0
- package/template/workers/dev-team/knowledge-curator/skills/sync-documentation.md +76 -0
- package/template/workers/dev-team/knowledge-curator/skills/update-patterns.md +63 -0
- package/template/workers/dev-team/knowledge-curator/src/index.ts +53 -0
- package/template/workers/dev-team/knowledge-curator/src/mcp-server.ts +92 -0
- package/template/workers/dev-team/knowledge-curator/tsconfig.json +19 -0
- package/template/workers/dev-team/knowledge-curator/worker.yaml +80 -0
- package/template/workers/dev-team/motion-designer/package.json +22 -0
- package/template/workers/dev-team/motion-designer/skills/add-animation.md +25 -0
- package/template/workers/dev-team/motion-designer/skills/generate-image.md +36 -0
- package/template/workers/dev-team/motion-designer/src/index.ts +63 -0
- package/template/workers/dev-team/motion-designer/src/mcp-server.ts +79 -0
- package/template/workers/dev-team/motion-designer/tsconfig.json +18 -0
- package/template/workers/dev-team/motion-designer/worker.yaml +84 -0
- package/template/workers/dev-team/product-planner/queue.json +4 -0
- package/template/workers/dev-team/product-planner/worker.yaml +220 -0
- package/template/workers/dev-team/project-manager/package-lock.json +1252 -0
- package/template/workers/dev-team/project-manager/package.json +27 -0
- package/template/workers/dev-team/project-manager/skills/create-prd.md +66 -0
- package/template/workers/dev-team/project-manager/skills/next-issue.md +51 -0
- package/template/workers/dev-team/project-manager/skills/project-status.md +59 -0
- package/template/workers/dev-team/project-manager/skills/update-learnings.md +65 -0
- package/template/workers/dev-team/project-manager/src/index.ts +54 -0
- package/template/workers/dev-team/project-manager/src/mcp-server.ts +207 -0
- package/template/workers/dev-team/project-manager/src/skills/create-prd.ts +86 -0
- package/template/workers/dev-team/project-manager/src/skills/next-issue.ts +137 -0
- package/template/workers/dev-team/project-manager/src/skills/project-status.ts +131 -0
- package/template/workers/dev-team/project-manager/src/skills/update-learnings.ts +94 -0
- package/template/workers/dev-team/project-manager/tsconfig.json +19 -0
- package/template/workers/dev-team/project-manager/worker.yaml +96 -0
- package/template/workers/dev-team/qa-tester/package.json +24 -0
- package/template/workers/dev-team/qa-tester/skills/create-demo-account.md +36 -0
- package/template/workers/dev-team/qa-tester/skills/run-tests.md +36 -0
- package/template/workers/dev-team/qa-tester/skills/write-test.md +27 -0
- package/template/workers/dev-team/qa-tester/src/index.ts +61 -0
- package/template/workers/dev-team/qa-tester/src/mcp-server.ts +88 -0
- package/template/workers/dev-team/qa-tester/tsconfig.json +18 -0
- package/template/workers/dev-team/qa-tester/worker.yaml +116 -0
- package/template/workers/dev-team/task-executor/package-lock.json +1252 -0
- package/template/workers/dev-team/task-executor/package.json +27 -0
- package/template/workers/dev-team/task-executor/skills/analyze-issue.md +101 -0
- package/template/workers/dev-team/task-executor/skills/execute.md +133 -0
- package/template/workers/dev-team/task-executor/skills/report-learnings.md +106 -0
- package/template/workers/dev-team/task-executor/skills/validate-completion.md +121 -0
- package/template/workers/dev-team/task-executor/src/index.ts +54 -0
- package/template/workers/dev-team/task-executor/src/mcp-server.ts +139 -0
- package/template/workers/dev-team/task-executor/src/skills/analyze-issue.ts +219 -0
- package/template/workers/dev-team/task-executor/src/skills/execute.ts +132 -0
- package/template/workers/dev-team/task-executor/src/skills/report-learnings.ts +119 -0
- package/template/workers/dev-team/task-executor/src/skills/validate-completion.ts +142 -0
- package/template/workers/dev-team/task-executor/tsconfig.json +19 -0
- package/template/workers/dev-team/task-executor/worker.yaml +110 -0
- package/template/workers/registry.yaml +171 -0
- package/template/workers/security-scanner/README.md +73 -0
- package/template/workers/security-scanner/skills/pre-deploy-check.md +205 -0
- package/template/workers/security-scanner/worker.yaml +26 -0
- package/template/workspace/checkpoints/.gitkeep +0 -0
- package/template/workspace/content-ideas/inbox.jsonl +0 -0
- package/template/workspace/drafts/.gitkeep +0 -0
- package/template/workspace/learnings/.gitkeep +3 -0
- package/template/workspace/orchestrator/.gitkeep +0 -0
- package/template/workspace/ralph-test/COMPLETE.md +18 -0
- package/template/workspace/ralph-test/hello.txt +2 -0
- package/template/workspace/reports/.gitkeep +0 -0
- package/template/workspace/scratch/.gitkeep +0 -0
- package/template/workspace/threads/.gitkeep +3 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
|
|
5
|
+
interface RefactorPlanOptions {
|
|
6
|
+
target: string;
|
|
7
|
+
repo?: string;
|
|
8
|
+
goal?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface RefactorStep {
|
|
12
|
+
description: string;
|
|
13
|
+
files: string[];
|
|
14
|
+
risk: 'low' | 'medium' | 'high';
|
|
15
|
+
tests: string[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function refactorPlan(options: RefactorPlanOptions): Promise<void> {
|
|
19
|
+
const { target, repo, goal } = options;
|
|
20
|
+
|
|
21
|
+
console.log(`\n=== Refactor Plan: ${target} ===\n`);
|
|
22
|
+
|
|
23
|
+
if (goal) {
|
|
24
|
+
console.log(`Goal: ${goal}\n`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Analyze target
|
|
28
|
+
let analysis: { issues: string[]; metrics: Record<string, number> } = {
|
|
29
|
+
issues: [],
|
|
30
|
+
metrics: {},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
if (repo) {
|
|
34
|
+
console.log('Analyzing target code...');
|
|
35
|
+
analysis = analyzeTarget(repo, target);
|
|
36
|
+
|
|
37
|
+
console.log('\nCurrent state:');
|
|
38
|
+
for (const issue of analysis.issues) {
|
|
39
|
+
console.log(` - ${issue}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (Object.keys(analysis.metrics).length > 0) {
|
|
43
|
+
console.log('\nMetrics:');
|
|
44
|
+
for (const [key, value] of Object.entries(analysis.metrics)) {
|
|
45
|
+
console.log(` - ${key}: ${value}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Generate refactoring steps
|
|
51
|
+
const steps = generateSteps(target, goal, analysis.issues);
|
|
52
|
+
|
|
53
|
+
console.log('\n' + '-'.repeat(40));
|
|
54
|
+
console.log('\nRefactoring Steps:\n');
|
|
55
|
+
|
|
56
|
+
for (let i = 0; i < steps.length; i++) {
|
|
57
|
+
const step = steps[i];
|
|
58
|
+
const riskColor = step.risk === 'high' ? '⚠️' : step.risk === 'medium' ? '⚡' : '✓';
|
|
59
|
+
console.log(`${i + 1}. [ ] ${step.description} ${riskColor}`);
|
|
60
|
+
console.log(` Files: ${step.files.join(', ')}`);
|
|
61
|
+
console.log(` Risk: ${step.risk}`);
|
|
62
|
+
if (step.tests.length > 0) {
|
|
63
|
+
console.log(` Tests: ${step.tests.join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
console.log();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Test strategy
|
|
69
|
+
console.log('-'.repeat(40));
|
|
70
|
+
console.log('\nTest Strategy:');
|
|
71
|
+
console.log(' - Run existing tests after each step');
|
|
72
|
+
console.log(' - Verify no regressions');
|
|
73
|
+
if (analysis.issues.some(i => i.includes('test'))) {
|
|
74
|
+
console.log(' - Add missing tests before refactoring');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Rollback plan
|
|
78
|
+
console.log('\nRollback Plan:');
|
|
79
|
+
console.log(' If issues arise at step N:');
|
|
80
|
+
console.log(' 1. git revert to commit before step N');
|
|
81
|
+
console.log(' 2. Analyze failure');
|
|
82
|
+
console.log(' 3. Adjust approach and retry');
|
|
83
|
+
|
|
84
|
+
// Effort estimate
|
|
85
|
+
const complexity = steps.length <= 3 ? 'simple' :
|
|
86
|
+
steps.length <= 6 ? 'medium' : 'complex';
|
|
87
|
+
console.log(`\nEstimated effort: ${steps.length} phases, ${complexity} complexity`);
|
|
88
|
+
|
|
89
|
+
console.log('\n[Human approval required]');
|
|
90
|
+
console.log('Approve plan? [y/n/modify]');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function analyzeTarget(repoPath: string, target: string): { issues: string[]; metrics: Record<string, number> } {
|
|
94
|
+
const issues: string[] = [];
|
|
95
|
+
const metrics: Record<string, number> = {};
|
|
96
|
+
|
|
97
|
+
const fullPath = path.join(repoPath, target);
|
|
98
|
+
|
|
99
|
+
if (!fs.existsSync(fullPath)) {
|
|
100
|
+
issues.push(`Target not found: ${target}`);
|
|
101
|
+
return { issues, metrics };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Check if it's a directory or file
|
|
105
|
+
const stat = fs.statSync(fullPath);
|
|
106
|
+
|
|
107
|
+
if (stat.isDirectory()) {
|
|
108
|
+
// Count files
|
|
109
|
+
try {
|
|
110
|
+
const files = fs.readdirSync(fullPath, { recursive: true }) as string[];
|
|
111
|
+
const tsFiles = files.filter(f => f.endsWith('.ts') || f.endsWith('.tsx'));
|
|
112
|
+
metrics['files'] = tsFiles.length;
|
|
113
|
+
} catch (e) {
|
|
114
|
+
// Ignore
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Look for common issues
|
|
119
|
+
try {
|
|
120
|
+
const content = stat.isFile()
|
|
121
|
+
? fs.readFileSync(fullPath, 'utf-8')
|
|
122
|
+
: '';
|
|
123
|
+
|
|
124
|
+
// Check for 'any' types
|
|
125
|
+
const anyCount = (content.match(/: any/g) || []).length;
|
|
126
|
+
if (anyCount > 0) {
|
|
127
|
+
issues.push(`${anyCount} uses of 'any' type`);
|
|
128
|
+
metrics['any_types'] = anyCount;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Check for @ts-ignore
|
|
132
|
+
const ignoreCount = (content.match(/@ts-ignore/g) || []).length;
|
|
133
|
+
if (ignoreCount > 0) {
|
|
134
|
+
issues.push(`${ignoreCount} @ts-ignore comments`);
|
|
135
|
+
metrics['ts_ignore'] = ignoreCount;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Check for TODO comments
|
|
139
|
+
const todoCount = (content.match(/TODO/gi) || []).length;
|
|
140
|
+
if (todoCount > 0) {
|
|
141
|
+
issues.push(`${todoCount} TODO comments`);
|
|
142
|
+
metrics['todos'] = todoCount;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
} catch (e) {
|
|
146
|
+
// Ignore read errors
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (issues.length === 0) {
|
|
150
|
+
issues.push('No obvious issues detected (manual review recommended)');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return { issues, metrics };
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function generateSteps(target: string, goal?: string, issues: string[] = []): RefactorStep[] {
|
|
157
|
+
const goalLower = (goal || '').toLowerCase();
|
|
158
|
+
|
|
159
|
+
// TypeScript strict mode refactoring
|
|
160
|
+
if (goalLower.includes('strict') || goalLower.includes('typescript')) {
|
|
161
|
+
return [
|
|
162
|
+
{
|
|
163
|
+
description: 'Add explicit types to function parameters',
|
|
164
|
+
files: [target],
|
|
165
|
+
risk: 'low',
|
|
166
|
+
tests: ['npm run typecheck'],
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
description: 'Add explicit return types to functions',
|
|
170
|
+
files: [target],
|
|
171
|
+
risk: 'low',
|
|
172
|
+
tests: ['npm run typecheck'],
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
description: 'Replace "any" with proper types',
|
|
176
|
+
files: [target],
|
|
177
|
+
risk: 'medium',
|
|
178
|
+
tests: ['npm run typecheck', 'npm test'],
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
description: 'Add null checks for optional values',
|
|
182
|
+
files: [target],
|
|
183
|
+
risk: 'medium',
|
|
184
|
+
tests: ['npm run typecheck', 'npm test'],
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
description: 'Remove @ts-ignore comments',
|
|
188
|
+
files: [target],
|
|
189
|
+
risk: 'low',
|
|
190
|
+
tests: ['npm run typecheck'],
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
description: 'Enable strict mode in tsconfig',
|
|
194
|
+
files: ['tsconfig.json'],
|
|
195
|
+
risk: 'low',
|
|
196
|
+
tests: ['npm run typecheck', 'npm run build'],
|
|
197
|
+
},
|
|
198
|
+
];
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Performance refactoring
|
|
202
|
+
if (goalLower.includes('performance') || goalLower.includes('optimize')) {
|
|
203
|
+
return [
|
|
204
|
+
{
|
|
205
|
+
description: 'Profile current performance',
|
|
206
|
+
files: [target],
|
|
207
|
+
risk: 'low',
|
|
208
|
+
tests: ['manual performance measurement'],
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
description: 'Identify bottlenecks',
|
|
212
|
+
files: [target],
|
|
213
|
+
risk: 'low',
|
|
214
|
+
tests: [],
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
description: 'Implement optimizations',
|
|
218
|
+
files: [target],
|
|
219
|
+
risk: 'medium',
|
|
220
|
+
tests: ['npm test', 'performance benchmark'],
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
description: 'Verify performance improvement',
|
|
224
|
+
files: [],
|
|
225
|
+
risk: 'low',
|
|
226
|
+
tests: ['performance benchmark'],
|
|
227
|
+
},
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Default: General refactoring steps
|
|
232
|
+
return [
|
|
233
|
+
{
|
|
234
|
+
description: 'Identify code to refactor',
|
|
235
|
+
files: [target],
|
|
236
|
+
risk: 'low',
|
|
237
|
+
tests: [],
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
description: 'Add tests for existing behavior',
|
|
241
|
+
files: [target],
|
|
242
|
+
risk: 'low',
|
|
243
|
+
tests: ['npm test'],
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
description: 'Perform refactoring',
|
|
247
|
+
files: [target],
|
|
248
|
+
risk: 'medium',
|
|
249
|
+
tests: ['npm run typecheck', 'npm test'],
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
description: 'Update documentation',
|
|
253
|
+
files: [target],
|
|
254
|
+
risk: 'low',
|
|
255
|
+
tests: [],
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
description: 'Final verification',
|
|
259
|
+
files: [],
|
|
260
|
+
risk: 'low',
|
|
261
|
+
tests: ['npm run typecheck', 'npm run lint', 'npm test'],
|
|
262
|
+
},
|
|
263
|
+
];
|
|
264
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
interface SystemDesignOptions {
|
|
5
|
+
feature: string;
|
|
6
|
+
repo?: string;
|
|
7
|
+
scope?: 'small' | 'medium' | 'large';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface DesignOption {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
pros: string[];
|
|
14
|
+
cons: string[];
|
|
15
|
+
recommended?: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function systemDesign(options: SystemDesignOptions): Promise<void> {
|
|
19
|
+
const { feature, repo, scope = 'medium' } = options;
|
|
20
|
+
|
|
21
|
+
console.log(`\n=== System Design: ${feature} ===\n`);
|
|
22
|
+
|
|
23
|
+
// Analyze existing architecture if repo provided
|
|
24
|
+
if (repo) {
|
|
25
|
+
console.log('Analyzing existing architecture...');
|
|
26
|
+
const analysis = analyzeRepo(repo);
|
|
27
|
+
console.log('\nExisting patterns:');
|
|
28
|
+
for (const pattern of analysis.patterns) {
|
|
29
|
+
console.log(` - ${pattern}`);
|
|
30
|
+
}
|
|
31
|
+
console.log('\nKey dependencies:');
|
|
32
|
+
for (const dep of analysis.dependencies.slice(0, 5)) {
|
|
33
|
+
console.log(` - ${dep}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Generate design options based on feature
|
|
38
|
+
const designOptions = generateDesignOptions(feature, scope);
|
|
39
|
+
|
|
40
|
+
console.log('\n' + '-'.repeat(40));
|
|
41
|
+
console.log('\nDesign Options:\n');
|
|
42
|
+
|
|
43
|
+
for (let i = 0; i < designOptions.length; i++) {
|
|
44
|
+
const opt = designOptions[i];
|
|
45
|
+
const rec = opt.recommended ? ' (Recommended)' : '';
|
|
46
|
+
console.log(`${i + 1}. ${opt.name}${rec}`);
|
|
47
|
+
console.log(` ${opt.description}`);
|
|
48
|
+
console.log(' Pros:');
|
|
49
|
+
for (const pro of opt.pros) {
|
|
50
|
+
console.log(` + ${pro}`);
|
|
51
|
+
}
|
|
52
|
+
console.log(' Cons:');
|
|
53
|
+
for (const con of opt.cons) {
|
|
54
|
+
console.log(` - ${con}`);
|
|
55
|
+
}
|
|
56
|
+
console.log();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
console.log('[Human approval required]');
|
|
60
|
+
console.log(`Select approach: [1-${designOptions.length}]`);
|
|
61
|
+
|
|
62
|
+
// Show what would be generated
|
|
63
|
+
console.log('\n' + '-'.repeat(40));
|
|
64
|
+
console.log('\nOn approval, will generate:');
|
|
65
|
+
console.log(' - Architecture Decision Record (ADR)');
|
|
66
|
+
console.log(' - Component diagram (Mermaid)');
|
|
67
|
+
console.log(' - Implementation guide for workers');
|
|
68
|
+
|
|
69
|
+
// Sample ADR output
|
|
70
|
+
console.log('\n' + '-'.repeat(40));
|
|
71
|
+
console.log('\nSample ADR Preview:');
|
|
72
|
+
console.log(`
|
|
73
|
+
# ADR: ${feature}
|
|
74
|
+
|
|
75
|
+
## Status
|
|
76
|
+
Proposed
|
|
77
|
+
|
|
78
|
+
## Context
|
|
79
|
+
Implementation of ${feature} requires architectural decisions
|
|
80
|
+
regarding ${scope} scope changes.
|
|
81
|
+
|
|
82
|
+
## Decision
|
|
83
|
+
[Selected option will be documented here]
|
|
84
|
+
|
|
85
|
+
## Consequences
|
|
86
|
+
- Integration with existing patterns
|
|
87
|
+
- Changes to: [affected components]
|
|
88
|
+
- New dependencies: [if any]
|
|
89
|
+
|
|
90
|
+
## Implementation Guide
|
|
91
|
+
1. [Steps for architect/other workers]
|
|
92
|
+
2. ...
|
|
93
|
+
`);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function analyzeRepo(repoPath: string): { patterns: string[]; dependencies: string[] } {
|
|
97
|
+
const patterns: string[] = [];
|
|
98
|
+
const dependencies: string[] = [];
|
|
99
|
+
|
|
100
|
+
// Check for common patterns
|
|
101
|
+
const checks = [
|
|
102
|
+
{ file: 'next.config.js', pattern: 'Next.js' },
|
|
103
|
+
{ file: 'next.config.mjs', pattern: 'Next.js' },
|
|
104
|
+
{ file: 'prisma/schema.prisma', pattern: 'Prisma ORM' },
|
|
105
|
+
{ file: 'drizzle.config.ts', pattern: 'Drizzle ORM' },
|
|
106
|
+
{ file: 'src/app', pattern: 'Next.js App Router' },
|
|
107
|
+
{ file: 'src/pages', pattern: 'Next.js Pages Router' },
|
|
108
|
+
{ file: 'tailwind.config.js', pattern: 'Tailwind CSS' },
|
|
109
|
+
{ file: 'tailwind.config.ts', pattern: 'Tailwind CSS' },
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
for (const check of checks) {
|
|
113
|
+
const fullPath = path.join(repoPath, check.file);
|
|
114
|
+
if (fs.existsSync(fullPath)) {
|
|
115
|
+
patterns.push(check.pattern);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Check package.json for dependencies
|
|
120
|
+
const pkgPath = path.join(repoPath, 'package.json');
|
|
121
|
+
if (fs.existsSync(pkgPath)) {
|
|
122
|
+
try {
|
|
123
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
124
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
125
|
+
dependencies.push(...Object.keys(deps).slice(0, 10));
|
|
126
|
+
} catch (e) {
|
|
127
|
+
// Ignore parse errors
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (patterns.length === 0) {
|
|
132
|
+
patterns.push('(Unable to detect patterns - provide --repo)');
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return { patterns, dependencies };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function generateDesignOptions(feature: string, scope: string): DesignOption[] {
|
|
139
|
+
// Generate context-aware options based on feature keywords
|
|
140
|
+
const featureLower = feature.toLowerCase();
|
|
141
|
+
|
|
142
|
+
if (featureLower.includes('auth')) {
|
|
143
|
+
return [
|
|
144
|
+
{
|
|
145
|
+
name: 'NextAuth.js',
|
|
146
|
+
description: 'Use NextAuth.js for authentication with built-in providers',
|
|
147
|
+
pros: ['Battle-tested', 'Many OAuth providers', 'Session management included'],
|
|
148
|
+
cons: ['Opinionated structure', 'Some flexibility limits'],
|
|
149
|
+
recommended: true,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'Custom OAuth',
|
|
153
|
+
description: 'Build custom OAuth implementation',
|
|
154
|
+
pros: ['Full control', 'No external dependencies'],
|
|
155
|
+
cons: ['More work', 'Security risks', 'Maintenance burden'],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'Managed Service (Clerk/Auth0)',
|
|
159
|
+
description: 'Use a managed authentication service',
|
|
160
|
+
pros: ['Zero maintenance', 'Advanced features included'],
|
|
161
|
+
cons: ['Vendor lock-in', 'Monthly cost', 'Less control'],
|
|
162
|
+
},
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (featureLower.includes('api') || featureLower.includes('endpoint')) {
|
|
167
|
+
return [
|
|
168
|
+
{
|
|
169
|
+
name: 'REST API',
|
|
170
|
+
description: 'Traditional REST endpoints with JSON',
|
|
171
|
+
pros: ['Simple', 'Well-understood', 'Good tooling'],
|
|
172
|
+
cons: ['Over/under-fetching', 'Multiple requests needed'],
|
|
173
|
+
recommended: true,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'GraphQL',
|
|
177
|
+
description: 'GraphQL API with schema-first approach',
|
|
178
|
+
pros: ['Flexible queries', 'Strong typing', 'Single endpoint'],
|
|
179
|
+
cons: ['Complexity', 'Learning curve', 'Caching challenges'],
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'tRPC',
|
|
183
|
+
description: 'End-to-end typesafe APIs',
|
|
184
|
+
pros: ['Full type safety', 'No codegen', 'Great DX'],
|
|
185
|
+
cons: ['TypeScript only', 'Tighter coupling'],
|
|
186
|
+
},
|
|
187
|
+
];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Default options for general features
|
|
191
|
+
return [
|
|
192
|
+
{
|
|
193
|
+
name: 'Incremental Addition',
|
|
194
|
+
description: 'Add feature alongside existing code',
|
|
195
|
+
pros: ['Low risk', 'Quick to implement', 'Easy rollback'],
|
|
196
|
+
cons: ['May not optimize for feature', 'Technical debt possible'],
|
|
197
|
+
recommended: true,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
name: 'Refactor First',
|
|
201
|
+
description: 'Refactor existing code, then add feature',
|
|
202
|
+
pros: ['Clean architecture', 'Better long-term'],
|
|
203
|
+
cons: ['More time', 'Higher initial risk'],
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: 'New Module',
|
|
207
|
+
description: 'Create isolated module for feature',
|
|
208
|
+
pros: ['Clean separation', 'Independent testing'],
|
|
209
|
+
cons: ['Integration overhead', 'Duplication possible'],
|
|
210
|
+
},
|
|
211
|
+
];
|
|
212
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"lib": ["ES2022"],
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"declaration": true,
|
|
14
|
+
"declarationMap": true,
|
|
15
|
+
"sourceMap": true
|
|
16
|
+
},
|
|
17
|
+
"include": ["src/**/*"],
|
|
18
|
+
"exclude": ["node_modules", "dist"]
|
|
19
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
worker:
|
|
2
|
+
id: architect
|
|
3
|
+
name: "Architect"
|
|
4
|
+
type: CodeWorker
|
|
5
|
+
version: "1.0"
|
|
6
|
+
|
|
7
|
+
execution:
|
|
8
|
+
mode: on_demand
|
|
9
|
+
max_runtime: 15m
|
|
10
|
+
retry_attempts: 1
|
|
11
|
+
|
|
12
|
+
context:
|
|
13
|
+
base:
|
|
14
|
+
- workers/public/dev-team/architect/
|
|
15
|
+
- workers/public/dev-team/architect/skills/
|
|
16
|
+
- knowledge/public/dev-team/patterns/
|
|
17
|
+
dynamic:
|
|
18
|
+
- pattern: "{target_repo}/"
|
|
19
|
+
when: always
|
|
20
|
+
exclude:
|
|
21
|
+
- node_modules/
|
|
22
|
+
- dist/
|
|
23
|
+
- "*.log"
|
|
24
|
+
- ".git/"
|
|
25
|
+
|
|
26
|
+
verification:
|
|
27
|
+
post_execute:
|
|
28
|
+
- check: typescript
|
|
29
|
+
command: npm run typecheck
|
|
30
|
+
approval_required: true
|
|
31
|
+
|
|
32
|
+
external_skills:
|
|
33
|
+
# Vercel React Best Practices - Architecture guidance
|
|
34
|
+
- vercel/react-best-practices
|
|
35
|
+
# Architecture-relevant patterns:
|
|
36
|
+
# - Strategic Suspense boundaries
|
|
37
|
+
# - Component composition for parallel fetching
|
|
38
|
+
# - Bundle splitting strategies
|
|
39
|
+
# - Server/client boundary decisions
|
|
40
|
+
|
|
41
|
+
output:
|
|
42
|
+
destination: workspace/reports/dev-team/
|
|
43
|
+
format: both
|
|
44
|
+
naming: "{date}-architect-{task}.{ext}"
|
|
45
|
+
|
|
46
|
+
mcp:
|
|
47
|
+
server:
|
|
48
|
+
command: node
|
|
49
|
+
args:
|
|
50
|
+
- dist/mcp-server.js
|
|
51
|
+
cwd: workers/public/dev-team/architect
|
|
52
|
+
tools:
|
|
53
|
+
- system_design
|
|
54
|
+
- api_design
|
|
55
|
+
- code_review_plan
|
|
56
|
+
- refactor_plan
|
|
57
|
+
|
|
58
|
+
# State Machine (Loom pattern)
|
|
59
|
+
state_machine:
|
|
60
|
+
enabled: true
|
|
61
|
+
max_retries: 1
|
|
62
|
+
hooks:
|
|
63
|
+
post_execute:
|
|
64
|
+
- auto_checkpoint
|
|
65
|
+
- log_metrics
|
|
66
|
+
on_error:
|
|
67
|
+
- log_error
|
|
68
|
+
- checkpoint_error_state
|
|
69
|
+
|
|
70
|
+
instructions: |
|
|
71
|
+
# Architect
|
|
72
|
+
|
|
73
|
+
System design, planning, and technical decision-making.
|
|
74
|
+
|
|
75
|
+
## Skills
|
|
76
|
+
|
|
77
|
+
| Skill | Description |
|
|
78
|
+
|-------|-------------|
|
|
79
|
+
| system-design | Design system architecture for feature |
|
|
80
|
+
| api-design | Design API contracts and interfaces |
|
|
81
|
+
| code-review-plan | Plan approach for code review |
|
|
82
|
+
| refactor-plan | Plan refactoring approach |
|
|
83
|
+
|
|
84
|
+
## CLI Usage
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
cd workers/public/dev-team/architect
|
|
88
|
+
node dist/index.js system-design --feature "user auth" --repo path/to/repo
|
|
89
|
+
node dist/index.js api-design --endpoint "/api/users" --repo path/to/repo
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Responsibilities
|
|
93
|
+
|
|
94
|
+
1. Analyze existing codebase architecture
|
|
95
|
+
2. Design new features to fit existing patterns
|
|
96
|
+
3. Define API contracts before implementation
|
|
97
|
+
4. Identify breaking changes and migration paths
|
|
98
|
+
5. Document architectural decisions
|
|
99
|
+
|
|
100
|
+
## React Architecture Patterns (Vercel)
|
|
101
|
+
|
|
102
|
+
Data Loading:
|
|
103
|
+
- Strategic Suspense boundary placement
|
|
104
|
+
- Component composition for parallel data fetching
|
|
105
|
+
- Server vs Client component decisions
|
|
106
|
+
|
|
107
|
+
Performance:
|
|
108
|
+
- Bundle splitting strategy (dynamic imports)
|
|
109
|
+
- Avoid barrel file architectures
|
|
110
|
+
- Preloading based on user intent patterns
|
|
111
|
+
|
|
112
|
+
Server Components:
|
|
113
|
+
- Minimize RSC serialization boundaries
|
|
114
|
+
- Cross-request caching strategies
|
|
115
|
+
- React.cache() placement
|
|
116
|
+
|
|
117
|
+
## Output
|
|
118
|
+
|
|
119
|
+
- Architecture decision records (ADR)
|
|
120
|
+
- API specifications (OpenAPI/TypeScript interfaces)
|
|
121
|
+
- Component diagrams (Mermaid)
|
|
122
|
+
- Implementation guides for other workers
|
|
123
|
+
|
|
124
|
+
## Human-in-the-loop
|
|
125
|
+
|
|
126
|
+
- Present design options with trade-offs
|
|
127
|
+
- Get approval before defining contracts
|
|
128
|
+
- Surface breaking changes clearly
|