@plotday/twister 0.20.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 (298) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +261 -0
  3. package/bin/commands/build.js +108 -0
  4. package/bin/commands/build.js.map +1 -0
  5. package/bin/commands/create.js +230 -0
  6. package/bin/commands/create.js.map +1 -0
  7. package/bin/commands/deploy.js +292 -0
  8. package/bin/commands/deploy.js.map +1 -0
  9. package/bin/commands/generate.js +301 -0
  10. package/bin/commands/generate.js.map +1 -0
  11. package/bin/commands/lint.js +69 -0
  12. package/bin/commands/lint.js.map +1 -0
  13. package/bin/commands/login.js +140 -0
  14. package/bin/commands/login.js.map +1 -0
  15. package/bin/commands/priority-create.js +102 -0
  16. package/bin/commands/priority-create.js.map +1 -0
  17. package/bin/commands/priority-list.js +47 -0
  18. package/bin/commands/priority-list.js.map +1 -0
  19. package/bin/commands/twist-logs.js +187 -0
  20. package/bin/commands/twist-logs.js.map +1 -0
  21. package/bin/index.js +129 -0
  22. package/bin/index.js.map +1 -0
  23. package/bin/package.json +3 -0
  24. package/bin/plot.cjs +3 -0
  25. package/bin/templates/AGENTS.template.md +403 -0
  26. package/bin/templates/CLAUDE.template.md +1 -0
  27. package/bin/templates/README.template.md +189 -0
  28. package/bin/utils/bundle.js +106 -0
  29. package/bin/utils/bundle.js.map +1 -0
  30. package/bin/utils/output.js +133 -0
  31. package/bin/utils/output.js.map +1 -0
  32. package/bin/utils/packageManager.js +65 -0
  33. package/bin/utils/packageManager.js.map +1 -0
  34. package/bin/utils/sse.js +100 -0
  35. package/bin/utils/sse.js.map +1 -0
  36. package/bin/utils/token.js +75 -0
  37. package/bin/utils/token.js.map +1 -0
  38. package/cli/templates/AGENTS.template.md +403 -0
  39. package/cli/templates/CLAUDE.template.md +1 -0
  40. package/cli/templates/README.template.md +189 -0
  41. package/dist/common/calendar.d.ts +144 -0
  42. package/dist/common/calendar.d.ts.map +1 -0
  43. package/dist/common/calendar.js +2 -0
  44. package/dist/common/calendar.js.map +1 -0
  45. package/dist/common/messaging.d.ts +84 -0
  46. package/dist/common/messaging.d.ts.map +1 -0
  47. package/dist/common/messaging.js +2 -0
  48. package/dist/common/messaging.js.map +1 -0
  49. package/dist/creator-docs.d.ts +11 -0
  50. package/dist/creator-docs.d.ts.map +1 -0
  51. package/dist/creator-docs.js +27 -0
  52. package/dist/creator-docs.js.map +1 -0
  53. package/dist/docs/.nojekyll +1 -0
  54. package/dist/docs/assets/favicon.svg +8 -0
  55. package/dist/docs/assets/hierarchy.js +1 -0
  56. package/dist/docs/assets/highlight.css +134 -0
  57. package/dist/docs/assets/icons.js +18 -0
  58. package/dist/docs/assets/icons.svg +1 -0
  59. package/dist/docs/assets/main.js +60 -0
  60. package/dist/docs/assets/navigation.js +1 -0
  61. package/dist/docs/assets/search.js +1 -0
  62. package/dist/docs/assets/style.css +1633 -0
  63. package/dist/docs/classes/tool.ITool.html +4 -0
  64. package/dist/docs/classes/tool.Tool.html +116 -0
  65. package/dist/docs/classes/tools_ai.AI.html +27 -0
  66. package/dist/docs/classes/tools_callbacks.Callbacks.html +45 -0
  67. package/dist/docs/classes/tools_integrations.Integrations.html +26 -0
  68. package/dist/docs/classes/tools_network.Network.html +68 -0
  69. package/dist/docs/classes/tools_plot.Plot.html +82 -0
  70. package/dist/docs/classes/tools_store.Store.html +53 -0
  71. package/dist/docs/classes/tools_tasks.Tasks.html +39 -0
  72. package/dist/docs/classes/tools_twists.Twists.html +59 -0
  73. package/dist/docs/classes/twist.Twist.html +96 -0
  74. package/dist/docs/documents/Advanced.html +91 -0
  75. package/dist/docs/documents/Building_Custom_Tools.html +200 -0
  76. package/dist/docs/documents/Built-in_Tools.html +170 -0
  77. package/dist/docs/documents/CLI_Reference.html +193 -0
  78. package/dist/docs/documents/Core_Concepts.html +163 -0
  79. package/dist/docs/documents/Getting_Started.html +94 -0
  80. package/dist/docs/documents/Runtime_Environment.html +128 -0
  81. package/dist/docs/enums/plot.ActivityLinkType.html +12 -0
  82. package/dist/docs/enums/plot.ActivityType.html +10 -0
  83. package/dist/docs/enums/plot.ActorType.html +10 -0
  84. package/dist/docs/enums/plot.ConferencingProvider.html +14 -0
  85. package/dist/docs/enums/tag.Tag.html +45 -0
  86. package/dist/docs/enums/tools_ai.AIModel.html +31 -0
  87. package/dist/docs/enums/tools_integrations.AuthLevel.html +7 -0
  88. package/dist/docs/enums/tools_integrations.AuthProvider.html +24 -0
  89. package/dist/docs/enums/tools_plot.ActivityAccess.html +8 -0
  90. package/dist/docs/enums/tools_plot.ContactAccess.html +5 -0
  91. package/dist/docs/enums/tools_plot.PriorityAccess.html +8 -0
  92. package/dist/docs/hierarchy.html +1 -0
  93. package/dist/docs/index.html +100 -0
  94. package/dist/docs/interfaces/common_calendar.Calendar.html +13 -0
  95. package/dist/docs/interfaces/common_calendar.CalendarTool.html +49 -0
  96. package/dist/docs/interfaces/common_calendar.SyncOptions.html +8 -0
  97. package/dist/docs/interfaces/tools_ai.AIRequest.html +46 -0
  98. package/dist/docs/interfaces/tools_ai.AIResponse.html +19 -0
  99. package/dist/docs/interfaces/tools_ai.FilePart.html +14 -0
  100. package/dist/docs/interfaces/tools_ai.ImagePart.html +11 -0
  101. package/dist/docs/interfaces/tools_ai.ReasoningPart.html +7 -0
  102. package/dist/docs/interfaces/tools_ai.RedactedReasoningPart.html +5 -0
  103. package/dist/docs/interfaces/tools_ai.TextPart.html +5 -0
  104. package/dist/docs/interfaces/tools_ai.ToolCallPart.html +9 -0
  105. package/dist/docs/interfaces/tools_ai.ToolExecutionOptions.html +9 -0
  106. package/dist/docs/interfaces/tools_ai.ToolResultPart.html +9 -0
  107. package/dist/docs/interfaces/tools_twists.TwistSource.html +13 -0
  108. package/dist/docs/interfaces/utils_types.ToolShed.html +11 -0
  109. package/dist/docs/modules/common_calendar.html +1 -0
  110. package/dist/docs/modules/index.html +1 -0
  111. package/dist/docs/modules/plot.html +1 -0
  112. package/dist/docs/modules/tag.html +1 -0
  113. package/dist/docs/modules/tool.html +1 -0
  114. package/dist/docs/modules/tools_ai.html +1 -0
  115. package/dist/docs/modules/tools_callbacks.html +1 -0
  116. package/dist/docs/modules/tools_integrations.html +1 -0
  117. package/dist/docs/modules/tools_network.html +1 -0
  118. package/dist/docs/modules/tools_plot.html +1 -0
  119. package/dist/docs/modules/tools_store.html +1 -0
  120. package/dist/docs/modules/tools_tasks.html +1 -0
  121. package/dist/docs/modules/tools_twists.html +1 -0
  122. package/dist/docs/modules/twist.html +1 -0
  123. package/dist/docs/modules/utils_types.html +1 -0
  124. package/dist/docs/modules.html +1 -0
  125. package/dist/docs/types/common_calendar.CalendarAuth.html +7 -0
  126. package/dist/docs/types/plot.Activity.html +64 -0
  127. package/dist/docs/types/plot.ActivityLink.html +22 -0
  128. package/dist/docs/types/plot.ActivityMeta.html +11 -0
  129. package/dist/docs/types/plot.ActivityUpdate.html +13 -0
  130. package/dist/docs/types/plot.Actor.html +15 -0
  131. package/dist/docs/types/plot.ActorId.html +4 -0
  132. package/dist/docs/types/plot.NewActivity.html +16 -0
  133. package/dist/docs/types/plot.NewContact.html +13 -0
  134. package/dist/docs/types/plot.NewPriority.html +5 -0
  135. package/dist/docs/types/plot.NoteType.html +1 -0
  136. package/dist/docs/types/plot.PickPriorityConfig.html +22 -0
  137. package/dist/docs/types/plot.Priority.html +8 -0
  138. package/dist/docs/types/tools_ai.AIAssistantMessage.html +4 -0
  139. package/dist/docs/types/tools_ai.AIMessage.html +3 -0
  140. package/dist/docs/types/tools_ai.AISource.html +11 -0
  141. package/dist/docs/types/tools_ai.AISystemMessage.html +7 -0
  142. package/dist/docs/types/tools_ai.AITool.html +19 -0
  143. package/dist/docs/types/tools_ai.AIToolMessage.html +4 -0
  144. package/dist/docs/types/tools_ai.AIToolSet.html +1 -0
  145. package/dist/docs/types/tools_ai.AIUsage.html +10 -0
  146. package/dist/docs/types/tools_ai.AIUserMessage.html +4 -0
  147. package/dist/docs/types/tools_ai.DataContent.html +2 -0
  148. package/dist/docs/types/tools_ai.ModelPreferences.html +24 -0
  149. package/dist/docs/types/tools_callbacks.Callback.html +8 -0
  150. package/dist/docs/types/tools_integrations.AuthToken.html +16 -0
  151. package/dist/docs/types/tools_integrations.Authorization.html +10 -0
  152. package/dist/docs/types/tools_network.WebhookRequest.html +15 -0
  153. package/dist/docs/types/tools_plot.ActivityIntentHandler.html +9 -0
  154. package/dist/docs/types/tools_twists.Log.html +6 -0
  155. package/dist/docs/types/tools_twists.TwistPermissions.html +12 -0
  156. package/dist/docs/types/utils_types.BuiltInTools.html +5 -0
  157. package/dist/docs/types/utils_types.CallbackMethods.html +3 -0
  158. package/dist/docs/types/utils_types.ExtractBuildReturn.html +2 -0
  159. package/dist/docs/types/utils_types.InferOptions.html +2 -0
  160. package/dist/docs/types/utils_types.InferTools.html +3 -0
  161. package/dist/docs/types/utils_types.NoFunctions.html +3 -0
  162. package/dist/docs/types/utils_types.NonFunction.html +2 -0
  163. package/dist/docs/types/utils_types.PromiseValues.html +3 -0
  164. package/dist/docs/types/utils_types.ToolBuilder.html +3 -0
  165. package/dist/index.d.ts +7 -0
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +7 -0
  168. package/dist/index.js.map +1 -0
  169. package/dist/llm-docs/common/calendar.d.ts +9 -0
  170. package/dist/llm-docs/common/calendar.d.ts.map +1 -0
  171. package/dist/llm-docs/common/calendar.js +8 -0
  172. package/dist/llm-docs/common/calendar.js.map +1 -0
  173. package/dist/llm-docs/common/messaging.d.ts +9 -0
  174. package/dist/llm-docs/common/messaging.d.ts.map +1 -0
  175. package/dist/llm-docs/common/messaging.js +8 -0
  176. package/dist/llm-docs/common/messaging.js.map +1 -0
  177. package/dist/llm-docs/creator-docs.d.ts +9 -0
  178. package/dist/llm-docs/creator-docs.d.ts.map +1 -0
  179. package/dist/llm-docs/creator-docs.js +8 -0
  180. package/dist/llm-docs/creator-docs.js.map +1 -0
  181. package/dist/llm-docs/index.d.ts +11 -0
  182. package/dist/llm-docs/index.d.ts.map +1 -0
  183. package/dist/llm-docs/index.js +42 -0
  184. package/dist/llm-docs/index.js.map +1 -0
  185. package/dist/llm-docs/plot.d.ts +9 -0
  186. package/dist/llm-docs/plot.d.ts.map +1 -0
  187. package/dist/llm-docs/plot.js +8 -0
  188. package/dist/llm-docs/plot.js.map +1 -0
  189. package/dist/llm-docs/tag.d.ts +9 -0
  190. package/dist/llm-docs/tag.d.ts.map +1 -0
  191. package/dist/llm-docs/tag.js +8 -0
  192. package/dist/llm-docs/tag.js.map +1 -0
  193. package/dist/llm-docs/tool.d.ts +9 -0
  194. package/dist/llm-docs/tool.d.ts.map +1 -0
  195. package/dist/llm-docs/tool.js +8 -0
  196. package/dist/llm-docs/tool.js.map +1 -0
  197. package/dist/llm-docs/tools/ai.d.ts +9 -0
  198. package/dist/llm-docs/tools/ai.d.ts.map +1 -0
  199. package/dist/llm-docs/tools/ai.js +8 -0
  200. package/dist/llm-docs/tools/ai.js.map +1 -0
  201. package/dist/llm-docs/tools/callbacks.d.ts +9 -0
  202. package/dist/llm-docs/tools/callbacks.d.ts.map +1 -0
  203. package/dist/llm-docs/tools/callbacks.js +8 -0
  204. package/dist/llm-docs/tools/callbacks.js.map +1 -0
  205. package/dist/llm-docs/tools/integrations.d.ts +9 -0
  206. package/dist/llm-docs/tools/integrations.d.ts.map +1 -0
  207. package/dist/llm-docs/tools/integrations.js +8 -0
  208. package/dist/llm-docs/tools/integrations.js.map +1 -0
  209. package/dist/llm-docs/tools/network.d.ts +9 -0
  210. package/dist/llm-docs/tools/network.d.ts.map +1 -0
  211. package/dist/llm-docs/tools/network.js +8 -0
  212. package/dist/llm-docs/tools/network.js.map +1 -0
  213. package/dist/llm-docs/tools/plot.d.ts +9 -0
  214. package/dist/llm-docs/tools/plot.d.ts.map +1 -0
  215. package/dist/llm-docs/tools/plot.js +8 -0
  216. package/dist/llm-docs/tools/plot.js.map +1 -0
  217. package/dist/llm-docs/tools/store.d.ts +9 -0
  218. package/dist/llm-docs/tools/store.d.ts.map +1 -0
  219. package/dist/llm-docs/tools/store.js +8 -0
  220. package/dist/llm-docs/tools/store.js.map +1 -0
  221. package/dist/llm-docs/tools/tasks.d.ts +9 -0
  222. package/dist/llm-docs/tools/tasks.d.ts.map +1 -0
  223. package/dist/llm-docs/tools/tasks.js +8 -0
  224. package/dist/llm-docs/tools/tasks.js.map +1 -0
  225. package/dist/llm-docs/tools/twists.d.ts +9 -0
  226. package/dist/llm-docs/tools/twists.d.ts.map +1 -0
  227. package/dist/llm-docs/tools/twists.js +8 -0
  228. package/dist/llm-docs/tools/twists.js.map +1 -0
  229. package/dist/llm-docs/twist-guide-template.d.ts +9 -0
  230. package/dist/llm-docs/twist-guide-template.d.ts.map +1 -0
  231. package/dist/llm-docs/twist-guide-template.js +8 -0
  232. package/dist/llm-docs/twist-guide-template.js.map +1 -0
  233. package/dist/llm-docs/twist.d.ts +9 -0
  234. package/dist/llm-docs/twist.d.ts.map +1 -0
  235. package/dist/llm-docs/twist.js +8 -0
  236. package/dist/llm-docs/twist.js.map +1 -0
  237. package/dist/plot.d.ts +463 -0
  238. package/dist/plot.d.ts.map +1 -0
  239. package/dist/plot.js +68 -0
  240. package/dist/plot.js.map +1 -0
  241. package/dist/tag.d.ts +47 -0
  242. package/dist/tag.d.ts.map +1 -0
  243. package/dist/tag.js +51 -0
  244. package/dist/tag.js.map +1 -0
  245. package/dist/tool.d.ts +242 -0
  246. package/dist/tool.d.ts.map +1 -0
  247. package/dist/tool.js +283 -0
  248. package/dist/tool.js.map +1 -0
  249. package/dist/tools/ai.d.ts +697 -0
  250. package/dist/tools/ai.d.ts.map +1 -0
  251. package/dist/tools/ai.js +104 -0
  252. package/dist/tools/ai.js.map +1 -0
  253. package/dist/tools/callbacks.d.ts +96 -0
  254. package/dist/tools/callbacks.d.ts.map +1 -0
  255. package/dist/tools/callbacks.js +40 -0
  256. package/dist/tools/callbacks.js.map +1 -0
  257. package/dist/tools/index.d.ts +9 -0
  258. package/dist/tools/index.d.ts.map +1 -0
  259. package/dist/tools/index.js +9 -0
  260. package/dist/tools/index.js.map +1 -0
  261. package/dist/tools/integrations.d.ts +142 -0
  262. package/dist/tools/integrations.d.ts.map +1 -0
  263. package/dist/tools/integrations.js +79 -0
  264. package/dist/tools/integrations.js.map +1 -0
  265. package/dist/tools/network.d.ts +188 -0
  266. package/dist/tools/network.d.ts.map +1 -0
  267. package/dist/tools/network.js +87 -0
  268. package/dist/tools/network.js.map +1 -0
  269. package/dist/tools/plot.d.ts +252 -0
  270. package/dist/tools/plot.d.ts.map +1 -0
  271. package/dist/tools/plot.js +72 -0
  272. package/dist/tools/plot.js.map +1 -0
  273. package/dist/tools/store.d.ts +90 -0
  274. package/dist/tools/store.d.ts.map +1 -0
  275. package/dist/tools/store.js +48 -0
  276. package/dist/tools/store.js.map +1 -0
  277. package/dist/tools/tasks.d.ts +93 -0
  278. package/dist/tools/tasks.d.ts.map +1 -0
  279. package/dist/tools/tasks.js +58 -0
  280. package/dist/tools/tasks.js.map +1 -0
  281. package/dist/tools/twists.d.ts +213 -0
  282. package/dist/tools/twists.d.ts.map +1 -0
  283. package/dist/tools/twists.js +26 -0
  284. package/dist/tools/twists.js.map +1 -0
  285. package/dist/twist-guide.d.ts +2 -0
  286. package/dist/twist-guide.d.ts.map +1 -0
  287. package/dist/twist-guide.js +9 -0
  288. package/dist/twist-guide.js.map +1 -0
  289. package/dist/twist.d.ts +204 -0
  290. package/dist/twist.d.ts.map +1 -0
  291. package/dist/twist.js +216 -0
  292. package/dist/twist.js.map +1 -0
  293. package/dist/utils/types.d.ts +91 -0
  294. package/dist/utils/types.d.ts.map +1 -0
  295. package/dist/utils/types.js +2 -0
  296. package/dist/utils/types.js.map +1 -0
  297. package/package.json +206 -0
  298. package/tsconfig.base.json +28 -0
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.deployCommand = deployCommand;
40
+ const dotenv = __importStar(require("dotenv"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const prompts_1 = __importDefault(require("prompts"));
44
+ const bundle_1 = require("../utils/bundle");
45
+ const out = __importStar(require("../utils/output"));
46
+ const sse_1 = require("../utils/sse");
47
+ const token_1 = require("../utils/token");
48
+ async function deployCommand(options) {
49
+ const twistPath = path.resolve(process.cwd(), options.dir);
50
+ // Check for package.json
51
+ const packageJsonPath = path.join(twistPath, "package.json");
52
+ let packageJson;
53
+ if (fs.existsSync(packageJsonPath)) {
54
+ // Read and validate package.json
55
+ try {
56
+ const packageJsonContent = fs.readFileSync(packageJsonPath, "utf-8");
57
+ packageJson = JSON.parse(packageJsonContent);
58
+ }
59
+ catch (error) {
60
+ out.error("Failed to parse package.json", String(error));
61
+ process.exit(1);
62
+ }
63
+ }
64
+ else {
65
+ // No package.json - check for plot-twist.md as fallback
66
+ const specPath = path.join(twistPath, "plot-twist.md");
67
+ if (fs.existsSync(specPath)) {
68
+ out.info("No package.json found, but plot-twist.md exists", [
69
+ "Generating twist from spec first...",
70
+ ]);
71
+ // Import and run generate command
72
+ const { generateCommand } = await Promise.resolve().then(() => __importStar(require("./generate")));
73
+ await generateCommand({
74
+ dir: options.dir,
75
+ id: options.id,
76
+ deployToken: options.deployToken,
77
+ apiUrl: options.apiUrl,
78
+ });
79
+ // Re-read the generated package.json
80
+ try {
81
+ const packageJsonContent = fs.readFileSync(packageJsonPath, "utf-8");
82
+ packageJson = JSON.parse(packageJsonContent);
83
+ }
84
+ catch (error) {
85
+ out.error("Failed to read generated package.json", String(error));
86
+ process.exit(1);
87
+ }
88
+ out.blank();
89
+ out.progress("Continuing with deployment...");
90
+ }
91
+ else {
92
+ out.error("Neither package.json nor plot-twist.md found", "Run 'plot create' to create a new twist, or create a plot-twist.md spec file");
93
+ process.exit(1);
94
+ }
95
+ }
96
+ // Extract twist metadata from package.json
97
+ let twistId = packageJson?.plotTwistId;
98
+ const twistName = packageJson?.displayName;
99
+ const twistDescription = packageJson?.description;
100
+ const environment = options.environment || "personal";
101
+ // Validate required fields
102
+ if (!twistName) {
103
+ out.error("package.json is missing displayName", 'Add "displayName": "Your Twist Name" to package.json');
104
+ process.exit(1);
105
+ }
106
+ // Validate Twist ID is present (from package.json or CLI)
107
+ if (!twistId && !options.id) {
108
+ out.error("Twist ID missing", "Run 'plot create' to generate one, or provide --id flag");
109
+ process.exit(1);
110
+ }
111
+ // Resolve deployment ID, name, and description from options or package.json
112
+ const deploymentId = options.id || twistId;
113
+ const deploymentName = options.name || twistName;
114
+ const deploymentDescription = options.description || twistDescription;
115
+ // Load DEPLOY_TOKEN from multiple sources (CLI, env var, .env, global config)
116
+ let deployToken = options.deployToken;
117
+ const envPath = path.join(twistPath, ".env");
118
+ if (!deployToken) {
119
+ // Try to load from PLOT_DEPLOY_TOKEN environment variable
120
+ deployToken = process.env.PLOT_DEPLOY_TOKEN;
121
+ }
122
+ if (!deployToken) {
123
+ // Try to load from .env file
124
+ if (fs.existsSync(envPath)) {
125
+ const envConfig = dotenv.parse(fs.readFileSync(envPath));
126
+ deployToken = envConfig.DEPLOY_TOKEN;
127
+ }
128
+ // Try to load from global token file
129
+ if (!deployToken) {
130
+ const globalTokenPath = (0, token_1.getGlobalTokenPath)();
131
+ if (fs.existsSync(globalTokenPath)) {
132
+ try {
133
+ deployToken = fs.readFileSync(globalTokenPath, "utf-8").trim();
134
+ }
135
+ catch (error) {
136
+ console.warn(`Warning: Failed to read global token file: ${globalTokenPath}`);
137
+ }
138
+ }
139
+ }
140
+ // If still no token, prompt for it
141
+ if (!deployToken) {
142
+ out.info("Authentication required", [
143
+ "Run 'plot login' for easiest setup",
144
+ "Or provide token via --deploy-token, PLOT_DEPLOY_TOKEN env var, or DEPLOY_TOKEN in .env",
145
+ ]);
146
+ const response = await (0, prompts_1.default)({
147
+ type: "password",
148
+ name: "token",
149
+ message: "Enter your deployment token:",
150
+ validate: (value) => value.length > 0 || "Token is required",
151
+ });
152
+ if (!response.token) {
153
+ out.plain("\nDeployment cancelled.");
154
+ process.exit(0);
155
+ }
156
+ deployToken = response.token;
157
+ // Save token to .env file for future use
158
+ const envContent = fs.existsSync(envPath)
159
+ ? fs.readFileSync(envPath, "utf-8")
160
+ : "";
161
+ // Check if DEPLOY_TOKEN already exists in the file
162
+ if (!envContent.includes("DEPLOY_TOKEN=")) {
163
+ const newEnvContent = envContent +
164
+ (envContent.endsWith("\n") || !envContent ? "" : "\n") +
165
+ `DEPLOY_TOKEN=${deployToken}\n`;
166
+ fs.writeFileSync(envPath, newEnvContent);
167
+ out.success("Token saved to .env file");
168
+ }
169
+ }
170
+ }
171
+ // Build the twist
172
+ let requestBody;
173
+ try {
174
+ out.progress(options.dryRun
175
+ ? `Validating ${deploymentName}...`
176
+ : `Building ${deploymentName}...`);
177
+ const result = await (0, bundle_1.bundleTwist)(twistPath, {
178
+ minify: false,
179
+ sourcemap: true,
180
+ });
181
+ const moduleContent = result.code;
182
+ const sourcemapContent = result.sourcemap;
183
+ if (result.warnings.length > 0) {
184
+ out.warning("Build completed with warnings");
185
+ for (const warning of result.warnings.slice(0, 5)) {
186
+ console.warn(` ${warning}`);
187
+ }
188
+ if (result.warnings.length > 5) {
189
+ console.warn(` ... and ${result.warnings.length - 5} more warnings`);
190
+ }
191
+ }
192
+ requestBody = {
193
+ module: moduleContent,
194
+ sourcemap: sourcemapContent,
195
+ name: deploymentName,
196
+ description: deploymentDescription,
197
+ environment: environment,
198
+ dryRun: options.dryRun,
199
+ };
200
+ // Validate all required deployment fields
201
+ if (!deploymentName) {
202
+ out.error("Twist name is required", "Provide --name, or add 'displayName' to package.json");
203
+ process.exit(1);
204
+ }
205
+ // Description is only required for non-personal environments
206
+ if (environment !== "personal" && !deploymentDescription) {
207
+ out.error("Twist description is required for non-personal environments", "Provide --description, or add 'description' to package.json");
208
+ process.exit(1);
209
+ }
210
+ // Use deploymentId for non-personal, or "personal" for personal environment
211
+ const urlPath = deploymentId || "personal";
212
+ try {
213
+ const response = await fetch(`${options.apiUrl}/v1/twist/${urlPath}`, {
214
+ method: "POST",
215
+ headers: {
216
+ "Content-Type": "application/json",
217
+ Accept: "text/event-stream",
218
+ Authorization: `Bearer ${deployToken}`,
219
+ },
220
+ body: JSON.stringify(requestBody),
221
+ });
222
+ if (!response.ok) {
223
+ const errorText = await response.text();
224
+ out.error(`Upload failed: ${response.status} ${response.statusText}`, errorText);
225
+ process.exit(1);
226
+ }
227
+ // Handle SSE stream with progress updates
228
+ const result = (await (0, sse_1.handleSSEStream)(response, {
229
+ onProgress: (message) => {
230
+ out.progress(message);
231
+ },
232
+ }));
233
+ if (!result) {
234
+ out.error("Upload failed");
235
+ process.exit(1);
236
+ }
237
+ // Handle dryRun response
238
+ if (options.dryRun) {
239
+ if (result.errors && result.errors.length > 0) {
240
+ out.error("Validation failed");
241
+ for (const error of result.errors) {
242
+ console.error(` ${error}`);
243
+ }
244
+ process.exit(1);
245
+ }
246
+ else {
247
+ out.success("Validation passed - twist is ready to deploy");
248
+ out.info("Run without --dry-run to deploy", [`plot deploy`]);
249
+ }
250
+ return;
251
+ }
252
+ // Show permissions from API response
253
+ const permissions = result.permissions;
254
+ if (permissions && Object.keys(permissions).length > 0) {
255
+ out.info("Permissions:", []);
256
+ for (const [toolName, toolPermissions] of Object.entries(permissions)) {
257
+ console.log(` ${toolName}:`);
258
+ // Display each permission property
259
+ if (toolPermissions && typeof toolPermissions === "object") {
260
+ for (const [key, value] of Object.entries(toolPermissions)) {
261
+ if (Array.isArray(value)) {
262
+ if (value.length > 0) {
263
+ console.log(` ${key}:`);
264
+ for (const item of value) {
265
+ console.log(` - ${item}`);
266
+ }
267
+ }
268
+ else {
269
+ console.log(` ${key}: []`);
270
+ }
271
+ }
272
+ else {
273
+ console.log(` ${key}: ${JSON.stringify(value)}`);
274
+ }
275
+ }
276
+ }
277
+ }
278
+ }
279
+ // Show success with relevant info
280
+ out.success(`Deployed to ${environment} environment`);
281
+ }
282
+ catch (error) {
283
+ out.error("Upload failed", String(error));
284
+ process.exit(1);
285
+ }
286
+ }
287
+ catch (error) {
288
+ out.error("Build failed", String(error));
289
+ process.exit(1);
290
+ }
291
+ }
292
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../cli/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generateCommand = generateCommand;
40
+ const child_process_1 = require("child_process");
41
+ const dotenv = __importStar(require("dotenv"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const prompts_1 = __importDefault(require("prompts"));
45
+ const out = __importStar(require("../utils/output"));
46
+ const packageManager_1 = require("../utils/packageManager");
47
+ const sse_1 = require("../utils/sse");
48
+ const token_1 = require("../utils/token");
49
+ /**
50
+ * Check if files exist and prompt to overwrite
51
+ */
52
+ async function promptOverwrite(files) {
53
+ const existingFiles = files.filter((file) => fs.existsSync(file));
54
+ if (existingFiles.length === 0) {
55
+ return { overwrite: true, skip: new Set() };
56
+ }
57
+ out.warning(`${existingFiles.length} file(s) already exist`, existingFiles.map((file) => path.basename(file)));
58
+ const response = await (0, prompts_1.default)({
59
+ type: "select",
60
+ name: "action",
61
+ message: "What would you like to do?",
62
+ choices: [
63
+ { title: "Overwrite all", value: "overwrite" },
64
+ { title: "Skip existing files", value: "skip" },
65
+ { title: "Cancel generation", value: "cancel" },
66
+ ],
67
+ });
68
+ if (response.action === "cancel") {
69
+ out.plain("\nGeneration cancelled.");
70
+ process.exit(0);
71
+ }
72
+ if (response.action === "skip") {
73
+ return { overwrite: false, skip: new Set(existingFiles) };
74
+ }
75
+ return { overwrite: true, skip: new Set() };
76
+ }
77
+ async function generateCommand(options) {
78
+ const twistPath = path.resolve(process.cwd(), options.dir);
79
+ // Determine spec file path (default to plot-twist.md)
80
+ const specPath = options.spec
81
+ ? path.resolve(process.cwd(), options.spec)
82
+ : path.join(twistPath, "plot-twist.md");
83
+ // Check if spec file exists
84
+ if (!fs.existsSync(specPath)) {
85
+ out.error(`Spec file not found: ${path.relative(process.cwd(), specPath)}`, "Create a plot-twist.md file describing your twist, or use --spec to specify a different file");
86
+ process.exit(1);
87
+ }
88
+ // Read spec content
89
+ let specContent;
90
+ try {
91
+ specContent = fs.readFileSync(specPath, "utf-8");
92
+ }
93
+ catch (error) {
94
+ out.error("Failed to read spec file", String(error));
95
+ process.exit(1);
96
+ }
97
+ // Try to read package.json for twist ID
98
+ const packageJsonPath = path.join(twistPath, "package.json");
99
+ let twistId = options.id;
100
+ if (!twistId && fs.existsSync(packageJsonPath)) {
101
+ try {
102
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
103
+ twistId = packageJson.plotTwistId;
104
+ }
105
+ catch {
106
+ // Ignore errors
107
+ }
108
+ }
109
+ // Generate twist ID if not provided
110
+ if (!twistId) {
111
+ twistId = crypto.randomUUID();
112
+ }
113
+ // Load DEPLOY_TOKEN from multiple sources
114
+ let deployToken = options.deployToken;
115
+ const envPath = path.join(twistPath, ".env");
116
+ if (!deployToken) {
117
+ deployToken = process.env.PLOT_DEPLOY_TOKEN;
118
+ }
119
+ if (!deployToken && fs.existsSync(envPath)) {
120
+ const envConfig = dotenv.parse(fs.readFileSync(envPath));
121
+ deployToken = envConfig.DEPLOY_TOKEN;
122
+ }
123
+ if (!deployToken) {
124
+ const globalTokenPath = (0, token_1.getGlobalTokenPath)();
125
+ if (fs.existsSync(globalTokenPath)) {
126
+ try {
127
+ deployToken = fs.readFileSync(globalTokenPath, "utf-8").trim();
128
+ }
129
+ catch (error) {
130
+ console.warn(`Warning: Failed to read global token file: ${globalTokenPath}`);
131
+ }
132
+ }
133
+ }
134
+ // Prompt for token if not found
135
+ if (!deployToken) {
136
+ out.info("Authentication required", [
137
+ "Run 'plot login' for easiest setup",
138
+ "Or provide token via --deploy-token, PLOT_DEPLOY_TOKEN env var, or DEPLOY_TOKEN in .env",
139
+ ]);
140
+ const response = await (0, prompts_1.default)({
141
+ type: "password",
142
+ name: "token",
143
+ message: "Enter your deployment token:",
144
+ validate: (value) => value.length > 0 || "Token is required",
145
+ });
146
+ if (!response.token) {
147
+ out.plain("\nGeneration cancelled.");
148
+ process.exit(0);
149
+ }
150
+ deployToken = response.token;
151
+ // Save token to .env file for future use
152
+ const envContent = fs.existsSync(envPath)
153
+ ? fs.readFileSync(envPath, "utf-8")
154
+ : "";
155
+ if (!envContent.includes("DEPLOY_TOKEN=")) {
156
+ const newEnvContent = envContent +
157
+ (envContent.endsWith("\n") || !envContent ? "" : "\n") +
158
+ `DEPLOY_TOKEN=${deployToken}\n`;
159
+ fs.writeFileSync(envPath, newEnvContent);
160
+ out.success("Token saved to .env file");
161
+ }
162
+ }
163
+ // Call generate API
164
+ try {
165
+ const relativeSpecPath = path.relative(process.cwd(), specPath);
166
+ out.progress(`Generate twist from ${relativeSpecPath}...`);
167
+ const response = await fetch(`${options.apiUrl}/v1/twist/generate`, {
168
+ method: "POST",
169
+ headers: {
170
+ "Content-Type": "application/json",
171
+ Accept: "text/event-stream",
172
+ Authorization: `Bearer ${deployToken}`,
173
+ },
174
+ body: JSON.stringify({ spec: specContent }),
175
+ });
176
+ if (!response.ok) {
177
+ const errorText = await response.text();
178
+ out.error(`Generation failed: ${response.status} ${response.statusText}`, errorText);
179
+ process.exit(1);
180
+ }
181
+ // Handle SSE stream with progress updates
182
+ const source = (await (0, sse_1.handleSSEStream)(response, {
183
+ onProgress: (message) => {
184
+ out.progress(message);
185
+ },
186
+ }));
187
+ // Create twist directory if it doesn't exist
188
+ if (!fs.existsSync(twistPath)) {
189
+ fs.mkdirSync(twistPath, { recursive: true });
190
+ }
191
+ // Prepare list of files that will be created
192
+ const packageJsonPath = path.join(twistPath, "package.json");
193
+ const tsconfigPath = path.join(twistPath, "tsconfig.json");
194
+ const readmePath = path.join(twistPath, "README.md");
195
+ const twistsMdPath = path.join(twistPath, "AGENTS.md");
196
+ const claudeMdPath = path.join(twistPath, "CLAUDE.md");
197
+ const srcPath = path.join(twistPath, "src");
198
+ const sourceFiles = Object.keys(source.files).map((filename) => path.join(srcPath, filename));
199
+ const allFiles = [
200
+ packageJsonPath,
201
+ tsconfigPath,
202
+ readmePath,
203
+ twistsMdPath,
204
+ claudeMdPath,
205
+ ...sourceFiles,
206
+ ];
207
+ // Check for existing files and prompt to overwrite
208
+ const { skip } = await promptOverwrite(allFiles);
209
+ // Helper to write file if not skipped
210
+ const writeFile = (filePath, content) => {
211
+ if (!skip.has(filePath)) {
212
+ fs.writeFileSync(filePath, content);
213
+ out.success(`Created ${path.relative(twistPath, filePath)}`);
214
+ }
215
+ else {
216
+ out.info(`Skipped ${path.relative(twistPath, filePath)}`);
217
+ }
218
+ };
219
+ // Write package.json
220
+ const packageJson = {
221
+ name: twistId,
222
+ version: "1.0.0",
223
+ displayName: source.displayName,
224
+ plotTwistId: twistId,
225
+ scripts: {
226
+ lint: "plot lint",
227
+ deploy: "plot deploy",
228
+ logs: "plot logs",
229
+ },
230
+ dependencies: source.dependencies,
231
+ devDependencies: {
232
+ typescript: "latest",
233
+ },
234
+ };
235
+ writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
236
+ // Write tsconfig.json
237
+ const tsconfigContent = {
238
+ extends: "@plotday/twister/tsconfig.base.json",
239
+ include: ["src/*.ts"],
240
+ };
241
+ writeFile(tsconfigPath, JSON.stringify(tsconfigContent, null, 2) + "\n");
242
+ // Load and write template files
243
+ const templatesPath = path.join(__dirname, "..", "..", "bin", "templates");
244
+ // Write AGENTS.md (no template processing needed)
245
+ const twistsMdTemplate = fs.readFileSync(path.join(templatesPath, "AGENTS.template.md"), "utf-8");
246
+ writeFile(twistsMdPath, twistsMdTemplate);
247
+ // Write CLAUDE.md (no template processing needed)
248
+ const claudeMdTemplate = fs.readFileSync(path.join(templatesPath, "CLAUDE.template.md"), "utf-8");
249
+ writeFile(claudeMdPath, claudeMdTemplate);
250
+ // Write README.md with template replacements
251
+ let readmeTemplate = fs.readFileSync(path.join(templatesPath, "README.template.md"), "utf-8");
252
+ // Replace template variables
253
+ readmeTemplate = readmeTemplate.replace(/\{\{displayName\}\}/g, source.displayName);
254
+ readmeTemplate = readmeTemplate.replace(/\{\{packageManager\}\}/g, "pnpm");
255
+ writeFile(readmePath, readmeTemplate);
256
+ // Create src directory
257
+ if (!fs.existsSync(srcPath)) {
258
+ fs.mkdirSync(srcPath, { recursive: true });
259
+ }
260
+ // Write source files
261
+ for (const [filename, content] of Object.entries(source.files)) {
262
+ const filePath = path.join(srcPath, filename);
263
+ writeFile(filePath, content);
264
+ }
265
+ out.blank();
266
+ // Detect package manager and install dependencies
267
+ const packageManager = (0, packageManager_1.detectPackageManager)();
268
+ // Update @plotday/twist to latest and install packages
269
+ try {
270
+ out.progress("Updating Twist Creator to latest version...");
271
+ const updateCommand = packageManager === "npm"
272
+ ? "npm install @plotday/twist@latest"
273
+ : packageManager === "pnpm"
274
+ ? "pnpm add @plotday/twist@latest"
275
+ : "yarn add @plotday/twist@latest";
276
+ (0, child_process_1.execSync)(updateCommand, { cwd: twistPath, stdio: "ignore" });
277
+ out.progress("Installing dependencies...");
278
+ const installCommand = packageManager === "yarn" ? "yarn" : `${packageManager} install`;
279
+ (0, child_process_1.execSync)(installCommand, { cwd: twistPath, stdio: "ignore" });
280
+ out.success("Dependencies installed.");
281
+ }
282
+ catch (error) {
283
+ out.warning("Couldn't install dependencies", [
284
+ `Run '${packageManager} install @plotday/twist@latest' in ${options.dir}`,
285
+ `Then run '${packageManager === "yarn" ? "yarn" : `${packageManager} install`}'`,
286
+ ]);
287
+ }
288
+ out.blank();
289
+ out.success("Twist generated successfully!");
290
+ out.nextSteps([
291
+ "Review the generated code in src/",
292
+ `Run '${packageManager} run deploy' to deploy your twist`,
293
+ `Run '${packageManager} run logs' to watch for activity`,
294
+ ]);
295
+ }
296
+ catch (error) {
297
+ out.error("Generation failed", String(error));
298
+ process.exit(1);
299
+ }
300
+ }
301
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../cli/commands/generate.ts"],"names":[],"mappings":"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"}