patchwork-os 0.2.0-alpha.33 → 0.2.0-alpha.35

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 (270) hide show
  1. package/README.md +248 -48
  2. package/deploy/bootstrap-new-vps.sh +12 -12
  3. package/deploy/bootstrap-vps.sh +6 -3
  4. package/deploy/deploy-landing.sh +59 -2
  5. package/dist/bridge.js +35 -1
  6. package/dist/bridge.js.map +1 -1
  7. package/dist/commands/recipe.d.ts +11 -0
  8. package/dist/commands/recipe.js +32 -3
  9. package/dist/commands/recipe.js.map +1 -1
  10. package/dist/commands/recipeInstall.d.ts +79 -1
  11. package/dist/commands/recipeInstall.js +241 -13
  12. package/dist/commands/recipeInstall.js.map +1 -1
  13. package/dist/connectors/asana.d.ts +198 -0
  14. package/dist/connectors/asana.js +680 -0
  15. package/dist/connectors/asana.js.map +1 -0
  16. package/dist/connectors/baseConnector.d.ts +16 -0
  17. package/dist/connectors/baseConnector.js +107 -25
  18. package/dist/connectors/baseConnector.js.map +1 -1
  19. package/dist/connectors/discord.d.ts +150 -0
  20. package/dist/connectors/discord.js +544 -0
  21. package/dist/connectors/discord.js.map +1 -0
  22. package/dist/connectors/github.js +15 -7
  23. package/dist/connectors/github.js.map +1 -1
  24. package/dist/connectors/gitlab.d.ts +180 -0
  25. package/dist/connectors/gitlab.js +582 -0
  26. package/dist/connectors/gitlab.js.map +1 -0
  27. package/dist/connectors/gmail.js +45 -0
  28. package/dist/connectors/gmail.js.map +1 -1
  29. package/dist/connectors/googleDrive.d.ts +34 -0
  30. package/dist/connectors/googleDrive.js +305 -0
  31. package/dist/connectors/googleDrive.js.map +1 -0
  32. package/dist/connectors/htmlEscape.d.ts +5 -0
  33. package/dist/connectors/htmlEscape.js +13 -0
  34. package/dist/connectors/htmlEscape.js.map +1 -0
  35. package/dist/connectors/linear.js +26 -6
  36. package/dist/connectors/linear.js.map +1 -1
  37. package/dist/connectors/mcpOAuth.d.ts +2 -0
  38. package/dist/connectors/mcpOAuth.js +8 -4
  39. package/dist/connectors/mcpOAuth.js.map +1 -1
  40. package/dist/connectors/pagerduty.d.ts +160 -0
  41. package/dist/connectors/pagerduty.js +464 -0
  42. package/dist/connectors/pagerduty.js.map +1 -0
  43. package/dist/connectors/sentry.js +3 -2
  44. package/dist/connectors/sentry.js.map +1 -1
  45. package/dist/connectors/slack.d.ts +1 -1
  46. package/dist/connectors/slack.js +7 -4
  47. package/dist/connectors/slack.js.map +1 -1
  48. package/dist/featureFlags.d.ts +17 -11
  49. package/dist/featureFlags.js +52 -47
  50. package/dist/featureFlags.js.map +1 -1
  51. package/dist/index.js +262 -129
  52. package/dist/index.js.map +1 -1
  53. package/dist/oauth.js +3 -2
  54. package/dist/oauth.js.map +1 -1
  55. package/dist/recipeOrchestration.d.ts +7 -0
  56. package/dist/recipeOrchestration.js +154 -28
  57. package/dist/recipeOrchestration.js.map +1 -1
  58. package/dist/recipes/agentExecutor.d.ts +1 -0
  59. package/dist/recipes/agentExecutor.js +7 -0
  60. package/dist/recipes/agentExecutor.js.map +1 -1
  61. package/dist/recipes/captureForRunlog.d.ts +27 -0
  62. package/dist/recipes/captureForRunlog.js +128 -0
  63. package/dist/recipes/captureForRunlog.js.map +1 -0
  64. package/dist/recipes/chainedRunner.d.ts +39 -3
  65. package/dist/recipes/chainedRunner.js +183 -28
  66. package/dist/recipes/chainedRunner.js.map +1 -1
  67. package/dist/recipes/detectSilentFail.d.ts +34 -0
  68. package/dist/recipes/detectSilentFail.js +105 -0
  69. package/dist/recipes/detectSilentFail.js.map +1 -0
  70. package/dist/recipes/legacyRecipeCompat.d.ts +8 -0
  71. package/dist/recipes/legacyRecipeCompat.js +20 -1
  72. package/dist/recipes/legacyRecipeCompat.js.map +1 -1
  73. package/dist/recipes/manifest.js +21 -6
  74. package/dist/recipes/manifest.js.map +1 -1
  75. package/dist/recipes/migrations/index.d.ts +24 -0
  76. package/dist/recipes/migrations/index.js +55 -0
  77. package/dist/recipes/migrations/index.js.map +1 -0
  78. package/dist/recipes/migrations/types.d.ts +28 -0
  79. package/dist/recipes/migrations/types.js +2 -0
  80. package/dist/recipes/migrations/types.js.map +1 -0
  81. package/dist/recipes/migrations/v1.d.ts +11 -0
  82. package/dist/recipes/migrations/v1.js +18 -0
  83. package/dist/recipes/migrations/v1.js.map +1 -0
  84. package/dist/recipes/replayRun.d.ts +62 -0
  85. package/dist/recipes/replayRun.js +97 -0
  86. package/dist/recipes/replayRun.js.map +1 -0
  87. package/dist/recipes/scheduler.js +102 -11
  88. package/dist/recipes/scheduler.js.map +1 -1
  89. package/dist/recipes/schemaGenerator.js +3 -3
  90. package/dist/recipes/schemaGenerator.js.map +1 -1
  91. package/dist/recipes/templateEngine.js +8 -1
  92. package/dist/recipes/templateEngine.js.map +1 -1
  93. package/dist/recipes/toolRegistry.d.ts +5 -0
  94. package/dist/recipes/toolRegistry.js +9 -0
  95. package/dist/recipes/toolRegistry.js.map +1 -1
  96. package/dist/recipes/tools/asana.d.ts +16 -0
  97. package/dist/recipes/tools/asana.js +524 -0
  98. package/dist/recipes/tools/asana.js.map +1 -0
  99. package/dist/recipes/tools/discord.d.ts +18 -0
  100. package/dist/recipes/tools/discord.js +254 -0
  101. package/dist/recipes/tools/discord.js.map +1 -0
  102. package/dist/recipes/tools/github.js +29 -4
  103. package/dist/recipes/tools/github.js.map +1 -1
  104. package/dist/recipes/tools/gitlab.d.ts +11 -0
  105. package/dist/recipes/tools/gitlab.js +285 -0
  106. package/dist/recipes/tools/gitlab.js.map +1 -0
  107. package/dist/recipes/tools/gmail.d.ts +1 -1
  108. package/dist/recipes/tools/gmail.js +230 -6
  109. package/dist/recipes/tools/gmail.js.map +1 -1
  110. package/dist/recipes/tools/googleDrive.d.ts +1 -0
  111. package/dist/recipes/tools/googleDrive.js +55 -0
  112. package/dist/recipes/tools/googleDrive.js.map +1 -0
  113. package/dist/recipes/tools/index.d.ts +6 -0
  114. package/dist/recipes/tools/index.js +6 -0
  115. package/dist/recipes/tools/index.js.map +1 -1
  116. package/dist/recipes/tools/linear.d.ts +2 -1
  117. package/dist/recipes/tools/linear.js +222 -1
  118. package/dist/recipes/tools/linear.js.map +1 -1
  119. package/dist/recipes/tools/meetingNotes.d.ts +21 -0
  120. package/dist/recipes/tools/meetingNotes.js +701 -0
  121. package/dist/recipes/tools/meetingNotes.js.map +1 -0
  122. package/dist/recipes/tools/pagerduty.d.ts +15 -0
  123. package/dist/recipes/tools/pagerduty.js +451 -0
  124. package/dist/recipes/tools/pagerduty.js.map +1 -0
  125. package/dist/recipes/tools/slack.js +8 -2
  126. package/dist/recipes/tools/slack.js.map +1 -1
  127. package/dist/recipes/validation.js +54 -15
  128. package/dist/recipes/validation.js.map +1 -1
  129. package/dist/recipes/yamlRunner.d.ts +23 -2
  130. package/dist/recipes/yamlRunner.js +265 -60
  131. package/dist/recipes/yamlRunner.js.map +1 -1
  132. package/dist/recipesHttp.d.ts +60 -0
  133. package/dist/recipesHttp.js +418 -3
  134. package/dist/recipesHttp.js.map +1 -1
  135. package/dist/runLog.d.ts +64 -2
  136. package/dist/runLog.js +116 -2
  137. package/dist/runLog.js.map +1 -1
  138. package/dist/server.d.ts +21 -0
  139. package/dist/server.js +387 -8
  140. package/dist/server.js.map +1 -1
  141. package/dist/streamableHttp.d.ts +31 -1
  142. package/dist/streamableHttp.js +20 -2
  143. package/dist/streamableHttp.js.map +1 -1
  144. package/dist/tools/activityLog.d.ts +2 -0
  145. package/dist/tools/addLinearComment.d.ts +1 -0
  146. package/dist/tools/batchLsp.d.ts +3 -0
  147. package/dist/tools/bridgeDoctor.d.ts +1 -0
  148. package/dist/tools/bridgeStatus.d.ts +1 -0
  149. package/dist/tools/cancelClaudeTask.d.ts +1 -0
  150. package/dist/tools/checkDocumentDirty.d.ts +1 -0
  151. package/dist/tools/clipboard.d.ts +2 -0
  152. package/dist/tools/closeTabs.d.ts +2 -0
  153. package/dist/tools/codeLens.d.ts +1 -0
  154. package/dist/tools/contextBundle.d.ts +1 -0
  155. package/dist/tools/createIssueFromAIComment.d.ts +1 -0
  156. package/dist/tools/createLinearIssue.d.ts +1 -0
  157. package/dist/tools/ctxGetTaskContext.d.ts +1 -0
  158. package/dist/tools/ctxQueryTraces.d.ts +1 -0
  159. package/dist/tools/ctxSaveTrace.d.ts +1 -0
  160. package/dist/tools/debug.d.ts +4 -0
  161. package/dist/tools/decorations.d.ts +2 -0
  162. package/dist/tools/documentLinks.d.ts +1 -0
  163. package/dist/tools/editText.d.ts +1 -0
  164. package/dist/tools/enrichCommit.d.ts +1 -0
  165. package/dist/tools/enrichStackTrace.d.ts +1 -0
  166. package/dist/tools/explainDiagnostic.d.ts +1 -0
  167. package/dist/tools/explainSymbol.d.ts +1 -0
  168. package/dist/tools/fetchCalendarEvents.d.ts +1 -0
  169. package/dist/tools/fetchGithubIssue.d.ts +1 -0
  170. package/dist/tools/fetchGithubPR.d.ts +1 -0
  171. package/dist/tools/fetchLinearIssue.d.ts +1 -0
  172. package/dist/tools/fetchSentryIssue.d.ts +1 -0
  173. package/dist/tools/fetchSlackProfile.d.ts +1 -0
  174. package/dist/tools/fileOperations.d.ts +3 -0
  175. package/dist/tools/fileWatcher.d.ts +2 -0
  176. package/dist/tools/findFiles.d.ts +1 -0
  177. package/dist/tools/findRelatedTests.d.ts +1 -0
  178. package/dist/tools/fixAllLintErrors.d.ts +1 -0
  179. package/dist/tools/foldingRanges.d.ts +1 -0
  180. package/dist/tools/formatDocument.d.ts +1 -0
  181. package/dist/tools/generateTests.d.ts +1 -0
  182. package/dist/tools/getAIComments.d.ts +1 -0
  183. package/dist/tools/getAnalyticsReport.d.ts +1 -0
  184. package/dist/tools/getArchitectureContext.d.ts +1 -0
  185. package/dist/tools/getBufferContent.d.ts +1 -0
  186. package/dist/tools/getChangeImpact.d.ts +1 -0
  187. package/dist/tools/getClaudeTaskStatus.d.ts +1 -0
  188. package/dist/tools/getCodeCoverage.d.ts +1 -0
  189. package/dist/tools/getCommitsForIssue.d.ts +1 -0
  190. package/dist/tools/getConnectorStatus.d.ts +1 -0
  191. package/dist/tools/getCurrentSelection.d.ts +2 -0
  192. package/dist/tools/getDebugState.d.ts +1 -0
  193. package/dist/tools/getDependencyTree.d.ts +1 -0
  194. package/dist/tools/getDiagnostics.d.ts +1 -0
  195. package/dist/tools/getDiffFromHandoff.d.ts +1 -0
  196. package/dist/tools/getDocumentSymbols.d.ts +1 -0
  197. package/dist/tools/getFileTree.d.ts +1 -0
  198. package/dist/tools/getGitDiff.d.ts +1 -0
  199. package/dist/tools/getGitHotspots.d.ts +1 -0
  200. package/dist/tools/getGitLog.d.ts +1 -0
  201. package/dist/tools/getGitStatus.d.ts +1 -0
  202. package/dist/tools/getImportTree.d.ts +1 -0
  203. package/dist/tools/getImportedSignatures.d.ts +1 -0
  204. package/dist/tools/getOpenEditors.d.ts +1 -0
  205. package/dist/tools/getPRTemplate.d.ts +1 -0
  206. package/dist/tools/getProjectContext.d.ts +1 -0
  207. package/dist/tools/getProjectInfo.d.ts +1 -0
  208. package/dist/tools/getSecurityAdvisories.d.ts +1 -0
  209. package/dist/tools/getSessionUsage.d.ts +1 -0
  210. package/dist/tools/getSymbolHistory.d.ts +1 -0
  211. package/dist/tools/getToolCapabilities.d.ts +1 -0
  212. package/dist/tools/getTypeSignature.d.ts +1 -0
  213. package/dist/tools/getWorkspaceFolders.d.ts +1 -0
  214. package/dist/tools/getWorkspaceSettings.d.ts +1 -0
  215. package/dist/tools/gitHistory.d.ts +2 -0
  216. package/dist/tools/gitWrite.d.ts +11 -0
  217. package/dist/tools/github/actions.d.ts +2 -0
  218. package/dist/tools/github/composite.d.ts +3 -0
  219. package/dist/tools/github/issues.d.ts +4 -0
  220. package/dist/tools/github/pr.d.ts +7 -0
  221. package/dist/tools/handoffNote.d.ts +2 -0
  222. package/dist/tools/hoverAtCursor.d.ts +1 -0
  223. package/dist/tools/httpClient.d.ts +2 -0
  224. package/dist/tools/inlayHints.d.ts +1 -0
  225. package/dist/tools/launchQuickTask.d.ts +1 -0
  226. package/dist/tools/listClaudeTasks.d.ts +1 -0
  227. package/dist/tools/listTerminals.d.ts +1 -0
  228. package/dist/tools/lsp.d.ts +14 -0
  229. package/dist/tools/navigateToSymbolByName.d.ts +1 -0
  230. package/dist/tools/openDiff.d.ts +1 -0
  231. package/dist/tools/openFile.d.ts +1 -0
  232. package/dist/tools/openInBrowser.d.ts +1 -0
  233. package/dist/tools/organizeImports.d.ts +1 -0
  234. package/dist/tools/performanceReport.d.ts +1 -0
  235. package/dist/tools/planPersistence.d.ts +5 -0
  236. package/dist/tools/previewEdit.d.ts +1 -0
  237. package/dist/tools/refactorAnalyze.d.ts +1 -0
  238. package/dist/tools/refactorPreview.d.ts +1 -0
  239. package/dist/tools/replaceBlock.d.ts +1 -0
  240. package/dist/tools/resumeClaudeTask.d.ts +1 -0
  241. package/dist/tools/runClaudeTask.d.ts +1 -0
  242. package/dist/tools/runCommand.d.ts +1 -0
  243. package/dist/tools/runTests.d.ts +1 -0
  244. package/dist/tools/saveDocument.d.ts +1 -0
  245. package/dist/tools/screenshotAndAnnotate.d.ts +1 -0
  246. package/dist/tools/searchAndReplace.d.ts +1 -0
  247. package/dist/tools/searchTools.d.ts +1 -0
  248. package/dist/tools/searchWorkspace.d.ts +1 -0
  249. package/dist/tools/selectionRanges.d.ts +1 -0
  250. package/dist/tools/semanticTokens.d.ts +1 -0
  251. package/dist/tools/setActiveWorkspaceFolder.d.ts +1 -0
  252. package/dist/tools/signatureHelp.d.ts +1 -0
  253. package/dist/tools/slackListChannels.d.ts +1 -0
  254. package/dist/tools/slackPostMessage.d.ts +1 -0
  255. package/dist/tools/slackPostMessage.js +1 -1
  256. package/dist/tools/slackPostMessage.js.map +1 -1
  257. package/dist/tools/terminal.d.ts +6 -0
  258. package/dist/tools/testTraceToSource.d.ts +1 -0
  259. package/dist/tools/transaction.d.ts +4 -0
  260. package/dist/tools/typeHierarchy.d.ts +1 -0
  261. package/dist/tools/updateLinearIssue.d.ts +1 -0
  262. package/dist/tools/utils.d.ts +2 -0
  263. package/dist/tools/utils.js.map +1 -1
  264. package/dist/tools/vscodeCommands.d.ts +2 -0
  265. package/dist/tools/vscodeTasks.d.ts +2 -0
  266. package/dist/tools/workspaceSettings.d.ts +1 -0
  267. package/package.json +20 -4
  268. package/templates/recipes/project-health-check.yaml +1 -1
  269. package/dist/schemas/dry-run-plan.v1.json +0 -139
  270. package/dist/schemas/recipe.v1.json +0 -684
@@ -89,14 +89,70 @@ async function gmailFetchThread(id, deps) {
89
89
  messages: data.messages ?? [],
90
90
  });
91
91
  }
92
- function sinceToGmailQuery(since) {
93
- if (since.includes("d")) {
94
- return `${since.replace("d", "")}d`;
92
+ async function gmailGetMessage(id, deps) {
93
+ const errorResult = (msg) => JSON.stringify({ id, subject: "", body: "", links: [], error: msg });
94
+ let token;
95
+ try {
96
+ if (!deps.getGmailToken)
97
+ return errorResult("Gmail not connected");
98
+ token = await deps.getGmailToken();
99
+ }
100
+ catch (err) {
101
+ return errorResult(err instanceof Error ? err.message : "Gmail not connected");
102
+ }
103
+ const fetch = deps.fetchFn || globalThis.fetch;
104
+ const res = await fetch(`https://www.googleapis.com/gmail/v1/users/me/messages/${id}?format=full`, { headers: { Authorization: `Bearer ${token}` } });
105
+ if (!res.ok)
106
+ return errorResult("Gmail API error");
107
+ const data = (await res.json());
108
+ const hdrs = data.payload?.headers ?? [];
109
+ const subject = getHeader(hdrs, "Subject");
110
+ function extractText(payload) {
111
+ if (payload.body?.data) {
112
+ return Buffer.from(payload.body.data, "base64url").toString("utf-8");
113
+ }
114
+ for (const part of payload.parts ?? []) {
115
+ if (part.mimeType === "text/plain" && part.body?.data) {
116
+ return Buffer.from(part.body.data, "base64url").toString("utf-8");
117
+ }
118
+ if (part.mimeType === "text/html" && part.body?.data) {
119
+ return Buffer.from(part.body.data, "base64url").toString("utf-8");
120
+ }
121
+ for (const sub of part.parts ?? []) {
122
+ if (sub.mimeType === "text/plain" && sub.body?.data) {
123
+ return Buffer.from(sub.body.data, "base64url").toString("utf-8");
124
+ }
125
+ }
126
+ }
127
+ return data.snippet ?? "";
95
128
  }
96
- if (since.includes("h")) {
97
- return `${since.replace("h", "")}h`;
129
+ const body = data.payload ? extractText(data.payload) : (data.snippet ?? "");
130
+ const links = [...body.matchAll(/https?:\/\/[^\s"'<>]+/g)].map((m) => m[0]);
131
+ return JSON.stringify({ id, subject, body: body.slice(0, 16_000), links });
132
+ }
133
+ // Exported for test coverage of the regression fix.
134
+ //
135
+ // Pre-fix this function silently coerced any unrecognized format
136
+ // (`"2026-01-01"`, `"1 week ago"`, free text) → `"1d"`. The audit
137
+ // caught this in `morning-brief*` and `inbox-triage` recipes — users
138
+ // specifying an explicit date got the last 24 hours instead with no
139
+ // indication anything was wrong.
140
+ //
141
+ // It also broke on `"7days"` because the naive `.replace("d", "")`
142
+ // stripped EVERY 'd' in the string → `"7days".replace("d","") + "d"`
143
+ // = `"7aysd"`. Two bugs masking each other.
144
+ //
145
+ // Gmail's `newer_than:` operator accepts `<number><unit>` where unit
146
+ // is one of `d` (days), `h` (hours), `m` (months), `y` (years).
147
+ // Anything else throws so the runner's error path triggers loudly.
148
+ export function sinceToGmailQuery(since) {
149
+ const trimmed = since.trim();
150
+ // Strict regex: one or more digits + a single valid unit.
151
+ const match = /^(\d+)([dhmy])$/.exec(trimmed);
152
+ if (match) {
153
+ return `${match[1]}${match[2]}`;
98
154
  }
99
- return "1d";
155
+ throw new Error(`invalid since='${since}' for gmail.fetch_unread — expected '<N>(d|h|m|y)' (e.g. '24h', '7d'), got unparseable input`);
100
156
  }
101
157
  // ============================================================================
102
158
  // gmail.fetch_unread
@@ -174,6 +230,39 @@ registerTool({
174
230
  },
175
231
  });
176
232
  // ============================================================================
233
+ // gmail.getMessage
234
+ // ============================================================================
235
+ registerTool({
236
+ id: "gmail.getMessage",
237
+ namespace: "gmail",
238
+ description: "Fetch a single Gmail message by ID with full body text and extracted links.",
239
+ paramsSchema: {
240
+ type: "object",
241
+ properties: {
242
+ id: { type: "string", description: "Gmail message ID" },
243
+ into: CommonSchemas.into,
244
+ },
245
+ required: ["id"],
246
+ },
247
+ outputSchema: {
248
+ type: "object",
249
+ properties: {
250
+ id: { type: "string" },
251
+ subject: { type: "string" },
252
+ body: { type: "string" },
253
+ links: { type: "array", items: { type: "string" } },
254
+ error: { type: "string" },
255
+ },
256
+ },
257
+ riskDefault: "low",
258
+ isWrite: false,
259
+ isConnector: true,
260
+ execute: async ({ params, deps }) => {
261
+ const id = String(params.id ?? "");
262
+ return gmailGetMessage(id, deps);
263
+ },
264
+ });
265
+ // ============================================================================
177
266
  // gmail.fetch_thread
178
267
  // ============================================================================
179
268
  registerTool({
@@ -207,4 +296,139 @@ registerTool({
207
296
  return gmailFetchThread(id, deps);
208
297
  },
209
298
  });
299
+ // ============================================================================
300
+ // gmail.resolveMeetingNotes
301
+ // ============================================================================
302
+ registerTool({
303
+ id: "gmail.resolveMeetingNotes",
304
+ namespace: "gmail",
305
+ description: "Takes gmail.search results and resolves the full meeting notes content for each email. For direct Meet summary emails, returns the body. For 'Notes by Gemini' emails with a linked Google Doc, fetches the full message body, extracts the docs.google.com URL, and retrieves the plain-text doc content. Returns a JSON array of { emailId, subject, source, content }.",
306
+ paramsSchema: {
307
+ type: "object",
308
+ properties: {
309
+ emails: {
310
+ description: "Output of gmail.search: { count, messages: [{id, subject, from, date, snippet}] } or JSON string thereof.",
311
+ },
312
+ into: CommonSchemas.into,
313
+ },
314
+ required: ["emails"],
315
+ },
316
+ outputSchema: {
317
+ type: "array",
318
+ items: {
319
+ type: "object",
320
+ properties: {
321
+ emailId: { type: "string" },
322
+ subject: { type: "string" },
323
+ source: { type: "string", enum: ["email", "drive"] },
324
+ content: { type: "string" },
325
+ },
326
+ },
327
+ },
328
+ riskDefault: "low",
329
+ isWrite: false,
330
+ isConnector: true,
331
+ execute: async ({ params, deps }) => {
332
+ let messages = [];
333
+ try {
334
+ const raw = params.emails;
335
+ const parsed = typeof raw === "string" ? JSON.parse(raw) : raw;
336
+ if (parsed !== null &&
337
+ typeof parsed === "object" &&
338
+ "messages" in parsed) {
339
+ messages = parsed.messages ?? [];
340
+ }
341
+ else if (Array.isArray(parsed)) {
342
+ messages = parsed;
343
+ }
344
+ }
345
+ catch {
346
+ return JSON.stringify([]);
347
+ }
348
+ const results = [];
349
+ for (const msg of messages) {
350
+ const subject = msg.subject ?? "";
351
+ const isGemini = /notes by gemini|document shared with you|shared a document|invited you to (?:edit|view|comment)/i.test(subject) ||
352
+ /notes by gemini|docs\.google\.com\/document/i.test(msg.snippet ?? "");
353
+ if (!isGemini) {
354
+ // Direct Meet summary — use snippet as content
355
+ results.push({
356
+ emailId: msg.id,
357
+ subject,
358
+ source: "email",
359
+ content: msg.snippet ?? "",
360
+ });
361
+ continue;
362
+ }
363
+ // Gemini notes — fetch full message to get Drive URL
364
+ let driveUrl = "";
365
+ try {
366
+ const fullMsg = await gmailGetMessage(msg.id, deps);
367
+ const parsed = JSON.parse(fullMsg);
368
+ const links = parsed.links ?? [];
369
+ driveUrl = links.find((l) => l.includes("docs.google.com")) ?? "";
370
+ if (!driveUrl) {
371
+ // Try extracting from body text
372
+ const bodyMatch = /https?:\/\/docs\.google\.com\/[^\s"'<>]+/.exec(parsed.body ?? "");
373
+ driveUrl = bodyMatch?.[0] ?? "";
374
+ }
375
+ }
376
+ catch {
377
+ results.push({
378
+ emailId: msg.id,
379
+ subject,
380
+ source: "email",
381
+ content: msg.snippet ?? "",
382
+ });
383
+ continue;
384
+ }
385
+ if (!driveUrl) {
386
+ results.push({
387
+ emailId: msg.id,
388
+ subject,
389
+ source: "email",
390
+ content: msg.snippet ?? "",
391
+ });
392
+ continue;
393
+ }
394
+ // Fetch the Drive doc
395
+ try {
396
+ if (!deps.getDriveToken) {
397
+ results.push({
398
+ emailId: msg.id,
399
+ subject,
400
+ source: "email",
401
+ content: msg.snippet ?? "",
402
+ });
403
+ continue;
404
+ }
405
+ const token = await deps.getDriveToken();
406
+ const { fetchDocContent, fetchDocName } = await import("../../connectors/googleDrive.js");
407
+ const [content, docName] = await Promise.all([
408
+ fetchDocContent(driveUrl, token),
409
+ fetchDocName(driveUrl, token),
410
+ ]);
411
+ // Prepend the doc's display name as an H1 so the downstream parser
412
+ // can pick it up as the meeting title even when the body is sparse
413
+ // (e.g. an empty Gemini Notes doc generated before the meeting).
414
+ const titledContent = docName ? `# ${docName}\n\n${content}` : content;
415
+ results.push({
416
+ emailId: msg.id,
417
+ subject,
418
+ source: "drive",
419
+ content: titledContent,
420
+ });
421
+ }
422
+ catch {
423
+ results.push({
424
+ emailId: msg.id,
425
+ subject,
426
+ source: "email",
427
+ content: msg.snippet ?? "",
428
+ });
429
+ }
430
+ }
431
+ return JSON.stringify(results);
432
+ },
433
+ });
210
434
  //# sourceMappingURL=gmail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../../src/recipes/tools/gmail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../../src/recipes/tools/gmail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,KAAK,UAAU,WAAW,CACxB,KAAa,EACb,GAAW,EACX,IAGC;IAED,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE,CAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAEzD,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAChB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;IAE/C,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,OAAO,GAAG,2DAA2D,kBAAkB,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;QACzH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YACnC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAErC,CAAC;QACF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEpC,oCAAoC;QACpC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,SAAS,GAAG,yDAAyD,CAAC,CAAC,EAAE,oDAAoD,CAAC;YACpI,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBACvC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;aAC9C,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBAClB,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACpE,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAIrC,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YAC3C,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;gBACnC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;gBAC7B,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;gBAC7B,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;aAC5C,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,OAA+C,EAC/C,IAAY;IAEZ,OAAO,CACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK;QACvE,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG;SACP,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;SACjD,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;SACzB,IAAI,EAAE;SACN,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,EAAU,EACV,IAGC;IAED,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE,CAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAE5D,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAChB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,wDAAwD,EAAE,kBAAkB,EAC5E,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,CAClD,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IAC3D,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IAE3E,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,OAAO;QACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,EAAU,EACV,IAGC;IAED,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE,CAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAEvE,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,WAAW,CAAC,qBAAqB,CAAC,CAAC;QACnE,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAChB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,yDAAyD,EAAE,cAAc,EACzE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,CAClD,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAEnD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAY7B,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE3C,SAAS,WAAW,CAAC,OAAyC;QAC5D,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACtD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACrD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;oBACpD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,oDAAoD;AACpD,EAAE;AACF,iEAAiE;AACjE,kEAAkE;AAClE,qEAAqE;AACrE,oEAAoE;AACpE,iCAAiC;AACjC,EAAE;AACF,mEAAmE;AACnE,qEAAqE;AACrE,4CAA4C;AAC5C,EAAE;AACF,qEAAqE;AACrE,gEAAgE;AAChE,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,0DAA0D;IAC1D,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,8FAA8F,CACtH,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,YAAY,CAAC;IACX,EAAE,EAAE,oBAAoB;IACxB,SAAS,EAAE,OAAO;IAClB,WAAW,EAAE,sDAAsD;IACnE,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,GAAG,EAAE;gBACH,GAAG,aAAa,CAAC,GAAG;gBACpB,OAAO,EAAE,EAAE;aACZ;YACD,IAAI,EAAE,aAAa,CAAC,IAAI;SACzB;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B;KACF;IACD,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,wBAAwB,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,YAAY,CAAC;IACX,EAAE,EAAE,cAAc;IAClB,SAAS,EAAE,OAAO;IAClB,WAAW,EAAE,0CAA0C;IACvD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sDAAsD;aACpE;YACD,GAAG,EAAE;gBACH,GAAG,aAAa,CAAC,GAAG;gBACpB,OAAO,EAAE,EAAE;aACZ;YACD,IAAI,EAAE,aAAa,CAAC,IAAI;SACzB;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B;KACF;IACD,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,YAAY,CAAC;IACX,EAAE,EAAE,kBAAkB;IACtB,SAAS,EAAE,OAAO;IAClB,WAAW,EACT,6EAA6E;IAC/E,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACvD,IAAI,EAAE,aAAa,CAAC,IAAI;SACzB;QACD,QAAQ,EAAE,CAAC,IAAI,CAAC;KACjB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACnD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B;KACF;IACD,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,OAAO,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,YAAY,CAAC;IACX,EAAE,EAAE,oBAAoB;IACxB,SAAS,EAAE,OAAO;IAClB,WAAW,EAAE,sCAAsC;IACnD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;aAC/B;YACD,IAAI,EAAE,aAAa,CAAC,IAAI;SACzB;QACD,QAAQ,EAAE,CAAC,IAAI,CAAC;KACjB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B;KACF;IACD,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,OAAO,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;CACF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,YAAY,CAAC;IACX,EAAE,EAAE,2BAA2B;IAC/B,SAAS,EAAE,OAAO;IAClB,WAAW,EACT,2WAA2W;IAC7W,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,WAAW,EACT,2GAA2G;aAC9G;YACD,IAAI,EAAE,aAAa,CAAC,IAAI;SACzB;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,OAAO;QACb,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;gBACpD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC5B;SACF;KACF;IACD,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QAOlC,IAAI,QAAQ,GAAgB,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,MAAM,MAAM,GACV,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5D,IACE,MAAM,KAAK,IAAI;gBACf,OAAO,MAAM,KAAK,QAAQ;gBAC1B,UAAU,IAAK,MAAiB,EAChC,CAAC;gBACD,QAAQ,GAAI,MAAoC,CAAC,QAAQ,IAAI,EAAE,CAAC;YAClE,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,QAAQ,GAAG,MAAqB,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAKR,EAAE,CAAC;QAER,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,MAAM,QAAQ,GACZ,kGAAkG,CAAC,IAAI,CACrG,OAAO,CACR;gBACD,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAEzE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,+CAA+C;gBAC/C,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,GAAG,CAAC,EAAE;oBACf,OAAO;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;iBAC3B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,qDAAqD;YACrD,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAGhC,CAAC;gBACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,gCAAgC;oBAChC,MAAM,SAAS,GAAG,0CAA0C,CAAC,IAAI,CAC/D,MAAM,CAAC,IAAI,IAAI,EAAE,CAClB,CAAC;oBACF,QAAQ,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,GAAG,CAAC,EAAE;oBACf,OAAO;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;iBAC3B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,GAAG,CAAC,EAAE;oBACf,OAAO;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;iBAC3B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,sBAAsB;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC;wBACX,OAAO,EAAE,GAAG,CAAC,EAAE;wBACf,OAAO;wBACP,MAAM,EAAE,OAAO;wBACf,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;qBAC3B,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzC,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CACpD,iCAAiC,CAClC,CAAC;gBACF,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC3C,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;oBAChC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;iBAC9B,CAAC,CAAC;gBACH,mEAAmE;gBACnE,mEAAmE;gBACnE,iEAAiE;gBACjE,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,GAAG,CAAC,EAAE;oBACf,OAAO;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,aAAa;iBACvB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,GAAG,CAAC,EAAE;oBACf,OAAO;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ import { CommonSchemas, registerTool } from "../toolRegistry.js";
2
+ registerTool({
3
+ id: "drive.fetchDoc",
4
+ namespace: "drive",
5
+ description: "Fetch the plain-text content of a Google Doc by URL or file ID.",
6
+ paramsSchema: {
7
+ type: "object",
8
+ properties: {
9
+ url: { type: "string" },
10
+ into: CommonSchemas.into,
11
+ },
12
+ required: ["url"],
13
+ },
14
+ outputSchema: {
15
+ type: "object",
16
+ properties: {
17
+ content: { type: "string" },
18
+ error: { type: "string" },
19
+ },
20
+ },
21
+ riskDefault: "low",
22
+ isWrite: false,
23
+ isConnector: true,
24
+ execute: async ({ params, deps }) => {
25
+ const url = String(params.url ?? "");
26
+ let token;
27
+ try {
28
+ if (!deps.getDriveToken) {
29
+ return JSON.stringify({
30
+ content: "",
31
+ error: "Google Drive not connected",
32
+ });
33
+ }
34
+ token = await deps.getDriveToken();
35
+ }
36
+ catch (err) {
37
+ return JSON.stringify({
38
+ content: "",
39
+ error: err instanceof Error ? err.message : "Google Drive not connected",
40
+ });
41
+ }
42
+ try {
43
+ const { fetchDocContent } = await import("../../connectors/googleDrive.js");
44
+ const content = await fetchDocContent(url, token);
45
+ return JSON.stringify({ content });
46
+ }
47
+ catch (err) {
48
+ return JSON.stringify({
49
+ content: "",
50
+ error: err instanceof Error ? err.message : "Drive fetch failed",
51
+ });
52
+ }
53
+ },
54
+ });
55
+ //# sourceMappingURL=googleDrive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"googleDrive.js","sourceRoot":"","sources":["../../../src/recipes/tools/googleDrive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,YAAY,CAAC;IACX,EAAE,EAAE,gBAAgB;IACpB,SAAS,EAAE,OAAO;IAClB,WAAW,EACT,iEAAiE;IACnE,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,IAAI,EAAE,aAAa,CAAC,IAAI;SACzB;QACD,QAAQ,EAAE,CAAC,KAAK,CAAC;KAClB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B;KACF;IACD,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAErC,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,4BAA4B;iBACpC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,EAAE;gBACX,KAAK,EACH,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B;aACpE,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CACtC,iCAAiC,CAClC,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;aACjE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -6,8 +6,11 @@
6
6
  import "./file.js";
7
7
  import "./git.js";
8
8
  import "./diagnostics.js";
9
+ import "./asana.js";
9
10
  import "./gmail.js";
11
+ import "./googleDrive.js";
10
12
  import "./github.js";
13
+ import "./gitlab.js";
11
14
  import "./linear.js";
12
15
  import "./calendar.js";
13
16
  import "./slack.js";
@@ -17,6 +20,9 @@ import "./zendesk.js";
17
20
  import "./intercom.js";
18
21
  import "./hubspot.js";
19
22
  import "./datadog.js";
23
+ import "./discord.js";
24
+ import "./pagerduty.js";
20
25
  import "./stripe.js";
26
+ import "./meetingNotes.js";
21
27
  export type { RegisteredTool, ToolContext, ToolExecute, ToolMetadata, } from "../toolRegistry.js";
22
28
  export { CommonOutputSchemas, CommonSchemas, clearRegistry, executeTool, getNamespaces, getTool, hasTool, listTools, registerTool, } from "../toolRegistry.js";
@@ -8,8 +8,11 @@ import "./file.js";
8
8
  import "./git.js";
9
9
  import "./diagnostics.js";
10
10
  // Connector-based tools
11
+ import "./asana.js";
11
12
  import "./gmail.js";
13
+ import "./googleDrive.js";
12
14
  import "./github.js";
15
+ import "./gitlab.js";
13
16
  import "./linear.js";
14
17
  import "./calendar.js";
15
18
  import "./slack.js";
@@ -19,7 +22,10 @@ import "./zendesk.js";
19
22
  import "./intercom.js";
20
23
  import "./hubspot.js";
21
24
  import "./datadog.js";
25
+ import "./discord.js";
26
+ import "./pagerduty.js";
22
27
  import "./stripe.js";
28
+ import "./meetingNotes.js";
23
29
  // Re-export registry for convenience
24
30
  export { CommonOutputSchemas, CommonSchemas, clearRegistry, executeTool, getNamespaces, getTool, hasTool, listTools, registerTool, } from "../toolRegistry.js";
25
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/recipes/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,aAAa;AACb,OAAO,WAAW,CAAC;AACnB,OAAO,UAAU,CAAC;AAClB,OAAO,kBAAkB,CAAC;AAE1B,wBAAwB;AACxB,OAAO,YAAY,CAAC;AACpB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,aAAa,CAAC;AACrB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,aAAa,CAAC;AAQrB,qCAAqC;AACrC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,YAAY,GACb,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/recipes/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,aAAa;AACb,OAAO,WAAW,CAAC;AACnB,OAAO,UAAU,CAAC;AAClB,OAAO,kBAAkB,CAAC;AAE1B,wBAAwB;AACxB,OAAO,YAAY,CAAC;AACpB,OAAO,YAAY,CAAC;AACpB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,aAAa,CAAC;AACrB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,gBAAgB,CAAC;AACxB,OAAO,aAAa,CAAC;AACrB,OAAO,mBAAmB,CAAC;AAQ3B,qCAAqC;AACrC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,YAAY,GACb,MAAM,oBAAoB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Linear tools — linear.list_issues
2
+ * Linear tools — linear.list_issues, linear.createIssue, linear.updateIssue,
3
+ * linear.addComment.
3
4
  *
4
5
  * Self-registering tool module for the recipe tool registry.
5
6
  */
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Linear tools — linear.list_issues
2
+ * Linear tools — linear.list_issues, linear.createIssue, linear.updateIssue,
3
+ * linear.addComment.
3
4
  *
4
5
  * Self-registering tool module for the recipe tool registry.
5
6
  */
@@ -80,4 +81,224 @@ registerTool({
80
81
  }
81
82
  },
82
83
  });
84
+ // ============================================================================
85
+ // linear.createIssue
86
+ // ============================================================================
87
+ registerTool({
88
+ id: "linear.createIssue",
89
+ namespace: "linear",
90
+ description: "Create a new Linear issue. Returns the created issue's id, identifier, url, and title.",
91
+ paramsSchema: {
92
+ type: "object",
93
+ required: ["team", "title"],
94
+ properties: {
95
+ team: {
96
+ type: "string",
97
+ description: "Team name or ID (e.g., 'Engineering', 'Sales')",
98
+ },
99
+ title: { type: "string", description: "Issue title" },
100
+ description: {
101
+ type: "string",
102
+ description: "Issue description (Markdown supported)",
103
+ },
104
+ priority: {
105
+ type: "number",
106
+ description: "Priority: 1=urgent, 2=high, 3=medium, 4=low",
107
+ },
108
+ labels: {
109
+ type: "array",
110
+ items: { type: "string" },
111
+ description: "Label names or IDs to attach",
112
+ },
113
+ into: CommonSchemas.into,
114
+ },
115
+ },
116
+ outputSchema: {
117
+ type: "object",
118
+ properties: {
119
+ id: { type: "string" },
120
+ identifier: { type: "string" },
121
+ title: { type: "string" },
122
+ url: { type: "string" },
123
+ error: { type: "string" },
124
+ },
125
+ },
126
+ riskDefault: "medium",
127
+ isWrite: true,
128
+ isConnector: true,
129
+ execute: async ({ params }) => {
130
+ const { loadTokens, createIssue } = await import("../../connectors/linear.js");
131
+ if (!loadTokens()) {
132
+ return JSON.stringify({ error: "Linear not connected" });
133
+ }
134
+ try {
135
+ const result = await createIssue({
136
+ team: String(params.team),
137
+ title: String(params.title),
138
+ description: params.description
139
+ ? String(params.description)
140
+ : undefined,
141
+ priority: typeof params.priority === "number" ? params.priority : undefined,
142
+ labels: Array.isArray(params.labels)
143
+ ? params.labels
144
+ : undefined,
145
+ });
146
+ return JSON.stringify(result);
147
+ }
148
+ catch (err) {
149
+ return JSON.stringify({
150
+ error: err instanceof Error ? err.message : String(err),
151
+ });
152
+ }
153
+ },
154
+ });
155
+ // ============================================================================
156
+ // linear.updateIssue
157
+ // ============================================================================
158
+ registerTool({
159
+ id: "linear.updateIssue",
160
+ namespace: "linear",
161
+ description: "Update an existing Linear issue (title, description, priority, state, assignee, labels).",
162
+ paramsSchema: {
163
+ type: "object",
164
+ required: ["id"],
165
+ properties: {
166
+ id: {
167
+ type: "string",
168
+ description: "Issue identifier (e.g., 'ENG-42') or UUID",
169
+ },
170
+ title: { type: "string" },
171
+ description: { type: "string" },
172
+ priority: {
173
+ type: "number",
174
+ description: "Priority: 1=urgent, 2=high, 3=medium, 4=low",
175
+ },
176
+ state: {
177
+ type: "string",
178
+ description: "State name (e.g., 'In Progress')",
179
+ },
180
+ assignee: {
181
+ type: "string",
182
+ description: "Assignee name or email",
183
+ },
184
+ labels: {
185
+ type: "array",
186
+ items: { type: "string" },
187
+ },
188
+ into: CommonSchemas.into,
189
+ },
190
+ },
191
+ outputSchema: {
192
+ type: "object",
193
+ properties: {
194
+ id: { type: "string" },
195
+ identifier: { type: "string" },
196
+ title: { type: "string" },
197
+ url: { type: "string" },
198
+ error: { type: "string" },
199
+ },
200
+ },
201
+ riskDefault: "medium",
202
+ isWrite: true,
203
+ isConnector: true,
204
+ execute: async ({ params }) => {
205
+ const { loadTokens, updateIssue } = await import("../../connectors/linear.js");
206
+ if (!loadTokens()) {
207
+ return JSON.stringify({ error: "Linear not connected" });
208
+ }
209
+ try {
210
+ const result = await updateIssue({
211
+ id: String(params.id),
212
+ title: params.title ? String(params.title) : undefined,
213
+ description: params.description
214
+ ? String(params.description)
215
+ : undefined,
216
+ priority: typeof params.priority === "number" ? params.priority : undefined,
217
+ state: params.state ? String(params.state) : undefined,
218
+ assignee: params.assignee ? String(params.assignee) : undefined,
219
+ labels: Array.isArray(params.labels)
220
+ ? params.labels
221
+ : undefined,
222
+ });
223
+ return JSON.stringify(result);
224
+ }
225
+ catch (err) {
226
+ return JSON.stringify({
227
+ error: err instanceof Error ? err.message : String(err),
228
+ });
229
+ }
230
+ },
231
+ });
232
+ // ============================================================================
233
+ // linear.addComment (write-gated)
234
+ // ============================================================================
235
+ registerTool({
236
+ id: "linear.addComment",
237
+ namespace: "linear",
238
+ description: "Append a comment to a Linear issue's timeline. Body supports Markdown.",
239
+ paramsSchema: {
240
+ type: "object",
241
+ required: ["issue_id", "body"],
242
+ properties: {
243
+ issue_id: {
244
+ type: "string",
245
+ description: "Issue identifier (e.g., 'ENG-42'), UUID, or full URL",
246
+ },
247
+ body: {
248
+ type: "string",
249
+ description: "Comment body (Markdown supported, non-empty)",
250
+ minLength: 1,
251
+ },
252
+ into: CommonSchemas.into,
253
+ },
254
+ },
255
+ outputSchema: {
256
+ type: "object",
257
+ properties: {
258
+ ok: { type: "boolean" },
259
+ id: { type: "string" },
260
+ body: { type: "string" },
261
+ url: { type: "string" },
262
+ error: { type: "string" },
263
+ },
264
+ },
265
+ riskDefault: "low",
266
+ isWrite: true,
267
+ isConnector: true,
268
+ execute: async ({ params }) => {
269
+ const { loadTokens, addComment } = await import("../../connectors/linear.js");
270
+ if (!loadTokens()) {
271
+ return JSON.stringify({ ok: false, error: "Linear not connected" });
272
+ }
273
+ const issueId = typeof params.issue_id === "string" ? params.issue_id : "";
274
+ const body = typeof params.body === "string" ? params.body : "";
275
+ if (!issueId) {
276
+ return JSON.stringify({
277
+ ok: false,
278
+ error: "addComment requires issue_id",
279
+ });
280
+ }
281
+ if (!body) {
282
+ return JSON.stringify({
283
+ ok: false,
284
+ error: "addComment requires non-empty body",
285
+ });
286
+ }
287
+ try {
288
+ const comment = await addComment(issueId, body);
289
+ return JSON.stringify({
290
+ ok: true,
291
+ id: comment.id,
292
+ body: comment.body,
293
+ url: comment.url,
294
+ });
295
+ }
296
+ catch (err) {
297
+ return JSON.stringify({
298
+ ok: false,
299
+ error: err instanceof Error ? err.message : String(err),
300
+ });
301
+ }
302
+ },
303
+ });
83
304
  //# sourceMappingURL=linear.js.map