heraspec 0.1.14 → 0.1.15
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/LICENSE +187 -0
- package/README.md +94 -95
- package/bin/heraspec.js +195 -80
- package/bin/heraspec.js.map +2 -2
- package/dist/core/templates/skills/README.md +41 -38
- package/dist/core/templates/skills/campaign-plan/skill.md +76 -0
- package/dist/core/templates/skills/campaign-plan/skill.vi.md +76 -0
- package/dist/core/templates/skills/campaign-plan-skill.md +76 -0
- package/dist/core/templates/skills/campaign-plan-skill.vi.md +76 -0
- package/dist/core/templates/skills/code-review/skill.md +70 -0
- package/dist/core/templates/skills/code-review/skill.vi.md +70 -0
- package/dist/core/templates/skills/code-review-skill.md +70 -0
- package/dist/core/templates/skills/code-review-skill.vi.md +70 -0
- package/dist/core/templates/skills/content-creation/skill.md +69 -0
- package/dist/core/templates/skills/content-creation/skill.vi.md +69 -0
- package/dist/core/templates/skills/content-creation-skill.md +69 -0
- package/dist/core/templates/skills/content-creation-skill.vi.md +69 -0
- package/dist/core/templates/skills/content-optimization/skill.md +104 -0
- package/dist/core/templates/skills/debug/skill.md +69 -0
- package/dist/core/templates/skills/debug/skill.vi.md +69 -0
- package/dist/core/templates/skills/debug-skill.md +69 -0
- package/dist/core/templates/skills/debug-skill.vi.md +69 -0
- package/dist/core/templates/skills/deploy-documentation/skill.md +408 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/airbnb/DESIGN.md +246 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/airtable/DESIGN.md +89 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/apple/DESIGN.md +313 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/bmw/DESIGN.md +180 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/cal/DESIGN.md +259 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/claude/DESIGN.md +312 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/clay/DESIGN.md +304 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/clickhouse/DESIGN.md +281 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/cohere/DESIGN.md +266 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/coinbase/DESIGN.md +129 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/composio/DESIGN.md +307 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/cursor/DESIGN.md +309 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/elevenlabs/DESIGN.md +265 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/expo/DESIGN.md +281 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/figma/DESIGN.md +220 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/framer/DESIGN.md +246 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/hashicorp/DESIGN.md +278 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/ibm/DESIGN.md +332 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/index.json +72 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/intercom/DESIGN.md +146 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/kraken/DESIGN.md +125 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/linear.app/DESIGN.md +367 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/lovable/DESIGN.md +298 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/minimax/DESIGN.md +257 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/mintlify/DESIGN.md +326 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/miro/DESIGN.md +108 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/mistral.ai/DESIGN.md +261 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/mongodb/DESIGN.md +266 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/notion/DESIGN.md +309 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/nvidia/DESIGN.md +293 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/ollama/DESIGN.md +267 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/opencode.ai/DESIGN.md +281 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/pinterest/DESIGN.md +230 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/posthog/DESIGN.md +256 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/raycast/DESIGN.md +268 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/replicate/DESIGN.md +261 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/resend/DESIGN.md +303 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/revolut/DESIGN.md +185 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/runwayml/DESIGN.md +244 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/sanity/DESIGN.md +357 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/sentry/DESIGN.md +262 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/spacex/DESIGN.md +194 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/spotify/DESIGN.md +246 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/stripe/DESIGN.md +322 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/supabase/DESIGN.md +255 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/superhuman/DESIGN.md +252 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/together.ai/DESIGN.md +263 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/uber/DESIGN.md +295 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/vercel/DESIGN.md +310 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/voltagent/DESIGN.md +323 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/warp/DESIGN.md +253 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/webflow/DESIGN.md +92 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/wise/DESIGN.md +173 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/x.ai/DESIGN.md +257 -0
- package/dist/core/templates/skills/design-system/knowledge/design-systems/zapier/DESIGN.md +328 -0
- package/dist/core/templates/skills/design-system/skill.md +176 -0
- package/dist/core/templates/skills/documents/skill.md +104 -0
- package/dist/core/templates/skills/e2e-test/skill.md +119 -0
- package/dist/core/templates/skills/email-sequence/skill.md +68 -0
- package/dist/core/templates/skills/email-sequence/skill.vi.md +68 -0
- package/dist/core/templates/skills/email-sequence-skill.md +68 -0
- package/dist/core/templates/skills/email-sequence-skill.vi.md +68 -0
- package/dist/core/templates/skills/git-embed/skill.md +57 -0
- package/dist/core/templates/skills/integration-test/skill.md +118 -0
- package/dist/core/templates/skills/knowledge/README.md +63 -63
- package/dist/core/templates/skills/knowledge/design-systems/index.json +72 -72
- package/dist/core/templates/skills/knowledge/frameworks/php/codeigniter/rise-cms/profile.json +27 -27
- package/dist/core/templates/skills/knowledge/frameworks/php/codeigniter/rise-cms/structure.md +137 -137
- package/dist/core/templates/skills/knowledge/frameworks/php/laravel/botble/profile.json +39 -39
- package/dist/core/templates/skills/knowledge/frameworks/php/laravel/botble/structure.md +207 -207
- package/dist/core/templates/skills/knowledge/frameworks/php/wordpress/core/profile.json +51 -51
- package/dist/core/templates/skills/knowledge/frameworks/php/wordpress/core/structure.md +369 -369
- package/dist/core/templates/skills/knowledge/index.json +65 -65
- package/dist/core/templates/skills/perfex-module/module-codebase/skill.md +110 -0
- package/dist/core/templates/skills/project-memory/skill.md +222 -0
- package/dist/core/templates/skills/project-memory/skill.vi.md +223 -0
- package/dist/core/templates/skills/seo-audit/skill.md +75 -0
- package/dist/core/templates/skills/seo-audit/skill.vi.md +75 -0
- package/dist/core/templates/skills/seo-audit-skill.md +75 -0
- package/dist/core/templates/skills/seo-audit-skill.vi.md +75 -0
- package/dist/core/templates/skills/smart-explore/skill.md +141 -0
- package/dist/core/templates/skills/sourcecode-analyzer/skill.md +210 -0
- package/dist/core/templates/skills/sourcecode-analyzer/skill.vi.md +210 -0
- package/dist/core/templates/skills/spec-writer/skill.md +61 -0
- package/dist/core/templates/skills/spec-writer/skill.vi.md +61 -0
- package/dist/core/templates/skills/spec-writer-skill.md +61 -0
- package/dist/core/templates/skills/spec-writer-skill.vi.md +61 -0
- package/dist/core/templates/skills/sql-queries/skill.md +67 -0
- package/dist/core/templates/skills/sql-queries/skill.vi.md +67 -0
- package/dist/core/templates/skills/sql-queries-skill.md +67 -0
- package/dist/core/templates/skills/sql-queries-skill.vi.md +67 -0
- package/dist/core/templates/skills/suggestion/skill.md +118 -0
- package/dist/core/templates/skills/system-design/skill.md +70 -0
- package/dist/core/templates/skills/system-design/skill.vi.md +70 -0
- package/dist/core/templates/skills/system-design-skill.md +70 -0
- package/dist/core/templates/skills/system-design-skill.vi.md +70 -0
- package/dist/core/templates/skills/tech-debt/skill.md +70 -0
- package/dist/core/templates/skills/tech-debt/skill.vi.md +70 -0
- package/dist/core/templates/skills/tech-debt-skill.md +70 -0
- package/dist/core/templates/skills/tech-debt-skill.vi.md +70 -0
- package/dist/core/templates/skills/ui-ux/data/charts.csv +26 -0
- package/dist/core/templates/skills/ui-ux/data/colors.csv +97 -0
- package/dist/core/templates/skills/ui-ux/data/design-systems.csv +54 -0
- package/dist/core/templates/skills/ui-ux/data/landing.csv +31 -0
- package/dist/core/templates/skills/ui-ux/data/pages-proposed.csv +22 -0
- package/dist/core/templates/skills/ui-ux/data/pages.csv +10 -0
- package/dist/core/templates/skills/ui-ux/data/products.csv +97 -0
- package/dist/core/templates/skills/ui-ux/data/prompts.csv +24 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/flutter.csv +53 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/html-tailwind.csv +56 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/nextjs.csv +53 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/react-native.csv +52 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/react.csv +54 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/svelte.csv +54 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/swiftui.csv +51 -0
- package/dist/core/templates/skills/ui-ux/data/stacks/vue.csv +50 -0
- package/dist/core/templates/skills/ui-ux/data/styles.csv +59 -0
- package/dist/core/templates/skills/ui-ux/data/typography.csv +58 -0
- package/dist/core/templates/skills/ui-ux/data/ux-guidelines.csv +100 -0
- package/dist/core/templates/skills/ui-ux/scripts/CODE_EXPLANATION.md +394 -0
- package/dist/core/templates/skills/ui-ux/scripts/SEARCH_ALGORITHMS_COMPARISON.md +421 -0
- package/dist/core/templates/skills/ui-ux/scripts/SEARCH_MODES_GUIDE.md +238 -0
- package/dist/core/templates/skills/ui-ux/scripts/core.py +391 -0
- package/dist/core/templates/skills/ui-ux/scripts/search.py +73 -0
- package/dist/core/templates/skills/ui-ux/skill.md +595 -0
- package/dist/core/templates/skills/ui-ux/templates/accessibility-checklist.md +40 -0
- package/dist/core/templates/skills/ui-ux/templates/example-prompt-full-theme.md +333 -0
- package/dist/core/templates/skills/ui-ux/templates/page-types-guide.md +338 -0
- package/dist/core/templates/skills/ui-ux/templates/pages-proposed-summary.md +273 -0
- package/dist/core/templates/skills/ui-ux/templates/pre-delivery-checklist.md +42 -0
- package/dist/core/templates/skills/ui-ux/templates/prompt-template-full-theme.md +313 -0
- package/dist/core/templates/skills/ui-ux/templates/responsive-design.md +40 -0
- package/dist/core/templates/skills/unit-test/skill.md +111 -0
- package/dist/core/templates/skills/wordpress/plugin-check/skill.md +151 -0
- package/dist/core/templates/skills/wordpress/plugin-directory/skill.md +396 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/skill.md +100 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/templates/admin-dashboard.php +47 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/templates/admin-settings.php +60 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/templates/assets/admin-css.css +22 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/templates/assets/admin-js.js +15 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/templates/plugin-main.php +169 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/templates/readme.txt +41 -0
- package/dist/core/templates/skills/wordpress/plugin-standard/templates/uninstall.php +21 -0
- package/dist/core/templates/skills/wordpress/ux-element/skill.md +83 -0
- package/dist/core/templates/skills/wordpress/ux-element/templates/Controller.php +50 -0
- package/dist/core/templates/skills/wordpress/ux-element/templates/Shortcode.php +23 -0
- package/dist/core/templates/skills/wordpress/ux-element/templates/Template.html +20 -0
- package/dist/core/templates/skills/wordpress/ux-element/templates/Thumbnail.svg +8 -0
- package/dist/core/templates/skills/wordpress/ux-element/templates/View.php +21 -0
- package/dist/index.js +195 -79
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Frontend view for {{ElementName}}
|
|
4
|
+
*
|
|
5
|
+
* @var array $atts
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
$classes = array('{{class_prefix}}{{element_slug}}');
|
|
9
|
+
if (!empty($atts['class'])) $classes[] = $atts['class'];
|
|
10
|
+
if (!empty($atts['visibility'])) $classes[] = $atts['visibility'];
|
|
11
|
+
|
|
12
|
+
$inline_style = '';
|
|
13
|
+
if (!empty($atts['textColor'])) $inline_style .= 'color: ' . esc_attr($atts['textColor']) . ';';
|
|
14
|
+
if (!empty($atts['bgColor'])) $inline_style .= 'background-color: ' . esc_attr($atts['bgColor']) . ';';
|
|
15
|
+
|
|
16
|
+
?>
|
|
17
|
+
<div id="<?php echo esc_attr($atts['_id']); ?>"
|
|
18
|
+
class="<?php echo esc_attr(implode(' ', $classes)); ?>"
|
|
19
|
+
style="<?php echo esc_attr($inline_style); ?>">
|
|
20
|
+
<?php echo esc_html($atts['title']); ?>
|
|
21
|
+
</div>
|
package/dist/index.js
CHANGED
|
@@ -294,95 +294,145 @@ var init_skills_template_map = __esm({
|
|
|
294
294
|
SKILL_TEMPLATE_MAP = {
|
|
295
295
|
// Cross-cutting skills
|
|
296
296
|
"ui-ux": {
|
|
297
|
-
templateFileName: "ui-ux
|
|
297
|
+
templateFileName: "ui-ux/skill.md",
|
|
298
298
|
isCrossCutting: true,
|
|
299
|
-
resourceDirs: ["scripts", "templates", "data"]
|
|
299
|
+
resourceDirs: ["ui-ux/scripts", "ui-ux/templates", "ui-ux/data"]
|
|
300
300
|
},
|
|
301
301
|
"design-system": {
|
|
302
|
-
templateFileName: "design-system
|
|
302
|
+
templateFileName: "design-system/skill.md",
|
|
303
303
|
isCrossCutting: true,
|
|
304
|
-
resourceDirs: ["scripts", "data", "knowledge/design-systems"]
|
|
304
|
+
resourceDirs: ["ui-ux/scripts", "ui-ux/data", "design-system/knowledge/design-systems"]
|
|
305
305
|
},
|
|
306
306
|
"documents": {
|
|
307
|
-
templateFileName: "documents
|
|
307
|
+
templateFileName: "documents/skill.md",
|
|
308
308
|
isCrossCutting: true,
|
|
309
309
|
resourceDirs: ["documents/templates"]
|
|
310
310
|
},
|
|
311
311
|
"content-optimization": {
|
|
312
|
-
templateFileName: "content-optimization
|
|
312
|
+
templateFileName: "content-optimization/skill.md",
|
|
313
313
|
isCrossCutting: true
|
|
314
314
|
},
|
|
315
315
|
"unit-test": {
|
|
316
|
-
templateFileName: "unit-test
|
|
316
|
+
templateFileName: "unit-test/skill.md",
|
|
317
317
|
isCrossCutting: true
|
|
318
318
|
},
|
|
319
319
|
"integration-test": {
|
|
320
|
-
templateFileName: "integration-test
|
|
320
|
+
templateFileName: "integration-test/skill.md",
|
|
321
321
|
isCrossCutting: true
|
|
322
322
|
},
|
|
323
323
|
"e2e-test": {
|
|
324
|
-
templateFileName: "e2e-test
|
|
324
|
+
templateFileName: "e2e-test/skill.md",
|
|
325
325
|
isCrossCutting: true
|
|
326
326
|
},
|
|
327
327
|
"suggestion": {
|
|
328
|
-
templateFileName: "suggestion
|
|
328
|
+
templateFileName: "suggestion/skill.md",
|
|
329
329
|
isCrossCutting: true
|
|
330
330
|
},
|
|
331
331
|
"sourcecode-analyzer": {
|
|
332
|
-
templateFileName: "sourcecode-analyzer
|
|
332
|
+
templateFileName: "sourcecode-analyzer/skill.md",
|
|
333
333
|
isCrossCutting: true,
|
|
334
|
-
viFileName: "sourcecode-analyzer
|
|
334
|
+
viFileName: "sourcecode-analyzer/skill.vi.md"
|
|
335
335
|
},
|
|
336
336
|
"project-memory": {
|
|
337
|
-
templateFileName: "project-memory
|
|
338
|
-
viFileName: "project-memory
|
|
337
|
+
templateFileName: "project-memory/skill.md",
|
|
338
|
+
viFileName: "project-memory/skill.vi.md",
|
|
339
339
|
isCrossCutting: true
|
|
340
340
|
},
|
|
341
341
|
"smart-explore": {
|
|
342
|
-
templateFileName: "smart-explore
|
|
342
|
+
templateFileName: "smart-explore/skill.md",
|
|
343
343
|
isCrossCutting: true
|
|
344
344
|
},
|
|
345
345
|
"deploy-documentation": {
|
|
346
|
-
templateFileName: "deploy-documentation
|
|
346
|
+
templateFileName: "deploy-documentation/skill.md",
|
|
347
347
|
isCrossCutting: true,
|
|
348
|
-
resourceDirs: ["templates"]
|
|
348
|
+
resourceDirs: ["ui-ux/templates"]
|
|
349
|
+
},
|
|
350
|
+
"code-review": {
|
|
351
|
+
templateFileName: "code-review/skill.md",
|
|
352
|
+
viFileName: "code-review/skill.vi.md",
|
|
353
|
+
isCrossCutting: true
|
|
354
|
+
},
|
|
355
|
+
"debug": {
|
|
356
|
+
templateFileName: "debug/skill.md",
|
|
357
|
+
viFileName: "debug/skill.vi.md",
|
|
358
|
+
isCrossCutting: true
|
|
359
|
+
},
|
|
360
|
+
"system-design": {
|
|
361
|
+
templateFileName: "system-design/skill.md",
|
|
362
|
+
viFileName: "system-design/skill.vi.md",
|
|
363
|
+
isCrossCutting: true
|
|
364
|
+
},
|
|
365
|
+
"tech-debt": {
|
|
366
|
+
templateFileName: "tech-debt/skill.md",
|
|
367
|
+
viFileName: "tech-debt/skill.vi.md",
|
|
368
|
+
isCrossCutting: true
|
|
369
|
+
},
|
|
370
|
+
"spec-writer": {
|
|
371
|
+
templateFileName: "spec-writer/skill.md",
|
|
372
|
+
viFileName: "spec-writer/skill.vi.md",
|
|
373
|
+
isCrossCutting: true
|
|
374
|
+
},
|
|
375
|
+
"seo-audit": {
|
|
376
|
+
templateFileName: "seo-audit/skill.md",
|
|
377
|
+
viFileName: "seo-audit/skill.vi.md",
|
|
378
|
+
isCrossCutting: true
|
|
379
|
+
},
|
|
380
|
+
"campaign-plan": {
|
|
381
|
+
templateFileName: "campaign-plan/skill.md",
|
|
382
|
+
viFileName: "campaign-plan/skill.vi.md",
|
|
383
|
+
isCrossCutting: true
|
|
384
|
+
},
|
|
385
|
+
"content-creation": {
|
|
386
|
+
templateFileName: "content-creation/skill.md",
|
|
387
|
+
viFileName: "content-creation/skill.vi.md",
|
|
388
|
+
isCrossCutting: true
|
|
389
|
+
},
|
|
390
|
+
"email-sequence": {
|
|
391
|
+
templateFileName: "email-sequence/skill.md",
|
|
392
|
+
viFileName: "email-sequence/skill.vi.md",
|
|
393
|
+
isCrossCutting: true
|
|
394
|
+
},
|
|
395
|
+
"sql-queries": {
|
|
396
|
+
templateFileName: "sql-queries/skill.md",
|
|
397
|
+
viFileName: "sql-queries/skill.vi.md",
|
|
398
|
+
isCrossCutting: true
|
|
349
399
|
},
|
|
350
400
|
// Perfex module skills
|
|
351
401
|
"perfex-module:module-codebase": {
|
|
352
|
-
templateFileName: "module-codebase
|
|
402
|
+
templateFileName: "perfex-module/module-codebase/skill.md",
|
|
353
403
|
isCrossCutting: false,
|
|
354
404
|
projectType: "perfex-module"
|
|
355
405
|
},
|
|
356
406
|
"wordpress:ux-element": {
|
|
357
|
-
templateFileName: "ux-element
|
|
407
|
+
templateFileName: "wordpress/ux-element/skill.md",
|
|
358
408
|
isCrossCutting: false,
|
|
359
409
|
projectType: "wordpress",
|
|
360
|
-
resourceDirs: ["ux-element/templates"]
|
|
410
|
+
resourceDirs: ["wordpress/ux-element/templates"]
|
|
361
411
|
},
|
|
362
412
|
"wordpress:plugin-standard": {
|
|
363
|
-
templateFileName: "wordpress
|
|
413
|
+
templateFileName: "wordpress/plugin-standard/skill.md",
|
|
364
414
|
isCrossCutting: false,
|
|
365
415
|
projectType: "wordpress",
|
|
366
|
-
resourceDirs: ["wordpress
|
|
416
|
+
resourceDirs: ["wordpress/plugin-standard/templates"]
|
|
367
417
|
},
|
|
368
418
|
"wordpress:plugin-check": {
|
|
369
|
-
templateFileName: "wordpress
|
|
419
|
+
templateFileName: "wordpress/plugin-check/skill.md",
|
|
370
420
|
isCrossCutting: false,
|
|
371
421
|
projectType: "wordpress"
|
|
372
422
|
},
|
|
373
423
|
"wordpress:plugin-directory": {
|
|
374
|
-
templateFileName: "plugin-directory
|
|
424
|
+
templateFileName: "wordpress/plugin-directory/skill.md",
|
|
375
425
|
isCrossCutting: false,
|
|
376
426
|
projectType: "wordpress"
|
|
377
427
|
},
|
|
378
428
|
// WordPress Plugin specific (matches PROJECT_TYPES)
|
|
379
429
|
"wordpress-plugin:plugin-check": {
|
|
380
|
-
templateFileName: "wordpress
|
|
430
|
+
templateFileName: "wordpress/plugin-check/skill.md",
|
|
381
431
|
isCrossCutting: false,
|
|
382
432
|
projectType: "wordpress-plugin"
|
|
383
433
|
},
|
|
384
434
|
"wordpress-plugin:plugin-directory": {
|
|
385
|
-
templateFileName: "plugin-directory
|
|
435
|
+
templateFileName: "wordpress/plugin-directory/skill.md",
|
|
386
436
|
isCrossCutting: false,
|
|
387
437
|
projectType: "wordpress-plugin"
|
|
388
438
|
}
|
|
@@ -3156,7 +3206,7 @@ var init_skill = __esm({
|
|
|
3156
3206
|
if (templateInfo.resourceDirs) {
|
|
3157
3207
|
for (const resourceDir of templateInfo.resourceDirs) {
|
|
3158
3208
|
const srcResourceDir = path7.join(coreTemplatesDir, resourceDir);
|
|
3159
|
-
const destResourceDir = path7.join(destPath, resourceDir);
|
|
3209
|
+
const destResourceDir = path7.join(destPath, path7.basename(resourceDir));
|
|
3160
3210
|
if (await FileSystemUtils.fileExists(srcResourceDir)) {
|
|
3161
3211
|
await FileSystemUtils.copyDirectory(srcResourceDir, destResourceDir);
|
|
3162
3212
|
}
|
|
@@ -3312,6 +3362,7 @@ This document defines the workflow for AI agents working with HeraSpec.
|
|
|
3312
3362
|
- **SKILL PREREQUISITE**: If a task maps to a skill (e.g., "Generate documentation"), you **MUST** verify the skill folder exists in \`heraspec/skills/\`. If missing:
|
|
3313
3363
|
- **Preferred**: Proactively install it via \`heraspec skill add <name>\` (e.g., \`heraspec skill add documents\`) if you have terminal access.
|
|
3314
3364
|
- **Fallback**: If you cannot install it, **STOP** and ask the user to add it. **DO NOT** attempt manual generation without the skill.
|
|
3365
|
+
- **IGNORE VIETNAMESE SKILL FILES**: When reading and executing skill workflows, you **MUST ONLY** look at the English version of the skill instructions (e.g., \`skill.md\`). You **MUST completely ignore** all Vietnamese versions (e.g., \`skill.vi.md\` or files ending with \`*.vi.md\`). These Vietnamese files are for reference/development purposes by the user only.
|
|
3315
3366
|
- **USER CONFIRMATION**: For destructive actions or public releases, always request explicit User approval first.
|
|
3316
3367
|
|
|
3317
3368
|
### Restricted Commands (REQUIRE USER CONFIRMATION)
|
|
@@ -3402,6 +3453,7 @@ The following commands are classified by risk level. You **MUST NOT** execute th
|
|
|
3402
3453
|
- Understand purpose, steps, inputs, outputs
|
|
3403
3454
|
- Follow tone, rules, and limitations
|
|
3404
3455
|
- Check available templates and scripts
|
|
3456
|
+
- **Ignore Vietnamese Skill Files**: Only read the English \`skill.md\` instructions. Completely ignore any \`*.vi.md\` translation files.
|
|
3405
3457
|
|
|
3406
3458
|
4. **Use skill resources**:
|
|
3407
3459
|
- Run scripts from \`scripts/\` folder if needed
|
|
@@ -3608,6 +3660,7 @@ If \\\`heraspec/skills/smart-explore/\\\` exists, prefer token-efficient explora
|
|
|
3608
3660
|
> heraspec skill add documents"
|
|
3609
3661
|
- **DO NOT** create a task plan or attempt manual generation without the skill language.
|
|
3610
3662
|
3. **Execute After Install**: Only after the skill folder is created (or installed), read the \`skill.md\` and proceed with the task.
|
|
3663
|
+
4. **Ignore Vietnamese Skill Files**: You MUST only read the English \`skill.md\` file inside the skill folder. Completely ignore all \`*.vi.md\` files (e.g., \`skill.vi.md\`), as they are strictly for reference purposes by human developers.
|
|
3611
3664
|
|
|
3612
3665
|
**Example prompt for Documents skill:**
|
|
3613
3666
|
If you need to generate multi-format documentation, use this prompt:
|
|
@@ -3974,20 +4027,86 @@ ${section.content.trimEnd()}`);
|
|
|
3974
4027
|
}
|
|
3975
4028
|
}
|
|
3976
4029
|
/**
|
|
3977
|
-
*
|
|
4030
|
+
* Find the index of the next top-level H2 section in the markdown content.
|
|
4031
|
+
* Tracks fenced code blocks to ignore H2 headers inside code blocks.
|
|
4032
|
+
*/
|
|
4033
|
+
findSectionEndIndex(content, startIndex) {
|
|
4034
|
+
const lines = content.substring(startIndex).split(/\r?\n/);
|
|
4035
|
+
let offset = startIndex;
|
|
4036
|
+
let inCodeBlock = false;
|
|
4037
|
+
for (let i = 0; i < lines.length; i++) {
|
|
4038
|
+
const line = lines[i];
|
|
4039
|
+
const lineLengthWithNewline = line.length + (content.charAt(offset + line.length) === "\r" ? 2 : 1);
|
|
4040
|
+
if (i === 0) {
|
|
4041
|
+
offset += lineLengthWithNewline;
|
|
4042
|
+
continue;
|
|
4043
|
+
}
|
|
4044
|
+
if (line.trim().startsWith("```")) {
|
|
4045
|
+
inCodeBlock = !inCodeBlock;
|
|
4046
|
+
}
|
|
4047
|
+
if (!inCodeBlock && line.startsWith("## ")) {
|
|
4048
|
+
return offset;
|
|
4049
|
+
}
|
|
4050
|
+
offset += lineLengthWithNewline;
|
|
4051
|
+
}
|
|
4052
|
+
return content.length;
|
|
4053
|
+
}
|
|
4054
|
+
/**
|
|
4055
|
+
* Finds the start index of the next standard section in the sequence.
|
|
4056
|
+
* This is used to replace the entire section cleanly, even if there are internal H2s or duplicates.
|
|
3978
4057
|
*/
|
|
3979
|
-
|
|
4058
|
+
findNextSectionIndex(content, startIndex, currentHeader) {
|
|
4059
|
+
const sectionsOrder = [
|
|
4060
|
+
["## Universal Safety Rules"],
|
|
4061
|
+
["## Core Workflow"],
|
|
4062
|
+
["## Skills System", "## Skills system", "### Skills System", "### skills system"],
|
|
4063
|
+
["## Proactive Memory-Aware Development", "## Memory-Aware Development"]
|
|
4064
|
+
];
|
|
4065
|
+
let currentGroupIndex = -1;
|
|
4066
|
+
for (let i = 0; i < sectionsOrder.length; i++) {
|
|
4067
|
+
if (sectionsOrder[i].some((h) => currentHeader.toLowerCase().trim() === h.toLowerCase().trim())) {
|
|
4068
|
+
currentGroupIndex = i;
|
|
4069
|
+
break;
|
|
4070
|
+
}
|
|
4071
|
+
}
|
|
4072
|
+
if (currentGroupIndex === -1) {
|
|
4073
|
+
return this.findSectionEndIndex(content, startIndex);
|
|
4074
|
+
}
|
|
4075
|
+
let nextSectionIndex = -1;
|
|
4076
|
+
for (let i = currentGroupIndex + 1; i < sectionsOrder.length; i++) {
|
|
4077
|
+
const variations = sectionsOrder[i];
|
|
4078
|
+
for (const variation of variations) {
|
|
4079
|
+
const idx = content.indexOf(variation, startIndex + currentHeader.length);
|
|
4080
|
+
if (idx !== -1) {
|
|
4081
|
+
if (nextSectionIndex === -1 || idx < nextSectionIndex) {
|
|
4082
|
+
nextSectionIndex = idx;
|
|
4083
|
+
}
|
|
4084
|
+
}
|
|
4085
|
+
}
|
|
4086
|
+
}
|
|
4087
|
+
if (nextSectionIndex !== -1) {
|
|
4088
|
+
return nextSectionIndex;
|
|
4089
|
+
}
|
|
4090
|
+
return this.findSectionEndIndex(content, startIndex);
|
|
4091
|
+
}
|
|
4092
|
+
/**
|
|
4093
|
+
* Generic section replacer: replace content from marker to next H2 header or endMarker
|
|
4094
|
+
*/
|
|
4095
|
+
replaceSection(content, sectionMarker, newSection, endMarker) {
|
|
3980
4096
|
const startIndex = content.indexOf(sectionMarker);
|
|
3981
4097
|
if (startIndex === -1) return content;
|
|
3982
|
-
let endIndex =
|
|
4098
|
+
let endIndex = -1;
|
|
4099
|
+
if (endMarker) {
|
|
4100
|
+
endIndex = content.indexOf(endMarker, startIndex + sectionMarker.length);
|
|
4101
|
+
}
|
|
3983
4102
|
if (endIndex === -1) {
|
|
3984
|
-
endIndex = content
|
|
4103
|
+
endIndex = this.findNextSectionIndex(content, startIndex, sectionMarker);
|
|
3985
4104
|
}
|
|
3986
4105
|
const before = content.substring(0, startIndex).trimEnd();
|
|
3987
4106
|
const after = content.substring(endIndex);
|
|
3988
4107
|
return before + "\n\n" + newSection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
3989
4108
|
}
|
|
3990
|
-
replaceSkillsSection(existingContent, newSkillsSection) {
|
|
4109
|
+
replaceSkillsSection(existingContent, newSkillsSection, endMarker) {
|
|
3991
4110
|
const startMarkers = ["## Skills System", "## Skills system", "### Skills System", "### Skills system"];
|
|
3992
4111
|
let startIndex = -1;
|
|
3993
4112
|
let foundMarker = "";
|
|
@@ -4001,28 +4120,19 @@ ${section.content.trimEnd()}`);
|
|
|
4001
4120
|
if (startIndex === -1) {
|
|
4002
4121
|
return this.appendSkillsSection(existingContent, newSkillsSection);
|
|
4003
4122
|
}
|
|
4004
|
-
let endIndex =
|
|
4005
|
-
if (
|
|
4006
|
-
endIndex = existingContent.indexOf(
|
|
4123
|
+
let endIndex = -1;
|
|
4124
|
+
if (endMarker) {
|
|
4125
|
+
endIndex = existingContent.indexOf(endMarker, startIndex + foundMarker.length);
|
|
4007
4126
|
}
|
|
4008
4127
|
if (endIndex === -1) {
|
|
4009
|
-
endIndex = existingContent
|
|
4128
|
+
endIndex = this.findNextSectionIndex(existingContent, startIndex, foundMarker);
|
|
4010
4129
|
}
|
|
4011
4130
|
const before = existingContent.substring(0, startIndex).trimEnd();
|
|
4012
4131
|
const after = existingContent.substring(endIndex);
|
|
4013
4132
|
return before + "\n\n" + newSkillsSection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
4014
4133
|
}
|
|
4015
4134
|
replaceSafetyRules(existingContent, newSafetySection) {
|
|
4016
|
-
|
|
4017
|
-
const startIndex = existingContent.indexOf(marker);
|
|
4018
|
-
if (startIndex === -1) return existingContent;
|
|
4019
|
-
let endIndex = existingContent.indexOf("\n## ", startIndex + marker.length);
|
|
4020
|
-
if (endIndex === -1) {
|
|
4021
|
-
endIndex = existingContent.length;
|
|
4022
|
-
}
|
|
4023
|
-
const before = existingContent.substring(0, startIndex).trimEnd();
|
|
4024
|
-
const after = existingContent.substring(endIndex);
|
|
4025
|
-
return before + "\n\n" + newSafetySection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
4135
|
+
return this.replaceSection(existingContent, "## Universal Safety Rules", newSafetySection, "## Core Workflow");
|
|
4026
4136
|
}
|
|
4027
4137
|
appendSkillsSection(existingContent, skillsSection) {
|
|
4028
4138
|
const rulesMarker = "\n## Rules\n";
|
|
@@ -4116,7 +4226,7 @@ ${section.content.trimEnd()}`);
|
|
|
4116
4226
|
if (templateInfo.resourceDirs) {
|
|
4117
4227
|
for (const resourceDir of templateInfo.resourceDirs) {
|
|
4118
4228
|
const srcResourceDir = path8.join(coreTemplatesDir, resourceDir);
|
|
4119
|
-
const destResourceDir = path8.join(skillPath, resourceDir);
|
|
4229
|
+
const destResourceDir = path8.join(skillPath, path8.basename(resourceDir));
|
|
4120
4230
|
if (await FileSystemUtils.fileExists(srcResourceDir)) {
|
|
4121
4231
|
if (await FileSystemUtils.fileExists(destResourceDir)) {
|
|
4122
4232
|
await FileSystemUtils.removeDirectory(destResourceDir, true);
|
|
@@ -4417,15 +4527,12 @@ python3 heraspec/skills/ui-ux/scripts/search.py "pricing plans" --domain pages
|
|
|
4417
4527
|
1. Copy skill from HeraSpec core:
|
|
4418
4528
|
\`\`\`bash
|
|
4419
4529
|
# Copy UI/UX skill
|
|
4420
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux
|
|
4421
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/scripts heraspec/skills/ui-ux/
|
|
4422
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/data heraspec/skills/ui-ux/
|
|
4423
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/templates heraspec/skills/ui-ux/
|
|
4530
|
+
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux heraspec/skills/
|
|
4424
4531
|
\`\`\`
|
|
4425
4532
|
|
|
4426
4533
|
2. Or use \`heraspec skill add ui-ux\` (if available)
|
|
4427
4534
|
|
|
4428
|
-
3. Read \`heraspec/skills/ui-ux/
|
|
4535
|
+
3. Read \`heraspec/skills/ui-ux/skill.md\` for complete documentation
|
|
4429
4536
|
|
|
4430
4537
|
### Flatsome UX Element Skill
|
|
4431
4538
|
|
|
@@ -4575,7 +4682,7 @@ python3 heraspec/skills/ui-ux/scripts/search.py "product-detail single-product"
|
|
|
4575
4682
|
## \u{1F4DA} Detailed Documentation
|
|
4576
4683
|
|
|
4577
4684
|
After copying UI/UX skill to your project, see:
|
|
4578
|
-
- \`heraspec/skills/ui-ux/
|
|
4685
|
+
- \`heraspec/skills/ui-ux/skill.md\` - Complete skill documentation
|
|
4579
4686
|
- \`heraspec/skills/ui-ux/templates/example-prompt-full-theme.md\` - Detailed prompt examples
|
|
4580
4687
|
- \`heraspec/skills/ui-ux/templates/prompt-template-full-theme.md\` - Copy-paste templates
|
|
4581
4688
|
|
|
@@ -4591,10 +4698,7 @@ After copying UI/UX skill to your project, see:
|
|
|
4591
4698
|
|
|
4592
4699
|
1. Copy UI/UX skill to project:
|
|
4593
4700
|
\`\`\`bash
|
|
4594
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux
|
|
4595
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/scripts heraspec/skills/ui-ux/
|
|
4596
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/data heraspec/skills/ui-ux/
|
|
4597
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/templates heraspec/skills/ui-ux/
|
|
4701
|
+
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux heraspec/skills/
|
|
4598
4702
|
\`\`\`
|
|
4599
4703
|
|
|
4600
4704
|
2. Use prompt template from above
|
|
@@ -4621,32 +4725,45 @@ After copying UI/UX skill to your project, see:
|
|
|
4621
4725
|
async updateReadmeFile(readmePath) {
|
|
4622
4726
|
const existingContent = await FileSystemUtils.readFile(readmePath);
|
|
4623
4727
|
const heraspecSection = this.getHeraSpecReadmeSection();
|
|
4624
|
-
const sectionMarkers = [
|
|
4625
|
-
"## HeraSpec",
|
|
4626
|
-
"## HeraSpec Development",
|
|
4627
|
-
"### HeraSpec",
|
|
4628
|
-
"### HeraSpec Development",
|
|
4629
|
-
"<!-- HeraSpec Section -->"
|
|
4630
|
-
];
|
|
4631
|
-
let hasHeraSpecSection = false;
|
|
4632
4728
|
let sectionStartIndex = -1;
|
|
4633
4729
|
let sectionEndIndex = -1;
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4640
|
-
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4730
|
+
const commentMarker = "<!-- HeraSpec Section -->";
|
|
4731
|
+
const commentIndex = existingContent.indexOf(commentMarker);
|
|
4732
|
+
if (commentIndex !== -1) {
|
|
4733
|
+
sectionStartIndex = commentIndex;
|
|
4734
|
+
const firstHeaderIndex = existingContent.indexOf("## ", commentIndex + commentMarker.length);
|
|
4735
|
+
if (firstHeaderIndex !== -1) {
|
|
4736
|
+
let nextHeaderIndex = existingContent.indexOf("\n## ", firstHeaderIndex + 3);
|
|
4737
|
+
if (nextHeaderIndex === -1) {
|
|
4738
|
+
nextHeaderIndex = existingContent.indexOf("\n### ", firstHeaderIndex + 3);
|
|
4739
|
+
}
|
|
4740
|
+
sectionEndIndex = nextHeaderIndex !== -1 ? nextHeaderIndex : existingContent.length;
|
|
4741
|
+
} else {
|
|
4742
|
+
sectionEndIndex = existingContent.length;
|
|
4743
|
+
}
|
|
4744
|
+
} else {
|
|
4745
|
+
const sectionMarkers = [
|
|
4746
|
+
"## HeraSpec Development",
|
|
4747
|
+
"## HeraSpec",
|
|
4748
|
+
"### HeraSpec Development",
|
|
4749
|
+
"### HeraSpec"
|
|
4750
|
+
];
|
|
4751
|
+
for (const marker of sectionMarkers) {
|
|
4752
|
+
const index = existingContent.indexOf(marker);
|
|
4753
|
+
if (index !== -1) {
|
|
4754
|
+
sectionStartIndex = index;
|
|
4755
|
+
sectionEndIndex = existingContent.indexOf("\n## ", index + marker.length);
|
|
4756
|
+
if (sectionEndIndex === -1) {
|
|
4757
|
+
sectionEndIndex = existingContent.indexOf("\n### ", index + marker.length);
|
|
4758
|
+
}
|
|
4759
|
+
if (sectionEndIndex === -1) {
|
|
4760
|
+
sectionEndIndex = existingContent.length;
|
|
4761
|
+
}
|
|
4762
|
+
break;
|
|
4645
4763
|
}
|
|
4646
|
-
break;
|
|
4647
4764
|
}
|
|
4648
4765
|
}
|
|
4649
|
-
if (
|
|
4766
|
+
if (sectionStartIndex !== -1) {
|
|
4650
4767
|
const before = existingContent.substring(0, sectionStartIndex).trimEnd();
|
|
4651
4768
|
const after = existingContent.substring(sectionEndIndex);
|
|
4652
4769
|
const updatedContent = before + "\n\n" + heraspecSection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
@@ -5026,7 +5143,6 @@ This will archive "${changeName}" and merge delta specs into source specs.`);
|
|
|
5026
5143
|
const archiveDir = path10.join(
|
|
5027
5144
|
".",
|
|
5028
5145
|
HERASPEC_DIR_NAME,
|
|
5029
|
-
CHANGES_DIR_NAME,
|
|
5030
5146
|
ARCHIVES_DIR_NAME
|
|
5031
5147
|
);
|
|
5032
5148
|
await FileSystemUtils.createDirectory(archiveDir);
|