doccupine 0.0.31 → 0.0.32
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/templates/app/layout.js +3 -3
- package/dist/templates/app/not-found.d.ts +1 -1
- package/dist/templates/app/not-found.js +2 -2
- package/dist/templates/components/layout/GlobalStyles.d.ts +1 -1
- package/dist/templates/components/layout/GlobalStyles.js +6 -0
- package/dist/templates/env.example.d.ts +1 -1
- package/dist/templates/env.example.js +4 -4
- package/dist/templates/mdx/ai-assistant.mdx.d.ts +1 -1
- package/dist/templates/mdx/ai-assistant.mdx.js +10 -10
- package/dist/templates/mdx/globals.mdx.d.ts +1 -1
- package/dist/templates/mdx/globals.mdx.js +1 -1
- package/dist/templates/mdx/index.mdx.d.ts +1 -1
- package/dist/templates/mdx/index.mdx.js +1 -1
- package/dist/templates/services/llm/config.d.ts +1 -1
- package/dist/templates/services/llm/config.js +2 -2
- package/package.json +1 -1
|
@@ -24,11 +24,11 @@ ${fontConfig?.googleFont?.fontName?.length
|
|
|
24
24
|
export const metadata: Metadata = {
|
|
25
25
|
title: "Doccupine",
|
|
26
26
|
description:
|
|
27
|
-
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.",
|
|
27
|
+
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.",
|
|
28
28
|
openGraph: {
|
|
29
29
|
title: "Doccupine",
|
|
30
30
|
description:
|
|
31
|
-
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.",
|
|
31
|
+
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.",
|
|
32
32
|
},
|
|
33
33
|
};
|
|
34
34
|
|
|
@@ -44,7 +44,7 @@ export default async function RootLayout({
|
|
|
44
44
|
slug: "",
|
|
45
45
|
title: "Getting Started",
|
|
46
46
|
description:
|
|
47
|
-
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.",
|
|
47
|
+
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.",
|
|
48
48
|
date: "2025-01-15",
|
|
49
49
|
category: "Introduction",
|
|
50
50
|
categoryOrder: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const notFoundTemplate = "import { Metadata } from \"next\";\nimport { Docs } from \"@/components/Docs\";\n\nconst content = `# 404 Not Found\n\nYou just hit a route that doesn't exist.`;\n\nexport const metadata: Metadata = {\n title: \"Not Found\",\n description:\n \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.\",\n openGraph: {\n title: \"Not Found\",\n description:\n \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.\",\n },\n};\n\nexport default function Page() {\n return <Docs content={content} />;\n}\n";
|
|
1
|
+
export declare const notFoundTemplate = "import { Metadata } from \"next\";\nimport { Docs } from \"@/components/Docs\";\n\nconst content = `# 404 Not Found\n\nYou just hit a route that doesn't exist.`;\n\nexport const metadata: Metadata = {\n title: \"Not Found\",\n description:\n \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.\",\n openGraph: {\n title: \"Not Found\",\n description:\n \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.\",\n },\n};\n\nexport default function Page() {\n return <Docs content={content} />;\n}\n";
|
|
@@ -8,11 +8,11 @@ You just hit a route that doesn't exist.\`;
|
|
|
8
8
|
export const metadata: Metadata = {
|
|
9
9
|
title: "Not Found",
|
|
10
10
|
description:
|
|
11
|
-
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.",
|
|
11
|
+
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.",
|
|
12
12
|
openGraph: {
|
|
13
13
|
title: "Not Found",
|
|
14
14
|
description:
|
|
15
|
-
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.",
|
|
15
|
+
"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.",
|
|
16
16
|
},
|
|
17
17
|
};
|
|
18
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const globalStylesTemplate = "\"use client\";\nimport { createGlobalStyle } from \"styled-components\";\n\nconst GlobalStyles = createGlobalStyle`\nhtml,\nbody {\n margin: 0;\n padding: 0;\n min-height: 100%;\n scroll-behavior: smooth;\n background-color: ${({ theme }) => theme.colors.light};\n scroll-padding-top: 20px;\n}\n\nbody {\n font-family: \"Inter\", sans-serif;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n -webkit-font-smoothing: antialiased;\n}\n\n:root {\n interpolate-size: allow-keywords;\n}\n\n* {\n box-sizing: border-box;\n min-width: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n}\n\npre,\ncode,\nkbd,\nsamp,\nblockquote,\np,\na,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nul li,\nol li {\n margin: 0;\n padding: 0;\n color: ${({ theme }) => theme.colors.dark};\n}\n\na {\n color: ${({ theme }) => (theme.isDark ? theme.colors.dark : theme.colors.primary)};\n}\n\nol,\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\nfigure {\n margin: 0;\n}\n\nfieldset {\n appearance: none;\n border: none;\n}\n\nbutton,\ninput,\na,\nimg,\nsvg,\nsvg * {\n transition: all 0.3s ease;\n}\n\nstrong,\nb {\n font-weight: 700;\n}\n\n.full-width {\n width: 100%;\n}`;\n\nexport { GlobalStyles };\n";
|
|
1
|
+
export declare const globalStylesTemplate = "\"use client\";\nimport { createGlobalStyle } from \"styled-components\";\n\nconst GlobalStyles = createGlobalStyle`\nhtml,\nbody {\n margin: 0;\n padding: 0;\n min-height: 100%;\n scroll-behavior: smooth;\n background-color: ${({ theme }) => theme.colors.light};\n scroll-padding-top: 20px;\n}\n\nbody {\n font-family: \"Inter\", sans-serif;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n -webkit-font-smoothing: antialiased;\n}\n\n:root {\n interpolate-size: allow-keywords;\n}\n\n* {\n box-sizing: border-box;\n min-width: 0;\n}\n\nhr {\n border: none;\n border-bottom: solid 1px ${({ theme }) => theme.colors.grayLight};\n margin: 10px 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n}\n\npre,\ncode,\nkbd,\nsamp,\nblockquote,\np,\na,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nul li,\nol li {\n margin: 0;\n padding: 0;\n color: ${({ theme }) => theme.colors.dark};\n}\n\na {\n color: ${({ theme }) => (theme.isDark ? theme.colors.dark : theme.colors.primary)};\n}\n\nol,\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\nfigure {\n margin: 0;\n}\n\nfieldset {\n appearance: none;\n border: none;\n}\n\nbutton,\ninput,\na,\nimg,\nsvg,\nsvg * {\n transition: all 0.3s ease;\n}\n\nstrong,\nb {\n font-weight: 700;\n}\n\n.full-width {\n width: 100%;\n}`;\n\nexport { GlobalStyles };\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const envExampleTemplate = "# LLM Provider Configuration\n# Choose your preferred LLM provider: openai, anthropic, or google\nLLM_PROVIDER=openai\n\n# API Keys (set the one matching your provider)\nOPENAI_API_KEY=your_openai_api_key_here\nANTHROPIC_API_KEY=your_anthropic_api_key_here\nGOOGLE_API_KEY=your_google_api_key_here\n\n# Optional: Override default models\n# OpenAI models: gpt-
|
|
1
|
+
export declare const envExampleTemplate = "# LLM Provider Configuration\n# Choose your preferred LLM provider: openai, anthropic, or google\nLLM_PROVIDER=openai\n\n# API Keys (set the one matching your provider)\nOPENAI_API_KEY=your_openai_api_key_here\nANTHROPIC_API_KEY=your_anthropic_api_key_here\nGOOGLE_API_KEY=your_google_api_key_here\n\n# Optional: Override default models\n# OpenAI models: gpt-4.1-mini, gpt-4.1-nano, gpt-4.1\n# Anthropic models: claude-sonnet-4-5-20250929, claude-haiku-4-5-20251001, claude-opus-4-5-20251101\n# Google models: gemini-2.5-flash-lite, gemini-2.5-pro, gemini-2.5-flash\n# LLM_CHAT_MODEL=gpt-4.1-nano\n\n# Optional: Override default embedding model\n# OpenAI: text-embedding-3-small, text-embedding-3-large\n# Google: text-embedding-004\n# Note: Anthropic doesn't provide embeddings, will fallback to OpenAI\n# LLM_EMBEDDING_MODEL=text-embedding-3-small\n\n# Optional: Set temperature (0-1, default: 0)\n# LLM_TEMPERATURE=0\n";
|
|
@@ -8,10 +8,10 @@ ANTHROPIC_API_KEY=your_anthropic_api_key_here
|
|
|
8
8
|
GOOGLE_API_KEY=your_google_api_key_here
|
|
9
9
|
|
|
10
10
|
# Optional: Override default models
|
|
11
|
-
# OpenAI models: gpt-
|
|
12
|
-
# Anthropic models: claude-
|
|
13
|
-
# Google models: gemini-2.5-flash-lite, gemini-
|
|
14
|
-
# LLM_CHAT_MODEL=gpt-
|
|
11
|
+
# OpenAI models: gpt-4.1-mini, gpt-4.1-nano, gpt-4.1
|
|
12
|
+
# Anthropic models: claude-sonnet-4-5-20250929, claude-haiku-4-5-20251001, claude-opus-4-5-20251101
|
|
13
|
+
# Google models: gemini-2.5-flash-lite, gemini-2.5-pro, gemini-2.5-flash
|
|
14
|
+
# LLM_CHAT_MODEL=gpt-4.1-nano
|
|
15
15
|
|
|
16
16
|
# Optional: Override default embedding model
|
|
17
17
|
# OpenAI: text-embedding-3-small, text-embedding-3-large
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const aiAssistantMdxTemplate = "---\ntitle: \"AI Assistant\"\ndescription: \"Integrate AI capabilities into your Doccupine documentation using OpenAI, Anthropic, or Google Gemini.\"\ndate: \"2025-01-24\"\ncategory: \"Configuration\"\ncategoryOrder: 3\norder: 6\n---\n# AI Assistant\nDoccupine supports AI integration to enhance your documentation experience. You can use OpenAI, Anthropic, or Google Gemini to power AI features in your documentation site. The AI assistant uses your documentation content as context, allowing users to ask questions about your docs and receive accurate answers based on the documentation.\n\n## Setup\nTo enable AI features, create an `.env` file in the directory where your website is generated. By default, this is the `nextjs-app/` directory.\n\n## Configuration\nCreate an `.env` file with the following configuration options:\n\n```env\n# LLM Provider Configuration\n# Choose your preferred LLM provider: openai, anthropic, or google\nLLM_PROVIDER=openai\n\n# API Keys (set the one matching your provider)\nOPENAI_API_KEY=your_openai_api_key_here\nANTHROPIC_API_KEY=your_anthropic_api_key_here\nGOOGLE_API_KEY=your_google_api_key_here\n\n# Optional: Override default models\n# OpenAI models: gpt-
|
|
1
|
+
export declare const aiAssistantMdxTemplate = "---\ntitle: \"AI Assistant\"\ndescription: \"Integrate AI capabilities into your Doccupine documentation using OpenAI, Anthropic, or Google Gemini.\"\ndate: \"2025-01-24\"\ncategory: \"Configuration\"\ncategoryOrder: 3\norder: 6\n---\n# AI Assistant\nDoccupine supports AI integration to enhance your documentation experience. You can use OpenAI, Anthropic, or Google Gemini to power AI features in your documentation site. The AI assistant uses your documentation content as context, allowing users to ask questions about your docs and receive accurate answers based on the documentation.\n\n## Setup\nTo enable AI features, create an `.env` file in the directory where your website is generated. By default, this is the `nextjs-app/` directory.\n\n## Configuration\nCreate an `.env` file with the following configuration options:\n\n```env\n# LLM Provider Configuration\n# Choose your preferred LLM provider: openai, anthropic, or google\nLLM_PROVIDER=openai\n\n# API Keys (set the one matching your provider)\nOPENAI_API_KEY=your_openai_api_key_here\nANTHROPIC_API_KEY=your_anthropic_api_key_here\nGOOGLE_API_KEY=your_google_api_key_here\n\n# Optional: Override default models\n# OpenAI models: gpt-4.1-mini, gpt-4.1-nano, gpt-4.1\n# Anthropic models: claude-sonnet-4-5-20250929, claude-haiku-4-5-20251001, claude-opus-4-5-20251101\n# Google models: gemini-2.5-flash-lite, gemini-2.5-pro, gemini-2.5-flash\n# LLM_CHAT_MODEL=gpt-4.1-nano\n\n# Optional: Override default embedding model\n# OpenAI: text-embedding-3-small, text-embedding-3-large\n# Google: text-embedding-004\n# Note: Anthropic doesn't provide embeddings, will fallback to OpenAI\n# LLM_EMBEDDING_MODEL=text-embedding-3-small\n\n# Optional: Set temperature (0-1, default: 0)\n# LLM_TEMPERATURE=0\n```\n\n## Provider Selection\nSet `LLM_PROVIDER` to one of the following values:\n- `openai` - Use OpenAI's models (GPT-4.1, GPT-4.1-mini, GPT-4.1-nano)\n- `anthropic` - Use Anthropic's models (Claude Sonnet 4.5, Claude Haiku 4.5, Claude Opus 4.5)\n- `google` - Use Google's models (Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash-Lite)\n\n## API Keys\nYou need to set the API key that matches your chosen provider:\n- For OpenAI: Set `OPENAI_API_KEY`\n- For Anthropic: Set `ANTHROPIC_API_KEY`\n- For Google: Set `GOOGLE_API_KEY`\n\n<Callout type=\"warning\">\n Keep your API keys secure. Never commit your `.env` file to version control.\n</Callout>\n\n<Callout type=\"note\">\n Doccupine automatically adds `.env` to your `.gitignore` file.\n</Callout>\n\n## Using Anthropic with OpenAI\nIf you want to use Anthropic as your LLM provider, you must also have an OpenAI API key set. Here's why:\n\n### The Situation\nAnthropic (Claude) does not provide an embeddings API. They only offer chat/completion models, not text embeddings.\n\nYour RAG (Retrieval-Augmented Generation) system has two components:\n- **Chat/Completion** - Generates answers, works with Anthropic.\n- **Embeddings** - Creates vector representations of text for search, Anthropic doesn't provide this.\n\nWhen using Anthropic as your `LLM_PROVIDER`, Doccupine will use Anthropic for chat/completion tasks, but will automatically fallback to OpenAI for embeddings. This means you need both API keys configured:\n\n```env\nLLM_PROVIDER=anthropic\nANTHROPIC_API_KEY=your_anthropic_api_key_here\nOPENAI_API_KEY=your_openai_api_key_here\n```\n\nThis hybrid approach allows you to leverage Anthropic's powerful chat models while still having access to embeddings functionality through OpenAI.\n\n## Optional Settings\n\n### Chat Model\nOverride the default chat model by uncommenting and setting `LLM_CHAT_MODEL`. You can use any available model from your chosen provider. Example models include:\n- **OpenAI**: `gpt-4.1-nano`, `gpt-4.1-mini`, `gpt-4.1`\n- **Anthropic**: `claude-sonnet-4-5-20250929`, `claude-haiku-4-5-20251001`, `claude-opus-4-5-20251101`\n- **Google**: `gemini-2.5-flash-lite`, `gemini-2.5-pro`, `gemini-2.5-flash`\n\nFor a complete list of available models, refer to the official documentation:\n- [OpenAI Models](https://platform.openai.com/docs/models)\n- [Anthropic Models](https://docs.anthropic.com/claude/docs/models-overview)\n- [Google Gemini Models](https://ai.google.dev/models/gemini)\n\n### Embedding Model\nOverride the default embedding model by uncommenting and setting `LLM_EMBEDDING_MODEL`:\n- **OpenAI**: `text-embedding-3-small`, `text-embedding-3-large`\n- **Google**: `text-embedding-004`\n- **Anthropic**: Anthropic doesn't provide embeddings. If you use Anthropic as your provider, Doccupine will fallback to OpenAI for embeddings.\n\n### Temperature\nControl the randomness of AI responses by setting `LLM_TEMPERATURE` to a value between 0 and 1:\n- `0` - More deterministic and focused responses (default)\n- `1` - More creative and varied responses";
|
|
@@ -26,10 +26,10 @@ ANTHROPIC_API_KEY=your_anthropic_api_key_here
|
|
|
26
26
|
GOOGLE_API_KEY=your_google_api_key_here
|
|
27
27
|
|
|
28
28
|
# Optional: Override default models
|
|
29
|
-
# OpenAI models: gpt-
|
|
30
|
-
# Anthropic models: claude-
|
|
31
|
-
# Google models: gemini-2.5-flash-lite, gemini-
|
|
32
|
-
# LLM_CHAT_MODEL=gpt-
|
|
29
|
+
# OpenAI models: gpt-4.1-mini, gpt-4.1-nano, gpt-4.1
|
|
30
|
+
# Anthropic models: claude-sonnet-4-5-20250929, claude-haiku-4-5-20251001, claude-opus-4-5-20251101
|
|
31
|
+
# Google models: gemini-2.5-flash-lite, gemini-2.5-pro, gemini-2.5-flash
|
|
32
|
+
# LLM_CHAT_MODEL=gpt-4.1-nano
|
|
33
33
|
|
|
34
34
|
# Optional: Override default embedding model
|
|
35
35
|
# OpenAI: text-embedding-3-small, text-embedding-3-large
|
|
@@ -43,9 +43,9 @@ GOOGLE_API_KEY=your_google_api_key_here
|
|
|
43
43
|
|
|
44
44
|
## Provider Selection
|
|
45
45
|
Set \`LLM_PROVIDER\` to one of the following values:
|
|
46
|
-
- \`openai\` - Use OpenAI's models (GPT-
|
|
47
|
-
- \`anthropic\` - Use Anthropic's models (Claude
|
|
48
|
-
- \`google\` - Use Google's models (Gemini 2.5
|
|
46
|
+
- \`openai\` - Use OpenAI's models (GPT-4.1, GPT-4.1-mini, GPT-4.1-nano)
|
|
47
|
+
- \`anthropic\` - Use Anthropic's models (Claude Sonnet 4.5, Claude Haiku 4.5, Claude Opus 4.5)
|
|
48
|
+
- \`google\` - Use Google's models (Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash-Lite)
|
|
49
49
|
|
|
50
50
|
## API Keys
|
|
51
51
|
You need to set the API key that matches your chosen provider:
|
|
@@ -85,9 +85,9 @@ This hybrid approach allows you to leverage Anthropic's powerful chat models whi
|
|
|
85
85
|
|
|
86
86
|
### Chat Model
|
|
87
87
|
Override the default chat model by uncommenting and setting \`LLM_CHAT_MODEL\`. You can use any available model from your chosen provider. Example models include:
|
|
88
|
-
- **OpenAI**: \`gpt-
|
|
89
|
-
- **Anthropic**: \`claude-
|
|
90
|
-
- **Google**: \`gemini-2.5-flash-lite\`, \`gemini-
|
|
88
|
+
- **OpenAI**: \`gpt-4.1-nano\`, \`gpt-4.1-mini\`, \`gpt-4.1\`
|
|
89
|
+
- **Anthropic**: \`claude-sonnet-4-5-20250929\`, \`claude-haiku-4-5-20251001\`, \`claude-opus-4-5-20251101\`
|
|
90
|
+
- **Google**: \`gemini-2.5-flash-lite\`, \`gemini-2.5-pro\`, \`gemini-2.5-flash\`
|
|
91
91
|
|
|
92
92
|
For a complete list of available models, refer to the official documentation:
|
|
93
93
|
- [OpenAI Models](https://platform.openai.com/docs/models)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const globalsMdxTemplate = "---\ntitle: \"Globals\"\ndescription: \"Configure global settings for your documentation.\"\ndate: \"2025-01-15\"\ncategory: \"Configuration\"\ncategoryOrder: 3\norder: 1\n---\n# Global Configuration\nUse a `config.json` file to define project\u2011wide metadata for your documentation site. These values are applied to every generated page unless a page overrides them in its own frontmatter.\n\n## config.json\nPlace a `config.json` at your project root (the same folder where you execute `npx doccupine`) to define global metadata for your documentation site.\n\n```json\n{\n \"name\": \"Doccupine\",\n \"description\": \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.\",\n \"icon\": \"https://doccupine.com/favicon.ico\",\n \"preview\": \"https://doccupine.com/preview.png\"\n}\n```\n\n## Fields\n- **name**: The primary name of your documentation website. Displayed in the site title and used in various UI elements.\n- **description**: A concise summary of your project, used in site metadata (e.g., HTML meta description) and social previews when not overridden.\n- **icon**: The favicon for your site. You can provide a full URL or a relative path to an asset in your project.\n- **preview**: The Open Graph image used when links to your docs are shared. Accepts a full URL or a relative path.\n\n## Per\u2011page overrides\nAny page can override these global values by defining the same keys in its frontmatter. When present, the page\u2019s values take precedence over `config.json` for that page only.\n\nExample frontmatter in an `.mdx` file:\n\n```text\n---\ntitle: \"My Feature\"\ndescription: \"A focused description just for this page.\"\nname: \"My Product Docs\"\nicon: \"https://doccupine.com/favicon.ico\"\npreview: \"https://doccupine.com/preview.png\"\ndate: \"2025-01-15\"\ncategory: \"Guides\"\n---\n```\n\nIf a key is not specified in a page\u2019s frontmatter, Doccupine falls back to the corresponding value in `config.json`.";
|
|
1
|
+
export declare const globalsMdxTemplate = "---\ntitle: \"Globals\"\ndescription: \"Configure global settings for your documentation.\"\ndate: \"2025-01-15\"\ncategory: \"Configuration\"\ncategoryOrder: 3\norder: 1\n---\n# Global Configuration\nUse a `config.json` file to define project\u2011wide metadata for your documentation site. These values are applied to every generated page unless a page overrides them in its own frontmatter.\n\n## config.json\nPlace a `config.json` at your project root (the same folder where you execute `npx doccupine`) to define global metadata for your documentation site.\n\n```json\n{\n \"name\": \"Doccupine\",\n \"description\": \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.\",\n \"icon\": \"https://doccupine.com/favicon.ico\",\n \"preview\": \"https://doccupine.com/preview.png\"\n}\n```\n\n## Fields\n- **name**: The primary name of your documentation website. Displayed in the site title and used in various UI elements.\n- **description**: A concise summary of your project, used in site metadata (e.g., HTML meta description) and social previews when not overridden.\n- **icon**: The favicon for your site. You can provide a full URL or a relative path to an asset in your project.\n- **preview**: The Open Graph image used when links to your docs are shared. Accepts a full URL or a relative path.\n\n## Per\u2011page overrides\nAny page can override these global values by defining the same keys in its frontmatter. When present, the page\u2019s values take precedence over `config.json` for that page only.\n\nExample frontmatter in an `.mdx` file:\n\n```text\n---\ntitle: \"My Feature\"\ndescription: \"A focused description just for this page.\"\nname: \"My Product Docs\"\nicon: \"https://doccupine.com/favicon.ico\"\npreview: \"https://doccupine.com/preview.png\"\ndate: \"2025-01-15\"\ncategory: \"Guides\"\n---\n```\n\nIf a key is not specified in a page\u2019s frontmatter, Doccupine falls back to the corresponding value in `config.json`.";
|
|
@@ -15,7 +15,7 @@ Place a \`config.json\` at your project root (the same folder where you execute
|
|
|
15
15
|
\`\`\`json
|
|
16
16
|
{
|
|
17
17
|
"name": "Doccupine",
|
|
18
|
-
"description": "Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.",
|
|
18
|
+
"description": "Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.",
|
|
19
19
|
"icon": "https://doccupine.com/favicon.ico",
|
|
20
20
|
"preview": "https://doccupine.com/preview.png"
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const indexMdxTemplate = "---\ntitle: \"Getting Started\"\ndescription: \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease.\"\ndate: \"2025-01-15\"\ncategory: \"General\"\ncategoryOrder: 0\norder: 0\n---\n# Welcome to Doccupine\nUsing Doccupine, you simply create your documentation in MDX files with traditional Markdown syntax, Doccupine monitors your changes automatically generating a beautiful, modern documentation website.\n\n## Getting Started\n\nTo get started with Doccupine, make sure you have [Node.js](https://nodejs.org) and npm installed on your machine. Then, follow these steps:\n\n- **Run Doccupine CLI:**\n\nCreate a new directory for your project and navigate to it in your terminal. Run the following command to create a new Doccupine project:\n\n```bash\nnpx doccupine\n```\n\nOnce you run the command, Doccupine will ask you to select a directory to store your MDX files. Choose the directory where you want to create your documentation files.\nAfter selecting the directory, Doccupine will ask you to enter the name of the directory for the generated website. Enter the name of the directory where you want to create your website.\n\nThis will start the development server on port 3000. Open your browser and navigate to http://localhost:3000 to view your documentation.\n\n## Start documenting\nStart documenting your project by editing the `index.mdx` file in the choosen MDX directory, this is the content for the home page of your documentation website.\n\nIn your MDX directory, you can structure your content using folders and files. Doccupine will automatically generate a navigation menu based on the configured categories and order.\n";
|
|
1
|
+
export declare const indexMdxTemplate = "---\ntitle: \"Getting Started\"\ndescription: \"Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready.\"\ndate: \"2025-01-15\"\ncategory: \"General\"\ncategoryOrder: 0\norder: 0\n---\n# Welcome to Doccupine\nUsing Doccupine, you simply create your documentation in MDX files with traditional Markdown syntax, Doccupine monitors your changes automatically generating a beautiful, modern documentation website.\n\n## Getting Started\n\nTo get started with Doccupine, make sure you have [Node.js](https://nodejs.org) and npm installed on your machine. Then, follow these steps:\n\n- **Run Doccupine CLI:**\n\nCreate a new directory for your project and navigate to it in your terminal. Run the following command to create a new Doccupine project:\n\n```bash\nnpx doccupine\n```\n\nOnce you run the command, Doccupine will ask you to select a directory to store your MDX files. Choose the directory where you want to create your documentation files.\nAfter selecting the directory, Doccupine will ask you to enter the name of the directory for the generated website. Enter the name of the directory where you want to create your website.\n\nThis will start the development server on port 3000. Open your browser and navigate to http://localhost:3000 to view your documentation.\n\n## Start documenting\nStart documenting your project by editing the `index.mdx` file in the choosen MDX directory, this is the content for the home page of your documentation website.\n\nIn your MDX directory, you can structure your content using folders and files. Doccupine will automatically generate a navigation menu based on the configured categories and order.\n";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const indexMdxTemplate = `---
|
|
2
2
|
title: "Getting Started"
|
|
3
|
-
description: "Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease."
|
|
3
|
+
description: "Doccupine is a free and open-source document management system that allows you to store, organize, and share your documentation with ease. AI-ready."
|
|
4
4
|
date: "2025-01-15"
|
|
5
5
|
category: "General"
|
|
6
6
|
categoryOrder: 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const llmConfigTemplate = "import type {\n LLMConfig,\n LLMProvider,\n ProviderDefaults,\n} from \"@/services/llm/types\";\nconst PROVIDER_DEFAULTS: ProviderDefaults = {\n openai: {\n chat: \"gpt-
|
|
1
|
+
export declare const llmConfigTemplate = "import type {\n LLMConfig,\n LLMProvider,\n ProviderDefaults,\n} from \"@/services/llm/types\";\nconst PROVIDER_DEFAULTS: ProviderDefaults = {\n openai: {\n chat: \"gpt-4.1-nano\",\n embedding: \"text-embedding-3-small\",\n },\n anthropic: {\n chat: \"claude-sonnet-4-5-20250929\",\n embedding: \"text-embedding-3-small\", // Fallback to OpenAI\n },\n google: {\n chat: \"gemini-2.5-flash-lite\",\n embedding: \"text-embedding-004\",\n },\n};\nfunction validateAPIKeys(provider: LLMProvider): void {\n const requiredKeys: Record<LLMProvider, string> = {\n openai: \"OPENAI_API_KEY\",\n anthropic: \"ANTHROPIC_API_KEY\",\n google: \"GOOGLE_API_KEY\",\n };\n const keyName = requiredKeys[provider];\n const keyValue = process.env[keyName];\n if (!keyValue) {\n throw new Error(\n `Missing API key for ${provider}. Please set ${keyName} in your environment variables.`,\n );\n }\n if (provider === \"anthropic\" && !process.env.OPENAI_API_KEY) {\n console.warn(\n \"Anthropic provider requires OPENAI_API_KEY for embeddings. Please set OPENAI_API_KEY in your environment variables.\",\n );\n }\n}\nexport function getLLMConfig(): LLMConfig {\n const provider = (process.env.LLM_PROVIDER || \"openai\") as LLMProvider;\n if (![\"openai\", \"anthropic\", \"google\"].includes(provider)) {\n throw new Error(\n `Invalid LLM_PROVIDER: ${provider}. Must be one of: openai, anthropic, google`,\n );\n }\n validateAPIKeys(provider);\n const defaults = PROVIDER_DEFAULTS[provider];\n return {\n provider,\n chatModel: process.env.LLM_CHAT_MODEL || defaults.chat,\n embeddingModel: process.env.LLM_EMBEDDING_MODEL || defaults.embedding,\n temperature: parseFloat(process.env.LLM_TEMPERATURE || \"0\"),\n };\n}\nexport function getLLMDisplayName(config?: LLMConfig): string {\n const c = config || getLLMConfig();\n const providerNames: Record<LLMProvider, string> = {\n openai: \"OpenAI\",\n anthropic: \"Anthropic\",\n google: \"Google\",\n };\n return `${providerNames[c.provider]} (${c.chatModel})`;\n}\nexport function isLLMConfigured(): boolean {\n try {\n getLLMConfig();\n return true;\n } catch {\n return false;\n }\n}\n";
|
|
@@ -5,11 +5,11 @@ export const llmConfigTemplate = `import type {
|
|
|
5
5
|
} from "@/services/llm/types";
|
|
6
6
|
const PROVIDER_DEFAULTS: ProviderDefaults = {
|
|
7
7
|
openai: {
|
|
8
|
-
chat: "gpt-
|
|
8
|
+
chat: "gpt-4.1-nano",
|
|
9
9
|
embedding: "text-embedding-3-small",
|
|
10
10
|
},
|
|
11
11
|
anthropic: {
|
|
12
|
-
chat: "claude-
|
|
12
|
+
chat: "claude-sonnet-4-5-20250929",
|
|
13
13
|
embedding: "text-embedding-3-small", // Fallback to OpenAI
|
|
14
14
|
},
|
|
15
15
|
google: {
|