@plotday/twister 0.22.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 (186) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +35 -6
  3. package/bin/commands/deploy.js +246 -6
  4. package/bin/commands/deploy.js.map +1 -1
  5. package/bin/commands/generate.js +11 -2
  6. package/bin/commands/generate.js.map +1 -1
  7. package/bin/commands/login.js +19 -3
  8. package/bin/commands/login.js.map +1 -1
  9. package/bin/commands/priority-create.js +7 -2
  10. package/bin/commands/priority-create.js.map +1 -1
  11. package/bin/commands/priority-list.js +6 -1
  12. package/bin/commands/priority-list.js.map +1 -1
  13. package/bin/commands/twist-logs.js +12 -3
  14. package/bin/commands/twist-logs.js.map +1 -1
  15. package/bin/templates/AGENTS.template.md +133 -20
  16. package/bin/utils/bundle.js +40 -0
  17. package/bin/utils/bundle.js.map +1 -1
  18. package/bin/utils/network-error.js +149 -0
  19. package/bin/utils/network-error.js.map +1 -0
  20. package/bin/utils/sse.js +19 -1
  21. package/bin/utils/sse.js.map +1 -1
  22. package/cli/templates/AGENTS.template.md +133 -20
  23. package/dist/common/calendar.d.ts +28 -5
  24. package/dist/common/calendar.d.ts.map +1 -1
  25. package/dist/common/messaging.d.ts +12 -6
  26. package/dist/common/messaging.d.ts.map +1 -1
  27. package/dist/common/projects.d.ts +121 -0
  28. package/dist/common/projects.d.ts.map +1 -0
  29. package/dist/common/projects.js +2 -0
  30. package/dist/common/projects.js.map +1 -0
  31. package/dist/docs/assets/hierarchy.js +1 -1
  32. package/dist/docs/assets/highlight.css +4 -4
  33. package/dist/docs/assets/navigation.js +1 -1
  34. package/dist/docs/assets/search.js +1 -1
  35. package/dist/docs/classes/tool.Tool.html +5 -5
  36. package/dist/docs/classes/tools_ai.AI.html +3 -3
  37. package/dist/docs/classes/tools_callbacks.Callbacks.html +4 -4
  38. package/dist/docs/classes/tools_integrations.Integrations.html +1 -1
  39. package/dist/docs/classes/tools_network.Network.html +4 -4
  40. package/dist/docs/classes/tools_plot.Plot.html +28 -14
  41. package/dist/docs/classes/tools_store.Store.html +1 -1
  42. package/dist/docs/classes/tools_tasks.Tasks.html +2 -2
  43. package/dist/docs/classes/tools_twists.Twists.html +4 -4
  44. package/dist/docs/classes/twist.Twist.html +1 -1
  45. package/dist/docs/documents/Building_Custom_Tools.html +6 -6
  46. package/dist/docs/documents/Built-in_Tools.html +24 -17
  47. package/dist/docs/documents/Core_Concepts.html +42 -9
  48. package/dist/docs/documents/Getting_Started.html +10 -3
  49. package/dist/docs/documents/Runtime_Environment.html +7 -7
  50. package/dist/docs/enums/plot.ActivityLinkType.html +5 -5
  51. package/dist/docs/enums/plot.ActivityType.html +4 -4
  52. package/dist/docs/enums/plot.ActorType.html +4 -4
  53. package/dist/docs/enums/plot.ConferencingProvider.html +6 -6
  54. package/dist/docs/enums/tag.Tag.html +3 -4
  55. package/dist/docs/enums/tools_plot.ActivityAccess.html +3 -3
  56. package/dist/docs/enums/tools_plot.ContactAccess.html +3 -3
  57. package/dist/docs/enums/tools_plot.PriorityAccess.html +3 -3
  58. package/dist/docs/functions/index.Uuid.Generate.html +1 -0
  59. package/dist/docs/hierarchy.html +1 -1
  60. package/dist/docs/interfaces/common_calendar.CalendarTool.html +17 -9
  61. package/dist/docs/interfaces/tools_ai.AIResponse.html +2 -2
  62. package/dist/docs/interfaces/tools_twists.TwistSource.html +1 -1
  63. package/dist/docs/modules/index.Uuid.html +1 -0
  64. package/dist/docs/modules/index.html +1 -1
  65. package/dist/docs/modules/plot.html +1 -1
  66. package/dist/docs/types/index.Uuid.html +1 -0
  67. package/dist/docs/types/plot.Activity.html +21 -7
  68. package/dist/docs/types/plot.ActivityCommon.html +17 -15
  69. package/dist/docs/types/plot.ActivityLink.html +1 -1
  70. package/dist/docs/types/plot.ActivityMeta.html +7 -9
  71. package/dist/docs/types/plot.ActivityUpdate.html +3 -4
  72. package/dist/docs/types/plot.ActivityWithNotes.html +1 -1
  73. package/dist/docs/types/plot.Actor.html +5 -5
  74. package/dist/docs/types/plot.ActorId.html +8 -3
  75. package/dist/docs/types/plot.ContentType.html +1 -0
  76. package/dist/docs/types/plot.NewActivity.html +24 -5
  77. package/dist/docs/types/plot.NewActivityWithNotes.html +1 -1
  78. package/dist/docs/types/plot.NewActor.html +3 -0
  79. package/dist/docs/types/plot.NewContact.html +4 -4
  80. package/dist/docs/types/plot.NewNote.html +15 -4
  81. package/dist/docs/types/plot.NewPriority.html +1 -1
  82. package/dist/docs/types/plot.NewTags.html +2 -0
  83. package/dist/docs/types/plot.Note.html +3 -3
  84. package/dist/docs/types/plot.NoteUpdate.html +6 -6
  85. package/dist/docs/types/plot.PickPriorityConfig.html +3 -3
  86. package/dist/docs/types/plot.Priority.html +3 -3
  87. package/dist/docs/types/plot.SyncUpdate.html +15 -0
  88. package/dist/docs/types/plot.Tags.html +2 -0
  89. package/dist/docs/types/tools_ai.DataContent.html +1 -1
  90. package/dist/docs/types/tools_network.WebhookRequest.html +5 -3
  91. package/dist/docs/types/tools_plot.NoteIntentHandler.html +4 -4
  92. package/dist/llm-docs/common/calendar.d.ts +2 -2
  93. package/dist/llm-docs/common/calendar.d.ts.map +1 -1
  94. package/dist/llm-docs/common/calendar.js +2 -2
  95. package/dist/llm-docs/common/calendar.js.map +1 -1
  96. package/dist/llm-docs/common/messaging.d.ts +2 -2
  97. package/dist/llm-docs/common/messaging.d.ts.map +1 -1
  98. package/dist/llm-docs/common/messaging.js +2 -2
  99. package/dist/llm-docs/common/messaging.js.map +1 -1
  100. package/dist/llm-docs/common/projects.d.ts +9 -0
  101. package/dist/llm-docs/common/projects.d.ts.map +1 -0
  102. package/dist/llm-docs/common/projects.js +8 -0
  103. package/dist/llm-docs/common/projects.js.map +1 -0
  104. package/dist/llm-docs/index.d.ts +1 -1
  105. package/dist/llm-docs/index.js +17 -17
  106. package/dist/llm-docs/index.js.map +1 -1
  107. package/dist/llm-docs/plot.d.ts +2 -2
  108. package/dist/llm-docs/plot.d.ts.map +1 -1
  109. package/dist/llm-docs/plot.js +2 -2
  110. package/dist/llm-docs/plot.js.map +1 -1
  111. package/dist/llm-docs/tag.d.ts +2 -2
  112. package/dist/llm-docs/tag.d.ts.map +1 -1
  113. package/dist/llm-docs/tag.js +2 -2
  114. package/dist/llm-docs/tag.js.map +1 -1
  115. package/dist/llm-docs/tool.d.ts +2 -2
  116. package/dist/llm-docs/tool.d.ts.map +1 -1
  117. package/dist/llm-docs/tool.js +2 -2
  118. package/dist/llm-docs/tool.js.map +1 -1
  119. package/dist/llm-docs/tools/ai.d.ts +2 -2
  120. package/dist/llm-docs/tools/ai.d.ts.map +1 -1
  121. package/dist/llm-docs/tools/ai.js +2 -2
  122. package/dist/llm-docs/tools/ai.js.map +1 -1
  123. package/dist/llm-docs/tools/callbacks.d.ts +2 -2
  124. package/dist/llm-docs/tools/callbacks.d.ts.map +1 -1
  125. package/dist/llm-docs/tools/callbacks.js +2 -2
  126. package/dist/llm-docs/tools/callbacks.js.map +1 -1
  127. package/dist/llm-docs/tools/integrations.d.ts +1 -1
  128. package/dist/llm-docs/tools/integrations.js +1 -1
  129. package/dist/llm-docs/tools/network.d.ts +2 -2
  130. package/dist/llm-docs/tools/network.d.ts.map +1 -1
  131. package/dist/llm-docs/tools/network.js +2 -2
  132. package/dist/llm-docs/tools/network.js.map +1 -1
  133. package/dist/llm-docs/tools/plot.d.ts +2 -2
  134. package/dist/llm-docs/tools/plot.d.ts.map +1 -1
  135. package/dist/llm-docs/tools/plot.js +2 -2
  136. package/dist/llm-docs/tools/plot.js.map +1 -1
  137. package/dist/llm-docs/tools/store.d.ts +1 -1
  138. package/dist/llm-docs/tools/store.js +1 -1
  139. package/dist/llm-docs/tools/tasks.d.ts +1 -1
  140. package/dist/llm-docs/tools/tasks.js +1 -1
  141. package/dist/llm-docs/tools/twists.d.ts +2 -2
  142. package/dist/llm-docs/tools/twists.d.ts.map +1 -1
  143. package/dist/llm-docs/tools/twists.js +2 -2
  144. package/dist/llm-docs/tools/twists.js.map +1 -1
  145. package/dist/llm-docs/twist-guide-template.d.ts +1 -1
  146. package/dist/llm-docs/twist-guide-template.d.ts.map +1 -1
  147. package/dist/llm-docs/twist-guide-template.js +1 -1
  148. package/dist/llm-docs/twist-guide-template.js.map +1 -1
  149. package/dist/llm-docs/twist.d.ts +1 -1
  150. package/dist/llm-docs/twist.js +1 -1
  151. package/dist/plot.d.ts +271 -87
  152. package/dist/plot.d.ts.map +1 -1
  153. package/dist/plot.js +1 -0
  154. package/dist/plot.js.map +1 -1
  155. package/dist/tag.d.ts +2 -3
  156. package/dist/tag.d.ts.map +1 -1
  157. package/dist/tag.js +2 -3
  158. package/dist/tag.js.map +1 -1
  159. package/dist/tool.d.ts +2 -2
  160. package/dist/tool.d.ts.map +1 -1
  161. package/dist/tool.js +1 -1
  162. package/dist/tool.js.map +1 -1
  163. package/dist/tools/ai.d.ts +2 -2
  164. package/dist/tools/ai.d.ts.map +1 -1
  165. package/dist/tools/callbacks.d.ts +1 -1
  166. package/dist/tools/callbacks.d.ts.map +1 -1
  167. package/dist/tools/network.d.ts +2 -0
  168. package/dist/tools/network.d.ts.map +1 -1
  169. package/dist/tools/network.js.map +1 -1
  170. package/dist/tools/plot.d.ts +36 -4
  171. package/dist/tools/plot.d.ts.map +1 -1
  172. package/dist/tools/plot.js.map +1 -1
  173. package/dist/tools/twists.d.ts +2 -2
  174. package/dist/twist-guide.d.ts +1 -1
  175. package/dist/twist-guide.d.ts.map +1 -1
  176. package/dist/utils/uuid.d.ts +7 -0
  177. package/dist/utils/uuid.d.ts.map +1 -0
  178. package/dist/utils/uuid.js +9 -0
  179. package/dist/utils/uuid.js.map +1 -0
  180. package/package.json +60 -3
  181. package/tsconfig.base.json +1 -0
  182. package/dist/docs/types/plot.NoteType.html +0 -1
  183. package/dist/llm-docs/creator-docs.d.ts +0 -9
  184. package/dist/llm-docs/creator-docs.d.ts.map +0 -1
  185. package/dist/llm-docs/creator-docs.js +0 -8
  186. package/dist/llm-docs/creator-docs.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.priorityListCommand = priorityListCommand;
4
+ const network_error_1 = require("../utils/network-error");
4
5
  const token_1 = require("../utils/token");
5
6
  async function priorityListCommand(options) {
6
7
  // Get authentication token
@@ -40,7 +41,11 @@ async function priorityListCommand(options) {
40
41
  console.log(`\nTotal: ${priorities.length} ${priorities.length === 1 ? "priority" : "priorities"}`);
41
42
  }
42
43
  catch (error) {
43
- console.error("\n✗ Failed to fetch priorities:", error);
44
+ const errorInfo = (0, network_error_1.handleNetworkError)(error);
45
+ console.error("\n✗ Failed to fetch priorities:", errorInfo.message);
46
+ if (errorInfo.details) {
47
+ console.error(errorInfo.details);
48
+ }
44
49
  process.exit(1);
45
50
  }
46
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"priority-list.js","sourceRoot":"","sources":["../../cli/commands/priority-list.ts"],"names":[],"mappings":";;AAMA,kDAwDC;AA9DD,0CAA0C;AAMnC,KAAK,UAAU,mBAAmB,CAAC,OAA4B;IACpE,2BAA2B;IAC3B,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAQ,GAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CACX,mEAAmE,CACpE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,gBAAgB,EAAE;YACjE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CACX,mCAAmC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CAClF,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAU,CAAC;QAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7B,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAEnC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,CAAC,GAAG,CACT,YAAY,UAAU,CAAC,MAAM,IAC3B,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YACzC,EAAE,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"priority-list.js","sourceRoot":"","sources":["../../cli/commands/priority-list.ts"],"names":[],"mappings":";;AAOA,kDA4DC;AAnED,0DAA4D;AAC5D,0CAA0C;AAMnC,KAAK,UAAU,mBAAmB,CAAC,OAA4B;IACpE,2BAA2B;IAC3B,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAQ,GAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CACX,mEAAmE,CACpE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,gBAAgB,EAAE;YACjE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CACX,mCAAmC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CAClF,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAU,CAAC;QAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7B,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAEnC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,CAAC,GAAG,CACT,YAAY,UAAU,CAAC,MAAM,IAC3B,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YACzC,EAAE,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,IAAA,kCAAkB,EAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACpE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -36,9 +36,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.twistLogsCommand = twistLogsCommand;
37
37
  const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
+ const network_error_1 = require("../utils/network-error");
39
40
  const out = __importStar(require("../utils/output"));
40
- const token_1 = require("../utils/token");
41
41
  const sse_1 = require("../utils/sse");
42
+ const token_1 = require("../utils/token");
42
43
  /**
43
44
  * Stream twist logs in real-time
44
45
  */
@@ -106,8 +107,12 @@ async function twistLogsCommand(options) {
106
107
  },
107
108
  });
108
109
  if (!response.ok) {
110
+ if (response.status === 401) {
111
+ out.error("Authentication failed", "Your login token is invalid or has expired. Please run 'plot login' to authenticate.");
112
+ process.exit(1);
113
+ }
109
114
  const errorText = await response.text();
110
- out.error(`Failed to connect: ${response.status} ${response.statusText}`, errorText);
115
+ out.error("Failed to connect", errorText);
111
116
  process.exit(1);
112
117
  }
113
118
  // Handle SSE stream with custom log formatting
@@ -180,7 +185,11 @@ async function twistLogsCommand(options) {
180
185
  });
181
186
  }
182
187
  catch (error) {
183
- out.error("Connection failed", String(error));
188
+ const errorInfo = (0, network_error_1.handleNetworkError)(error);
189
+ out.error("Connection failed", errorInfo.message);
190
+ if (errorInfo.details) {
191
+ console.error(out.colors.dim(errorInfo.details));
192
+ }
184
193
  process.exit(1);
185
194
  }
186
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"twist-logs.js","sourceRoot":"","sources":["../../cli/commands/twist-logs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,4CA8KC;AArMD,uCAAyB;AACzB,2CAA6B;AAE7B,qDAAuC;AACvC,0CAAoD;AACpD,sCAA+C;AAe/C;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,OAAyB;IAC9D,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAE1E,mEAAmE;IACnE,IAAI,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,gCAAgC;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;gBACrE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAChE,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CACP,mBAAmB,EACnB,mFAAmF,CACpF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAEtC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,0DAA0D;QAC1D,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,qCAAqC;QACrC,MAAM,eAAe,GAAG,IAAA,0BAAkB,GAAE,CAAC;QAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,8CAA8C,eAAe,EAAE,CAChE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CACP,yBAAyB,EACzB,mFAAmF,CACpF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,OAAO,OAAO,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,4BAA4B,OAAO,EAAE,EAAE;QAC9C,gBAAgB,WAAW,EAAE;QAC7B,sBAAsB;KACvB,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,mBAAmB;gBAC3B,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CACP,sBAAsB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,EAC9D,SAAS,CACV,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,+CAA+C;QAC/C,MAAM,IAAA,qBAAe,EAAC,QAAQ,EAAE;YAC9B,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gBACtB,6BAA6B;gBAC7B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBACpB,mBAAmB;oBACnB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;oBAC9C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;wBAC3D,MAAM,EAAE,IAAI;wBACZ,IAAI,EAAE,SAAS;wBACf,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;oBAEH,yBAAyB;oBACzB,IAAI,aAAa,GAAG,EAAE,CAAC;oBACvB,IAAI,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAErD,QAAQ,QAAQ,EAAE,CAAC;wBACjB,KAAK,OAAO;4BACV,aAAa,GAAG,UAAU,CAAC,CAAC,MAAM;4BAClC,MAAM;wBACR,KAAK,MAAM;4BACT,aAAa,GAAG,UAAU,CAAC,CAAC,SAAS;4BACrC,MAAM;wBACR,KAAK,MAAM;4BACT,aAAa,GAAG,UAAU,CAAC,CAAC,OAAO;4BACnC,MAAM;wBACR;4BACE,aAAa,GAAG,UAAU,CAAC,CAAC,QAAQ;oBACxC,CAAC;oBAED,MAAM,KAAK,GAAG,SAAS,CAAC;oBACxB,MAAM,IAAI,GAAG,UAAU,CAAC;oBAExB,qDAAqD;oBACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAEjC,2CAA2C;oBAC3C,OAAO,CAAC,GAAG,CACT,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,aAAa,GAAG,aAAa,GAAG,KAAK,IAAI,SAAS,EAAE,CACjF,CAAC;oBAEF,wEAAwE;oBACxE,oEAAoE;oBACpE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;wBAE1B,sEAAsE;wBACtE,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAE3C,IAAI,YAAY,EAAE,CAAC;4BACjB,uCAAuC;4BACvC,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC9C,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAC5C,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,CAAC;4BAEF,2EAA2E;4BAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;4BAErC,mEAAmE;4BACnE,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;4BAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;wBACnD,CAAC;6BAAM,CAAC;4BACN,sDAAsD;4BACtD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;wBAClC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"twist-logs.js","sourceRoot":"","sources":["../../cli/commands/twist-logs.ts"],"names":[],"mappings":"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"}
@@ -17,16 +17,43 @@ Plot Twists are TypeScript classes that extend the `Twist` base class. Twists in
17
17
  - **Store intermediate state**: Use the Store tool to persist state between batches
18
18
  - **Examples**: Syncing large datasets, processing many API calls, or performing batch operations
19
19
 
20
- ## twist Structure Pattern
20
+ ## Understanding Activities and Notes
21
+
22
+ **CRITICAL CONCEPT**: An **Activity** represents something done or to be done (a task, event, or conversation), while **Notes** represent the updates and details on that activity.
23
+
24
+ **Think of an Activity as a thread** on a messaging platform, and **Notes as the messages in that thread**.
25
+
26
+ ### Key Guidelines
27
+
28
+ 1. **Always create Activities with an initial Note** - The title is just a summary; detailed content goes in Notes
29
+ 2. **Add Notes to existing Activities for updates** - Don't create a new Activity for each related message
30
+ 3. **Track external items using generated UUIDs** - Store mappings between external IDs and Plot UUIDs for deduplication
31
+ 4. **Most Activities should be `ActivityType.Note`** - Use `Action` only for tasks with `doneAt`, use `Event` only for items with `start`/`end`
32
+
33
+ ### Decision Tree
34
+
35
+ ```
36
+ New event/task/conversation?
37
+ ├─ Yes → Generate UUID with Uuid.Generate()
38
+ │ Create new Activity with that UUID
39
+ │ Store mapping: external_id → activity_uuid
40
+
41
+ └─ No (update/reply/comment) → Look up mapping by external_id
42
+ ├─ Found → Add Note to existing Activity using stored UUID
43
+ └─ Not found → Create new Activity with UUID + store mapping
44
+ ```
45
+
46
+ ## Twist Structure Pattern
21
47
 
22
48
  ```typescript
23
49
  import {
24
50
  type Activity,
25
- twist,
26
51
  type Priority,
27
52
  type ToolBuilder,
53
+ twist,
28
54
  } from "@plotday/twister";
29
55
  import { Plot } from "@plotday/twister/tools/plot";
56
+ import { Uuid } from "@plotday/twister/utils/uuid";
30
57
 
31
58
  export default class MyTwist extends Twist<MyTwist> {
32
59
  build(build: ToolBuilder) {
@@ -118,9 +145,14 @@ async activate(_priority: Pick<Priority, "id">) {
118
145
  );
119
146
 
120
147
  await this.tools.plot.createActivity({
121
- type: ActivityType.Action,
148
+ type: ActivityType.Note,
122
149
  title: "Connect your account",
123
- links: [authLink],
150
+ notes: [
151
+ {
152
+ content: "Click the link below to connect your account and start syncing.",
153
+ links: [authLink],
154
+ },
155
+ ],
124
156
  });
125
157
  }
126
158
  ```
@@ -129,8 +161,13 @@ async activate(_priority: Pick<Priority, "id">) {
129
161
 
130
162
  ```typescript
131
163
  const activity = await this.tools.plot.createActivity({
132
- type: ActivityType.Action,
164
+ type: ActivityType.Note,
133
165
  title: "Setup",
166
+ notes: [
167
+ {
168
+ content: "Your twist is being set up. Configuration steps will appear here.",
169
+ },
170
+ ],
134
171
  });
135
172
 
136
173
  await this.set("setup_activity_id", activity.id);
@@ -180,11 +217,16 @@ const callbackLink: ActivityLink = {
180
217
  token: token,
181
218
  };
182
219
 
183
- // Add to activity
220
+ // Add to activity note
184
221
  await this.tools.plot.createActivity({
185
- type: ActivityType.Action,
222
+ type: ActivityType.Note,
186
223
  title: "Task with links",
187
- links: [urlLink, callbackLink],
224
+ notes: [
225
+ {
226
+ content: "Click the links below to take action.",
227
+ links: [urlLink, callbackLink],
228
+ },
229
+ ],
188
230
  });
189
231
  ```
190
232
 
@@ -202,9 +244,14 @@ async activate(_priority: Pick<Priority, "id">) {
202
244
 
203
245
  // Create activity with auth link
204
246
  const activity = await this.tools.plot.createActivity({
205
- type: ActivityType.Action,
247
+ type: ActivityType.Note,
206
248
  title: "Connect Google account",
207
- links: [authLink],
249
+ notes: [
250
+ {
251
+ content: "Click below to connect your Google account and start syncing.",
252
+ links: [authLink],
253
+ },
254
+ ],
208
255
  });
209
256
 
210
257
  // Store for later use
@@ -222,7 +269,7 @@ async onAuthComplete(authResult: { authToken: string }, provider: string) {
222
269
 
223
270
  ## Sync Pattern
224
271
 
225
- Pattern for syncing external data with callbacks:
272
+ Pattern for syncing external data - demonstrates adding Notes to existing Activities:
226
273
 
227
274
  ```typescript
228
275
  async startSync(calendarId: string): Promise<void> {
@@ -236,9 +283,42 @@ async startSync(calendarId: string): Promise<void> {
236
283
  );
237
284
  }
238
285
 
239
- async handleEvent(activity: Activity, calendarId: string): Promise<void> {
240
- // Process incoming event from external service
241
- await this.tools.plot.createActivity(activity);
286
+ async handleEvent(
287
+ incomingActivity: NewActivityWithNotes,
288
+ calendarId: string
289
+ ): Promise<void> {
290
+ // Extract external event ID from meta (adapt based on your tool's data)
291
+ const externalId = incomingActivity.meta?.eventId;
292
+
293
+ if (!externalId) {
294
+ console.error("Event missing external ID");
295
+ return;
296
+ }
297
+
298
+ // Check if we've already synced this event
299
+ const mappingKey = `event_mapping:${calendarId}:${externalId}`;
300
+ const existingActivityId = await this.get<Uuid>(mappingKey);
301
+
302
+ if (existingActivityId) {
303
+ // Event already exists - add update as a Note (add message to thread)
304
+ if (incomingActivity.notes?.[0]?.content) {
305
+ await this.tools.plot.createNote({
306
+ activity: { id: existingActivityId },
307
+ content: incomingActivity.notes[0].content,
308
+ });
309
+ }
310
+ return;
311
+ }
312
+
313
+ // New event - generate UUID and store mapping
314
+ const activityId = Uuid.Generate();
315
+ await this.set(mappingKey, activityId);
316
+
317
+ // Create new Activity with initial Note (new thread with first message)
318
+ await this.tools.plot.createActivity({
319
+ ...incomingActivity,
320
+ id: activityId,
321
+ });
242
322
  }
243
323
 
244
324
  async stopSync(calendarId: string): Promise<void> {
@@ -278,7 +358,12 @@ private async createCalendarSelectionActivity(
278
358
  await this.tools.plot.createActivity({
279
359
  type: ActivityType.Note,
280
360
  title: "Which calendars would you like to connect?",
281
- links,
361
+ notes: [
362
+ {
363
+ content: "Select the calendars you want to sync:",
364
+ links,
365
+ },
366
+ ],
282
367
  });
283
368
  }
284
369
 
@@ -334,9 +419,24 @@ async syncBatch(args: any, resourceId: string): Promise<void> {
334
419
  // Process one batch (keep under time limit)
335
420
  const result = await this.fetchBatch(state.nextPageToken);
336
421
 
337
- // Process results
422
+ // Process results (create activities with Notes)
338
423
  for (const item of result.items) {
339
- await this.tools.plot.createActivity(item);
424
+ // Check if already synced
425
+ const mappingKey = `item_mapping:${resourceId}:${item.id}`;
426
+ const existingId = await this.get<Uuid>(mappingKey);
427
+
428
+ if (!existingId) {
429
+ // New item - generate UUID and store mapping
430
+ const activityId = Uuid.Generate();
431
+ await this.set(mappingKey, activityId);
432
+
433
+ await this.tools.plot.createActivity({
434
+ id: activityId,
435
+ type: ActivityType.Note,
436
+ title: item.title,
437
+ notes: [{ id: Uuid.Generate(), content: item.description }],
438
+ });
439
+ }
340
440
  }
341
441
 
342
442
  if (result.nextPageToken) {
@@ -357,7 +457,12 @@ async syncBatch(args: any, resourceId: string): Promise<void> {
357
457
  // Optionally notify user of completion
358
458
  await this.tools.plot.createActivity({
359
459
  type: ActivityType.Note,
360
- note: `Sync complete: ${state.itemsProcessed + result.items.length} items processed`,
460
+ title: "Sync complete",
461
+ notes: [
462
+ {
463
+ content: `Successfully processed ${state.itemsProcessed + result.items.length} items.`,
464
+ },
465
+ ],
361
466
  });
362
467
  }
363
468
  }
@@ -375,7 +480,12 @@ try {
375
480
 
376
481
  await this.tools.plot.createActivity({
377
482
  type: ActivityType.Note,
378
- note: `Failed to complete operation: ${error.message}`,
483
+ title: "Operation failed",
484
+ notes: [
485
+ {
486
+ content: `Failed to complete operation: ${error.message}`,
487
+ },
488
+ ],
379
489
  });
380
490
  }
381
491
  ```
@@ -384,7 +494,10 @@ try {
384
494
 
385
495
  - **Don't use instance variables for state** - Anything stored in memory is lost after function execution. Always use the Store tool for data that needs to persist.
386
496
  - **Processing self-created activities** - Other users may change an Activity created by the twist, resulting in an \`activity\` call. Be sure to check the \`changes === null\` and/or \`activity.author.id !== this.id\` to avoid re-processing.
387
- - Most activity should be `type = ActivityType.Note` with a `title` and `note`, and no `start` or `end`. This represents a typical message. `start` and `end` should only be used for a note if it should be displayed for a specific date or time, such as a birthday.
497
+ - **Always create Activities with Notes** - See "Understanding Activities and Notes" section above for the thread/message pattern and decision tree.
498
+ - **Use correct Activity types** - Most should be `ActivityType.Note`. Only use `Action` for tasks with `doneAt`, and `Event` for items with `start`/`end`.
499
+ - **Track external items with UUID mappings** - Generate UUIDs with `Uuid.Generate()` and store mappings (`external_id → uuid`) for deduplication. Never rely on the `source` field.
500
+ - **Add Notes to existing Activities** - Look up stored UUID mappings before creating new Activities. Think thread replies, not new threads.
388
501
  - Tools are declared in the `build` method and accessed via `this.tools.toolName` in twist methods.
389
502
  - **Don't forget runtime limits** - Each execution has ~10 seconds. Break long operations into batches with the Tasks tool. Process enough items per batch to be efficient, but few enough to stay under time limits.
390
503
  - **Always use Callbacks tool for persistent references** - Direct function references don't survive worker restarts.
@@ -76,6 +76,46 @@ async function bundleTwist(twistPath, options = {}) {
76
76
  sourcemap,
77
77
  minify,
78
78
  logLevel: "silent",
79
+ conditions: ["@plotday/source"],
80
+ // Mark Node.js built-ins as external - they'll be provided by Cloudflare Workers' nodejs_compat
81
+ external: [
82
+ "node:*",
83
+ "buffer",
84
+ "events",
85
+ "stream",
86
+ "util",
87
+ "http",
88
+ "https",
89
+ "url",
90
+ "zlib",
91
+ "crypto",
92
+ "path",
93
+ "fs",
94
+ "os",
95
+ "net",
96
+ "tls",
97
+ "dns",
98
+ "dgram",
99
+ "child_process",
100
+ "cluster",
101
+ "readline",
102
+ "repl",
103
+ "tty",
104
+ "vm",
105
+ "querystring",
106
+ "string_decoder",
107
+ "punycode",
108
+ "process",
109
+ "assert",
110
+ "constants",
111
+ "module",
112
+ "perf_hooks",
113
+ "worker_threads",
114
+ "async_hooks",
115
+ "timers",
116
+ "inspector",
117
+ "v8",
118
+ ],
79
119
  });
80
120
  // Check for errors
81
121
  if (result.errors.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../cli/utils/bundle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,kCAuEC;AAjGD,iDAAmC;AACnC,uCAAyB;AACzB,2CAA6B;AAa7B;;;;;;;;;;GAUG;AACI,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,UAAyB,EAAE;IAE3B,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAErD,6BAA6B;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,sBAAsB;IACtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;QACjC,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;QACxC,SAAS;QACT,MAAM;QACN,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM;aAChC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;aACzE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAClC,CAAC,IAAI,EAAE,EAAE,CACP,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CACjE,CAAC;IAEF,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAElD,kCAAkC;IAClC,IAAI,gBAAoC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,gBAAgB;QAC3B,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../cli/utils/bundle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,kCA+GC;AAzID,iDAAmC;AACnC,uCAAyB;AACzB,2CAA6B;AAa7B;;;;;;;;;;GAUG;AACI,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,UAAyB,EAAE;IAE3B,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAErD,6BAA6B;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,sBAAsB;IACtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;QACjC,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;QACxC,SAAS;QACT,MAAM;QACN,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,CAAC,iBAAiB,CAAC;QAC/B,gGAAgG;QAChG,QAAQ,EAAE;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,MAAM;YACN,OAAO;YACP,KAAK;YACL,MAAM;YACN,QAAQ;YACR,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,KAAK;YACL,KAAK;YACL,KAAK;YACL,OAAO;YACP,eAAe;YACf,SAAS;YACT,UAAU;YACV,MAAM;YACN,KAAK;YACL,IAAI;YACJ,aAAa;YACb,gBAAgB;YAChB,UAAU;YACV,SAAS;YACT,QAAQ;YACR,WAAW;YACX,QAAQ;YACR,YAAY;YACZ,gBAAgB;YAChB,aAAa;YACb,QAAQ;YACR,WAAW;YACX,IAAI;SACL;KACF,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM;aAChC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;aACzE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAClC,CAAC,IAAI,EAAE,EAAE,CACP,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CACjE,CAAC;IAEF,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAElD,kCAAkC;IAClC,IAAI,gBAAoC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,gBAAgB;QAC3B,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * Network error handling utility for Twister CLI
4
+ * Converts technical fetch/network errors into user-friendly messages
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.handleNetworkError = handleNetworkError;
8
+ exports.formatNetworkError = formatNetworkError;
9
+ /**
10
+ * Checks if an error is a network-related error
11
+ */
12
+ function isNetworkError(error) {
13
+ if (error && typeof error === "object") {
14
+ const err = error;
15
+ // Check for common network error codes
16
+ if (err.code) {
17
+ return [
18
+ "ECONNREFUSED",
19
+ "ENOTFOUND",
20
+ "ETIMEDOUT",
21
+ "ECONNRESET",
22
+ "ENETUNREACH",
23
+ "EAI_AGAIN",
24
+ ].includes(err.code);
25
+ }
26
+ // Check for fetch failed errors
27
+ if (err.cause && typeof err.cause === "object") {
28
+ const cause = err.cause;
29
+ return cause.code && typeof cause.code === "string";
30
+ }
31
+ }
32
+ return false;
33
+ }
34
+ /**
35
+ * Extracts the error code from a network error
36
+ */
37
+ function getErrorCode(error) {
38
+ if (error && typeof error === "object") {
39
+ const err = error;
40
+ if (err.code)
41
+ return err.code;
42
+ if (err.cause && typeof err.cause === "object") {
43
+ return err.cause.code;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ /**
49
+ * Handles network errors and returns user-friendly error information
50
+ */
51
+ function handleNetworkError(error, context) {
52
+ // Handle HTTP Response errors (non-2xx responses)
53
+ if (error && typeof error === "object" && "status" in error) {
54
+ const status = error.status;
55
+ if (typeof status === "number") {
56
+ switch (true) {
57
+ case status === 401 || status === 403:
58
+ return {
59
+ message: "Authentication failed. Please log in again.",
60
+ shouldRetry: false,
61
+ };
62
+ case status === 404:
63
+ return {
64
+ message: "API endpoint not found. You may need to update your CLI.",
65
+ shouldRetry: false,
66
+ };
67
+ case status === 429:
68
+ return {
69
+ message: "Too many requests. Please wait a moment and try again.",
70
+ shouldRetry: true,
71
+ };
72
+ case status >= 500:
73
+ return {
74
+ message: "Plot API is experiencing issues. Please try again later.",
75
+ shouldRetry: true,
76
+ };
77
+ default:
78
+ return {
79
+ message: `Request failed with status ${status}. Please try again later.`,
80
+ shouldRetry: true,
81
+ };
82
+ }
83
+ }
84
+ }
85
+ // Handle network connectivity errors
86
+ if (isNetworkError(error)) {
87
+ const code = getErrorCode(error);
88
+ switch (code) {
89
+ case "ECONNREFUSED":
90
+ return {
91
+ message: "Cannot connect to Plot API. Please check your internet connection or try again later.",
92
+ details: context,
93
+ shouldRetry: true,
94
+ };
95
+ case "ENOTFOUND":
96
+ return {
97
+ message: "Cannot reach Plot API. Please check your internet connection.",
98
+ details: context,
99
+ shouldRetry: true,
100
+ };
101
+ case "ETIMEDOUT":
102
+ case "ECONNRESET":
103
+ return {
104
+ message: "Connection to Plot API timed out. Please try again later.",
105
+ details: context,
106
+ shouldRetry: true,
107
+ };
108
+ case "ENETUNREACH":
109
+ case "EAI_AGAIN":
110
+ return {
111
+ message: "Network unreachable. Please check your internet connection.",
112
+ details: context,
113
+ shouldRetry: true,
114
+ };
115
+ default:
116
+ return {
117
+ message: "Network error occurred. Please check your internet connection or try again later.",
118
+ details: context,
119
+ shouldRetry: true,
120
+ };
121
+ }
122
+ }
123
+ // Handle timeout errors from AbortController
124
+ if (error instanceof Error && error.name === "AbortError") {
125
+ return {
126
+ message: "Request timed out. Please try again later.",
127
+ details: context,
128
+ shouldRetry: true,
129
+ };
130
+ }
131
+ // Handle generic errors
132
+ const errorMessage = error instanceof Error ? error.message : String(error);
133
+ return {
134
+ message: "An unexpected error occurred. Please try again later.",
135
+ details: errorMessage,
136
+ shouldRetry: true,
137
+ };
138
+ }
139
+ /**
140
+ * Formats a network error for display to the user
141
+ */
142
+ function formatNetworkError(error, context) {
143
+ const result = handleNetworkError(error, context);
144
+ if (result.details) {
145
+ return `${result.message}\n${result.details}`;
146
+ }
147
+ return result.message;
148
+ }
149
+ //# sourceMappingURL=network-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-error.js","sourceRoot":"","sources":["../../cli/utils/network-error.ts"],"names":[],"mappings":"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"}
package/bin/utils/sse.js CHANGED
@@ -15,7 +15,11 @@ async function handleSSEStream(response, handlers) {
15
15
  const decoder = new TextDecoder();
16
16
  let buffer = "";
17
17
  let result = null;
18
+ let receivedAnyEvent = false;
19
+ let receivedResultEvent = false;
18
20
  try {
21
+ // currentEvent persists across chunk reads to handle events split across multiple chunks
22
+ let currentEvent = {};
19
23
  while (true) {
20
24
  const { done, value } = await reader.read();
21
25
  if (done) {
@@ -27,11 +31,11 @@ async function handleSSEStream(response, handlers) {
27
31
  const lines = buffer.split("\n");
28
32
  // Keep incomplete message in buffer
29
33
  buffer = lines.pop() || "";
30
- let currentEvent = {};
31
34
  for (const line of lines) {
32
35
  // Empty line marks end of event
33
36
  if (line.trim() === "") {
34
37
  if (currentEvent.event && currentEvent.data !== undefined) {
38
+ receivedAnyEvent = true;
35
39
  // Parse data if it's JSON
36
40
  let parsedData = currentEvent.data;
37
41
  try {
@@ -46,6 +50,7 @@ async function handleSSEStream(response, handlers) {
46
50
  handlers.onProgress?.(parsedData.message);
47
51
  break;
48
52
  case "result":
53
+ receivedResultEvent = true;
49
54
  result = parsedData;
50
55
  handlers.onResult?.(parsedData);
51
56
  break;
@@ -91,6 +96,19 @@ async function handleSSEStream(response, handlers) {
91
96
  }
92
97
  }
93
98
  }
99
+ // Stream completed - check if we received a result
100
+ if (!receivedResultEvent) {
101
+ if (!receivedAnyEvent) {
102
+ throw new Error("Connection closed without receiving any events. " +
103
+ "This may indicate a network issue or server error. " +
104
+ "Please check your connection and try again.");
105
+ }
106
+ else {
107
+ throw new Error("Stream ended without receiving a result. " +
108
+ "The operation may have completed on the server, but the response was interrupted. " +
109
+ "Please verify the operation status and retry if needed.");
110
+ }
111
+ }
94
112
  return result;
95
113
  }
96
114
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../cli/utils/sse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../cli/utils/sse.ts"],"names":[],"mappings":"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"}