runline 0.2.1 → 0.2.2

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 (189) hide show
  1. package/dist/plugins/actionNetwork/src/index.js +118 -25
  2. package/dist/plugins/activeCampaign/src/index.js +184 -38
  3. package/dist/plugins/adalo/src/index.js +40 -8
  4. package/dist/plugins/affinity/src/index.js +100 -20
  5. package/dist/plugins/agileCrm/src/index.js +115 -27
  6. package/dist/plugins/airtable/src/index.js +94 -19
  7. package/dist/plugins/airtop/src/index.js +266 -62
  8. package/dist/plugins/apiTemplateIo/src/index.js +25 -5
  9. package/dist/plugins/asana/src/index.js +195 -41
  10. package/dist/plugins/autopilot/src/index.js +39 -8
  11. package/dist/plugins/bambooHr/src/index.js +109 -22
  12. package/dist/plugins/bannerbear/src/index.js +36 -8
  13. package/dist/plugins/baserow/src/index.js +35 -7
  14. package/dist/plugins/beeminder/src/index.js +198 -40
  15. package/dist/plugins/bitly/src/index.js +46 -10
  16. package/dist/plugins/bitwarden/src/index.js +167 -36
  17. package/dist/plugins/box/src/index.js +172 -37
  18. package/dist/plugins/brandfetch/src/index.js +5 -1
  19. package/dist/plugins/brevo/src/index.js +136 -29
  20. package/dist/plugins/bubble/src/index.js +76 -17
  21. package/dist/plugins/chargebee/src/index.js +35 -7
  22. package/dist/plugins/circleci/src/index.js +50 -10
  23. package/dist/plugins/ciscoWebex/src/index.js +131 -27
  24. package/dist/plugins/clearbit/src/index.js +76 -17
  25. package/dist/plugins/clickup/src/index.js +500 -107
  26. package/dist/plugins/clockify/src/index.js +229 -47
  27. package/dist/plugins/cloudflare/src/index.js +28 -6
  28. package/dist/plugins/cockpit/src/index.js +54 -12
  29. package/dist/plugins/coda/src/index.js +81 -19
  30. package/dist/plugins/coingecko/src/index.js +157 -33
  31. package/dist/plugins/contentful/src/index.js +85 -17
  32. package/dist/plugins/convertkit/src/index.js +74 -18
  33. package/dist/plugins/copper/src/index.js +59 -11
  34. package/dist/plugins/cortex/src/index.js +55 -13
  35. package/dist/plugins/currents/src/index.js +310 -71
  36. package/dist/plugins/customerIo/src/index.js +112 -23
  37. package/dist/plugins/databricks/src/index.js +549 -115
  38. package/dist/plugins/deepl/src/index.js +26 -6
  39. package/dist/plugins/demio/src/index.js +56 -11
  40. package/dist/plugins/dhl/src/index.js +16 -3
  41. package/dist/plugins/discord/src/index.js +141 -31
  42. package/dist/plugins/discourse/src/index.js +136 -31
  43. package/dist/plugins/disqus/src/index.js +96 -20
  44. package/dist/plugins/docker/src/index.js +20 -4
  45. package/dist/plugins/drift/src/index.js +19 -5
  46. package/dist/plugins/dropbox/src/index.js +139 -30
  47. package/dist/plugins/dropcontact/src/index.js +21 -4
  48. package/dist/plugins/egoi/src/index.js +61 -15
  49. package/dist/plugins/elasticsearch/src/index.js +59 -13
  50. package/dist/plugins/emelia/src/index.js +95 -19
  51. package/dist/plugins/erpnext/src/index.js +74 -15
  52. package/dist/plugins/facebookGraph/src/index.js +52 -11
  53. package/dist/plugins/freshdesk/src/index.js +220 -48
  54. package/dist/plugins/freshservice/src/index.js +39 -9
  55. package/dist/plugins/freshworksCrm/src/index.js +58 -12
  56. package/dist/plugins/getresponse/src/index.js +87 -18
  57. package/dist/plugins/ghost/src/index.js +114 -26
  58. package/dist/plugins/github/src/index.js +483 -109
  59. package/dist/plugins/gitlab/src/index.js +193 -45
  60. package/dist/plugins/gong/src/index.js +68 -14
  61. package/dist/plugins/gotify/src/index.js +43 -9
  62. package/dist/plugins/gotowebinar/src/index.js +233 -47
  63. package/dist/plugins/grafana/src/index.js +92 -21
  64. package/dist/plugins/graphql/src/index.js +38 -8
  65. package/dist/plugins/grist/src/index.js +52 -10
  66. package/dist/plugins/hackernews/src/index.js +32 -6
  67. package/dist/plugins/halopsa/src/index.js +131 -26
  68. package/dist/plugins/harvest/src/index.js +182 -42
  69. package/dist/plugins/helpscout/src/index.js +153 -31
  70. package/dist/plugins/highlevel/src/index.js +291 -58
  71. package/dist/plugins/homeAssistant/src/index.js +124 -26
  72. package/dist/plugins/hubspot/src/index.js +163 -29
  73. package/dist/plugins/humanticAi/src/index.js +54 -5
  74. package/dist/plugins/hunter/src/index.js +21 -4
  75. package/dist/plugins/intercom/src/index.js +95 -20
  76. package/dist/plugins/iterable/src/index.js +96 -20
  77. package/dist/plugins/jenkins/src/index.js +75 -17
  78. package/dist/plugins/jira/src/index.js +193 -43
  79. package/dist/plugins/keap/src/index.js +222 -56
  80. package/dist/plugins/kobotoolbox/src/index.js +113 -25
  81. package/dist/plugins/lemlist/src/index.js +79 -18
  82. package/dist/plugins/linear/src/index.js +86 -19
  83. package/dist/plugins/lingvanex/src/index.js +38 -8
  84. package/dist/plugins/linkedin/src/index.js +37 -8
  85. package/dist/plugins/lonescale/src/index.js +41 -9
  86. package/dist/plugins/magento/src/index.js +98 -27
  87. package/dist/plugins/mailcheck/src/index.js +11 -2
  88. package/dist/plugins/mailchimp/src/index.js +193 -42
  89. package/dist/plugins/mailerlite/src/index.js +61 -12
  90. package/dist/plugins/mailgun/src/index.js +39 -7
  91. package/dist/plugins/mailjet/src/index.js +141 -30
  92. package/dist/plugins/mandrill/src/index.js +67 -14
  93. package/dist/plugins/marketstack/src/index.js +56 -10
  94. package/dist/plugins/matrix/src/index.js +97 -20
  95. package/dist/plugins/mattermost/src/index.js +124 -26
  96. package/dist/plugins/mautic/src/index.js +129 -26
  97. package/dist/plugins/medium/src/index.js +64 -13
  98. package/dist/plugins/messagebird/src/index.js +80 -15
  99. package/dist/plugins/metabase/src/index.js +57 -12
  100. package/dist/plugins/misp/src/index.js +135 -33
  101. package/dist/plugins/mocean/src/index.js +33 -7
  102. package/dist/plugins/monday/src/index.js +97 -23
  103. package/dist/plugins/monicaCrm/src/index.js +112 -23
  104. package/dist/plugins/msg91/src/index.js +11 -2
  105. package/dist/plugins/nasa/src/index.js +108 -21
  106. package/dist/plugins/netlify/src/index.js +28 -6
  107. package/dist/plugins/netscalerAdc/src/index.js +144 -29
  108. package/dist/plugins/nextcloud/src/index.js +103 -20
  109. package/dist/plugins/nocodb/src/index.js +57 -11
  110. package/dist/plugins/notion/src/index.js +148 -37
  111. package/dist/plugins/npm/src/index.js +59 -12
  112. package/dist/plugins/odoo/src/index.js +102 -20
  113. package/dist/plugins/okta/src/index.js +50 -10
  114. package/dist/plugins/oneSimpleApi/src/index.js +84 -17
  115. package/dist/plugins/onfleet/src/index.js +139 -32
  116. package/dist/plugins/openThesaurus/src/index.js +46 -9
  117. package/dist/plugins/openweathermap/src/index.js +31 -6
  118. package/dist/plugins/oura/src/index.js +36 -7
  119. package/dist/plugins/paddle/src/index.js +80 -17
  120. package/dist/plugins/pagerduty/src/index.js +53 -12
  121. package/dist/plugins/paypal/src/index.js +51 -11
  122. package/dist/plugins/peekalink/src/index.js +12 -3
  123. package/dist/plugins/phantombuster/src/index.js +39 -8
  124. package/dist/plugins/philipsHue/src/index.js +64 -13
  125. package/dist/plugins/pipedrive/src/index.js +167 -45
  126. package/dist/plugins/plivo/src/index.js +43 -8
  127. package/dist/plugins/postbin/src/index.js +9 -2
  128. package/dist/plugins/posthog/src/index.js +50 -13
  129. package/dist/plugins/profitwell/src/index.js +24 -5
  130. package/dist/plugins/pushbullet/src/index.js +45 -9
  131. package/dist/plugins/pushcut/src/index.js +31 -6
  132. package/dist/plugins/pushover/src/index.js +51 -10
  133. package/dist/plugins/quickbase/src/index.js +66 -13
  134. package/dist/plugins/quickbooks/src/index.js +86 -19
  135. package/dist/plugins/quickchart/src/index.js +35 -7
  136. package/dist/plugins/raindrop/src/index.js +54 -13
  137. package/dist/plugins/reddit/src/index.js +73 -18
  138. package/dist/plugins/rocketchat/src/index.js +47 -9
  139. package/dist/plugins/rundeck/src/index.js +26 -5
  140. package/dist/plugins/salesforce/src/index.js +161 -31
  141. package/dist/plugins/salesmate/src/index.js +75 -16
  142. package/dist/plugins/securityScorecard/src/index.js +73 -15
  143. package/dist/plugins/segment/src/index.js +21 -4
  144. package/dist/plugins/sendgrid/src/index.js +102 -24
  145. package/dist/plugins/sendy/src/index.js +54 -11
  146. package/dist/plugins/sentry/src/index.js +174 -34
  147. package/dist/plugins/servicenow/src/index.js +120 -27
  148. package/dist/plugins/shopify/src/index.js +53 -12
  149. package/dist/plugins/signl4/src/index.js +16 -3
  150. package/dist/plugins/slack/src/index.js +407 -105
  151. package/dist/plugins/sms77/src/index.js +26 -5
  152. package/dist/plugins/splunk/src/index.js +186 -45
  153. package/dist/plugins/spotify/src/index.js +265 -66
  154. package/dist/plugins/stackby/src/index.js +18 -6
  155. package/dist/plugins/storyblok/src/index.js +57 -11
  156. package/dist/plugins/strapi/src/index.js +63 -12
  157. package/dist/plugins/strava/src/index.js +58 -13
  158. package/dist/plugins/stripe/src/index.js +143 -30
  159. package/dist/plugins/supabase/src/index.js +49 -10
  160. package/dist/plugins/syncromsp/src/index.js +245 -67
  161. package/dist/plugins/tapfiliate/src/index.js +57 -14
  162. package/dist/plugins/telegram/src/index.js +202 -39
  163. package/dist/plugins/thehive/src/index.js +271 -66
  164. package/dist/plugins/thehiveProject/src/index.js +457 -89
  165. package/dist/plugins/todoist/src/index.js +326 -77
  166. package/dist/plugins/travisci/src/index.js +35 -8
  167. package/dist/plugins/trello/src/index.js +204 -46
  168. package/dist/plugins/twake/src/index.js +10 -2
  169. package/dist/plugins/twilio/src/index.js +56 -11
  170. package/dist/plugins/twist/src/index.js +241 -48
  171. package/dist/plugins/twitter/src/index.js +128 -30
  172. package/dist/plugins/unleashedSoftware/src/index.js +30 -6
  173. package/dist/plugins/uplead/src/index.js +9 -2
  174. package/dist/plugins/uproc/src/index.js +31 -6
  175. package/dist/plugins/uptimerobot/src/index.js +119 -25
  176. package/dist/plugins/urlscanio/src/index.js +25 -6
  177. package/dist/plugins/vero/src/index.js +68 -13
  178. package/dist/plugins/vonage/src/index.js +32 -6
  179. package/dist/plugins/wekan/src/index.js +297 -52
  180. package/dist/plugins/woocommerce/src/index.js +57 -12
  181. package/dist/plugins/wordpress/src/index.js +94 -18
  182. package/dist/plugins/xero/src/index.js +79 -13
  183. package/dist/plugins/yourls/src/index.js +33 -6
  184. package/dist/plugins/zammad/src/index.js +139 -36
  185. package/dist/plugins/zendesk/src/index.js +201 -48
  186. package/dist/plugins/zoho/src/index.js +88 -21
  187. package/dist/plugins/zoom/src/index.js +41 -7
  188. package/dist/plugins/zulip/src/index.js +101 -20
  189. package/package.json +1 -1
@@ -8,9 +8,16 @@ async function apiRequest(domain, email, apiToken, method, endpoint, body, qs) {
8
8
  }
9
9
  const opts = {
10
10
  method,
11
- headers: { Authorization: `Basic ${btoa(`${email}:${apiToken}`)}`, "Content-Type": "application/json", Accept: "application/json" },
11
+ headers: {
12
+ Authorization: `Basic ${btoa(`${email}:${apiToken}`)}`,
13
+ "Content-Type": "application/json",
14
+ Accept: "application/json",
15
+ },
12
16
  };
13
- if (body && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE")
17
+ if (body &&
18
+ Object.keys(body).length > 0 &&
19
+ method !== "GET" &&
20
+ method !== "DELETE")
14
21
  opts.body = JSON.stringify(body);
15
22
  const res = await fetch(url.toString(), opts);
16
23
  if (!res.ok)
@@ -37,26 +44,69 @@ export default function jira(rl) {
37
44
  rl.setName("jira");
38
45
  rl.setVersion("0.1.0");
39
46
  rl.setConnectionSchema({
40
- domain: { type: "string", required: true, description: "Jira domain (e.g. https://mycompany.atlassian.net)", env: "JIRA_DOMAIN" },
41
- email: { type: "string", required: true, description: "Jira account email", env: "JIRA_EMAIL" },
42
- apiToken: { type: "string", required: true, description: "Jira API token", env: "JIRA_API_TOKEN" },
47
+ domain: {
48
+ type: "string",
49
+ required: true,
50
+ description: "Jira domain (e.g. https://mycompany.atlassian.net)",
51
+ env: "JIRA_DOMAIN",
52
+ },
53
+ email: {
54
+ type: "string",
55
+ required: true,
56
+ description: "Jira account email",
57
+ env: "JIRA_EMAIL",
58
+ },
59
+ apiToken: {
60
+ type: "string",
61
+ required: true,
62
+ description: "Jira API token",
63
+ env: "JIRA_API_TOKEN",
64
+ },
43
65
  });
44
66
  // ── Issue ───────────────────────────────────────────
45
67
  rl.registerAction("issue.create", {
46
68
  description: "Create an issue",
47
69
  inputSchema: {
48
- projectKey: { type: "string", required: true, description: "Project key (e.g. PROJ)" },
49
- issueType: { type: "string", required: true, description: "Issue type (Bug, Task, Story, Epic...)" },
70
+ projectKey: {
71
+ type: "string",
72
+ required: true,
73
+ description: "Project key (e.g. PROJ)",
74
+ },
75
+ issueType: {
76
+ type: "string",
77
+ required: true,
78
+ description: "Issue type (Bug, Task, Story, Epic...)",
79
+ },
50
80
  summary: { type: "string", required: true, description: "Issue summary" },
51
- description: { type: "string", required: false, description: "Description" },
52
- assigneeId: { type: "string", required: false, description: "Assignee account ID" },
53
- priority: { type: "string", required: false, description: "Priority name (Highest, High, Medium, Low, Lowest)" },
81
+ description: {
82
+ type: "string",
83
+ required: false,
84
+ description: "Description",
85
+ },
86
+ assigneeId: {
87
+ type: "string",
88
+ required: false,
89
+ description: "Assignee account ID",
90
+ },
91
+ priority: {
92
+ type: "string",
93
+ required: false,
94
+ description: "Priority name (Highest, High, Medium, Low, Lowest)",
95
+ },
54
96
  labels: { type: "array", required: false, description: "Labels" },
55
- parentKey: { type: "string", required: false, description: "Parent issue key (for subtasks)" },
56
- customFields: { type: "object", required: false, description: "Custom fields" },
97
+ parentKey: {
98
+ type: "string",
99
+ required: false,
100
+ description: "Parent issue key (for subtasks)",
101
+ },
102
+ customFields: {
103
+ type: "object",
104
+ required: false,
105
+ description: "Custom fields",
106
+ },
57
107
  },
58
108
  async execute(input, ctx) {
59
- const { projectKey, issueType, summary, description: desc, assigneeId, priority, labels, parentKey, customFields } = input;
109
+ const { projectKey, issueType, summary, description: desc, assigneeId, priority, labels, parentKey, customFields, } = input;
60
110
  const fields = {
61
111
  project: { key: projectKey },
62
112
  issuetype: { name: issueType },
@@ -80,9 +130,21 @@ export default function jira(rl) {
80
130
  rl.registerAction("issue.get", {
81
131
  description: "Get an issue",
82
132
  inputSchema: {
83
- issueKey: { type: "string", required: true, description: "Issue key (e.g. PROJ-123)" },
84
- fields: { type: "string", required: false, description: "Comma-separated fields to return" },
85
- expand: { type: "string", required: false, description: "Comma-separated expansions" },
133
+ issueKey: {
134
+ type: "string",
135
+ required: true,
136
+ description: "Issue key (e.g. PROJ-123)",
137
+ },
138
+ fields: {
139
+ type: "string",
140
+ required: false,
141
+ description: "Comma-separated fields to return",
142
+ },
143
+ expand: {
144
+ type: "string",
145
+ required: false,
146
+ description: "Comma-separated expansions",
147
+ },
86
148
  },
87
149
  async execute(input, ctx) {
88
150
  const { issueKey, fields, expand } = (input ?? {});
@@ -98,8 +160,16 @@ export default function jira(rl) {
98
160
  description: "Search issues using JQL",
99
161
  inputSchema: {
100
162
  jql: { type: "string", required: true, description: "JQL query" },
101
- fields: { type: "array", required: false, description: "Fields to return" },
102
- maxResults: { type: "number", required: false, description: "Max results" },
163
+ fields: {
164
+ type: "array",
165
+ required: false,
166
+ description: "Fields to return",
167
+ },
168
+ maxResults: {
169
+ type: "number",
170
+ required: false,
171
+ description: "Max results",
172
+ },
103
173
  startAt: { type: "number", required: false, description: "Start index" },
104
174
  },
105
175
  async execute(input, ctx) {
@@ -119,8 +189,16 @@ export default function jira(rl) {
119
189
  inputSchema: {
120
190
  issueKey: { type: "string", required: true, description: "Issue key" },
121
191
  fields: { type: "object", required: false, description: "Fields to set" },
122
- update: { type: "object", required: false, description: "Update operations" },
123
- transition: { type: "object", required: false, description: "Transition {id}" },
192
+ update: {
193
+ type: "object",
194
+ required: false,
195
+ description: "Update operations",
196
+ },
197
+ transition: {
198
+ type: "object",
199
+ required: false,
200
+ description: "Transition {id}",
201
+ },
124
202
  },
125
203
  async execute(input, ctx) {
126
204
  const { issueKey, fields, update, transition } = input;
@@ -136,19 +214,34 @@ export default function jira(rl) {
136
214
  });
137
215
  rl.registerAction("issue.delete", {
138
216
  description: "Delete an issue",
139
- inputSchema: { issueKey: { type: "string", required: true, description: "Issue key" } },
140
- async execute(input, ctx) { await jr(ctx, "DELETE", `/api/2/issue/${input.issueKey}`); return { success: true }; },
217
+ inputSchema: {
218
+ issueKey: { type: "string", required: true, description: "Issue key" },
219
+ },
220
+ async execute(input, ctx) {
221
+ await jr(ctx, "DELETE", `/api/2/issue/${input.issueKey}`);
222
+ return { success: true };
223
+ },
141
224
  });
142
225
  rl.registerAction("issue.transition", {
143
226
  description: "Transition an issue to a new status",
144
227
  inputSchema: {
145
228
  issueKey: { type: "string", required: true, description: "Issue key" },
146
- transitionId: { type: "string", required: true, description: "Transition ID" },
147
- comment: { type: "string", required: false, description: "Comment to add" },
229
+ transitionId: {
230
+ type: "string",
231
+ required: true,
232
+ description: "Transition ID",
233
+ },
234
+ comment: {
235
+ type: "string",
236
+ required: false,
237
+ description: "Comment to add",
238
+ },
148
239
  },
149
240
  async execute(input, ctx) {
150
241
  const { issueKey, transitionId, comment } = input;
151
- const body = { transition: { id: transitionId } };
242
+ const body = {
243
+ transition: { id: transitionId },
244
+ };
152
245
  if (comment)
153
246
  body.update = { comment: [{ add: { body: comment } }] };
154
247
  return jr(ctx, "POST", `/api/2/issue/${issueKey}/transitions`, body);
@@ -156,13 +249,21 @@ export default function jira(rl) {
156
249
  });
157
250
  rl.registerAction("issue.getTransitions", {
158
251
  description: "Get available transitions for an issue",
159
- inputSchema: { issueKey: { type: "string", required: true, description: "Issue key" } },
160
- async execute(input, ctx) { return jr(ctx, "GET", `/api/2/issue/${input.issueKey}/transitions`); },
252
+ inputSchema: {
253
+ issueKey: { type: "string", required: true, description: "Issue key" },
254
+ },
255
+ async execute(input, ctx) {
256
+ return jr(ctx, "GET", `/api/2/issue/${input.issueKey}/transitions`);
257
+ },
161
258
  });
162
259
  rl.registerAction("issue.getChangelog", {
163
260
  description: "Get issue changelog",
164
- inputSchema: { issueKey: { type: "string", required: true, description: "Issue key" } },
165
- async execute(input, ctx) { return jr(ctx, "GET", `/api/2/issue/${input.issueKey}/changelog`); },
261
+ inputSchema: {
262
+ issueKey: { type: "string", required: true, description: "Issue key" },
263
+ },
264
+ async execute(input, ctx) {
265
+ return jr(ctx, "GET", `/api/2/issue/${input.issueKey}/changelog`);
266
+ },
166
267
  });
167
268
  rl.registerAction("issue.notify", {
168
269
  description: "Send notification about an issue",
@@ -170,11 +271,19 @@ export default function jira(rl) {
170
271
  issueKey: { type: "string", required: true, description: "Issue key" },
171
272
  subject: { type: "string", required: true, description: "Email subject" },
172
273
  htmlBody: { type: "string", required: true, description: "HTML body" },
173
- to: { type: "object", required: true, description: "{users: [{accountId}], groups: [{name}]}" },
274
+ to: {
275
+ type: "object",
276
+ required: true,
277
+ description: "{users: [{accountId}], groups: [{name}]}",
278
+ },
174
279
  },
175
280
  async execute(input, ctx) {
176
281
  const { issueKey, subject, htmlBody, to } = input;
177
- return jr(ctx, "POST", `/api/2/issue/${issueKey}/notify`, { subject, htmlBody, to });
282
+ return jr(ctx, "POST", `/api/2/issue/${issueKey}/notify`, {
283
+ subject,
284
+ htmlBody,
285
+ to,
286
+ });
178
287
  },
179
288
  });
180
289
  // ── Issue Comment ───────────────────────────────────
@@ -186,38 +295,79 @@ export default function jira(rl) {
186
295
  },
187
296
  async execute(input, ctx) {
188
297
  const { issueKey, body: commentBody } = input;
189
- return jr(ctx, "POST", `/api/2/issue/${issueKey}/comment`, { body: commentBody });
298
+ return jr(ctx, "POST", `/api/2/issue/${issueKey}/comment`, {
299
+ body: commentBody,
300
+ });
190
301
  },
191
302
  });
192
303
  rl.registerAction("issueComment.get", {
193
304
  description: "Get a comment",
194
- inputSchema: { issueKey: { type: "string", required: true, description: "Issue key" }, commentId: { type: "string", required: true, description: "Comment ID" } },
195
- async execute(input, ctx) { const { issueKey, commentId } = input; return jr(ctx, "GET", `/api/2/issue/${issueKey}/comment/${commentId}`); },
305
+ inputSchema: {
306
+ issueKey: { type: "string", required: true, description: "Issue key" },
307
+ commentId: { type: "string", required: true, description: "Comment ID" },
308
+ },
309
+ async execute(input, ctx) {
310
+ const { issueKey, commentId } = input;
311
+ return jr(ctx, "GET", `/api/2/issue/${issueKey}/comment/${commentId}`);
312
+ },
196
313
  });
197
314
  rl.registerAction("issueComment.list", {
198
315
  description: "List comments on an issue",
199
- inputSchema: { issueKey: { type: "string", required: true, description: "Issue key" } },
200
- async execute(input, ctx) { return jr(ctx, "GET", `/api/2/issue/${input.issueKey}/comment`); },
316
+ inputSchema: {
317
+ issueKey: { type: "string", required: true, description: "Issue key" },
318
+ },
319
+ async execute(input, ctx) {
320
+ return jr(ctx, "GET", `/api/2/issue/${input.issueKey}/comment`);
321
+ },
201
322
  });
202
323
  rl.registerAction("issueComment.update", {
203
324
  description: "Update a comment",
204
- inputSchema: { issueKey: { type: "string", required: true, description: "Issue key" }, commentId: { type: "string", required: true, description: "Comment ID" }, body: { type: "string", required: true, description: "New body" } },
205
- async execute(input, ctx) { const { issueKey, commentId, body: b } = input; return jr(ctx, "PUT", `/api/2/issue/${issueKey}/comment/${commentId}`, { body: b }); },
325
+ inputSchema: {
326
+ issueKey: { type: "string", required: true, description: "Issue key" },
327
+ commentId: { type: "string", required: true, description: "Comment ID" },
328
+ body: { type: "string", required: true, description: "New body" },
329
+ },
330
+ async execute(input, ctx) {
331
+ const { issueKey, commentId, body: b } = input;
332
+ return jr(ctx, "PUT", `/api/2/issue/${issueKey}/comment/${commentId}`, {
333
+ body: b,
334
+ });
335
+ },
206
336
  });
207
337
  rl.registerAction("issueComment.delete", {
208
338
  description: "Delete a comment",
209
- inputSchema: { issueKey: { type: "string", required: true, description: "Issue key" }, commentId: { type: "string", required: true, description: "Comment ID" } },
210
- async execute(input, ctx) { const { issueKey, commentId } = input; await jr(ctx, "DELETE", `/api/2/issue/${issueKey}/comment/${commentId}`); return { success: true }; },
339
+ inputSchema: {
340
+ issueKey: { type: "string", required: true, description: "Issue key" },
341
+ commentId: { type: "string", required: true, description: "Comment ID" },
342
+ },
343
+ async execute(input, ctx) {
344
+ const { issueKey, commentId } = input;
345
+ await jr(ctx, "DELETE", `/api/2/issue/${issueKey}/comment/${commentId}`);
346
+ return { success: true };
347
+ },
211
348
  });
212
349
  // ── User ────────────────────────────────────────────
213
350
  rl.registerAction("user.get", {
214
351
  description: "Get a user by account ID",
215
- inputSchema: { accountId: { type: "string", required: true, description: "Account ID" } },
216
- async execute(input, ctx) { return jr(ctx, "GET", "/api/2/user", undefined, { accountId: input.accountId }); },
352
+ inputSchema: {
353
+ accountId: { type: "string", required: true, description: "Account ID" },
354
+ },
355
+ async execute(input, ctx) {
356
+ return jr(ctx, "GET", "/api/2/user", undefined, {
357
+ accountId: input.accountId,
358
+ });
359
+ },
217
360
  });
218
361
  rl.registerAction("user.search", {
219
362
  description: "Search users",
220
- inputSchema: { query: { type: "string", required: true, description: "Search query" }, maxResults: { type: "number", required: false, description: "Max results" } },
363
+ inputSchema: {
364
+ query: { type: "string", required: true, description: "Search query" },
365
+ maxResults: {
366
+ type: "number",
367
+ required: false,
368
+ description: "Max results",
369
+ },
370
+ },
221
371
  async execute(input, ctx) {
222
372
  const { query, maxResults } = input;
223
373
  const qs = { query };