You should know: a side agent watches your back while Claude works on longer tasks. It looks for things worth knowing that you might miss, and surfaces them…

you-should-know: a clone of Claude Code's built-in "You should know" observer mod (cc-plugin-you-should-know, v2.1.292) as an installable mod. It works through any gateway or provider, including non-first-party gateways.
Every 6th main-agent step, a side request ($.model.fork: the session's own model, conversation, and credentials, with no tools) runs the official observer prompt verbatim. It usually answers learn: none. When it finds one consequential thing you might miss, it shows a short note above the prompt:
1 Learn more · 2 Knew this already · 3 What is this / Return to topic · 4 Disable (press again to disable) · 0 Dismiss1 Understood · 2 Chat in main session · 0 Dismiss1 That was helpful · 2 Not relevant · 3 Couldn't understand · 4 Turn off suggestions · 0 Dismiss1 That was helpful · 2 Didn't understand · 0 DismissTopics you have seen or understood are remembered so they don't repeat. Checks back off when notes are ignored. CLAUDE_CODE_YOU_SHOULD_KNOW_DEBUG=1 shows check rows.
claude --plugin-dir ./plugins/you-should-know
# or
/plugin marketplace add yafyx/you-should-know
/plugin install you-should-know@you-should-know
Turn off the built-in version if it’s enabled:
/plugin disable cc-plugin-you-should-know@builtin
hooks/register.js is generated from the official dump by tools/build.mjs, which strips telemetry, removes the first-party availability gate, and tree-shakes the bundle.hooks/register.js 2718 lines1// stage.js
2var bue = "you-should-know";
3var MARKETPLACE = "ysk-clone";
4var h = (c, p, ...k) =>
5 c({
6 ...p,
7 children: k.flat().filter((x) => x !== void 0 && x !== null && x !== false),
8 });
9var xt = {
10 bold: {
11 bold: true,
12 },
13 code: {
14 color: "permission",
15 },
16};
17function Ue(e, t, o) {
18 let { Text: r } = e;
19 return t
20 .flatMap((n, i) =>
21 i === 0
22 ? n
23 : [
24 {
25 text: " ",
26 },
27 ...n,
28 ],
29 )
30 .map(({ text: n, look: i }) =>
31 h(
32 r,
33 {
34 ...(i === void 0 ? o : xt[i]),
35 },
36 n,
37 ),
38 );
39}
40var Io = 60;
41function yt(e, t) {
42 let { Box: o, Text: r } = e;
43 return h(
44 o,
45 {
46 position: "absolute",
47 bottom: 1,
48 left: 0,
49 display: "none",
50 hover: {
51 display: "flex",
52 },
53 flexDirection: "column",
54 borderStyle: "round",
55 borderDimColor: true,
56 paddingX: 1,
57 width: Io,
58 },
59 h(
60 r,
61 {
62 wrap: "wrap",
63 },
64 Ue(e, t, {}),
65 ),
66 );
67}
68var je = (e) => ({
69 hotkey: "3",
70 label: e.isOpen ? "Return to topic" : "What is this",
71 onPress: e.onPress,
72 isDim: true,
73});
74var ye = (e) => e.map((t) => t.map((o) => o.text).join("")).join(" ");
75var wt = [
76 {
77 text: "Learn more",
78 look: "bold",
79 },
80 {
81 text: " to get a deeper explanation and chat about it.",
82 },
83];
84var ne = `/plugin disable ${bue}@${MARKETPLACE}`;
85var Lo = [
86 {
87 text: "Disable on this machine with ",
88 },
89 {
90 text: ne,
91 look: "code",
92 },
93 {
94 text: ".",
95 },
96];
97var kt = [
98 {
99 text: "A side agent is watching your back while Claude works.",
100 },
101];
102var Tt = [
103 {
104 text: "When something comes up that you should know but might miss, this plugin flags it for you.",
105 },
106];
107var Mo = [kt, Tt, wt];
108var We = [kt, Tt, wt, Lo];
109var _n = ye(We);
110function Bo(e, { lead: t, body: o, surface: r, copy: n }) {
111 let { Box: i, Text: a } = e,
112 l = r === "desktop",
113 u = n.length > 0;
114 return l
115 ? h(
116 i,
117 {
118 flexDirection: "row",
119 alignItems: "flex-start",
120 },
121 h(
122 i,
123 {
124 key: "about",
125 flexShrink: 0,
126 },
127 t,
128 u ? yt(e, n) : void 0,
129 ),
130 h(
131 a,
132 {
133 wrap: "wrap",
134 },
135 o,
136 ),
137 )
138 : h(
139 a,
140 {
141 wrap: "wrap",
142 },
143 t,
144 o,
145 );
146}
147var Fo = {
148 isOpen: false,
149 surface: "terminal",
150 onPress: () => {
151 return;
152 },
153 copy: We,
154 budget: "scrolls",
155};
156var se = 3;
157var Ho = "0: ";
158var Uo = 4352;
159var St = (e) =>
160 [...e].reduce((t, o) => t + ((o.codePointAt(0) ?? 0) >= Uo ? 2 : 1), 0);
161var jo = 1;
162function vt(e, t) {
163 let o = Math.max(t - jo, 1),
164 r = 0,
165 n = 0;
166 for (let i of e.split(" ").filter((a) => a !== "")) {
167 let a = St(i);
168 if (r === 0 || n + 1 + a > o)
169 ((r += Math.ceil(Math.max(a, 1) / o)), (n = a % o === 0 ? o : a % o));
170 else n += 1 + a;
171 }
172 return r;
173}
174function Wo({ columns: e, labels: t }) {
175 let o = Math.max(e, 1),
176 r = 1,
177 n = 0;
178 for (let i of t) {
179 let a = Ho + i,
180 l = St(a) + se,
181 u = n > 0 && n + l > o,
182 w = l > o,
183 s = w ? vt(a, o - se) : 1,
184 f = u ? 0 : n;
185 ((r += (u ? 1 : 0) + s - 1), (n = w ? o : f + l));
186 }
187 return r;
188}
189var Ko = 1;
190var Et = 2;
191var Go = (e) => `${e} \xB7 `;
192var we = (e, t) =>
193 Ko +
194 vt(e, t.columns - Et) +
195 Wo({
196 ...t,
197 columns: t.columns - 2,
198 });
199var qo = (e) => we(Go(e.tag) + e.line, e);
200var Vo = (e) => we(e.note, e);
201function Xo(e) {
202 let t = (o) =>
203 Vo({
204 ...e,
205 columns: e.bodyColumns,
206 note: ye(e.copy.slice(0, o)),
207 }) <= e.maxRows;
208 return e.copy.slice(0, e.copy.map((o, r) => e.copy.length - r).find(t) ?? 0);
209}
210function Jo(e, t) {
211 let o = je(e),
212 r = je({
213 ...e,
214 isOpen: true,
215 }),
216 { budget: n } = e,
217 i = n === "scrolls",
218 a = i
219 ? e.copy
220 : Xo({
221 ...n,
222 ...t,
223 copy: e.copy,
224 labels: [...t.before, r, ...t.after].map((s) => s.label),
225 }),
226 l = je({
227 ...e,
228 isOpen: false,
229 }),
230 u =
231 i ||
232 qo({
233 columns: n.bodyColumns,
234 tag: t.tag,
235 line: t.line,
236 labels: [...t.before, l, ...t.after].map((s) => s.label),
237 }) <= n.maxRows,
238 w = a.length > 0 && u;
239 return {
240 note: e.isOpen && w ? a : [],
241 choices: w ? [o] : [],
242 };
243}
244var zo = (e, { maxRows: t, bodyColumns: o }, r) => {
245 let n = e ? Mo : We;
246 return {
247 copy: r ? [] : n,
248 budget: e
249 ? "scrolls"
250 : {
251 maxRows: t,
252 bodyColumns: o,
253 },
254 };
255};
256var _t = ({ line: e, shownAt: t }) => `${t ?? "unstamped"} ${e}`;
257async function Rt(e, t) {
258 try {
259 return (
260 await e.state.get({
261 plugin: "you-should-know",
262 key: "aboutOpen",
263 id: t,
264 })
265 ).value;
266 } catch {
267 return;
268 }
269}
270async function Pt(e, { sid: t, key: o }) {
271 try {
272 let n = await e.state.get({
273 plugin: "you-should-know",
274 key: "aboutOpen",
275 id: t,
276 }),
277 i = n.value === o ? "" : o;
278 await e.state.set(
279 {
280 plugin: "you-should-know",
281 key: "aboutOpen",
282 id: t,
283 },
284 i,
285 {
286 ifVersion: n.version,
287 },
288 );
289 } catch {
290 return;
291 }
292}
293var Lt = [
294 "shown",
295 "none",
296 "parse_failed",
297 "deduped",
298 "stale",
299 "aborted",
300 "api_error",
301 "error",
302];
303var pr = {
304 "nothing-to-fork": "none",
305 "api-error": "api_error",
306 "empty-reply": "none",
307 aborted: "aborted",
308};
309var Ve = 1e3;
310var Bt = /^(\d+)\.(\d+)\.(\d+)(-dev)?$/;
311function Ft(e) {
312 let t = Bt.exec(e?.base ?? "");
313 if (!t) return;
314 let o = Number(t[1]),
315 r = Number(t[2]),
316 n = Number(t[3]);
317 if (![o, r, n].every(Number.isSafeInteger)) return;
318 let i = Date.parse(e?.builtAt ?? "");
319 return {
320 major: o,
321 minor: r,
322 patch: n,
323 isDev: t[4] !== void 0,
324 ...(Number.isFinite(i) && {
325 builtAtS: Math.floor(i / Ve),
326 }),
327 };
328}
329var Ht = 8;
330function ur(e) {
331 let t = (e.latencyMs / Ve).toFixed(1),
332 o = new Date(e.at).toTimeString().slice(0, Ht);
333 return `debug \xB7 check ${e.number} \xB7 step ${e.step} \xB7 ${e.outcome} \xB7 ${t}s \xB7 ${o}`;
334}
335var Te = 3;
336function Ut(e) {
337 if (typeof e !== "object" || !e) return false;
338 let t = e;
339 return (
340 Number.isFinite(t.number) &&
341 Number.isFinite(t.step) &&
342 Number.isFinite(t.latencyMs) &&
343 Number.isFinite(t.at) &&
344 Lt.some((o) => o === t.outcome)
345 );
346}
347var jt = (e) => (Array.isArray(e) ? e.filter(Ut).slice(-Te) : []);
348var cr = (e, t) => [...e, t].slice(-Te);
349var Wt = ["1", "true", "yes", "on"];
350var Kt = (e) => e !== void 0 && Wt.includes(e.trim().toLowerCase());
351var Gt = (e) => e.then(Kt).catch(() => false);
352async function gr(e, t) {
353 try {
354 await e();
355 } finally {
356 await t();
357 }
358}
359var Yt = () => ({
360 title: "",
361 lead: "",
362 sketch: [],
363 caption: "",
364});
365var xr = /^```/;
366var qt = () =>
367 new RegExp(
368 String.raw`[\u001B\u009B][[\]()#;?]*` +
369 String.raw`(?:(?:(?:(?:;[-a-zA-Z\d/#&.:=?%@~_]+)*` +
370 String.raw`|[a-zA-Z\d]+(?:;[-a-zA-Z\d/#&.:=?%@~_]*)*)?` +
371 String.raw`(?:\u0007|\u001B\u005C|\u009C))` +
372 String.raw`|(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]))`,
373 "g",
374 );
375var be = (e) =>
376 e
377 .replace(/[\x00-\x08\x0E-\x1F\x7F-\x9F]/g, "")
378 .replace(/\s+/g, " ")
379 .trim();
380function fe(e, t) {
381 if (t <= 0) return "";
382 return e.length <= t ? e : e.slice(0, t).replace(/[\uD800-\uDBFF]$/, "");
383}
384var Oe = (e) =>
385 e
386 .replace(/\p{Cs}/gu, "")
387 .replace(qt(), "")
388 .replace(/[\p{Cc}\p{Cf}\u2028\u2029]/gu, "");
389function Vt(e, t) {
390 if (e.length <= t) return e;
391 let o = fe(e, t - 1),
392 r = o.search(/\s\S*$/),
393 i = r !== -1 ? o.slice(0, r).trimEnd() : "";
394 return `${i.length > t / 2 ? i : o.trimEnd()}\u2026`;
395}
396var Xt = (e) =>
397 e
398 .split(
399 `
400`,
401 )
402 .map((t) => be(t))
403 .filter((t) => t !== "").join(`
404`);
405var yr = /^(?:\*\*([^*]+)\*\*|#+\s*(.+))$/;
406var wr = 6;
407var kr = 2;
408var Jt = 4e3;
409var Tr = 4;
410var br = 12;
411var Or = 120;
412var Sr = 120;
413var me = /^learn\s*:\s*/i;
414var vr = (e) => e === "" || /^none\s*(?:[.!?()[\]:;,-]|$)/i.test(e);
415var ze = (e) => e.replace(/\.+$/, "");
416var Qe = [
417 ['"', '"'],
418 ["'", "'"],
419 ["\u201C", "\u201D"],
420 ["\u2018", "\u2019"],
421 ["`", "`"],
422];
423function z(e) {
424 let t = ze(e.trim());
425 return t.length >= 2 &&
426 Qe.some(
427 ([r, n]) =>
428 t.startsWith(r) && t.endsWith(n) && !t.slice(1, -1).includes(n),
429 )
430 ? ze(t.slice(1, -1).trim())
431 : t;
432}
433var Se = Qe.map(([, e]) => e).join("");
434var Er = new RegExp(`[.!?\u2026][${Se})\\]]*$`);
435var _r = new RegExp(`\\?[${Se}]?$`);
436var zt = /^explain:\s*/i;
437var Qt =
438 /[.\s\u2014\u2013-]*\s\**tag\**\s*:\s*\**\s*(heads[\s-]*up|you should know)\W*$/i;
439var Rr = (e) => z(z(e).replace(Qt, ""));
440var Ze = 240;
441function $e(e) {
442 let t = [],
443 o = Yt(),
444 r = false,
445 n = false;
446 function i() {
447 if (
448 ((o.lead = Vt(Xt(o.lead), Jt)),
449 (o.caption = Vt(Xt(o.caption), Jt)),
450 o.title || o.lead || o.sketch.length > 0 || o.caption)
451 )
452 t.push(o);
453 o = Yt();
454 }
455 for (let a of e.split(`
456`)) {
457 let l = Oe(a).replace(/\s+$/, "");
458 if (xr.test(l.trim())) {
459 if (!r && n) i();
460 ((r = !r), (n = true));
461 continue;
462 }
463 if (r) {
464 if (o.sketch.length < br) o.sketch = [...o.sketch, fe(l, Or)];
465 continue;
466 }
467 let u = yr.exec(l.trim());
468 if (u) {
469 (i(), (n = false), (o.title = fe(be(u[1] ?? u[2] ?? ""), Sr)));
470 continue;
471 }
472 let s = o.sketch.length === 0 && !n ? "lead" : "caption";
473 o[s] += `
474${l}`;
475 }
476 return (i(), t.slice(0, Tr));
477}
478var ve = "You should know";
479var Zt = /^\W*heads[\s-]*up\W*$/i;
480var et = new RegExp(
481 String.raw`^[\s>*_"'\u201C\u201D\u2018\u2019` +
482 "`" +
483 String.raw`]*tag[\s*_"'\u201C\u201D\u2018\u2019` +
484 "`" +
485 String.raw`]*(?::\s*|[-\u2013\u2014](?:\s+|$))`,
486 "i",
487);
488var G = (e) => (Zt.test(e) ? "Heads up" : ve);
489function Pr(e) {
490 let t = e.split(`
491`),
492 o = t.map((g) => Oe(g).trimStart()),
493 r = o.findIndex((g) => me.test(g.replace(/^[-*\u2022]\s+/, ""))),
494 n = o.slice(r + 1).findIndex((g) => zt.test(g)),
495 i = r !== -1 && n !== -1,
496 a = i ? r + 1 + n : -1,
497 l = [(o[a] ?? "").replace(zt, ""), ...t.slice(a + 1)]
498 .join(
499 `
500`,
501 )
502 .trim(),
503 u = i ? l || void 0 : void 0,
504 w = (i ? t.slice(0, a) : t).map((g) =>
505 be(Oe(g)).replace(/^[-*\u2022]\s+/, ""),
506 ),
507 s = w.find((g) => et.test(g)) ?? "",
508 f = G(s.replace(et, ""));
509 for (let [g, S] of w.entries()) {
510 if (!me.test(S)) continue;
511 let x = S.replace(me, "").trim();
512 if (vr(Rr(x)))
513 return {
514 kind: "none",
515 };
516 for (let R of w.slice(g + 1)) {
517 if (R === "" || me.test(R) || et.test(R) || _r.test(x)) break;
518 x += ` ${R}`;
519 }
520 let d = z(x),
521 D = Qt.exec(d),
522 p = D === null ? d : z(d.slice(0, D.index)),
523 N = Er.test(p) ? p : `${p}.`,
524 te = s === "" && D !== null ? G(D?.[1] ?? "") : f;
525 if (N.length <= Ze)
526 return {
527 kind: "line",
528 line: N,
529 tag: te,
530 explanation: u,
531 };
532 }
533 return {
534 kind: "unparsable",
535 };
536}
537var $t = 50;
538var tt = (e, t) => e.some((o) => o === "terminal" || t.has(o));
539var Q = (e) => e?.kind === "offer" || e?.kind === "explained";
540var eo = (e, t) => Q(e) && e.kind === t.kind && e.shownAt === t.shownAt;
541function Y(e) {
542 return typeof e === "number" && Number.isSafeInteger(e) && e >= 0 ? e : 0;
543}
544var H = (e) => (Array.isArray(e) ? e.filter((t) => typeof t === "string") : []);
545function de(e) {
546 switch (e.kind) {
547 case "explained":
548 return Y(e.iteration);
549 case "asked":
550 return e.iteration === void 0 ? void 0 : Y(e.iteration);
551 case "offer":
552 return;
553 }
554}
555function Cr(e, t) {
556 return e.kind === "offer"
557 ? {
558 ...e,
559 promptsSurvived: t,
560 isOffArmed: false,
561 }
562 : {
563 ...e,
564 promptsSurvived: t,
565 };
566}
567var _e = {
568 star: {
569 color: "suggestion",
570 },
571 tag: {
572 dimColor: true,
573 },
574};
575var Dr = {
576 star: {
577 color: "subtle",
578 },
579 tag: {
580 color: "subtle",
581 },
582};
583var Nr = {
584 terminal: _e,
585 desktop: Dr,
586 mobile: _e,
587 vscode: _e,
588};
589var ue = (e) => e.leadInk ?? _e;
590var he = {
591 terminal: false,
592 desktop: true,
593 mobile: true,
594 vscode: true,
595};
596var Mr = 2e4;
597function Z(e, { hotkey: t, label: o, onPress: r, isDim: n, role: i }) {
598 let { Box: a, Button: l } = e;
599 return h(
600 a,
601 {
602 marginRight: se,
603 },
604 h(l, {
605 key: `choice-${t}`,
606 label: o,
607 hotkey: t,
608 plain: true,
609 dimColor: n,
610 role: i,
611 onPress: r,
612 }),
613 );
614}
615function U(e, t) {
616 let { Text: o } = e,
617 r = ue(e);
618 return h(
619 o,
620 null,
621 h(
622 o,
623 {
624 ...r.star,
625 },
626 "\u2726",
627 ),
628 t === void 0
629 ? " "
630 : h(
631 o,
632 {
633 ...r.tag,
634 },
635 " ",
636 t,
637 " \xB7 ",
638 ),
639 );
640}
641function Ae(e, t) {
642 let { Box: o, Text: r } = e,
643 n = ue(e);
644 return h(
645 o,
646 {
647 flexDirection: "row",
648 alignItems: "flex-start",
649 },
650 h(
651 o,
652 {
653 flexShrink: 0,
654 width: Et,
655 },
656 h(
657 r,
658 {
659 ...n.star,
660 },
661 "\u2726",
662 ),
663 ),
664 t,
665 );
666}
667function Re(e, t, o) {
668 let { Text: r } = e,
669 n = ue(e);
670 return (e.hasStarColumn ?? true)
671 ? Ae(
672 e,
673 h(
674 r,
675 {
676 wrap: "wrap",
677 },
678 t === void 0
679 ? ""
680 : h(
681 r,
682 {
683 ...n.tag,
684 },
685 t,
686 " \xB7 ",
687 ),
688 o,
689 ),
690 )
691 : h(
692 r,
693 {
694 wrap: "wrap",
695 },
696 U(e, t),
697 o,
698 );
699}
700function Pe(e, t, o) {
701 let { Box: r, Text: n } = e,
702 i = e.hasStarColumn ?? true,
703 l = [
704 ...t,
705 {
706 hotkey: "0",
707 label: "Dismiss",
708 onPress: o,
709 role: "dismiss",
710 },
711 ].map((u) => Z(e, u));
712 return i
713 ? h(
714 r,
715 {
716 flexDirection: "column",
717 marginTop: 1,
718 },
719 Ae(
720 e,
721 h(
722 r,
723 {
724 flexWrap: "wrap",
725 },
726 h(
727 r,
728 {
729 marginRight: se,
730 },
731 h(
732 n,
733 {
734 dimColor: true,
735 wrap: "truncate-end",
736 },
737 "Dismissed.",
738 ),
739 ),
740 l,
741 ),
742 ),
743 )
744 : h(
745 r,
746 {
747 marginTop: 1,
748 flexWrap: "wrap",
749 },
750 h(
751 r,
752 {
753 marginRight: se,
754 },
755 h(
756 n,
757 {
758 wrap: "truncate-end",
759 },
760 U(e),
761 h(
762 n,
763 {
764 dimColor: true,
765 },
766 "Dismissed.",
767 ),
768 ),
769 ),
770 l,
771 );
772}
773function Br(e, t) {
774 let o = t.off,
775 n =
776 o !== void 0
777 ? [
778 {
779 hotkey: "4",
780 label: "Turn off suggestions",
781 onPress: o,
782 },
783 ]
784 : [];
785 return Pe(
786 e,
787 [
788 {
789 hotkey: "1",
790 label: "That was helpful",
791 onPress: t.helpful,
792 },
793 {
794 hotkey: "2",
795 label: "Not relevant",
796 onPress: t.notRelevant,
797 },
798 {
799 hotkey: "3",
800 label: "Couldn\u2019t understand",
801 onPress: t.notUnderstood,
802 },
803 ...n,
804 ],
805 t.dismiss,
806 );
807}
808var Fr = (e, t) =>
809 Pe(
810 e,
811 [
812 {
813 hotkey: "1",
814 label: "That was helpful",
815 onPress: t.helpful,
816 },
817 {
818 hotkey: "2",
819 label: "Didn\u2019t understand",
820 onPress: t.notUnderstood,
821 },
822 ],
823 t.dismiss,
824 );
825function ee(e, t) {
826 let { Box: o } = e;
827 return h(
828 o,
829 {
830 marginLeft: 2,
831 flexWrap: "wrap",
832 },
833 t.map((r) => Z(e, r)),
834 );
835}
836function Hr(e, t, o) {
837 let { Box: r, Text: n } = e;
838 return h(
839 r,
840 {
841 flexDirection: "column",
842 },
843 h(
844 r,
845 {
846 flexDirection: "column",
847 marginTop: 1,
848 },
849 t.map((i) =>
850 h(
851 r,
852 null,
853 h(
854 n,
855 {
856 ...ue(e).star,
857 },
858 "\u2726",
859 ),
860 h(
861 n,
862 {
863 wrap: "truncate-end",
864 dimColor: true,
865 },
866 " ",
867 ur(i),
868 ),
869 ),
870 ),
871 ),
872 o ?? "",
873 );
874}
875var to = `
876`;
877var oo = /^(?:[-*+\u2022]|(\d+)([.)]))\s+/;
878var ro = /^(\d+)([.)])(?=\s|$)/;
879var no =
880 /\*\*([^*\n]+?)\*\*|`([^`\n]+)`|[\\`*_{}[<>#+\-=|~^$&:@]|(?<=[wW]{3})\./g;
881var ot = /[\\`*_{}[<>#+\-=|~^$&:@]|(?<=[wW]{3})\./g;
882var so = (e) =>
883 e
884 .trimStart()
885 .replace(no, (t, o, r) => {
886 let n = r !== void 0,
887 i = o !== void 0,
888 a = `**${(o ?? "").replace(ot, "\\$&")}**`;
889 return n ? t : i ? a : `\\${t}`;
890 })
891 .replace(ro, "$1\\$2");
892function io(e, t) {
893 let o = e.trimStart(),
894 r = oo.exec(o),
895 n = so(o.slice(r?.[0].length ?? 0)),
896 i = r?.[1],
897 a = Number(i),
898 l = `${(t ?? a - 1) + 1}.` === `${i}${r?.[2]}`;
899 if (r === null)
900 return {
901 kind: "plain",
902 text: n,
903 canOpenInPlace: false,
904 };
905 if (i === void 0)
906 return {
907 kind: "bullet",
908 text: `- ${n}`,
909 canOpenInPlace: true,
910 };
911 return l
912 ? {
913 kind: "ordered",
914 text: `${a}. ${n}`,
915 canOpenInPlace: a === 1,
916 ordinal: a,
917 }
918 : {
919 kind: "plain",
920 text: `${i}\\${r[2]} ${n}`,
921 canOpenInPlace: false,
922 };
923}
924function Ur(e, t) {
925 let o = io(e, t?.ordinal),
926 r = o.kind === "plain",
927 n = r && t?.kind === "plain",
928 i = (!r && o.kind === t?.kind) || o.canOpenInPlace,
929 a = n
930 ? to
931 : i
932 ? `
933`
934 : `
935
936`;
937 if (t === void 0) return o;
938 return {
939 ...o,
940 text: `${a}${o.text}`,
941 };
942}
943function ao(e, t) {
944 let o = t === "" ? "" : `**${t.replace(ot, "\\$&")}**`,
945 n =
946 o !== ""
947 ? [
948 {
949 kind: "plain",
950 text: o,
951 canOpenInPlace: false,
952 },
953 ]
954 : [],
955 i = e
956 .split(
957 `
958`,
959 )
960 .filter((a) => a !== "")
961 .reduce((a, l) => [...a, Ur(l, a.at(-1))], n)
962 .map((a) => a.text)
963 .join("");
964 return i === ""
965 ? ""
966 : `${i}
967
968`;
969}
970function rt(e, t, o) {
971 let { Markdown: r } = e,
972 n = ao(t, o);
973 return n === ""
974 ? ""
975 : h(r, {
976 text: n,
977 });
978}
979function jr(e, ...[t, o, r, n = ve]) {
980 let { Box: i, Code: a } = e;
981 return h(
982 i,
983 {
984 flexDirection: "column",
985 marginTop: 1,
986 },
987 h(
988 i,
989 {
990 flexDirection: "column",
991 marginBottom: 1,
992 },
993 Re(e, n, t),
994 ),
995 o.map((l) => {
996 let u = l.sketch.length > 0;
997 return h(
998 i,
999 {
1000 flexDirection: "column",
1001 marginBottom: 1,
1002 marginLeft: 2,
1003 },
1004 rt(e, l.lead, l.title),
1005 u
1006 ? h(a, {
1007 source: l.sketch.map((w) => (w === "" ? " " : w)).join(`
1008`),
1009 language: "text",
1010 wrap: "truncate-end",
1011 })
1012 : "",
1013 rt(e, l.caption, ""),
1014 );
1015 }),
1016 r === null
1017 ? ""
1018 : ee(e, [
1019 {
1020 hotkey: "1",
1021 label: "Understood",
1022 onPress: r.gotIt,
1023 },
1024 {
1025 hotkey: "2",
1026 label: "Chat in main session",
1027 onPress: r.respond,
1028 },
1029 {
1030 hotkey: "0",
1031 label: "Dismiss",
1032 onPress: r.dismiss,
1033 role: "dismiss",
1034 },
1035 ]),
1036 );
1037}
1038function Ce(e, t) {
1039 let { Box: o, Text: r } = e;
1040 return h(
1041 o,
1042 {
1043 marginTop: 1,
1044 },
1045 h(
1046 r,
1047 {
1048 ...ue(e).star,
1049 },
1050 "\u2726",
1051 ),
1052 h(
1053 r,
1054 {
1055 wrap: "truncate-end",
1056 dimColor: true,
1057 },
1058 " ",
1059 t,
1060 ),
1061 );
1062}
1063var Wr = (e) => Ce(e, "One moment\u2026");
1064function Kr(e, t, o) {
1065 let { Box: r, Text: n } = e,
1066 i = t === "publish",
1067 a = t === "blocked",
1068 l = t === "explain",
1069 u = t === "turn_off";
1070 return h(
1071 r,
1072 {
1073 marginTop: 1,
1074 },
1075 h(
1076 n,
1077 {
1078 wrap: "truncate-end",
1079 },
1080 U(e),
1081 i
1082 ? "Couldn\u2019t publish that page"
1083 : a
1084 ? "Not published (blocked by a permission setting)"
1085 : l
1086 ? "Couldn\u2019t write that explanation"
1087 : u
1088 ? "Couldn\u2019t turn suggestions off here. Use /plugin."
1089 : "Couldn\u2019t write that page",
1090 " ",
1091 h(
1092 n,
1093 {
1094 dimColor: true,
1095 },
1096 "\xB7",
1097 ),
1098 " ",
1099 ),
1100 Z(e, {
1101 hotkey: "0",
1102 label: "OK",
1103 onPress: o,
1104 }),
1105 );
1106}
1107var nt = 2;
1108var po = 80;
1109var fo = {
1110 hangulJamo: 4352,
1111 punctuation: {
1112 first: 8208,
1113 last: 8286,
1114 },
1115 arrows: {
1116 first: 8592,
1117 last: 8703,
1118 },
1119 shapes: {
1120 first: 9472,
1121 last: 9727,
1122 },
1123 mediumSmallSquares: {
1124 white: 9725,
1125 black: 9726,
1126 },
1127};
1128function mo(e) {
1129 let {
1130 hangulJamo: t,
1131 punctuation: o,
1132 arrows: r,
1133 shapes: n,
1134 mediumSmallSquares: i,
1135 } = fo;
1136 return e < t ||
1137 (e >= o.first && e <= o.last) ||
1138 (e >= r.first && e <= r.last) ||
1139 (e >= n.first && e <= n.last && e !== i.white && e !== i.black)
1140 ? 1
1141 : 2;
1142}
1143function st(e) {
1144 let t = 0;
1145 for (let o of e) t += mo(o.codePointAt(0) ?? 0);
1146 return t;
1147}
1148function it(e, t) {
1149 if (st(e) <= t) return e;
1150 let o = 0,
1151 r = "";
1152 for (let n of e) {
1153 if (((o += st(n)), o > t - 1)) return `${r}\u2026`;
1154 r += n;
1155 }
1156 return r;
1157}
1158function Gr(e, t) {
1159 let o = Number.isFinite(t) ? t : po;
1160 return e.map((r) => ({
1161 ...r,
1162 title: it(r.title, Math.max(o - nt, 1)),
1163 sketch: r.sketch.map((n) => it(n, Math.max(o - nt, 1))),
1164 }));
1165}
1166var Yr = (e) =>
1167 Ce(e, "Making your page (a minute or two) \xB7 Claude keeps working\u2026");
1168var lo = (e, t) =>
1169 e === void 0
1170 ? []
1171 : [
1172 {
1173 hotkey: "4",
1174 label: t ? "Press again to disable" : "Disable",
1175 onPress: e,
1176 isDim: true,
1177 },
1178 ];
1179function qr(e, ...[t, o, r, n = Fo, i = ve]) {
1180 let { Box: a } = e,
1181 l = [
1182 {
1183 hotkey: "1",
1184 label: "Learn more",
1185 onPress: o.explain,
1186 },
1187 {
1188 hotkey: "2",
1189 label: "Knew this already",
1190 onPress: o.knew,
1191 },
1192 ],
1193 u = [
1194 ...lo(o.off, r),
1195 {
1196 hotkey: "0",
1197 label: "Dismiss",
1198 onPress: o.later,
1199 role: "dismiss",
1200 },types/index.d.ts 8 lines1declare module "claude-code" {
2 interface PluginState {
3 "you-should-know": {
4 aboutOpen: string;
5 };
6 }
7}
8