@aglyn/plugins-ai 1.0.0-beta.284 → 1.0.0-beta.287

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 (210) 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-image-reads.d.ts +59 -0
  16. package/src/lib/jobs/ai-image-reads.js +138 -0
  17. package/src/lib/jobs/ai-image-reads.js.map +1 -0
  18. package/src/lib/jobs/ai-job-build-step.d.ts +29 -0
  19. package/src/lib/jobs/ai-job-build-step.js +83 -12
  20. package/src/lib/jobs/ai-job-build-step.js.map +1 -1
  21. package/src/lib/jobs/ai-job-duplicate-step.d.ts +2 -1
  22. package/src/lib/jobs/ai-job-duplicate-step.js +6 -6
  23. package/src/lib/jobs/ai-job-duplicate-step.js.map +1 -1
  24. package/src/lib/jobs/ai-job-import-step.d.ts +4 -2
  25. package/src/lib/jobs/ai-job-import-step.js +15 -11
  26. package/src/lib/jobs/ai-job-import-step.js.map +1 -1
  27. package/src/lib/jobs/ai-job-insight-step.d.ts +10 -0
  28. package/src/lib/jobs/ai-job-insight-step.js +23 -5
  29. package/src/lib/jobs/ai-job-insight-step.js.map +1 -1
  30. package/src/lib/jobs/ai-job-layout-language.js +2 -1
  31. package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
  32. package/src/lib/jobs/ai-job-media-step.d.ts +2 -1
  33. package/src/lib/jobs/ai-job-media-step.js +6 -8
  34. package/src/lib/jobs/ai-job-media-step.js.map +1 -1
  35. package/src/lib/jobs/ai-job-navigation-step.d.ts +2 -1
  36. package/src/lib/jobs/ai-job-navigation-step.js +7 -9
  37. package/src/lib/jobs/ai-job-navigation-step.js.map +1 -1
  38. package/src/lib/jobs/ai-job-page-language.js +7 -1
  39. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  40. package/src/lib/jobs/ai-job-page-sections.js +16 -3
  41. package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
  42. package/src/lib/jobs/ai-job-page-step.js +9 -1
  43. package/src/lib/jobs/ai-job-page-step.js.map +1 -1
  44. package/src/lib/jobs/ai-job-plan-step.d.ts +30 -8
  45. package/src/lib/jobs/ai-job-plan-step.js +78 -13
  46. package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
  47. package/src/lib/jobs/ai-job-privacy-step.d.ts +4 -2
  48. package/src/lib/jobs/ai-job-privacy-step.js +14 -15
  49. package/src/lib/jobs/ai-job-privacy-step.js.map +1 -1
  50. package/src/lib/jobs/ai-job-products-step.js +5 -3
  51. package/src/lib/jobs/ai-job-products-step.js.map +1 -1
  52. package/src/lib/jobs/ai-job-settings-step.d.ts +2 -1
  53. package/src/lib/jobs/ai-job-settings-step.js +7 -8
  54. package/src/lib/jobs/ai-job-settings-step.js.map +1 -1
  55. package/src/lib/jobs/ai-job-site-content.d.ts +34 -1
  56. package/src/lib/jobs/ai-job-site-content.js +67 -8
  57. package/src/lib/jobs/ai-job-site-content.js.map +1 -1
  58. package/src/lib/jobs/ai-job-site-datasets.d.ts +53 -3
  59. package/src/lib/jobs/ai-job-site-datasets.js +298 -30
  60. package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
  61. package/src/lib/jobs/ai-job-site-step.js +6 -3
  62. package/src/lib/jobs/ai-job-site-step.js.map +1 -1
  63. package/src/lib/jobs/ai-job-site-store-pages.js +3 -3
  64. package/src/lib/jobs/ai-job-site-store-pages.js.map +1 -1
  65. package/src/lib/jobs/ai-job-tracking-step.d.ts +2 -1
  66. package/src/lib/jobs/ai-job-tracking-step.js +7 -8
  67. package/src/lib/jobs/ai-job-tracking-step.js.map +1 -1
  68. package/src/lib/jobs/ai-jobs-beat.d.ts +11 -7
  69. package/src/lib/jobs/ai-jobs-beat.js +18 -8
  70. package/src/lib/jobs/ai-jobs-beat.js.map +1 -1
  71. package/src/lib/jobs/ai-jobs-notify.d.ts +66 -1
  72. package/src/lib/jobs/ai-jobs-notify.js +136 -3
  73. package/src/lib/jobs/ai-jobs-notify.js.map +1 -1
  74. package/src/lib/jobs/ai-layout-stock-photos.d.ts +59 -4
  75. package/src/lib/jobs/ai-layout-stock-photos.js +897 -81
  76. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  77. package/src/lib/jobs/ai-product-image.d.ts +14 -0
  78. package/src/lib/jobs/ai-product-image.js +73 -21
  79. package/src/lib/jobs/ai-product-image.js.map +1 -1
  80. package/src/lib/jobs/ai-theme-brand-inputs.d.ts +9 -1
  81. package/src/lib/jobs/ai-theme-brand-inputs.js +28 -2
  82. package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -1
  83. package/src/lib/jobs/fixtures/ai-site-agl4065-datasets.d.ts +175 -0
  84. package/src/lib/jobs/fixtures/ai-site-agl4065-datasets.js +601 -0
  85. package/src/lib/jobs/fixtures/ai-site-agl4065-datasets.js.map +1 -0
  86. package/src/lib/jobs/fixtures/ai-site-agl4065-pages.d.ts +46 -0
  87. package/src/lib/jobs/fixtures/ai-site-agl4065-pages.js +2862 -0
  88. package/src/lib/jobs/fixtures/ai-site-agl4065-pages.js.map +1 -0
  89. package/src/lib/jobs/fixtures/ai-site-agl4065-plans.d.ts +74 -0
  90. package/src/lib/jobs/fixtures/ai-site-agl4065-plans.js +888 -0
  91. package/src/lib/jobs/fixtures/ai-site-agl4065-plans.js.map +1 -0
  92. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-judge.d.ts +29 -0
  93. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-judge.js +81 -0
  94. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-judge.js.map +1 -0
  95. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-recordings.d.ts +87 -0
  96. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-recordings.js +225 -0
  97. package/src/lib/jobs/fixtures/ai-stock-photo-agl4065-recordings.js.map +1 -0
  98. package/src/lib/layout-language/ai-layout-compiler.d.ts +11 -0
  99. package/src/lib/layout-language/ai-layout-compiler.js +194 -18
  100. package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
  101. package/src/lib/layout-language/ai-layout-copy.d.ts +37 -0
  102. package/src/lib/layout-language/ai-layout-copy.js +383 -3
  103. package/src/lib/layout-language/ai-layout-copy.js.map +1 -1
  104. package/src/lib/layout-language/ai-layout-design.d.ts +19 -0
  105. package/src/lib/layout-language/ai-layout-design.js +31 -11
  106. package/src/lib/layout-language/ai-layout-design.js.map +1 -1
  107. package/src/lib/layout-language/ai-layout-listings.d.ts +7 -1
  108. package/src/lib/layout-language/ai-layout-listings.js +9 -1
  109. package/src/lib/layout-language/ai-layout-listings.js.map +1 -1
  110. package/src/lib/layout-language/ai-layout-pictures.d.ts +30 -0
  111. package/src/lib/layout-language/ai-layout-pictures.js +131 -3
  112. package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
  113. package/src/lib/layout-language/ai-layout-storefront.d.ts +18 -4
  114. package/src/lib/layout-language/ai-layout-storefront.js +100 -20
  115. package/src/lib/layout-language/ai-layout-storefront.js.map +1 -1
  116. package/src/lib/model/ai-build-job.d.ts +7 -0
  117. package/src/lib/model/ai-build-job.js +36 -7
  118. package/src/lib/model/ai-build-job.js.map +1 -1
  119. package/src/lib/model/ai-build-plan.d.ts +28 -4
  120. package/src/lib/model/ai-build-plan.js +49 -9
  121. package/src/lib/model/ai-build-plan.js.map +1 -1
  122. package/src/lib/model/ai-build-progress.js +3 -1
  123. package/src/lib/model/ai-build-progress.js.map +1 -1
  124. package/src/lib/model/ai-job-notice.d.ts +8 -0
  125. package/src/lib/model/ai-job-notice.js +33 -0
  126. package/src/lib/model/ai-job-notice.js.map +1 -1
  127. package/src/lib/model/ai-job-plan-lines.d.ts +2 -1
  128. package/src/lib/model/ai-job-plan-lines.js +6 -1
  129. package/src/lib/model/ai-job-plan-lines.js.map +1 -1
  130. package/src/lib/model/ai-jobs.types.d.ts +8 -0
  131. package/src/lib/model/ai-jobs.types.js.map +1 -1
  132. package/src/lib/model/ai-permissions.d.ts +13 -0
  133. package/src/lib/model/ai-permissions.js +29 -1
  134. package/src/lib/model/ai-permissions.js.map +1 -1
  135. package/src/lib/model/ai-products.d.ts +18 -0
  136. package/src/lib/model/ai-products.js +32 -0
  137. package/src/lib/model/ai-products.js.map +1 -1
  138. package/src/lib/model/ai-site-inspiration.d.ts +3 -2
  139. package/src/lib/model/ai-site-inspiration.js +3 -2
  140. package/src/lib/model/ai-site-inspiration.js.map +1 -1
  141. package/src/lib/plugin.js +4 -13
  142. package/src/lib/plugin.js.map +1 -1
  143. package/src/lib/providers/anthropic.js +9 -2
  144. package/src/lib/providers/anthropic.js.map +1 -1
  145. package/src/lib/providers/catalog.js +14 -5
  146. package/src/lib/providers/catalog.js.map +1 -1
  147. package/src/lib/providers/contract.d.ts +24 -1
  148. package/src/lib/providers/contract.js.map +1 -1
  149. package/src/lib/providers/routing.js +5 -2
  150. package/src/lib/providers/routing.js.map +1 -1
  151. package/src/lib/runtime/ai-dataset-generation.d.ts +99 -1
  152. package/src/lib/runtime/ai-dataset-generation.js +251 -3
  153. package/src/lib/runtime/ai-dataset-generation.js.map +1 -1
  154. package/src/lib/runtime/ai-dev-replay.d.ts +1 -0
  155. package/src/lib/runtime/ai-dev-replay.js +4 -2
  156. package/src/lib/runtime/ai-dev-replay.js.map +1 -1
  157. package/src/lib/runtime/ai-doctrine-validators.d.ts +47 -3
  158. package/src/lib/runtime/ai-doctrine-validators.js +343 -27
  159. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
  160. package/src/lib/runtime/ai-doctrine.js +8 -2
  161. package/src/lib/runtime/ai-doctrine.js.map +1 -1
  162. package/src/lib/runtime/ai-icon-library.d.ts +27 -1
  163. package/src/lib/runtime/ai-icon-library.js +30 -3
  164. package/src/lib/runtime/ai-icon-library.js.map +1 -1
  165. package/src/lib/runtime/ai-products-generation.d.ts +11 -1
  166. package/src/lib/runtime/ai-products-generation.js +51 -4
  167. package/src/lib/runtime/ai-products-generation.js.map +1 -1
  168. package/src/lib/runtime/assist-answer-cache.d.ts +2 -0
  169. package/src/lib/runtime/assist-answer-cache.js +5 -2
  170. package/src/lib/runtime/assist-answer-cache.js.map +1 -1
  171. package/src/lib/server/ai-allotments.js +7 -2
  172. package/src/lib/server/ai-allotments.js.map +1 -1
  173. package/src/lib/server/ai-experiment-versions.js +5 -5
  174. package/src/lib/server/ai-experiment-versions.js.map +1 -1
  175. package/src/lib/server/ai-host-permissions-roster.d.ts +25 -0
  176. package/src/lib/server/ai-host-permissions-roster.js +33 -0
  177. package/src/lib/server/ai-host-permissions-roster.js.map +1 -0
  178. package/src/lib/server/ai-host-permissions.js +8 -6
  179. package/src/lib/server/ai-host-permissions.js.map +1 -1
  180. package/src/lib/server/ai-image-reads-route.d.ts +17 -0
  181. package/src/lib/server/ai-image-reads-route.js +106 -0
  182. package/src/lib/server/ai-image-reads-route.js.map +1 -0
  183. package/src/lib/server/ai-seo-apply.js +5 -5
  184. package/src/lib/server/ai-seo-apply.js.map +1 -1
  185. package/src/lib/server/ai-site-import-route.js +7 -4
  186. package/src/lib/server/ai-site-import-route.js.map +1 -1
  187. package/src/lib/server/assist-build.js +1 -0
  188. package/src/lib/server/assist-build.js.map +1 -1
  189. package/src/lib/server/assist-chat.d.ts +11 -7
  190. package/src/lib/server/assist-chat.js +185 -48
  191. package/src/lib/server/assist-chat.js.map +1 -1
  192. package/src/lib/server/assist-docs-query.d.ts +51 -0
  193. package/src/lib/server/assist-docs-query.js +57 -0
  194. package/src/lib/server/assist-docs-query.js.map +1 -0
  195. package/src/lib/server/assist-jobs-context.d.ts +102 -0
  196. package/src/lib/server/assist-jobs-context.js +227 -0
  197. package/src/lib/server/assist-jobs-context.js.map +1 -0
  198. package/src/lib/server/assist-view-context.d.ts +8 -4
  199. package/src/lib/server/assist-view-context.js +12 -7
  200. package/src/lib/server/assist-view-context.js.map +1 -1
  201. package/src/lib/server.js +12 -0
  202. package/src/lib/server.js.map +1 -1
  203. package/src/lib/tools/ai-dataset-tool.d.ts +11 -1
  204. package/src/lib/tools/ai-dataset-tool.js +24 -7
  205. package/src/lib/tools/ai-dataset-tool.js.map +1 -1
  206. package/src/lib/tools/ai-duplicate-resource-tool.js +5 -6
  207. package/src/lib/tools/ai-duplicate-resource-tool.js.map +1 -1
  208. package/src/lib/components/ai-collaborator-permissions-column.component.d.ts +0 -32
  209. package/src/lib/components/ai-collaborator-permissions-column.component.js +0 -132
  210. 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,29 @@
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 { AiLayoutPictureSlot } from '../../layout-language/ai-layout-pictures';
18
+ import { type AiStockJudgement, type AiStockSearch, type AiStockSiteTerms } from '../ai-layout-stock-photos';
19
+ /**
20
+ * How the stock photo source judges each of a slot's own searches (AGL-4065),
21
+ * as its `judgementOf` builds it from the search and the site's terms: what
22
+ * the AGL-4065 replays hold a recorded photo to, search by search.
23
+ */
24
+ export declare function aiAgl4065Judgement(terms: AiStockSiteTerms, slot: Pick<AiLayoutPictureSlot, 'role'>, search: AiStockSearch, subject: string): AiStockJudgement;
25
+ /** A slot's own searches, each with its judgement. */
26
+ export declare function aiAgl4065Searches(terms: AiStockSiteTerms, slot: AiLayoutPictureSlot, sectionName: string): Array<{
27
+ search: AiStockSearch;
28
+ judgement: AiStockJudgement;
29
+ }>;
@@ -0,0 +1,81 @@
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
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ import { aiStockProductSearches, aiStockSearchesFor, aiStockSlotPart, aiStockSubjectWords } from "../ai-layout-stock-photos.js";
18
+ /**
19
+ * How the stock photo source judges each of a slot's own searches (AGL-4065),
20
+ * as its `judgementOf` builds it from the search and the site's terms: what
21
+ * the AGL-4065 replays hold a recorded photo to, search by search.
22
+ */ export function aiAgl4065Judgement(terms, slot, search, subject) {
23
+ var _search_subject, _search_shun;
24
+ var _search_shun1, _search_leadAny, _search_refuse, _search_needs, _search_refuseLead;
25
+ return _extends({
26
+ subject: (_search_subject = search.subject) != null ? _search_subject : search.broad ? '' : subject,
27
+ domain: terms.domain
28
+ }, terms.lead ? {
29
+ world: terms.lead
30
+ } : {}, {
31
+ strict: slot.role === 'gallery' && !search.broad || !!search.requires || !!search.strict,
32
+ named: terms.named,
33
+ rivals: terms.rivals
34
+ }, terms.shun.length || ((_search_shun1 = search.shun) == null ? void 0 : _search_shun1.length) ? {
35
+ shun: [
36
+ ...new Set([
37
+ ...terms.shun,
38
+ ...(_search_shun = search.shun) != null ? _search_shun : []
39
+ ])
40
+ ]
41
+ } : {}, terms.shunLead.length ? {
42
+ shunLead: terms.shunLead
43
+ } : {}, search.product ? {
44
+ product: true
45
+ } : {}, ((_search_leadAny = search.leadAny) == null ? void 0 : _search_leadAny.length) ? {
46
+ leadAny: search.leadAny
47
+ } : {}, search.requires ? {
48
+ requires: search.requires
49
+ } : {}, search.category ? {
50
+ category: search.category
51
+ } : {}, search.object ? {
52
+ object: search.object
53
+ } : {}, search.kin ? {
54
+ kin: search.kin
55
+ } : {}, search.lead ? {
56
+ lead: true
57
+ } : {}, search.leadWorld ? {
58
+ leadWorld: true
59
+ } : {}, search.first ? {
60
+ first: true
61
+ } : {}, ((_search_refuse = search.refuse) == null ? void 0 : _search_refuse.length) ? {
62
+ refuse: search.refuse
63
+ } : {}, ((_search_needs = search.needs) == null ? void 0 : _search_needs.length) ? {
64
+ needs: search.needs
65
+ } : {}, ((_search_refuseLead = search.refuseLead) == null ? void 0 : _search_refuseLead.length) ? {
66
+ refuseLead: search.refuseLead
67
+ } : {});
68
+ }
69
+ /** A slot's own searches, each with its judgement. */ export function aiAgl4065Searches(terms, slot, sectionName) {
70
+ const subject = aiStockSubjectWords(slot.alt, sectionName);
71
+ const searches = slot.product ? aiStockProductSearches(slot, terms.craft, terms.domain, {
72
+ broad: terms.broad,
73
+ core: terms.core
74
+ }) : aiStockSearchesFor(slot, terms, subject, aiStockSlotPart(slot, sectionName), sectionName);
75
+ return searches.map((search)=>({
76
+ search,
77
+ judgement: aiAgl4065Judgement(terms, slot, search, subject)
78
+ }));
79
+ }
80
+
81
+ //# sourceMappingURL=ai-stock-photo-agl4065-judge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-stock-photo-agl4065-judge.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 { AiLayoutPictureSlot } from '../../layout-language/ai-layout-pictures'\nimport {\n aiStockProductSearches,\n aiStockSearchesFor,\n aiStockSlotPart,\n aiStockSubjectWords,\n type AiStockJudgement,\n type AiStockSearch,\n type AiStockSiteTerms,\n} from '../ai-layout-stock-photos'\n\n/**\n * How the stock photo source judges each of a slot's own searches (AGL-4065),\n * as its `judgementOf` builds it from the search and the site's terms: what\n * the AGL-4065 replays hold a recorded photo to, search by search.\n */\nexport function aiAgl4065Judgement(\n terms: AiStockSiteTerms,\n slot: Pick<AiLayoutPictureSlot, 'role'>,\n search: AiStockSearch,\n subject: string,\n): AiStockJudgement {\n return {\n subject: search.subject ?? (search.broad ? '' : subject),\n domain: terms.domain,\n ...(terms.lead ? { world: terms.lead } : {}),\n strict: (slot.role === 'gallery' && !search.broad) || !!search.requires || !!search.strict,\n named: terms.named,\n rivals: terms.rivals,\n ...(terms.shun.length || search.shun?.length ? { shun: [...new Set([...terms.shun, ...(search.shun ?? [])])] } : {}),\n ...(terms.shunLead.length ? { shunLead: terms.shunLead } : {}),\n ...(search.product ? { product: true } : {}),\n ...(search.leadAny?.length ? { leadAny: search.leadAny } : {}),\n ...(search.requires ? { requires: search.requires } : {}),\n ...(search.category ? { category: search.category } : {}),\n ...(search.object ? { object: search.object } : {}),\n ...(search.kin ? { kin: search.kin } : {}),\n ...(search.lead ? { lead: true } : {}),\n ...(search.leadWorld ? { leadWorld: true } : {}),\n ...(search.first ? { first: true } : {}),\n ...(search.refuse?.length ? { refuse: search.refuse } : {}),\n ...(search.needs?.length ? { needs: search.needs } : {}),\n ...(search.refuseLead?.length ? { refuseLead: search.refuseLead } : {}),\n }\n}\n\n/** A slot's own searches, each with its judgement. */\nexport function aiAgl4065Searches(\n terms: AiStockSiteTerms,\n slot: AiLayoutPictureSlot,\n sectionName: string,\n): Array<{ search: AiStockSearch; judgement: AiStockJudgement }> {\n const subject = aiStockSubjectWords(slot.alt, sectionName)\n const searches = slot.product\n ? aiStockProductSearches(slot, terms.craft, terms.domain, { broad: terms.broad, core: terms.core })\n : aiStockSearchesFor(slot, terms, subject, aiStockSlotPart(slot, sectionName), sectionName)\n return searches.map((search) => ({ search, judgement: aiAgl4065Judgement(terms, slot, search, subject) }))\n}\n"],"names":["aiStockProductSearches","aiStockSearchesFor","aiStockSlotPart","aiStockSubjectWords","aiAgl4065Judgement","terms","slot","search","subject","broad","domain","lead","world","strict","role","requires","named","rivals","shun","length","Set","shunLead","product","leadAny","category","object","kin","leadWorld","first","refuse","needs","refuseLead","aiAgl4065Searches","sectionName","alt","searches","craft","core","map","judgement"],"mappings":"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"}
@@ -0,0 +1,87 @@
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 { StockPhoto } from '@aglyn/aglyn/plugin-manager/stock-photo-provider';
18
+ /** `motocross race team`: every page's cover hero (the first, 4462875, on all four), and eight of the "Race events" records' covers. */
19
+ export declare const MOTOCROSS_RACE_TEAM: StockPhoto[];
20
+ /** `team`: the Riders page's cover, once its own search found nothing it took. */
21
+ export declare const TEAM: StockPhoto[];
22
+ /** `team ready ride`: the "Ready to ride with us?" closing picture (vertical). */
23
+ export declare const TEAM_READY_RIDE: StockPhoto[];
24
+ /** `upcoming race`: two "Race events" records' covers, named "Upcoming race 1 (details to be added)" and on. */
25
+ export declare const UPCOMING_RACE: StockPhoto[];
26
+ /** `motorcycle`: every page's picture searched it, the home hero (vertical) first. */
27
+ export declare const MOTORCYCLE: StockPhoto[];
28
+ /** `dirt bike`: the heroes of the home, about, special-order and contact pages. */
29
+ export declare const DIRT_BIKE: StockPhoto[];
30
+ /** `parts`: the home's "Shop by collection" tiles "Parts for the bike" and "Parts for the ranch". */
31
+ export declare const PARTS: StockPhoto[];
32
+ /** `part`: the product "Aftermarket Dirt Bike Part". */
33
+ export declare const PART: StockPhoto[];
34
+ /** `describe part`: the special-order step "Describe the part". */
35
+ export declare const DESCRIBE_PART: StockPhoto[];
36
+ /** `atv tire`: the product "ATV Tire". */
37
+ export declare const ATV_TIRE: StockPhoto[];
38
+ /** `riding gear`: the product "Riding Gear Item". */
39
+ export declare const RIDING_GEAR: StockPhoto[];
40
+ /** `bike parts order`: the product "OEM Dirt Bike Parts Order". */
41
+ export declare const BIKE_PARTS_ORDER: StockPhoto[];
42
+ /** `atv parts order`: the product "OEM ATV Parts Order". */
43
+ export declare const ATV_PARTS_ORDER: StockPhoto[];
44
+ /** `bike it`: the special-order step "Pick it up in store". */
45
+ export declare const BIKE_IT: StockPhoto[];
46
+ /** `bike it will fit`: the closing band "Not sure it will fit?". */
47
+ export declare const BIKE_IT_WILL_FIT: StockPhoto[];
48
+ /** `bike tell us machine`: the special-order step "Tell us your machine". */
49
+ export declare const BIKE_TELL_US_MACHINE: StockPhoto[];
50
+ /** `bike visit shop`: the about page's "Visit the shop" band. */
51
+ export declare const BIKE_VISIT_SHOP: StockPhoto[];
52
+ /** `bike we source it`: the special-order step "We source it". */
53
+ export declare const BIKE_WE_SOURCE_IT: StockPhoto[];
54
+ /** `tires`: the collection tile "Tires for every track and trail". */
55
+ export declare const TIRES: StockPhoto[];
56
+ /** `dirt bike tire`: the product "Dirt Bike Tire". */
57
+ export declare const DIRT_BIKE_TIRE: StockPhoto[];
58
+ /** `gear`: the collection tile "Gear for ride day". */
59
+ export declare const GEAR: StockPhoto[];
60
+ /** `handyman`: the services, about, contact and working-together covers, and a closing band. */
61
+ export declare const HANDYMAN: StockPhoto[];
62
+ /** `drywall`: a services record's cover, its name read as "drywall". */
63
+ export declare const DRYWALL: StockPhoto[];
64
+ /** `handyman describe job`: the closing band "Call to action: describe your job". */
65
+ export declare const HANDYMAN_DESCRIBE_JOB: StockPhoto[];
66
+ /** `doors`: a services record's cover, its name read as "doors". */
67
+ export declare const DOORS: StockPhoto[];
68
+ /** `rental unit repairs`: a services record's cover. */
69
+ export declare const RENTAL_UNIT_REPAIRS: StockPhoto[];
70
+ /** `landscaping`: the "Irrigation repair and tune-ups" picture. */
71
+ export declare const LANDSCAPING: StockPhoto[];
72
+ /** `team meeting office`: the business kind's second widened search; the contact and about covers. */
73
+ export declare const TEAM_MEETING_OFFICE: StockPhoto[];
74
+ /** `caterer`: the craft's broad search once "catering" was read as the craft: the home, catering and menu heroes. */
75
+ export declare const CATERER: StockPhoto[];
76
+ /** `chef cooking`: the catering craft's maker at work, for the trailer's story. */
77
+ export declare const CHEF_COOKING: StockPhoto[];
78
+ /** `catering potato`: the menu record "Potato and egg breakfast taco". */
79
+ export declare const CATERING_POTATO: StockPhoto[];
80
+ /** `breakfast taco`: the visit page's hero. */
81
+ export declare const BREAKFAST_TACO: StockPhoto[];
82
+ /** `asada street taco`, `pastor street taco`, `chicken street taco`, `carnitas street taco`: the street taco records, and the story hero. */
83
+ export declare const STREET_TACOS: StockPhoto[];
84
+ /** `catering bacon`: a menu record read as "bacon" and qualified by the craft. */
85
+ export declare const CATERING_BACON: StockPhoto[];
86
+ /** Every photo above, by its Pixabay id. */
87
+ export declare const AGL4065_HITS: ReadonlyMap<string, StockPhoto>;
@@ -0,0 +1,225 @@
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
+ * WHAT PIXABAY GAVE SIX BOOTH-KIT SITES ON 2026-10-25 (AGL-4065), AS THEIR
18
+ * MEDIA LIBRARIES RECORD IT.
19
+ *
20
+ * Six guided starts in the test workspace, one per fictional business:
21
+ * Bluebonnet Yard & Landscape (landscaping), Rut Runners Racing (an amateur
22
+ * motocross team), Holeshot Moto Repair (motorcycle and dirt bike repair),
23
+ * Berm & Bolt Moto Parts (dirt bike and ATV parts), Two Oaks Handyman and Pit
24
+ * Row Tacos (a taco trailer). The provider's 24-hour search cache had expired
25
+ * by 2026-10-28, so the answers are read back from what each site's library
26
+ * holds for every photo it copied: its Pixabay id, its stored size, its page
27
+ * address and the search that found it (`stockPhoto.query`).
28
+ *
29
+ * Each list is the photos one search placed, by that search's words, in the
30
+ * order the libraries hold them: a part of what Pixabay answered, never more.
31
+ * A photo's tags are the words of its page address, which Pixabay builds from
32
+ * its leading tags, grouped as the alt text the start wrote from them reads
33
+ * ("A race car and a motorsport" is "race car", "motorsport"); its later
34
+ * tags are not recorded. A search not listed here was not sent on 2026-10-25,
35
+ * and a replay answers it with nothing. No contributor, no contact details.
36
+ */ const hit = (id, width, height, slug, tags)=>({
37
+ provider: 'pixabay',
38
+ id: String(id),
39
+ width,
40
+ height,
41
+ pageUrl: `https://pixabay.com/photos/${slug}-${id}/`,
42
+ photographer: 'A Pixabay contributor',
43
+ tags: tags.split(', '),
44
+ downloadUrl: `https://pixabay.com/get/g${id}_1280.jpg`
45
+ });
46
+ // ── Rut Runners Racing: "Amateur motocross race team: rider profiles, …" ──
47
+ /** `motocross race team`: every page's cover hero (the first, 4462875, on all four), and eight of the "Race events" records' covers. */ export const MOTOCROSS_RACE_TEAM = [
48
+ hit(4462875, 1280, 853, 'race-car-motorsport-pit-lane', 'race car, motorsport, pit lane'),
49
+ hit(10135205, 1280, 912, 'motorcycle-motocross-race-speed', 'motorcycle, motocross, race, speed'),
50
+ hit(7690696, 1280, 853, 'motorcycle-motocross-speed-ktm', 'motorcycle, motocross, speed, ktm'),
51
+ hit(4948269, 1280, 853, 'motocross-race-sport-speed-extreme', 'motocross, race, sport, speed, extreme'),
52
+ hit(4287241, 1280, 853, 'speedway-motorcycle-motorcycle-race', 'speedway, motorcycle, motorcycle race'),
53
+ hit(7097693, 1280, 853, 'motocross-motorbike-bikers-enduro', 'motocross, motorbike, bikers, enduro'),
54
+ hit(8122941, 1280, 853, 'training-motocross-motorcycle-sport', 'training, motocross, motorcycle, sport'),
55
+ hit(6380133, 1280, 853, 'motorcycle-rider-motocross-dust', 'motorcycle, rider, motocross, dust'),
56
+ hit(5546581, 1280, 868, 'motocross-race-sports-racing', 'motocross, race, sports, racing')
57
+ ];
58
+ /** `team`: the Riders page's cover, once its own search found nothing it took. */ export const TEAM = [
59
+ hit(386673, 1280, 960, 'team-group-people-motivation', 'team, group, people, motivation')
60
+ ];
61
+ /** `team ready ride`: the "Ready to ride with us?" closing picture (vertical). */ export const TEAM_READY_RIDE = [
62
+ hit(7594065, 853, 1280, 'horse-riding-ride-out-terrain-horse', 'horse riding, ride out, terrain, horse')
63
+ ];
64
+ /** `upcoming race`: two "Race events" records' covers, named "Upcoming race 1 (details to be added)" and on. */ export const UPCOMING_RACE = [
65
+ hit(1851269, 1280, 841, 'cyclists-race-bicycles-bikes', 'cyclists, race, bicycles, bikes'),
66
+ hit(394205, 1280, 853, 'horses-horse-tradition-rider', 'horses, horse, tradition, rider')
67
+ ];
68
+ // ── Holeshot Moto Repair: "Motorcycle and dirt bike repair shop: …" ──
69
+ /** `motorcycle`: every page's picture searched it, the home hero (vertical) first. */ export const MOTORCYCLE = [
70
+ hit(7749462, 853, 1280, 'indian-motorcycles-motorcycle', 'indian motorcycles, motorcycle'),
71
+ hit(459594, 1280, 960, 'motorcycle-engine-metal-motor', 'motorcycle, engine, metal, motor'),
72
+ hit(7356527, 853, 1280, 'motorcycle-moped-old-motorcycle', 'motorcycle, moped, old motorcycle'),
73
+ hit(7425471, 853, 1280, 'motorcycle-scooter-speed-honda', 'motorcycle, scooter, speed, honda'),
74
+ hit(1084694, 1280, 844, 'motorcycle-race-race-track', 'motorcycle, race, race track')
75
+ ];
76
+ // ── Berm & Bolt Moto Parts: "Dirt bike and ATV parts shop: …" ──
77
+ /** `dirt bike`: the heroes of the home, about, special-order and contact pages. */ export const DIRT_BIKE = [
78
+ hit(4187393, 1280, 853, 'bike-enduro-extreme-downhill-sport', 'bike, enduro, extreme, downhill, sport'),
79
+ hit(209489, 1280, 851, 'dirt-bike-motorcycle-jump-autumn', 'dirt bike, motorcycle, jump, autumn'),
80
+ hit(6594869, 1280, 859, 'dirt-bike-dirt-quad-planet-space', 'dirt bike, dirt, quad, planet, space'),
81
+ hit(6938660, 1280, 853, 'dirt-bike-countryside-boys', 'dirt bike, countryside, boys'),
82
+ hit(1868996, 1280, 874, 'dirt-bike-bike-rider-motocross', 'dirt bike, bike, rider, motocross'),
83
+ hit(330815, 1280, 851, 'dirt-bike-motocross-motorcycle', 'dirt bike, motocross, motorcycle'),
84
+ hit(171156, 848, 1280, 'dirt-bike-motocross-bike-motorcycle', 'dirt bike, motocross, bike, motorcycle'),
85
+ hit(4500339, 1280, 853, 'bike-racing-motocross-motorsport', 'bike, racing, motocross, motorsport')
86
+ ];
87
+ /** `parts`: the home's "Shop by collection" tiles "Parts for the bike" and "Parts for the ranch". */ export const PARTS = [
88
+ hit(4612334, 848, 1280, 'river-part-canoe-blue', 'river, part, canoe, blue'),
89
+ hit(4648358, 1280, 853, 'machined-parts-wrench-part-industry', 'machined parts, wrench, part, industry')
90
+ ];
91
+ /** `part`: the product "Aftermarket Dirt Bike Part". */ export const PART = [
92
+ hit(4753080, 853, 1280, 'auto-parts-belt-car-parts', 'auto parts, belt, car parts')
93
+ ];
94
+ /** `describe part`: the special-order step "Describe the part". */ export const DESCRIBE_PART = [
95
+ hit(443674, 1280, 844, 'gear-workshop-spare-part-metal', 'gear, workshop, spare part, metal')
96
+ ];
97
+ /** `atv tire`: the product "ATV Tire". */ export const ATV_TIRE = [
98
+ hit(3267701, 960, 1280, 'tire-tread-car-tire-rubber-pattern', 'tire, tread, car tire, rubber, pattern')
99
+ ];
100
+ /** `riding gear`: the product "Riding Gear Item". */ export const RIDING_GEAR = [
101
+ hit(408364, 1039, 1280, 'gear-mechanics-bikes-transmission', 'gear, mechanics, bikes, transmission')
102
+ ];
103
+ /** `bike parts order`: the product "OEM Dirt Bike Parts Order". */ export const BIKE_PARTS_ORDER = [
104
+ hit(4756327, 853, 1280, 'delivery-man-food-service-order', 'delivery man, food, service, order')
105
+ ];
106
+ /** `atv parts order`: the product "OEM ATV Parts Order". */ export const ATV_PARTS_ORDER = [
107
+ hit(4450390, 960, 1280, 'trees-sync-order-aligned-shapes', 'trees, sync, order, aligned, shapes')
108
+ ];
109
+ /** `bike it`: the special-order step "Pick it up in store". */ export const BIKE_IT = [
110
+ hit(4367285, 1280, 853, 'cycling-cyclists-cycle-racing', 'cycling, cyclists, cycle racing')
111
+ ];
112
+ /** `bike it will fit`: the closing band "Not sure it will fit?". */ export const BIKE_IT_WILL_FIT = [
113
+ hit(7576306, 1280, 960, 'helmet-bicycle-woman-cyclist', 'helmet, bicycle, woman, cyclist')
114
+ ];
115
+ /** `bike tell us machine`: the special-order step "Tell us your machine". */ export const BIKE_TELL_US_MACHINE = [
116
+ hit(5309140, 1280, 850, 'machine-design-bike-technology', 'machine, design, bike, technology')
117
+ ];
118
+ /** `bike visit shop`: the about page's "Visit the shop" band. */ export const BIKE_VISIT_SHOP = [
119
+ hit(7006089, 1280, 853, 'scooter-store-shop-street-ride', 'scooter, store, shop, street, ride')
120
+ ];
121
+ /** `bike we source it`: the special-order step "We source it". */ export const BIKE_WE_SOURCE_IT = [
122
+ hit(4369056, 1280, 853, 'bike-bike-race-helmet-cyclists', 'bike, bike race, helmet, cyclists')
123
+ ];
124
+ /** `tires`: the collection tile "Tires for every track and trail". */ export const TIRES = [
125
+ hit(4891682, 960, 1280, 'tire-highway-wheel-tires-wheels', 'tire, highway, wheel, tires, wheels')
126
+ ];
127
+ /** `dirt bike tire`: the product "Dirt Bike Tire". */ export const DIRT_BIKE_TIRE = [
128
+ hit(7284019, 853, 1280, 'bike-tire-motorcycle-motocross', 'bike tire, motorcycle, motocross')
129
+ ];
130
+ /** `gear`: the collection tile "Gear for ride day". */ export const GEAR = [
131
+ hit(2291916, 1280, 853, 'gears-bicycle-chain-transmission', 'gears, bicycle, chain, transmission')
132
+ ];
133
+ // ── Two Oaks Handyman: "Handyman business: home repairs, drywall, …" ──
134
+ /** `handyman`: the services, about, contact and working-together covers, and a closing band. */ export const HANDYMAN = [
135
+ hit(6850368, 1280, 853, 'woodworking-carpenter-handyman', 'woodworking, carpenter, handyman'),
136
+ hit(3094035, 1280, 780, 'handyman-construction-site-workers', 'handyman, construction site, workers'),
137
+ hit(3546194, 1280, 853, 'handyman-furniture-assembly-drill', 'handyman, furniture assembly, drill'),
138
+ hit(7671904, 1280, 763, 'wood-handyman-recycling-greece', 'wood, handyman, recycling, greece'),
139
+ hit(6809403, 1280, 855, 'handyman-driller-workman-work', 'handyman, driller, workman, work')
140
+ ];
141
+ /** `drywall`: a services record's cover, its name read as "drywall". */ export const DRYWALL = [
142
+ hit(3294517, 1280, 854, 'architecture-family-drywall-house', 'architecture, family, drywall, house')
143
+ ];
144
+ /** `handyman describe job`: the closing band "Call to action: describe your job". */ export const HANDYMAN_DESCRIBE_JOB = [
145
+ hit(2904780, 1280, 854, 'dream-job-application-job-request', 'dream job, application, job request')
146
+ ];
147
+ /** `doors`: a services record's cover, its name read as "doors". */ export const DOORS = [
148
+ hit(2606818, 1280, 853, 'house-home-door-sidewalk', 'house, home, door, sidewalk')
149
+ ];
150
+ /** `rental unit repairs`: a services record's cover. */ export const RENTAL_UNIT_REPAIRS = [
151
+ hit(840835, 1280, 853, 'plumbing-pipe-wrenches-plumber', 'plumbing, pipe, wrenches, plumber')
152
+ ];
153
+ // ── Bluebonnet Yard & Landscape: "Landscaping company: lawn care, …" ──
154
+ /** `landscaping`: the "Irrigation repair and tune-ups" picture. */ export const LANDSCAPING = [
155
+ hit(7079355, 1280, 853, 'zen-garden-sand-plants-leaves-bush', 'zen garden, sand, plants, leaves, bush')
156
+ ];
157
+ /** `team meeting office`: the business kind's second widened search; the contact and about covers. */ export const TEAM_MEETING_OFFICE = [
158
+ hit(10213524, 1280, 717, 'team-collaboration-meeting-business', 'team, collaboration, meeting, business'),
159
+ hit(10503569, 1280, 714, 'business-meeting-teamwork-office', 'business meeting, teamwork, office')
160
+ ];
161
+ // ── Pit Row Tacos: "Taco food trailer: street and breakfast tacos at …" ──
162
+ /** `caterer`: the craft's broad search once "catering" was read as the craft: the home, catering and menu heroes. */ export const CATERER = [
163
+ hit(4797476, 1280, 854, 'food-hotel-buffet-holiday', 'food, hotel, buffet, holiday'),
164
+ hit(7165148, 1280, 853, 'buffet-catering-cafeteria-kitchen', 'buffet, catering, cafeteria, kitchen'),
165
+ hit(315691, 1280, 853, 'buffet-indian-food-spices-lunch', 'buffet, indian food, spices, lunch')
166
+ ];
167
+ /** `chef cooking`: the catering craft's maker at work, for the trailer's story. */ export const CHEF_COOKING = [
168
+ hit(4625935, 1280, 819, 'chef-catering-food', 'chef, catering, food')
169
+ ];
170
+ /** `catering potato`: the menu record "Potato and egg breakfast taco". */ export const CATERING_POTATO = [
171
+ hit(3440360, 1280, 853, 'potato-new-harvest-nature', 'potato, new harvest, nature')
172
+ ];
173
+ /** `breakfast taco`: the visit page's hero. */ export const BREAKFAST_TACO = [
174
+ hit(4942004, 1280, 960, 'tacos-breakfast-tacos-tortilla', 'tacos, breakfast tacos, tortilla')
175
+ ];
176
+ /** `asada street taco`, `pastor street taco`, `chicken street taco`, `carnitas street taco`: the street taco records, and the story hero. */ export const STREET_TACOS = [
177
+ hit(4179895, 1280, 720, 'tacos-mexico-tortilla-food-taco', 'tacos, mexico, tortilla, food, taco'),
178
+ hit(4505032, 1280, 960, 'tacos-pastor-tacos-tacos-mexico', 'tacos, pastor, tacos mexico'),
179
+ hit(4511272, 1280, 851, 'tacos-food-chicken-mexican', 'tacos, food, chicken, mexican'),
180
+ hit(5932654, 1280, 853, 'tacos-tortilla-salsa-mexican-food', 'tacos, tortilla, salsa, mexican food')
181
+ ];
182
+ /** `catering bacon`: a menu record read as "bacon" and qualified by the craft. */ export const CATERING_BACON = [
183
+ hit(5755336, 1280, 853, 'bacon-egg-cup-dish-breakfast-food', 'bacon, egg cup, dish, breakfast food')
184
+ ];
185
+ /** Every photo above, by its Pixabay id. */ export const AGL4065_HITS = new Map([
186
+ MOTOCROSS_RACE_TEAM,
187
+ TEAM,
188
+ TEAM_READY_RIDE,
189
+ UPCOMING_RACE,
190
+ MOTORCYCLE,
191
+ DIRT_BIKE,
192
+ PARTS,
193
+ PART,
194
+ DESCRIBE_PART,
195
+ ATV_TIRE,
196
+ RIDING_GEAR,
197
+ BIKE_PARTS_ORDER,
198
+ ATV_PARTS_ORDER,
199
+ BIKE_IT,
200
+ BIKE_IT_WILL_FIT,
201
+ BIKE_TELL_US_MACHINE,
202
+ BIKE_VISIT_SHOP,
203
+ BIKE_WE_SOURCE_IT,
204
+ TIRES,
205
+ DIRT_BIKE_TIRE,
206
+ GEAR,
207
+ HANDYMAN,
208
+ DRYWALL,
209
+ HANDYMAN_DESCRIBE_JOB,
210
+ DOORS,
211
+ RENTAL_UNIT_REPAIRS,
212
+ LANDSCAPING,
213
+ TEAM_MEETING_OFFICE,
214
+ CATERER,
215
+ CHEF_COOKING,
216
+ CATERING_POTATO,
217
+ BREAKFAST_TACO,
218
+ STREET_TACOS,
219
+ CATERING_BACON
220
+ ].flat().map((photo)=>[
221
+ photo.id,
222
+ photo
223
+ ]));
224
+
225
+ //# sourceMappingURL=ai-stock-photo-agl4065-recordings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-stock-photo-agl4065-recordings.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 { StockPhoto } from '@aglyn/aglyn/plugin-manager/stock-photo-provider'\n\n/**\n * WHAT PIXABAY GAVE SIX BOOTH-KIT SITES ON 2026-10-25 (AGL-4065), AS THEIR\n * MEDIA LIBRARIES RECORD IT.\n *\n * Six guided starts in the test workspace, one per fictional business:\n * Bluebonnet Yard & Landscape (landscaping), Rut Runners Racing (an amateur\n * motocross team), Holeshot Moto Repair (motorcycle and dirt bike repair),\n * Berm & Bolt Moto Parts (dirt bike and ATV parts), Two Oaks Handyman and Pit\n * Row Tacos (a taco trailer). The provider's 24-hour search cache had expired\n * by 2026-10-28, so the answers are read back from what each site's library\n * holds for every photo it copied: its Pixabay id, its stored size, its page\n * address and the search that found it (`stockPhoto.query`).\n *\n * Each list is the photos one search placed, by that search's words, in the\n * order the libraries hold them: a part of what Pixabay answered, never more.\n * A photo's tags are the words of its page address, which Pixabay builds from\n * its leading tags, grouped as the alt text the start wrote from them reads\n * (\"A race car and a motorsport\" is \"race car\", \"motorsport\"); its later\n * tags are not recorded. A search not listed here was not sent on 2026-10-25,\n * and a replay answers it with nothing. No contributor, no contact details.\n */\n\nconst hit = (id: number, width: number, height: number, slug: string, tags: string): StockPhoto =>\n ({\n provider: 'pixabay',\n id: String(id),\n width,\n height,\n pageUrl: `https://pixabay.com/photos/${slug}-${id}/`,\n photographer: 'A Pixabay contributor',\n tags: tags.split(', '),\n downloadUrl: `https://pixabay.com/get/g${id}_1280.jpg`,\n }) as StockPhoto\n\n// ── Rut Runners Racing: \"Amateur motocross race team: rider profiles, …\" ──\n\n/** `motocross race team`: every page's cover hero (the first, 4462875, on all four), and eight of the \"Race events\" records' covers. */\nexport const MOTOCROSS_RACE_TEAM: StockPhoto[] = [\n hit(4462875, 1280, 853, 'race-car-motorsport-pit-lane', 'race car, motorsport, pit lane'),\n hit(10135205, 1280, 912, 'motorcycle-motocross-race-speed', 'motorcycle, motocross, race, speed'),\n hit(7690696, 1280, 853, 'motorcycle-motocross-speed-ktm', 'motorcycle, motocross, speed, ktm'),\n hit(4948269, 1280, 853, 'motocross-race-sport-speed-extreme', 'motocross, race, sport, speed, extreme'),\n hit(4287241, 1280, 853, 'speedway-motorcycle-motorcycle-race', 'speedway, motorcycle, motorcycle race'),\n hit(7097693, 1280, 853, 'motocross-motorbike-bikers-enduro', 'motocross, motorbike, bikers, enduro'),\n hit(8122941, 1280, 853, 'training-motocross-motorcycle-sport', 'training, motocross, motorcycle, sport'),\n hit(6380133, 1280, 853, 'motorcycle-rider-motocross-dust', 'motorcycle, rider, motocross, dust'),\n hit(5546581, 1280, 868, 'motocross-race-sports-racing', 'motocross, race, sports, racing'),\n]\n\n/** `team`: the Riders page's cover, once its own search found nothing it took. */\nexport const TEAM: StockPhoto[] = [hit(386673, 1280, 960, 'team-group-people-motivation', 'team, group, people, motivation')]\n\n/** `team ready ride`: the \"Ready to ride with us?\" closing picture (vertical). */\nexport const TEAM_READY_RIDE: StockPhoto[] = [\n hit(7594065, 853, 1280, 'horse-riding-ride-out-terrain-horse', 'horse riding, ride out, terrain, horse'),\n]\n\n/** `upcoming race`: two \"Race events\" records' covers, named \"Upcoming race 1 (details to be added)\" and on. */\nexport const UPCOMING_RACE: StockPhoto[] = [\n hit(1851269, 1280, 841, 'cyclists-race-bicycles-bikes', 'cyclists, race, bicycles, bikes'),\n hit(394205, 1280, 853, 'horses-horse-tradition-rider', 'horses, horse, tradition, rider'),\n]\n\n// ── Holeshot Moto Repair: \"Motorcycle and dirt bike repair shop: …\" ──\n\n/** `motorcycle`: every page's picture searched it, the home hero (vertical) first. */\nexport const MOTORCYCLE: StockPhoto[] = [\n hit(7749462, 853, 1280, 'indian-motorcycles-motorcycle', 'indian motorcycles, motorcycle'),\n hit(459594, 1280, 960, 'motorcycle-engine-metal-motor', 'motorcycle, engine, metal, motor'),\n hit(7356527, 853, 1280, 'motorcycle-moped-old-motorcycle', 'motorcycle, moped, old motorcycle'),\n hit(7425471, 853, 1280, 'motorcycle-scooter-speed-honda', 'motorcycle, scooter, speed, honda'),\n hit(1084694, 1280, 844, 'motorcycle-race-race-track', 'motorcycle, race, race track'),\n]\n\n// ── Berm & Bolt Moto Parts: \"Dirt bike and ATV parts shop: …\" ──\n\n/** `dirt bike`: the heroes of the home, about, special-order and contact pages. */\nexport const DIRT_BIKE: StockPhoto[] = [\n hit(4187393, 1280, 853, 'bike-enduro-extreme-downhill-sport', 'bike, enduro, extreme, downhill, sport'),\n hit(209489, 1280, 851, 'dirt-bike-motorcycle-jump-autumn', 'dirt bike, motorcycle, jump, autumn'),\n hit(6594869, 1280, 859, 'dirt-bike-dirt-quad-planet-space', 'dirt bike, dirt, quad, planet, space'),\n hit(6938660, 1280, 853, 'dirt-bike-countryside-boys', 'dirt bike, countryside, boys'),\n hit(1868996, 1280, 874, 'dirt-bike-bike-rider-motocross', 'dirt bike, bike, rider, motocross'),\n hit(330815, 1280, 851, 'dirt-bike-motocross-motorcycle', 'dirt bike, motocross, motorcycle'),\n hit(171156, 848, 1280, 'dirt-bike-motocross-bike-motorcycle', 'dirt bike, motocross, bike, motorcycle'),\n hit(4500339, 1280, 853, 'bike-racing-motocross-motorsport', 'bike, racing, motocross, motorsport'),\n]\n\n/** `parts`: the home's \"Shop by collection\" tiles \"Parts for the bike\" and \"Parts for the ranch\". */\nexport const PARTS: StockPhoto[] = [\n hit(4612334, 848, 1280, 'river-part-canoe-blue', 'river, part, canoe, blue'),\n hit(4648358, 1280, 853, 'machined-parts-wrench-part-industry', 'machined parts, wrench, part, industry'),\n]\n\n/** `part`: the product \"Aftermarket Dirt Bike Part\". */\nexport const PART: StockPhoto[] = [hit(4753080, 853, 1280, 'auto-parts-belt-car-parts', 'auto parts, belt, car parts')]\n\n/** `describe part`: the special-order step \"Describe the part\". */\nexport const DESCRIBE_PART: StockPhoto[] = [hit(443674, 1280, 844, 'gear-workshop-spare-part-metal', 'gear, workshop, spare part, metal')]\n\n/** `atv tire`: the product \"ATV Tire\". */\nexport const ATV_TIRE: StockPhoto[] = [\n hit(3267701, 960, 1280, 'tire-tread-car-tire-rubber-pattern', 'tire, tread, car tire, rubber, pattern'),\n]\n\n/** `riding gear`: the product \"Riding Gear Item\". */\nexport const RIDING_GEAR: StockPhoto[] = [\n hit(408364, 1039, 1280, 'gear-mechanics-bikes-transmission', 'gear, mechanics, bikes, transmission'),\n]\n\n/** `bike parts order`: the product \"OEM Dirt Bike Parts Order\". */\nexport const BIKE_PARTS_ORDER: StockPhoto[] = [\n hit(4756327, 853, 1280, 'delivery-man-food-service-order', 'delivery man, food, service, order'),\n]\n\n/** `atv parts order`: the product \"OEM ATV Parts Order\". */\nexport const ATV_PARTS_ORDER: StockPhoto[] = [\n hit(4450390, 960, 1280, 'trees-sync-order-aligned-shapes', 'trees, sync, order, aligned, shapes'),\n]\n\n/** `bike it`: the special-order step \"Pick it up in store\". */\nexport const BIKE_IT: StockPhoto[] = [hit(4367285, 1280, 853, 'cycling-cyclists-cycle-racing', 'cycling, cyclists, cycle racing')]\n\n/** `bike it will fit`: the closing band \"Not sure it will fit?\". */\nexport const BIKE_IT_WILL_FIT: StockPhoto[] = [\n hit(7576306, 1280, 960, 'helmet-bicycle-woman-cyclist', 'helmet, bicycle, woman, cyclist'),\n]\n\n/** `bike tell us machine`: the special-order step \"Tell us your machine\". */\nexport const BIKE_TELL_US_MACHINE: StockPhoto[] = [\n hit(5309140, 1280, 850, 'machine-design-bike-technology', 'machine, design, bike, technology'),\n]\n\n/** `bike visit shop`: the about page's \"Visit the shop\" band. */\nexport const BIKE_VISIT_SHOP: StockPhoto[] = [hit(7006089, 1280, 853, 'scooter-store-shop-street-ride', 'scooter, store, shop, street, ride')]\n\n/** `bike we source it`: the special-order step \"We source it\". */\nexport const BIKE_WE_SOURCE_IT: StockPhoto[] = [\n hit(4369056, 1280, 853, 'bike-bike-race-helmet-cyclists', 'bike, bike race, helmet, cyclists'),\n]\n\n/** `tires`: the collection tile \"Tires for every track and trail\". */\nexport const TIRES: StockPhoto[] = [hit(4891682, 960, 1280, 'tire-highway-wheel-tires-wheels', 'tire, highway, wheel, tires, wheels')]\n\n/** `dirt bike tire`: the product \"Dirt Bike Tire\". */\nexport const DIRT_BIKE_TIRE: StockPhoto[] = [\n hit(7284019, 853, 1280, 'bike-tire-motorcycle-motocross', 'bike tire, motorcycle, motocross'),\n]\n\n/** `gear`: the collection tile \"Gear for ride day\". */\nexport const GEAR: StockPhoto[] = [hit(2291916, 1280, 853, 'gears-bicycle-chain-transmission', 'gears, bicycle, chain, transmission')]\n\n// ── Two Oaks Handyman: \"Handyman business: home repairs, drywall, …\" ──\n\n/** `handyman`: the services, about, contact and working-together covers, and a closing band. */\nexport const HANDYMAN: StockPhoto[] = [\n hit(6850368, 1280, 853, 'woodworking-carpenter-handyman', 'woodworking, carpenter, handyman'),\n hit(3094035, 1280, 780, 'handyman-construction-site-workers', 'handyman, construction site, workers'),\n hit(3546194, 1280, 853, 'handyman-furniture-assembly-drill', 'handyman, furniture assembly, drill'),\n hit(7671904, 1280, 763, 'wood-handyman-recycling-greece', 'wood, handyman, recycling, greece'),\n hit(6809403, 1280, 855, 'handyman-driller-workman-work', 'handyman, driller, workman, work'),\n]\n\n/** `drywall`: a services record's cover, its name read as \"drywall\". */\nexport const DRYWALL: StockPhoto[] = [\n hit(3294517, 1280, 854, 'architecture-family-drywall-house', 'architecture, family, drywall, house'),\n]\n\n/** `handyman describe job`: the closing band \"Call to action: describe your job\". */\nexport const HANDYMAN_DESCRIBE_JOB: StockPhoto[] = [\n hit(2904780, 1280, 854, 'dream-job-application-job-request', 'dream job, application, job request'),\n]\n\n/** `doors`: a services record's cover, its name read as \"doors\". */\nexport const DOORS: StockPhoto[] = [hit(2606818, 1280, 853, 'house-home-door-sidewalk', 'house, home, door, sidewalk')]\n\n/** `rental unit repairs`: a services record's cover. */\nexport const RENTAL_UNIT_REPAIRS: StockPhoto[] = [\n hit(840835, 1280, 853, 'plumbing-pipe-wrenches-plumber', 'plumbing, pipe, wrenches, plumber'),\n]\n\n// ── Bluebonnet Yard & Landscape: \"Landscaping company: lawn care, …\" ──\n\n/** `landscaping`: the \"Irrigation repair and tune-ups\" picture. */\nexport const LANDSCAPING: StockPhoto[] = [\n hit(7079355, 1280, 853, 'zen-garden-sand-plants-leaves-bush', 'zen garden, sand, plants, leaves, bush'),\n]\n\n/** `team meeting office`: the business kind's second widened search; the contact and about covers. */\nexport const TEAM_MEETING_OFFICE: StockPhoto[] = [\n hit(10213524, 1280, 717, 'team-collaboration-meeting-business', 'team, collaboration, meeting, business'),\n hit(10503569, 1280, 714, 'business-meeting-teamwork-office', 'business meeting, teamwork, office'),\n]\n\n// ── Pit Row Tacos: \"Taco food trailer: street and breakfast tacos at …\" ──\n\n/** `caterer`: the craft's broad search once \"catering\" was read as the craft: the home, catering and menu heroes. */\nexport const CATERER: StockPhoto[] = [\n hit(4797476, 1280, 854, 'food-hotel-buffet-holiday', 'food, hotel, buffet, holiday'),\n hit(7165148, 1280, 853, 'buffet-catering-cafeteria-kitchen', 'buffet, catering, cafeteria, kitchen'),\n hit(315691, 1280, 853, 'buffet-indian-food-spices-lunch', 'buffet, indian food, spices, lunch'),\n]\n\n/** `chef cooking`: the catering craft's maker at work, for the trailer's story. */\nexport const CHEF_COOKING: StockPhoto[] = [hit(4625935, 1280, 819, 'chef-catering-food', 'chef, catering, food')]\n\n/** `catering potato`: the menu record \"Potato and egg breakfast taco\". */\nexport const CATERING_POTATO: StockPhoto[] = [\n hit(3440360, 1280, 853, 'potato-new-harvest-nature', 'potato, new harvest, nature'),\n]\n\n/** `breakfast taco`: the visit page's hero. */\nexport const BREAKFAST_TACO: StockPhoto[] = [\n hit(4942004, 1280, 960, 'tacos-breakfast-tacos-tortilla', 'tacos, breakfast tacos, tortilla'),\n]\n\n/** `asada street taco`, `pastor street taco`, `chicken street taco`, `carnitas street taco`: the street taco records, and the story hero. */\nexport const STREET_TACOS: StockPhoto[] = [\n hit(4179895, 1280, 720, 'tacos-mexico-tortilla-food-taco', 'tacos, mexico, tortilla, food, taco'),\n hit(4505032, 1280, 960, 'tacos-pastor-tacos-tacos-mexico', 'tacos, pastor, tacos mexico'),\n hit(4511272, 1280, 851, 'tacos-food-chicken-mexican', 'tacos, food, chicken, mexican'),\n hit(5932654, 1280, 853, 'tacos-tortilla-salsa-mexican-food', 'tacos, tortilla, salsa, mexican food'),\n]\n\n/** `catering bacon`: a menu record read as \"bacon\" and qualified by the craft. */\nexport const CATERING_BACON: StockPhoto[] = [\n hit(5755336, 1280, 853, 'bacon-egg-cup-dish-breakfast-food', 'bacon, egg cup, dish, breakfast food'),\n]\n\n/** Every photo above, by its Pixabay id. */\nexport const AGL4065_HITS: ReadonlyMap<string, StockPhoto> = new Map(\n [\n MOTOCROSS_RACE_TEAM,\n TEAM,\n TEAM_READY_RIDE,\n UPCOMING_RACE,\n MOTORCYCLE,\n DIRT_BIKE,\n PARTS,\n PART,\n DESCRIBE_PART,\n ATV_TIRE,\n RIDING_GEAR,\n BIKE_PARTS_ORDER,\n ATV_PARTS_ORDER,\n BIKE_IT,\n BIKE_IT_WILL_FIT,\n BIKE_TELL_US_MACHINE,\n BIKE_VISIT_SHOP,\n BIKE_WE_SOURCE_IT,\n TIRES,\n DIRT_BIKE_TIRE,\n GEAR,\n HANDYMAN,\n DRYWALL,\n HANDYMAN_DESCRIBE_JOB,\n DOORS,\n RENTAL_UNIT_REPAIRS,\n LANDSCAPING,\n TEAM_MEETING_OFFICE,\n CATERER,\n CHEF_COOKING,\n CATERING_POTATO,\n BREAKFAST_TACO,\n STREET_TACOS,\n CATERING_BACON,\n ]\n .flat()\n .map((photo) => [photo.id, photo] as const),\n)\n"],"names":["hit","id","width","height","slug","tags","provider","String","pageUrl","photographer","split","downloadUrl","MOTOCROSS_RACE_TEAM","TEAM","TEAM_READY_RIDE","UPCOMING_RACE","MOTORCYCLE","DIRT_BIKE","PARTS","PART","DESCRIBE_PART","ATV_TIRE","RIDING_GEAR","BIKE_PARTS_ORDER","ATV_PARTS_ORDER","BIKE_IT","BIKE_IT_WILL_FIT","BIKE_TELL_US_MACHINE","BIKE_VISIT_SHOP","BIKE_WE_SOURCE_IT","TIRES","DIRT_BIKE_TIRE","GEAR","HANDYMAN","DRYWALL","HANDYMAN_DESCRIBE_JOB","DOORS","RENTAL_UNIT_REPAIRS","LANDSCAPING","TEAM_MEETING_OFFICE","CATERER","CHEF_COOKING","CATERING_POTATO","BREAKFAST_TACO","STREET_TACOS","CATERING_BACON","AGL4065_HITS","Map","flat","map","photo"],"mappings":"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"}
@@ -143,6 +143,15 @@ export interface PageScope {
143
143
  splitAt: number;
144
144
  /** Sections whose only items were quotes, left out (AGL-3676). */
145
145
  quotesOnly: number[];
146
+ /**
147
+ * The band each section was drawn in, by plan index: what the next one's
148
+ * rhythm reads (AGL-4065). A frame, which draws no page sections, keeps none.
149
+ */
150
+ drawnBands?: AiLayoutBand[];
151
+ /** How many sections in a row, up to this one, showed no picture (AGL-4065). */
152
+ bare?: number;
153
+ /** Sections the design set beside a photo because they were the third without one (AGL-4065). */
154
+ rhythm?: number;
146
155
  }
147
156
  /** Everything one section's compile shares. */
148
157
  export interface SectionScope {
@@ -210,6 +219,8 @@ export declare function aiOpensGalleriesInLightbox(page: {
210
219
  }): boolean;
211
220
  /** The most pictures a designed page carries, the model's and the stand-ins together. */
212
221
  export declare const AI_LAYOUT_MAX_DESIGN_PICTURES = 8;
222
+ /** What the compiler notes of a section it set beside a photo for the page's rhythm (AGL-4065). */
223
+ export declare const AI_LAYOUT_RHYTHM_NOTE = "drawn beside a photo: third text-only band";
213
224
  /** The tokens a post's card binds, filled per post when the page renders. */
214
225
  export declare const AI_LAYOUT_POST_CARD_TOKENS: readonly ["{{entry.title}}", "{{entry.excerpt}}", "{{entry.date}}", "{{entry.author}}", "{{entry.url}}", "{{entry.coverImage}}"];
215
226
  /** The tokens a post's card puts in a link or a picture, which the page's store admits whole. */