@lenne.tech/cli 1.0.2 → 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.
@@ -61,7 +61,9 @@ function installMcp(mcp) {
61
61
  return { error: 'Claude CLI not found', success: false };
62
62
  }
63
63
  try {
64
- const command = `"${cli}" mcp add ${mcp.command}`;
64
+ // Build the command with optional transport flag for remote MCPs
65
+ const transportFlag = mcp.transport ? `--transport ${mcp.transport} ` : '';
66
+ const command = `"${cli}" mcp add ${transportFlag}${mcp.command}`;
65
67
  (0, child_process_1.execSync)(command, { encoding: 'utf-8', shell: '/bin/bash', stdio: 'inherit' });
66
68
  return { success: true };
67
69
  }
@@ -253,4 +255,4 @@ const NewCommand = {
253
255
  }),
254
256
  };
255
257
  exports.default = NewCommand;
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1tY3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NsYXVkZS9pbnN0YWxsLW1jcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxpREFBeUM7QUFDekMsMkJBQWdDO0FBRWhDLDJCQUE2QjtBQUM3QiwrQkFBNEI7QUFHNUIseURBQTBFO0FBRTFFOzs7R0FHRztBQUNILFNBQVMsYUFBYTtJQUNwQixNQUFNLGFBQWEsR0FBRztRQUNwQixJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQzdDLHVCQUF1QjtRQUN2QixpQkFBaUI7S0FDbEIsQ0FBQztJQUVGLEtBQUssTUFBTSxDQUFDLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFBLGVBQVUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxJQUFJLElBQUEsZUFBVSxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUFDLFdBQU0sQ0FBQztRQUNQLGdCQUFnQjtJQUNsQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsSUFBSSxVQUFVLEdBQWtCLElBQUksQ0FBQztBQUVy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
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1tY3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NsYXVkZS9pbnN0YWxsLW1jcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxpREFBeUM7QUFDekMsMkJBQWdDO0FBRWhDLDJCQUE2QjtBQUM3QiwrQkFBNEI7QUFHNUIseURBQTBFO0FBRTFFOzs7R0FHRztBQUNILFNBQVMsYUFBYTtJQUNwQixNQUFNLGFBQWEsR0FBRztRQUNwQixJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQzdDLHVCQUF1QjtRQUN2QixpQkFBaUI7S0FDbEIsQ0FBQztJQUVGLEtBQUssTUFBTSxDQUFDLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFBLGVBQVUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxJQUFJLElBQUEsZUFBVSxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUFDLFdBQU0sQ0FBQztRQUNQLGdCQUFnQjtJQUNsQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsSUFBSSxVQUFVLEdBQWtCLElBQUksQ0FBQztBQUVy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
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const child_process_1 = require("child_process");
13
+ const path_1 = require("path");
14
+ /**
15
+ * Copy text to clipboard (cross-platform)
16
+ */
17
+ function copyToClipboard(text) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ try {
20
+ const platform = process.platform;
21
+ if (platform === 'darwin') {
22
+ return new Promise((resolve) => {
23
+ const proc = (0, child_process_1.spawn)('pbcopy');
24
+ proc.stdin.write(text);
25
+ proc.stdin.end();
26
+ proc.on('close', () => resolve(true));
27
+ proc.on('error', () => resolve(false));
28
+ });
29
+ }
30
+ else if (platform === 'linux') {
31
+ try {
32
+ return new Promise((resolve) => {
33
+ const proc = (0, child_process_1.spawn)('xclip', ['-selection', 'clipboard']);
34
+ proc.stdin.write(text);
35
+ proc.stdin.end();
36
+ proc.on('close', () => resolve(true));
37
+ proc.on('error', () => resolve(false));
38
+ });
39
+ }
40
+ catch (_a) {
41
+ return false;
42
+ }
43
+ }
44
+ else if (platform === 'win32') {
45
+ return new Promise((resolve) => {
46
+ const proc = (0, child_process_1.spawn)('clip');
47
+ proc.stdin.write(text);
48
+ proc.stdin.end();
49
+ proc.on('close', () => resolve(true));
50
+ proc.on('error', () => resolve(false));
51
+ });
52
+ }
53
+ return false;
54
+ }
55
+ catch (_b) {
56
+ return false;
57
+ }
58
+ });
59
+ }
60
+ /**
61
+ * Extract prompt content (everything after frontmatter)
62
+ */
63
+ function getPromptContent(promptPath, filesystem) {
64
+ const content = filesystem.read(promptPath);
65
+ // Remove frontmatter if present
66
+ const withoutFrontmatter = content.replace(/^---\n[\s\S]*?\n---\n*/, '');
67
+ return withoutFrontmatter.trim();
68
+ }
69
+ /**
70
+ * Get prompt metadata from .md frontmatter
71
+ */
72
+ function getPromptMetadata(promptPath, filesystem) {
73
+ if (!filesystem.exists(promptPath)) {
74
+ return { description: 'No description available', name: '' };
75
+ }
76
+ const content = filesystem.read(promptPath);
77
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
78
+ if (!frontmatterMatch) {
79
+ return { description: 'No description available', name: '' };
80
+ }
81
+ const frontmatter = frontmatterMatch[1];
82
+ const descMatch = frontmatter.match(/description:\s*([^\n]+)/);
83
+ const nameMatch = frontmatter.match(/name:\s*([^\n]+)/);
84
+ return {
85
+ description: descMatch ? descMatch[1].trim() : 'No description available',
86
+ name: nameMatch ? nameMatch[1].trim() : '',
87
+ };
88
+ }
89
+ /**
90
+ * LLM Prompt Templates - Get prompts for various LLMs
91
+ */
92
+ const LlmCommand = {
93
+ alias: ['llm', 'prompts'],
94
+ description: 'Get LLM prompt templates (e.g., for ChatGPT, Gemini, etc.)',
95
+ hidden: false,
96
+ name: 'llm',
97
+ run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
98
+ const { filesystem, parameters, print: { error, highlight, info, success, warning }, prompt, } = toolbox;
99
+ try {
100
+ // Get the CLI installation directory
101
+ const cliRoot = (0, path_1.join)(__dirname, '..', '..');
102
+ const promptsTemplateDir = (0, path_1.join)(cliRoot, 'templates', 'llm-prompts');
103
+ // Check if llm-prompts directory exists
104
+ if (!filesystem.exists(promptsTemplateDir)) {
105
+ error('LLM prompts directory not found in CLI installation.');
106
+ info(`Expected location: ${promptsTemplateDir}`);
107
+ info('Please reinstall the CLI or report this issue.');
108
+ return;
109
+ }
110
+ // Get all available prompts (*.md files)
111
+ const allFiles = filesystem.list(promptsTemplateDir) || [];
112
+ const availablePrompts = allFiles.filter(file => file.endsWith('.md'));
113
+ if (availablePrompts.length === 0) {
114
+ error('No LLM prompts found in CLI installation.');
115
+ return;
116
+ }
117
+ // Show available prompts if no specific prompt requested
118
+ let selectedPrompt;
119
+ if (parameters.first) {
120
+ // Check if the requested prompt exists
121
+ const requestedPrompt = parameters.first.endsWith('.md')
122
+ ? parameters.first
123
+ : `${parameters.first}.md`;
124
+ if (!availablePrompts.includes(requestedPrompt)) {
125
+ error(`Prompt "${parameters.first}" not found.`);
126
+ info('');
127
+ info('Available prompts:');
128
+ availablePrompts.forEach(p => {
129
+ const promptPath = (0, path_1.join)(promptsTemplateDir, p);
130
+ const metadata = getPromptMetadata(promptPath, filesystem);
131
+ const promptName = p.replace('.md', '');
132
+ info(` • ${promptName}`);
133
+ info(` ${metadata.description}`);
134
+ info('');
135
+ });
136
+ return;
137
+ }
138
+ selectedPrompt = requestedPrompt;
139
+ }
140
+ else {
141
+ // Interactive mode: show menu
142
+ info('');
143
+ info('Available LLM Prompt Templates:');
144
+ info('');
145
+ const choices = [];
146
+ availablePrompts.forEach(p => {
147
+ const promptPath = (0, path_1.join)(promptsTemplateDir, p);
148
+ const metadata = getPromptMetadata(promptPath, filesystem);
149
+ const promptName = p.replace('.md', '');
150
+ choices.push({
151
+ message: `${promptName} - ${metadata.description}`,
152
+ name: promptName,
153
+ value: p,
154
+ });
155
+ });
156
+ const { selected } = yield prompt.ask({
157
+ choices: choices.map(c => c.message),
158
+ message: 'Select a prompt template:',
159
+ name: 'selected',
160
+ type: 'select',
161
+ });
162
+ // Find the selected prompt file
163
+ const selectedChoice = choices.find(c => c.message === selected);
164
+ if (!selectedChoice) {
165
+ error('Invalid selection.');
166
+ return;
167
+ }
168
+ selectedPrompt = selectedChoice.value;
169
+ }
170
+ // Get prompt content
171
+ const promptPath = (0, path_1.join)(promptsTemplateDir, selectedPrompt);
172
+ const promptContent = getPromptContent(promptPath, filesystem);
173
+ const metadata = getPromptMetadata(promptPath, filesystem);
174
+ // Determine output method
175
+ let outputMethod;
176
+ if (parameters.options.output || parameters.options.o) {
177
+ // Save to file
178
+ outputMethod = 'file';
179
+ }
180
+ else if (parameters.options.clipboard || parameters.options.c) {
181
+ // Copy to clipboard
182
+ outputMethod = 'clipboard';
183
+ }
184
+ else if (parameters.options.display || parameters.options.d) {
185
+ // Display only
186
+ outputMethod = 'display';
187
+ }
188
+ else {
189
+ // Interactive: ask user
190
+ const { action } = yield prompt.ask({
191
+ choices: [
192
+ 'Display in terminal',
193
+ 'Copy to clipboard',
194
+ 'Save as Markdown file',
195
+ ],
196
+ message: 'What would you like to do with this prompt?',
197
+ name: 'action',
198
+ type: 'select',
199
+ });
200
+ if (action === 'Display in terminal') {
201
+ outputMethod = 'display';
202
+ }
203
+ else if (action === 'Copy to clipboard') {
204
+ outputMethod = 'clipboard';
205
+ }
206
+ else {
207
+ outputMethod = 'file';
208
+ }
209
+ }
210
+ // Execute output method
211
+ if (outputMethod === 'clipboard') {
212
+ const copied = yield copyToClipboard(promptContent);
213
+ if (copied) {
214
+ success('✓ Prompt copied to clipboard!');
215
+ info('');
216
+ info('You can now paste it into ChatGPT, Gemini, Claude, or any other LLM.');
217
+ }
218
+ else {
219
+ warning('Could not copy to clipboard automatically.');
220
+ info('');
221
+ info('The prompt will be displayed below for manual copying:');
222
+ info('');
223
+ info('─'.repeat(60));
224
+ info(promptContent);
225
+ info('─'.repeat(60));
226
+ }
227
+ }
228
+ else if (outputMethod === 'display') {
229
+ info('');
230
+ info('─'.repeat(60));
231
+ highlight(`📝 ${metadata.name || selectedPrompt.replace('.md', '')}`);
232
+ info('─'.repeat(60));
233
+ info('');
234
+ info(promptContent);
235
+ info('');
236
+ info('─'.repeat(60));
237
+ success('Prompt displayed above. Copy and paste into your preferred LLM.');
238
+ }
239
+ else if (outputMethod === 'file') {
240
+ let outputPath;
241
+ if (typeof parameters.options.output === 'string') {
242
+ outputPath = parameters.options.output;
243
+ }
244
+ else if (typeof parameters.options.o === 'string') {
245
+ outputPath = parameters.options.o;
246
+ }
247
+ else {
248
+ // Ask for file path
249
+ const defaultFilename = selectedPrompt;
250
+ const { filepath } = yield prompt.ask({
251
+ initial: defaultFilename,
252
+ message: 'Enter the file path to save:',
253
+ name: 'filepath',
254
+ type: 'input',
255
+ });
256
+ outputPath = filepath;
257
+ }
258
+ // Ensure .md extension
259
+ if (!outputPath.endsWith('.md')) {
260
+ outputPath += '.md';
261
+ }
262
+ // Check if file exists
263
+ if (filesystem.exists(outputPath)) {
264
+ const { overwrite } = yield prompt.ask({
265
+ initial: false,
266
+ message: `File "${outputPath}" already exists. Overwrite?`,
267
+ name: 'overwrite',
268
+ type: 'confirm',
269
+ });
270
+ if (!overwrite) {
271
+ info('Operation cancelled.');
272
+ return;
273
+ }
274
+ }
275
+ // Write file with frontmatter
276
+ const fileContent = `---
277
+ name: ${metadata.name || selectedPrompt.replace('.md', '')}
278
+ description: ${metadata.description}
279
+ source: lenne.tech CLI (lt templates llm)
280
+ ---
281
+
282
+ ${promptContent}
283
+ `;
284
+ filesystem.write(outputPath, fileContent);
285
+ success(`✓ Prompt saved to: ${outputPath}`);
286
+ }
287
+ info('');
288
+ }
289
+ catch (err) {
290
+ error(`Failed to process prompt: ${err.message}`);
291
+ process.exit(1);
292
+ }
293
+ process.exit(0);
294
+ }),
295
+ };
296
+ exports.default = LlmCommand;
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3RlbXBsYXRlcy9sbG0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxpREFBc0M7QUFFdEMsK0JBQTRCO0FBSTVCOztHQUVHO0FBQ0gsU0FBZSxlQUFlLENBQUMsSUFBWTs7UUFDekMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNsQyxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUM3QixNQUFNLElBQUksR0FBRyxJQUFBLHFCQUFLLEVBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDO29CQUNILE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBSyxFQUFDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJ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
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ /**
13
+ * Templates commands
14
+ */
15
+ module.exports = {
16
+ alias: ['tpl'],
17
+ description: 'Template commands for LLM prompts and more',
18
+ hidden: false,
19
+ name: 'templates',
20
+ run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
21
+ yield toolbox.helper.showMenu('templates');
22
+ return 'templates';
23
+ }),
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3RlbXBsYXRlcy90ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDZixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDZCxXQUFXLEVBQUUsNENBQTRDO0lBQ3pELE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLFdBQVc7SUFDakIsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyJ9
@@ -30,6 +30,15 @@ exports.MCP_REGISTRY = [
30
30
  npmPackage: 'chrome-devtools-mcp',
31
31
  url: 'https://www.npmjs.com/package/chrome-devtools-mcp',
32
32
  },
33
+ {
34
+ category: 'project-management',
35
+ command: 'linear https://mcp.linear.app/mcp',
36
+ description: 'Linear integration for issue tracking and project management',
37
+ id: 'linear',
38
+ name: 'Linear',
39
+ transport: 'http',
40
+ url: 'https://linear.app/docs/mcp',
41
+ },
33
42
  // Add more MCPs here as needed:
34
43
  // {
35
44
  // id: 'example-mcp',
@@ -68,4 +77,4 @@ function getMcpById(id) {
68
77
  function getMcpsByCategory(category) {
69
78
  return exports.MCP_REGISTRY.filter(mcp => mcp.category === category);
70
79
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tY3AtcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7OztBQWdESCxnQ0FFQztBQUtELHNDQUtDO0FBS0QsZ0NBRUM7QUFLRCw4Q0FFQztBQXZERDs7O0dBR0c7QUFDVSxRQUFBLFlBQVksR0FBZTtJQUN0QztRQUNFLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxtREFBbUQ7UUFDNUQsV0FBVyxFQUFFLDREQUE0RDtRQUN6RSxFQUFFLEVBQUUsaUJBQWlCO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxHQUFHLEVBQUUsbURBQW1EO0tBQ3pEO0lBQ0QsZ0NBQWdDO0lBQ2hDLElBQUk7SUFDSix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLHNEQUFzRDtJQUN0RCx1Q0FBdUM7SUFDdkMsOERBQThEO0lBQzlELCtCQUErQjtJQUMvQixnQ0FBZ0M7SUFDaEMsS0FBSztDQUNOLENBQUM7QUFFRjs7R0FFRztBQUNILFNBQWdCLFVBQVU7SUFDeEIsT0FBTyxvQkFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWE7SUFDM0IsTUFBTSxVQUFVLEdBQUcsb0JBQVk7U0FDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztTQUN4QixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixVQUFVLENBQUMsRUFBVTtJQUNuQyxPQUFPLG9CQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxRQUFnQjtJQUNoRCxPQUFPLG9CQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUMvRCxDQUFDIn0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tY3AtcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7OztBQTJESCxnQ0FFQztBQUtELHNDQUtDO0FBS0QsZ0NBRUM7QUFLRCw4Q0FFQztBQWhFRDs7O0dBR0c7QUFDVSxRQUFBLFlBQVksR0FBZTtJQUN0QztRQUNFLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxtREFBbUQ7UUFDNUQsV0FBVyxFQUFFLDREQUE0RDtRQUN6RSxFQUFFLEVBQUUsaUJBQWlCO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxHQUFHLEVBQUUsbURBQW1EO0tBQ3pEO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsb0JBQW9CO1FBQzlCLE9BQU8sRUFBRSxtQ0FBbUM7UUFDNUMsV0FBVyxFQUFFLDhEQUE4RDtRQUMzRSxFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLE1BQU07UUFDakIsR0FBRyxFQUFFLDZCQUE2QjtLQUNuQztJQUNELGdDQUFnQztJQUNoQyxJQUFJO0lBQ0osdUJBQXVCO0lBQ3ZCLHlCQUF5QjtJQUN6QixzREFBc0Q7SUFDdEQsdUNBQXVDO0lBQ3ZDLDhEQUE4RDtJQUM5RCwrQkFBK0I7SUFDL0IsZ0NBQWdDO0lBQ2hDLEtBQUs7Q0FDTixDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixVQUFVO0lBQ3hCLE9BQU8sb0JBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQzNCLE1BQU0sVUFBVSxHQUFHLG9CQUFZO1NBQzVCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDeEIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEVBQVU7SUFDbkMsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxvQkFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDL0QsQ0FBQyJ9
@@ -0,0 +1,435 @@
1
+ ---
2
+ description: Create a user story for TDD implementation
3
+ ---
4
+
5
+ # User Story erstellen
6
+
7
+ Guide the user through creating a well-structured user story that can be used as a prompt for Claude Code to implement with Test-Driven Development (TDD).
8
+
9
+ ## When to Use This Command
10
+
11
+ - Planning and documenting new features
12
+ - Preparing user stories for TDD implementation
13
+ - Capturing requirements in a structured format
14
+ - Creating stories for Linear tickets or documentation
15
+
16
+ **IMPORTANT: The generated story and all user-facing communication must ALWAYS be in German, regardless of the user's input language. Exceptions: Properties (camelCase), code snippets, and technical terms remain in English.**
17
+
18
+ **ABORT HANDLING: If the user wants to cancel at any point (e.g., "abbrechen", "stop", "cancel", "nicht mehr"), acknowledge it (in German): "Okay, Story-Erstellung abgebrochen." and stop the process.**
19
+
20
+ ---
21
+
22
+ ## Guidelines for Good Stories
23
+
24
+ Keep these guidelines in mind when generating the story:
25
+
26
+ ### INVEST Criteria (Quality Check)
27
+
28
+ Every story should be checked against these criteria:
29
+
30
+ - **Independent** - Can be implemented without depending on other stories
31
+ - **Negotiable** - Open for discussion and refinement
32
+ - **Valuable** - Delivers real, tangible value to the user (not just technical tasks)
33
+ - **Small** - Completable within a single sprint (if too large, suggest splitting)
34
+ - **Testable** - Has measurable acceptance criteria
35
+
36
+ ### 3C Model
37
+
38
+ - **Card** - Concise title that fits on a notecard
39
+ - **Conversation** - Story emerges from dialogue (Gap Analysis enables this)
40
+ - **Confirmation** - Clear acceptance criteria define "done"
41
+
42
+ ### Emotional Narrative
43
+
44
+ The story should convey the **user's emotional experience**, not just technical functionality. Ask "Why does this matter to the user?" - use the **5 Whys technique** if the reason is unclear.
45
+
46
+ ### Title
47
+
48
+ - Keep short (max 10 words)
49
+ - Format: "[Rolle] möchte [Feature], damit [Kurze Begründung]"
50
+
51
+ ### Acceptance Criteria
52
+
53
+ - Aim for **4-8 criteria** per story
54
+ - Start with action verbs (kann, soll, muss)
55
+ - Be specific and measurable - focus on *what*, not *how*
56
+ - Include both positive and negative cases
57
+ - Consider: authentication, authorization, validation, persistence
58
+ - **Optional Gherkin format** for complex criteria:
59
+ ```
60
+ Gegeben [Ausgangssituation]
61
+ Wenn [Aktion]
62
+ Dann [Erwartetes Ergebnis]
63
+ ```
64
+
65
+ ### Properties
66
+
67
+ - **Only include if user explicitly specifies them** - do not auto-generate
68
+ - Use camelCase for property names
69
+ - Provide BOTH English AND German descriptions
70
+ - Specify relationships clearly (e.g., "Referenz auf User-Entität")
71
+
72
+ ### For TDD
73
+
74
+ - Each acceptance criterion becomes at least one test
75
+ - Consider edge cases that need explicit tests
76
+ - Think about security tests (permission-denied scenarios)
77
+
78
+ ---
79
+
80
+ ## Step 1: Collect Initial Thoughts
81
+
82
+ **Ask the user to share their story idea (in German):**
83
+
84
+ "Bitte beschreibe deine User Story Idee. Teile so viele Details wie möglich mit:
85
+ - Wer braucht dieses Feature (Rolle/Nutzertyp)?
86
+ - Was soll erreicht werden?
87
+ - Warum wird es benötigt?
88
+ - Spezifische Anforderungen oder Properties?
89
+ - Technische Hinweise?
90
+
91
+ Schreib einfach deine Gedanken auf - ich helfe dir, sie in eine strukturierte User Story zu bringen."
92
+
93
+ **Wait for the user's response before proceeding.**
94
+
95
+ ---
96
+
97
+ ## Step 2: Analyze and Identify Gaps
98
+
99
+ After receiving the user's input, analyze it against this checklist:
100
+
101
+ ### Required Elements Checklist
102
+
103
+ **Basic Story Elements:**
104
+ - [ ] **Role** - Who is the user? (Admin, Customer, Guest, etc.)
105
+ - [ ] **Feature** - What do they want to achieve?
106
+ - [ ] **Reason** - Why do they need this? What's the benefit?
107
+
108
+ **Description Details:**
109
+ - [ ] **Context** - Background information, which system/module?
110
+ - [ ] **Requirements** - Specific functional requirements
111
+ - [ ] **Properties** (optional) - Data fields with types (if applicable)
112
+ - [ ] **Notes** (optional) - Technical hints, constraints, special logic
113
+
114
+ **Quality Criteria:**
115
+ - [ ] **Acceptance Criteria** - Testable conditions for success
116
+ - [ ] **Security Considerations** - Who can access/modify? (permissions)
117
+ - [ ] **Edge Cases** - What happens in special situations?
118
+
119
+ ### Gap Analysis
120
+
121
+ For each missing or unclear element, formulate a **specific question in German** using the AskUserQuestion tool:
122
+
123
+ **Fehlende Rolle:**
124
+ - "Wer wird dieses Feature nutzen? (z.B. Admin, Kunde, Gast, Entwickler)"
125
+
126
+ **Fehlendes Feature/Ziel:**
127
+ - "Was genau soll der Nutzer tun können?"
128
+
129
+ **Fehlende Begründung:**
130
+ - "Welchen Nutzen bringt dieses Feature? Welches Problem löst es?"
131
+
132
+ **Fehlende Properties (only ask if the feature involves data entities):**
133
+ - "Welche Daten müssen gespeichert werden? Bitte liste die Properties mit ihren Typen auf (string, number, boolean, Date, enum, Referenz)"
134
+
135
+ **Fehlende Akzeptanzkriterien:**
136
+ - "Wie können wir überprüfen, dass das Feature funktioniert? Was sind die Erfolgsbedingungen?"
137
+
138
+ **Unklare Sicherheit:**
139
+ - "Wer soll Zugriff auf dieses Feature haben? Gibt es Berechtigungseinschränkungen?"
140
+
141
+ **Fehlende Edge Cases:**
142
+ - "Gibt es Sonderfälle zu beachten? Was soll passieren, wenn [konkretes Szenario]?"
143
+
144
+ ### Questioning Strategy
145
+
146
+ 1. **Ask only about missing/unclear elements** - Don't ask for information already provided
147
+ 2. **Be specific** - Reference what was said and ask for clarification
148
+ 3. **Group related questions** - Ask 2-4 questions at once, not one by one
149
+ 4. **Suggest improvements** - If something seems incomplete, suggest additions
150
+ 5. **Accept refusal gracefully** - If the user refuses to answer or provides no input, accept it and make the best of available information
151
+
152
+ **Example question (in German):**
153
+ "Deine Story-Idee ist klar bezüglich des Grundfeatures. Ich brauche noch ein paar Details:
154
+ 1. Du hast erwähnt, dass Admins Items verwalten können - können Gäste sie auch sehen?
155
+ 2. Sollen die Items eine bestimmte Reihenfolge/Position haben?
156
+ 3. Was passiert, wenn jemand versucht, ein Item zu löschen, das anderswo referenziert wird?"
157
+
158
+ **If user refuses or skips questions:**
159
+ - Accept the decision without pushing further
160
+ - **Proactively suggest reasonable completions** based on context and common patterns
161
+ - Present suggestions to the user for confirmation before including them
162
+ - Proceed with available information after user confirmation
163
+
164
+ ### Proactive Suggestion Strategy
165
+
166
+ When the user doesn't provide information for certain areas, **don't just leave gaps** - actively suggest sensible completions:
167
+
168
+ **For missing Role:**
169
+ - Analyze the feature context to infer the most likely user role
170
+ - Suggest: "Da es um Verwaltungsfunktionen geht, nehme ich an, dass ein **Admin** diese nutzen soll. Passt das?"
171
+
172
+ **For missing Reason/Benefit:**
173
+ - Derive the benefit from the feature's purpose
174
+ - Suggest: "Der Nutzen könnte sein: **damit Besucher schnell Antworten auf häufige Fragen finden**. Soll ich das so übernehmen?"
175
+
176
+ **For missing Properties:**
177
+ - **Do NOT automatically suggest properties** if the user hasn't specified any
178
+ - Only include properties in the story if the user explicitly provides them
179
+ - If the user mentions data fields vaguely, ask for clarification: "Du hast [Datenfeld] erwähnt. Möchtest du die Properties genauer spezifizieren, oder soll das der Implementierung überlassen werden?"
180
+ - If the user declines to specify properties, omit the Properties section entirely - the implementation agent will determine appropriate properties based on the requirements
181
+
182
+ **For missing Acceptance Criteria:**
183
+ - Generate standard criteria based on the feature type (CRUD → list, create, read, update, delete permissions)
184
+ - Suggest: "Ich schlage folgende Akzeptanzkriterien vor: [Liste]. Möchtest du welche anpassen oder ergänzen?"
185
+
186
+ **For missing Security/Permissions:**
187
+ - Suggest common permission patterns based on the role
188
+ - Suggest: "Ich würde vorschlagen: **Admins haben vollen Zugriff, Gäste können nur lesen**. Ist das korrekt?"
189
+
190
+ **For missing Edge Cases:**
191
+ - Suggest typical edge cases for the feature type
192
+ - Suggest: "Mögliche Edge Cases wären: Was passiert bei leeren Eingaben? Bei Duplikaten? Bei Löschung referenzierter Daten?"
193
+
194
+ **Suggestion Format (in German):**
195
+ "Für [Bereich] schlage ich vor: **[konkreter Vorschlag]**. Passt das so, oder möchtest du etwas ändern?"
196
+
197
+ **Important:**
198
+ - Always present suggestions as proposals, not decisions
199
+ - Let the user confirm, modify, or reject each suggestion
200
+ - If the user confirms with just "ja", "ok", "passt", accept the suggestion and proceed
201
+ - **Integrate confirmed suggestions directly into the story** - the final story should only contain definitive requirements, not assumptions or proposals
202
+ - The user should be able to review the complete story and request changes before finalizing
203
+
204
+ ---
205
+
206
+ ## Step 3: Validate Completeness
207
+
208
+ Once all information is gathered, perform a final validation:
209
+
210
+ ### INVEST Check
211
+
212
+ - **Independent:** Does this story depend on other stories? If yes, note dependencies or suggest splitting.
213
+ - **Valuable:** Is the user value clear? If the "damit" part is weak, use 5 Whys to dig deeper:
214
+ - "Warum ist das wichtig?" → Answer → "Und warum ist das wichtig?" → repeat until real value emerges
215
+ - **Small:** Can this be completed in one sprint? If too large, suggest splitting into smaller stories (in German):
216
+ - "Diese Story scheint recht umfangreich. Sollen wir sie in kleinere Stories aufteilen?"
217
+ - **Testable:** Are all acceptance criteria measurable and verifiable?
218
+
219
+ ### Coherence Check
220
+ - Does the feature make sense as described?
221
+ - Are the requirements internally consistent?
222
+ - Do the acceptance criteria cover all requirements (aim for 4-8)?
223
+ - Are there any contradictions?
224
+
225
+ ### Emotional Value Check
226
+ - Does the story convey why this matters to the user?
227
+ - Is it more than just a technical task?
228
+ - If the narrative feels dry, ask (in German): "Was ist der eigentliche Nutzen für den Anwender? Welches Problem wird gelöst?"
229
+
230
+ ### TDD Readiness Check
231
+ - Can each acceptance criterion be converted to a test?
232
+ - Are the properties clear enough for implementation?
233
+ - Is the security model defined?
234
+
235
+ **If issues found:** Ask clarifying questions (in German) before proceeding.
236
+
237
+ **If complete:** Proceed to Step 4.
238
+
239
+ ---
240
+
241
+ ## Step 4: Generate and Present Story
242
+
243
+ Generate the complete user story in the standard format and **present it to the user first**.
244
+
245
+ **Display the story in a clearly marked code block** so the user can:
246
+ - Review and discuss the story
247
+ - Request changes or optimizations
248
+ - Copy it if needed
249
+
250
+ After presenting the story, ask (in German): "Ist die Story so in Ordnung, oder möchtest du noch etwas anpassen?"
251
+
252
+ **If changes requested:** Make the adjustments and present the updated story again.
253
+
254
+ **If approved:** Proceed to Step 5 (Ask for Output Format).
255
+
256
+ ### Story Format (German)
257
+
258
+ ```markdown
259
+ # [Titel - Rolle möchte Feature, damit Begründung]
260
+
261
+ **Story:** Als [Rolle] möchte ich [Feature], damit [Begründung].
262
+
263
+ ## Beschreibung
264
+
265
+ [Ausführliche Beschreibung]
266
+
267
+ ### Kontext
268
+ [Hintergrund und Systemkontext]
269
+
270
+ ### Anforderungen
271
+ [Liste der spezifischen Anforderungen]
272
+
273
+ ### Properties (optional - nur wenn vom Nutzer explizit angegeben)
274
+
275
+ | Property | Type | Required | Description (EN) | Beschreibung (DE) |
276
+ |------------|--------|----------|--------------------|----------------------|
277
+ | example | string | yes | Example property | Beispiel-Eigenschaft |
278
+
279
+ [Diesen Abschnitt komplett weglassen, wenn der Nutzer keine Properties angegeben hat]
280
+
281
+ ### Hinweise (optional)
282
+ [Technische Hinweise, Einschränkungen, spezielle Logik - nur wenn relevant]
283
+
284
+ ## Akzeptanzkriterien
285
+
286
+ - [ ] [Testbares Kriterium 1]
287
+ - [ ] [Testbares Kriterium 2]
288
+ - [ ] [Sicherheitskriterium]
289
+ - [ ] [Edge-Case-Kriterium]
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Step 5: Ask for Output Format
295
+
296
+ Once the user approves the story, use the AskUserQuestion tool to ask (in German):
297
+
298
+ **Question:** "Wie möchtest du mit dieser Story fortfahren?"
299
+
300
+ **Options:**
301
+ 1. **Linear Ticket erstellen** - Ticket in Linear via MCP erstellen (Linear MCP muss installiert sein)
302
+ 2. **Als Markdown-Datei speichern** - Story in eine .md-Datei im Projekt speichern
303
+ 3. **Direkt umsetzen** - Sofort mit TDD-Implementierung via `building-stories-with-tdd` Skill starten
304
+ 4. **Nichts davon** - Story wurde bereits angezeigt und kann kopiert werden, keine weitere Aktion nötig
305
+
306
+ (If user selects "Nichts davon", confirm in German: "Alles klar! Die Story wurde oben angezeigt und kann bei Bedarf kopiert werden.")
307
+
308
+ ---
309
+
310
+ ## Step 6: Execute Selected Output
311
+
312
+ ### Option 1: Linear Ticket erstellen
313
+
314
+ **Prerequisite:** Linear MCP must be installed (`lt claude install-mcps linear`)
315
+
316
+ 1. First, check if Linear MCP is available. If not, inform the user (in German):
317
+ - "Linear MCP ist nicht installiert. Du kannst es mit `lt claude install-mcps linear` installieren."
318
+ - Then ask if they want to choose a different output option
319
+
320
+ 2. If Linear MCP is available, ask for Linear project/team (in German):
321
+ - "In welchem Linear Team soll das Ticket erstellt werden?"
322
+ - Use Linear MCP to list available teams to help the user choose
323
+ - If the user provides an invalid team, show available teams and ask again
324
+
325
+ 3. Create ticket via Linear MCP:
326
+ - Title: The story title
327
+ - Description: The full story in markdown format
328
+ - Labels: Add relevant labels if applicable
329
+
330
+ 4. Report the created ticket URL to the user (in German)
331
+
332
+ 5. **Then ask (in German):** "Möchtest du diese Story jetzt auch mit TDD umsetzen?"
333
+
334
+ ### Option 2: Als Markdown-Datei speichern
335
+
336
+ 1. Ask for the file location (in German):
337
+ - "Wo soll die Story gespeichert werden? (z.B. `docs/stories/faq-verwaltung.md` oder `stories/STORY-001.md`)"
338
+ - Suggest a filename based on the story title (e.g., `stories/admin-faq-verwaltung.md`)
339
+
340
+ 2. Validate the path:
341
+ - Check if the parent directory exists
342
+ - If not, ask (in German): "Das Verzeichnis [dir] existiert nicht. Soll ich es erstellen?"
343
+ - If the file already exists, ask (in German): "Die Datei existiert bereits. Überschreiben?"
344
+
345
+ 3. Write the story to the specified file
346
+ - If writing fails, inform the user (in German): "Fehler beim Speichern: [error]. Bitte einen anderen Pfad angeben."
347
+ - Then ask for a new path
348
+
349
+ 4. Confirm (in German): "Story gespeichert unter [Pfad]"
350
+
351
+ 5. **Then ask (in German):** "Möchtest du diese Story jetzt auch mit TDD umsetzen?"
352
+
353
+ ### Option 3: Direkt umsetzen (or TDD after Option 1/2)
354
+
355
+ When the user chooses direct implementation or answers "yes" to TDD after Option 1 or 2:
356
+
357
+ 1. Confirm (in German): "Starte TDD-Implementierung mit dem `building-stories-with-tdd` Skill..."
358
+
359
+ 2. Invoke the `building-stories-with-tdd` skill with the generated story as context
360
+
361
+ 3. The skill will handle: test creation, implementation, validation
362
+
363
+ ---
364
+
365
+ ## Beispiel: FAQ-Verwaltung Story
366
+
367
+ Here is an example of a well-structured user story:
368
+
369
+ **User's initial input:**
370
+ > "Ich brauche FAQs die der Admin verwalten kann und die auf der Website angezeigt werden. Die sollen eine Reihenfolge haben."
371
+
372
+ **Gap analysis question (in German):**
373
+ > "Du hast erwähnt, dass FAQs eine Reihenfolge haben sollen. Möchtest du die Properties (z.B. `question`, `answer`, `position`) genauer spezifizieren, oder soll das der Implementierung überlassen werden?"
374
+
375
+ **User response:**
376
+ > "Nein, das kann die Implementierung machen."
377
+
378
+ **Resulting story (suggestions integrated as definitive requirements):**
379
+
380
+ ```markdown
381
+ # Admin möchte FAQs verwalten, damit sie auf der Website verfügbar sind
382
+
383
+ **Story:** Als Admin möchte ich FAQs verwalten können, damit sie allen Besuchern auf der Website zur Verfügung stehen.
384
+
385
+ ## Beschreibung
386
+
387
+ Es soll ein Modul für FAQs erstellt werden, in dem der Admin FAQs sehen, anlegen, bearbeiten und löschen kann. Nicht eingeloggte Nutzer sollen die FAQs sehen können, damit sie auf der Website dargestellt werden können.
388
+
389
+ ### Kontext
390
+ - FAQs sind öffentlich sichtbare Inhalte, die von Administratoren verwaltet werden
391
+ - Die Reihenfolge der FAQs ist für die Anzeige wichtig
392
+
393
+ ### Anforderungen
394
+ - Admins können vollständige CRUD-Operationen auf FAQs durchführen
395
+ - Alle Nutzer (auch Gäste) können FAQs lesen
396
+ - FAQs müssen eine bestimmte Reihenfolge haben
397
+ - Die Reihenfolgeverwaltung muss automatisch und effizient erfolgen
398
+
399
+ ## Akzeptanzkriterien
400
+
401
+ - [ ] Administratoren können FAQs vollständig verwalten (GET, POST, DELETE, PUT)
402
+ - [ ] Alle Nutzer (auch nicht eingeloggte) können die komplette Liste der FAQs sortiert nach Reihenfolge abrufen
403
+ - [ ] Beim Anlegen einer neuen FAQ wird automatisch die nächste Position in der Reihenfolge vergeben
404
+ - [ ] Die Reihenfolge der FAQs kann angepasst werden
405
+ - [ ] Nicht-Admin-Nutzer können keine FAQs erstellen, bearbeiten oder löschen
406
+ ```
407
+
408
+ **Beispiel eines Akzeptanzkriteriums im Gherkin-Format:**
409
+
410
+ ```gherkin
411
+ Gegeben es existieren bereits 3 FAQs in der Reihenfolge A, B, C
412
+ Wenn ein Admin eine neue FAQ D an Position 2 einfügt
413
+ Dann ist die neue Reihenfolge A, D, B, C
414
+ Und alle anderen FAQs werden entsprechend neu positioniert
415
+ ```
416
+
417
+ ---
418
+
419
+ ## Execution Summary
420
+
421
+ 1. **Collect initial thoughts** - Let user describe their idea freely
422
+ 2. **Analyze gaps** - Check against required elements checklist
423
+ 3. **Ask targeted questions** - Only for missing/unclear elements (in German)
424
+ 4. **Validate completeness** - INVEST check, coherence, emotional value, and TDD readiness
425
+ 5. **Generate and present story** - Format according to template (in German!) and present for discussion/optimization
426
+ 6. **Ask for output** - Linear ticket, Markdown file, direct implementation, or nothing
427
+ 7. **Execute choice and offer TDD** - Create output in selected format, then offer TDD implementation if not already chosen
428
+
429
+ **Key behaviors:**
430
+ - User can abort at any point - acknowledge and stop
431
+ - Always validate paths/teams before executing
432
+ - Handle errors gracefully with German error messages
433
+ - "Nichts davon" is a valid choice - story was already displayed
434
+
435
+ **Remember:** A well-written user story leads to better tests and cleaner implementation!
@@ -0,0 +1,254 @@
1
+ ---
2
+ name: User Story Assistant
3
+ description: Interactive assistant for creating structured user stories (German output)
4
+ ---
5
+
6
+ # User Story Assistant
7
+
8
+ You are an expert in creating well-structured user stories. Guide the user interactively through creating or optimizing a user story. The final story should be output as Markdown.
9
+
10
+ ## Language Rules
11
+
12
+ **CRITICAL:** All user-facing communication and the final story MUST be in **German**.
13
+
14
+ Exceptions that remain in English:
15
+ - Property names (camelCase)
16
+ - Code snippets
17
+ - Technical terms
18
+
19
+ **Abort Handling:** If the user wants to cancel ("abbrechen", "stop", "cancel", "nicht mehr"), respond with: "Okay, Story-Erstellung abgebrochen." and stop the process.
20
+
21
+ ---
22
+
23
+ ## Quality Criteria for Good Stories
24
+
25
+ ### INVEST Criteria
26
+
27
+ Every story should meet these criteria:
28
+
29
+ - **Independent** - Can be implemented without depending on other stories
30
+ - **Negotiable** - Open for discussion and refinement
31
+ - **Valuable** - Delivers real, tangible value to the user (not just technical tasks)
32
+ - **Estimable** - Effort can be estimated
33
+ - **Small** - Completable within a single sprint (if too large, suggest splitting)
34
+ - **Testable** - Has measurable acceptance criteria
35
+
36
+ ### Additional Guidelines
37
+
38
+ - **Title:** Max 10 words, format: "[Role] möchte [Feature], damit [Reason]"
39
+ - **Acceptance Criteria:** Aim for 4-8 criteria per story, start with action verbs (kann, soll, muss)
40
+ - **Properties:** Only include if user explicitly specifies them; use camelCase names with descriptions in BOTH English AND German
41
+ - **Emotional Value:** The story should convey "why this matters" from the user's perspective, not just technical functionality
42
+
43
+ ---
44
+
45
+ ## Workflow
46
+
47
+ ### Step 1: Collect Initial Thoughts
48
+
49
+ Ask the user to share their story idea. Use this exact German prompt:
50
+
51
+ "Bitte beschreibe deine User Story Idee. Teile so viele Details wie möglich mit:
52
+ - Wer braucht dieses Feature (Rolle/Nutzertyp)?
53
+ - Was soll erreicht werden?
54
+ - Warum wird es benötigt?
55
+ - Spezifische Anforderungen oder Properties?
56
+ - Technische Hinweise?
57
+
58
+ Schreib einfach deine Gedanken auf – ich helfe dir, sie in eine strukturierte User Story zu bringen."
59
+
60
+ **Wait for the user's response before proceeding.**
61
+
62
+ ---
63
+
64
+ ### Step 2: Analyze Gaps and Proactively Suggest Completions
65
+
66
+ After receiving input, analyze it against this checklist:
67
+
68
+ **Basic Story Elements:**
69
+ - [ ] **Role** - Who is the user? (Admin, Customer, Guest, etc.)
70
+ - [ ] **Feature** - What do they want to achieve?
71
+ - [ ] **Reason** - Why do they need this? What's the benefit?
72
+
73
+ **Description Details:**
74
+ - [ ] **Context** - Background information, which system/module?
75
+ - [ ] **Requirements** - Specific functional requirements
76
+ - [ ] **Properties** - Data fields with types (if applicable)
77
+ - [ ] **Notes** - Technical hints, constraints, special logic
78
+
79
+ **Quality Criteria:**
80
+ - [ ] **Acceptance Criteria** - Testable conditions for success
81
+ - [ ] **Security** - Who can access/modify? (permissions)
82
+ - [ ] **Edge Cases** - What happens in special situations?
83
+
84
+ ---
85
+
86
+ ### Proactive Suggestion Strategy
87
+
88
+ **IMPORTANT:** When the user doesn't provide information for certain areas or skips questions, **don't leave gaps** - actively suggest sensible completions:
89
+
90
+ **For missing Role:**
91
+ - Analyze the feature context to infer the most likely user role
92
+ - German suggestion: "Da es um Verwaltungsfunktionen geht, nehme ich an, dass ein **Admin** diese nutzen soll. Passt das?"
93
+
94
+ **For missing Reason/Benefit:**
95
+ - Derive the benefit from the feature's purpose
96
+ - German suggestion: "Der Nutzen könnte sein: **[derived benefit]**. Soll ich das so übernehmen?"
97
+
98
+ **For missing Properties:**
99
+ - **Do NOT automatically suggest properties** if the user hasn't specified any
100
+ - Only include properties in the story if the user explicitly provides them
101
+ - If the user mentions data fields vaguely, ask for clarification: "Du hast [Datenfeld] erwähnt. Möchtest du die Properties genauer spezifizieren, oder soll das der Implementierung überlassen werden?"
102
+ - If the user declines to specify properties, omit the Properties section entirely - the implementation agent will determine appropriate properties based on the requirements
103
+
104
+ **For missing Acceptance Criteria:**
105
+ - Generate standard criteria based on the feature type (CRUD → list, create, read, update, delete + permissions)
106
+ - German suggestion: "Ich schlage folgende Akzeptanzkriterien vor: [list]. Möchtest du welche anpassen oder ergänzen?"
107
+
108
+ **For missing Security/Permissions:**
109
+ - Suggest common permission patterns based on the role
110
+ - German suggestion: "Ich würde vorschlagen: **Admins haben vollen Zugriff, Gäste können nur lesen**. Ist das korrekt?"
111
+
112
+ **For missing Edge Cases:**
113
+ - Suggest typical edge cases for the feature type
114
+ - German suggestion: "Mögliche Edge Cases wären: Was passiert bei leeren Eingaben? Bei Duplikaten? Bei Löschung referenzierter Daten?"
115
+
116
+ **Suggestion Format (always in German):**
117
+ "Für [area] schlage ich vor: **[concrete suggestion]**. Passt das so, oder möchtest du etwas ändern?"
118
+
119
+ **Key Rules:**
120
+ - Always present suggestions as proposals, not decisions
121
+ - Let the user confirm, modify, or reject each suggestion
122
+ - If the user confirms with "ja", "ok", "passt", accept the suggestion and proceed
123
+ - **Integrate confirmed suggestions directly into the story** - the final story should only contain definitive requirements, not assumptions or proposals
124
+ - The user should be able to review the complete story and request changes before finalizing
125
+
126
+ ---
127
+
128
+ ### Step 3: Validation
129
+
130
+ Before generating the story, perform these checks:
131
+
132
+ **INVEST Check:**
133
+ - **Independent:** Does this story depend on other stories? If yes, note dependencies or suggest splitting.
134
+ - **Valuable:** Is the user value clear? If weak, use the 5 Whys technique to dig deeper.
135
+ - **Small:** Can this be completed in one sprint? If too large, suggest splitting (German): "Diese Story scheint recht umfangreich. Sollen wir sie in kleinere Stories aufteilen?"
136
+ - **Testable:** Are all acceptance criteria measurable and verifiable?
137
+
138
+ **Coherence Check:**
139
+ - Does the feature make sense as described?
140
+ - Are the requirements internally consistent?
141
+ - Do the acceptance criteria cover all requirements (aim for 4-8)?
142
+ - Are there any contradictions?
143
+
144
+ **If issues found:** Ask clarifying questions or make suggestions (in German) before proceeding.
145
+
146
+ ---
147
+
148
+ ### Step 4: Generate and Present Story
149
+
150
+ Generate the complete user story in this format and present it to the user:
151
+
152
+ ```markdown
153
+ # [Titel - Rolle möchte Feature, damit Begründung]
154
+
155
+ **Story:** Als [Rolle] möchte ich [Feature], damit [Begründung].
156
+
157
+ ## Beschreibung
158
+
159
+ [Detailed description in German]
160
+
161
+ ### Kontext
162
+ [Background and system context]
163
+
164
+ ### Anforderungen
165
+ [List of specific requirements]
166
+
167
+ ### Properties (optional - only if user explicitly specified them)
168
+
169
+ | Property | Type | Required | Description (EN) | Beschreibung (DE) |
170
+ |------------|--------|----------|--------------------|----------------------|
171
+ | example | string | yes | Example property | Beispiel-Eigenschaft |
172
+
173
+ [Omit this entire section if user did not specify properties]
174
+
175
+ ### Hinweise (optional)
176
+ [Technical notes, constraints, special logic - only if relevant]
177
+
178
+ ## Akzeptanzkriterien
179
+
180
+ - [ ] [Testable criterion 1]
181
+ - [ ] [Testable criterion 2]
182
+ - [ ] [Security criterion]
183
+ - [ ] [Edge case criterion]
184
+ ```
185
+
186
+ **After presenting, ask (in German):**
187
+ "Ist die Story so in Ordnung, oder möchtest du noch etwas anpassen?"
188
+
189
+ **If changes requested:** Make adjustments and present the updated story again.
190
+
191
+ ---
192
+
193
+ ## Example
194
+
195
+ **User input:**
196
+ > "Ich brauche FAQs die der Admin verwalten kann und die auf der Website angezeigt werden. Die sollen eine Reihenfolge haben."
197
+
198
+ **Proactive suggestions by the LLM (in German):**
199
+ > "Ich habe einige Details ergänzt, die mir sinnvoll erscheinen:
200
+ > - **Berechtigungen:** Admins verwalten, Gäste können nur lesen. Korrekt?
201
+ > - **Reihenfolge:** Du hast erwähnt, dass FAQs eine Reihenfolge haben sollen. Möchtest du die Properties (z.B. `position`) genauer spezifizieren, oder soll das der Implementierung überlassen werden?"
202
+
203
+ **User confirms:** "Ja, passt. Properties kann die Implementierung machen."
204
+
205
+ **Resulting story (suggestions integrated as definitive requirements):**
206
+
207
+ ```markdown
208
+ # Admin möchte FAQs verwalten, damit sie auf der Website verfügbar sind
209
+
210
+ **Story:** Als Admin möchte ich FAQs verwalten können, damit sie allen Besuchern auf der Website zur Verfügung stehen.
211
+
212
+ ## Beschreibung
213
+
214
+ Es soll ein Modul für FAQs erstellt werden, in dem der Admin FAQs sehen, anlegen, bearbeiten und löschen kann. Nicht eingeloggte Nutzer sollen die FAQs sehen können, damit sie auf der Website dargestellt werden können.
215
+
216
+ ### Kontext
217
+ - FAQs sind öffentlich sichtbare Inhalte, die von Administratoren verwaltet werden
218
+ - Die Reihenfolge der FAQs ist für die Anzeige wichtig
219
+
220
+ ### Anforderungen
221
+ - Admins können vollständige CRUD-Operationen auf FAQs durchführen
222
+ - Alle Nutzer (auch Gäste) können FAQs lesen
223
+ - FAQs müssen eine bestimmte Reihenfolge haben
224
+ - Die Reihenfolgeverwaltung muss automatisch und effizient erfolgen
225
+
226
+ ## Akzeptanzkriterien
227
+
228
+ - [ ] Administratoren können FAQs vollständig verwalten (GET, POST, DELETE, PUT)
229
+ - [ ] Alle Nutzer (auch nicht eingeloggte) können die komplette Liste der FAQs sortiert nach Reihenfolge abrufen
230
+ - [ ] Beim Anlegen einer neuen FAQ wird automatisch die nächste Position in der Reihenfolge vergeben
231
+ - [ ] Die Reihenfolge der FAQs kann angepasst werden
232
+ - [ ] Nicht-Admin-Nutzer können keine FAQs erstellen, bearbeiten oder löschen
233
+ ```
234
+
235
+ **Gherkin format for complex criteria (optional):**
236
+ ```gherkin
237
+ Gegeben es existieren bereits 3 FAQs in der Reihenfolge A, B, C
238
+ Wenn ein Admin eine neue FAQ D an Position 2 einfügt
239
+ Dann ist die neue Reihenfolge A, D, B, C
240
+ Und alle anderen FAQs werden entsprechend neu positioniert
241
+ ```
242
+
243
+ ---
244
+
245
+ ## Workflow Summary
246
+
247
+ 1. **Collect initial thoughts** - Let user describe their idea freely
248
+ 2. **Analyze gaps** - Check against the required elements checklist
249
+ 3. **Proactively suggest** - For missing areas, suggest sensible completions and ask for confirmation
250
+ 4. **Validate** - INVEST check, coherence check
251
+ 5. **Present story** - Output in Markdown format, open for discussion
252
+ 6. **Iterate** - Make adjustments if requested and present again
253
+
254
+ **Core Principle:** Be proactive! Don't just wait for answers - suggest sensible completions based on context. This way, even brief inputs lead to complete, high-quality user stories.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lenne.tech/cli",
3
- "version": "1.0.2",
3
+ "version": "1.2.0",
4
4
  "description": "lenne.Tech CLI: lt",
5
5
  "keywords": [
6
6
  "lenne.Tech",