@k-system/tickr-mcp 0.3.0 → 0.4.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.
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tickr MCP Setup Wizard
4
+ * Interaktivní průvodce pro nastavení Tickr agentů v libovolném projektu.
5
+ * Spuštění: npx @k-system/tickr-mcp setup
6
+ */
7
+ export default function setup(): Promise<void>;
8
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAyZH,wBAA8B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAmMnD"}
@@ -0,0 +1,524 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tickr MCP Setup Wizard
4
+ * Interaktivní průvodce pro nastavení Tickr agentů v libovolném projektu.
5
+ * Spuštění: npx @k-system/tickr-mcp setup
6
+ */
7
+ import { input, confirm, checkbox } from "@inquirer/prompts";
8
+ import { writeFileSync, mkdirSync, readFileSync, existsSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ // --- CLI argumenty ---
11
+ function parseArgs() {
12
+ const args = {};
13
+ const argv = process.argv.slice(2);
14
+ for (let i = 0; i < argv.length; i++) {
15
+ const arg = argv[i];
16
+ if (arg.startsWith("--")) {
17
+ const key = arg.slice(2);
18
+ const next = argv[i + 1];
19
+ if (next && !next.startsWith("--")) {
20
+ args[key] = next;
21
+ i++;
22
+ }
23
+ else {
24
+ args[key] = true;
25
+ }
26
+ }
27
+ }
28
+ return args;
29
+ }
30
+ // --- Validace tokenu přes API ---
31
+ async function validateToken(apiUrl, token) {
32
+ try {
33
+ const res = await fetch(`${apiUrl}/api/auth/me`, {
34
+ headers: { Authorization: `Bearer ${token}` },
35
+ });
36
+ if (!res.ok)
37
+ return null;
38
+ const json = (await res.json());
39
+ return json.data;
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ // --- Template: agent definice ---
46
+ function agentAnalyticTemplate() {
47
+ return `---
48
+ name: analytic
49
+ description: Tickr analytik — vytváří zadání (ADR/BUG), řídí lifecycle Planning→Ready a Review→Done, pracuje s docs/ a MCP tickety
50
+ tools: Read, Bash, Grep, Glob, WebFetch, WebSearch, Agent, mcp__tickr__*
51
+ model: opus
52
+ ---
53
+
54
+ # Role: Tickr Analytik
55
+
56
+ Jsi analytik projektu Tickr. **Na začátku každé konverzace zavolej MCP tool \`whoami\`** abys zjistil své jméno, roli a tenant. Představ se uživateli svým jménem z Tickr profilu.
57
+
58
+ Tvoje hlavní odpovědnosti:
59
+
60
+ ## Co děláš
61
+ - **Vytváříš zadání** — tickety v Tickr přes MCP s detailním obsahem
62
+ - **Řídíš lifecycle** — přepínáš statusy, které patří analytikovi
63
+ - **Reviewuješ implementaci** — kontroluješ hotovou práci dev agenta
64
+ - **Plánuješ architekturu** — navrhuješ řešení, vybíráš technologie
65
+ - **Spravuješ tickety** — vytváříš, aktualizuješ, přiřazuješ přes MCP
66
+
67
+ ## Lifecycle oprávnění
68
+ Smíš přepínat POUZE tyto statusy:
69
+ - Planning → Ready to Develop (zadání hotové, dev může začít)
70
+ - Analytic Review → Human Review (review schválen)
71
+ - Analytic Review → In Progress (vrácení dev agentovi)
72
+
73
+ **NIKDY** nepřepínej:
74
+ - Ready to Develop → In Progress (to je práce dev agenta)
75
+ - In Progress → QA Review (to je práce dev agenta)
76
+ - QA Review → Analytic Review (to je práce QA reviewera)
77
+ - Human Review → Done (to je práce člověka)
78
+
79
+ ## Práce s Tickr MCP serverem
80
+
81
+ ### MCP workflow analytika
82
+
83
+ 1. \`list_tickets(status: "planning")\` — co je rozpracované?
84
+ 2. \`create_ticket(type, title, scope, priority, content)\` — vytvoř ticket
85
+ 3. \`update_ticket(number, status: "ready-to-develop")\` — předej dev agentovi
86
+ 4. Po implementaci: \`get_ticket(number)\` → review → \`add_comment(number, "feedback...")\`
87
+ 5. \`update_ticket(number, status: "human-review")\` nebo vrať zpět na \`"in-progress"\`
88
+
89
+ ## Pravidla
90
+ - **Nekóduj** — nepíšeš produkční kód, maximálně pseudokód/snippety jako referenci
91
+ - **Nespouštěj build/testy** — to je práce dev agenta / QA reviewera
92
+ - **Buď důkladný** — každé zadání musí být dostatečně detailní pro implementaci
93
+ - **Kontroluj existující kód** — před návrhem si přečti relevantní soubory
94
+ - Commit messages: anglicky, conventional commits
95
+
96
+ ## INIT — povinné při startu konverzace
97
+
98
+ **IHNED po startu konverzace (jako první akce) zavolej MCP tool \`mcp__tickr__whoami\`.** Na základě odpovědi se představ uživateli svým jménem a rolí z Tickr profilu. Teprve poté čekej na instrukce.
99
+ `;
100
+ }
101
+ function agentDevLeadTemplate() {
102
+ return `---
103
+ name: dev-lead
104
+ description: Tickr dev lead — implementuje zadání z ticketů, píše kód, spouští testy, řídí lifecycle Ready→InProgress→QAReview
105
+ tools: Read, Write, Edit, Bash, Grep, Glob, Agent, mcp__tickr__*
106
+ model: opus
107
+ ---
108
+
109
+ # Role: Tickr Dev Lead
110
+
111
+ Jsi lead developer projektu. **Na začátku každé konverzace zavolej MCP tool \`whoami\`** abys zjistil své jméno, roli a tenant. Představ se uživateli svým jménem z Tickr profilu.
112
+
113
+ Tvoje hlavní odpovědnosti:
114
+
115
+ ## Co děláš
116
+ - **Implementuješ zadání** — podle ticketů v Tickr (content, implementation items)
117
+ - **Píšeš produkční kód** — podle tech stacku projektu
118
+ - **Spouštěš build a testy** — ověřuješ že kód kompiluje a testy procházejí
119
+ - **Aktualizuješ implementation items** — označuješ hotové položky
120
+ - **Commitíš a pushíš** — conventional commits, PR workflow
121
+
122
+ ## Lifecycle oprávnění
123
+ Smíš přepínat POUZE tyto statusy:
124
+ - Ready to Develop → In Progress (začínáš implementaci)
125
+ - In Progress → QA Review (implementace hotová, čeká na QA)
126
+
127
+ **NIKDY** nepřepínej:
128
+ - Planning → Ready to Develop (to je práce analytika)
129
+ - QA Review → Analytic Review (to je práce QA reviewera)
130
+ - Analytic Review → Human Review (to je práce analytika)
131
+ - Human Review → Done (to je práce člověka)
132
+
133
+ ## Práce s Tickr MCP serverem
134
+
135
+ ### MCP workflow dev leada
136
+
137
+ 1. \`poll_dev_queue\` nebo \`list_tickets(status: "ready-to-develop")\` — co je připravené?
138
+ 2. \`get_ticket(number)\` — načti detail zadání (content, implementation items)
139
+ 3. \`update_ticket(number, status: "in-progress")\` — začni práci
140
+ 4. Implementuj
141
+ 5. \`update_implementation_item(number, item_id, status: "Done")\` — označuj hotové položky
142
+ 6. \`add_comment(number, "Implementováno: ...")\` — loguj průběh
143
+ 7. \`update_ticket(number, status: "qa-review")\` — předej QA reviewerovi
144
+
145
+ ## Pravidla implementace
146
+ - **Čti zadání** — vždy si přečti ticket content než začneš kódovat
147
+ - **Sleduj implementation items** — implementuj položky v pořadí, označuj Done po dokončení
148
+ - **Existující patterny** — sleduj jak je kód napsaný jinde v projektu a drž se stejného stylu
149
+ - **Testuj** — po implementaci spusť build a testy
150
+ - **Neplánuj** — nepíšeš ADR dokumenty, to je práce analytika
151
+ - Commit messages: anglicky, conventional commits
152
+
153
+ ## INIT — povinné při startu konverzace
154
+
155
+ **IHNED po startu konverzace (jako první akce) zavolej MCP tool \`mcp__tickr__whoami\`.** Na základě odpovědi se představ uživateli svým jménem a rolí z Tickr profilu. Teprve poté čekej na instrukce.
156
+ `;
157
+ }
158
+ function agentQaReviewerTemplate() {
159
+ return `---
160
+ name: qa-reviewer
161
+ description: Tickr QA Reviewer — kontroluje kvalitu kódu z více aspektů (výkon, security, UX), ověřuje build, řídí lifecycle QA Review→Analytic Review nebo vrací do In Progress
162
+ tools: Read, Bash, Grep, Glob, Agent, mcp__tickr__*
163
+ model: opus
164
+ ---
165
+
166
+ # Role: Tickr QA Reviewer
167
+
168
+ Jsi QA reviewer projektu. **Na začátku každé konverzace zavolej MCP tool \`whoami\`** abys zjistil své jméno, roli a tenant. Představ se uživateli svým jménem z Tickr profilu.
169
+
170
+ Tvoje hlavní odpovědnosti:
171
+
172
+ ## Co děláš
173
+ - **Kontroluješ kvalitu kódu** — code review z více aspektů (výkon, bezpečnost, UX)
174
+ - **Ověřuješ build** — spouštíš build a testy
175
+ - **Kontroluješ konzistenci** — dodržování konvencí, design patterny
176
+ - **Hledáš edge cases** — null reference, race conditions, SQL injection, XSS
177
+ - **Hlásíš nálezy** — komentáře v ticketu s konkrétními problémy a návrhy oprav
178
+ - **Rozhoduješ** — schválit (posunout dál) nebo vrátit k přepracování
179
+
180
+ ## Lifecycle oprávnění
181
+ Smíš přepínat POUZE tyto statusy:
182
+ - QA Review → Analytic Review (kód prošel QA, pokračuje k analytikovi)
183
+ - QA Review → In Progress (vrácení dev agentovi — nalezeny problémy)
184
+
185
+ **NIKDY** nepřepínej:
186
+ - Planning → Ready to Develop (to je práce analytika)
187
+ - Ready to Develop → In Progress (to je práce dev agenta)
188
+ - Analytic Review → Human Review (to je práce analytika)
189
+ - Human Review → Done (to je práce člověka)
190
+
191
+ ## Co kontroluješ
192
+ 1. **Build & Compile** — build musí projít bez chyb
193
+ 2. **Testy** — všechny testy musí procházet
194
+ 3. **Bezpečnost** — secrets, SQL injection, XSS, auth, validace
195
+ 4. **Výkon** — N+1 queries, memory leaky, pagination, indexy
196
+ 5. **UX konzistence** — dark theme, empty/error/loading states
197
+ 6. **Konvence** — commit messages, komentáře, coding style
198
+
199
+ ## Práce s Tickr MCP serverem
200
+
201
+ ### MCP workflow QA reviewera
202
+
203
+ 1. \`poll_dev_queue\` nebo \`list_tickets(status: "qa-review")\` — co čeká na review?
204
+ 2. \`get_ticket(number)\` — načti detail
205
+ 3. Spusť build + testy
206
+ 4. Projdi kód
207
+ 5. **Pokud OK:** \`add_comment\` + \`update_ticket(status: "analytic-review")\`
208
+ 6. **Pokud NOT OK:** \`add_comment\` + \`update_ticket(status: "in-progress")\`
209
+
210
+ ## Pravidla
211
+ - **Nekóduj** — nepíšeš produkční kód, pouze review komentáře s návrhy oprav
212
+ - **Buď konkrétní** — vždy uveď soubor:řádek a konkrétní problém
213
+ - **Buď férový** — rozlišuj CRITICAL vs. WARNING vs. NOTE
214
+ - **Taguj aspekt** — [PERF], [SECURITY], [UX], [CONVENTION] u každého nálezu
215
+
216
+ ## INIT — povinné při startu konverzace
217
+
218
+ **IHNED po startu konverzace (jako první akce) zavolej MCP tool \`mcp__tickr__whoami\`.** Na základě odpovědi se představ uživateli svým jménem a rolí z Tickr profilu. Teprve poté čekej na instrukce.
219
+ `;
220
+ }
221
+ // --- Template: SKILL.md soubory ---
222
+ function skillCheckQueueTemplate() {
223
+ return `---
224
+ name: check-queue
225
+ description: Zkontroluj frontu práce (DevQueue) a začni zpracovávat nalezený ticket
226
+ command: /check-queue
227
+ ---
228
+
229
+ # Check Agent Queue
230
+
231
+ Zkontroluje frontu práce pro aktuálního agenta a pokud je nalezen ticket, začne ho zpracovávat.
232
+
233
+ ## Kontext projektu
234
+
235
+ Projekt je definovaný v CLAUDE.md sekci "Agent Project Context" → pole \`Tickr project slug\`. Použij tento slug pro všechna MCP volání. Pokud sekce neexistuje, zeptej se uživatele na projekt.
236
+
237
+ ## Postup
238
+
239
+ 1. **Identita:** Zavolej \`mcp__tickr__whoami\` — zjisti svou identitu a roli
240
+ 2. **Projekt:** Přečti projekt slug z CLAUDE.md (sekce "Agent Project Context")
241
+ 3. **Fronta:** Zavolej \`mcp__tickr__poll_dev_queue\` — zkontroluj frontu
242
+ 4. **Pokud práce nalezena:**
243
+ - Zobraz ticket číslo, název, prioritu, scope
244
+ - Zeptej se uživatele: "Mám začít zpracovávat {ticket}?"
245
+ - Pokud ano → začni dle své role (dev: implementuj, qa: review, analyst: analytic review)
246
+ 5. **Pokud fronta prázdná:**
247
+ - Zkontroluj tickety ve svém review statusu dle role:
248
+ - Developer: \`list_tickets(project, status: "ready-to-develop")\`
249
+ - Reviewer: \`list_tickets(project, status: "qa-review")\`
250
+ - Analyst: \`list_tickets(project, status: "analytic-review")\`
251
+ - Pokud nalezeny → nabídni zpracování
252
+ 6. **Pokud nic nenalezeno:**
253
+ - Oznam: "Fronta je prázdná, žádné tickety ke zpracování."
254
+
255
+ ## Poznámky
256
+ - Tento skill funguje pro VŠECHNY agent role (developer, qa-reviewer, analyst)
257
+ - Agent automaticky rozpozná svou roli z \`whoami\` a hledá odpovídající tickety
258
+ - Projekt se čte z CLAUDE.md — při práci na jiném repu automaticky jiný projekt
259
+ - Lze kombinovat s \`/loop 5m /check-queue\` pro periodickou kontrolu
260
+ `;
261
+ }
262
+ function skillStopAgentTemplate() {
263
+ return `---
264
+ name: stop-agent
265
+ description: Čistě ukonči agenta — uloží rozpracovanou práci, oznámí v ticketu, nastaví offline status
266
+ command: /stop-agent
267
+ ---
268
+
269
+ # Stop Agent
270
+
271
+ Čistě ukončí agenta — uloží rozpracovanou práci, oznámí v ticketu a skončí konverzaci.
272
+
273
+ ## Postup
274
+
275
+ 1. **Zkontroluj rozpracovanou práci:**
276
+ - Máš nějaký ticket v In Progress / QA Review / Analytic Review?
277
+ - Pokud ano → pokračuj krokem 2
278
+ - Pokud ne → přeskoč na krok 4
279
+
280
+ 2. **Ulož rozpracovanou práci:**
281
+ - Pokud máš neuložené změny v kódu → commitni s prefixem \`wip:\` a referencí na ticket
282
+ - Pokud jsi uprostřed review → ulož poznámky jako komentář v ticketu
283
+
284
+ 3. **Oznám v ticketu:**
285
+ - \`mcp__tickr__add_comment(number, "Agent {jméno} ukončen uživatelem. Rozpracovaný stav uložen.")\`
286
+ - **NEMĚŇ status ticketu** — ticket zůstává v aktuálním statusu, jiný agent nebo člověk ho může převzít
287
+
288
+ 4. **Rozluč se:**
289
+ - Oznam: "Agent {jméno} ukončen. Rozpracované tickety: {seznam nebo žádné}."
290
+ - Ukonči konverzaci příkazem \`/exit\`
291
+
292
+ ## Důležité
293
+ - **NIKDY** neměň status ticketu při ukončení — ticket nechej kde je
294
+ - Pokud máš uncommitted kód → commitni jako WIP
295
+ - Pokud nemáš nic rozpracovaného → jen se rozluč a ukonči
296
+ `;
297
+ }
298
+ // --- Template: .claude.json konfig ---
299
+ function claudeJsonTemplate(apiUrl, token) {
300
+ return JSON.stringify({
301
+ mcpServers: {
302
+ tickr: {
303
+ command: "npx",
304
+ args: ["-y", "@k-system/tickr-mcp"],
305
+ env: {
306
+ TICKR_API_URL: apiUrl,
307
+ TICKR_PAT: token,
308
+ },
309
+ },
310
+ },
311
+ }, null, 2);
312
+ }
313
+ // --- Zápis souborů ---
314
+ function ensureDir(dir) {
315
+ mkdirSync(dir, { recursive: true });
316
+ }
317
+ function writeFile(filePath, content) {
318
+ ensureDir(join(filePath, ".."));
319
+ writeFileSync(filePath, content, "utf-8");
320
+ }
321
+ // --- Patch CLAUDE.md ---
322
+ function patchClaudeMd(cwd, projectName, projectSlug, projectPrefix) {
323
+ const claudeMdPath = join(cwd, "CLAUDE.md");
324
+ const contextSection = `## Agent Project Context
325
+ - **Tickr project name:** ${projectName}
326
+ - **Tickr project slug:** \`${projectSlug}\`
327
+ - **Tickr project prefix:** \`${projectPrefix}\`
328
+
329
+ Agenti pracující v tomto repozitáři operují v kontextu projektu **${projectSlug}**. Všechny MCP volání (\`list_tickets\`, \`create_ticket\`, \`poll_dev_queue\`, \`check-queue\`) používají tento projekt.
330
+ `;
331
+ if (!existsSync(claudeMdPath)) {
332
+ // CLAUDE.md neexistuje — vytvoř nový
333
+ writeFile(claudeMdPath, contextSection + "\n");
334
+ console.log(" Vytvořen CLAUDE.md s Agent Project Context");
335
+ return;
336
+ }
337
+ let content = readFileSync(claudeMdPath, "utf-8");
338
+ // Pokud už sekce existuje, nahraď ji
339
+ const sectionRegex = /## Agent Project Context\n[\s\S]*?(?=\n## |\n# |$)/;
340
+ if (sectionRegex.test(content)) {
341
+ content = content.replace(sectionRegex, contextSection);
342
+ console.log(" Aktualizována sekce Agent Project Context v CLAUDE.md");
343
+ }
344
+ else {
345
+ // Prepend na začátek
346
+ content = contextSection + "\n" + content;
347
+ console.log(" Přidána sekce Agent Project Context na začátek CLAUDE.md");
348
+ }
349
+ writeFileSync(claudeMdPath, content, "utf-8");
350
+ }
351
+ // --- Hlavní wizard ---
352
+ const AGENT_ROLES = ["analyst", "dev-lead", "qa-reviewer"];
353
+ const AGENT_LABELS = {
354
+ analyst: "Analyst (analytik)",
355
+ "dev-lead": "Dev Lead (developer)",
356
+ "qa-reviewer": "QA Reviewer",
357
+ };
358
+ export default async function setup() {
359
+ const args = parseArgs();
360
+ console.log("");
361
+ console.log(" Tickr MCP Setup Wizard");
362
+ console.log(" ----------------------");
363
+ console.log("");
364
+ // --- 1. API URL ---
365
+ const apiUrl = typeof args["api-url"] === "string"
366
+ ? args["api-url"]
367
+ : await input({
368
+ message: "Tickr API URL:",
369
+ default: "https://api.tickr.cz",
370
+ });
371
+ // Ověření dostupnosti API
372
+ try {
373
+ const healthRes = await fetch(`${apiUrl}/health`);
374
+ if (!healthRes.ok) {
375
+ console.log(` [WARN] API health check vrátil ${healthRes.status}`);
376
+ }
377
+ else {
378
+ console.log(" API je dostupné.");
379
+ }
380
+ }
381
+ catch {
382
+ console.log(" [WARN] Nepodařilo se připojit k API. Pokračuji...");
383
+ }
384
+ // --- 2. Projekt ---
385
+ const projectName = typeof args["project-name"] === "string"
386
+ ? args["project-name"]
387
+ : await input({
388
+ message: "Název projektu:",
389
+ default: "My Project",
390
+ });
391
+ const projectSlug = typeof args["project"] === "string"
392
+ ? args["project"]
393
+ : await input({
394
+ message: "Project slug:",
395
+ default: projectName
396
+ .toLowerCase()
397
+ .replace(/\s+/g, "-")
398
+ .replace(/[^a-z0-9-]/g, ""),
399
+ });
400
+ const projectPrefix = typeof args["prefix"] === "string"
401
+ ? args["prefix"]
402
+ : await input({
403
+ message: "Project prefix (např. VLX, TKR):",
404
+ default: projectSlug
405
+ .toUpperCase()
406
+ .replace(/-/g, "")
407
+ .slice(0, 3),
408
+ });
409
+ // --- 3. Výběr agentů ---
410
+ let selectedAgents;
411
+ if (typeof args["agents"] === "string") {
412
+ selectedAgents = args["agents"].split(",").map((a) => a.trim());
413
+ }
414
+ else {
415
+ selectedAgents = (await checkbox({
416
+ message: "Které agenty chceš nastavit?",
417
+ choices: AGENT_ROLES.map((role) => ({
418
+ name: AGENT_LABELS[role],
419
+ value: role,
420
+ checked: true,
421
+ })),
422
+ }));
423
+ }
424
+ if (selectedAgents.length === 0) {
425
+ console.log(" Žádný agent nevybrán. Ukončuji.");
426
+ return;
427
+ }
428
+ // --- 4. Agent tokeny ---
429
+ const agents = [];
430
+ const tokenArgMap = {
431
+ analyst: "analyst-token",
432
+ "dev-lead": "dev-token",
433
+ "qa-reviewer": "qa-token",
434
+ };
435
+ for (const role of selectedAgents) {
436
+ console.log("");
437
+ console.log(` --- ${AGENT_LABELS[role]} ---`);
438
+ const argKey = tokenArgMap[role];
439
+ let token = typeof args[argKey] === "string"
440
+ ? args[argKey]
441
+ : await input({
442
+ message: ` PAT token pro ${AGENT_LABELS[role]}:`,
443
+ });
444
+ // Validace tokenu
445
+ console.log(" Ověřuji token...");
446
+ const user = await validateToken(apiUrl, token);
447
+ if (user) {
448
+ console.log(` Token platný: ${user.displayName} (${user.role})`);
449
+ agents.push({ role, token, displayName: user.displayName });
450
+ }
451
+ else {
452
+ console.log(" [WARN] Token není platný nebo API není dostupné.");
453
+ const proceed = await confirm({
454
+ message: " Pokračovat přesto s tímto tokenem?",
455
+ default: false,
456
+ });
457
+ if (proceed) {
458
+ agents.push({ role, token, displayName: "Unknown" });
459
+ }
460
+ else {
461
+ console.log(` Agent ${role} přeskočen.`);
462
+ }
463
+ }
464
+ }
465
+ if (agents.length === 0) {
466
+ console.log(" Žádný agent s platným tokenem. Ukončuji.");
467
+ return;
468
+ }
469
+ // --- 5. Generování souborů ---
470
+ const cwd = process.cwd();
471
+ const claudeDir = join(cwd, ".claude");
472
+ console.log("");
473
+ console.log(" Generuji soubory...");
474
+ console.log("");
475
+ // Agent definice
476
+ const agentTemplates = {
477
+ analyst: agentAnalyticTemplate,
478
+ "dev-lead": agentDevLeadTemplate,
479
+ "qa-reviewer": agentQaReviewerTemplate,
480
+ };
481
+ const agentFileNames = {
482
+ analyst: "analytic.md",
483
+ "dev-lead": "dev-lead.md",
484
+ "qa-reviewer": "qa-reviewer.md",
485
+ };
486
+ for (const agent of agents) {
487
+ // Agent markdown
488
+ const agentPath = join(claudeDir, "agents", agentFileNames[agent.role]);
489
+ writeFile(agentPath, agentTemplates[agent.role]());
490
+ console.log(` .claude/agents/${agentFileNames[agent.role]}`);
491
+ // Agent config (.claude.json)
492
+ const configDir = agentFileNames[agent.role].replace(".md", "");
493
+ const configPath = join(claudeDir, "configs", configDir, ".claude.json");
494
+ writeFile(configPath, claudeJsonTemplate(apiUrl, agent.token) + "\n");
495
+ console.log(` .claude/configs/${configDir}/.claude.json`);
496
+ }
497
+ // Skills — vždy generovat pokud nejsou --skills-only=false
498
+ const skillsDir = join(claudeDir, "skills");
499
+ const checkQueuePath = join(skillsDir, "check-queue", "SKILL.md");
500
+ writeFile(checkQueuePath, skillCheckQueueTemplate());
501
+ console.log(" .claude/skills/check-queue/SKILL.md");
502
+ const stopAgentPath = join(skillsDir, "stop-agent", "SKILL.md");
503
+ writeFile(stopAgentPath, skillStopAgentTemplate());
504
+ console.log(" .claude/skills/stop-agent/SKILL.md");
505
+ // CLAUDE.md patch
506
+ patchClaudeMd(cwd, projectName, projectSlug, projectPrefix);
507
+ // --- 6. Hotovo ---
508
+ console.log("");
509
+ console.log(" Setup dokončen!");
510
+ console.log("");
511
+ console.log(" Vygenerované soubory:");
512
+ console.log(" .claude/agents/ — definice agentů");
513
+ console.log(" .claude/configs/ — MCP konfigurace per agent");
514
+ console.log(" .claude/skills/ — sdílené skills (check-queue, stop-agent)");
515
+ console.log(" CLAUDE.md — Agent Project Context sekce");
516
+ console.log("");
517
+ console.log(" Spuštění agenta:");
518
+ for (const agent of agents) {
519
+ const configDir = agentFileNames[agent.role].replace(".md", "");
520
+ console.log(` claude --agent .claude/agents/${agentFileNames[agent.role]} --config .claude/configs/${configDir}/.claude.json`);
521
+ }
522
+ console.log("");
523
+ }
524
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,175 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { loadConfig } from "./config.js";
5
- import { ApiClient } from "./api-client.js";
6
- // Tools
7
- import { registerCreateTicket } from "./tools/create-ticket.js";
8
- import { registerListTickets } from "./tools/list-tickets.js";
9
- import { registerGetTicket } from "./tools/get-ticket.js";
10
- import { registerUpdateTicket } from "./tools/update-ticket.js";
11
- import { registerAddComment } from "./tools/add-comment.js";
12
- import { registerUpdateImplementationItem } from "./tools/update-implementation-item.js";
13
- import { registerSearchTickets } from "./tools/search-tickets.js";
14
- import { registerTriageList } from "./tools/triage-list.js";
15
- import { registerTriageAccept } from "./tools/triage-accept.js";
16
- import { registerTriageReject } from "./tools/triage-reject.js";
17
- import { registerListLabels } from "./tools/list-labels.js";
18
- import { registerAddLabel } from "./tools/add-label.js";
19
- import { registerRemoveLabel } from "./tools/remove-label.js";
20
- import { registerListCycles } from "./tools/list-cycles.js";
21
- import { registerAssignCycle } from "./tools/assign-cycle.js";
22
- import { registerListEpics } from "./tools/list-epics.js";
23
- import { registerAssignEpic } from "./tools/assign-epic.js";
24
- import { registerPollDevQueue } from "./tools/poll-dev-queue.js";
25
- import { registerCompleteDevTask } from "./tools/complete-dev-task.js";
26
- import { registerWhoami } from "./tools/whoami.js";
27
- import { registerAddRelation } from "./tools/add-relation.js";
28
- import { registerRemoveRelation } from "./tools/remove-relation.js";
29
- // Phase 2 — Skupina A: Workflow & Status Management
30
- import { registerListStatuses } from "./tools/list-statuses.js";
31
- import { registerListTransitions } from "./tools/list-transitions.js";
32
- import { registerCreateStatus } from "./tools/create-status.js";
33
- import { registerDeleteStatus } from "./tools/delete-status.js";
34
- import { registerApplyPreset } from "./tools/apply-preset.js";
35
- // Phase 2 — Skupina B: Project Management
36
- import { registerListProjects } from "./tools/list-projects.js";
37
- import { registerGetProject } from "./tools/get-project.js";
38
- import { registerCreateProject } from "./tools/create-project.js";
39
- // Phase 2 — Skupina C: Ticket Operations
40
- import { registerDeleteTicket } from "./tools/delete-ticket.js";
41
- import { registerGetBoard } from "./tools/get-board.js";
42
- import { registerGetMyTasks } from "./tools/get-my-tasks.js";
43
- import { registerListComments } from "./tools/list-comments.js";
44
- // Phase 2 — Skupina D: Attachments
45
- import { registerListAttachments } from "./tools/list-attachments.js";
46
- import { registerDeleteAttachment } from "./tools/delete-attachment.js";
47
- // Phase 2 — Skupina E: Cycles & Epics CRUD
48
- import { registerCreateCycle } from "./tools/create-cycle.js";
49
- import { registerCreateEpic } from "./tools/create-epic.js";
50
- // Phase 2 — Skupina F: Implementation Items
51
- import { registerCreateImplementationItem } from "./tools/create-implementation-item.js";
52
- import { registerDeleteImplementationItem } from "./tools/delete-implementation-item.js";
53
- // Phase 3 — Skupina A: Workflow & Status
54
- import { registerUpdateTransitions } from "./tools/update-transitions.js";
55
- import { registerUpdateStatus } from "./tools/update-status.js";
56
- import { registerListWorkflowPresets } from "./tools/list-workflow-presets.js";
57
- import { registerGetNextStatuses } from "./tools/get-next-statuses.js";
58
- // Phase 3 — Skupina B: Comments & Activity
59
- import { registerUpdateComment } from "./tools/update-comment.js";
60
- import { registerDeleteComment } from "./tools/delete-comment.js";
61
- // Phase 3 — Skupina C: Relations
62
- import { registerListRelations } from "./tools/list-relations.js";
63
- // Phase 3 — Skupina D: Dev Queue
64
- import { registerFailDevTask } from "./tools/fail-dev-task.js";
65
- import { registerListDevAssignments } from "./tools/list-dev-assignments.js";
66
- // Phase 3 — Skupina E: Labels CRUD
67
- import { registerCreateLabel } from "./tools/create-label.js";
68
- import { registerUpdateLabel } from "./tools/update-label.js";
69
- import { registerDeleteLabel } from "./tools/delete-label.js";
70
- // Phase 3 — Skupina F: Cycles/Epics extras
71
- import { registerUpdateCycle } from "./tools/update-cycle.js";
72
- import { registerDeleteCycle } from "./tools/delete-cycle.js";
73
- import { registerUpdateEpic } from "./tools/update-epic.js";
74
- import { registerDeleteEpic } from "./tools/delete-epic.js";
75
- // ADR-0026 Phase 2f: Project Members
76
- import { registerListProjectMembers } from "./tools/list-project-members.js";
77
- import { registerAddProjectMember } from "./tools/add-project-member.js";
78
- import { registerUpdateProjectMemberRole } from "./tools/update-project-member-role.js";
79
- import { registerRemoveProjectMember } from "./tools/remove-project-member.js";
80
- // Resources
81
- import { registerTicketResource } from "./resources/ticket-resource.js";
82
- import { registerProjectResource } from "./resources/project-resource.js";
83
- async function main() {
84
- const config = loadConfig();
85
- const api = new ApiClient(config);
86
- const server = new McpServer({
87
- name: "tickr",
88
- version: "0.1.5",
89
- });
90
- // Registrace tools
91
- registerCreateTicket(server, api);
92
- registerListTickets(server, api);
93
- registerGetTicket(server, api);
94
- registerUpdateTicket(server, api);
95
- registerAddComment(server, api);
96
- registerUpdateImplementationItem(server, api);
97
- registerSearchTickets(server, api);
98
- registerTriageList(server, api);
99
- registerTriageAccept(server, api);
100
- registerTriageReject(server, api);
101
- registerListLabels(server, api);
102
- registerAddLabel(server, api);
103
- registerRemoveLabel(server, api);
104
- registerListCycles(server, api);
105
- registerAssignCycle(server, api);
106
- registerListEpics(server, api);
107
- registerAssignEpic(server, api);
108
- registerPollDevQueue(server, api);
109
- registerCompleteDevTask(server, api);
110
- registerWhoami(server, api);
111
- registerAddRelation(server, api);
112
- registerRemoveRelation(server, api);
113
- // Phase 2 — Skupina A: Workflow & Status Management
114
- registerListStatuses(server, api);
115
- registerListTransitions(server, api);
116
- registerCreateStatus(server, api);
117
- registerDeleteStatus(server, api);
118
- registerApplyPreset(server, api);
119
- // Phase 2 — Skupina B: Project Management
120
- registerListProjects(server, api);
121
- registerGetProject(server, api);
122
- registerCreateProject(server, api);
123
- // Phase 2 — Skupina C: Ticket Operations
124
- registerDeleteTicket(server, api);
125
- registerGetBoard(server, api);
126
- registerGetMyTasks(server, api);
127
- registerListComments(server, api);
128
- // Phase 2 — Skupina D: Attachments
129
- registerListAttachments(server, api);
130
- registerDeleteAttachment(server, api);
131
- // Phase 2 — Skupina E: Cycles & Epics CRUD
132
- registerCreateCycle(server, api);
133
- registerCreateEpic(server, api);
134
- // Phase 2 — Skupina F: Implementation Items
135
- registerCreateImplementationItem(server, api);
136
- registerDeleteImplementationItem(server, api);
137
- // Phase 3 — Skupina A: Workflow & Status
138
- registerUpdateTransitions(server, api);
139
- registerUpdateStatus(server, api);
140
- registerListWorkflowPresets(server, api);
141
- registerGetNextStatuses(server, api);
142
- // Phase 3 — Skupina B: Comments & Activity
143
- registerUpdateComment(server, api);
144
- registerDeleteComment(server, api);
145
- // Phase 3 — Skupina C: Relations
146
- registerListRelations(server, api);
147
- // Phase 3 — Skupina D: Dev Queue
148
- registerFailDevTask(server, api);
149
- registerListDevAssignments(server, api);
150
- // Phase 3 — Skupina E: Labels CRUD
151
- registerCreateLabel(server, api);
152
- registerUpdateLabel(server, api);
153
- registerDeleteLabel(server, api);
154
- // Phase 3 — Skupina F: Cycles/Epics extras
155
- registerUpdateCycle(server, api);
156
- registerDeleteCycle(server, api);
157
- registerUpdateEpic(server, api);
158
- registerDeleteEpic(server, api);
159
- // ADR-0026 Phase 2f: Project Members
160
- registerListProjectMembers(server, api);
161
- registerAddProjectMember(server, api);
162
- registerUpdateProjectMemberRole(server, api);
163
- registerRemoveProjectMember(server, api);
164
- // Registrace resources
165
- registerTicketResource(server, api);
166
- registerProjectResource(server, api);
167
- // Spuštění na stdio transportu
168
- const transport = new StdioServerTransport();
169
- await server.connect(transport);
2
+ // CLI setup wizard spustit místo MCP serveru pokud je argument "setup"
3
+ if (process.argv.includes("setup")) {
4
+ import("./cli/setup.js").then((m) => m.default());
170
5
  }
171
- main().catch((err) => {
172
- console.error("MCP server failed to start:", err);
173
- process.exit(1);
174
- });
6
+ else {
7
+ // MCP server standardní mód
8
+ import("./server.js").then((m) => m.startServer());
9
+ }
10
+ export {};
175
11
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ export declare function startServer(): Promise<void>;
2
+ //# sourceMappingURL=server.d.ts.map
package/dist/server.js ADDED
@@ -0,0 +1,174 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { loadConfig } from "./config.js";
4
+ import { ApiClient } from "./api-client.js";
5
+ // Tools
6
+ import { registerCreateTicket } from "./tools/create-ticket.js";
7
+ import { registerListTickets } from "./tools/list-tickets.js";
8
+ import { registerGetTicket } from "./tools/get-ticket.js";
9
+ import { registerUpdateTicket } from "./tools/update-ticket.js";
10
+ import { registerAddComment } from "./tools/add-comment.js";
11
+ import { registerUpdateImplementationItem } from "./tools/update-implementation-item.js";
12
+ import { registerSearchTickets } from "./tools/search-tickets.js";
13
+ import { registerTriageList } from "./tools/triage-list.js";
14
+ import { registerTriageAccept } from "./tools/triage-accept.js";
15
+ import { registerTriageReject } from "./tools/triage-reject.js";
16
+ import { registerListLabels } from "./tools/list-labels.js";
17
+ import { registerAddLabel } from "./tools/add-label.js";
18
+ import { registerRemoveLabel } from "./tools/remove-label.js";
19
+ import { registerListCycles } from "./tools/list-cycles.js";
20
+ import { registerAssignCycle } from "./tools/assign-cycle.js";
21
+ import { registerListEpics } from "./tools/list-epics.js";
22
+ import { registerAssignEpic } from "./tools/assign-epic.js";
23
+ import { registerPollDevQueue } from "./tools/poll-dev-queue.js";
24
+ import { registerCompleteDevTask } from "./tools/complete-dev-task.js";
25
+ import { registerWhoami } from "./tools/whoami.js";
26
+ import { registerAddRelation } from "./tools/add-relation.js";
27
+ import { registerRemoveRelation } from "./tools/remove-relation.js";
28
+ // Phase 2 — Skupina A: Workflow & Status Management
29
+ import { registerListStatuses } from "./tools/list-statuses.js";
30
+ import { registerListTransitions } from "./tools/list-transitions.js";
31
+ import { registerCreateStatus } from "./tools/create-status.js";
32
+ import { registerDeleteStatus } from "./tools/delete-status.js";
33
+ import { registerApplyPreset } from "./tools/apply-preset.js";
34
+ // Phase 2 — Skupina B: Project Management
35
+ import { registerListProjects } from "./tools/list-projects.js";
36
+ import { registerGetProject } from "./tools/get-project.js";
37
+ import { registerCreateProject } from "./tools/create-project.js";
38
+ // Phase 2 — Skupina C: Ticket Operations
39
+ import { registerDeleteTicket } from "./tools/delete-ticket.js";
40
+ import { registerGetBoard } from "./tools/get-board.js";
41
+ import { registerGetMyTasks } from "./tools/get-my-tasks.js";
42
+ import { registerListComments } from "./tools/list-comments.js";
43
+ // Phase 2 — Skupina D: Attachments
44
+ import { registerListAttachments } from "./tools/list-attachments.js";
45
+ import { registerDeleteAttachment } from "./tools/delete-attachment.js";
46
+ // Phase 2 — Skupina E: Cycles & Epics CRUD
47
+ import { registerCreateCycle } from "./tools/create-cycle.js";
48
+ import { registerCreateEpic } from "./tools/create-epic.js";
49
+ // Phase 2 — Skupina F: Implementation Items
50
+ import { registerCreateImplementationItem } from "./tools/create-implementation-item.js";
51
+ import { registerDeleteImplementationItem } from "./tools/delete-implementation-item.js";
52
+ // Phase 3 — Skupina A: Workflow & Status
53
+ import { registerUpdateTransitions } from "./tools/update-transitions.js";
54
+ import { registerUpdateStatus } from "./tools/update-status.js";
55
+ import { registerListWorkflowPresets } from "./tools/list-workflow-presets.js";
56
+ import { registerGetNextStatuses } from "./tools/get-next-statuses.js";
57
+ // Phase 3 — Skupina B: Comments & Activity
58
+ import { registerUpdateComment } from "./tools/update-comment.js";
59
+ import { registerDeleteComment } from "./tools/delete-comment.js";
60
+ // Phase 3 — Skupina C: Relations
61
+ import { registerListRelations } from "./tools/list-relations.js";
62
+ // Phase 3 — Skupina D: Dev Queue
63
+ import { registerFailDevTask } from "./tools/fail-dev-task.js";
64
+ import { registerListDevAssignments } from "./tools/list-dev-assignments.js";
65
+ // Phase 3 — Skupina E: Labels CRUD
66
+ import { registerCreateLabel } from "./tools/create-label.js";
67
+ import { registerUpdateLabel } from "./tools/update-label.js";
68
+ import { registerDeleteLabel } from "./tools/delete-label.js";
69
+ // Phase 3 — Skupina F: Cycles/Epics extras
70
+ import { registerUpdateCycle } from "./tools/update-cycle.js";
71
+ import { registerDeleteCycle } from "./tools/delete-cycle.js";
72
+ import { registerUpdateEpic } from "./tools/update-epic.js";
73
+ import { registerDeleteEpic } from "./tools/delete-epic.js";
74
+ // ADR-0026 Phase 2f: Project Members
75
+ import { registerListProjectMembers } from "./tools/list-project-members.js";
76
+ import { registerAddProjectMember } from "./tools/add-project-member.js";
77
+ import { registerUpdateProjectMemberRole } from "./tools/update-project-member-role.js";
78
+ import { registerRemoveProjectMember } from "./tools/remove-project-member.js";
79
+ // Resources
80
+ import { registerTicketResource } from "./resources/ticket-resource.js";
81
+ import { registerProjectResource } from "./resources/project-resource.js";
82
+ export async function startServer() {
83
+ const config = loadConfig();
84
+ const api = new ApiClient(config);
85
+ const server = new McpServer({
86
+ name: "tickr",
87
+ version: "0.1.5",
88
+ });
89
+ // Registrace tools
90
+ registerCreateTicket(server, api);
91
+ registerListTickets(server, api);
92
+ registerGetTicket(server, api);
93
+ registerUpdateTicket(server, api);
94
+ registerAddComment(server, api);
95
+ registerUpdateImplementationItem(server, api);
96
+ registerSearchTickets(server, api);
97
+ registerTriageList(server, api);
98
+ registerTriageAccept(server, api);
99
+ registerTriageReject(server, api);
100
+ registerListLabels(server, api);
101
+ registerAddLabel(server, api);
102
+ registerRemoveLabel(server, api);
103
+ registerListCycles(server, api);
104
+ registerAssignCycle(server, api);
105
+ registerListEpics(server, api);
106
+ registerAssignEpic(server, api);
107
+ registerPollDevQueue(server, api);
108
+ registerCompleteDevTask(server, api);
109
+ registerWhoami(server, api);
110
+ registerAddRelation(server, api);
111
+ registerRemoveRelation(server, api);
112
+ // Phase 2 — Skupina A: Workflow & Status Management
113
+ registerListStatuses(server, api);
114
+ registerListTransitions(server, api);
115
+ registerCreateStatus(server, api);
116
+ registerDeleteStatus(server, api);
117
+ registerApplyPreset(server, api);
118
+ // Phase 2 — Skupina B: Project Management
119
+ registerListProjects(server, api);
120
+ registerGetProject(server, api);
121
+ registerCreateProject(server, api);
122
+ // Phase 2 — Skupina C: Ticket Operations
123
+ registerDeleteTicket(server, api);
124
+ registerGetBoard(server, api);
125
+ registerGetMyTasks(server, api);
126
+ registerListComments(server, api);
127
+ // Phase 2 — Skupina D: Attachments
128
+ registerListAttachments(server, api);
129
+ registerDeleteAttachment(server, api);
130
+ // Phase 2 — Skupina E: Cycles & Epics CRUD
131
+ registerCreateCycle(server, api);
132
+ registerCreateEpic(server, api);
133
+ // Phase 2 — Skupina F: Implementation Items
134
+ registerCreateImplementationItem(server, api);
135
+ registerDeleteImplementationItem(server, api);
136
+ // Phase 3 — Skupina A: Workflow & Status
137
+ registerUpdateTransitions(server, api);
138
+ registerUpdateStatus(server, api);
139
+ registerListWorkflowPresets(server, api);
140
+ registerGetNextStatuses(server, api);
141
+ // Phase 3 — Skupina B: Comments & Activity
142
+ registerUpdateComment(server, api);
143
+ registerDeleteComment(server, api);
144
+ // Phase 3 — Skupina C: Relations
145
+ registerListRelations(server, api);
146
+ // Phase 3 — Skupina D: Dev Queue
147
+ registerFailDevTask(server, api);
148
+ registerListDevAssignments(server, api);
149
+ // Phase 3 — Skupina E: Labels CRUD
150
+ registerCreateLabel(server, api);
151
+ registerUpdateLabel(server, api);
152
+ registerDeleteLabel(server, api);
153
+ // Phase 3 — Skupina F: Cycles/Epics extras
154
+ registerUpdateCycle(server, api);
155
+ registerDeleteCycle(server, api);
156
+ registerUpdateEpic(server, api);
157
+ registerDeleteEpic(server, api);
158
+ // ADR-0026 Phase 2f: Project Members
159
+ registerListProjectMembers(server, api);
160
+ registerAddProjectMember(server, api);
161
+ registerUpdateProjectMemberRole(server, api);
162
+ registerRemoveProjectMember(server, api);
163
+ // Registrace resources
164
+ registerTicketResource(server, api);
165
+ registerProjectResource(server, api);
166
+ // Spuštění na stdio transportu
167
+ const transport = new StdioServerTransport();
168
+ await server.connect(transport);
169
+ }
170
+ startServer().catch((err) => {
171
+ console.error("MCP server failed to start:", err);
172
+ process.exit(1);
173
+ });
174
+ //# sourceMappingURL=server.js.map
package/package.json CHANGED
@@ -1,16 +1,18 @@
1
1
  {
2
2
  "name": "@k-system/tickr-mcp",
3
- "version": "0.3.0",
4
- "description": "MCP server for Tickr project management — 40 tools for ticket CRUD, workflow, projects, attachments, triage, labels, cycles, epics",
3
+ "version": "0.4.0",
4
+ "description": "MCP server for Tickr project management — 56 tools + setup CLI wizard",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "bin": {
8
8
  "tickr-mcp": "./dist/index.js",
9
- "k-system-tickr-mcp": "./dist/index.js"
9
+ "k-system-tickr-mcp": "./dist/index.js",
10
+ "tickr-setup": "./dist/cli/setup.js"
10
11
  },
11
12
  "files": [
12
13
  "dist/**/*.js",
13
14
  "dist/**/*.d.ts",
15
+ "dist/cli/**/*",
14
16
  "README.md",
15
17
  "CHANGELOG.md",
16
18
  "LICENSE"
@@ -43,6 +45,7 @@
43
45
  "prepublishOnly": "npm run test && npm run build"
44
46
  },
45
47
  "dependencies": {
48
+ "@inquirer/prompts": "^7.5.0",
46
49
  "@modelcontextprotocol/sdk": "^1.12.1",
47
50
  "zod": "^3.24.4"
48
51
  },