@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,102 @@
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 AiSystemBlock, type AiTool } from '../runtime/ai-runtime';
18
+ import type { AiResult } from '../providers/contract';
19
+ /**
20
+ * The copy assistant's prompts and its section tool (AGL-2937), by their own
21
+ * module so a spec can read them without a Firestore, an ID token or a
22
+ * provider — the handler beside them needs all three.
23
+ *
24
+ * ── Why the section mode answers through a tool ───────────────────────────
25
+ *
26
+ * It asked for "ONLY a JSON object, no prose or code fences" and then parsed
27
+ * whatever came back, stripping a fence if it found one. When that parse
28
+ * failed the handler answered 502 and the tokens were already spent: the
29
+ * whole request, prompt and answer, bought nothing, and the member's next
30
+ * move is to press the button again and spend it twice. A strict tool is the
31
+ * cheaper shape for exactly that reason — the answer arrives as validated
32
+ * arguments rather than as text that has to be guessed at — and it is what
33
+ * AGL-2937 asks of every door.
34
+ *
35
+ * The parse stays as a fallback. A provider whose adapter has no tool
36
+ * support, or a model that answers in prose anyway, still gets read rather
37
+ * than refused: the tool is how the answer is asked for, not the only way it
38
+ * can arrive.
39
+ *
40
+ * ── Why the flat node list ────────────────────────────────────────────────
41
+ *
42
+ * A strict schema forbids additional properties, so a map keyed by node id
43
+ * cannot be described in one: every key would have to be a declared
44
+ * property. The tool therefore takes a LIST of nodes, each naming its own id
45
+ * and its children by id, and `readAssistSection` rebuilds the map the
46
+ * besigner consumer already reads. The same reason `assistEditTool` takes
47
+ * name/value pairs rather than a props object.
48
+ *
49
+ * ── Caching ───────────────────────────────────────────────────────────────
50
+ *
51
+ * Each mode's static text carries a breakpoint. None of the three is long
52
+ * enough for its model to cache today — `runtime/ai-prompt-cache.spec.ts`
53
+ * measures all three against their minimums and records the verdict — so the
54
+ * marker is a statement about the block rather than a saving. It costs
55
+ * nothing, it is correct if a mode is ever served by a model with a lower
56
+ * minimum, and the ledger is what says whether it pays.
57
+ */
58
+ export type AiAssistMode = 'element' | 'blog' | 'section';
59
+ /**
60
+ * One mode's system blocks: the acceptable-use rules ahead of the mode's own
61
+ * prompt (AGL-2925), as one cached block with no per-org byte in it.
62
+ */
63
+ export declare function assistModeSystemBlocks(mode: AiAssistMode): AiSystemBlock[];
64
+ export declare const ASSIST_SECTION_TOOL_NAME = "submit_section";
65
+ /**
66
+ * The strict tool a generated section arrives through. `componentId` is an
67
+ * enum of the marketplace allowlist — the same list the sanitizer holds the
68
+ * answer to afterward — so an unpublishable component is refused by the
69
+ * schema before it costs a re-ask.
70
+ */
71
+ export declare function assistSectionTool(): AiTool;
72
+ /** The sanitized section, in the shape the besigner consumer already reads. */
73
+ export interface AssistSection {
74
+ rootId: string;
75
+ nodes: Record<string, unknown>;
76
+ }
77
+ /**
78
+ * What reading a section answer came to. Discriminated by a string rather
79
+ * than a boolean, like every other result in the plugin: this tree compiles
80
+ * without `strictNullChecks`, where a `true`/`false` discriminant does not
81
+ * narrow.
82
+ */
83
+ export type AssistSectionRead = {
84
+ status: 'ok';
85
+ section: AssistSection;
86
+ }
87
+ /** Neither a tool call nor JSON: nothing could be read out of the answer. */
88
+ | {
89
+ status: 'unreadable';
90
+ error: string;
91
+ }
92
+ /** Read, and refused by the sanitizer every marketplace install passes. */
93
+ | {
94
+ status: 'rejected';
95
+ error: string;
96
+ };
97
+ /**
98
+ * Read a section answer: the tool call first, the text parse behind it, then
99
+ * the marketplace sanitizer every generated subtree has always passed before
100
+ * it reaches a canvas.
101
+ */
102
+ export declare function readAssistSection(result: AiResult): AssistSectionRead;
@@ -0,0 +1,207 @@
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 { MARKETPLACE_COMPONENT_ID_ALLOWLIST, sanitizeMarketplaceDefinition } from "@aglyn/aglyn/app-utils/node-definition-sanitizer";
17
+ import { AI_PALETTE } from "../runtime/ai-palette.generated.js";
18
+ import { AI_ACCEPTABLE_USE_BLOCK } from "../runtime/ai-runtime.js";
19
+ /** The mode prompts. Static text: no byte of any workspace is in one. */ const MODE_PROMPT = {
20
+ element: 'You write website copy inside a site builder. Reply with ONLY the final text for the element — no quotes, preamble, or markdown. Keep roughly the same length and role as the current text unless the instruction says otherwise.',
21
+ blog: 'You write blog posts inside a site builder. Reply with ONLY the post body in markdown-lite: **bold**, *italic*, ## headings, - lists, [links](https://url). No front matter, title line, or preamble — the title renders separately.',
22
+ section: 'You design one website section inside a site builder. Answer by calling ' + `${'submit_section'} exactly once, with a flat list of nodes: each node ` + 'names its own id, the component it is, its parent (empty for the root) ' + 'and its children by id, and fills props as name/value pairs. Useful ' + 'props — muiStack: direction (row|column), spacing, justifyContent, ' + 'alignItems; muiTypography: children, variant (h1..h6, body1, ' + 'subtitle1); muiButton: children, variant (contained|outlined), color; ' + 'image: src, alt; muiContainer: maxWidth (sm|md|lg). Keep it small: 4-12 ' + 'nodes, one root container. Leave image src empty. Write real copy, not ' + 'lorem ipsum.'
23
+ };
24
+ /**
25
+ * One mode's system blocks: the acceptable-use rules ahead of the mode's own
26
+ * prompt (AGL-2925), as one cached block with no per-org byte in it.
27
+ */ export function assistModeSystemBlocks(mode) {
28
+ return [
29
+ {
30
+ text: `${AI_ACCEPTABLE_USE_BLOCK}\n\n${MODE_PROMPT[mode]}`,
31
+ cacheBreakpoint: true
32
+ }
33
+ ];
34
+ }
35
+ export const ASSIST_SECTION_TOOL_NAME = 'submit_section';
36
+ const STRING = {
37
+ type: 'string'
38
+ };
39
+ const strictObject = (properties)=>({
40
+ type: 'object',
41
+ properties,
42
+ required: Object.keys(properties),
43
+ additionalProperties: false
44
+ });
45
+ /**
46
+ * The strict tool a generated section arrives through. `componentId` is an
47
+ * enum of the marketplace allowlist — the same list the sanitizer holds the
48
+ * answer to afterward — so an unpublishable component is refused by the
49
+ * schema before it costs a re-ask.
50
+ */ export function assistSectionTool() {
51
+ const pair = strictObject({
52
+ name: STRING,
53
+ value: STRING
54
+ });
55
+ const node = strictObject({
56
+ id: STRING,
57
+ componentId: {
58
+ type: 'string',
59
+ enum: [
60
+ ...MARKETPLACE_COMPONENT_ID_ALLOWLIST
61
+ ]
62
+ },
63
+ parentId: STRING,
64
+ children: {
65
+ type: 'array',
66
+ items: STRING
67
+ },
68
+ props: {
69
+ type: 'array',
70
+ items: pair
71
+ }
72
+ });
73
+ return {
74
+ name: ASSIST_SECTION_TOOL_NAME,
75
+ description: 'Submit the section you designed, as a flat list of nodes. The first ' + 'node with an empty parentId is the root. The member reviews the ' + 'section and places it, or discards it.',
76
+ inputSchema: {
77
+ type: 'object',
78
+ properties: {
79
+ nodes: {
80
+ type: 'array',
81
+ items: node
82
+ }
83
+ },
84
+ required: [
85
+ 'nodes'
86
+ ],
87
+ additionalProperties: false
88
+ },
89
+ strict: true
90
+ };
91
+ }
92
+ const isRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
93
+ /**
94
+ * A pair's value in the type the component's own schema declares for that
95
+ * prop, since a strict tool can only carry strings. `children` stays text
96
+ * whatever a schema says: a number in it is copy a visitor reads, not a
97
+ * count.
98
+ */ function propValue(componentId, name, value) {
99
+ var _AI_PALETTE_componentId_propsSchema_properties, _AI_PALETTE_componentId_propsSchema, _AI_PALETTE_componentId;
100
+ if (name === 'children') return value;
101
+ const declared = (_AI_PALETTE_componentId = AI_PALETTE[componentId]) == null ? void 0 : (_AI_PALETTE_componentId_propsSchema = _AI_PALETTE_componentId.propsSchema) == null ? void 0 : (_AI_PALETTE_componentId_propsSchema_properties = _AI_PALETTE_componentId_propsSchema.properties) == null ? void 0 : _AI_PALETTE_componentId_propsSchema_properties[name];
102
+ const type = declared == null ? void 0 : declared.type;
103
+ if (type === 'boolean') return value === 'true';
104
+ if (type === 'number' || type === 'integer') {
105
+ const parsed = Number(value);
106
+ return Number.isFinite(parsed) ? parsed : value;
107
+ }
108
+ if (type) return value;
109
+ // No schema for this prop: a bare number is read as one, so `spacing: "2"`
110
+ // does not reach the canvas as text. The palette's own typing wins above,
111
+ // which is why muiStack's string-typed `spacing` stays a string.
112
+ const parsed = Number(value);
113
+ return value.trim() !== '' && Number.isFinite(parsed) ? parsed : value;
114
+ }
115
+ /** The flat node list as the stored map: `{ $id, componentId, parentId, props, nodes }`. */ function definitionFromNodes(nodes) {
116
+ var _ref;
117
+ const ids = new Set(nodes.map((node)=>node.id));
118
+ const root = nodes.find((node)=>!node.parentId || !ids.has(node.parentId));
119
+ const map = {};
120
+ for (const node of nodes){
121
+ const props = {};
122
+ for (const { name, value } of node.props){
123
+ if (name) props[name] = propValue(node.componentId, name, value);
124
+ }
125
+ map[node.id] = {
126
+ $id: node.id,
127
+ componentId: node.componentId,
128
+ parentId: node === root ? null : node.parentId,
129
+ props,
130
+ nodes: node.children.filter((child)=>ids.has(child))
131
+ };
132
+ }
133
+ return {
134
+ rootId: (_ref = root == null ? void 0 : root.id) != null ? _ref : '',
135
+ nodes: map
136
+ };
137
+ }
138
+ /** A tool call's arguments as nodes, or `null` when the shape is not one. */ function nodesFromToolUse(input) {
139
+ const raw = input['nodes'];
140
+ if (!Array.isArray(raw) || !raw.length) return null;
141
+ const nodes = [];
142
+ for (const entry of raw){
143
+ var _entry_id, _entry_componentId, _entry_parentId;
144
+ if (!isRecord(entry)) return null;
145
+ const id = String((_entry_id = entry['id']) != null ? _entry_id : '');
146
+ const componentId = String((_entry_componentId = entry['componentId']) != null ? _entry_componentId : '');
147
+ if (!id || !componentId) return null;
148
+ const props = Array.isArray(entry['props']) ? entry['props'] : [];
149
+ nodes.push({
150
+ id,
151
+ componentId,
152
+ parentId: String((_entry_parentId = entry['parentId']) != null ? _entry_parentId : ''),
153
+ children: (Array.isArray(entry['children']) ? entry['children'] : []).map(String),
154
+ props: props.filter(isRecord).map((pair)=>{
155
+ var _pair_name, _pair_value;
156
+ return {
157
+ name: String((_pair_name = pair['name']) != null ? _pair_name : ''),
158
+ value: String((_pair_value = pair['value']) != null ? _pair_value : '')
159
+ };
160
+ })
161
+ });
162
+ }
163
+ return nodes;
164
+ }
165
+ /** The old shape: a JSON object of `{ rootId, nodes }`, possibly fenced. */ function definitionFromText(text) {
166
+ var _parsed_rootId;
167
+ const raw = text.trim().replace(/^```(?:json)?\s*/i, '').replace(/\s*```$/, '');
168
+ let parsed;
169
+ try {
170
+ parsed = JSON.parse(raw);
171
+ } catch (unused) {
172
+ return null;
173
+ }
174
+ if (!isRecord(parsed)) return null;
175
+ return {
176
+ rootId: String((_parsed_rootId = parsed['rootId']) != null ? _parsed_rootId : ''),
177
+ nodes: isRecord(parsed['nodes']) ? parsed['nodes'] : {}
178
+ };
179
+ }
180
+ /**
181
+ * Read a section answer: the tool call first, the text parse behind it, then
182
+ * the marketplace sanitizer every generated subtree has always passed before
183
+ * it reaches a canvas.
184
+ */ export function readAssistSection(result) {
185
+ const call = result.kind === 'completion' ? result.toolUse.find((use)=>use.name === ASSIST_SECTION_TOOL_NAME) : undefined;
186
+ const nodes = call ? nodesFromToolUse(call.input) : null;
187
+ const definition = nodes ? definitionFromNodes(nodes) : definitionFromText(result.kind === 'completion' ? result.text : '');
188
+ if (!definition) return {
189
+ status: 'unreadable',
190
+ error: 'AI returned invalid JSON'
191
+ };
192
+ const sanitized = sanitizeMarketplaceDefinition(definition);
193
+ // `=== false`, not `!`: see `AssistSectionRead`.
194
+ if (sanitized.ok === false) return {
195
+ status: 'rejected',
196
+ error: sanitized.error
197
+ };
198
+ return {
199
+ status: 'ok',
200
+ section: {
201
+ rootId: sanitized.rootId,
202
+ nodes: sanitized.nodes
203
+ }
204
+ };
205
+ }
206
+
207
+ //# sourceMappingURL=ai-assist-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/server/ai-assist-prompts.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 MARKETPLACE_COMPONENT_ID_ALLOWLIST,\n sanitizeMarketplaceDefinition,\n} from '@aglyn/aglyn/app-utils/node-definition-sanitizer'\nimport { AI_PALETTE } from '../runtime/ai-palette.generated'\nimport { AI_ACCEPTABLE_USE_BLOCK, type AiSystemBlock, type AiTool } from '../runtime/ai-runtime'\nimport type { AiResult } from '../providers/contract'\n\n/**\n * The copy assistant's prompts and its section tool (AGL-2937), by their own\n * module so a spec can read them without a Firestore, an ID token or a\n * provider — the handler beside them needs all three.\n *\n * ── Why the section mode answers through a tool ───────────────────────────\n *\n * It asked for \"ONLY a JSON object, no prose or code fences\" and then parsed\n * whatever came back, stripping a fence if it found one. When that parse\n * failed the handler answered 502 and the tokens were already spent: the\n * whole request, prompt and answer, bought nothing, and the member's next\n * move is to press the button again and spend it twice. A strict tool is the\n * cheaper shape for exactly that reason — the answer arrives as validated\n * arguments rather than as text that has to be guessed at — and it is what\n * AGL-2937 asks of every door.\n *\n * The parse stays as a fallback. A provider whose adapter has no tool\n * support, or a model that answers in prose anyway, still gets read rather\n * than refused: the tool is how the answer is asked for, not the only way it\n * can arrive.\n *\n * ── Why the flat node list ────────────────────────────────────────────────\n *\n * A strict schema forbids additional properties, so a map keyed by node id\n * cannot be described in one: every key would have to be a declared\n * property. The tool therefore takes a LIST of nodes, each naming its own id\n * and its children by id, and `readAssistSection` rebuilds the map the\n * besigner consumer already reads. The same reason `assistEditTool` takes\n * name/value pairs rather than a props object.\n *\n * ── Caching ───────────────────────────────────────────────────────────────\n *\n * Each mode's static text carries a breakpoint. None of the three is long\n * enough for its model to cache today — `runtime/ai-prompt-cache.spec.ts`\n * measures all three against their minimums and records the verdict — so the\n * marker is a statement about the block rather than a saving. It costs\n * nothing, it is correct if a mode is ever served by a model with a lower\n * minimum, and the ledger is what says whether it pays.\n */\n\nexport type AiAssistMode = 'element' | 'blog' | 'section'\n\n/** The mode prompts. Static text: no byte of any workspace is in one. */\nconst MODE_PROMPT: Readonly<Record<AiAssistMode, string>> = {\n element:\n 'You write website copy inside a site builder. Reply with ONLY the final text for the element — no quotes, preamble, or markdown. Keep roughly the same length and role as the current text unless the instruction says otherwise.',\n blog:\n 'You write blog posts inside a site builder. Reply with ONLY the post body in markdown-lite: **bold**, *italic*, ## headings, - lists, [links](https://url). No front matter, title line, or preamble — the title renders separately.',\n section:\n 'You design one website section inside a site builder. Answer by calling ' +\n `${'submit_section'} exactly once, with a flat list of nodes: each node ` +\n 'names its own id, the component it is, its parent (empty for the root) ' +\n 'and its children by id, and fills props as name/value pairs. Useful ' +\n 'props — muiStack: direction (row|column), spacing, justifyContent, ' +\n 'alignItems; muiTypography: children, variant (h1..h6, body1, ' +\n 'subtitle1); muiButton: children, variant (contained|outlined), color; ' +\n 'image: src, alt; muiContainer: maxWidth (sm|md|lg). Keep it small: 4-12 ' +\n 'nodes, one root container. Leave image src empty. Write real copy, not ' +\n 'lorem ipsum.',\n}\n\n/**\n * One mode's system blocks: the acceptable-use rules ahead of the mode's own\n * prompt (AGL-2925), as one cached block with no per-org byte in it.\n */\nexport function assistModeSystemBlocks(mode: AiAssistMode): AiSystemBlock[] {\n return [{ text: `${AI_ACCEPTABLE_USE_BLOCK}\\n\\n${MODE_PROMPT[mode]}`, cacheBreakpoint: true }]\n}\n\nexport const ASSIST_SECTION_TOOL_NAME = 'submit_section'\n\nconst STRING = { type: 'string' } as const\n\nconst strictObject = (properties: Record<string, unknown>) => ({\n type: 'object',\n properties,\n required: Object.keys(properties),\n additionalProperties: false,\n})\n\n/**\n * The strict tool a generated section arrives through. `componentId` is an\n * enum of the marketplace allowlist — the same list the sanitizer holds the\n * answer to afterward — so an unpublishable component is refused by the\n * schema before it costs a re-ask.\n */\nexport function assistSectionTool(): AiTool {\n const pair = strictObject({ name: STRING, value: STRING })\n const node = strictObject({\n id: STRING,\n componentId: { type: 'string', enum: [...MARKETPLACE_COMPONENT_ID_ALLOWLIST] },\n parentId: STRING,\n children: { type: 'array', items: STRING },\n props: { type: 'array', items: pair },\n })\n return {\n name: ASSIST_SECTION_TOOL_NAME,\n description:\n 'Submit the section you designed, as a flat list of nodes. The first ' +\n 'node with an empty parentId is the root. The member reviews the ' +\n 'section and places it, or discards it.',\n inputSchema: {\n type: 'object',\n properties: { nodes: { type: 'array', items: node } },\n required: ['nodes'],\n additionalProperties: false,\n },\n strict: true,\n }\n}\n\n/** The sanitized section, in the shape the besigner consumer already reads. */\nexport interface AssistSection {\n rootId: string\n nodes: Record<string, unknown>\n}\n\ninterface RawNode {\n id: string\n componentId: string\n parentId: string\n children: string[]\n props: Array<{ name: string; value: string }>\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\n/**\n * A pair's value in the type the component's own schema declares for that\n * prop, since a strict tool can only carry strings. `children` stays text\n * whatever a schema says: a number in it is copy a visitor reads, not a\n * count.\n */\nfunction propValue(componentId: string, name: string, value: string): unknown {\n if (name === 'children') return value\n const declared = AI_PALETTE[componentId]?.propsSchema?.properties?.[name] as\n | { type?: string }\n | undefined\n const type = declared?.type\n if (type === 'boolean') return value === 'true'\n if (type === 'number' || type === 'integer') {\n const parsed = Number(value)\n return Number.isFinite(parsed) ? parsed : value\n }\n if (type) return value\n // No schema for this prop: a bare number is read as one, so `spacing: \"2\"`\n // does not reach the canvas as text. The palette's own typing wins above,\n // which is why muiStack's string-typed `spacing` stays a string.\n const parsed = Number(value)\n return value.trim() !== '' && Number.isFinite(parsed) ? parsed : value\n}\n\n/** The flat node list as the stored map: `{ $id, componentId, parentId, props, nodes }`. */\nfunction definitionFromNodes(nodes: readonly RawNode[]): {\n rootId: string\n nodes: Record<string, unknown>\n} {\n const ids = new Set(nodes.map((node) => node.id))\n const root = nodes.find((node) => !node.parentId || !ids.has(node.parentId))\n const map: Record<string, unknown> = {}\n for (const node of nodes) {\n const props: Record<string, unknown> = {}\n for (const { name, value } of node.props) {\n if (name) props[name] = propValue(node.componentId, name, value)\n }\n map[node.id] = {\n $id: node.id,\n componentId: node.componentId,\n parentId: node === root ? null : node.parentId,\n props,\n nodes: node.children.filter((child) => ids.has(child)),\n }\n }\n return { rootId: root?.id ?? '', nodes: map }\n}\n\n/** A tool call's arguments as nodes, or `null` when the shape is not one. */\nfunction nodesFromToolUse(input: Record<string, unknown>): RawNode[] | null {\n const raw = input['nodes']\n if (!Array.isArray(raw) || !raw.length) return null\n const nodes: RawNode[] = []\n for (const entry of raw) {\n if (!isRecord(entry)) return null\n const id = String(entry['id'] ?? '')\n const componentId = String(entry['componentId'] ?? '')\n if (!id || !componentId) return null\n const props = Array.isArray(entry['props']) ? entry['props'] : []\n nodes.push({\n id,\n componentId,\n parentId: String(entry['parentId'] ?? ''),\n children: (Array.isArray(entry['children']) ? entry['children'] : []).map(String),\n props: props.filter(isRecord).map((pair) => ({\n name: String(pair['name'] ?? ''),\n value: String(pair['value'] ?? ''),\n })),\n })\n }\n return nodes\n}\n\n/** The old shape: a JSON object of `{ rootId, nodes }`, possibly fenced. */\nfunction definitionFromText(text: string): { rootId: string; nodes: Record<string, unknown> } | null {\n const raw = text\n .trim()\n .replace(/^```(?:json)?\\s*/i, '')\n .replace(/\\s*```$/, '')\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return null\n }\n if (!isRecord(parsed)) return null\n return {\n rootId: String(parsed['rootId'] ?? ''),\n nodes: isRecord(parsed['nodes']) ? parsed['nodes'] : {},\n }\n}\n\n/**\n * What reading a section answer came to. Discriminated by a string rather\n * than a boolean, like every other result in the plugin: this tree compiles\n * without `strictNullChecks`, where a `true`/`false` discriminant does not\n * narrow.\n */\nexport type AssistSectionRead =\n | { status: 'ok'; section: AssistSection }\n /** Neither a tool call nor JSON: nothing could be read out of the answer. */\n | { status: 'unreadable'; error: string }\n /** Read, and refused by the sanitizer every marketplace install passes. */\n | { status: 'rejected'; error: string }\n\n/**\n * Read a section answer: the tool call first, the text parse behind it, then\n * the marketplace sanitizer every generated subtree has always passed before\n * it reaches a canvas.\n */\nexport function readAssistSection(result: AiResult): AssistSectionRead {\n const call =\n result.kind === 'completion'\n ? result.toolUse.find((use) => use.name === ASSIST_SECTION_TOOL_NAME)\n : undefined\n const nodes = call ? nodesFromToolUse(call.input) : null\n const definition = nodes\n ? definitionFromNodes(nodes)\n : definitionFromText(result.kind === 'completion' ? result.text : '')\n if (!definition) return { status: 'unreadable', error: 'AI returned invalid JSON' }\n const sanitized = sanitizeMarketplaceDefinition(definition)\n // `=== false`, not `!`: see `AssistSectionRead`.\n if (sanitized.ok === false) return { status: 'rejected', error: sanitized.error }\n return { status: 'ok', section: { rootId: sanitized.rootId, nodes: sanitized.nodes } }\n}\n"],"names":["MARKETPLACE_COMPONENT_ID_ALLOWLIST","sanitizeMarketplaceDefinition","AI_PALETTE","AI_ACCEPTABLE_USE_BLOCK","MODE_PROMPT","element","blog","section","assistModeSystemBlocks","mode","text","cacheBreakpoint","ASSIST_SECTION_TOOL_NAME","STRING","type","strictObject","properties","required","Object","keys","additionalProperties","assistSectionTool","pair","name","value","node","id","componentId","enum","parentId","children","items","props","description","inputSchema","nodes","strict","isRecord","Array","isArray","propValue","declared","propsSchema","parsed","Number","isFinite","trim","definitionFromNodes","ids","Set","map","root","find","has","$id","filter","child","rootId","nodesFromToolUse","input","raw","length","entry","String","push","definitionFromText","replace","JSON","parse","readAssistSection","result","call","kind","toolUse","use","undefined","definition","status","error","sanitized","ok"],"mappings":"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"}
@@ -0,0 +1,119 @@
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 PluginApiHandler } from '@aglyn/aglyn/server';
18
+ import { type AiAssistMode } from './ai-assist-prompts';
19
+ /**
20
+ * The model each mode is served by, through the routing table — tiered by
21
+ * what the mode actually asks for (AGL-2486), not one model for all three.
22
+ *
23
+ * - **element** → the fast tier (`copy.element`). Rewriting one button label
24
+ * or one heading to an instruction is a short, bounded transformation with
25
+ * the source text supplied: the least model-shaped work on this route and
26
+ * the highest-volume (a user clicking "improve this" runs it repeatedly on
27
+ * the same element).
28
+ * - **blog** → the balanced tier (`copy.blog`). A post body is real long-form
29
+ * writing, and the difference between tiers is legible to the reader.
30
+ * - **section** → the balanced tier (`copy.section`). A constrained-JSON node
31
+ * subtree over the published-component allowlist is a structured-generation
32
+ * task with a schema the sanitizer will reject if it is got wrong, and a
33
+ * rejected generation costs the whole request rather than part of it.
34
+ *
35
+ * ⚠️ NO PROMPT CACHING IS LOST BY THE FAST RUNG. Each mode's static text now
36
+ * carries a breakpoint (`assistModeSystemBlocks`), but none of the three is
37
+ * long enough for its model to cache: the catalog states each model's
38
+ * minimum and `runtime/ai-prompt-cache.spec.ts` measures every door against
39
+ * it. That is why the tier drop is free here and NOT free on
40
+ * `/api/assist/chat`, whose ~1,030-token prefix clears the balanced tier's
41
+ * minimum and would stop caching entirely on the fast tier's — cheaper per
42
+ * token, dearer per request, and invisible either way without that
43
+ * measurement. See the header of `assist-chat.ts`.
44
+ *
45
+ * The cost meter prices by model id, so the value returned here MUST be the
46
+ * one passed to `recordAssistCost` — same call, same variable. A tiering
47
+ * change that updates the request and not the meter reports one tier's money
48
+ * for another tier's tokens, which is the failure the by-model rate table
49
+ * exists to stop.
50
+ */
51
+ export declare function assistModelForMode(mode: AiAssistMode): string;
52
+ /** The routing table's step kind for each mode. */
53
+ export declare function assistStepKindForMode(mode: AiAssistMode): 'copy.element' | 'copy.blog' | 'copy.section';
54
+ /**
55
+ * AI assist (AGL-89/130/169), the besigner copy assistant's door — the
56
+ * section mode composes over the published-component allowlist and every
57
+ * generated subtree passes the node-definition sanitizer a marketplace
58
+ * install passes, before it reaches a canvas. `/api/ai/assist` is served by
59
+ * the plugin API dispatcher under the `ai` prefix. Gated on a ready provider,
60
+ * one registered with its key set (501 without, the same degrade pattern as
61
+ * Stripe); auth via Firebase ID token.
62
+ *
63
+ * The provider call is `runAiRequest`, the runtime every AI door shares
64
+ * (AGL-2903). This handler owns the ladder below and the response shapes;
65
+ * `ai-assist-prompts.ts` owns the three prompts and the section tool; the
66
+ * runtime owns the wire, the usage arithmetic and the error boundary. The
67
+ * request keeps the model per mode, the `max_tokens` and the absent
68
+ * `thinking` field it has always had — a fast-tier model rejects an explicit
69
+ * one, and the balanced modes keep the model default.
70
+ *
71
+ * A section arrives through a strict tool (AGL-2937). It used to be asked
72
+ * for as bare JSON and parsed: a parse that failed answered 502 with the
73
+ * tokens already spent, so the whole request bought nothing and the member's
74
+ * next move was to spend it again. The text parse is kept behind the tool,
75
+ * for a provider whose adapter has none.
76
+ *
77
+ * ── The spend ladder (AGL-2073) ────────────────────────────────────────────
78
+ *
79
+ * This route reached the provider behind nothing but an entitlement check. Free
80
+ * orgs could not get in, so the free tier was safe — but for any Pro org it
81
+ * had no rate limit, no quota, no per-org cost telemetry, and it resolved the
82
+ * org from the USER rather than the request, so someone with one paid org got
83
+ * assist charged against whichever org `getOrgForUser` happened to return. One
84
+ * subscription, unbounded and unmeasured provider spend.
85
+ *
86
+ * The ladder now, in order, each rung able to go red on its own:
87
+ * 405 → 501 no ready provider → 401 no token → 400 bad body (the request
88
+ * must NAME the org it is metered against) → 403 not a member of that org →
89
+ * 423 the workspace's AI pause → 403 the member's role lacks `ai.use`, or
90
+ * `ai.generate` for a section (AGL-2927; staff pass) → 403 no `aiAssist`
91
+ * entitlement → 423 org lockdown → 429 rate limit → 429 quota → the model
92
+ * call → meter.
93
+ *
94
+ * Two deliberate choices about which way each rung fails:
95
+ *
96
+ * - **The rate limiter fails SOFT and is not the spend bound.** It is a
97
+ * per-instance in-memory window, so N serverless instances admit N × 20/min;
98
+ * it smooths bursts and nothing more. Treating it as the cap would be the
99
+ * fail-open this issue is about.
100
+ * - **The reservation fails CLOSED.** It is the only global, atomic bound on
101
+ * provider spend, so a reservation that cannot be taken — a Firestore
102
+ * outage, a contended transaction — refuses the request with 503 rather than
103
+ * calling the provider uncapped. An unavailable meter must stop the spending,
104
+ * not wave it through.
105
+ *
106
+ * The reservation is `reserveAssistMessage` — the same shared counter the
107
+ * console chat route moves (AGL-2057), not a second mechanism. That is what
108
+ * closes the "uncapped for paid" hole the earlier audit named: an entitled org
109
+ * carries the monthly runaway guard, and because both doors move the SAME
110
+ * counter, an org's monthly assist budget is shared across them rather than
111
+ * doubled by having two.
112
+ *
113
+ * Metering is `recordAssistCost`, the signal + rollup half of the assist
114
+ * meters WITHOUT the verbatim half: what a customer types here is their own
115
+ * site copy and blog bodies, and retaining that for 180 days is a data flow
116
+ * the published privacy disclosure does not describe. The margin question is
117
+ * answered by the signal alone.
118
+ */
119
+ export declare const aiAssistHandler: PluginApiHandler;