@tienne/gestalt 0.102.0 → 0.104.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.
Files changed (179) hide show
  1. package/README.ko.md +2 -1
  2. package/README.md +2 -1
  3. package/dist/package.json +1 -1
  4. package/dist/plugin/role-agents/video-summarizer/AGENT.md +208 -108
  5. package/dist/plugin/skills/_shared/proactive-routing.md +2 -1
  6. package/dist/plugin/skills/research/references/design.md +1 -1
  7. package/dist/plugin/skills/video-digest/SKILL.md +430 -0
  8. package/dist/plugin/skills/video-digest/templates/background.md +15 -0
  9. package/dist/plugin/skills/video-digest/templates/blog.md +16 -0
  10. package/dist/plugin/skills/video-digest/templates/comments.md +19 -0
  11. package/dist/plugin/skills/video-digest/templates/counterpoints.md +15 -0
  12. package/dist/plugin/skills/video-digest/templates/flashcards.md +15 -0
  13. package/dist/plugin/skills/video-digest/templates/interview.md +15 -0
  14. package/dist/plugin/skills/video-digest/templates/meeting.md +15 -0
  15. package/dist/plugin/skills/video-digest/templates/mindmap.md +16 -0
  16. package/dist/plugin/skills/video-digest/templates/quiz.md +16 -0
  17. package/dist/plugin/skills/video-digest/templates/quotes.md +16 -0
  18. package/dist/plugin/skills/video-digest/templates/resources.md +14 -0
  19. package/dist/plugin/skills/video-digest/templates/timestamps.md +14 -0
  20. package/dist/plugin/skills/video-digest/templates/visual.md +22 -0
  21. package/dist/src/cli/commands/digest.d.ts +60 -0
  22. package/dist/src/cli/commands/digest.d.ts.map +1 -0
  23. package/dist/src/cli/commands/digest.js +401 -0
  24. package/dist/src/cli/commands/digest.js.map +1 -0
  25. package/dist/src/cli/index.d.ts.map +1 -1
  26. package/dist/src/cli/index.js +81 -0
  27. package/dist/src/cli/index.js.map +1 -1
  28. package/dist/src/digest/blocks.d.ts +5224 -0
  29. package/dist/src/digest/blocks.d.ts.map +1 -0
  30. package/dist/src/digest/blocks.js +156 -0
  31. package/dist/src/digest/blocks.js.map +1 -0
  32. package/dist/src/digest/captions.d.ts +37 -0
  33. package/dist/src/digest/captions.d.ts.map +1 -0
  34. package/dist/src/digest/captions.js +138 -0
  35. package/dist/src/digest/captions.js.map +1 -0
  36. package/dist/src/digest/comments.d.ts +113 -0
  37. package/dist/src/digest/comments.d.ts.map +1 -0
  38. package/dist/src/digest/comments.js +153 -0
  39. package/dist/src/digest/comments.js.map +1 -0
  40. package/dist/src/digest/diagram-schema.d.ts +765 -0
  41. package/dist/src/digest/diagram-schema.d.ts.map +1 -0
  42. package/dist/src/digest/diagram-schema.js +72 -0
  43. package/dist/src/digest/diagram-schema.js.map +1 -0
  44. package/dist/src/digest/format.d.ts +9 -0
  45. package/dist/src/digest/format.d.ts.map +1 -0
  46. package/dist/src/digest/format.js +26 -0
  47. package/dist/src/digest/format.js.map +1 -0
  48. package/dist/src/digest/frames.d.ts +46 -0
  49. package/dist/src/digest/frames.d.ts.map +1 -0
  50. package/dist/src/digest/frames.js +206 -0
  51. package/dist/src/digest/frames.js.map +1 -0
  52. package/dist/src/digest/index.d.ts +26 -0
  53. package/dist/src/digest/index.d.ts.map +1 -0
  54. package/dist/src/digest/index.js +26 -0
  55. package/dist/src/digest/index.js.map +1 -0
  56. package/dist/src/digest/ingest.d.ts +65 -0
  57. package/dist/src/digest/ingest.d.ts.map +1 -0
  58. package/dist/src/digest/ingest.js +303 -0
  59. package/dist/src/digest/ingest.js.map +1 -0
  60. package/dist/src/digest/lint-extension.d.ts +71 -0
  61. package/dist/src/digest/lint-extension.d.ts.map +1 -0
  62. package/dist/src/digest/lint-extension.js +512 -0
  63. package/dist/src/digest/lint-extension.js.map +1 -0
  64. package/dist/src/digest/lint.d.ts +50 -0
  65. package/dist/src/digest/lint.d.ts.map +1 -0
  66. package/dist/src/digest/lint.js +560 -0
  67. package/dist/src/digest/lint.js.map +1 -0
  68. package/dist/src/digest/merge.d.ts +40 -0
  69. package/dist/src/digest/merge.d.ts.map +1 -0
  70. package/dist/src/digest/merge.js +107 -0
  71. package/dist/src/digest/merge.js.map +1 -0
  72. package/dist/src/digest/ocr.d.ts +100 -0
  73. package/dist/src/digest/ocr.d.ts.map +1 -0
  74. package/dist/src/digest/ocr.js +179 -0
  75. package/dist/src/digest/ocr.js.map +1 -0
  76. package/dist/src/digest/prose.d.ts +47 -0
  77. package/dist/src/digest/prose.d.ts.map +1 -0
  78. package/dist/src/digest/prose.js +171 -0
  79. package/dist/src/digest/prose.js.map +1 -0
  80. package/dist/src/digest/render-blocks.d.ts +38 -0
  81. package/dist/src/digest/render-blocks.d.ts.map +1 -0
  82. package/dist/src/digest/render-blocks.js +378 -0
  83. package/dist/src/digest/render-blocks.js.map +1 -0
  84. package/dist/src/digest/render-html.d.ts +22 -0
  85. package/dist/src/digest/render-html.d.ts.map +1 -0
  86. package/dist/src/digest/render-html.js +505 -0
  87. package/dist/src/digest/render-html.js.map +1 -0
  88. package/dist/src/digest/render-md.d.ts +18 -0
  89. package/dist/src/digest/render-md.d.ts.map +1 -0
  90. package/dist/src/digest/render-md.js +126 -0
  91. package/dist/src/digest/render-md.js.map +1 -0
  92. package/dist/src/digest/render.d.ts +47 -0
  93. package/dist/src/digest/render.d.ts.map +1 -0
  94. package/dist/src/digest/render.js +126 -0
  95. package/dist/src/digest/render.js.map +1 -0
  96. package/dist/src/digest/reports.d.ts +26 -0
  97. package/dist/src/digest/reports.d.ts.map +1 -0
  98. package/dist/src/digest/reports.js +70 -0
  99. package/dist/src/digest/reports.js.map +1 -0
  100. package/dist/src/digest/scenes.d.ts +92 -0
  101. package/dist/src/digest/scenes.d.ts.map +1 -0
  102. package/dist/src/digest/scenes.js +182 -0
  103. package/dist/src/digest/scenes.js.map +1 -0
  104. package/dist/src/digest/schema-base.d.ts +31 -0
  105. package/dist/src/digest/schema-base.d.ts.map +1 -0
  106. package/dist/src/digest/schema-base.js +19 -0
  107. package/dist/src/digest/schema-base.js.map +1 -0
  108. package/dist/src/digest/schema.d.ts +12886 -0
  109. package/dist/src/digest/schema.d.ts.map +1 -0
  110. package/dist/src/digest/schema.js +215 -0
  111. package/dist/src/digest/schema.js.map +1 -0
  112. package/dist/src/digest/server.d.ts +36 -0
  113. package/dist/src/digest/server.d.ts.map +1 -0
  114. package/dist/src/digest/server.js +278 -0
  115. package/dist/src/digest/server.js.map +1 -0
  116. package/dist/src/digest/slice.d.ts +20 -0
  117. package/dist/src/digest/slice.d.ts.map +1 -0
  118. package/dist/src/digest/slice.js +48 -0
  119. package/dist/src/digest/slice.js.map +1 -0
  120. package/dist/src/digest/store.d.ts +67 -0
  121. package/dist/src/digest/store.d.ts.map +1 -0
  122. package/dist/src/digest/store.js +152 -0
  123. package/dist/src/digest/store.js.map +1 -0
  124. package/dist/src/digest/svg.d.ts +74 -0
  125. package/dist/src/digest/svg.d.ts.map +1 -0
  126. package/dist/src/digest/svg.js +415 -0
  127. package/dist/src/digest/svg.js.map +1 -0
  128. package/dist/src/digest/templates.d.ts +38 -0
  129. package/dist/src/digest/templates.d.ts.map +1 -0
  130. package/dist/src/digest/templates.js +125 -0
  131. package/dist/src/digest/templates.js.map +1 -0
  132. package/dist/src/digest/translate.d.ts +46 -0
  133. package/dist/src/digest/translate.d.ts.map +1 -0
  134. package/dist/src/digest/translate.js +50 -0
  135. package/dist/src/digest/translate.js.map +1 -0
  136. package/dist/src/digest/viewer-js.d.ts +4 -0
  137. package/dist/src/digest/viewer-js.d.ts.map +1 -0
  138. package/dist/src/digest/viewer-js.js +735 -0
  139. package/dist/src/digest/viewer-js.js.map +1 -0
  140. package/dist/src/digest/viewer-logic.d.ts +46 -0
  141. package/dist/src/digest/viewer-logic.d.ts.map +1 -0
  142. package/dist/src/digest/viewer-logic.js +89 -0
  143. package/dist/src/digest/viewer-logic.js.map +1 -0
  144. package/dist/src/digest/ytdlp.d.ts +34 -0
  145. package/dist/src/digest/ytdlp.d.ts.map +1 -0
  146. package/dist/src/digest/ytdlp.js +64 -0
  147. package/dist/src/digest/ytdlp.js.map +1 -0
  148. package/dist/src/mcp/schemas.d.ts +48 -0
  149. package/dist/src/mcp/schemas.d.ts.map +1 -1
  150. package/dist/src/mcp/schemas.js +25 -0
  151. package/dist/src/mcp/schemas.js.map +1 -1
  152. package/dist/src/mcp/server.d.ts.map +1 -1
  153. package/dist/src/mcp/server.js +7 -1
  154. package/dist/src/mcp/server.js.map +1 -1
  155. package/dist/src/mcp/tools/digest-passthrough.d.ts +3 -0
  156. package/dist/src/mcp/tools/digest-passthrough.d.ts.map +1 -0
  157. package/dist/src/mcp/tools/digest-passthrough.js +151 -0
  158. package/dist/src/mcp/tools/digest-passthrough.js.map +1 -0
  159. package/package.json +1 -1
  160. package/plugin/.codex-plugin/plugin.json +1 -1
  161. package/plugin/.mcp.json +1 -1
  162. package/plugin/mcp.json +1 -1
  163. package/plugin/role-agents/video-summarizer/AGENT.md +208 -108
  164. package/plugin/skills/_shared/proactive-routing.md +2 -1
  165. package/plugin/skills/research/references/design.md +1 -1
  166. package/plugin/skills/video-digest/SKILL.md +430 -0
  167. package/plugin/skills/video-digest/templates/background.md +15 -0
  168. package/plugin/skills/video-digest/templates/blog.md +16 -0
  169. package/plugin/skills/video-digest/templates/comments.md +19 -0
  170. package/plugin/skills/video-digest/templates/counterpoints.md +15 -0
  171. package/plugin/skills/video-digest/templates/flashcards.md +15 -0
  172. package/plugin/skills/video-digest/templates/interview.md +15 -0
  173. package/plugin/skills/video-digest/templates/meeting.md +15 -0
  174. package/plugin/skills/video-digest/templates/mindmap.md +16 -0
  175. package/plugin/skills/video-digest/templates/quiz.md +16 -0
  176. package/plugin/skills/video-digest/templates/quotes.md +16 -0
  177. package/plugin/skills/video-digest/templates/resources.md +14 -0
  178. package/plugin/skills/video-digest/templates/timestamps.md +14 -0
  179. package/plugin/skills/video-digest/templates/visual.md +22 -0
@@ -0,0 +1,38 @@
1
+ import { type Block, type Extension } from './blocks.js';
2
+ import { type Cite, type Diagram } from './schema.js';
3
+ /**
4
+ * 확장 리포트 블록을 HTML과 마크다운으로 그린다. 블록 타입을 더하면 여기와 lint-extension.ts의
5
+ * blockFields 두 곳에 case를 넣는다. 둘 다 never로 빠진 타입을 컴파일 때 잡는다
6
+ */
7
+ export interface BlockHtmlContext {
8
+ escape: (s: string) => string;
9
+ cite: (c: Cite) => string;
10
+ /** cite.key 문장의 시작 시각 링크. 누르면 영상이 그 자리로 간다 */
11
+ time: (c: Cite) => string;
12
+ /** cite.key 문장의 시작 초. SVG 노드에 data-sec으로 단다 */
13
+ sec: (c: Cite) => number;
14
+ }
15
+ export interface BlockMdContext {
16
+ cite: (c: Cite) => string;
17
+ time: (c: Cite) => string;
18
+ }
19
+ /** 그림 하나와 확대 버튼, 스크립트 없이도 읽히는 목록. 대섹션 도식도 이 틀을 쓴다 */
20
+ export declare function diagramFigure(svg: string, outline: string, caption?: string): string;
21
+ export declare const DIAGRAM_LABEL: Record<Diagram['kind'], string>;
22
+ /** 그림과 스크립트 없이 읽히는 목록. aria는 그림의 aria-label이다 */
23
+ export declare function diagramParts(d: Diagram, aria: string, ctx: BlockHtmlContext): {
24
+ svg: string;
25
+ outline: string;
26
+ };
27
+ /** 대섹션 도식. title은 그림의 aria-label에 붙는 대섹션 제목이다 */
28
+ export declare function sectionDiagramHtml(d: Diagram, title: string, ctx: BlockHtmlContext): string;
29
+ /** 마크다운에는 그림 대신 목록이나 표로 옮긴다. 순서가 있는 흐름과 순환, 타임라인은 번호를 단다 */
30
+ export declare function sectionDiagramMd(d: Diagram, ctx: BlockMdContext): string[];
31
+ export declare const mdInline: (text: string) => string;
32
+ /** id는 블록마다 겹치지 않는 접두어다. 퀴즈 라디오 그룹 이름에 쓴다 */
33
+ export declare function blockHtml(block: Block, ctx: BlockHtmlContext, id?: string): string;
34
+ export declare function blockMarkdown(block: Block, ctx: BlockMdContext): string[];
35
+ /** 탭 id와 패널 id. 키에 들어가는 글자(영숫자, -, .)는 id에 그대로 써도 된다 */
36
+ export declare const extensionPanelId: (ext: Pick<Extension, "template" | "lang">) => string;
37
+ export declare function extensionHtml(ext: Extension, ctx: BlockHtmlContext): string;
38
+ //# sourceMappingURL=render-blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-blocks.d.ts","sourceRoot":"","sources":["../../../src/digest/render-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EAEV,KAAK,SAAS,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAA+B,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAYnF;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;CAC3B;AA4CD,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAIpF;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CASzD,CAAC;AAoBF,iDAAiD;AACjD,wBAAgB,YAAY,CAC1B,CAAC,EAAE,OAAO,EACV,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,GACpB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqDlC;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAG3F;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAiD1E;AAmBD,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,WAAwC,CAAC;AA0B9E,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,SAAM,GAAG,MAAM,CAmG/E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAsGzE;AAED,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,GAAI,KAAK,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,WAC9C,CAAC;AAE7B,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAK3E"}
@@ -0,0 +1,378 @@
1
+ import { extensionKey, } from './blocks.js';
2
+ import { boldPattern, keywordPattern } from './schema.js';
3
+ import { beforeAfterSvg, causalSvg, compareSvg, cycleSvg, flowSvg, matrixSvg, timelineSvg, treeSvg, } from './svg.js';
4
+ // 확장 리포트는 키워드 목록이 없어 lint가 마커를 막는다. 그래도 들어오면 표시 글자만 남긴다
5
+ const stripKeywords = (text) => text.replace(keywordPattern(), (_m, _id, label) => label);
6
+ const htmlInline = (text, ctx) => ctx
7
+ .escape(stripKeywords(text))
8
+ .replace(boldPattern(), (_m, inner) => `<strong>${inner}</strong>`);
9
+ const htmlCite = (c, ctx) => (c ? ctx.cite(c) : '');
10
+ const mdCite = (c, ctx) => (c ? ctx.cite(c) : '');
11
+ function listHtml(items, ctx) {
12
+ return `<ul>${items
13
+ .map((it) => `<li>${htmlInline(it.text, ctx)}${htmlCite(it.cite, ctx)}${it.children?.length ? listHtml(it.children, ctx) : ''}</li>`)
14
+ .join('')}</ul>`;
15
+ }
16
+ const TONE_LABEL = {
17
+ positive: '긍정',
18
+ negative: '부정',
19
+ neutral: '중립',
20
+ question: '질문',
21
+ };
22
+ function outlineHtml(node, ctx) {
23
+ const kids = node.children?.length
24
+ ? `<ul>${node.children.map((c) => outlineHtml(c, ctx)).join('')}</ul>`
25
+ : '';
26
+ return `<li>${ctx.escape(node.label)}${node.cite ? ` ${ctx.time(node.cite)}` : ''}${kids}</li>`;
27
+ }
28
+ function outlineMd(node, ctx, depth = 0) {
29
+ return [
30
+ `${' '.repeat(depth)}- ${mdInline(node.label)}${node.cite ? ` ${ctx.time(node.cite)}` : ''}`,
31
+ ...(node.children ?? []).flatMap((c) => outlineMd(c, ctx, depth + 1)),
32
+ ];
33
+ }
34
+ /** 그림 하나와 확대 버튼, 스크립트 없이도 읽히는 목록. 대섹션 도식도 이 틀을 쓴다 */
35
+ export function diagramFigure(svg, outline, caption) {
36
+ return `<figure class="diagram"><div class="dg-scroll">${svg}</div><div class="dg-bar">${caption ? `<span>${caption}</span>` : ''}<button type="button" class="zoom-btn" data-zoom>크게 보기</button></div><details class="dg-outline"><summary>목록으로 보기</summary>${outline}</details></figure>`;
37
+ }
38
+ export const DIAGRAM_LABEL = {
39
+ flow: '흐름도',
40
+ cycle: '순환도',
41
+ compare: '비교표',
42
+ tree: '구조도',
43
+ timeline: '타임라인',
44
+ matrix: '매트릭스',
45
+ causal: '인과도',
46
+ beforeAfter: '전후 비교',
47
+ };
48
+ const BEFORE = '전';
49
+ const AFTER = '후';
50
+ /** 매트릭스 칸 이름. 가로축 값을 먼저 쓴다 */
51
+ const matrixCellNames = (d) => [
52
+ `${d.x.low}, ${d.y.high}`,
53
+ `${d.x.high}, ${d.y.high}`,
54
+ `${d.x.low}, ${d.y.low}`,
55
+ `${d.x.high}, ${d.y.low}`,
56
+ ];
57
+ /** 인과도를 원인, 현상, 결과를 가지로 둔 트리로 바꾼다. 목록 보기와 마크다운이 같은 꼴을 쓴다 */
58
+ const causalOutline = (d) => [
59
+ ...(d.inputs.length ? [{ label: '원인', children: d.inputs }] : []),
60
+ { ...d.center, label: `현상: ${d.center.label}` },
61
+ ...(d.outputs.length ? [{ label: '결과', children: d.outputs }] : []),
62
+ ];
63
+ /** 그림과 스크립트 없이 읽히는 목록. aria는 그림의 aria-label이다 */
64
+ export function diagramParts(d, aria, ctx) {
65
+ const opts = { sec: ctx.sec };
66
+ const li = (n) => outlineHtml(n, ctx);
67
+ switch (d.kind) {
68
+ case 'flow':
69
+ return { svg: flowSvg(d.steps, opts, aria), outline: `<ol>${d.steps.map(li).join('')}</ol>` };
70
+ case 'cycle':
71
+ return {
72
+ svg: cycleSvg(d.steps, opts, aria),
73
+ outline: `<ol>${d.steps.map(li).join('')}</ol>`,
74
+ };
75
+ case 'compare':
76
+ return {
77
+ svg: compareSvg(d.columns, opts, aria),
78
+ outline: `<ul>${d.columns.map((c) => li({ label: c.title, children: c.items })).join('')}</ul>`,
79
+ };
80
+ case 'tree':
81
+ return { svg: treeSvg(d.root, opts, aria), outline: `<ul>${li(d.root)}</ul>` };
82
+ case 'timeline':
83
+ return {
84
+ svg: timelineSvg(d.events, opts, aria),
85
+ outline: `<ol>${d.events
86
+ .map((e) => `<li><b>${ctx.escape(e.when)}</b> ${ctx.escape(e.label)}${e.cite ? ` ${ctx.time(e.cite)}` : ''}</li>`)
87
+ .join('')}</ol>`,
88
+ };
89
+ case 'matrix': {
90
+ const names = matrixCellNames(d);
91
+ return {
92
+ svg: matrixSvg(d.x, d.y, d.cells, opts, aria),
93
+ outline: `<ul>${d.cells.map((c, k) => li({ label: names[k], children: c })).join('')}</ul>`,
94
+ };
95
+ }
96
+ case 'causal':
97
+ return {
98
+ svg: causalSvg(d.inputs, d.center, d.outputs, opts, aria),
99
+ outline: `<ul>${causalOutline(d).map(li).join('')}</ul>`,
100
+ };
101
+ case 'beforeAfter':
102
+ return {
103
+ svg: beforeAfterSvg(d.before, d.after, opts, aria),
104
+ outline: `<ul>${li({ label: d.before.title ?? BEFORE, children: d.before.items })}${li({
105
+ label: d.after.title ?? AFTER,
106
+ children: d.after.items,
107
+ })}</ul>`,
108
+ };
109
+ default: {
110
+ const never = d;
111
+ throw new Error(`알 수 없는 도식: ${String(never)}`);
112
+ }
113
+ }
114
+ }
115
+ /** 대섹션 도식. title은 그림의 aria-label에 붙는 대섹션 제목이다 */
116
+ export function sectionDiagramHtml(d, title, ctx) {
117
+ const { svg, outline } = diagramParts(d, `${title} ${DIAGRAM_LABEL[d.kind]}`, ctx);
118
+ return diagramFigure(svg, outline, d.caption ? ctx.escape(d.caption) : undefined);
119
+ }
120
+ /** 마크다운에는 그림 대신 목록이나 표로 옮긴다. 순서가 있는 흐름과 순환, 타임라인은 번호를 단다 */
121
+ export function sectionDiagramMd(d, ctx) {
122
+ const head = d.caption ? [`*${DIAGRAM_LABEL[d.kind]}: ${mdInline(d.caption)}*`, ''] : [];
123
+ const at = (n) => (n.cite ? ` ${ctx.time(n.cite)}` : '');
124
+ const step = (n, k) => `${k + 1}. ${mdInline(n.label)}${at(n)}`;
125
+ switch (d.kind) {
126
+ case 'flow':
127
+ case 'cycle':
128
+ return [...head, ...d.steps.map(step), ''];
129
+ case 'compare':
130
+ return [
131
+ ...head,
132
+ ...d.columns.flatMap((c) => outlineMd({ label: c.title, children: c.items }, ctx)),
133
+ '',
134
+ ];
135
+ case 'tree':
136
+ return [...head, ...outlineMd(d.root, ctx), ''];
137
+ case 'timeline':
138
+ return [
139
+ ...head,
140
+ ...d.events.map((e, k) => `${k + 1}. **${mdInline(e.when)}** ${mdInline(e.label)}${at(e)}`),
141
+ '',
142
+ ];
143
+ case 'matrix': {
144
+ // 칸 안 여러 노드는 표 한 칸에 쉼표로 잇는다. mdInline이 |를 이스케이프해서 표가 안 깨진다
145
+ const cell = (k) => d.cells[k].map((n) => `${mdInline(n.label)}${at(n)}`).join(', ') || ' ';
146
+ return [
147
+ ...head,
148
+ `| | ${mdInline(d.x.low)} | ${mdInline(d.x.high)} |`,
149
+ '| --- | --- | --- |',
150
+ `| ${mdInline(d.y.high)} | ${cell(0)} | ${cell(1)} |`,
151
+ `| ${mdInline(d.y.low)} | ${cell(2)} | ${cell(3)} |`,
152
+ '',
153
+ ];
154
+ }
155
+ case 'causal':
156
+ return [...head, ...causalOutline(d).flatMap((n) => outlineMd(n, ctx)), ''];
157
+ case 'beforeAfter':
158
+ return [
159
+ ...head,
160
+ ...outlineMd({ label: d.before.title ?? BEFORE, children: d.before.items }, ctx),
161
+ ...outlineMd({ label: d.after.title ?? AFTER, children: d.after.items }, ctx),
162
+ '',
163
+ ];
164
+ default: {
165
+ const never = d;
166
+ throw new Error(`알 수 없는 도식: ${String(never)}`);
167
+ }
168
+ }
169
+ }
170
+ // 댓글과 자막 인용은 남이 쓴 글이라 마크다운 문법으로 읽히면 링크나 HTML이 끼어든다. 문법 글자를 무력화한다
171
+ // `~`는 '1~2개와 3~4개'가 취소선으로 바뀌어서 함께 막는다
172
+ // 맨 URL은 보이는 글자가 곧 목적지라 숨은 링크가 아니므로 두고 링크 문법과 HTML만 막는다
173
+ const mdVerbatim = (text) => text.replace(/[\\`*_[\]<>#|&~]/g, (ch) => `\\${ch}`);
174
+ // 한 줄로 쓰는 칸에 개행이 섞이면 목록이나 인용 밖으로 빠져나간다. HTML도 이 칸들의 개행을 공백으로 접어 보여준다
175
+ const oneLine = (text) => text.replace(/\s+/g, ' ').trim();
176
+ // 줄 첫머리의 `-`, `+`, `1.`, `1)`은 뒤에 공백이 오거나 줄이 끝나면 목록으로, `---`와 `===`는 구분선이나 제목 밑줄로 읽힌다
177
+ // HTML은 평문으로 보여줘서 맞춘다. `-5도`나 `3.5배`는 문법이 아니라서 그대로 둔다
178
+ const lineHead = (text) => text
179
+ .replace(/^([-+])(?=\s|$|-)/, '\\$1')
180
+ .replace(/^(=+)(?=[ \t]*$)/, '\\$1')
181
+ .replace(/^(\d{1,9})([.)])(?=\s|$)/, '$1\\$2');
182
+ // 제목, 라벨, 이름 칸도 자막과 댓글에서 나온 값이다. lint가 `**`를 막는 칸이라 문법 글자를 전부 이스케이프해도 잃는 서식이 없다
183
+ export const mdInline = (text) => lineHead(mdVerbatim(oneLine(text)));
184
+ // 본문 칸도 자막에서 나온 글이라 링크나 HTML, 줄 머리 문법이 끼어들 수 있다. HTML 쪽처럼 굵게만 살린다
185
+ // 개행은 굵게를 가른 뒤에 접는다. 먼저 접으면 줄을 넘는 `**`가 마크다운에서만 굵게가 된다
186
+ const mdBody = (text) => lineHead(oneLine(stripKeywords(text)
187
+ .split(boldPattern())
188
+ .map((part, k) => (k % 2 ? `**${mdVerbatim(part)}**` : mdVerbatim(part)))
189
+ .join('')));
190
+ // 인용 원문은 줄을 살리므로 줄마다 첫머리를 막는다. 마크다운은 홑 `\r`도 줄 끝으로 읽어서 같이 가른다
191
+ // 앞 공백이 4칸이면 코드 블록이 되고 뒤 공백은 `===` 밑줄 판정을 가려서 양끝을 걷는다
192
+ const quoteLines = (text) => text.split(/\r\n|\r|\n/).map((l) => `> ${lineHead(l.trim())}`.trimEnd());
193
+ function listMd(items, ctx, depth = 0) {
194
+ return items.flatMap((it) => [
195
+ `${' '.repeat(depth)}- ${mdBody(it.text)}${mdCite(it.cite, ctx)}`,
196
+ ...(it.children ? listMd(it.children, ctx, depth + 1) : []),
197
+ ]);
198
+ }
199
+ /** id는 블록마다 겹치지 않는 접두어다. 퀴즈 라디오 그룹 이름에 쓴다 */
200
+ export function blockHtml(block, ctx, id = 'b') {
201
+ switch (block.type) {
202
+ case 'heading':
203
+ return `<h3>${ctx.escape(block.text)}</h3>`;
204
+ case 'text':
205
+ return `<p>${htmlInline(block.text, ctx)}${htmlCite(block.cite, ctx)}</p>`;
206
+ case 'list':
207
+ return `${block.title ? `<h4>${ctx.escape(block.title)}</h4>` : ''}${listHtml(block.items, ctx)}`;
208
+ case 'quote':
209
+ return `<figure class="quote"><blockquote>${ctx.escape(block.text)}${ctx.cite(block.cite)}</blockquote>${block.translation ? `<p class="quote-tr">${htmlInline(block.translation, ctx)}</p>` : ''}${block.speaker || block.note
210
+ ? `<figcaption>${block.speaker ? `<b>${ctx.escape(block.speaker)}</b>` : ''}${block.note ? `<span>${htmlInline(block.note, ctx)}</span>` : ''}</figcaption>`
211
+ : ''}</figure>`;
212
+ case 'timestamps':
213
+ return `<ol class="ext-toc">${block.items
214
+ .map((it) => `<li>${ctx.time(it.cite)}<div><b>${ctx.escape(it.title)}</b>${it.summary ? `<p>${htmlInline(it.summary, ctx)}</p>` : ''}</div></li>`)
215
+ .join('')}</ol>`;
216
+ case 'actions':
217
+ return `<ul class="actions">${block.items
218
+ .map((it) => {
219
+ const meta = [
220
+ it.owner ? `<span>담당 ${ctx.escape(it.owner)}</span>` : '',
221
+ it.due ? `<span>기한 ${ctx.escape(it.due)}</span>` : '',
222
+ ].join('');
223
+ return `<li><span class="box" aria-hidden="true"></span><div>${htmlInline(it.task, ctx)}${htmlCite(it.cite, ctx)}${meta ? `<small>${meta}</small>` : ''}</div></li>`;
224
+ })
225
+ .join('')}</ul>`;
226
+ case 'qa':
227
+ return `<dl class="qa">${block.items
228
+ .map((it) => `<dt>${htmlInline(it.question, ctx)}</dt><dd>${htmlInline(it.answer, ctx)}${htmlCite(it.cite, ctx)}</dd>`)
229
+ .join('')}</dl>`;
230
+ case 'flashcards':
231
+ return `<div class="cards">${block.cards
232
+ .map((c) => `<details class="card"><summary>${htmlInline(c.front, ctx)}</summary><div class="card-back">${htmlInline(c.back, ctx)}${htmlCite(c.cite, ctx)}</div></details>`)
233
+ .join('')}</div>`;
234
+ case 'quiz':
235
+ return `<ol class="quiz">${block.questions
236
+ .map((q, k) => {
237
+ const name = ctx.escape(`${id}-q${k}`);
238
+ const choices = q.choices
239
+ .map((c, ci) => `<label class="quiz-choice"><input type="radio" name="${name}" value="${ci}"> <span>${htmlInline(c, ctx)}</span></label>`)
240
+ .join('');
241
+ const right = q.choices[q.answer] ?? '';
242
+ return `<li><fieldset class="quiz-q" data-answer="${q.answer}"><legend>${htmlInline(q.question, ctx)}</legend>${choices}<button type="button" class="quiz-check">정답 확인</button><p class="quiz-result" role="status" aria-live="polite"></p><div class="quiz-exp" hidden><p><b>정답 ${q.answer + 1}번</b> ${htmlInline(right, ctx)}</p><p>${htmlInline(q.explanation, ctx)}${htmlCite(q.cite, ctx)}</p></div></fieldset></li>`;
243
+ })
244
+ .join('')}</ol>`;
245
+ case 'mindmap':
246
+ return diagramFigure(treeSvg(block.root, { sec: ctx.sec }, `${block.root.label} 마인드맵`), `<ul>${outlineHtml(block.root, ctx)}</ul>`);
247
+ case 'figure': {
248
+ const { svg, outline } = diagramParts(block.diagram, `${block.title} ${DIAGRAM_LABEL[block.diagram.kind]}`, ctx);
249
+ const caption = block.diagram.caption ? ctx.escape(block.diagram.caption) : undefined;
250
+ return `<article class="fig-card"><h3>${ctx.escape(block.title)}</h3>${diagramFigure(svg, outline, caption)}<p class="fig-exp">${htmlInline(block.explanation, ctx)}${ctx.cite(block.cite)}</p></article>`;
251
+ }
252
+ case 'comments': {
253
+ const groups = block.groups
254
+ .map((g) => {
255
+ const pct = block.total > 0 ? Math.min(100, Math.round((g.count / block.total) * 100)) : 0;
256
+ const examples = g.examples.length
257
+ ? `<ul class="cm-ex">${g.examples.map((x) => `<li><q>${ctx.escape(x.text)}</q></li>`).join('')}</ul>`
258
+ : '';
259
+ return `<li class="cm-group cm-${g.tone}"><div class="cm-head"><b>${ctx.escape(g.title)}</b><span class="cm-tone">${TONE_LABEL[g.tone]}</span><span class="cm-count">${g.count}개</span></div><div class="cm-bar" aria-hidden="true"><i style="width:${pct}%"></i></div><p>${htmlInline(g.summary, ctx)}</p>${examples}</li>`;
260
+ })
261
+ .join('');
262
+ return `<div class="comments"><p class="cm-overview">${htmlInline(block.overview, ctx)}</p><p class="cm-meta">분석한 댓글 ${block.total}개</p><ul class="cm-groups">${groups}</ul></div>`;
263
+ }
264
+ default: {
265
+ const never = block;
266
+ throw new Error(`모르는 블록: ${JSON.stringify(never)}`);
267
+ }
268
+ }
269
+ }
270
+ export function blockMarkdown(block, ctx) {
271
+ switch (block.type) {
272
+ case 'heading':
273
+ return [`## ${mdInline(block.text)}`, ''];
274
+ case 'text':
275
+ return [`${mdBody(block.text)}${mdCite(block.cite, ctx)}`, ''];
276
+ case 'list':
277
+ return [
278
+ ...(block.title ? [`**${mdInline(block.title)}**`, ''] : []),
279
+ ...listMd(block.items, ctx),
280
+ '',
281
+ ];
282
+ case 'quote': {
283
+ const by = [
284
+ block.speaker ? `— ${mdInline(block.speaker)}` : '',
285
+ block.note ? mdBody(block.note) : '',
286
+ ]
287
+ .filter(Boolean)
288
+ .join(', ');
289
+ const text = quoteLines(mdVerbatim(block.text));
290
+ text[text.length - 1] += ctx.cite(block.cite);
291
+ return [
292
+ ...text,
293
+ ...(block.translation ? ['>', ...quoteLines(mdBody(block.translation))] : []),
294
+ ...(by ? ['>', ...quoteLines(by)] : []),
295
+ '',
296
+ ];
297
+ }
298
+ case 'timestamps':
299
+ return [
300
+ ...block.items.map((it) => `- ${ctx.time(it.cite)} **${mdInline(it.title)}**${it.summary ? ` ${mdBody(it.summary)}` : ''}`),
301
+ '',
302
+ ];
303
+ case 'actions':
304
+ return [
305
+ ...block.items.map((it) => {
306
+ const meta = [
307
+ it.owner ? `담당 ${mdInline(it.owner)}` : '',
308
+ it.due ? `기한 ${mdInline(it.due)}` : '',
309
+ ]
310
+ .filter(Boolean)
311
+ .join(', ');
312
+ return `- [ ] ${mdBody(it.task)}${meta ? ` (${meta})` : ''}${mdCite(it.cite, ctx)}`;
313
+ }),
314
+ '',
315
+ ];
316
+ case 'qa':
317
+ return block.items.flatMap((it) => [
318
+ `**Q. ${mdBody(it.question)}**`,
319
+ '',
320
+ `${mdBody(it.answer)}${mdCite(it.cite, ctx)}`,
321
+ '',
322
+ ]);
323
+ case 'flashcards':
324
+ return [
325
+ ...block.cards.flatMap((c) => [
326
+ `- Q. ${mdBody(c.front)}`,
327
+ ` - A. ${mdBody(c.back)}${mdCite(c.cite, ctx)}`,
328
+ ]),
329
+ '',
330
+ ];
331
+ case 'quiz':
332
+ return block.questions.flatMap((q, k) => [
333
+ `**${k + 1}. ${mdBody(q.question)}**`,
334
+ '',
335
+ ...q.choices.map((c, ci) => `- (${ci + 1}) ${mdBody(c)}`),
336
+ '',
337
+ `> 정답 (${q.answer + 1}) ${mdBody(q.choices[q.answer] ?? '')}. ${mdBody(q.explanation)}${mdCite(q.cite, ctx)}`,
338
+ '',
339
+ ]);
340
+ case 'mindmap':
341
+ return [...outlineMd(block.root, ctx), ''];
342
+ case 'figure':
343
+ return [
344
+ `### ${mdInline(block.title)}`,
345
+ '',
346
+ ...sectionDiagramMd(block.diagram, ctx),
347
+ `${mdBody(block.explanation)}${ctx.cite(block.cite)}`,
348
+ '',
349
+ ];
350
+ case 'comments':
351
+ return [
352
+ mdBody(block.overview),
353
+ '',
354
+ `분석한 댓글 ${block.total}개`,
355
+ '',
356
+ ...block.groups.flatMap((g) => [
357
+ `**${mdInline(g.title)}** (${TONE_LABEL[g.tone]}, ${g.count}개)`,
358
+ '',
359
+ mdBody(g.summary),
360
+ '',
361
+ ...g.examples.flatMap((x) => [...quoteLines(mdVerbatim(x.text)), '']),
362
+ ]),
363
+ ];
364
+ default: {
365
+ const never = block;
366
+ throw new Error(`모르는 블록: ${JSON.stringify(never)}`);
367
+ }
368
+ }
369
+ }
370
+ /** 탭 id와 패널 id. 키에 들어가는 글자(영숫자, -, .)는 id에 그대로 써도 된다 */
371
+ export const extensionPanelId = (ext) => `ext-${extensionKey(ext)}`;
372
+ export function extensionHtml(ext, ctx) {
373
+ const id = extensionPanelId(ext);
374
+ return `<section class="ext" id="${ctx.escape(id)}" role="tabpanel" aria-labelledby="tab-${ctx.escape(id)}" lang="${ctx.escape(ext.lang)}" tabindex="0" hidden><h2>${ctx.escape(ext.title)}</h2>${ext.blocks
375
+ .map((b, bi) => blockHtml(b, ctx, `${id}-b${bi}`))
376
+ .join('')}</section>`;
377
+ }
378
+ //# sourceMappingURL=render-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-blocks.js","sourceRoot":"","sources":["../../../src/digest/render-blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type Digest, type Transcript } from './schema.js';
2
+ import type { DigestTemplate } from './templates.js';
3
+ export interface RenderHtmlOptions {
4
+ /** 프레임 파일이 있는지. 상대 경로 모드에서 없는 프레임은 자리를 만들지 않는다 */
5
+ frameExists?: (fileName: string) => boolean;
6
+ /** 켜면 프레임을 data URI로 싣는다. 파일 하나만 들고 다닐 때 쓴다 */
7
+ inlineFrames?: boolean;
8
+ loadFrame?: (fileName: string) => Buffer | null;
9
+ /** "+ 더 만들기" 메뉴에 띄울 템플릿. 이미 만든 확장의 템플릿은 메뉴에서 뺀다 */
10
+ templates?: Pick<DigestTemplate, 'id' | 'title' | 'description'>[];
11
+ }
12
+ export interface RenderHtmlResult {
13
+ html: string;
14
+ warnings: string[];
15
+ }
16
+ export declare function embedJson(value: unknown): string;
17
+ /**
18
+ * digest.json을 뷰어 HTML 한 장으로 바꾼다. LLM을 부르지 않는다.
19
+ * 본문 글자는 escape한 뒤 굵게와 키워드 마커 두 가지만 태그로 바꾼다.
20
+ */
21
+ export declare function renderDigestHtml(digest: Digest, transcript: Transcript, opts?: RenderHtmlOptions): RenderHtmlResult;
22
+ //# sourceMappingURL=render-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-html.d.ts","sourceRoot":"","sources":["../../../src/digest/render-html.ts"],"names":[],"mappings":"AAYA,OAAO,EAOL,KAAK,MAAM,EAKX,KAAK,UAAU,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAChD,mDAAmD;IACnD,SAAS,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA6CD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,IAAI,GAAE,iBAAsB,GAC3B,gBAAgB,CAgTlB"}