@adkinn/astro-ai-readiness 0.0.7 → 0.0.8

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 CHANGED
@@ -1,14 +1,15 @@
1
1
  # @adkinn/astro-ai-readiness
2
2
 
3
- > AI Readiness toolkit for Astro — six JSON-LD helper components plus `dist/llms.txt`, `dist/llms-full.txt`, `dist/agents.md`, `dist/robots.txt`, and `dist/.well-known/mcp.json`.
3
+ > AI Readiness toolkit for Astro — seven JSON-LD helper components plus `dist/llms.txt`, `dist/llms-full.txt`, `dist/agents.md`, `dist/robots.txt`, and `dist/.well-known/mcp.json`.
4
4
 
5
- **Status:** v0.0.7seventh slice in prep. **Component sub-line complete (6 of 6); five of five v0.1 file outputs live.** Multi-output orchestration on the `astro:build:done` hook now covers the full v0.1 artifact set.
5
+ **Status:** v0.0.8first-class `Person` identity. Sites whose primary identity is an individual (personal brands, solo builders) can now lead with a `Person` instead of an `Organization`: `organization` is optional, and the `llms.txt` heading + WebSite publisher follow the `person` when set.
6
6
 
7
- ## What ships in v0.0.7
7
+ ## What ships in v0.0.8
8
8
 
9
- **Six JSON-LD components** (component sub-line complete):
10
- - `<OrganizationSchema />` — Organization block. Config-driven; place in your `BaseLayout` so it ships site-wide and the `#organization` `@id` reference resolves on every page.
11
- - `<WebSiteSchema />` — WebSite block. Config-driven; alongside `<OrganizationSchema />` in `BaseLayout`.
9
+ **Seven JSON-LD components**:
10
+ - `<OrganizationSchema />` — Organization block. Config-driven from `organization` (optional); place in your `BaseLayout` so it ships site-wide and the `#organization` `@id` reference resolves on every page. Renders nothing if `organization` is unset.
11
+ - `<PersonSchema />` — Person block. Config-driven from `person` (optional); for sites whose primary identity is an individual. Place in your `BaseLayout`; declares `#person`, and becomes the WebSite publisher when set. Renders nothing if `person` is unset.
12
+ - `<WebSiteSchema />` — WebSite block. Config-driven; alongside `<OrganizationSchema />` or `<PersonSchema />` in `BaseLayout`.
12
13
  - `<CollectionSchema name url description? />` — CollectionPage block. Props-driven; place on collection-index pages (`/articles/`, `/tags/[tag]/`, etc.).
13
14
  - `<BreadcrumbSchema items={[{ name, url }, ...]} />` — BreadcrumbList. Items-array prop; place on multi-level pages where the navigation hierarchy isn't already declared inline. Empty `items` skips emission.
14
15
  - `<FAQPageSchema items={[{ question, answer }, ...]} />` — FAQPage. Items-array prop; place on pages with FAQ data. Long-form answers escape `</script>` and U+2028 / U+2029 automatically. Empty `items` skips emission.
@@ -23,7 +24,7 @@
23
24
 
24
25
  **`@astrojs/sitemap` detection per D-8.** When you call `aiReadiness({...})` and `@astrojs/sitemap` isn't in your integrations list, the toolkit logs a build-time warning. Sitemap is an AI-Readiness baseline; when `robotsTxt` is enabled, the generated `robots.txt` includes a `Sitemap` line by default.
25
26
 
26
- All six components emit canonical Schema.org JSON-LD with cross-component `@id` references (`#organization`, `#website`) so search and AI consumers can resolve the entity graph without redeclaring shared fields.
27
+ All seven components emit canonical Schema.org JSON-LD with cross-component `@id` references (`#organization`, `#person`, `#website`) so search and AI consumers can resolve the entity graph without redeclaring shared fields.
27
28
 
28
29
  URL config fields (`site`, `organization.url`, `organization.logo`, `founder.sameAs`, `llmsTxt.*.url`) require `https://` (or `http://localhost` for dev).
29
30
 
@@ -31,7 +32,7 @@ Config validation errors are formatted with one issue per line — `path: messag
31
32
 
32
33
  ## On the roadmap (toward v0.1.0)
33
34
 
34
- - v0.0.8 — fixture Astro app validation against AATT / adamkinney.com install paths; refine robots presets from real traffic policy.
35
+ - v0.0.8 — fixture Astro app validation against adamkinney.com install paths; refine robots presets from real traffic policy.
35
36
  - v0.0.9 — content-collection assisted `llms-full.txt` generation.
36
37
  - v0.1.0 — polish, docs, release hardening; full install on adamkinney.com
37
38
 
@@ -45,7 +46,7 @@ npm install @adkinn/astro-ai-readiness
45
46
 
46
47
  ## Quick start
47
48
 
48
- Configure (v0.0.7 accepts `site`, `organization`, optional `webSite`, optional `llmsTxt`, optional `llmsFull`, optional `agentsMd`, optional `mcp`, and optional `robotsTxt` blocks — the Zod schema rejects unknown keys, and URL fields must use `https://` or `http://localhost`):
49
+ Configure (v0.0.8 accepts `site`, optional `person`, optional `organization`, optional `webSite`, optional `llmsTxt`, optional `llmsFull`, optional `agentsMd`, optional `mcp`, and optional `robotsTxt` blocks — provide at least one of `person`/`organization` as the site identity. The Zod schema rejects unknown keys, and URL fields must use `https://` or `http://localhost`):
49
50
 
50
51
  ```ts
51
52
  // astro.config.mjs
@@ -185,7 +186,22 @@ import { OrganizationSchema, WebSiteSchema } from '@adkinn/astro-ai-readiness/co
185
186
  </head>
186
187
  ```
187
188
 
188
- `<OrganizationSchema />` declares `@id: '<site>#organization'`; `<WebSiteSchema />` references it. Order matters in the head — Organization first.
189
+ `<OrganizationSchema />` declares `@id: '<site>#organization'`; `<WebSiteSchema />` references it. Order matters in the head — identity component first.
190
+
191
+ **Personal-brand sites** lead with a `Person` instead. Configure a `person` block (and omit `organization` if you don't need it), then:
192
+
193
+ ```astro
194
+ ---
195
+ // src/layouts/BaseLayout.astro — site-wide
196
+ import { PersonSchema, WebSiteSchema } from '@adkinn/astro-ai-readiness/components'
197
+ ---
198
+ <head>
199
+ <PersonSchema />
200
+ <WebSiteSchema />
201
+ </head>
202
+ ```
203
+
204
+ `<PersonSchema />` declares `@id: '<site>#person'`; when `person` is set, `<WebSiteSchema />` publisher and the `llms.txt` heading follow it.
189
205
 
190
206
  ```astro
191
207
  ---
@@ -273,8 +289,7 @@ The v0.1 line is content → artifacts: components and files. Build-time AI-read
273
289
 
274
290
  ## Shipped on
275
291
 
276
- - [aiallthethings.com](https://aiallthethings.com) — AATT, the toolkit's first reference implementation. Runs all six components on production plus three toolkit-emitted files: `dist/llms.txt` at <https://aiallthethings.com/llms.txt>, `dist/agents.md` at <https://aiallthethings.com/agents.md>, and `dist/.well-known/mcp.json` at <https://aiallthethings.com/.well-known/mcp.json>. Components: Organization + WebSite (site-wide via BaseLayout), CollectionPage (articles + framework + tag indexes), BreadcrumbList (`/about`), FAQPage (articles with FAQ frontmatter), TechArticle (every article-detail page).
277
- - [adamkinney.com](https://adamkinney.com) — Adam Kinney's site. Next SSR reference-implementation target once v0.1.0 publishes.
292
+ - [adamkinney.com](https://adamkinney.com) — the reference implementation. Runs `OrganizationSchema` + `WebSiteSchema` site-wide and emits `dist/llms.txt` at <https://adamkinney.com/llms.txt> and `dist/agents.md` at <https://adamkinney.com/agents.md>.
278
293
 
279
294
  ## Contributing
280
295
 
@@ -4,9 +4,10 @@ import {
4
4
 
5
5
  // src/outputs/llms-full.ts
6
6
  function composeLlmsFullTxt(config) {
7
- const { llmsFull, llmsTxt, organization } = config;
7
+ const { llmsFull, llmsTxt } = config;
8
+ const name = llmsFull.title ?? config.person?.name ?? config.organization?.name ?? config.site;
8
9
  const lines = [];
9
- lines.push(`# ${llmsFull.title ?? organization.name}`);
10
+ lines.push(`# ${name}`);
10
11
  lines.push("");
11
12
  const summary = llmsFull.summary ?? llmsTxt?.summary;
12
13
  if (summary) {
@@ -4,9 +4,10 @@ import {
4
4
 
5
5
  // src/outputs/agents-md.ts
6
6
  function composeAgentsMd(config) {
7
- const { agentsMd, organization } = config;
7
+ const { agentsMd } = config;
8
+ const name = config.person?.name ?? config.organization?.name ?? config.webSite?.name ?? config.site;
8
9
  const lines = [];
9
- lines.push(`# ${organization.name}`);
10
+ lines.push(`# ${name}`);
10
11
  lines.push("");
11
12
  lines.push(`> ${agentsMd.description}`);
12
13
  lines.push("");
@@ -19,6 +19,15 @@ var organizationSchema = z.object({
19
19
  knowsAbout: z.array(z.string()).optional(),
20
20
  areaServed: z.string().optional()
21
21
  }).strict();
22
+ var personSchema = z.object({
23
+ name: z.string().min(1),
24
+ url: httpsUrl.optional(),
25
+ jobTitle: z.string().optional(),
26
+ description: z.string().optional(),
27
+ image: httpsUrl.optional(),
28
+ sameAs: z.array(httpsUrl).optional(),
29
+ knowsAbout: z.array(z.string()).optional()
30
+ }).strict();
22
31
  var webSiteSchema = z.object({
23
32
  name: z.string().optional(),
24
33
  description: z.string().optional()
@@ -127,14 +136,18 @@ var robotsTxtSchema = z.object({
127
136
  }).strict();
128
137
  var aiReadinessConfigSchema = z.object({
129
138
  site: httpsUrl,
130
- organization: organizationSchema,
139
+ organization: organizationSchema.optional(),
140
+ person: personSchema.optional(),
131
141
  webSite: webSiteSchema.optional(),
132
142
  llmsTxt: llmsTxtSchema.optional(),
133
143
  llmsFull: llmsFullSchema.optional(),
134
144
  agentsMd: agentsMdSchema.optional(),
135
145
  mcp: mcpSchema.optional(),
136
146
  robotsTxt: robotsTxtSchema.optional()
137
- }).strict();
147
+ }).strict().refine(
148
+ (value) => Boolean(value.person || value.organization),
149
+ { message: "Provide `person` and/or `organization` \u2014 the site needs at least one identity for the llms.txt heading and JSON-LD." }
150
+ );
138
151
 
139
152
  export {
140
153
  aiReadinessConfigSchema
@@ -4,9 +4,10 @@ import {
4
4
 
5
5
  // src/outputs/llms-txt.ts
6
6
  function composeLlmsTxt(config) {
7
- const { llmsTxt, organization } = config;
7
+ const { llmsTxt } = config;
8
+ const name = config.person?.name ?? config.organization?.name ?? config.webSite?.name ?? config.site;
8
9
  const lines = [];
9
- lines.push(`# ${organization.name}`);
10
+ lines.push(`# ${name}`);
10
11
  lines.push("");
11
12
  lines.push(`> ${llmsTxt.summary}`);
12
13
  lines.push("");
@@ -6,28 +6,32 @@ const org = config.organization
6
6
 
7
7
  type SchemaJson = Record<string, unknown>
8
8
 
9
- const orgLd: SchemaJson = {
10
- '@context': 'https://schema.org',
11
- '@type': 'Organization',
12
- '@id': `${config.site}#organization`,
13
- name: org.name,
14
- }
9
+ let orgLd: SchemaJson | null = null
10
+
11
+ if (org) {
12
+ orgLd = {
13
+ '@context': 'https://schema.org',
14
+ '@type': 'Organization',
15
+ '@id': `${config.site}#organization`,
16
+ name: org.name,
17
+ }
15
18
 
16
- if (org.url) orgLd.url = org.url
17
- if (org.logo) orgLd.logo = org.logo
18
- if (org.foundingDate) orgLd.foundingDate = org.foundingDate
19
- if (org.knowsAbout && org.knowsAbout.length > 0) orgLd.knowsAbout = org.knowsAbout
20
- if (org.areaServed) orgLd.areaServed = org.areaServed
19
+ if (org.url) orgLd.url = org.url
20
+ if (org.logo) orgLd.logo = org.logo
21
+ if (org.foundingDate) orgLd.foundingDate = org.foundingDate
22
+ if (org.knowsAbout && org.knowsAbout.length > 0) orgLd.knowsAbout = org.knowsAbout
23
+ if (org.areaServed) orgLd.areaServed = org.areaServed
21
24
 
22
- if (org.founder) {
23
- const founder: SchemaJson = {
24
- '@type': 'Person',
25
- name: org.founder.name,
25
+ if (org.founder) {
26
+ const founder: SchemaJson = {
27
+ '@type': 'Person',
28
+ name: org.founder.name,
29
+ }
30
+ if (org.founder.jobTitle) founder.jobTitle = org.founder.jobTitle
31
+ if (org.founder.description) founder.description = org.founder.description
32
+ if (org.founder.sameAs && org.founder.sameAs.length > 0) founder.sameAs = org.founder.sameAs
33
+ orgLd.founder = founder
26
34
  }
27
- if (org.founder.jobTitle) founder.jobTitle = org.founder.jobTitle
28
- if (org.founder.description) founder.description = org.founder.description
29
- if (org.founder.sameAs && org.founder.sameAs.length > 0) founder.sameAs = org.founder.sameAs
30
- orgLd.founder = founder
31
35
  }
32
36
  ---
33
- <script type="application/ld+json" is:inline set:html={jsonLd(orgLd)}></script>
37
+ {orgLd && <script type="application/ld+json" is:inline set:html={jsonLd(orgLd)}></script>}
@@ -0,0 +1,26 @@
1
+ ---
2
+ import { config } from 'virtual:ai-readiness-config'
3
+ import { jsonLd } from '../utils/json-ld'
4
+
5
+ const person = config.person
6
+
7
+ type SchemaJson = Record<string, unknown>
8
+
9
+ let personLd: SchemaJson | null = null
10
+
11
+ if (person) {
12
+ personLd = {
13
+ '@context': 'https://schema.org',
14
+ '@type': 'Person',
15
+ '@id': `${config.site}#person`,
16
+ name: person.name,
17
+ }
18
+ if (person.url) personLd.url = person.url
19
+ if (person.jobTitle) personLd.jobTitle = person.jobTitle
20
+ if (person.description) personLd.description = person.description
21
+ if (person.image) personLd.image = person.image
22
+ if (person.sameAs && person.sameAs.length > 0) personLd.sameAs = person.sameAs
23
+ if (person.knowsAbout && person.knowsAbout.length > 0) personLd.knowsAbout = person.knowsAbout
24
+ }
25
+ ---
26
+ {personLd && <script type="application/ld+json" is:inline set:html={jsonLd(personLd)}></script>}
@@ -2,13 +2,18 @@
2
2
  import { config } from 'virtual:ai-readiness-config'
3
3
  import { jsonLd } from '../utils/json-ld'
4
4
 
5
+ // A person-first site publishes as the person; otherwise the organization.
6
+ const publisherId = config.person
7
+ ? `${config.site}#person`
8
+ : `${config.site}#organization`
9
+
5
10
  const ws: Record<string, unknown> = {
6
11
  '@context': 'https://schema.org',
7
12
  '@type': 'WebSite',
8
13
  '@id': `${config.site}#website`,
9
- name: config.webSite?.name ?? config.organization.name,
14
+ name: config.webSite?.name ?? config.person?.name ?? config.organization?.name ?? config.site,
10
15
  url: config.site,
11
- publisher: { '@id': `${config.site}#organization` },
16
+ publisher: { '@id': publisherId },
12
17
  }
13
18
 
14
19
  if (config.webSite?.description) ws.description = config.webSite.description
@@ -1,4 +1,5 @@
1
1
  export { default as OrganizationSchema } from './OrganizationSchema.astro';
2
+ export { default as PersonSchema } from './PersonSchema.astro';
2
3
  export { default as WebSiteSchema } from './WebSiteSchema.astro';
3
4
  export { default as CollectionSchema } from './CollectionSchema.astro';
4
5
  export { default as BreadcrumbSchema } from './BreadcrumbSchema.astro';
@@ -1,15 +1,17 @@
1
1
  // src/components/index.ts
2
2
  import { default as default2 } from "./OrganizationSchema.astro";
3
- import { default as default3 } from "./WebSiteSchema.astro";
4
- import { default as default4 } from "./CollectionSchema.astro";
5
- import { default as default5 } from "./BreadcrumbSchema.astro";
6
- import { default as default6 } from "./FAQPageSchema.astro";
7
- import { default as default7 } from "./TechArticleSchema.astro";
3
+ import { default as default3 } from "./PersonSchema.astro";
4
+ import { default as default4 } from "./WebSiteSchema.astro";
5
+ import { default as default5 } from "./CollectionSchema.astro";
6
+ import { default as default6 } from "./BreadcrumbSchema.astro";
7
+ import { default as default7 } from "./FAQPageSchema.astro";
8
+ import { default as default8 } from "./TechArticleSchema.astro";
8
9
  export {
9
- default5 as BreadcrumbSchema,
10
- default4 as CollectionSchema,
11
- default6 as FAQPageSchema,
10
+ default6 as BreadcrumbSchema,
11
+ default5 as CollectionSchema,
12
+ default7 as FAQPageSchema,
12
13
  default2 as OrganizationSchema,
13
- default7 as TechArticleSchema,
14
- default3 as WebSiteSchema
14
+ default3 as PersonSchema,
15
+ default8 as TechArticleSchema,
16
+ default4 as WebSiteSchema
15
17
  };
@@ -1,4 +1,5 @@
1
1
  import './OrganizationSchema.astro';
2
+ import './PersonSchema.astro';
2
3
  import './WebSiteSchema.astro';
3
4
  import './CollectionSchema.astro';
4
5
  import './BreadcrumbSchema.astro';
package/dist/config.d.ts CHANGED
@@ -82,6 +82,31 @@ declare const organizationSchema: z.ZodObject<{
82
82
  knowsAbout?: string[] | undefined;
83
83
  areaServed?: string | undefined;
84
84
  }>;
85
+ declare const personSchema: z.ZodObject<{
86
+ name: z.ZodString;
87
+ url: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
88
+ jobTitle: z.ZodOptional<z.ZodString>;
89
+ description: z.ZodOptional<z.ZodString>;
90
+ image: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
91
+ sameAs: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">>;
92
+ knowsAbout: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
93
+ }, "strict", z.ZodTypeAny, {
94
+ name: string;
95
+ url?: string | undefined;
96
+ jobTitle?: string | undefined;
97
+ description?: string | undefined;
98
+ sameAs?: string[] | undefined;
99
+ knowsAbout?: string[] | undefined;
100
+ image?: string | undefined;
101
+ }, {
102
+ name: string;
103
+ url?: string | undefined;
104
+ jobTitle?: string | undefined;
105
+ description?: string | undefined;
106
+ sameAs?: string[] | undefined;
107
+ knowsAbout?: string[] | undefined;
108
+ image?: string | undefined;
109
+ }>;
85
110
  declare const webSiteSchema: z.ZodObject<{
86
111
  name: z.ZodOptional<z.ZodString>;
87
112
  description: z.ZodOptional<z.ZodString>;
@@ -181,32 +206,32 @@ declare const llmsFullSchema: z.ZodEffects<z.ZodObject<{
181
206
  content: string;
182
207
  }>, "many">>;
183
208
  }, "strict", z.ZodTypeAny, {
184
- title?: string | undefined;
185
209
  summary?: string | undefined;
210
+ title?: string | undefined;
186
211
  sections?: {
187
212
  title: string;
188
213
  content: string;
189
214
  }[] | undefined;
190
215
  content?: string | undefined;
191
216
  }, {
192
- title?: string | undefined;
193
217
  summary?: string | undefined;
218
+ title?: string | undefined;
194
219
  sections?: {
195
220
  title: string;
196
221
  content: string;
197
222
  }[] | undefined;
198
223
  content?: string | undefined;
199
224
  }>, {
200
- title?: string | undefined;
201
225
  summary?: string | undefined;
226
+ title?: string | undefined;
202
227
  sections?: {
203
228
  title: string;
204
229
  content: string;
205
230
  }[] | undefined;
206
231
  content?: string | undefined;
207
232
  }, {
208
- title?: string | undefined;
209
233
  summary?: string | undefined;
234
+ title?: string | undefined;
210
235
  sections?: {
211
236
  title: string;
212
237
  content: string;
@@ -268,18 +293,18 @@ declare const mcpSchema: z.ZodObject<{
268
293
  }>, "many">;
269
294
  }, "strict", z.ZodTypeAny, {
270
295
  name: string;
296
+ url: string;
271
297
  description: string;
272
298
  status: "active";
273
- url: string;
274
299
  tools: {
275
300
  name: string;
276
301
  description: string;
277
302
  }[];
278
303
  }, {
279
304
  name: string;
305
+ url: string;
280
306
  description: string;
281
307
  status: "active";
282
- url: string;
283
308
  tools: {
284
309
  name: string;
285
310
  description: string;
@@ -318,9 +343,9 @@ declare const mcpSchema: z.ZodObject<{
318
343
  }, "strict", z.ZodTypeAny, {
319
344
  servers: ({
320
345
  name: string;
346
+ url: string;
321
347
  description: string;
322
348
  status: "active";
323
- url: string;
324
349
  tools: {
325
350
  name: string;
326
351
  description: string;
@@ -338,9 +363,9 @@ declare const mcpSchema: z.ZodObject<{
338
363
  }, {
339
364
  servers: ({
340
365
  name: string;
366
+ url: string;
341
367
  description: string;
342
368
  status: "active";
343
- url: string;
344
369
  tools: {
345
370
  name: string;
346
371
  description: string;
@@ -437,9 +462,9 @@ declare const robotsTxtSchema: z.ZodObject<{
437
462
  }[] | undefined;
438
463
  additionalLines?: string[] | undefined;
439
464
  }>;
440
- declare const aiReadinessConfigSchema: z.ZodObject<{
465
+ declare const aiReadinessConfigSchema: z.ZodEffects<z.ZodObject<{
441
466
  site: z.ZodEffects<z.ZodString, string, string>;
442
- organization: z.ZodObject<{
467
+ organization: z.ZodOptional<z.ZodObject<{
443
468
  name: z.ZodString;
444
469
  url: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
445
470
  logo: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
@@ -488,7 +513,32 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
488
513
  foundingDate?: string | undefined;
489
514
  knowsAbout?: string[] | undefined;
490
515
  areaServed?: string | undefined;
491
- }>;
516
+ }>>;
517
+ person: z.ZodOptional<z.ZodObject<{
518
+ name: z.ZodString;
519
+ url: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
520
+ jobTitle: z.ZodOptional<z.ZodString>;
521
+ description: z.ZodOptional<z.ZodString>;
522
+ image: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
523
+ sameAs: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">>;
524
+ knowsAbout: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
525
+ }, "strict", z.ZodTypeAny, {
526
+ name: string;
527
+ url?: string | undefined;
528
+ jobTitle?: string | undefined;
529
+ description?: string | undefined;
530
+ sameAs?: string[] | undefined;
531
+ knowsAbout?: string[] | undefined;
532
+ image?: string | undefined;
533
+ }, {
534
+ name: string;
535
+ url?: string | undefined;
536
+ jobTitle?: string | undefined;
537
+ description?: string | undefined;
538
+ sameAs?: string[] | undefined;
539
+ knowsAbout?: string[] | undefined;
540
+ image?: string | undefined;
541
+ }>>;
492
542
  webSite: z.ZodOptional<z.ZodObject<{
493
543
  name: z.ZodOptional<z.ZodString>;
494
544
  description: z.ZodOptional<z.ZodString>;
@@ -588,32 +638,32 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
588
638
  content: string;
589
639
  }>, "many">>;
590
640
  }, "strict", z.ZodTypeAny, {
591
- title?: string | undefined;
592
641
  summary?: string | undefined;
642
+ title?: string | undefined;
593
643
  sections?: {
594
644
  title: string;
595
645
  content: string;
596
646
  }[] | undefined;
597
647
  content?: string | undefined;
598
648
  }, {
599
- title?: string | undefined;
600
649
  summary?: string | undefined;
650
+ title?: string | undefined;
601
651
  sections?: {
602
652
  title: string;
603
653
  content: string;
604
654
  }[] | undefined;
605
655
  content?: string | undefined;
606
656
  }>, {
607
- title?: string | undefined;
608
657
  summary?: string | undefined;
658
+ title?: string | undefined;
609
659
  sections?: {
610
660
  title: string;
611
661
  content: string;
612
662
  }[] | undefined;
613
663
  content?: string | undefined;
614
664
  }, {
615
- title?: string | undefined;
616
665
  summary?: string | undefined;
666
+ title?: string | undefined;
617
667
  sections?: {
618
668
  title: string;
619
669
  content: string;
@@ -675,18 +725,18 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
675
725
  }>, "many">;
676
726
  }, "strict", z.ZodTypeAny, {
677
727
  name: string;
728
+ url: string;
678
729
  description: string;
679
730
  status: "active";
680
- url: string;
681
731
  tools: {
682
732
  name: string;
683
733
  description: string;
684
734
  }[];
685
735
  }, {
686
736
  name: string;
737
+ url: string;
687
738
  description: string;
688
739
  status: "active";
689
- url: string;
690
740
  tools: {
691
741
  name: string;
692
742
  description: string;
@@ -725,9 +775,9 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
725
775
  }, "strict", z.ZodTypeAny, {
726
776
  servers: ({
727
777
  name: string;
778
+ url: string;
728
779
  description: string;
729
780
  status: "active";
730
- url: string;
731
781
  tools: {
732
782
  name: string;
733
783
  description: string;
@@ -745,9 +795,9 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
745
795
  }, {
746
796
  servers: ({
747
797
  name: string;
798
+ url: string;
748
799
  description: string;
749
800
  status: "active";
750
- url: string;
751
801
  tools: {
752
802
  name: string;
753
803
  description: string;
@@ -846,7 +896,7 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
846
896
  }>>;
847
897
  }, "strict", z.ZodTypeAny, {
848
898
  site: string;
849
- organization: {
899
+ organization?: {
850
900
  name: string;
851
901
  url?: string | undefined;
852
902
  logo?: string | undefined;
@@ -859,7 +909,16 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
859
909
  foundingDate?: string | undefined;
860
910
  knowsAbout?: string[] | undefined;
861
911
  areaServed?: string | undefined;
862
- };
912
+ } | undefined;
913
+ person?: {
914
+ name: string;
915
+ url?: string | undefined;
916
+ jobTitle?: string | undefined;
917
+ description?: string | undefined;
918
+ sameAs?: string[] | undefined;
919
+ knowsAbout?: string[] | undefined;
920
+ image?: string | undefined;
921
+ } | undefined;
863
922
  webSite?: {
864
923
  name?: string | undefined;
865
924
  description?: string | undefined;
@@ -881,8 +940,8 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
881
940
  } | undefined;
882
941
  } | undefined;
883
942
  llmsFull?: {
884
- title?: string | undefined;
885
943
  summary?: string | undefined;
944
+ title?: string | undefined;
886
945
  sections?: {
887
946
  title: string;
888
947
  content: string;
@@ -902,9 +961,9 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
902
961
  mcp?: {
903
962
  servers: ({
904
963
  name: string;
964
+ url: string;
905
965
  description: string;
906
966
  status: "active";
907
- url: string;
908
967
  tools: {
909
968
  name: string;
910
969
  description: string;
@@ -939,7 +998,7 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
939
998
  } | undefined;
940
999
  }, {
941
1000
  site: string;
942
- organization: {
1001
+ organization?: {
943
1002
  name: string;
944
1003
  url?: string | undefined;
945
1004
  logo?: string | undefined;
@@ -952,7 +1011,16 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
952
1011
  foundingDate?: string | undefined;
953
1012
  knowsAbout?: string[] | undefined;
954
1013
  areaServed?: string | undefined;
955
- };
1014
+ } | undefined;
1015
+ person?: {
1016
+ name: string;
1017
+ url?: string | undefined;
1018
+ jobTitle?: string | undefined;
1019
+ description?: string | undefined;
1020
+ sameAs?: string[] | undefined;
1021
+ knowsAbout?: string[] | undefined;
1022
+ image?: string | undefined;
1023
+ } | undefined;
956
1024
  webSite?: {
957
1025
  name?: string | undefined;
958
1026
  description?: string | undefined;
@@ -974,8 +1042,110 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
974
1042
  } | undefined;
975
1043
  } | undefined;
976
1044
  llmsFull?: {
1045
+ summary?: string | undefined;
977
1046
  title?: string | undefined;
1047
+ sections?: {
1048
+ title: string;
1049
+ content: string;
1050
+ }[] | undefined;
1051
+ content?: string | undefined;
1052
+ } | undefined;
1053
+ agentsMd?: {
1054
+ description: string;
1055
+ links?: {
1056
+ url: string;
1057
+ title: string;
1058
+ description?: string | undefined;
1059
+ }[] | undefined;
1060
+ audience?: string | undefined;
1061
+ contact?: string | undefined;
1062
+ } | undefined;
1063
+ mcp?: {
1064
+ servers: ({
1065
+ name: string;
1066
+ url: string;
1067
+ description: string;
1068
+ status: "active";
1069
+ tools: {
1070
+ name: string;
1071
+ description: string;
1072
+ }[];
1073
+ } | {
1074
+ name: string;
1075
+ description: string;
1076
+ status: "planned";
1077
+ planned_tools: {
1078
+ name: string;
1079
+ description: string;
1080
+ }[];
1081
+ })[];
1082
+ version?: string | undefined;
1083
+ } | undefined;
1084
+ robotsTxt?: {
1085
+ policy?: "search-visible" | "training-opt-out" | "private" | undefined;
1086
+ sitemap?: string | false | undefined;
1087
+ contentSignals?: {
1088
+ search?: "yes" | "no" | undefined;
1089
+ aiTrain?: "yes" | "no" | undefined;
1090
+ aiInput?: "yes" | "no" | undefined;
1091
+ } | undefined;
1092
+ rules?: {
1093
+ userAgent: string | string[];
1094
+ allow?: string[] | undefined;
1095
+ disallow?: string[] | undefined;
1096
+ crawlDelay?: number | undefined;
1097
+ comment?: string | undefined;
1098
+ }[] | undefined;
1099
+ additionalLines?: string[] | undefined;
1100
+ } | undefined;
1101
+ }>, {
1102
+ site: string;
1103
+ organization?: {
1104
+ name: string;
1105
+ url?: string | undefined;
1106
+ logo?: string | undefined;
1107
+ founder?: {
1108
+ name: string;
1109
+ jobTitle?: string | undefined;
1110
+ description?: string | undefined;
1111
+ sameAs?: string[] | undefined;
1112
+ } | undefined;
1113
+ foundingDate?: string | undefined;
1114
+ knowsAbout?: string[] | undefined;
1115
+ areaServed?: string | undefined;
1116
+ } | undefined;
1117
+ person?: {
1118
+ name: string;
1119
+ url?: string | undefined;
1120
+ jobTitle?: string | undefined;
1121
+ description?: string | undefined;
1122
+ sameAs?: string[] | undefined;
1123
+ knowsAbout?: string[] | undefined;
1124
+ image?: string | undefined;
1125
+ } | undefined;
1126
+ webSite?: {
1127
+ name?: string | undefined;
1128
+ description?: string | undefined;
1129
+ } | undefined;
1130
+ llmsTxt?: {
1131
+ summary: string;
1132
+ body?: string | undefined;
1133
+ sections?: {
1134
+ title: string;
1135
+ links: {
1136
+ url: string;
1137
+ title: string;
1138
+ description?: string | undefined;
1139
+ }[];
1140
+ }[] | undefined;
1141
+ deferTo?: {
1142
+ url: string;
1143
+ title: string;
1144
+ } | undefined;
1145
+ } | undefined;
1146
+ llmsFull?: {
978
1147
  summary?: string | undefined;
1148
+ title?: string | undefined;
979
1149
  sections?: {
980
1150
  title: string;
981
1151
  content: string;
@@ -995,9 +1165,111 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
995
1165
  mcp?: {
996
1166
  servers: ({
997
1167
  name: string;
1168
+ url: string;
998
1169
  description: string;
999
1170
  status: "active";
1171
+ tools: {
1172
+ name: string;
1173
+ description: string;
1174
+ }[];
1175
+ } | {
1176
+ name: string;
1177
+ description: string;
1178
+ status: "planned";
1179
+ planned_tools: {
1180
+ name: string;
1181
+ description: string;
1182
+ }[];
1183
+ })[];
1184
+ version?: string | undefined;
1185
+ } | undefined;
1186
+ robotsTxt?: {
1187
+ policy?: "search-visible" | "training-opt-out" | "private" | undefined;
1188
+ sitemap?: string | false | undefined;
1189
+ contentSignals?: {
1190
+ search?: "yes" | "no" | undefined;
1191
+ aiTrain?: "yes" | "no" | undefined;
1192
+ aiInput?: "yes" | "no" | undefined;
1193
+ } | undefined;
1194
+ rules?: {
1195
+ userAgent: string | string[];
1196
+ allow?: string[] | undefined;
1197
+ disallow?: string[] | undefined;
1198
+ crawlDelay?: number | undefined;
1199
+ comment?: string | undefined;
1200
+ }[] | undefined;
1201
+ additionalLines?: string[] | undefined;
1202
+ } | undefined;
1203
+ }, {
1204
+ site: string;
1205
+ organization?: {
1206
+ name: string;
1207
+ url?: string | undefined;
1208
+ logo?: string | undefined;
1209
+ founder?: {
1210
+ name: string;
1211
+ jobTitle?: string | undefined;
1212
+ description?: string | undefined;
1213
+ sameAs?: string[] | undefined;
1214
+ } | undefined;
1215
+ foundingDate?: string | undefined;
1216
+ knowsAbout?: string[] | undefined;
1217
+ areaServed?: string | undefined;
1218
+ } | undefined;
1219
+ person?: {
1220
+ name: string;
1221
+ url?: string | undefined;
1222
+ jobTitle?: string | undefined;
1223
+ description?: string | undefined;
1224
+ sameAs?: string[] | undefined;
1225
+ knowsAbout?: string[] | undefined;
1226
+ image?: string | undefined;
1227
+ } | undefined;
1228
+ webSite?: {
1229
+ name?: string | undefined;
1230
+ description?: string | undefined;
1231
+ } | undefined;
1232
+ llmsTxt?: {
1233
+ summary: string;
1234
+ body?: string | undefined;
1235
+ sections?: {
1236
+ title: string;
1237
+ links: {
1238
+ url: string;
1239
+ title: string;
1240
+ description?: string | undefined;
1241
+ }[];
1242
+ }[] | undefined;
1243
+ deferTo?: {
1244
+ url: string;
1245
+ title: string;
1246
+ } | undefined;
1247
+ } | undefined;
1248
+ llmsFull?: {
1249
+ summary?: string | undefined;
1250
+ title?: string | undefined;
1251
+ sections?: {
1252
+ title: string;
1253
+ content: string;
1254
+ }[] | undefined;
1255
+ content?: string | undefined;
1256
+ } | undefined;
1257
+ agentsMd?: {
1258
+ description: string;
1259
+ links?: {
1260
+ url: string;
1261
+ title: string;
1262
+ description?: string | undefined;
1263
+ }[] | undefined;
1264
+ audience?: string | undefined;
1265
+ contact?: string | undefined;
1266
+ } | undefined;
1267
+ mcp?: {
1268
+ servers: ({
1269
+ name: string;
1000
1270
  url: string;
1271
+ description: string;
1272
+ status: "active";
1001
1273
  tools: {
1002
1274
  name: string;
1003
1275
  description: string;
@@ -1033,6 +1305,7 @@ declare const aiReadinessConfigSchema: z.ZodObject<{
1033
1305
  }>;
1034
1306
  type AiReadinessConfig = z.infer<typeof aiReadinessConfigSchema>;
1035
1307
  type OrganizationConfig = z.infer<typeof organizationSchema>;
1308
+ type PersonConfig = z.infer<typeof personSchema>;
1036
1309
  type FounderConfig = z.infer<typeof founderSchema>;
1037
1310
  type WebSiteConfig = z.infer<typeof webSiteSchema>;
1038
1311
  type LlmsTxtConfig = z.infer<typeof llmsTxtSchema>;
@@ -1041,4 +1314,4 @@ type AgentsMdConfig = z.infer<typeof agentsMdSchema>;
1041
1314
  type McpConfig = z.infer<typeof mcpSchema>;
1042
1315
  type RobotsTxtConfig = z.infer<typeof robotsTxtSchema>;
1043
1316
 
1044
- export { type AgentsMdConfig, type AiReadinessConfig, type FounderConfig, type LlmsFullConfig, type LlmsTxtConfig, type McpConfig, type OrganizationConfig, type RobotsTxtConfig, type WebSiteConfig, aiReadinessConfigSchema };
1317
+ export { type AgentsMdConfig, type AiReadinessConfig, type FounderConfig, type LlmsFullConfig, type LlmsTxtConfig, type McpConfig, type OrganizationConfig, type PersonConfig, type RobotsTxtConfig, type WebSiteConfig, aiReadinessConfigSchema };
package/dist/config.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  aiReadinessConfigSchema
3
- } from "./chunk-CO2DB4IE.js";
3
+ } from "./chunk-PAMQNTFZ.js";
4
4
  export {
5
5
  aiReadinessConfigSchema
6
6
  };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AstroIntegration } from 'astro';
2
2
  import { AiReadinessConfig } from './config.js';
3
- export { AgentsMdConfig, FounderConfig, LlmsFullConfig, LlmsTxtConfig, McpConfig, OrganizationConfig, RobotsTxtConfig, WebSiteConfig } from './config.js';
3
+ export { AgentsMdConfig, FounderConfig, LlmsFullConfig, LlmsTxtConfig, McpConfig, OrganizationConfig, PersonConfig, RobotsTxtConfig, WebSiteConfig } from './config.js';
4
4
  import 'zod';
5
5
 
6
6
  declare function aiReadiness(options: AiReadinessConfig): AstroIntegration;
package/dist/index.js CHANGED
@@ -6,16 +6,16 @@ import {
6
6
  } from "./chunk-36CGBNB5.js";
7
7
  import {
8
8
  aiReadinessConfigSchema
9
- } from "./chunk-CO2DB4IE.js";
9
+ } from "./chunk-PAMQNTFZ.js";
10
10
  import {
11
11
  writeLlmsTxt
12
- } from "./chunk-WP6D4L7O.js";
12
+ } from "./chunk-WYKIPW5J.js";
13
13
  import {
14
14
  writeLlmsFullTxt
15
- } from "./chunk-THSVWYUX.js";
15
+ } from "./chunk-4VPGX5IP.js";
16
16
  import {
17
17
  writeAgentsMd
18
- } from "./chunk-CADNETPK.js";
18
+ } from "./chunk-EWNGLZBL.js";
19
19
  import "./chunk-V22PCH7G.js";
20
20
 
21
21
  // src/index.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  composeAgentsMd,
3
3
  writeAgentsMd
4
- } from "../chunk-CADNETPK.js";
4
+ } from "../chunk-EWNGLZBL.js";
5
5
  import "../chunk-V22PCH7G.js";
6
6
  export {
7
7
  composeAgentsMd,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  composeLlmsFullTxt,
3
3
  writeLlmsFullTxt
4
- } from "../chunk-THSVWYUX.js";
4
+ } from "../chunk-4VPGX5IP.js";
5
5
  import "../chunk-V22PCH7G.js";
6
6
  export {
7
7
  composeLlmsFullTxt,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  composeLlmsTxt,
3
3
  writeLlmsTxt
4
- } from "../chunk-WP6D4L7O.js";
4
+ } from "../chunk-WYKIPW5J.js";
5
5
  import "../chunk-V22PCH7G.js";
6
6
  export {
7
7
  composeLlmsTxt,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adkinn/astro-ai-readiness",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "AI Readiness toolkit for Astro — six JSON-LD components plus llms.txt, llms-full.txt, agents.md, robots.txt, and .well-known/mcp.json outputs.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",