@llm-newsletter-kit/core 1.3.8 → 1.3.10
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/dist/index.cjs +30 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +30 -23
- package/dist/index.js.map +1 -1
- package/package.json +17 -17
package/dist/index.cjs
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var runnables = require('@langchain/core/runnables');
|
|
4
4
|
var esToolkit = require('es-toolkit');
|
|
5
|
-
var ai = require('ai');
|
|
6
5
|
var zod = require('zod');
|
|
6
|
+
var ai = require('ai');
|
|
7
7
|
var jsdom = require('jsdom');
|
|
8
8
|
var juice = require('juice');
|
|
9
9
|
var safeMarkdown2Html = require('safe-markdown2html');
|
|
@@ -91,6 +91,25 @@ class LoggingExecutor {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
async function generateObjectByLLM({ schema, ...rest }) {
|
|
95
|
+
const result = await ai.generateText({
|
|
96
|
+
...rest,
|
|
97
|
+
output: ai.Output.object({ schema }),
|
|
98
|
+
// Anthropic truncates structured output when it contains quotation marks.
|
|
99
|
+
// Using 'jsonTool' mode avoids this issue.
|
|
100
|
+
providerOptions: {
|
|
101
|
+
anthropic: {
|
|
102
|
+
structuredOutputMode: 'jsonTool',
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
return {
|
|
107
|
+
output: result.output,
|
|
108
|
+
usage: result.usage,
|
|
109
|
+
finishReason: result.finishReason,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
94
113
|
/**
|
|
95
114
|
* Replaces ASCII double quotes with Unicode smart quotes (U+201C, U+201D).
|
|
96
115
|
* Prevents JSON structured output corruption when LLM reproduces quoted titles.
|
|
@@ -186,12 +205,10 @@ class AnalyzeImages extends LLMQuery {
|
|
|
186
205
|
if (this.imageMessages.length === 0) {
|
|
187
206
|
return { result: null, usage: ZERO_USAGE };
|
|
188
207
|
}
|
|
189
|
-
const { output, usage } = await
|
|
208
|
+
const { output, usage } = await generateObjectByLLM({
|
|
190
209
|
model: this.model,
|
|
191
210
|
maxRetries: this.options.llm.maxRetries,
|
|
192
|
-
|
|
193
|
-
schema: this.schema,
|
|
194
|
-
}),
|
|
211
|
+
schema: this.schema,
|
|
195
212
|
system: this.systemPrompt,
|
|
196
213
|
messages: [
|
|
197
214
|
{
|
|
@@ -316,12 +333,10 @@ class ClassifyTags extends LLMQuery {
|
|
|
316
333
|
}
|
|
317
334
|
async execute({ existTags }) {
|
|
318
335
|
this.existTags = existTags;
|
|
319
|
-
const { output, usage } = await
|
|
336
|
+
const { output, usage } = await generateObjectByLLM({
|
|
320
337
|
model: this.model,
|
|
321
338
|
maxRetries: this.options.llm.maxRetries,
|
|
322
|
-
|
|
323
|
-
schema: this.schema,
|
|
324
|
-
}),
|
|
339
|
+
schema: this.schema,
|
|
325
340
|
system: this.systemPrompt,
|
|
326
341
|
prompt: this.userPrompt,
|
|
327
342
|
});
|
|
@@ -398,12 +413,10 @@ class DetermineArticleImportance extends LLMQuery {
|
|
|
398
413
|
this.dateService = config.dateService;
|
|
399
414
|
}
|
|
400
415
|
async execute() {
|
|
401
|
-
const { output, usage } = await
|
|
416
|
+
const { output, usage } = await generateObjectByLLM({
|
|
402
417
|
model: this.model,
|
|
403
418
|
maxRetries: this.options.llm.maxRetries,
|
|
404
|
-
|
|
405
|
-
schema: this.schema,
|
|
406
|
-
}),
|
|
419
|
+
schema: this.schema,
|
|
407
420
|
system: this.systemPrompt,
|
|
408
421
|
prompt: this.userPrompt,
|
|
409
422
|
});
|
|
@@ -910,11 +923,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
910
923
|
subscribePageUrl;
|
|
911
924
|
newsletterBrandName;
|
|
912
925
|
schema = zod.z.object({
|
|
913
|
-
title: zod.z
|
|
914
|
-
.string()
|
|
915
|
-
.max(100)
|
|
916
|
-
.min(20)
|
|
917
|
-
.describe('Title of the newsletter email'),
|
|
926
|
+
title: zod.z.string().max(70).min(20).describe('Title of the newsletter email'),
|
|
918
927
|
content: zod.z.string().describe('Email content in markdown format'),
|
|
919
928
|
isWrittenInOutputLanguage: zod.z
|
|
920
929
|
.boolean()
|
|
@@ -940,7 +949,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
940
949
|
this.newsletterBrandName = config.newsletterBrandName;
|
|
941
950
|
}
|
|
942
951
|
async execute() {
|
|
943
|
-
const { output, usage, finishReason } = await
|
|
952
|
+
const { output, usage, finishReason } = await generateObjectByLLM({
|
|
944
953
|
model: this.model,
|
|
945
954
|
maxRetries: this.options.llm.maxRetries,
|
|
946
955
|
maxOutputTokens: this.maxOutputTokens,
|
|
@@ -949,9 +958,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
949
958
|
topK: this.topK,
|
|
950
959
|
presencePenalty: this.presencePenalty,
|
|
951
960
|
frequencyPenalty: this.frequencyPenalty,
|
|
952
|
-
|
|
953
|
-
schema: this.schema,
|
|
954
|
-
}),
|
|
961
|
+
schema: this.schema,
|
|
955
962
|
system: this.systemPrompt,
|
|
956
963
|
prompt: this.userPrompt,
|
|
957
964
|
});
|
|
@@ -1076,7 +1083,7 @@ Output Format & Requirements:
|
|
|
1076
1083
|
|
|
1077
1084
|
7. Title Writing Guidelines:${this.options.content.titleContext
|
|
1078
1085
|
? `\n - **Required title keyword**: "${this.options.content.titleContext}". This phrase MUST appear in the title. Combine it with key context from today's newsletter content to form a natural, complete title.
|
|
1079
|
-
- Keep title length 20-
|
|
1086
|
+
- Keep title length 20-70 characters.
|
|
1080
1087
|
- Use neutral and objective terms in title (e.g., 'announced', 'implementing', 'deadline approaching').
|
|
1081
1088
|
- Write title clearly and factually to maintain professionalism and credibility.`
|
|
1082
1089
|
: `
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RunnablePassthrough, RunnableSequence } from '@langchain/core/runnables';
|
|
2
2
|
import { pick, omit } from 'es-toolkit';
|
|
3
|
-
import { generateText, Output } from 'ai';
|
|
4
3
|
import { z } from 'zod';
|
|
4
|
+
import { generateText, Output } from 'ai';
|
|
5
5
|
import { JSDOM } from 'jsdom';
|
|
6
6
|
import juice from 'juice';
|
|
7
7
|
import safeMarkdown2Html from 'safe-markdown2html';
|
|
@@ -89,6 +89,25 @@ class LoggingExecutor {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
async function generateObjectByLLM({ schema, ...rest }) {
|
|
93
|
+
const result = await generateText({
|
|
94
|
+
...rest,
|
|
95
|
+
output: Output.object({ schema }),
|
|
96
|
+
// Anthropic truncates structured output when it contains quotation marks.
|
|
97
|
+
// Using 'jsonTool' mode avoids this issue.
|
|
98
|
+
providerOptions: {
|
|
99
|
+
anthropic: {
|
|
100
|
+
structuredOutputMode: 'jsonTool',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
output: result.output,
|
|
106
|
+
usage: result.usage,
|
|
107
|
+
finishReason: result.finishReason,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
92
111
|
/**
|
|
93
112
|
* Replaces ASCII double quotes with Unicode smart quotes (U+201C, U+201D).
|
|
94
113
|
* Prevents JSON structured output corruption when LLM reproduces quoted titles.
|
|
@@ -184,12 +203,10 @@ class AnalyzeImages extends LLMQuery {
|
|
|
184
203
|
if (this.imageMessages.length === 0) {
|
|
185
204
|
return { result: null, usage: ZERO_USAGE };
|
|
186
205
|
}
|
|
187
|
-
const { output, usage } = await
|
|
206
|
+
const { output, usage } = await generateObjectByLLM({
|
|
188
207
|
model: this.model,
|
|
189
208
|
maxRetries: this.options.llm.maxRetries,
|
|
190
|
-
|
|
191
|
-
schema: this.schema,
|
|
192
|
-
}),
|
|
209
|
+
schema: this.schema,
|
|
193
210
|
system: this.systemPrompt,
|
|
194
211
|
messages: [
|
|
195
212
|
{
|
|
@@ -314,12 +331,10 @@ class ClassifyTags extends LLMQuery {
|
|
|
314
331
|
}
|
|
315
332
|
async execute({ existTags }) {
|
|
316
333
|
this.existTags = existTags;
|
|
317
|
-
const { output, usage } = await
|
|
334
|
+
const { output, usage } = await generateObjectByLLM({
|
|
318
335
|
model: this.model,
|
|
319
336
|
maxRetries: this.options.llm.maxRetries,
|
|
320
|
-
|
|
321
|
-
schema: this.schema,
|
|
322
|
-
}),
|
|
337
|
+
schema: this.schema,
|
|
323
338
|
system: this.systemPrompt,
|
|
324
339
|
prompt: this.userPrompt,
|
|
325
340
|
});
|
|
@@ -396,12 +411,10 @@ class DetermineArticleImportance extends LLMQuery {
|
|
|
396
411
|
this.dateService = config.dateService;
|
|
397
412
|
}
|
|
398
413
|
async execute() {
|
|
399
|
-
const { output, usage } = await
|
|
414
|
+
const { output, usage } = await generateObjectByLLM({
|
|
400
415
|
model: this.model,
|
|
401
416
|
maxRetries: this.options.llm.maxRetries,
|
|
402
|
-
|
|
403
|
-
schema: this.schema,
|
|
404
|
-
}),
|
|
417
|
+
schema: this.schema,
|
|
405
418
|
system: this.systemPrompt,
|
|
406
419
|
prompt: this.userPrompt,
|
|
407
420
|
});
|
|
@@ -908,11 +921,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
908
921
|
subscribePageUrl;
|
|
909
922
|
newsletterBrandName;
|
|
910
923
|
schema = z.object({
|
|
911
|
-
title: z
|
|
912
|
-
.string()
|
|
913
|
-
.max(100)
|
|
914
|
-
.min(20)
|
|
915
|
-
.describe('Title of the newsletter email'),
|
|
924
|
+
title: z.string().max(70).min(20).describe('Title of the newsletter email'),
|
|
916
925
|
content: z.string().describe('Email content in markdown format'),
|
|
917
926
|
isWrittenInOutputLanguage: z
|
|
918
927
|
.boolean()
|
|
@@ -938,7 +947,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
938
947
|
this.newsletterBrandName = config.newsletterBrandName;
|
|
939
948
|
}
|
|
940
949
|
async execute() {
|
|
941
|
-
const { output, usage, finishReason } = await
|
|
950
|
+
const { output, usage, finishReason } = await generateObjectByLLM({
|
|
942
951
|
model: this.model,
|
|
943
952
|
maxRetries: this.options.llm.maxRetries,
|
|
944
953
|
maxOutputTokens: this.maxOutputTokens,
|
|
@@ -947,9 +956,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
947
956
|
topK: this.topK,
|
|
948
957
|
presencePenalty: this.presencePenalty,
|
|
949
958
|
frequencyPenalty: this.frequencyPenalty,
|
|
950
|
-
|
|
951
|
-
schema: this.schema,
|
|
952
|
-
}),
|
|
959
|
+
schema: this.schema,
|
|
953
960
|
system: this.systemPrompt,
|
|
954
961
|
prompt: this.userPrompt,
|
|
955
962
|
});
|
|
@@ -1074,7 +1081,7 @@ Output Format & Requirements:
|
|
|
1074
1081
|
|
|
1075
1082
|
7. Title Writing Guidelines:${this.options.content.titleContext
|
|
1076
1083
|
? `\n - **Required title keyword**: "${this.options.content.titleContext}". This phrase MUST appear in the title. Combine it with key context from today's newsletter content to form a natural, complete title.
|
|
1077
|
-
- Keep title length 20-
|
|
1084
|
+
- Keep title length 20-70 characters.
|
|
1078
1085
|
- Use neutral and objective terms in title (e.g., 'announced', 'implementing', 'deadline approaching').
|
|
1079
1086
|
- Write title clearly and factually to maintain professionalism and credibility.`
|
|
1080
1087
|
: `
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@llm-newsletter-kit/core",
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "1.3.
|
|
5
|
+
"version": "1.3.10",
|
|
6
6
|
"description": "An extensible framework to automate your entire newsletter workflow. Handles data collection, LLM-based content analysis, and email generation, letting you focus on your unique domain logic.",
|
|
7
7
|
"main": "dist/index.cjs",
|
|
8
8
|
"module": "dist/index.js",
|
|
@@ -48,36 +48,36 @@
|
|
|
48
48
|
"author": "kimhongyeon",
|
|
49
49
|
"license": "Apache-2.0",
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@langchain/core": "^1.1.
|
|
52
|
-
"ai": "^6.0.
|
|
51
|
+
"@langchain/core": "^1.1.39",
|
|
52
|
+
"ai": "^6.0.154",
|
|
53
53
|
"es-toolkit": "^1.45.1",
|
|
54
|
-
"jsdom": "^29.0.
|
|
54
|
+
"jsdom": "^29.0.2",
|
|
55
55
|
"juice": "^11.1.1",
|
|
56
56
|
"safe-markdown2html": "^1.0.1",
|
|
57
57
|
"zod": "^4.3.6"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
61
|
-
"@ai-sdk/google": "^3.0.
|
|
62
|
-
"@ai-sdk/openai": "^3.0.
|
|
63
|
-
"@ai-sdk/togetherai": "^2.0.
|
|
60
|
+
"@ai-sdk/anthropic": "^3.0.68",
|
|
61
|
+
"@ai-sdk/google": "^3.0.60",
|
|
62
|
+
"@ai-sdk/openai": "^3.0.52",
|
|
63
|
+
"@ai-sdk/togetherai": "^2.0.45",
|
|
64
64
|
"@eslint/js": "^10.0.1",
|
|
65
65
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
66
66
|
"@types/jsdom": "^28.0.1",
|
|
67
|
-
"@types/node": "^25.5.
|
|
68
|
-
"@vitest/coverage-v8": "^4.1.
|
|
69
|
-
"@vitest/expect": "^4.1.
|
|
70
|
-
"eslint": "^10.
|
|
67
|
+
"@types/node": "^25.5.2",
|
|
68
|
+
"@vitest/coverage-v8": "^4.1.4",
|
|
69
|
+
"@vitest/expect": "^4.1.4",
|
|
70
|
+
"eslint": "^10.2.0",
|
|
71
71
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
72
72
|
"prettier": "^3.8.1",
|
|
73
73
|
"rimraf": "^6.1.3",
|
|
74
|
-
"rollup": "^4.60.
|
|
74
|
+
"rollup": "^4.60.1",
|
|
75
75
|
"rollup-plugin-dts": "^6.4.1",
|
|
76
|
-
"rollup-plugin-typescript2": "^0.
|
|
76
|
+
"rollup-plugin-typescript2": "^0.37.0",
|
|
77
77
|
"tsx": "^4.21.0",
|
|
78
|
-
"typescript": "^
|
|
79
|
-
"typescript-eslint": "^8.
|
|
80
|
-
"vitest": "^4.1.
|
|
78
|
+
"typescript": "^6.0.2",
|
|
79
|
+
"typescript-eslint": "^8.58.1",
|
|
80
|
+
"vitest": "^4.1.4"
|
|
81
81
|
},
|
|
82
82
|
"repository": {
|
|
83
83
|
"type": "git",
|