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 +4 -4
- package/dist/lib/deps.js.map +1 -1
- package/dist/lib/openapi/types.d.ts +1 -0
- package/dist/lib/openapi/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/vendored/app/[[...slug]]/page.tsx +66 -29
- package/vendored/app/api/chat/[project]/route.ts +26 -15
- package/vendored/app/api/docs-search/[project]/search/route.ts +168 -0
- package/vendored/components/openapi/OpenApiError.tsx +35 -0
- package/vendored/components/search/SearchModal.tsx +1 -1
- package/vendored/lib/chat-prompt.ts +33 -4
- package/vendored/lib/docs-search-auth.ts +95 -0
- package/vendored/lib/mcp-search.ts +39 -0
- package/vendored/lib/middleware-helpers.ts +21 -1
- package/vendored/lib/openapi/parser.ts +7 -3
- package/vendored/lib/openapi/types.ts +1 -0
- package/vendored/lib/r2-content.ts +5 -1
- package/vendored/workspace-package-lock.json +77 -77
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.
|
|
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.
|
|
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.
|
|
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.
|
|
90
|
+
'@next/third-parties': '^16.2.4',
|
|
91
91
|
};
|
|
92
92
|
/**
|
|
93
93
|
* Generate a hash of REQUIRED_DEPS to detect when dependencies change.
|
package/dist/lib/deps.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -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.
|
|
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
|
-
//
|
|
555
|
-
const
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
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
|
-
|
|
580
|
-
|
|
581
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
243
|
-
try {
|
|
244
|
-
docsPath = await getDocsPath(project, originalHost);
|
|
245
|
-
} catch {
|
|
246
|
-
docsPath = '';
|
|
247
|
-
}
|
|
251
|
+
const siteName = resolveSiteName(config);
|
|
248
252
|
|
|
249
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
|
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
|
-
-
|
|
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:
|
|
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
|
|
|
@@ -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
|
-
|
|
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.
|
|
18
|
-
"@next/third-parties": "16.2.
|
|
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.
|
|
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.
|
|
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.
|
|
212
|
-
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.
|
|
213
|
-
"integrity": "sha512-
|
|
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.
|
|
279
|
-
"resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.3.
|
|
280
|
-
"integrity": "sha512-
|
|
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.
|
|
940
|
-
"resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.
|
|
941
|
-
"integrity": "sha512-
|
|
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.
|
|
946
|
-
"resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-16.2.
|
|
947
|
-
"integrity": "sha512-
|
|
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.
|
|
967
|
-
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.
|
|
968
|
-
"integrity": "sha512-
|
|
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.
|
|
983
|
-
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.
|
|
984
|
-
"integrity": "sha512-
|
|
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.
|
|
999
|
-
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.
|
|
1000
|
-
"integrity": "sha512-
|
|
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.
|
|
1018
|
-
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.
|
|
1019
|
-
"integrity": "sha512
|
|
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.
|
|
1037
|
-
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.
|
|
1038
|
-
"integrity": "sha512
|
|
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.
|
|
1056
|
-
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.
|
|
1057
|
-
"integrity": "sha512-
|
|
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.
|
|
1075
|
-
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.
|
|
1076
|
-
"integrity": "sha512-
|
|
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.
|
|
1091
|
-
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.
|
|
1092
|
-
"integrity": "sha512-
|
|
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.
|
|
1107
|
-
"resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-16.2.
|
|
1108
|
-
"integrity": "sha512-
|
|
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.
|
|
2156
|
-
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.
|
|
2157
|
-
"integrity": "sha512-
|
|
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.
|
|
2984
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.
|
|
2985
|
-
"integrity": "sha512-
|
|
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.
|
|
5313
|
-
"resolved": "https://registry.npmjs.org/next/-/next-16.2.
|
|
5314
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
5332
|
-
"@next/swc-darwin-x64": "16.2.
|
|
5333
|
-
"@next/swc-linux-arm64-gnu": "16.2.
|
|
5334
|
-
"@next/swc-linux-arm64-musl": "16.2.
|
|
5335
|
-
"@next/swc-linux-x64-gnu": "16.2.
|
|
5336
|
-
"@next/swc-linux-x64-musl": "16.2.
|
|
5337
|
-
"@next/swc-win32-arm64-msvc": "16.2.
|
|
5338
|
-
"@next/swc-win32-x64-msvc": "16.2.
|
|
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.
|
|
5445
|
-
"resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.
|
|
5446
|
-
"integrity": "sha512-
|
|
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.
|
|
5451
|
-
"resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.
|
|
5452
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
5590
|
-
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.
|
|
5591
|
-
"integrity": "sha512-
|
|
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.
|
|
6268
|
-
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.
|
|
6269
|
-
"integrity": "sha512-
|
|
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.
|
|
6343
|
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.
|
|
6344
|
-
"integrity": "sha512-
|
|
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",
|