@rfxlamia/skillkit 1.0.0 → 1.2.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/agents/agents/creative-copywriter.md +212 -0
- package/agents/agents/dario-amodei.md +135 -0
- package/agents/agents/doc-simplifier.md +63 -0
- package/agents/agents/kotlin-pro.md +433 -0
- package/agents/agents/red-team.md +136 -0
- package/agents/agents/sam-altman.md +121 -0
- package/agents/agents/seo-manager.md +184 -0
- package/package.json +7 -2
- package/skills/quick-spec/tests/__pycache__/test_skill.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skillkit/.claude/settings.local.json +7 -0
- package/skills/skillkit/scripts/__pycache__/decision_helper.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/__pycache__/quick_validate.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/__pycache__/test_generator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-314.pyc +0 -0
- package/skills/skillkit-help/SKILL.md +81 -0
- package/skills/skillkit-help/knowledge/application/09-case-studies.md +257 -0
- package/skills/skillkit-help/knowledge/application/12-testing-and-validation.md +276 -0
- package/skills/skillkit-help/knowledge/foundation/01-why-skills-exist.md +246 -0
- package/skills/skillkit-help/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
- package/skills/skillkit-help/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
- package/skills/skillkit-help/knowledge/foundation/06-platform-constraints.md +237 -0
- package/skills/skillkit-help/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
- package/skills/skillkit-help/template/SKILL.md +52 -0
- package/skills/skills/adversarial-review/SKILL.md +219 -0
- package/skills/skills/baby-education/SKILL.md +260 -0
- package/skills/skills/baby-education/references/advanced-techniques.md +323 -0
- package/skills/skills/baby-education/references/transformations.md +345 -0
- package/skills/skills/been-there-done-that/SKILL.md +455 -0
- package/skills/skills/been-there-done-that/references/analysis-patterns.md +162 -0
- package/skills/skills/been-there-done-that/references/git-commands.md +132 -0
- package/skills/skills/been-there-done-that/references/tree-insertion-logic.md +145 -0
- package/skills/skills/coolhunter/SKILL.md +270 -0
- package/skills/skills/coolhunter/assets/elicitation-methods.csv +51 -0
- package/skills/skills/coolhunter/knowledge/elicitation-methods.md +312 -0
- package/skills/skills/coolhunter/references/workflow-execution.md +238 -0
- package/skills/skills/coolhunter/workflow-plan-coolhunter.md +232 -0
- package/skills/skills/creative-copywriting/SKILL.md +324 -0
- package/skills/skills/creative-copywriting/databases/README.md +60 -0
- package/skills/skills/creative-copywriting/databases/carousel-structures.csv +16 -0
- package/skills/skills/creative-copywriting/databases/emotional-arcs.csv +11 -0
- package/skills/skills/creative-copywriting/databases/hook-formulas.csv +51 -0
- package/skills/skills/creative-copywriting/databases/power-words.csv +201 -0
- package/skills/skills/creative-copywriting/databases/psychological-triggers.csv +21 -0
- package/skills/skills/creative-copywriting/databases/read-more-patterns.csv +26 -0
- package/skills/skills/creative-copywriting/databases/swipe-triggers.csv +31 -0
- package/skills/skills/creative-copywriting/references/carousel-psychology.md +223 -0
- package/skills/skills/creative-copywriting/references/hook-anatomy.md +169 -0
- package/skills/skills/creative-copywriting/references/power-word-science.md +134 -0
- package/skills/skills/creative-copywriting/references/storytelling-frameworks.md +157 -0
- package/skills/skills/diverse-content-gen/SKILL.md +201 -0
- package/skills/skills/diverse-content-gen/references/advanced-techniques.md +320 -0
- package/skills/skills/diverse-content-gen/references/research-findings.md +379 -0
- package/skills/skills/diverse-content-gen/references/task-workflows.md +241 -0
- package/skills/skills/diverse-content-gen/references/tool-integration.md +419 -0
- package/skills/skills/diverse-content-gen/references/troubleshooting.md +426 -0
- package/skills/skills/diverse-content-gen/references/vs-core-technique.md +240 -0
- package/skills/skills/framework-critical-thinking/SKILL.md +220 -0
- package/skills/skills/framework-critical-thinking/references/bias_detector.md +375 -0
- package/skills/skills/framework-critical-thinking/references/fallback_handler.md +239 -0
- package/skills/skills/framework-critical-thinking/references/memory_curator.md +161 -0
- package/skills/skills/framework-critical-thinking/references/metacognitive_monitor.md +297 -0
- package/skills/skills/framework-critical-thinking/references/producer_critic_orchestrator.md +333 -0
- package/skills/skills/framework-critical-thinking/references/reasoning_router.md +235 -0
- package/skills/skills/framework-critical-thinking/references/reasoning_validator.md +97 -0
- package/skills/skills/framework-critical-thinking/references/reflection_trigger.md +78 -0
- package/skills/skills/framework-critical-thinking/references/self_verification.md +388 -0
- package/skills/skills/framework-critical-thinking/references/uncertainty_quantifier.md +207 -0
- package/skills/skills/framework-initiative/SKILL.md +231 -0
- package/skills/skills/framework-initiative/references/examples.md +150 -0
- package/skills/skills/framework-initiative/references/impact-analysis.md +157 -0
- package/skills/skills/framework-initiative/references/intent-patterns.md +145 -0
- package/skills/skills/framework-initiative/references/star-framework.md +165 -0
- package/skills/skills/humanize-docs/SKILL.md +203 -0
- package/skills/skills/humanize-docs/references/advanced-techniques.md +13 -0
- package/skills/skills/humanize-docs/references/core-transformations.md +368 -0
- package/skills/skills/humanize-docs/references/detection-patterns.md +400 -0
- package/skills/skills/humanize-docs/references/examples-gallery.md +374 -0
- package/skills/skills/imagine/SKILL.md +190 -0
- package/skills/skills/imagine/references/artstyle-corporate-memphis.md +625 -0
- package/skills/skills/imagine/references/artstyle-crewdson-hyperrealism.md +295 -0
- package/skills/skills/imagine/references/artstyle-iphone-social-media.md +426 -0
- package/skills/skills/imagine/references/artstyle-sciencesaru.md +276 -0
- package/skills/skills/pre-deploy-checklist/README.md +26 -0
- package/skills/skills/pre-deploy-checklist/SKILL.md +153 -0
- package/skills/skills/pre-deploy-checklist/references/checklist-categories.md +174 -0
- package/skills/skills/pre-deploy-checklist/references/domain-prompts.md +216 -0
- package/skills/skills/prompt-engineering/SKILL.md +209 -0
- package/skills/skills/prompt-engineering/references/advanced-combinations.md +444 -0
- package/skills/skills/prompt-engineering/references/chain-of-thought.md +140 -0
- package/skills/skills/prompt-engineering/references/decision_matrix.md +220 -0
- package/skills/skills/prompt-engineering/references/few-shot.md +346 -0
- package/skills/skills/prompt-engineering/references/json-format.md +270 -0
- package/skills/skills/prompt-engineering/references/natural-language.md +420 -0
- package/skills/skills/prompt-engineering/references/pitfalls.md +365 -0
- package/skills/skills/prompt-engineering/references/prompt-chaining.md +498 -0
- package/skills/skills/prompt-engineering/references/react.md +108 -0
- package/skills/skills/prompt-engineering/references/self-consistency.md +322 -0
- package/skills/skills/prompt-engineering/references/tree-of-thoughts.md +386 -0
- package/skills/skills/prompt-engineering/references/xml-format.md +220 -0
- package/skills/skills/prompt-engineering/references/yaml-format.md +488 -0
- package/skills/skills/prompt-engineering/references/zero-shot.md +74 -0
- package/skills/skills/quick-spec/SKILL.md +280 -0
- package/skills/skills/quick-spec/assets/tech-spec-template.md +74 -0
- package/skills/skills/quick-spec/references/step-01-understand.md +189 -0
- package/skills/skills/quick-spec/references/step-02-investigate.md +144 -0
- package/skills/skills/quick-spec/references/step-03-generate.md +128 -0
- package/skills/skills/quick-spec/references/step-04-review.md +173 -0
- package/skills/skills/quick-spec/tests/__pycache__/test_skill.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skills/quick-spec/tests/test_scenarios.md +83 -0
- package/skills/skills/quick-spec/tests/test_skill.py +136 -0
- package/skills/skills/readme-expert/SKILL.md +538 -0
- package/skills/skills/readme-expert/knowledge/INDEX.md +192 -0
- package/skills/skills/readme-expert/knowledge/application/quality-standards.md +470 -0
- package/skills/skills/readme-expert/knowledge/application/script-executor.md +604 -0
- package/skills/skills/readme-expert/knowledge/application/template-library.md +822 -0
- package/skills/skills/readme-expert/knowledge/foundation/codebase-scanner.md +361 -0
- package/skills/skills/readme-expert/knowledge/foundation/validation-checklist.md +481 -0
- package/skills/skills/red-teaming/SKILL.md +321 -0
- package/skills/skills/red-teaming/references/ai-llm-redteam.md +517 -0
- package/skills/skills/red-teaming/references/attack-techniques.md +410 -0
- package/skills/skills/red-teaming/references/cybersecurity-redteam.md +383 -0
- package/skills/skills/red-teaming/references/tools-frameworks.md +446 -0
- package/skills/skills/releasing/.skillkit-mode +1 -0
- package/skills/skills/releasing/SKILL.md +225 -0
- package/skills/skills/releasing/references/version-detection.md +108 -0
- package/skills/skills/screenwriter/SKILL.md +273 -0
- package/skills/skills/screenwriter/references/advanced-techniques.md +216 -0
- package/skills/skills/screenwriter/references/pipeline-integration.md +266 -0
- package/skills/skills/skillkit/.claude/settings.local.json +7 -0
- package/skills/skills/skillkit/.claude-plugin/plugin.json +27 -0
- package/skills/skills/skillkit/CHANGELOG.md +484 -0
- package/skills/skills/skillkit/SKILL.md +511 -0
- package/skills/skills/skillkit/commands/skillkit.md +6 -0
- package/skills/skills/skillkit/commands/validate-plan.md +6 -0
- package/skills/skills/skillkit/commands/verify.md +6 -0
- package/skills/skills/skillkit/knowledge/INDEX.md +352 -0
- package/skills/skills/skillkit/knowledge/application/09-case-studies.md +257 -0
- package/skills/skills/skillkit/knowledge/application/10-technical-architecture.md +324 -0
- package/skills/skills/skillkit/knowledge/application/11-adoption-strategy.md +267 -0
- package/skills/skills/skillkit/knowledge/application/12-testing-and-validation.md +276 -0
- package/skills/skills/skillkit/knowledge/application/13-competitive-landscape.md +198 -0
- package/skills/skills/skillkit/knowledge/foundation/01-why-skills-exist.md +246 -0
- package/skills/skills/skillkit/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
- package/skills/skills/skillkit/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
- package/skills/skills/skillkit/knowledge/foundation/04-hybrid-patterns.md +308 -0
- package/skills/skills/skillkit/knowledge/foundation/05-token-economics.md +275 -0
- package/skills/skills/skillkit/knowledge/foundation/06-platform-constraints.md +237 -0
- package/skills/skills/skillkit/knowledge/foundation/07-security-concerns.md +322 -0
- package/skills/skills/skillkit/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
- package/skills/skills/skillkit/knowledge/plugin-guide.md +614 -0
- package/skills/skills/skillkit/knowledge/tools/14-validation-tools-guide.md +150 -0
- package/skills/skills/skillkit/knowledge/tools/15-cost-tools-guide.md +157 -0
- package/skills/skills/skillkit/knowledge/tools/16-security-tools-guide.md +122 -0
- package/skills/skills/skillkit/knowledge/tools/17-pattern-tools-guide.md +161 -0
- package/skills/skills/skillkit/knowledge/tools/18-decision-helper-guide.md +243 -0
- package/skills/skills/skillkit/knowledge/tools/19-test-generator-guide.md +275 -0
- package/skills/skills/skillkit/knowledge/tools/20-split-skill-guide.md +149 -0
- package/skills/skills/skillkit/knowledge/tools/21-quality-scorer-guide.md +226 -0
- package/skills/skills/skillkit/knowledge/tools/22-migration-helper-guide.md +356 -0
- package/skills/skills/skillkit/knowledge/tools/23-subagent-creation-guide.md +448 -0
- package/skills/skills/skillkit/knowledge/tools/24-behavioral-testing-guide.md +122 -0
- package/skills/skills/skillkit/references/proposal-generation.md +982 -0
- package/skills/skills/skillkit/references/rationalization-catalog.md +75 -0
- package/skills/skills/skillkit/references/research-methodology.md +661 -0
- package/skills/skills/skillkit/references/section-2-full-creation-workflow.md +452 -0
- package/skills/skills/skillkit/references/section-3-validation-workflow-existing-skill.md +63 -0
- package/skills/skills/skillkit/references/section-4-decision-workflow-skills-vs-subagents.md +64 -0
- package/skills/skills/skillkit/references/section-5-migration-workflow-doc-to-skill.md +58 -0
- package/skills/skills/skillkit/references/section-6-subagent-creation-workflow.md +499 -0
- package/skills/skills/skillkit/references/section-7-knowledge-reference-map.md +72 -0
- package/skills/skills/skillkit/scripts/__pycache__/decision_helper.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/__pycache__/quick_validate.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/__pycache__/test_generator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skills/skillkit/scripts/decision_helper.py +799 -0
- package/skills/skills/skillkit/scripts/init_skill.py +400 -0
- package/skills/skills/skillkit/scripts/init_subagent.py +231 -0
- package/skills/skills/skillkit/scripts/migration_helper.py +669 -0
- package/skills/skills/skillkit/scripts/package_skill.py +211 -0
- package/skills/skills/skillkit/scripts/pattern_detector.py +381 -0
- package/skills/skills/skillkit/scripts/pattern_detector_new.py +382 -0
- package/skills/skills/skillkit/scripts/pressure_tester.py +157 -0
- package/skills/skills/skillkit/scripts/quality_scorer.py +999 -0
- package/skills/skills/skillkit/scripts/quick_validate.py +100 -0
- package/skills/skills/skillkit/scripts/security_scanner.py +474 -0
- package/skills/skills/skillkit/scripts/split_skill.py +540 -0
- package/skills/skills/skillkit/scripts/test_generator.py +695 -0
- package/skills/skills/skillkit/scripts/token_estimator.py +493 -0
- package/skills/skills/skillkit/scripts/utils/__init__.py +49 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/budget_tracker.py +388 -0
- package/skills/skills/skillkit/scripts/utils/output_formatter.py +263 -0
- package/skills/skills/skillkit/scripts/utils/reference_validator.py +401 -0
- package/skills/skills/skillkit/scripts/validate_skill.py +594 -0
- package/skills/skills/skillkit/tests/test_behavioral.py +39 -0
- package/skills/skills/skillkit/tests/test_scenarios.md +83 -0
- package/skills/skills/skillkit/tests/test_skill.py +136 -0
- package/skills/skills/skillkit-help/SKILL.md +81 -0
- package/skills/skills/skillkit-help/knowledge/application/09-case-studies.md +257 -0
- package/skills/skills/skillkit-help/knowledge/application/12-testing-and-validation.md +276 -0
- package/skills/skills/skillkit-help/knowledge/foundation/01-why-skills-exist.md +246 -0
- package/skills/skills/skillkit-help/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
- package/skills/skills/skillkit-help/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
- package/skills/skills/skillkit-help/knowledge/foundation/06-platform-constraints.md +237 -0
- package/skills/skills/skillkit-help/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
- package/skills/skills/skillkit-help/template/SKILL.md +52 -0
- package/skills/skills/social-media-seo/SKILL.md +278 -0
- package/skills/skills/social-media-seo/databases/caption-styles.csv +31 -0
- package/skills/skills/social-media-seo/databases/engagement-tactics.csv +16 -0
- package/skills/skills/social-media-seo/databases/hashtag-strategies.csv +21 -0
- package/skills/skills/social-media-seo/databases/hook-formulas.csv +26 -0
- package/skills/skills/social-media-seo/databases/keyword-clusters.csv +11 -0
- package/skills/skills/social-media-seo/databases/thread-structures.csv +26 -0
- package/skills/skills/social-media-seo/databases/viral-patterns.csv +21 -0
- package/skills/skills/social-media-seo/references/analytics-guide.md +321 -0
- package/skills/skills/social-media-seo/references/instagram-seo.md +235 -0
- package/skills/skills/social-media-seo/references/threads-seo.md +305 -0
- package/skills/skills/social-media-seo/references/x-twitter-seo.md +337 -0
- package/skills/skills/social-media-seo/scripts/query_database.py +191 -0
- package/skills/skills/storyteller/SKILL.md +241 -0
- package/skills/skills/storyteller/references/transformation-methodology.md +293 -0
- package/skills/skills/storyteller/references/visual-vocabulary.md +177 -0
- package/skills/skills/thread-pro/SKILL.md +162 -0
- package/skills/skills/thread-pro/anti-ai-patterns.md +120 -0
- package/skills/skills/thread-pro/hook-formulas.md +138 -0
- package/skills/skills/thread-pro/references/anti-ai-patterns.md +120 -0
- package/skills/skills/thread-pro/references/hook-formulas.md +138 -0
- package/skills/skills/thread-pro/references/thread-structures.md +240 -0
- package/skills/skills/thread-pro/references/voice-injection.md +130 -0
- package/skills/skills/thread-pro/thread-structures.md +240 -0
- package/skills/skills/thread-pro/voice-injection.md +130 -0
- package/skills/skills/tinkering/SKILL.md +251 -0
- package/skills/skills/tinkering/references/graduation-checklist.md +100 -0
- package/skills/skills/validate-plan/.skillkit-mode +1 -0
- package/skills/skills/validate-plan/SKILL.md +406 -0
- package/skills/skills/validate-plan/references/dry-principles.md +251 -0
- package/skills/skills/validate-plan/references/gap-analysis-guide.md +320 -0
- package/skills/skills/validate-plan/references/tdd-patterns.md +413 -0
- package/skills/skills/validate-plan/references/yagni-checklist.md +330 -0
- package/skills/skills/verify-before-ship/.skillkit-mode +1 -0
- package/skills/skills/verify-before-ship/SKILL.md +116 -0
- package/skills/skills/verify-before-ship/references/anti-rationalization.md +212 -0
- package/skills/skills/verify-before-ship/references/verification-gates.md +305 -0
- package/skills-manifest.json +8 -2
- package/src/banner.js +1 -1
- package/src/cli.js +15 -4
- package/src/install.js +45 -29
- package/src/install.test.js +75 -7
- package/src/picker.js +15 -4
- package/src/picker.test.js +36 -1
- package/src/scope.js +8 -39
- package/src/scope.test.js +9 -13
- package/src/tools.js +76 -0
- package/src/tools.test.js +80 -0
package/src/scope.js
CHANGED
|
@@ -1,57 +1,26 @@
|
|
|
1
|
+
// installer/src/scope.js
|
|
1
2
|
import { select, log } from '@clack/prompts'
|
|
2
|
-
import { homedir } from 'os'
|
|
3
|
-
import { join } from 'path'
|
|
4
|
-
import { existsSync } from 'fs'
|
|
5
|
-
|
|
6
|
-
export async function selectScope() {
|
|
7
|
-
const userSkillsPath = join(homedir(), '.claude', 'skills')
|
|
8
|
-
const projectSkillsPath = join(process.cwd(), '.claude', 'skills')
|
|
9
|
-
const projectExists = existsSync(join(process.cwd(), '.claude', 'skills'))
|
|
10
3
|
|
|
4
|
+
export async function selectScope(selectedTools = []) {
|
|
11
5
|
const scope = await select({
|
|
12
6
|
message: 'Install to:',
|
|
13
7
|
options: [
|
|
14
8
|
{
|
|
15
9
|
value: 'user',
|
|
16
|
-
label:
|
|
10
|
+
label: 'User scope',
|
|
17
11
|
hint: 'available in all projects'
|
|
18
12
|
},
|
|
19
13
|
{
|
|
20
14
|
value: 'project',
|
|
21
|
-
label:
|
|
22
|
-
hint:
|
|
15
|
+
label: 'Project scope',
|
|
16
|
+
hint: 'this project only'
|
|
23
17
|
}
|
|
24
18
|
]
|
|
25
19
|
})
|
|
26
20
|
|
|
27
|
-
if (scope === '
|
|
28
|
-
|
|
29
|
-
scope: 'user',
|
|
30
|
-
skillsDir: userSkillsPath,
|
|
31
|
-
agentsDir: join(homedir(), '.claude', 'agents')
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
scope: 'project',
|
|
37
|
-
skillsDir: projectSkillsPath,
|
|
38
|
-
agentsDir: join(process.cwd(), '.claude', 'agents')
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Export for testing
|
|
43
|
-
export function getUserScope() {
|
|
44
|
-
return {
|
|
45
|
-
scope: 'user',
|
|
46
|
-
skillsDir: join(homedir(), '.claude', 'skills'),
|
|
47
|
-
agentsDir: join(homedir(), '.claude', 'agents')
|
|
21
|
+
if (selectedTools.includes('codex') && scope === 'project') {
|
|
22
|
+
log.warn('Codex does not support project scope — skills will be installed to ~/.agents/skills/skillkit/')
|
|
48
23
|
}
|
|
49
|
-
}
|
|
50
24
|
|
|
51
|
-
|
|
52
|
-
return {
|
|
53
|
-
scope: 'project',
|
|
54
|
-
skillsDir: join(process.cwd(), '.claude', 'skills'),
|
|
55
|
-
agentsDir: join(process.cwd(), '.claude', 'agents')
|
|
56
|
-
}
|
|
25
|
+
return scope
|
|
57
26
|
}
|
package/src/scope.test.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
|
+
// installer/src/scope.test.js
|
|
1
2
|
import { test } from 'node:test'
|
|
2
3
|
import assert from 'node:assert'
|
|
3
|
-
import {
|
|
4
|
-
import { join } from 'path'
|
|
5
|
-
import { getUserScope, getProjectScope } from './scope.js'
|
|
4
|
+
import { selectScope } from './scope.js'
|
|
6
5
|
|
|
7
|
-
test('
|
|
8
|
-
const
|
|
9
|
-
assert.
|
|
10
|
-
assert.strictEqual(scope.skillsDir, join(homedir(), '.claude', 'skills'))
|
|
11
|
-
assert.strictEqual(scope.agentsDir, join(homedir(), '.claude', 'agents'))
|
|
6
|
+
test('selectScope is an async function', () => {
|
|
7
|
+
const AsyncFunction = (async () => {}).constructor
|
|
8
|
+
assert.ok(selectScope instanceof AsyncFunction)
|
|
12
9
|
})
|
|
13
10
|
|
|
14
|
-
test('getProjectScope
|
|
15
|
-
const
|
|
16
|
-
assert.strictEqual(
|
|
17
|
-
assert.strictEqual(
|
|
18
|
-
assert.strictEqual(scope.agentsDir, join(process.cwd(), '.claude', 'agents'))
|
|
11
|
+
test('getUserScope and getProjectScope are no longer exported', async () => {
|
|
12
|
+
const mod = await import('./scope.js')
|
|
13
|
+
assert.strictEqual(mod.getUserScope, undefined)
|
|
14
|
+
assert.strictEqual(mod.getProjectScope, undefined)
|
|
19
15
|
})
|
package/src/tools.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// installer/src/tools.js
|
|
2
|
+
import { multiselect } from '@clack/prompts'
|
|
3
|
+
import { homedir } from 'os'
|
|
4
|
+
import { join } from 'path'
|
|
5
|
+
|
|
6
|
+
export async function selectTools() {
|
|
7
|
+
return multiselect({
|
|
8
|
+
message: 'Install to which tools?',
|
|
9
|
+
options: [
|
|
10
|
+
{ value: 'claude-code', label: 'Claude Code', hint: '~/.claude/skills/' },
|
|
11
|
+
{ value: 'opencode', label: 'OpenCode', hint: '~/.config/opencode/skills/' },
|
|
12
|
+
{ value: 'codex', label: 'Codex', hint: '~/.agents/skills/' },
|
|
13
|
+
{ value: 'copilot', label: 'GitHub Copilot', hint: '~/.copilot/skills/' }
|
|
14
|
+
],
|
|
15
|
+
required: true
|
|
16
|
+
})
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getToolTargets(selectedTools, scope) {
|
|
20
|
+
if (!selectedTools.length) return []
|
|
21
|
+
|
|
22
|
+
const home = homedir()
|
|
23
|
+
const cwd = process.cwd()
|
|
24
|
+
const isUser = scope === 'user'
|
|
25
|
+
|
|
26
|
+
const resolve = {
|
|
27
|
+
'claude-code': {
|
|
28
|
+
name: 'Claude Code',
|
|
29
|
+
scope,
|
|
30
|
+
skillsDir: isUser ? join(home, '.claude', 'skills') : join(cwd, '.claude', 'skills'),
|
|
31
|
+
agentsDir: isUser ? join(home, '.claude', 'agents') : join(cwd, '.claude', 'agents')
|
|
32
|
+
},
|
|
33
|
+
'opencode': {
|
|
34
|
+
name: 'OpenCode',
|
|
35
|
+
scope,
|
|
36
|
+
skillsDir: isUser
|
|
37
|
+
? join(home, '.config', 'opencode', 'skills', 'skillkit')
|
|
38
|
+
: join(cwd, '.opencode', 'skills'),
|
|
39
|
+
agentsDir: isUser
|
|
40
|
+
? join(home, '.config', 'opencode', 'agents')
|
|
41
|
+
: join(cwd, '.opencode', 'agents')
|
|
42
|
+
},
|
|
43
|
+
'codex': {
|
|
44
|
+
name: 'Codex',
|
|
45
|
+
scope: 'user',
|
|
46
|
+
skillsDir: join(home, '.agents', 'skills', 'skillkit'),
|
|
47
|
+
agentsDir: null
|
|
48
|
+
},
|
|
49
|
+
'copilot': {
|
|
50
|
+
name: 'GitHub Copilot',
|
|
51
|
+
scope: isUser ? 'user' : 'project',
|
|
52
|
+
skillsDir: join(home, '.copilot', 'skills'),
|
|
53
|
+
agentsDir: isUser
|
|
54
|
+
? join(home, '.claude', 'agents')
|
|
55
|
+
: join(cwd, '.github', 'agents')
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const targets = selectedTools
|
|
60
|
+
.filter(id => resolve[id])
|
|
61
|
+
.map(id => ({ ...resolve[id] }))
|
|
62
|
+
|
|
63
|
+
// Dedup: if skillsDir or agentsDir appears more than once, null it in later targets
|
|
64
|
+
const seenSkills = new Set()
|
|
65
|
+
const seenAgents = new Set()
|
|
66
|
+
|
|
67
|
+
for (const t of targets) {
|
|
68
|
+
if (seenSkills.has(t.skillsDir)) t.skillsDir = null
|
|
69
|
+
else seenSkills.add(t.skillsDir)
|
|
70
|
+
|
|
71
|
+
if (t.agentsDir && seenAgents.has(t.agentsDir)) t.agentsDir = null
|
|
72
|
+
else if (t.agentsDir) seenAgents.add(t.agentsDir)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return targets.filter(t => t.skillsDir || t.agentsDir)
|
|
76
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// installer/src/tools.test.js
|
|
2
|
+
import { test } from 'node:test'
|
|
3
|
+
import assert from 'node:assert'
|
|
4
|
+
import { homedir } from 'os'
|
|
5
|
+
import { join } from 'path'
|
|
6
|
+
import { getToolTargets } from './tools.js'
|
|
7
|
+
|
|
8
|
+
const home = homedir()
|
|
9
|
+
const cwd = process.cwd()
|
|
10
|
+
|
|
11
|
+
test('getToolTargets returns empty array for empty selection', () => {
|
|
12
|
+
const result = getToolTargets([], 'user')
|
|
13
|
+
assert.deepStrictEqual(result, [])
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
test('getToolTargets claude-code user scope', () => {
|
|
17
|
+
const [t] = getToolTargets(['claude-code'], 'user')
|
|
18
|
+
assert.strictEqual(t.name, 'Claude Code')
|
|
19
|
+
assert.strictEqual(t.scope, 'user')
|
|
20
|
+
assert.strictEqual(t.skillsDir, join(home, '.claude', 'skills'))
|
|
21
|
+
assert.strictEqual(t.agentsDir, join(home, '.claude', 'agents'))
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
test('getToolTargets claude-code project scope', () => {
|
|
25
|
+
const [t] = getToolTargets(['claude-code'], 'project')
|
|
26
|
+
assert.strictEqual(t.scope, 'project')
|
|
27
|
+
assert.strictEqual(t.skillsDir, join(cwd, '.claude', 'skills'))
|
|
28
|
+
assert.strictEqual(t.agentsDir, join(cwd, '.claude', 'agents'))
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
test('getToolTargets opencode user scope', () => {
|
|
32
|
+
const [t] = getToolTargets(['opencode'], 'user')
|
|
33
|
+
assert.strictEqual(t.name, 'OpenCode')
|
|
34
|
+
assert.strictEqual(t.skillsDir, join(home, '.config', 'opencode', 'skills', 'skillkit'))
|
|
35
|
+
assert.strictEqual(t.agentsDir, join(home, '.config', 'opencode', 'agents'))
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
test('getToolTargets opencode project scope', () => {
|
|
39
|
+
const [t] = getToolTargets(['opencode'], 'project')
|
|
40
|
+
assert.strictEqual(t.skillsDir, join(cwd, '.opencode', 'skills'))
|
|
41
|
+
assert.strictEqual(t.agentsDir, join(cwd, '.opencode', 'agents'))
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test('getToolTargets codex user scope — agentsDir is null', () => {
|
|
45
|
+
const [t] = getToolTargets(['codex'], 'user')
|
|
46
|
+
assert.strictEqual(t.name, 'Codex')
|
|
47
|
+
assert.strictEqual(t.skillsDir, join(home, '.agents', 'skills', 'skillkit'))
|
|
48
|
+
assert.strictEqual(t.agentsDir, null)
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('getToolTargets codex project scope — still resolves to user path', () => {
|
|
52
|
+
const [t] = getToolTargets(['codex'], 'project')
|
|
53
|
+
assert.strictEqual(t.scope, 'user')
|
|
54
|
+
assert.strictEqual(t.skillsDir, join(home, '.agents', 'skills', 'skillkit'))
|
|
55
|
+
assert.strictEqual(t.agentsDir, null)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
test('getToolTargets copilot user scope', () => {
|
|
59
|
+
const [t] = getToolTargets(['copilot'], 'user')
|
|
60
|
+
assert.strictEqual(t.name, 'GitHub Copilot')
|
|
61
|
+
assert.strictEqual(t.skillsDir, join(home, '.copilot', 'skills'))
|
|
62
|
+
assert.strictEqual(t.agentsDir, join(home, '.claude', 'agents'))
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
test('getToolTargets copilot project scope — skills still user path, agents project path', () => {
|
|
66
|
+
const [t] = getToolTargets(['copilot'], 'project')
|
|
67
|
+
assert.strictEqual(t.skillsDir, join(home, '.copilot', 'skills'))
|
|
68
|
+
assert.strictEqual(t.agentsDir, join(cwd, '.github', 'agents'))
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
test('getToolTargets deduplicates agentsDir for claude-code + copilot (user)', () => {
|
|
72
|
+
const targets = getToolTargets(['claude-code', 'copilot'], 'user')
|
|
73
|
+
assert.strictEqual(targets.length, 2)
|
|
74
|
+
const agentsDirs = targets.map(t => t.agentsDir).filter(Boolean)
|
|
75
|
+
const uniqueAgentsDirs = [...new Set(agentsDirs)]
|
|
76
|
+
assert.strictEqual(agentsDirs.length, uniqueAgentsDirs.length, 'no duplicate agentsDirs')
|
|
77
|
+
// Claude Code gets agentsDir, Copilot gets null (deduped)
|
|
78
|
+
assert.strictEqual(targets[0].agentsDir, join(home, '.claude', 'agents'))
|
|
79
|
+
assert.strictEqual(targets[1].agentsDir, null)
|
|
80
|
+
})
|