jamdesk 1.1.26 → 1.1.28

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/lib/deps.js CHANGED
@@ -23,13 +23,13 @@ const JAMDESK_DIR = path.join(homedir(), '.jamdesk');
23
23
  // compiled dist/lib/deps.js instead of re-parsing the TypeScript source.
24
24
  export const REQUIRED_DEPS = {
25
25
  // Next.js and React
26
- 'next': '16.2.3',
26
+ 'next': '^16.2.4',
27
27
  // OpenAPI validation (for API reference docs)
28
28
  '@apidevtools/swagger-parser': '^12.1.0',
29
29
  'openapi-types': '^12.1.3',
30
30
  'react': '^19.2.4',
31
31
  'react-dom': '^19.2.4',
32
- '@next/mdx': '16.2.3',
32
+ '@next/mdx': '^16.2.4',
33
33
  'next-mdx-remote': '^6.0.0',
34
34
  'next-themes': '^0.4.6',
35
35
  // Icons
@@ -76,7 +76,7 @@ export const REQUIRED_DEPS = {
76
76
  'tailwindcss': '^4.2.2',
77
77
  '@tailwindcss/postcss': '^4.2.2',
78
78
  '@tailwindcss/typography': '^0.5.10',
79
- 'postcss': '^8.5.9',
79
+ 'postcss': '^8.5.10',
80
80
  'autoprefixer': '^10.4.24',
81
81
  // Script dependencies (for vendored scripts)
82
82
  'fs-extra': '^11.3.3',
@@ -87,7 +87,7 @@ export const REQUIRED_DEPS = {
87
87
  '@types/node': '^25.5.2',
88
88
  '@types/react': '^19.2.14',
89
89
  '@types/react-dom': '^19.0.0',
90
- '@next/third-parties': '16.2.3',
90
+ '@next/third-parties': '^16.2.4',
91
91
  };
92
92
  /**
93
93
  * Generate a hash of REQUIRED_DEPS to detect when dependencies change.
@@ -1 +1 @@
1
- {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"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"}
@@ -139,6 +139,7 @@ export interface ParsedOpenApiFrontmatter {
139
139
  specPath: string;
140
140
  method: HttpMethod;
141
141
  path: string;
142
+ isShortFormat: boolean;
142
143
  }
143
144
  /**
144
145
  * Validation error types
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/openapi/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/openapi/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jamdesk",
3
- "version": "1.1.26",
3
+ "version": "1.1.28",
4
4
  "description": "CLI for Jamdesk — build, preview, and deploy documentation sites from MDX. Dev server with hot reload, 50+ components, OpenAPI support, AI search, and Mintlify migration",
5
5
  "keywords": [
6
6
  "jamdesk",
@@ -27,6 +27,7 @@ import { PageNavigation } from '@/components/navigation/PageNavigation';
27
27
  import { SocialFooter } from '@/components/navigation/SocialFooter';
28
28
  import { ApiPageWrapper } from '@/components/mdx/ApiPage';
29
29
  import { OpenApiEndpoint } from '@/components/mdx/OpenApiEndpoint';
30
+ import { OpenApiError } from '@/components/openapi/OpenApiError';
30
31
  import { getHighlighter } from '@/lib/shiki-highlighter';
31
32
  import { createShikiRehypePlugin } from '@/lib/shiki-config';
32
33
  import rehypeSlug from 'rehype-slug';
@@ -69,6 +70,7 @@ import {
69
70
  generateCodeExamples,
70
71
  formatOpenApiWarning,
71
72
  type OpenApiEndpointData,
73
+ type OpenApiValidationError,
72
74
  type CodeExample,
73
75
  type AuthMethod,
74
76
  } from '@/lib/openapi';
@@ -547,46 +549,76 @@ export default async function DocPage({ params }: PageProps) {
547
549
  // Parse OpenAPI endpoint data if openapi frontmatter is present
548
550
  let openApiEndpointData: OpenApiEndpointData | null = null;
549
551
  let openApiCodeExamples: CodeExample[] | null = null;
552
+ let openApiError: string | null = null;
550
553
 
551
554
  // OpenAPI spec parsing - supports both static and ISR modes
552
555
  if (data.openapi && typeof data.openapi === 'string') {
553
556
  try {
554
- // Get default spec path from config if configured
555
- const defaultSpecPath = typeof config.api?.openapi === 'string' ? config.api.openapi : undefined;
556
-
557
- // Parse the frontmatter to get spec path, method, and endpoint path
558
- const parsed = parseOpenApiFrontmatter(data.openapi, defaultSpecPath);
559
-
560
- if (isIsrMode() && projectSlug) {
561
- // ISR mode: fetch spec from R2 or URL
562
- const { resolveOpenApiSpec } = await import('@/lib/openapi-isr');
563
- const spec = await resolveOpenApiSpec(projectSlug, parsed.specPath);
564
- // Cast to expected type - the ISR fetcher validates the spec structure
565
- openApiEndpointData = parseEndpoint(
566
- spec as Parameters<typeof parseEndpoint>[0],
567
- parsed.method,
568
- parsed.path,
569
- parsed.specPath
570
- );
571
- } else {
572
- // Static mode: fetch spec from filesystem
573
- const contentDir = getContentDir();
574
- const { api } = await getCachedSpec(parsed.specPath, contentDir);
575
- openApiEndpointData = parseEndpoint(api, parsed.method, parsed.path, parsed.specPath);
557
+ // Normalize config to array (handles string, array, or undefined)
558
+ const openApiConfig = config.api?.openapi;
559
+ const allSpecPaths: string[] = typeof openApiConfig === 'string'
560
+ ? [openApiConfig]
561
+ : Array.isArray(openApiConfig)
562
+ ? openApiConfig
563
+ : [];
564
+
565
+ const parsed = parseOpenApiFrontmatter(
566
+ data.openapi,
567
+ allSpecPaths.length > 0 ? allSpecPaths : undefined
568
+ );
569
+
570
+ const specsToTry = parsed.isShortFormat && allSpecPaths.length > 1
571
+ ? allSpecPaths
572
+ : [parsed.specPath];
573
+
574
+ // Hoist mode-dependent values before the loop
575
+ const useIsr = isIsrMode() && !!projectSlug;
576
+ const resolveSpec = useIsr
577
+ ? (await import('@/lib/openapi-isr')).resolveOpenApiSpec
578
+ : null;
579
+ const contentDir = useIsr ? null : getContentDir();
580
+
581
+ let lastError: unknown = null;
582
+
583
+ for (const specPath of specsToTry) {
584
+ try {
585
+ if (resolveSpec && projectSlug) {
586
+ const spec = await resolveSpec(projectSlug, specPath);
587
+ openApiEndpointData = parseEndpoint(
588
+ spec as Parameters<typeof parseEndpoint>[0],
589
+ parsed.method,
590
+ parsed.path,
591
+ specPath
592
+ );
593
+ } else {
594
+ const { api } = await getCachedSpec(specPath, contentDir!);
595
+ openApiEndpointData = parseEndpoint(api, parsed.method, parsed.path, specPath);
596
+ }
597
+ lastError = null;
598
+ break;
599
+ } catch (err) {
600
+ lastError = err;
601
+ }
602
+ }
603
+
604
+ if (lastError) {
605
+ throw lastError;
576
606
  }
577
607
 
578
608
  // Generate code examples
579
- const authMethod = config.api?.mdx?.auth?.method as AuthMethod | undefined;
580
- const languages = config.api?.examples?.languages;
581
- openApiCodeExamples = generateCodeExamples(openApiEndpointData, { authMethod, languages });
609
+ if (openApiEndpointData) {
610
+ const authMethod = config.api?.mdx?.auth?.method as AuthMethod | undefined;
611
+ const languages = config.api?.examples?.languages;
612
+ openApiCodeExamples = generateCodeExamples(openApiEndpointData, { authMethod, languages });
613
+ }
582
614
  } catch (err) {
583
- // Log formatted warning to console (appears in CLI and build logs)
584
- // Check if it's an OpenAPI validation error with our format
585
- const error = err as { type?: string; specPath?: string; message?: string; suggestion?: string };
615
+ const error = err as Partial<OpenApiValidationError>;
586
616
  if (error.type && error.specPath && error.message) {
587
- console.warn(formatOpenApiWarning(error as Parameters<typeof formatOpenApiWarning>[0]));
617
+ console.warn(formatOpenApiWarning(error as OpenApiValidationError));
618
+ openApiError = error.message;
588
619
  } else {
589
620
  console.error(`Failed to parse OpenAPI for ${slug.join('/')}:`, err);
621
+ openApiError = 'Unexpected error loading OpenAPI specification';
590
622
  }
591
623
  }
592
624
  }
@@ -712,6 +744,11 @@ export default async function DocPage({ params }: PageProps) {
712
744
  />
713
745
  )}
714
746
 
747
+ {/* OpenAPI error — shown when spec parsing fails */}
748
+ {!openApiEndpointData && openApiError && (
749
+ <OpenApiError message={openApiError} slug={slug.join('/')} />
750
+ )}
751
+
715
752
  {/* Additional MDX content — strip <ResponseExample> on OpenAPI pages
716
753
  (auto-generated ResponseExamplePanel already handles responses) */}
717
754
  <ImagePriorityProvider>
@@ -22,9 +22,10 @@
22
22
  */
23
23
  import { NextRequest } from 'next/server';
24
24
  import { querySimilarChunks } from '@/lib/vector-store';
25
- import { buildSystemPrompt } from '@/lib/chat-prompt';
25
+ import { buildSystemPrompt, buildCannedIdentityReply, resolveSiteName } from '@/lib/chat-prompt';
26
26
  import { getDocsPath, getBaseUrl, trackChatAnalytics } from '@/lib/route-helpers';
27
27
  import { getAnthropicClient } from '@/lib/anthropic-client';
28
+ import { fetchDocsConfig } from '@/lib/r2-content';
28
29
  import { redis } from '@/lib/redis';
29
30
 
30
31
  export const runtime = 'nodejs';
@@ -209,7 +210,17 @@ export async function POST(
209
210
  }
210
211
  }
211
212
 
212
- // Query Upstash Vector for relevant chunks
213
+ // Kick off docsPath (Redis) + config (R2) lookups in parallel with the
214
+ // vector search below. Per-promise .catch prevents unhandled rejections
215
+ // if an early return (vector error, empty chunks, missing client) leaves
216
+ // sideWork un-awaited.
217
+ const originalHost = request.headers.get('x-jamdesk-forwarded-host')
218
+ || request.headers.get('x-original-host') || '';
219
+ const sideWork = Promise.all([
220
+ getDocsPath(project, originalHost).catch(() => ''),
221
+ fetchDocsConfig(project).catch(() => null),
222
+ ]);
223
+
213
224
  let chunks: Awaited<ReturnType<typeof querySimilarChunks>>;
214
225
  try {
215
226
  chunks = await querySimilarChunks(project, searchQuery, 8);
@@ -235,19 +246,11 @@ export async function POST(
235
246
  );
236
247
  }
237
248
 
238
- // Resolve project URLs falls back to defaults if R2/config unavailable
239
- const originalHost = request.headers.get('x-jamdesk-forwarded-host')
240
- || request.headers.get('x-original-host') || '';
249
+ const [docsPath, config] = await sideWork;
241
250
  const baseUrl = getBaseUrl(project, originalHost);
242
- let docsPath: string;
243
- try {
244
- docsPath = await getDocsPath(project, originalHost);
245
- } catch {
246
- docsPath = '';
247
- }
251
+ const siteName = resolveSiteName(config);
248
252
 
249
- // Build system prompt with retrieved context
250
- const systemPrompt = buildSystemPrompt(project, chunks, baseUrl, docsPath);
253
+ const systemPrompt = buildSystemPrompt(siteName, chunks, baseUrl, docsPath);
251
254
 
252
255
  const stream = anthropic.messages.stream({
253
256
  model: CHAT_MODEL,
@@ -290,7 +293,15 @@ export async function POST(
290
293
 
291
294
  // Extract [Title] references from Claude's response (skip markdown links [text](url))
292
295
  const { sources, hadExplicitCitations } = extractCitations(fullText, chunks);
293
- controller.enqueue(sendEvent({ type: 'citations', sources }));
296
+
297
+ // If Claude returned the canned identity reply, suppress citations — otherwise
298
+ // the "top 2 by score" fallback in extractCitations would attach unrelated
299
+ // docs sources under "I'm the documentation assistant for …".
300
+ const isIdentityReply = fullText.trim() === buildCannedIdentityReply(siteName);
301
+ controller.enqueue(sendEvent({
302
+ type: 'citations',
303
+ sources: isIdentityReply ? [] : sources,
304
+ }));
294
305
  controller.enqueue(sendEvent({ type: 'done' }));
295
306
 
296
307
  // Fire-and-forget analytics — only on success (finalMessage unreliable on error)
@@ -301,7 +312,7 @@ export async function POST(
301
312
  inputTokens,
302
313
  outputTokens,
303
314
  model: CHAT_MODEL,
304
- hadExplicitCitations,
315
+ hadExplicitCitations: isIdentityReply || hadExplicitCitations,
305
316
  hasClarification: options !== null,
306
317
  durationMs: Date.now() - startTime,
307
318
  userAgent: request.headers.get('user-agent') || undefined,
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Docs Search API — Semantic Search Endpoint
3
+ *
4
+ * REST API for external integrations (Intercom, Zendesk, custom chatbots)
5
+ * to search project documentation via vector similarity.
6
+ *
7
+ * Security:
8
+ * - Opaque API key auth (SHA-256 hash lookup in Upstash Redis; revocation
9
+ * is a Redis DEL, so there is no separate blocklist)
10
+ * - Per-key rate limiting (60 req/min)
11
+ * - CORS enabled (cross-origin access by design)
12
+ *
13
+ * Usage:
14
+ * POST https://acme.jamdesk.app/_api/search
15
+ * Authorization: Bearer jd_live_<32 hex>
16
+ * {"query": "How do I authenticate?", "limit": 5}
17
+ */
18
+ import { NextRequest, NextResponse } from 'next/server';
19
+ import { querySimilarChunks } from '@/lib/vector-store';
20
+ import { verifyApiKey } from '@/lib/docs-search-auth';
21
+ import { getBaseUrl, trackServerAnalytics } from '@/lib/route-helpers';
22
+ import { redis } from '@/lib/redis';
23
+
24
+ export const runtime = 'nodejs';
25
+ export const maxDuration = 30;
26
+
27
+ const CORS_HEADERS = {
28
+ 'Access-Control-Allow-Origin': '*',
29
+ 'Access-Control-Allow-Methods': 'POST, OPTIONS',
30
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
31
+ };
32
+
33
+ const MAX_LIMIT = 20;
34
+ const DEFAULT_LIMIT = 5;
35
+ const MAX_QUERY_LENGTH = 500;
36
+ const RATE_LIMIT_PER_MIN = 60;
37
+
38
+ export async function OPTIONS(_request: NextRequest) {
39
+ return new NextResponse(null, { status: 204, headers: CORS_HEADERS });
40
+ }
41
+
42
+ export async function POST(
43
+ request: NextRequest,
44
+ context: { params: Promise<{ project: string }> },
45
+ ): Promise<NextResponse> {
46
+ const { project } = await context.params;
47
+
48
+ // --- Auth: verify opaque key against Upstash ---
49
+ // A revoked key is a Redis DEL, so "not found" and "revoked" collapse
50
+ // into the same invalid_key reason — no separate blocklist check.
51
+ // RFC 7235: scheme is case-insensitive. Accept `Bearer`, `bearer`, etc.,
52
+ // and tolerate stray whitespace rather than 401-ing strict clients.
53
+ const token = (request.headers.get('Authorization') || '')
54
+ .replace(/^Bearer\s+/i, '')
55
+ .trim();
56
+ const verify = await verifyApiKey(token, project);
57
+
58
+ if (!verify.ok) {
59
+ const status =
60
+ verify.reason === 'wrong_project' ? 403 :
61
+ verify.reason === 'lookup_failed' ||
62
+ verify.reason === 'redis_unavailable' ? 503 :
63
+ 401;
64
+ return NextResponse.json(
65
+ { error: verify.reason },
66
+ { status, headers: CORS_HEADERS },
67
+ );
68
+ }
69
+
70
+ // --- Rate limiting: per key ID ---
71
+ // Always-call expire (not just on count === 1) — otherwise a transient
72
+ // failure between INCR and EXPIRE leaves the bucket immortal, slowly
73
+ // leaking Upstash keys. EXPIRE is idempotent.
74
+ if (redis) {
75
+ try {
76
+ const rlKey = `docs_search_rl:${verify.id}:${Math.floor(Date.now() / 60000)}`;
77
+ const count = await redis.incr(rlKey);
78
+ await redis.expire(rlKey, 120);
79
+
80
+ if (count > RATE_LIMIT_PER_MIN) {
81
+ return NextResponse.json(
82
+ { error: 'Rate limit exceeded' },
83
+ { status: 429, headers: { ...CORS_HEADERS, 'Retry-After': '60' } },
84
+ );
85
+ }
86
+ } catch {
87
+ // Redis down — allow through
88
+ }
89
+ }
90
+
91
+ // --- Parse & validate request body ---
92
+ let body: { query?: string; limit?: number };
93
+ try {
94
+ body = await request.json();
95
+ } catch {
96
+ return NextResponse.json(
97
+ { error: 'Invalid JSON body' },
98
+ { status: 400, headers: CORS_HEADERS },
99
+ );
100
+ }
101
+
102
+ const { query, limit: rawLimit } = body;
103
+
104
+ if (!query || typeof query !== 'string' || query.trim().length === 0) {
105
+ return NextResponse.json(
106
+ { error: 'Missing or empty "query" field' },
107
+ { status: 400, headers: CORS_HEADERS },
108
+ );
109
+ }
110
+
111
+ if (query.length > MAX_QUERY_LENGTH) {
112
+ return NextResponse.json(
113
+ { error: `Query exceeds ${MAX_QUERY_LENGTH} characters` },
114
+ { status: 400, headers: CORS_HEADERS },
115
+ );
116
+ }
117
+
118
+ // Use Number.isFinite so limit=0 clamps to 1 instead of falling to default
119
+ const parsedLimit = Number(rawLimit);
120
+ const effectiveLimit = Number.isFinite(parsedLimit)
121
+ ? parsedLimit
122
+ : DEFAULT_LIMIT;
123
+ const limit = Math.min(
124
+ Math.max(1, Math.floor(effectiveLimit)),
125
+ MAX_LIMIT,
126
+ );
127
+
128
+ // --- Semantic vector search ---
129
+ const startMs = Date.now();
130
+ let chunks;
131
+ try {
132
+ chunks = await querySimilarChunks(project, query.trim(), limit);
133
+ } catch (err) {
134
+ console.error('Vector search failed:', err);
135
+ return NextResponse.json(
136
+ { error: 'Search temporarily unavailable' },
137
+ { status: 502, headers: CORS_HEADERS },
138
+ );
139
+ }
140
+ const durationMs = Date.now() - startMs;
141
+
142
+ const resolvedHost = request.headers.get('x-jamdesk-forwarded-host')
143
+ || request.headers.get('x-original-host') || '';
144
+ const baseUrl = getBaseUrl(project, resolvedHost);
145
+
146
+ const results = chunks.map(chunk => ({
147
+ title: chunk.pageTitle,
148
+ section: chunk.sectionHeading || undefined,
149
+ slug: chunk.pageSlug,
150
+ content: chunk.content.slice(0, 500),
151
+ url: `${baseUrl}/${chunk.pageSlug}`,
152
+ score: Math.round(chunk.score * 1000) / 1000,
153
+ }));
154
+
155
+ // --- Analytics (fire-and-forget) ---
156
+ trackServerAnalytics({
157
+ projectSlug: project,
158
+ type: 'docs_search',
159
+ query: query.trim(),
160
+ resultsCount: results.length,
161
+ source: `key:${verify.id}`,
162
+ });
163
+
164
+ return NextResponse.json(
165
+ { results, query: query.trim(), total: results.length, durationMs },
166
+ { status: 200, headers: CORS_HEADERS },
167
+ );
168
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * OpenApiError — visible warning when OpenAPI spec resolution fails.
3
+ * Renders in all environments (dev, ISR, CLI) so users see the problem
4
+ * instead of a silently blank page.
5
+ */
6
+
7
+ interface OpenApiErrorProps {
8
+ message: string;
9
+ slug: string;
10
+ }
11
+
12
+ export function OpenApiError({ message, slug }: OpenApiErrorProps) {
13
+ return (
14
+ <div
15
+ role="alert"
16
+ style={{
17
+ margin: '1.5rem 0',
18
+ padding: '1rem 1.25rem',
19
+ borderRadius: '8px',
20
+ border: '1px solid #f59e0b',
21
+ backgroundColor: 'rgba(245, 158, 11, 0.08)',
22
+ fontSize: '0.875rem',
23
+ lineHeight: 1.5,
24
+ color: 'var(--color-text-primary, #1e293b)',
25
+ }}
26
+ >
27
+ <div style={{ fontWeight: 600, marginBottom: '0.375rem' }}>
28
+ OpenAPI Error
29
+ </div>
30
+ <div style={{ color: 'var(--color-text-muted, #64748b)' }}>
31
+ Failed to load the OpenAPI specification for <code>{slug}</code>: {message}
32
+ </div>
33
+ </div>
34
+ );
35
+ }
@@ -408,7 +408,7 @@ export function SearchModal({ isOpen, onClose, popularPages, onNavigate }: Searc
408
408
  placeholder="Search documentation…"
409
409
  value={query}
410
410
  onChange={(e) => setQuery(e.target.value)}
411
- className="flex-1 bg-transparent text-[var(--color-text-primary)] placeholder-[var(--color-text-muted)] outline-none text-sm"
411
+ className="flex-1 bg-transparent text-[var(--color-text-primary)] placeholder-[var(--color-text-muted)] outline-none text-base"
412
412
  autoComplete="off"
413
413
  autoFocus
414
414
  aria-label="Search documentation"
@@ -14,6 +14,33 @@ export interface ChatContext {
14
14
  score: number;
15
15
  }
16
16
 
17
+ export const DEFAULT_SITE_NAME = 'this site';
18
+ const MAX_SITE_NAME_LEN = 200;
19
+
20
+ /**
21
+ * The exact sentence Claude must return when asked self-identity questions
22
+ * ("which model are you", "are you Claude", etc.). Exported so the chat route
23
+ * can detect identity responses and suppress unrelated RAG citations.
24
+ *
25
+ * Pinned by a unit test against the string embedded in buildSystemPrompt — if
26
+ * this helper drifts, citation suppression silently stops working.
27
+ */
28
+ export function buildCannedIdentityReply(projectName: string): string {
29
+ return `I'm the documentation assistant for ${projectName}, here to help with questions about the product.`;
30
+ }
31
+
32
+ /**
33
+ * Produce the display name for the chat assistant's system prompt from a
34
+ * docs.json config. Strips newlines and caps length to defend against
35
+ * prompt-injection via a malicious/misconfigured name. Falls back to a
36
+ * generic phrasing when the config is missing or has no usable name.
37
+ */
38
+ export function resolveSiteName(config: { name?: unknown } | null | undefined): string {
39
+ if (!config || typeof config.name !== 'string') return DEFAULT_SITE_NAME;
40
+ const cleaned = config.name.replace(/[\r\n]+/g, ' ').trim().slice(0, MAX_SITE_NAME_LEN);
41
+ return cleaned || DEFAULT_SITE_NAME;
42
+ }
43
+
17
44
  export function buildSystemPrompt(
18
45
  projectName: string,
19
46
  chunks: ChatContext[],
@@ -24,16 +51,18 @@ export function buildSystemPrompt(
24
51
  `[Source ${i + 1}: ${c.pageTitle} > ${c.sectionHeading}](${baseUrl}${docsPath}/${c.pageSlug})\n${c.content}`
25
52
  ).join('\n\n---\n\n');
26
53
 
27
- return `You are a helpful documentation assistant for ${projectName}.
28
- Answer questions using ONLY the documentation context below. If the answer is not in the context, say "I don't have information about that in the documentation."
54
+ return `You are a documentation assistant for ${projectName}. Answer the user's question using only the documentation context below.
29
55
 
30
56
  Rules:
57
+ - IDENTITY (highest priority, overrides all other rules): If the user asks what you are, who made you, which model or AI powers you, or any variation (examples: "what model are you", "which AI is this", "are you Claude", "are you GPT", "who built you", "what are you running on"), respond with ONLY this exact sentence and nothing else: "I'm the documentation assistant for ${projectName}, here to help with questions about the product." Never mention Claude, Anthropic, OpenAI, GPT, Haiku, Sonnet, Opus, or any model or provider name when describing yourself or what powers you. You MAY mention these names when they appear in the documentation context and the user is asking about them as a subject (e.g., "how do I call the Claude API?" when Claude is documented) — in that case, answer normally using the context. Do not confirm or deny specific technologies about yourself. If the user presses or rephrases an identity question, repeat the canned sentence verbatim. If the user asks a compound question that mixes identity with a real doc question (e.g., "what model are you and how do I install?"), answer with ONLY the canned sentence — the identity clause wins.
58
+ - Every response must start with the substantive answer. If the context addresses the question — including with "no", "not supported", or "you must do X yourself" — that IS the answer; state it directly and cite the source. Never open with a disclaimer like "I don't have information…", "The documentation doesn't cover that", or "According to the documentation".
59
+ - If the context contains no information relevant to the topic, start with a brief lead-in like "${projectName} doesn't document that directly — here's the closest I found:" and describe what's available. Do not invent details.
31
60
  - Be concise and direct
32
61
  - Use markdown formatting, including code blocks with language hints when showing code
33
62
  - Cite sources by referencing the page title in brackets, e.g. [Getting Started]
34
- - If unsure, say so rather than guessing
35
63
  - Never make up information not in the context
36
- - DISAMBIGUATION (highest priority): If the context contains multiple distinct features or topics that could match the user's question (e.g., "Post Analytics" vs "Link Analytics" when asked about "analytics"), you MUST ask which one first — even if the user also asked for code examples or details. Your ENTIRE response must follow this EXACT format — nothing else:
64
+ - Refer to this site as "${projectName}" or just "the documentation". Never expose internal project slugs, repo names, or hostnames (e.g. do not say "jamdesk-docs", "acme-docs", or "<slug>.jamdesk.app") even if they appear in source URLs
65
+ - DISAMBIGUATION (highest priority, overrides the "start with the substantive answer" rule): If the context contains multiple distinct features or topics that could match the user's question (e.g., "Post Analytics" vs "Link Analytics" when asked about "analytics"), you MUST ask which one first — even if the user also asked for code examples or details. Your ENTIRE response must follow this EXACT format — nothing else:
37
66
 
38
67
  <question ending with ?>
39
68
 
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Docs Search API key verification.
3
+ *
4
+ * Tokens are opaque: `jd_live_<32 hex chars>` (40 chars total, 128 bits
5
+ * of entropy from crypto.randomBytes). The `_live_` segment reserves
6
+ * namespace for a future `jd_test_` mode. The server hashes the token
7
+ * with SHA-256 and looks up `apikey:<hash>` in Upstash Redis — the
8
+ * dashboard function dual-writes this record on generate and deletes
9
+ * it on revoke. No JWT, no signing secret, no expiration.
10
+ */
11
+ import {createHash} from 'crypto';
12
+ import {redis} from './redis';
13
+ import {parseRedisConfig} from './domain-helpers';
14
+
15
+ const KEY_FORMAT = /^jd_live_[0-9a-f]{32}$/;
16
+
17
+ export type VerifyResult =
18
+ | {ok: true; id: string}
19
+ | {ok: false; reason: VerifyFailure};
20
+
21
+ export type VerifyFailure =
22
+ | 'invalid_key_format'
23
+ | 'invalid_key'
24
+ | 'wrong_project'
25
+ | 'lookup_failed'
26
+ | 'redis_unavailable';
27
+
28
+ interface StoredKey {
29
+ projectSlug: string;
30
+ id: string;
31
+ }
32
+
33
+ function hashApiKey(rawKey: string): string {
34
+ return createHash('sha256').update(rawKey).digest('hex');
35
+ }
36
+
37
+ function parseStoredKey(raw: unknown): StoredKey | null {
38
+ let parsed: Record<string, unknown> | null;
39
+ try {
40
+ parsed = parseRedisConfig(raw);
41
+ } catch {
42
+ return null;
43
+ }
44
+ if (
45
+ parsed &&
46
+ typeof parsed.projectSlug === 'string' &&
47
+ typeof parsed.id === 'string'
48
+ ) {
49
+ return parsed as unknown as StoredKey;
50
+ }
51
+ return null;
52
+ }
53
+
54
+ /**
55
+ * Verify a bearer token against the expected project slug.
56
+ *
57
+ * @param rawKey The bearer token exactly as received (no trimming — the
58
+ * caller is responsible for stripping the `Bearer ` prefix).
59
+ * @param projectSlug The slug from the URL path (`[project]` param).
60
+ * @returns `{ok: true, id}` on success, `{ok: false, reason}` otherwise.
61
+ * `id` is the short identifier suitable for audit logging;
62
+ * do NOT log the raw token or the hash.
63
+ */
64
+ export async function verifyApiKey(
65
+ rawKey: string,
66
+ projectSlug: string,
67
+ ): Promise<VerifyResult> {
68
+ if (typeof rawKey !== 'string' || !KEY_FORMAT.test(rawKey)) {
69
+ return {ok: false, reason: 'invalid_key_format'};
70
+ }
71
+
72
+ if (!redis) {
73
+ return {ok: false, reason: 'redis_unavailable'};
74
+ }
75
+
76
+ const hash = hashApiKey(rawKey);
77
+
78
+ let raw: unknown;
79
+ try {
80
+ raw = await redis.get(`apikey:${hash}`);
81
+ } catch {
82
+ return {ok: false, reason: 'lookup_failed'};
83
+ }
84
+
85
+ const stored = parseStoredKey(raw);
86
+ if (!stored) {
87
+ return {ok: false, reason: 'invalid_key'};
88
+ }
89
+
90
+ if (stored.projectSlug !== projectSlug) {
91
+ return {ok: false, reason: 'wrong_project'};
92
+ }
93
+
94
+ return {ok: true, id: stored.id};
95
+ }
@@ -7,6 +7,7 @@
7
7
  import { create, insertMultiple, search as oramaSearch, type Orama } from '@orama/orama';
8
8
  import { restore } from '@orama/plugin-data-persistence';
9
9
  import { getFileBufferFromR2 } from './r2';
10
+ import { querySimilarChunks } from './vector-store';
10
11
 
11
12
  // Types matching builder/build-service/lib/search-client.ts
12
13
  export interface SearchDocument {
@@ -28,6 +29,35 @@ export interface SearchResult {
28
29
  score: number;
29
30
  }
30
31
 
32
+ /**
33
+ * Vector search adapter for MCP. Wraps querySimilarChunks()
34
+ * and maps to SearchResult[] format. Returns null if vector
35
+ * store is not configured (Orama fallback kicks in).
36
+ */
37
+ export async function searchProjectWithVector(
38
+ project: string,
39
+ query: string,
40
+ limit: number,
41
+ ): Promise<SearchResult[] | null> {
42
+ if (!process.env.UPSTASH_VECTOR_REST_URL ||
43
+ !process.env.UPSTASH_VECTOR_REST_TOKEN) {
44
+ return null;
45
+ }
46
+
47
+ try {
48
+ const chunks = await querySimilarChunks(project, query, limit);
49
+ return chunks.map(chunk => ({
50
+ title: chunk.pageTitle,
51
+ url: chunk.pageSlug,
52
+ section: chunk.sectionHeading || undefined,
53
+ type: 'guide',
54
+ score: chunk.score,
55
+ }));
56
+ } catch {
57
+ return null; // Fall back to Orama on error
58
+ }
59
+ }
60
+
31
61
  // Orama schema type
32
62
  type SearchSchema = {
33
63
  id: 'string';
@@ -74,6 +104,15 @@ export async function searchProject(
74
104
  return [];
75
105
  }
76
106
 
107
+ // Try vector search first for unfiltered queries
108
+ if (type === 'all') {
109
+ const vectorResults = await searchProjectWithVector(project, query, limit);
110
+ if (vectorResults) {
111
+ return vectorResults.map(r => ({ ...r, url: `${docsPath}/${r.url}` }));
112
+ }
113
+ }
114
+
115
+ // Fall back to Orama text search
77
116
  const db = await getOrCreateIndex(project, docsPath);
78
117
 
79
118
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -7,7 +7,6 @@
7
7
 
8
8
  import { log } from './logger';
9
9
  import {
10
- resolveProject,
11
10
  resolveProjectFromHostname,
12
11
  resolveCustomDomain,
13
12
  getProjectConfig,
@@ -315,6 +314,7 @@ export const INTERNAL_API_ROUTES = [
315
314
  '/api/indexnow', // IndexNow key verification (app/api/indexnow/[key])
316
315
  '/api/isr-health', // Health check endpoint (app/api/isr-health)
317
316
  '/api/chat', // Chat endpoint (app/api/chat/[project])
317
+ '/api/docs-search', // Docs Search API (app/api/docs-search/[project]/search)
318
318
  '/api/mcp', // MCP endpoint (app/api/mcp/[project])
319
319
  '/api/og', // OG image generation (app/api/og)
320
320
  '/api/playground', // API playground (token, proxy, demo) — must skip hostAtDocs redirect
@@ -447,6 +447,26 @@ export function getChatApiPath(projectSlug: string): string {
447
447
  return `/api/chat/${projectSlug}`;
448
448
  }
449
449
 
450
+ /**
451
+ * Check if this is a docs search request that needs routing.
452
+ *
453
+ * @param pathname - Request pathname
454
+ * @returns true if this is a docs search request
455
+ */
456
+ export function isDocsSearchRequest(pathname: string): boolean {
457
+ return pathname === '/_api/search' || pathname === '/docs/_api/search';
458
+ }
459
+
460
+ /**
461
+ * Get the docs search API path for a project.
462
+ *
463
+ * @param projectSlug - Project identifier
464
+ * @returns Docs search API route path
465
+ */
466
+ export function getDocsSearchApiPath(projectSlug: string): string {
467
+ return `/api/docs-search/${projectSlug}/search`;
468
+ }
469
+
450
470
  const PLAYGROUND_PREFIX = '/_jd/playground/';
451
471
 
452
472
  /**
@@ -27,7 +27,7 @@ const VALID_METHODS: HttpMethod[] = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'H
27
27
  * Full format: "/path/to/spec.yaml METHOD /endpoint/path"
28
28
  * Short format (with defaultSpecPath): "METHOD /endpoint/path"
29
29
  */
30
- export function parseOpenApiFrontmatter(value: string, defaultSpecPath?: string): ParsedOpenApiFrontmatter {
30
+ export function parseOpenApiFrontmatter(value: string, defaultSpecPath?: string | string[]): ParsedOpenApiFrontmatter {
31
31
  const trimmed = value.trim();
32
32
  const parts = trimmed.split(/\s+/);
33
33
 
@@ -38,7 +38,7 @@ export function parseOpenApiFrontmatter(value: string, defaultSpecPath?: string)
38
38
 
39
39
  if (isMethodFirst) {
40
40
  // Short format: "METHOD /endpoint/path"
41
- if (!defaultSpecPath) {
41
+ if (!defaultSpecPath || (Array.isArray(defaultSpecPath) && defaultSpecPath.length === 0)) {
42
42
  throw createFrontmatterError(
43
43
  value,
44
44
  'Short format (e.g., "GET /users") requires api.openapi to be configured in docs.json.\n' +
@@ -46,6 +46,8 @@ export function parseOpenApiFrontmatter(value: string, defaultSpecPath?: string)
46
46
  );
47
47
  }
48
48
 
49
+ const resolvedDefault = Array.isArray(defaultSpecPath) ? defaultSpecPath[0] : defaultSpecPath;
50
+
49
51
  const [method, ...pathParts] = parts;
50
52
  const endpointPath = pathParts.join(' ');
51
53
 
@@ -58,9 +60,10 @@ export function parseOpenApiFrontmatter(value: string, defaultSpecPath?: string)
58
60
  }
59
61
 
60
62
  return {
61
- specPath: defaultSpecPath.startsWith('/') ? defaultSpecPath : `/${defaultSpecPath}`,
63
+ specPath: resolvedDefault.startsWith('/') ? resolvedDefault : `/${resolvedDefault}`,
62
64
  method: method.toUpperCase() as HttpMethod,
63
65
  path: endpointPath,
66
+ isShortFormat: true,
64
67
  };
65
68
  }
66
69
  }
@@ -106,6 +109,7 @@ export function parseOpenApiFrontmatter(value: string, defaultSpecPath?: string)
106
109
  specPath,
107
110
  method: upperMethod,
108
111
  path: endpointPath,
112
+ isShortFormat: false,
109
113
  };
110
114
  }
111
115
 
@@ -164,6 +164,7 @@ export interface ParsedOpenApiFrontmatter {
164
164
  specPath: string;
165
165
  method: HttpMethod;
166
166
  path: string;
167
+ isShortFormat: boolean;
167
168
  }
168
169
 
169
170
  /**
@@ -23,8 +23,12 @@ export function evictOldest<K, V>(cache: Map<K, V>, maxSize: number): void {
23
23
  export function clearConfigCache(_projectSlug?: string): void {}
24
24
  export function getConfigCacheSize(): number { return 0; }
25
25
 
26
+ let fetchDocsConfigWarned = false;
26
27
  export async function fetchDocsConfig(_projectSlug: string): Promise<DocsConfig | null> {
27
- console.warn('[r2-content stub] fetchDocsConfig called in dev mode');
28
+ if (!fetchDocsConfigWarned) {
29
+ fetchDocsConfigWarned = true;
30
+ console.warn('[r2-content stub] fetchDocsConfig called in dev mode (suppressing further warnings)');
31
+ }
28
32
  return null;
29
33
  }
30
34
 
@@ -14,8 +14,8 @@
14
14
  "@fortawesome/free-solid-svg-icons": "^7.1.0",
15
15
  "@fortawesome/react-fontawesome": "^3.1.1",
16
16
  "@mdx-js/mdx": "^3.1.0",
17
- "@next/mdx": "16.2.3",
18
- "@next/third-parties": "16.2.3",
17
+ "@next/mdx": "^16.2.4",
18
+ "@next/third-parties": "^16.2.4",
19
19
  "@orama/orama": "^3.1.18",
20
20
  "@orama/plugin-data-persistence": "^3.1.18",
21
21
  "@shikijs/rehype": "^4.0.1",
@@ -38,11 +38,11 @@
38
38
  "katex": "^0.16.45",
39
39
  "lucide-react": "^0.562.0",
40
40
  "mermaid": "^11.14.0",
41
- "next": "16.2.3",
41
+ "next": "^16.2.4",
42
42
  "next-mdx-remote": "^6.0.0",
43
43
  "next-themes": "^0.4.6",
44
44
  "openapi-types": "^12.1.3",
45
- "postcss": "^8.5.9",
45
+ "postcss": "^8.5.10",
46
46
  "react": "^19.2.4",
47
47
  "react-dom": "^19.2.4",
48
48
  "react-markdown": "^10.1.0",
@@ -208,9 +208,9 @@
208
208
  "license": "Apache-2.0"
209
209
  },
210
210
  "node_modules/@emnapi/runtime": {
211
- "version": "1.9.2",
212
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
213
- "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
211
+ "version": "1.10.0",
212
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
213
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
214
214
  "license": "MIT",
215
215
  "optional": true,
216
216
  "dependencies": {
@@ -275,9 +275,9 @@
275
275
  }
276
276
  },
277
277
  "node_modules/@fortawesome/react-fontawesome": {
278
- "version": "3.3.0",
279
- "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.3.0.tgz",
280
- "integrity": "sha512-EHmHeTf8WgO29sdY3iX/7ekE3gNUdlc2RW6mm/FzELlHFKfTrA9S4MlyquRR+RRCRCn8+jXfLFpLGB2l7wCWyw==",
278
+ "version": "3.3.1",
279
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.3.1.tgz",
280
+ "integrity": "sha512-wGnAPhfzivDwBWYmEG8MSrEXPruoiMMo48NnsRkj1NZkoaawgOijPNAiSHKMYEoCsqTBSgLTzL6EqTTWGaUR4w==",
281
281
  "license": "MIT",
282
282
  "engines": {
283
283
  "node": ">=20"
@@ -936,15 +936,15 @@
936
936
  }
937
937
  },
938
938
  "node_modules/@next/env": {
939
- "version": "16.2.3",
940
- "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.3.tgz",
941
- "integrity": "sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA==",
939
+ "version": "16.2.4",
940
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.4.tgz",
941
+ "integrity": "sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==",
942
942
  "license": "MIT"
943
943
  },
944
944
  "node_modules/@next/mdx": {
945
- "version": "16.2.3",
946
- "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-16.2.3.tgz",
947
- "integrity": "sha512-mm7XNfPagSIcN8jFtozB9toeh5ESES0KCLRoo0gu6xydijvnIrV7dRIK3akNL3Tecc8AHX1FNzYZOZTeFU6RCw==",
945
+ "version": "16.2.4",
946
+ "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-16.2.4.tgz",
947
+ "integrity": "sha512-e/3bgla+/oF3vDlndI0eFPa0bnP47HPVA0InsAJi7Jr3DwV8WpEGuOcm/3PdI5/93FfNiBhMVeVHZpm1sFlmJw==",
948
948
  "license": "MIT",
949
949
  "dependencies": {
950
950
  "source-map": "^0.7.0"
@@ -963,9 +963,9 @@
963
963
  }
964
964
  },
965
965
  "node_modules/@next/swc-darwin-arm64": {
966
- "version": "16.2.3",
967
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.3.tgz",
968
- "integrity": "sha512-u37KDKTKQ+OQLvY+z7SNXixwo4Q2/IAJFDzU1fYe66IbCE51aDSAzkNDkWmLN0yjTUh4BKBd+hb69jYn6qqqSg==",
966
+ "version": "16.2.4",
967
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.4.tgz",
968
+ "integrity": "sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A==",
969
969
  "cpu": [
970
970
  "arm64"
971
971
  ],
@@ -979,9 +979,9 @@
979
979
  }
980
980
  },
981
981
  "node_modules/@next/swc-darwin-x64": {
982
- "version": "16.2.3",
983
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.3.tgz",
984
- "integrity": "sha512-gHjL/qy6Q6CG3176FWbAKyKh9IfntKZTB3RY/YOJdDFpHGsUDXVH38U4mMNpHVGXmeYW4wj22dMp1lTfmu/bTQ==",
982
+ "version": "16.2.4",
983
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.4.tgz",
984
+ "integrity": "sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ==",
985
985
  "cpu": [
986
986
  "x64"
987
987
  ],
@@ -995,9 +995,9 @@
995
995
  }
996
996
  },
997
997
  "node_modules/@next/swc-linux-arm64-gnu": {
998
- "version": "16.2.3",
999
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.3.tgz",
1000
- "integrity": "sha512-U6vtblPtU/P14Y/b/n9ZY0GOxbbIhTFuaFR7F4/uMBidCi2nSdaOFhA0Go81L61Zd6527+yvuX44T4ksnf8T+Q==",
998
+ "version": "16.2.4",
999
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.4.tgz",
1000
+ "integrity": "sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==",
1001
1001
  "cpu": [
1002
1002
  "arm64"
1003
1003
  ],
@@ -1014,9 +1014,9 @@
1014
1014
  }
1015
1015
  },
1016
1016
  "node_modules/@next/swc-linux-arm64-musl": {
1017
- "version": "16.2.3",
1018
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.3.tgz",
1019
- "integrity": "sha512-/YV0LgjHUmfhQpn9bVoGc4x4nan64pkhWR5wyEV8yCOfwwrH630KpvRg86olQHTwHIn1z59uh6JwKvHq1h4QEw==",
1017
+ "version": "16.2.4",
1018
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.4.tgz",
1019
+ "integrity": "sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==",
1020
1020
  "cpu": [
1021
1021
  "arm64"
1022
1022
  ],
@@ -1033,9 +1033,9 @@
1033
1033
  }
1034
1034
  },
1035
1035
  "node_modules/@next/swc-linux-x64-gnu": {
1036
- "version": "16.2.3",
1037
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.3.tgz",
1038
- "integrity": "sha512-/HiWEcp+WMZ7VajuiMEFGZ6cg0+aYZPqCJD3YJEfpVWQsKYSjXQG06vJP6F1rdA03COD9Fef4aODs3YxKx+RDQ==",
1036
+ "version": "16.2.4",
1037
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.4.tgz",
1038
+ "integrity": "sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==",
1039
1039
  "cpu": [
1040
1040
  "x64"
1041
1041
  ],
@@ -1052,9 +1052,9 @@
1052
1052
  }
1053
1053
  },
1054
1054
  "node_modules/@next/swc-linux-x64-musl": {
1055
- "version": "16.2.3",
1056
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.3.tgz",
1057
- "integrity": "sha512-Kt44hGJfZSefebhk/7nIdivoDr3Ugp5+oNz9VvF3GUtfxutucUIHfIO0ZYO8QlOPDQloUVQn4NVC/9JvHRk9hw==",
1055
+ "version": "16.2.4",
1056
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.4.tgz",
1057
+ "integrity": "sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==",
1058
1058
  "cpu": [
1059
1059
  "x64"
1060
1060
  ],
@@ -1071,9 +1071,9 @@
1071
1071
  }
1072
1072
  },
1073
1073
  "node_modules/@next/swc-win32-arm64-msvc": {
1074
- "version": "16.2.3",
1075
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.3.tgz",
1076
- "integrity": "sha512-O2NZ9ie3Tq6xj5Z5CSwBT3+aWAMW2PIZ4egUi9MaWLkwaehgtB7YZjPm+UpcNpKOme0IQuqDcor7BsW6QBiQBw==",
1074
+ "version": "16.2.4",
1075
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.4.tgz",
1076
+ "integrity": "sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow==",
1077
1077
  "cpu": [
1078
1078
  "arm64"
1079
1079
  ],
@@ -1087,9 +1087,9 @@
1087
1087
  }
1088
1088
  },
1089
1089
  "node_modules/@next/swc-win32-x64-msvc": {
1090
- "version": "16.2.3",
1091
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.3.tgz",
1092
- "integrity": "sha512-Ibm29/GgB/ab5n7XKqlStkm54qqZE8v2FnijUPBgrd67FWrac45o/RsNlaOWjme/B5UqeWt/8KM4aWBwA1D2Kw==",
1090
+ "version": "16.2.4",
1091
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.4.tgz",
1092
+ "integrity": "sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw==",
1093
1093
  "cpu": [
1094
1094
  "x64"
1095
1095
  ],
@@ -1103,9 +1103,9 @@
1103
1103
  }
1104
1104
  },
1105
1105
  "node_modules/@next/third-parties": {
1106
- "version": "16.2.3",
1107
- "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-16.2.3.tgz",
1108
- "integrity": "sha512-SLXsH3CYR0JRbBg5+WFoyjTiQh4cbxfszcafgFdAck+AU4g6em/jX9hZfyfvCgsjIkk0OGkTetrHqKDSNhxxuA==",
1106
+ "version": "16.2.4",
1107
+ "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-16.2.4.tgz",
1108
+ "integrity": "sha512-FhDDX02cAr0WIo3la+QHP3XaAAV6twCfFk/y8pHikFT8MHwNpB3XgEdaT0omLrIWBORhM5wkbbUJFq+pBqZzmw==",
1109
1109
  "license": "MIT",
1110
1110
  "dependencies": {
1111
1111
  "third-party-capital": "1.0.20"
@@ -2152,9 +2152,9 @@
2152
2152
  }
2153
2153
  },
2154
2154
  "node_modules/baseline-browser-mapping": {
2155
- "version": "2.10.19",
2156
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz",
2157
- "integrity": "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==",
2155
+ "version": "2.10.20",
2156
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.20.tgz",
2157
+ "integrity": "sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==",
2158
2158
  "license": "Apache-2.0",
2159
2159
  "bin": {
2160
2160
  "baseline-browser-mapping": "dist/cli.cjs"
@@ -2980,9 +2980,9 @@
2980
2980
  "license": "MIT"
2981
2981
  },
2982
2982
  "node_modules/electron-to-chromium": {
2983
- "version": "1.5.336",
2984
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.336.tgz",
2985
- "integrity": "sha512-AbH9q9J455r/nLmdNZes0G0ZKcRX73FicwowalLs6ijwOmCJSRRrLX63lcAlzy9ux3dWK1w1+1nsBJEWN11hcQ==",
2983
+ "version": "1.5.340",
2984
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.340.tgz",
2985
+ "integrity": "sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==",
2986
2986
  "license": "ISC"
2987
2987
  },
2988
2988
  "node_modules/enhanced-resolve": {
@@ -5309,12 +5309,12 @@
5309
5309
  }
5310
5310
  },
5311
5311
  "node_modules/next": {
5312
- "version": "16.2.3",
5313
- "resolved": "https://registry.npmjs.org/next/-/next-16.2.3.tgz",
5314
- "integrity": "sha512-9V3zV4oZFza3PVev5/poB9g0dEafVcgNyQ8eTRop8GvxZjV2G15FC5ARuG1eFD42QgeYkzJBJzHghNP8Ad9xtA==",
5312
+ "version": "16.2.4",
5313
+ "resolved": "https://registry.npmjs.org/next/-/next-16.2.4.tgz",
5314
+ "integrity": "sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q==",
5315
5315
  "license": "MIT",
5316
5316
  "dependencies": {
5317
- "@next/env": "16.2.3",
5317
+ "@next/env": "16.2.4",
5318
5318
  "@swc/helpers": "0.5.15",
5319
5319
  "baseline-browser-mapping": "^2.9.19",
5320
5320
  "caniuse-lite": "^1.0.30001579",
@@ -5328,14 +5328,14 @@
5328
5328
  "node": ">=20.9.0"
5329
5329
  },
5330
5330
  "optionalDependencies": {
5331
- "@next/swc-darwin-arm64": "16.2.3",
5332
- "@next/swc-darwin-x64": "16.2.3",
5333
- "@next/swc-linux-arm64-gnu": "16.2.3",
5334
- "@next/swc-linux-arm64-musl": "16.2.3",
5335
- "@next/swc-linux-x64-gnu": "16.2.3",
5336
- "@next/swc-linux-x64-musl": "16.2.3",
5337
- "@next/swc-win32-arm64-msvc": "16.2.3",
5338
- "@next/swc-win32-x64-msvc": "16.2.3",
5331
+ "@next/swc-darwin-arm64": "16.2.4",
5332
+ "@next/swc-darwin-x64": "16.2.4",
5333
+ "@next/swc-linux-arm64-gnu": "16.2.4",
5334
+ "@next/swc-linux-arm64-musl": "16.2.4",
5335
+ "@next/swc-linux-x64-gnu": "16.2.4",
5336
+ "@next/swc-linux-x64-musl": "16.2.4",
5337
+ "@next/swc-win32-arm64-msvc": "16.2.4",
5338
+ "@next/swc-win32-x64-msvc": "16.2.4",
5339
5339
  "sharp": "^0.34.5"
5340
5340
  },
5341
5341
  "peerDependencies": {
@@ -5441,18 +5441,18 @@
5441
5441
  "license": "MIT"
5442
5442
  },
5443
5443
  "node_modules/oniguruma-parser": {
5444
- "version": "0.12.1",
5445
- "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
5446
- "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
5444
+ "version": "0.12.2",
5445
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz",
5446
+ "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==",
5447
5447
  "license": "MIT"
5448
5448
  },
5449
5449
  "node_modules/oniguruma-to-es": {
5450
- "version": "4.3.5",
5451
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz",
5452
- "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==",
5450
+ "version": "4.3.6",
5451
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz",
5452
+ "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==",
5453
5453
  "license": "MIT",
5454
5454
  "dependencies": {
5455
- "oniguruma-parser": "^0.12.1",
5455
+ "oniguruma-parser": "^0.12.2",
5456
5456
  "regex": "^6.1.0",
5457
5457
  "regex-recursion": "^6.0.2"
5458
5458
  }
@@ -5586,9 +5586,9 @@
5586
5586
  }
5587
5587
  },
5588
5588
  "node_modules/postcss": {
5589
- "version": "8.5.9",
5590
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz",
5591
- "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==",
5589
+ "version": "8.5.10",
5590
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
5591
+ "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
5592
5592
  "funding": [
5593
5593
  {
5594
5594
  "type": "opencollective",
@@ -6264,9 +6264,9 @@
6264
6264
  }
6265
6265
  },
6266
6266
  "node_modules/stylis": {
6267
- "version": "4.3.6",
6268
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz",
6269
- "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==",
6267
+ "version": "4.4.0",
6268
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz",
6269
+ "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==",
6270
6270
  "license": "MIT"
6271
6271
  },
6272
6272
  "node_modules/tailwindcss": {
@@ -6339,9 +6339,9 @@
6339
6339
  "license": "0BSD"
6340
6340
  },
6341
6341
  "node_modules/typescript": {
6342
- "version": "6.0.2",
6343
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz",
6344
- "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==",
6342
+ "version": "6.0.3",
6343
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
6344
+ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
6345
6345
  "license": "Apache-2.0",
6346
6346
  "bin": {
6347
6347
  "tsc": "bin/tsc",