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,107 @@
|
|
|
1
|
+
# Skill: CTA Audit
|
|
2
|
+
|
|
3
|
+
Detailed analysis of call-to-action elements across page.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
|
|
7
|
+
Page content JSON with extracted CTAs.
|
|
8
|
+
|
|
9
|
+
## Process
|
|
10
|
+
|
|
11
|
+
1. **Inventory all CTAs**
|
|
12
|
+
- Buttons
|
|
13
|
+
- Text links
|
|
14
|
+
- Form submissions
|
|
15
|
+
- Navigation prompts
|
|
16
|
+
|
|
17
|
+
2. **Classify each CTA**
|
|
18
|
+
- Type (primary, secondary, tertiary)
|
|
19
|
+
- Goal (demo, signup, learn more)
|
|
20
|
+
- Commitment level (high, medium, low)
|
|
21
|
+
|
|
22
|
+
3. **Evaluate each CTA**
|
|
23
|
+
- Copy effectiveness
|
|
24
|
+
- Visual prominence
|
|
25
|
+
- Placement strategy
|
|
26
|
+
- Context appropriateness
|
|
27
|
+
|
|
28
|
+
4. **Assess overall strategy**
|
|
29
|
+
- CTA density
|
|
30
|
+
- Variety balance
|
|
31
|
+
- Journey alignment
|
|
32
|
+
- Conflict detection
|
|
33
|
+
|
|
34
|
+
## CTA Evaluation Criteria
|
|
35
|
+
|
|
36
|
+
### Copy Quality
|
|
37
|
+
- **Excellent**: Benefit-driven, specific outcome ("Start Saving 40% Today")
|
|
38
|
+
- **Good**: Action-oriented with context ("Get Your Free Demo")
|
|
39
|
+
- **Adequate**: Clear but generic ("Request Demo")
|
|
40
|
+
- **Poor**: Vague or passive ("Submit", "Click Here")
|
|
41
|
+
|
|
42
|
+
### Visual Prominence
|
|
43
|
+
- **Excellent**: High contrast, ample whitespace, prominent size
|
|
44
|
+
- **Good**: Noticeable, clear hierarchy
|
|
45
|
+
- **Adequate**: Visible but not prominent
|
|
46
|
+
- **Poor**: Hard to find, blends with content
|
|
47
|
+
|
|
48
|
+
### Placement
|
|
49
|
+
- **Excellent**: At decision points, after value established
|
|
50
|
+
- **Good**: Strategically placed, good density
|
|
51
|
+
- **Adequate**: Present but not optimal
|
|
52
|
+
- **Poor**: Misplaced, too early/late, wrong context
|
|
53
|
+
|
|
54
|
+
## CTA Best Practices
|
|
55
|
+
|
|
56
|
+
### Primary CTA
|
|
57
|
+
- One per viewport
|
|
58
|
+
- High contrast color
|
|
59
|
+
- Benefit-driven copy
|
|
60
|
+
- After value proposition
|
|
61
|
+
|
|
62
|
+
### Secondary CTA
|
|
63
|
+
- Lower commitment option
|
|
64
|
+
- Complement primary
|
|
65
|
+
- Text link or ghost button
|
|
66
|
+
- Different action/audience
|
|
67
|
+
|
|
68
|
+
### Micro-CTAs
|
|
69
|
+
- Content engagement
|
|
70
|
+
- Social sharing
|
|
71
|
+
- Navigation helpers
|
|
72
|
+
- Lead nurturing
|
|
73
|
+
|
|
74
|
+
## Output
|
|
75
|
+
|
|
76
|
+
```yaml
|
|
77
|
+
cta_audit:
|
|
78
|
+
total_count: 6
|
|
79
|
+
breakdown:
|
|
80
|
+
primary: 2
|
|
81
|
+
secondary: 3
|
|
82
|
+
tertiary: 1
|
|
83
|
+
inventory:
|
|
84
|
+
- text: "Get a Demo"
|
|
85
|
+
type: "primary"
|
|
86
|
+
location: "hero"
|
|
87
|
+
rating: "A"
|
|
88
|
+
notes: "Well-placed, clear action"
|
|
89
|
+
- text: "Learn More"
|
|
90
|
+
type: "secondary"
|
|
91
|
+
location: "features"
|
|
92
|
+
rating: "C"
|
|
93
|
+
notes: "Generic copy, could be more specific"
|
|
94
|
+
- text: "Submit"
|
|
95
|
+
type: "primary"
|
|
96
|
+
location: "form"
|
|
97
|
+
rating: "D"
|
|
98
|
+
notes: "Generic, no benefit stated"
|
|
99
|
+
issues:
|
|
100
|
+
- "Two primary CTAs compete in hero section"
|
|
101
|
+
- "Form CTA uses generic 'Submit' text"
|
|
102
|
+
- "No CTA in pricing section"
|
|
103
|
+
recommendations:
|
|
104
|
+
- "Change 'Submit' to 'Start My Free Trial'"
|
|
105
|
+
- "Add secondary CTA to pricing comparison"
|
|
106
|
+
- "Consolidate hero CTAs to single primary"
|
|
107
|
+
```
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Skill: Value Proposition Check
|
|
2
|
+
|
|
3
|
+
Assess value proposition clarity, differentiation, and impact.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
|
|
7
|
+
- Page content JSON
|
|
8
|
+
- Brand messaging guidelines
|
|
9
|
+
- Competitor positioning (if available)
|
|
10
|
+
|
|
11
|
+
## Process
|
|
12
|
+
|
|
13
|
+
1. **Identify value proposition elements**
|
|
14
|
+
- Headline/tagline
|
|
15
|
+
- Subheadline
|
|
16
|
+
- Supporting points
|
|
17
|
+
- Proof elements
|
|
18
|
+
|
|
19
|
+
2. **Evaluate core components**
|
|
20
|
+
- What: Product/service clarity
|
|
21
|
+
- Who: Target audience specificity
|
|
22
|
+
- Why: Benefit articulation
|
|
23
|
+
- How: Differentiation
|
|
24
|
+
|
|
25
|
+
3. **Assess communication**
|
|
26
|
+
- Clarity (instantly understood?)
|
|
27
|
+
- Specificity (concrete vs vague?)
|
|
28
|
+
- Credibility (provable?)
|
|
29
|
+
- Memorability (sticky?)
|
|
30
|
+
|
|
31
|
+
4. **Score effectiveness**
|
|
32
|
+
- Component presence
|
|
33
|
+
- Communication quality
|
|
34
|
+
- Strategic alignment
|
|
35
|
+
|
|
36
|
+
## Value Proposition Framework
|
|
37
|
+
|
|
38
|
+
### Essential Components
|
|
39
|
+
|
|
40
|
+
| Component | Question | Good Example | Bad Example |
|
|
41
|
+
|-----------|----------|--------------|-------------|
|
|
42
|
+
| What | What do you offer? | "AI-powered banking assistant" | "Next-gen solution" |
|
|
43
|
+
| Who | Who is it for? | "Community banks and credit unions" | "Businesses everywhere" |
|
|
44
|
+
| Why | Why does it matter? | "Reduce call center volume 40%" | "Transform your operations" |
|
|
45
|
+
| How | How is it different? | "Only AI trained on banking regulations" | "Industry-leading technology" |
|
|
46
|
+
|
|
47
|
+
### Quality Indicators
|
|
48
|
+
|
|
49
|
+
**Clarity**
|
|
50
|
+
- Understood in <5 seconds
|
|
51
|
+
- No jargon required
|
|
52
|
+
- Specific, not abstract
|
|
53
|
+
|
|
54
|
+
**Specificity**
|
|
55
|
+
- Numbers over adjectives
|
|
56
|
+
- Outcomes over features
|
|
57
|
+
- Examples over generalizations
|
|
58
|
+
|
|
59
|
+
**Credibility**
|
|
60
|
+
- Backed by proof
|
|
61
|
+
- Realistic claims
|
|
62
|
+
- Third-party validation
|
|
63
|
+
|
|
64
|
+
**Differentiation**
|
|
65
|
+
- Unique vs competitors
|
|
66
|
+
- Ownable position
|
|
67
|
+
- Clear alternative
|
|
68
|
+
|
|
69
|
+
## Scoring Rubric
|
|
70
|
+
|
|
71
|
+
| Score | Description |
|
|
72
|
+
|-------|-------------|
|
|
73
|
+
| 90-100 | Exceptional - all components strong, differentiated |
|
|
74
|
+
| 70-89 | Good - most components present, some gaps |
|
|
75
|
+
| 50-69 | Adequate - basic value prop, weak differentiation |
|
|
76
|
+
| 30-49 | Poor - unclear or missing key components |
|
|
77
|
+
| 0-29 | Failed - no clear value proposition |
|
|
78
|
+
|
|
79
|
+
## Output
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
value_prop_score: 78
|
|
83
|
+
headline_analysis:
|
|
84
|
+
text: "AI That Understands Banking"
|
|
85
|
+
clarity: 85
|
|
86
|
+
specificity: 70
|
|
87
|
+
differentiation: 80
|
|
88
|
+
issues:
|
|
89
|
+
- "Could be more specific about outcomes"
|
|
90
|
+
components:
|
|
91
|
+
what:
|
|
92
|
+
present: true
|
|
93
|
+
score: 80
|
|
94
|
+
evidence: "AI-powered platform"
|
|
95
|
+
who:
|
|
96
|
+
present: true
|
|
97
|
+
score: 85
|
|
98
|
+
evidence: "Banks and credit unions"
|
|
99
|
+
why:
|
|
100
|
+
present: true
|
|
101
|
+
score: 70
|
|
102
|
+
evidence: "Benefits mentioned but not quantified"
|
|
103
|
+
how:
|
|
104
|
+
present: false
|
|
105
|
+
score: 40
|
|
106
|
+
evidence: "Differentiation unclear"
|
|
107
|
+
recommendations:
|
|
108
|
+
- priority: "high"
|
|
109
|
+
issue: "Missing differentiation"
|
|
110
|
+
suggestion: "Add 'Only AI trained on 10,000+ banking regulations'"
|
|
111
|
+
- priority: "medium"
|
|
112
|
+
issue: "Vague benefits"
|
|
113
|
+
suggestion: "Quantify outcomes: 'Reduce call volume 40%'"
|
|
114
|
+
```
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
worker:
|
|
2
|
+
id: content-sales
|
|
3
|
+
name: "Content Worker - Conversion Copy"
|
|
4
|
+
type: ContentWorker
|
|
5
|
+
version: "1.0"
|
|
6
|
+
|
|
7
|
+
execution:
|
|
8
|
+
mode: on_demand
|
|
9
|
+
max_runtime: 5m
|
|
10
|
+
|
|
11
|
+
context:
|
|
12
|
+
base:
|
|
13
|
+
- workers/public/content-sales/
|
|
14
|
+
- workers/public/content-shared/
|
|
15
|
+
- companies/example-company/knowledge/verticals/
|
|
16
|
+
- companies/example-company/knowledge/campaign-playbook.md
|
|
17
|
+
exclude:
|
|
18
|
+
- node_modules/
|
|
19
|
+
- dist/
|
|
20
|
+
|
|
21
|
+
output:
|
|
22
|
+
destination: workspace/reports/content/
|
|
23
|
+
format: markdown
|
|
24
|
+
naming: "{date}-content-sales-{page}.md"
|
|
25
|
+
|
|
26
|
+
skills:
|
|
27
|
+
- conversion-analysis
|
|
28
|
+
- cta-audit
|
|
29
|
+
- value-prop-check
|
|
30
|
+
|
|
31
|
+
instructions: |
|
|
32
|
+
Conversion Copy Analyst for ExampleCo
|
|
33
|
+
|
|
34
|
+
Purpose: Analyze content for conversion optimization, CTA effectiveness, and value proposition clarity.
|
|
35
|
+
|
|
36
|
+
## Analysis Process
|
|
37
|
+
1. Load page content from content/ directory
|
|
38
|
+
2. Identify conversion goals for page type
|
|
39
|
+
3. Audit CTAs, value props, and persuasion elements
|
|
40
|
+
4. Score and recommend improvements
|
|
41
|
+
|
|
42
|
+
## Page Conversion Goals
|
|
43
|
+
- Homepage: Demo request, explore products
|
|
44
|
+
- Product pages: Feature understanding, demo request
|
|
45
|
+
- Solutions pages: Vertical-specific demo, case study download
|
|
46
|
+
- Pricing: Plan selection, sales contact
|
|
47
|
+
- Resources: Content download, newsletter signup
|
|
48
|
+
|
|
49
|
+
## Scoring Categories
|
|
50
|
+
- CTA effectiveness (0-100): Clear, compelling, well-placed
|
|
51
|
+
- Value proposition clarity (0-100): Benefits clear, differentiated
|
|
52
|
+
- Persuasion elements (0-100): Social proof, urgency, trust
|
|
53
|
+
- Conversion path (0-100): Clear journey, low friction
|
|
54
|
+
|
|
55
|
+
## CTA Analysis Criteria
|
|
56
|
+
- Visibility: Above fold, contrasting, prominent
|
|
57
|
+
- Clarity: Action clear, outcome stated
|
|
58
|
+
- Motivation: Benefit-driven, low friction
|
|
59
|
+
- Placement: Strategic, contextual
|
|
60
|
+
- Quantity: Not overwhelming, appropriate density
|
|
61
|
+
|
|
62
|
+
## Value Proposition Checklist
|
|
63
|
+
- [ ] Clear what product does
|
|
64
|
+
- [ ] Clear who it's for
|
|
65
|
+
- [ ] Specific benefits stated
|
|
66
|
+
- [ ] Differentiation from alternatives
|
|
67
|
+
- [ ] Proof to support claims
|
|
68
|
+
|
|
69
|
+
## Persuasion Elements
|
|
70
|
+
- Social proof (testimonials, logos, stats)
|
|
71
|
+
- Authority (certifications, awards, press)
|
|
72
|
+
- Scarcity/urgency (when appropriate)
|
|
73
|
+
- Risk reversal (guarantees, trials)
|
|
74
|
+
- Reciprocity (free resources, tools)
|
|
75
|
+
|
|
76
|
+
## Red Flags
|
|
77
|
+
- CTAs below fold only
|
|
78
|
+
- Generic CTA text ("Submit", "Click here")
|
|
79
|
+
- Missing value proposition
|
|
80
|
+
- No social proof
|
|
81
|
+
- Friction in conversion path
|
|
82
|
+
- Too many competing CTAs
|
|
83
|
+
|
|
84
|
+
## Output
|
|
85
|
+
Generate markdown report with:
|
|
86
|
+
- Conversion optimization score
|
|
87
|
+
- CTA inventory and ratings
|
|
88
|
+
- Value prop assessment
|
|
89
|
+
- Prioritized recommendations
|
|
90
|
+
|
|
91
|
+
## Knowledge Dependencies
|
|
92
|
+
- verticals/: Audience-specific messaging
|
|
93
|
+
- campaign-playbook.md: Campaign and conversion strategy
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Content Analysis CLI
|
|
4
|
+
* Entry point for running content analysis from command line
|
|
5
|
+
*
|
|
6
|
+
* Usage: npx content-analyze <page-path> [options]
|
|
7
|
+
*
|
|
8
|
+
* Options:
|
|
9
|
+
* --report Generate markdown report
|
|
10
|
+
* --issues Create GitHub issues (dry-run by default)
|
|
11
|
+
* --cms Submit to CMS
|
|
12
|
+
* --worker Which worker analysis (brand|sales|product|legal|all)
|
|
13
|
+
* --output Output directory
|
|
14
|
+
* --live Disable dry-run mode (actually create issues/submit to CMS)
|
|
15
|
+
* --high-only Only process high-priority items
|
|
16
|
+
* --max Maximum issues to create (default: 10)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import * as fs from 'node:fs';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
import { parsePageFile } from './lib/parser.js';
|
|
22
|
+
import { analyzePageFull, type AnalysisConfig } from './lib/analyze.js';
|
|
23
|
+
import { generateSuggestions } from './lib/recommendations.js';
|
|
24
|
+
import {
|
|
25
|
+
processAnalysisOutput,
|
|
26
|
+
formatOutputResultJSON,
|
|
27
|
+
type OutputConfig,
|
|
28
|
+
} from './lib/output.js';
|
|
29
|
+
|
|
30
|
+
// ============================================
|
|
31
|
+
// CLI Argument Parsing
|
|
32
|
+
// ============================================
|
|
33
|
+
|
|
34
|
+
interface CLIArgs {
|
|
35
|
+
pagePath: string;
|
|
36
|
+
report: boolean;
|
|
37
|
+
issues: boolean;
|
|
38
|
+
cms: boolean;
|
|
39
|
+
worker: 'brand' | 'sales' | 'product' | 'legal' | 'all';
|
|
40
|
+
output: string;
|
|
41
|
+
live: boolean;
|
|
42
|
+
highOnly: boolean;
|
|
43
|
+
max: number;
|
|
44
|
+
help: boolean;
|
|
45
|
+
version: boolean;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function parseArgs(args: string[]): CLIArgs {
|
|
49
|
+
const result: CLIArgs = {
|
|
50
|
+
pagePath: '',
|
|
51
|
+
report: true,
|
|
52
|
+
issues: false,
|
|
53
|
+
cms: false,
|
|
54
|
+
worker: 'all',
|
|
55
|
+
output: 'workspace/reports/content',
|
|
56
|
+
live: false,
|
|
57
|
+
highOnly: false,
|
|
58
|
+
max: 10,
|
|
59
|
+
help: false,
|
|
60
|
+
version: false,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
for (let i = 0; i < args.length; i++) {
|
|
64
|
+
const arg = args[i];
|
|
65
|
+
|
|
66
|
+
if (arg === '--help' || arg === '-h') {
|
|
67
|
+
result.help = true;
|
|
68
|
+
} else if (arg === '--version' || arg === '-v') {
|
|
69
|
+
result.version = true;
|
|
70
|
+
} else if (arg === '--report') {
|
|
71
|
+
result.report = true;
|
|
72
|
+
} else if (arg === '--issues') {
|
|
73
|
+
result.issues = true;
|
|
74
|
+
} else if (arg === '--cms') {
|
|
75
|
+
result.cms = true;
|
|
76
|
+
} else if (arg === '--live') {
|
|
77
|
+
result.live = true;
|
|
78
|
+
} else if (arg === '--high-only') {
|
|
79
|
+
result.highOnly = true;
|
|
80
|
+
} else if (arg === '--worker' && args[i + 1]) {
|
|
81
|
+
const worker = args[++i] as CLIArgs['worker'];
|
|
82
|
+
if (['brand', 'sales', 'product', 'legal', 'all'].includes(worker)) {
|
|
83
|
+
result.worker = worker;
|
|
84
|
+
}
|
|
85
|
+
} else if (arg === '--output' && args[i + 1]) {
|
|
86
|
+
result.output = args[++i];
|
|
87
|
+
} else if (arg === '--max' && args[i + 1]) {
|
|
88
|
+
result.max = parseInt(args[++i], 10) || 10;
|
|
89
|
+
} else if (!arg.startsWith('-') && !result.pagePath) {
|
|
90
|
+
result.pagePath = arg;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function printHelp(): void {
|
|
98
|
+
console.log(`
|
|
99
|
+
Content Analysis CLI
|
|
100
|
+
|
|
101
|
+
Usage:
|
|
102
|
+
npx content-analyze <page-path> [options]
|
|
103
|
+
content-analyze <page-path> [options]
|
|
104
|
+
|
|
105
|
+
Arguments:
|
|
106
|
+
page-path Path to page JSON file (from content extraction)
|
|
107
|
+
|
|
108
|
+
Options:
|
|
109
|
+
--report Generate markdown report (default: true)
|
|
110
|
+
--issues Create GitHub issues (dry-run by default)
|
|
111
|
+
--cms Submit to CMS
|
|
112
|
+
--worker Which analysis to run: brand|sales|product|legal|all (default: all)
|
|
113
|
+
--output Output directory (default: workspace/reports/content)
|
|
114
|
+
--live Disable dry-run mode (actually create issues/submit)
|
|
115
|
+
--high-only Only process high-priority items
|
|
116
|
+
--max N Maximum issues to create (default: 10)
|
|
117
|
+
--help, -h Show this help message
|
|
118
|
+
--version, -v Show version
|
|
119
|
+
|
|
120
|
+
Examples:
|
|
121
|
+
# Analyze a page and generate report
|
|
122
|
+
npx content-analyze ./pages/home.json
|
|
123
|
+
|
|
124
|
+
# Analyze with GitHub issues (dry run)
|
|
125
|
+
npx content-analyze ./pages/pricing.json --issues
|
|
126
|
+
|
|
127
|
+
# Full analysis with CMS submission (live)
|
|
128
|
+
npx content-analyze ./pages/about.json --issues --cms --live
|
|
129
|
+
|
|
130
|
+
# Brand-only analysis
|
|
131
|
+
npx content-analyze ./pages/home.json --worker brand
|
|
132
|
+
|
|
133
|
+
# High priority only with custom output
|
|
134
|
+
npx content-analyze ./pages/home.json --high-only --output ./reports
|
|
135
|
+
`);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function printVersion(): void {
|
|
139
|
+
console.log('@hq/content-shared v1.0.0');
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// ============================================
|
|
143
|
+
// Main CLI Entry Point
|
|
144
|
+
// ============================================
|
|
145
|
+
|
|
146
|
+
async function main(): Promise<void> {
|
|
147
|
+
const args = parseArgs(process.argv.slice(2));
|
|
148
|
+
|
|
149
|
+
if (args.help) {
|
|
150
|
+
printHelp();
|
|
151
|
+
process.exit(0);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (args.version) {
|
|
155
|
+
printVersion();
|
|
156
|
+
process.exit(0);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (!args.pagePath) {
|
|
160
|
+
console.error('Error: Page path is required');
|
|
161
|
+
console.error('Run with --help for usage information');
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Resolve and validate page path
|
|
166
|
+
const pagePath = path.resolve(args.pagePath);
|
|
167
|
+
if (!fs.existsSync(pagePath)) {
|
|
168
|
+
console.error(`Error: File not found: ${pagePath}`);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
console.log(`[CLI] Analyzing: ${pagePath}`);
|
|
173
|
+
console.log(`[CLI] Worker: ${args.worker}`);
|
|
174
|
+
console.log(`[CLI] Mode: ${args.live ? 'LIVE' : 'dry-run'}`);
|
|
175
|
+
console.log('');
|
|
176
|
+
|
|
177
|
+
try {
|
|
178
|
+
// 1. Parse page content
|
|
179
|
+
console.log('[1/4] Parsing page content...');
|
|
180
|
+
const pageContent = await parsePageFile(pagePath);
|
|
181
|
+
|
|
182
|
+
// 2. Configure analysis based on worker type
|
|
183
|
+
const analysisConfig: AnalysisConfig = {
|
|
184
|
+
enableBrand: args.worker === 'all' || args.worker === 'brand',
|
|
185
|
+
enableConversion: args.worker === 'all' || args.worker === 'sales',
|
|
186
|
+
enableAccuracy: args.worker === 'all' || args.worker === 'product',
|
|
187
|
+
enableCompliance: args.worker === 'all' || args.worker === 'legal',
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
console.log('[2/4] Running analysis...');
|
|
191
|
+
const analysis = analyzePageFull(pageContent, analysisConfig);
|
|
192
|
+
|
|
193
|
+
// 3. Generate suggestions
|
|
194
|
+
console.log('[3/4] Generating suggestions...');
|
|
195
|
+
const suggestions = generateSuggestions(analysis);
|
|
196
|
+
console.log(` Found ${suggestions.length} suggestions`);
|
|
197
|
+
|
|
198
|
+
// 4. Process outputs
|
|
199
|
+
console.log('[4/4] Processing outputs...');
|
|
200
|
+
const outputConfig: Partial<OutputConfig> = {
|
|
201
|
+
reportPath: args.output,
|
|
202
|
+
workerName: `content-${args.worker}`,
|
|
203
|
+
enableGitHub: args.issues,
|
|
204
|
+
enableCMS: args.cms,
|
|
205
|
+
maxIssues: args.max,
|
|
206
|
+
highPriorityOnly: args.highOnly,
|
|
207
|
+
dryRun: !args.live,
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const result = await processAnalysisOutput(analysis, outputConfig);
|
|
211
|
+
|
|
212
|
+
// Print results
|
|
213
|
+
console.log('');
|
|
214
|
+
console.log('=== Results ===');
|
|
215
|
+
console.log(`Report: ${result.reportPath || 'Not generated'}`);
|
|
216
|
+
console.log(`GitHub Issues: ${result.issuesCreated}`);
|
|
217
|
+
console.log(`CMS Submissions: ${result.suggestionsSubmitted}`);
|
|
218
|
+
|
|
219
|
+
if (result.errors.length > 0) {
|
|
220
|
+
console.log('');
|
|
221
|
+
console.log('Errors:');
|
|
222
|
+
for (const error of result.errors) {
|
|
223
|
+
console.log(` - ${error}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Output JSON for worker integration
|
|
228
|
+
console.log('');
|
|
229
|
+
console.log('=== JSON Output ===');
|
|
230
|
+
console.log(JSON.stringify(formatOutputResultJSON(result), null, 2));
|
|
231
|
+
|
|
232
|
+
} catch (error) {
|
|
233
|
+
console.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Run if executed directly
|
|
239
|
+
main().catch(error => {
|
|
240
|
+
console.error('Fatal error:', error);
|
|
241
|
+
process.exit(1);
|
|
242
|
+
});
|