@aglyn/plugins-ai 1.0.0-beta.257 → 1.0.0-beta.259

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 (94) hide show
  1. package/package.json +17 -17
  2. package/src/lib/components/assist-panel.component.js +21 -8
  3. package/src/lib/components/assist-panel.component.js.map +1 -1
  4. package/src/lib/insights/ai-figure-readers.js +15 -8
  5. package/src/lib/insights/ai-figure-readers.js.map +1 -1
  6. package/src/lib/jobs/ai-job-build-step.d.ts +9 -0
  7. package/src/lib/jobs/ai-job-build-step.js +19 -3
  8. package/src/lib/jobs/ai-job-build-step.js.map +1 -1
  9. package/src/lib/jobs/ai-job-insight-step.js +1 -1
  10. package/src/lib/jobs/ai-job-insight-step.js.map +1 -1
  11. package/src/lib/jobs/ai-job-page-language.d.ts +33 -0
  12. package/src/lib/jobs/ai-job-page-language.js +46 -6
  13. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  14. package/src/lib/jobs/ai-job-page-sections.js +12 -1
  15. package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
  16. package/src/lib/jobs/ai-job-page-step.d.ts +14 -0
  17. package/src/lib/jobs/ai-job-page-step.js +79 -39
  18. package/src/lib/jobs/ai-job-page-step.js.map +1 -1
  19. package/src/lib/jobs/ai-job-seo-step.js +3 -2
  20. package/src/lib/jobs/ai-job-seo-step.js.map +1 -1
  21. package/src/lib/jobs/ai-job-template-step.js +7 -1
  22. package/src/lib/jobs/ai-job-template-step.js.map +1 -1
  23. package/src/lib/jobs/ai-layout-stock-photos.d.ts +10 -5
  24. package/src/lib/jobs/ai-layout-stock-photos.js +89 -7
  25. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  26. package/src/lib/jobs/fixtures/ai-stock-photo-copper-kettle-recordings.d.ts +21 -0
  27. package/src/lib/jobs/fixtures/ai-stock-photo-copper-kettle-recordings.js +126 -0
  28. package/src/lib/jobs/fixtures/ai-stock-photo-copper-kettle-recordings.js.map +1 -0
  29. package/src/lib/layout-language/ai-layout-compiler.js +52 -52
  30. package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
  31. package/src/lib/layout-language/ai-layout-copy.d.ts +9 -5
  32. package/src/lib/layout-language/ai-layout-copy.js +22 -14
  33. package/src/lib/layout-language/ai-layout-copy.js.map +1 -1
  34. package/src/lib/layout-language/ai-layout-frame.js +4 -4
  35. package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
  36. package/src/lib/layout-language/ai-layout-motion.d.ts +75 -0
  37. package/src/lib/layout-language/ai-layout-motion.js +172 -0
  38. package/src/lib/layout-language/ai-layout-motion.js.map +1 -0
  39. package/src/lib/layout-language/ai-layout-pictures.d.ts +44 -15
  40. package/src/lib/layout-language/ai-layout-pictures.js +29 -8
  41. package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
  42. package/src/lib/model/ai-build-job.js +14 -0
  43. package/src/lib/model/ai-build-job.js.map +1 -1
  44. package/src/lib/model/ai-host-publish-context.d.ts +6 -0
  45. package/src/lib/model/ai-host-publish-context.js +15 -2
  46. package/src/lib/model/ai-host-publish-context.js.map +1 -1
  47. package/src/lib/model/assist-follow-up.d.ts +35 -0
  48. package/src/lib/model/assist-follow-up.js +44 -4
  49. package/src/lib/model/assist-follow-up.js.map +1 -1
  50. package/src/lib/operator-alerts.js +1 -1
  51. package/src/lib/operator-alerts.js.map +1 -1
  52. package/src/lib/providers/anthropic.js +17 -4
  53. package/src/lib/providers/anthropic.js.map +1 -1
  54. package/src/lib/providers/cache-write-hour.d.ts +37 -0
  55. package/src/lib/providers/cache-write-hour.js +46 -0
  56. package/src/lib/providers/cache-write-hour.js.map +1 -0
  57. package/src/lib/providers/contract.d.ts +16 -3
  58. package/src/lib/providers/contract.js.map +1 -1
  59. package/src/lib/providers/routing.d.ts +13 -0
  60. package/src/lib/providers/routing.js +27 -11
  61. package/src/lib/providers/routing.js.map +1 -1
  62. package/src/lib/runtime/ai-dev-env.d.ts +13 -3
  63. package/src/lib/runtime/ai-dev-env.js +17 -3
  64. package/src/lib/runtime/ai-dev-env.js.map +1 -1
  65. package/src/lib/runtime/ai-dev-replay.js +4 -2
  66. package/src/lib/runtime/ai-dev-replay.js.map +1 -1
  67. package/src/lib/runtime/ai-doctrine-validators.d.ts +70 -1
  68. package/src/lib/runtime/ai-doctrine-validators.js +332 -2
  69. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
  70. package/src/lib/runtime/ai-doctrine.js +12 -4
  71. package/src/lib/runtime/ai-doctrine.js.map +1 -1
  72. package/src/lib/runtime/ai-eval-live.js +1 -1
  73. package/src/lib/runtime/ai-eval-live.js.map +1 -1
  74. package/src/lib/runtime/ai-eval.d.ts +1 -1
  75. package/src/lib/runtime/ai-eval.js +18 -1
  76. package/src/lib/runtime/ai-eval.js.map +1 -1
  77. package/src/lib/runtime/ai-placeholder-tokens.d.ts +70 -0
  78. package/src/lib/runtime/ai-placeholder-tokens.js +169 -0
  79. package/src/lib/runtime/ai-placeholder-tokens.js.map +1 -0
  80. package/src/lib/runtime/ai-repeated-items.js +5 -2
  81. package/src/lib/runtime/ai-repeated-items.js.map +1 -1
  82. package/src/lib/runtime/ai-runtime.js +2 -3
  83. package/src/lib/runtime/ai-runtime.js.map +1 -1
  84. package/src/lib/server/assist-chat.js +8 -3
  85. package/src/lib/server/assist-chat.js.map +1 -1
  86. package/src/lib/server/assist-edit.d.ts +21 -0
  87. package/src/lib/server/assist-edit.js +99 -21
  88. package/src/lib/server/assist-edit.js.map +1 -1
  89. package/src/lib/server/assist-view-context.d.ts +5 -1
  90. package/src/lib/server/assist-view-context.js +8 -3
  91. package/src/lib/server/assist-view-context.js.map +1 -1
  92. package/src/lib/usage/assist-usage.d.ts +2 -0
  93. package/src/lib/usage/assist-usage.js +8 -3
  94. package/src/lib/usage/assist-usage.js.map +1 -1
@@ -16,7 +16,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
16
16
  * limitations under the License.
17
17
  */ import { pluginMediaIngest } from "@aglyn/aglyn/plugin-manager/plugin-media-ingest";
18
18
  import { STOCK_PHOTO_QUERY_MAX_CHARS, stockPhotoProvider, stockPhotoSourceKey } from "@aglyn/aglyn/plugin-manager/stock-photo-provider";
19
- import { aiLayoutSeedNumber } from "../layout-language/ai-layout-pictures.js";
19
+ import { AI_LAYOUT_NO_PHOTO, aiLayoutSeedNumber } from "../layout-language/ai-layout-pictures.js";
20
20
  import { aiStorefrontSays } from "../layout-language/ai-layout-storefront.js";
21
21
  import { aiLayoutLabel, aiLayoutSpeaksOtherThanEnglish } from "../layout-language/ai-layout-labels.js";
22
22
  import { aiSiteKindOfInputs } from "../model/ai-site-kinds.js";
@@ -120,11 +120,16 @@ import { aiStockBusinessNoun } from "./ai-stock-business-nouns.js";
120
120
  * its kin shuns (a pump for a bar) unless it names it; "bath" in a bath
121
121
  * gift set is what the set is for; a size is never the product.
122
122
  *
123
- * A slot nothing acceptable answered — the library down, refusing, or out
124
- * of time — is left `null` for the starter photos. A named object is never
125
- * given one while the library answers anything of the site's world: the
126
- * broad searches come first. Nothing here throws, and none of it is an AI
127
- * model call: photos cost no AI credits.
123
+ * A slot the library could not fill because it never answered — down, or
124
+ * out of time before its first answer — or because the site's library
125
+ * refused to store, is left `null` for the starter photos. A slot the
126
+ * library answered and nothing acceptable came back for is answered
127
+ * {@link AI_LAYOUT_NO_PHOTO} and keeps its no-photo treatment: the beta.257
128
+ * Copper Kettle Catering hero, held to "caterer" while catering photos are
129
+ * tagged "catering", took the starters' pottery workbench (AGL-3831). A
130
+ * named object is never given one while the library answers anything of the
131
+ * site's world: the broad searches come first. Nothing here throws, and none
132
+ * of it is an AI model call: photos cost no AI credits.
128
133
  */ /** Wall clock the whole page's photos may take, inside the step's own signal. */ export const AI_LAYOUT_STOCK_PHOTOS_BUDGET_MS = 30000;
129
134
  /** Searches one page may send to the provider; a repeated query is answered from the page's own memory. */ export const AI_LAYOUT_STOCK_SEARCHES_PER_PAGE = 18;
130
135
  /** The hits a pick is made among. */ export const AI_LAYOUT_STOCK_PICK_WINDOW = 40;
@@ -924,6 +929,78 @@ const words = (list)=>new Set(list.trim().split(/\s+/));
924
929
  'barista making coffee'
925
930
  ]
926
931
  },
932
+ {
933
+ // A caterer is named "caterer" and its photos "catering", "buffet",
934
+ // "food": the beta.257 Copper Kettle Catering hero, held to "caterer"
935
+ // alone, accepted none of forty hits (AGL-3831).
936
+ match: [
937
+ 'caterer',
938
+ 'catering',
939
+ 'cater'
940
+ ],
941
+ kin: [
942
+ 'catering',
943
+ 'caterer',
944
+ 'cater',
945
+ 'buffet',
946
+ 'banquet',
947
+ 'platter',
948
+ 'food',
949
+ 'meal',
950
+ 'cuisine'
951
+ ],
952
+ broad: [
953
+ 'caterer',
954
+ 'catering buffet'
955
+ ],
956
+ making: [
957
+ 'chef cooking',
958
+ 'catering chef'
959
+ ],
960
+ // An airline's meal cart is catering too, never a caterer's: the same
961
+ // start's search answered a plane at Düsseldorf tagged "catering" first.
962
+ rivals: {
963
+ words: [
964
+ 'airport',
965
+ 'airplane',
966
+ 'plane',
967
+ 'aircraft',
968
+ 'aviation',
969
+ 'airline',
970
+ 'airfield'
971
+ ],
972
+ core: []
973
+ }
974
+ },
975
+ {
976
+ match: [
977
+ 'barbecue',
978
+ 'barbeque',
979
+ 'bbq',
980
+ 'smokehouse',
981
+ 'pitmaster'
982
+ ],
983
+ kin: [
984
+ 'barbecue',
985
+ 'barbeque',
986
+ 'bbq',
987
+ 'grill',
988
+ 'grilled',
989
+ 'brisket',
990
+ 'smoked',
991
+ 'smoker',
992
+ 'ribs',
993
+ 'meat'
994
+ ],
995
+ broad: [
996
+ 'barbecue',
997
+ 'bbq meat'
998
+ ],
999
+ making: [
1000
+ 'pitmaster',
1001
+ 'grilling meat'
1002
+ ]
1003
+ },
927
1004
  {
928
1005
  match: [
929
1006
  'florist',
@@ -1919,6 +1996,7 @@ const EXTENSIONS = {
1919
1996
  const answers = new Map();
1920
1997
  let searches = 0;
1921
1998
  let storing = true;
1999
+ /** Whether the library answered any search of this page: a slot left empty then found nothing fitting. */ let answered = false;
1922
2000
  const remember = (sourceKey, src)=>{
1923
2001
  placedSrcs.add(src);
1924
2002
  job == null ? void 0 : job.set(sourceKey, scope);
@@ -1949,6 +2027,7 @@ const EXTENSIONS = {
1949
2027
  signal
1950
2028
  }).then((found)=>{
1951
2029
  var _ref;
2030
+ if (found) answered = true;
1952
2031
  return (_ref = found == null ? void 0 : found.photos) != null ? _ref : [];
1953
2032
  }).catch(()=>[]);
1954
2033
  answers.set(key, asked);
@@ -2246,7 +2325,10 @@ const EXTENSIONS = {
2246
2325
  length: Math.min(AI_LAYOUT_STOCK_COPIES_AT_ONCE, firsts.length)
2247
2326
  }, worker));
2248
2327
  for (const [index, choice] of choices.entries())if (choice == null ? void 0 : choice.repeat) await fill(index);
2249
- return photos;
2328
+ // The library answered and nothing in it fits: no photo rather than a
2329
+ // starter that shows another business (AGL-3831). A library that never
2330
+ // answered, or a site that refused to store, leaves the starters.
2331
+ return answered && storing ? photos.map((photo)=>photo != null ? photo : AI_LAYOUT_NO_PHOTO) : photos;
2250
2332
  };
2251
2333
  }
2252
2334