මඟින් AI ආධාරක සංවර්ධනය (AI-assisted development) සඳහා විශේෂයෙන් නිර්මාණය කරන ලද වැඩිදියුණු කිරීම් කිහිපයක් හඳුන්වා දෙයි. මෙම වෙනස්කම් මඟින් AI ඒජන්තවරුන්ට (agents) ඔබේ ප්රොජෙක්ට් එක තේරුම් ගැනීමට, ටර්මිනල් එකෙන්ම ගැටලු නිරාකරණය (debug) කිරීමට සහ ක්රියාත්මක වන ඇප්ස් පරීක්ෂා කිරීමට පහසු කරයි — මේ සියල්ල බ්රවුසර් එකක් අවශ්ය නොවී සිදු කළ හැකිය.
- AI Agents සඳහා සූදානම් කළ `create-next-app`: ඔබේ ප්රොජෙක්ට් එක ආරම්භයේ සිටම Next.js ඩොකියුමන්ටේෂන් සමඟ ඒකාබද්ධව ක්රියා කරයි.
- ටර්මිනල් එකට බ්රවුසර් ලොග් යොමු කිරීම (Browser Log Forwarding): ක්ලයන්ට් සයිඩ් एरර්ස් (client-side errors) කෙලින්ම ඔබේ ටර්මිනල් එකෙන්ම බලාගන්න.
- ව්යුහගත සංවර්ධන සේවා errors (Structured dev server errors): දැනටමත් ක්රියාත්මක වන ප්රොජෙක්ට් එකක් නැවත පණගැන්වීමට උත්සාහ කරන විට ඇතිවන ගැටලු ස්වයංක්රීයව විසඳන්න.
- `@vercel/next-browser` (Experimental CLI): AI ඒජන්තවරුන්ට React කම්පෝනන්ට් ට්රීස් (component trees), Partial Prerendering (PPR) ෂෙල්ස්, නෙට්වර්ක් ක්රියාකාරකම් සහ ක්රියාත්මක වන ඇප් එකක ස්ක්රීන්ෂොට් පවා පරීක්ෂා කිරීමට ඉඩ දෙන්න. 3
AI-Ready `create-next-app` Next.js දැන් `next` පැකේජය සමඟම අදාළ වර්ෂන් එකට ගැලපෙන ඩොකියුමන්ටේෂන් (version-matched documentation) ලබා දෙයි. මින් ඉදිරියට, `create-next-app` මඟින් ඔබේ ප්රොජෙක්ට් එකේ රූට් (root) එකෙහි `AGENTS.md` සහ `CLAUDE.md` යන ෆයිල්ස් ස්වයංක්රීයව ජනනය කරනු ඇත.
මෙය nextjs විසින් සිදු කරන ලද AGENTS.md පිළිබඳ පර්යේෂණ මත පදනම්ව සකසා ඇත. එමඟින් සොයාගත්තේ AI ඒජන්තවරුන්ට ප්රොජෙක්ට් එක සමඟම එන ඩොකියුමන්ටේෂන් (bundled documentation) ලබා දුන් විට, ඔවුන් Next.js ඇගයීම්වලදී (evals) 100% ක සාර්ථකත්වයක් ලබා ගත් බවයි — මෙය කුසලතා මත පදනම් වූ (skill-based) ප්රවේශයන් ලබා ගත් උපරිම 79% ක සාර්ථකත්වය අභිබවා යාමකි. මෙහි ප්රධාන රහස නම්: සැමවිටම පවතින සන්දර්භය (always-available context), අවශ්යතාවය අනුව දත්ත ලබා ගන්නා (on-demand retrieval) ක්රමවේදයට වඩා හොඳින් ක්රියා කිරීමයි. මන්ද AI ඒජන්තවරුන් බොහෝ විට තමන් ඩොකියුමන්ටේෂන් සෙවිය යුත්තේ කවදාද යන්න හඳුනා ගැනීමට අපොහොසත් වෙති.
`CLAUDE.md` යනු Claude Code සඳහා වන උපදෙස් ෆයිල් එකයි. එහි ඇති `@` ඩිරෙක්ටිව් එක මඟින් අමතර සන්දර්භයක් (context) ලෙස `AGENTS.md` ඇතුළත් කිරීමට එයට උපදෙස් දෙයි.
කලින් නිකුත් වූ වර්ෂන් සඳහා, මෙම ෆයිල්ස් ස්වයංක්රීයව සාදා ගැනීමට codemod එක භාවිතා කරන්න:
bash
npx @next/codemod@latest agents-md
16.2 හෝ ඊට පසු වර්ෂන්වලදී, ඩොකියුමන්ටේෂන් දැනටමත් `next` පැකේජය තුළ අන්තර්ගත වේ. ඔබේ ප්රොජෙක්ට් එකේ රූට් එකට මෙම ෆයිල්ස් දෙක එකතු කරන්න:
AGENTS.md
markdown
# Next.js: ALWAYS read docs before coding
Before any Next.js work, find and read the relevant doc in `node_modules/next/dist/docs/`.
Your training data is outdated — the docs are the source of truth.
CLAUDE.md
markdown
@AGENTS.md
Browser Log Forwarding
Next.js දැන් සංවර්ධන කටයුතු (development) අතරතුර බ්රවුසර් एरර්ස් (browser errors) ස්වයංක්රීයව ටර්මිනල් එක වෙත යොමු කරයි. එබැවින් ඔබට බ්රවුසර් කන්සෝල් එකට (browser console) මාරු නොවී ක්ලයන්ට් සයිඩ් Errors බලාගත හැකිය.
මෙය විශේෂයෙන්ම බ්රවුසර් කන්සෝල් එකකට පිවිසිය නොහැකි, ප්රධාන වශයෙන් ටර්මිනල් එක හරහා ක්රියාත්මක වන AI ඒජන්තවරුන්ට බෙහෙවින් ප්රයෝජනවත් වේ.
ඩිෆෝල්ට් ලෙස, errors පමණක් ටර්මිනල් එක වෙත යොමු කෙරේ. ඔබට ඔබේ `next.config.ts` ෆයිල් එකෙහි `logging.browserToTerminal` මඟින් මෙය පාලනය කළ හැකිය:
next.config.ts
typescript
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
logging: {
browserToTerminal: 'error', // හෝ 'warn', 'info', 'log', false
},
};
export default nextConfig;
Structured Dev Server Errors
`next dev`
දැනටමත් ක්රියාත්මක වන පෝට් එකකම (port) ආරම්භ කිරීමට උත්සාහ කළහොත්, Next.js දැන් ව්යුහගත error මැසේජ් එකක් (structured error message) ලබා දෙයි:
json
{
"error": "PORT_IN_USE",
"port": 3000,
"pid": 12345,
"url": "http://localhost:3000"
}
මෙය විශේෂයෙන්ම AI කෝඩින් ඒජන්තවරුන්ට ප්රයෝජනවත් වේ, මන්ද ඔවුන් බොහෝ විට සර්වර් එකක් දැනටමත් ක්රියාත්මක වන බව නොදැන `next dev` ආරම්භ කිරීමට උත්සාහ කරන බැවිනි. මෙම ව්යුහගත एरර් එක මඟින් ඒජන්තයාට දැනට පවතින ප්රොසෙස් එක නැවැත්වීමට (kill) අවශ්ය PID එක හෝ එයට සම්බන්ධ වීමට අවශ්ය URL එක ලබා දෙයි — මේ සඳහා මිනිස් මැදිහත්වීමක් අවශ්ය නොවේ.
`@vercel/next-browser` (Experimental)
ඉහත සඳහන් කළ විශේෂාංග මඟින් ඒජන්තවරුන්ට ඔබේ ප්රොජෙක්ට් එක තේරුම් ගැනීමට සහ ගැටලු නිරාකරණය කිරීමට උදවු කරයි. `@vercel/next-browser` මඟින් ක්රියාත්මක වන Next.js ඇප් එකක් පරීක්ෂා කිරීමට ඒජන්තවරුන්ට ඉඩ ලබා දෙමින් මෙය තවත් ඉදිරියට රැගෙන යයි.
මෙය ස්කිල් එකක් (AI ඒජන්තවරුන් සඳහා නැවත භාවිතා කළ හැකි හැකියාවක්) ලෙස ඉන්ස්ටෝල් කර ගන්න:
bash
# Claude Code සඳහා
claude skill add @vercel/next-browser
`next-browser` යනු ක්රියාත්මක වන ඇප් එකක බ්රවුසර් මට්ටමේ දත්ත — ස්ක්රීන්ෂොට්, නෙට්වර්ක් රික්වෙස්ට්, කන්සෝල් ලොග් — මෙන්ම React DevTools සහ Next.js dev overlay වෙතින් ලැබෙන ෆ්රේම්වර්ක් එකට 특භේදාත්මක වූ තොරතුරු (component trees, props, hooks, Partial Prerendering (PPR) shells, සහ errors වැනි) පෙන්වන පරීක්ෂණ මට්ටමේ (experimental) CLI එකකි.
- React component trees පරීක්ෂා කිරීම: props, hooks, state සහ source-mapped ෆයිල් පිහිටීම් බලන්න.
- PPR shells විශ්ලේෂණය කිරීම: static සහ dynamic කලාප මෙන්ම බ්ලොක් වී ඇති Suspense සීමාවන් හඳුනා ගන්න.
- Errors සහ logs වෙත ප්රවේශ වීම: dev සර්වර් එකෙන් build සහ runtime ගැටලු ලබා ගන්න.
- නෙට්වර්ක් ක්රියාකාරකම් නිරීක්ෂණය කිරීම: පිටුවකට පිවිසි පසු සිදු වූ සර්වර් ඇක්ෂන්ස් (server actions) ඇතුළු රික්වෙස්ට්ස් ට්රැක් කරන්න.
- දෘශ්ය දත්ත ලබා ගැනීම: ස්ක්රීන්ෂොට්ස් ලබා ගැනීම හෝ ලෝඩින් ෆිල්ම්ස්ට්රිප්ස් (loading filmstrips) රෙකෝඩ් කිරීම සිදු කරන්න.
උදාහරණය: Static Shell එක විශාල කිරීම
Partial Prerendering (PPR) සමඟින්, Next.js හට ඔබේ පිටුවේ request-data මත රඳා නොපවතින කොටස් (static shell) ක්ෂණිකව edge එකෙන් සර්ව් කළ හැකි අතර, ඉතිරි කොටස් ස්ට්රීම් (stream) කර පෙන්විය හැක. Static shell එකට වැඩි අන්තර්ගතයක් ඇතුළත් වන තරමට, පරිශීලකයින්ට වේගයෙන් අර්ථවත් පිටුවක් දැකගත හැක.
පහත දැක්වෙන බ්ලොග් පිටුව සලකා බලන්න:
app/blog/[slug]/page.tsx
tsx
import { getPostContent, getVisitorCount } from './data';
export default async function BlogPost({ params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params;
const content = await getPostContent(slug);
const visitors = await getVisitorCount(slug); // පිටුව dynamic කරයි
return (
<main>
<h1>{content.title}</h1>
<p>visitors ciunt: {visitors}</p>
<article>{content.body}</article>
</main>
);
}
සෑම slug එකක්ම `generateStaticParams` හි සඳහන් කර ඇති බැවින්, පෝස්ට් එකේ අන්තර්ගතය build ටයිම් එකේදීම prerender කළ හැක. නමුත් `getVisitorCount` සෑම රික්වෙස්ට් එකකදීම ක්රියාත්මක වන අතර — එය කම්පෝනන්ට් එකේ ඉහළම මට්ටමේ පවතින බැවින්, එය මුළු පිටුවම dynamic කරයි.
AI ඒජන්තයෙකුට `next-browser ppr` ධාවනය කිරීමෙන් static shell එක බ්ලොක් වී ඇති ආකාරය මෙසේ දැකගත හැක:
bash
$ npx next-browser ppr http://localhost:3000/blog/hello-world
✗ Dynamic prerender blocker found at root
Route: /blog/hello-world
Prerender Shell: 0% static (Entire page blocked by dynamic data)
Blocker Trace:
at BlogPost (app/blog/[slug]/page.tsx:6)
used dynamic data: getVisitorCount
මෙය නිවැරදි කිරීමට, ඒජන්තයාට dynamic දත්ත `<Suspense>` බවුන්ඩරි එකක් තුළට ගෙනයාම මඟින් පිටුව ඔප්ටිමයිස් කළ හැක:
app/blog/[slug]/page.tsx
tsx
import { Suspense } from 'react';
import { getPostContent, getVisitorCount } from './data';
export default async function BlogPost({ params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params;
const content = await getPostContent(slug);
return (
<main>
<h1>{content.title}</h1>
<Suspense fallback={<p>ලෝඩ් වෙමින්...</p>}>
<VisitorCount slug={slug} />
</Suspense>
<article>{content.body}</article>
</main>
);
}
async function VisitorCount({ slug }: { slug: string }) {
const visitors = await getVisitorCount(slug);
return <p>නරඹන්නන් සංඛ්යාව: {visitors}</p>;
}
නැවතත් `ppr` කමාන්ඩ් එක ක්රියාත්මක කිරීමෙන් shell එක විශාල වූ බව තහවුරු වේ — දැන් පෝස්ට් එකේ අන්තර්ගතය ක්ෂණිකව prerender වේ. නරඹන්නන් සංඛ්යාව පමණක් fallback එකක් පෙන්වයි:
bash
$ npx next-browser ppr http://localhost:3000/blog/hello-world
✓ Prerender Shell Optimized
Route: /blog/hello-world
Prerender Shell: 92% static
Dynamic Regions (Streamed):
<VisitorCount> at app/blog/[slug]/page.tsx:18
`next-browser` තවමත් සංවර්ධනය වෙමින් පවතින නමුත්, එය සංවර්ධකයෙකුට ඇතිVisibility එකෙන්ම ඒජන්තවරුන්ටද ඇප්ස් ඩිබග් කිරීමට සහ ඔප්ටිමයිස් කිරීමට හැකි අනාගතයක් කරා මඟ පෙන්වයි.