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
package/bin/heraspec.js
CHANGED
|
@@ -214,95 +214,145 @@ var init_skills_template_map = __esm({
|
|
|
214
214
|
SKILL_TEMPLATE_MAP = {
|
|
215
215
|
// Cross-cutting skills
|
|
216
216
|
"ui-ux": {
|
|
217
|
-
templateFileName: "ui-ux
|
|
217
|
+
templateFileName: "ui-ux/skill.md",
|
|
218
218
|
isCrossCutting: true,
|
|
219
|
-
resourceDirs: ["scripts", "templates", "data"]
|
|
219
|
+
resourceDirs: ["ui-ux/scripts", "ui-ux/templates", "ui-ux/data"]
|
|
220
220
|
},
|
|
221
221
|
"design-system": {
|
|
222
|
-
templateFileName: "design-system
|
|
222
|
+
templateFileName: "design-system/skill.md",
|
|
223
223
|
isCrossCutting: true,
|
|
224
|
-
resourceDirs: ["scripts", "data", "knowledge/design-systems"]
|
|
224
|
+
resourceDirs: ["ui-ux/scripts", "ui-ux/data", "design-system/knowledge/design-systems"]
|
|
225
225
|
},
|
|
226
226
|
"documents": {
|
|
227
|
-
templateFileName: "documents
|
|
227
|
+
templateFileName: "documents/skill.md",
|
|
228
228
|
isCrossCutting: true,
|
|
229
229
|
resourceDirs: ["documents/templates"]
|
|
230
230
|
},
|
|
231
231
|
"content-optimization": {
|
|
232
|
-
templateFileName: "content-optimization
|
|
232
|
+
templateFileName: "content-optimization/skill.md",
|
|
233
233
|
isCrossCutting: true
|
|
234
234
|
},
|
|
235
235
|
"unit-test": {
|
|
236
|
-
templateFileName: "unit-test
|
|
236
|
+
templateFileName: "unit-test/skill.md",
|
|
237
237
|
isCrossCutting: true
|
|
238
238
|
},
|
|
239
239
|
"integration-test": {
|
|
240
|
-
templateFileName: "integration-test
|
|
240
|
+
templateFileName: "integration-test/skill.md",
|
|
241
241
|
isCrossCutting: true
|
|
242
242
|
},
|
|
243
243
|
"e2e-test": {
|
|
244
|
-
templateFileName: "e2e-test
|
|
244
|
+
templateFileName: "e2e-test/skill.md",
|
|
245
245
|
isCrossCutting: true
|
|
246
246
|
},
|
|
247
247
|
"suggestion": {
|
|
248
|
-
templateFileName: "suggestion
|
|
248
|
+
templateFileName: "suggestion/skill.md",
|
|
249
249
|
isCrossCutting: true
|
|
250
250
|
},
|
|
251
251
|
"sourcecode-analyzer": {
|
|
252
|
-
templateFileName: "sourcecode-analyzer
|
|
252
|
+
templateFileName: "sourcecode-analyzer/skill.md",
|
|
253
253
|
isCrossCutting: true,
|
|
254
|
-
viFileName: "sourcecode-analyzer
|
|
254
|
+
viFileName: "sourcecode-analyzer/skill.vi.md"
|
|
255
255
|
},
|
|
256
256
|
"project-memory": {
|
|
257
|
-
templateFileName: "project-memory
|
|
258
|
-
viFileName: "project-memory
|
|
257
|
+
templateFileName: "project-memory/skill.md",
|
|
258
|
+
viFileName: "project-memory/skill.vi.md",
|
|
259
259
|
isCrossCutting: true
|
|
260
260
|
},
|
|
261
261
|
"smart-explore": {
|
|
262
|
-
templateFileName: "smart-explore
|
|
262
|
+
templateFileName: "smart-explore/skill.md",
|
|
263
263
|
isCrossCutting: true
|
|
264
264
|
},
|
|
265
265
|
"deploy-documentation": {
|
|
266
|
-
templateFileName: "deploy-documentation
|
|
266
|
+
templateFileName: "deploy-documentation/skill.md",
|
|
267
267
|
isCrossCutting: true,
|
|
268
|
-
resourceDirs: ["templates"]
|
|
268
|
+
resourceDirs: ["ui-ux/templates"]
|
|
269
|
+
},
|
|
270
|
+
"code-review": {
|
|
271
|
+
templateFileName: "code-review/skill.md",
|
|
272
|
+
viFileName: "code-review/skill.vi.md",
|
|
273
|
+
isCrossCutting: true
|
|
274
|
+
},
|
|
275
|
+
"debug": {
|
|
276
|
+
templateFileName: "debug/skill.md",
|
|
277
|
+
viFileName: "debug/skill.vi.md",
|
|
278
|
+
isCrossCutting: true
|
|
279
|
+
},
|
|
280
|
+
"system-design": {
|
|
281
|
+
templateFileName: "system-design/skill.md",
|
|
282
|
+
viFileName: "system-design/skill.vi.md",
|
|
283
|
+
isCrossCutting: true
|
|
284
|
+
},
|
|
285
|
+
"tech-debt": {
|
|
286
|
+
templateFileName: "tech-debt/skill.md",
|
|
287
|
+
viFileName: "tech-debt/skill.vi.md",
|
|
288
|
+
isCrossCutting: true
|
|
289
|
+
},
|
|
290
|
+
"spec-writer": {
|
|
291
|
+
templateFileName: "spec-writer/skill.md",
|
|
292
|
+
viFileName: "spec-writer/skill.vi.md",
|
|
293
|
+
isCrossCutting: true
|
|
294
|
+
},
|
|
295
|
+
"seo-audit": {
|
|
296
|
+
templateFileName: "seo-audit/skill.md",
|
|
297
|
+
viFileName: "seo-audit/skill.vi.md",
|
|
298
|
+
isCrossCutting: true
|
|
299
|
+
},
|
|
300
|
+
"campaign-plan": {
|
|
301
|
+
templateFileName: "campaign-plan/skill.md",
|
|
302
|
+
viFileName: "campaign-plan/skill.vi.md",
|
|
303
|
+
isCrossCutting: true
|
|
304
|
+
},
|
|
305
|
+
"content-creation": {
|
|
306
|
+
templateFileName: "content-creation/skill.md",
|
|
307
|
+
viFileName: "content-creation/skill.vi.md",
|
|
308
|
+
isCrossCutting: true
|
|
309
|
+
},
|
|
310
|
+
"email-sequence": {
|
|
311
|
+
templateFileName: "email-sequence/skill.md",
|
|
312
|
+
viFileName: "email-sequence/skill.vi.md",
|
|
313
|
+
isCrossCutting: true
|
|
314
|
+
},
|
|
315
|
+
"sql-queries": {
|
|
316
|
+
templateFileName: "sql-queries/skill.md",
|
|
317
|
+
viFileName: "sql-queries/skill.vi.md",
|
|
318
|
+
isCrossCutting: true
|
|
269
319
|
},
|
|
270
320
|
// Perfex module skills
|
|
271
321
|
"perfex-module:module-codebase": {
|
|
272
|
-
templateFileName: "module-codebase
|
|
322
|
+
templateFileName: "perfex-module/module-codebase/skill.md",
|
|
273
323
|
isCrossCutting: false,
|
|
274
324
|
projectType: "perfex-module"
|
|
275
325
|
},
|
|
276
326
|
"wordpress:ux-element": {
|
|
277
|
-
templateFileName: "ux-element
|
|
327
|
+
templateFileName: "wordpress/ux-element/skill.md",
|
|
278
328
|
isCrossCutting: false,
|
|
279
329
|
projectType: "wordpress",
|
|
280
|
-
resourceDirs: ["ux-element/templates"]
|
|
330
|
+
resourceDirs: ["wordpress/ux-element/templates"]
|
|
281
331
|
},
|
|
282
332
|
"wordpress:plugin-standard": {
|
|
283
|
-
templateFileName: "wordpress
|
|
333
|
+
templateFileName: "wordpress/plugin-standard/skill.md",
|
|
284
334
|
isCrossCutting: false,
|
|
285
335
|
projectType: "wordpress",
|
|
286
|
-
resourceDirs: ["wordpress
|
|
336
|
+
resourceDirs: ["wordpress/plugin-standard/templates"]
|
|
287
337
|
},
|
|
288
338
|
"wordpress:plugin-check": {
|
|
289
|
-
templateFileName: "wordpress
|
|
339
|
+
templateFileName: "wordpress/plugin-check/skill.md",
|
|
290
340
|
isCrossCutting: false,
|
|
291
341
|
projectType: "wordpress"
|
|
292
342
|
},
|
|
293
343
|
"wordpress:plugin-directory": {
|
|
294
|
-
templateFileName: "plugin-directory
|
|
344
|
+
templateFileName: "wordpress/plugin-directory/skill.md",
|
|
295
345
|
isCrossCutting: false,
|
|
296
346
|
projectType: "wordpress"
|
|
297
347
|
},
|
|
298
348
|
// WordPress Plugin specific (matches PROJECT_TYPES)
|
|
299
349
|
"wordpress-plugin:plugin-check": {
|
|
300
|
-
templateFileName: "wordpress
|
|
350
|
+
templateFileName: "wordpress/plugin-check/skill.md",
|
|
301
351
|
isCrossCutting: false,
|
|
302
352
|
projectType: "wordpress-plugin"
|
|
303
353
|
},
|
|
304
354
|
"wordpress-plugin:plugin-directory": {
|
|
305
|
-
templateFileName: "plugin-directory
|
|
355
|
+
templateFileName: "wordpress/plugin-directory/skill.md",
|
|
306
356
|
isCrossCutting: false,
|
|
307
357
|
projectType: "wordpress-plugin"
|
|
308
358
|
}
|
|
@@ -3076,7 +3126,7 @@ var init_skill = __esm({
|
|
|
3076
3126
|
if (templateInfo.resourceDirs) {
|
|
3077
3127
|
for (const resourceDir of templateInfo.resourceDirs) {
|
|
3078
3128
|
const srcResourceDir = path7.join(coreTemplatesDir, resourceDir);
|
|
3079
|
-
const destResourceDir = path7.join(destPath, resourceDir);
|
|
3129
|
+
const destResourceDir = path7.join(destPath, path7.basename(resourceDir));
|
|
3080
3130
|
if (await FileSystemUtils.fileExists(srcResourceDir)) {
|
|
3081
3131
|
await FileSystemUtils.copyDirectory(srcResourceDir, destResourceDir);
|
|
3082
3132
|
}
|
|
@@ -3162,6 +3212,7 @@ This document defines the workflow for AI agents working with HeraSpec.
|
|
|
3162
3212
|
- **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:
|
|
3163
3213
|
- **Preferred**: Proactively install it via \`heraspec skill add <name>\` (e.g., \`heraspec skill add documents\`) if you have terminal access.
|
|
3164
3214
|
- **Fallback**: If you cannot install it, **STOP** and ask the user to add it. **DO NOT** attempt manual generation without the skill.
|
|
3215
|
+
- **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.
|
|
3165
3216
|
- **USER CONFIRMATION**: For destructive actions or public releases, always request explicit User approval first.
|
|
3166
3217
|
|
|
3167
3218
|
### Restricted Commands (REQUIRE USER CONFIRMATION)
|
|
@@ -3252,6 +3303,7 @@ The following commands are classified by risk level. You **MUST NOT** execute th
|
|
|
3252
3303
|
- Understand purpose, steps, inputs, outputs
|
|
3253
3304
|
- Follow tone, rules, and limitations
|
|
3254
3305
|
- Check available templates and scripts
|
|
3306
|
+
- **Ignore Vietnamese Skill Files**: Only read the English \`skill.md\` instructions. Completely ignore any \`*.vi.md\` translation files.
|
|
3255
3307
|
|
|
3256
3308
|
4. **Use skill resources**:
|
|
3257
3309
|
- Run scripts from \`scripts/\` folder if needed
|
|
@@ -3458,6 +3510,7 @@ If \\\`heraspec/skills/smart-explore/\\\` exists, prefer token-efficient explora
|
|
|
3458
3510
|
> heraspec skill add documents"
|
|
3459
3511
|
- **DO NOT** create a task plan or attempt manual generation without the skill language.
|
|
3460
3512
|
3. **Execute After Install**: Only after the skill folder is created (or installed), read the \`skill.md\` and proceed with the task.
|
|
3513
|
+
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.
|
|
3461
3514
|
|
|
3462
3515
|
**Example prompt for Documents skill:**
|
|
3463
3516
|
If you need to generate multi-format documentation, use this prompt:
|
|
@@ -3824,20 +3877,86 @@ ${section.content.trimEnd()}`);
|
|
|
3824
3877
|
}
|
|
3825
3878
|
}
|
|
3826
3879
|
/**
|
|
3827
|
-
*
|
|
3880
|
+
* Find the index of the next top-level H2 section in the markdown content.
|
|
3881
|
+
* Tracks fenced code blocks to ignore H2 headers inside code blocks.
|
|
3828
3882
|
*/
|
|
3829
|
-
|
|
3883
|
+
findSectionEndIndex(content, startIndex) {
|
|
3884
|
+
const lines = content.substring(startIndex).split(/\r?\n/);
|
|
3885
|
+
let offset = startIndex;
|
|
3886
|
+
let inCodeBlock = false;
|
|
3887
|
+
for (let i = 0; i < lines.length; i++) {
|
|
3888
|
+
const line = lines[i];
|
|
3889
|
+
const lineLengthWithNewline = line.length + (content.charAt(offset + line.length) === "\r" ? 2 : 1);
|
|
3890
|
+
if (i === 0) {
|
|
3891
|
+
offset += lineLengthWithNewline;
|
|
3892
|
+
continue;
|
|
3893
|
+
}
|
|
3894
|
+
if (line.trim().startsWith("```")) {
|
|
3895
|
+
inCodeBlock = !inCodeBlock;
|
|
3896
|
+
}
|
|
3897
|
+
if (!inCodeBlock && line.startsWith("## ")) {
|
|
3898
|
+
return offset;
|
|
3899
|
+
}
|
|
3900
|
+
offset += lineLengthWithNewline;
|
|
3901
|
+
}
|
|
3902
|
+
return content.length;
|
|
3903
|
+
}
|
|
3904
|
+
/**
|
|
3905
|
+
* Finds the start index of the next standard section in the sequence.
|
|
3906
|
+
* This is used to replace the entire section cleanly, even if there are internal H2s or duplicates.
|
|
3907
|
+
*/
|
|
3908
|
+
findNextSectionIndex(content, startIndex, currentHeader) {
|
|
3909
|
+
const sectionsOrder = [
|
|
3910
|
+
["## Universal Safety Rules"],
|
|
3911
|
+
["## Core Workflow"],
|
|
3912
|
+
["## Skills System", "## Skills system", "### Skills System", "### skills system"],
|
|
3913
|
+
["## Proactive Memory-Aware Development", "## Memory-Aware Development"]
|
|
3914
|
+
];
|
|
3915
|
+
let currentGroupIndex = -1;
|
|
3916
|
+
for (let i = 0; i < sectionsOrder.length; i++) {
|
|
3917
|
+
if (sectionsOrder[i].some((h) => currentHeader.toLowerCase().trim() === h.toLowerCase().trim())) {
|
|
3918
|
+
currentGroupIndex = i;
|
|
3919
|
+
break;
|
|
3920
|
+
}
|
|
3921
|
+
}
|
|
3922
|
+
if (currentGroupIndex === -1) {
|
|
3923
|
+
return this.findSectionEndIndex(content, startIndex);
|
|
3924
|
+
}
|
|
3925
|
+
let nextSectionIndex = -1;
|
|
3926
|
+
for (let i = currentGroupIndex + 1; i < sectionsOrder.length; i++) {
|
|
3927
|
+
const variations = sectionsOrder[i];
|
|
3928
|
+
for (const variation of variations) {
|
|
3929
|
+
const idx = content.indexOf(variation, startIndex + currentHeader.length);
|
|
3930
|
+
if (idx !== -1) {
|
|
3931
|
+
if (nextSectionIndex === -1 || idx < nextSectionIndex) {
|
|
3932
|
+
nextSectionIndex = idx;
|
|
3933
|
+
}
|
|
3934
|
+
}
|
|
3935
|
+
}
|
|
3936
|
+
}
|
|
3937
|
+
if (nextSectionIndex !== -1) {
|
|
3938
|
+
return nextSectionIndex;
|
|
3939
|
+
}
|
|
3940
|
+
return this.findSectionEndIndex(content, startIndex);
|
|
3941
|
+
}
|
|
3942
|
+
/**
|
|
3943
|
+
* Generic section replacer: replace content from marker to next H2 header or endMarker
|
|
3944
|
+
*/
|
|
3945
|
+
replaceSection(content, sectionMarker, newSection, endMarker) {
|
|
3830
3946
|
const startIndex = content.indexOf(sectionMarker);
|
|
3831
3947
|
if (startIndex === -1) return content;
|
|
3832
|
-
let endIndex =
|
|
3948
|
+
let endIndex = -1;
|
|
3949
|
+
if (endMarker) {
|
|
3950
|
+
endIndex = content.indexOf(endMarker, startIndex + sectionMarker.length);
|
|
3951
|
+
}
|
|
3833
3952
|
if (endIndex === -1) {
|
|
3834
|
-
endIndex = content
|
|
3953
|
+
endIndex = this.findNextSectionIndex(content, startIndex, sectionMarker);
|
|
3835
3954
|
}
|
|
3836
3955
|
const before = content.substring(0, startIndex).trimEnd();
|
|
3837
3956
|
const after = content.substring(endIndex);
|
|
3838
3957
|
return before + "\n\n" + newSection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
3839
3958
|
}
|
|
3840
|
-
replaceSkillsSection(existingContent, newSkillsSection) {
|
|
3959
|
+
replaceSkillsSection(existingContent, newSkillsSection, endMarker) {
|
|
3841
3960
|
const startMarkers = ["## Skills System", "## Skills system", "### Skills System", "### Skills system"];
|
|
3842
3961
|
let startIndex = -1;
|
|
3843
3962
|
let foundMarker = "";
|
|
@@ -3851,28 +3970,19 @@ ${section.content.trimEnd()}`);
|
|
|
3851
3970
|
if (startIndex === -1) {
|
|
3852
3971
|
return this.appendSkillsSection(existingContent, newSkillsSection);
|
|
3853
3972
|
}
|
|
3854
|
-
let endIndex =
|
|
3855
|
-
if (
|
|
3856
|
-
endIndex = existingContent.indexOf(
|
|
3973
|
+
let endIndex = -1;
|
|
3974
|
+
if (endMarker) {
|
|
3975
|
+
endIndex = existingContent.indexOf(endMarker, startIndex + foundMarker.length);
|
|
3857
3976
|
}
|
|
3858
3977
|
if (endIndex === -1) {
|
|
3859
|
-
endIndex = existingContent
|
|
3978
|
+
endIndex = this.findNextSectionIndex(existingContent, startIndex, foundMarker);
|
|
3860
3979
|
}
|
|
3861
3980
|
const before = existingContent.substring(0, startIndex).trimEnd();
|
|
3862
3981
|
const after = existingContent.substring(endIndex);
|
|
3863
3982
|
return before + "\n\n" + newSkillsSection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
3864
3983
|
}
|
|
3865
3984
|
replaceSafetyRules(existingContent, newSafetySection) {
|
|
3866
|
-
|
|
3867
|
-
const startIndex = existingContent.indexOf(marker);
|
|
3868
|
-
if (startIndex === -1) return existingContent;
|
|
3869
|
-
let endIndex = existingContent.indexOf("\n## ", startIndex + marker.length);
|
|
3870
|
-
if (endIndex === -1) {
|
|
3871
|
-
endIndex = existingContent.length;
|
|
3872
|
-
}
|
|
3873
|
-
const before = existingContent.substring(0, startIndex).trimEnd();
|
|
3874
|
-
const after = existingContent.substring(endIndex);
|
|
3875
|
-
return before + "\n\n" + newSafetySection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
3985
|
+
return this.replaceSection(existingContent, "## Universal Safety Rules", newSafetySection, "## Core Workflow");
|
|
3876
3986
|
}
|
|
3877
3987
|
appendSkillsSection(existingContent, skillsSection) {
|
|
3878
3988
|
const rulesMarker = "\n## Rules\n";
|
|
@@ -3966,7 +4076,7 @@ ${section.content.trimEnd()}`);
|
|
|
3966
4076
|
if (templateInfo.resourceDirs) {
|
|
3967
4077
|
for (const resourceDir of templateInfo.resourceDirs) {
|
|
3968
4078
|
const srcResourceDir = path8.join(coreTemplatesDir, resourceDir);
|
|
3969
|
-
const destResourceDir = path8.join(skillPath, resourceDir);
|
|
4079
|
+
const destResourceDir = path8.join(skillPath, path8.basename(resourceDir));
|
|
3970
4080
|
if (await FileSystemUtils.fileExists(srcResourceDir)) {
|
|
3971
4081
|
if (await FileSystemUtils.fileExists(destResourceDir)) {
|
|
3972
4082
|
await FileSystemUtils.removeDirectory(destResourceDir, true);
|
|
@@ -4267,15 +4377,12 @@ python3 heraspec/skills/ui-ux/scripts/search.py "pricing plans" --domain pages
|
|
|
4267
4377
|
1. Copy skill from HeraSpec core:
|
|
4268
4378
|
\`\`\`bash
|
|
4269
4379
|
# Copy UI/UX skill
|
|
4270
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux
|
|
4271
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/scripts heraspec/skills/ui-ux/
|
|
4272
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/data heraspec/skills/ui-ux/
|
|
4273
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/templates heraspec/skills/ui-ux/
|
|
4380
|
+
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux heraspec/skills/
|
|
4274
4381
|
\`\`\`
|
|
4275
4382
|
|
|
4276
4383
|
2. Or use \`heraspec skill add ui-ux\` (if available)
|
|
4277
4384
|
|
|
4278
|
-
3. Read \`heraspec/skills/ui-ux/
|
|
4385
|
+
3. Read \`heraspec/skills/ui-ux/skill.md\` for complete documentation
|
|
4279
4386
|
|
|
4280
4387
|
### Flatsome UX Element Skill
|
|
4281
4388
|
|
|
@@ -4425,7 +4532,7 @@ python3 heraspec/skills/ui-ux/scripts/search.py "product-detail single-product"
|
|
|
4425
4532
|
## \u{1F4DA} Detailed Documentation
|
|
4426
4533
|
|
|
4427
4534
|
After copying UI/UX skill to your project, see:
|
|
4428
|
-
- \`heraspec/skills/ui-ux/
|
|
4535
|
+
- \`heraspec/skills/ui-ux/skill.md\` - Complete skill documentation
|
|
4429
4536
|
- \`heraspec/skills/ui-ux/templates/example-prompt-full-theme.md\` - Detailed prompt examples
|
|
4430
4537
|
- \`heraspec/skills/ui-ux/templates/prompt-template-full-theme.md\` - Copy-paste templates
|
|
4431
4538
|
|
|
@@ -4441,10 +4548,7 @@ After copying UI/UX skill to your project, see:
|
|
|
4441
4548
|
|
|
4442
4549
|
1. Copy UI/UX skill to project:
|
|
4443
4550
|
\`\`\`bash
|
|
4444
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux
|
|
4445
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/scripts heraspec/skills/ui-ux/
|
|
4446
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/data heraspec/skills/ui-ux/
|
|
4447
|
-
cp -r /path/to/HeraSpec/src/core/templates/skills/templates heraspec/skills/ui-ux/
|
|
4551
|
+
cp -r /path/to/HeraSpec/src/core/templates/skills/ui-ux heraspec/skills/
|
|
4448
4552
|
\`\`\`
|
|
4449
4553
|
|
|
4450
4554
|
2. Use prompt template from above
|
|
@@ -4471,32 +4575,45 @@ After copying UI/UX skill to your project, see:
|
|
|
4471
4575
|
async updateReadmeFile(readmePath) {
|
|
4472
4576
|
const existingContent = await FileSystemUtils.readFile(readmePath);
|
|
4473
4577
|
const heraspecSection = this.getHeraSpecReadmeSection();
|
|
4474
|
-
const sectionMarkers = [
|
|
4475
|
-
"## HeraSpec",
|
|
4476
|
-
"## HeraSpec Development",
|
|
4477
|
-
"### HeraSpec",
|
|
4478
|
-
"### HeraSpec Development",
|
|
4479
|
-
"<!-- HeraSpec Section -->"
|
|
4480
|
-
];
|
|
4481
|
-
let hasHeraSpecSection = false;
|
|
4482
4578
|
let sectionStartIndex = -1;
|
|
4483
4579
|
let sectionEndIndex = -1;
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4580
|
+
const commentMarker = "<!-- HeraSpec Section -->";
|
|
4581
|
+
const commentIndex = existingContent.indexOf(commentMarker);
|
|
4582
|
+
if (commentIndex !== -1) {
|
|
4583
|
+
sectionStartIndex = commentIndex;
|
|
4584
|
+
const firstHeaderIndex = existingContent.indexOf("## ", commentIndex + commentMarker.length);
|
|
4585
|
+
if (firstHeaderIndex !== -1) {
|
|
4586
|
+
let nextHeaderIndex = existingContent.indexOf("\n## ", firstHeaderIndex + 3);
|
|
4587
|
+
if (nextHeaderIndex === -1) {
|
|
4588
|
+
nextHeaderIndex = existingContent.indexOf("\n### ", firstHeaderIndex + 3);
|
|
4589
|
+
}
|
|
4590
|
+
sectionEndIndex = nextHeaderIndex !== -1 ? nextHeaderIndex : existingContent.length;
|
|
4591
|
+
} else {
|
|
4592
|
+
sectionEndIndex = existingContent.length;
|
|
4593
|
+
}
|
|
4594
|
+
} else {
|
|
4595
|
+
const sectionMarkers = [
|
|
4596
|
+
"## HeraSpec Development",
|
|
4597
|
+
"## HeraSpec",
|
|
4598
|
+
"### HeraSpec Development",
|
|
4599
|
+
"### HeraSpec"
|
|
4600
|
+
];
|
|
4601
|
+
for (const marker of sectionMarkers) {
|
|
4602
|
+
const index = existingContent.indexOf(marker);
|
|
4603
|
+
if (index !== -1) {
|
|
4604
|
+
sectionStartIndex = index;
|
|
4605
|
+
sectionEndIndex = existingContent.indexOf("\n## ", index + marker.length);
|
|
4606
|
+
if (sectionEndIndex === -1) {
|
|
4607
|
+
sectionEndIndex = existingContent.indexOf("\n### ", index + marker.length);
|
|
4608
|
+
}
|
|
4609
|
+
if (sectionEndIndex === -1) {
|
|
4610
|
+
sectionEndIndex = existingContent.length;
|
|
4611
|
+
}
|
|
4612
|
+
break;
|
|
4495
4613
|
}
|
|
4496
|
-
break;
|
|
4497
4614
|
}
|
|
4498
4615
|
}
|
|
4499
|
-
if (
|
|
4616
|
+
if (sectionStartIndex !== -1) {
|
|
4500
4617
|
const before = existingContent.substring(0, sectionStartIndex).trimEnd();
|
|
4501
4618
|
const after = existingContent.substring(sectionEndIndex);
|
|
4502
4619
|
const updatedContent = before + "\n\n" + heraspecSection + (after.trimStart().startsWith("\n") ? "" : "\n\n") + after;
|
|
@@ -4876,7 +4993,6 @@ This will archive "${changeName}" and merge delta specs into source specs.`);
|
|
|
4876
4993
|
const archiveDir = path10.join(
|
|
4877
4994
|
".",
|
|
4878
4995
|
HERASPEC_DIR_NAME,
|
|
4879
|
-
CHANGES_DIR_NAME,
|
|
4880
4996
|
ARCHIVES_DIR_NAME
|
|
4881
4997
|
);
|
|
4882
4998
|
await FileSystemUtils.createDirectory(archiveDir);
|
|
@@ -5200,7 +5316,6 @@ var RestoreCommand = class {
|
|
|
5200
5316
|
const archivesDir = path12.join(
|
|
5201
5317
|
".",
|
|
5202
5318
|
HERASPEC_DIR_NAME,
|
|
5203
|
-
CHANGES_DIR_NAME,
|
|
5204
5319
|
ARCHIVES_DIR_NAME
|
|
5205
5320
|
);
|
|
5206
5321
|
if (!await FileSystemUtils.fileExists(archivesDir)) {
|