@hasna/skills 0.1.18 → 0.1.20

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.
Files changed (234) hide show
  1. package/README.md +108 -372
  2. package/bin/index.js +10455 -9282
  3. package/bin/mcp.js +4793 -3402
  4. package/dist/cli/commands/completion.d.ts +5 -0
  5. package/dist/cli/commands/create-sync-config.d.ts +5 -0
  6. package/dist/cli/commands/diagnostic.d.ts +5 -0
  7. package/dist/cli/commands/init.d.ts +5 -0
  8. package/dist/cli/commands/install.d.ts +5 -0
  9. package/dist/cli/commands/introspect.d.ts +5 -0
  10. package/dist/cli/commands/list.d.ts +5 -0
  11. package/dist/cli/commands/runtime.d.ts +5 -0
  12. package/dist/cli/commands/schedule.d.ts +5 -0
  13. package/dist/index.js +197 -97
  14. package/dist/lib/config.d.ts +1 -1
  15. package/dist/lib/registry.d.ts +1 -11
  16. package/dist/lib/scheduler.d.ts +1 -1
  17. package/dist/lib/scheduler.test.d.ts +4 -0
  18. package/dist/lib/search.d.ts +17 -0
  19. package/package.json +3 -3
  20. package/skills/skill-commitpush/SKILL.md +57 -0
  21. package/skills/skill-commitpush/package.json +34 -0
  22. package/skills/skill-commitpush/src/index.ts +34 -0
  23. package/skills/skill-commitpush/tsconfig.json +17 -0
  24. package/skills/skill-commitpushpr/SKILL.md +55 -0
  25. package/skills/skill-commitpushpr/package.json +34 -0
  26. package/skills/skill-commitpushpr/src/index.ts +34 -0
  27. package/skills/skill-commitpushpr/tsconfig.json +17 -0
  28. package/skills/skill-monitor/SKILL.md +69 -0
  29. package/skills/skill-monitor/package.json +34 -0
  30. package/skills/skill-monitor/src/index.ts +34 -0
  31. package/skills/skill-monitor/tsconfig.json +17 -0
  32. package/skills/skill-read-csv/SKILL.md +62 -0
  33. package/skills/skill-read-csv/package.json +38 -0
  34. package/skills/skill-read-csv/src/index.ts +331 -0
  35. package/skills/skill-read-csv/tsconfig.json +17 -0
  36. package/skills/skill-read-excel/SKILL.md +64 -0
  37. package/skills/skill-read-excel/package.json +37 -0
  38. package/skills/skill-read-excel/src/index.ts +253 -0
  39. package/skills/skill-read-excel/tsconfig.json +17 -0
  40. package/skills/skill-read-image/SKILL.md +47 -0
  41. package/skills/skill-read-image/package.json +34 -0
  42. package/skills/skill-read-image/src/index.ts +264 -0
  43. package/skills/skill-read-image/tsconfig.json +17 -0
  44. package/skills/skill-read-pdf/SKILL.md +52 -0
  45. package/skills/skill-read-pdf/package.json +37 -0
  46. package/skills/skill-read-pdf/src/index.ts +376 -0
  47. package/skills/skill-read-pdf/tsconfig.json +17 -0
  48. package/skills/skill-tmux-session/SKILL.md +109 -0
  49. package/skills/skill-tmux-session/package.json +34 -0
  50. package/skills/skill-tmux-session/src/index.ts +34 -0
  51. package/skills/skill-tmux-session/tsconfig.json +17 -0
  52. package/skills/skill-academic-journal-matcher/bin/cli.ts +0 -34
  53. package/skills/skill-action-item-router/bin/cli.ts +0 -34
  54. package/skills/skill-ad-creative-generator/bin/cli.ts +0 -34
  55. package/skills/skill-advanced-math/bin/cli.ts +0 -34
  56. package/skills/skill-analyze-data/bin/cli.ts +0 -19
  57. package/skills/skill-anomaly-investigator/bin/cli.ts +0 -34
  58. package/skills/skill-api-test-suite/bin/cli.ts +0 -34
  59. package/skills/skill-apidocs/bin/cli.ts +0 -87
  60. package/skills/skill-audio-cleanup-lab/bin/cli.ts +0 -6
  61. package/skills/skill-audiobook-chapter-proofer/bin/cli.ts +0 -34
  62. package/skills/skill-banner-ad-suite/bin/cli.ts +0 -34
  63. package/skills/skill-benchmark-finder/bin/cli.ts +0 -34
  64. package/skills/skill-bio-sequence-tool/bin/cli.ts +0 -34
  65. package/skills/skill-blog-topic-cluster/bin/cli.ts +0 -34
  66. package/skills/skill-brand-style-guide/bin/cli.ts +0 -19
  67. package/skills/skill-brand-voice-audit/bin/cli.ts +0 -34
  68. package/skills/skill-budget-variance-analyzer/bin/cli.ts +0 -6
  69. package/skills/skill-businessactivity/bin/cli.ts +0 -28
  70. package/skills/skill-calendar-events/bin/cli.ts +0 -34
  71. package/skills/skill-campaign-metric-brief/bin/cli.ts +0 -34
  72. package/skills/skill-campaign-moodboard/bin/cli.ts +0 -34
  73. package/skills/skill-caption-style-stylist/bin/cli.ts +0 -34
  74. package/skills/skill-chemistry-calculator/bin/cli.ts +0 -34
  75. package/skills/skill-churn-risk-notifier/bin/cli.ts +0 -34
  76. package/skills/skill-citation-formatter/bin/cli.ts +0 -34
  77. package/skills/skill-classroom-newsletter-kit/bin/cli.ts +0 -34
  78. package/skills/skill-color-palette-harmonizer/bin/cli.ts +0 -34
  79. package/skills/skill-competitor-ad-analyzer/bin/cli.ts +0 -34
  80. package/skills/skill-compliance-copy-check/bin/cli.ts +0 -34
  81. package/skills/skill-compliance-report-pack/bin/cli.ts +0 -34
  82. package/skills/skill-compress-video/bin/cli.ts +0 -19
  83. package/skills/skill-consolelog/bin/cli.ts +0 -884
  84. package/skills/skill-contract-plainlanguage/bin/cli.ts +0 -34
  85. package/skills/skill-copytone-translator/bin/cli.ts +0 -34
  86. package/skills/skill-create-blog-article/bin/cli.ts +0 -34
  87. package/skills/skill-create-ebook/bin/cli.ts +0 -34
  88. package/skills/skill-crm-note-enhancer/bin/cli.ts +0 -34
  89. package/skills/skill-customer-journey-mapper/bin/cli.ts +0 -34
  90. package/skills/skill-dashboard-builder/bin/cli.ts +0 -34
  91. package/skills/skill-dashboard-narrator/bin/cli.ts +0 -34
  92. package/skills/skill-data-anonymizer/bin/cli.ts +0 -34
  93. package/skills/skill-database-explorer/bin/cli.ts +0 -34
  94. package/skills/skill-dataset-health-check/bin/cli.ts +0 -34
  95. package/skills/skill-decision-journal/bin/cli.ts +0 -34
  96. package/skills/skill-delegation-brief-writer/bin/cli.ts +0 -34
  97. package/skills/skill-destination-briefing/bin/cli.ts +0 -34
  98. package/skills/skill-diff-viewer/bin/cli.ts +0 -34
  99. package/skills/skill-domainpurchase/bin/cli.ts +0 -683
  100. package/skills/skill-domainsearch/bin/cli.ts +0 -410
  101. package/skills/skill-educational-resource-finder/bin/cli.ts +0 -34
  102. package/skills/skill-email-campaign/bin/cli.ts +0 -34
  103. package/skills/skill-exam-readiness-check/bin/cli.ts +0 -34
  104. package/skills/skill-experiment-power-calculator/bin/cli.ts +0 -34
  105. package/skills/skill-extract-audio/bin/cli.ts +0 -19
  106. package/skills/skill-extract-frames/bin/cli.ts +0 -34
  107. package/skills/skill-extract-invoice/bin/cli.ts +0 -34
  108. package/skills/skill-family-activity-curator/bin/cli.ts +0 -34
  109. package/skills/skill-faq-packager/bin/cli.ts +0 -34
  110. package/skills/skill-feedback-survey-designer/bin/cli.ts +0 -34
  111. package/skills/skill-field-trip-planner/bin/cli.ts +0 -34
  112. package/skills/skill-file-organizer/bin/cli.ts +0 -34
  113. package/skills/skill-folder-tree/bin/cli.ts +0 -34
  114. package/skills/skill-forecast-scenario-lab/bin/cli.ts +0 -34
  115. package/skills/skill-form-filler/bin/cli.ts +0 -34
  116. package/skills/skill-generate-api-client/bin/cli.ts +0 -34
  117. package/skills/skill-generate-book-cover/bin/cli.ts +0 -34
  118. package/skills/skill-generate-chart/bin/cli.ts +0 -34
  119. package/skills/skill-generate-diagram/bin/cli.ts +0 -34
  120. package/skills/skill-generate-dockerfile/bin/cli.ts +0 -34
  121. package/skills/skill-generate-documentation/bin/cli.ts +0 -34
  122. package/skills/skill-generate-docx/bin/cli.ts +0 -6
  123. package/skills/skill-generate-env/bin/cli.ts +0 -34
  124. package/skills/skill-generate-excel/bin/cli.ts +0 -34
  125. package/skills/skill-generate-favicon/bin/cli.ts +0 -34
  126. package/skills/skill-generate-mock-data/bin/cli.ts +0 -34
  127. package/skills/skill-generate-pdf/bin/cli.ts +0 -6
  128. package/skills/skill-generate-pr-description/bin/cli.ts +0 -34
  129. package/skills/skill-generate-presentation/bin/cli.ts +0 -34
  130. package/skills/skill-generate-qrcode/bin/cli.ts +0 -34
  131. package/skills/skill-generate-regex/bin/cli.ts +0 -34
  132. package/skills/skill-generate-resume/bin/cli.ts +0 -34
  133. package/skills/skill-generate-sitemap/bin/cli.ts +0 -34
  134. package/skills/skill-generate-social-posts/bin/cli.ts +0 -34
  135. package/skills/skill-generate-sql/bin/cli.ts +0 -34
  136. package/skills/skill-gif-maker/bin/cli.ts +0 -34
  137. package/skills/skill-github-manager/bin/cli.ts +0 -34
  138. package/skills/skill-gmail/bin/cli.ts +0 -34
  139. package/skills/skill-goal-quarterly-roadmap/bin/cli.ts +0 -34
  140. package/skills/skill-grant-application-drafter/bin/cli.ts +0 -34
  141. package/skills/skill-grocery-basket-optimizer/bin/cli.ts +0 -34
  142. package/skills/skill-guest-communication-suite/bin/cli.ts +0 -34
  143. package/skills/skill-habit-reflection-digest/bin/cli.ts +0 -34
  144. package/skills/skill-highlight-reel-generator/bin/cli.ts +0 -34
  145. package/skills/skill-homework-feedback-coach/bin/cli.ts +0 -34
  146. package/skills/skill-household-maintenance-mgr/bin/cli.ts +0 -34
  147. package/skills/skill-http-server/bin/cli.ts +0 -34
  148. package/skills/skill-implementation-agent/bin/cli.ts +0 -34
  149. package/skills/skill-implementation-plan/bin/cli.ts +0 -34
  150. package/skills/skill-implementation-todo/bin/cli.ts +0 -34
  151. package/skills/skill-inbox-priority-planner/bin/cli.ts +0 -34
  152. package/skills/skill-invoice/bin/cli.ts +0 -20
  153. package/skills/skill-invoice-dispute-helper/bin/cli.ts +0 -34
  154. package/skills/skill-itinerary-architect/bin/cli.ts +0 -34
  155. package/skills/skill-jingle-composer/bin/cli.ts +0 -34
  156. package/skills/skill-kpi-digest-generator/bin/cli.ts +0 -34
  157. package/skills/skill-lab-notebook-formatter/bin/cli.ts +0 -34
  158. package/skills/skill-landing-page-copy/bin/cli.ts +0 -34
  159. package/skills/skill-latex-table-generator/bin/cli.ts +0 -34
  160. package/skills/skill-learning-style-profiler/bin/cli.ts +0 -34
  161. package/skills/skill-lesson-plan-customizer/bin/cli.ts +0 -34
  162. package/skills/skill-livestream-runofshow/bin/cli.ts +0 -34
  163. package/skills/skill-longform-structurer/bin/cli.ts +0 -34
  164. package/skills/skill-lorem-generator/bin/cli.ts +0 -34
  165. package/skills/skill-managehook/bin/cli.ts +0 -241
  166. package/skills/skill-managemcp/bin/cli.ts +0 -241
  167. package/skills/skill-manageskill/bin/cli.ts +0 -241
  168. package/skills/skill-markdown-validator/bin/cli.ts +0 -34
  169. package/skills/skill-mcp-builder/bin/cli.ts +0 -34
  170. package/skills/skill-meal-plan-designer/bin/cli.ts +0 -34
  171. package/skills/skill-meeting-insight-summarizer/bin/cli.ts +0 -34
  172. package/skills/skill-merge-pdfs/bin/cli.ts +0 -34
  173. package/skills/skill-microcopy-generator/bin/cli.ts +0 -34
  174. package/skills/skill-mindfulness-prompt-cache/bin/cli.ts +0 -34
  175. package/skills/skill-notion-manager/bin/cli.ts +0 -34
  176. package/skills/skill-onboarding-sequence-builder/bin/cli.ts +0 -34
  177. package/skills/skill-onsite-ops-checklist/bin/cli.ts +0 -34
  178. package/skills/skill-outreach-cadence-designer/bin/cli.ts +0 -34
  179. package/skills/skill-packaging-concept-studio/bin/cli.ts +0 -34
  180. package/skills/skill-packing-plan-pro/bin/cli.ts +0 -34
  181. package/skills/skill-parent-teacher-brief/bin/cli.ts +0 -34
  182. package/skills/skill-partner-kit-assembler/bin/cli.ts +0 -34
  183. package/skills/skill-payroll-change-prepper/bin/cli.ts +0 -34
  184. package/skills/skill-persona-based-adwriter/bin/cli.ts +0 -34
  185. package/skills/skill-persona-generator/bin/cli.ts +0 -34
  186. package/skills/skill-personal-daily-ops/bin/cli.ts +0 -34
  187. package/skills/skill-pet-care-scheduler/bin/cli.ts +0 -34
  188. package/skills/skill-podcast-show-notes/bin/cli.ts +0 -34
  189. package/skills/skill-presentation-theme-maker/bin/cli.ts +0 -34
  190. package/skills/skill-press-release-drafter/bin/cli.ts +0 -34
  191. package/skills/skill-print-collateral-designer/bin/cli.ts +0 -34
  192. package/skills/skill-procurement-scorecard/bin/cli.ts +0 -34
  193. package/skills/skill-product-demo-script/bin/cli.ts +0 -34
  194. package/skills/skill-product-mockup/bin/cli.ts +0 -34
  195. package/skills/skill-project-retro-companion/bin/cli.ts +0 -34
  196. package/skills/skill-proposal-redline-advisor/bin/cli.ts +0 -34
  197. package/skills/skill-regex-tester/bin/cli.ts +0 -34
  198. package/skills/skill-remove-background/bin/cli.ts +0 -34
  199. package/skills/skill-risk-disclosure-kit/bin/cli.ts +0 -34
  200. package/skills/skill-roi-comparison-tool/bin/cli.ts +0 -34
  201. package/skills/skill-sales-call-recapper/bin/cli.ts +0 -34
  202. package/skills/skill-salescopy/bin/cli.ts +0 -20
  203. package/skills/skill-scaffold-project/bin/cli.ts +0 -34
  204. package/skills/skill-scholarship-tracker/bin/cli.ts +0 -34
  205. package/skills/skill-scientific-figure-check/bin/cli.ts +0 -34
  206. package/skills/skill-seating-chart-maker/bin/cli.ts +0 -34
  207. package/skills/skill-security-audit/bin/cli.ts +0 -34
  208. package/skills/skill-seo-brief-builder/bin/cli.ts +0 -34
  209. package/skills/skill-slack-assistant/bin/cli.ts +0 -34
  210. package/skills/skill-sleep-routine-analyzer/bin/cli.ts +0 -34
  211. package/skills/skill-social-media-kit/bin/cli.ts +0 -34
  212. package/skills/skill-split-pdf/bin/cli.ts +0 -34
  213. package/skills/skill-sponsorship-proposal-lab/bin/cli.ts +0 -34
  214. package/skills/skill-spreadsheet-cleanroom/bin/cli.ts +0 -34
  215. package/skills/skill-statistical-test-selector/bin/cli.ts +0 -34
  216. package/skills/skill-stress-relief-playbook/bin/cli.ts +0 -34
  217. package/skills/skill-study-guide-builder/bin/cli.ts +0 -34
  218. package/skills/skill-subscription-spend-watcher/bin/cli.ts +0 -34
  219. package/skills/skill-subtitle/bin/cli.ts +0 -20
  220. package/skills/skill-survey-insight-extractor/bin/cli.ts +0 -34
  221. package/skills/skill-terraform-generator/bin/cli.ts +0 -34
  222. package/skills/skill-testimonial-graphics/bin/cli.ts +0 -34
  223. package/skills/skill-timesheet/bin/cli.ts +0 -47
  224. package/skills/skill-travel-budget-balancer/bin/cli.ts +0 -34
  225. package/skills/skill-validate-config/bin/cli.ts +0 -34
  226. package/skills/skill-video-cut-suggester/bin/cli.ts +0 -34
  227. package/skills/skill-video-downloader/bin/cli.ts +0 -34
  228. package/skills/skill-video-thumbnail/bin/cli.ts +0 -34
  229. package/skills/skill-voiceover-casting-assistant/bin/cli.ts +0 -34
  230. package/skills/skill-watermark/bin/cli.ts +0 -34
  231. package/skills/skill-webcrawling/bin/cli.ts +0 -21
  232. package/skills/skill-webinar-script-coach/bin/cli.ts +0 -34
  233. package/skills/skill-wellness-progress-reporter/bin/cli.ts +0 -34
  234. package/skills/skill-workout-cycle-planner/bin/cli.ts +0 -34
@@ -1,241 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { Command } from 'commander';
4
- import { listItems, getItem, searchItems, createItem } from '../src/lib/api-client';
5
- import { loadConfig, saveConfig } from '../src/lib/config';
6
- import { install, clearTarget, listInstalled } from '../src/lib/installer';
7
- import { ensureServiceDir, initServiceDir, logInfo } from '../src/lib/service-dir';
8
-
9
- // Ensure service directory exists on startup
10
- ensureServiceDir();
11
-
12
- const program = new Command();
13
-
14
- program
15
- .name('{{name}}')
16
- .description('{{description}}')
17
- .version('0.1.0');
18
-
19
- // Config command
20
- program
21
- .command('config')
22
- .description('Manage configuration')
23
- .option('-s, --show', 'Show current configuration')
24
- .option('--set-api-key <key>', 'Set API key')
25
- .option('--set-api-url <url>', 'Set API URL')
26
- .action(async (options) => {
27
- if (options.show) {
28
- const config = await loadConfig();
29
- console.log('Current configuration:');
30
- console.log(`API URL: ${config.apiUrl || 'Not set'}`);
31
- console.log(`API Key: ${config.apiKey ? '***' + config.apiKey.slice(-4) : 'Not set'}`);
32
- return;
33
- }
34
-
35
- const config = await loadConfig();
36
-
37
- if (options.setApiKey) {
38
- config.apiKey = options.setApiKey;
39
- await saveConfig(config);
40
- console.log('API key updated');
41
- }
42
-
43
- if (options.setApiUrl) {
44
- config.apiUrl = options.setApiUrl;
45
- await saveConfig(config);
46
- console.log('API URL updated');
47
- }
48
- });
49
-
50
- // List command
51
- program
52
- .command('list')
53
- .description('List all items')
54
- .option('-f, --filter <filter>', 'Filter items')
55
- .option('-l, --limit <limit>', 'Limit number of results', '10')
56
- .option('-o, --offset <offset>', 'Offset for pagination', '0')
57
- .action(async (options) => {
58
- try {
59
- const items = await listItems({
60
- filter: options.filter,
61
- limit: parseInt(options.limit),
62
- offset: parseInt(options.offset),
63
- });
64
-
65
- if (items.length === 0) {
66
- console.log('No items found');
67
- return;
68
- }
69
-
70
- console.log(`Found ${items.length} items:\n`);
71
- items.forEach((item) => {
72
- console.log(`${item.id}: ${item.name}`);
73
- if (item.description) {
74
- console.log(` ${item.description}`);
75
- }
76
- console.log('');
77
- });
78
- } catch (error) {
79
- console.error('Error:', error instanceof Error ? error.message : 'Failed to list items');
80
- process.exit(1);
81
- }
82
- });
83
-
84
- // Get command
85
- program
86
- .command('get <id>')
87
- .description('Get a single item by ID')
88
- .action(async (id) => {
89
- try {
90
- const item = await getItem(id);
91
- console.log(`\nItem: ${item.name}`);
92
- console.log(`ID: ${item.id}`);
93
- if (item.description) {
94
- console.log(`Description: ${item.description}`);
95
- }
96
- if (item.metadata) {
97
- console.log(`Metadata:`, JSON.stringify(item.metadata, null, 2));
98
- }
99
- } catch (error) {
100
- console.error('Error:', error instanceof Error ? error.message : 'Failed to fetch item');
101
- process.exit(1);
102
- }
103
- });
104
-
105
- // Search command
106
- program
107
- .command('search <query>')
108
- .description('Search for items')
109
- .option('-l, --limit <limit>', 'Limit number of results', '10')
110
- .action(async (query, options) => {
111
- try {
112
- const items = await searchItems(query, parseInt(options.limit));
113
-
114
- if (items.length === 0) {
115
- console.log('No items found');
116
- return;
117
- }
118
-
119
- console.log(`Found ${items.length} items:\n`);
120
- items.forEach((item) => {
121
- console.log(`${item.id}: ${item.name}`);
122
- if (item.description) {
123
- console.log(` ${item.description}`);
124
- }
125
- console.log('');
126
- });
127
- } catch (error) {
128
- console.error('Error:', error instanceof Error ? error.message : 'Failed to search items');
129
- process.exit(1);
130
- }
131
- });
132
-
133
- // Add command
134
- program
135
- .command('add')
136
- .description('Add a new item')
137
- .requiredOption('-n, --name <name>', 'Item name')
138
- .option('-d, --description <description>', 'Item description')
139
- .option('-m, --metadata <json>', 'Item metadata as JSON')
140
- .action(async (options) => {
141
- try {
142
- const metadata = options.metadata ? JSON.parse(options.metadata) : undefined;
143
- const item = await createItem({
144
- name: options.name,
145
- description: options.description,
146
- metadata,
147
- });
148
-
149
- console.log(`\nItem created successfully!`);
150
- console.log(`ID: ${item.id}`);
151
- console.log(`Name: ${item.name}`);
152
- } catch (error) {
153
- console.error('Error:', error instanceof Error ? error.message : 'Failed to create item');
154
- process.exit(1);
155
- }
156
- });
157
-
158
- // Install command
159
- program
160
- .command('install')
161
- .description('Install items to Claude or Codex')
162
- .option('-t, --target <target>', 'Target (claude, codex, or both)', 'both')
163
- .option('-f, --force', 'Overwrite existing files')
164
- .option('--clear', 'Clear all installed items before installing')
165
- .option('--list', 'List currently installed items')
166
- .argument('[ids...]', 'Item IDs to install')
167
- .action(async (ids, options) => {
168
- try {
169
- if (options.list) {
170
- const installed = await listInstalled(options.target === 'both' ? undefined : options.target);
171
- if (installed.length === 0) {
172
- console.log('No items installed');
173
- return;
174
- }
175
- console.log('Installed items:');
176
- installed.forEach((item) => {
177
- console.log(` ${item.target}: ${item.id} (${item.name})`);
178
- });
179
- return;
180
- }
181
-
182
- if (options.clear) {
183
- await clearTarget(options.target === 'both' ? undefined : options.target);
184
- console.log('Cleared installed items');
185
- if (ids.length === 0) return;
186
- }
187
-
188
- if (ids.length === 0) {
189
- console.log('No item IDs provided');
190
- return;
191
- }
192
-
193
- const conflictStrategy = options.force ? 'overwrite' : 'skip';
194
-
195
- for (const id of ids) {
196
- console.log(`Installing item ${id}...`);
197
- const result = await install(id, options.target, conflictStrategy);
198
- console.log(` ${result.message}`);
199
- }
200
- } catch (error) {
201
- console.error('Error:', error instanceof Error ? error.message : 'Failed to install items');
202
- process.exit(1);
203
- }
204
- });
205
-
206
- // Setup command
207
- program
208
- .command('setup')
209
- .description('Interactive setup wizard')
210
- .option('-f, --force', 'Force reinitialize service directory')
211
- .action(async (options) => {
212
- console.log('Welcome to service-{{name}} setup!\n');
213
-
214
- // Initialize service directory
215
- const result = initServiceDir(options.force);
216
- if (result.success) {
217
- console.log(`✓ Service directory initialized at ${result.path}`);
218
- logInfo('Service directory initialized via setup command');
219
- } else {
220
- console.log(`Service directory already exists at ${result.path}`);
221
- }
222
-
223
- // Check if config exists
224
- const config = await loadConfig();
225
- const hasConfig = config.apiKey && config.apiUrl;
226
-
227
- if (hasConfig) {
228
- console.log('\nConfiguration already exists:');
229
- console.log(`API URL: ${config.apiUrl}`);
230
- console.log(`API Key: ***${config.apiKey.slice(-4)}\n`);
231
- console.log('Use "service-{{name}} config --set-api-key <key>" or "--set-api-url <url>" to update.');
232
- } else {
233
- console.log('\nNo configuration found. Please set up your API credentials:');
234
- console.log(' service-{{name}} config --set-api-url <url>');
235
- console.log(' service-{{name}} config --set-api-key <key>');
236
- }
237
-
238
- console.log('\nFor more information, run: service-{{name}} --help');
239
- });
240
-
241
- program.parse();
@@ -1,241 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { Command } from 'commander';
4
- import { listItems, getItem, searchItems, createItem } from '../src/lib/api-client';
5
- import { loadConfig, saveConfig } from '../src/lib/config';
6
- import { install, clearTarget, listInstalled } from '../src/lib/installer';
7
- import { ensureServiceDir, initServiceDir, logInfo } from '../src/lib/service-dir';
8
-
9
- // Ensure service directory exists on startup
10
- ensureServiceDir();
11
-
12
- const program = new Command();
13
-
14
- program
15
- .name('{{name}}')
16
- .description('{{description}}')
17
- .version('0.1.0');
18
-
19
- // Config command
20
- program
21
- .command('config')
22
- .description('Manage configuration')
23
- .option('-s, --show', 'Show current configuration')
24
- .option('--set-api-key <key>', 'Set API key')
25
- .option('--set-api-url <url>', 'Set API URL')
26
- .action(async (options) => {
27
- if (options.show) {
28
- const config = await loadConfig();
29
- console.log('Current configuration:');
30
- console.log(`API URL: ${config.apiUrl || 'Not set'}`);
31
- console.log(`API Key: ${config.apiKey ? '***' + config.apiKey.slice(-4) : 'Not set'}`);
32
- return;
33
- }
34
-
35
- const config = await loadConfig();
36
-
37
- if (options.setApiKey) {
38
- config.apiKey = options.setApiKey;
39
- await saveConfig(config);
40
- console.log('API key updated');
41
- }
42
-
43
- if (options.setApiUrl) {
44
- config.apiUrl = options.setApiUrl;
45
- await saveConfig(config);
46
- console.log('API URL updated');
47
- }
48
- });
49
-
50
- // List command
51
- program
52
- .command('list')
53
- .description('List all items')
54
- .option('-f, --filter <filter>', 'Filter items')
55
- .option('-l, --limit <limit>', 'Limit number of results', '10')
56
- .option('-o, --offset <offset>', 'Offset for pagination', '0')
57
- .action(async (options) => {
58
- try {
59
- const items = await listItems({
60
- filter: options.filter,
61
- limit: parseInt(options.limit),
62
- offset: parseInt(options.offset),
63
- });
64
-
65
- if (items.length === 0) {
66
- console.log('No items found');
67
- return;
68
- }
69
-
70
- console.log(`Found ${items.length} items:\n`);
71
- items.forEach((item) => {
72
- console.log(`${item.id}: ${item.name}`);
73
- if (item.description) {
74
- console.log(` ${item.description}`);
75
- }
76
- console.log('');
77
- });
78
- } catch (error) {
79
- console.error('Error:', error instanceof Error ? error.message : 'Failed to list items');
80
- process.exit(1);
81
- }
82
- });
83
-
84
- // Get command
85
- program
86
- .command('get <id>')
87
- .description('Get a single item by ID')
88
- .action(async (id) => {
89
- try {
90
- const item = await getItem(id);
91
- console.log(`\nItem: ${item.name}`);
92
- console.log(`ID: ${item.id}`);
93
- if (item.description) {
94
- console.log(`Description: ${item.description}`);
95
- }
96
- if (item.metadata) {
97
- console.log(`Metadata:`, JSON.stringify(item.metadata, null, 2));
98
- }
99
- } catch (error) {
100
- console.error('Error:', error instanceof Error ? error.message : 'Failed to fetch item');
101
- process.exit(1);
102
- }
103
- });
104
-
105
- // Search command
106
- program
107
- .command('search <query>')
108
- .description('Search for items')
109
- .option('-l, --limit <limit>', 'Limit number of results', '10')
110
- .action(async (query, options) => {
111
- try {
112
- const items = await searchItems(query, parseInt(options.limit));
113
-
114
- if (items.length === 0) {
115
- console.log('No items found');
116
- return;
117
- }
118
-
119
- console.log(`Found ${items.length} items:\n`);
120
- items.forEach((item) => {
121
- console.log(`${item.id}: ${item.name}`);
122
- if (item.description) {
123
- console.log(` ${item.description}`);
124
- }
125
- console.log('');
126
- });
127
- } catch (error) {
128
- console.error('Error:', error instanceof Error ? error.message : 'Failed to search items');
129
- process.exit(1);
130
- }
131
- });
132
-
133
- // Add command
134
- program
135
- .command('add')
136
- .description('Add a new item')
137
- .requiredOption('-n, --name <name>', 'Item name')
138
- .option('-d, --description <description>', 'Item description')
139
- .option('-m, --metadata <json>', 'Item metadata as JSON')
140
- .action(async (options) => {
141
- try {
142
- const metadata = options.metadata ? JSON.parse(options.metadata) : undefined;
143
- const item = await createItem({
144
- name: options.name,
145
- description: options.description,
146
- metadata,
147
- });
148
-
149
- console.log(`\nItem created successfully!`);
150
- console.log(`ID: ${item.id}`);
151
- console.log(`Name: ${item.name}`);
152
- } catch (error) {
153
- console.error('Error:', error instanceof Error ? error.message : 'Failed to create item');
154
- process.exit(1);
155
- }
156
- });
157
-
158
- // Install command
159
- program
160
- .command('install')
161
- .description('Install items to Claude or Codex')
162
- .option('-t, --target <target>', 'Target (claude, codex, or both)', 'both')
163
- .option('-f, --force', 'Overwrite existing files')
164
- .option('--clear', 'Clear all installed items before installing')
165
- .option('--list', 'List currently installed items')
166
- .argument('[ids...]', 'Item IDs to install')
167
- .action(async (ids, options) => {
168
- try {
169
- if (options.list) {
170
- const installed = await listInstalled(options.target === 'both' ? undefined : options.target);
171
- if (installed.length === 0) {
172
- console.log('No items installed');
173
- return;
174
- }
175
- console.log('Installed items:');
176
- installed.forEach((item) => {
177
- console.log(` ${item.target}: ${item.id} (${item.name})`);
178
- });
179
- return;
180
- }
181
-
182
- if (options.clear) {
183
- await clearTarget(options.target === 'both' ? undefined : options.target);
184
- console.log('Cleared installed items');
185
- if (ids.length === 0) return;
186
- }
187
-
188
- if (ids.length === 0) {
189
- console.log('No item IDs provided');
190
- return;
191
- }
192
-
193
- const conflictStrategy = options.force ? 'overwrite' : 'skip';
194
-
195
- for (const id of ids) {
196
- console.log(`Installing item ${id}...`);
197
- const result = await install(id, options.target, conflictStrategy);
198
- console.log(` ${result.message}`);
199
- }
200
- } catch (error) {
201
- console.error('Error:', error instanceof Error ? error.message : 'Failed to install items');
202
- process.exit(1);
203
- }
204
- });
205
-
206
- // Setup command
207
- program
208
- .command('setup')
209
- .description('Interactive setup wizard')
210
- .option('-f, --force', 'Force reinitialize service directory')
211
- .action(async (options) => {
212
- console.log('Welcome to service-{{name}} setup!\n');
213
-
214
- // Initialize service directory
215
- const result = initServiceDir(options.force);
216
- if (result.success) {
217
- console.log(`✓ Service directory initialized at ${result.path}`);
218
- logInfo('Service directory initialized via setup command');
219
- } else {
220
- console.log(`Service directory already exists at ${result.path}`);
221
- }
222
-
223
- // Check if config exists
224
- const config = await loadConfig();
225
- const hasConfig = config.apiKey && config.apiUrl;
226
-
227
- if (hasConfig) {
228
- console.log('\nConfiguration already exists:');
229
- console.log(`API URL: ${config.apiUrl}`);
230
- console.log(`API Key: ***${config.apiKey.slice(-4)}\n`);
231
- console.log('Use "service-{{name}} config --set-api-key <key>" or "--set-api-url <url>" to update.');
232
- } else {
233
- console.log('\nNo configuration found. Please set up your API credentials:');
234
- console.log(' service-{{name}} config --set-api-url <url>');
235
- console.log(' service-{{name}} config --set-api-key <key>');
236
- }
237
-
238
- console.log('\nFor more information, run: service-{{name}} --help');
239
- });
240
-
241
- program.parse();