@ahtmljs/next 0.1.0 → 0.2.0

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/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # @ahtmljs/next
2
+
3
+ Next.js plugin for **[AHTML](https://github.com/DibbayajyotiRoy/AHTML)** —
4
+ the HTML of the agent web.
5
+
6
+ Turns your existing Next.js app into:
7
+
8
+ - An **MCP server** (`/ahtml/mcp.json` — auto-generated from your snapshots' actions)
9
+ - An **OpenAPI 3.1 provider** (`/ahtml/openapi.json`)
10
+ - A **JSON-LD source** (schema.org JSON-LD ingested + emitted)
11
+ - A **token-optimal semantic snapshot** (`/ahtml/<route>`)
12
+ - A **`llms.txt` source** (`/llms.txt` — Jeremy Howard's convention shim)
13
+ - A **discovery manifest** (`/.well-known/ahtml.json`)
14
+
15
+ All from one plugin. No parallel servers. No migration. Browsers see the
16
+ same HTML they always have.
17
+
18
+ ```bash
19
+ npm install @ahtmljs/next @ahtmljs/schema
20
+ ```
21
+
22
+ ## 📊 How well does an AI read it?
23
+
24
+ We asked an AI **20 questions** about the same page — given in 4 different formats:
25
+
26
+ | Format you give the AI | Tokens used | Right answers |
27
+ |---|---:|---:|
28
+ | Plain HTML | 684 | 91% |
29
+ | llms.txt | 227 | 89% |
30
+ | **AHTML compact** | **338** | **95%** |
31
+ | **AHTML JSON** | **365** | **100%** ✓ |
32
+
33
+ > **AHTML JSON: every answer right.** AHTML compact: ~50% fewer tokens than HTML — and still more accurate.
34
+
35
+ <details>
36
+ <summary><sub><i>How we measured this — open for details</i></sub></summary>
37
+ <sub>
38
+
39
+ - Real API calls to **gpt-4o-mini, claude-haiku-4.5, gemini-2.5-flash, llama-3.3-70b** at temperature=0.
40
+ - 20 hand-graded questions an AI agent actually wants to know: *price, in stock?, SKU, return window, confirmation needed?, author, publication date,* etc.
41
+ - Tokens counted with the official OpenAI + Anthropic tokenizers (`gpt-tokenizer`, `@anthropic-ai/tokenizer`). No `text.length/4` guessing.
42
+ - Cost from real provider usage × public prices.
43
+ - Reproduce: `git clone https://github.com/DibbayajyotiRoy/AHTML && cp .env.example .env && bash scripts/run-llm-benchmark.sh`
44
+
45
+ [Full report](https://github.com/DibbayajyotiRoy/AHTML/blob/main/benchmark-results-llm.md) · [Source](https://github.com/DibbayajyotiRoy/AHTML/tree/main/examples/llm-benchmark)
46
+
47
+ </sub>
48
+ </details>
49
+
50
+ ## Quickstart — three minutes, three files
51
+
52
+ ### 1. Declare snapshots
53
+
54
+ ```ts
55
+ // lib/ahtml.ts
56
+ import { snapshot } from '@ahtmljs/schema';
57
+
58
+ export async function buildSnapshot(segments: string[], req: Request) {
59
+ if (segments[0] === 'products' && segments[1]) {
60
+ const p = await db.product.findUnique({ where: { slug: segments[1] } });
61
+ if (!p) return null;
62
+ return snapshot(req.url, 'product_detail')
63
+ .ttl(60)
64
+ .add({
65
+ id: `product:${p.slug}`,
66
+ type: 'product',
67
+ name: p.name,
68
+ price: { amount: p.price, currency: 'USD' },
69
+ stock: { status: p.qty > 0 ? 'in_stock' : 'out_of_stock', quantity: p.qty },
70
+ })
71
+ .action({
72
+ id: 'purchase',
73
+ target: `product:${p.slug}`,
74
+ category: 'transact',
75
+ execute_url: '/api/checkout',
76
+ auth: 'required',
77
+ cost: { amount: p.price, currency: 'USD', category: 'purchase' },
78
+ reversible: { reversible: true, window: 'P30D', policy: 'full_refund' },
79
+ side_effects: ['charge_card', 'email_buyer', 'decrement_stock'],
80
+ confirmation: 'required',
81
+ })
82
+ .build();
83
+ }
84
+ return null;
85
+ }
86
+ ```
87
+
88
+ ### 2. Wire the route handler
89
+
90
+ ```ts
91
+ // app/ahtml/[[...path]]/route.ts
92
+ import { createAHTMLRoute } from '@ahtmljs/next/handler';
93
+ import { buildSnapshot } from '@/lib/ahtml';
94
+ export const { GET, HEAD } = createAHTMLRoute(buildSnapshot);
95
+ ```
96
+
97
+ ### 3. Add discovery + llms.txt
98
+
99
+ ```ts
100
+ // app/.well-known/ahtml.json/route.ts
101
+ import { createWellKnownRoute } from '@ahtmljs/next/well-known';
102
+ export const { GET } = createWellKnownRoute();
103
+ ```
104
+
105
+ ```ts
106
+ // app/llms.txt/route.ts
107
+ import { createLlmsTxtRoute } from '@ahtmljs/next/llms-txt';
108
+ export const { GET } = createLlmsTxtRoute();
109
+ ```
110
+
111
+ ## What's now live on your site
112
+
113
+ | Endpoint | Format | Consumer |
114
+ |---|---|---|
115
+ | `/ahtml/<route>` | Compact text (default) | LLM agents — Claude, ChatGPT, Gemini, Cursor |
116
+ | `/ahtml/<route>?fmt=json` | Canonical JSON | Programmatic clients, signing |
117
+ | `/ahtml/<route>?since=<etag>` | Diff JSON | Incremental crawlers |
118
+ | `/ahtml/mcp.json` | MCP tool manifest | Claude Desktop, ChatGPT, Cursor, Copilot |
119
+ | `/ahtml/openapi.json` | OpenAPI 3.1 | REST clients, codegen |
120
+ | `/.well-known/ahtml.json` | Discovery manifest | Any AHTML-aware agent |
121
+ | `/llms.txt` | Markdown | IDE agents (Cursor, Continue, Cline) |
122
+
123
+
124
+ ## Documentation
125
+
126
+ - **Repository:** [`DibbayajyotiRoy/AHTML`](https://github.com/DibbayajyotiRoy/AHTML)
127
+ - **Spec:** [`SPEC.md`](https://github.com/DibbayajyotiRoy/AHTML/blob/main/SPEC.md)
128
+ - **Recipes (cookbook):** [`docs/recipes.md`](https://github.com/DibbayajyotiRoy/AHTML/blob/main/docs/recipes.md)
129
+ - **For AI assistants:** [`docs/agents.md`](https://github.com/DibbayajyotiRoy/AHTML/blob/main/docs/agents.md)
130
+ - **Comparison vs MCP / llms.txt / schema.org / OpenAPI:** [`docs/compare.md`](https://github.com/DibbayajyotiRoy/AHTML/blob/main/docs/compare.md)
131
+
132
+ ## Compatibility
133
+
134
+ - Node 20+
135
+ - Next.js 14+ (App Router)
136
+ - MCP spec version 2025-11-25
137
+ - OpenAPI 3.1
138
+ - JSON Schema 2020-12
139
+
140
+ ## License
141
+
142
+ MIT
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,MAAM,eAAe,GAAG,CAC5B,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,OAAO,KACT,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;AAQhD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAG5H;AAWD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,WAAW;eAC7D,OAAO,OAAO;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,GAAG;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,KAAG,OAAO,CAAC,QAAQ,CAAC;gBAwE/F,OAAO,OAAO;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,GAAG;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,KAAG,OAAO,CAAC,QAAQ,CAAC;EAM1H"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,MAAM,eAAe,GAAG,CAC5B,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,OAAO,KACT,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;AAQhD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAG5H;AAWD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,WAAW;eAC7D,OAAO,OAAO;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,GAAG;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,KAAG,OAAO,CAAC,QAAQ,CAAC;gBAgF/F,OAAO,OAAO;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,GAAG;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,KAAG,OAAO,CAAC,QAAQ,CAAC;EAM1H"}
package/dist/handler.js CHANGED
@@ -70,6 +70,14 @@ export function createAHTMLRoute(builder, configOverride) {
70
70
  if (prev && (prev.etag === sinceEtag || computeEtag(prev) === sinceEtag)) {
71
71
  const d = diff(prev, snap);
72
72
  cacheSet(cacheKey, snap);
73
+ // Optimization: when there are no changes, return 304 — saves
74
+ // ~150 B per page on no-change recrawls at scale.
75
+ if (d.changes.length === 0) {
76
+ return new Response(null, {
77
+ status: 304,
78
+ headers: { etag, 'cache-control': cacheControl(snap, config) },
79
+ });
80
+ }
73
81
  return new Response(JSON.stringify(d), {
74
82
  status: 200,
75
83
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,33 +1,94 @@
1
1
  {
2
2
  "name": "@ahtmljs/next",
3
- "version": "0.1.0",
4
- "description": "Next.js plugin for AHTML. Adds /.well-known/ahtml.json, /ahtml/[...path] route handlers, content negotiation, ETag-based incremental fetch, MCP + OpenAPI emitters, and a per-route snapshot builder.",
3
+ "version": "0.2.0",
4
+ "description": "Next.js plugin for AHTML. Turns your existing Next.js app into an MCP server, an OpenAPI provider, a JSON-LD source, and a token-optimal semantic snapshot — all from one plugin. Zero migration.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
- ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" },
10
- "./handler": { "types": "./dist/handler.d.ts", "import": "./dist/handler.js" },
11
- "./well-known": { "types": "./dist/well-known.d.ts", "import": "./dist/well-known.js" },
12
- "./llms-txt": { "types": "./dist/llms-txt.d.ts", "import": "./dist/llms-txt.js" },
13
- "./extractors": { "types": "./dist/extractors/index.d.ts", "import": "./dist/extractors/index.js" },
14
- "./mcp": { "types": "./dist/mcp.d.ts", "import": "./dist/mcp.js" },
15
- "./openapi": { "types": "./dist/openapi.d.ts", "import": "./dist/openapi.js" }
16
- },
17
- "files": ["dist"],
18
- "publishConfig": { "access": "public" },
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./handler": {
14
+ "types": "./dist/handler.d.ts",
15
+ "import": "./dist/handler.js"
16
+ },
17
+ "./well-known": {
18
+ "types": "./dist/well-known.d.ts",
19
+ "import": "./dist/well-known.js"
20
+ },
21
+ "./llms-txt": {
22
+ "types": "./dist/llms-txt.d.ts",
23
+ "import": "./dist/llms-txt.js"
24
+ },
25
+ "./extractors": {
26
+ "types": "./dist/extractors/index.d.ts",
27
+ "import": "./dist/extractors/index.js"
28
+ },
29
+ "./mcp": {
30
+ "types": "./dist/mcp.d.ts",
31
+ "import": "./dist/mcp.js"
32
+ },
33
+ "./openapi": {
34
+ "types": "./dist/openapi.d.ts",
35
+ "import": "./dist/openapi.js"
36
+ }
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "README.md"
41
+ ],
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
19
45
  "scripts": {
20
46
  "build": "tsc -p tsconfig.json",
21
- "dev": "tsc -p tsconfig.json --watch"
47
+ "dev": "tsc -p tsconfig.json --watch",
48
+ "test": "tsx --test src/__tests__/*.test.ts"
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "git+https://github.com/DibbayajyotiRoy/AHTML.git",
53
+ "directory": "packages/next"
54
+ },
55
+ "homepage": "https://github.com/DibbayajyotiRoy/AHTML#readme",
56
+ "bugs": {
57
+ "url": "https://github.com/DibbayajyotiRoy/AHTML/issues",
58
+ "email": "rdibbayajyoti@gmail.com"
59
+ },
60
+ "author": {
61
+ "name": "Dibbayajyoti Roy",
62
+ "email": "rdibbayajyoti@gmail.com",
63
+ "url": "https://github.com/DibbayajyotiRoy"
22
64
  },
65
+ "keywords": [
66
+ "ahtml",
67
+ "nextjs",
68
+ "next",
69
+ "plugin",
70
+ "agent",
71
+ "agent-web",
72
+ "ai",
73
+ "llm",
74
+ "mcp",
75
+ "model-context-protocol",
76
+ "llms-txt",
77
+ "openapi",
78
+ "json-ld",
79
+ "semantic-web",
80
+ "crawler"
81
+ ],
23
82
  "dependencies": {
24
- "@ahtmljs/schema": "0.1.0"
83
+ "@ahtmljs/schema": "0.2.0"
25
84
  },
26
85
  "peerDependencies": {
27
86
  "next": ">=14"
28
87
  },
29
88
  "peerDependenciesMeta": {
30
- "next": { "optional": true }
89
+ "next": {
90
+ "optional": true
91
+ }
31
92
  },
32
93
  "license": "MIT"
33
94
  }