skillwatch 0.1.4 → 0.1.6

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 CHANGED
@@ -1,34 +1,14 @@
1
1
  # skillwatch
2
2
 
3
- Daily macOS notifications when your installed agent skills have updates on GitHub.
4
-
5
- ## Install
3
+ Notifies you when installed agent skills have updates.
6
4
 
7
5
  ```bash
8
6
  npx skillwatch install
9
- ```
10
-
11
- Runs daily at 09:00. Customise with `--hour 14 --minute 30`.
12
-
13
- For frequent use, install globally with `npm install -g skillwatch`.
14
-
15
- ## Verify
16
-
17
- ```bash
18
7
  npx skillwatch check-now
19
8
  ```
20
9
 
21
- ## Uninstall
22
-
23
- ```bash
24
- npx skillwatch uninstall
25
- ```
26
-
27
- ## Troubleshooting
28
-
29
- - **"No skill lock file found"** — run `npx skills` first so the lock file exists.
30
- - **Node path changed** — rerun `npx skillwatch install` to update the LaunchAgent.
10
+ Checks daily at 9:00 am. Change the time with `--hour` and `--minute`.
31
11
 
32
- ## License
12
+ Uninstall with `npx skillwatch uninstall`.
33
13
 
34
14
  [MIT](LICENSE.md)
package/dist/checker.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as R, c as be, l as __toESM, n as Gt, r as Me, s as Wt, t as require_picocolors } from "./picocolors-Bwp1GCOv.js";
2
+ import { a as R, c as Wt, d as __toESM, i as Nt, l as be, n as Gt, o as Rt, r as Me, t as require_picocolors, u as Ct } from "./picocolors-hRUfkPbe.js";
3
3
  import { execFileSync } from "node:child_process";
4
4
  import { createHash } from "node:crypto";
5
5
  import { existsSync } from "node:fs";
@@ -177,6 +177,32 @@ const findUpdates = async () => {
177
177
  updates
178
178
  };
179
179
  };
180
+ const promptAndUpdate = async (signature, grouped) => {
181
+ const shouldUpdate = await Rt({ message: "Update skills now?" });
182
+ if (Ct(shouldUpdate)) {
183
+ Nt("Cancelled");
184
+ await writeState(signature, grouped);
185
+ process.exitCode = 0;
186
+ return;
187
+ }
188
+ if (shouldUpdate) {
189
+ const updateSpinner = be();
190
+ updateSpinner.start("Updating skills...");
191
+ try {
192
+ execFileSync("npx", ["skills", "update"], { stdio: "pipe" });
193
+ updateSpinner.stop("Skills updated successfully");
194
+ } catch {
195
+ updateSpinner.stop("Update failed");
196
+ R.error(`Run manually: ${import_picocolors.default.bold("npx skills update")}`);
197
+ }
198
+ await writeState(null);
199
+ Gt("Done");
200
+ return;
201
+ }
202
+ sendNotification("Skill updates available", buildNotificationBody(grouped));
203
+ await writeState(signature, grouped);
204
+ Gt("Done");
205
+ };
180
206
  const main = async () => {
181
207
  const tty = Me(process.stdout);
182
208
  if (tty) Wt(import_picocolors.default.bold("skillwatch"));
@@ -206,22 +232,22 @@ const main = async () => {
206
232
  return;
207
233
  }
208
234
  for (const repo of grouped) info(`Update available: ${import_picocolors.default.bold(repo.repoId)} ${import_picocolors.default.dim("->")} ${repo.skillNames.join(", ")}`);
209
- const state = await readJson(STATE_PATH, {});
210
235
  const signature = buildSignature(grouped);
211
- if (state.lastNotifiedSignature === signature) {
212
- info("Updates already notified. Skipping duplicate notification.");
236
+ if (tty) {
237
+ await promptAndUpdate(signature, grouped);
238
+ return;
239
+ }
240
+ if ((await readJson(STATE_PATH, {})).lastNotifiedSignature === signature) {
241
+ log("Updates already notified. Skipping duplicate notification.");
213
242
  await writeState(signature, grouped);
214
- if (tty) Gt("Done");
215
243
  process.exitCode = 0;
216
244
  return;
217
245
  }
218
- const title = "Skill updates available";
219
246
  const body = buildNotificationBody(grouped);
220
- sendNotification(title, body);
221
- success(`Notification sent: ${body}`);
222
- info(`To update, run: ${import_picocolors.default.bold("npx skills update")}`);
247
+ sendNotification("Skill updates available", body);
248
+ log(`Notification sent: ${body}`);
249
+ log("To update installed skills, run: npx skills update");
223
250
  await writeState(signature, grouped);
224
- if (tty) Gt("Done");
225
251
  };
226
252
  const isExecutedDirectly = () => {
227
253
  const [, entryArg] = process.argv;
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as Nt, l as __toESM, n as Gt, o as Vt, s as Wt, t as require_picocolors } from "./picocolors-Bwp1GCOv.js";
2
+ import { c as Wt, d as __toESM, i as Nt, n as Gt, s as Vt, t as require_picocolors } from "./picocolors-hRUfkPbe.js";
3
3
  import { execFileSync } from "node:child_process";
4
4
  import { existsSync, realpathSync } from "node:fs";
5
5
  import { copyFile, mkdir, readdir, rm, writeFile } from "node:fs/promises";
@@ -9,7 +9,7 @@ import { fileURLToPath } from "node:url";
9
9
  //#region src/cli.ts
10
10
  var import_picocolors = /* @__PURE__ */ __toESM(require_picocolors(), 1);
11
11
  const PACKAGE_NAME = "skillwatch";
12
- const PACKAGE_VERSION = "0.1.4";
12
+ const PACKAGE_VERSION = "0.1.6";
13
13
  const ENTRYPOINT_PATH = fileURLToPath(import.meta.url);
14
14
  const PACKAGE_DIR = dirname(ENTRYPOINT_PATH);
15
15
  const CHECKER_SOURCE_PATH = join(PACKAGE_DIR, "checker.js");
@@ -4,7 +4,7 @@ import "node:path";
4
4
  import { stripVTControlCharacters, styleText } from "node:util";
5
5
  import N, { stdin, stdout } from "node:process";
6
6
  import * as k from "node:readline";
7
- import "node:readline";
7
+ import ot from "node:readline";
8
8
  import { ReadStream } from "node:tty";
9
9
  //#region \0rolldown/runtime.js
10
10
  var __create = Object.create;
@@ -156,8 +156,87 @@ const at = (t) => t === 161 || t === 164 || t === 167 || t === 168 || t === 170
156
156
  truncated: F,
157
157
  ellipsed: F && i >= n
158
158
  };
159
+ }, pt$1 = {
160
+ limit: Infinity,
161
+ ellipsis: "",
162
+ ellipsisWidth: 0
163
+ }, S = (t, e = {}) => X$1(t, pt$1, e).width, T = "\x1B", Z = "›", Ft$1 = 39, j = "\x07", Q$1 = "[", dt = "]", tt = "m", U$1 = `${dt}8;;`, et = new RegExp(`(?:\\${Q$1}(?<code>\\d+)m|\\${U$1}(?<uri>.*)${j})`, "y"), mt$1 = (t) => {
164
+ if (t >= 30 && t <= 37 || t >= 90 && t <= 97) return 39;
165
+ if (t >= 40 && t <= 47 || t >= 100 && t <= 107) return 49;
166
+ if (t === 1 || t === 2) return 22;
167
+ if (t === 3) return 23;
168
+ if (t === 4) return 24;
169
+ if (t === 7) return 27;
170
+ if (t === 8) return 28;
171
+ if (t === 9) return 29;
172
+ if (t === 0) return 0;
173
+ }, st = (t) => `${T}${Q$1}${t}${tt}`, it = (t) => `${T}${U$1}${t}${j}`, gt$1 = (t) => t.map((e) => S(e)), G = (t, e, s) => {
174
+ const i = e[Symbol.iterator]();
175
+ let r = !1, n = !1, u = t.at(-1), a = u === void 0 ? 0 : S(u), l = i.next(), E = i.next(), g = 0;
176
+ for (; !l.done;) {
177
+ const m = l.value, A = S(m);
178
+ a + A <= s ? t[t.length - 1] += m : (t.push(m), a = 0), (m === T || m === Z) && (r = !0, n = e.startsWith(U$1, g + 1)), r ? n ? m === j && (r = !1, n = !1) : m === tt && (r = !1) : (a += A, a === s && !E.done && (t.push(""), a = 0)), l = E, E = i.next(), g += m.length;
179
+ }
180
+ u = t.at(-1), !a && u !== void 0 && u.length > 0 && t.length > 1 && (t[t.length - 2] += t.pop());
181
+ }, vt$1 = (t) => {
182
+ const e = t.split(" ");
183
+ let s = e.length;
184
+ for (; s > 0 && !(S(e[s - 1]) > 0);) s--;
185
+ return s === e.length ? t : e.slice(0, s).join(" ") + e.slice(s).join("");
186
+ }, Et$1 = (t, e, s = {}) => {
187
+ if (s.trim !== !1 && t.trim() === "") return "";
188
+ let i = "", r, n;
189
+ const u = t.split(" "), a = gt$1(u);
190
+ let l = [""];
191
+ for (const [h, o] of u.entries()) {
192
+ s.trim !== !1 && (l[l.length - 1] = (l.at(-1) ?? "").trimStart());
193
+ let p = S(l.at(-1) ?? "");
194
+ if (h !== 0 && (p >= e && (s.wordWrap === !1 || s.trim === !1) && (l.push(""), p = 0), (p > 0 || s.trim === !1) && (l[l.length - 1] += " ", p++)), s.hard && a[h] > e) {
195
+ const v = e - p, F = 1 + Math.floor((a[h] - v - 1) / e);
196
+ Math.floor((a[h] - 1) / e) < F && l.push(""), G(l, o, e);
197
+ continue;
198
+ }
199
+ if (p + a[h] > e && p > 0 && a[h] > 0) {
200
+ if (s.wordWrap === !1 && p < e) {
201
+ G(l, o, e);
202
+ continue;
203
+ }
204
+ l.push("");
205
+ }
206
+ if (p + a[h] > e && s.wordWrap === !1) {
207
+ G(l, o, e);
208
+ continue;
209
+ }
210
+ l[l.length - 1] += o;
211
+ }
212
+ s.trim !== !1 && (l = l.map((h) => vt$1(h)));
213
+ const E = l.join(`
214
+ `), g = E[Symbol.iterator]();
215
+ let m = g.next(), A = g.next(), V = 0;
216
+ for (; !m.done;) {
217
+ const h = m.value, o = A.value;
218
+ if (i += h, h === T || h === Z) {
219
+ et.lastIndex = V + 1;
220
+ const F = et.exec(E)?.groups;
221
+ if (F?.code !== void 0) {
222
+ const d = Number.parseFloat(F.code);
223
+ r = d === Ft$1 ? void 0 : d;
224
+ } else F?.uri !== void 0 && (n = F.uri.length === 0 ? void 0 : F.uri);
225
+ }
226
+ const p = r ? mt$1(r) : void 0;
227
+ o === `
228
+ ` ? (n && (i += it("")), r && p && (i += st(p))) : h === `
229
+ ` && (r && p && (i += st(r)), n && (i += it(n))), V += h.length, m = A, A = g.next();
230
+ }
231
+ return i;
159
232
  };
160
- new RegExp(`(?:\\[(?<code>\\d+)m|\\]8;;(?<uri>.*))`, "y");
233
+ function K$1(t, e, s) {
234
+ return String(t).normalize().replaceAll(`\r
235
+ `, `
236
+ `).split(`
237
+ `).map((i) => Et$1(i, e, s)).join(`
238
+ `);
239
+ }
161
240
  const _ = {
162
241
  actions: new Set([
163
242
  "up",
@@ -187,7 +266,27 @@ function H$1(t, e) {
187
266
  for (const s of t) if (s !== void 0 && H$1(s, e)) return !0;
188
267
  return !1;
189
268
  }
190
- const bt$1 = globalThis.process.platform.startsWith("win");
269
+ function _t$1(t, e) {
270
+ if (t === e) return;
271
+ const s = t.split(`
272
+ `), i = e.split(`
273
+ `), r = Math.max(s.length, i.length), n = [];
274
+ for (let u = 0; u < r; u++) s[u] !== i[u] && n.push(u);
275
+ return {
276
+ lines: n,
277
+ numLinesBefore: s.length,
278
+ numLinesAfter: i.length,
279
+ numLines: r
280
+ };
281
+ }
282
+ const bt$1 = globalThis.process.platform.startsWith("win"), z$1 = Symbol("clack:cancel");
283
+ function Ct$1(t) {
284
+ return t === z$1;
285
+ }
286
+ function W$1(t, e) {
287
+ const s = t;
288
+ s.isTTY && s.setRawMode(e);
289
+ }
191
290
  function xt$1({ input: t = stdin, output: e = stdout, overwrite: s = !0, hideCursor: i = !0 } = {}) {
192
291
  const r = k.createInterface({
193
292
  input: t,
@@ -217,26 +316,195 @@ function xt$1({ input: t = stdin, output: e = stdout, overwrite: s = !0, hideCur
217
316
  t.off("keypress", n), i && e.write(import_src.cursor.show), t instanceof ReadStream && t.isTTY && !bt$1 && t.setRawMode(!1), r.terminal = !1, r.close();
218
317
  };
219
318
  }
220
- const rt = (t) => "columns" in t && typeof t.columns == "number" ? t.columns : 80;
319
+ const rt = (t) => "columns" in t && typeof t.columns == "number" ? t.columns : 80, nt = (t) => "rows" in t && typeof t.rows == "number" ? t.rows : 20;
320
+ var B = class {
321
+ input;
322
+ output;
323
+ _abortSignal;
324
+ rl;
325
+ opts;
326
+ _render;
327
+ _track = !1;
328
+ _prevFrame = "";
329
+ _subscribers = /* @__PURE__ */ new Map();
330
+ _cursor = 0;
331
+ state = "initial";
332
+ error = "";
333
+ value;
334
+ userInput = "";
335
+ constructor(e, s = !0) {
336
+ const { input: i = stdin, output: r = stdout, render: n, signal: u, ...a } = e;
337
+ this.opts = a, this.onKeypress = this.onKeypress.bind(this), this.close = this.close.bind(this), this.render = this.render.bind(this), this._render = n.bind(this), this._track = s, this._abortSignal = u, this.input = i, this.output = r;
338
+ }
339
+ unsubscribe() {
340
+ this._subscribers.clear();
341
+ }
342
+ setSubscriber(e, s) {
343
+ const i = this._subscribers.get(e) ?? [];
344
+ i.push(s), this._subscribers.set(e, i);
345
+ }
346
+ on(e, s) {
347
+ this.setSubscriber(e, { cb: s });
348
+ }
349
+ once(e, s) {
350
+ this.setSubscriber(e, {
351
+ cb: s,
352
+ once: !0
353
+ });
354
+ }
355
+ emit(e, ...s) {
356
+ const i = this._subscribers.get(e) ?? [], r = [];
357
+ for (const n of i) n.cb(...s), n.once && r.push(() => i.splice(i.indexOf(n), 1));
358
+ for (const n of r) n();
359
+ }
360
+ prompt() {
361
+ return new Promise((e) => {
362
+ if (this._abortSignal) {
363
+ if (this._abortSignal.aborted) return this.state = "cancel", this.close(), e(z$1);
364
+ this._abortSignal.addEventListener("abort", () => {
365
+ this.state = "cancel", this.close();
366
+ }, { once: !0 });
367
+ }
368
+ this.rl = ot.createInterface({
369
+ input: this.input,
370
+ tabSize: 2,
371
+ prompt: "",
372
+ escapeCodeTimeout: 50,
373
+ terminal: !0
374
+ }), this.rl.prompt(), this.opts.initialUserInput !== void 0 && this._setUserInput(this.opts.initialUserInput, !0), this.input.on("keypress", this.onKeypress), W$1(this.input, !0), this.output.on("resize", this.render), this.render(), this.once("submit", () => {
375
+ this.output.write(import_src.cursor.show), this.output.off("resize", this.render), W$1(this.input, !1), e(this.value);
376
+ }), this.once("cancel", () => {
377
+ this.output.write(import_src.cursor.show), this.output.off("resize", this.render), W$1(this.input, !1), e(z$1);
378
+ });
379
+ });
380
+ }
381
+ _isActionKey(e, s) {
382
+ return e === " ";
383
+ }
384
+ _setValue(e) {
385
+ this.value = e, this.emit("value", this.value);
386
+ }
387
+ _setUserInput(e, s) {
388
+ this.userInput = e ?? "", this.emit("userInput", this.userInput), s && this._track && this.rl && (this.rl.write(this.userInput), this._cursor = this.rl.cursor);
389
+ }
390
+ _clearUserInput() {
391
+ this.rl?.write(null, {
392
+ ctrl: !0,
393
+ name: "u"
394
+ }), this._setUserInput("");
395
+ }
396
+ onKeypress(e, s) {
397
+ if (this._track && s.name !== "return" && (s.name && this._isActionKey(e, s) && this.rl?.write(null, {
398
+ ctrl: !0,
399
+ name: "h"
400
+ }), this._cursor = this.rl?.cursor ?? 0, this._setUserInput(this.rl?.line)), this.state === "error" && (this.state = "active"), s?.name && (!this._track && _.aliases.has(s.name) && this.emit("cursor", _.aliases.get(s.name)), _.actions.has(s.name) && this.emit("cursor", s.name)), e && (e.toLowerCase() === "y" || e.toLowerCase() === "n") && this.emit("confirm", e.toLowerCase() === "y"), this.emit("key", e?.toLowerCase(), s), s?.name === "return") {
401
+ if (this.opts.validate) {
402
+ const i = this.opts.validate(this.value);
403
+ i && (this.error = i instanceof Error ? i.message : i, this.state = "error", this.rl?.write(this.userInput));
404
+ }
405
+ this.state !== "error" && (this.state = "submit");
406
+ }
407
+ H$1([
408
+ e,
409
+ s?.name,
410
+ s?.sequence
411
+ ], "cancel") && (this.state = "cancel"), (this.state === "submit" || this.state === "cancel") && this.emit("finalize"), this.render(), (this.state === "submit" || this.state === "cancel") && this.close();
412
+ }
413
+ close() {
414
+ this.input.unpipe(), this.input.removeListener("keypress", this.onKeypress), this.output.write(`
415
+ `), W$1(this.input, !1), this.rl?.close(), this.rl = void 0, this.emit(`${this.state}`, this.value), this.unsubscribe();
416
+ }
417
+ restoreCursor() {
418
+ const e = K$1(this._prevFrame, process.stdout.columns, {
419
+ hard: !0,
420
+ trim: !1
421
+ }).split(`
422
+ `).length - 1;
423
+ this.output.write(import_src.cursor.move(-999, e * -1));
424
+ }
425
+ render() {
426
+ const e = K$1(this._render(this) ?? "", process.stdout.columns, {
427
+ hard: !0,
428
+ trim: !1
429
+ });
430
+ if (e !== this._prevFrame) {
431
+ if (this.state === "initial") this.output.write(import_src.cursor.hide);
432
+ else {
433
+ const s = _t$1(this._prevFrame, e), i = nt(this.output);
434
+ if (this.restoreCursor(), s) {
435
+ const r = Math.max(0, s.numLinesAfter - i), n = Math.max(0, s.numLinesBefore - i);
436
+ let u = s.lines.find((a) => a >= r);
437
+ if (u === void 0) {
438
+ this._prevFrame = e;
439
+ return;
440
+ }
441
+ if (s.lines.length === 1) {
442
+ this.output.write(import_src.cursor.move(0, u - n)), this.output.write(import_src.erase.lines(1));
443
+ const a = e.split(`
444
+ `);
445
+ this.output.write(a[u]), this._prevFrame = e, this.output.write(import_src.cursor.move(0, a.length - u - 1));
446
+ return;
447
+ } else if (s.lines.length > 1) {
448
+ if (r < n) u = r;
449
+ else {
450
+ const l = u - n;
451
+ l > 0 && this.output.write(import_src.cursor.move(0, l));
452
+ }
453
+ this.output.write(import_src.erase.down());
454
+ const a = e.split(`
455
+ `).slice(u);
456
+ this.output.write(a.join(`
457
+ `)), this._prevFrame = e;
458
+ return;
459
+ }
460
+ }
461
+ this.output.write(import_src.erase.down());
462
+ }
463
+ this.output.write(e), this.state === "initial" && (this.state = "active"), this._prevFrame = e;
464
+ }
465
+ }
466
+ };
467
+ var kt$1 = class extends B {
468
+ get cursor() {
469
+ return this.value ? 0 : 1;
470
+ }
471
+ get _value() {
472
+ return this.cursor === 0;
473
+ }
474
+ constructor(e) {
475
+ super(e, !1), this.value = !!e.initialValue, this.on("userInput", () => {
476
+ this.value = this._value;
477
+ }), this.on("confirm", (s) => {
478
+ this.output.write(import_src.cursor.move(0, -1)), this.value = s, this.state = "submit", this.close();
479
+ }), this.on("cursor", () => {
480
+ this.value = !this.value;
481
+ });
482
+ }
483
+ };
221
484
  //#endregion
222
485
  //#region node_modules/@clack/prompts/dist/index.mjs
223
486
  function pt() {
224
487
  return N.platform !== "win32" ? N.env.TERM !== "linux" : !!N.env.CI || !!N.env.WT_SESSION || !!N.env.TERMINUS_SUBLIME || N.env.ConEmuTask === "{cmd::Cmder}" || N.env.TERM_PROGRAM === "Terminus-Sublime" || N.env.TERM_PROGRAM === "vscode" || N.env.TERM === "xterm-256color" || N.env.TERM === "alacritty" || N.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
225
488
  }
226
- const ee = pt(), ce = () => process.env.CI === "true", Me = (e) => e.isTTY === !0, I = (e, r) => ee ? e : r;
227
- I("◆", "*");
228
- const $e = I("■", "x"), de = I("▲", "x"), V = I("◇", "o"), he = I("┌", "T"), h = I("│", "|"), x = I("└", "—");
489
+ const ee = pt(), ce = () => process.env.CI === "true", Me = (e) => e.isTTY === !0, I = (e, r) => ee ? e : r, Re = I("◆", "*"), $e = I("■", "x"), de = I("▲", "x"), V = I("◇", "o"), he = I("┌", "T"), h = I("│", "|"), x = I("└", "—");
229
490
  I("┐", "T");
230
491
  I("┘", "—");
231
- I("●", ">");
232
- I("○", " ");
492
+ const z = I("●", ">"), H = I("○", " ");
233
493
  I("◻", "[•]");
234
494
  I("◼", "[+]");
235
495
  I("◻", "[ ]");
236
496
  I("▪", "•");
237
497
  const se = I("─", "-"), pe = I("╮", "+"), We = I("├", "+"), me = I("╯", "+"), ge = I("╰", "+");
238
498
  I("╭", "+");
239
- const fe = I("●", "•"), Fe = I("◆", "*"), ye = I("▲", "!"), Ee = I("■", "x"), mt = (e) => e === 161 || e === 164 || e === 167 || e === 168 || e === 170 || e === 173 || e === 174 || e >= 176 && e <= 180 || e >= 182 && e <= 186 || e >= 188 && e <= 191 || e === 198 || e === 208 || e === 215 || e === 216 || e >= 222 && e <= 225 || e === 230 || e >= 232 && e <= 234 || e === 236 || e === 237 || e === 240 || e === 242 || e === 243 || e >= 247 && e <= 250 || e === 252 || e === 254 || e === 257 || e === 273 || e === 275 || e === 283 || e === 294 || e === 295 || e === 299 || e >= 305 && e <= 307 || e === 312 || e >= 319 && e <= 322 || e === 324 || e >= 328 && e <= 331 || e === 333 || e === 338 || e === 339 || e === 358 || e === 359 || e === 363 || e === 462 || e === 464 || e === 466 || e === 468 || e === 470 || e === 472 || e === 474 || e === 476 || e === 593 || e === 609 || e === 708 || e === 711 || e >= 713 && e <= 715 || e === 717 || e === 720 || e >= 728 && e <= 731 || e === 733 || e === 735 || e >= 768 && e <= 879 || e >= 913 && e <= 929 || e >= 931 && e <= 937 || e >= 945 && e <= 961 || e >= 963 && e <= 969 || e === 1025 || e >= 1040 && e <= 1103 || e === 1105 || e === 8208 || e >= 8211 && e <= 8214 || e === 8216 || e === 8217 || e === 8220 || e === 8221 || e >= 8224 && e <= 8226 || e >= 8228 && e <= 8231 || e === 8240 || e === 8242 || e === 8243 || e === 8245 || e === 8251 || e === 8254 || e === 8308 || e === 8319 || e >= 8321 && e <= 8324 || e === 8364 || e === 8451 || e === 8453 || e === 8457 || e === 8467 || e === 8470 || e === 8481 || e === 8482 || e === 8486 || e === 8491 || e === 8531 || e === 8532 || e >= 8539 && e <= 8542 || e >= 8544 && e <= 8555 || e >= 8560 && e <= 8569 || e === 8585 || e >= 8592 && e <= 8601 || e === 8632 || e === 8633 || e === 8658 || e === 8660 || e === 8679 || e === 8704 || e === 8706 || e === 8707 || e === 8711 || e === 8712 || e === 8715 || e === 8719 || e === 8721 || e === 8725 || e === 8730 || e >= 8733 && e <= 8736 || e === 8739 || e === 8741 || e >= 8743 && e <= 8748 || e === 8750 || e >= 8756 && e <= 8759 || e === 8764 || e === 8765 || e === 8776 || e === 8780 || e === 8786 || e === 8800 || e === 8801 || e >= 8804 && e <= 8807 || e === 8810 || e === 8811 || e === 8814 || e === 8815 || e === 8834 || e === 8835 || e === 8838 || e === 8839 || e === 8853 || e === 8857 || e === 8869 || e === 8895 || e === 8978 || e >= 9312 && e <= 9449 || e >= 9451 && e <= 9547 || e >= 9552 && e <= 9587 || e >= 9600 && e <= 9615 || e >= 9618 && e <= 9621 || e === 9632 || e === 9633 || e >= 9635 && e <= 9641 || e === 9650 || e === 9651 || e === 9654 || e === 9655 || e === 9660 || e === 9661 || e === 9664 || e === 9665 || e >= 9670 && e <= 9672 || e === 9675 || e >= 9678 && e <= 9681 || e >= 9698 && e <= 9701 || e === 9711 || e === 9733 || e === 9734 || e === 9737 || e === 9742 || e === 9743 || e === 9756 || e === 9758 || e === 9792 || e === 9794 || e === 9824 || e === 9825 || e >= 9827 && e <= 9829 || e >= 9831 && e <= 9834 || e === 9836 || e === 9837 || e === 9839 || e === 9886 || e === 9887 || e === 9919 || e >= 9926 && e <= 9933 || e >= 9935 && e <= 9939 || e >= 9941 && e <= 9953 || e === 9955 || e === 9960 || e === 9961 || e >= 9963 && e <= 9969 || e === 9972 || e >= 9974 && e <= 9977 || e === 9979 || e === 9980 || e === 9982 || e === 9983 || e === 10045 || e >= 10102 && e <= 10111 || e >= 11094 && e <= 11097 || e >= 12872 && e <= 12879 || e >= 57344 && e <= 63743 || e >= 65024 && e <= 65039 || e === 65533 || e >= 127232 && e <= 127242 || e >= 127248 && e <= 127277 || e >= 127280 && e <= 127337 || e >= 127344 && e <= 127373 || e === 127375 || e === 127376 || e >= 127387 && e <= 127404 || e >= 917760 && e <= 917999 || e >= 983040 && e <= 1048573 || e >= 1048576 && e <= 1114109, gt = (e) => e === 12288 || e >= 65281 && e <= 65376 || e >= 65504 && e <= 65510, ft = (e) => e >= 4352 && e <= 4447 || e === 8986 || e === 8987 || e === 9001 || e === 9002 || e >= 9193 && e <= 9196 || e === 9200 || e === 9203 || e === 9725 || e === 9726 || e === 9748 || e === 9749 || e >= 9800 && e <= 9811 || e === 9855 || e === 9875 || e === 9889 || e === 9898 || e === 9899 || e === 9917 || e === 9918 || e === 9924 || e === 9925 || e === 9934 || e === 9940 || e === 9962 || e === 9970 || e === 9971 || e === 9973 || e === 9978 || e === 9981 || e === 9989 || e === 9994 || e === 9995 || e === 10024 || e === 10060 || e === 10062 || e >= 10067 && e <= 10069 || e === 10071 || e >= 10133 && e <= 10135 || e === 10160 || e === 10175 || e === 11035 || e === 11036 || e === 11088 || e === 11093 || e >= 11904 && e <= 11929 || e >= 11931 && e <= 12019 || e >= 12032 && e <= 12245 || e >= 12272 && e <= 12287 || e >= 12289 && e <= 12350 || e >= 12353 && e <= 12438 || e >= 12441 && e <= 12543 || e >= 12549 && e <= 12591 || e >= 12593 && e <= 12686 || e >= 12688 && e <= 12771 || e >= 12783 && e <= 12830 || e >= 12832 && e <= 12871 || e >= 12880 && e <= 19903 || e >= 19968 && e <= 42124 || e >= 42128 && e <= 42182 || e >= 43360 && e <= 43388 || e >= 44032 && e <= 55203 || e >= 63744 && e <= 64255 || e >= 65040 && e <= 65049 || e >= 65072 && e <= 65106 || e >= 65108 && e <= 65126 || e >= 65128 && e <= 65131 || e >= 94176 && e <= 94180 || e === 94192 || e === 94193 || e >= 94208 && e <= 100343 || e >= 100352 && e <= 101589 || e >= 101632 && e <= 101640 || e >= 110576 && e <= 110579 || e >= 110581 && e <= 110587 || e === 110589 || e === 110590 || e >= 110592 && e <= 110882 || e === 110898 || e >= 110928 && e <= 110930 || e === 110933 || e >= 110948 && e <= 110951 || e >= 110960 && e <= 111355 || e === 126980 || e === 127183 || e === 127374 || e >= 127377 && e <= 127386 || e >= 127488 && e <= 127490 || e >= 127504 && e <= 127547 || e >= 127552 && e <= 127560 || e === 127568 || e === 127569 || e >= 127584 && e <= 127589 || e >= 127744 && e <= 127776 || e >= 127789 && e <= 127797 || e >= 127799 && e <= 127868 || e >= 127870 && e <= 127891 || e >= 127904 && e <= 127946 || e >= 127951 && e <= 127955 || e >= 127968 && e <= 127984 || e === 127988 || e >= 127992 && e <= 128062 || e === 128064 || e >= 128066 && e <= 128252 || e >= 128255 && e <= 128317 || e >= 128331 && e <= 128334 || e >= 128336 && e <= 128359 || e === 128378 || e === 128405 || e === 128406 || e === 128420 || e >= 128507 && e <= 128591 || e >= 128640 && e <= 128709 || e === 128716 || e >= 128720 && e <= 128722 || e >= 128725 && e <= 128727 || e >= 128732 && e <= 128735 || e === 128747 || e === 128748 || e >= 128756 && e <= 128764 || e >= 128992 && e <= 129003 || e === 129008 || e >= 129292 && e <= 129338 || e >= 129340 && e <= 129349 || e >= 129351 && e <= 129535 || e >= 129648 && e <= 129660 || e >= 129664 && e <= 129672 || e >= 129680 && e <= 129725 || e >= 129727 && e <= 129733 || e >= 129742 && e <= 129755 || e >= 129760 && e <= 129768 || e >= 129776 && e <= 129784 || e >= 131072 && e <= 196605 || e >= 196608 && e <= 262141, we = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y, re = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y, ie = /\t{1,1000}/y, Ae = /[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy, ne = /(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y, Ft = /\p{M}+/gu, yt = {
499
+ const fe = I("●", "•"), Fe = I("◆", "*"), ye = I("▲", "!"), Ee = I("■", "x"), W = (e) => {
500
+ switch (e) {
501
+ case "initial":
502
+ case "active": return styleText("cyan", Re);
503
+ case "cancel": return styleText("red", $e);
504
+ case "error": return styleText("yellow", de);
505
+ case "submit": return styleText("green", V);
506
+ }
507
+ }, mt = (e) => e === 161 || e === 164 || e === 167 || e === 168 || e === 170 || e === 173 || e === 174 || e >= 176 && e <= 180 || e >= 182 && e <= 186 || e >= 188 && e <= 191 || e === 198 || e === 208 || e === 215 || e === 216 || e >= 222 && e <= 225 || e === 230 || e >= 232 && e <= 234 || e === 236 || e === 237 || e === 240 || e === 242 || e === 243 || e >= 247 && e <= 250 || e === 252 || e === 254 || e === 257 || e === 273 || e === 275 || e === 283 || e === 294 || e === 295 || e === 299 || e >= 305 && e <= 307 || e === 312 || e >= 319 && e <= 322 || e === 324 || e >= 328 && e <= 331 || e === 333 || e === 338 || e === 339 || e === 358 || e === 359 || e === 363 || e === 462 || e === 464 || e === 466 || e === 468 || e === 470 || e === 472 || e === 474 || e === 476 || e === 593 || e === 609 || e === 708 || e === 711 || e >= 713 && e <= 715 || e === 717 || e === 720 || e >= 728 && e <= 731 || e === 733 || e === 735 || e >= 768 && e <= 879 || e >= 913 && e <= 929 || e >= 931 && e <= 937 || e >= 945 && e <= 961 || e >= 963 && e <= 969 || e === 1025 || e >= 1040 && e <= 1103 || e === 1105 || e === 8208 || e >= 8211 && e <= 8214 || e === 8216 || e === 8217 || e === 8220 || e === 8221 || e >= 8224 && e <= 8226 || e >= 8228 && e <= 8231 || e === 8240 || e === 8242 || e === 8243 || e === 8245 || e === 8251 || e === 8254 || e === 8308 || e === 8319 || e >= 8321 && e <= 8324 || e === 8364 || e === 8451 || e === 8453 || e === 8457 || e === 8467 || e === 8470 || e === 8481 || e === 8482 || e === 8486 || e === 8491 || e === 8531 || e === 8532 || e >= 8539 && e <= 8542 || e >= 8544 && e <= 8555 || e >= 8560 && e <= 8569 || e === 8585 || e >= 8592 && e <= 8601 || e === 8632 || e === 8633 || e === 8658 || e === 8660 || e === 8679 || e === 8704 || e === 8706 || e === 8707 || e === 8711 || e === 8712 || e === 8715 || e === 8719 || e === 8721 || e === 8725 || e === 8730 || e >= 8733 && e <= 8736 || e === 8739 || e === 8741 || e >= 8743 && e <= 8748 || e === 8750 || e >= 8756 && e <= 8759 || e === 8764 || e === 8765 || e === 8776 || e === 8780 || e === 8786 || e === 8800 || e === 8801 || e >= 8804 && e <= 8807 || e === 8810 || e === 8811 || e === 8814 || e === 8815 || e === 8834 || e === 8835 || e === 8838 || e === 8839 || e === 8853 || e === 8857 || e === 8869 || e === 8895 || e === 8978 || e >= 9312 && e <= 9449 || e >= 9451 && e <= 9547 || e >= 9552 && e <= 9587 || e >= 9600 && e <= 9615 || e >= 9618 && e <= 9621 || e === 9632 || e === 9633 || e >= 9635 && e <= 9641 || e === 9650 || e === 9651 || e === 9654 || e === 9655 || e === 9660 || e === 9661 || e === 9664 || e === 9665 || e >= 9670 && e <= 9672 || e === 9675 || e >= 9678 && e <= 9681 || e >= 9698 && e <= 9701 || e === 9711 || e === 9733 || e === 9734 || e === 9737 || e === 9742 || e === 9743 || e === 9756 || e === 9758 || e === 9792 || e === 9794 || e === 9824 || e === 9825 || e >= 9827 && e <= 9829 || e >= 9831 && e <= 9834 || e === 9836 || e === 9837 || e === 9839 || e === 9886 || e === 9887 || e === 9919 || e >= 9926 && e <= 9933 || e >= 9935 && e <= 9939 || e >= 9941 && e <= 9953 || e === 9955 || e === 9960 || e === 9961 || e >= 9963 && e <= 9969 || e === 9972 || e >= 9974 && e <= 9977 || e === 9979 || e === 9980 || e === 9982 || e === 9983 || e === 10045 || e >= 10102 && e <= 10111 || e >= 11094 && e <= 11097 || e >= 12872 && e <= 12879 || e >= 57344 && e <= 63743 || e >= 65024 && e <= 65039 || e === 65533 || e >= 127232 && e <= 127242 || e >= 127248 && e <= 127277 || e >= 127280 && e <= 127337 || e >= 127344 && e <= 127373 || e === 127375 || e === 127376 || e >= 127387 && e <= 127404 || e >= 917760 && e <= 917999 || e >= 983040 && e <= 1048573 || e >= 1048576 && e <= 1114109, gt = (e) => e === 12288 || e >= 65281 && e <= 65376 || e >= 65504 && e <= 65510, ft = (e) => e >= 4352 && e <= 4447 || e === 8986 || e === 8987 || e === 9001 || e === 9002 || e >= 9193 && e <= 9196 || e === 9200 || e === 9203 || e === 9725 || e === 9726 || e === 9748 || e === 9749 || e >= 9800 && e <= 9811 || e === 9855 || e === 9875 || e === 9889 || e === 9898 || e === 9899 || e === 9917 || e === 9918 || e === 9924 || e === 9925 || e === 9934 || e === 9940 || e === 9962 || e === 9970 || e === 9971 || e === 9973 || e === 9978 || e === 9981 || e === 9989 || e === 9994 || e === 9995 || e === 10024 || e === 10060 || e === 10062 || e >= 10067 && e <= 10069 || e === 10071 || e >= 10133 && e <= 10135 || e === 10160 || e === 10175 || e === 11035 || e === 11036 || e === 11088 || e === 11093 || e >= 11904 && e <= 11929 || e >= 11931 && e <= 12019 || e >= 12032 && e <= 12245 || e >= 12272 && e <= 12287 || e >= 12289 && e <= 12350 || e >= 12353 && e <= 12438 || e >= 12441 && e <= 12543 || e >= 12549 && e <= 12591 || e >= 12593 && e <= 12686 || e >= 12688 && e <= 12771 || e >= 12783 && e <= 12830 || e >= 12832 && e <= 12871 || e >= 12880 && e <= 19903 || e >= 19968 && e <= 42124 || e >= 42128 && e <= 42182 || e >= 43360 && e <= 43388 || e >= 44032 && e <= 55203 || e >= 63744 && e <= 64255 || e >= 65040 && e <= 65049 || e >= 65072 && e <= 65106 || e >= 65108 && e <= 65126 || e >= 65128 && e <= 65131 || e >= 94176 && e <= 94180 || e === 94192 || e === 94193 || e >= 94208 && e <= 100343 || e >= 100352 && e <= 101589 || e >= 101632 && e <= 101640 || e >= 110576 && e <= 110579 || e >= 110581 && e <= 110587 || e === 110589 || e === 110590 || e >= 110592 && e <= 110882 || e === 110898 || e >= 110928 && e <= 110930 || e === 110933 || e >= 110948 && e <= 110951 || e >= 110960 && e <= 111355 || e === 126980 || e === 127183 || e === 127374 || e >= 127377 && e <= 127386 || e >= 127488 && e <= 127490 || e >= 127504 && e <= 127547 || e >= 127552 && e <= 127560 || e === 127568 || e === 127569 || e >= 127584 && e <= 127589 || e >= 127744 && e <= 127776 || e >= 127789 && e <= 127797 || e >= 127799 && e <= 127868 || e >= 127870 && e <= 127891 || e >= 127904 && e <= 127946 || e >= 127951 && e <= 127955 || e >= 127968 && e <= 127984 || e === 127988 || e >= 127992 && e <= 128062 || e === 128064 || e >= 128066 && e <= 128252 || e >= 128255 && e <= 128317 || e >= 128331 && e <= 128334 || e >= 128336 && e <= 128359 || e === 128378 || e === 128405 || e === 128406 || e === 128420 || e >= 128507 && e <= 128591 || e >= 128640 && e <= 128709 || e === 128716 || e >= 128720 && e <= 128722 || e >= 128725 && e <= 128727 || e >= 128732 && e <= 128735 || e === 128747 || e === 128748 || e >= 128756 && e <= 128764 || e >= 128992 && e <= 129003 || e === 129008 || e >= 129292 && e <= 129338 || e >= 129340 && e <= 129349 || e >= 129351 && e <= 129535 || e >= 129648 && e <= 129660 || e >= 129664 && e <= 129672 || e >= 129680 && e <= 129725 || e >= 129727 && e <= 129733 || e >= 129742 && e <= 129755 || e >= 129760 && e <= 129768 || e >= 129776 && e <= 129784 || e >= 131072 && e <= 196605 || e >= 196608 && e <= 262141, we = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y, re = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y, ie = /\t{1,1000}/y, Ae = /[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy, ne = /(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y, Ft = /\p{M}+/gu, yt = {
240
508
  limit: Infinity,
241
509
  ellipsis: ""
242
510
  }, Le = (e, r = {}, s = {}) => {
@@ -386,7 +654,35 @@ function J(e, r, s) {
386
654
  `).map((i) => It(i, r, s)).join(`
387
655
  `);
388
656
  }
389
- const R = {
657
+ const Rt = (e) => {
658
+ const r = e.active ?? "Yes", s = e.inactive ?? "No";
659
+ return new kt$1({
660
+ active: r,
661
+ inactive: s,
662
+ signal: e.signal,
663
+ input: e.input,
664
+ output: e.output,
665
+ initialValue: e.initialValue ?? !0,
666
+ render() {
667
+ const i = e.withGuide ?? _.withGuide, a = `${i ? `${styleText("gray", h)}
668
+ ` : ""}${W(this.state)} ${e.message}
669
+ `, o = this.value ? r : s;
670
+ switch (this.state) {
671
+ case "submit": return `${a}${i ? `${styleText("gray", h)} ` : ""}${styleText("dim", o)}`;
672
+ case "cancel": return `${a}${i ? `${styleText("gray", h)} ` : ""}${styleText(["strikethrough", "dim"], o)}${i ? `
673
+ ${styleText("gray", h)}` : ""}`;
674
+ default: {
675
+ const u = i ? `${styleText("cyan", h)} ` : "", l = i ? styleText("cyan", x) : "";
676
+ return `${a}${u}${this.value ? `${styleText("green", z)} ${r}` : `${styleText("dim", H)} ${styleText("dim", r)}`}${e.vertical ? i ? `
677
+ ${styleText("cyan", h)} ` : `
678
+ ` : ` ${styleText("dim", "/")} `}${this.value ? `${styleText("dim", H)} ${styleText("dim", s)}` : `${styleText("green", z)} ${s}`}
679
+ ${l}
680
+ `;
681
+ }
682
+ }
683
+ }
684
+ }).prompt();
685
+ }, R = {
390
686
  message: (e = [], { symbol: r = styleText("gray", h), secondarySymbol: s = styleText("gray", h), output: i = process.stdout, spacing: a = 1, withGuide: o } = {}) => {
391
687
  const u = [], l = o ?? _.withGuide, n = l ? s : "", c = l ? `${r} ` : "", p = l ? `${s} ` : "";
392
688
  for (let g = 0; g < a; g++) u.push(n);
@@ -642,4 +938,4 @@ var require_picocolors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
642
938
  module.exports.createColors = createColors;
643
939
  }));
644
940
  //#endregion
645
- export { R as a, be as c, Nt as i, __toESM as l, Gt as n, Vt as o, Me as r, Wt as s, require_picocolors as t };
941
+ export { R as a, Wt as c, __toESM as d, Nt as i, be as l, Gt as n, Rt as o, Me as r, Vt as s, require_picocolors as t, Ct$1 as u };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwatch",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Daily macOS notifications when installed GitHub-backed skills have updates.",
5
5
  "keywords": [
6
6
  "agent-skills",
@@ -47,10 +47,12 @@
47
47
  },
48
48
  "devDependencies": {
49
49
  "@changesets/cli": "^2.29.0",
50
+ "@clack/prompts": "^1.1.0",
50
51
  "@types/node": "^22.15.0",
51
52
  "lefthook": "^2.1.4",
52
53
  "oxfmt": "^0.41.0",
53
54
  "oxlint": "^1.56.0",
55
+ "picocolors": "^1.1.1",
54
56
  "tsdown": "^0.12.0",
55
57
  "typescript": "^5.8.0",
56
58
  "ultracite": "^7.3.2",