@aglyn/plugins-ai 1.0.0-beta.143

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 (717) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/package.json +60 -0
  4. package/src/index.d.ts +21 -0
  5. package/src/index.js +22 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/activity/ai-activity-actions.d.ts +106 -0
  8. package/src/lib/activity/ai-activity-actions.js +209 -0
  9. package/src/lib/activity/ai-activity-actions.js.map +1 -0
  10. package/src/lib/activity/ai-activity.d.ts +219 -0
  11. package/src/lib/activity/ai-activity.js +251 -0
  12. package/src/lib/activity/ai-activity.js.map +1 -0
  13. package/src/lib/billing/ai-overage-charge.d.ts +102 -0
  14. package/src/lib/billing/ai-overage-charge.js +258 -0
  15. package/src/lib/billing/ai-overage-charge.js.map +1 -0
  16. package/src/lib/billing/ai-overage-close.d.ts +62 -0
  17. package/src/lib/billing/ai-overage-close.js +129 -0
  18. package/src/lib/billing/ai-overage-close.js.map +1 -0
  19. package/src/lib/billing/ai-overage-cutover.d.ts +63 -0
  20. package/src/lib/billing/ai-overage-cutover.js +114 -0
  21. package/src/lib/billing/ai-overage-cutover.js.map +1 -0
  22. package/src/lib/billing/ai-overage-events.d.ts +77 -0
  23. package/src/lib/billing/ai-overage-events.js +174 -0
  24. package/src/lib/billing/ai-overage-events.js.map +1 -0
  25. package/src/lib/billing/ai-overage-gate.d.ts +147 -0
  26. package/src/lib/billing/ai-overage-gate.js +177 -0
  27. package/src/lib/billing/ai-overage-gate.js.map +1 -0
  28. package/src/lib/billing/ai-overage-ledger.d.ts +135 -0
  29. package/src/lib/billing/ai-overage-ledger.js +278 -0
  30. package/src/lib/billing/ai-overage-ledger.js.map +1 -0
  31. package/src/lib/billing/ai-overage-standing-writes.d.ts +110 -0
  32. package/src/lib/billing/ai-overage-standing-writes.js +205 -0
  33. package/src/lib/billing/ai-overage-standing-writes.js.map +1 -0
  34. package/src/lib/billing/ai-overage-standing.d.ts +168 -0
  35. package/src/lib/billing/ai-overage-standing.js +215 -0
  36. package/src/lib/billing/ai-overage-standing.js.map +1 -0
  37. package/src/lib/billing/ai-overage-trigger.d.ts +30 -0
  38. package/src/lib/billing/ai-overage-trigger.js +76 -0
  39. package/src/lib/billing/ai-overage-trigger.js.map +1 -0
  40. package/src/lib/components/ai-allotment-editor.component.d.ts +40 -0
  41. package/src/lib/components/ai-allotment-editor.component.js +213 -0
  42. package/src/lib/components/ai-allotment-editor.component.js.map +1 -0
  43. package/src/lib/components/ai-assist-actions-context.d.ts +13 -0
  44. package/src/lib/components/ai-assist-actions-context.js +21 -0
  45. package/src/lib/components/ai-assist-actions-context.js.map +1 -0
  46. package/src/lib/components/ai-assist-provider.component.d.ts +51 -0
  47. package/src/lib/components/ai-assist-provider.component.js +519 -0
  48. package/src/lib/components/ai-assist-provider.component.js.map +1 -0
  49. package/src/lib/components/ai-brief-dialog.component.d.ts +56 -0
  50. package/src/lib/components/ai-brief-dialog.component.js +319 -0
  51. package/src/lib/components/ai-brief-dialog.component.js.map +1 -0
  52. package/src/lib/components/ai-collaborator-permissions-column.component.d.ts +32 -0
  53. package/src/lib/components/ai-collaborator-permissions-column.component.js +132 -0
  54. package/src/lib/components/ai-collaborator-permissions-column.component.js.map +1 -0
  55. package/src/lib/components/ai-credits-card.component.d.ts +34 -0
  56. package/src/lib/components/ai-credits-card.component.js +131 -0
  57. package/src/lib/components/ai-credits-card.component.js.map +1 -0
  58. package/src/lib/components/ai-credits-columns.component.d.ts +56 -0
  59. package/src/lib/components/ai-credits-columns.component.js +118 -0
  60. package/src/lib/components/ai-credits-columns.component.js.map +1 -0
  61. package/src/lib/components/ai-crm-email-draft.component.d.ts +17 -0
  62. package/src/lib/components/ai-crm-email-draft.component.js +159 -0
  63. package/src/lib/components/ai-crm-email-draft.component.js.map +1 -0
  64. package/src/lib/components/ai-crm-import-mapping.component.d.ts +20 -0
  65. package/src/lib/components/ai-crm-import-mapping.component.js +167 -0
  66. package/src/lib/components/ai-crm-import-mapping.component.js.map +1 -0
  67. package/src/lib/components/ai-crm-record-card.component.d.ts +27 -0
  68. package/src/lib/components/ai-crm-record-card.component.js +263 -0
  69. package/src/lib/components/ai-crm-record-card.component.js.map +1 -0
  70. package/src/lib/components/ai-describe-automation.component.d.ts +31 -0
  71. package/src/lib/components/ai-describe-automation.component.js +226 -0
  72. package/src/lib/components/ai-describe-automation.component.js.map +1 -0
  73. package/src/lib/components/ai-describe-button.component.d.ts +39 -0
  74. package/src/lib/components/ai-describe-button.component.js +87 -0
  75. package/src/lib/components/ai-describe-button.component.js.map +1 -0
  76. package/src/lib/components/ai-describe-page.component.d.ts +26 -0
  77. package/src/lib/components/ai-describe-page.component.js +18 -0
  78. package/src/lib/components/ai-describe-page.component.js.map +1 -0
  79. package/src/lib/components/ai-experiment-cards.component.d.ts +75 -0
  80. package/src/lib/components/ai-experiment-cards.component.js +573 -0
  81. package/src/lib/components/ai-experiment-cards.component.js.map +1 -0
  82. package/src/lib/components/ai-explain-automation.component.d.ts +31 -0
  83. package/src/lib/components/ai-explain-automation.component.js +265 -0
  84. package/src/lib/components/ai-explain-automation.component.js.map +1 -0
  85. package/src/lib/components/ai-insight-dialog.component.d.ts +37 -0
  86. package/src/lib/components/ai-insight-dialog.component.js +441 -0
  87. package/src/lib/components/ai-insight-dialog.component.js.map +1 -0
  88. package/src/lib/components/ai-job-plan.component.d.ts +46 -0
  89. package/src/lib/components/ai-job-plan.component.js +192 -0
  90. package/src/lib/components/ai-job-plan.component.js.map +1 -0
  91. package/src/lib/components/ai-model-selector.component.d.ts +21 -0
  92. package/src/lib/components/ai-model-selector.component.js +109 -0
  93. package/src/lib/components/ai-model-selector.component.js.map +1 -0
  94. package/src/lib/components/ai-page-brief-dialog.component.d.ts +29 -0
  95. package/src/lib/components/ai-page-brief-dialog.component.js +27 -0
  96. package/src/lib/components/ai-page-brief-dialog.component.js.map +1 -0
  97. package/src/lib/components/ai-permissions-on-host.component.d.ts +55 -0
  98. package/src/lib/components/ai-permissions-on-host.component.js +91 -0
  99. package/src/lib/components/ai-permissions-on-host.component.js.map +1 -0
  100. package/src/lib/components/ai-product-copy-card.component.d.ts +25 -0
  101. package/src/lib/components/ai-product-copy-card.component.js +328 -0
  102. package/src/lib/components/ai-product-copy-card.component.js.map +1 -0
  103. package/src/lib/components/ai-product-import-option.component.d.ts +14 -0
  104. package/src/lib/components/ai-product-import-option.component.js +58 -0
  105. package/src/lib/components/ai-product-import-option.component.js.map +1 -0
  106. package/src/lib/components/ai-products-hub-card.component.d.ts +15 -0
  107. package/src/lib/components/ai-products-hub-card.component.js +418 -0
  108. package/src/lib/components/ai-products-hub-card.component.js.map +1 -0
  109. package/src/lib/components/ai-products-proposals.component.d.ts +19 -0
  110. package/src/lib/components/ai-products-proposals.component.js +547 -0
  111. package/src/lib/components/ai-products-proposals.component.js.map +1 -0
  112. package/src/lib/components/ai-save-as-component.component.d.ts +38 -0
  113. package/src/lib/components/ai-save-as-component.component.js +231 -0
  114. package/src/lib/components/ai-save-as-component.component.js.map +1 -0
  115. package/src/lib/components/ai-seo-audit-card.component.d.ts +9 -0
  116. package/src/lib/components/ai-seo-audit-card.component.js +620 -0
  117. package/src/lib/components/ai-seo-audit-card.component.js.map +1 -0
  118. package/src/lib/components/ai-seo-fields-card.component.d.ts +10 -0
  119. package/src/lib/components/ai-seo-fields-card.component.js +453 -0
  120. package/src/lib/components/ai-seo-fields-card.component.js.map +1 -0
  121. package/src/lib/components/ai-site-batch-card.component.d.ts +32 -0
  122. package/src/lib/components/ai-site-batch-card.component.js +531 -0
  123. package/src/lib/components/ai-site-batch-card.component.js.map +1 -0
  124. package/src/lib/components/ai-site-seo-start-card.component.d.ts +26 -0
  125. package/src/lib/components/ai-site-seo-start-card.component.js +178 -0
  126. package/src/lib/components/ai-site-seo-start-card.component.js.map +1 -0
  127. package/src/lib/components/ai-site-start-card.component.d.ts +19 -0
  128. package/src/lib/components/ai-site-start-card.component.js +348 -0
  129. package/src/lib/components/ai-site-start-card.component.js.map +1 -0
  130. package/src/lib/components/ai-template-collection-field.component.d.ts +32 -0
  131. package/src/lib/components/ai-template-collection-field.component.js +63 -0
  132. package/src/lib/components/ai-template-collection-field.component.js.map +1 -0
  133. package/src/lib/components/ai-theme-proposal-card.component.d.ts +6 -0
  134. package/src/lib/components/ai-theme-proposal-card.component.js +619 -0
  135. package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -0
  136. package/src/lib/components/ai-usage-strip.component.d.ts +27 -0
  137. package/src/lib/components/ai-usage-strip.component.js +145 -0
  138. package/src/lib/components/ai-usage-strip.component.js.map +1 -0
  139. package/src/lib/components/assist-edit-canvas.d.ts +169 -0
  140. package/src/lib/components/assist-edit-canvas.js +636 -0
  141. package/src/lib/components/assist-edit-canvas.js.map +1 -0
  142. package/src/lib/components/assist-edit-card.component.d.ts +16 -0
  143. package/src/lib/components/assist-edit-card.component.js +181 -0
  144. package/src/lib/components/assist-edit-card.component.js.map +1 -0
  145. package/src/lib/components/assist-jobs-drawer.component.d.ts +72 -0
  146. package/src/lib/components/assist-jobs-drawer.component.js +626 -0
  147. package/src/lib/components/assist-jobs-drawer.component.js.map +1 -0
  148. package/src/lib/components/assist-panel.component.d.ts +136 -0
  149. package/src/lib/components/assist-panel.component.js +1099 -0
  150. package/src/lib/components/assist-panel.component.js.map +1 -0
  151. package/src/lib/components/assist-signals-page.component.d.ts +3 -0
  152. package/src/lib/components/assist-signals-page.component.js +1017 -0
  153. package/src/lib/components/assist-signals-page.component.js.map +1 -0
  154. package/src/lib/components/besigner-ai-controls.component.d.ts +29 -0
  155. package/src/lib/components/besigner-ai-controls.component.js +81 -0
  156. package/src/lib/components/besigner-ai-controls.component.js.map +1 -0
  157. package/src/lib/components/billing-ai-allotments.component.d.ts +36 -0
  158. package/src/lib/components/billing-ai-allotments.component.js +486 -0
  159. package/src/lib/components/billing-ai-allotments.component.js.map +1 -0
  160. package/src/lib/components/billing-ai-top-users.component.d.ts +44 -0
  161. package/src/lib/components/billing-ai-top-users.component.js +304 -0
  162. package/src/lib/components/billing-ai-top-users.component.js.map +1 -0
  163. package/src/lib/components/billing-assist-overage-card.component.d.ts +69 -0
  164. package/src/lib/components/billing-assist-overage-card.component.js +437 -0
  165. package/src/lib/components/billing-assist-overage-card.component.js.map +1 -0
  166. package/src/lib/components/host-ai-allotments.component.d.ts +40 -0
  167. package/src/lib/components/host-ai-allotments.component.js +239 -0
  168. package/src/lib/components/host-ai-allotments.component.js.map +1 -0
  169. package/src/lib/components/member-ai-allotment-card.component.d.ts +28 -0
  170. package/src/lib/components/member-ai-allotment-card.component.js +172 -0
  171. package/src/lib/components/member-ai-allotment-card.component.js.map +1 -0
  172. package/src/lib/components/member-ai-usage-card.component.d.ts +28 -0
  173. package/src/lib/components/member-ai-usage-card.component.js +240 -0
  174. package/src/lib/components/member-ai-usage-card.component.js.map +1 -0
  175. package/src/lib/components/staff-org-ai-card.component.d.ts +17 -0
  176. package/src/lib/components/staff-org-ai-card.component.js +739 -0
  177. package/src/lib/components/staff-org-ai-card.component.js.map +1 -0
  178. package/src/lib/components/staff-org-usage-ai-columns.component.d.ts +41 -0
  179. package/src/lib/components/staff-org-usage-ai-columns.component.js +65 -0
  180. package/src/lib/components/staff-org-usage-ai-columns.component.js.map +1 -0
  181. package/src/lib/components/staff-orgs-ai-spend-column.component.d.ts +28 -0
  182. package/src/lib/components/staff-orgs-ai-spend-column.component.js +89 -0
  183. package/src/lib/components/staff-orgs-ai-spend-column.component.js.map +1 -0
  184. package/src/lib/components/staff-user-ai-usage-card.component.d.ts +27 -0
  185. package/src/lib/components/staff-user-ai-usage-card.component.js +183 -0
  186. package/src/lib/components/staff-user-ai-usage-card.component.js.map +1 -0
  187. package/src/lib/components/use-ai-allotments.d.ts +49 -0
  188. package/src/lib/components/use-ai-allotments.js +171 -0
  189. package/src/lib/components/use-ai-allotments.js.map +1 -0
  190. package/src/lib/components/use-ai-crm-answer.d.ts +50 -0
  191. package/src/lib/components/use-ai-crm-answer.js +220 -0
  192. package/src/lib/components/use-ai-crm-answer.js.map +1 -0
  193. package/src/lib/components/use-ai-job-run.d.ts +51 -0
  194. package/src/lib/components/use-ai-job-run.js +176 -0
  195. package/src/lib/components/use-ai-job-run.js.map +1 -0
  196. package/src/lib/components/use-ai-model-choice.d.ts +47 -0
  197. package/src/lib/components/use-ai-model-choice.js +150 -0
  198. package/src/lib/components/use-ai-model-choice.js.map +1 -0
  199. package/src/lib/components/use-ai-products-jobs.d.ts +36 -0
  200. package/src/lib/components/use-ai-products-jobs.js +190 -0
  201. package/src/lib/components/use-ai-products-jobs.js.map +1 -0
  202. package/src/lib/components/use-ai-usage-meter.d.ts +11 -0
  203. package/src/lib/components/use-ai-usage-meter.js +96 -0
  204. package/src/lib/components/use-ai-usage-meter.js.map +1 -0
  205. package/src/lib/components/use-org-ai-usage.d.ts +42 -0
  206. package/src/lib/components/use-org-ai-usage.js +181 -0
  207. package/src/lib/components/use-org-ai-usage.js.map +1 -0
  208. package/src/lib/components/use-staff-orgs-ai-spend.d.ts +18 -0
  209. package/src/lib/components/use-staff-orgs-ai-spend.js +127 -0
  210. package/src/lib/components/use-staff-orgs-ai-spend.js.map +1 -0
  211. package/src/lib/constants.d.ts +24 -0
  212. package/src/lib/constants.js +23 -0
  213. package/src/lib/constants.js.map +1 -0
  214. package/src/lib/declarations.d.ts +48 -0
  215. package/src/lib/declarations.js +129 -0
  216. package/src/lib/declarations.js.map +1 -0
  217. package/src/lib/declarations.server.d.ts +35 -0
  218. package/src/lib/declarations.server.js +138 -0
  219. package/src/lib/declarations.server.js.map +1 -0
  220. package/src/lib/insights/ai-figure-readers.d.ts +90 -0
  221. package/src/lib/insights/ai-figure-readers.js +863 -0
  222. package/src/lib/insights/ai-figure-readers.js.map +1 -0
  223. package/src/lib/insights/ai-insight-digest.d.ts +165 -0
  224. package/src/lib/insights/ai-insight-digest.js +363 -0
  225. package/src/lib/insights/ai-insight-digest.js.map +1 -0
  226. package/src/lib/insights/ai-insight-readers.d.ts +71 -0
  227. package/src/lib/insights/ai-insight-readers.js +141 -0
  228. package/src/lib/insights/ai-insight-readers.js.map +1 -0
  229. package/src/lib/jobs/ai-crm-access.d.ts +61 -0
  230. package/src/lib/jobs/ai-crm-access.js +94 -0
  231. package/src/lib/jobs/ai-crm-access.js.map +1 -0
  232. package/src/lib/jobs/ai-email-bindings.d.ts +97 -0
  233. package/src/lib/jobs/ai-email-bindings.js +147 -0
  234. package/src/lib/jobs/ai-email-bindings.js.map +1 -0
  235. package/src/lib/jobs/ai-job-admission.d.ts +82 -0
  236. package/src/lib/jobs/ai-job-admission.js +45 -0
  237. package/src/lib/jobs/ai-job-admission.js.map +1 -0
  238. package/src/lib/jobs/ai-job-budget.d.ts +167 -0
  239. package/src/lib/jobs/ai-job-budget.js +161 -0
  240. package/src/lib/jobs/ai-job-budget.js.map +1 -0
  241. package/src/lib/jobs/ai-job-campaign-step.d.ts +108 -0
  242. package/src/lib/jobs/ai-job-campaign-step.js +340 -0
  243. package/src/lib/jobs/ai-job-campaign-step.js.map +1 -0
  244. package/src/lib/jobs/ai-job-component-checks.d.ts +74 -0
  245. package/src/lib/jobs/ai-job-component-checks.js +442 -0
  246. package/src/lib/jobs/ai-job-component-checks.js.map +1 -0
  247. package/src/lib/jobs/ai-job-component-step.d.ts +75 -0
  248. package/src/lib/jobs/ai-job-component-step.js +262 -0
  249. package/src/lib/jobs/ai-job-component-step.js.map +1 -0
  250. package/src/lib/jobs/ai-job-crm-step.d.ts +192 -0
  251. package/src/lib/jobs/ai-job-crm-step.js +734 -0
  252. package/src/lib/jobs/ai-job-crm-step.js.map +1 -0
  253. package/src/lib/jobs/ai-job-draft-ids.d.ts +62 -0
  254. package/src/lib/jobs/ai-job-draft-ids.js +132 -0
  255. package/src/lib/jobs/ai-job-draft-ids.js.map +1 -0
  256. package/src/lib/jobs/ai-job-drafts.d.ts +304 -0
  257. package/src/lib/jobs/ai-job-drafts.js +557 -0
  258. package/src/lib/jobs/ai-job-drafts.js.map +1 -0
  259. package/src/lib/jobs/ai-job-email-step.d.ts +195 -0
  260. package/src/lib/jobs/ai-job-email-step.js +547 -0
  261. package/src/lib/jobs/ai-job-email-step.js.map +1 -0
  262. package/src/lib/jobs/ai-job-experiment-step.d.ts +105 -0
  263. package/src/lib/jobs/ai-job-experiment-step.js +445 -0
  264. package/src/lib/jobs/ai-job-experiment-step.js.map +1 -0
  265. package/src/lib/jobs/ai-job-form-step.d.ts +250 -0
  266. package/src/lib/jobs/ai-job-form-step.js +634 -0
  267. package/src/lib/jobs/ai-job-form-step.js.map +1 -0
  268. package/src/lib/jobs/ai-job-generation.d.ts +114 -0
  269. package/src/lib/jobs/ai-job-generation.js +384 -0
  270. package/src/lib/jobs/ai-job-generation.js.map +1 -0
  271. package/src/lib/jobs/ai-job-insight-budget.d.ts +41 -0
  272. package/src/lib/jobs/ai-job-insight-budget.js +46 -0
  273. package/src/lib/jobs/ai-job-insight-budget.js.map +1 -0
  274. package/src/lib/jobs/ai-job-insight-step.d.ts +58 -0
  275. package/src/lib/jobs/ai-job-insight-step.js +350 -0
  276. package/src/lib/jobs/ai-job-insight-step.js.map +1 -0
  277. package/src/lib/jobs/ai-job-layout-step.d.ts +103 -0
  278. package/src/lib/jobs/ai-job-layout-step.js +340 -0
  279. package/src/lib/jobs/ai-job-layout-step.js.map +1 -0
  280. package/src/lib/jobs/ai-job-page-budget.d.ts +57 -0
  281. package/src/lib/jobs/ai-job-page-budget.js +60 -0
  282. package/src/lib/jobs/ai-job-page-budget.js.map +1 -0
  283. package/src/lib/jobs/ai-job-page-sections.d.ts +150 -0
  284. package/src/lib/jobs/ai-job-page-sections.js +450 -0
  285. package/src/lib/jobs/ai-job-page-sections.js.map +1 -0
  286. package/src/lib/jobs/ai-job-page-step.d.ts +198 -0
  287. package/src/lib/jobs/ai-job-page-step.js +667 -0
  288. package/src/lib/jobs/ai-job-page-step.js.map +1 -0
  289. package/src/lib/jobs/ai-job-plan-conformance.d.ts +107 -0
  290. package/src/lib/jobs/ai-job-plan-conformance.js +164 -0
  291. package/src/lib/jobs/ai-job-plan-conformance.js.map +1 -0
  292. package/src/lib/jobs/ai-job-plan-step.d.ts +196 -0
  293. package/src/lib/jobs/ai-job-plan-step.js +458 -0
  294. package/src/lib/jobs/ai-job-plan-step.js.map +1 -0
  295. package/src/lib/jobs/ai-job-plugin-drafts.d.ts +76 -0
  296. package/src/lib/jobs/ai-job-plugin-drafts.js +91 -0
  297. package/src/lib/jobs/ai-job-plugin-drafts.js.map +1 -0
  298. package/src/lib/jobs/ai-job-products-step.d.ts +106 -0
  299. package/src/lib/jobs/ai-job-products-step.js +436 -0
  300. package/src/lib/jobs/ai-job-products-step.js.map +1 -0
  301. package/src/lib/jobs/ai-job-seo-budget.d.ts +52 -0
  302. package/src/lib/jobs/ai-job-seo-budget.js +63 -0
  303. package/src/lib/jobs/ai-job-seo-budget.js.map +1 -0
  304. package/src/lib/jobs/ai-job-seo-step.d.ts +145 -0
  305. package/src/lib/jobs/ai-job-seo-step.js +809 -0
  306. package/src/lib/jobs/ai-job-seo-step.js.map +1 -0
  307. package/src/lib/jobs/ai-job-site-step.d.ts +252 -0
  308. package/src/lib/jobs/ai-job-site-step.js +538 -0
  309. package/src/lib/jobs/ai-job-site-step.js.map +1 -0
  310. package/src/lib/jobs/ai-job-template-step.d.ts +105 -0
  311. package/src/lib/jobs/ai-job-template-step.js +391 -0
  312. package/src/lib/jobs/ai-job-template-step.js.map +1 -0
  313. package/src/lib/jobs/ai-job-text-step.d.ts +125 -0
  314. package/src/lib/jobs/ai-job-text-step.js +128 -0
  315. package/src/lib/jobs/ai-job-text-step.js.map +1 -0
  316. package/src/lib/jobs/ai-job-theme-budget.d.ts +38 -0
  317. package/src/lib/jobs/ai-job-theme-budget.js +43 -0
  318. package/src/lib/jobs/ai-job-theme-budget.js.map +1 -0
  319. package/src/lib/jobs/ai-job-theme-step.d.ts +115 -0
  320. package/src/lib/jobs/ai-job-theme-step.js +337 -0
  321. package/src/lib/jobs/ai-job-theme-step.js.map +1 -0
  322. package/src/lib/jobs/ai-job-workflow-step.d.ts +139 -0
  323. package/src/lib/jobs/ai-job-workflow-step.js +530 -0
  324. package/src/lib/jobs/ai-job-workflow-step.js.map +1 -0
  325. package/src/lib/jobs/ai-jobs-beat.d.ts +78 -0
  326. package/src/lib/jobs/ai-jobs-beat.js +93 -0
  327. package/src/lib/jobs/ai-jobs-beat.js.map +1 -0
  328. package/src/lib/jobs/ai-jobs-pause.d.ts +38 -0
  329. package/src/lib/jobs/ai-jobs-pause.js +45 -0
  330. package/src/lib/jobs/ai-jobs-pause.js.map +1 -0
  331. package/src/lib/jobs/ai-jobs.d.ts +558 -0
  332. package/src/lib/jobs/ai-jobs.js +1410 -0
  333. package/src/lib/jobs/ai-jobs.js.map +1 -0
  334. package/src/lib/jobs/ai-media-asset-server.d.ts +34 -0
  335. package/src/lib/jobs/ai-media-asset-server.js +34 -0
  336. package/src/lib/jobs/ai-media-asset-server.js.map +1 -0
  337. package/src/lib/jobs/ai-media-asset.d.ts +59 -0
  338. package/src/lib/jobs/ai-media-asset.js +86 -0
  339. package/src/lib/jobs/ai-media-asset.js.map +1 -0
  340. package/src/lib/jobs/ai-product-image.d.ts +78 -0
  341. package/src/lib/jobs/ai-product-image.js +113 -0
  342. package/src/lib/jobs/ai-product-image.js.map +1 -0
  343. package/src/lib/jobs/ai-theme-brand-inputs.d.ts +125 -0
  344. package/src/lib/jobs/ai-theme-brand-inputs.js +378 -0
  345. package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -0
  346. package/src/lib/jobs/ai-theme-brand-server.d.ts +33 -0
  347. package/src/lib/jobs/ai-theme-brand-server.js +33 -0
  348. package/src/lib/jobs/ai-theme-brand-server.js.map +1 -0
  349. package/src/lib/jobs/ai-workflow-records.d.ts +84 -0
  350. package/src/lib/jobs/ai-workflow-records.js +158 -0
  351. package/src/lib/jobs/ai-workflow-records.js.map +1 -0
  352. package/src/lib/jobs/fixtures/ai-free-page-built-recording.d.ts +31 -0
  353. package/src/lib/jobs/fixtures/ai-free-page-built-recording.js +367 -0
  354. package/src/lib/jobs/fixtures/ai-free-page-built-recording.js.map +1 -0
  355. package/src/lib/jobs/fixtures/ai-free-page-recording.d.ts +69 -0
  356. package/src/lib/jobs/fixtures/ai-free-page-recording.js +442 -0
  357. package/src/lib/jobs/fixtures/ai-free-page-recording.js.map +1 -0
  358. package/src/lib/jobs/fixtures/ai-page-briefs.d.ts +146 -0
  359. package/src/lib/jobs/fixtures/ai-page-briefs.js +1850 -0
  360. package/src/lib/jobs/fixtures/ai-page-briefs.js.map +1 -0
  361. package/src/lib/model/ai-allotments.d.ts +208 -0
  362. package/src/lib/model/ai-allotments.js +269 -0
  363. package/src/lib/model/ai-allotments.js.map +1 -0
  364. package/src/lib/model/ai-automation-draft.d.ts +74 -0
  365. package/src/lib/model/ai-automation-draft.js +310 -0
  366. package/src/lib/model/ai-automation-draft.js.map +1 -0
  367. package/src/lib/model/ai-automation-outline.d.ts +50 -0
  368. package/src/lib/model/ai-automation-outline.js +262 -0
  369. package/src/lib/model/ai-automation-outline.js.map +1 -0
  370. package/src/lib/model/ai-build-plan.d.ts +197 -0
  371. package/src/lib/model/ai-build-plan.js +438 -0
  372. package/src/lib/model/ai-build-plan.js.map +1 -0
  373. package/src/lib/model/ai-crm.d.ts +237 -0
  374. package/src/lib/model/ai-crm.js +225 -0
  375. package/src/lib/model/ai-crm.js.map +1 -0
  376. package/src/lib/model/ai-experiment-proposal.d.ts +68 -0
  377. package/src/lib/model/ai-experiment-proposal.js +146 -0
  378. package/src/lib/model/ai-experiment-proposal.js.map +1 -0
  379. package/src/lib/model/ai-experiment.d.ts +309 -0
  380. package/src/lib/model/ai-experiment.js +395 -0
  381. package/src/lib/model/ai-experiment.js.map +1 -0
  382. package/src/lib/model/ai-insight.d.ts +178 -0
  383. package/src/lib/model/ai-insight.js +201 -0
  384. package/src/lib/model/ai-insight.js.map +1 -0
  385. package/src/lib/model/ai-jobs.types.d.ts +412 -0
  386. package/src/lib/model/ai-jobs.types.js +42 -0
  387. package/src/lib/model/ai-jobs.types.js.map +1 -0
  388. package/src/lib/model/ai-page-job.d.ts +92 -0
  389. package/src/lib/model/ai-page-job.js +159 -0
  390. package/src/lib/model/ai-page-job.js.map +1 -0
  391. package/src/lib/model/ai-permissions.d.ts +49 -0
  392. package/src/lib/model/ai-permissions.js +97 -0
  393. package/src/lib/model/ai-permissions.js.map +1 -0
  394. package/src/lib/model/ai-plan-capabilities.d.ts +139 -0
  395. package/src/lib/model/ai-plan-capabilities.js +149 -0
  396. package/src/lib/model/ai-plan-capabilities.js.map +1 -0
  397. package/src/lib/model/ai-products.d.ts +251 -0
  398. package/src/lib/model/ai-products.js +253 -0
  399. package/src/lib/model/ai-products.js.map +1 -0
  400. package/src/lib/model/ai-seo.d.ts +208 -0
  401. package/src/lib/model/ai-seo.js +150 -0
  402. package/src/lib/model/ai-seo.js.map +1 -0
  403. package/src/lib/model/ai-site-inventory.d.ts +164 -0
  404. package/src/lib/model/ai-site-inventory.js +145 -0
  405. package/src/lib/model/ai-site-inventory.js.map +1 -0
  406. package/src/lib/model/ai-site-job.d.ts +247 -0
  407. package/src/lib/model/ai-site-job.js +314 -0
  408. package/src/lib/model/ai-site-job.js.map +1 -0
  409. package/src/lib/model/ai-site-start-seo.d.ts +103 -0
  410. package/src/lib/model/ai-site-start-seo.js +154 -0
  411. package/src/lib/model/ai-site-start-seo.js.map +1 -0
  412. package/src/lib/model/ai-site-start.d.ts +122 -0
  413. package/src/lib/model/ai-site-start.js +159 -0
  414. package/src/lib/model/ai-site-start.js.map +1 -0
  415. package/src/lib/model/ai-site-switch.d.ts +56 -0
  416. package/src/lib/model/ai-site-switch.js +73 -0
  417. package/src/lib/model/ai-site-switch.js.map +1 -0
  418. package/src/lib/model/ai-storefront-claims.d.ts +70 -0
  419. package/src/lib/model/ai-storefront-claims.js +130 -0
  420. package/src/lib/model/ai-storefront-claims.js.map +1 -0
  421. package/src/lib/model/ai-template-subjects.d.ts +82 -0
  422. package/src/lib/model/ai-template-subjects.js +136 -0
  423. package/src/lib/model/ai-template-subjects.js.map +1 -0
  424. package/src/lib/model/ai-theme-proposal.d.ts +210 -0
  425. package/src/lib/model/ai-theme-proposal.js +506 -0
  426. package/src/lib/model/ai-theme-proposal.js.map +1 -0
  427. package/src/lib/model/ai-tokens.d.ts +96 -0
  428. package/src/lib/model/ai-tokens.js +117 -0
  429. package/src/lib/model/ai-tokens.js.map +1 -0
  430. package/src/lib/model/ai-usage-by-user.d.ts +120 -0
  431. package/src/lib/model/ai-usage-by-user.js +139 -0
  432. package/src/lib/model/ai-usage-by-user.js.map +1 -0
  433. package/src/lib/model/ai-workflow-job.d.ts +111 -0
  434. package/src/lib/model/ai-workflow-job.js +183 -0
  435. package/src/lib/model/ai-workflow-job.js.map +1 -0
  436. package/src/lib/model/assist-edit.d.ts +261 -0
  437. package/src/lib/model/assist-edit.js +175 -0
  438. package/src/lib/model/assist-edit.js.map +1 -0
  439. package/src/lib/plugin-config.d.ts +33 -0
  440. package/src/lib/plugin-config.js +118 -0
  441. package/src/lib/plugin-config.js.map +1 -0
  442. package/src/lib/plugin.d.ts +30 -0
  443. package/src/lib/plugin.js +525 -0
  444. package/src/lib/plugin.js.map +1 -0
  445. package/src/lib/providers/anthropic.d.ts +84 -0
  446. package/src/lib/providers/anthropic.js +432 -0
  447. package/src/lib/providers/anthropic.js.map +1 -0
  448. package/src/lib/providers/catalog.d.ts +197 -0
  449. package/src/lib/providers/catalog.js +312 -0
  450. package/src/lib/providers/catalog.js.map +1 -0
  451. package/src/lib/providers/contract.d.ts +464 -0
  452. package/src/lib/providers/contract.js +274 -0
  453. package/src/lib/providers/contract.js.map +1 -0
  454. package/src/lib/providers/model-choice.d.ts +119 -0
  455. package/src/lib/providers/model-choice.js +416 -0
  456. package/src/lib/providers/model-choice.js.map +1 -0
  457. package/src/lib/providers/openai-compatible.d.ts +58 -0
  458. package/src/lib/providers/openai-compatible.js +361 -0
  459. package/src/lib/providers/openai-compatible.js.map +1 -0
  460. package/src/lib/providers/registry.d.ts +49 -0
  461. package/src/lib/providers/registry.js +71 -0
  462. package/src/lib/providers/registry.js.map +1 -0
  463. package/src/lib/providers/routing.d.ts +98 -0
  464. package/src/lib/providers/routing.js +450 -0
  465. package/src/lib/providers/routing.js.map +1 -0
  466. package/src/lib/runtime/ai-abuse-guards.d.ts +113 -0
  467. package/src/lib/runtime/ai-abuse-guards.js +148 -0
  468. package/src/lib/runtime/ai-abuse-guards.js.map +1 -0
  469. package/src/lib/runtime/ai-component-bindings.d.ts +67 -0
  470. package/src/lib/runtime/ai-component-bindings.js +106 -0
  471. package/src/lib/runtime/ai-component-bindings.js.map +1 -0
  472. package/src/lib/runtime/ai-device-audit.d.ts +109 -0
  473. package/src/lib/runtime/ai-device-audit.js +97 -0
  474. package/src/lib/runtime/ai-device-audit.js.map +1 -0
  475. package/src/lib/runtime/ai-doctrine-validators.d.ts +720 -0
  476. package/src/lib/runtime/ai-doctrine-validators.js +3133 -0
  477. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -0
  478. package/src/lib/runtime/ai-doctrine.d.ts +372 -0
  479. package/src/lib/runtime/ai-doctrine.js +944 -0
  480. package/src/lib/runtime/ai-doctrine.js.map +1 -0
  481. package/src/lib/runtime/ai-eval-live.d.ts +321 -0
  482. package/src/lib/runtime/ai-eval-live.js +1257 -0
  483. package/src/lib/runtime/ai-eval-live.js.map +1 -0
  484. package/src/lib/runtime/ai-eval-memory-firestore.d.ts +51 -0
  485. package/src/lib/runtime/ai-eval-memory-firestore.js +183 -0
  486. package/src/lib/runtime/ai-eval-memory-firestore.js.map +1 -0
  487. package/src/lib/runtime/ai-eval.d.ts +441 -0
  488. package/src/lib/runtime/ai-eval.js +1151 -0
  489. package/src/lib/runtime/ai-eval.js.map +1 -0
  490. package/src/lib/runtime/ai-gate.d.ts +130 -0
  491. package/src/lib/runtime/ai-gate.js +272 -0
  492. package/src/lib/runtime/ai-gate.js.map +1 -0
  493. package/src/lib/runtime/ai-generation-bounds.d.ts +24 -0
  494. package/src/lib/runtime/ai-generation-bounds.js +23 -0
  495. package/src/lib/runtime/ai-generation-bounds.js.map +1 -0
  496. package/src/lib/runtime/ai-insight-check.d.ts +76 -0
  497. package/src/lib/runtime/ai-insight-check.js +281 -0
  498. package/src/lib/runtime/ai-insight-check.js.map +1 -0
  499. package/src/lib/runtime/ai-node-tree.d.ts +181 -0
  500. package/src/lib/runtime/ai-node-tree.js +931 -0
  501. package/src/lib/runtime/ai-node-tree.js.map +1 -0
  502. package/src/lib/runtime/ai-page-links.d.ts +79 -0
  503. package/src/lib/runtime/ai-page-links.js +135 -0
  504. package/src/lib/runtime/ai-page-links.js.map +1 -0
  505. package/src/lib/runtime/ai-palette.d.ts +252 -0
  506. package/src/lib/runtime/ai-palette.generated.d.ts +34 -0
  507. package/src/lib/runtime/ai-palette.generated.js +5263 -0
  508. package/src/lib/runtime/ai-palette.generated.js.map +1 -0
  509. package/src/lib/runtime/ai-palette.js +187 -0
  510. package/src/lib/runtime/ai-palette.js.map +1 -0
  511. package/src/lib/runtime/ai-products-generation.d.ts +107 -0
  512. package/src/lib/runtime/ai-products-generation.js +250 -0
  513. package/src/lib/runtime/ai-products-generation.js.map +1 -0
  514. package/src/lib/runtime/ai-repeated-items.d.ts +95 -0
  515. package/src/lib/runtime/ai-repeated-items.js +397 -0
  516. package/src/lib/runtime/ai-repeated-items.js.map +1 -0
  517. package/src/lib/runtime/ai-runtime.d.ts +148 -0
  518. package/src/lib/runtime/ai-runtime.js +237 -0
  519. package/src/lib/runtime/ai-runtime.js.map +1 -0
  520. package/src/lib/runtime/ai-template-examples.d.ts +71 -0
  521. package/src/lib/runtime/ai-template-examples.js +135 -0
  522. package/src/lib/runtime/ai-template-examples.js.map +1 -0
  523. package/src/lib/runtime/assist-answer-cache.d.ts +80 -0
  524. package/src/lib/runtime/assist-answer-cache.js +184 -0
  525. package/src/lib/runtime/assist-answer-cache.js.map +1 -0
  526. package/src/lib/runtime/seo-audit.d.ts +93 -0
  527. package/src/lib/runtime/seo-audit.js +260 -0
  528. package/src/lib/runtime/seo-audit.js.map +1 -0
  529. package/src/lib/runtime/seo-content-fixes.d.ts +41 -0
  530. package/src/lib/runtime/seo-content-fixes.js +168 -0
  531. package/src/lib/runtime/seo-content-fixes.js.map +1 -0
  532. package/src/lib/runtime/seo-fields.d.ts +152 -0
  533. package/src/lib/runtime/seo-fields.js +215 -0
  534. package/src/lib/runtime/seo-fields.js.map +1 -0
  535. package/src/lib/runtime/seo-page-facts.d.ts +61 -0
  536. package/src/lib/runtime/seo-page-facts.js +150 -0
  537. package/src/lib/runtime/seo-page-facts.js.map +1 -0
  538. package/src/lib/runtime/site-inventory.d.ts +63 -0
  539. package/src/lib/runtime/site-inventory.js +230 -0
  540. package/src/lib/runtime/site-inventory.js.map +1 -0
  541. package/src/lib/server/ai-admin-org.d.ts +33 -0
  542. package/src/lib/server/ai-admin-org.js +381 -0
  543. package/src/lib/server/ai-admin-org.js.map +1 -0
  544. package/src/lib/server/ai-admin-orgs-spend.d.ts +40 -0
  545. package/src/lib/server/ai-admin-orgs-spend.js +129 -0
  546. package/src/lib/server/ai-admin-orgs-spend.js.map +1 -0
  547. package/src/lib/server/ai-admin-overage.d.ts +19 -0
  548. package/src/lib/server/ai-admin-overage.js +246 -0
  549. package/src/lib/server/ai-admin-overage.js.map +1 -0
  550. package/src/lib/server/ai-admin-signals.d.ts +34 -0
  551. package/src/lib/server/ai-admin-signals.js +330 -0
  552. package/src/lib/server/ai-admin-signals.js.map +1 -0
  553. package/src/lib/server/ai-admin-user.d.ts +27 -0
  554. package/src/lib/server/ai-admin-user.js +128 -0
  555. package/src/lib/server/ai-admin-user.js.map +1 -0
  556. package/src/lib/server/ai-allotments.d.ts +27 -0
  557. package/src/lib/server/ai-allotments.js +544 -0
  558. package/src/lib/server/ai-allotments.js.map +1 -0
  559. package/src/lib/server/ai-assist-prompts.d.ts +102 -0
  560. package/src/lib/server/ai-assist-prompts.js +207 -0
  561. package/src/lib/server/ai-assist-prompts.js.map +1 -0
  562. package/src/lib/server/ai-assist.d.ts +119 -0
  563. package/src/lib/server/ai-assist.js +517 -0
  564. package/src/lib/server/ai-assist.js.map +1 -0
  565. package/src/lib/server/ai-crm-answer.d.ts +30 -0
  566. package/src/lib/server/ai-crm-answer.js +98 -0
  567. package/src/lib/server/ai-crm-answer.js.map +1 -0
  568. package/src/lib/server/ai-generate-component.d.ts +111 -0
  569. package/src/lib/server/ai-generate-component.js +643 -0
  570. package/src/lib/server/ai-generate-component.js.map +1 -0
  571. package/src/lib/server/ai-host-permissions.d.ts +46 -0
  572. package/src/lib/server/ai-host-permissions.js +204 -0
  573. package/src/lib/server/ai-host-permissions.js.map +1 -0
  574. package/src/lib/server/ai-insight-answer.d.ts +30 -0
  575. package/src/lib/server/ai-insight-answer.js +83 -0
  576. package/src/lib/server/ai-insight-answer.js.map +1 -0
  577. package/src/lib/server/ai-insight-digest-route.d.ts +30 -0
  578. package/src/lib/server/ai-insight-digest-route.js +156 -0
  579. package/src/lib/server/ai-insight-digest-route.js.map +1 -0
  580. package/src/lib/server/ai-jobs-batch.d.ts +48 -0
  581. package/src/lib/server/ai-jobs-batch.js +306 -0
  582. package/src/lib/server/ai-jobs-batch.js.map +1 -0
  583. package/src/lib/server/ai-jobs-beat-route.d.ts +36 -0
  584. package/src/lib/server/ai-jobs-beat-route.js +86 -0
  585. package/src/lib/server/ai-jobs-beat-route.js.map +1 -0
  586. package/src/lib/server/ai-jobs-cancel.d.ts +30 -0
  587. package/src/lib/server/ai-jobs-cancel.js +74 -0
  588. package/src/lib/server/ai-jobs-cancel.js.map +1 -0
  589. package/src/lib/server/ai-jobs-events-route.d.ts +31 -0
  590. package/src/lib/server/ai-jobs-events-route.js +51 -0
  591. package/src/lib/server/ai-jobs-events-route.js.map +1 -0
  592. package/src/lib/server/ai-jobs-events.d.ts +55 -0
  593. package/src/lib/server/ai-jobs-events.js +144 -0
  594. package/src/lib/server/ai-jobs-events.js.map +1 -0
  595. package/src/lib/server/ai-jobs-gate.d.ts +47 -0
  596. package/src/lib/server/ai-jobs-gate.js +106 -0
  597. package/src/lib/server/ai-jobs-gate.js.map +1 -0
  598. package/src/lib/server/ai-jobs-resume.d.ts +23 -0
  599. package/src/lib/server/ai-jobs-resume.js +209 -0
  600. package/src/lib/server/ai-jobs-resume.js.map +1 -0
  601. package/src/lib/server/ai-jobs-route.d.ts +32 -0
  602. package/src/lib/server/ai-jobs-route.js +307 -0
  603. package/src/lib/server/ai-jobs-route.js.map +1 -0
  604. package/src/lib/server/ai-models.d.ts +18 -0
  605. package/src/lib/server/ai-models.js +134 -0
  606. package/src/lib/server/ai-models.js.map +1 -0
  607. package/src/lib/server/ai-seo-apply.d.ts +53 -0
  608. package/src/lib/server/ai-seo-apply.js +294 -0
  609. package/src/lib/server/ai-seo-apply.js.map +1 -0
  610. package/src/lib/server/ai-usage.d.ts +18 -0
  611. package/src/lib/server/ai-usage.js +220 -0
  612. package/src/lib/server/ai-usage.js.map +1 -0
  613. package/src/lib/server/assist-chat.d.ts +234 -0
  614. package/src/lib/server/assist-chat.js +1446 -0
  615. package/src/lib/server/assist-chat.js.map +1 -0
  616. package/src/lib/server/assist-edit-applied.d.ts +22 -0
  617. package/src/lib/server/assist-edit-applied.js +239 -0
  618. package/src/lib/server/assist-edit-applied.js.map +1 -0
  619. package/src/lib/server/assist-edit.d.ts +124 -0
  620. package/src/lib/server/assist-edit.js +1000 -0
  621. package/src/lib/server/assist-edit.js.map +1 -0
  622. package/src/lib/server/assist-feedback.d.ts +31 -0
  623. package/src/lib/server/assist-feedback.js +115 -0
  624. package/src/lib/server/assist-feedback.js.map +1 -0
  625. package/src/lib/server/assist-view-context.d.ts +343 -0
  626. package/src/lib/server/assist-view-context.js +690 -0
  627. package/src/lib/server/assist-view-context.js.map +1 -0
  628. package/src/lib/server/billing-credits.d.ts +59 -0
  629. package/src/lib/server/billing-credits.js +146 -0
  630. package/src/lib/server/billing-credits.js.map +1 -0
  631. package/src/lib/server/billing-overage.d.ts +19 -0
  632. package/src/lib/server/billing-overage.js +337 -0
  633. package/src/lib/server/billing-overage.js.map +1 -0
  634. package/src/lib/server.d.ts +32 -0
  635. package/src/lib/server.js +265 -0
  636. package/src/lib/server.js.map +1 -0
  637. package/src/lib/subprocessors.d.ts +18 -0
  638. package/src/lib/subprocessors.js +52 -0
  639. package/src/lib/subprocessors.js.map +1 -0
  640. package/src/lib/tools/ai-component-tool.d.ts +99 -0
  641. package/src/lib/tools/ai-component-tool.js +369 -0
  642. package/src/lib/tools/ai-component-tool.js.map +1 -0
  643. package/src/lib/tools/ai-crm-tool.d.ts +106 -0
  644. package/src/lib/tools/ai-crm-tool.js +488 -0
  645. package/src/lib/tools/ai-crm-tool.js.map +1 -0
  646. package/src/lib/tools/ai-duplicate-resource-tool.d.ts +71 -0
  647. package/src/lib/tools/ai-duplicate-resource-tool.js +164 -0
  648. package/src/lib/tools/ai-duplicate-resource-tool.js.map +1 -0
  649. package/src/lib/tools/ai-experiment-tool.d.ts +40 -0
  650. package/src/lib/tools/ai-experiment-tool.js +155 -0
  651. package/src/lib/tools/ai-experiment-tool.js.map +1 -0
  652. package/src/lib/tools/ai-insight-tool.d.ts +46 -0
  653. package/src/lib/tools/ai-insight-tool.js +200 -0
  654. package/src/lib/tools/ai-insight-tool.js.map +1 -0
  655. package/src/lib/tools/ai-inventory-lookup-tool.d.ts +86 -0
  656. package/src/lib/tools/ai-inventory-lookup-tool.js +164 -0
  657. package/src/lib/tools/ai-inventory-lookup-tool.js.map +1 -0
  658. package/src/lib/tools/ai-products-tool.d.ts +65 -0
  659. package/src/lib/tools/ai-products-tool.js +644 -0
  660. package/src/lib/tools/ai-products-tool.js.map +1 -0
  661. package/src/lib/tools/ai-seo-tool.d.ts +162 -0
  662. package/src/lib/tools/ai-seo-tool.js +546 -0
  663. package/src/lib/tools/ai-seo-tool.js.map +1 -0
  664. package/src/lib/tools/ai-theme-tool.d.ts +101 -0
  665. package/src/lib/tools/ai-theme-tool.js +562 -0
  666. package/src/lib/tools/ai-theme-tool.js.map +1 -0
  667. package/src/lib/tools/ai-workflow-tool.d.ts +166 -0
  668. package/src/lib/tools/ai-workflow-tool.js +860 -0
  669. package/src/lib/tools/ai-workflow-tool.js.map +1 -0
  670. package/src/lib/usage/ai-allotment-alerts.d.ts +72 -0
  671. package/src/lib/usage/ai-allotment-alerts.js +157 -0
  672. package/src/lib/usage/ai-allotment-alerts.js.map +1 -0
  673. package/src/lib/usage/ai-allotments.d.ts +125 -0
  674. package/src/lib/usage/ai-allotments.js +239 -0
  675. package/src/lib/usage/ai-allotments.js.map +1 -0
  676. package/src/lib/usage/ai-model-sample.d.ts +36 -0
  677. package/src/lib/usage/ai-model-sample.js +68 -0
  678. package/src/lib/usage/ai-model-sample.js.map +1 -0
  679. package/src/lib/usage/ai-usage-alerts.d.ts +55 -0
  680. package/src/lib/usage/ai-usage-alerts.js +114 -0
  681. package/src/lib/usage/ai-usage-alerts.js.map +1 -0
  682. package/src/lib/usage/ai-usage-by-user.d.ts +161 -0
  683. package/src/lib/usage/ai-usage-by-user.js +211 -0
  684. package/src/lib/usage/ai-usage-by-user.js.map +1 -0
  685. package/src/lib/usage/ai-usage-eraser.d.ts +29 -0
  686. package/src/lib/usage/ai-usage-eraser.js +40 -0
  687. package/src/lib/usage/ai-usage-eraser.js.map +1 -0
  688. package/src/lib/usage/ai-usage-meter.d.ts +39 -0
  689. package/src/lib/usage/ai-usage-meter.js +85 -0
  690. package/src/lib/usage/ai-usage-meter.js.map +1 -0
  691. package/src/lib/usage/ai-usage-wire.d.ts +184 -0
  692. package/src/lib/usage/ai-usage-wire.js +98 -0
  693. package/src/lib/usage/ai-usage-wire.js.map +1 -0
  694. package/src/lib/usage/assist-ceiling.d.ts +87 -0
  695. package/src/lib/usage/assist-ceiling.js +110 -0
  696. package/src/lib/usage/assist-ceiling.js.map +1 -0
  697. package/src/lib/usage/assist-free-taste.d.ts +225 -0
  698. package/src/lib/usage/assist-free-taste.js +308 -0
  699. package/src/lib/usage/assist-free-taste.js.map +1 -0
  700. package/src/lib/usage/assist-refusals.d.ts +69 -0
  701. package/src/lib/usage/assist-refusals.js +79 -0
  702. package/src/lib/usage/assist-refusals.js.map +1 -0
  703. package/src/lib/usage/assist-signal-mining.d.ts +375 -0
  704. package/src/lib/usage/assist-signal-mining.js +344 -0
  705. package/src/lib/usage/assist-signal-mining.js.map +1 -0
  706. package/src/lib/usage/assist-usage.d.ts +571 -0
  707. package/src/lib/usage/assist-usage.js +978 -0
  708. package/src/lib/usage/assist-usage.js.map +1 -0
  709. package/src/lib/usage/staff-org-ai.d.ts +242 -0
  710. package/src/lib/usage/staff-org-ai.js +173 -0
  711. package/src/lib/usage/staff-org-ai.js.map +1 -0
  712. package/src/lib/usage/staff-org-usage-ai.d.ts +83 -0
  713. package/src/lib/usage/staff-org-usage-ai.js +59 -0
  714. package/src/lib/usage/staff-org-usage-ai.js.map +1 -0
  715. package/src/lib/usage/staff-orgs-ai-spend.d.ts +83 -0
  716. package/src/lib/usage/staff-orgs-ai-spend.js +114 -0
  717. package/src/lib/usage/staff-orgs-ai-spend.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/tools/ai-insight-tool.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 {\n AI_INSIGHT_GAP_MAX_CHARS,\n AI_INSIGHT_MAX_CHARS,\n AI_INSIGHT_MAX_CITED_ROWS,\n AI_INSIGHT_MAX_CITES,\n AI_INSIGHT_MAX_INSIGHTS,\n AI_INSIGHT_MAX_READS,\n type AiInsightAnswer,\n} from '../model/ai-insight'\nimport type { AiTool } from '../providers/contract'\n\n/**\n * The two strict tools an insight job answers through (AGL-2915).\n *\n * `read_figures` names readers — an id, a window and the reader's own\n * parameters — and nothing else: the model never writes a query, a field\n * path or a filter of its own, only a choice among the readers the request\n * lists. `submit_insights` is the answer, each insight citing the table rows\n * its figures come from. Lengths and counts are stated in the descriptions,\n * as the platform's other strict tools state them; the step holds every one.\n */\n\nexport const AI_INSIGHT_READ_TOOL_NAME = 'read_figures'\nexport const AI_INSIGHT_ANSWER_TOOL_NAME = 'submit_insights'\n\nexport function aiInsightReadTool(): AiTool {\n return {\n name: AI_INSIGHT_READ_TOOL_NAME,\n description:\n `Choose the readers whose tables answer the question: at most ${AI_INSIGHT_MAX_READS}, ` +\n 'each from the list the request gives. Every field is required.',\n strict: true,\n inputSchema: {\n type: 'object',\n properties: {\n reads: {\n type: 'array',\n description: `The readers to read, most useful first; at most ${AI_INSIGHT_MAX_READS}.`,\n items: {\n type: 'object',\n properties: {\n reader: { type: 'string', description: 'A reader id from the list, exactly as written.' },\n days: {\n type: 'integer',\n description: 'One of the windows that reader lists, in days; 0 for a reader that lists none.',\n },\n params: {\n type: 'array',\n description: 'The parameters that reader lists, by name; empty when it lists none.',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n value: { type: 'string' },\n },\n required: ['name', 'value'],\n additionalProperties: false,\n },\n },\n },\n required: ['reader', 'days', 'params'],\n additionalProperties: false,\n },\n },\n },\n required: ['reads'],\n additionalProperties: false,\n },\n }\n}\n\nexport function aiInsightAnswerTool(): AiTool {\n return {\n name: AI_INSIGHT_ANSWER_TOOL_NAME,\n description:\n `Answer with at most ${AI_INSIGHT_MAX_INSIGHTS} insights, each citing the table rows its figures come from. ` +\n 'Every field is required.',\n strict: true,\n inputSchema: {\n type: 'object',\n properties: {\n insights: {\n type: 'array',\n description: `Most useful first; at most ${AI_INSIGHT_MAX_INSIGHTS}.`,\n items: {\n type: 'object',\n properties: {\n text: {\n type: 'string',\n description: `One or two plain sentences; at most ${AI_INSIGHT_MAX_CHARS} characters.`,\n },\n cites: {\n type: 'array',\n description: `The tables and rows its figures come from; at most ${AI_INSIGHT_MAX_CITES} tables.`,\n items: {\n type: 'object',\n properties: {\n table: { type: 'string', description: 'The table handle: t1, t2, …' },\n rows: {\n type: 'array',\n description: `Row numbers as the table numbers them, from 0; at most ${AI_INSIGHT_MAX_CITED_ROWS}.`,\n items: { type: 'integer' },\n },\n },\n required: ['table', 'rows'],\n additionalProperties: false,\n },\n },\n },\n required: ['text', 'cites'],\n additionalProperties: false,\n },\n },\n gap: {\n anyOf: [{ type: 'string' }, { type: 'null' }],\n description: `What the tables cannot answer, in one sentence without numbers; at most ${AI_INSIGHT_GAP_MAX_CHARS} characters. null when nothing.`,\n },\n },\n required: ['insights', 'gap'],\n additionalProperties: false,\n },\n }\n}\n\n/** One reader the model asked for, as it asked. */\nexport interface AiInsightReadRequest {\n reader: string\n days: number\n params: Record<string, string>\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\n/** The reads a `read_figures` call names, shape-checked and bounded; the step decides which are real. */\nexport function parseAiInsightReads(input: unknown): AiInsightReadRequest[] {\n const reads = isRecord(input) && Array.isArray(input['reads']) ? input['reads'] : []\n const parsed: AiInsightReadRequest[] = []\n for (const raw of reads) {\n if (parsed.length === AI_INSIGHT_MAX_READS) break\n if (!isRecord(raw) || typeof raw['reader'] !== 'string') continue\n const params: Record<string, string> = {}\n for (const pair of Array.isArray(raw['params']) ? raw['params'] : []) {\n if (isRecord(pair) && typeof pair['name'] === 'string' && typeof pair['value'] === 'string') {\n params[pair['name']] = pair['value']\n }\n }\n const days = Number(raw['days'])\n parsed.push({\n reader: raw['reader'].trim(),\n days: Number.isInteger(days) && days >= 0 ? days : 0,\n params,\n })\n }\n return parsed\n}\n\n/**\n * A `submit_insights` call as the trace reads it, or `null` when the call is\n * not an answer at all. Values keep the types the model wrote, so the trace\n * — not this reader — decides what an unreadable citation costs.\n */\nexport function parseAiInsightAnswer(input: unknown): AiInsightAnswer | null {\n if (!isRecord(input) || !Array.isArray(input['insights'])) return null\n const insights = input['insights']\n .filter(isRecord)\n .map((raw) => ({\n text: typeof raw['text'] === 'string' ? raw['text'] : '',\n cites: (Array.isArray(raw['cites']) ? raw['cites'] : []).filter(isRecord).map((cite) => ({\n table: typeof cite['table'] === 'string' ? cite['table'] : '',\n rows: (Array.isArray(cite['rows']) ? cite['rows'] : []) as number[],\n })),\n }))\n const gap = typeof input['gap'] === 'string' ? input['gap'] : null\n return { insights, gap }\n}\n"],"names":["AI_INSIGHT_GAP_MAX_CHARS","AI_INSIGHT_MAX_CHARS","AI_INSIGHT_MAX_CITED_ROWS","AI_INSIGHT_MAX_CITES","AI_INSIGHT_MAX_INSIGHTS","AI_INSIGHT_MAX_READS","AI_INSIGHT_READ_TOOL_NAME","AI_INSIGHT_ANSWER_TOOL_NAME","aiInsightReadTool","name","description","strict","inputSchema","type","properties","reads","items","reader","days","params","value","required","additionalProperties","aiInsightAnswerTool","insights","text","cites","table","rows","gap","anyOf","isRecord","Array","isArray","parseAiInsightReads","input","parsed","raw","length","pair","Number","push","trim","isInteger","parseAiInsightAnswer","filter","map","cite"],"mappings":"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"}
@@ -0,0 +1,86 @@
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 AiInventoryKind, type AiSiteInventory } from '../model/ai-site-inventory';
18
+ import type { AiTool } from '../providers/contract';
19
+ /**
20
+ * "More on request" (AGL-2937): the strict tool a generation calls to find
21
+ * the records its prompt did not list.
22
+ *
23
+ * The site inventory is the one VOLATILE part of a generation prompt — it is
24
+ * different for every site, so it can never sit inside a cached prefix, and
25
+ * every character of it is billed at full input rate on every attempt and on
26
+ * every re-ask. That puts a hard ceiling on how much of a large site a prompt
27
+ * can afford to carry, and doctrine rule 7 puts a floor under it: a plan that
28
+ * cannot see a component reuses nothing and creates a duplicate.
29
+ *
30
+ * So the prompt lists the first `AI_SITE_INVENTORY_LISTED_PER_KIND` records of
31
+ * each kind and says that more exist, and this tool answers for the rest, out
32
+ * of the wider window the reader holds in memory. The answer costs tokens only
33
+ * on the requests that ask for it, where the rows would otherwise have cost
34
+ * them on every request that did not.
35
+ *
36
+ * ## Why it is offered on every request
37
+ *
38
+ * A tool list renders AHEAD of the system blocks and is part of what a cache
39
+ * entry is keyed on, so a tool offered only to the sites big enough to need it
40
+ * would split the platform's one cached prefix in two. It is therefore offered
41
+ * on every request that carries an inventory block at all, whatever the site's
42
+ * size, and its schema names no record: `runtime/ai-prompt-cache.spec.ts` holds
43
+ * it to that.
44
+ *
45
+ * ## Why it is answered from memory
46
+ *
47
+ * The reader has already read the window, under the org-and-host scope check
48
+ * `readSiteInventory` makes before it reads anything. Answering from that
49
+ * window rather than from Firestore means a lookup cannot reach a record the
50
+ * request was not already entitled to, needs no second scope check to be
51
+ * correct, and adds no read to a job step's budget.
52
+ */
53
+ export declare const AI_INVENTORY_LOOKUP_TOOL_NAME = "look_up_site_inventory";
54
+ /** Records one answer lists. Past this the model narrows its query. */
55
+ export declare const AI_INVENTORY_LOOKUP_MAX_ROWS = 25;
56
+ /** The longest answer one lookup returns; it rides uncached, like the block. */
57
+ export declare const AI_INVENTORY_LOOKUP_MAX_CHARS = 2000;
58
+ /**
59
+ * Lookups one generation answers before it must answer with its own tool.
60
+ * Each is a model call the caller pays for, so the bound is small: two is
61
+ * enough to check a kind and then narrow once.
62
+ */
63
+ export declare const AI_INVENTORY_LOOKUP_MAX_ROUNDS = 2;
64
+ /** What one lookup asked for, once its input has been read. */
65
+ export interface AiInventoryLookupQuery {
66
+ kind: AiInventoryKind;
67
+ /** The text to match; `null` asks for the records the prompt did not list. */
68
+ query: string | null;
69
+ }
70
+ /**
71
+ * The strict tool. Its schema names a kind and a search text and nothing of
72
+ * the site, so it is byte-identical for every workspace and every request.
73
+ */
74
+ export declare function aiInventoryLookupTool(): AiTool;
75
+ /** A tool call's input as a query, or `null` when it named no kind of this site. */
76
+ export declare function readAiInventoryLookup(input: Record<string, unknown>): AiInventoryLookupQuery | null;
77
+ /**
78
+ * One lookup, answered out of the inventory the request was built from.
79
+ *
80
+ * The answer is plain text in the same `id · name · …` shape the prompt's own
81
+ * block uses, so a record found here reads exactly like a record that was
82
+ * listed, and a plan refers to either by id the same way. It says how many
83
+ * records were searched, so "nothing matched" is told apart from "nothing is
84
+ * there" — the distinction rule 7 turns on.
85
+ */
86
+ export declare function answerAiInventoryLookup(inventory: AiSiteInventory | null, input: Record<string, unknown>): string;
@@ -0,0 +1,164 @@
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 { AI_INVENTORY_KINDS, AI_INVENTORY_KIND_HEADINGS, AI_SITE_INVENTORY_LISTED_PER_KIND, aiInventoryHaystack, aiInventoryLine, aiInventoryRows } from "../model/ai-site-inventory.js";
17
+ /**
18
+ * "More on request" (AGL-2937): the strict tool a generation calls to find
19
+ * the records its prompt did not list.
20
+ *
21
+ * The site inventory is the one VOLATILE part of a generation prompt — it is
22
+ * different for every site, so it can never sit inside a cached prefix, and
23
+ * every character of it is billed at full input rate on every attempt and on
24
+ * every re-ask. That puts a hard ceiling on how much of a large site a prompt
25
+ * can afford to carry, and doctrine rule 7 puts a floor under it: a plan that
26
+ * cannot see a component reuses nothing and creates a duplicate.
27
+ *
28
+ * So the prompt lists the first `AI_SITE_INVENTORY_LISTED_PER_KIND` records of
29
+ * each kind and says that more exist, and this tool answers for the rest, out
30
+ * of the wider window the reader holds in memory. The answer costs tokens only
31
+ * on the requests that ask for it, where the rows would otherwise have cost
32
+ * them on every request that did not.
33
+ *
34
+ * ## Why it is offered on every request
35
+ *
36
+ * A tool list renders AHEAD of the system blocks and is part of what a cache
37
+ * entry is keyed on, so a tool offered only to the sites big enough to need it
38
+ * would split the platform's one cached prefix in two. It is therefore offered
39
+ * on every request that carries an inventory block at all, whatever the site's
40
+ * size, and its schema names no record: `runtime/ai-prompt-cache.spec.ts` holds
41
+ * it to that.
42
+ *
43
+ * ## Why it is answered from memory
44
+ *
45
+ * The reader has already read the window, under the org-and-host scope check
46
+ * `readSiteInventory` makes before it reads anything. Answering from that
47
+ * window rather than from Firestore means a lookup cannot reach a record the
48
+ * request was not already entitled to, needs no second scope check to be
49
+ * correct, and adds no read to a job step's budget.
50
+ */ export const AI_INVENTORY_LOOKUP_TOOL_NAME = 'look_up_site_inventory';
51
+ /** Records one answer lists. Past this the model narrows its query. */ export const AI_INVENTORY_LOOKUP_MAX_ROWS = 25;
52
+ /** The longest answer one lookup returns; it rides uncached, like the block. */ export const AI_INVENTORY_LOOKUP_MAX_CHARS = 2000;
53
+ /**
54
+ * Lookups one generation answers before it must answer with its own tool.
55
+ * Each is a model call the caller pays for, so the bound is small: two is
56
+ * enough to check a kind and then narrow once.
57
+ */ export const AI_INVENTORY_LOOKUP_MAX_ROUNDS = 2;
58
+ /**
59
+ * The strict tool. Its schema names a kind and a search text and nothing of
60
+ * the site, so it is byte-identical for every workspace and every request.
61
+ */ export function aiInventoryLookupTool() {
62
+ return {
63
+ name: AI_INVENTORY_LOOKUP_TOOL_NAME,
64
+ description: 'Find records of this site that the inventory above did not list. Search one kind at a ' + 'time by any word of a record: its id, its name, a prop, a field or a slug. Pass null as ' + 'the query to list the records of that kind the inventory left out. Use this before you ' + 'create anything the site may already have.',
65
+ strict: true,
66
+ inputSchema: {
67
+ type: 'object',
68
+ properties: {
69
+ kind: {
70
+ type: 'string',
71
+ enum: [
72
+ ...AI_INVENTORY_KINDS
73
+ ],
74
+ description: 'The kind of record to search.'
75
+ },
76
+ query: {
77
+ anyOf: [
78
+ {
79
+ type: 'string'
80
+ },
81
+ {
82
+ type: 'null'
83
+ }
84
+ ],
85
+ description: 'The text to match against a record, or null for the records that were not listed.'
86
+ }
87
+ },
88
+ required: [
89
+ 'kind',
90
+ 'query'
91
+ ],
92
+ additionalProperties: false
93
+ }
94
+ };
95
+ }
96
+ /** A tool call's input as a query, or `null` when it named no kind of this site. */ export function readAiInventoryLookup(input) {
97
+ const kind = input['kind'];
98
+ if (typeof kind !== 'string' || !AI_INVENTORY_KINDS.includes(kind)) {
99
+ return null;
100
+ }
101
+ const raw = input['query'];
102
+ const query = typeof raw === 'string' ? raw.replace(/\s+/g, ' ').trim() : '';
103
+ return {
104
+ kind: kind,
105
+ query: query || null
106
+ };
107
+ }
108
+ /** The lines an answer lists, capped by count and then by characters. */ function listed(lines) {
109
+ const rendered = [];
110
+ let used = 0;
111
+ for (const line of lines.slice(0, AI_INVENTORY_LOOKUP_MAX_ROWS)){
112
+ if (used + line.length + 3 > AI_INVENTORY_LOOKUP_MAX_CHARS) {
113
+ return {
114
+ rendered,
115
+ cut: true
116
+ };
117
+ }
118
+ rendered.push(line);
119
+ used += line.length + 3;
120
+ }
121
+ return {
122
+ rendered,
123
+ cut: lines.length > rendered.length
124
+ };
125
+ }
126
+ /**
127
+ * One lookup, answered out of the inventory the request was built from.
128
+ *
129
+ * The answer is plain text in the same `id · name · …` shape the prompt's own
130
+ * block uses, so a record found here reads exactly like a record that was
131
+ * listed, and a plan refers to either by id the same way. It says how many
132
+ * records were searched, so "nothing matched" is told apart from "nothing is
133
+ * there" — the distinction rule 7 turns on.
134
+ */ export function answerAiInventoryLookup(inventory, input) {
135
+ if (!inventory) {
136
+ return 'No site inventory was read for this request, so there is nothing to look up.';
137
+ }
138
+ const asked = readAiInventoryLookup(input);
139
+ if (!asked) {
140
+ return `That is not a kind of record this site has. The kinds are: ${AI_INVENTORY_KINDS.join(', ')}.`;
141
+ }
142
+ const rows = aiInventoryRows(inventory, asked.kind);
143
+ const needle = asked.query ? asked.query.toLowerCase() : null;
144
+ const matches = needle ? rows.filter((row)=>aiInventoryHaystack(asked.kind, row).includes(needle)) : rows.slice(AI_SITE_INVENTORY_LISTED_PER_KIND);
145
+ // "None match" and "there are none" are different answers, and rule 7 turns
146
+ // on the difference, so every answer says what it searched.
147
+ const held = `this site's ${rows.length} ${asked.kind}`;
148
+ if (!matches.length) {
149
+ const more = inventory.truncated.includes(asked.kind) ? ' More exist than were read, so this is not proof there is none.' : '';
150
+ return needle ? `None of ${held} matches "${asked.query}".${more}` : `Every one of ${held} was listed above.${more}`;
151
+ }
152
+ const { rendered, cut } = listed(matches.map((row)=>aiInventoryLine(asked.kind, row)));
153
+ const head = needle ? `${matches.length} of ${held} match "${asked.query}".` : `${matches.length} of ${held} were not listed above.`;
154
+ return [
155
+ head,
156
+ `${AI_INVENTORY_KIND_HEADINGS[asked.kind]}:`,
157
+ ...rendered.map((line)=>`- ${line}`),
158
+ ...cut ? [
159
+ 'More match than are listed here. Narrow the query to see the rest.'
160
+ ] : []
161
+ ].join('\n');
162
+ }
163
+
164
+ //# sourceMappingURL=ai-inventory-lookup-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/tools/ai-inventory-lookup-tool.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 {\n AI_INVENTORY_KINDS,\n AI_INVENTORY_KIND_HEADINGS,\n AI_SITE_INVENTORY_LISTED_PER_KIND,\n aiInventoryHaystack,\n aiInventoryLine,\n aiInventoryRows,\n type AiInventoryKind,\n type AiSiteInventory,\n} from '../model/ai-site-inventory'\nimport type { AiTool } from '../providers/contract'\n\n/**\n * \"More on request\" (AGL-2937): the strict tool a generation calls to find\n * the records its prompt did not list.\n *\n * The site inventory is the one VOLATILE part of a generation prompt — it is\n * different for every site, so it can never sit inside a cached prefix, and\n * every character of it is billed at full input rate on every attempt and on\n * every re-ask. That puts a hard ceiling on how much of a large site a prompt\n * can afford to carry, and doctrine rule 7 puts a floor under it: a plan that\n * cannot see a component reuses nothing and creates a duplicate.\n *\n * So the prompt lists the first `AI_SITE_INVENTORY_LISTED_PER_KIND` records of\n * each kind and says that more exist, and this tool answers for the rest, out\n * of the wider window the reader holds in memory. The answer costs tokens only\n * on the requests that ask for it, where the rows would otherwise have cost\n * them on every request that did not.\n *\n * ## Why it is offered on every request\n *\n * A tool list renders AHEAD of the system blocks and is part of what a cache\n * entry is keyed on, so a tool offered only to the sites big enough to need it\n * would split the platform's one cached prefix in two. It is therefore offered\n * on every request that carries an inventory block at all, whatever the site's\n * size, and its schema names no record: `runtime/ai-prompt-cache.spec.ts` holds\n * it to that.\n *\n * ## Why it is answered from memory\n *\n * The reader has already read the window, under the org-and-host scope check\n * `readSiteInventory` makes before it reads anything. Answering from that\n * window rather than from Firestore means a lookup cannot reach a record the\n * request was not already entitled to, needs no second scope check to be\n * correct, and adds no read to a job step's budget.\n */\n\nexport const AI_INVENTORY_LOOKUP_TOOL_NAME = 'look_up_site_inventory'\n\n/** Records one answer lists. Past this the model narrows its query. */\nexport const AI_INVENTORY_LOOKUP_MAX_ROWS = 25\n\n/** The longest answer one lookup returns; it rides uncached, like the block. */\nexport const AI_INVENTORY_LOOKUP_MAX_CHARS = 2_000\n\n/**\n * Lookups one generation answers before it must answer with its own tool.\n * Each is a model call the caller pays for, so the bound is small: two is\n * enough to check a kind and then narrow once.\n */\nexport const AI_INVENTORY_LOOKUP_MAX_ROUNDS = 2\n\n/** What one lookup asked for, once its input has been read. */\nexport interface AiInventoryLookupQuery {\n kind: AiInventoryKind\n /** The text to match; `null` asks for the records the prompt did not list. */\n query: string | null\n}\n\n/**\n * The strict tool. Its schema names a kind and a search text and nothing of\n * the site, so it is byte-identical for every workspace and every request.\n */\nexport function aiInventoryLookupTool(): AiTool {\n return {\n name: AI_INVENTORY_LOOKUP_TOOL_NAME,\n description:\n 'Find records of this site that the inventory above did not list. Search one kind at a ' +\n 'time by any word of a record: its id, its name, a prop, a field or a slug. Pass null as ' +\n 'the query to list the records of that kind the inventory left out. Use this before you ' +\n 'create anything the site may already have.',\n strict: true,\n inputSchema: {\n type: 'object',\n properties: {\n kind: {\n type: 'string',\n enum: [...AI_INVENTORY_KINDS],\n description: 'The kind of record to search.',\n },\n query: {\n anyOf: [{ type: 'string' }, { type: 'null' }],\n description:\n 'The text to match against a record, or null for the records that were not listed.',\n },\n },\n required: ['kind', 'query'],\n additionalProperties: false,\n },\n }\n}\n\n/** A tool call's input as a query, or `null` when it named no kind of this site. */\nexport function readAiInventoryLookup(\n input: Record<string, unknown>,\n): AiInventoryLookupQuery | null {\n const kind = input['kind']\n if (typeof kind !== 'string' || !(AI_INVENTORY_KINDS as readonly string[]).includes(kind)) {\n return null\n }\n const raw = input['query']\n const query = typeof raw === 'string' ? raw.replace(/\\s+/g, ' ').trim() : ''\n return { kind: kind as AiInventoryKind, query: query || null }\n}\n\n/** The lines an answer lists, capped by count and then by characters. */\nfunction listed(lines: readonly string[]): { rendered: string[]; cut: boolean } {\n const rendered: string[] = []\n let used = 0\n for (const line of lines.slice(0, AI_INVENTORY_LOOKUP_MAX_ROWS)) {\n if (used + line.length + 3 > AI_INVENTORY_LOOKUP_MAX_CHARS) {\n return { rendered, cut: true }\n }\n rendered.push(line)\n used += line.length + 3\n }\n return { rendered, cut: lines.length > rendered.length }\n}\n\n/**\n * One lookup, answered out of the inventory the request was built from.\n *\n * The answer is plain text in the same `id · name · …` shape the prompt's own\n * block uses, so a record found here reads exactly like a record that was\n * listed, and a plan refers to either by id the same way. It says how many\n * records were searched, so \"nothing matched\" is told apart from \"nothing is\n * there\" — the distinction rule 7 turns on.\n */\nexport function answerAiInventoryLookup(\n inventory: AiSiteInventory | null,\n input: Record<string, unknown>,\n): string {\n if (!inventory) {\n return 'No site inventory was read for this request, so there is nothing to look up.'\n }\n const asked = readAiInventoryLookup(input)\n if (!asked) {\n return `That is not a kind of record this site has. The kinds are: ${AI_INVENTORY_KINDS.join(', ')}.`\n }\n const rows = aiInventoryRows(inventory, asked.kind)\n const needle = asked.query ? asked.query.toLowerCase() : null\n const matches = needle\n ? rows.filter((row) => aiInventoryHaystack(asked.kind, row).includes(needle))\n : rows.slice(AI_SITE_INVENTORY_LISTED_PER_KIND)\n // \"None match\" and \"there are none\" are different answers, and rule 7 turns\n // on the difference, so every answer says what it searched.\n const held = `this site's ${rows.length} ${asked.kind}`\n if (!matches.length) {\n const more = inventory.truncated.includes(asked.kind)\n ? ' More exist than were read, so this is not proof there is none.'\n : ''\n return needle\n ? `None of ${held} matches \"${asked.query}\".${more}`\n : `Every one of ${held} was listed above.${more}`\n }\n const { rendered, cut } = listed(matches.map((row) => aiInventoryLine(asked.kind, row)))\n const head = needle\n ? `${matches.length} of ${held} match \"${asked.query}\".`\n : `${matches.length} of ${held} were not listed above.`\n return [\n head,\n `${AI_INVENTORY_KIND_HEADINGS[asked.kind]}:`,\n ...rendered.map((line) => `- ${line}`),\n ...(cut ? ['More match than are listed here. Narrow the query to see the rest.'] : []),\n ].join('\\n')\n}\n"],"names":["AI_INVENTORY_KINDS","AI_INVENTORY_KIND_HEADINGS","AI_SITE_INVENTORY_LISTED_PER_KIND","aiInventoryHaystack","aiInventoryLine","aiInventoryRows","AI_INVENTORY_LOOKUP_TOOL_NAME","AI_INVENTORY_LOOKUP_MAX_ROWS","AI_INVENTORY_LOOKUP_MAX_CHARS","AI_INVENTORY_LOOKUP_MAX_ROUNDS","aiInventoryLookupTool","name","description","strict","inputSchema","type","properties","kind","enum","query","anyOf","required","additionalProperties","readAiInventoryLookup","input","includes","raw","replace","trim","listed","lines","rendered","used","line","slice","length","cut","push","answerAiInventoryLookup","inventory","asked","join","rows","needle","toLowerCase","matches","filter","row","held","more","truncated","map","head"],"mappings":"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"}
@@ -0,0 +1,65 @@
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 AiCatalogProduct, type AiCategoriesProposal, type AiProductCopy } from '../model/ai-products';
18
+ import type { AiTool } from '../providers/contract';
19
+ import type { AiGenerationCheckResult } from '../runtime/ai-doctrine';
20
+ /**
21
+ * The strict tools commerce by AI answers through (AGL-2916), and the checks
22
+ * that hold each answer to the commerce editor it proposes for.
23
+ *
24
+ * - `propose_product_copy` — one product's description, search listing, tags,
25
+ * categories and option names.
26
+ * - `propose_catalog` — a store's first products, from a brief.
27
+ * - `propose_categories_and_discounts` — store categories and a first set of
28
+ * discounts, from a brief.
29
+ *
30
+ * Each schema is kept small, and no field is nullable: "none" is an empty
31
+ * string, an empty list or zero. A strict schema accepts no length keyword,
32
+ * so every bound is stated in a description and enforced here. A check
33
+ * returns a value only when nothing in the answer is broken, and otherwise
34
+ * the violations and the parts at fault, for the generation call's one
35
+ * re-ask.
36
+ */
37
+ export declare const AI_PRODUCT_COPY_TOOL_NAME = "propose_product_copy";
38
+ export declare const AI_CATALOG_TOOL_NAME = "propose_catalog";
39
+ export declare const AI_CATEGORIES_TOOL_NAME = "propose_categories_and_discounts";
40
+ export declare const AI_PRODUCT_COPY_TOOL: AiTool;
41
+ export interface AiProductCopyCheckContext {
42
+ /** The ids of the site's categories the request listed. */
43
+ categoryIds: readonly string[];
44
+ /** How many options the product has. */
45
+ optionCount: number;
46
+ /** The merchant's own words about the product: its name, text and tags. */
47
+ merchantWords: string;
48
+ }
49
+ /**
50
+ * A product copy answer held to the editor: every field written and within
51
+ * its length, plain text, the categories the request listed, one distinct
52
+ * name per option, and no claim or price the copy may not make.
53
+ */
54
+ export declare function checkAiProductCopy(answer: Record<string, unknown>, context: AiProductCopyCheckContext): AiGenerationCheckResult<AiProductCopy>;
55
+ export declare const AI_CATALOG_TOOL: AiTool;
56
+ /** A catalog answer held to the products editor and the storefront copy rules. */
57
+ export declare function checkAiCatalog(answer: Record<string, unknown>, context: {
58
+ merchantWords: string;
59
+ }): AiGenerationCheckResult<AiCatalogProduct[]>;
60
+ export declare const AI_CATEGORIES_TOOL: AiTool;
61
+ /** A categories answer held to the catalog and discount editors and the storefront copy rules. */
62
+ export declare function checkAiCategories(answer: Record<string, unknown>, context: {
63
+ existingCategoryNames: readonly string[];
64
+ merchantWords: string;
65
+ }): AiGenerationCheckResult<Pick<AiCategoriesProposal, 'categories' | 'discounts'>>;