@aglyn/plugins-ai 1.0.0-beta.285 → 1.0.0-beta.288

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.
Files changed (228) hide show
  1. package/package.json +17 -17
  2. package/src/lib/assets/site-styles/nonprofit.webp +0 -0
  3. package/src/lib/assets/site-styles/professional.webp +0 -0
  4. package/src/lib/assets/site-styles/store.webp +0 -0
  5. package/src/lib/assets/site-styles/trades.webp +0 -0
  6. package/src/lib/components/ai-theme-proposal-card.component.js +12 -3
  7. package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -1
  8. package/src/lib/declarations.js +5 -2
  9. package/src/lib/declarations.js.map +1 -1
  10. package/src/lib/declarations.server.js +12 -0
  11. package/src/lib/declarations.server.js.map +1 -1
  12. package/src/lib/jobs/ai-build-capabilities.d.ts +3 -1
  13. package/src/lib/jobs/ai-build-capabilities.js +27 -2
  14. package/src/lib/jobs/ai-build-capabilities.js.map +1 -1
  15. package/src/lib/jobs/ai-business-profile-prefill.js +6 -3
  16. package/src/lib/jobs/ai-business-profile-prefill.js.map +1 -1
  17. package/src/lib/jobs/ai-image-reads.d.ts +59 -0
  18. package/src/lib/jobs/ai-image-reads.js +138 -0
  19. package/src/lib/jobs/ai-image-reads.js.map +1 -0
  20. package/src/lib/jobs/ai-job-build-step.d.ts +29 -0
  21. package/src/lib/jobs/ai-job-build-step.js +83 -12
  22. package/src/lib/jobs/ai-job-build-step.js.map +1 -1
  23. package/src/lib/jobs/ai-job-duplicate-step.d.ts +2 -1
  24. package/src/lib/jobs/ai-job-duplicate-step.js +6 -6
  25. package/src/lib/jobs/ai-job-duplicate-step.js.map +1 -1
  26. package/src/lib/jobs/ai-job-import-step.d.ts +4 -2
  27. package/src/lib/jobs/ai-job-import-step.js +15 -11
  28. package/src/lib/jobs/ai-job-import-step.js.map +1 -1
  29. package/src/lib/jobs/ai-job-insight-step.d.ts +10 -0
  30. package/src/lib/jobs/ai-job-insight-step.js +23 -5
  31. package/src/lib/jobs/ai-job-insight-step.js.map +1 -1
  32. package/src/lib/jobs/ai-job-layout-language.js +2 -1
  33. package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
  34. package/src/lib/jobs/ai-job-media-step.d.ts +2 -1
  35. package/src/lib/jobs/ai-job-media-step.js +6 -8
  36. package/src/lib/jobs/ai-job-media-step.js.map +1 -1
  37. package/src/lib/jobs/ai-job-navigation-step.d.ts +2 -1
  38. package/src/lib/jobs/ai-job-navigation-step.js +7 -9
  39. package/src/lib/jobs/ai-job-navigation-step.js.map +1 -1
  40. package/src/lib/jobs/ai-job-page-language.js +7 -1
  41. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  42. package/src/lib/jobs/ai-job-page-sections.js +16 -3
  43. package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
  44. package/src/lib/jobs/ai-job-page-step.js +9 -1
  45. package/src/lib/jobs/ai-job-page-step.js.map +1 -1
  46. package/src/lib/jobs/ai-job-plan-step.d.ts +30 -8
  47. package/src/lib/jobs/ai-job-plan-step.js +78 -13
  48. package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
  49. package/src/lib/jobs/ai-job-privacy-step.d.ts +4 -2
  50. package/src/lib/jobs/ai-job-privacy-step.js +14 -15
  51. package/src/lib/jobs/ai-job-privacy-step.js.map +1 -1
  52. package/src/lib/jobs/ai-job-products-step.js +5 -3
  53. package/src/lib/jobs/ai-job-products-step.js.map +1 -1
  54. package/src/lib/jobs/ai-job-settings-step.d.ts +2 -1
  55. package/src/lib/jobs/ai-job-settings-step.js +7 -8
  56. package/src/lib/jobs/ai-job-settings-step.js.map +1 -1
  57. package/src/lib/jobs/ai-job-site-content.d.ts +34 -1
  58. package/src/lib/jobs/ai-job-site-content.js +67 -8
  59. package/src/lib/jobs/ai-job-site-content.js.map +1 -1
  60. package/src/lib/jobs/ai-job-site-datasets.d.ts +53 -3
  61. package/src/lib/jobs/ai-job-site-datasets.js +300 -30
  62. package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
  63. package/src/lib/jobs/ai-job-site-step.js +6 -3
  64. package/src/lib/jobs/ai-job-site-step.js.map +1 -1
  65. package/src/lib/jobs/ai-job-site-store-pages.js +3 -3
  66. package/src/lib/jobs/ai-job-site-store-pages.js.map +1 -1
  67. package/src/lib/jobs/ai-job-text-step.js +2 -1
  68. package/src/lib/jobs/ai-job-text-step.js.map +1 -1
  69. package/src/lib/jobs/ai-job-tracking-step.d.ts +2 -1
  70. package/src/lib/jobs/ai-job-tracking-step.js +7 -8
  71. package/src/lib/jobs/ai-job-tracking-step.js.map +1 -1
  72. package/src/lib/jobs/ai-jobs-beat.d.ts +11 -7
  73. package/src/lib/jobs/ai-jobs-beat.js +18 -8
  74. package/src/lib/jobs/ai-jobs-beat.js.map +1 -1
  75. package/src/lib/jobs/ai-jobs-notify.d.ts +66 -1
  76. package/src/lib/jobs/ai-jobs-notify.js +136 -3
  77. package/src/lib/jobs/ai-jobs-notify.js.map +1 -1
  78. package/src/lib/jobs/ai-layout-stock-photos.d.ts +155 -7
  79. package/src/lib/jobs/ai-layout-stock-photos.js +1517 -220
  80. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  81. package/src/lib/jobs/ai-product-image.d.ts +14 -0
  82. package/src/lib/jobs/ai-product-image.js +73 -21
  83. package/src/lib/jobs/ai-product-image.js.map +1 -1
  84. package/src/lib/jobs/ai-theme-brand-inputs.d.ts +9 -1
  85. package/src/lib/jobs/ai-theme-brand-inputs.js +28 -2
  86. package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -1
  87. package/src/lib/jobs/fixtures/ai-site-agl4065-datasets.d.ts +175 -0
  88. package/src/lib/jobs/fixtures/ai-site-agl4065-datasets.js +601 -0
  89. package/src/lib/jobs/fixtures/ai-site-agl4065-datasets.js.map +1 -0
  90. package/src/lib/jobs/fixtures/ai-site-agl4065-pages.d.ts +46 -0
  91. package/src/lib/jobs/fixtures/ai-site-agl4065-pages.js +2862 -0
  92. package/src/lib/jobs/fixtures/ai-site-agl4065-pages.js.map +1 -0
  93. package/src/lib/jobs/fixtures/ai-site-agl4065-plans.d.ts +74 -0
  94. package/src/lib/jobs/fixtures/ai-site-agl4065-plans.js +888 -0
  95. package/src/lib/jobs/fixtures/ai-site-agl4065-plans.js.map +1 -0
  96. package/src/lib/jobs/fixtures/ai-site-agl4092-datasets.d.ts +120 -0
  97. package/src/lib/jobs/fixtures/ai-site-agl4092-datasets.js +410 -0
  98. package/src/lib/jobs/fixtures/ai-site-agl4092-datasets.js.map +1 -0
  99. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-judge.d.ts +29 -0
  100. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-judge.js +81 -0
  101. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-judge.js.map +1 -0
  102. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-recordings.d.ts +87 -0
  103. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-recordings.js +225 -0
  104. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-recordings.js.map +1 -0
  105. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-recordings.d.ts +26 -0
  106. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-recordings.js +714 -0
  107. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-recordings.js.map +1 -0
  108. package/src/lib/layout-language/ai-layout-compiler.d.ts +11 -0
  109. package/src/lib/layout-language/ai-layout-compiler.js +194 -18
  110. package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
  111. package/src/lib/layout-language/ai-layout-copy.d.ts +37 -0
  112. package/src/lib/layout-language/ai-layout-copy.js +383 -3
  113. package/src/lib/layout-language/ai-layout-copy.js.map +1 -1
  114. package/src/lib/layout-language/ai-layout-design.d.ts +19 -0
  115. package/src/lib/layout-language/ai-layout-design.js +31 -11
  116. package/src/lib/layout-language/ai-layout-design.js.map +1 -1
  117. package/src/lib/layout-language/ai-layout-listings.d.ts +7 -1
  118. package/src/lib/layout-language/ai-layout-listings.js +9 -1
  119. package/src/lib/layout-language/ai-layout-listings.js.map +1 -1
  120. package/src/lib/layout-language/ai-layout-pictures.d.ts +39 -1
  121. package/src/lib/layout-language/ai-layout-pictures.js +141 -4
  122. package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
  123. package/src/lib/layout-language/ai-layout-storefront.d.ts +18 -4
  124. package/src/lib/layout-language/ai-layout-storefront.js +100 -20
  125. package/src/lib/layout-language/ai-layout-storefront.js.map +1 -1
  126. package/src/lib/model/ai-build-job.d.ts +7 -0
  127. package/src/lib/model/ai-build-job.js +36 -7
  128. package/src/lib/model/ai-build-job.js.map +1 -1
  129. package/src/lib/model/ai-build-plan.d.ts +28 -4
  130. package/src/lib/model/ai-build-plan.js +49 -9
  131. package/src/lib/model/ai-build-plan.js.map +1 -1
  132. package/src/lib/model/ai-build-progress.js +3 -1
  133. package/src/lib/model/ai-build-progress.js.map +1 -1
  134. package/src/lib/model/ai-job-notice.d.ts +8 -0
  135. package/src/lib/model/ai-job-notice.js +33 -0
  136. package/src/lib/model/ai-job-notice.js.map +1 -1
  137. package/src/lib/model/ai-job-plan-lines.d.ts +2 -1
  138. package/src/lib/model/ai-job-plan-lines.js +6 -1
  139. package/src/lib/model/ai-job-plan-lines.js.map +1 -1
  140. package/src/lib/model/ai-jobs.types.d.ts +8 -0
  141. package/src/lib/model/ai-jobs.types.js.map +1 -1
  142. package/src/lib/model/ai-permissions.d.ts +13 -0
  143. package/src/lib/model/ai-permissions.js +29 -1
  144. package/src/lib/model/ai-permissions.js.map +1 -1
  145. package/src/lib/model/ai-plan-said-sections.d.ts +12 -3
  146. package/src/lib/model/ai-plan-said-sections.js +22 -5
  147. package/src/lib/model/ai-plan-said-sections.js.map +1 -1
  148. package/src/lib/model/ai-products.d.ts +18 -0
  149. package/src/lib/model/ai-products.js +32 -0
  150. package/src/lib/model/ai-products.js.map +1 -1
  151. package/src/lib/model/ai-site-context.d.ts +6 -2
  152. package/src/lib/model/ai-site-context.js +8 -2
  153. package/src/lib/model/ai-site-context.js.map +1 -1
  154. package/src/lib/model/ai-site-inspiration.d.ts +3 -2
  155. package/src/lib/model/ai-site-inspiration.js +3 -2
  156. package/src/lib/model/ai-site-inspiration.js.map +1 -1
  157. package/src/lib/plugin.js +4 -13
  158. package/src/lib/plugin.js.map +1 -1
  159. package/src/lib/providers/anthropic.js +9 -2
  160. package/src/lib/providers/anthropic.js.map +1 -1
  161. package/src/lib/providers/catalog.js +14 -5
  162. package/src/lib/providers/catalog.js.map +1 -1
  163. package/src/lib/providers/contract.d.ts +24 -1
  164. package/src/lib/providers/contract.js.map +1 -1
  165. package/src/lib/providers/routing.js +5 -2
  166. package/src/lib/providers/routing.js.map +1 -1
  167. package/src/lib/runtime/ai-dataset-generation.d.ts +120 -1
  168. package/src/lib/runtime/ai-dataset-generation.js +352 -3
  169. package/src/lib/runtime/ai-dataset-generation.js.map +1 -1
  170. package/src/lib/runtime/ai-dev-replay.d.ts +1 -0
  171. package/src/lib/runtime/ai-dev-replay.js +4 -2
  172. package/src/lib/runtime/ai-dev-replay.js.map +1 -1
  173. package/src/lib/runtime/ai-doctrine-validators.d.ts +47 -3
  174. package/src/lib/runtime/ai-doctrine-validators.js +345 -28
  175. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
  176. package/src/lib/runtime/ai-doctrine.d.ts +5 -4
  177. package/src/lib/runtime/ai-doctrine.js +10 -3
  178. package/src/lib/runtime/ai-doctrine.js.map +1 -1
  179. package/src/lib/runtime/ai-icon-library.d.ts +27 -1
  180. package/src/lib/runtime/ai-icon-library.js +30 -3
  181. package/src/lib/runtime/ai-icon-library.js.map +1 -1
  182. package/src/lib/runtime/ai-products-generation.d.ts +11 -1
  183. package/src/lib/runtime/ai-products-generation.js +51 -4
  184. package/src/lib/runtime/ai-products-generation.js.map +1 -1
  185. package/src/lib/runtime/assist-answer-cache.d.ts +2 -0
  186. package/src/lib/runtime/assist-answer-cache.js +5 -2
  187. package/src/lib/runtime/assist-answer-cache.js.map +1 -1
  188. package/src/lib/server/ai-allotments.js +7 -2
  189. package/src/lib/server/ai-allotments.js.map +1 -1
  190. package/src/lib/server/ai-experiment-versions.js +5 -5
  191. package/src/lib/server/ai-experiment-versions.js.map +1 -1
  192. package/src/lib/server/ai-host-permissions-roster.d.ts +25 -0
  193. package/src/lib/server/ai-host-permissions-roster.js +33 -0
  194. package/src/lib/server/ai-host-permissions-roster.js.map +1 -0
  195. package/src/lib/server/ai-host-permissions.js +8 -6
  196. package/src/lib/server/ai-host-permissions.js.map +1 -1
  197. package/src/lib/server/ai-image-reads-route.d.ts +17 -0
  198. package/src/lib/server/ai-image-reads-route.js +106 -0
  199. package/src/lib/server/ai-image-reads-route.js.map +1 -0
  200. package/src/lib/server/ai-seo-apply.js +5 -5
  201. package/src/lib/server/ai-seo-apply.js.map +1 -1
  202. package/src/lib/server/ai-site-import-route.js +7 -4
  203. package/src/lib/server/ai-site-import-route.js.map +1 -1
  204. package/src/lib/server/assist-build.d.ts +15 -1
  205. package/src/lib/server/assist-build.js +30 -3
  206. package/src/lib/server/assist-build.js.map +1 -1
  207. package/src/lib/server/assist-chat.d.ts +11 -7
  208. package/src/lib/server/assist-chat.js +185 -48
  209. package/src/lib/server/assist-chat.js.map +1 -1
  210. package/src/lib/server/assist-docs-query.d.ts +51 -0
  211. package/src/lib/server/assist-docs-query.js +57 -0
  212. package/src/lib/server/assist-docs-query.js.map +1 -0
  213. package/src/lib/server/assist-jobs-context.d.ts +102 -0
  214. package/src/lib/server/assist-jobs-context.js +227 -0
  215. package/src/lib/server/assist-jobs-context.js.map +1 -0
  216. package/src/lib/server/assist-view-context.d.ts +8 -4
  217. package/src/lib/server/assist-view-context.js +12 -7
  218. package/src/lib/server/assist-view-context.js.map +1 -1
  219. package/src/lib/server.js +12 -0
  220. package/src/lib/server.js.map +1 -1
  221. package/src/lib/tools/ai-dataset-tool.d.ts +11 -1
  222. package/src/lib/tools/ai-dataset-tool.js +24 -7
  223. package/src/lib/tools/ai-dataset-tool.js.map +1 -1
  224. package/src/lib/tools/ai-duplicate-resource-tool.js +5 -6
  225. package/src/lib/tools/ai-duplicate-resource-tool.js.map +1 -1
  226. package/src/lib/components/ai-collaborator-permissions-column.component.d.ts +0 -32
  227. package/src/lib/components/ai-collaborator-permissions-column.component.js +0 -132
  228. package/src/lib/components/ai-collaborator-permissions-column.component.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-site-agl4065-plans.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AiLayoutPagePlan } from '../../layout-language/ai-layout-compiler'\nimport type { AiLayoutSection } from '../../layout-language/ai-layout-language'\nimport type { AiLayoutTargets } from '../../layout-language/ai-layout-links'\nimport type { AiLayoutListing } from '../../layout-language/ai-layout-listings'\n\n/**\n * Two booth-kit home pages from the guided starts of 2026-10-25 (AGL-4065),\n * the two trades sites that shared one layout: Holeshot Moto Repair and Two\n * Oaks Handyman, both fictional businesses built in the test workspace.\n *\n * Each plan is the job's own home plan, as its plan step wrote it. Each\n * page's sections are the model's design, rebuilt in the layout language\n * from the words the stored page shows (the decoded page trees): the same\n * bands, headings, ledes and items. Every contact line is left out — the\n * phone and email buttons, the street address an answer gave — so nothing\n * here names a real person, number or address. The towns are the sites'\n * service areas.\n *\n * Alongside them, the item groups whose icons came out random: the \"Towns\n * we serve\" and \"Areas we serve\" rows and the reasons to trust each shop;\n * and the Rut Runners Racing and Pit Row Tacos \"… in pictures\" bands, which\n * showed six captions and no picture.\n */\n\nconst block = (kind: AiLayoutSection['blocks'][number]['kind'], text = '', extra: Partial<AiLayoutSection['blocks'][number]> = {}) => ({\n kind,\n text,\n ...extra,\n})\nconst items = (...entries: Array<[string, string?]>) => entries.map(([title, text = '']) => ({ title, text }))\n\n// ── Holeshot Moto Repair (trades) ────────────────────────────────────────\n\n/** The words the job was given, minus its contact details: no phone, email or street. */\nexport const HOLESHOT_FACTS = [\n 'A 5-page website for Motorcycle and dirt bike repair shop: engine rebuilds, suspension, tires, race prep, service; books repair appointments.',\n 'Motorcycle and dirt bike repair shop: engine rebuilds, suspension, tires, race prep, service; books repair appointments',\n 'Dirt bike and street riders, motocross racers and youth-racer parents around San Marcos who want fast, honest repairs',\n 'trades',\n 'Holeshot Moto Repair',\n 'San Marcos',\n 'Back on the gate by race day',\n '2014',\n 'San Marcos\\nKyle\\nBuda\\nWimberley\\nNew Braunfels\\nLockhart',\n 'English, Spanish',\n 'Tu-Sa 09:00-17:00',\n 'Open Tuesday to Saturday, 9am to 5pm',\n 'TX',\n 'United States',\n].join('\\n')\n\nexport const HOLESHOT_HOME_PLAN: AiLayoutPagePlan = {\n title: 'Home',\n sections: [\n { name: 'Hero with book a repair button', uses: [], items: 0 },\n { name: 'How a job goes, step by step', uses: [], items: 4 },\n { name: 'What we repair', uses: ['new:Repair services'], items: 5 },\n { name: 'Why riders and racing parents trust the shop', uses: [], items: 3 },\n { name: 'Questions riders ask, answered', uses: [], items: 5 },\n { name: 'Call to action: book your repair', uses: [], items: 0 },\n ],\n}\n\n/** The hero's eyebrow as the model wrote it: 42 characters, cut to \"San Marcos motorcycle and dirt bike\" on the live page. */\nexport const HOLESHOT_EYEBROW = 'San Marcos motorcycle and dirt bike repair'\n\nexport const HOLESHOT_TRUST = items(\n ['Open since 2014', 'Years of work on dirt bikes and street bikes around San Marcos.'],\n ['Straight answers', \"We explain what your bike needs and what it doesn't.\"],\n ['English and Spanish', \"Talk to us in the language you're comfortable with.\"],\n)\n\nexport const HOLESHOT_HOME_SECTIONS: AiLayoutSection[] = [\n {\n band: 'dark',\n blocks: [\n block('eyebrow', HOLESHOT_EYEBROW),\n block('heading', 'Back on the gate by race day', { style: 'large' }),\n block('lede', 'Fast, honest repairs for dirt bike and street riders, racers and youth-racer parents.'),\n block('button', 'Book a repair', { to: 'page:pg-book', style: 'primary' }),\n ],\n },\n {\n band: 'plain',\n blocks: [\n block('heading', 'How a job goes, step by step'),\n block('steps', '', {\n items: items(\n ['Tell us about the bike', \"Send the make, model, year and what's wrong, plus your race date if you have one.\"],\n ['Pick a day', 'We book a drop-off that fits your schedule.'],\n ['We diagnose and repair', 'We find the problem and tell you what it needs before the work starts.'],\n ['Pick up and ride', 'Your bike is ready and checked, so you can get back on the track or the road.'],\n ),\n }),\n ],\n },\n {\n band: 'soft',\n blocks: [\n block('heading', 'What we repair'),\n block('text', 'From full engine work to a routine service, we handle dirt bikes and street bikes.'),\n block('cards', '', { items: items(['Engine rebuilds'], ['Suspension'], ['Tires'], ['Race prep'], ['Service']) }),\n ],\n },\n {\n band: 'plain',\n blocks: [block('heading', 'Why riders and racing parents trust the shop'), block('cards', '', { items: HOLESHOT_TRUST })],\n },\n {\n band: 'soft',\n blocks: [\n block('heading', 'Questions riders ask, answered'),\n block('faq', '', {\n items: items(\n ['What do you repair?', 'Engine rebuilds, suspension, tires, race prep and service.'],\n ['Can you get my bike ready for a race?', \"Yes. Give us your race date when you book and we'll plan around it.\"],\n ['When are you open?', 'Tuesday to Saturday, 9am to 5pm.'],\n ['Do you speak Spanish?', 'Yes, we work in English and Spanish.'],\n ),\n }),\n ],\n },\n {\n band: 'brand',\n align: 'center',\n blocks: [\n block('heading', 'Book your repair'),\n block('lede', 'Tell us what your bike needs and when you need it back.'),\n block('button', 'Book a repair', { to: 'page:pg-book', style: 'primary' }),\n ],\n },\n]\n\n/** The \"Repair services\" dataset the home lists, as the job proposed it: no photo field. */\nconst HOLESHOT_REPAIRS: AiLayoutListing = {\n id: 'listing:records:dsRepairs',\n kind: 'records',\n name: 'Repair services',\n records: ['Engine rebuilds', 'Suspension', 'Tires', 'Race prep', 'Service'],\n datasetId: 'dsRepairs',\n fields: [\n { id: 'name', name: 'Name', type: 'text' },\n { id: 'summary', name: 'Summary', type: 'text' },\n { id: 'typical_turnaround', name: 'Typical turnaround', type: 'text' },\n { id: 'bike_types', name: 'Bike types', type: 'sorted' },\n ],\n placements: [\n { screenId: 'pg-home', section: 2, role: 'featured' },\n { screenId: 'pg-services', section: 1, role: 'index' },\n ],\n}\n\nexport const HOLESHOT_TARGETS: AiLayoutTargets = {\n pageId: 'pg-home',\n pages: [\n { id: 'pg-services', label: 'Services', slug: '/services' },\n { id: 'pg-about', label: 'About', slug: '/about' },\n { id: 'pg-area', label: 'Service Area', slug: '/service-area' },\n { id: 'pg-book', label: 'Book a Repair', slug: '/book-a-repair' },\n ],\n homeIds: ['pg-home'],\n forms: [{ id: 'form-repair', name: 'Repair request form' }],\n formPageId: 'pg-book',\n components: [],\n facts: HOLESHOT_FACTS,\n listings: [HOLESHOT_REPAIRS],\n}\n\n// ── Two Oaks Handyman (trades) ───────────────────────────────────────────\n\nexport const TWO_OAKS_FACTS = [\n 'A 5-page website for Handyman business: home repairs, drywall, fences and decks, doors and trim, small remodels; takes quote requests.',\n 'Handyman business: home repairs, drywall, fences and decks, doors and trim, small remodels; takes quote requests',\n 'Homeowners and landlords around Seguin who need repairs done right without hiring three different trades',\n 'trades',\n 'Two Oaks Handyman',\n 'Seguin',\n 'Fixed right the first time, on time',\n '2012',\n 'Seguin\\nNew Braunfels\\nSchertz\\nCibolo\\nMarion',\n 'English, Spanish',\n 'Mo-Sa 09:00-17:00',\n 'Open Mon–Sat 9am–5pm',\n 'TX',\n 'United States',\n].join('\\n')\n\nexport const TWO_OAKS_HOME_PLAN: AiLayoutPagePlan = {\n title: 'Home',\n sections: [\n { name: 'Hero: fixed right the first time', uses: [], items: 0 },\n { name: 'Why homeowners and landlords trust us', uses: [], items: 4 },\n { name: 'What we repair and build', uses: ['new:Services list'], items: 6 },\n { name: 'How a job goes', uses: [], items: 4 },\n { name: 'Questions people ask', uses: ['new:Common questions'], items: 5 },\n { name: 'Towns we serve', uses: [], items: 5 },\n { name: 'Call to action: ask for a quote', uses: [], items: 0 },\n ],\n}\n\nexport const TWO_OAKS_TRUST = items(\n ['One call, many trades', 'Repairs, drywall, fences and trim handled by one person, not three.'],\n ['Serving Seguin since 2012', 'Over a decade of work for local homes and rentals.'],\n ['On time', 'We show up when we say we will.'],\n ['English and Spanish', 'Talk to us in the language you prefer.'],\n)\n\n/** \"Towns we serve\" on the Two Oaks home, as the page showed it. */\nexport const TWO_OAKS_TOWNS = items(\n ['Seguin', 'Our home base.'],\n ['New Braunfels', 'Repairs and remodels.'],\n ['Schertz', 'Homes and rentals.'],\n ['Cibolo', 'Homes and rentals.'],\n ['Marion', 'Homes and rentals.'],\n)\n\nexport const TWO_OAKS_HOME_SECTIONS: AiLayoutSection[] = [\n {\n band: 'dark',\n blocks: [\n block('eyebrow', 'Two Oaks Handyman · Seguin, TX'),\n block('heading', 'Fixed right the first time, on time', { style: 'large' }),\n block('lede', 'One handyman for repairs, drywall, fences, decks, doors, trim and small remodels around Seguin.'),\n block('button', 'Ask for a quote', { to: 'page:pg-contact', style: 'primary' }),\n ],\n },\n { band: 'plain', blocks: [block('heading', 'Why homeowners and landlords trust us'), block('cards', '', { items: TWO_OAKS_TRUST })] },\n {\n band: 'soft',\n blocks: [\n block('heading', 'What we repair and build'),\n block('lede', 'From a patched wall to a new deck, here is the work we do most.'),\n block('cards', '', { items: items(['Home repairs'], ['Drywall'], ['Fences and decks']) }),\n ],\n },\n {\n band: 'plain',\n blocks: [\n block('heading', 'How a job goes'),\n block('steps', '', {\n items: items(\n ['Send your request', 'Tell us what needs fixing and where.'],\n ['We review the job', 'We get back to you to talk through details and timing.'],\n ['We do the work', 'Repairs done properly, in one visit where possible.'],\n ['Final walk-through', 'We check the result with you before we leave.'],\n ),\n }),\n ],\n },\n {\n band: 'soft',\n blocks: [block('heading', 'Questions people ask'), block('lede', 'Quick answers about jobs, areas, quotes and languages.')],\n },\n { band: 'plain', blocks: [block('heading', 'Towns we serve'), block('cards', '', { items: TWO_OAKS_TOWNS })] },\n {\n band: 'dark',\n align: 'center',\n blocks: [\n block('heading', 'Ready for a quote?'),\n block('lede', 'Describe the job and we will get back to you. Open Mon–Sat 9am–5pm.'),\n block('button', 'Ask for a quote', { to: 'page:pg-contact', style: 'primary' }),\n ],\n },\n]\n\nconst TWO_OAKS_SERVICES: AiLayoutListing = {\n id: 'listing:records:dsServices',\n kind: 'records',\n name: 'Services list',\n records: ['Home repairs', 'Drywall', 'Fences and decks', 'Doors and trim', 'Small remodels', 'Rental unit repairs'],\n datasetId: 'dsServices',\n fields: [\n { id: 'name', name: 'Name', type: 'text' },\n { id: 'summary', name: 'Summary', type: 'text' },\n { id: 'typical_jobs', name: 'Typical jobs', type: 'text' },\n { id: 'category', name: 'Category', type: 'text' },\n { id: 'image_description', name: 'Image description', type: 'text' },\n ],\n imageField: 'image',\n placements: [\n { screenId: 'pg-home', section: 2, role: 'featured' },\n { screenId: 'pg-services', section: 1, role: 'index' },\n ],\n}\n\nconst TWO_OAKS_QUESTIONS: AiLayoutListing = {\n id: 'listing:records:dsQuestions',\n kind: 'records',\n name: 'Common questions',\n records: ['What kinds of jobs does Two Oaks Handyman take on?', 'Which areas do you serve?', 'How do I ask for a quote?'],\n datasetId: 'dsQuestions',\n fields: [\n { id: 'question', name: 'Question', type: 'text' },\n { id: 'answer', name: 'Answer', type: 'text' },\n ],\n placements: [\n { screenId: 'pg-home', section: 4, role: 'featured' },\n { screenId: 'pg-how', section: 2, role: 'index' },\n ],\n}\n\nexport const TWO_OAKS_TARGETS: AiLayoutTargets = {\n pageId: 'pg-home',\n pages: [\n { id: 'pg-services', label: 'Services', slug: '/services' },\n { id: 'pg-about', label: 'About', slug: '/about' },\n { id: 'pg-how', label: 'How it works', slug: '/how-it-works' },\n { id: 'pg-contact', label: 'Contact and Quote', slug: '/contact' },\n ],\n homeIds: ['pg-home'],\n forms: [{ id: 'form-quote', name: 'Quote request form' }],\n formPageId: 'pg-contact',\n components: [],\n facts: TWO_OAKS_FACTS,\n listings: [TWO_OAKS_SERVICES, TWO_OAKS_QUESTIONS],\n}\n\n// ── The other rows whose icons came out random ───────────────────────────\n\n/** Bluebonnet Yard & Landscape (business): its hero's eyebrow as written, 42 characters, cut to \"…in New\" live. */\nexport const BLUEBONNET_EYEBROW = 'Lawn care and landscaping in New Braunfels'\n\nexport const BLUEBONNET_FACTS = [\n 'Landscaping company: lawn care, native plant beds, xeriscape, sod, irrigation repair, seasonal cleanups; free estimates',\n 'business',\n 'Bluebonnet Yard & Landscape',\n 'New Braunfels',\n 'New Braunfels\\nCanyon Lake\\nGarden Ridge\\nSeguin\\nGruene',\n 'English, Spanish',\n 'TX',\n].join('\\n')\n\n/** \"Areas we serve\" on the Bluebonnet home: five towns, a title each. */\nexport const BLUEBONNET_AREAS = items(['New Braunfels'], ['Canyon Lake'], ['Garden Ridge'], ['Seguin'], ['Gruene'])\n\n/** \"Areas we serve\" on the Berm & Bolt Moto Parts About page (store). */\nexport const BERM_AND_BOLT_AREAS = items(\n ['Kyle', 'Home of our shop and pickup counter.'],\n ['Buda', 'Just up the road.'],\n ['San Marcos', 'Pick up on your way home.'],\n ['Lockhart', 'Ranch and trail riders welcome.'],\n ['Austin', 'Worth the drive for fast parts.'],\n)\n\n// ── The two \"in pictures\" bands that showed no picture ────────────────────\n\n/**\n * Each home's \"… in pictures\" band, as the model designed it: a heading and\n * six captions, which the page drew as six caption pairs and no picture slot\n * — \"in pictures\" said nothing the compiler read as a gallery. Each page\n * here is the band between the sections that stood around it on the home,\n * under the home plan's own section names.\n */\nconst IN_PICTURES_TARGETS = (facts: string): AiLayoutTargets => ({\n pageId: 'pg-home',\n pages: [\n { id: 'pg-about', label: 'About', slug: '/about' },\n { id: 'pg-contact', label: 'Contact', slug: '/contact' },\n ],\n homeIds: ['pg-home'],\n forms: [{ id: 'form-inquiry', name: 'Inquiry form' }],\n formPageId: 'pg-contact',\n components: [],\n facts,\n})\n\n/** Rut Runners Racing (fitness): \"The team at the track in pictures\", a dark band. */\nexport const RUT_RUNNERS_FACTS = [\n 'Amateur motocross race team: rider profiles, race schedule and results, sponsor inquiries',\n 'fitness',\n 'Rut Runners Racing',\n 'Lockhart',\n 'Lockhart\\nLuling\\nSan Marcos\\nAustin\\nCentral Texas',\n 'English, Spanish',\n 'TX',\n].join('\\n')\n\nexport const RUT_RUNNERS_PICTURES_PLAN: AiLayoutPagePlan = {\n title: 'Home',\n sections: [\n { name: 'Hero: built in Lockhart, raced across Texas', uses: [], items: 0 },\n { name: 'How to get started with the team', uses: [], items: 4 },\n { name: 'The team at the track in pictures', uses: [], items: 6 },\n { name: 'Call to action: sponsor or join', uses: [], items: 0 },\n ],\n}\n\nexport const RUT_RUNNERS_IN_PICTURES = items(\n ['Gate drop', 'Riders staged and ready for the start.'],\n ['Pit crew', 'Families and friends wrenching together.'],\n ['Practice laps', 'Working the ruts before race day.'],\n ['Podium moments', 'Celebrating after a hard-fought moto.'],\n ['Young riders', 'Our minis learning the basics.'],\n ['Team spirit', 'Rut Runners Racing on and off the bike.'],\n)\n\nexport const RUT_RUNNERS_PICTURES_SECTIONS: AiLayoutSection[] = [\n {\n band: 'plain',\n blocks: [\n block('eyebrow', 'Rut Runners Racing · Lockhart, TX'),\n block('heading', 'Built in Lockhart, raced across Texas', { style: 'large' }),\n block('lede', 'Amateur motocross since 2019. Ride with us, sponsor a rider or cheer from the fence.'),\n block('button', 'Sponsor a rider', { to: 'page:pg-contact', style: 'primary' }),\n ],\n },\n {\n band: 'soft',\n blocks: [\n block('heading', 'How to get started with the team'),\n block('steps', '', {\n items: items(\n ['Say hello', 'Tell us who you are and what you ride, or want to ride.'],\n ['Meet the team', 'Come to the track and see how we train and race.'],\n ['Find your class', 'We match each rider to an age class and skill level.'],\n ['Hit the track', 'Train with the crew and line up at your first race.'],\n ),\n }),\n ],\n },\n { band: 'dark', blocks: [block('heading', 'The team at the track in pictures'), block('cards', '', { items: RUT_RUNNERS_IN_PICTURES })] },\n {\n band: 'brand',\n align: 'center',\n blocks: [\n block('heading', 'Sponsor a rider or join the team'),\n block('lede', 'Back local riders or get your own number plate.'),\n block('button', 'Get in touch', { to: 'page:pg-contact', style: 'primary' }),\n ],\n },\n]\n\nexport const RUT_RUNNERS_PICTURES_TARGETS = IN_PICTURES_TARGETS(RUT_RUNNERS_FACTS)\n\n/** Pit Row Tacos (restaurant): \"The trailer and the food in pictures\", centered. */\nexport const PIT_ROW_FACTS = [\n 'Taco food trailer: breakfast and street tacos at Texas motocross races and around town; takes catering requests',\n 'restaurant',\n 'Pit Row Tacos',\n 'Buda',\n 'Buda\\nKyle\\nSan Marcos\\nAustin\\nLockhart',\n 'English, Spanish',\n 'TX',\n].join('\\n')\n\nexport const PIT_ROW_PICTURES_PLAN: AiLayoutPagePlan = {\n title: 'Home',\n sections: [\n { name: 'Hero: race-day tacos, made fresh on the line', uses: [], items: 0 },\n { name: 'Our story: a taco trailer from Buda', uses: [], items: 0 },\n { name: 'The trailer and the food in pictures', uses: [], items: 6 },\n { name: 'Call to action: plan your catering', uses: [], items: 0 },\n ],\n}\n\nexport const PIT_ROW_IN_PICTURES = items(\n ['The trailer', 'Our trailer parked and ready on race day.'],\n ['Breakfast tacos', 'Egg, cheese and warm tortillas wrapped to go.'],\n ['Street tacos', 'Carne asada, al pastor and carnitas piled high.'],\n ['The griddle', 'Meat sizzling and tortillas toasting.'],\n ['Salsas and toppings', 'Fresh, bright and made for sharing.'],\n ['Fans in line', 'Riders and families waiting for their order.'],\n)\n\nexport const PIT_ROW_PICTURES_SECTIONS: AiLayoutSection[] = [\n {\n band: 'dark',\n align: 'center',\n blocks: [\n block('heading', 'Race-day tacos, made fresh on the line', { style: 'large' }),\n block('lede', 'Street and breakfast tacos, hot off the griddle in Buda and at the track.'),\n block('button', 'Plan your catering', { to: 'page:pg-contact', style: 'primary' }),\n ],\n },\n {\n band: 'plain',\n blocks: [\n block('eyebrow', 'Our story'),\n block('heading', 'A taco trailer from Buda'),\n block('text', 'Since 2021, Pit Row Tacos has fed riders, families and fans with breakfast tacos and street tacos made fresh on the line.'),\n ],\n },\n { band: 'plain', align: 'center', blocks: [block('heading', 'The trailer and the food in pictures'), block('cards', '', { items: PIT_ROW_IN_PICTURES })] },\n {\n band: 'brand',\n align: 'center',\n blocks: [\n block('heading', 'Plan your catering'),\n block('lede', 'Tell us about your event and we will bring the tacos to you.'),\n block('button', 'Plan your catering', { to: 'page:pg-contact', style: 'primary' }),\n ],\n },\n]\n\nexport const PIT_ROW_PICTURES_TARGETS = IN_PICTURES_TARGETS(PIT_ROW_FACTS)\n"],"names":["block","kind","text","extra","items","entries","map","title","HOLESHOT_FACTS","join","HOLESHOT_HOME_PLAN","sections","name","uses","HOLESHOT_EYEBROW","HOLESHOT_TRUST","HOLESHOT_HOME_SECTIONS","band","blocks","style","to","align","HOLESHOT_REPAIRS","id","records","datasetId","fields","type","placements","screenId","section","role","HOLESHOT_TARGETS","pageId","pages","label","slug","homeIds","forms","formPageId","components","facts","listings","TWO_OAKS_FACTS","TWO_OAKS_HOME_PLAN","TWO_OAKS_TRUST","TWO_OAKS_TOWNS","TWO_OAKS_HOME_SECTIONS","TWO_OAKS_SERVICES","imageField","TWO_OAKS_QUESTIONS","TWO_OAKS_TARGETS","BLUEBONNET_EYEBROW","BLUEBONNET_FACTS","BLUEBONNET_AREAS","BERM_AND_BOLT_AREAS","IN_PICTURES_TARGETS","RUT_RUNNERS_FACTS","RUT_RUNNERS_PICTURES_PLAN","RUT_RUNNERS_IN_PICTURES","RUT_RUNNERS_PICTURES_SECTIONS","RUT_RUNNERS_PICTURES_TARGETS","PIT_ROW_FACTS","PIT_ROW_PICTURES_PLAN","PIT_ROW_IN_PICTURES","PIT_ROW_PICTURES_SECTIONS","PIT_ROW_PICTURES_TARGETS"],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { AiBuildPlan, AiBuildPlanCreate, AiBuildPlanScreen } from '../../model/ai-build-plan';
18
+ /**
19
+ * RECORDED, NOT GOLDEN (AGL-4092): what the 2026-10-28 Rut Runners Racing
20
+ * start in the test workspace planned and wrote, and the About page an Assist
21
+ * build then proposed for it, for the offline replays of Lane B. The business
22
+ * is fictional. No contact detail, street, person, workspace or site id is
23
+ * kept: screen ids are this fixture's own, and the contact details the brief
24
+ * and the plan quoted are left out.
25
+ *
26
+ * - The site job's "Riders" and "Race results" datasets, as their records
27
+ * were written: six sample riders whose every bio ends "Add this rider's
28
+ * story here.", and eleven sample races whose every past one has the
29
+ * result "Add finishing position". Dates are "" as the tool answers them;
30
+ * the platform sets them.
31
+ * - The Assist build's brief, as the chat wrote it, and its plan's About
32
+ * page, whose section names carried "[year founded]", "[team story]",
33
+ * "[age and class requirements]", "[email]" and "[phone]".
34
+ */
35
+ /** The site job's "Riders" creation, as planned. */
36
+ export declare const RUT_1028_RIDERS: AiBuildPlanCreate;
37
+ /** The site job's "Race results" creation, as planned. */
38
+ export declare const RUT_1028_RACE_RESULTS: AiBuildPlanCreate;
39
+ /** The site job's pages, as planned (titles, addresses and sections). */
40
+ export declare const RUT_1028_SCREENS: AiBuildPlanScreen[];
41
+ /** The site job's brief, as the dataset unit's opened with it (no contact details). */
42
+ export declare const RUT_1028_BRIEF = "A 5-page website for Amateur motocross race team: rider profiles, race schedule and results, sponsors, and sponsor inquiries. It is for Local businesses that sponsor riders, race fans and families following the team, and young riders who want to join. Make it a fitness & sports site. Plan a page for each thing a visitor comes to do, with the contact form on the page a visitor opens to get in touch.";
43
+ /** The instruction every recorded bio ended with. */
44
+ export declare const RIDER_INSTRUCTION = "Add this rider's story here.";
45
+ /** The instruction every recorded past result was. */
46
+ export declare const RESULT_INSTRUCTION = "Add finishing position";
47
+ /** The first sentence of each recorded bio: what is left once the instruction is taken out. */
48
+ export declare const RIDER_BIOS: string[];
49
+ /** The "Riders" answer of 2026-10-28, through the tool: six samples, each bio ending in the instruction. */
50
+ export declare const RIDERS_INSTRUCTION_ANSWER: {
51
+ fields: {
52
+ name: string;
53
+ type: string;
54
+ }[];
55
+ records: {
56
+ values: string[];
57
+ sample: boolean;
58
+ }[];
59
+ };
60
+ /**
61
+ * A second answer of the same kind (AGL-4092): the six riders again, and one
62
+ * row whose only words are an instruction to the owner, which nothing is left
63
+ * of once it is taken out.
64
+ */
65
+ export declare const RIDERS_INSTRUCTION_ANSWER_AGAIN: {
66
+ fields: {
67
+ name: string;
68
+ type: string;
69
+ }[];
70
+ records: {
71
+ values: string[];
72
+ sample: boolean;
73
+ }[];
74
+ };
75
+ /** The answer the re-ask is for: the six riders, each bio finished copy about its sample. */
76
+ export declare const RIDERS_FINISHED_ANSWER: {
77
+ fields: {
78
+ name: string;
79
+ type: string;
80
+ }[];
81
+ records: {
82
+ values: string[];
83
+ sample: boolean;
84
+ }[];
85
+ };
86
+ /** The "Race results" answer of 2026-10-28, through the tool: five to come, six behind, each past result the instruction. */
87
+ export declare const RACE_RESULTS_INSTRUCTION_ANSWER: {
88
+ fields: {
89
+ name: string;
90
+ type: string;
91
+ }[];
92
+ records: {
93
+ values: string[];
94
+ sample: boolean;
95
+ }[];
96
+ };
97
+ /**
98
+ * The brief the chat wrote for the About page, as the build tool carried it,
99
+ * with the contact details it quoted left out. Its second-to-last sentences
100
+ * are the chat's own: nothing in the build protocol asked for placeholders.
101
+ */
102
+ export declare const ASSIST_ABOUT_BRIEF = "Create an About page (slug /about) for Rut Runners Racing, an amateur motocross race team for local businesses based in Lockhart, Texas, serving Lockhart, Luling, San Marcos, Austin and Central Texas. Audience: local businesses that sponsor riders, race fans and families following the team, and young riders who want to join. Tone: warm and plain, no exclamation marks. Cover who the team is, what it does, the area it serves, how local businesses can sponsor riders, and how young riders can join, with a link to the existing Sponsors, Riders and Contact pages. Use only the contact details on file. Do not invent names, history, prices, results or testimonials; use bracketed placeholders where details are missing. Also propose a warmer look for the site's theme: warmer colors, friendlier fonts and softer rounded corners, for the owner to apply in Setup \u2192 Theme.";
103
+ /** The About page the Assist build's plan proposed, its section names as planned (the street left out). */
104
+ export declare const ASSIST_ABOUT_PLAN: Pick<AiBuildPlan, 'screens'>;
105
+ /** What those section names read once nothing in them is a gap. */
106
+ export declare const ASSIST_ABOUT_SECTION_NAMES: string[];
107
+ /** The guided start's answers the site job carried (no contact details): the year founded among them. */
108
+ export declare const RUT_1028_INPUTS: {
109
+ businessType: string;
110
+ audience: string;
111
+ starter: string;
112
+ siteKind: string;
113
+ pages: number;
114
+ businessName: string;
115
+ city: string;
116
+ tagline: string;
117
+ founded: string;
118
+ serviceArea: string;
119
+ languages: string;
120
+ };
@@ -0,0 +1,410 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * RECORDED, NOT GOLDEN (AGL-4092): what the 2026-10-28 Rut Runners Racing
18
+ * start in the test workspace planned and wrote, and the About page an Assist
19
+ * build then proposed for it, for the offline replays of Lane B. The business
20
+ * is fictional. No contact detail, street, person, workspace or site id is
21
+ * kept: screen ids are this fixture's own, and the contact details the brief
22
+ * and the plan quoted are left out.
23
+ *
24
+ * - The site job's "Riders" and "Race results" datasets, as their records
25
+ * were written: six sample riders whose every bio ends "Add this rider's
26
+ * story here.", and eleven sample races whose every past one has the
27
+ * result "Add finishing position". Dates are "" as the tool answers them;
28
+ * the platform sets them.
29
+ * - The Assist build's brief, as the chat wrote it, and its plan's About
30
+ * page, whose section names carried "[year founded]", "[team story]",
31
+ * "[age and class requirements]", "[email]" and "[phone]".
32
+ */ /** The site job's "Riders" creation, as planned. */ export const RUT_1028_RIDERS = {
33
+ kind: 'dataset',
34
+ name: 'Riders',
35
+ why: 'Rider profiles are a list of 4 or more similar items and none of the listed datasets holds them.',
36
+ duplicateOf: null,
37
+ fields: [
38
+ 'Name',
39
+ 'Class',
40
+ 'Bike number',
41
+ 'Hometown',
42
+ 'Bio',
43
+ 'Photo'
44
+ ],
45
+ id: 'fxRiders28'
46
+ };
47
+ /** The site job's "Race results" creation, as planned. */ export const RUT_1028_RACE_RESULTS = {
48
+ kind: 'dataset',
49
+ name: 'Race results',
50
+ why: 'The race schedule and results are a list of events and no listed dataset holds them.',
51
+ duplicateOf: null,
52
+ fields: [
53
+ 'Event',
54
+ 'Date',
55
+ 'Track',
56
+ 'Class',
57
+ 'Result',
58
+ 'Status'
59
+ ],
60
+ id: 'fxRaces28'
61
+ };
62
+ const page = (id, title, slug, sections)=>({
63
+ id,
64
+ title,
65
+ slug,
66
+ layout: 'new:Team site layout',
67
+ template: null,
68
+ duplicateOf: null,
69
+ nav: true,
70
+ seoTitle: title,
71
+ seoDescription: title,
72
+ record: null,
73
+ sections: sections.map(([name, uses, items])=>({
74
+ name,
75
+ uses,
76
+ items
77
+ }))
78
+ });
79
+ /** The site job's pages, as planned (titles, addresses and sections). */ export const RUT_1028_SCREENS = [
80
+ page('fx28Home', 'Home', '/', [
81
+ [
82
+ 'Hero with team tagline and Meet the riders button',
83
+ [],
84
+ 0
85
+ ],
86
+ [
87
+ 'How to start: four steps to join the team',
88
+ [],
89
+ 4
90
+ ],
91
+ [
92
+ 'Programs: classes our riders race in',
93
+ [],
94
+ 5
95
+ ],
96
+ [
97
+ 'The team in pictures: garage, track and podium',
98
+ [],
99
+ 6
100
+ ],
101
+ [
102
+ 'Meet the riders',
103
+ [
104
+ 'new:Riders'
105
+ ],
106
+ 4
107
+ ],
108
+ [
109
+ 'Questions people ask, answered',
110
+ [],
111
+ 5
112
+ ],
113
+ [
114
+ 'Call to action: Contact the team button',
115
+ [],
116
+ 0
117
+ ]
118
+ ]),
119
+ page('fx28Riders', 'Riders', '/riders', [
120
+ [
121
+ 'Riders intro',
122
+ [],
123
+ 0
124
+ ],
125
+ [
126
+ 'Rider profiles',
127
+ [
128
+ 'new:Riders'
129
+ ],
130
+ 6
131
+ ],
132
+ [
133
+ 'Want to ride with us: join call to action',
134
+ [],
135
+ 0
136
+ ]
137
+ ]),
138
+ page('fx28Schedule', 'Race Schedule and Results', '/schedule-results', [
139
+ [
140
+ 'Season overview',
141
+ [],
142
+ 0
143
+ ],
144
+ [
145
+ 'Upcoming races',
146
+ [
147
+ 'new:Race results'
148
+ ],
149
+ 5
150
+ ],
151
+ [
152
+ 'Past results',
153
+ [
154
+ 'new:Race results'
155
+ ],
156
+ 6
157
+ ],
158
+ [
159
+ 'Come watch: what to expect at the track',
160
+ [],
161
+ 3
162
+ ]
163
+ ]),
164
+ page('fx28Sponsors', 'Sponsors', '/sponsors', [
165
+ [
166
+ 'Why local businesses sponsor the team',
167
+ [],
168
+ 0
169
+ ],
170
+ [
171
+ 'Ways to sponsor',
172
+ [],
173
+ 4
174
+ ],
175
+ [
176
+ 'What working together is like',
177
+ [],
178
+ 4
179
+ ],
180
+ [
181
+ 'Our current sponsors',
182
+ [],
183
+ 0
184
+ ],
185
+ [
186
+ 'Call to action: become a sponsor button',
187
+ [],
188
+ 0
189
+ ]
190
+ ]),
191
+ page('fx28Contact', 'Contact', '/contact', [
192
+ [
193
+ 'Get in touch intro',
194
+ [],
195
+ 0
196
+ ],
197
+ [
198
+ 'Sponsor, fan and join inquiry form',
199
+ [
200
+ 'new:Sponsor and join inquiry form'
201
+ ],
202
+ 0
203
+ ],
204
+ [
205
+ 'Where to find us: address, phone, email and service area',
206
+ [],
207
+ 5
208
+ ]
209
+ ])
210
+ ];
211
+ /** The site job's brief, as the dataset unit's opened with it (no contact details). */ export const RUT_1028_BRIEF = 'A 5-page website for Amateur motocross race team: rider profiles, race schedule and results, sponsors, and sponsor inquiries. It is for Local businesses that sponsor riders, race fans and families following the team, and young riders who want to join. Make it a fitness & sports site. Plan a page for each thing a visitor comes to do, with the contact form on the page a visitor opens to get in touch.';
212
+ /** The instruction every recorded bio ended with. */ export const RIDER_INSTRUCTION = "Add this rider's story here.";
213
+ /** The instruction every recorded past result was. */ export const RESULT_INSTRUCTION = 'Add finishing position';
214
+ const RIDER_FIELDS = RUT_1028_RIDERS.fields.map((name)=>({
215
+ name,
216
+ type: 'text'
217
+ }));
218
+ /** One sample rider as the tool answers it: name, class, bike number, hometown, bio, photo. */ const rider = (name, klass, bio)=>({
219
+ values: [
220
+ name,
221
+ klass,
222
+ '',
223
+ '',
224
+ bio,
225
+ ''
226
+ ],
227
+ sample: true
228
+ });
229
+ /** The six riders' names, classes and the bios' first sentences, as written. */ const RIDERS = [
230
+ [
231
+ 'Youth rider, 65cc class',
232
+ '65cc Beginner',
233
+ 'A young rider learning race starts, corners and track etiquette with the team.'
234
+ ],
235
+ [
236
+ 'Youth rider, 85cc class',
237
+ '85cc Junior',
238
+ 'A junior rider building speed and consistency through the season.'
239
+ ],
240
+ [
241
+ 'Amateur rider, 125cc class',
242
+ '125cc Amateur',
243
+ 'An amateur rider racing local rounds for Rut Runners Racing.'
244
+ ],
245
+ [
246
+ 'Amateur rider, 250cc class',
247
+ '250cc Amateur',
248
+ "A full-size bike rider who races the team's Central Texas rounds."
249
+ ],
250
+ [
251
+ "Women's class rider",
252
+ "Women's Amateur",
253
+ "A rider competing in the women's class for the team."
254
+ ],
255
+ [
256
+ 'Vet class rider',
257
+ 'Vet Amateur',
258
+ 'An experienced rider racing in the vet class and mentoring newer teammates.'
259
+ ]
260
+ ];
261
+ /** The first sentence of each recorded bio: what is left once the instruction is taken out. */ export const RIDER_BIOS = RIDERS.map(([, , bio])=>bio);
262
+ /** The "Riders" answer of 2026-10-28, through the tool: six samples, each bio ending in the instruction. */ export const RIDERS_INSTRUCTION_ANSWER = {
263
+ fields: RIDER_FIELDS,
264
+ records: RIDERS.map(([name, klass, bio])=>rider(name, klass, `${bio} ${RIDER_INSTRUCTION}`))
265
+ };
266
+ /**
267
+ * A second answer of the same kind (AGL-4092): the six riders again, and one
268
+ * row whose only words are an instruction to the owner, which nothing is left
269
+ * of once it is taken out.
270
+ */ export const RIDERS_INSTRUCTION_ANSWER_AGAIN = {
271
+ fields: RIDER_FIELDS,
272
+ records: [
273
+ ...RIDERS_INSTRUCTION_ANSWER.records,
274
+ {
275
+ values: [
276
+ "Add this rider's name here.",
277
+ '',
278
+ '',
279
+ '',
280
+ '',
281
+ ''
282
+ ],
283
+ sample: true
284
+ }
285
+ ]
286
+ };
287
+ /** The answer the re-ask is for: the six riders, each bio finished copy about its sample. */ export const RIDERS_FINISHED_ANSWER = {
288
+ fields: RIDER_FIELDS,
289
+ records: RIDERS.map(([name, klass, bio])=>rider(name, klass, `${bio} Rides most weekends with the team at tracks around Central Texas.`))
290
+ };
291
+ const RACE_FIELDS = RUT_1028_RACE_RESULTS.fields.map((name)=>({
292
+ name,
293
+ type: 'text'
294
+ }));
295
+ /** One sample race as the tool answers it: event, date, track, class, result, status. */ const race = (event, track, klass, status, result = '')=>({
296
+ values: [
297
+ event,
298
+ '',
299
+ track,
300
+ klass,
301
+ result,
302
+ status
303
+ ],
304
+ sample: true
305
+ });
306
+ /** The "Race results" answer of 2026-10-28, through the tool: five to come, six behind, each past result the instruction. */ export const RACE_RESULTS_INSTRUCTION_ANSWER = {
307
+ fields: RACE_FIELDS,
308
+ records: [
309
+ race('Season Opener Race Day', 'Local motocross track', 'Youth 65cc', 'Upcoming'),
310
+ race('Series Round 2', 'Central Texas track', 'Youth 85cc', 'Upcoming'),
311
+ race('Lockhart Home Track Race', 'Lockhart track', 'Beginner', 'Upcoming'),
312
+ race('Series Round 3', 'Central Texas track', 'Junior', 'Upcoming'),
313
+ race('Season Finale Race Day', 'Central Texas track', 'Open Amateur', 'Upcoming'),
314
+ race('Series Round 1', 'Central Texas track', 'Youth 65cc', 'Past', RESULT_INSTRUCTION),
315
+ race('Spring Club Race', 'Local motocross track', 'Youth 85cc', 'Past', RESULT_INSTRUCTION),
316
+ race('San Marcos Area Race Day', 'San Marcos area track', 'Beginner', 'Past', RESULT_INSTRUCTION),
317
+ race('Austin Area Race Day', 'Austin area track', 'Junior', 'Past', RESULT_INSTRUCTION),
318
+ race('Luling Area Race Day', 'Luling area track', 'Open Amateur', 'Past', RESULT_INSTRUCTION),
319
+ race('Practice and Club Day', 'Local motocross track', 'Beginner', 'Past', RESULT_INSTRUCTION)
320
+ ]
321
+ };
322
+ // ── The Assist build (AGL-4092) ────────────────────────────────────────
323
+ /**
324
+ * The brief the chat wrote for the About page, as the build tool carried it,
325
+ * with the contact details it quoted left out. Its second-to-last sentences
326
+ * are the chat's own: nothing in the build protocol asked for placeholders.
327
+ */ export const ASSIST_ABOUT_BRIEF = "Create an About page (slug /about) for Rut Runners Racing, an amateur motocross race team for local businesses based in Lockhart, Texas, serving Lockhart, Luling, San Marcos, Austin and Central Texas. Audience: local businesses that sponsor riders, race fans and families following the team, and young riders who want to join. Tone: warm and plain, no exclamation marks. Cover who the team is, what it does, the area it serves, how local businesses can sponsor riders, and how young riders can join, with a link to the existing Sponsors, Riders and Contact pages. Use only the contact details on file. Do not invent names, history, prices, results or testimonials; use bracketed placeholders where details are missing. Also propose a warmer look for the site's theme: warmer colors, friendlier fonts and softer rounded corners, for the owner to apply in Setup → Theme.";
328
+ /** The About page the Assist build's plan proposed, its section names as planned (the street left out). */ export const ASSIST_ABOUT_PLAN = {
329
+ screens: [
330
+ {
331
+ id: 'fx28About',
332
+ title: 'About',
333
+ slug: '/about',
334
+ layout: 'fxLayout',
335
+ template: null,
336
+ duplicateOf: null,
337
+ nav: true,
338
+ seoTitle: 'About Rut Runners Racing | Amateur Motocross in Lockhart, TX',
339
+ seoDescription: 'Meet Rut Runners Racing, an amateur motocross team for local businesses in Lockhart, Texas. See how to sponsor a rider or join the team.',
340
+ record: null,
341
+ sections: [
342
+ {
343
+ name: 'Hero: About the team, with the one h1',
344
+ uses: [],
345
+ items: 0
346
+ },
347
+ {
348
+ name: 'Who we are: an amateur motocross team for local businesses, with [year founded] and [team story]',
349
+ uses: [],
350
+ items: 0
351
+ },
352
+ {
353
+ name: 'What the team does: racing, riders and following along',
354
+ uses: [],
355
+ items: 3
356
+ },
357
+ {
358
+ name: 'Where we race and who we serve: Lockhart, Luling, San Marcos, Austin and Central Texas',
359
+ uses: [],
360
+ items: 5
361
+ },
362
+ {
363
+ name: 'Sponsor a rider: how local businesses can help, with a link to the Sponsors page',
364
+ uses: [
365
+ 'fxSponsors'
366
+ ],
367
+ items: 0
368
+ },
369
+ {
370
+ name: 'Young riders: how to join, with a link to the Riders page, and [age and class requirements]',
371
+ uses: [
372
+ 'fxRiders'
373
+ ],
374
+ items: 0
375
+ },
376
+ {
377
+ name: 'Contact details: [email], [phone], Lockhart, TX, United States, with a link to the Contact page',
378
+ uses: [
379
+ 'fxContact'
380
+ ],
381
+ items: 3
382
+ }
383
+ ]
384
+ }
385
+ ]
386
+ };
387
+ /** What those section names read once nothing in them is a gap. */ export const ASSIST_ABOUT_SECTION_NAMES = [
388
+ 'Hero: About the team, with the one h1',
389
+ 'Who we are: an amateur motocross team for local businesses',
390
+ 'What the team does: racing, riders and following along',
391
+ 'Where we race and who we serve: Lockhart, Luling, San Marcos, Austin and Central Texas',
392
+ 'Sponsor a rider: how local businesses can help, with a link to the Sponsors page',
393
+ 'Young riders: how to join, with a link to the Riders page',
394
+ 'Contact details: Lockhart, TX, United States, with a link to the Contact page'
395
+ ];
396
+ /** The guided start's answers the site job carried (no contact details): the year founded among them. */ export const RUT_1028_INPUTS = {
397
+ businessType: 'Amateur motocross race team: rider profiles, race schedule and results, sponsors, and sponsor inquiries',
398
+ audience: 'Local businesses that sponsor riders, race fans and families following the team, and young riders who want to join',
399
+ starter: 'business',
400
+ siteKind: 'fitness',
401
+ pages: 5,
402
+ businessName: 'Rut Runners Racing',
403
+ city: 'Lockhart',
404
+ tagline: 'Built in Lockhart, raced across Texas',
405
+ founded: '2019',
406
+ serviceArea: 'Lockhart\nLuling\nSan Marcos\nAustin\nCentral Texas',
407
+ languages: 'English, Spanish'
408
+ };
409
+
410
+ //# sourceMappingURL=ai-site-agl4092-datasets.js.map