@heripo/research-radar 3.3.5 → 3.3.7
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/NOTICE +1 -1
- package/README.md +12 -4
- package/dist/index.cjs +13 -13
- package/dist/index.d.ts +1 -1
- package/dist/index.js +13 -13
- package/package.json +12 -12
package/NOTICE
CHANGED
|
@@ -33,7 +33,7 @@ The following names, marks, and logos are trademarks of kimhongyeon:
|
|
|
33
33
|
- "heripo" and "헤리포"
|
|
34
34
|
- "Research Radar" and "리서치 레이더"
|
|
35
35
|
- The heripo logo and associated visual designs
|
|
36
|
-
- Domain name: heripo.
|
|
36
|
+
- Domain name: heripo.app
|
|
37
37
|
|
|
38
38
|
While the source code is freely available under the Apache 2.0 license,
|
|
39
39
|
use of these trademarks requires explicit permission from the trademark owner.
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ English | [한국어](./README-ko.md)
|
|
|
13
13
|
|
|
14
14
|
## What is this?
|
|
15
15
|
|
|
16
|
-
An AI-powered newsletter service for Korean cultural heritage. Built on [`@llm-newsletter-kit/core`](https://github.com/heripo-lab/llm-newsletter-kit-core), it's both a production service ([live at heripo.
|
|
16
|
+
An AI-powered newsletter service for Korean cultural heritage. Built on [`@llm-newsletter-kit/core`](https://github.com/heripo-lab/llm-newsletter-kit-core), it's both a production service ([live at heripo.app](https://heripo.app/research-radar/subscribe)) and a reference implementation showing how to build automated newsletters with LLMs.
|
|
17
17
|
|
|
18
18
|
**Production metrics**:
|
|
19
19
|
- **Cost**: $0.2-1 USD per issue
|
|
@@ -27,13 +27,14 @@ An AI-powered newsletter service for Korean cultural heritage. Built on [`@llm-n
|
|
|
27
27
|
- Multi LLM providers: OpenAI GPT-5 (analysis) + selectable content generation (OpenAI / Anthropic / Google)
|
|
28
28
|
- Built-in retries, chain options, preview emails
|
|
29
29
|
|
|
30
|
-
**Links**: [Live service](https://heripo.
|
|
30
|
+
**Links**: [Live service](https://heripo.app/research-radar/subscribe) • [Newsletter example](https://heripo.app/research-radar-newsletter-example.html) • [Core engine](https://github.com/heripo-lab/llm-newsletter-kit-core)
|
|
31
31
|
|
|
32
32
|
## Background
|
|
33
33
|
|
|
34
34
|
Created by archaeologist-turned-engineer Hongyeon Kim to answer: "Why must research rely on labor-intensive manual work?"
|
|
35
35
|
|
|
36
|
-
A personal script evolved into a production service after completing research on [Archaeological Informatization Using LLMs](https://poc.heripo.
|
|
36
|
+
A personal script evolved into a production service after completing research on [Archaeological Informatization Using LLMs](https://poc.heripo.org). This repository open-sources the running service so developers can build
|
|
37
|
+
domain-specific newsletters without starting from scratch.
|
|
37
38
|
|
|
38
39
|
## License
|
|
39
40
|
|
|
@@ -279,4 +280,11 @@ Code-based automation delivers **superior output quality** through advanced AI t
|
|
|
279
280
|
## Related Projects
|
|
280
281
|
|
|
281
282
|
- [`@llm-newsletter-kit/core`](https://github.com/heripo-lab/llm-newsletter-kit-core) — Domain-agnostic newsletter engine
|
|
282
|
-
- [Archaeological Informatization Using LLMs](https://poc.heripo.
|
|
283
|
+
- [Archaeological Informatization Using LLMs](https://poc.heripo.org) — Academic research (Korean)
|
|
284
|
+
|
|
285
|
+
## Sponsor
|
|
286
|
+
|
|
287
|
+
If you'd like to support heripo lab's open-source research, you can sponsor us through:
|
|
288
|
+
|
|
289
|
+
- [Open Collective](https://opencollective.com/heripo-project) for general project sponsorship.
|
|
290
|
+
- [fairy.hada.io/@heripo](https://fairy.hada.io/@heripo) for Korean individual supporters who prefer KRW payments.
|
package/dist/index.cjs
CHANGED
|
@@ -1758,7 +1758,7 @@ const contentOptions = {
|
|
|
1758
1758
|
*/
|
|
1759
1759
|
const newsletterConfig = {
|
|
1760
1760
|
brandName: '문화유산 리서치 레이더',
|
|
1761
|
-
subscribePageUrl: 'https://heripo.
|
|
1761
|
+
subscribePageUrl: 'https://heripo.app/research-radar/subscribe',
|
|
1762
1762
|
publicationCriteria: {
|
|
1763
1763
|
minimumArticleCountForIssue: 5,
|
|
1764
1764
|
priorityArticleScoreThreshold: 8,
|
|
@@ -1927,11 +1927,11 @@ const sanitizeText = (str) => purify.sanitize(str, { ALLOWED_TAGS: [] });
|
|
|
1927
1927
|
const heripoLogoHtml = (imgMarginBottom) => `
|
|
1928
1928
|
<div style="margin-bottom: 32px;">
|
|
1929
1929
|
<div style="text-align: left; display: block;" class="light-logo">
|
|
1930
|
-
<img src="https://heripo.
|
|
1930
|
+
<img src="https://heripo.app/heripo-logo.png" width="150" alt="로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
|
|
1931
1931
|
</div>
|
|
1932
1932
|
<!--[if !mso]><!-->
|
|
1933
1933
|
<div style="text-align: left; display: none;" class="dark-logo">
|
|
1934
|
-
<img src="https://heripo.
|
|
1934
|
+
<img src="https://heripo.app/heripo-logo-dark.png" width="150" alt="다크모드 로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
|
|
1935
1935
|
</div>
|
|
1936
1936
|
<!--<![endif]-->
|
|
1937
1937
|
</div>`;
|
|
@@ -1947,7 +1947,7 @@ const platformIntroHtml = () => `
|
|
|
1947
1947
|
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">발굴조사보고서(PDF) 속에 갇힌 텍스트와 도면을 분석 가능한 구조화된 데이터로 전환하여, 연구자가 자료를 보다 체계적으로 탐색하고 재사용할 수 있는 인프라를 구축하고 있습니다.</p>
|
|
1948
1948
|
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
|
|
1949
1949
|
color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heripo-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
|
|
1950
|
-
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.
|
|
1950
|
+
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.org" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>`;
|
|
1951
1951
|
/**
|
|
1952
1952
|
* "Powered by LLM Newsletter Kit · View Source" footer line.
|
|
1953
1953
|
*/
|
|
@@ -2400,7 +2400,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
|
|
|
2400
2400
|
${options?.isKrasNewsletter
|
|
2401
2401
|
? `<!-- KRAS 50주년 헤더 -->
|
|
2402
2402
|
<div style="text-align: center; margin-bottom: 28px;">
|
|
2403
|
-
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.
|
|
2403
|
+
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
|
|
2404
2404
|
<div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 8px;">한국고고학회 뉴스레터</div>
|
|
2405
2405
|
<div class="kras-header-date" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; color: #666666; line-height: 1.5;">${options?.displayDate ?? ''}</div>
|
|
2406
2406
|
</div>
|
|
@@ -2410,7 +2410,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
|
|
|
2410
2410
|
`}
|
|
2411
2411
|
|
|
2412
2412
|
${options?.krasNewsMarkdown
|
|
2413
|
-
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.
|
|
2413
|
+
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 소식</h2>` +
|
|
2414
2414
|
safeMarkdown2Html(`${options.krasNewsMarkdown}
|
|
2415
2415
|
|
|
2416
2416
|
---
|
|
@@ -2442,7 +2442,7 @@ ${options.heripolabNewsMarkdown}
|
|
|
2442
2442
|
<hr style="border: 0; border-top: 2px solid #D2691E; margin: 32px 0;">
|
|
2443
2443
|
|
|
2444
2444
|
${options?.krasNoticeMarkdown
|
|
2445
|
-
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.
|
|
2445
|
+
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 안내</h2>` +
|
|
2446
2446
|
safeMarkdown2Html(`${options.krasNoticeMarkdown}
|
|
2447
2447
|
|
|
2448
2448
|
---
|
|
@@ -2487,8 +2487,8 @@ ${platformIntroHtml()}
|
|
|
2487
2487
|
</tr>
|
|
2488
2488
|
<tr>
|
|
2489
2489
|
<td align="center" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 30px 20px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 12px; line-height: 1.5; color: #888888;">
|
|
2490
|
-
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.
|
|
2491
|
-
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.
|
|
2490
|
+
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.org</p>
|
|
2491
|
+
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.app에서 뉴스레터를 구독하신 분들과 한국고고학회 회원에게 발송됩니다.' : '이 메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.'}<br>
|
|
2492
2492
|
더 이상 이메일을 받고 싶지 않으시면 <a href="{{{RESEND_UNSUBSCRIBE_URL}}}" target="_blank" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; font-weight: bold; transition: color 0.2s; color: #888888; text-decoration: underline;" class="footer-link">여기에서 수신 거부</a>하세요.</p>
|
|
2493
2493
|
${poweredByFooterHtml()}
|
|
2494
2494
|
</td>
|
|
@@ -2860,7 +2860,7 @@ async function generateNewsletter(dependencies) {
|
|
|
2860
2860
|
*/
|
|
2861
2861
|
function generateWelcomeHTML(id, name, options) {
|
|
2862
2862
|
const isKras = options?.isKrasNewsletter ?? false;
|
|
2863
|
-
const siteUrl = options?.siteUrl ?? 'https://heripo.
|
|
2863
|
+
const siteUrl = options?.siteUrl ?? 'https://heripo.app';
|
|
2864
2864
|
const safeName = sanitizeText(name);
|
|
2865
2865
|
const unsubscribeUrl = `${siteUrl}/research-radar/unsubscribe?id=${id}`;
|
|
2866
2866
|
return juice(createWelcomeHtmlRaw(safeName, isKras, siteUrl, unsubscribeUrl));
|
|
@@ -2872,7 +2872,7 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
|
|
|
2872
2872
|
const headerHtml = isKras
|
|
2873
2873
|
? `<!-- KRAS 50주년 헤더 -->
|
|
2874
2874
|
<div style="text-align: center; margin-bottom: 36px;">
|
|
2875
|
-
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.
|
|
2875
|
+
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
|
|
2876
2876
|
<div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 0;">한국고고학회 뉴스레터</div>
|
|
2877
2877
|
</div>
|
|
2878
2878
|
<hr class="kras-header-divider" style="border: 0; border-top: 2px solid #D2691E; margin: 0 0 32px 0;">`
|
|
@@ -2899,8 +2899,8 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
|
|
|
2899
2899
|
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0;"><a href="${unsubscribeUrl}" style="color: #dc2626; font-weight: bold;">🚫 수신 거부하기</a></p>
|
|
2900
2900
|
</blockquote>`;
|
|
2901
2901
|
const footerDisclaimerText = isKras
|
|
2902
|
-
? '이 이메일은 heripo.
|
|
2903
|
-
: '이 이메일은 heripo.
|
|
2902
|
+
? '이 이메일은 heripo.app에서 한국고고학회 뉴스레터를 구독하신 분들에게 발송됩니다.'
|
|
2903
|
+
: '이 이메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.';
|
|
2904
2904
|
const footerUnsubscribeHtml = isKras
|
|
2905
2905
|
? `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`
|
|
2906
2906
|
: `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`;
|
package/dist/index.d.ts
CHANGED
|
@@ -128,7 +128,7 @@ type NewsletterTemplateOptions = DefaultNewsletterTemplateOptions | KrasNewslett
|
|
|
128
128
|
interface WelcomeTemplateOptions {
|
|
129
129
|
/** When true, apply KRAS (Korean Archaeological Society) branding */
|
|
130
130
|
isKrasNewsletter?: boolean;
|
|
131
|
-
/** Site base URL for constructing links (default: 'https://heripo.
|
|
131
|
+
/** Site base URL for constructing links (default: 'https://heripo.app') */
|
|
132
132
|
siteUrl?: string;
|
|
133
133
|
}
|
|
134
134
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1737,7 +1737,7 @@ const contentOptions = {
|
|
|
1737
1737
|
*/
|
|
1738
1738
|
const newsletterConfig = {
|
|
1739
1739
|
brandName: '문화유산 리서치 레이더',
|
|
1740
|
-
subscribePageUrl: 'https://heripo.
|
|
1740
|
+
subscribePageUrl: 'https://heripo.app/research-radar/subscribe',
|
|
1741
1741
|
publicationCriteria: {
|
|
1742
1742
|
minimumArticleCountForIssue: 5,
|
|
1743
1743
|
priorityArticleScoreThreshold: 8,
|
|
@@ -1906,11 +1906,11 @@ const sanitizeText = (str) => purify.sanitize(str, { ALLOWED_TAGS: [] });
|
|
|
1906
1906
|
const heripoLogoHtml = (imgMarginBottom) => `
|
|
1907
1907
|
<div style="margin-bottom: 32px;">
|
|
1908
1908
|
<div style="text-align: left; display: block;" class="light-logo">
|
|
1909
|
-
<img src="https://heripo.
|
|
1909
|
+
<img src="https://heripo.app/heripo-logo.png" width="150" alt="로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
|
|
1910
1910
|
</div>
|
|
1911
1911
|
<!--[if !mso]><!-->
|
|
1912
1912
|
<div style="text-align: left; display: none;" class="dark-logo">
|
|
1913
|
-
<img src="https://heripo.
|
|
1913
|
+
<img src="https://heripo.app/heripo-logo-dark.png" width="150" alt="다크모드 로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
|
|
1914
1914
|
</div>
|
|
1915
1915
|
<!--<![endif]-->
|
|
1916
1916
|
</div>`;
|
|
@@ -1926,7 +1926,7 @@ const platformIntroHtml = () => `
|
|
|
1926
1926
|
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">발굴조사보고서(PDF) 속에 갇힌 텍스트와 도면을 분석 가능한 구조화된 데이터로 전환하여, 연구자가 자료를 보다 체계적으로 탐색하고 재사용할 수 있는 인프라를 구축하고 있습니다.</p>
|
|
1927
1927
|
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
|
|
1928
1928
|
color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heripo-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
|
|
1929
|
-
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.
|
|
1929
|
+
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.org" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>`;
|
|
1930
1930
|
/**
|
|
1931
1931
|
* "Powered by LLM Newsletter Kit · View Source" footer line.
|
|
1932
1932
|
*/
|
|
@@ -2379,7 +2379,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
|
|
|
2379
2379
|
${options?.isKrasNewsletter
|
|
2380
2380
|
? `<!-- KRAS 50주년 헤더 -->
|
|
2381
2381
|
<div style="text-align: center; margin-bottom: 28px;">
|
|
2382
|
-
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.
|
|
2382
|
+
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
|
|
2383
2383
|
<div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 8px;">한국고고학회 뉴스레터</div>
|
|
2384
2384
|
<div class="kras-header-date" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; color: #666666; line-height: 1.5;">${options?.displayDate ?? ''}</div>
|
|
2385
2385
|
</div>
|
|
@@ -2389,7 +2389,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
|
|
|
2389
2389
|
`}
|
|
2390
2390
|
|
|
2391
2391
|
${options?.krasNewsMarkdown
|
|
2392
|
-
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.
|
|
2392
|
+
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 소식</h2>` +
|
|
2393
2393
|
safeMarkdown2Html(`${options.krasNewsMarkdown}
|
|
2394
2394
|
|
|
2395
2395
|
---
|
|
@@ -2421,7 +2421,7 @@ ${options.heripolabNewsMarkdown}
|
|
|
2421
2421
|
<hr style="border: 0; border-top: 2px solid #D2691E; margin: 32px 0;">
|
|
2422
2422
|
|
|
2423
2423
|
${options?.krasNoticeMarkdown
|
|
2424
|
-
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.
|
|
2424
|
+
? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 안내</h2>` +
|
|
2425
2425
|
safeMarkdown2Html(`${options.krasNoticeMarkdown}
|
|
2426
2426
|
|
|
2427
2427
|
---
|
|
@@ -2466,8 +2466,8 @@ ${platformIntroHtml()}
|
|
|
2466
2466
|
</tr>
|
|
2467
2467
|
<tr>
|
|
2468
2468
|
<td align="center" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 30px 20px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 12px; line-height: 1.5; color: #888888;">
|
|
2469
|
-
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.
|
|
2470
|
-
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.
|
|
2469
|
+
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.org</p>
|
|
2470
|
+
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.app에서 뉴스레터를 구독하신 분들과 한국고고학회 회원에게 발송됩니다.' : '이 메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.'}<br>
|
|
2471
2471
|
더 이상 이메일을 받고 싶지 않으시면 <a href="{{{RESEND_UNSUBSCRIBE_URL}}}" target="_blank" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; font-weight: bold; transition: color 0.2s; color: #888888; text-decoration: underline;" class="footer-link">여기에서 수신 거부</a>하세요.</p>
|
|
2472
2472
|
${poweredByFooterHtml()}
|
|
2473
2473
|
</td>
|
|
@@ -2839,7 +2839,7 @@ async function generateNewsletter(dependencies) {
|
|
|
2839
2839
|
*/
|
|
2840
2840
|
function generateWelcomeHTML(id, name, options) {
|
|
2841
2841
|
const isKras = options?.isKrasNewsletter ?? false;
|
|
2842
|
-
const siteUrl = options?.siteUrl ?? 'https://heripo.
|
|
2842
|
+
const siteUrl = options?.siteUrl ?? 'https://heripo.app';
|
|
2843
2843
|
const safeName = sanitizeText(name);
|
|
2844
2844
|
const unsubscribeUrl = `${siteUrl}/research-radar/unsubscribe?id=${id}`;
|
|
2845
2845
|
return juice(createWelcomeHtmlRaw(safeName, isKras, siteUrl, unsubscribeUrl));
|
|
@@ -2851,7 +2851,7 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
|
|
|
2851
2851
|
const headerHtml = isKras
|
|
2852
2852
|
? `<!-- KRAS 50주년 헤더 -->
|
|
2853
2853
|
<div style="text-align: center; margin-bottom: 36px;">
|
|
2854
|
-
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.
|
|
2854
|
+
<div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
|
|
2855
2855
|
<div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 0;">한국고고학회 뉴스레터</div>
|
|
2856
2856
|
</div>
|
|
2857
2857
|
<hr class="kras-header-divider" style="border: 0; border-top: 2px solid #D2691E; margin: 0 0 32px 0;">`
|
|
@@ -2878,8 +2878,8 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
|
|
|
2878
2878
|
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0;"><a href="${unsubscribeUrl}" style="color: #dc2626; font-weight: bold;">🚫 수신 거부하기</a></p>
|
|
2879
2879
|
</blockquote>`;
|
|
2880
2880
|
const footerDisclaimerText = isKras
|
|
2881
|
-
? '이 이메일은 heripo.
|
|
2882
|
-
: '이 이메일은 heripo.
|
|
2881
|
+
? '이 이메일은 heripo.app에서 한국고고학회 뉴스레터를 구독하신 분들에게 발송됩니다.'
|
|
2882
|
+
: '이 이메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.';
|
|
2883
2883
|
const footerUnsubscribeHtml = isKras
|
|
2884
2884
|
? `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`
|
|
2885
2885
|
: `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@heripo/research-radar",
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "3.3.
|
|
5
|
+
"version": "3.3.7",
|
|
6
6
|
"description": "AI-driven intelligence for Korean cultural heritage. This package serves as both a ready-to-use newsletter service and a practical implementation example for the LLM-Newsletter-Kit.",
|
|
7
7
|
"main": "dist/index.cjs",
|
|
8
8
|
"module": "dist/index.js",
|
|
@@ -47,35 +47,35 @@
|
|
|
47
47
|
"author": "kimhongyeon",
|
|
48
48
|
"license": "Apache-2.0",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
51
|
-
"@ai-sdk/google": "^3.0.
|
|
52
|
-
"@ai-sdk/openai": "^3.0.
|
|
50
|
+
"@ai-sdk/anthropic": "^3.0.76",
|
|
51
|
+
"@ai-sdk/google": "^3.0.71",
|
|
52
|
+
"@ai-sdk/openai": "^3.0.63",
|
|
53
53
|
"cheerio": "^1.2.0",
|
|
54
|
-
"dompurify": "^3.4.
|
|
55
|
-
"jsdom": "^29.
|
|
54
|
+
"dompurify": "^3.4.2",
|
|
55
|
+
"jsdom": "^29.1.1",
|
|
56
56
|
"juice": "^11.1.1",
|
|
57
57
|
"safe-markdown2html": "^1.0.3",
|
|
58
58
|
"turndown": "^7.2.4"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@eslint/js": "^10.0.1",
|
|
62
|
-
"@llm-newsletter-kit/core": "^2.0.
|
|
62
|
+
"@llm-newsletter-kit/core": "^2.0.1",
|
|
63
63
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
64
64
|
"@types/express": "^5.0.6",
|
|
65
65
|
"@types/jsdom": "^28.0.1",
|
|
66
|
-
"@types/node": "^25.6.
|
|
66
|
+
"@types/node": "^25.6.2",
|
|
67
67
|
"@types/turndown": "^5.0.6",
|
|
68
|
-
"eslint": "^10.
|
|
68
|
+
"eslint": "^10.3.0",
|
|
69
69
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
70
70
|
"express": "^5.2.1",
|
|
71
71
|
"prettier": "^3.8.3",
|
|
72
72
|
"rimraf": "^6.1.3",
|
|
73
|
-
"rollup": "^4.60.
|
|
73
|
+
"rollup": "^4.60.3",
|
|
74
74
|
"rollup-plugin-dts": "^6.4.1",
|
|
75
75
|
"rollup-plugin-typescript2": "^0.37.0",
|
|
76
76
|
"tsx": "^4.21.0",
|
|
77
77
|
"typescript": "^6.0.3",
|
|
78
|
-
"typescript-eslint": "^8.
|
|
78
|
+
"typescript-eslint": "^8.59.2"
|
|
79
79
|
},
|
|
80
80
|
"repository": {
|
|
81
81
|
"type": "git",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"bugs": {
|
|
85
85
|
"url": "https://github.com/heripo-lab/heripo-research-radar/issues"
|
|
86
86
|
},
|
|
87
|
-
"homepage": "https://heripo.
|
|
87
|
+
"homepage": "https://heripo.app",
|
|
88
88
|
"keywords": [
|
|
89
89
|
"cultural-heritage",
|
|
90
90
|
"archaeology",
|