@plotday/twister 0.26.0 → 0.27.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 (92) hide show
  1. package/README.md +1 -1
  2. package/bin/commands/deploy.js +15 -7
  3. package/bin/commands/deploy.js.map +1 -1
  4. package/bin/templates/AGENTS.template.md +53 -29
  5. package/bin/utils/sse.js +19 -1
  6. package/bin/utils/sse.js.map +1 -1
  7. package/cli/templates/AGENTS.template.md +53 -29
  8. package/dist/common/calendar.d.ts +24 -9
  9. package/dist/common/calendar.d.ts.map +1 -1
  10. package/dist/common/messaging.d.ts +12 -6
  11. package/dist/common/messaging.d.ts.map +1 -1
  12. package/dist/common/projects.d.ts +12 -14
  13. package/dist/common/projects.d.ts.map +1 -1
  14. package/dist/docs/assets/hierarchy.js +1 -1
  15. package/dist/docs/assets/navigation.js +1 -1
  16. package/dist/docs/assets/search.js +1 -1
  17. package/dist/docs/classes/tools_ai.AI.html +1 -1
  18. package/dist/docs/classes/tools_callbacks.Callbacks.html +1 -1
  19. package/dist/docs/classes/tools_integrations.Integrations.html +1 -1
  20. package/dist/docs/classes/tools_network.Network.html +1 -1
  21. package/dist/docs/classes/tools_plot.Plot.html +1 -1
  22. package/dist/docs/classes/tools_store.Store.html +1 -1
  23. package/dist/docs/classes/tools_tasks.Tasks.html +1 -1
  24. package/dist/docs/classes/tools_twists.Twists.html +1 -1
  25. package/dist/docs/documents/Built-in_Tools.html +6 -6
  26. package/dist/docs/documents/Core_Concepts.html +3 -3
  27. package/dist/docs/documents/Getting_Started.html +1 -1
  28. package/dist/docs/documents/Runtime_Environment.html +1 -1
  29. package/dist/docs/enums/plot.ActivityLinkType.html +5 -5
  30. package/dist/docs/enums/plot.ActivityType.html +4 -4
  31. package/dist/docs/enums/plot.ActorType.html +4 -4
  32. package/dist/docs/enums/plot.ConferencingProvider.html +6 -6
  33. package/dist/docs/functions/index.Uuid.Generate.html +1 -0
  34. package/dist/docs/hierarchy.html +1 -1
  35. package/dist/docs/interfaces/common_calendar.CalendarTool.html +15 -13
  36. package/dist/docs/modules/index.Uuid.html +1 -0
  37. package/dist/docs/modules/index.html +1 -1
  38. package/dist/docs/modules/plot.html +1 -1
  39. package/dist/docs/types/index.Uuid.html +1 -0
  40. package/dist/docs/types/plot.Activity.html +2 -9
  41. package/dist/docs/types/plot.ActivityCommon.html +16 -16
  42. package/dist/docs/types/plot.ActivityLink.html +1 -1
  43. package/dist/docs/types/plot.ActivityMeta.html +5 -25
  44. package/dist/docs/types/plot.ActivityUpdate.html +3 -4
  45. package/dist/docs/types/plot.ActivityWithNotes.html +1 -1
  46. package/dist/docs/types/plot.Actor.html +5 -5
  47. package/dist/docs/types/plot.ActorId.html +1 -1
  48. package/dist/docs/types/plot.ContentType.html +1 -1
  49. package/dist/docs/types/plot.NewActivity.html +9 -5
  50. package/dist/docs/types/plot.NewActivityWithNotes.html +1 -1
  51. package/dist/docs/types/plot.NewActor.html +3 -0
  52. package/dist/docs/types/plot.NewContact.html +4 -4
  53. package/dist/docs/types/plot.NewNote.html +8 -3
  54. package/dist/docs/types/plot.NewPriority.html +1 -1
  55. package/dist/docs/types/plot.NewTags.html +2 -0
  56. package/dist/docs/types/plot.Note.html +2 -2
  57. package/dist/docs/types/plot.NoteUpdate.html +5 -5
  58. package/dist/docs/types/plot.PickPriorityConfig.html +2 -2
  59. package/dist/docs/types/plot.Priority.html +3 -3
  60. package/dist/docs/types/plot.SyncUpdate.html +15 -0
  61. package/dist/docs/types/plot.Tags.html +2 -1
  62. package/dist/llm-docs/common/calendar.d.ts +1 -1
  63. package/dist/llm-docs/common/calendar.d.ts.map +1 -1
  64. package/dist/llm-docs/common/calendar.js +1 -1
  65. package/dist/llm-docs/common/calendar.js.map +1 -1
  66. package/dist/llm-docs/common/messaging.d.ts +1 -1
  67. package/dist/llm-docs/common/messaging.d.ts.map +1 -1
  68. package/dist/llm-docs/common/messaging.js +1 -1
  69. package/dist/llm-docs/common/messaging.js.map +1 -1
  70. package/dist/llm-docs/common/projects.d.ts +1 -1
  71. package/dist/llm-docs/common/projects.d.ts.map +1 -1
  72. package/dist/llm-docs/common/projects.js +1 -1
  73. package/dist/llm-docs/common/projects.js.map +1 -1
  74. package/dist/llm-docs/plot.d.ts +1 -1
  75. package/dist/llm-docs/plot.d.ts.map +1 -1
  76. package/dist/llm-docs/plot.js +1 -1
  77. package/dist/llm-docs/plot.js.map +1 -1
  78. package/dist/llm-docs/twist-guide-template.d.ts +1 -1
  79. package/dist/llm-docs/twist-guide-template.d.ts.map +1 -1
  80. package/dist/llm-docs/twist-guide-template.js +1 -1
  81. package/dist/llm-docs/twist-guide-template.js.map +1 -1
  82. package/dist/plot.d.ts +127 -111
  83. package/dist/plot.d.ts.map +1 -1
  84. package/dist/plot.js +1 -0
  85. package/dist/plot.js.map +1 -1
  86. package/dist/twist-guide.d.ts +1 -1
  87. package/dist/twist-guide.d.ts.map +1 -1
  88. package/dist/utils/uuid.d.ts +7 -0
  89. package/dist/utils/uuid.d.ts.map +1 -0
  90. package/dist/utils/uuid.js +9 -0
  91. package/dist/utils/uuid.js.map +1 -0
  92. package/package.json +9 -2
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SyncUpdate | Creating Plot Twists</title><link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"/><meta name="description" content="Documentation for Creating Plot Twists"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="/" class="title">Creating Plot Twists</a><div id="tsd-toolbar-links"><a href="https://plot.day">Plot</a><a href="https://github.com/plotday/plot">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister">NPM</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/plot.html">plot</a></li><li><a href="" aria-current="page">SyncUpdate</a></li></ul><h1>Type Alias SyncUpdate</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">SyncUpdate</span><span class="tsd-signature-symbol">:</span><br/>    <span class="tsd-signature-symbol">|</span> <a href="plot.NewActivityWithNotes.html" class="tsd-signature-type tsd-kind-type-alias">NewActivityWithNotes</a><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">activityId</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">update</span><span class="tsd-signature-symbol">?:</span> <a href="plot.ActivityUpdate.html" class="tsd-signature-type tsd-kind-type-alias">ActivityUpdate</a><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">notes</span><span class="tsd-signature-symbol">?:</span> <a href="plot.NewNote.html" class="tsd-signature-type tsd-kind-type-alias">NewNote</a><span class="tsd-signature-symbol">[]</span> <span class="tsd-signature-symbol">}</span></div><div class="tsd-comment tsd-typography"><p>Represents a sync update from a tool.</p>
2
+ <p>Tools that sync from external sources can send either:</p>
3
+ <ul>
4
+ <li>A new activity with notes (for newly discovered items)</li>
5
+ <li>An update to an existing activity with optional new notes (for changed items)</li>
6
+ </ul>
7
+ <p>This allows tools to manage their own update detection logic locally,
8
+ providing Plot with the appropriate operation to perform.</p>
9
+ </div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul><li><a href="plot.NewActivityWithNotes.html" class="tsd-signature-type tsd-kind-type-alias">NewActivityWithNotes</a></li><li><span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">activityId</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">update</span><span class="tsd-signature-symbol">?:</span> <a href="plot.ActivityUpdate.html" class="tsd-signature-type tsd-kind-type-alias">ActivityUpdate</a><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">notes</span><span class="tsd-signature-symbol">?:</span> <a href="plot.NewNote.html" class="tsd-signature-type tsd-kind-type-alias">NewNote</a><span class="tsd-signature-symbol">[]</span> <span class="tsd-signature-symbol">}</span><ul class="tsd-parameters"><li class="tsd-parameter"><h5><span class="tsd-kind-property">activityId</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><p>ID of the activity to update</p>
10
+ </div></li><li class="tsd-parameter"><h5><code class="tsd-tag">Optional</code><span class="tsd-kind-property">update</span><span class="tsd-signature-symbol">?: </span><a href="plot.ActivityUpdate.html" class="tsd-signature-type tsd-kind-type-alias">ActivityUpdate</a></h5><div class="tsd-comment tsd-typography"><p>Optional updates to the activity itself</p>
11
+ </div></li><li class="tsd-parameter"><h5><code class="tsd-tag">Optional</code><span class="tsd-kind-property">notes</span><span class="tsd-signature-symbol">?: </span><a href="plot.NewNote.html" class="tsd-signature-type tsd-kind-type-alias">NewNote</a><span class="tsd-signature-symbol">[]</span></h5><div class="tsd-comment tsd-typography"><p>Optional new notes to add to the activity</p>
12
+ </div></li></ul></li></ul></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-7">// Send a new activity</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">newItem</span><span class="hl-1">: </span><span class="hl-5">SyncUpdate</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-2">type:</span><span class="hl-1"> </span><span class="hl-2">ActivityType</span><span class="hl-1">.</span><span class="hl-2">Event</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">title:</span><span class="hl-1"> </span><span class="hl-3">&quot;New Meeting&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">id:</span><span class="hl-1"> </span><span class="hl-2">Uuid</span><span class="hl-1">.</span><span class="hl-6">Generate</span><span class="hl-1">(), </span><span class="hl-7">// Tool-generated ID</span><br/><span class="hl-1"> </span><span class="hl-2">notes:</span><span class="hl-1"> [{ </span><span class="hl-2">id:</span><span class="hl-1"> </span><span class="hl-2">Uuid</span><span class="hl-1">.</span><span class="hl-6">Generate</span><span class="hl-1">(), </span><span class="hl-2">content:</span><span class="hl-1"> </span><span class="hl-3">&quot;Description&quot;</span><span class="hl-1"> }]</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-7">// Send an update to existing activity</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-8">update</span><span class="hl-1">: </span><span class="hl-5">SyncUpdate</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-2">activityId:</span><span class="hl-1"> </span><span class="hl-2">existingActivityId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">update:</span><span class="hl-1"> { </span><span class="hl-2">title:</span><span class="hl-1"> </span><span class="hl-3">&quot;Updated Meeting Title&quot;</span><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-2">notes:</span><span class="hl-1"> [{ </span><span class="hl-2">id:</span><span class="hl-1"> </span><span class="hl-2">Uuid</span><span class="hl-1">.</span><span class="hl-6">Generate</span><span class="hl-1">(), </span><span class="hl-2">content:</span><span class="hl-1"> </span><span class="hl-3">&quot;New comment&quot;</span><span class="hl-1"> }]</span><br/><span class="hl-1">};</span>
13
+ </code><button type="button">Copy</button></pre>
14
+
15
+ </div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/plot.ts#L583">plot.ts:583</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-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><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://plot.day" class="tsd-nav-link">Plot</a><a href="https://github.com/plotday/plot" class="tsd-nav-link">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister" class="tsd-nav-link">NPM</a></nav><nav class="tsd-navigation"><a href="../modules.html">Creating Plot Twists</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -1 +1,2 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tags | Creating Plot Twists</title><link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"/><meta name="description" content="Documentation for Creating Plot Twists"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="/" class="title">Creating Plot Twists</a><div id="tsd-toolbar-links"><a href="https://plot.day">Plot</a><a href="https://github.com/plotday/plot">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister">NPM</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/plot.html">plot</a></li><li><a href="" aria-current="page">Tags</a></li></ul><h1>Type Alias Tags</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">Tags</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-type-parameter">K</span> <span class="tsd-signature-keyword">in</span> <a href="../enums/tag.Tag.html" class="tsd-signature-type tsd-kind-enum">Tag</a><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">?:</span> <a href="plot.ActorId.html" class="tsd-signature-type tsd-kind-type-alias">ActorId</a><span class="tsd-signature-symbol">[]</span> <span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/plot.ts#L236">plot.ts:236</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-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><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://plot.day" class="tsd-nav-link">Plot</a><a href="https://github.com/plotday/plot" class="tsd-nav-link">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister" class="tsd-nav-link">NPM</a></nav><nav class="tsd-navigation"><a href="../modules.html">Creating Plot Twists</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tags | Creating Plot Twists</title><link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"/><meta name="description" content="Documentation for Creating Plot Twists"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="/" class="title">Creating Plot Twists</a><div id="tsd-toolbar-links"><a href="https://plot.day">Plot</a><a href="https://github.com/plotday/plot">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister">NPM</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/plot.html">plot</a></li><li><a href="" aria-current="page">Tags</a></li></ul><h1>Type Alias Tags</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">Tags</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-type-parameter">K</span> <span class="tsd-signature-keyword">in</span> <a href="../enums/tag.Tag.html" class="tsd-signature-type tsd-kind-enum">Tag</a><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">?:</span> <a href="plot.ActorId.html" class="tsd-signature-type tsd-kind-type-alias">ActorId</a><span class="tsd-signature-symbol">[]</span> <span class="tsd-signature-symbol">}</span></div><div class="tsd-comment tsd-typography"><p>Tags on an item, along with the actors who added each tag.</p>
2
+ </div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/plotday/plot/blob/main/twist/twister/src/plot.ts#L215">plot.ts:215</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-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><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://plot.day" class="tsd-nav-link">Plot</a><a href="https://github.com/plotday/plot" class="tsd-nav-link">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister" class="tsd-nav-link">NPM</a></nav><nav class="tsd-navigation"><a href="../modules.html">Creating Plot Twists</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -4,6 +4,6 @@
4
4
  * This file is auto-generated during build. Do not edit manually.
5
5
  * Generated from: prebuild.ts
6
6
  */
7
- declare const _default: "import type { ActivityLink, NewActivityWithNotes } from \"../index\";\n\n/**\n * Represents successful calendar authorization.\n *\n * Returned by calendar tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * calendar operations.\n */\nexport type CalendarAuth = {\n /** Opaque token for calendar operations */\n authToken: string;\n};\n\n/**\n * Represents a calendar from an external calendar service.\n *\n * Contains metadata about a specific calendar that can be synced\n * with Plot. Different calendar providers may have additional\n * provider-specific properties.\n */\nexport interface Calendar {\n /** Unique identifier for the calendar within the provider */\n id: string;\n /** Human-readable name of the calendar */\n name: string;\n /** Optional description or additional details about the calendar */\n description: string | null;\n /** Whether this is the user's primary/default calendar */\n primary: boolean;\n}\n\n/**\n * Configuration options for calendar synchronization.\n *\n * Controls the time range and other parameters for calendar sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface SyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n /** Latest date to sync events to (exclusive) */\n timeMax?: Date;\n}\n\n/**\n * Base interface for calendar integration tools.\n *\n * Defines the standard operations that all calendar tools must implement\n * to integrate with external calendar services like Google Calendar,\n * Outlook Calendar, etc.\n *\n * **Implementation Pattern:**\n * 1. Request an ActivityLink for authorization\n * 2. Create an Activity with the ActivityLink to prompt user\n * 3. Receive a CalendarAuth in the specified callback\n * 4. Fetch list of available calendars\n * 5. Start sync for selected calendars\n * 6. Process incoming events via callbacks\n *\n * @example\n * ```typescript\n * // Typical calendar integration flow\n * class MyCalendarTwist extends Twist {\n * private googleCalendar: GoogleCalendar;\n *\n * async activate() {\n * // Step 1: Request authorization\n * const authLink = await this.googleCalendar.requestAuth(\"onAuthComplete\");\n * await this.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Connect Google Calendar\",\n * links: [authLink],\n * });\n * }\n *\n * async onAuthComplete(auth: CalendarAuth) {\n * // Step 2: Get available calendars\n * const calendars = await this.googleCalendar.getCalendars(auth.authToken);\n *\n * // Step 3: Start sync for primary calendar\n * const primaryCalendar = calendars.find(c => c.primary);\n * if (primaryCalendar) {\n * await this.googleCalendar.startSync(\n * auth.authToken,\n * primaryCalendar.id,\n * \"onCalendarEvent\"\n * );\n * }\n * }\n *\n * async onCalendarEvent(\n * activity: NewActivityWithNotes,\n * syncMeta: { initialSync: boolean }\n * ) {\n * // Step 4: Process synced events\n * await this.plot.createActivity(activity);\n * }\n * }\n * ```\n */\nexport interface CalendarTool {\n /**\n * Initiates the authorization flow for the calendar service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: CalendarAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of calendars accessible to the authenticated user.\n *\n * Returns metadata for all calendars the user has access to, including\n * their primary calendar and any shared calendars. This list can be\n * presented to users for calendar selection.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available calendars\n * @throws When the auth token is invalid or expired\n */\n getCalendars(authToken: string): Promise<Calendar[]>;\n\n /**\n * Begins synchronizing events from a specific calendar.\n *\n * Sets up real-time sync for the specified calendar, including initial\n * event import and ongoing change notifications. The callback function\n * will be invoked for each synced event.\n *\n * Tools implementing this should set activity.unread based on sync type:\n * - Initial sync (historical data): Set activity.unread = false\n * - Incremental updates (webhooks): Set activity.unread = true or leave undefined\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to sync\n * @param callback - Function receiving (activity, ...extraArgs) for each synced event.\n * The activity.unread field indicates whether this is from initial sync.\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n * @throws When auth token is invalid or calendar doesn't exist\n */\n startSync<\n TCallback extends (\n activity: NewActivityWithNotes,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n calendarId: string,\n callback: TCallback,\n ...extraArgs: TCallback extends (\n activity: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing events from a specific calendar.\n *\n * Disables real-time sync and cleans up any webhooks or polling\n * mechanisms for the specified calendar. No further events will\n * be synced after this call.\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, calendarId: string): Promise<void>;\n}\n";
7
+ declare const _default: "import type { ActivityLink, NewActivityWithNotes, SyncUpdate } from \"../index\";\n\n/**\n * Represents successful calendar authorization.\n *\n * Returned by calendar tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * calendar operations.\n */\nexport type CalendarAuth = {\n /** Opaque token for calendar operations */\n authToken: string;\n};\n\n/**\n * Represents a calendar from an external calendar service.\n *\n * Contains metadata about a specific calendar that can be synced\n * with Plot. Different calendar providers may have additional\n * provider-specific properties.\n */\nexport interface Calendar {\n /** Unique identifier for the calendar within the provider */\n id: string;\n /** Human-readable name of the calendar */\n name: string;\n /** Optional description or additional details about the calendar */\n description: string | null;\n /** Whether this is the user's primary/default calendar */\n primary: boolean;\n}\n\n/**\n * Configuration options for calendar synchronization.\n *\n * Controls the time range and other parameters for calendar sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface SyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n /** Latest date to sync events to (exclusive) */\n timeMax?: Date;\n}\n\n/**\n * Base interface for calendar integration tools.\n *\n * Defines the standard operations that all calendar tools must implement\n * to integrate with external calendar services like Google Calendar,\n * Outlook Calendar, etc.\n *\n * **Implementation Pattern:**\n * 1. Request an ActivityLink for authorization\n * 2. Create an Activity with the ActivityLink to prompt user\n * 3. Receive a CalendarAuth in the specified callback\n * 4. Fetch list of available calendars\n * 5. Start sync for selected calendars\n * 6. Process incoming events via callbacks\n *\n * @example\n * ```typescript\n * // Typical calendar integration flow\n * class MyCalendarTwist extends Twist {\n * private googleCalendar: GoogleCalendar;\n *\n * async activate() {\n * // Step 1: Request authorization\n * const authLink = await this.googleCalendar.requestAuth(\"onAuthComplete\");\n * await this.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Connect Google Calendar\",\n * links: [authLink],\n * });\n * }\n *\n * async onAuthComplete(auth: CalendarAuth) {\n * // Step 2: Get available calendars\n * const calendars = await this.googleCalendar.getCalendars(auth.authToken);\n *\n * // Step 3: Start sync for primary calendar\n * const primaryCalendar = calendars.find(c => c.primary);\n * if (primaryCalendar) {\n * await this.googleCalendar.startSync(\n * auth.authToken,\n * primaryCalendar.id,\n * \"onCalendarEvent\"\n * );\n * }\n * }\n *\n * async onCalendarEvent(\n * syncUpdate: SyncUpdate,\n * syncMeta: { initialSync: boolean }\n * ) {\n * // Step 4: Process synced events\n * if ('activityId' in syncUpdate) {\n * // Update existing activity\n * if (syncUpdate.update) {\n * await this.plot.updateActivity(syncUpdate.update);\n * }\n * if (syncUpdate.notes) {\n * for (const note of syncUpdate.notes) {\n * await this.plot.createNote(note);\n * }\n * }\n * } else {\n * // Create new activity\n * await this.plot.createActivity(syncUpdate);\n * }\n * }\n * }\n * ```\n */\nexport interface CalendarTool {\n /**\n * Initiates the authorization flow for the calendar service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: CalendarAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of calendars accessible to the authenticated user.\n *\n * Returns metadata for all calendars the user has access to, including\n * their primary calendar and any shared calendars. This list can be\n * presented to users for calendar selection.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available calendars\n * @throws When the auth token is invalid or expired\n */\n getCalendars(authToken: string): Promise<Calendar[]>;\n\n /**\n * Begins synchronizing events from a specific calendar.\n *\n * Sets up real-time sync for the specified calendar, including initial\n * event import and ongoing change notifications. The callback function\n * will be invoked for each synced event.\n *\n * Tools implementing this should:\n * - Generate UUIDs for new activities and notes using Uuid.Generate()\n * - Track activity IDs locally to detect updates vs new items\n * - Send NewActivityWithNotes for new events\n * - Send update object with activityId for changed events\n * - Set activity.unread = false for initial sync, true for incremental updates\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to sync\n * @param callback - Function receiving (syncUpdate, ...extraArgs) for each synced event\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n * @throws When auth token is invalid or calendar doesn't exist\n */\n startSync<\n TCallback extends (\n syncUpdate: SyncUpdate,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n calendarId: string,\n callback: TCallback,\n ...extraArgs: TCallback extends (\n syncUpdate: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing events from a specific calendar.\n *\n * Disables real-time sync and cleans up any webhooks or polling\n * mechanisms for the specified calendar. No further events will\n * be synced after this call.\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, calendarId: string): Promise<void>;\n}\n";
8
8
  export default _default;
9
9
  //# sourceMappingURL=calendar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/llm-docs/common/calendar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,+lMAA+lM;AAA9mM,wBAA+mM"}
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/llm-docs/common/calendar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,yiNAAyiN;AAAxjN,wBAAyjN"}
@@ -4,5 +4,5 @@
4
4
  * This file is auto-generated during build. Do not edit manually.
5
5
  * Generated from: prebuild.ts
6
6
  */
7
- export default "import type { ActivityLink, NewActivityWithNotes } from \"../index\";\n\n/**\n * Represents successful calendar authorization.\n *\n * Returned by calendar tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * calendar operations.\n */\nexport type CalendarAuth = {\n /** Opaque token for calendar operations */\n authToken: string;\n};\n\n/**\n * Represents a calendar from an external calendar service.\n *\n * Contains metadata about a specific calendar that can be synced\n * with Plot. Different calendar providers may have additional\n * provider-specific properties.\n */\nexport interface Calendar {\n /** Unique identifier for the calendar within the provider */\n id: string;\n /** Human-readable name of the calendar */\n name: string;\n /** Optional description or additional details about the calendar */\n description: string | null;\n /** Whether this is the user's primary/default calendar */\n primary: boolean;\n}\n\n/**\n * Configuration options for calendar synchronization.\n *\n * Controls the time range and other parameters for calendar sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface SyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n /** Latest date to sync events to (exclusive) */\n timeMax?: Date;\n}\n\n/**\n * Base interface for calendar integration tools.\n *\n * Defines the standard operations that all calendar tools must implement\n * to integrate with external calendar services like Google Calendar,\n * Outlook Calendar, etc.\n *\n * **Implementation Pattern:**\n * 1. Request an ActivityLink for authorization\n * 2. Create an Activity with the ActivityLink to prompt user\n * 3. Receive a CalendarAuth in the specified callback\n * 4. Fetch list of available calendars\n * 5. Start sync for selected calendars\n * 6. Process incoming events via callbacks\n *\n * @example\n * ```typescript\n * // Typical calendar integration flow\n * class MyCalendarTwist extends Twist {\n * private googleCalendar: GoogleCalendar;\n *\n * async activate() {\n * // Step 1: Request authorization\n * const authLink = await this.googleCalendar.requestAuth(\"onAuthComplete\");\n * await this.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Connect Google Calendar\",\n * links: [authLink],\n * });\n * }\n *\n * async onAuthComplete(auth: CalendarAuth) {\n * // Step 2: Get available calendars\n * const calendars = await this.googleCalendar.getCalendars(auth.authToken);\n *\n * // Step 3: Start sync for primary calendar\n * const primaryCalendar = calendars.find(c => c.primary);\n * if (primaryCalendar) {\n * await this.googleCalendar.startSync(\n * auth.authToken,\n * primaryCalendar.id,\n * \"onCalendarEvent\"\n * );\n * }\n * }\n *\n * async onCalendarEvent(\n * activity: NewActivityWithNotes,\n * syncMeta: { initialSync: boolean }\n * ) {\n * // Step 4: Process synced events\n * await this.plot.createActivity(activity);\n * }\n * }\n * ```\n */\nexport interface CalendarTool {\n /**\n * Initiates the authorization flow for the calendar service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: CalendarAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of calendars accessible to the authenticated user.\n *\n * Returns metadata for all calendars the user has access to, including\n * their primary calendar and any shared calendars. This list can be\n * presented to users for calendar selection.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available calendars\n * @throws When the auth token is invalid or expired\n */\n getCalendars(authToken: string): Promise<Calendar[]>;\n\n /**\n * Begins synchronizing events from a specific calendar.\n *\n * Sets up real-time sync for the specified calendar, including initial\n * event import and ongoing change notifications. The callback function\n * will be invoked for each synced event.\n *\n * Tools implementing this should set activity.unread based on sync type:\n * - Initial sync (historical data): Set activity.unread = false\n * - Incremental updates (webhooks): Set activity.unread = true or leave undefined\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to sync\n * @param callback - Function receiving (activity, ...extraArgs) for each synced event.\n * The activity.unread field indicates whether this is from initial sync.\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n * @throws When auth token is invalid or calendar doesn't exist\n */\n startSync<\n TCallback extends (\n activity: NewActivityWithNotes,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n calendarId: string,\n callback: TCallback,\n ...extraArgs: TCallback extends (\n activity: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing events from a specific calendar.\n *\n * Disables real-time sync and cleans up any webhooks or polling\n * mechanisms for the specified calendar. No further events will\n * be synced after this call.\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, calendarId: string): Promise<void>;\n}\n";
7
+ export default "import type { ActivityLink, NewActivityWithNotes, SyncUpdate } from \"../index\";\n\n/**\n * Represents successful calendar authorization.\n *\n * Returned by calendar tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * calendar operations.\n */\nexport type CalendarAuth = {\n /** Opaque token for calendar operations */\n authToken: string;\n};\n\n/**\n * Represents a calendar from an external calendar service.\n *\n * Contains metadata about a specific calendar that can be synced\n * with Plot. Different calendar providers may have additional\n * provider-specific properties.\n */\nexport interface Calendar {\n /** Unique identifier for the calendar within the provider */\n id: string;\n /** Human-readable name of the calendar */\n name: string;\n /** Optional description or additional details about the calendar */\n description: string | null;\n /** Whether this is the user's primary/default calendar */\n primary: boolean;\n}\n\n/**\n * Configuration options for calendar synchronization.\n *\n * Controls the time range and other parameters for calendar sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface SyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n /** Latest date to sync events to (exclusive) */\n timeMax?: Date;\n}\n\n/**\n * Base interface for calendar integration tools.\n *\n * Defines the standard operations that all calendar tools must implement\n * to integrate with external calendar services like Google Calendar,\n * Outlook Calendar, etc.\n *\n * **Implementation Pattern:**\n * 1. Request an ActivityLink for authorization\n * 2. Create an Activity with the ActivityLink to prompt user\n * 3. Receive a CalendarAuth in the specified callback\n * 4. Fetch list of available calendars\n * 5. Start sync for selected calendars\n * 6. Process incoming events via callbacks\n *\n * @example\n * ```typescript\n * // Typical calendar integration flow\n * class MyCalendarTwist extends Twist {\n * private googleCalendar: GoogleCalendar;\n *\n * async activate() {\n * // Step 1: Request authorization\n * const authLink = await this.googleCalendar.requestAuth(\"onAuthComplete\");\n * await this.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Connect Google Calendar\",\n * links: [authLink],\n * });\n * }\n *\n * async onAuthComplete(auth: CalendarAuth) {\n * // Step 2: Get available calendars\n * const calendars = await this.googleCalendar.getCalendars(auth.authToken);\n *\n * // Step 3: Start sync for primary calendar\n * const primaryCalendar = calendars.find(c => c.primary);\n * if (primaryCalendar) {\n * await this.googleCalendar.startSync(\n * auth.authToken,\n * primaryCalendar.id,\n * \"onCalendarEvent\"\n * );\n * }\n * }\n *\n * async onCalendarEvent(\n * syncUpdate: SyncUpdate,\n * syncMeta: { initialSync: boolean }\n * ) {\n * // Step 4: Process synced events\n * if ('activityId' in syncUpdate) {\n * // Update existing activity\n * if (syncUpdate.update) {\n * await this.plot.updateActivity(syncUpdate.update);\n * }\n * if (syncUpdate.notes) {\n * for (const note of syncUpdate.notes) {\n * await this.plot.createNote(note);\n * }\n * }\n * } else {\n * // Create new activity\n * await this.plot.createActivity(syncUpdate);\n * }\n * }\n * }\n * ```\n */\nexport interface CalendarTool {\n /**\n * Initiates the authorization flow for the calendar service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: CalendarAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of calendars accessible to the authenticated user.\n *\n * Returns metadata for all calendars the user has access to, including\n * their primary calendar and any shared calendars. This list can be\n * presented to users for calendar selection.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available calendars\n * @throws When the auth token is invalid or expired\n */\n getCalendars(authToken: string): Promise<Calendar[]>;\n\n /**\n * Begins synchronizing events from a specific calendar.\n *\n * Sets up real-time sync for the specified calendar, including initial\n * event import and ongoing change notifications. The callback function\n * will be invoked for each synced event.\n *\n * Tools implementing this should:\n * - Generate UUIDs for new activities and notes using Uuid.Generate()\n * - Track activity IDs locally to detect updates vs new items\n * - Send NewActivityWithNotes for new events\n * - Send update object with activityId for changed events\n * - Set activity.unread = false for initial sync, true for incremental updates\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to sync\n * @param callback - Function receiving (syncUpdate, ...extraArgs) for each synced event\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n * @throws When auth token is invalid or calendar doesn't exist\n */\n startSync<\n TCallback extends (\n syncUpdate: SyncUpdate,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n calendarId: string,\n callback: TCallback,\n ...extraArgs: TCallback extends (\n syncUpdate: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing events from a specific calendar.\n *\n * Disables real-time sync and cleans up any webhooks or polling\n * mechanisms for the specified calendar. No further events will\n * be synced after this call.\n *\n * @param authToken - Authorization token for calendar access\n * @param calendarId - ID of the calendar to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, calendarId: string): Promise<void>;\n}\n";
8
8
  //# sourceMappingURL=calendar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/llm-docs/common/calendar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe,+lMAA+lM,CAAC"}
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/llm-docs/common/calendar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe,yiNAAyiN,CAAC"}
@@ -4,6 +4,6 @@
4
4
  * This file is auto-generated during build. Do not edit manually.
5
5
  * Generated from: prebuild.ts
6
6
  */
7
- declare const _default: "import type { ActivityLink, NewActivityWithNotes } from \"../index\";\n\n/**\n * Represents a successful messaging service authorization.\n *\n * Returned by messaging tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * messaging operations.\n */\nexport type MessagingAuth = {\n /** Opaque token for messaging operations */\n authToken: string;\n};\n\n/**\n * Represents a channel from an external messaging service.\n *\n * Contains metadata about a specific channel that can be synced\n * with Plot.\n */\nexport interface MessageChannel {\n /** Unique identifier for the channel within the provider */\n id: string;\n /** Human-readable name of the channel (e.g., \"Inbox\", \"#general\", \"My Team Thread\") */\n name: string;\n /** Optional description or additional details about the channel */\n description: string | null;\n /** Whether this is the user's primary/default channel (e.g. email inbox) */\n primary: boolean;\n}\n\n/**\n * Configuration options for messaging synchronization.\n *\n * Controls the time range and other parameters for messaging sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface MessageSyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for email and chat integration tools.\n *\n * All synced messages/emails are converted to ActivityWithNotes objects.\n * Each email thread or chat conversation becomes an Activity with Notes for each message.\n */\nexport interface MessagingTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: MessagingAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of conversation channels (inboxes, channels) accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available conversation channels\n */\n getChannels(authToken: string): Promise<MessageChannel[]>;\n\n /**\n * Begins synchronizing messages from a specific channel.\n *\n * Email threads and chat conversations are converted to ActivityWithNotes objects.\n * Each object contains an Activity (with subject/title) and Notes array (one per message).\n * The Activity.id can be used as a stable conversation identifier.\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel (e.g., channel, inbox) to sync\n * @param callback - Function receiving (thread, ...extraArgs) for each synced conversation\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (thread: NewActivityWithNotes, ...args: any[]) => any\n >(\n authToken: string,\n channelId: string,\n callback: TCallback,\n options?: MessageSyncOptions,\n ...extraArgs: TCallback extends (thread: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing messages from a specific channel.\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, channelId: string): Promise<void>;\n}\n";
7
+ declare const _default: "import type { ActivityLink, NewActivityWithNotes, SyncUpdate } from \"../index\";\n\n/**\n * Represents a successful messaging service authorization.\n *\n * Returned by messaging tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * messaging operations.\n */\nexport type MessagingAuth = {\n /** Opaque token for messaging operations */\n authToken: string;\n};\n\n/**\n * Represents a channel from an external messaging service.\n *\n * Contains metadata about a specific channel that can be synced\n * with Plot.\n */\nexport interface MessageChannel {\n /** Unique identifier for the channel within the provider */\n id: string;\n /** Human-readable name of the channel (e.g., \"Inbox\", \"#general\", \"My Team Thread\") */\n name: string;\n /** Optional description or additional details about the channel */\n description: string | null;\n /** Whether this is the user's primary/default channel (e.g. email inbox) */\n primary: boolean;\n}\n\n/**\n * Configuration options for messaging synchronization.\n *\n * Controls the time range and other parameters for messaging sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface MessageSyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for email and chat integration tools.\n *\n * All synced messages/emails are converted to ActivityWithNotes objects.\n * Each email thread or chat conversation becomes an Activity with Notes for each message.\n */\nexport interface MessagingTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: MessagingAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of conversation channels (inboxes, channels) accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available conversation channels\n */\n getChannels(authToken: string): Promise<MessageChannel[]>;\n\n /**\n * Begins synchronizing messages from a specific channel.\n *\n * Email threads and chat conversations are converted to SyncUpdate objects,\n * which can be either new items or updates to existing items.\n *\n * Tools implementing this should:\n * - Generate UUIDs for new activities and notes using Uuid.Generate()\n * - Track activity IDs locally to detect updates vs new threads\n * - Send NewActivityWithNotes for new threads\n * - Send update object with activityId and new notes for new messages in existing threads\n * - Set activity.unread = false for initial sync, true for incremental updates\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel (e.g., channel, inbox) to sync\n * @param callback - Function receiving (syncUpdate, ...extraArgs) for each synced conversation\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (syncUpdate: SyncUpdate, ...args: any[]) => any\n >(\n authToken: string,\n channelId: string,\n callback: TCallback,\n options?: MessageSyncOptions,\n ...extraArgs: TCallback extends (syncUpdate: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing messages from a specific channel.\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, channelId: string): Promise<void>;\n}\n";
8
8
  export default _default;
9
9
  //# sourceMappingURL=messaging.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/llm-docs/common/messaging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,23HAA23H;AAA14H,wBAA24H"}
1
+ {"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/llm-docs/common/messaging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,2rIAA2rI;AAA1sI,wBAA2sI"}
@@ -4,5 +4,5 @@
4
4
  * This file is auto-generated during build. Do not edit manually.
5
5
  * Generated from: prebuild.ts
6
6
  */
7
- export default "import type { ActivityLink, NewActivityWithNotes } from \"../index\";\n\n/**\n * Represents a successful messaging service authorization.\n *\n * Returned by messaging tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * messaging operations.\n */\nexport type MessagingAuth = {\n /** Opaque token for messaging operations */\n authToken: string;\n};\n\n/**\n * Represents a channel from an external messaging service.\n *\n * Contains metadata about a specific channel that can be synced\n * with Plot.\n */\nexport interface MessageChannel {\n /** Unique identifier for the channel within the provider */\n id: string;\n /** Human-readable name of the channel (e.g., \"Inbox\", \"#general\", \"My Team Thread\") */\n name: string;\n /** Optional description or additional details about the channel */\n description: string | null;\n /** Whether this is the user's primary/default channel (e.g. email inbox) */\n primary: boolean;\n}\n\n/**\n * Configuration options for messaging synchronization.\n *\n * Controls the time range and other parameters for messaging sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface MessageSyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for email and chat integration tools.\n *\n * All synced messages/emails are converted to ActivityWithNotes objects.\n * Each email thread or chat conversation becomes an Activity with Notes for each message.\n */\nexport interface MessagingTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: MessagingAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of conversation channels (inboxes, channels) accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available conversation channels\n */\n getChannels(authToken: string): Promise<MessageChannel[]>;\n\n /**\n * Begins synchronizing messages from a specific channel.\n *\n * Email threads and chat conversations are converted to ActivityWithNotes objects.\n * Each object contains an Activity (with subject/title) and Notes array (one per message).\n * The Activity.id can be used as a stable conversation identifier.\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel (e.g., channel, inbox) to sync\n * @param callback - Function receiving (thread, ...extraArgs) for each synced conversation\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (thread: NewActivityWithNotes, ...args: any[]) => any\n >(\n authToken: string,\n channelId: string,\n callback: TCallback,\n options?: MessageSyncOptions,\n ...extraArgs: TCallback extends (thread: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing messages from a specific channel.\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, channelId: string): Promise<void>;\n}\n";
7
+ export default "import type { ActivityLink, NewActivityWithNotes, SyncUpdate } from \"../index\";\n\n/**\n * Represents a successful messaging service authorization.\n *\n * Returned by messaging tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * messaging operations.\n */\nexport type MessagingAuth = {\n /** Opaque token for messaging operations */\n authToken: string;\n};\n\n/**\n * Represents a channel from an external messaging service.\n *\n * Contains metadata about a specific channel that can be synced\n * with Plot.\n */\nexport interface MessageChannel {\n /** Unique identifier for the channel within the provider */\n id: string;\n /** Human-readable name of the channel (e.g., \"Inbox\", \"#general\", \"My Team Thread\") */\n name: string;\n /** Optional description or additional details about the channel */\n description: string | null;\n /** Whether this is the user's primary/default channel (e.g. email inbox) */\n primary: boolean;\n}\n\n/**\n * Configuration options for messaging synchronization.\n *\n * Controls the time range and other parameters for messaging sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface MessageSyncOptions {\n /** Earliest date to sync events from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for email and chat integration tools.\n *\n * All synced messages/emails are converted to ActivityWithNotes objects.\n * Each email thread or chat conversation becomes an Activity with Notes for each message.\n */\nexport interface MessagingTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: MessagingAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of conversation channels (inboxes, channels) accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available conversation channels\n */\n getChannels(authToken: string): Promise<MessageChannel[]>;\n\n /**\n * Begins synchronizing messages from a specific channel.\n *\n * Email threads and chat conversations are converted to SyncUpdate objects,\n * which can be either new items or updates to existing items.\n *\n * Tools implementing this should:\n * - Generate UUIDs for new activities and notes using Uuid.Generate()\n * - Track activity IDs locally to detect updates vs new threads\n * - Send NewActivityWithNotes for new threads\n * - Send update object with activityId and new notes for new messages in existing threads\n * - Set activity.unread = false for initial sync, true for incremental updates\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel (e.g., channel, inbox) to sync\n * @param callback - Function receiving (syncUpdate, ...extraArgs) for each synced conversation\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (syncUpdate: SyncUpdate, ...args: any[]) => any\n >(\n authToken: string,\n channelId: string,\n callback: TCallback,\n options?: MessageSyncOptions,\n ...extraArgs: TCallback extends (syncUpdate: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing messages from a specific channel.\n *\n * @param authToken - Authorization token for access\n * @param channelId - ID of the channel to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, channelId: string): Promise<void>;\n}\n";
8
8
  //# sourceMappingURL=messaging.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/llm-docs/common/messaging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe,23HAA23H,CAAC"}
1
+ {"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/llm-docs/common/messaging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe,2rIAA2rI,CAAC"}
@@ -4,6 +4,6 @@
4
4
  * This file is auto-generated during build. Do not edit manually.
5
5
  * Generated from: prebuild.ts
6
6
  */
7
- declare const _default: "import type {\n ActivityLink,\n ActivityUpdate,\n NewActivityWithNotes,\n} from \"../index\";\n\n/**\n * Represents a successful project management service authorization.\n *\n * Returned by project management tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * project operations.\n */\nexport type ProjectAuth = {\n /** Opaque token for project management operations */\n authToken: string;\n};\n\n/**\n * Represents a project from an external project management service.\n *\n * Contains metadata about a specific project/board/workspace that can be synced\n * with Plot.\n */\nexport interface Project {\n /** Unique identifier for the project within the provider */\n id: string;\n /** Human-readable name of the project (e.g., \"Q1 Roadmap\", \"Engineering\") */\n name: string;\n /** Optional description or additional details about the project */\n description: string | null;\n /** Optional project key/abbreviation (e.g., \"PROJ\" in Jira, \"ENG\" in Linear) */\n key: string | null;\n}\n\n/**\n * Configuration options for project synchronization.\n *\n * Controls the time range and other parameters for project sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface ProjectSyncOptions {\n /** Earliest date to sync issues from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for project management integration tools.\n *\n * All synced issues/tasks are converted to ActivityWithNotes objects.\n * Each issue becomes an Activity with Notes for the description and comments.\n */\nexport interface ProjectTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: ProjectAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of projects accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available projects\n */\n getProjects(authToken: string): Promise<Project[]>;\n\n /**\n * Begins synchronizing issues from a specific project.\n *\n * Issues and tasks are converted to ActivityWithNotes objects.\n * Each object contains an Activity (with issue title and metadata) and Notes array\n * (description as first note, followed by comments).\n * The Activity.source should be set for deduplication.\n *\n * When an issue is updated, tools should check for existing Activity using\n * getActivityBySource() and add a Note rather than creating a new Activity.\n *\n * Tools implementing this should set issue.unread based on sync type:\n * - Initial sync (historical data): Set issue.unread = false\n * - Incremental updates (webhooks): Set issue.unread = true or leave undefined\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to sync\n * @param callback - Function receiving (issue, ...extraArgs) for each synced issue.\n * The issue.unread field indicates whether this is from initial sync.\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (\n issue: NewActivityWithNotes,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n projectId: string,\n callback: TCallback,\n options?: ProjectSyncOptions,\n ...extraArgs: TCallback extends (\n issue: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing issues from a specific project.\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, projectId: string): Promise<void>;\n\n /**\n * Updates an issue/task with new values.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync activity updates back to the external service.\n *\n * The update object contains only the fields that changed, plus id and source.\n * Uses the combination of start and doneAt to determine workflow state:\n * - doneAt set \u2192 Completed/Done state\n * - doneAt null + start set \u2192 In Progress/Active state\n * - doneAt null + start null \u2192 Backlog/Todo state\n *\n * @param authToken - Authorization token for access\n * @param update - ActivityUpdate with changed fields (includes id and source)\n * @returns Promise that resolves when the update is synced\n */\n updateIssue?(authToken: string, update: ActivityUpdate): Promise<void>;\n\n /**\n * Adds a comment to an issue/task.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync notes added to activities back as comments on the external service.\n *\n * @param authToken - Authorization token for access\n * @param issueId - ID or key of the issue/task to comment on\n * @param body - The comment text content\n * @returns Promise that resolves when the comment is added\n */\n addIssueComment?(\n authToken: string,\n issueId: string,\n body: string\n ): Promise<void>;\n}\n";
7
+ declare const _default: "import type {\n ActivityLink,\n ActivityUpdate,\n NewActivityWithNotes,\n SyncUpdate,\n} from \"../index\";\n\n/**\n * Represents a successful project management service authorization.\n *\n * Returned by project management tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * project operations.\n */\nexport type ProjectAuth = {\n /** Opaque token for project management operations */\n authToken: string;\n};\n\n/**\n * Represents a project from an external project management service.\n *\n * Contains metadata about a specific project/board/workspace that can be synced\n * with Plot.\n */\nexport interface Project {\n /** Unique identifier for the project within the provider */\n id: string;\n /** Human-readable name of the project (e.g., \"Q1 Roadmap\", \"Engineering\") */\n name: string;\n /** Optional description or additional details about the project */\n description: string | null;\n /** Optional project key/abbreviation (e.g., \"PROJ\" in Jira, \"ENG\" in Linear) */\n key: string | null;\n}\n\n/**\n * Configuration options for project synchronization.\n *\n * Controls the time range and other parameters for project sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface ProjectSyncOptions {\n /** Earliest date to sync issues from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for project management integration tools.\n *\n * All synced issues/tasks are converted to ActivityWithNotes objects.\n * Each issue becomes an Activity with Notes for the description and comments.\n */\nexport interface ProjectTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: ProjectAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of projects accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available projects\n */\n getProjects(authToken: string): Promise<Project[]>;\n\n /**\n * Begins synchronizing issues from a specific project.\n *\n * Issues and tasks are converted to SyncUpdate objects, which can be either\n * new items or updates to existing items.\n *\n * Tools implementing this should:\n * - Generate UUIDs for new activities and notes using Uuid.Generate()\n * - Track activity IDs locally to detect updates vs new items\n * - Send NewActivityWithNotes for new issues\n * - Send update object with activityId for changed issues or new comments\n * - Track description note ID and hash to detect description changes\n * - Set activity.unread = false for initial sync, true for incremental updates\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to sync\n * @param callback - Function receiving (syncUpdate, ...extraArgs) for each synced issue\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (\n syncUpdate: SyncUpdate,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n projectId: string,\n callback: TCallback,\n options?: ProjectSyncOptions,\n ...extraArgs: TCallback extends (\n syncUpdate: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing issues from a specific project.\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, projectId: string): Promise<void>;\n\n /**\n * Updates an issue/task with new values.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync activity updates back to the external service.\n *\n * The update object contains only the fields that changed, plus id and source.\n * Uses the combination of start and doneAt to determine workflow state:\n * - doneAt set \u2192 Completed/Done state\n * - doneAt null + start set \u2192 In Progress/Active state\n * - doneAt null + start null \u2192 Backlog/Todo state\n *\n * @param authToken - Authorization token for access\n * @param update - ActivityUpdate with changed fields (includes id and source)\n * @returns Promise that resolves when the update is synced\n */\n updateIssue?(authToken: string, update: ActivityUpdate): Promise<void>;\n\n /**\n * Adds a comment to an issue/task.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync notes added to activities back as comments on the external service.\n *\n * @param authToken - Authorization token for access\n * @param issueId - ID or key of the issue/task to comment on\n * @param body - The comment text content\n * @returns Promise that resolves when the comment is added\n */\n addIssueComment?(\n authToken: string,\n issueId: string,\n body: string\n ): Promise<void>;\n}\n";
8
8
  export default _default;
9
9
  //# sourceMappingURL=projects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/llm-docs/common/projects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,stLAAusL;AAAttL,wBAAutL"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/llm-docs/common/projects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,ukLAAwjL;AAAvkL,wBAAwkL"}
@@ -4,5 +4,5 @@
4
4
  * This file is auto-generated during build. Do not edit manually.
5
5
  * Generated from: prebuild.ts
6
6
  */
7
- export default "import type {\n ActivityLink,\n ActivityUpdate,\n NewActivityWithNotes,\n} from \"../index\";\n\n/**\n * Represents a successful project management service authorization.\n *\n * Returned by project management tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * project operations.\n */\nexport type ProjectAuth = {\n /** Opaque token for project management operations */\n authToken: string;\n};\n\n/**\n * Represents a project from an external project management service.\n *\n * Contains metadata about a specific project/board/workspace that can be synced\n * with Plot.\n */\nexport interface Project {\n /** Unique identifier for the project within the provider */\n id: string;\n /** Human-readable name of the project (e.g., \"Q1 Roadmap\", \"Engineering\") */\n name: string;\n /** Optional description or additional details about the project */\n description: string | null;\n /** Optional project key/abbreviation (e.g., \"PROJ\" in Jira, \"ENG\" in Linear) */\n key: string | null;\n}\n\n/**\n * Configuration options for project synchronization.\n *\n * Controls the time range and other parameters for project sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface ProjectSyncOptions {\n /** Earliest date to sync issues from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for project management integration tools.\n *\n * All synced issues/tasks are converted to ActivityWithNotes objects.\n * Each issue becomes an Activity with Notes for the description and comments.\n */\nexport interface ProjectTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: ProjectAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of projects accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available projects\n */\n getProjects(authToken: string): Promise<Project[]>;\n\n /**\n * Begins synchronizing issues from a specific project.\n *\n * Issues and tasks are converted to ActivityWithNotes objects.\n * Each object contains an Activity (with issue title and metadata) and Notes array\n * (description as first note, followed by comments).\n * The Activity.source should be set for deduplication.\n *\n * When an issue is updated, tools should check for existing Activity using\n * getActivityBySource() and add a Note rather than creating a new Activity.\n *\n * Tools implementing this should set issue.unread based on sync type:\n * - Initial sync (historical data): Set issue.unread = false\n * - Incremental updates (webhooks): Set issue.unread = true or leave undefined\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to sync\n * @param callback - Function receiving (issue, ...extraArgs) for each synced issue.\n * The issue.unread field indicates whether this is from initial sync.\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (\n issue: NewActivityWithNotes,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n projectId: string,\n callback: TCallback,\n options?: ProjectSyncOptions,\n ...extraArgs: TCallback extends (\n issue: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing issues from a specific project.\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, projectId: string): Promise<void>;\n\n /**\n * Updates an issue/task with new values.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync activity updates back to the external service.\n *\n * The update object contains only the fields that changed, plus id and source.\n * Uses the combination of start and doneAt to determine workflow state:\n * - doneAt set → Completed/Done state\n * - doneAt null + start set → In Progress/Active state\n * - doneAt null + start null → Backlog/Todo state\n *\n * @param authToken - Authorization token for access\n * @param update - ActivityUpdate with changed fields (includes id and source)\n * @returns Promise that resolves when the update is synced\n */\n updateIssue?(authToken: string, update: ActivityUpdate): Promise<void>;\n\n /**\n * Adds a comment to an issue/task.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync notes added to activities back as comments on the external service.\n *\n * @param authToken - Authorization token for access\n * @param issueId - ID or key of the issue/task to comment on\n * @param body - The comment text content\n * @returns Promise that resolves when the comment is added\n */\n addIssueComment?(\n authToken: string,\n issueId: string,\n body: string\n ): Promise<void>;\n}\n";
7
+ export default "import type {\n ActivityLink,\n ActivityUpdate,\n NewActivityWithNotes,\n SyncUpdate,\n} from \"../index\";\n\n/**\n * Represents a successful project management service authorization.\n *\n * Returned by project management tools when authorization completes successfully.\n * The auth token is an opaque identifier that can be used for subsequent\n * project operations.\n */\nexport type ProjectAuth = {\n /** Opaque token for project management operations */\n authToken: string;\n};\n\n/**\n * Represents a project from an external project management service.\n *\n * Contains metadata about a specific project/board/workspace that can be synced\n * with Plot.\n */\nexport interface Project {\n /** Unique identifier for the project within the provider */\n id: string;\n /** Human-readable name of the project (e.g., \"Q1 Roadmap\", \"Engineering\") */\n name: string;\n /** Optional description or additional details about the project */\n description: string | null;\n /** Optional project key/abbreviation (e.g., \"PROJ\" in Jira, \"ENG\" in Linear) */\n key: string | null;\n}\n\n/**\n * Configuration options for project synchronization.\n *\n * Controls the time range and other parameters for project sync operations.\n * Used to limit sync scope and optimize performance.\n */\nexport interface ProjectSyncOptions {\n /** Earliest date to sync issues from (inclusive) */\n timeMin?: Date;\n}\n\n/**\n * Base interface for project management integration tools.\n *\n * All synced issues/tasks are converted to ActivityWithNotes objects.\n * Each issue becomes an Activity with Notes for the description and comments.\n */\nexport interface ProjectTool {\n /**\n * Initiates the authorization flow for the service.\n *\n * @param callback - Function receiving (auth, ...extraArgs) when auth completes\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise resolving to an ActivityLink to initiate the auth flow\n */\n requestAuth<TCallback extends (auth: ProjectAuth, ...args: any[]) => any>(\n callback: TCallback,\n ...extraArgs: TCallback extends (auth: any, ...rest: infer R) => any\n ? R\n : []\n ): Promise<ActivityLink>;\n\n /**\n * Retrieves the list of projects accessible to the user.\n *\n * @param authToken - Authorization token from successful auth flow\n * @returns Promise resolving to array of available projects\n */\n getProjects(authToken: string): Promise<Project[]>;\n\n /**\n * Begins synchronizing issues from a specific project.\n *\n * Issues and tasks are converted to SyncUpdate objects, which can be either\n * new items or updates to existing items.\n *\n * Tools implementing this should:\n * - Generate UUIDs for new activities and notes using Uuid.Generate()\n * - Track activity IDs locally to detect updates vs new items\n * - Send NewActivityWithNotes for new issues\n * - Send update object with activityId for changed issues or new comments\n * - Track description note ID and hash to detect description changes\n * - Set activity.unread = false for initial sync, true for incremental updates\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to sync\n * @param callback - Function receiving (syncUpdate, ...extraArgs) for each synced issue\n * @param options - Optional configuration for limiting the sync scope (e.g., time range)\n * @param extraArgs - Additional arguments to pass to the callback (type-checked)\n * @returns Promise that resolves when sync setup is complete\n */\n startSync<\n TCallback extends (\n syncUpdate: SyncUpdate,\n ...args: any[]\n ) => any\n >(\n authToken: string,\n projectId: string,\n callback: TCallback,\n options?: ProjectSyncOptions,\n ...extraArgs: TCallback extends (\n syncUpdate: any,\n ...rest: infer R\n ) => any\n ? R\n : []\n ): Promise<void>;\n\n /**\n * Stops synchronizing issues from a specific project.\n *\n * @param authToken - Authorization token for access\n * @param projectId - ID of the project to stop syncing\n * @returns Promise that resolves when sync is stopped\n */\n stopSync(authToken: string, projectId: string): Promise<void>;\n\n /**\n * Updates an issue/task with new values.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync activity updates back to the external service.\n *\n * The update object contains only the fields that changed, plus id and source.\n * Uses the combination of start and doneAt to determine workflow state:\n * - doneAt set → Completed/Done state\n * - doneAt null + start set → In Progress/Active state\n * - doneAt null + start null → Backlog/Todo state\n *\n * @param authToken - Authorization token for access\n * @param update - ActivityUpdate with changed fields (includes id and source)\n * @returns Promise that resolves when the update is synced\n */\n updateIssue?(authToken: string, update: ActivityUpdate): Promise<void>;\n\n /**\n * Adds a comment to an issue/task.\n *\n * Optional method for bidirectional sync. When implemented, allows Plot to\n * sync notes added to activities back as comments on the external service.\n *\n * @param authToken - Authorization token for access\n * @param issueId - ID or key of the issue/task to comment on\n * @param body - The comment text content\n * @returns Promise that resolves when the comment is added\n */\n addIssueComment?(\n authToken: string,\n issueId: string,\n body: string\n ): Promise<void>;\n}\n";
8
8
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/llm-docs/common/projects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe,usLAAusL,CAAC"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/llm-docs/common/projects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe,wjLAAwjL,CAAC"}
@@ -4,6 +4,6 @@
4
4
  * This file is auto-generated during build. Do not edit manually.
5
5
  * Generated from: prebuild.ts
6
6
  */
7
- declare const _default: "import { type Tag } from \"./tag\";\nimport { type Callback } from \"./tools/callbacks\";\n\nexport { Tag } from \"./tag\";\n\n/**\n * Represents a unique user, contact, or twist in Plot.\n *\n * ActorIds are used throughout Plot for:\n * - Activity authors and assignees\n * - Tag creators (actor_id in activity_tag/note_tag)\n * - Mentions in activities and notes\n * - Any entity that can perform actions in Plot\n */\nexport type ActorId = string & { readonly __brand: \"ActorId\" };\n\n/**\n * Represents a priority context within Plot.\n *\n * Priorities are similar to projects in other apps. All Activity is in a Priority.\n * Priorities can be nested.\n */\nexport type Priority = {\n /** Unique identifier for the priority */\n id: string;\n /** Human-readable title for the priority */\n title: string;\n};\n\n/**\n * Type for creating new priorities.\n *\n * Excludes the auto-generated ID field and adds an optional parentId\n * for creating hierarchical priority structures.\n */\nexport type NewPriority = Omit<Priority, \"id\"> & {\n /** Optional ID of the parent priority for creating hierarchies */\n parentId?: string;\n};\n\n/**\n * Enumeration of supported activity types in Plot.\n *\n * Each activity type has different behaviors and rendering characteristics\n * within the Plot application.\n */\nexport enum ActivityType {\n /** A note or piece of information without actionable requirements */\n Note,\n /** An actionable item that can be completed */\n Action,\n /** A scheduled occurrence with start and optional end time */\n Event,\n}\n\n/**\n * Enumeration of supported activity link types.\n *\n * Different link types have different behaviors when clicked by users\n * and may require different rendering approaches.\n */\nexport enum ActivityLinkType {\n /** External web links that open in browser */\n external = \"external\",\n /** Authentication flows for connecting services */\n auth = \"auth\",\n /** Callback links that trigger twist methods when clicked */\n callback = \"callback\",\n /** Video conferencing links with provider-specific handling */\n conferencing = \"conferencing\",\n}\n\n/**\n * Video conferencing providers for conferencing links.\n *\n * Used to identify the conferencing platform and provide\n * provider-specific UI elements (titles, icons, etc.).\n */\nexport enum ConferencingProvider {\n /** Google Meet */\n googleMeet = \"googleMeet\",\n /** Zoom */\n zoom = \"zoom\",\n /** Microsoft Teams */\n microsoftTeams = \"microsoftTeams\",\n /** Cisco Webex */\n webex = \"webex\",\n /** Other or unknown conferencing provider */\n other = \"other\",\n}\n\n/**\n * Represents a clickable link attached to an activity.\n *\n * Activity links are rendered as buttons that enable user interaction with activities.\n * Different link types have specific behaviors and required fields for proper functionality.\n *\n * @example\n * ```typescript\n * // External link - opens URL in browser\n * const externalLink: ActivityLink = {\n * type: ActivityLinkType.external,\n * title: \"Open in Google Calendar\",\n * url: \"https://calendar.google.com/event/123\",\n * };\n *\n * // Conferencing link - opens video conference with provider info\n * const conferencingLink: ActivityLink = {\n * type: ActivityLinkType.conferencing,\n * url: \"https://meet.google.com/abc-defg-hij\",\n * provider: ConferencingProvider.googleMeet,\n * };\n *\n * // Integrations link - initiates OAuth flow\n * const authLink: ActivityLink = {\n * type: ActivityLinkType.auth,\n * title: \"Continue with Google\",\n * provider: AuthProvider.Google,\n * level: AuthLevel.User,\n * scopes: [\"https://www.googleapis.com/auth/calendar.readonly\"],\n * callback: \"callback-token-for-auth-completion\"\n * };\n *\n * // Callback link - triggers a twist method\n * const callbackLink: ActivityLink = {\n * type: ActivityLinkType.callback,\n * title: \"\uD83D\uDCC5 Primary Calendar\",\n * token: \"callback-token-here\"\n * };\n * ```\n */\nexport type ActivityLink =\n | {\n /** External web link that opens in browser */\n type: ActivityLinkType.external;\n /** Display text for the link button */\n title: string;\n /** URL to open when clicked */\n url: string;\n }\n | {\n /** Video conferencing link with provider-specific handling */\n type: ActivityLinkType.conferencing;\n /** URL to join the conference */\n url: string;\n /** Conferencing provider for UI customization */\n provider: ConferencingProvider;\n }\n | {\n /** Authentication link that initiates an OAuth flow */\n type: ActivityLinkType.auth;\n /** Display text for the auth button */\n title: string;\n /** OAuth provider (e.g., \"google\", \"microsoft\") */\n provider: string;\n /** Authorization level (\"user\" or \"priority\") */\n level: string;\n /** Array of OAuth scopes to request */\n scopes: string[];\n /** Callback token for auth completion notification */\n callback: Callback;\n }\n | {\n /** Callback link that triggers a twist method when clicked */\n type: ActivityLinkType.callback;\n /** Display text for the callback button */\n title: string;\n /** Token identifying the callback to execute */\n callback: Callback;\n };\n\n/**\n * Represents metadata about an activity, typically from an external system.\n *\n * Activity metadata enables tracking where activities originated from,\n * which is useful for synchronization, deduplication, and linking\n * back to external systems.\n *\n * ## Source-Based Upsert\n *\n * When creating an activity with a `source` field, Plot automatically implements\n * **upsert behavior**. If an activity with the same source already exists (created\n * by the same twist definition), it will be **updated** instead of creating a duplicate.\n * This enables safe, idempotent sync operations.\n *\n * ### How Source Uniqueness Works\n *\n * - **Scoped to twist definition**: Sources are unique per twist, not per twist instance.\n * Different instances of the same twist (installed in different priorities) share\n * the same source namespace.\n * - **Independent twists**: Different twists can have activities with the same source value.\n * - **Archived activities**: Archived activities don't conflict with active ones - you can\n * create a new activity with the same source after archiving.\n * - **Optional**: Activities without sources are always created fresh - no deduplication.\n *\n * ### Upsert Behavior Details\n *\n * When an activity is upserted (updated instead of created):\n * - **All provided fields** are updated with new values\n * - **Tags** are merged (existing tags + new tags)\n * - **Notes** are appended (existing notes kept, new ones added)\n * - **Priority** is NOT changed (stays in original priority)\n *\n * @example\n * ```typescript\n * // First call creates the activity\n * await plot.createActivity({\n * type: ActivityType.Event,\n * title: \"Team Meeting\",\n * start: new Date(\"2024-01-15T10:00:00Z\"),\n * source: \"google-calendar:event-abc123\",\n * meta: {\n * calendarId: \"primary\",\n * htmlLink: \"https://calendar.google.com/event/abc123\"\n * }\n * });\n *\n * // Second call with same source updates the existing activity\n * await plot.createActivity({\n * type: ActivityType.Event,\n * title: \"Team Meeting (Updated)\", // Title will be updated\n * start: new Date(\"2024-01-15T14:00:00Z\"), // Time will be updated\n * source: \"google-calendar:event-abc123\" // Same source = upsert\n * });\n *\n * // Different twist, same source = creates new activity (independent)\n * // Different source = creates new activity\n * // No source = creates new activity (no deduplication)\n * ```\n */\nexport type ActivityMeta = {\n /** Source-specific properties and metadata */\n [key: string]: any;\n};\n\nexport type Tags = { [K in Tag]?: ActorId[] };\n\n/**\n * Represents a complete activity within the Plot system.\n *\n * Activities are the core entities in Plot, representing anything from simple notes\n * to complex recurring events. They support rich metadata including scheduling,\n * recurrence patterns, links, and external source tracking.\n *\n * @example\n * ```typescript\n * // Simple note\n * const task: Activity = {\n * type: ActivityType.Note,\n * title: \"New campaign brainstorming ideas\",\n * content: \"We could rent a bouncy castle...\",\n * author: { id: \"user-1\", name: \"John Doe\", type: ActorType.User },\n * priority: { id: \"work\", title: \"Work\" },\n * // ... other fields\n * };\n *\n * // Simple action\n * const action: Activity = {\n * type: ActivityType.Action,\n * title: \"Review budget proposal\",\n * author: { id: \"user-1\", name: \"John Doe\", type: ActorType.User },\n * priority: { id: \"work\", title: \"Work\" },\n * // ... other fields\n * };\n *\n * // Recurring event\n * const meeting: Activity = {\n * type: ActivityType.Event,\n * title: \"Weekly standup\",\n * recurrenceRule: \"FREQ=WEEKLY;BYDAY=MO\",\n * recurrenceCount: 12,\n * // ... other fields\n * };\n * ```\n */\nexport type ActivityCommon = {\n /** Unique identifier for the activity */\n id: string;\n /** Information about who created the activity */\n author: Actor;\n /** Whether this activity is in draft state (not shown in do now view) */\n draft: boolean;\n /** Whether this activity is private (only visible to author) */\n private: boolean;\n /** Whether this activity has been archived */\n archived: boolean;\n /** Tags attached to this activity. Maps tag ID to array of actor IDs who added that tag. */\n tags: Tags | null;\n /** Array of actor IDs (users, contacts, or twists) mentioned in this activity via @-mentions */\n mentions: ActorId[] | null;\n};\n\nexport type Activity = ActivityCommon & {\n /** The display title/summary of the activity */\n title: string | null;\n /** The type of activity (Note, Task, or Event) */\n type: ActivityType;\n /**\n * The actor assigned to this activity.\n *\n * **For actions (tasks):** An assignee is required. If not explicitly provided when creating\n * an action, the assignee will default to the user who installed the twist (the twist owner).\n *\n * **For notes and events:** Assignee is optional and typically null.\n *\n * @example\n * ```typescript\n * // Create action with explicit assignee\n * const task: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Review PR #123\",\n * assignee: {\n * id: userId as ActorId,\n * type: ActorType.User,\n * name: \"Alice\"\n * }\n * };\n *\n * // Create action with auto-assignment (defaults to twist owner)\n * const task: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Follow up on email\"\n * // assignee will be set automatically to twist owner\n * };\n *\n * // Update assignee\n * await plot.updateActivity({\n * id: activityId,\n * assignee: {\n * id: newUserId as ActorId,\n * type: ActorType.User,\n * name: \"Bob\"\n * }\n * });\n * ```\n */\n assignee: Actor | null;\n /** Timestamp when the activity was marked as complete. Null if not completed. */\n doneAt: Date | null;\n /**\n * Start time of a scheduled activity. Notes are not typically scheduled unless they're about specific times.\n * For recurring events, this represents the start of the first occurrence.\n * Can be a Date object for timed events or a date string in \"YYYY-MM-DD\" format for all-day events.\n *\n * **Activity Scheduling States** (for Actions):\n * - **Do Now** (current/actionable): When creating a NewActivity of type Action, omitting `start` defaults to current time\n * - **Do Later** (future scheduled): Set `start` to a future Date or date string\n * - **Do Someday** (unscheduled backlog): Explicitly set `start: null`\n *\n * @example\n * ```typescript\n * // \"Do Now\" - defaults to current time when start is omitted\n * await this.tools.plot.createActivity({ type: ActivityType.Action, title: \"Urgent task\" });\n *\n * // \"Do Later\" - scheduled for a specific time\n * await this.tools.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Future task\",\n * start: new Date(\"2025-02-01\")\n * });\n *\n * // \"Do Someday\" - unscheduled backlog item\n * await this.tools.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Backlog task\",\n * start: null\n * });\n * ```\n */\n start: Date | string | null;\n /**\n * End time of a scheduled activity. Notes are not typically scheduled unless they're about specific times.\n * For recurring events, this represents the end of the first occurrence.\n * Can be a Date object for timed events or a date string in \"YYYY-MM-DD\" format for all-day events.\n * Null for tasks or activities without defined end times.\n */\n end: Date | string | null;\n /**\n * For recurring activities, the last occurrence date (inclusive).\n * Can be a Date object, date string in \"YYYY-MM-DD\" format, or null if recurring indefinitely.\n * When both recurrenceCount and recurrenceUntil are provided, recurrenceCount takes precedence.\n */\n recurrenceUntil: Date | string | null;\n /**\n * For recurring activities, the number of occurrences to generate.\n * Takes precedence over recurrenceUntil if both are provided.\n * Null for non-recurring activities or indefinite recurrence.\n */\n recurrenceCount: number | null;\n /** The priority context this activity belongs to */\n priority: Priority;\n /** Recurrence rule in RFC 5545 RRULE format (e.g., \"FREQ=WEEKLY;BYDAY=MO,WE,FR\") */\n recurrenceRule: string | null;\n /** Array of dates to exclude from the recurrence pattern */\n recurrenceExdates: Date[] | null;\n /** Array of additional occurrence dates to include in the recurrence pattern */\n recurrenceDates: Date[] | null;\n /**\n * For recurring event exceptions, points to the root recurring activity.\n * Used when an individual occurrence of a recurring event is modified.\n */\n recurrence: Activity | null;\n /**\n * For recurring event exceptions, the original occurrence date being overridden.\n * Used to identify which occurrence of a recurring event this exception replaces.\n */\n occurrence: Date | null;\n /**\n * Unique identifier for this activity in the source system.\n *\n * Used for deduplication - activities with the same source are upserted instead\n * of creating duplicates. Format is typically \"source-name:external-id\"\n * (e.g., \"google-calendar:event-123\", \"outlook:message-456\").\n *\n * When provided, enables idempotent sync operations - calling createActivity()\n * multiple times with the same source will update the existing activity rather\n * than creating duplicates.\n */\n source: string | null;\n /** Metadata about the activity, typically from an external system that created it */\n meta: ActivityMeta | null;\n};\n\nexport type ActivityWithNotes = Activity & {\n notes: Note[];\n};\n\nexport type NewActivityWithNotes = NewActivity & {\n notes: Omit<NewNote, \"activity\">[];\n};\n\n/**\n * Configuration for automatic priority selection based on activity similarity.\n *\n * Maps activity fields to scoring weights or required exact matches:\n * - Number value: Maximum score for similarity matching on this field\n * - `true` value: Required exact match - activities must match exactly or be excluded\n *\n * Scoring rules:\n * - content: Uses vector similarity on activity embedding (cosine similarity)\n * - type: Exact match on ActivityType\n * - mentions: Percentage of existing activity's mentions that appear in new activity\n * - meta.field: Exact match on top-level meta fields (e.g., \"meta.sourceId\")\n *\n * When content is `true`, applies a strong similarity threshold to ensure only close matches.\n * Default (when neither priority nor pickPriority specified): `{content: true}`\n *\n * @example\n * ```typescript\n * // Require exact content match with strong similarity\n * pickPriority: { content: true }\n *\n * // Score based on content (max 100 points) and require exact type match\n * pickPriority: { content: 100, type: true }\n *\n * // Match on meta source and score content\n * pickPriority: { \"meta.source\": true, content: 50 }\n * ```\n */\nexport type PickPriorityConfig = {\n content?: number | true;\n type?: number | true;\n mentions?: number | true;\n [key: `meta.${string}`]: number | true;\n};\n\n/**\n * Type for creating new activities.\n *\n * Requires only the activity type, with all other fields optional.\n * The ID and author will be automatically assigned by the Plot system\n * based on the current execution context.\n *\n * **Important: Scheduling Defaults for Actions**\n *\n * When creating an Activity of type `Action`, the `start` field determines its scheduling state:\n * - **Omit `start`** \u2192 Defaults to current time \u2192 \"Do Now\" (appears in today's actionable list)\n * - **Set `start: null`** \u2192 Unscheduled \u2192 \"Do Someday\" (backlog item, no specific time)\n * - **Set `start` to future Date** \u2192 Scheduled \u2192 \"Do Later\" (appears on that date)\n *\n * For most external task integrations (project management, issue trackers), use `start: null`\n * to create backlog items unless the task is explicitly marked as current/active.\n *\n * Priority can be specified in three ways:\n * 1. Explicit priority: `priority: { id: \"...\" }` - Use specific priority (disables pickPriority)\n * 2. Pick priority config: `pickPriority: { ... }` - Auto-select based on similarity\n * 3. Neither: Defaults to `pickPriority: { content: true }` for automatic matching\n *\n * @example\n * ```typescript\n * // \"Do Now\" - Action defaults to current time (actionable today)\n * const urgentTask: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Review pull request\"\n * // Omitting start defaults to new Date()\n * };\n *\n * // \"Do Someday\" - Backlog item (recommended for most synced tasks)\n * const backlogTask: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Refactor user service\",\n * start: null // Explicitly set to null for backlog\n * };\n *\n * // \"Do Later\" - Scheduled for specific date\n * const futureTask: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Prepare Q1 review\",\n * start: new Date(\"2025-03-15\")\n * };\n *\n * // Note (typically unscheduled)\n * const note: NewActivity = {\n * type: ActivityType.Note,\n * title: \"Meeting notes\",\n * content: \"Discussed Q4 roadmap...\",\n * start: null // Notes typically don't have scheduled times\n * };\n *\n * // Event (always has explicit start/end times)\n * const event: NewActivity = {\n * type: ActivityType.Event,\n * title: \"Team standup\",\n * start: new Date(\"2025-01-15T10:00:00\"),\n * end: new Date(\"2025-01-15T10:30:00\")\n * };\n * ```\n */\nexport type NewActivity = Pick<Activity, \"type\"> &\n Partial<Omit<Activity, \"id\" | \"author\" | \"type\" | \"priority\" | \"mentions\">> &\n (\n | {\n /** Explicit priority (required when specified) - disables automatic priority matching */\n priority: Pick<Priority, \"id\">;\n }\n | {\n /** Configuration for automatic priority selection based on similarity */\n pickPriority?: PickPriorityConfig;\n }\n | {}\n ) & {\n /**\n * Whether the activity should be marked as unread for users.\n * - true (default): Activity is unread for all users in the priority\n * - false: Activity is marked as read for all users in the priority at creation time\n *\n * Use false for historical imports to avoid marking old items as unread.\n */\n unread?: boolean;\n };\n\nexport type ActivityUpdate = Pick<Activity, \"id\"> &\n Partial<\n Pick<\n Activity,\n | \"type\"\n | \"start\"\n | \"end\"\n | \"doneAt\"\n | \"title\"\n | \"assignee\"\n | \"draft\"\n | \"private\"\n | \"source\"\n | \"meta\"\n | \"recurrenceRule\"\n | \"recurrenceDates\"\n | \"recurrenceExdates\"\n | \"recurrenceUntil\"\n | \"recurrenceCount\"\n | \"occurrence\"\n >\n > & {\n /**\n * Full tags object from Activity. Maps tag ID to array of actor IDs who added that tag.\n * Only allowed for activities created by the twist.\n * Use twistTags instead for adding/removing the twist's tags on other activities.\n */\n tags?: { [K in Tag]?: ActorId[] };\n\n /**\n * Add or remove the twist's tags.\n * Maps tag ID to boolean: true = add tag, false = remove tag.\n * This is allowed on all activities the twist has access to.\n */\n twistTags?: Partial<Record<Tag, boolean>>;\n };\n\n/**\n * Represents a note within an activity.\n *\n * Notes contain the detailed content (note text, links) associated with an activity.\n * They are always ordered by creation time within their parent activity.\n */\nexport type Note = Omit<ActivityCommon, \"type\"> & {\n /** The parent activity this note belongs to */\n activity: Activity;\n /** Primary content for the note (markdown) */\n content: string | null;\n /** Array of interactive links attached to the note */\n links: Array<ActivityLink> | null;\n};\n\n/**\n * Type for creating new notes.\n *\n * Requires the activity reference, with all other fields optional.\n */\nexport type NewNote = Partial<Omit<Note, \"id\" | \"author\" | \"activity\">> & {\n /** Reference to the parent activity (required) */\n activity: Pick<Activity, \"id\">;\n\n /**\n * Format of the note content. Determines how the note is processed:\n * - 'text': Plain text that will be converted to markdown (auto-links URLs, preserves line breaks)\n * - 'markdown': Already in markdown format (default, no conversion)\n * - 'html': HTML content that will be converted to markdown\n */\n contentType?: ContentType;\n\n /**\n * Whether the note should mark the parent activity as unread for users.\n * - true (default): Activity becomes unread for users who haven't authored the note\n * - false: Activity is marked as read for all users in the priority at note creation time\n *\n * Use false for historical imports to avoid marking old items as unread.\n */\n unread?: boolean;\n};\n\n/**\n * Type for updating existing notes.\n */\nexport type NoteUpdate = Pick<Note, \"id\"> &\n Partial<\n Pick<Note, \"draft\" | \"private\" | \"content\" | \"links\" | \"mentions\">\n > & {\n /**\n * Format of the note content. Determines how the note is processed:\n * - 'text': Plain text that will be converted to markdown (auto-links URLs, preserves line breaks)\n * - 'markdown': Already in markdown format (default, no conversion)\n * - 'html': HTML content that will be converted to markdown\n */\n contentType?: ContentType;\n\n /**\n * Full tags object from Note. Maps tag ID to array of actor IDs who added that tag.\n * Only allowed for notes created by the twist.\n * Use twistTags instead for adding/removing the twist's tags on other notes.\n */\n tags?: { [K in Tag]?: ActorId[] };\n\n /**\n * Add or remove the twist's tags.\n * Maps tag ID to boolean: true = add tag, false = remove tag.\n * This is allowed on all notes the twist has access to.\n */\n twistTags?: Partial<Record<Tag, boolean>>;\n };\n\n/**\n * Represents an actor in Plot - a user, contact, or twist.\n *\n * Actors can be associated with activities as authors, assignees, or mentions.\n * The email field is only included when ContactAccess.Read permission is granted.\n *\n * @example\n * ```typescript\n * const actor: Actor = {\n * id: \"f0ffd5f8-1635-4b13-9532-35f97446db90\" as ActorId,\n * type: ActorType.Contact,\n * email: \"john.doe@example.com\", // Only if ContactAccess.Read\n * name: \"John Doe\"\n * };\n * ```\n */\nexport type Actor = {\n /** Unique identifier for the actor */\n id: ActorId;\n /** Type of actor (User, Contact, or Twist) */\n type: ActorType;\n /** Email address (only included with ContactAccess.Read permission) */\n email?: string;\n /** Display name (undefined if not included due to permissions, null if not set) */\n name?: string | null;\n};\n\n/**\n * Enumeration of author types that can create activities.\n *\n * The author type affects how activities are displayed and processed\n * within the Plot system.\n */\nexport enum ActorType {\n /** Activities created by human users */\n User,\n /** Activities created by external contacts */\n Contact,\n /** Activities created by automated twists */\n Twist,\n}\n\n/**\n * Represents contact information for creating a new contact.\n *\n * Contacts are used throughout Plot for representing people associated\n * with activities, such as event attendees or task assignees.\n *\n * @example\n * ```typescript\n * const newContact: NewContact = {\n * email: \"john.doe@example.com\",\n * name: \"John Doe\",\n * avatar: \"https://avatar.example.com/john.jpg\"\n * };\n * ```\n */\nexport type NewContact = {\n /** Email address of the contact (required) */\n email: string;\n /** Optional display name for the contact */\n name?: string;\n /** Optional avatar image URL for the contact */\n avatar?: string;\n};\n\nexport type ContentType = \"text\" | \"markdown\" | \"html\";\n";
7
+ declare const _default: "import { type Tag } from \"./tag\";\nimport { type Callback } from \"./tools/callbacks\";\nimport { Uuid } from \"./utils/uuid\";\n\nexport { Tag } from \"./tag\";\nexport { Uuid } from \"./utils/uuid\";\n\n/**\n * Represents a unique user, contact, or twist in Plot.\n *\n * ActorIds are used throughout Plot for:\n * - Activity authors and assignees\n * - Tag creators (actor_id in activity_tag/note_tag)\n * - Mentions in activities and notes\n * - Any entity that can perform actions in Plot\n */\nexport type ActorId = string & { readonly __brand: \"ActorId\" };\n\n/**\n * Represents a priority context within Plot.\n *\n * Priorities are similar to projects in other apps. All Activity is in a Priority.\n * Priorities can be nested.\n */\nexport type Priority = {\n /** Unique identifier for the priority */\n id: string;\n /** Human-readable title for the priority */\n title: string;\n};\n\n/**\n * Type for creating new priorities.\n *\n * Excludes the auto-generated ID field and adds an optional parentId\n * for creating hierarchical priority structures.\n */\nexport type NewPriority = Omit<Priority, \"id\"> & {\n /** Optional ID of the parent priority for creating hierarchies */\n parentId?: string;\n};\n\n/**\n * Enumeration of supported activity types in Plot.\n *\n * Each activity type has different behaviors and rendering characteristics\n * within the Plot application.\n */\nexport enum ActivityType {\n /** A note or piece of information without actionable requirements */\n Note,\n /** An actionable item that can be completed */\n Action,\n /** A scheduled occurrence with start and optional end time */\n Event,\n}\n\n/**\n * Enumeration of supported activity link types.\n *\n * Different link types have different behaviors when clicked by users\n * and may require different rendering approaches.\n */\nexport enum ActivityLinkType {\n /** External web links that open in browser */\n external = \"external\",\n /** Authentication flows for connecting services */\n auth = \"auth\",\n /** Callback links that trigger twist methods when clicked */\n callback = \"callback\",\n /** Video conferencing links with provider-specific handling */\n conferencing = \"conferencing\",\n}\n\n/**\n * Video conferencing providers for conferencing links.\n *\n * Used to identify the conferencing platform and provide\n * provider-specific UI elements (titles, icons, etc.).\n */\nexport enum ConferencingProvider {\n /** Google Meet */\n googleMeet = \"googleMeet\",\n /** Zoom */\n zoom = \"zoom\",\n /** Microsoft Teams */\n microsoftTeams = \"microsoftTeams\",\n /** Cisco Webex */\n webex = \"webex\",\n /** Other or unknown conferencing provider */\n other = \"other\",\n}\n\n/**\n * Represents a clickable link attached to an activity.\n *\n * Activity links are rendered as buttons that enable user interaction with activities.\n * Different link types have specific behaviors and required fields for proper functionality.\n *\n * @example\n * ```typescript\n * // External link - opens URL in browser\n * const externalLink: ActivityLink = {\n * type: ActivityLinkType.external,\n * title: \"Open in Google Calendar\",\n * url: \"https://calendar.google.com/event/123\",\n * };\n *\n * // Conferencing link - opens video conference with provider info\n * const conferencingLink: ActivityLink = {\n * type: ActivityLinkType.conferencing,\n * url: \"https://meet.google.com/abc-defg-hij\",\n * provider: ConferencingProvider.googleMeet,\n * };\n *\n * // Integrations link - initiates OAuth flow\n * const authLink: ActivityLink = {\n * type: ActivityLinkType.auth,\n * title: \"Continue with Google\",\n * provider: AuthProvider.Google,\n * level: AuthLevel.User,\n * scopes: [\"https://www.googleapis.com/auth/calendar.readonly\"],\n * callback: \"callback-token-for-auth-completion\"\n * };\n *\n * // Callback link - triggers a twist method\n * const callbackLink: ActivityLink = {\n * type: ActivityLinkType.callback,\n * title: \"\uD83D\uDCC5 Primary Calendar\",\n * token: \"callback-token-here\"\n * };\n * ```\n */\nexport type ActivityLink =\n | {\n /** External web link that opens in browser */\n type: ActivityLinkType.external;\n /** Display text for the link button */\n title: string;\n /** URL to open when clicked */\n url: string;\n }\n | {\n /** Video conferencing link with provider-specific handling */\n type: ActivityLinkType.conferencing;\n /** URL to join the conference */\n url: string;\n /** Conferencing provider for UI customization */\n provider: ConferencingProvider;\n }\n | {\n /** Authentication link that initiates an OAuth flow */\n type: ActivityLinkType.auth;\n /** Display text for the auth button */\n title: string;\n /** OAuth provider (e.g., \"google\", \"microsoft\") */\n provider: string;\n /** Authorization level (\"user\" or \"priority\") */\n level: string;\n /** Array of OAuth scopes to request */\n scopes: string[];\n /** Callback token for auth completion notification */\n callback: Callback;\n }\n | {\n /** Callback link that triggers a twist method when clicked */\n type: ActivityLinkType.callback;\n /** Display text for the callback button */\n title: string;\n /** Token identifying the callback to execute */\n callback: Callback;\n };\n\n/**\n * Represents metadata about an activity, typically from an external system.\n *\n * Activity metadata enables storing additional information about activities,\n * which is useful for synchronization, linking back to external systems,\n * and storing tool-specific data.\n *\n * @example\n * ```typescript\n * // Calendar event metadata\n * await plot.createActivity({\n * type: ActivityType.Event,\n * title: \"Team Meeting\",\n * start: new Date(\"2024-01-15T10:00:00Z\"),\n * meta: {\n * calendarId: \"primary\",\n * htmlLink: \"https://calendar.google.com/event/abc123\",\n * conferenceData: { ... }\n * }\n * });\n *\n * // Project issue metadata\n * await plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Fix login bug\",\n * meta: {\n * projectId: \"TEAM\",\n * issueNumber: 123,\n * url: \"https://linear.app/team/issue/TEAM-123\"\n * }\n * });\n * ```\n */\nexport type ActivityMeta = {\n /** Source-specific properties and metadata */\n [key: string]: any;\n};\n\n/**\n * Tags on an item, along with the actors who added each tag.\n */\nexport type Tags = { [K in Tag]?: ActorId[] };\n\n/**\n * A set of tags to add to an item, along with the actors adding each tag.\n */\nexport type NewTags = { [K in Tag]?: NewActor[] };\n\n/**\n * Common fields shared by both Activity and Note entities.\n */\nexport type ActivityCommon = {\n /** Unique identifier for the activity */\n id: Uuid;\n /**\n * When this activity was originally created in its source system.\n *\n * For activities created in Plot, this is when the user created it.\n * For activities synced from external systems (GitHub issues, emails, calendar events),\n * this is the original creation time in that system.\n *\n * Defaults to the current time when creating new activities.\n */\n createdAt: Date;\n /** Information about who created the activity */\n author: Actor;\n /** Whether this activity is in draft state (not shown in do now view) */\n draft: boolean;\n /** Whether this activity is private (only visible to author) */\n private: boolean;\n /** Whether this activity has been archived */\n archived: boolean;\n /** Tags attached to this activity. Maps tag ID to array of actor IDs who added that tag. */\n tags: Tags;\n /** Array of actor IDs (users, contacts, or twists) mentioned in this activity via @-mentions */\n mentions: ActorId[];\n};\n\nexport type Activity = ActivityCommon & {\n /** The display title/summary of the activity */\n title: string;\n /** The type of activity (Note, Task, or Event) */\n type: ActivityType;\n /**\n * The actor assigned to this activity.\n *\n * **For actions (tasks):** An assignee is required. If not explicitly provided when creating\n * an action, the assignee will default to the user who installed the twist (the twist owner).\n *\n * **For notes and events:** Assignee is optional and typically null.\n *\n * @example\n * ```typescript\n * // Create action with explicit assignee\n * const task: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Review PR #123\",\n * assignee: {\n * id: userId as ActorId,\n * type: ActorType.User,\n * name: \"Alice\"\n * }\n * };\n *\n * // Create action with auto-assignment (defaults to twist owner)\n * const task: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Follow up on email\"\n * // assignee will be set automatically to twist owner\n * };\n *\n * // Update assignee\n * await plot.updateActivity({\n * id: activityId,\n * assignee: {\n * id: newUserId as ActorId,\n * type: ActorType.User,\n * name: \"Bob\"\n * }\n * });\n * ```\n */\n assignee: Actor | null;\n /** Timestamp when the activity was marked as complete. Null if not completed. */\n doneAt: Date | null;\n /**\n * Start time of a scheduled activity. Notes are not typically scheduled unless they're about specific times.\n * For recurring events, this represents the start of the first occurrence.\n * Can be a Date object for timed events or a date string in \"YYYY-MM-DD\" format for all-day events.\n *\n * **Activity Scheduling States** (for Actions):\n * - **Do Now** (current/actionable): When creating a NewActivity of type Action, omitting `start` defaults to current time\n * - **Do Later** (future scheduled): Set `start` to a future Date or date string\n * - **Do Someday** (unscheduled backlog): Explicitly set `start: null`\n *\n * @example\n * ```typescript\n * // \"Do Now\" - defaults to current time when start is omitted\n * await this.tools.plot.createActivity({ type: ActivityType.Action, title: \"Urgent task\" });\n *\n * // \"Do Later\" - scheduled for a specific time\n * await this.tools.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Future task\",\n * start: new Date(\"2025-02-01\")\n * });\n *\n * // \"Do Someday\" - unscheduled backlog item\n * await this.tools.plot.createActivity({\n * type: ActivityType.Action,\n * title: \"Backlog task\",\n * start: null\n * });\n * ```\n */\n start: Date | string | null;\n /**\n * End time of a scheduled activity. Notes are not typically scheduled unless they're about specific times.\n * For recurring events, this represents the end of the first occurrence.\n * Can be a Date object for timed events or a date string in \"YYYY-MM-DD\" format for all-day events.\n * Null for tasks or activities without defined end times.\n */\n end: Date | string | null;\n /**\n * For recurring activities, the last occurrence date (inclusive).\n * Can be a Date object, date string in \"YYYY-MM-DD\" format, or null if recurring indefinitely.\n * When both recurrenceCount and recurrenceUntil are provided, recurrenceCount takes precedence.\n */\n recurrenceUntil: Date | string | null;\n /**\n * For recurring activities, the number of occurrences to generate.\n * Takes precedence over recurrenceUntil if both are provided.\n * Null for non-recurring activities or indefinite recurrence.\n */\n recurrenceCount: number | null;\n /** The priority context this activity belongs to */\n priority: Priority;\n /** Recurrence rule in RFC 5545 RRULE format (e.g., \"FREQ=WEEKLY;BYDAY=MO,WE,FR\") */\n recurrenceRule: string | null;\n /** Array of dates to exclude from the recurrence pattern */\n recurrenceExdates: Date[] | null;\n /** Array of additional occurrence dates to include in the recurrence pattern */\n recurrenceDates: Date[] | null;\n /**\n * For recurring event exceptions, points to the root recurring activity.\n * Used when an individual occurrence of a recurring event is modified.\n */\n recurrence: Activity | null;\n /**\n * For recurring event exceptions, the original occurrence date being overridden.\n * Used to identify which occurrence of a recurring event this exception replaces.\n */\n occurrence: Date | null;\n /** Metadata about the activity, typically from an external system that created it */\n meta: ActivityMeta | null;\n};\n\nexport type ActivityWithNotes = Activity & {\n notes: Note[];\n};\n\nexport type NewActivityWithNotes = NewActivity & {\n notes: Omit<NewNote, \"activity\">[];\n};\n\n/**\n * Configuration for automatic priority selection based on activity similarity.\n *\n * Maps activity fields to scoring weights or required exact matches:\n * - Number value: Maximum score for similarity matching on this field\n * - `true` value: Required exact match - activities must match exactly or be excluded\n *\n * Scoring rules:\n * - content: Uses vector similarity on activity embedding (cosine similarity)\n * - type: Exact match on ActivityType\n * - mentions: Percentage of existing activity's mentions that appear in new activity\n * - meta.field: Exact match on top-level meta fields (e.g., \"meta.sourceId\")\n *\n * When content is `true`, applies a strong similarity threshold to ensure only close matches.\n * Default (when neither priority nor pickPriority specified): `{content: true}`\n *\n * @example\n * ```typescript\n * // Require exact content match with strong similarity\n * pickPriority: { content: true }\n *\n * // Score based on content (max 100 points) and require exact type match\n * pickPriority: { content: 100, type: true }\n *\n * // Match on meta source and score content\n * pickPriority: { \"meta.source\": true, content: 50 }\n * ```\n */\nexport type PickPriorityConfig = {\n content?: number | true;\n type?: number | true;\n mentions?: number | true;\n [key: `meta.${string}`]: number | true;\n};\n\n/**\n * Type for creating new activities.\n *\n * Requires only the activity type, with all other fields optional.\n * The author will be automatically assigned by the Plot system based on\n * the current execution context. The ID can be optionally provided by\n * tools for tracking and update detection purposes.\n *\n * **Important: Scheduling Defaults for Actions**\n *\n * When creating an Activity of type `Action`, the `start` field determines its scheduling state:\n * - **Omit `start`** \u2192 Defaults to current time \u2192 \"Do Now\" (appears in today's actionable list)\n * - **Set `start: null`** \u2192 Unscheduled \u2192 \"Do Someday\" (backlog item, no specific time)\n * - **Set `start` to future Date** \u2192 Scheduled \u2192 \"Do Later\" (appears on that date)\n *\n * For most external task integrations (project management, issue trackers), use `start: null`\n * to create backlog items unless the task is explicitly marked as current/active.\n *\n * Priority can be specified in three ways:\n * 1. Explicit priority: `priority: { id: \"...\" }` - Use specific priority (disables pickPriority)\n * 2. Pick priority config: `pickPriority: { ... }` - Auto-select based on similarity\n * 3. Neither: Defaults to `pickPriority: { content: true }` for automatic matching\n *\n * @example\n * ```typescript\n * // \"Do Now\" - Action defaults to current time (actionable today)\n * const urgentTask: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Review pull request\"\n * // Omitting start defaults to new Date()\n * };\n *\n * // \"Do Someday\" - Backlog item (recommended for most synced tasks)\n * const backlogTask: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Refactor user service\",\n * start: null // Explicitly set to null for backlog\n * };\n *\n * // \"Do Later\" - Scheduled for specific date\n * const futureTask: NewActivity = {\n * type: ActivityType.Action,\n * title: \"Prepare Q1 review\",\n * start: new Date(\"2025-03-15\")\n * };\n *\n * // Note (typically unscheduled)\n * const note: NewActivity = {\n * type: ActivityType.Note,\n * title: \"Meeting notes\",\n * content: \"Discussed Q4 roadmap...\",\n * start: null // Notes typically don't have scheduled times\n * };\n *\n * // Event (always has explicit start/end times)\n * const event: NewActivity = {\n * type: ActivityType.Event,\n * title: \"Team standup\",\n * start: new Date(\"2025-01-15T10:00:00\"),\n * end: new Date(\"2025-01-15T10:30:00\")\n * };\n * ```\n */\nexport type NewActivity = Pick<Activity, \"type\"> &\n Partial<\n Omit<\n Activity,\n \"author\" | \"assignee\" | \"type\" | \"priority\" | \"tags\" | \"mentions\"\n >\n > &\n (\n | {\n /** Explicit priority (required when specified) - disables automatic priority matching */\n priority: Pick<Priority, \"id\">;\n }\n | {\n /** Configuration for automatic priority selection based on similarity */\n pickPriority?: PickPriorityConfig;\n }\n | {}\n ) & {\n /**\n * The person that created the item. By default, it will be the twist itself.\n */\n author?: NewActor;\n\n /**\n * The person that assigned to the item.\n */\n assignee?: NewActor | null;\n\n /**\n * All tags to set on the new activity.\n */\n tags?: NewTags;\n\n /**\n * Whether the activity should be marked as unread for users.\n * - true (default): Activity is unread for all users in the priority\n * - false: Activity is marked as read for all users in the priority at creation time\n *\n * Use false for historical imports to avoid marking old items as unread.\n */\n unread?: boolean;\n };\n\nexport type ActivityUpdate = Pick<Activity, \"id\"> &\n Partial<\n Pick<\n Activity,\n | \"type\"\n | \"start\"\n | \"end\"\n | \"doneAt\"\n | \"title\"\n | \"assignee\"\n | \"draft\"\n | \"private\"\n | \"meta\"\n | \"recurrenceRule\"\n | \"recurrenceDates\"\n | \"recurrenceExdates\"\n | \"recurrenceUntil\"\n | \"recurrenceCount\"\n | \"occurrence\"\n >\n > & {\n /**\n * Tags to change on the activity. Use an empty array of NewActor to remove a tag.\n * Use twistTags to add/remove the twist from tags to avoid clearing other actors' tags.\n */\n tags?: NewTags;\n\n /**\n * Add or remove the twist's tags.\n * Maps tag ID to boolean: true = add tag, false = remove tag.\n * This is allowed on all activities the twist has access to.\n */\n twistTags?: Partial<Record<Tag, boolean>>;\n };\n\n/**\n * Represents a sync update from a tool.\n *\n * Tools that sync from external sources can send either:\n * - A new activity with notes (for newly discovered items)\n * - An update to an existing activity with optional new notes (for changed items)\n *\n * This allows tools to manage their own update detection logic locally,\n * providing Plot with the appropriate operation to perform.\n *\n * @example\n * ```typescript\n * // Send a new activity\n * const newItem: SyncUpdate = {\n * type: ActivityType.Event,\n * title: \"New Meeting\",\n * id: Uuid.Generate(), // Tool-generated ID\n * notes: [{ id: Uuid.Generate(), content: \"Description\" }]\n * };\n *\n * // Send an update to existing activity\n * const update: SyncUpdate = {\n * activityId: existingActivityId,\n * update: { title: \"Updated Meeting Title\" },\n * notes: [{ id: Uuid.Generate(), content: \"New comment\" }]\n * };\n * ```\n */\nexport type SyncUpdate =\n | NewActivityWithNotes\n | {\n /** ID of the activity to update */\n activityId: string;\n /** Optional updates to the activity itself */\n update?: ActivityUpdate;\n /** Optional new notes to add to the activity */\n notes?: NewNote[];\n };\n\n/**\n * Represents a note within an activity.\n *\n * Notes contain the detailed content (note text, links) associated with an activity.\n * They are always ordered by creation time within their parent activity.\n */\nexport type Note = ActivityCommon & {\n /** The parent activity this note belongs to */\n activity: Activity;\n /** Primary content for the note (markdown) */\n content: string | null;\n /** Array of interactive links attached to the note */\n links: Array<ActivityLink> | null;\n};\n\n/**\n * Type for creating new notes.\n *\n * Requires the activity reference, with all other fields optional.\n * The id field can be optionally provided by tools for tracking purposes.\n */\nexport type NewNote = Partial<\n Omit<Note, \"author\" | \"activity\" | \"tags\" | \"mentions\">\n> & {\n /** Reference to the parent activity (required) */\n activity: Pick<Activity, \"id\">;\n\n /**\n * The person that created the item, or leave undefined to use the twist as author.\n */\n author?: NewActor;\n\n /**\n * Format of the note content. Determines how the note is processed:\n * - 'text': Plain text that will be converted to markdown (auto-links URLs, preserves line breaks)\n * - 'markdown': Already in markdown format (default, no conversion)\n * - 'html': HTML content that will be converted to markdown\n */\n contentType?: ContentType;\n\n /**\n * Tags to change on the activity. Use an empty array of NewActor to remove a tag.\n * Use twistTags to add/remove the twist from tags to avoid clearing other actors' tags.\n */\n tags?: NewTags;\n\n /**\n * Change the mentions on the note.\n */\n mentions?: NewActor[];\n\n /**\n * Whether the note should mark the parent activity as unread for users.\n * - true (default): Activity becomes unread for users who haven't authored the note\n * - false: Activity is marked as read for all users in the priority at note creation time\n *\n * Use false for historical imports to avoid marking old items as unread.\n */\n unread?: boolean;\n};\n\n/**\n * Type for updating existing notes.\n */\nexport type NoteUpdate = Pick<Note, \"id\"> &\n Partial<Pick<Note, \"draft\" | \"private\" | \"content\" | \"links\">> & {\n /**\n * Format of the note content. Determines how the note is processed:\n * - 'text': Plain text that will be converted to markdown (auto-links URLs, preserves line breaks)\n * - 'markdown': Already in markdown format (default, no conversion)\n * - 'html': HTML content that will be converted to markdown\n */\n contentType?: ContentType;\n\n /**\n * Tags to change on the note. Use an empty array of NewActor to remove a tag.\n * Use twistTags to add/remove the twist from tags to avoid clearing other actors' tags.\n */\n tags?: NewTags;\n\n /**\n * Add or remove the twist's tags.\n * Maps tag ID to boolean: true = add tag, false = remove tag.\n * This is allowed on all notes the twist has access to.\n */\n twistTags?: Partial<Record<Tag, boolean>>;\n\n /**\n * Change the mentions on the note.\n */\n mentions?: NewActor[];\n };\n\n/**\n * Represents an actor in Plot - a user, contact, or twist.\n *\n * Actors can be associated with activities as authors, assignees, or mentions.\n * The email field is only included when ContactAccess.Read permission is granted.\n *\n * @example\n * ```typescript\n * const actor: Actor = {\n * id: \"f0ffd5f8-1635-4b13-9532-35f97446db90\" as ActorId,\n * type: ActorType.Contact,\n * email: \"john.doe@example.com\", // Only if ContactAccess.Read\n * name: \"John Doe\"\n * };\n * ```\n */\nexport type Actor = {\n /** Unique identifier for the actor */\n id: ActorId;\n /** Type of actor (User, Contact, or Twist) */\n type: ActorType;\n /** Email address (only included with ContactAccess.Read permission) */\n email?: string;\n /** Display name (undefined if not included due to permissions, null if not set) */\n name?: string | null;\n};\n\n/**\n * An existing or new contact.\n */\nexport type NewActor =\n | {\n /** Unique identifier for the actor */\n id: ActorId;\n }\n | NewContact;\n\n/**\n * Enumeration of author types that can create activities.\n *\n * The author type affects how activities are displayed and processed\n * within the Plot system.\n */\nexport enum ActorType {\n /** Activities created by human users */\n User,\n /** Activities created by external contacts */\n Contact,\n /** Activities created by automated twists */\n Twist,\n}\n\n/**\n * Represents contact information for creating a new contact.\n *\n * Contacts are used throughout Plot for representing people associated\n * with activities, such as event attendees or task assignees.\n *\n * @example\n * ```typescript\n * const newContact: NewContact = {\n * email: \"john.doe@example.com\",\n * name: \"John Doe\",\n * avatar: \"https://avatar.example.com/john.jpg\"\n * };\n * ```\n */\nexport type NewContact = {\n /** Email address of the contact (required) */\n email: string;\n /** Optional display name for the contact */\n name?: string;\n /** Optional avatar image URL for the contact */\n avatar?: string;\n};\n\nexport type ContentType = \"text\" | \"markdown\" | \"html\";\n";
8
8
  export default _default;
9
9
  //# sourceMappingURL=plot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/llm-docs/plot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,ukyBAA+hyB;AAA9iyB,wBAA+iyB"}
1
+ {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/llm-docs/plot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;wBAEY,+vxBAAutxB;AAAtuxB,wBAAuuxB"}