@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,262 @@
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 { CLIENT_ACTION_STEP_TYPES, HOST_ACTION_STEP_LABELS, normalizeTriggerConditions } from "@aglyn/aglyn/app-utils/actions";
17
+ import { automationPlaceholderIn } from "@aglyn/aglyn/app-utils/automation-placeholders";
18
+ import { CONTACT_LIFECYCLE_STAGE_LABELS } from "@aglyn/aglyn/app-utils/crm";
19
+ import { aiAutomationTriggerLabel } from "./ai-workflow-job.js";
20
+ /**
21
+ * What an explanation is asked from (AGL-2919): a saved automation, and one of
22
+ * its failed runs, as plain lines a model reads — never the stored documents.
23
+ *
24
+ * WHAT IS LEFT OUT. An email address anywhere — a condition's value, an
25
+ * email's text, a run's error naming the contact it could not find — becomes
26
+ * `[email address]`. A teammate named by account id or address is "a named
27
+ * teammate". A selector, a script or HTML an on-page step holds is not shown
28
+ * at all; the step is named by its label. A run's event payload, which holds
29
+ * what a visitor submitted, is never read. What is shown is how the automation
30
+ * is set up, and what the run history recorded about the run.
31
+ *
32
+ * WHAT IS ADDED. Whether each list, campaign, workflow, webhook or dataset a
33
+ * step names still exists on the site, looked up in code, because "that list
34
+ * was deleted" is the answer to the most common failure and a model cannot
35
+ * find it out.
36
+ */ /** An email address, wherever it appears in a line. */ const EMAIL_ADDRESS = /[^\s@<>()[\]"',;:]+@[^\s@<>()[\]"',;:]+\.[A-Za-z]{2,}/g;
37
+ /** How much of an email's text an outline quotes. */ export const AI_OUTLINE_BODY_MAX_CHARS = 300;
38
+ /** How much of any other value an outline quotes. */ export const AI_OUTLINE_VALUE_MAX_CHARS = 120;
39
+ /** The most errors of one run an outline lists. */ export const AI_OUTLINE_RUN_ERRORS_MAX = 10;
40
+ /** A line with every email address replaced by what it is. */ export function aiRedactPersonal(text) {
41
+ return text.replace(EMAIL_ADDRESS, '[email address]');
42
+ }
43
+ function quoted(value, max = AI_OUTLINE_VALUE_MAX_CHARS) {
44
+ const text = aiRedactPersonal(String(value != null ? value : '').replace(/\s+/g, ' ').trim());
45
+ return `"${text.length > max ? `${text.slice(0, max)}…` : text}"`;
46
+ }
47
+ function conditionLine(condition) {
48
+ var _condition_field, _condition_value;
49
+ const field = String((_condition_field = condition.field) != null ? _condition_field : '');
50
+ if (condition.op === 'notEmpty') return `${field} is not empty`;
51
+ const value = String((_condition_value = condition.value) != null ? _condition_value : '');
52
+ const stage = CONTACT_LIFECYCLE_STAGE_LABELS[value];
53
+ const placeholder = automationPlaceholderIn(value) ? ' (a placeholder nobody has filled in)' : '';
54
+ return `${field} ${condition.op} ${stage ? `"${stage}"` : quoted(value)}${placeholder}`;
55
+ }
56
+ /** The kind of site record each step that names one names. */ export const AI_OUTLINE_RECORD_KINDS = {
57
+ enrollList: 'lists',
58
+ assignCampaign: 'campaigns',
59
+ runWorkflow: 'workflows',
60
+ webhookPost: 'webhooks',
61
+ datasetAppend: 'datasets',
62
+ updateDataset: 'datasets'
63
+ };
64
+ /** The kinds of site record an action's steps name, each once. */ export function aiActionRecordKinds(action) {
65
+ var _action_steps;
66
+ const kinds = ((_action_steps = action.steps) != null ? _action_steps : []).map((step)=>AI_OUTLINE_RECORD_KINDS[step == null ? void 0 : step.type]);
67
+ return [
68
+ ...new Set(kinds.filter((kind)=>Boolean(kind)))
69
+ ];
70
+ }
71
+ /** Whether the site holds a record by the id or the name a step stores. */ function standing(id, name, records) {
72
+ if (automationPlaceholderIn(name) && !String(id != null ? id : '').trim()) {
73
+ return ' — a placeholder nobody has filled in';
74
+ }
75
+ if (!records) return '';
76
+ const found = records.some((record)=>typeof id === 'string' && id && record.id === id || typeof name === 'string' && name && record.name.trim() === name.trim());
77
+ return found ? ' — the site has it' : ' — the site has none by that name';
78
+ }
79
+ function stepLine(step, records) {
80
+ var _HOST_ACTION_STEP_LABELS_step_type, _ref;
81
+ var _step_when, _step_when1;
82
+ const label = (_HOST_ACTION_STEP_LABELS_step_type = HOST_ACTION_STEP_LABELS[step.type]) != null ? _HOST_ACTION_STEP_LABELS_step_type : step.type;
83
+ const detail = (()=>{
84
+ switch(step.type){
85
+ case 'sendEmail':
86
+ return `subject ${quoted(step.subject)}, text ${quoted(step.body, AI_OUTLINE_BODY_MAX_CHARS)}, to the event's ${step.toField || 'email'} field`;
87
+ case 'notifyAdmins':
88
+ return quoted(step.title);
89
+ case 'enrollList':
90
+ var _ref;
91
+ return `${quoted(step.listName || step.listId)}${standing(step.listId, step.listName, (_ref = records == null ? void 0 : records.lists) != null ? _ref : null)}`;
92
+ case 'assignCampaign':
93
+ var _ref1;
94
+ return `${quoted(step.campaignName || step.campaignId)}${standing(step.campaignId, step.campaignName, (_ref1 = records == null ? void 0 : records.campaigns) != null ? _ref1 : null)}`;
95
+ case 'runWorkflow':
96
+ var _ref2;
97
+ return `${quoted(step.workflowName || step.workflowId)}${standing(step.workflowId, step.workflowName, (_ref2 = records == null ? void 0 : records.workflows) != null ? _ref2 : null)}`;
98
+ case 'webhookPost':
99
+ var _ref3;
100
+ return `${quoted(step.webhookName || step.webhookId)}${standing(step.webhookId, step.webhookName, (_ref3 = records == null ? void 0 : records.webhooks) != null ? _ref3 : null)}`;
101
+ case 'datasetAppend':
102
+ case 'updateDataset':
103
+ var _ref4;
104
+ return `${quoted(step.datasetName || step.datasetId)}${standing(step.datasetId, step.datasetName, (_ref4 = records == null ? void 0 : records.datasets) != null ? _ref4 : null)}`;
105
+ case 'siteAlert':
106
+ return quoted(step.message);
107
+ case 'wait':
108
+ return durationOf(step.delayMinutes);
109
+ case 'waitForEvent':
110
+ return `${aiAutomationTriggerLabel(step.eventName)}, giving up after ${durationOf(step.timeoutMinutes)}`;
111
+ case 'exitFlow':
112
+ return '';
113
+ case 'setContactStage':
114
+ var _CONTACT_LIFECYCLE_STAGE_LABELS_step_lifecycleStage;
115
+ return `"${(_CONTACT_LIFECYCLE_STAGE_LABELS_step_lifecycleStage = CONTACT_LIFECYCLE_STAGE_LABELS[step.lifecycleStage]) != null ? _CONTACT_LIFECYCLE_STAGE_LABELS_step_lifecycleStage : step.lifecycleStage}"`;
116
+ case 'addContactTag':
117
+ return quoted(step.tag);
118
+ case 'assignContactOwner':
119
+ return step.roundRobin ? 'by round robin' : 'a named teammate';
120
+ case 'createCrmTask':
121
+ return `${quoted(step.title)}, a ${step.kind}, due in ${step.dueInDays} ${step.dueInDays === 1 ? 'day' : 'days'}${step.assigneeUid || step.assigneeEmail ? ', for a named teammate' : ''}`;
122
+ case 'logCrmActivity':
123
+ return `a ${step.kind}: ${quoted(step.body)}`;
124
+ case 'customEvent':
125
+ return quoted(step.eventName);
126
+ default:
127
+ return CLIENT_ACTION_STEP_TYPES.has(step.type) ? 'runs in the visitor’s browser on the page' : '';
128
+ }
129
+ })();
130
+ const guard = ((_ref = (_step_when = step.when) == null ? void 0 : _step_when.conditions) != null ? _ref : []).filter(Boolean);
131
+ const only = guard.length ? ` Only if ${guard.map(conditionLine).join(((_step_when1 = step.when) == null ? void 0 : _step_when1.combinator) === 'or' ? ' or ' : ' and ')}.` : '';
132
+ return `${label}${detail ? `: ${detail}` : ''}.${only}`;
133
+ }
134
+ /** Minutes as a person says them. */ function durationOf(minutes) {
135
+ const value = Number(minutes);
136
+ if (!Number.isFinite(value) || value <= 0) return 'no time';
137
+ const units = [
138
+ [
139
+ 60 * 24 * 7,
140
+ 'week'
141
+ ],
142
+ [
143
+ 60 * 24,
144
+ 'day'
145
+ ],
146
+ [
147
+ 60,
148
+ 'hour'
149
+ ],
150
+ [
151
+ 1,
152
+ 'minute'
153
+ ]
154
+ ];
155
+ for (const [size, unit] of units){
156
+ if (value % size === 0) {
157
+ const count = value / size;
158
+ return `${count} ${unit}${count === 1 ? '' : 's'}`;
159
+ }
160
+ }
161
+ return `${value} minutes`;
162
+ }
163
+ /** A saved action as an outline. */ export function aiActionOutline(action, records) {
164
+ var _ref, _action_steps, _action_steps1;
165
+ var _action_trigger, _action_trigger_filter, _action_trigger1;
166
+ const lines = [
167
+ `Automation: ${quoted(action.name)} — an action, switched ${action.enabled === false ? 'off' : 'on'}.`,
168
+ `Starts when: ${aiAutomationTriggerLabel(String((_ref = (_action_trigger = action.trigger) == null ? void 0 : _action_trigger.event) != null ? _ref : ''))}.`
169
+ ];
170
+ const conditions = normalizeTriggerConditions(action.trigger);
171
+ if (conditions.length) {
172
+ var _action_trigger2;
173
+ lines.push(`Only when ${((_action_trigger2 = action.trigger) == null ? void 0 : _action_trigger2.combinator) === 'or' ? 'any' : 'all'} of these hold: ${conditions.map(conditionLine).join('; ')}.`);
174
+ }
175
+ if ((_action_trigger1 = action.trigger) == null ? void 0 : (_action_trigger_filter = _action_trigger1.filter) == null ? void 0 : _action_trigger_filter.trim()) {
176
+ lines.push(`And only when this expression is true: ${quoted(action.trigger.filter)}.`);
177
+ }
178
+ lines.push('Steps, in order:');
179
+ ((_action_steps = action.steps) != null ? _action_steps : []).forEach((step, index)=>{
180
+ lines.push(`${index + 1}. ${stepLine(step, records)}`);
181
+ });
182
+ if (!((_action_steps1 = action.steps) != null ? _action_steps1 : []).length) lines.push('(none)');
183
+ return lines.join('\n');
184
+ }
185
+ /** A saved workflow — a pipeline of function calls — as an outline. */ export function aiWorkflowOutline(workflow, functions) {
186
+ var _workflow_steps, _workflow_steps1;
187
+ var _workflow_trigger, _workflow_returnValue;
188
+ const lines = [
189
+ `Workflow: ${quoted(workflow.name)} — a workflow, a list of function calls.`
190
+ ];
191
+ if ((_workflow_trigger = workflow.trigger) == null ? void 0 : _workflow_trigger.event) {
192
+ var _workflow_trigger_filter;
193
+ const filter = (_workflow_trigger_filter = workflow.trigger.filter) == null ? void 0 : _workflow_trigger_filter.trim();
194
+ lines.push(`Starts when: ${aiAutomationTriggerLabel(workflow.trigger.event)}${filter ? `, only when this expression is true: ${quoted(filter)}` : ''}.`);
195
+ } else {
196
+ lines.push('Starts when: it is called — by an automation, an inbound webhook or a computed variable.');
197
+ }
198
+ lines.push('Steps, in order:');
199
+ ((_workflow_steps = workflow.steps) != null ? _workflow_steps : []).forEach((step, index)=>{
200
+ var _step_args;
201
+ const name = step.functionName || step.functionId || '';
202
+ const exists = standing(step.functionId, step.functionName, functions);
203
+ const args = ((_step_args = step.args) != null ? _step_args : []).filter((arg)=>String(arg != null ? arg : '').trim());
204
+ lines.push(`${index + 1}. Runs the function ${quoted(name)}${exists}${args.length ? `, given ${args.map((arg)=>quoted(arg)).join(', ')}` : ''}; its result is kept as ${quoted(step.resultName || `step${index + 1}`)}.`);
205
+ });
206
+ if (!((_workflow_steps1 = workflow.steps) != null ? _workflow_steps1 : []).length) lines.push('(none)');
207
+ if ((_workflow_returnValue = workflow.returnValue) == null ? void 0 : _workflow_returnValue.trim()) lines.push(`Returns: ${quoted(workflow.returnValue)}.`);
208
+ return lines.join('\n');
209
+ }
210
+ function whenOf(value) {
211
+ const toDate = value == null ? void 0 : value.toDate;
212
+ const date = typeof toDate === 'function' ? toDate.call(value) : value instanceof Date ? value : null;
213
+ return date && Number.isFinite(date.getTime()) ? `${date.toISOString().slice(0, 16).replace('T', ' ')} UTC` : null;
214
+ }
215
+ /** The errors a run recorded: the prose after "with errors:", or a workflow's failure. */ export function aiRunErrors(run) {
216
+ var _run_action, _ref, _run_summary;
217
+ var _action_match, _action_match1;
218
+ const action = String((_run_action = run.action) != null ? _run_action : '');
219
+ const listed = (_action_match = action.match(/with errors:\s*(.+)$/)) == null ? void 0 : _action_match[1];
220
+ if (listed) {
221
+ return listed.split(/;\s+/).map((error)=>error.trim()).filter(Boolean).slice(0, AI_OUTLINE_RUN_ERRORS_MAX);
222
+ }
223
+ const failed = (_ref = (_action_match1 = action.match(/failed on [^:]+:\s*(.+)$/)) == null ? void 0 : _action_match1[1]) != null ? _ref : run.result === 'failed' ? String((_run_summary = run.summary) != null ? _run_summary : '') : '';
224
+ return failed.trim() ? [
225
+ failed.trim()
226
+ ] : [];
227
+ }
228
+ /** A failed run as an outline: when, on what, what it did, and what went wrong. */ export function aiRunOutline(run) {
229
+ var _run_trigger, _run_summary;
230
+ const when = whenOf(run.createdAt);
231
+ const lines = [
232
+ `The run that failed: on ${aiAutomationTriggerLabel(String((_run_trigger = run.trigger) != null ? _run_trigger : ''))}${when ? `, ${when}` : ''}.`
233
+ ];
234
+ const summary = String((_run_summary = run.summary) != null ? _run_summary : '').trim();
235
+ const errors = aiRunErrors(run);
236
+ if (summary && !errors.includes(summary)) lines.push(`What it did: ${aiRedactPersonal(summary)}.`);
237
+ lines.push('What went wrong:');
238
+ lines.push(...errors.length ? errors.map((error)=>`- ${aiRedactPersonal(error)}`) : [
239
+ '- (the run recorded no error)'
240
+ ]);
241
+ return lines.join('\n');
242
+ }
243
+ /** An explanation as the text a person reads. */ export function aiWorkflowExplanationText(explanation, mode) {
244
+ const parts = [
245
+ explanation.summary
246
+ ];
247
+ if (explanation.points.length) {
248
+ parts.push([
249
+ mode === 'diagnose' ? 'What happened:' : 'What it does:',
250
+ ...explanation.points.map((point, index)=>`${index + 1}. ${point}`)
251
+ ].join('\n'));
252
+ }
253
+ if (explanation.suggestions.length) {
254
+ parts.push([
255
+ mode === 'diagnose' ? 'How to fix it:' : 'Worth checking:',
256
+ ...explanation.suggestions.map((suggestion)=>`- ${suggestion}`)
257
+ ].join('\n'));
258
+ }
259
+ return parts.join('\n\n');
260
+ }
261
+
262
+ //# sourceMappingURL=ai-automation-outline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/model/ai-automation-outline.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 CLIENT_ACTION_STEP_TYPES,\n HOST_ACTION_STEP_LABELS,\n type HostAction,\n type HostActionStep,\n type HostActionStepType,\n type HostActionTriggerCondition,\n normalizeTriggerConditions,\n} from '@aglyn/aglyn/app-utils/actions'\nimport { automationPlaceholderIn } from '@aglyn/aglyn/app-utils/automation-placeholders'\nimport { CONTACT_LIFECYCLE_STAGE_LABELS, type ContactLifecycleStage } from '@aglyn/aglyn/app-utils/crm'\nimport type { HostWorkflow } from '@aglyn/aglyn/app-utils/workflows'\nimport { aiAutomationTriggerLabel } from './ai-workflow-job'\nimport type { AiAutomationNamedRecord, AiAutomationRecords } from './ai-automation-draft'\nimport type { AiWorkflowExplanation } from '../tools/ai-workflow-tool'\n\n/**\n * What an explanation is asked from (AGL-2919): a saved automation, and one of\n * its failed runs, as plain lines a model reads — never the stored documents.\n *\n * WHAT IS LEFT OUT. An email address anywhere — a condition's value, an\n * email's text, a run's error naming the contact it could not find — becomes\n * `[email address]`. A teammate named by account id or address is \"a named\n * teammate\". A selector, a script or HTML an on-page step holds is not shown\n * at all; the step is named by its label. A run's event payload, which holds\n * what a visitor submitted, is never read. What is shown is how the automation\n * is set up, and what the run history recorded about the run.\n *\n * WHAT IS ADDED. Whether each list, campaign, workflow, webhook or dataset a\n * step names still exists on the site, looked up in code, because \"that list\n * was deleted\" is the answer to the most common failure and a model cannot\n * find it out.\n */\n\n/** An email address, wherever it appears in a line. */\nconst EMAIL_ADDRESS = /[^\\s@<>()[\\]\"',;:]+@[^\\s@<>()[\\]\"',;:]+\\.[A-Za-z]{2,}/g\n\n/** How much of an email's text an outline quotes. */\nexport const AI_OUTLINE_BODY_MAX_CHARS = 300\n/** How much of any other value an outline quotes. */\nexport const AI_OUTLINE_VALUE_MAX_CHARS = 120\n/** The most errors of one run an outline lists. */\nexport const AI_OUTLINE_RUN_ERRORS_MAX = 10\n\n/** A line with every email address replaced by what it is. */\nexport function aiRedactPersonal(text: string): string {\n return text.replace(EMAIL_ADDRESS, '[email address]')\n}\n\nfunction quoted(value: unknown, max = AI_OUTLINE_VALUE_MAX_CHARS): string {\n const text = aiRedactPersonal(String(value ?? '').replace(/\\s+/g, ' ').trim())\n return `\"${text.length > max ? `${text.slice(0, max)}…` : text}\"`\n}\n\nfunction conditionLine(condition: HostActionTriggerCondition): string {\n const field = String(condition.field ?? '')\n if (condition.op === 'notEmpty') return `${field} is not empty`\n const value = String(condition.value ?? '')\n const stage = CONTACT_LIFECYCLE_STAGE_LABELS[value as ContactLifecycleStage]\n const placeholder = automationPlaceholderIn(value) ? ' (a placeholder nobody has filled in)' : ''\n return `${field} ${condition.op} ${stage ? `\"${stage}\"` : quoted(value)}${placeholder}`\n}\n\n/** The kind of site record each step that names one names. */\nexport const AI_OUTLINE_RECORD_KINDS: Readonly<\n Partial<Record<HostActionStepType, 'lists' | 'campaigns' | 'workflows' | 'webhooks' | 'datasets'>>\n> = {\n enrollList: 'lists',\n assignCampaign: 'campaigns',\n runWorkflow: 'workflows',\n webhookPost: 'webhooks',\n datasetAppend: 'datasets',\n updateDataset: 'datasets',\n}\n\n/** The kinds of site record an action's steps name, each once. */\nexport function aiActionRecordKinds(action: Pick<HostAction, 'steps'>): Array<keyof AiAutomationRecords> {\n const kinds = (action.steps ?? []).map((step) => AI_OUTLINE_RECORD_KINDS[step?.type as HostActionStepType])\n return [...new Set(kinds.filter((kind): kind is NonNullable<typeof kind> => Boolean(kind)))]\n}\n\n/** Whether the site holds a record by the id or the name a step stores. */\nfunction standing(\n id: unknown,\n name: unknown,\n records: readonly AiAutomationNamedRecord[] | null,\n): string {\n if (automationPlaceholderIn(name) && !String(id ?? '').trim()) {\n return ' — a placeholder nobody has filled in'\n }\n if (!records) return ''\n const found = records.some(\n (record) =>\n (typeof id === 'string' && id && record.id === id) ||\n (typeof name === 'string' && name && record.name.trim() === name.trim()),\n )\n return found ? ' — the site has it' : ' — the site has none by that name'\n}\n\nfunction stepLine(\n step: HostActionStep,\n records: AiAutomationRecords | null,\n): string {\n const label = HOST_ACTION_STEP_LABELS[step.type as HostActionStepType] ?? step.type\n const detail = (() => {\n switch (step.type) {\n case 'sendEmail':\n return `subject ${quoted(step.subject)}, text ${quoted(step.body, AI_OUTLINE_BODY_MAX_CHARS)}, to the event's ${step.toField || 'email'} field`\n case 'notifyAdmins':\n return quoted(step.title)\n case 'enrollList':\n return `${quoted(step.listName || step.listId)}${standing(step.listId, step.listName, records?.lists ?? null)}`\n case 'assignCampaign':\n return `${quoted(step.campaignName || step.campaignId)}${standing(step.campaignId, step.campaignName, records?.campaigns ?? null)}`\n case 'runWorkflow':\n return `${quoted(step.workflowName || step.workflowId)}${standing(step.workflowId, step.workflowName, records?.workflows ?? null)}`\n case 'webhookPost':\n return `${quoted(step.webhookName || step.webhookId)}${standing(step.webhookId, step.webhookName, records?.webhooks ?? null)}`\n case 'datasetAppend':\n case 'updateDataset':\n return `${quoted(step.datasetName || step.datasetId)}${standing(step.datasetId, step.datasetName, records?.datasets ?? null)}`\n case 'siteAlert':\n return quoted(step.message)\n case 'wait':\n return durationOf(step.delayMinutes)\n case 'waitForEvent':\n return `${aiAutomationTriggerLabel(step.eventName)}, giving up after ${durationOf(step.timeoutMinutes)}`\n case 'exitFlow':\n return ''\n case 'setContactStage':\n return `\"${CONTACT_LIFECYCLE_STAGE_LABELS[step.lifecycleStage] ?? step.lifecycleStage}\"`\n case 'addContactTag':\n return quoted(step.tag)\n case 'assignContactOwner':\n return step.roundRobin ? 'by round robin' : 'a named teammate'\n case 'createCrmTask':\n return `${quoted(step.title)}, a ${step.kind}, due in ${step.dueInDays} ${step.dueInDays === 1 ? 'day' : 'days'}${\n step.assigneeUid || step.assigneeEmail ? ', for a named teammate' : ''\n }`\n case 'logCrmActivity':\n return `a ${step.kind}: ${quoted(step.body)}`\n case 'customEvent':\n return quoted(step.eventName)\n default:\n return CLIENT_ACTION_STEP_TYPES.has(step.type) ? 'runs in the visitor’s browser on the page' : ''\n }\n })()\n const guard = (step.when?.conditions ?? []).filter(Boolean)\n const only = guard.length\n ? ` Only if ${guard.map(conditionLine).join(step.when?.combinator === 'or' ? ' or ' : ' and ')}.`\n : ''\n return `${label}${detail ? `: ${detail}` : ''}.${only}`\n}\n\n/** Minutes as a person says them. */\nfunction durationOf(minutes: unknown): string {\n const value = Number(minutes)\n if (!Number.isFinite(value) || value <= 0) return 'no time'\n const units: Array<[number, string]> = [\n [60 * 24 * 7, 'week'],\n [60 * 24, 'day'],\n [60, 'hour'],\n [1, 'minute'],\n ]\n for (const [size, unit] of units) {\n if (value % size === 0) {\n const count = value / size\n return `${count} ${unit}${count === 1 ? '' : 's'}`\n }\n }\n return `${value} minutes`\n}\n\n/** A saved action as an outline. */\nexport function aiActionOutline(\n action: HostAction,\n records: AiAutomationRecords | null,\n): string {\n const lines = [\n `Automation: ${quoted(action.name)} — an action, switched ${action.enabled === false ? 'off' : 'on'}.`,\n `Starts when: ${aiAutomationTriggerLabel(String(action.trigger?.event ?? ''))}.`,\n ]\n const conditions = normalizeTriggerConditions(action.trigger)\n if (conditions.length) {\n lines.push(\n `Only when ${action.trigger?.combinator === 'or' ? 'any' : 'all'} of these hold: ${conditions\n .map(conditionLine)\n .join('; ')}.`,\n )\n }\n if (action.trigger?.filter?.trim()) {\n lines.push(`And only when this expression is true: ${quoted(action.trigger.filter)}.`)\n }\n lines.push('Steps, in order:')\n ;(action.steps ?? []).forEach((step, index) => {\n lines.push(`${index + 1}. ${stepLine(step, records)}`)\n })\n if (!(action.steps ?? []).length) lines.push('(none)')\n return lines.join('\\n')\n}\n\n/** A saved workflow — a pipeline of function calls — as an outline. */\nexport function aiWorkflowOutline(\n workflow: HostWorkflow,\n functions: readonly AiAutomationNamedRecord[] | null,\n): string {\n const lines = [`Workflow: ${quoted(workflow.name)} — a workflow, a list of function calls.`]\n if (workflow.trigger?.event) {\n const filter = workflow.trigger.filter?.trim()\n lines.push(\n `Starts when: ${aiAutomationTriggerLabel(workflow.trigger.event)}${\n filter ? `, only when this expression is true: ${quoted(filter)}` : ''\n }.`,\n )\n } else {\n lines.push('Starts when: it is called — by an automation, an inbound webhook or a computed variable.')\n }\n lines.push('Steps, in order:')\n ;(workflow.steps ?? []).forEach((step, index) => {\n const name = step.functionName || step.functionId || ''\n const exists = standing(step.functionId, step.functionName, functions)\n const args = (step.args ?? []).filter((arg) => String(arg ?? '').trim())\n lines.push(\n `${index + 1}. Runs the function ${quoted(name)}${exists}${\n args.length ? `, given ${args.map((arg) => quoted(arg)).join(', ')}` : ''\n }; its result is kept as ${quoted(step.resultName || `step${index + 1}`)}.`,\n )\n })\n if (!(workflow.steps ?? []).length) lines.push('(none)')\n if (workflow.returnValue?.trim()) lines.push(`Returns: ${quoted(workflow.returnValue)}.`)\n return lines.join('\\n')\n}\n\n/** What the run history recorded about one run, as far as an outline reads it. */\nexport interface AiRunRecord {\n result?: unknown\n trigger?: unknown\n summary?: unknown\n action?: unknown\n createdAt?: unknown\n}\n\nfunction whenOf(value: unknown): string | null {\n const toDate = (value as { toDate?: () => Date } | null)?.toDate\n const date =\n typeof toDate === 'function'\n ? toDate.call(value)\n : value instanceof Date\n ? value\n : null\n return date && Number.isFinite(date.getTime()) ? `${date.toISOString().slice(0, 16).replace('T', ' ')} UTC` : null\n}\n\n/** The errors a run recorded: the prose after \"with errors:\", or a workflow's failure. */\nexport function aiRunErrors(run: AiRunRecord): string[] {\n const action = String(run.action ?? '')\n const listed = action.match(/with errors:\\s*(.+)$/)?.[1]\n if (listed) {\n return listed\n .split(/;\\s+/)\n .map((error) => error.trim())\n .filter(Boolean)\n .slice(0, AI_OUTLINE_RUN_ERRORS_MAX)\n }\n const failed = action.match(/failed on [^:]+:\\s*(.+)$/)?.[1] ?? (run.result === 'failed' ? String(run.summary ?? '') : '')\n return failed.trim() ? [failed.trim()] : []\n}\n\n/** A failed run as an outline: when, on what, what it did, and what went wrong. */\nexport function aiRunOutline(run: AiRunRecord): string {\n const when = whenOf(run.createdAt)\n const lines = [\n `The run that failed: on ${aiAutomationTriggerLabel(String(run.trigger ?? ''))}${when ? `, ${when}` : ''}.`,\n ]\n const summary = String(run.summary ?? '').trim()\n const errors = aiRunErrors(run)\n if (summary && !errors.includes(summary)) lines.push(`What it did: ${aiRedactPersonal(summary)}.`)\n lines.push('What went wrong:')\n lines.push(...(errors.length ? errors.map((error) => `- ${aiRedactPersonal(error)}`) : ['- (the run recorded no error)']))\n return lines.join('\\n')\n}\n\n/** An explanation as the text a person reads. */\nexport function aiWorkflowExplanationText(\n explanation: AiWorkflowExplanation,\n mode: 'explain' | 'diagnose',\n): string {\n const parts = [explanation.summary]\n if (explanation.points.length) {\n parts.push(\n [\n mode === 'diagnose' ? 'What happened:' : 'What it does:',\n ...explanation.points.map((point, index) => `${index + 1}. ${point}`),\n ].join('\\n'),\n )\n }\n if (explanation.suggestions.length) {\n parts.push(\n [\n mode === 'diagnose' ? 'How to fix it:' : 'Worth checking:',\n ...explanation.suggestions.map((suggestion) => `- ${suggestion}`),\n ].join('\\n'),\n )\n }\n return parts.join('\\n\\n')\n}\n"],"names":["CLIENT_ACTION_STEP_TYPES","HOST_ACTION_STEP_LABELS","normalizeTriggerConditions","automationPlaceholderIn","CONTACT_LIFECYCLE_STAGE_LABELS","aiAutomationTriggerLabel","EMAIL_ADDRESS","AI_OUTLINE_BODY_MAX_CHARS","AI_OUTLINE_VALUE_MAX_CHARS","AI_OUTLINE_RUN_ERRORS_MAX","aiRedactPersonal","text","replace","quoted","value","max","String","trim","length","slice","conditionLine","condition","field","op","stage","placeholder","AI_OUTLINE_RECORD_KINDS","enrollList","assignCampaign","runWorkflow","webhookPost","datasetAppend","updateDataset","aiActionRecordKinds","action","kinds","steps","map","step","type","Set","filter","kind","Boolean","standing","id","name","records","found","some","record","stepLine","label","detail","subject","body","toField","title","listName","listId","lists","campaignName","campaignId","campaigns","workflowName","workflowId","workflows","webhookName","webhookId","webhooks","datasetName","datasetId","datasets","message","durationOf","delayMinutes","eventName","timeoutMinutes","lifecycleStage","tag","roundRobin","dueInDays","assigneeUid","assigneeEmail","has","guard","when","conditions","only","join","combinator","minutes","Number","isFinite","units","size","unit","count","aiActionOutline","lines","enabled","trigger","event","push","forEach","index","aiWorkflowOutline","workflow","functions","functionName","functionId","exists","args","arg","resultName","returnValue","whenOf","toDate","date","call","Date","getTime","toISOString","aiRunErrors","run","listed","match","split","error","failed","result","summary","aiRunOutline","createdAt","errors","includes","aiWorkflowExplanationText","explanation","mode","parts","points","point","suggestions","suggestion"],"mappings":"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"}
@@ -0,0 +1,197 @@
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 { AiTool } from '../providers/contract';
18
+ /**
19
+ * The plan a generation job builds from (AGL-2935): what the job's plan step
20
+ * (`jobs/ai-job-plan-step.ts`) returns, before a single node is generated.
21
+ *
22
+ * This module is the plan's MODEL — its shape, its tool schema and its
23
+ * reader — and imports nothing at runtime, so the doctrine validators, the
24
+ * plan step, the job document and the proposal can all read it without
25
+ * importing each other.
26
+ *
27
+ * A plan is REFERENCES, never documents (AGL-2937). It names what the site
28
+ * already has by inventory id, what the job will create by a short name, and
29
+ * which screens it builds from which of those — so the doctrine can be held
30
+ * against the plan while fixing it costs a sentence, not a regenerated page,
31
+ * and the customer reads what the job will do before it spends a credit on
32
+ * doing it.
33
+ *
34
+ * `new:<name>` is how an entry refers to something the plan itself creates;
35
+ * any other reference is an id from the site inventory.
36
+ */
37
+ export declare const AI_PLAN_NEW_REF_PREFIX = "new:";
38
+ /** Records a plan may reuse, by the inventory list they come from. */
39
+ export type AiBuildPlanReuseKind = 'component' | 'layout' | 'template' | 'form' | 'dataset' | 'collection' | 'screen' | 'theme';
40
+ export declare const AI_BUILD_PLAN_REUSE_KINDS: readonly AiBuildPlanReuseKind[];
41
+ /** What a plan may create. A theme change is a draft through the theme door, never a literal. */
42
+ export type AiBuildPlanCreateKind = 'component' | 'layout' | 'template' | 'form' | 'theme-change' | 'dataset' | 'email';
43
+ /**
44
+ * What each creation is called in a sentence, and where a member makes one.
45
+ *
46
+ * Total over the union deliberately: a refusal that cannot name a creation is
47
+ * a refusal a member cannot act on, so widening `AiBuildPlanCreateKind`
48
+ * without saying where the new thing is made does not compile.
49
+ */
50
+ export declare const AI_BUILD_PLAN_CREATION_NOUNS: Record<AiBuildPlanCreateKind, {
51
+ noun: string;
52
+ where: string;
53
+ }>;
54
+ export declare const AI_BUILD_PLAN_CREATE_KINDS: readonly AiBuildPlanCreateKind[];
55
+ export interface AiBuildPlanReuse {
56
+ kind: AiBuildPlanReuseKind;
57
+ /** The inventory id. */
58
+ id: string;
59
+ /** What the plan uses it for, in a few words. */
60
+ purpose: string;
61
+ }
62
+ export interface AiBuildPlanCreate {
63
+ kind: AiBuildPlanCreateKind;
64
+ /** Unique within the plan; referenced as `new:<name>`. */
65
+ name: string;
66
+ /** Why nothing the site has will do — shown in the proposal. */
67
+ why: string;
68
+ /** The inventory id this starts from as a duplicate, or null. */
69
+ duplicateOf: string | null;
70
+ /**
71
+ * A component: its props as `name:type`, an icon as `name:icon`
72
+ * (AGL-3054). A layout: the regions it has, from the closed vocabulary
73
+ * `AI_LAYOUT_REGIONS` holds (AGL-3024) — a layout has no props, and a
74
+ * region named here is what the built layout is held to. A form or a
75
+ * dataset: its field names. A theme change: the palette paths it adds or
76
+ * changes.
77
+ */
78
+ fields: string[];
79
+ /**
80
+ * The id the draft this creation becomes is written under, where a unit of
81
+ * the job builds it (AGL-3079). Minted when the job keeps the plan, never
82
+ * part of the model's answer.
83
+ */
84
+ id?: string;
85
+ }
86
+ export interface AiBuildPlanSection {
87
+ /** A few words: "hero", "services grid", "contact form". */
88
+ name: string;
89
+ /** What the section places: inventory ids or `new:<name>` references. */
90
+ uses: string[];
91
+ /** How many repeated items it shows (cards, rows, tiles); 0 when none. */
92
+ items: number;
93
+ }
94
+ export interface AiBuildPlanScreen {
95
+ title: string;
96
+ slug: string;
97
+ /** The layout it renders inside. */
98
+ layout: string | null;
99
+ /** The template it applies, or null for a one-off page. */
100
+ template: string | null;
101
+ /** The inventory screen it starts from as a duplicate, or null. */
102
+ duplicateOf: string | null;
103
+ /** Whether the site navigation gains an entry for it. */
104
+ nav: boolean;
105
+ seoTitle: string;
106
+ seoDescription: string;
107
+ sections: AiBuildPlanSection[];
108
+ /**
109
+ * The id the draft screen is written under, where a unit of the job builds
110
+ * it (AGL-3079). Minted when the job keeps the plan, never part of the
111
+ * model's answer.
112
+ */
113
+ id?: string;
114
+ }
115
+ export interface AiBuildPlan {
116
+ reuse: AiBuildPlanReuse[];
117
+ create: AiBuildPlanCreate[];
118
+ screens: AiBuildPlanScreen[];
119
+ }
120
+ /**
121
+ * How much one plan may hold. A job builds what one proposal can describe
122
+ * and one person can read before confirming; a brief asking for more is
123
+ * several jobs.
124
+ */
125
+ export declare const AI_BUILD_PLAN_LIMITS: {
126
+ readonly reuse: 40;
127
+ readonly create: 20;
128
+ readonly screens: 12;
129
+ readonly sections: 16;
130
+ readonly uses: 8;
131
+ readonly fields: 30;
132
+ readonly text: 200;
133
+ readonly seoDescription: 320;
134
+ readonly items: 500;
135
+ };
136
+ /**
137
+ * The plan as a strict tool's input schema. Only the keywords strict
138
+ * structured output accepts: every object closes its properties and lists
139
+ * every one as required, an optional value is a `null` branch, and no
140
+ * length or count bound appears as a keyword — those are enforced by
141
+ * `parseAiBuildPlan`, which every answer passes through anyway.
142
+ *
143
+ * A text ceiling is stated in words instead, on each field the model writes.
144
+ * A reference is copied from the inventory or from a creation's name, so its
145
+ * length is not the model's to choose. A search title and description are
146
+ * held by rule 10 to ceilings far inside the reader's, which the doctrine
147
+ * states, so naming the reader's here would contradict the rule.
148
+ */
149
+ export declare const AI_BUILD_PLAN_TOOL: AiTool;
150
+ export type AiBuildPlanParse = {
151
+ ok: true;
152
+ plan: AiBuildPlan;
153
+ repairs: string[];
154
+ } | {
155
+ ok: false;
156
+ error: string;
157
+ };
158
+ /**
159
+ * Read a plan out of a tool call, or name what makes it unreadable.
160
+ *
161
+ * Structure is refused — a missing list, an unknown kind, more screens than
162
+ * a job holds, two creations under one name — because a plan that reads
163
+ * differently from what the model meant is worse than a re-ask. Length is
164
+ * repaired: copy past a ceiling is cut and the cut is listed.
165
+ */
166
+ export declare function parseAiBuildPlan(input: unknown): AiBuildPlanParse;
167
+ /** Whether a reference names something the plan creates. */
168
+ export declare function isAiPlanNewRef(ref: string | null | undefined): ref is string;
169
+ /** The creation a `new:<name>` reference names, case-insensitively. */
170
+ export declare function aiPlanCreateFor(plan: AiBuildPlan, ref: string): AiBuildPlanCreate | undefined;
171
+ /**
172
+ * A `new:<name>` reference that names no entry of the plan's create list: a
173
+ * screen's own layout or template, or what one of its sections places, with
174
+ * that section's index.
175
+ */
176
+ export type AiPlanUndeclaredRef = {
177
+ /** The name the reference gives the creation, as written after `new:`. */
178
+ name: string;
179
+ /** Where the plan writes it: `screens[0].template`, `screens[0].sections[4].uses[0]`. */
180
+ path: string;
181
+ /** The screen that writes it, by index. */
182
+ screenIndex: number;
183
+ } & ({
184
+ field: 'layout' | 'template';
185
+ sectionIndex: null;
186
+ } | {
187
+ field: 'uses';
188
+ sectionIndex: number;
189
+ });
190
+ /**
191
+ * Every `new:<name>` reference the plan's create list does not carry, in plan
192
+ * order: each screen's layout, then its template, then what its sections
193
+ * place. A plan that places a creation it never declares has nothing to build
194
+ * it from, so the plan rules refuse each (AGL-3040), and the page and
195
+ * scaffold doors still name one in a plan confirmed before they did.
196
+ */
197
+ export declare function aiPlanUndeclaredRefs(plan: AiBuildPlan): AiPlanUndeclaredRef[];