tracerkit 1.17.1 → 1.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/bin.js +1 -1
- package/dist/index.js +1 -1
- package/dist/{uninstall-Ba_zfPOx.js → uninstall-CNw_7khV.js} +107 -132
- package/package.json +1 -1
- package/skills/brief/SKILL.md +1 -1
- package/skills/check/SKILL.md +1 -1
- package/skills/plan/SKILL.md +2 -2
- package/skills/prd/SKILL.md +2 -2
package/README.md
CHANGED
|
@@ -98,7 +98,6 @@ Same skills, same workflow. Storage is configured per-project:
|
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
tracerkit config storage github # set current project to use GitHub
|
|
101
|
-
tracerkit config github.repo org/repo # set target repo
|
|
102
101
|
```
|
|
103
102
|
|
|
104
103
|
PRDs and plans become GitHub Issues with `tk:prd` and `tk:plan` labels. On `/tk:check` pass, issues are closed with `completed` reason and any related PRs are linked automatically. Each project can use a different backend; local is the default. See [Configuration](docs/configuration.md) for details.
|
package/dist/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as e, f as t, i as n, l as r, n as i, o as a, p as o, r as s, s as c, t as l, u } from "./uninstall-
|
|
2
|
+
import { a as e, f as t, i as n, l as r, n as i, o as a, p as o, r as s, s as c, t as l, u } from "./uninstall-CNw_7khV.js";
|
|
3
3
|
import { existsSync as d, readFileSync as f, statSync as p } from "node:fs";
|
|
4
4
|
import { dirname as m, join as h, resolve as g } from "node:path";
|
|
5
5
|
import { fileURLToPath as _ } from "node:url";
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { c as e, i as t, n, o as r, r as i, t as a, u as o } from "./uninstall-
|
|
1
|
+
import { c as e, i as t, n, o as r, r as i, t as a, u as o } from "./uninstall-CNw_7khV.js";
|
|
2
2
|
export { r as COMMANDS, e as DEPRECATED_SKILLS, o as SKILL_NAMES, i as init, n as migrateStorage, a as uninstall, t as update };
|
|
@@ -25,32 +25,29 @@ function _(t) {
|
|
|
25
25
|
throw Error("Invalid .tracerkit/config.json — expected valid JSON");
|
|
26
26
|
}
|
|
27
27
|
return {
|
|
28
|
-
storage:
|
|
29
|
-
paths:
|
|
30
|
-
github:
|
|
28
|
+
storage: ee(i.storage),
|
|
29
|
+
paths: v(i.paths),
|
|
30
|
+
github: y(i.github)
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
function
|
|
33
|
+
function ee(e) {
|
|
34
34
|
return typeof e == "string" && m.includes(e) ? e : f;
|
|
35
35
|
}
|
|
36
|
-
function
|
|
37
|
-
let t =
|
|
36
|
+
function v(e) {
|
|
37
|
+
let t = S(e) ? e : {};
|
|
38
38
|
return {
|
|
39
39
|
prds: typeof t.prds == "string" ? t.prds : h.prds,
|
|
40
40
|
plans: typeof t.plans == "string" ? t.plans : h.plans
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
function
|
|
44
|
-
let t =
|
|
45
|
-
return {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
plan: typeof n.plan == "string" ? n.plan : g.labels.plan
|
|
50
|
-
}
|
|
51
|
-
};
|
|
43
|
+
function y(e) {
|
|
44
|
+
let t = S(e) ? e : {}, n = S(t.labels) ? t.labels : {};
|
|
45
|
+
return { labels: {
|
|
46
|
+
prd: typeof n.prd == "string" ? n.prd : g.labels.prd,
|
|
47
|
+
plan: typeof n.plan == "string" ? n.plan : g.labels.plan
|
|
48
|
+
} };
|
|
52
49
|
}
|
|
53
|
-
function
|
|
50
|
+
function b(r, i) {
|
|
54
51
|
let o = c(r, ".tracerkit", "config.json");
|
|
55
52
|
t(s(o), { recursive: !0 });
|
|
56
53
|
let l = {};
|
|
@@ -59,31 +56,31 @@ function x(r, i) {
|
|
|
59
56
|
} catch {
|
|
60
57
|
l = {};
|
|
61
58
|
}
|
|
62
|
-
let u =
|
|
59
|
+
let u = x(l, i);
|
|
63
60
|
a(o, JSON.stringify(u, null, 2) + "\n");
|
|
64
61
|
}
|
|
65
|
-
function
|
|
62
|
+
function x(e, t) {
|
|
66
63
|
let n = { ...e };
|
|
67
|
-
for (let e of Object.keys(t))
|
|
64
|
+
for (let e of Object.keys(t)) S(n[e]) && S(t[e]) ? n[e] = x(n[e], t[e]) : n[e] = t[e];
|
|
68
65
|
return n;
|
|
69
66
|
}
|
|
70
|
-
function
|
|
67
|
+
function S(e) {
|
|
71
68
|
return typeof e == "object" && !!e && !Array.isArray(e);
|
|
72
69
|
}
|
|
73
|
-
var
|
|
70
|
+
var C = [
|
|
74
71
|
"tk:brief",
|
|
75
72
|
"tk:prd",
|
|
76
73
|
"tk:plan",
|
|
77
74
|
"tk:check"
|
|
78
|
-
],
|
|
75
|
+
], w = ["tk:verify"], T = {
|
|
79
76
|
force: "--force",
|
|
80
77
|
help: "--help",
|
|
81
78
|
version: "--version"
|
|
82
|
-
},
|
|
79
|
+
}, E = [
|
|
83
80
|
"brief",
|
|
84
81
|
"progress",
|
|
85
82
|
"archive"
|
|
86
|
-
],
|
|
83
|
+
], D = [
|
|
87
84
|
{
|
|
88
85
|
name: "init",
|
|
89
86
|
args: "[path]",
|
|
@@ -109,44 +106,44 @@ var w = [
|
|
|
109
106
|
args: "[path]",
|
|
110
107
|
desc: "Migrate artifacts between local and GitHub storage backends"
|
|
111
108
|
}
|
|
112
|
-
],
|
|
113
|
-
function
|
|
109
|
+
], O = c(s(u(import.meta.url)), "..", "skills");
|
|
110
|
+
function k(e, t = "") {
|
|
114
111
|
let n = r(e, { withFileTypes: !0 }), i = [];
|
|
115
112
|
for (let r of n) {
|
|
116
113
|
let n = t ? `${t}/${r.name}` : r.name;
|
|
117
|
-
r.isDirectory() ? i.push(...
|
|
114
|
+
r.isDirectory() ? i.push(...k(c(e, r.name), n)) : i.push(n);
|
|
118
115
|
}
|
|
119
116
|
return i.sort();
|
|
120
117
|
}
|
|
121
|
-
function
|
|
118
|
+
function A(e) {
|
|
122
119
|
return `.claude/skills/tk:${e}`;
|
|
123
120
|
}
|
|
124
|
-
function
|
|
121
|
+
function j(e) {
|
|
125
122
|
return e.slice(18);
|
|
126
123
|
}
|
|
127
|
-
function
|
|
124
|
+
function M(e, t) {
|
|
128
125
|
let n = e;
|
|
129
|
-
return t.paths.prds !== h.prds && (n = n.replaceAll(h.prds, t.paths.prds)), t.paths.plans !== h.plans && (n = n.replaceAll(h.plans, t.paths.plans)), t.github?.
|
|
126
|
+
return t.paths.prds !== h.prds && (n = n.replaceAll(h.prds, t.paths.prds)), t.paths.plans !== h.plans && (n = n.replaceAll(h.plans, t.paths.plans)), t.github?.labels?.prd && (n = n.replaceAll("{{github.labels.prd}}", t.github.labels.prd)), t.github?.labels?.plan && (n = n.replaceAll("{{github.labels.plan}}", t.github.labels.plan)), n;
|
|
130
127
|
}
|
|
131
|
-
function
|
|
132
|
-
let o = i ??
|
|
128
|
+
function N(e, r, i) {
|
|
129
|
+
let o = i ?? k(O).map(A);
|
|
133
130
|
for (let i of o) {
|
|
134
|
-
let o = c(
|
|
135
|
-
t(s(l), { recursive: !0 }), a(l,
|
|
131
|
+
let o = c(O, j(i)), l = c(e, i);
|
|
132
|
+
t(s(l), { recursive: !0 }), a(l, M(n(o, "utf8"), r));
|
|
136
133
|
}
|
|
137
134
|
return { copied: o };
|
|
138
135
|
}
|
|
139
|
-
function
|
|
136
|
+
function P(e) {
|
|
140
137
|
return l("sha256").update(e).digest("hex");
|
|
141
138
|
}
|
|
142
|
-
function
|
|
143
|
-
let i =
|
|
139
|
+
function F(t, r) {
|
|
140
|
+
let i = k(O).map(A), a = [], o = [], s = [];
|
|
144
141
|
for (let l of i) {
|
|
145
142
|
let i = c(t, l);
|
|
146
143
|
if (!e(i)) s.push(l);
|
|
147
144
|
else {
|
|
148
|
-
let e =
|
|
149
|
-
|
|
145
|
+
let e = M(n(c(O, j(l)), "utf8"), r);
|
|
146
|
+
P(Buffer.from(e)) === P(n(i)) ? a.push(l) : o.push(l);
|
|
150
147
|
}
|
|
151
148
|
}
|
|
152
149
|
return {
|
|
@@ -157,10 +154,10 @@ function I(t, r) {
|
|
|
157
154
|
}
|
|
158
155
|
//#endregion
|
|
159
156
|
//#region src/commands/update.ts
|
|
160
|
-
function
|
|
161
|
-
if (!
|
|
162
|
-
let r = _(t), { unchanged: a, modified: o, missing: s } =
|
|
163
|
-
for (let n of
|
|
157
|
+
function I(t, n) {
|
|
158
|
+
if (!C.some((n) => e(c(t, ".claude", "skills", n)))) throw Error("TracerKit not initialized — run `tracerkit init` first");
|
|
159
|
+
let r = _(t), { unchanged: a, modified: o, missing: s } = F(t, r), l = [];
|
|
160
|
+
for (let n of w) {
|
|
164
161
|
let r = c(t, ".claude", "skills", n);
|
|
165
162
|
e(r) && (i(r, {
|
|
166
163
|
recursive: !0,
|
|
@@ -173,7 +170,7 @@ function L(t, n) {
|
|
|
173
170
|
...u ? o : []
|
|
174
171
|
];
|
|
175
172
|
if (d.length > 0) {
|
|
176
|
-
|
|
173
|
+
N(t, r, d);
|
|
177
174
|
for (let e of a) l.push(`✓ ${e}`);
|
|
178
175
|
for (let e of s) l.push(`✓ ${e} (added)`);
|
|
179
176
|
if (u) for (let e of o) l.push(`✓ ${e} (replaced)`);
|
|
@@ -186,14 +183,14 @@ function L(t, n) {
|
|
|
186
183
|
}
|
|
187
184
|
//#endregion
|
|
188
185
|
//#region src/commands/init.ts
|
|
189
|
-
function
|
|
190
|
-
if (
|
|
191
|
-
let { copied: n } =
|
|
186
|
+
function te(t) {
|
|
187
|
+
if (C.some((n) => e(c(t, ".claude", "skills", n)))) return I(t, { force: !1 });
|
|
188
|
+
let { copied: n } = N(t, _(t));
|
|
192
189
|
return n.map((e) => `✓ ${e}`);
|
|
193
190
|
}
|
|
194
191
|
//#endregion
|
|
195
192
|
//#region src/commands/migrate-storage.ts
|
|
196
|
-
var
|
|
193
|
+
var L = {
|
|
197
194
|
created: "tk:created",
|
|
198
195
|
in_progress: "tk:in-progress",
|
|
199
196
|
done: "tk:done"
|
|
@@ -225,7 +222,7 @@ function B(e) {
|
|
|
225
222
|
return t.length === 0 ? "<!-- tk:metadata\n-->" : `<!-- tk:metadata\n${t.map(([e, t]) => `${e}: ${t}`).join("\n")}\n-->`;
|
|
226
223
|
}
|
|
227
224
|
function V(e) {
|
|
228
|
-
return
|
|
225
|
+
return L[e] ?? "tk:created";
|
|
229
226
|
}
|
|
230
227
|
function H(e) {
|
|
231
228
|
let t = e.match(/<!--\s*tk:metadata\n([\s\S]*?)-->\n*([\s\S]*)$/);
|
|
@@ -288,7 +285,7 @@ function q(e) {
|
|
|
288
285
|
let t = e;
|
|
289
286
|
if (t.code === "ENOENT") return /* @__PURE__ */ Error("gh CLI not found — install it: https://cli.github.com");
|
|
290
287
|
let n = (t.stderr ?? t.message ?? "").toLowerCase();
|
|
291
|
-
return n.includes("not logged in") || n.includes("authentication") ? /* @__PURE__ */ Error("Not authenticated with GitHub. Run: gh auth login") : n.includes("rate limit") || n.includes("403") ? /* @__PURE__ */ Error("GitHub rate limit exceeded. Wait and retry.") : n.includes("not found") || n.includes("404") ? /* @__PURE__ */ Error("Repository not found. Check
|
|
288
|
+
return n.includes("not logged in") || n.includes("authentication") ? /* @__PURE__ */ Error("Not authenticated with GitHub. Run: gh auth login") : n.includes("rate limit") || n.includes("403") ? /* @__PURE__ */ Error("GitHub rate limit exceeded. Wait and retry.") : n.includes("not found") || n.includes("404") ? /* @__PURE__ */ Error("Repository not found. Check your git remote configuration.") : e instanceof Error ? e : Error(String(e));
|
|
292
289
|
}
|
|
293
290
|
function J(e) {
|
|
294
291
|
try {
|
|
@@ -305,23 +302,11 @@ function J(e) {
|
|
|
305
302
|
}
|
|
306
303
|
}
|
|
307
304
|
function Y(e, t) {
|
|
308
|
-
|
|
309
|
-
"repo",
|
|
310
|
-
"view",
|
|
311
|
-
"--json",
|
|
312
|
-
"nameWithOwner",
|
|
313
|
-
"-q",
|
|
314
|
-
".nameWithOwner"
|
|
315
|
-
]);
|
|
316
|
-
}
|
|
317
|
-
function X(e, t, n) {
|
|
318
|
-
let r = n([
|
|
305
|
+
let n = t([
|
|
319
306
|
"issue",
|
|
320
307
|
"list",
|
|
321
|
-
"--repo",
|
|
322
|
-
e,
|
|
323
308
|
"--label",
|
|
324
|
-
|
|
309
|
+
e,
|
|
325
310
|
"--state",
|
|
326
311
|
"all",
|
|
327
312
|
"--json",
|
|
@@ -329,9 +314,9 @@ function X(e, t, n) {
|
|
|
329
314
|
"--limit",
|
|
330
315
|
"1000"
|
|
331
316
|
]);
|
|
332
|
-
return JSON.parse(
|
|
317
|
+
return JSON.parse(n || "[]");
|
|
333
318
|
}
|
|
334
|
-
function
|
|
319
|
+
function X(e, t) {
|
|
335
320
|
return t.some((t) => {
|
|
336
321
|
if (t.body) {
|
|
337
322
|
let { metadata: n } = H(t.body);
|
|
@@ -340,48 +325,40 @@ function Z(e, t) {
|
|
|
340
325
|
return W(t.title) === e;
|
|
341
326
|
});
|
|
342
327
|
}
|
|
343
|
-
function
|
|
344
|
-
for (let
|
|
328
|
+
function Z(e, t) {
|
|
329
|
+
for (let n of e) t([
|
|
345
330
|
"label",
|
|
346
331
|
"create",
|
|
347
|
-
|
|
348
|
-
"--repo",
|
|
349
|
-
e,
|
|
332
|
+
n,
|
|
350
333
|
"--force"
|
|
351
334
|
]);
|
|
352
335
|
}
|
|
353
|
-
function
|
|
354
|
-
let
|
|
336
|
+
function ne(e, t) {
|
|
337
|
+
let n = [
|
|
355
338
|
"issue",
|
|
356
339
|
"create",
|
|
357
|
-
"--repo",
|
|
358
|
-
e,
|
|
359
340
|
"--title",
|
|
360
|
-
|
|
341
|
+
e.title,
|
|
361
342
|
"--body",
|
|
362
|
-
|
|
343
|
+
e.body
|
|
363
344
|
];
|
|
364
|
-
for (let
|
|
365
|
-
let
|
|
366
|
-
return
|
|
345
|
+
for (let t of e.labels) n.push("--label", t);
|
|
346
|
+
let r = t(n).match(/\/(\d+)\s*$/);
|
|
347
|
+
return r ? parseInt(r[1], 10) : 0;
|
|
367
348
|
}
|
|
368
|
-
function
|
|
369
|
-
|
|
349
|
+
function re(e, t) {
|
|
350
|
+
t([
|
|
370
351
|
"issue",
|
|
371
352
|
"close",
|
|
372
|
-
String(
|
|
373
|
-
"--repo",
|
|
374
|
-
e
|
|
353
|
+
String(e)
|
|
375
354
|
]);
|
|
376
355
|
}
|
|
377
|
-
function
|
|
378
|
-
let
|
|
356
|
+
function ie(e, t) {
|
|
357
|
+
let n = t([
|
|
379
358
|
"pr",
|
|
380
359
|
"list",
|
|
381
|
-
"--repo",
|
|
382
|
-
e,
|
|
383
360
|
"--search",
|
|
384
|
-
|
|
361
|
+
e,
|
|
385
362
|
"--state",
|
|
386
363
|
"merged",
|
|
387
364
|
"--json",
|
|
@@ -389,20 +366,18 @@ function ae(e, t, n) {
|
|
|
389
366
|
"--limit",
|
|
390
367
|
"5"
|
|
391
368
|
]);
|
|
392
|
-
return JSON.parse(
|
|
369
|
+
return JSON.parse(n || "[]");
|
|
393
370
|
}
|
|
394
|
-
function
|
|
395
|
-
|
|
371
|
+
function ae(e, t, n) {
|
|
372
|
+
n([
|
|
396
373
|
"issue",
|
|
397
374
|
"comment",
|
|
398
|
-
String(
|
|
399
|
-
"--repo",
|
|
400
|
-
e,
|
|
375
|
+
String(e),
|
|
401
376
|
"--body",
|
|
402
|
-
|
|
377
|
+
t
|
|
403
378
|
]);
|
|
404
379
|
}
|
|
405
|
-
function
|
|
380
|
+
function oe(e) {
|
|
406
381
|
for (let t of e) {
|
|
407
382
|
let e = R[t];
|
|
408
383
|
if (e) return e;
|
|
@@ -412,52 +387,52 @@ function se(e) {
|
|
|
412
387
|
function Q(e, n) {
|
|
413
388
|
t(s(e), { recursive: !0 }), a(e, n);
|
|
414
389
|
}
|
|
415
|
-
function
|
|
390
|
+
function $(e, t) {
|
|
416
391
|
let n = t?.runGh ?? J, r = _(e);
|
|
417
|
-
return r.storage === "local" ?
|
|
418
|
-
}
|
|
419
|
-
function
|
|
420
|
-
let r = [], i =
|
|
421
|
-
if (
|
|
422
|
-
let
|
|
423
|
-
|
|
392
|
+
return r.storage === "local" ? se(e, r, n) : le(e, r, n);
|
|
393
|
+
}
|
|
394
|
+
function se(e, t, n) {
|
|
395
|
+
let r = [], i = K(e, t);
|
|
396
|
+
if (i.length === 0) return b(e, { storage: p }), r.push("No artifacts found — nothing to migrate."), r.push(`✓ Storage switched to "${p}".`), r;
|
|
397
|
+
let a = t.github.labels?.prd ?? "tk:prd", o = t.github.labels?.plan ?? "tk:plan";
|
|
398
|
+
Z([
|
|
399
|
+
a,
|
|
424
400
|
o,
|
|
425
|
-
|
|
426
|
-
...[...new Set(a.map((e) => V(e.metadata.status ?? "created")))]
|
|
401
|
+
...[...new Set(i.map((e) => V(e.metadata.status ?? "created")))]
|
|
427
402
|
], n);
|
|
428
|
-
let
|
|
429
|
-
for (let e of
|
|
430
|
-
let t = e.type === "prd" ?
|
|
431
|
-
if (
|
|
403
|
+
let s = Y(a, n), c = Y(o, n);
|
|
404
|
+
for (let e of i) {
|
|
405
|
+
let t = e.type === "prd" ? a : o, i = e.type === "prd" ? s : c;
|
|
406
|
+
if (X(e.slug, i)) {
|
|
432
407
|
r.push(`⚠ skip ${e.type} "${e.slug}" — already exists on GitHub`);
|
|
433
408
|
continue;
|
|
434
409
|
}
|
|
435
|
-
let
|
|
410
|
+
let l = e.metadata.status ?? "created", u = V(l), d = `${B(e.metadata)}\n\n${e.body.replace(/^\n/, "")}`, f = ne({
|
|
436
411
|
title: `[${t}] ${e.slug}: ${e.title}`,
|
|
437
|
-
body:
|
|
438
|
-
labels: [t,
|
|
412
|
+
body: d,
|
|
413
|
+
labels: [t, u]
|
|
439
414
|
}, n);
|
|
440
|
-
|
|
415
|
+
l === "done" ? (re(f, n), ce(e.slug, f, n), r.push(`✓ ${e.type} "${e.slug}" → issue #${f} (closed)`)) : r.push(`✓ ${e.type} "${e.slug}" → issue #${f}`);
|
|
441
416
|
}
|
|
442
|
-
return
|
|
417
|
+
return b(e, { storage: p }), r.push(`✓ Storage switched to "${p}".`), r;
|
|
443
418
|
}
|
|
444
|
-
function
|
|
445
|
-
let
|
|
446
|
-
|
|
419
|
+
function ce(e, t, n) {
|
|
420
|
+
let r = ie(e, n);
|
|
421
|
+
r.length !== 0 && ae(t, `Linked PR: ${r.map((e) => `#${e.number}`).join(", ")}`, n);
|
|
447
422
|
}
|
|
448
|
-
function
|
|
449
|
-
let i = [], a =
|
|
423
|
+
function le(t, n, r) {
|
|
424
|
+
let i = [], a = n.github.labels?.prd ?? "tk:prd", o = n.github.labels?.plan ?? "tk:plan", s = Y(a, r), l = Y(o, r), u = [...s.map((e) => ({
|
|
450
425
|
...e,
|
|
451
426
|
type: "prd"
|
|
452
|
-
})), ...
|
|
427
|
+
})), ...l.map((e) => ({
|
|
453
428
|
...e,
|
|
454
429
|
type: "plan"
|
|
455
430
|
}))];
|
|
456
|
-
if (
|
|
457
|
-
for (let r of
|
|
431
|
+
if (u.length === 0) return b(t, { storage: f }), i.push("No GitHub issues found — nothing to migrate."), i.push(`✓ Storage switched to "${f}".`), i;
|
|
432
|
+
for (let r of u) {
|
|
458
433
|
let { metadata: a, body: o } = H(r.body ?? ""), s = a.slug ?? W(r.title);
|
|
459
434
|
if (!s) continue;
|
|
460
|
-
let l = r.labels.map((e) => e.name), u = a.status ??
|
|
435
|
+
let l = r.labels.map((e) => e.name), u = a.status ?? oe(l), d = c(t, r.type === "prd" ? n.paths.prds : n.paths.plans, `${s}.md`);
|
|
461
436
|
if (e(d)) {
|
|
462
437
|
i.push(`⚠ skip ${r.type} "${s}" — local file already exists`);
|
|
463
438
|
continue;
|
|
@@ -472,14 +447,14 @@ function ue(t, n, r) {
|
|
|
472
447
|
}
|
|
473
448
|
i.push(`✓ ${r.type} "${s}" → ${d}`);
|
|
474
449
|
}
|
|
475
|
-
return
|
|
450
|
+
return b(t, { storage: f }), i.push(`✓ Storage switched to "${f}".`), i;
|
|
476
451
|
}
|
|
477
452
|
//#endregion
|
|
478
453
|
//#region src/commands/uninstall.ts
|
|
479
|
-
function
|
|
480
|
-
if (!
|
|
454
|
+
function ue(t) {
|
|
455
|
+
if (!C.some((n) => e(c(t, ".claude", "skills", n)))) throw Error("TracerKit not initialized — nothing to uninstall");
|
|
481
456
|
let n = [];
|
|
482
|
-
for (let r of
|
|
457
|
+
for (let r of C) {
|
|
483
458
|
let a = c(t, ".claude", "skills", r);
|
|
484
459
|
e(a) && (i(a, {
|
|
485
460
|
recursive: !0,
|
|
@@ -489,4 +464,4 @@ function de(t) {
|
|
|
489
464
|
return n;
|
|
490
465
|
}
|
|
491
466
|
//#endregion
|
|
492
|
-
export {
|
|
467
|
+
export { N as a, w as c, f as d, _ as f, I as i, T as l, $ as n, D as o, b as p, te as r, E as s, ue as t, C as u };
|
package/package.json
CHANGED
package/skills/brief/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: Session briefing — shows active features, progress, and suggested focus. Use at the start of a session to orient.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
5
|
+
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
6
6
|
|
|
7
7
|
# Session Briefing
|
|
8
8
|
|
package/skills/check/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ description: Verify implementation against plan. Shows progress, finds blockers,
|
|
|
3
3
|
argument-hint: '[slug]'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
6
|
+
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
7
7
|
|
|
8
8
|
# Check Implementation
|
|
9
9
|
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ description: Turn a PRD into a multi-phase implementation plan using tracer-bull
|
|
|
3
3
|
argument-hint: '[slug]'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
6
|
+
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
7
7
|
|
|
8
8
|
# PRD to Plan
|
|
9
9
|
|
|
@@ -149,7 +149,7 @@ Then update PRD frontmatter: add `plan: .tracerkit/plans/<slug>.md` field.
|
|
|
149
149
|
<!-- end:local -->
|
|
150
150
|
<!-- if:github -->
|
|
151
151
|
|
|
152
|
-
Ensure labels exist: `gh label create {{github.labels.plan}} --
|
|
152
|
+
Ensure labels exist: `gh label create {{github.labels.plan}} --force`, `gh label create tk:in-progress --force`.
|
|
153
153
|
|
|
154
154
|
Create GitHub Issue — title: `[{{github.labels.plan}}] <slug>: Plan: <Feature Title>`, labels: `{{github.labels.plan}}`, `tk:in-progress`.
|
|
155
155
|
|
package/skills/prd/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ description: Create a PRD through user interview, codebase exploration, and modu
|
|
|
3
3
|
argument-hint: <idea>
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
6
|
+
**Config**: read `.tracerkit/config.json` (default: `local`). Follow matching `<!-- if:local/github -->` blocks.
|
|
7
7
|
|
|
8
8
|
# PRD Writing
|
|
9
9
|
|
|
@@ -101,7 +101,7 @@ status: created
|
|
|
101
101
|
<!-- end:local -->
|
|
102
102
|
<!-- if:github -->
|
|
103
103
|
|
|
104
|
-
Ensure labels exist: `gh label create {{github.labels.prd}} --
|
|
104
|
+
Ensure labels exist: `gh label create {{github.labels.prd}} --force`, `gh label create tk:created --force`.
|
|
105
105
|
|
|
106
106
|
Create GitHub Issue — title: `[{{github.labels.prd}}] <slug>: <Feature Title>`, labels: `{{github.labels.prd}}`, `tk:created`.
|
|
107
107
|
|