@ignite-agent/agent 0.1.0 → 0.1.1
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 +38 -13
- package/dist/cli/index.js +36 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/client-public.d.ts +2 -0
- package/dist/client-public.js +3 -0
- package/dist/client-public.js.map +1 -0
- package/dist/client.d.ts +3 -1
- package/dist/client.js +7 -0
- package/dist/client.js.map +1 -1
- package/dist/env.js +1 -2
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +22 -0
- package/dist/mcp.js +88 -0
- package/dist/mcp.js.map +1 -0
- package/dist/operator/blog.d.ts +16 -0
- package/dist/operator/blog.js +27 -0
- package/dist/operator/blog.js.map +1 -0
- package/dist/operator/jsonld.d.ts +1 -0
- package/dist/operator/jsonld.js +1 -0
- package/dist/operator/jsonld.js.map +1 -1
- package/dist/operator/metadata.d.ts +1 -0
- package/dist/operator/metadata.js +1 -0
- package/dist/operator/metadata.js.map +1 -1
- package/dist/operator/page.d.ts +8 -0
- package/dist/operator/page.js +34 -0
- package/dist/operator/page.js.map +1 -0
- package/dist/operator/proxy.d.ts +2 -0
- package/dist/operator/proxy.js +43 -22
- package/dist/operator/proxy.js.map +1 -1
- package/dist/operator/robots.d.ts +1 -0
- package/dist/operator/robots.js +1 -0
- package/dist/operator/robots.js.map +1 -1
- package/dist/operator/sitemap.d.ts +1 -0
- package/dist/operator/sitemap.js +1 -0
- package/dist/operator/sitemap.js.map +1 -1
- package/dist/operator/wiki.d.ts +15 -0
- package/dist/operator/wiki.js +21 -0
- package/dist/operator/wiki.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/onboarding/CLAUDE-CODE-SETUP.md +21 -3
- package/package.json +26 -7
package/README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
# @ignite-agent/agent
|
|
2
2
|
|
|
3
3
|
Ignite for Next.js. A drop-in App Router SDK that lets your Ignite workspace drive your site's `robots.txt`,
|
|
4
|
-
`sitemap.xml`, JSON-LD,
|
|
4
|
+
`sitemap.xml`, JSON-LD, page metadata, crawl logging, and hosted wiki/blog pages.
|
|
5
5
|
|
|
6
6
|
Requires the **App Router** (Next.js 15 or 16) with server rendering. Content and directives resolve on the
|
|
7
|
-
server
|
|
7
|
+
server. Your site token never reaches the browser.
|
|
8
|
+
|
|
9
|
+
The front end reads **JSON over HTTPS** (`GET /v1/sites/{id}/pages`). MCP is a stdio wrapper of that same GET
|
|
10
|
+
for coding agents. Do not call MCP from React. Do not put the token in `NEXT_PUBLIC_*`.
|
|
8
11
|
|
|
9
12
|
## Install
|
|
10
13
|
|
|
@@ -27,12 +30,11 @@ npx ignite connect --site-url https://yourdomain.com --email you@yourdomain.com
|
|
|
27
30
|
npx ignite confirm --activation <activation_id> --code <email_code> # writes .env.local
|
|
28
31
|
```
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
`confirm` mints a **read** token (`plugin_read`). It can fetch pages, directives, and send crawl events. It
|
|
34
|
+
cannot execute Action Center writes or proxy LLM spend.
|
|
31
35
|
|
|
32
36
|
## Wire it up
|
|
33
37
|
|
|
34
|
-
Three files, each a one-line re-export:
|
|
35
|
-
|
|
36
38
|
```ts
|
|
37
39
|
// app/robots.ts
|
|
38
40
|
export { default } from '@ignite-agent/agent/robots'
|
|
@@ -43,6 +45,16 @@ export { default } from '@ignite-agent/agent/robots'
|
|
|
43
45
|
export { default } from '@ignite-agent/agent/sitemap'
|
|
44
46
|
```
|
|
45
47
|
|
|
48
|
+
```ts
|
|
49
|
+
// app/w/[slug]/page.tsx
|
|
50
|
+
export { default, generateStaticParams, generateMetadata, revalidate } from '@ignite-agent/agent/wiki'
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
// app/blog/[slug]/page.tsx
|
|
55
|
+
export { default, generateStaticParams, generateMetadata, revalidate } from '@ignite-agent/agent/blog'
|
|
56
|
+
```
|
|
57
|
+
|
|
46
58
|
```tsx
|
|
47
59
|
// app/layout.tsx
|
|
48
60
|
import { IgniteJsonLd } from '@ignite-agent/agent/jsonld'
|
|
@@ -72,28 +84,41 @@ export async function generateMetadata() {
|
|
|
72
84
|
Crawler logging (optional, recommended):
|
|
73
85
|
|
|
74
86
|
```ts
|
|
75
|
-
// proxy.ts
|
|
87
|
+
// Next 16 — proxy.ts at the project root
|
|
76
88
|
export { proxy, config } from '@ignite-agent/agent/proxy'
|
|
89
|
+
|
|
90
|
+
// Next 15 — middleware.ts at the project root
|
|
91
|
+
export { middleware, config } from '@ignite-agent/agent/proxy'
|
|
77
92
|
```
|
|
78
93
|
|
|
79
|
-
Or let the CLI write
|
|
94
|
+
Or let the CLI write the files:
|
|
80
95
|
|
|
81
96
|
```bash
|
|
82
97
|
npx ignite init
|
|
83
98
|
```
|
|
84
99
|
|
|
85
|
-
##
|
|
100
|
+
## How pages land
|
|
101
|
+
|
|
102
|
+
Approved wiki and article bodies live on Ignite. Your app fetches them on the server (`revalidate = 60`) and
|
|
103
|
+
renders the HTML. Bots hit **your origin**, not the Ignite API. Unpublish in Ignite → the slug 404s on the
|
|
104
|
+
next fetch.
|
|
105
|
+
|
|
106
|
+
You can wrap `FeedArticle` later if you want your own layout. Do not fetch the feed from a Client Component.
|
|
107
|
+
|
|
108
|
+
## MCP (coding agents only)
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npx ignite mcp
|
|
112
|
+
```
|
|
86
113
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
installs, wires the files, and verifies the build.
|
|
90
|
-
- **Managed.** The Ignite team does the setup in your repo for you.
|
|
114
|
+
stdio tools: `list_pages`, `get_page`, `get_directives`. Same read token. No writes. Point Claude Code / Cursor
|
|
115
|
+
at this command. The Next.js app does not speak MCP.
|
|
91
116
|
|
|
92
117
|
## How it degrades
|
|
93
118
|
|
|
94
119
|
Ignite is additive. If the SDK is unconfigured or the Ignite API is unreachable, `robots` falls back to
|
|
95
120
|
allow-all, `sitemap` returns empty, JSON-LD renders nothing, and `metadata` returns `{}` — your app's own
|
|
96
|
-
defaults stand.
|
|
121
|
+
defaults stand. A missing page 404s. A Hub outage on a cached page keeps the last ISR copy.
|
|
97
122
|
|
|
98
123
|
## Environment
|
|
99
124
|
|
package/dist/cli/index.js
CHANGED
|
@@ -11,6 +11,17 @@ function write(path, contents) {
|
|
|
11
11
|
writeFileSync(path, contents);
|
|
12
12
|
console.log(` write ${path}`);
|
|
13
13
|
}
|
|
14
|
+
function nextMajor(cwd) {
|
|
15
|
+
try {
|
|
16
|
+
const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
|
|
17
|
+
const raw = pkg.dependencies?.next ?? pkg.devDependencies?.next ?? '';
|
|
18
|
+
const match = raw.match(/(\d+)/);
|
|
19
|
+
return match ? Number(match[1]) : 16;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return 16;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
14
25
|
function init() {
|
|
15
26
|
const cwd = process.cwd();
|
|
16
27
|
if (!existsSync(join(cwd, 'app'))) {
|
|
@@ -19,10 +30,19 @@ function init() {
|
|
|
19
30
|
}
|
|
20
31
|
write(join(cwd, 'app/robots.ts'), `export { default } from '@ignite-agent/agent/robots'\n`);
|
|
21
32
|
write(join(cwd, 'app/sitemap.ts'), `export { default } from '@ignite-agent/agent/sitemap'\n`);
|
|
22
|
-
write(join(cwd, '
|
|
33
|
+
write(join(cwd, 'app/w/[slug]/page.tsx'), `export { default, generateStaticParams, generateMetadata, revalidate } from '@ignite-agent/agent/wiki'\n`);
|
|
34
|
+
write(join(cwd, 'app/blog/[slug]/page.tsx'), `export { default, generateStaticParams, generateMetadata, revalidate } from '@ignite-agent/agent/blog'\n`);
|
|
35
|
+
write(join(cwd, 'app/blog/page.tsx'), `export { BlogIndex as default, revalidate } from '@ignite-agent/agent/blog'\n`);
|
|
36
|
+
if (nextMajor(cwd) <= 15) {
|
|
37
|
+
write(join(cwd, 'middleware.ts'), `export { middleware, config } from '@ignite-agent/agent/proxy'\n`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
write(join(cwd, 'proxy.ts'), `export { proxy, config } from '@ignite-agent/agent/proxy'\n`);
|
|
41
|
+
}
|
|
23
42
|
console.log('\nAdd <IgniteJsonLd /> to app/layout.tsx:');
|
|
24
43
|
console.log(` import { IgniteJsonLd } from '@ignite-agent/agent/jsonld' // then render <IgniteJsonLd /> in <head>`);
|
|
25
44
|
console.log('\nSet IGNITE_SITE_ID and IGNITE_SITE_TOKEN in .env.local and in your host, then deploy.');
|
|
45
|
+
console.log('Keep IGNITE_SITE_TOKEN on the server. Never prefix it with NEXT_PUBLIC_.');
|
|
26
46
|
}
|
|
27
47
|
async function doctor() {
|
|
28
48
|
const siteId = process.env.IGNITE_SITE_ID?.trim();
|
|
@@ -32,11 +52,14 @@ async function doctor() {
|
|
|
32
52
|
process.exit(1);
|
|
33
53
|
}
|
|
34
54
|
try {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
|
|
55
|
+
const headers = { 'X-Ignite-Site-Token': token };
|
|
56
|
+
const directives = await fetch(`${HUB_URL}/v1/sites/${siteId}/agent-directives`, { headers });
|
|
57
|
+
const pages = await fetch(`${HUB_URL}/v1/sites/${siteId}/pages`, { headers });
|
|
58
|
+
const ok = directives.ok && pages.ok;
|
|
59
|
+
console.log(ok
|
|
60
|
+
? `ok reached ${HUB_URL} (directives ${directives.status}, pages ${pages.status})`
|
|
61
|
+
: `fail HTTP directives ${directives.status} pages ${pages.status} from ${HUB_URL}`);
|
|
62
|
+
process.exit(ok ? 0 : 1);
|
|
40
63
|
}
|
|
41
64
|
catch (error) {
|
|
42
65
|
console.error(`fail could not reach ${HUB_URL}: ${error.message}`);
|
|
@@ -80,7 +103,7 @@ async function confirm() {
|
|
|
80
103
|
const res = await fetch(`${HUB_URL}/v1/activate/confirm`, {
|
|
81
104
|
method: 'POST',
|
|
82
105
|
headers: { 'Content-Type': 'application/json' },
|
|
83
|
-
body: JSON.stringify({ activation_id: activationId, email_code: code }),
|
|
106
|
+
body: JSON.stringify({ activation_id: activationId, email_code: code, client: 'nextjs' }),
|
|
84
107
|
});
|
|
85
108
|
const body = await res.json().catch(() => ({}));
|
|
86
109
|
if (!res.ok || !body.token || !body.site_id) {
|
|
@@ -125,11 +148,15 @@ switch (command) {
|
|
|
125
148
|
case 'confirm':
|
|
126
149
|
void confirm();
|
|
127
150
|
break;
|
|
151
|
+
case 'mcp':
|
|
152
|
+
void import('../mcp.js').then((mod) => mod.runMcpStdio());
|
|
153
|
+
break;
|
|
128
154
|
default:
|
|
129
|
-
console.log('Usage: ignite <init|connect|confirm|doctor>');
|
|
130
|
-
console.log(' init write
|
|
155
|
+
console.log('Usage: ignite <init|connect|confirm|doctor|mcp>');
|
|
156
|
+
console.log(' init write robots, sitemap, wiki/blog routes, proxy or middleware');
|
|
131
157
|
console.log(' connect start the site activation handshake (--site-url --email)');
|
|
132
158
|
console.log(' confirm finish activation and write .env.local (--activation --code)');
|
|
133
159
|
console.log(' doctor check config and reach the Ignite API');
|
|
160
|
+
console.log(' mcp stdio MCP for coding agents (reads the same feed; not for the front end)');
|
|
134
161
|
}
|
|
135
162
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,4BAA4B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAEzG,SAAS,KAAK,CAAC,IAAY,EAAE,QAAgB;IAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,mBAAmB,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,IAAI;IACX,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,wDAAwD,CAAC,CAAC;IAC5F,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,yDAAyD,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,6DAA6D,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-public.js","sourceRoot":"","sources":["../src/client-public.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,cAAc,GAGf,MAAM,aAAa,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IgniteConfig } from './env.js';
|
|
2
|
-
import type { AgentDirectives } from './types.js';
|
|
2
|
+
import type { AgentDirectives, FeedIndex, FeedPage } from './types.js';
|
|
3
3
|
export declare class IgniteApiError extends Error {
|
|
4
4
|
readonly status: number;
|
|
5
5
|
readonly path: string;
|
|
@@ -15,6 +15,8 @@ export declare class IgniteClient {
|
|
|
15
15
|
static fromEnv(options?: ClientOptions): IgniteClient;
|
|
16
16
|
static fromEnvOrNull(options?: ClientOptions): IgniteClient | null;
|
|
17
17
|
directives(): Promise<AgentDirectives>;
|
|
18
|
+
pages(): Promise<FeedIndex>;
|
|
19
|
+
page(slug: string): Promise<FeedPage>;
|
|
18
20
|
recordCrawlEvents(events: CrawlEvent[]): Promise<void>;
|
|
19
21
|
private site;
|
|
20
22
|
private get;
|
package/dist/client.js
CHANGED
|
@@ -27,6 +27,13 @@ export class IgniteClient {
|
|
|
27
27
|
async directives() {
|
|
28
28
|
return this.get('/agent-directives');
|
|
29
29
|
}
|
|
30
|
+
async pages() {
|
|
31
|
+
return this.get('/pages');
|
|
32
|
+
}
|
|
33
|
+
async page(slug) {
|
|
34
|
+
const body = await this.get(`/pages/${encodeURIComponent(slug)}`);
|
|
35
|
+
return body.page;
|
|
36
|
+
}
|
|
30
37
|
async recordCrawlEvents(events) {
|
|
31
38
|
if (events.length === 0)
|
|
32
39
|
return;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/env.js
CHANGED
|
@@ -5,8 +5,7 @@ export class IgniteConfigError extends Error {
|
|
|
5
5
|
this.name = 'IgniteConfigError';
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
-
// The token
|
|
9
|
-
// module that imports it fails to build, which is intended.
|
|
8
|
+
// The token is a Hub credential. `server-only` fails the build if a client component imports this file.
|
|
10
9
|
export function readConfig() {
|
|
11
10
|
const token = process.env.IGNITE_SITE_TOKEN?.trim();
|
|
12
11
|
const siteId = process.env.IGNITE_SITE_ID?.trim();
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAMA,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAMA,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,wGAAwG;AACxG,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO;QACL,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnF,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAiB,CACzB,gGAAgG,CACjG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import 'server-only';
|
|
1
2
|
export { IgniteClient, IgniteApiError, type ClientOptions, type CrawlEvent } from './client.js';
|
|
2
3
|
export { readConfig, requireConfig, IgniteConfigError, type IgniteConfig } from './env.js';
|
|
3
|
-
export type { AgentDirectives, RobotsDirective, SitemapEntry, MetadataDirective, Measured, RateCI, } from './types.js';
|
|
4
|
+
export type { AgentDirectives, RobotsDirective, SitemapEntry, MetadataDirective, FeedPage, FeedIndex, Measured, RateCI, } from './types.js';
|
|
4
5
|
export { default as robots } from './operator/robots.js';
|
|
5
6
|
export { default as sitemap } from './operator/sitemap.js';
|
|
6
7
|
export { IgniteJsonLd } from './operator/jsonld.js';
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAuC,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAuC,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,UAAU,CAAC;AAY3F,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { IgniteClient } from './client.js';
|
|
2
|
+
type JsonRpc = {
|
|
3
|
+
jsonrpc: '2.0';
|
|
4
|
+
id?: string | number | null;
|
|
5
|
+
method?: string;
|
|
6
|
+
params?: {
|
|
7
|
+
name?: string;
|
|
8
|
+
arguments?: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
type JsonRpcResponse = {
|
|
12
|
+
jsonrpc: '2.0';
|
|
13
|
+
id: string | number | null;
|
|
14
|
+
result?: unknown;
|
|
15
|
+
error?: {
|
|
16
|
+
code: number;
|
|
17
|
+
message: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare function handleMcp(msg: JsonRpc, client: IgniteClient): Promise<JsonRpcResponse | null>;
|
|
21
|
+
export declare function runMcpStdio(): Promise<void>;
|
|
22
|
+
export {};
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline';
|
|
2
|
+
import { IgniteClient } from './client.js';
|
|
3
|
+
const TOOLS = [
|
|
4
|
+
{
|
|
5
|
+
name: 'list_pages',
|
|
6
|
+
description: 'List published wiki and blog pages from the Ignite feed (no drafts).',
|
|
7
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
name: 'get_page',
|
|
11
|
+
description: 'Fetch one published page body by slug.',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: { slug: { type: 'string' } },
|
|
15
|
+
required: ['slug'],
|
|
16
|
+
additionalProperties: false,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'get_directives',
|
|
21
|
+
description: 'Fetch robots, sitemap, JSON-LD, and metadata directives for this site.',
|
|
22
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
export async function handleMcp(msg, client) {
|
|
26
|
+
if (msg.id === undefined || msg.id === null)
|
|
27
|
+
return null;
|
|
28
|
+
const id = msg.id;
|
|
29
|
+
try {
|
|
30
|
+
switch (msg.method) {
|
|
31
|
+
case 'initialize':
|
|
32
|
+
return {
|
|
33
|
+
jsonrpc: '2.0',
|
|
34
|
+
id,
|
|
35
|
+
result: {
|
|
36
|
+
protocolVersion: '2024-11-05',
|
|
37
|
+
capabilities: { tools: {} },
|
|
38
|
+
serverInfo: { name: 'ignite-feed', version: '0.1.1' },
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
case 'tools/list':
|
|
42
|
+
return { jsonrpc: '2.0', id, result: { tools: TOOLS } };
|
|
43
|
+
case 'tools/call':
|
|
44
|
+
return { jsonrpc: '2.0', id, result: await callTool(client, msg.params) };
|
|
45
|
+
case 'notifications/initialized':
|
|
46
|
+
case 'ping':
|
|
47
|
+
return { jsonrpc: '2.0', id, result: {} };
|
|
48
|
+
default:
|
|
49
|
+
return { jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown method ${msg.method ?? ''}` } };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return { jsonrpc: '2.0', id, error: { code: -32000, message: error.message } };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function callTool(client, params) {
|
|
57
|
+
const name = params?.name ?? '';
|
|
58
|
+
const args = params?.arguments ?? {};
|
|
59
|
+
let payload;
|
|
60
|
+
if (name === 'list_pages')
|
|
61
|
+
payload = await client.pages();
|
|
62
|
+
else if (name === 'get_page')
|
|
63
|
+
payload = await client.page(String(args.slug ?? ''));
|
|
64
|
+
else if (name === 'get_directives')
|
|
65
|
+
payload = await client.directives();
|
|
66
|
+
else
|
|
67
|
+
throw new Error(`Unknown tool ${name}`);
|
|
68
|
+
return { content: [{ type: 'text', text: JSON.stringify(payload) }] };
|
|
69
|
+
}
|
|
70
|
+
export async function runMcpStdio() {
|
|
71
|
+
const client = IgniteClient.fromEnv();
|
|
72
|
+
const rl = createInterface({ input: process.stdin });
|
|
73
|
+
for await (const line of rl) {
|
|
74
|
+
if (!line.trim())
|
|
75
|
+
continue;
|
|
76
|
+
let msg;
|
|
77
|
+
try {
|
|
78
|
+
msg = JSON.parse(line);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const res = await handleMcp(msg, client);
|
|
84
|
+
if (res)
|
|
85
|
+
process.stdout.write(`${JSON.stringify(res)}\n`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import 'server-only';
|
|
2
|
+
import { revalidate } from './page.js';
|
|
3
|
+
export { revalidate };
|
|
4
|
+
type SlugParams = {
|
|
5
|
+
params: Promise<{
|
|
6
|
+
slug: string;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
export declare function generateStaticParams(): Promise<Array<{
|
|
10
|
+
slug: string;
|
|
11
|
+
}>>;
|
|
12
|
+
export declare function generateMetadata({ params }: SlugParams): Promise<{
|
|
13
|
+
title?: string;
|
|
14
|
+
}>;
|
|
15
|
+
export default function BlogPage({ params }: SlugParams): Promise<import("react").JSX.Element>;
|
|
16
|
+
export declare function BlogIndex(): Promise<import("react").JSX.Element | null>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import 'server-only';
|
|
3
|
+
import { notFound } from 'next/navigation';
|
|
4
|
+
import { FeedArticle, feedPagesOfKind, revalidate, tryLoadFeedPage } from './page.js';
|
|
5
|
+
export { revalidate };
|
|
6
|
+
export async function generateStaticParams() {
|
|
7
|
+
return (await feedPagesOfKind('article')).map((page) => ({ slug: page.slug }));
|
|
8
|
+
}
|
|
9
|
+
export async function generateMetadata({ params }) {
|
|
10
|
+
const { slug } = await params;
|
|
11
|
+
const page = await tryLoadFeedPage('article', slug);
|
|
12
|
+
return page ? { title: page.title } : {};
|
|
13
|
+
}
|
|
14
|
+
export default async function BlogPage({ params }) {
|
|
15
|
+
const { slug } = await params;
|
|
16
|
+
const page = await tryLoadFeedPage('article', slug);
|
|
17
|
+
if (!page)
|
|
18
|
+
notFound();
|
|
19
|
+
return _jsx(FeedArticle, { page: page });
|
|
20
|
+
}
|
|
21
|
+
export async function BlogIndex() {
|
|
22
|
+
const pages = await feedPagesOfKind('article');
|
|
23
|
+
if (pages.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
return (_jsx("ul", { children: pages.map((page) => (_jsx("li", { children: _jsx("a", { href: page.path, children: page.title }) }, page.slug))) }));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=blog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog.js","sourceRoot":"","sources":["../../src/operator/blog.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEtF,OAAO,EAAE,UAAU,EAAE,CAAC;AAItB,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,CAAC,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAE,MAAM,EAAc;IAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAc;IAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI;QAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,CACL,uBACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,uBACE,YAAG,IAAI,EAAE,IAAI,CAAC,IAAI,YAAG,IAAI,CAAC,KAAK,GAAK,IAD7B,IAAI,CAAC,IAAI,CAEb,CACN,CAAC,GACC,CACN,CAAC;AACJ,CAAC"}
|
package/dist/operator/jsonld.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import 'server-only';
|
|
2
3
|
import { IgniteClient } from '../client.js';
|
|
3
4
|
// Drop into `app/layout.tsx`: import { IgniteJsonLd } from '@ignite-agent/agent/jsonld' then render <IgniteJsonLd />
|
|
4
5
|
// An async server component that emits ld+json for the site. Renders nothing when unconfigured or unreachable.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonld.js","sourceRoot":"","sources":["../../src/operator/jsonld.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,uHAAuH;AACvH,+GAA+G;AAC/G,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,MAAM,GAA8B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,iBAEE,IAAI,EAAC,qBAAqB;YAC1B,kGAAkG;YAClG,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,IAH9E,CAAC,CAIN,CACH,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"jsonld.js","sourceRoot":"","sources":["../../src/operator/jsonld.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,uHAAuH;AACvH,+GAA+G;AAC/G,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,MAAM,GAA8B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,iBAEE,IAAI,EAAC,qBAAqB;YAC1B,kGAAkG;YAClG,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,IAH9E,CAAC,CAIN,CACH,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import 'server-only';
|
|
1
2
|
import { IgniteClient } from '../client.js';
|
|
2
3
|
// Use inside `generateMetadata`: export async function generateMetadata() { return igniteMetadata('/pricing') }
|
|
3
4
|
// Merge with your own values by spreading: { ...(await igniteMetadata(path)), title: 'override' }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/operator/metadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/operator/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAIrB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,iHAAiH;AACjH,kGAAkG;AAClG,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,IAAI,SAAS,CAAC;IACd,IAAI,CAAC;QACH,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,SAAS,CAAC,KAAK;QAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IACtD,IAAI,SAAS,CAAC,WAAW;QAAE,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;IACxE,IAAI,SAAS,CAAC,SAAS;QAAE,QAAQ,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;IAClF,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,QAAQ,CAAC,SAAS,GAAG;YACnB,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import 'server-only';
|
|
2
|
+
import type { FeedPage } from '../types.js';
|
|
3
|
+
export declare const revalidate = 60;
|
|
4
|
+
export declare function feedPagesOfKind(kind: FeedPage['kind']): Promise<FeedPage[]>;
|
|
5
|
+
export declare function tryLoadFeedPage(kind: FeedPage['kind'], slug: string): Promise<FeedPage | null>;
|
|
6
|
+
export declare function FeedArticle({ page }: {
|
|
7
|
+
page: FeedPage;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import 'server-only';
|
|
3
|
+
import { IgniteApiError, IgniteClient } from '../client.js';
|
|
4
|
+
export const revalidate = 60;
|
|
5
|
+
export async function feedPagesOfKind(kind) {
|
|
6
|
+
const client = IgniteClient.fromEnvOrNull();
|
|
7
|
+
if (!client)
|
|
8
|
+
return [];
|
|
9
|
+
try {
|
|
10
|
+
const { pages } = await client.pages();
|
|
11
|
+
return pages.filter((page) => page.kind === kind);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export async function tryLoadFeedPage(kind, slug) {
|
|
18
|
+
const client = IgniteClient.fromEnvOrNull();
|
|
19
|
+
if (!client)
|
|
20
|
+
return null;
|
|
21
|
+
try {
|
|
22
|
+
const page = await client.page(slug);
|
|
23
|
+
return page.kind === kind ? page : null;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error instanceof IgniteApiError && error.status === 404)
|
|
27
|
+
return null;
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function FeedArticle({ page }) {
|
|
32
|
+
return (_jsxs("article", { children: [_jsx("h1", { children: page.title }), _jsx("div", { dangerouslySetInnerHTML: { __html: page.html } })] }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/operator/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB;IAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB,EAAE,IAAY;IACxE,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAsB;IACtD,OAAO,CACL,8BACE,uBAAK,IAAI,CAAC,KAAK,GAAM,EACrB,cAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,GAAI,IAC/C,CACX,CAAC;AACJ,CAAC"}
|
package/dist/operator/proxy.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import 'server-only';
|
|
1
2
|
import { type NextRequest, NextResponse } from 'next/server';
|
|
2
3
|
export declare function proxy(request: NextRequest): Promise<NextResponse>;
|
|
4
|
+
export declare const middleware: typeof proxy;
|
|
3
5
|
export declare const config: {
|
|
4
6
|
matcher: string[];
|
|
5
7
|
};
|
package/dist/operator/proxy.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import 'server-only';
|
|
1
2
|
import { NextResponse } from 'next/server';
|
|
2
3
|
import { IgniteClient } from '../client.js';
|
|
3
4
|
// Well-known AI and search crawler user-agent tokens. Matching is case-insensitive substring; the first match
|
|
@@ -31,34 +32,54 @@ function clientIp(request) {
|
|
|
31
32
|
return forwarded.split(',')[0]?.trim() || undefined;
|
|
32
33
|
return request.headers.get('x-real-ip')?.trim() || undefined;
|
|
33
34
|
}
|
|
34
|
-
// Drop into `proxy.ts`
|
|
35
|
-
//
|
|
36
|
-
//
|
|
35
|
+
// Drop into `proxy.ts` (Next 16) or `middleware.ts` (Next 15):
|
|
36
|
+
// export { proxy, config } from '@ignite-agent/agent/proxy'
|
|
37
|
+
// export { middleware, config } from '@ignite-agent/agent/proxy'
|
|
38
|
+
// Passes every request through untouched. Crawl ingest runs after the response so a slow Hub never stalls a bot.
|
|
37
39
|
export async function proxy(request) {
|
|
38
40
|
const botName = matchedCrawler(request.headers.get('user-agent') ?? '');
|
|
39
41
|
if (botName) {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
};
|
|
52
|
-
try {
|
|
53
|
-
await client.recordCrawlEvents([event]);
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
// best-effort; ignore
|
|
57
|
-
}
|
|
58
|
-
}
|
|
42
|
+
const ip = clientIp(request);
|
|
43
|
+
const userAgent = request.headers.get('user-agent') ?? undefined;
|
|
44
|
+
const event = {
|
|
45
|
+
bot_name: botName,
|
|
46
|
+
path: request.nextUrl.pathname,
|
|
47
|
+
observed_at: new Date().toISOString(),
|
|
48
|
+
method: request.method,
|
|
49
|
+
...(ip ? { ip } : {}),
|
|
50
|
+
...(userAgent ? { user_agent: userAgent } : {}),
|
|
51
|
+
};
|
|
52
|
+
schedule(() => record(event));
|
|
59
53
|
}
|
|
60
54
|
return NextResponse.next();
|
|
61
55
|
}
|
|
56
|
+
export const middleware = proxy;
|
|
57
|
+
function schedule(work) {
|
|
58
|
+
void import('next/server')
|
|
59
|
+
.then((mod) => {
|
|
60
|
+
if (typeof mod.after === 'function') {
|
|
61
|
+
mod.after(() => {
|
|
62
|
+
void work();
|
|
63
|
+
});
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
void work();
|
|
67
|
+
})
|
|
68
|
+
.catch(() => {
|
|
69
|
+
void work();
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
async function record(event) {
|
|
73
|
+
const client = IgniteClient.fromEnvOrNull();
|
|
74
|
+
if (!client)
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
await client.recordCrawlEvents([event]);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// best-effort
|
|
81
|
+
}
|
|
82
|
+
}
|
|
62
83
|
// Limit the proxy to page requests; skip static assets.
|
|
63
84
|
export const config = {
|
|
64
85
|
matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/operator/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAmB,MAAM,cAAc,CAAC;AAE7D,8GAA8G;AAC9G,gHAAgH;AAChH,wDAAwD;AACxD,MAAM,cAAc,GAAG;IACrB,QAAQ;IACR,eAAe;IACf,cAAc;IACd,WAAW;IACX,YAAY;IACZ,cAAc;IACd,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,oBAAoB;IACpB,YAAY;IACZ,OAAO;CACR,CAAC;AAEF,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AAClF,CAAC;AAED,SAAS,QAAQ,CAAC,OAAoB;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACzD,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACnE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AAC/D,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/operator/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAoB,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAmB,MAAM,cAAc,CAAC;AAE7D,8GAA8G;AAC9G,gHAAgH;AAChH,wDAAwD;AACxD,MAAM,cAAc,GAAG;IACrB,QAAQ;IACR,eAAe;IACf,cAAc;IACd,WAAW;IACX,YAAY;IACZ,cAAc;IACd,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,oBAAoB;IACpB,YAAY;IACZ,OAAO;CACR,CAAC;AAEF,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AAClF,CAAC;AAED,SAAS,QAAQ,CAAC,OAAoB;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACzD,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACnE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AAC/D,CAAC;AAED,+DAA+D;AAC/D,8DAA8D;AAC9D,mEAAmE;AACnE,iHAAiH;AACjH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAoB;IAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;QACjE,MAAM,KAAK,GAAe;YACxB,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;YAC9B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC;QACF,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC;AAEhC,SAAS,QAAQ,CAAC,IAAyB;IACzC,KAAK,MAAM,CAAC,aAAa,CAAC;SACvB,IAAI,CAAC,CAAC,GAAyC,EAAE,EAAE;QAClD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACpC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;gBACb,KAAK,IAAI,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,KAAK,IAAI,EAAE,CAAC;IACd,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,KAAK,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,KAAiB;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,CAAC,+CAA+C,CAAC;CAC3D,CAAC"}
|
package/dist/operator/robots.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/operator/robots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/operator/robots.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAIrB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,mFAAmF;AACnF,0GAA0G;AAC1G,wDAAwD;AACxD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,MAAM;IAClC,MAAM,QAAQ,GAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;IAEjF,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/operator/sitemap.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/operator/sitemap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/operator/sitemap.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAIrB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,qFAAqF;AACrF,4GAA4G;AAC5G,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,OAAO;IACnC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import 'server-only';
|
|
2
|
+
import { revalidate } from './page.js';
|
|
3
|
+
export { revalidate };
|
|
4
|
+
type SlugParams = {
|
|
5
|
+
params: Promise<{
|
|
6
|
+
slug: string;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
export declare function generateStaticParams(): Promise<Array<{
|
|
10
|
+
slug: string;
|
|
11
|
+
}>>;
|
|
12
|
+
export declare function generateMetadata({ params }: SlugParams): Promise<{
|
|
13
|
+
title?: string;
|
|
14
|
+
}>;
|
|
15
|
+
export default function WikiPage({ params }: SlugParams): Promise<import("react").JSX.Element>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import 'server-only';
|
|
3
|
+
import { notFound } from 'next/navigation';
|
|
4
|
+
import { FeedArticle, feedPagesOfKind, revalidate, tryLoadFeedPage } from './page.js';
|
|
5
|
+
export { revalidate };
|
|
6
|
+
export async function generateStaticParams() {
|
|
7
|
+
return (await feedPagesOfKind('wiki')).map((page) => ({ slug: page.slug }));
|
|
8
|
+
}
|
|
9
|
+
export async function generateMetadata({ params }) {
|
|
10
|
+
const { slug } = await params;
|
|
11
|
+
const page = await tryLoadFeedPage('wiki', slug);
|
|
12
|
+
return page ? { title: page.title } : {};
|
|
13
|
+
}
|
|
14
|
+
export default async function WikiPage({ params }) {
|
|
15
|
+
const { slug } = await params;
|
|
16
|
+
const page = await tryLoadFeedPage('wiki', slug);
|
|
17
|
+
if (!page)
|
|
18
|
+
notFound();
|
|
19
|
+
return _jsx(FeedArticle, { page: page });
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=wiki.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../src/operator/wiki.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEtF,OAAO,EAAE,UAAU,EAAE,CAAC;AAItB,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAE,MAAM,EAAc;IAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAc;IAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI;QAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;AACrC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -36,3 +36,17 @@ export type MetadataDirective = {
|
|
|
36
36
|
images?: string[];
|
|
37
37
|
};
|
|
38
38
|
};
|
|
39
|
+
export type FeedPage = {
|
|
40
|
+
slug: string;
|
|
41
|
+
kind: 'wiki' | 'article';
|
|
42
|
+
path: string;
|
|
43
|
+
title: string;
|
|
44
|
+
html: string;
|
|
45
|
+
updatedAt: string;
|
|
46
|
+
indexable: true;
|
|
47
|
+
};
|
|
48
|
+
export type FeedIndex = {
|
|
49
|
+
generatedAt: string;
|
|
50
|
+
version: string;
|
|
51
|
+
pages: FeedPage[];
|
|
52
|
+
};
|
|
@@ -34,7 +34,17 @@ and report what changed.
|
|
|
34
34
|
```
|
|
35
35
|
Same rule if it already exists.
|
|
36
36
|
|
|
37
|
-
6.
|
|
37
|
+
6. Create the hosted page routes (skip if the files already exist — show me them instead):
|
|
38
|
+
```ts
|
|
39
|
+
// app/w/[slug]/page.tsx
|
|
40
|
+
export { default, generateStaticParams, generateMetadata, revalidate } from '@ignite-agent/agent/wiki'
|
|
41
|
+
```
|
|
42
|
+
```ts
|
|
43
|
+
// app/blog/[slug]/page.tsx
|
|
44
|
+
export { default, generateStaticParams, generateMetadata, revalidate } from '@ignite-agent/agent/blog'
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
7. In `app/layout.tsx`, import and render the JSON-LD component inside `<head>` (or at the top of `<body>` if the
|
|
38
48
|
layout has no explicit `<head>`):
|
|
39
49
|
```tsx
|
|
40
50
|
import { IgniteJsonLd } from '@ignite-agent/agent/jsonld'
|
|
@@ -42,10 +52,18 @@ and report what changed.
|
|
|
42
52
|
<IgniteJsonLd />
|
|
43
53
|
```
|
|
44
54
|
|
|
45
|
-
|
|
55
|
+
8. (Optional, recommended) Crawl logging. If `package.json` has Next 15, create `middleware.ts`:
|
|
56
|
+
```ts
|
|
57
|
+
export { middleware, config } from '@ignite-agent/agent/proxy'
|
|
58
|
+
```
|
|
59
|
+
If Next 16+, create `proxy.ts`:
|
|
46
60
|
```ts
|
|
47
61
|
export { proxy, config } from '@ignite-agent/agent/proxy'
|
|
48
62
|
```
|
|
49
63
|
If a `proxy.ts` or `middleware.ts` already exists, do NOT overwrite it — show it to me and we will merge.
|
|
50
64
|
|
|
51
|
-
|
|
65
|
+
9. Keep `IGNITE_SITE_TOKEN` server-side. Never write `NEXT_PUBLIC_IGNITE_SITE_TOKEN`. Never fetch Ignite
|
|
66
|
+
from a Client Component. The front end renders Hub JSON via the server routes above. MCP (`npx ignite mcp`)
|
|
67
|
+
is for coding agents only.
|
|
68
|
+
|
|
69
|
+
10. Run the build (`npm run build`) and report any errors. Do not change unrelated files.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ignite-agent/agent",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Ignite for Next.js:
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Ignite for Next.js: App Router SDK for robots, sitemap, JSON-LD, metadata, crawl logging, and hosted wiki/blog pages. Server-only. The front end reads JSON; MCP is for coding agents, not the browser.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"private": false,
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
19
|
-
"onboarding"
|
|
19
|
+
"onboarding",
|
|
20
|
+
"!dist/**/*.test.js",
|
|
21
|
+
"!dist/**/*.test.d.ts",
|
|
22
|
+
"!dist/**/*.test.js.map"
|
|
20
23
|
],
|
|
21
24
|
"exports": {
|
|
22
25
|
".": "./dist/index.js",
|
|
@@ -25,20 +28,27 @@
|
|
|
25
28
|
"./jsonld": "./dist/operator/jsonld.js",
|
|
26
29
|
"./metadata": "./dist/operator/metadata.js",
|
|
27
30
|
"./proxy": "./dist/operator/proxy.js",
|
|
28
|
-
"./
|
|
31
|
+
"./wiki": "./dist/operator/wiki.js",
|
|
32
|
+
"./blog": "./dist/operator/blog.js",
|
|
33
|
+
"./client": "./dist/client-public.js"
|
|
29
34
|
},
|
|
30
35
|
"scripts": {
|
|
31
36
|
"build": "tsc -p tsconfig.json",
|
|
32
37
|
"prepublishOnly": "npm run build",
|
|
33
38
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
34
|
-
"test": "node --test dist
|
|
39
|
+
"test": "npm run build && node --test dist/client.test.js dist/mcp.test.js"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"server-only": "^0.0.1"
|
|
35
43
|
},
|
|
36
44
|
"peerDependencies": {
|
|
37
45
|
"next": ">=15.0.0 <17.0.0",
|
|
38
46
|
"react": ">=18.2.0"
|
|
39
47
|
},
|
|
40
48
|
"peerDependenciesMeta": {
|
|
41
|
-
"react": {
|
|
49
|
+
"react": {
|
|
50
|
+
"optional": true
|
|
51
|
+
}
|
|
42
52
|
},
|
|
43
53
|
"devDependencies": {
|
|
44
54
|
"@types/node": "^22.0.0",
|
|
@@ -47,5 +57,14 @@
|
|
|
47
57
|
"react": "^19.0.0",
|
|
48
58
|
"typescript": "^5.6.0"
|
|
49
59
|
},
|
|
50
|
-
"keywords": [
|
|
60
|
+
"keywords": [
|
|
61
|
+
"ignite",
|
|
62
|
+
"nextjs",
|
|
63
|
+
"app-router",
|
|
64
|
+
"robots",
|
|
65
|
+
"sitemap",
|
|
66
|
+
"json-ld",
|
|
67
|
+
"metadata",
|
|
68
|
+
"ai-search"
|
|
69
|
+
]
|
|
51
70
|
}
|