@actuate-media/plugin-ai 0.0.1

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 (121) hide show
  1. package/dist/admin/AIScorePanel.d.ts +19 -0
  2. package/dist/admin/AIScorePanel.d.ts.map +1 -0
  3. package/dist/admin/AIScorePanel.js +35 -0
  4. package/dist/admin/AIScorePanel.js.map +1 -0
  5. package/dist/admin/BrandVoiceSettings.d.ts +11 -0
  6. package/dist/admin/BrandVoiceSettings.d.ts.map +1 -0
  7. package/dist/admin/BrandVoiceSettings.js +73 -0
  8. package/dist/admin/BrandVoiceSettings.js.map +1 -0
  9. package/dist/admin/ContentScoreDashboard.d.ts +15 -0
  10. package/dist/admin/ContentScoreDashboard.d.ts.map +1 -0
  11. package/dist/admin/ContentScoreDashboard.js +30 -0
  12. package/dist/admin/ContentScoreDashboard.js.map +1 -0
  13. package/dist/admin/WritingAssistantToolbar.d.ts +13 -0
  14. package/dist/admin/WritingAssistantToolbar.d.ts.map +1 -0
  15. package/dist/admin/WritingAssistantToolbar.js +49 -0
  16. package/dist/admin/WritingAssistantToolbar.js.map +1 -0
  17. package/dist/brand/consistency-checker.d.ts +17 -0
  18. package/dist/brand/consistency-checker.d.ts.map +1 -0
  19. package/dist/brand/consistency-checker.js +47 -0
  20. package/dist/brand/consistency-checker.js.map +1 -0
  21. package/dist/brand/profile-builder.d.ts +10 -0
  22. package/dist/brand/profile-builder.d.ts.map +1 -0
  23. package/dist/brand/profile-builder.js +93 -0
  24. package/dist/brand/profile-builder.js.map +1 -0
  25. package/dist/brand/voice-profile.d.ts +30 -0
  26. package/dist/brand/voice-profile.d.ts.map +1 -0
  27. package/dist/brand/voice-profile.js +2 -0
  28. package/dist/brand/voice-profile.js.map +1 -0
  29. package/dist/collections.d.ts +3 -0
  30. package/dist/collections.d.ts.map +1 -0
  31. package/dist/collections.js +2 -0
  32. package/dist/collections.js.map +1 -0
  33. package/dist/fields.d.ts +3 -0
  34. package/dist/fields.d.ts.map +1 -0
  35. package/dist/fields.js +2 -0
  36. package/dist/fields.js.map +1 -0
  37. package/dist/hooks.d.ts +5 -0
  38. package/dist/hooks.d.ts.map +1 -0
  39. package/dist/hooks.js +75 -0
  40. package/dist/hooks.js.map +1 -0
  41. package/dist/index.d.ts +86 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +74 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/links/smart-links.d.ts +18 -0
  46. package/dist/links/smart-links.d.ts.map +1 -0
  47. package/dist/links/smart-links.js +44 -0
  48. package/dist/links/smart-links.js.map +1 -0
  49. package/dist/media/alt-text-generator.d.ts +16 -0
  50. package/dist/media/alt-text-generator.d.ts.map +1 -0
  51. package/dist/media/alt-text-generator.js +50 -0
  52. package/dist/media/alt-text-generator.js.map +1 -0
  53. package/dist/media/auto-tagger.d.ts +21 -0
  54. package/dist/media/auto-tagger.d.ts.map +1 -0
  55. package/dist/media/auto-tagger.js +43 -0
  56. package/dist/media/auto-tagger.js.map +1 -0
  57. package/dist/providers/anthropic.d.ts +8 -0
  58. package/dist/providers/anthropic.d.ts.map +1 -0
  59. package/dist/providers/anthropic.js +119 -0
  60. package/dist/providers/anthropic.js.map +1 -0
  61. package/dist/providers/index.d.ts +34 -0
  62. package/dist/providers/index.d.ts.map +1 -0
  63. package/dist/providers/index.js +35 -0
  64. package/dist/providers/index.js.map +1 -0
  65. package/dist/providers/openai.d.ts +7 -0
  66. package/dist/providers/openai.d.ts.map +1 -0
  67. package/dist/providers/openai.js +110 -0
  68. package/dist/providers/openai.js.map +1 -0
  69. package/dist/scoring/accessibility.d.ts +24 -0
  70. package/dist/scoring/accessibility.d.ts.map +1 -0
  71. package/dist/scoring/accessibility.js +87 -0
  72. package/dist/scoring/accessibility.js.map +1 -0
  73. package/dist/scoring/brand-alignment.d.ts +12 -0
  74. package/dist/scoring/brand-alignment.d.ts.map +1 -0
  75. package/dist/scoring/brand-alignment.js +46 -0
  76. package/dist/scoring/brand-alignment.js.map +1 -0
  77. package/dist/scoring/composite.d.ts +19 -0
  78. package/dist/scoring/composite.d.ts.map +1 -0
  79. package/dist/scoring/composite.js +38 -0
  80. package/dist/scoring/composite.js.map +1 -0
  81. package/dist/scoring/freshness.d.ts +15 -0
  82. package/dist/scoring/freshness.d.ts.map +1 -0
  83. package/dist/scoring/freshness.js +37 -0
  84. package/dist/scoring/freshness.js.map +1 -0
  85. package/dist/scoring/readability.d.ts +16 -0
  86. package/dist/scoring/readability.d.ts.map +1 -0
  87. package/dist/scoring/readability.js +77 -0
  88. package/dist/scoring/readability.js.map +1 -0
  89. package/dist/scoring/seo-score.d.ts +26 -0
  90. package/dist/scoring/seo-score.d.ts.map +1 -0
  91. package/dist/scoring/seo-score.js +53 -0
  92. package/dist/scoring/seo-score.js.map +1 -0
  93. package/dist/search/clustering.d.ts +20 -0
  94. package/dist/search/clustering.d.ts.map +1 -0
  95. package/dist/search/clustering.js +91 -0
  96. package/dist/search/clustering.js.map +1 -0
  97. package/dist/search/embeddings.d.ts +14 -0
  98. package/dist/search/embeddings.d.ts.map +1 -0
  99. package/dist/search/embeddings.js +42 -0
  100. package/dist/search/embeddings.js.map +1 -0
  101. package/dist/search/semantic-search.d.ts +31 -0
  102. package/dist/search/semantic-search.d.ts.map +1 -0
  103. package/dist/search/semantic-search.js +59 -0
  104. package/dist/search/semantic-search.js.map +1 -0
  105. package/dist/translation/translator.d.ts +24 -0
  106. package/dist/translation/translator.d.ts.map +1 -0
  107. package/dist/translation/translator.js +42 -0
  108. package/dist/translation/translator.js.map +1 -0
  109. package/dist/writing/assistant.d.ts +28 -0
  110. package/dist/writing/assistant.d.ts.map +1 -0
  111. package/dist/writing/assistant.js +110 -0
  112. package/dist/writing/assistant.js.map +1 -0
  113. package/dist/writing/inline-suggestions.d.ts +18 -0
  114. package/dist/writing/inline-suggestions.d.ts.map +1 -0
  115. package/dist/writing/inline-suggestions.js +38 -0
  116. package/dist/writing/inline-suggestions.js.map +1 -0
  117. package/dist/writing/meta-generator.d.ts +13 -0
  118. package/dist/writing/meta-generator.d.ts.map +1 -0
  119. package/dist/writing/meta-generator.js +41 -0
  120. package/dist/writing/meta-generator.js.map +1 -0
  121. package/package.json +37 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../src/writing/assistant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AIProvider } from "../providers/index";
2
+ export interface SuggestionContext {
3
+ documentContent?: string;
4
+ collectionSlug?: string;
5
+ provider?: AIProvider;
6
+ }
7
+ export interface InlineSuggestion {
8
+ text: string;
9
+ type: "completion" | "improvement" | "alternative";
10
+ confidence: number;
11
+ range: {
12
+ start: number;
13
+ end: number;
14
+ };
15
+ }
16
+ /** Returns inline writing suggestions for the given text at the cursor position. */
17
+ export declare function getSuggestions(text: string, cursorPosition: number, context?: SuggestionContext): Promise<InlineSuggestion[]>;
18
+ //# sourceMappingURL=inline-suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-suggestions.d.ts","sourceRoot":"","sources":["../../src/writing/inline-suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,aAAa,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,oFAAoF;AACpF,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA0C7B"}
@@ -0,0 +1,38 @@
1
+ import { requireAIProvider } from "../providers/index";
2
+ /** Returns inline writing suggestions for the given text at the cursor position. */
3
+ export async function getSuggestions(text, cursorPosition, context) {
4
+ const ai = context?.provider ?? requireAIProvider();
5
+ const before = text.slice(Math.max(0, cursorPosition - 500), cursorPosition);
6
+ const after = text.slice(cursorPosition, cursorPosition + 200);
7
+ const prompt = `Given the following text context, provide 3 inline writing suggestions at the cursor position (marked with |).
8
+
9
+ Text before cursor: "${before}"
10
+ |
11
+ Text after cursor: "${after}"
12
+
13
+ Return a JSON array of objects with:
14
+ - "text": the suggested text to insert or replace
15
+ - "type": one of "completion", "improvement", or "alternative"
16
+ - "confidence": a number between 0 and 1`;
17
+ const result = await ai.generateText(prompt, {
18
+ systemPrompt: "You are a writing assistant providing inline suggestions. Return valid JSON only, no markdown.",
19
+ maxTokens: 512,
20
+ temperature: 0.6,
21
+ });
22
+ try {
23
+ const cleaned = result.text.replace(/```json?\n?/g, "").replace(/```/g, "").trim();
24
+ const parsed = JSON.parse(cleaned);
25
+ return parsed.map((s) => ({
26
+ text: s.text,
27
+ type: (["completion", "improvement", "alternative"].includes(s.type)
28
+ ? s.type
29
+ : "completion"),
30
+ confidence: Math.max(0, Math.min(1, s.confidence ?? 0.5)),
31
+ range: { start: cursorPosition, end: cursorPosition },
32
+ }));
33
+ }
34
+ catch {
35
+ return [];
36
+ }
37
+ }
38
+ //# sourceMappingURL=inline-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-suggestions.js","sourceRoot":"","sources":["../../src/writing/inline-suggestions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAevD,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,cAAsB,EACtB,OAA2B;IAE3B,MAAM,EAAE,GAAG,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,GAAG,GAAG,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG;;uBAEM,MAAM;;sBAEP,KAAK;;;;;yCAKc,CAAC;IAExC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE;QAC3C,YAAY,EAAE,gGAAgG;QAC9G,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,GAAG;KACjB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAI/B,CAAC;QAEH,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClE,CAAC,CAAC,CAAC,CAAC,IAAI;gBACR,CAAC,CAAC,YAAY,CAA6B;YAC7C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;YACzD,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE;SACtD,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AIProvider } from "../providers/index";
2
+ export interface TitleOptions {
3
+ count?: number;
4
+ style?: "informative" | "engaging" | "seo-optimized";
5
+ provider?: AIProvider;
6
+ }
7
+ /** Generates an SEO-friendly meta description from content. */
8
+ export declare function generateMetaDescription(content: string, maxLength?: number, provider?: AIProvider): Promise<string>;
9
+ /** Generates a concise excerpt from content. */
10
+ export declare function generateExcerpt(content: string, maxLength?: number, provider?: AIProvider): Promise<string>;
11
+ /** Generates title options from content in the given style. */
12
+ export declare function generateTitle(content: string, options?: TitleOptions): Promise<string[]>;
13
+ //# sourceMappingURL=meta-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-generator.d.ts","sourceRoot":"","sources":["../../src/writing/meta-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,GAAG,UAAU,GAAG,eAAe,CAAC;IACrD,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,+DAA+D;AAC/D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAY,EACvB,QAAQ,CAAC,EAAE,UAAU,GACpB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,gDAAgD;AAChD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAY,EACvB,QAAQ,CAAC,EAAE,UAAU,GACpB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,+DAA+D;AAC/D,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnB"}
@@ -0,0 +1,41 @@
1
+ import { requireAIProvider } from "../providers/index";
2
+ /** Generates an SEO-friendly meta description from content. */
3
+ export async function generateMetaDescription(content, maxLength = 155, provider) {
4
+ const ai = provider ?? requireAIProvider();
5
+ const result = await ai.generateText(`Write a compelling meta description (maximum ${maxLength} characters) for the following content. The description should be informative, include relevant keywords naturally, and encourage clicks from search results.\n\nContent:\n${content.slice(0, 3000)}`, {
6
+ systemPrompt: "You are an SEO specialist. Write only the meta description text, no quotes or labels. Keep it under the specified character limit.",
7
+ maxTokens: 256,
8
+ temperature: 0.5,
9
+ });
10
+ return result.text.replace(/^["']|["']$/g, "").trim().slice(0, maxLength);
11
+ }
12
+ /** Generates a concise excerpt from content. */
13
+ export async function generateExcerpt(content, maxLength = 300, provider) {
14
+ const ai = provider ?? requireAIProvider();
15
+ const result = await ai.generateText(`Write a concise excerpt (maximum ${maxLength} characters) that summarizes the following content. It should capture the essence of the piece and entice readers.\n\nContent:\n${content.slice(0, 3000)}`, {
16
+ systemPrompt: "You are an editor. Write only the excerpt text, no quotes or labels.",
17
+ maxTokens: 256,
18
+ temperature: 0.4,
19
+ });
20
+ return result.text.replace(/^["']|["']$/g, "").trim().slice(0, maxLength);
21
+ }
22
+ /** Generates title options from content in the given style. */
23
+ export async function generateTitle(content, options) {
24
+ const ai = options?.provider ?? requireAIProvider();
25
+ const count = options?.count ?? 5;
26
+ const style = options?.style ?? "informative";
27
+ const result = await ai.generateText(`Generate ${count} ${style} title options for the following content. Return them as a JSON array of strings.\n\nContent:\n${content.slice(0, 3000)}`, {
28
+ systemPrompt: "You are a headline writer. Return valid JSON only: an array of title strings. No markdown formatting.",
29
+ maxTokens: 512,
30
+ temperature: 0.7,
31
+ });
32
+ try {
33
+ const cleaned = result.text.replace(/```json?\n?/g, "").replace(/```/g, "").trim();
34
+ const titles = JSON.parse(cleaned);
35
+ if (Array.isArray(titles))
36
+ return titles.map(String);
37
+ }
38
+ catch { }
39
+ return result.text.split("\n").filter((line) => line.trim().length > 0).slice(0, count);
40
+ }
41
+ //# sourceMappingURL=meta-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-generator.js","sourceRoot":"","sources":["../../src/writing/meta-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAQvD,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAe,EACf,YAAoB,GAAG,EACvB,QAAqB;IAErB,MAAM,EAAE,GAAG,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAClC,gDAAgD,SAAS,8KAA8K,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAC/P;QACE,YAAY,EAAE,oIAAoI;QAClJ,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,GAAG;KACjB,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,YAAoB,GAAG,EACvB,QAAqB;IAErB,MAAM,EAAE,GAAG,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAClC,oCAAoC,SAAS,mIAAmI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EACxM;QACE,YAAY,EAAE,sEAAsE;QACpF,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,GAAG;KACjB,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,OAAsB;IAEtB,MAAM,EAAE,GAAG,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,aAAa,CAAC;IAE9C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAClC,YAAY,KAAK,IAAI,KAAK,kGAAkG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EACpJ;QACE,YAAY,EAAE,uGAAuG;QACrH,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,GAAG;KACjB,CACF,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1F,CAAC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@actuate-media/plugin-ai",
3
+ "version": "0.0.1",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/actuatecms/actuatecms.git",
7
+ "directory": "packages/plugin-ai"
8
+ },
9
+ "publishConfig": {
10
+ "access": "restricted"
11
+ },
12
+ "type": "module",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "files": ["dist"],
22
+ "scripts": {
23
+ "build": "tsc --project tsconfig.json",
24
+ "type-check": "tsc --noEmit",
25
+ "clean": "rm -rf dist .turbo"
26
+ },
27
+ "dependencies": {
28
+ "@actuate-media/cms-core": "workspace:*"
29
+ },
30
+ "devDependencies": {
31
+ "@types/react": "^19.0.0",
32
+ "typescript": "^5.7.0"
33
+ },
34
+ "peerDependencies": {
35
+ "react": "^19.2.0"
36
+ }
37
+ }