@actuate-media/plugin-ai 0.0.11 → 0.2.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.
- package/LICENSE +21 -21
- package/dist/__tests__/content-generator.test.d.ts +2 -0
- package/dist/__tests__/content-generator.test.d.ts.map +1 -0
- package/dist/__tests__/content-generator.test.js +200 -0
- package/dist/__tests__/content-generator.test.js.map +1 -0
- package/dist/__tests__/index.test.js.map +1 -1
- package/dist/admin/AIScorePanel.d.ts +1 -1
- package/dist/admin/AIScorePanel.d.ts.map +1 -1
- package/dist/admin/AIScorePanel.js +34 -17
- package/dist/admin/AIScorePanel.js.map +1 -1
- package/dist/admin/BrandVoiceSettings.d.ts +2 -2
- package/dist/admin/BrandVoiceSettings.d.ts.map +1 -1
- package/dist/admin/BrandVoiceSettings.js +123 -34
- package/dist/admin/BrandVoiceSettings.js.map +1 -1
- package/dist/admin/ContentScoreDashboard.d.ts +1 -1
- package/dist/admin/ContentScoreDashboard.d.ts.map +1 -1
- package/dist/admin/ContentScoreDashboard.js +50 -16
- package/dist/admin/ContentScoreDashboard.js.map +1 -1
- package/dist/admin/WritingAssistantToolbar.d.ts.map +1 -1
- package/dist/admin/WritingAssistantToolbar.js +21 -21
- package/dist/admin/WritingAssistantToolbar.js.map +1 -1
- package/dist/brand/consistency-checker.d.ts +3 -3
- package/dist/brand/consistency-checker.d.ts.map +1 -1
- package/dist/brand/consistency-checker.js +7 -7
- package/dist/brand/consistency-checker.js.map +1 -1
- package/dist/brand/profile-builder.d.ts +2 -2
- package/dist/brand/profile-builder.d.ts.map +1 -1
- package/dist/brand/profile-builder.js +20 -19
- package/dist/brand/profile-builder.js.map +1 -1
- package/dist/brand/voice-profile.d.ts +4 -4
- package/dist/brand/voice-profile.d.ts.map +1 -1
- package/dist/collections.d.ts +1 -1
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js.map +1 -1
- package/dist/fields.d.ts +1 -1
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js.map +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +16 -14
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +33 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -34
- package/dist/index.js.map +1 -1
- package/dist/links/smart-links.d.ts.map +1 -1
- package/dist/links/smart-links.js +2 -2
- package/dist/links/smart-links.js.map +1 -1
- package/dist/media/alt-text-generator.d.ts +2 -2
- package/dist/media/alt-text-generator.d.ts.map +1 -1
- package/dist/media/alt-text-generator.js +14 -9
- package/dist/media/alt-text-generator.js.map +1 -1
- package/dist/media/auto-tagger.d.ts +1 -1
- package/dist/media/auto-tagger.d.ts.map +1 -1
- package/dist/media/auto-tagger.js +8 -5
- package/dist/media/auto-tagger.js.map +1 -1
- package/dist/page-builder/generate.d.ts +23 -0
- package/dist/page-builder/generate.d.ts.map +1 -0
- package/dist/page-builder/generate.js +422 -0
- package/dist/page-builder/generate.js.map +1 -0
- package/dist/page-builder/index.d.ts +3 -0
- package/dist/page-builder/index.d.ts.map +1 -0
- package/dist/page-builder/index.js +2 -0
- package/dist/page-builder/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +32 -32
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +6 -6
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +24 -24
- package/dist/providers/openai.js.map +1 -1
- package/dist/scoring/accessibility.d.ts +1 -1
- package/dist/scoring/accessibility.d.ts.map +1 -1
- package/dist/scoring/accessibility.js +22 -22
- package/dist/scoring/accessibility.js.map +1 -1
- package/dist/scoring/brand-alignment.d.ts +1 -1
- package/dist/scoring/brand-alignment.d.ts.map +1 -1
- package/dist/scoring/brand-alignment.js +14 -12
- package/dist/scoring/brand-alignment.js.map +1 -1
- package/dist/scoring/composite.d.ts +1 -1
- package/dist/scoring/composite.d.ts.map +1 -1
- package/dist/scoring/composite.js +5 -5
- package/dist/scoring/composite.js.map +1 -1
- package/dist/scoring/freshness.d.ts +1 -1
- package/dist/scoring/freshness.d.ts.map +1 -1
- package/dist/scoring/freshness.js +5 -7
- package/dist/scoring/freshness.js.map +1 -1
- package/dist/scoring/readability.d.ts +1 -1
- package/dist/scoring/readability.d.ts.map +1 -1
- package/dist/scoring/readability.js +8 -8
- package/dist/scoring/readability.js.map +1 -1
- package/dist/scoring/seo-score.d.ts.map +1 -1
- package/dist/scoring/seo-score.js +82 -16
- package/dist/scoring/seo-score.js.map +1 -1
- package/dist/search/clustering.d.ts +1 -1
- package/dist/search/clustering.d.ts.map +1 -1
- package/dist/search/clustering.js +7 -9
- package/dist/search/clustering.js.map +1 -1
- package/dist/search/embeddings.d.ts +1 -1
- package/dist/search/embeddings.d.ts.map +1 -1
- package/dist/search/embeddings.js +3 -3
- package/dist/search/embeddings.js.map +1 -1
- package/dist/search/semantic-search.d.ts +1 -1
- package/dist/search/semantic-search.d.ts.map +1 -1
- package/dist/search/semantic-search.js +5 -5
- package/dist/search/semantic-search.js.map +1 -1
- package/dist/translation/translator.d.ts +2 -2
- package/dist/translation/translator.d.ts.map +1 -1
- package/dist/translation/translator.js +8 -8
- package/dist/translation/translator.js.map +1 -1
- package/dist/writing/assistant.d.ts +3 -3
- package/dist/writing/assistant.d.ts.map +1 -1
- package/dist/writing/assistant.js +19 -16
- package/dist/writing/assistant.js.map +1 -1
- package/dist/writing/content-generator.d.ts +107 -0
- package/dist/writing/content-generator.d.ts.map +1 -0
- package/dist/writing/content-generator.js +273 -0
- package/dist/writing/content-generator.js.map +1 -0
- package/dist/writing/inline-suggestions.d.ts +2 -2
- package/dist/writing/inline-suggestions.d.ts.map +1 -1
- package/dist/writing/inline-suggestions.js +8 -5
- package/dist/writing/inline-suggestions.js.map +1 -1
- package/dist/writing/meta-generator.d.ts +2 -2
- package/dist/writing/meta-generator.d.ts.map +1 -1
- package/dist/writing/meta-generator.js +21 -9
- package/dist/writing/meta-generator.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../src/scoring/composite.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../src/scoring/composite.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9E,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;CACnC;AAUD,wFAAwF;AACxF,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,WAAW,EAAE,MAAM,CAAC,CAAC,GACnD,cAAc,CA6BhB"}
|
|
@@ -24,15 +24,15 @@ export function calculateCompositeScore(scores, weights) {
|
|
|
24
24
|
const overall = totalWeight > 0 ? Math.round(totalWeighted / totalWeight) : 0;
|
|
25
25
|
let grade;
|
|
26
26
|
if (overall >= 90)
|
|
27
|
-
grade =
|
|
27
|
+
grade = 'A';
|
|
28
28
|
else if (overall >= 80)
|
|
29
|
-
grade =
|
|
29
|
+
grade = 'B';
|
|
30
30
|
else if (overall >= 70)
|
|
31
|
-
grade =
|
|
31
|
+
grade = 'C';
|
|
32
32
|
else if (overall >= 60)
|
|
33
|
-
grade =
|
|
33
|
+
grade = 'D';
|
|
34
34
|
else
|
|
35
|
-
grade =
|
|
35
|
+
grade = 'F';
|
|
36
36
|
return { overall, breakdown, grade };
|
|
37
37
|
}
|
|
38
38
|
//# sourceMappingURL=composite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/scoring/composite.ts"],"names":[],"mappings":"AAcA,MAAM,eAAe,GAAsC;IACzD,WAAW,EAAE,GAAG;IAChB,GAAG,EAAE,IAAI;IACT,cAAc,EAAE,GAAG;IACnB,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,IAAI;CAChB,
|
|
1
|
+
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/scoring/composite.ts"],"names":[],"mappings":"AAcA,MAAM,eAAe,GAAsC;IACzD,WAAW,EAAE,GAAG;IAChB,GAAG,EAAE,IAAI;IACT,cAAc,EAAE,GAAG;IACnB,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,IAAI;CAChB,CAAA;AAED,wFAAwF;AACxF,MAAM,UAAU,uBAAuB,CACrC,MAAmB,EACnB,OAAoD;IAEpD,MAAM,aAAa,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAA;IAExD,MAAM,SAAS,GAAgC,EAAE,CAAA;IACjD,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QAEjC,MAAM,CAAC,GAAG,GAAwB,CAAA;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;QAE/B,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QACnD,WAAW,IAAI,MAAM,CAAA;QACrB,aAAa,IAAI,QAAQ,CAAA;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7E,IAAI,KAA8B,CAAA;IAClC,IAAI,OAAO,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAA;SACzB,IAAI,OAAO,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAA;SAC9B,IAAI,OAAO,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAA;SAC9B,IAAI,OAAO,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAA;;QAC9B,KAAK,GAAG,GAAG,CAAA;IAEhB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AACtC,CAAC"}
|
|
@@ -8,7 +8,7 @@ export interface FreshnessResult {
|
|
|
8
8
|
score: number;
|
|
9
9
|
decayRate: number;
|
|
10
10
|
daysOld: number;
|
|
11
|
-
recommendation:
|
|
11
|
+
recommendation: 'current' | 'review' | 'stale' | 'outdated';
|
|
12
12
|
}
|
|
13
13
|
/** Calculates a freshness score using exponential decay based on content age. */
|
|
14
14
|
export declare function calculateFreshnessScore(options: FreshnessOptions): FreshnessResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freshness.d.ts","sourceRoot":"","sources":["../../src/scoring/freshness.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"freshness.d.ts","sourceRoot":"","sources":["../../src/scoring/freshness.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,IAAI,CAAA;IACjB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAA;CAC5D;AAUD,iFAAiF;AACjF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAyBlF"}
|
|
@@ -7,9 +7,7 @@ const DEFAULT_LIFESPANS = {
|
|
|
7
7
|
};
|
|
8
8
|
/** Calculates a freshness score using exponential decay based on content age. */
|
|
9
9
|
export function calculateFreshnessScore(options) {
|
|
10
|
-
const lifespanDays = options.averageLifespanDays
|
|
11
|
-
?? DEFAULT_LIFESPANS[options.contentType]
|
|
12
|
-
?? 365;
|
|
10
|
+
const lifespanDays = options.averageLifespanDays ?? DEFAULT_LIFESPANS[options.contentType] ?? 365;
|
|
13
11
|
const referenceDate = options.updatedAt ?? options.publishedAt;
|
|
14
12
|
const now = new Date();
|
|
15
13
|
const msPerDay = 1000 * 60 * 60 * 24;
|
|
@@ -20,13 +18,13 @@ export function calculateFreshnessScore(options) {
|
|
|
20
18
|
const clampedScore = Math.max(0, Math.min(100, score));
|
|
21
19
|
let recommendation;
|
|
22
20
|
if (clampedScore >= 75)
|
|
23
|
-
recommendation =
|
|
21
|
+
recommendation = 'current';
|
|
24
22
|
else if (clampedScore >= 50)
|
|
25
|
-
recommendation =
|
|
23
|
+
recommendation = 'review';
|
|
26
24
|
else if (clampedScore >= 25)
|
|
27
|
-
recommendation =
|
|
25
|
+
recommendation = 'stale';
|
|
28
26
|
else
|
|
29
|
-
recommendation =
|
|
27
|
+
recommendation = 'outdated';
|
|
30
28
|
return {
|
|
31
29
|
score: clampedScore,
|
|
32
30
|
decayRate: Math.round(decayRate * 10000) / 10000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/scoring/freshness.ts"],"names":[],"mappings":"AAcA,MAAM,iBAAiB,GAA2B;IAChD,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,GAAG;IACb,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,IAAI;CAChB,
|
|
1
|
+
{"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/scoring/freshness.ts"],"names":[],"mappings":"AAcA,MAAM,iBAAiB,GAA2B;IAChD,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,GAAG;IACb,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,IAAI;CAChB,CAAA;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CAAC,OAAyB;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,IAAI,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,GAAG,CAAA;IAEjG,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,CAAA;IAC9D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAA;IAEjF,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAA;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;IAEtD,IAAI,cAAiD,CAAA;IACrD,IAAI,YAAY,IAAI,EAAE;QAAE,cAAc,GAAG,SAAS,CAAA;SAC7C,IAAI,YAAY,IAAI,EAAE;QAAE,cAAc,GAAG,QAAQ,CAAA;SACjD,IAAI,YAAY,IAAI,EAAE;QAAE,cAAc,GAAG,OAAO,CAAA;;QAChD,cAAc,GAAG,UAAU,CAAA;IAEhC,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK;QAChD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,cAAc;KACf,CAAA;AACH,CAAC"}
|
|
@@ -3,7 +3,7 @@ export interface ReadabilityResult {
|
|
|
3
3
|
gunningFog: number;
|
|
4
4
|
smog: number;
|
|
5
5
|
averageGradeLevel: number;
|
|
6
|
-
difficulty:
|
|
6
|
+
difficulty: 'easy' | 'moderate' | 'difficult' | 'expert';
|
|
7
7
|
}
|
|
8
8
|
/** Calculates the Flesch-Kincaid grade level for the given text. */
|
|
9
9
|
export declare function calculateFleschKincaid(text: string): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readability.d.ts","sourceRoot":"","sources":["../../src/scoring/readability.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"readability.d.ts","sourceRoot":"","sources":["../../src/scoring/readability.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAA;CACzD;AAmCD,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY3D;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAanE"}
|
|
@@ -7,11 +7,11 @@ function countWords(text) {
|
|
|
7
7
|
return matches.length;
|
|
8
8
|
}
|
|
9
9
|
function countSyllables(word) {
|
|
10
|
-
const cleaned = word.toLowerCase().replace(/[^a-z]/g,
|
|
10
|
+
const cleaned = word.toLowerCase().replace(/[^a-z]/g, '');
|
|
11
11
|
if (cleaned.length <= 3)
|
|
12
12
|
return 1;
|
|
13
13
|
let count = 0;
|
|
14
|
-
const vowels =
|
|
14
|
+
const vowels = 'aeiouy';
|
|
15
15
|
let previousWasVowel = false;
|
|
16
16
|
for (const char of cleaned) {
|
|
17
17
|
const isVowel = vowels.includes(char);
|
|
@@ -19,7 +19,7 @@ function countSyllables(word) {
|
|
|
19
19
|
count++;
|
|
20
20
|
previousWasVowel = isVowel;
|
|
21
21
|
}
|
|
22
|
-
if (cleaned.endsWith(
|
|
22
|
+
if (cleaned.endsWith('e') && count > 1)
|
|
23
23
|
count--;
|
|
24
24
|
return Math.max(count, 1);
|
|
25
25
|
}
|
|
@@ -55,7 +55,7 @@ export function calculateSMOG(text) {
|
|
|
55
55
|
const complex = countComplexWords(text);
|
|
56
56
|
if (sentences === 0)
|
|
57
57
|
return 0;
|
|
58
|
-
return 1.
|
|
58
|
+
return 1.043 * Math.sqrt(complex * (30 / sentences)) + 3.1291;
|
|
59
59
|
}
|
|
60
60
|
/** Returns a comprehensive readability analysis of the given text. */
|
|
61
61
|
export function getReadabilityScore(text) {
|
|
@@ -65,13 +65,13 @@ export function getReadabilityScore(text) {
|
|
|
65
65
|
const averageGradeLevel = (fleschKincaid + gunningFog + smog) / 3;
|
|
66
66
|
let difficulty;
|
|
67
67
|
if (averageGradeLevel <= 6)
|
|
68
|
-
difficulty =
|
|
68
|
+
difficulty = 'easy';
|
|
69
69
|
else if (averageGradeLevel <= 10)
|
|
70
|
-
difficulty =
|
|
70
|
+
difficulty = 'moderate';
|
|
71
71
|
else if (averageGradeLevel <= 14)
|
|
72
|
-
difficulty =
|
|
72
|
+
difficulty = 'difficult';
|
|
73
73
|
else
|
|
74
|
-
difficulty =
|
|
74
|
+
difficulty = 'expert';
|
|
75
75
|
return { fleschKincaid, gunningFog, smog, averageGradeLevel, difficulty };
|
|
76
76
|
}
|
|
77
77
|
//# sourceMappingURL=readability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readability.js","sourceRoot":"","sources":["../../src/scoring/readability.ts"],"names":[],"mappings":"AAQA,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"readability.js","sourceRoot":"","sources":["../../src/scoring/readability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo-score.d.ts","sourceRoot":"","sources":["../../src/scoring/seo-score.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"seo-score.d.ts","sourceRoot":"","sources":["../../src/scoring/seo-score.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,KAAK,CAAC;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAC,CAAA;CACH;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,CAkIrE"}
|
|
@@ -4,49 +4,115 @@ export function calculateSEOScore(content) {
|
|
|
4
4
|
const titleLen = content.title.length;
|
|
5
5
|
const titleScore = titleLen >= 30 && titleLen <= 60 ? 15 : titleLen > 0 ? 8 : 0;
|
|
6
6
|
breakdown.push({
|
|
7
|
-
criterion:
|
|
7
|
+
criterion: 'Title length',
|
|
8
8
|
score: titleScore,
|
|
9
9
|
maxScore: 15,
|
|
10
|
-
suggestion: titleLen < 30
|
|
10
|
+
suggestion: titleLen < 30
|
|
11
|
+
? 'Title is too short — aim for 30-60 characters'
|
|
12
|
+
: titleLen > 60
|
|
13
|
+
? 'Title is too long — keep under 60 characters'
|
|
14
|
+
: undefined,
|
|
11
15
|
});
|
|
12
16
|
const metaLen = content.metaDescription.length;
|
|
13
17
|
const metaScore = metaLen >= 120 && metaLen <= 160 ? 10 : metaLen > 0 ? 5 : 0;
|
|
14
18
|
breakdown.push({
|
|
15
|
-
criterion:
|
|
19
|
+
criterion: 'Meta description length',
|
|
16
20
|
score: metaScore,
|
|
17
21
|
maxScore: 10,
|
|
18
|
-
suggestion: metaLen < 120
|
|
22
|
+
suggestion: metaLen < 120
|
|
23
|
+
? 'Meta description should be 120-160 characters'
|
|
24
|
+
: metaLen > 160
|
|
25
|
+
? 'Meta description is too long'
|
|
26
|
+
: undefined,
|
|
19
27
|
});
|
|
20
28
|
if (content.targetKeyword) {
|
|
21
29
|
const kw = content.targetKeyword.toLowerCase();
|
|
22
30
|
const titleHasKw = content.title.toLowerCase().includes(kw) ? 10 : 0;
|
|
23
|
-
breakdown.push({
|
|
24
|
-
|
|
31
|
+
breakdown.push({
|
|
32
|
+
criterion: 'Keyword in title',
|
|
33
|
+
score: titleHasKw,
|
|
34
|
+
maxScore: 10,
|
|
35
|
+
suggestion: titleHasKw === 0 ? 'Include target keyword in your title' : undefined,
|
|
36
|
+
});
|
|
37
|
+
const bodyKwCount = (content.body.toLowerCase().match(new RegExp(kw, 'g')) || []).length;
|
|
25
38
|
const bodyWordCount = content.body.split(/\s+/).length;
|
|
26
39
|
const density = bodyWordCount > 0 ? (bodyKwCount / bodyWordCount) * 100 : 0;
|
|
27
40
|
const densityScore = density >= 0.5 && density <= 2.5 ? 10 : bodyKwCount > 0 ? 5 : 0;
|
|
28
|
-
breakdown.push({
|
|
41
|
+
breakdown.push({
|
|
42
|
+
criterion: 'Keyword density',
|
|
43
|
+
score: densityScore,
|
|
44
|
+
maxScore: 10,
|
|
45
|
+
suggestion: density < 0.5
|
|
46
|
+
? 'Increase keyword usage in body'
|
|
47
|
+
: density > 2.5
|
|
48
|
+
? 'Reduce keyword stuffing'
|
|
49
|
+
: undefined,
|
|
50
|
+
});
|
|
29
51
|
const headingHasKw = (content.headings ?? []).some((h) => h.toLowerCase().includes(kw));
|
|
30
|
-
breakdown.push({
|
|
52
|
+
breakdown.push({
|
|
53
|
+
criterion: 'Keyword in headings',
|
|
54
|
+
score: headingHasKw ? 10 : 0,
|
|
55
|
+
maxScore: 10,
|
|
56
|
+
suggestion: headingHasKw ? undefined : 'Add target keyword to at least one heading',
|
|
57
|
+
});
|
|
31
58
|
}
|
|
32
59
|
else {
|
|
33
|
-
breakdown.push({
|
|
34
|
-
|
|
35
|
-
|
|
60
|
+
breakdown.push({
|
|
61
|
+
criterion: 'Keyword in title',
|
|
62
|
+
score: 0,
|
|
63
|
+
maxScore: 10,
|
|
64
|
+
suggestion: 'Set a target keyword',
|
|
65
|
+
});
|
|
66
|
+
breakdown.push({
|
|
67
|
+
criterion: 'Keyword density',
|
|
68
|
+
score: 0,
|
|
69
|
+
maxScore: 10,
|
|
70
|
+
suggestion: 'Set a target keyword',
|
|
71
|
+
});
|
|
72
|
+
breakdown.push({
|
|
73
|
+
criterion: 'Keyword in headings',
|
|
74
|
+
score: 0,
|
|
75
|
+
maxScore: 10,
|
|
76
|
+
suggestion: 'Set a target keyword',
|
|
77
|
+
});
|
|
36
78
|
}
|
|
37
79
|
const headings = content.headings ?? [];
|
|
38
80
|
const headingScore = headings.length >= 2 ? 10 : headings.length === 1 ? 5 : 0;
|
|
39
|
-
breakdown.push({
|
|
81
|
+
breakdown.push({
|
|
82
|
+
criterion: 'Heading structure',
|
|
83
|
+
score: headingScore,
|
|
84
|
+
maxScore: 10,
|
|
85
|
+
suggestion: headings.length < 2 ? 'Use at least two headings to structure content' : undefined,
|
|
86
|
+
});
|
|
40
87
|
const images = content.images ?? [];
|
|
41
88
|
const imagesWithAlt = images.filter((img) => img.alt && img.alt.trim().length > 0).length;
|
|
42
|
-
const altScore = images.length === 0
|
|
43
|
-
|
|
89
|
+
const altScore = images.length === 0
|
|
90
|
+
? 5
|
|
91
|
+
: images.length === imagesWithAlt
|
|
92
|
+
? 10
|
|
93
|
+
: Math.round((imagesWithAlt / images.length) * 10);
|
|
94
|
+
breakdown.push({
|
|
95
|
+
criterion: 'Image alt texts',
|
|
96
|
+
score: altScore,
|
|
97
|
+
maxScore: 10,
|
|
98
|
+
suggestion: imagesWithAlt < images.length ? 'Add alt text to all images' : undefined,
|
|
99
|
+
});
|
|
44
100
|
const linkCount = (content.internalLinks?.length ?? 0) + (content.externalLinks?.length ?? 0);
|
|
45
101
|
const linkScore = linkCount >= 3 ? 10 : linkCount >= 1 ? 5 : 0;
|
|
46
|
-
breakdown.push({
|
|
102
|
+
breakdown.push({
|
|
103
|
+
criterion: 'Link count',
|
|
104
|
+
score: linkScore,
|
|
105
|
+
maxScore: 10,
|
|
106
|
+
suggestion: linkCount < 3 ? 'Add more internal and external links' : undefined,
|
|
107
|
+
});
|
|
47
108
|
const wordCount = content.body.split(/\s+/).filter(Boolean).length;
|
|
48
109
|
const lengthScore = wordCount >= 300 ? 15 : wordCount >= 150 ? 8 : wordCount > 0 ? 3 : 0;
|
|
49
|
-
breakdown.push({
|
|
110
|
+
breakdown.push({
|
|
111
|
+
criterion: 'Content length',
|
|
112
|
+
score: lengthScore,
|
|
113
|
+
maxScore: 15,
|
|
114
|
+
suggestion: wordCount < 300 ? 'Aim for at least 300 words' : undefined,
|
|
115
|
+
});
|
|
50
116
|
const totalScore = breakdown.reduce((sum, b) => sum + b.score, 0);
|
|
51
117
|
return { score: totalScore, breakdown };
|
|
52
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo-score.js","sourceRoot":"","sources":["../../src/scoring/seo-score.ts"],"names":[],"mappings":"AAsBA,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACnD,MAAM,SAAS,GAAgC,EAAE,
|
|
1
|
+
{"version":3,"file":"seo-score.js","sourceRoot":"","sources":["../../src/scoring/seo-score.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clustering.d.ts","sourceRoot":"","sources":["../../src/search/clustering.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"clustering.d.ts","sourceRoot":"","sources":["../../src/search/clustering.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,mFAAmF;AACnF,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,EAAE,CAAC,CAwB3B"}
|
|
@@ -1,30 +1,28 @@
|
|
|
1
1
|
/** Clusters content items by semantic similarity using the specified algorithm. */
|
|
2
2
|
export async function clusterContent(items, options) {
|
|
3
|
-
const algorithm = options?.algorithm ??
|
|
3
|
+
const algorithm = options?.algorithm ?? 'kmeans';
|
|
4
4
|
const numClusters = options?.numClusters ?? Math.max(2, Math.floor(Math.sqrt(items.length)));
|
|
5
5
|
const minClusterSize = options?.minClusterSize ?? 2;
|
|
6
6
|
const embeddedItems = items.filter((item) => item.embedding && item.embedding.length > 0);
|
|
7
7
|
if (embeddedItems.length < minClusterSize) {
|
|
8
8
|
return [
|
|
9
9
|
{
|
|
10
|
-
id:
|
|
11
|
-
label:
|
|
10
|
+
id: 'cluster-0',
|
|
11
|
+
label: 'All Content',
|
|
12
12
|
items,
|
|
13
13
|
centroid: [],
|
|
14
14
|
coherence: 1.0,
|
|
15
15
|
},
|
|
16
16
|
];
|
|
17
17
|
}
|
|
18
|
-
if (algorithm ===
|
|
18
|
+
if (algorithm === 'kmeans') {
|
|
19
19
|
return kMeansClustering(embeddedItems, numClusters);
|
|
20
20
|
}
|
|
21
21
|
return dbscanClustering(embeddedItems, minClusterSize);
|
|
22
22
|
}
|
|
23
23
|
function kMeansClustering(items, k) {
|
|
24
24
|
const dimensions = items[0].embedding.length;
|
|
25
|
-
const centroids = items
|
|
26
|
-
.slice(0, k)
|
|
27
|
-
.map((item) => [...item.embedding]);
|
|
25
|
+
const centroids = items.slice(0, k).map((item) => [...item.embedding]);
|
|
28
26
|
const assignments = new Array(items.length).fill(0);
|
|
29
27
|
for (let iteration = 0; iteration < 20; iteration++) {
|
|
30
28
|
for (let i = 0; i < items.length; i++) {
|
|
@@ -65,8 +63,8 @@ function dbscanClustering(items, minSize) {
|
|
|
65
63
|
void minSize;
|
|
66
64
|
return [
|
|
67
65
|
{
|
|
68
|
-
id:
|
|
69
|
-
label:
|
|
66
|
+
id: 'cluster-0',
|
|
67
|
+
label: 'DBSCAN Cluster',
|
|
70
68
|
items,
|
|
71
69
|
centroid: items[0].embedding ?? [],
|
|
72
70
|
coherence: 0.5,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clustering.js","sourceRoot":"","sources":["../../src/search/clustering.ts"],"names":[],"mappings":"AAoBA,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAqB,EACrB,OAAwB;IAExB,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"file":"clustering.js","sourceRoot":"","sources":["../../src/search/clustering.ts"],"names":[],"mappings":"AAoBA,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAqB,EACrB,OAAwB;IAExB,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,QAAQ,CAAA;IAChD,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5F,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,CAAA;IAEnD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAEzF,IAAI,aAAa,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QAC1C,OAAO;YACL;gBACE,EAAE,EAAE,WAAW;gBACf,KAAK,EAAE,aAAa;gBACpB,KAAK;gBACL,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,GAAG;aACf;SACF,CAAA;IACH,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,gBAAgB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAqB,EAAE,CAAS;IACxD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,SAAU,CAAC,MAAM,CAAA;IAC9C,MAAM,SAAS,GAAe,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAU,CAAC,CAAC,CAAA;IAEnF,MAAM,WAAW,GAAG,IAAI,KAAK,CAAS,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE3D,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,OAAO,GAAG,QAAQ,CAAA;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,SAAU,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAA;gBACnE,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;oBACnB,OAAO,GAAG,IAAI,CAAA;oBACd,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;YAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAQ;YAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAU,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAqB,EAAE,CAAA;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QACjE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAEvC,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,WAAW,CAAC,EAAE;YAClB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE;YACzB,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAE;YACvB,SAAS,EAAE,kBAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC;SAC3D,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAqB,EAAE,OAAe;IAC9D,KAAK,OAAO,CAAA;IACZ,OAAO;QACL;YACE,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,gBAAgB;YACvB,KAAK;YACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,IAAI,EAAE;YACnC,SAAS,EAAE,GAAG;SACf;KACF,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAW,EAAE,CAAW;IACjD,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;QAC1B,GAAG,IAAI,IAAI,GAAG,IAAI,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAqB,EAAE,QAAkB;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAChC,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClF,KAAK,CAAC,MAAM,CAAA;IACd,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/search/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/search/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,uDAAuD;AACvD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,UAAU,GACpB,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,wDAAwD;AACxD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,UAAU,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAM5B;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAoBjE"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/** Generates a vector embedding for the given text. */
|
|
2
2
|
export async function generateEmbedding(text, provider) {
|
|
3
3
|
if (!provider) {
|
|
4
|
-
throw new Error(
|
|
4
|
+
throw new Error('Embedding generation requires an AI provider');
|
|
5
5
|
}
|
|
6
6
|
const vector = await provider.generateEmbedding(text);
|
|
7
7
|
const tokenCount = Math.ceil(text.split(/\s+/).length * 1.3);
|
|
8
8
|
return {
|
|
9
9
|
vector,
|
|
10
10
|
dimensions: vector.length,
|
|
11
|
-
model:
|
|
11
|
+
model: 'provider-default',
|
|
12
12
|
tokenCount,
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
15
|
/** Generates embeddings for multiple texts in batch. */
|
|
16
16
|
export async function generateBatchEmbeddings(texts, provider) {
|
|
17
17
|
if (!provider) {
|
|
18
|
-
throw new Error(
|
|
18
|
+
throw new Error('Embedding generation requires an AI provider');
|
|
19
19
|
}
|
|
20
20
|
return Promise.all(texts.map((text) => generateEmbedding(text, provider)));
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/search/embeddings.ts"],"names":[],"mappings":"AASA,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,QAAqB;IAErB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/search/embeddings.ts"],"names":[],"mappings":"AASA,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,QAAqB;IAErB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IAE5D,OAAO;QACL,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,KAAK,EAAE,kBAAkB;QACzB,UAAU;KACX,CAAA;AACH,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAe,EACf,QAAqB;IAErB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAE5B,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,UAAU,GAAG,CAAC,CAAA;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;QAC3B,UAAU,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;QAC3B,UAAU,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;IAC7B,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/D,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAE7B,OAAO,UAAU,GAAG,SAAS,CAAA;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-search.d.ts","sourceRoot":"","sources":["../../src/search/semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"semantic-search.d.ts","sourceRoot":"","sources":["../../src/search/semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAKvD,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,UAAU,CAAA;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAA;QACV,cAAc,EAAE,MAAM,CAAA;QACtB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KACrB,CAAC,CAAA;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA6DjC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { requireAIProvider } from
|
|
2
|
-
import { generateEmbedding } from
|
|
3
|
-
import { cosineSimilarity } from
|
|
1
|
+
import { requireAIProvider } from '../providers/index.js';
|
|
2
|
+
import { generateEmbedding } from './embeddings.js';
|
|
3
|
+
import { cosineSimilarity } from './embeddings.js';
|
|
4
4
|
/**
|
|
5
5
|
* Performs semantic search across content using vector similarity.
|
|
6
6
|
*
|
|
@@ -53,7 +53,7 @@ export async function semanticSearch(query, options) {
|
|
|
53
53
|
// For production use with a vector database (pgvector, Pinecone, etc.),
|
|
54
54
|
// the embedding would be passed to the vector store's similarity search API.
|
|
55
55
|
// This requires project-specific setup based on the chosen vector store.
|
|
56
|
-
throw new Error(
|
|
57
|
-
|
|
56
|
+
throw new Error('Semantic search requires either a pre-computed corpus (pass options.corpus) ' +
|
|
57
|
+
'or a vector database integration. See docs for pgvector setup.');
|
|
58
58
|
}
|
|
59
59
|
//# sourceMappingURL=semantic-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-search.js","sourceRoot":"","sources":["../../src/search/semantic-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"semantic-search.js","sourceRoot":"","sources":["../../src/search/semantic-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BrandVoiceProfile } from
|
|
2
|
-
import type { AIProvider } from
|
|
1
|
+
import type { BrandVoiceProfile } from '../brand/voice-profile.js';
|
|
2
|
+
import type { AIProvider } from '../providers/index.js';
|
|
3
3
|
export interface TranslationOptions {
|
|
4
4
|
sourceLanguage: string;
|
|
5
5
|
targetLanguage: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../../src/translation/translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../../src/translation/translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,UAAU,CAAA;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACjE;AAED,4FAA4F;AAC5F,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAkD5B"}
|