@plotday/twister 0.42.0 → 0.44.0

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 (217) hide show
  1. package/bin/commands/deploy.js +87 -10
  2. package/bin/commands/deploy.js.map +1 -1
  3. package/dist/connector.d.ts +87 -7
  4. package/dist/connector.d.ts.map +1 -1
  5. package/dist/connector.js +70 -0
  6. package/dist/connector.js.map +1 -1
  7. package/dist/docs/assets/hierarchy.js +1 -1
  8. package/dist/docs/assets/navigation.js +1 -1
  9. package/dist/docs/assets/search.js +1 -1
  10. package/dist/docs/classes/index.Connector.html +102 -45
  11. package/dist/docs/classes/index.Imap.html +52 -0
  12. package/dist/docs/classes/index.Options.html +2 -2
  13. package/dist/docs/classes/index.Smtp.html +33 -0
  14. package/dist/docs/classes/tool.ITool.html +1 -1
  15. package/dist/docs/classes/tool.Tool.html +23 -16
  16. package/dist/docs/classes/tools_ai.AI.html +1 -1
  17. package/dist/docs/classes/tools_callbacks.Callbacks.html +1 -1
  18. package/dist/docs/classes/tools_integrations.Integrations.html +9 -9
  19. package/dist/docs/classes/tools_network.Network.html +15 -7
  20. package/dist/docs/classes/tools_plot.Plot.html +60 -20
  21. package/dist/docs/classes/tools_store.Store.html +1 -1
  22. package/dist/docs/classes/tools_tasks.Tasks.html +1 -1
  23. package/dist/docs/classes/tools_twists.Twists.html +1 -1
  24. package/dist/docs/classes/twist.Twist.html +29 -18
  25. package/dist/docs/enums/plot.ActionType.html +9 -7
  26. package/dist/docs/enums/plot.ActorType.html +4 -4
  27. package/dist/docs/enums/plot.ConferencingProvider.html +6 -6
  28. package/dist/docs/enums/tag.Tag.html +2 -1
  29. package/dist/docs/enums/tools_ai.AIModel.html +3 -4
  30. package/dist/docs/enums/tools_integrations.AuthProvider.html +13 -11
  31. package/dist/docs/enums/tools_plot.ContactAccess.html +2 -2
  32. package/dist/docs/enums/tools_plot.LinkAccess.html +5 -0
  33. package/dist/docs/enums/tools_plot.PriorityAccess.html +3 -3
  34. package/dist/docs/enums/tools_plot.ThreadAccess.html +8 -3
  35. package/dist/docs/hierarchy.html +1 -1
  36. package/dist/docs/interfaces/tools_ai.AIRequest.html +12 -12
  37. package/dist/docs/interfaces/tools_ai.AIResponse.html +9 -9
  38. package/dist/docs/interfaces/tools_ai.FilePart.html +5 -5
  39. package/dist/docs/interfaces/tools_ai.ImagePart.html +4 -4
  40. package/dist/docs/interfaces/tools_ai.ReasoningPart.html +4 -4
  41. package/dist/docs/interfaces/tools_ai.RedactedReasoningPart.html +3 -3
  42. package/dist/docs/interfaces/tools_ai.TextPart.html +3 -3
  43. package/dist/docs/interfaces/tools_ai.ToolCallPart.html +5 -5
  44. package/dist/docs/interfaces/tools_ai.ToolExecutionOptions.html +4 -4
  45. package/dist/docs/interfaces/tools_ai.ToolResultPart.html +5 -5
  46. package/dist/docs/media/AGENTS.md +10 -6
  47. package/dist/docs/media/MULTI_USER_AUTH.md +14 -11
  48. package/dist/docs/modules/index.html +1 -1
  49. package/dist/docs/modules/plot.html +1 -1
  50. package/dist/docs/modules/tools_plot.html +1 -1
  51. package/dist/docs/types/index.BooleanDef.html +2 -2
  52. package/dist/docs/types/index.ImapAddress.html +6 -0
  53. package/dist/docs/types/index.ImapConnectOptions.html +12 -0
  54. package/dist/docs/types/index.ImapFetchOptions.html +8 -0
  55. package/dist/docs/types/index.ImapFlagOperation.html +2 -0
  56. package/dist/docs/types/index.ImapMailbox.html +10 -0
  57. package/dist/docs/types/index.ImapMailboxStatus.html +14 -0
  58. package/dist/docs/types/index.ImapMessage.html +28 -0
  59. package/dist/docs/types/index.ImapSearchCriteria.html +18 -0
  60. package/dist/docs/types/index.ImapSession.html +2 -0
  61. package/dist/docs/types/index.NumberDef.html +2 -2
  62. package/dist/docs/types/index.OptionDef.html +1 -1
  63. package/dist/docs/types/index.OptionsSchema.html +1 -1
  64. package/dist/docs/types/index.ResolvedOptions.html +1 -1
  65. package/dist/docs/types/index.SmtpAddress.html +6 -0
  66. package/dist/docs/types/index.SmtpConnectOptions.html +14 -0
  67. package/dist/docs/types/index.SmtpMessage.html +24 -0
  68. package/dist/docs/types/index.SmtpSendResult.html +8 -0
  69. package/dist/docs/types/index.SmtpSession.html +2 -0
  70. package/dist/docs/types/index.TextDef.html +5 -2
  71. package/dist/docs/types/plot.Action.html +9 -3
  72. package/dist/docs/types/plot.Actor.html +5 -5
  73. package/dist/docs/types/plot.ContentType.html +1 -1
  74. package/dist/docs/types/plot.Link.html +21 -18
  75. package/dist/docs/types/plot.LinkUpdate.html +5 -0
  76. package/dist/docs/types/plot.NewActor.html +1 -1
  77. package/dist/docs/types/plot.NewContact.html +3 -17
  78. package/dist/docs/types/plot.NewLink.html +6 -4
  79. package/dist/docs/types/plot.NewLinkWithNotes.html +5 -4
  80. package/dist/docs/types/plot.NewNote.html +6 -2
  81. package/dist/docs/types/plot.NewTags.html +1 -1
  82. package/dist/docs/types/plot.NewThread.html +4 -2
  83. package/dist/docs/types/plot.NewThreadWithNotes.html +1 -1
  84. package/dist/docs/types/plot.Note.html +1 -1
  85. package/dist/docs/types/plot.NoteUpdate.html +1 -1
  86. package/dist/docs/types/plot.PickPriorityConfig.html +2 -2
  87. package/dist/docs/types/plot.PlanOperation.html +10 -0
  88. package/dist/docs/types/plot.PriorityUpdate.html +5 -3
  89. package/dist/docs/types/plot.Tags.html +1 -1
  90. package/dist/docs/types/plot.Thread.html +1 -1
  91. package/dist/docs/types/plot.ThreadCommon.html +7 -7
  92. package/dist/docs/types/plot.ThreadFilter.html +2 -2
  93. package/dist/docs/types/plot.ThreadMeta.html +1 -1
  94. package/dist/docs/types/plot.ThreadType.html +7 -0
  95. package/dist/docs/types/plot.ThreadUpdate.html +1 -1
  96. package/dist/docs/types/plot.ThreadWithNotes.html +1 -1
  97. package/dist/docs/types/tools_ai.AIAssistantMessage.html +2 -2
  98. package/dist/docs/types/tools_ai.AIMessage.html +1 -1
  99. package/dist/docs/types/tools_ai.AISource.html +1 -1
  100. package/dist/docs/types/tools_ai.AISystemMessage.html +2 -2
  101. package/dist/docs/types/tools_ai.AITool.html +1 -1
  102. package/dist/docs/types/tools_ai.AIToolMessage.html +2 -2
  103. package/dist/docs/types/tools_ai.AIToolSet.html +1 -1
  104. package/dist/docs/types/tools_ai.AIUsage.html +5 -5
  105. package/dist/docs/types/tools_ai.AIUserMessage.html +2 -2
  106. package/dist/docs/types/tools_ai.DataContent.html +1 -1
  107. package/dist/docs/types/tools_integrations.ArchiveLinkFilter.html +5 -5
  108. package/dist/docs/types/tools_integrations.AuthToken.html +4 -4
  109. package/dist/docs/types/tools_integrations.Authorization.html +4 -4
  110. package/dist/docs/types/tools_integrations.Channel.html +4 -2
  111. package/dist/docs/types/tools_integrations.LinkTypeConfig.html +10 -8
  112. package/dist/docs/types/tools_plot.LinkFilter.html +5 -5
  113. package/dist/docs/types/tools_plot.LinkSearchResult.html +1 -1
  114. package/dist/docs/types/tools_plot.NoteIntentHandler.html +4 -4
  115. package/dist/docs/types/tools_plot.NoteSearchResult.html +1 -1
  116. package/dist/docs/types/tools_plot.SearchOptions.html +4 -4
  117. package/dist/docs/types/tools_plot.SearchResult.html +1 -1
  118. package/dist/docs/variables/tools_plot.SEARCH_DEFAULT_LIMIT.html +1 -1
  119. package/dist/docs/variables/tools_plot.SEARCH_MAX_LIMIT.html +1 -1
  120. package/dist/llm-docs/connector.d.ts +1 -1
  121. package/dist/llm-docs/connector.d.ts.map +1 -1
  122. package/dist/llm-docs/connector.js +1 -1
  123. package/dist/llm-docs/connector.js.map +1 -1
  124. package/dist/llm-docs/index.d.ts.map +1 -1
  125. package/dist/llm-docs/index.js +4 -0
  126. package/dist/llm-docs/index.js.map +1 -1
  127. package/dist/llm-docs/options.d.ts +1 -1
  128. package/dist/llm-docs/options.d.ts.map +1 -1
  129. package/dist/llm-docs/options.js +1 -1
  130. package/dist/llm-docs/options.js.map +1 -1
  131. package/dist/llm-docs/plot.d.ts +1 -1
  132. package/dist/llm-docs/plot.d.ts.map +1 -1
  133. package/dist/llm-docs/plot.js +1 -1
  134. package/dist/llm-docs/plot.js.map +1 -1
  135. package/dist/llm-docs/tag.d.ts +1 -1
  136. package/dist/llm-docs/tag.d.ts.map +1 -1
  137. package/dist/llm-docs/tag.js +1 -1
  138. package/dist/llm-docs/tag.js.map +1 -1
  139. package/dist/llm-docs/tool.d.ts +1 -1
  140. package/dist/llm-docs/tool.d.ts.map +1 -1
  141. package/dist/llm-docs/tool.js +1 -1
  142. package/dist/llm-docs/tool.js.map +1 -1
  143. package/dist/llm-docs/tools/ai.d.ts +1 -1
  144. package/dist/llm-docs/tools/ai.d.ts.map +1 -1
  145. package/dist/llm-docs/tools/ai.js +1 -1
  146. package/dist/llm-docs/tools/ai.js.map +1 -1
  147. package/dist/llm-docs/tools/imap.d.ts +9 -0
  148. package/dist/llm-docs/tools/imap.d.ts.map +1 -0
  149. package/dist/llm-docs/tools/imap.js +8 -0
  150. package/dist/llm-docs/tools/imap.js.map +1 -0
  151. package/dist/llm-docs/tools/integrations.d.ts +1 -1
  152. package/dist/llm-docs/tools/integrations.d.ts.map +1 -1
  153. package/dist/llm-docs/tools/integrations.js +1 -1
  154. package/dist/llm-docs/tools/integrations.js.map +1 -1
  155. package/dist/llm-docs/tools/network.d.ts +1 -1
  156. package/dist/llm-docs/tools/network.d.ts.map +1 -1
  157. package/dist/llm-docs/tools/network.js +1 -1
  158. package/dist/llm-docs/tools/network.js.map +1 -1
  159. package/dist/llm-docs/tools/plot.d.ts +1 -1
  160. package/dist/llm-docs/tools/plot.d.ts.map +1 -1
  161. package/dist/llm-docs/tools/plot.js +1 -1
  162. package/dist/llm-docs/tools/plot.js.map +1 -1
  163. package/dist/llm-docs/tools/smtp.d.ts +9 -0
  164. package/dist/llm-docs/tools/smtp.d.ts.map +1 -0
  165. package/dist/llm-docs/tools/smtp.js +8 -0
  166. package/dist/llm-docs/tools/smtp.js.map +1 -0
  167. package/dist/llm-docs/twist.d.ts +1 -1
  168. package/dist/llm-docs/twist.d.ts.map +1 -1
  169. package/dist/llm-docs/twist.js +1 -1
  170. package/dist/llm-docs/twist.js.map +1 -1
  171. package/dist/options.d.ts +3 -0
  172. package/dist/options.d.ts.map +1 -1
  173. package/dist/options.js.map +1 -1
  174. package/dist/plot.d.ts +152 -19
  175. package/dist/plot.d.ts.map +1 -1
  176. package/dist/plot.js +2 -0
  177. package/dist/plot.js.map +1 -1
  178. package/dist/tag.d.ts +2 -1
  179. package/dist/tag.d.ts.map +1 -1
  180. package/dist/tag.js +1 -0
  181. package/dist/tag.js.map +1 -1
  182. package/dist/tool.d.ts +10 -1
  183. package/dist/tool.d.ts.map +1 -1
  184. package/dist/tool.js +10 -1
  185. package/dist/tool.js.map +1 -1
  186. package/dist/tools/ai.d.ts +3 -4
  187. package/dist/tools/ai.d.ts.map +1 -1
  188. package/dist/tools/ai.js +3 -4
  189. package/dist/tools/ai.js.map +1 -1
  190. package/dist/tools/imap.d.ts +235 -0
  191. package/dist/tools/imap.d.ts.map +1 -0
  192. package/dist/tools/imap.js +61 -0
  193. package/dist/tools/imap.js.map +1 -0
  194. package/dist/tools/index.d.ts +2 -0
  195. package/dist/tools/index.d.ts.map +1 -1
  196. package/dist/tools/index.js +2 -0
  197. package/dist/tools/index.js.map +1 -1
  198. package/dist/tools/integrations.d.ts +7 -1
  199. package/dist/tools/integrations.d.ts.map +1 -1
  200. package/dist/tools/integrations.js +2 -0
  201. package/dist/tools/integrations.js.map +1 -1
  202. package/dist/tools/network.d.ts +23 -16
  203. package/dist/tools/network.d.ts.map +1 -1
  204. package/dist/tools/network.js.map +1 -1
  205. package/dist/tools/plot.d.ts +96 -3
  206. package/dist/tools/plot.d.ts.map +1 -1
  207. package/dist/tools/plot.js +14 -0
  208. package/dist/tools/plot.js.map +1 -1
  209. package/dist/tools/smtp.d.ts +155 -0
  210. package/dist/tools/smtp.d.ts.map +1 -0
  211. package/dist/tools/smtp.js +62 -0
  212. package/dist/tools/smtp.js.map +1 -0
  213. package/dist/twist.d.ts +16 -2
  214. package/dist/twist.d.ts.map +1 -1
  215. package/dist/twist.js +15 -1
  216. package/dist/twist.js.map +1 -1
  217. package/package.json +21 -1
@@ -36,7 +36,7 @@ This is the recommended approach for most use cases.</p>
36
36
  </div><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-4">class</span><span class="hl-1"> </span><span class="hl-5">CalendarTool</span><span class="hl-1"> </span><span class="hl-4">extends</span><span class="hl-1"> </span><span class="hl-5">Tool</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-6">saveAuthToken</span><span class="hl-1">(</span><span class="hl-2">provider</span><span class="hl-1">: </span><span class="hl-5">string</span><span class="hl-1">, </span><span class="hl-2">token</span><span class="hl-1">: </span><span class="hl-5">string</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-7">// Using built-in set method (recommended)</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">set</span><span class="hl-1">(</span><span class="hl-3">`auth_token_</span><span class="hl-4">${</span><span class="hl-2">provider</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-1">, </span><span class="hl-2">token</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-6">getAuthToken</span><span class="hl-1">(</span><span class="hl-2">provider</span><span class="hl-1">: </span><span class="hl-5">string</span><span class="hl-1">): </span><span class="hl-5">Promise</span><span class="hl-1">&lt;</span><span class="hl-5">string</span><span class="hl-1"> | </span><span class="hl-5">null</span><span class="hl-1">&gt; {</span><br/><span class="hl-1"> </span><span class="hl-7">// Using built-in get method (recommended)</span><br/><span class="hl-1"> </span><span class="hl-0">return</span><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">get</span><span class="hl-1">&lt;</span><span class="hl-5">string</span><span class="hl-1">&gt;(</span><span class="hl-3">`auth_token_</span><span class="hl-4">${</span><span class="hl-2">provider</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-6">clearAllTokens</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-7">// Using built-in clearAll method (recommended)</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">clearAll</span><span class="hl-1">();</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">}</span>
37
37
  </code><button type="button">Copy</button></pre>
38
38
 
39
- </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="1013"><h4>Hierarchy (<a href="../hierarchy.html#tools/store.Store">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="tool.ITool.html" class="tsd-signature-type tsd-kind-class">ITool</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">Store</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/tools/store.ts#L58">tools/store.ts:58</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
39
+ </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="1110"><h4>Hierarchy (<a href="../hierarchy.html#tools/store.Store">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="tool.ITool.html" class="tsd-signature-type tsd-kind-class">ITool</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">Store</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/tools/store.ts#L58">tools/store.ts:58</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
40
40
  </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="#get" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>get</span></a>
41
41
  <a href="#set" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>set</span></a>
42
42
  <a href="#list" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>list</span></a>
@@ -27,7 +27,7 @@ This is the recommended approach for most use cases.</p>
27
27
  </div><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-4">class</span><span class="hl-1"> </span><span class="hl-5">SyncTool</span><span class="hl-1"> </span><span class="hl-4">extends</span><span class="hl-1"> </span><span class="hl-5">Tool</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-6">startBatchSync</span><span class="hl-1">(</span><span class="hl-2">totalItems</span><span class="hl-1">: </span><span class="hl-5">number</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-7">// Store initial state using built-in set method</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">set</span><span class="hl-1">(</span><span class="hl-3">&quot;sync_progress&quot;</span><span class="hl-1">, { </span><span class="hl-2">processed:</span><span class="hl-1"> </span><span class="hl-14">0</span><span class="hl-1">, </span><span class="hl-2">total:</span><span class="hl-1"> </span><span class="hl-2">totalItems</span><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// Create callback and queue first batch</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">callback</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">callback</span><span class="hl-1">(</span><span class="hl-3">&quot;processBatch&quot;</span><span class="hl-1">, { </span><span class="hl-2">batchNumber:</span><span class="hl-1"> </span><span class="hl-14">1</span><span class="hl-1"> });</span><br/><span class="hl-1"> </span><span class="hl-7">// runTask creates NEW execution with fresh ~1000 request limit</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">runTask</span><span class="hl-1">(</span><span class="hl-2">callback</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-6">processBatch</span><span class="hl-1">(</span><span class="hl-2">args</span><span class="hl-1">: </span><span class="hl-5">any</span><span class="hl-1">, </span><span class="hl-2">context</span><span class="hl-1">: { </span><span class="hl-2">batchNumber</span><span class="hl-1">: </span><span class="hl-5">number</span><span class="hl-1"> }) {</span><br/><span class="hl-1"> </span><span class="hl-7">// Process one batch of items (sized to stay under request limit)</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">progress</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">get</span><span class="hl-1">(</span><span class="hl-3">&quot;sync_progress&quot;</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// If each item makes ~10 requests, process ~100 items per batch</span><br/><span class="hl-1"> </span><span class="hl-7">// 100 items × 10 requests = 1000 requests (at limit)</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">batchSize</span><span class="hl-1"> = </span><span class="hl-14">100</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">items</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">fetchItems</span><span class="hl-1">(</span><span class="hl-2">progress</span><span class="hl-1">.</span><span class="hl-2">processed</span><span class="hl-1">, </span><span class="hl-2">batchSize</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-0">for</span><span class="hl-1"> (</span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">item</span><span class="hl-1"> </span><span class="hl-4">of</span><span class="hl-1"> </span><span class="hl-2">items</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">processItem</span><span class="hl-1">(</span><span class="hl-2">item</span><span class="hl-1">); </span><span class="hl-7">// Makes ~10 requests per item</span><br/><span class="hl-1"> }</span><br/><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">set</span><span class="hl-1">(</span><span class="hl-3">&quot;sync_progress&quot;</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-2">processed:</span><span class="hl-1"> </span><span class="hl-2">progress</span><span class="hl-1">.</span><span class="hl-2">processed</span><span class="hl-1"> + </span><span class="hl-2">batchSize</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">total:</span><span class="hl-1"> </span><span class="hl-2">progress</span><span class="hl-1">.</span><span class="hl-2">total</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-0">if</span><span class="hl-1"> (</span><span class="hl-2">progress</span><span class="hl-1">.</span><span class="hl-2">processed</span><span class="hl-1"> &lt; </span><span class="hl-2">progress</span><span class="hl-1">.</span><span class="hl-2">total</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-7">// Queue next batch - creates NEW execution with fresh request limit</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">callback</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">callback</span><span class="hl-1">(</span><span class="hl-3">&quot;processBatch&quot;</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-2">batchNumber:</span><span class="hl-1"> </span><span class="hl-2">context</span><span class="hl-1">.</span><span class="hl-2">batchNumber</span><span class="hl-1"> + </span><span class="hl-14">1</span><br/><span class="hl-1"> });</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">runTask</span><span class="hl-1">(</span><span class="hl-2">callback</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> }</span><br/><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-6">scheduleCleanup</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">tomorrow</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-6">Date</span><span class="hl-1">();</span><br/><span class="hl-1"> </span><span class="hl-2">tomorrow</span><span class="hl-1">.</span><span class="hl-6">setDate</span><span class="hl-1">(</span><span class="hl-2">tomorrow</span><span class="hl-1">.</span><span class="hl-6">getDate</span><span class="hl-1">() + </span><span class="hl-14">1</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">callback</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">callback</span><span class="hl-1">(</span><span class="hl-3">&quot;cleanupOldData&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-7">// Schedule for future execution</span><br/><span class="hl-1"> </span><span class="hl-0">return</span><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-6">runTask</span><span class="hl-1">(</span><span class="hl-2">callback</span><span class="hl-1">, { </span><span class="hl-2">runAt:</span><span class="hl-1"> </span><span class="hl-2">tomorrow</span><span class="hl-1"> });</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">}</span>
28
28
  </code><button type="button">Copy</button></pre>
29
29
 
30
- </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="1034"><h4>Hierarchy (<a href="../hierarchy.html#tools/tasks.Tasks">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="tool.ITool.html" class="tsd-signature-type tsd-kind-class">ITool</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">Tasks</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/tools/tasks.ts#L82">tools/tasks.ts:82</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
30
+ </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="1131"><h4>Hierarchy (<a href="../hierarchy.html#tools/tasks.Tasks">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="tool.ITool.html" class="tsd-signature-type tsd-kind-class">ITool</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">Tasks</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/tools/tasks.ts#L82">tools/tasks.ts:82</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
31
31
  </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="#runtask" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>run<wbr/>Task</span></a>
32
32
  <a href="#canceltask" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>cancel<wbr/>Task</span></a>
33
33
  <a href="#cancelalltasks" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>cancel<wbr/>All<wbr/>Tasks</span></a>
@@ -4,7 +4,7 @@ and programmatically deploy twists.</p>
4
4
  </div><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-4">class</span><span class="hl-1"> </span><span class="hl-5">TwistBuilderTwist</span><span class="hl-1"> </span><span class="hl-4">extends</span><span class="hl-1"> </span><span class="hl-5">Twist</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">build</span><span class="hl-1">(</span><span class="hl-2">build</span><span class="hl-1">: </span><span class="hl-5">ToolBuilder</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-0">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">twists:</span><span class="hl-1"> </span><span class="hl-2">build</span><span class="hl-1">.</span><span class="hl-6">get</span><span class="hl-1">(</span><span class="hl-2">Twists</span><span class="hl-1">)</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> }</span><br/><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-6">activate</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">twistId</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-4">this</span><span class="hl-1">.</span><span class="hl-2">tools</span><span class="hl-1">.</span><span class="hl-2">twists</span><span class="hl-1">.</span><span class="hl-6">create</span><span class="hl-1">();</span><br/><span class="hl-1"> </span><span class="hl-7">// Display twist ID to user</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">}</span>
5
5
  </code><button type="button">Copy</button></pre>
6
6
 
7
- </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="487"><h4>Hierarchy (<a href="../hierarchy.html#tools/twists.Twists">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="tool.ITool.html" class="tsd-signature-type tsd-kind-class">ITool</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">Twists</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/tools/twists.ts#L78">tools/twists.ts:78</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
7
+ </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="546"><h4>Hierarchy (<a href="../hierarchy.html#tools/twists.Twists">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="tool.ITool.html" class="tsd-signature-type tsd-kind-class">ITool</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">Twists</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/tools/twists.ts#L78">tools/twists.ts:78</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
8
8
  </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="#create" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>create</span></a>
9
9
  <a href="#generate" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>generate</span></a>
10
10
  <a href="#deploy" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>deploy</span></a>