runline 0.2.1 → 0.3.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 (203) hide show
  1. package/dist/commands/auth.d.ts +7 -0
  2. package/dist/commands/auth.js +96 -0
  3. package/dist/config/loader.d.ts +11 -0
  4. package/dist/config/loader.js +46 -0
  5. package/dist/core/engine.js +7 -1
  6. package/dist/core/oauth.d.ts +46 -0
  7. package/dist/core/oauth.js +145 -0
  8. package/dist/index.d.ts +4 -2
  9. package/dist/index.js +2 -1
  10. package/dist/main.js +28 -0
  11. package/dist/plugin/api.d.ts +7 -1
  12. package/dist/plugin/api.js +7 -0
  13. package/dist/plugin/types.d.ts +47 -0
  14. package/dist/plugins/actionNetwork/src/index.js +118 -25
  15. package/dist/plugins/activeCampaign/src/index.js +184 -38
  16. package/dist/plugins/adalo/src/index.js +40 -8
  17. package/dist/plugins/affinity/src/index.js +100 -20
  18. package/dist/plugins/agileCrm/src/index.js +115 -27
  19. package/dist/plugins/airtable/src/index.js +94 -19
  20. package/dist/plugins/airtop/src/index.js +266 -62
  21. package/dist/plugins/apiTemplateIo/src/index.js +25 -5
  22. package/dist/plugins/asana/src/index.js +195 -41
  23. package/dist/plugins/autopilot/src/index.js +39 -8
  24. package/dist/plugins/bambooHr/src/index.js +109 -22
  25. package/dist/plugins/bannerbear/src/index.js +36 -8
  26. package/dist/plugins/baserow/src/index.js +35 -7
  27. package/dist/plugins/beeminder/src/index.js +198 -40
  28. package/dist/plugins/bitly/src/index.js +46 -10
  29. package/dist/plugins/bitwarden/src/index.js +167 -36
  30. package/dist/plugins/box/src/index.js +172 -37
  31. package/dist/plugins/brandfetch/src/index.js +5 -1
  32. package/dist/plugins/brevo/src/index.js +136 -29
  33. package/dist/plugins/bubble/src/index.js +76 -17
  34. package/dist/plugins/chargebee/src/index.js +35 -7
  35. package/dist/plugins/circleci/src/index.js +50 -10
  36. package/dist/plugins/ciscoWebex/src/index.js +131 -27
  37. package/dist/plugins/clearbit/src/index.js +76 -17
  38. package/dist/plugins/clickup/src/index.js +500 -107
  39. package/dist/plugins/clockify/src/index.js +229 -47
  40. package/dist/plugins/cloudflare/src/index.js +28 -6
  41. package/dist/plugins/cockpit/src/index.js +54 -12
  42. package/dist/plugins/coda/src/index.js +81 -19
  43. package/dist/plugins/coingecko/src/index.js +157 -33
  44. package/dist/plugins/contentful/src/index.js +85 -17
  45. package/dist/plugins/convertkit/src/index.js +74 -18
  46. package/dist/plugins/copper/src/index.js +59 -11
  47. package/dist/plugins/cortex/src/index.js +55 -13
  48. package/dist/plugins/currents/src/index.js +310 -71
  49. package/dist/plugins/customerIo/src/index.js +112 -23
  50. package/dist/plugins/databricks/src/index.js +549 -115
  51. package/dist/plugins/deepl/src/index.js +26 -6
  52. package/dist/plugins/demio/src/index.js +56 -11
  53. package/dist/plugins/dhl/src/index.js +16 -3
  54. package/dist/plugins/discord/src/index.js +141 -31
  55. package/dist/plugins/discourse/src/index.js +136 -31
  56. package/dist/plugins/disqus/src/index.js +96 -20
  57. package/dist/plugins/docker/src/index.js +20 -4
  58. package/dist/plugins/drift/src/index.js +19 -5
  59. package/dist/plugins/dropbox/src/index.js +139 -30
  60. package/dist/plugins/dropcontact/src/index.js +21 -4
  61. package/dist/plugins/egoi/src/index.js +61 -15
  62. package/dist/plugins/elasticsearch/src/index.js +59 -13
  63. package/dist/plugins/emelia/src/index.js +95 -19
  64. package/dist/plugins/erpnext/src/index.js +74 -15
  65. package/dist/plugins/facebookGraph/src/index.js +52 -11
  66. package/dist/plugins/freshdesk/src/index.js +220 -48
  67. package/dist/plugins/freshservice/src/index.js +39 -9
  68. package/dist/plugins/freshworksCrm/src/index.js +58 -12
  69. package/dist/plugins/getresponse/src/index.js +87 -18
  70. package/dist/plugins/ghost/src/index.js +114 -26
  71. package/dist/plugins/github/src/index.js +483 -109
  72. package/dist/plugins/gitlab/src/index.js +193 -45
  73. package/dist/plugins/gmail/src/index.js +1075 -0
  74. package/dist/plugins/gong/src/index.js +68 -14
  75. package/dist/plugins/gotify/src/index.js +43 -9
  76. package/dist/plugins/gotowebinar/src/index.js +233 -47
  77. package/dist/plugins/grafana/src/index.js +92 -21
  78. package/dist/plugins/graphql/src/index.js +38 -8
  79. package/dist/plugins/grist/src/index.js +52 -10
  80. package/dist/plugins/hackernews/src/index.js +32 -6
  81. package/dist/plugins/halopsa/src/index.js +131 -26
  82. package/dist/plugins/harvest/src/index.js +182 -42
  83. package/dist/plugins/helpscout/src/index.js +153 -31
  84. package/dist/plugins/highlevel/src/index.js +291 -58
  85. package/dist/plugins/homeAssistant/src/index.js +124 -26
  86. package/dist/plugins/hubspot/src/index.js +163 -29
  87. package/dist/plugins/humanticAi/src/index.js +54 -5
  88. package/dist/plugins/hunter/src/index.js +21 -4
  89. package/dist/plugins/intercom/src/index.js +95 -20
  90. package/dist/plugins/iterable/src/index.js +96 -20
  91. package/dist/plugins/jenkins/src/index.js +75 -17
  92. package/dist/plugins/jira/src/index.js +193 -43
  93. package/dist/plugins/keap/src/index.js +222 -56
  94. package/dist/plugins/kobotoolbox/src/index.js +113 -25
  95. package/dist/plugins/lemlist/src/index.js +79 -18
  96. package/dist/plugins/linear/src/index.js +86 -19
  97. package/dist/plugins/lingvanex/src/index.js +38 -8
  98. package/dist/plugins/linkedin/src/index.js +37 -8
  99. package/dist/plugins/lonescale/src/index.js +41 -9
  100. package/dist/plugins/magento/src/index.js +98 -27
  101. package/dist/plugins/mailcheck/src/index.js +11 -2
  102. package/dist/plugins/mailchimp/src/index.js +193 -42
  103. package/dist/plugins/mailerlite/src/index.js +61 -12
  104. package/dist/plugins/mailgun/src/index.js +39 -7
  105. package/dist/plugins/mailjet/src/index.js +141 -30
  106. package/dist/plugins/mandrill/src/index.js +67 -14
  107. package/dist/plugins/marketstack/src/index.js +56 -10
  108. package/dist/plugins/matrix/src/index.js +97 -20
  109. package/dist/plugins/mattermost/src/index.js +124 -26
  110. package/dist/plugins/mautic/src/index.js +129 -26
  111. package/dist/plugins/medium/src/index.js +64 -13
  112. package/dist/plugins/messagebird/src/index.js +80 -15
  113. package/dist/plugins/metabase/src/index.js +57 -12
  114. package/dist/plugins/misp/src/index.js +135 -33
  115. package/dist/plugins/mocean/src/index.js +33 -7
  116. package/dist/plugins/monday/src/index.js +97 -23
  117. package/dist/plugins/monicaCrm/src/index.js +112 -23
  118. package/dist/plugins/msg91/src/index.js +11 -2
  119. package/dist/plugins/nasa/src/index.js +108 -21
  120. package/dist/plugins/netlify/src/index.js +28 -6
  121. package/dist/plugins/netscalerAdc/src/index.js +144 -29
  122. package/dist/plugins/nextcloud/src/index.js +103 -20
  123. package/dist/plugins/nocodb/src/index.js +57 -11
  124. package/dist/plugins/notion/src/index.js +148 -37
  125. package/dist/plugins/npm/src/index.js +59 -12
  126. package/dist/plugins/odoo/src/index.js +102 -20
  127. package/dist/plugins/okta/src/index.js +50 -10
  128. package/dist/plugins/oneSimpleApi/src/index.js +84 -17
  129. package/dist/plugins/onfleet/src/index.js +139 -32
  130. package/dist/plugins/openThesaurus/src/index.js +46 -9
  131. package/dist/plugins/openweathermap/src/index.js +31 -6
  132. package/dist/plugins/oura/src/index.js +36 -7
  133. package/dist/plugins/paddle/src/index.js +80 -17
  134. package/dist/plugins/pagerduty/src/index.js +53 -12
  135. package/dist/plugins/paypal/src/index.js +51 -11
  136. package/dist/plugins/peekalink/src/index.js +12 -3
  137. package/dist/plugins/phantombuster/src/index.js +39 -8
  138. package/dist/plugins/philipsHue/src/index.js +64 -13
  139. package/dist/plugins/pipedrive/src/index.js +167 -45
  140. package/dist/plugins/plivo/src/index.js +43 -8
  141. package/dist/plugins/postbin/src/index.js +9 -2
  142. package/dist/plugins/posthog/src/index.js +50 -13
  143. package/dist/plugins/profitwell/src/index.js +24 -5
  144. package/dist/plugins/pushbullet/src/index.js +45 -9
  145. package/dist/plugins/pushcut/src/index.js +31 -6
  146. package/dist/plugins/pushover/src/index.js +51 -10
  147. package/dist/plugins/quickbase/src/index.js +66 -13
  148. package/dist/plugins/quickbooks/src/index.js +86 -19
  149. package/dist/plugins/quickchart/src/index.js +35 -7
  150. package/dist/plugins/raindrop/src/index.js +54 -13
  151. package/dist/plugins/reddit/src/index.js +73 -18
  152. package/dist/plugins/rocketchat/src/index.js +47 -9
  153. package/dist/plugins/rundeck/src/index.js +26 -5
  154. package/dist/plugins/salesforce/src/index.js +161 -31
  155. package/dist/plugins/salesmate/src/index.js +75 -16
  156. package/dist/plugins/securityScorecard/src/index.js +73 -15
  157. package/dist/plugins/segment/src/index.js +21 -4
  158. package/dist/plugins/sendgrid/src/index.js +102 -24
  159. package/dist/plugins/sendy/src/index.js +54 -11
  160. package/dist/plugins/sentry/src/index.js +174 -34
  161. package/dist/plugins/servicenow/src/index.js +120 -27
  162. package/dist/plugins/shopify/src/index.js +53 -12
  163. package/dist/plugins/signl4/src/index.js +16 -3
  164. package/dist/plugins/slack/src/index.js +407 -105
  165. package/dist/plugins/sms77/src/index.js +26 -5
  166. package/dist/plugins/splunk/src/index.js +186 -45
  167. package/dist/plugins/spotify/src/index.js +265 -66
  168. package/dist/plugins/stackby/src/index.js +18 -6
  169. package/dist/plugins/storyblok/src/index.js +57 -11
  170. package/dist/plugins/strapi/src/index.js +63 -12
  171. package/dist/plugins/strava/src/index.js +58 -13
  172. package/dist/plugins/stripe/src/index.js +143 -30
  173. package/dist/plugins/supabase/src/index.js +49 -10
  174. package/dist/plugins/syncromsp/src/index.js +245 -67
  175. package/dist/plugins/tapfiliate/src/index.js +57 -14
  176. package/dist/plugins/telegram/src/index.js +202 -39
  177. package/dist/plugins/thehive/src/index.js +271 -66
  178. package/dist/plugins/thehiveProject/src/index.js +457 -89
  179. package/dist/plugins/todoist/src/index.js +326 -77
  180. package/dist/plugins/travisci/src/index.js +35 -8
  181. package/dist/plugins/trello/src/index.js +204 -46
  182. package/dist/plugins/twake/src/index.js +10 -2
  183. package/dist/plugins/twilio/src/index.js +56 -11
  184. package/dist/plugins/twist/src/index.js +241 -48
  185. package/dist/plugins/twitter/src/index.js +128 -30
  186. package/dist/plugins/unleashedSoftware/src/index.js +30 -6
  187. package/dist/plugins/uplead/src/index.js +9 -2
  188. package/dist/plugins/uproc/src/index.js +31 -6
  189. package/dist/plugins/uptimerobot/src/index.js +119 -25
  190. package/dist/plugins/urlscanio/src/index.js +25 -6
  191. package/dist/plugins/vero/src/index.js +68 -13
  192. package/dist/plugins/vonage/src/index.js +32 -6
  193. package/dist/plugins/wekan/src/index.js +297 -52
  194. package/dist/plugins/woocommerce/src/index.js +57 -12
  195. package/dist/plugins/wordpress/src/index.js +94 -18
  196. package/dist/plugins/xero/src/index.js +79 -13
  197. package/dist/plugins/yourls/src/index.js +33 -6
  198. package/dist/plugins/zammad/src/index.js +139 -36
  199. package/dist/plugins/zendesk/src/index.js +201 -48
  200. package/dist/plugins/zoho/src/index.js +88 -21
  201. package/dist/plugins/zoom/src/index.js +41 -7
  202. package/dist/plugins/zulip/src/index.js +101 -20
  203. package/package.json +3 -1
@@ -10,7 +10,10 @@ async function apiRequest(baseUrl, apiKey, method, endpoint, body, qs) {
10
10
  method,
11
11
  headers: { "Api-Key": apiKey, "Content-Type": "application/json" },
12
12
  };
13
- if (body && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE")
13
+ if (body &&
14
+ Object.keys(body).length > 0 &&
15
+ method !== "GET" &&
16
+ method !== "DELETE")
14
17
  opts.body = JSON.stringify(body);
15
18
  const res = await fetch(url.toString(), opts);
16
19
  if (!res.ok)
@@ -21,8 +24,19 @@ export default function iterable(rl) {
21
24
  rl.setName("iterable");
22
25
  rl.setVersion("0.1.0");
23
26
  rl.setConnectionSchema({
24
- apiKey: { type: "string", required: true, description: "Iterable API key", env: "ITERABLE_API_KEY" },
25
- region: { type: "string", required: false, description: "API base URL (default: https://api.iterable.com)", env: "ITERABLE_REGION", default: "https://api.iterable.com" },
27
+ apiKey: {
28
+ type: "string",
29
+ required: true,
30
+ description: "Iterable API key",
31
+ env: "ITERABLE_API_KEY",
32
+ },
33
+ region: {
34
+ type: "string",
35
+ required: false,
36
+ description: "API base URL (default: https://api.iterable.com)",
37
+ env: "ITERABLE_REGION",
38
+ default: "https://api.iterable.com",
39
+ },
26
40
  });
27
41
  const conn = (ctx) => ({
28
42
  baseUrl: (ctx.connection.config.region ?? "https://api.iterable.com").replace(/\/$/, ""),
@@ -33,24 +47,43 @@ export default function iterable(rl) {
33
47
  description: "Track events for users (bulk). Each event requires email or userId, plus eventName.",
34
48
  inputSchema: {
35
49
  events: {
36
- type: "array", required: true,
50
+ type: "array",
51
+ required: true,
37
52
  description: "Array of event objects. Each needs: eventName (string, required), email or id (string, one required), dataFields (object, optional), createdAt (unix timestamp, optional)",
38
53
  },
39
54
  },
40
55
  async execute(input, ctx) {
41
56
  const { events } = input;
42
57
  const { baseUrl, apiKey } = conn(ctx);
43
- return apiRequest(baseUrl, apiKey, "POST", "/events/trackBulk", { events });
58
+ return apiRequest(baseUrl, apiKey, "POST", "/events/trackBulk", {
59
+ events,
60
+ });
44
61
  },
45
62
  });
46
63
  // ── User ────────────────────────────────────────────
47
64
  rl.registerAction("user.upsert", {
48
65
  description: "Create or update a user",
49
66
  inputSchema: {
50
- identifier: { type: "string", required: true, description: "'email' or 'userId'" },
51
- value: { type: "string", required: true, description: "The email address or userId value" },
52
- preferUserId: { type: "boolean", required: false, description: "When identifier is userId, prefer userId for lookups (default false)" },
53
- dataFields: { type: "object", required: false, description: "User data fields as key-value pairs" },
67
+ identifier: {
68
+ type: "string",
69
+ required: true,
70
+ description: "'email' or 'userId'",
71
+ },
72
+ value: {
73
+ type: "string",
74
+ required: true,
75
+ description: "The email address or userId value",
76
+ },
77
+ preferUserId: {
78
+ type: "boolean",
79
+ required: false,
80
+ description: "When identifier is userId, prefer userId for lookups (default false)",
81
+ },
82
+ dataFields: {
83
+ type: "object",
84
+ required: false,
85
+ description: "User data fields as key-value pairs",
86
+ },
54
87
  },
55
88
  async execute(input, ctx) {
56
89
  const { identifier, value, preferUserId, dataFields } = input;
@@ -72,8 +105,16 @@ export default function iterable(rl) {
72
105
  rl.registerAction("user.get", {
73
106
  description: "Get a user by email or userId",
74
107
  inputSchema: {
75
- by: { type: "string", required: true, description: "'email' or 'userId'" },
76
- value: { type: "string", required: true, description: "The email address or userId" },
108
+ by: {
109
+ type: "string",
110
+ required: true,
111
+ description: "'email' or 'userId'",
112
+ },
113
+ value: {
114
+ type: "string",
115
+ required: true,
116
+ description: "The email address or userId",
117
+ },
77
118
  },
78
119
  async execute(input, ctx) {
79
120
  const { by, value } = input;
@@ -88,8 +129,16 @@ export default function iterable(rl) {
88
129
  rl.registerAction("user.delete", {
89
130
  description: "Delete a user by email or userId",
90
131
  inputSchema: {
91
- by: { type: "string", required: true, description: "'email' or 'userId'" },
92
- value: { type: "string", required: true, description: "The email address or userId" },
132
+ by: {
133
+ type: "string",
134
+ required: true,
135
+ description: "'email' or 'userId'",
136
+ },
137
+ value: {
138
+ type: "string",
139
+ required: true,
140
+ description: "The email address or userId",
141
+ },
93
142
  },
94
143
  async execute(input, ctx) {
95
144
  const { by, value } = input;
@@ -105,24 +154,51 @@ export default function iterable(rl) {
105
154
  description: "Subscribe users to a list",
106
155
  inputSchema: {
107
156
  listId: { type: "number", required: true, description: "List ID" },
108
- identifier: { type: "string", required: true, description: "'email' or 'userId'" },
109
- values: { type: "array", required: true, description: "Array of email addresses or userIds to subscribe" },
157
+ identifier: {
158
+ type: "string",
159
+ required: true,
160
+ description: "'email' or 'userId'",
161
+ },
162
+ values: {
163
+ type: "array",
164
+ required: true,
165
+ description: "Array of email addresses or userIds to subscribe",
166
+ },
110
167
  },
111
168
  async execute(input, ctx) {
112
169
  const { listId, identifier, values } = input;
113
170
  const { baseUrl, apiKey } = conn(ctx);
114
171
  const subscribers = values.map((v) => identifier === "email" ? { email: v } : { userId: v });
115
- return apiRequest(baseUrl, apiKey, "POST", "/lists/subscribe", { listId, subscribers });
172
+ return apiRequest(baseUrl, apiKey, "POST", "/lists/subscribe", {
173
+ listId,
174
+ subscribers,
175
+ });
116
176
  },
117
177
  });
118
178
  rl.registerAction("userList.remove", {
119
179
  description: "Unsubscribe users from a list",
120
180
  inputSchema: {
121
181
  listId: { type: "number", required: true, description: "List ID" },
122
- identifier: { type: "string", required: true, description: "'email' or 'userId'" },
123
- values: { type: "array", required: true, description: "Array of email addresses or userIds to unsubscribe" },
124
- campaignId: { type: "number", required: false, description: "Campaign ID for attribution" },
125
- channelUnsubscribe: { type: "boolean", required: false, description: "Unsubscribe from channel" },
182
+ identifier: {
183
+ type: "string",
184
+ required: true,
185
+ description: "'email' or 'userId'",
186
+ },
187
+ values: {
188
+ type: "array",
189
+ required: true,
190
+ description: "Array of email addresses or userIds to unsubscribe",
191
+ },
192
+ campaignId: {
193
+ type: "number",
194
+ required: false,
195
+ description: "Campaign ID for attribution",
196
+ },
197
+ channelUnsubscribe: {
198
+ type: "boolean",
199
+ required: false,
200
+ description: "Unsubscribe from channel",
201
+ },
126
202
  },
127
203
  async execute(input, ctx) {
128
204
  const { listId, identifier, values, campaignId, channelUnsubscribe } = input;
@@ -6,7 +6,9 @@ async function apiRequest(baseUrl, username, apiToken, method, endpoint, body, c
6
6
  url.searchParams.set(k, String(v));
7
7
  }
8
8
  }
9
- const headers = { Authorization: `Basic ${btoa(`${username}:${apiToken}`)}` };
9
+ const headers = {
10
+ Authorization: `Basic ${btoa(`${username}:${apiToken}`)}`,
11
+ };
10
12
  if (contentType)
11
13
  headers["Content-Type"] = contentType;
12
14
  const opts = { method, headers };
@@ -35,20 +37,44 @@ export default function jenkins(rl) {
35
37
  rl.setName("jenkins");
36
38
  rl.setVersion("0.1.0");
37
39
  rl.setConnectionSchema({
38
- baseUrl: { type: "string", required: true, description: "Jenkins URL (e.g. https://jenkins.example.com)", env: "JENKINS_URL" },
39
- username: { type: "string", required: true, description: "Jenkins username", env: "JENKINS_USER" },
40
- apiToken: { type: "string", required: true, description: "Jenkins API token", env: "JENKINS_TOKEN" },
40
+ baseUrl: {
41
+ type: "string",
42
+ required: true,
43
+ description: "Jenkins URL (e.g. https://jenkins.example.com)",
44
+ env: "JENKINS_URL",
45
+ },
46
+ username: {
47
+ type: "string",
48
+ required: true,
49
+ description: "Jenkins username",
50
+ env: "JENKINS_USER",
51
+ },
52
+ apiToken: {
53
+ type: "string",
54
+ required: true,
55
+ description: "Jenkins API token",
56
+ env: "JENKINS_TOKEN",
57
+ },
41
58
  });
42
59
  // ── Job ─────────────────────────────────────────────
43
60
  rl.registerAction("job.trigger", {
44
61
  description: "Trigger a job build",
45
62
  inputSchema: {
46
- jobName: { type: "string", required: true, description: "Job name (URL-encoded if nested)" },
47
- parameters: { type: "object", required: false, description: "Build parameters as key-value pairs" },
63
+ jobName: {
64
+ type: "string",
65
+ required: true,
66
+ description: "Job name (URL-encoded if nested)",
67
+ },
68
+ parameters: {
69
+ type: "object",
70
+ required: false,
71
+ description: "Build parameters as key-value pairs",
72
+ },
48
73
  },
49
74
  async execute(input, ctx) {
50
75
  const { jobName, parameters } = input;
51
- if (parameters && Object.keys(parameters).length > 0) {
76
+ if (parameters &&
77
+ Object.keys(parameters).length > 0) {
52
78
  const qs = parameters;
53
79
  await jk(ctx, "POST", `/job/${jobName}/buildWithParameters`, undefined, undefined, qs);
54
80
  }
@@ -60,7 +86,9 @@ export default function jenkins(rl) {
60
86
  });
61
87
  rl.registerAction("job.getParameters", {
62
88
  description: "Get build parameters for a job",
63
- inputSchema: { jobName: { type: "string", required: true, description: "Job name" } },
89
+ inputSchema: {
90
+ jobName: { type: "string", required: true, description: "Job name" },
91
+ },
64
92
  async execute(input, ctx) {
65
93
  const data = (await jk(ctx, "GET", `/job/${input.jobName}/api/json`, undefined, undefined, { tree: "actions[parameterDefinitions[*]]" }));
66
94
  return data.actions;
@@ -69,12 +97,20 @@ export default function jenkins(rl) {
69
97
  rl.registerAction("job.copy", {
70
98
  description: "Copy/create a job from an existing one",
71
99
  inputSchema: {
72
- fromJob: { type: "string", required: true, description: "Source job name" },
100
+ fromJob: {
101
+ type: "string",
102
+ required: true,
103
+ description: "Source job name",
104
+ },
73
105
  newName: { type: "string", required: true, description: "New job name" },
74
106
  },
75
107
  async execute(input, ctx) {
76
108
  const { fromJob, newName } = input;
77
- await jk(ctx, "POST", "/createItem", undefined, undefined, { name: newName, mode: "copy", from: fromJob });
109
+ await jk(ctx, "POST", "/createItem", undefined, undefined, {
110
+ name: newName,
111
+ mode: "copy",
112
+ from: fromJob,
113
+ });
78
114
  return { success: true };
79
115
  },
80
116
  });
@@ -82,7 +118,11 @@ export default function jenkins(rl) {
82
118
  description: "Create a job from XML config",
83
119
  inputSchema: {
84
120
  name: { type: "string", required: true, description: "Job name" },
85
- xml: { type: "string", required: true, description: "Jenkins job config XML" },
121
+ xml: {
122
+ type: "string",
123
+ required: true,
124
+ description: "Jenkins job config XML",
125
+ },
86
126
  },
87
127
  async execute(input, ctx) {
88
128
  const { name, xml } = input;
@@ -107,26 +147,44 @@ export default function jenkins(rl) {
107
147
  // ── Instance ────────────────────────────────────────
108
148
  rl.registerAction("instance.quietDown", {
109
149
  description: "Put Jenkins into quiet mode (no new builds)",
110
- async execute(_input, ctx) { await jk(ctx, "POST", "/quietDown"); return { success: true }; },
150
+ async execute(_input, ctx) {
151
+ await jk(ctx, "POST", "/quietDown");
152
+ return { success: true };
153
+ },
111
154
  });
112
155
  rl.registerAction("instance.cancelQuietDown", {
113
156
  description: "Cancel quiet mode",
114
- async execute(_input, ctx) { await jk(ctx, "POST", "/cancelQuietDown"); return { success: true }; },
157
+ async execute(_input, ctx) {
158
+ await jk(ctx, "POST", "/cancelQuietDown");
159
+ return { success: true };
160
+ },
115
161
  });
116
162
  rl.registerAction("instance.restart", {
117
163
  description: "Restart Jenkins immediately",
118
- async execute(_input, ctx) { await jk(ctx, "POST", "/restart"); return { success: true }; },
164
+ async execute(_input, ctx) {
165
+ await jk(ctx, "POST", "/restart");
166
+ return { success: true };
167
+ },
119
168
  });
120
169
  rl.registerAction("instance.safeRestart", {
121
170
  description: "Restart Jenkins after running builds finish",
122
- async execute(_input, ctx) { await jk(ctx, "POST", "/safeRestart"); return { success: true }; },
171
+ async execute(_input, ctx) {
172
+ await jk(ctx, "POST", "/safeRestart");
173
+ return { success: true };
174
+ },
123
175
  });
124
176
  rl.registerAction("instance.exit", {
125
177
  description: "Shut down Jenkins immediately",
126
- async execute(_input, ctx) { await jk(ctx, "POST", "/exit"); return { success: true }; },
178
+ async execute(_input, ctx) {
179
+ await jk(ctx, "POST", "/exit");
180
+ return { success: true };
181
+ },
127
182
  });
128
183
  rl.registerAction("instance.safeExit", {
129
184
  description: "Shut down Jenkins after running builds finish",
130
- async execute(_input, ctx) { await jk(ctx, "POST", "/safeExit"); return { success: true }; },
185
+ async execute(_input, ctx) {
186
+ await jk(ctx, "POST", "/safeExit");
187
+ return { success: true };
188
+ },
131
189
  });
132
190
  }