Project Info
Inspiration
Every long-running knowledge system is a giant pile of mutable state. Who's alive, who has the sword, who's at war, who knows the secret. Writers and show runners track it in bibles that rot the moment writing outpaces note-taking. Long-running AI agents have the same problem — they accumulate facts across sessions that drift, contradict, and branch with no one checking. Generic AI makes it worse. It generates more content with no model of your established state. It'll happily write a one-handed knight gripping with both gauntlets and never notice. We wanted to build something that doesn't generate — it checks. A tool that turns accumulated knowledge into queryable, verifiable state, then reads every new claim against it with evidence and a verified fix. Grammarly catches grammar. Continuum catches broken canon. We picked fictional worlds as the proving ground deliberately. They have the most adversarial consistency problem: nonlinear timelines, branching paths, hidden knowledge, character state, world rules, knowledge asymmetry. If the engine works on Westeros, it works on AI agent memory and product specs. We proved it on the hardest case first.
What it does
Continuum is a live consistency engine for evolving knowledge systems, demoed on a preloaded Game of Thrones world. Load a source of truth — upload notes, paste text, or use the preloaded GoT demo world. Write a new scene. Hit Check Continuity. Every phrase that contradicts established canon lights up inline, with the exact evidence quote it conflicts with, the severity, and a one-click fix that gets verified before it's applied. The demo run: Paste this into the editor on the main timeline: "Jaime tightened the straps on both gauntlets before drawing his sword. He had ridden from Winterfell at first light and reached King's Landing by sunset. Over the capital, three dragons wheeled in formation — a sight every lord had grown up seeing. In the branch where Robb Stark survived the Twins, his mother Catelyn was already dead in the great hall." Four high-severity contradictions surface in under 8 seconds, each with the canon evidence it breaks: "both gauntlets" → Jaime lost his right hand after capture "reached King's Landing by sunset" → Winterfell to King's Landing takes weeks "dragons wheeled … every lord had grown up seeing" → No living dragons existed until Daenerys hatched hers; no one grew up knowing them "Robb survived … Catelyn was already dead" → In the Robb-lives branch, Catelyn also survived Then the smart part: flip the context chip to Flashback — before Jaime's capture and type "Jaime caught the wine cup with both hands." Zero warnings. The lost-hand fact isn't in force yet. The timeline visualization shows "you are here" before the event and greys out the fact. The model never sees the conflicting fact — the filtering happens in TypeScript before any LLM call. Apply a fix: the repair agent patches the text, re-runs the check on the patched span, and only returns verified ✓ if the original contradiction is gone with no new issues introduced.
How we built it
The architecture bet: separate a platform-agnostic consistency engine (lib/engine/checkScene.ts) from every UI surface. The engine has no Next.js dependency. A browser extension, Google Docs add-on, or agent runtime calls the same /api/check endpoint and gets back ContinuityIssue[]. Build the engine once; bolt surfaces on. The 2-call hot path (not agentic): extractClaims(sceneText) — Claude Haiku extracts structured Claim[] + inferredContext via tool use. Fast, bounded, cheap. filterFacts(claims, position, branch) — pure TypeScript. Every CanonFact has two nullable validity event IDs. A scene's chronological position p (resolved from context chips) filters to only facts in force: start ≤ p < end. The model never sees filtered-out facts. This is the false-positive killer — no temporal reasoning in the prompt. detectContradictions(claims, filteredFacts) — Claude Sonnet with extended thinking returns ContinuityIssue[] via structured tool output, validated through Zod. This is the reasoning step; extended thinking earns its cost here. mapSpans(issues, sceneText) — server maps model-returned verbatim quotes to character offsets via indexOf + whitespace-normalized fuzzy fallback. The model is never asked to produce offsets. Two real agents: The canon-builder agent (lib/agents/canonBuilder.ts) runs a tool-using loop (up to 15 turns) converting raw text into structured entities, facts, events, and branches via add_entity, add_fact, add_event, add_branch, and search_existing_canon. It self-reviews validity windows and branch tags before committing. Working memory lives in Redis across tool turns. The repair verify-loop agent (lib/agents/repairVerify.ts) patches the scene text, re-runs checkScene scoped to the patched span, and confirms the original contradiction is resolved with no new high-severity issues before returning verified: true. The time model: integer event order + two nullable validity event IDs per fact. No interval trees, no temporal logic solver. Main timeline → p = +∞. Flashback before event X → p < order(X). Branch facts filter by branchId with per-claim scoping when prose names an alternate branch inline. TipTap (ProseMirror) handles inline decorations — contradiction spans get colored underlines by severity, clickable to expand issue detail. A custom decoration plugin reads ContinuityIssue[] from Zustand and maps plain-text character offsets to ProseMirror positions. Stack: Next.js 16 App Router · TypeScript · Tailwind v4 · TipTap · Zustand · Anthropic SDK (extended thinking) · Upstash Redis + Vector · Arize (OpenTelemetry) · Zod v4
Challenges we ran into
Branch scoping across a single detection call. When prose names an alternate branch inline ("in the branch where Robb survived…"), the claim needs to be checked against facts from that branch, not the scene-level branch. Running a separate detection call per claim was too slow. The solution: pass each claim with its applicable fact subset as a labeled block in one prompt — the model sees claims and their branch-filtered facts together, never mixed. Span mapping without trusting the model. Asking Claude to return character offsets is fragile — models hallucinate positions, especially across paragraph boundaries. Instead we ask for the exact verbatim offending substring (highlightedText) and locate it server-side with indexOf, falling back to whitespace-normalized token matching. If a quote still isn't found, the issue degrades to a card without a highlight rather than crashing. TipTap decoration stability. ProseMirror positions shift as the user edits. We had to maintain a paragraph-offset table and remap plain-text character positions to ProseMirror positions on every check rather than caching them. Keeping the editor schema minimal (paragraphs + text, no nested marks) made this tractable. Zod v4 + tool use. Zod v4 broke zod-to-json-schema (the standard way to turn Zod schemas into Anthropic tool input_schema). We hand-wrote JSON Schema objects for all tool schemas, sharing them as both the Anthropic tool definition and the server-side validation layer. Extended thinking + structured output. Extended thinking doesn't compose cleanly with tool use in all model versions. We used the interleaved-thinking-2025-05-14 beta, which allows the model to think, then call a tool, giving us both reasoning quality and structured output in one call.
Accomplishments we're proud of
The flashback suppression working cleanly. The core architectural bet — filter facts in code before the model sees them — produces correct behavior without any temporal reasoning in the prompt. The model can't hallucinate a false positive on a flashback because the conflicting fact literally isn't there. Seeing it work the first time on the Jaime/wine-cup case was the moment the design proved itself. Four high-signal contradictions on the GoT draft, every time. The combination of per-claim branch scoping, time-filtered facts, few-shot detection prompt, and extended thinking produces consistent results at low temperature. No random false positives; all four expected issues fire reliably. A verified repair loop. "Apply fix" doesn't blindly swap text. The agent patches, re-checks the exact span, and only surfaces verified ✓ when the contradiction is gone and no new issues appeared. That's a non-trivial pipeline to make reliable under time pressure. The generalization claim is structural, not marketing. The engine primitives (Entity, CanonFact, Claim, Branch, ContinuityIssue) contain no fiction-specific logic. The checkScene interface is: (claims, facts, context) → issues. Swap seed data and prompts and the same pipeline checks AI agent memory. That's a real architectural seam, not a slide bullet.
What we learned
Pre-filter ruthlessly; prompt conservatively. Every fact we cut from the context window before the detection call is a false positive we don't have to explain away. Giving the model only the facts that are actually in force for this scene's position and branch is the single highest-leverage accuracy improvement — higher than prompt engineering alone. Separate the hot path from agents. The first instinct is to make the consistency check agentic — loop until confident. That's the wrong call for a live editor. Two bounded LLM calls with hard timeouts, a pre-warmed cache, and a canned fallback beat one agentic loop that might take 30 seconds or fail mid-stream on stage. Observability from day one. Instrumenting every AI step as a named OpenTelemetry span (extract → infer → detect → repair.propose → repair.verify) let us see exactly where over-flagging came from in Arize traces. The before/after prompt improvement is a story we could only tell because we were tracing from the start. Fiction is a legitimate proving ground for agent memory tooling. The hardest consistency problems — branching history, epistemic asymmetry, validity windows, per-claim context — all appear in serial fiction before they appear in production agent systems. Building on the fiction case first meant the primitives were already stress-tested when we reasoned about the broader use case.
What's next
AI agent memory as a first-class surface. The engine already handles the right primitives: facts with validity windows, branching state, claim extraction from new output, contradiction detection with evidence. Wiring it to an agent's session store — where each new action is a "scene" checked against accumulated "canon" — is the most direct generalization and the one we're most excited about. Redis vector retrieval at scale. The current demo uses in-memory fact filtering over 8 facts. The Redis vector index and RedisRetriever are designed and partially built — promoting them to the primary retrieval path means the engine scales to thousands of facts without changing the check interface. Browser extension and editor integrations. Because the engine is a clean API (POST /api/check → ContinuityIssue[]), a browser extension that sends selected text is a thin wrapper. Google Docs and Obsidian integrations follow the same pattern — the core doesn't change, only the surface. Arize-driven prompt improvement loop. The tracing infrastructure is in place. The next step is closing the loop: when Arize shows a pattern of over- or under-flagging on a specific issue type, the detection prompt gets a targeted few-shot addition, measured against the golden test suite, and shipped as a new prompt version. Observability as a development workflow, not just a dashboard.
Continuum
Continuum is a consistency engine for evolving knowledge systems.
Any system where facts accumulate over time — and new claims must stay consistent with what came before — has a consistency problem. Continuum solves it: load your source of truth, write something new, and every claim that contradicts established facts is flagged inline, with the exact evidence it conflicts with and a verified fix.
We built and demoed on fictional worlds because they're the hardest case. Nonlinear timelines, branching paths, hidden knowledge, object state, world rules, character beliefs — if the engine works here, every other domain is easier. The same primitives power AI agent memory, product specs, legal case facts, and research claims.
The Problem
Every long-running knowledge system is a giant pile of mutable state. Someone — or something — must hold it all in their head simultaneously:
- Who is in what state — alive, dead, injured, exiled, under NDA, decommissioned, deprecated
- Where things are — who owns an asset, which version is deployed, what's locked in a vault
- What relationships hold — allies, enemies, dependencies, contracts — and when each became true
- What rules govern the world — physics, API contracts, legal constraints, capability limits
- What order events happened — and how claims that reference earlier state should be filtered
- Which branch of reality applies — alternate outcomes, divergent versions, A/B states, hypotheticals
- Who knows what — information asymmetry between agents, characters, or documents
Existing tools fail the same way across every domain: knowledge accumulates in passive documents that require manual upkeep and never check new claims against themselves. They go stale the moment output outpaces note-taking. Generic AI makes it worse — it generates more content with no model of your established state.
Continuum makes accumulated knowledge checkable. Upload your source of truth, write something new, and see every inconsistency — with the exact evidence, severity, and a fix that preserves what you actually meant.
Why Fiction Is the Proving Ground
We didn't pick fiction arbitrarily. TV show writers' rooms, novelists, game designers, and show runners face the most adversarial version of this problem:
- Facts span hundreds of pages and years of real time
- Timelines are nonlinear — flashbacks, flash-forwards, myths, visions, prophecies
- State branches — player choices, alternate outcomes, divergent episodes
- Knowledge is asymmetric — characters believe different things; narrators reveal selectively
- Contradictions are invisible to generic AI — which has no model of your specific world
If Continuum catches broken canon in a Game of Thrones scene, it can catch contradictions in AI agent memory, product specs, and legal filings. The fiction case is harder.
The direct read-across: AI agent memory. Long-running agents accumulate facts that drift, contradict, and branch across sessions — exactly the same primitives. An agent's memory is a canon; each new action is a scene; hallucinated or stale state is a continuity error. Continuum is the consistency layer that agent builders need.
The Demo
The demo world is a preloaded Game of Thrones canon: 8 facts, a branching timeline, and two alternate-history branches. Paste this into the editor and hit Check Continuity:
"Jaime tightened the straps on both gauntlets before drawing his sword. He had ridden from Winterfell at first light and reached King's Landing by sunset. Over the capital, three dragons wheeled in formation — a sight every lord had grown up seeing. In the branch where Robb Stark survived the massacre at the Twins, his mother Catelyn was already dead in the great hall."
Four high-severity contradictions surface, each with the exact canon evidence:
| Highlighted Phrase | Issue | Evidence |
|---|---|---|
| "both gauntlets" | character_state | Jaime lost his right hand after capture |
| "reached King's Landing by sunset" | travel_time | Winterfell → King's Landing takes weeks of hard riding |
| "dragons wheeled … every lord had grown up seeing" | world_rule | No living dragons existed until Daenerys hatched hers |
| "Robb survived … Catelyn was already dead" | branch | In the Robb-lives branch, Catelyn also survived |
The timeline beat: flip the context chip to Flashback — before Jaime's capture and write "Jaime caught the wine cup with both hands." — zero warnings. The lost-hand fact isn't in force yet. The timeline visualization shows "you are here" before the event and greys it out. The model never even sees the conflicting fact — the filtering happens in code before any LLM call.
Architecture
Three-Panel Interface
┌──────────────────────────────────────────────────────────────────┐
│ Continuum [ Demo World: Game of Thrones ] [Check Continuity] │
├──────────────┬───────────────────────────────────┬───────────────┤
│ KNOWLEDGE │ DRAFT / INPUT │ ISSUES │
│ BIBLE │ Context: [Main timeline ○] │ │
│ │ │ ● HIGH │
│ Entities │ Jaime tightened the straps on │ char_state │
│ Rules │ ░both gauntlets░ before drawing │ │
│ Timeline │ his sword. He had ridden from │ ● HIGH │
│ ──●── here │ Winterfell at first light and │ travel_time │
│ Branches │ reached ░King's Landing by sunset░ │ │
│ │ │ [Apply fix ✓]│
└──────────────┴───────────────────────────────────┴───────────────┘
The Engine Pipeline
Every consistency check runs a 2-call hot path — not an agentic loop. Speed matters for a live editing experience.
1. extractClaims(inputText) ← Claude Haiku (fast)
→ Claim[] + inferredContext (pre-fills context chips)
2. filterFacts(claims, position, branch) ← pure TypeScript
→ only facts in force for this context's time window + branch
3. detectContradictions(claims, facts) ← Claude Sonnet + extended thinking
→ Issue[] with evidence, spans, suggested fixes
4. mapSpans(issues, inputText) ← indexOf + fuzzy fallback
→ character offsets for inline decorations
The filtering in step 2 is the core accuracy insight: the model only ever sees facts that are actually in force for this context. This eliminates false positives from stale or future state without asking the model to reason about time. In agent memory terms: only facts that were established before this action are candidates for contradiction.
Two Real Agents
Knowledge-builder agent (lib/agents/canonBuilder.ts): a tool-using loop that converts raw source text into structured entities, facts, events, and branches. Tools: add_entity, add_fact, add_event, add_branch, search_existing_canon. Self-reviews validity windows and branch tags before committing. Writes embeddings to Redis for retrieval and deduplication.
Repair verify-loop agent (lib/agents/repairVerify.ts): when you click Apply Fix, it patches the text, re-runs the hot-path check on the patched span, and only returns verified: true if the original contradiction is gone with no new issues introduced. Never applies an unverified patch.
Time & Branch Model
Every fact has two nullable validity event IDs defining its window of truth:
fact.validityStartEventId // fact becomes true at this event
fact.validityEndEventId // fact stops being true at this event (exclusive)
A scene or action's chronological position p drives filtering:
function isFactInForce(fact, p, events): boolean {
const start = fact.validityStartEventId ? orderOf(start, events) : -Infinity;
const end = fact.validityEndEventId ? orderOf(end, events) : +Infinity;
return p >= start && p < end;
}
Main timeline → p = +∞ (all established facts apply). Flashback → p < order(anchorEvent). The model never sees filtered-out facts. No temporal reasoning in the prompt; no false positives.
Branches are flat off main. Per-claim branch scoping fires when text names an alternate branch inline — the server resolves it by substring match and filters facts for that claim's branch independently.
Domain-Neutral Data Model
The engine primitives contain no domain-specific assumptions. Entity.type is a string enum; for the fiction demo it holds character | location | faction | object | event | rule. For an agent memory system it holds agent | session | capability | constraint. The schema is identical.
Entity // anything with identity that can have state
CanonFact // a statement that is true within a defined window + branch
TimelineEvent // a point in the ordering (integer, monotonic)
Branch // an alternate path from main (flat for MVP)
Claim // an assertion extracted from new input text
ContinuityIssue // a claim that contradicts an in-force fact — with evidence + fixes
SuggestedFix // minimal edit to input text or update to knowledge base
The engine interface:
checkScene(claims: Claim[], facts: CanonFact[], context: SceneContext) => ContinuityIssue[]
Nothing here says "story." Swap the seed data and prompts, and the same pipeline checks:
| Domain | "Canon" | "Scene" | "Contradiction" |
|---|---|---|---|
| Fiction / TV | Show bible | New scene draft | Broken continuity |
| AI agent memory | Accumulated facts | New action / output | Hallucinated or stale state |
| Product specs | Spec document | PR / implementation | Feature drift |
| Legal | Case record | New filing or brief | Inconsistent claim |
| Research | Prior literature | New paper claim | Conflicting finding |
Tech Stack
| Layer | Choice | Why |
|---|---|---|
| Framework | Next.js 16 (App Router) | Single repo; engine callable without HTTP |
| Editor | TipTap (ProseMirror) | Stable span decorations + programmatic text replace |
| State | Zustand | Flat, typesafe; issues + scene + selection in one store |
| AI | Anthropic Claude | Extended thinking on detection; structured tool-use outputs |
| Memory | Upstash Redis + Vector | Fact embeddings, agent scratchpad, check/ingest cache |
| Observability | Arize (OpenTelemetry) | Named span per AI step; shown before/after prompt improvement |
| Validation | Zod + zod-to-json-schema | Shared schema as both runtime type and tool input_schema |
| Styling | Tailwind v4 | Dark editorial aesthetic — no chat bubbles |
Sponsor Integrations
Anthropic — the reasoning layer
Every AI call is structured, never freeform:
- Claim extraction: Haiku-class model returns
Claim[]+inferredContextviaemit_claimstool - Contradiction detection: Sonnet/Opus with extended thinking returns
ContinuityIssue[]viaemit_issuestool — this is the product - Knowledge-builder agent: mid/strong model with 5 tools; self-reviews before committing facts
- Repair verify-loop agent: fast model; proposes → patches → re-checks → confirms
"Claude extracts state, reasons about contradictions with extended thinking, and powers the agents that build and verify canon — the same architecture agent builders need for persistent memory consistency."
Redis — persistent memory at scale
canon:fact:{id} → fact JSON + embedding vector
canon:idx:{projectId} → KNN vector index for semantic retrieval
agent:canon:{sessionId}:* → knowledge-builder working memory across tool turns
check:{hash(text+context)} → cached check result (demo pre-warm)
ingest:{hash(text)} → cached ingestion output
search_existing_canon hits the Redis vector index during ingestion to deduplicate before committing. Same FactRetriever interface switches between in-memory (dev) and Redis vector search (ship) with no engine changes.
"Redis remembers the world so Claude can reason over it — retrieval, agent scratchpad, and result cache in one place."
Arize — observability-driven improvement
Every AI step emits a named OpenTelemetry span:
ai.claims.extract → claims + inferredContext
ai.context.infer → nested within extract
ai.issues.detect → contradiction detection (+ extended thinking trace)
ai.repair.propose → fix proposal
ai.repair.verify → re-check pass/fail
ai.canon.builder → agent loop (per tool call sub-span)
Demo shows a real before/after: Arize revealed over-flagging on the GoT draft → detection prompt tightened → improvement documented as detect-v1.ts → detect-v2.ts.
"We trace every check, found over-flagging in Arize, tightened the prompt, and shipped the fix — here's the diff."
Project Structure
continuum/
app/
page.tsx # three-panel shell
api/
check/route.ts # POST — 2-call hot path (core)
ingest/route.ts # POST — knowledge-builder agent + file upload
repair/route.ts # POST — repair verify-loop
project/route.ts # GET — full knowledge base
canon/fact/route.ts # POST — add/update a fact from an issue
issue/[id]/route.ts # PATCH — ignore / mark intentional
components/
panels/
StoryBible.tsx # left: entities, rules, timeline, branches
SceneEditor.tsx # center: TipTap + context chips
IssuePanel.tsx # right: cards, evidence, apply fix
hooks/
useContinuumStore.ts # Zustand store
useCheck.ts # /api/check call + cache
lib/
types.ts # all interfaces — domain-neutral primitives
engine/
checkScene.ts # pipeline orchestrator — no Next.js dependency
resolveContext.ts # context → chronological position
filterFacts.ts # time validity + branch filter
mapSpans.ts # model quotes → character offsets
ai/
models.ts # explicit model routing per task
schemas.ts # Zod schemas (= tool input_schema)
prompts/ # extract, detect, fix, builder templates
tasks/
extractClaims.ts
detectContradictions.ts
generateFixes.ts
agents/
canonBuilder.ts # knowledge ingestion agent
repairVerify.ts # fix verify-loop agent
store/
memoryStore.ts # in-memory (dev fallback)
telemetry/ # Arize / OpenTelemetry export
seed/
world.ts # GoT primary (8 facts, typed, stable IDs)
world-moonstone.ts # zero-IP fallback (The Moonstone Saga)
lib/engine/checkScene.ts has no Next.js dependency. The HTTP handler is a thin adapter. A browser extension, Google Docs add-on, or agent runtime calls the same /api/check endpoint and receives ContinuityIssue[] — no engine changes required.
Running Locally
npm install
cp .env.example .env.local
# Required:
# ANTHROPIC_API_KEY=...
# Optional (dev fallback works without these):
# UPSTASH_REDIS_REST_URL=...
# UPSTASH_REDIS_REST_TOKEN=...
# UPSTASH_VECTOR_REST_URL=...
# UPSTASH_VECTOR_REST_TOKEN=...
# OPENAI_API_KEY=... (text-embedding-3-small for vector indexing)
# ARIZE_SPACE_ID=...
# ARIZE_API_KEY=...
npm run dev
Open http://localhost:3000. The GoT demo world loads immediately — no setup required. The app runs with only ANTHROPIC_API_KEY in dev; Redis and Arize are required for the full ship target.
The Generalization
Long-running AI agents are knowledge systems without a knowledge base. They accumulate facts, contradict themselves, and never cite sources. Continuum is the consistency layer they need — the same engine, different seed data and prompts.
We chose the hardest case to prove it on first. Westeros has nonlinear time, branching history, hidden knowledge, and object state. If the engine catches broken canon there, it catches stale agent memory, drifted specs, and contradicted case facts too.
Same primitives. Swappable config. One engine.
What's Not Built (and Why)
- No prose generation. Continuum generates fixes and structured facts — never content for the user's document.
- No chat UI. This is a tool, not a conversational assistant. No message bubbles.
- No domain selector. The engine is already domain-neutral; the product is focused. Generality is in the architecture, not a dropdown.
- No live cold-ingestion on stage. All demo ingestion is pre-cached by hash.
- No production auth / billing / multi-tenancy.
If a feature doesn't serve source of truth → new claim → contradiction → evidence → verified fix, it's out.
Analysis
View
Metric
- 5
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- Next.jsIn code
- OpenAIIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- RedisClaimed
- VercelClaimed
7 of 9 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig
- CodexConfig
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
334 KB
Source files
57
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Prithvi-Maddi/Continuum
69 files · 801 KB · @ 0b8f91f
Structure
Interface
11 files · 16%Screens, components and styles rendered to the user.
API & routing
10 files · 14%Request entry points: routes, handlers and controllers.
Application logic
26 files · 38%Domain rules, services and shared utilities.
+3 moreBackground jobs
2 files · 3%Work run outside a request: tasks, workers and schedules.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript57%
- Markdown42%
- CSS1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 32- @anthropic-ai/sdk
- @arizeai/openinference-instrumentation-anthropic
- @deepgram/sdk
- @opentelemetry/auto-instrumentations-node
- @opentelemetry/exporter-trace-otlp-http
- @opentelemetry/instrumentation
- @opentelemetry/sdk-node
- @opentelemetry/sdk-trace-base
- @opentelemetry/sdk-trace-node
- @sentry/nextjs
- @tiptap/extension-highlight
- @tiptap/pm
- @tiptap/react
- @tiptap/starter-kit
- @upstash/redis
- @upstash/vector
- mammoth
- next
- +14 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.