Fråga om projektet
YtaHjälper vem som helst att förstå projektet genom att svara på frågor med egna ord, bara utifrån projektets öppna sidor.
källa: apps/projekt/src/projektstod, apps/projekt/src/app/api/fragauppdaterad:
Ansvar
- Visa frågefältet inbäddat i startsidans hero och en knapp på varje öppen undersida som öppnar stödet i en panel – men inte bakom åtkomstkoden och inte i devportalen.
- Bygga underlaget av de öppna sidorna som en besökare ser dem: servern läser sina egna sidor utan kaka och gör om dem till text. Inga datafiler läses direkt.
- Svara i klarspråk, förklara facktermer, säga ifrån när svaret inte finns i underlaget och avböja det som inte handlar om projektet.
- Länka till sidorna mitt i svaret som brickor med sidans symbol, bara till sidor i underlaget, visa övriga sidor svaret bygger på under det och märka svaret ✦ AI-genererat.
- Äga samtalet på servern och hålla kostnaden nere med takgränser och cachat underlag.
Filer
| Sökväg | Roll |
|---|---|
| projektstod/sidor.ts | Underlagets sidor med namn, en rad om innehållet och frågeförslag, stodsidaFor och händelserna som strömmas. Utan data och Node-API:er, så att klienten kan använda den. |
| projektstod/text.ts | htmlTillText: sidans main som text, utan skript och symboler, med rubriker och listor kvar. |
| projektstod/underlag.ts | Läser de öppna sidorna från servern själv utan kaka, med tio minuters cache och en läsning åt gången. PROJEKTSTOD_BAS byter adress, standard 127.0.0.1:PORT. |
| projektstod/motor.ts | Prompten, samtalet med underlaget som dokument med källhänvisningar och cachepunkt, och strömningen. Källorna samlas ur källhänvisningarna i det färdiga svaret. |
| projektstod/grans.ts | Takgränserna: 20 frågor per besökare och tio minuter, 300 per timme totalt. |
| projektstod/Fragestod.tsx | Stödet i två former – inbaddad (ett sökfält med förslag, svaren under) och panel (ett samtal, fältet under) – med svaren i stycken och punktlistor och sidlänkarna som brickor. Avbrytbar; meddelar skärmläsare när svaret är klart. |
| projektstod/svarsformat.ts | delaRad, sidlank och utanOfarditLank: fetstil och länkar i svaret, där en länk bara blir en länk om adressen är en sida i underlaget. |
| projektstod/Fragaruta.tsx | Frågefältet inbäddat i startsidans hero, under ingressen. |
| projektstod/FragaKnapp.tsx | Knappen i nedre hörnet och panelen, en modal dialog. Visas bara på sidorna i underlaget och under dem, inte på startsidan. |
| app/api/fraga/route.ts | Tar emot frågan, prövar den, håller samtalen i minnet och strömmar svaret som NDJSON. |
| projektstod/projektstod.test.ts | Vaktar att underlaget bara består av öppna sidor, var knappen syns, textomvandlingen, samtalets form och takgränsen. |
API
| Namn | Signatur | Beskrivning |
|---|---|---|
| POST /api/fraga | { fraga: string (1–500), session?: uuid, sida?: string } → 200 NDJSON Stodhandelse[] + x-stod-session | 400 | 429 | 503 | Ställer en fråga. Sidan är adressen besökaren står på; den används bara för att säga vilken sida det gäller. |
| stodsidaFor | (pathname: string) => Stodsida | undefined | Sidan i underlaget som en adress hör till. undefined betyder att stödet inte ska synas där. |
| htmlTillText | (html: string) => string | En renderad sidas main som läsbar text. |
Kontrakt
| Händelse | Form | Betyder |
|---|---|---|
| status | { typ: "status", text } | Något pågår, till exempel att sidorna läses. |
| text | { typ: "text", text } | En bit av svaret, i ordning. |
| kallor | { typ: "kallor", kallor: { titel, href }[] } | Sidorna svaret bygger på, sist. |
| fel | { typ: "fel", text } | Svaret kunde inte hämtas. Texten går att visa som den är. |
- En ny öppen sida blir en del av stödet först när den läggs i stodsidor. Testet fäller bygget om en sida i listan ligger bakom spärren.
- Klienten skickar aldrig tidigare svar. Servern bygger samtalet ur sina egna turer, högst åtta, och glömmer det efter 30 minuter.
- Underlaget är detsamma mellan frågorna och har cachepunkten på sista dokumentet; datum, sida och fråga kommer efter den.
- Modellen länkar med [Sidans namn](/adress). Prompten listar adresserna; klienten gör bara adresser i stodsidor till länkar och tar bort ankare och frågor, som modellen inte kan veta något om.
- Utan ANTHROPIC_API_KEY svarar /api/fraga 503 och rutan säger att stödet inte är påslaget. AI_PROVIDER styr inte stödet.
Beroenden och beslut
- Projektets första sida
- Projektets yta
- ai-adapter (gemensam, i devportalen)
- ui (gemensam, i devportalen)
- tokens (gemensam, i devportalen)
Beslut: ADR-034, ADR-012, ADR-032
Levererar: frågefältet i startsidans hero, knappen och panelen på undersidorna, sidlänkar i svaren, POST /api/fraga, källhänvisningar till sidorna, PROJEKTSTOD_MODELL
Kvarstår
- ANTHROPIC_API_KEY måste vara satt i Dokploy för att stödet ska svara där.
- Samtalen och takgränserna ligger i minnet: de försvinner vid en omstart och delas inte mellan instanser.
- Ingen uppföljning av vilka frågor som ställs eller om svaren hjälper.
- Statusrapporterna på /status/<id> ingår bara som de står på /status.
15 delar i projektportalen · gemensamma i devportalen: ai-adapter, anthropic, bygge, designsystem, dokploy, dokumentation, gemensamt, tokens, ui