@action-llama/action-llama 0.18.4 → 0.18.6

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 (168) hide show
  1. package/dist/agents/container-runner.d.ts +2 -2
  2. package/dist/agents/container-runner.d.ts.map +1 -1
  3. package/dist/agents/container-runner.js.map +1 -1
  4. package/dist/agents/credential-setup.d.ts.map +1 -1
  5. package/dist/agents/credential-setup.js +8 -3
  6. package/dist/agents/credential-setup.js.map +1 -1
  7. package/dist/build-info.json +1 -1
  8. package/dist/chat/container-launcher.d.ts +2 -2
  9. package/dist/chat/container-launcher.d.ts.map +1 -1
  10. package/dist/chat/container-launcher.js.map +1 -1
  11. package/dist/cli/commands/doctor.d.ts.map +1 -1
  12. package/dist/cli/commands/doctor.js +116 -7
  13. package/dist/cli/commands/doctor.js.map +1 -1
  14. package/dist/cli/commands/run-agent.d.ts +14 -0
  15. package/dist/cli/commands/run-agent.d.ts.map +1 -0
  16. package/dist/cli/commands/run-agent.js +344 -0
  17. package/dist/cli/commands/run-agent.js.map +1 -0
  18. package/dist/cli/main.js +10 -0
  19. package/dist/cli/main.js.map +1 -1
  20. package/dist/cloud/provider.d.ts +5 -5
  21. package/dist/cloud/provider.d.ts.map +1 -1
  22. package/dist/cloud/vps/provider.d.ts +3 -3
  23. package/dist/cloud/vps/provider.d.ts.map +1 -1
  24. package/dist/control/routes/stats.d.ts.map +1 -1
  25. package/dist/control/routes/stats.js +13 -0
  26. package/dist/control/routes/stats.js.map +1 -1
  27. package/dist/credentials/builtins/discord-bot.d.ts +4 -0
  28. package/dist/credentials/builtins/discord-bot.d.ts.map +1 -0
  29. package/dist/credentials/builtins/discord-bot.js +34 -0
  30. package/dist/credentials/builtins/discord-bot.js.map +1 -0
  31. package/dist/credentials/builtins/index.d.ts.map +1 -1
  32. package/dist/credentials/builtins/index.js +10 -0
  33. package/dist/credentials/builtins/index.js.map +1 -1
  34. package/dist/credentials/builtins/slack-bot-token.d.ts +4 -0
  35. package/dist/credentials/builtins/slack-bot-token.d.ts.map +1 -0
  36. package/dist/credentials/builtins/slack-bot-token.js +28 -0
  37. package/dist/credentials/builtins/slack-bot-token.js.map +1 -0
  38. package/dist/credentials/builtins/slack-signing-secret.d.ts +4 -0
  39. package/dist/credentials/builtins/slack-signing-secret.d.ts.map +1 -0
  40. package/dist/credentials/builtins/slack-signing-secret.js +19 -0
  41. package/dist/credentials/builtins/slack-signing-secret.js.map +1 -0
  42. package/dist/credentials/builtins/x-twitter-api.d.ts.map +1 -1
  43. package/dist/credentials/builtins/x-twitter-api.js +7 -11
  44. package/dist/credentials/builtins/x-twitter-api.js.map +1 -1
  45. package/dist/credentials/builtins/x-twitter-user-oauth1.d.ts +4 -0
  46. package/dist/credentials/builtins/x-twitter-user-oauth1.d.ts.map +1 -0
  47. package/dist/credentials/builtins/x-twitter-user-oauth1.js +17 -0
  48. package/dist/credentials/builtins/x-twitter-user-oauth1.js.map +1 -0
  49. package/dist/credentials/builtins/x-twitter-user-oauth2.d.ts +4 -0
  50. package/dist/credentials/builtins/x-twitter-user-oauth2.d.ts.map +1 -0
  51. package/dist/credentials/builtins/x-twitter-user-oauth2.js +195 -0
  52. package/dist/credentials/builtins/x-twitter-user-oauth2.js.map +1 -0
  53. package/dist/credentials/prompter.d.ts.map +1 -1
  54. package/dist/credentials/prompter.js +38 -9
  55. package/dist/credentials/prompter.js.map +1 -1
  56. package/dist/credentials/schema.d.ts +1 -0
  57. package/dist/credentials/schema.d.ts.map +1 -1
  58. package/dist/docker/host-user-runtime.d.ts +35 -0
  59. package/dist/docker/host-user-runtime.d.ts.map +1 -0
  60. package/dist/docker/host-user-runtime.js +292 -0
  61. package/dist/docker/host-user-runtime.js.map +1 -0
  62. package/dist/docker/local-runtime.d.ts +2 -2
  63. package/dist/docker/local-runtime.d.ts.map +1 -1
  64. package/dist/docker/runtime.d.ts +34 -24
  65. package/dist/docker/runtime.d.ts.map +1 -1
  66. package/dist/docker/runtime.js +4 -1
  67. package/dist/docker/runtime.js.map +1 -1
  68. package/dist/docker/ssh-docker-runtime.d.ts +2 -2
  69. package/dist/docker/ssh-docker-runtime.d.ts.map +1 -1
  70. package/dist/docker/ssh-docker-runtime.js.map +1 -1
  71. package/dist/events/routes/webhooks.d.ts.map +1 -1
  72. package/dist/events/routes/webhooks.js +57 -0
  73. package/dist/events/routes/webhooks.js.map +1 -1
  74. package/dist/events/webhook-setup.d.ts +11 -0
  75. package/dist/events/webhook-setup.d.ts.map +1 -1
  76. package/dist/events/webhook-setup.js +90 -9
  77. package/dist/events/webhook-setup.js.map +1 -1
  78. package/dist/execution/image-builder.d.ts +3 -3
  79. package/dist/execution/image-builder.d.ts.map +1 -1
  80. package/dist/execution/runner-setup.d.ts +3 -3
  81. package/dist/execution/runner-setup.d.ts.map +1 -1
  82. package/dist/execution/runtime-factory.d.ts +7 -6
  83. package/dist/execution/runtime-factory.d.ts.map +1 -1
  84. package/dist/execution/runtime-factory.js +18 -3
  85. package/dist/execution/runtime-factory.js.map +1 -1
  86. package/dist/extensions/loader.d.ts.map +1 -1
  87. package/dist/extensions/loader.js +2 -1
  88. package/dist/extensions/loader.js.map +1 -1
  89. package/dist/extensions/types.d.ts +2 -2
  90. package/dist/extensions/types.d.ts.map +1 -1
  91. package/dist/frontend/assets/index-D5QqK4BL.js +13 -0
  92. package/dist/frontend/assets/{index-B3IlFzCF.css → index-GJZXHhf1.css} +1 -1
  93. package/dist/frontend/index.html +2 -2
  94. package/dist/scheduler/gateway-setup.d.ts +2 -2
  95. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  96. package/dist/scheduler/gateway-setup.js.map +1 -1
  97. package/dist/scheduler/index.d.ts.map +1 -1
  98. package/dist/scheduler/index.js +11 -7
  99. package/dist/scheduler/index.js.map +1 -1
  100. package/dist/scheduler/watcher.d.ts +3 -3
  101. package/dist/scheduler/watcher.d.ts.map +1 -1
  102. package/dist/scheduler/watcher.js +35 -26
  103. package/dist/scheduler/watcher.js.map +1 -1
  104. package/dist/setup/validators.d.ts +1 -5
  105. package/dist/setup/validators.d.ts.map +1 -1
  106. package/dist/setup/validators.js +4 -7
  107. package/dist/setup/validators.js.map +1 -1
  108. package/dist/shared/config.d.ts +11 -0
  109. package/dist/shared/config.d.ts.map +1 -1
  110. package/dist/shared/config.js +1 -0
  111. package/dist/shared/config.js.map +1 -1
  112. package/dist/shared/credential-refs.d.ts.map +1 -1
  113. package/dist/shared/credential-refs.js +15 -9
  114. package/dist/shared/credential-refs.js.map +1 -1
  115. package/dist/shared/oauth1.d.ts +17 -0
  116. package/dist/shared/oauth1.d.ts.map +1 -0
  117. package/dist/shared/oauth1.js +45 -0
  118. package/dist/shared/oauth1.js.map +1 -0
  119. package/dist/shared/validation.d.ts.map +1 -1
  120. package/dist/shared/validation.js +6 -1
  121. package/dist/shared/validation.js.map +1 -1
  122. package/dist/stats/store.d.ts +1 -0
  123. package/dist/stats/store.d.ts.map +1 -1
  124. package/dist/stats/store.js +8 -4
  125. package/dist/stats/store.js.map +1 -1
  126. package/dist/webhooks/definitions/discord.d.ts +3 -0
  127. package/dist/webhooks/definitions/discord.d.ts.map +1 -0
  128. package/dist/webhooks/definitions/discord.js +23 -0
  129. package/dist/webhooks/definitions/discord.js.map +1 -0
  130. package/dist/webhooks/definitions/registry.d.ts.map +1 -1
  131. package/dist/webhooks/definitions/registry.js +4 -1
  132. package/dist/webhooks/definitions/registry.js.map +1 -1
  133. package/dist/webhooks/definitions/slack.d.ts +3 -0
  134. package/dist/webhooks/definitions/slack.d.ts.map +1 -0
  135. package/dist/webhooks/definitions/slack.js +25 -0
  136. package/dist/webhooks/definitions/slack.js.map +1 -0
  137. package/dist/webhooks/definitions/twitter.d.ts +3 -0
  138. package/dist/webhooks/definitions/twitter.d.ts.map +1 -0
  139. package/dist/webhooks/definitions/twitter.js +30 -0
  140. package/dist/webhooks/definitions/twitter.js.map +1 -0
  141. package/dist/webhooks/providers/discord.d.ts +9 -0
  142. package/dist/webhooks/providers/discord.d.ts.map +1 -0
  143. package/dist/webhooks/providers/discord.js +112 -0
  144. package/dist/webhooks/providers/discord.js.map +1 -0
  145. package/dist/webhooks/providers/index.d.ts +12 -0
  146. package/dist/webhooks/providers/index.d.ts.map +1 -1
  147. package/dist/webhooks/providers/index.js +118 -0
  148. package/dist/webhooks/providers/index.js.map +1 -1
  149. package/dist/webhooks/providers/slack.d.ts +9 -0
  150. package/dist/webhooks/providers/slack.d.ts.map +1 -0
  151. package/dist/webhooks/providers/slack.js +120 -0
  152. package/dist/webhooks/providers/slack.js.map +1 -0
  153. package/dist/webhooks/providers/twitter-subscribe.d.ts +26 -0
  154. package/dist/webhooks/providers/twitter-subscribe.d.ts.map +1 -0
  155. package/dist/webhooks/providers/twitter-subscribe.js +158 -0
  156. package/dist/webhooks/providers/twitter-subscribe.js.map +1 -0
  157. package/dist/webhooks/providers/twitter.d.ts +13 -0
  158. package/dist/webhooks/providers/twitter.d.ts.map +1 -0
  159. package/dist/webhooks/providers/twitter.js +202 -0
  160. package/dist/webhooks/providers/twitter.js.map +1 -0
  161. package/dist/webhooks/types.d.ts +24 -1
  162. package/dist/webhooks/types.d.ts.map +1 -1
  163. package/dist/webhooks/validation.d.ts +11 -0
  164. package/dist/webhooks/validation.d.ts.map +1 -1
  165. package/dist/webhooks/validation.js +45 -1
  166. package/dist/webhooks/validation.js.map +1 -1
  167. package/package.json +1 -1
  168. package/dist/frontend/assets/index-BotTEisS.js +0 -13
@@ -0,0 +1,34 @@
1
+ const discordBot = {
2
+ id: "discord_bot",
3
+ label: "Discord Bot Credentials",
4
+ description: "Bot credentials from a Discord Application. Find these in the Discord Developer Portal under your application's General Information and Bot pages.",
5
+ helpUrl: "https://discord.com/developers/applications",
6
+ fields: [
7
+ {
8
+ name: "application_id",
9
+ label: "Application ID",
10
+ description: "From General Information page in the Discord Developer Portal",
11
+ secret: false,
12
+ },
13
+ {
14
+ name: "public_key",
15
+ label: "Public Key",
16
+ description: "From General Information page (used for webhook signature verification)",
17
+ secret: false,
18
+ },
19
+ {
20
+ name: "bot_token",
21
+ label: "Bot Token",
22
+ description: "From the Bot page (reset if you don't have it saved)",
23
+ secret: true,
24
+ },
25
+ ],
26
+ envVars: {
27
+ application_id: "DISCORD_APPLICATION_ID",
28
+ public_key: "DISCORD_PUBLIC_KEY",
29
+ bot_token: "DISCORD_BOT_TOKEN",
30
+ },
31
+ agentContext: "`DISCORD_APPLICATION_ID`, `DISCORD_PUBLIC_KEY`, `DISCORD_BOT_TOKEN` — use for Discord API access. Make REST calls to `https://discord.com/api/v10/` with header `Authorization: Bot $DISCORD_BOT_TOKEN`. Use slash commands via the Interactions Endpoint.",
32
+ };
33
+ export default discordBot;
34
+ //# sourceMappingURL=discord-bot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-bot.js","sourceRoot":"","sources":["../../../src/credentials/builtins/discord-bot.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAyB;IACvC,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,oJAAoJ;IACtJ,OAAO,EAAE,6CAA6C;IACtD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,+DAA+D;YAC5E,MAAM,EAAE,KAAK;SACd;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,yEAAyE;YACtF,MAAM,EAAE,KAAK;SACd;QACD;YACE,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,sDAAsD;YACnE,MAAM,EAAE,IAAI;SACb;KACF;IACD,OAAO,EAAE;QACP,cAAc,EAAE,wBAAwB;QACxC,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,mBAAmB;KAC/B;IACD,YAAY,EACV,4PAA4P;CAC/P,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA4BzD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CA2BnE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAgCzD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAgCnE,CAAC"}
@@ -16,6 +16,8 @@ import sentryClientSecret from "./sentry-client-secret.js";
16
16
  import linearWebhookSecret from "./linear-webhook-secret.js";
17
17
  import netlifyToken from "./netlify-token.js";
18
18
  import xTwitterApi from "./x-twitter-api.js";
19
+ import xTwitterUserOauth1 from "./x-twitter-user-oauth1.js";
20
+ import xTwitterUserOauth2 from "./x-twitter-user-oauth2.js";
19
21
  import bugsnagToken from "./bugsnag-token.js";
20
22
  import vultrApiKey from "./vultr-api-key.js";
21
23
  import hetznerApiKey from "./hetzner-api-key.js";
@@ -24,6 +26,9 @@ import cloudflareApiToken from "./cloudflare-api-token.js";
24
26
  import redditOAuth from "./reddit-oauth.js";
25
27
  import mintlifyToken from "./mintlify-token.js";
26
28
  import mintlifyWebhookSecret from "./mintlify-webhook-secret.js";
29
+ import discordBot from "./discord-bot.js";
30
+ import slackBotToken from "./slack-bot-token.js";
31
+ import slackSigningSecret from "./slack-signing-secret.js";
27
32
  export const builtinCredentials = {
28
33
  "github_token": githubToken,
29
34
  "anthropic_key": anthropicKey,
@@ -43,6 +48,8 @@ export const builtinCredentials = {
43
48
  "linear_webhook_secret": linearWebhookSecret,
44
49
  "netlify_token": netlifyToken,
45
50
  "x_twitter_api": xTwitterApi,
51
+ "x_twitter_user_oauth1": xTwitterUserOauth1,
52
+ "x_twitter_user_oauth2": xTwitterUserOauth2,
46
53
  "bugsnag_token": bugsnagToken,
47
54
  "vultr_api_key": vultrApiKey,
48
55
  "hetzner_api_key": hetznerApiKey,
@@ -51,5 +58,8 @@ export const builtinCredentials = {
51
58
  "reddit_oauth": redditOAuth,
52
59
  "mintlify_token": mintlifyToken,
53
60
  "mintlify_webhook_secret": mintlifyWebhookSecret,
61
+ "discord_bot": discordBot,
62
+ "slack_bot_token": slackBotToken,
63
+ "slack_signing_secret": slackSigningSecret,
54
64
  };
55
65
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,qBAAqB,MAAM,8BAA8B,CAAC;AAEjE,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,OAAO;IACnB,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,MAAM;IACjB,aAAa,EAAE,UAAU;IACzB,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,SAAS,EAAE,MAAM;IACjB,uBAAuB,EAAE,mBAAmB;IAC5C,sBAAsB,EAAE,kBAAkB;IAC1C,uBAAuB,EAAE,mBAAmB;IAC5C,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,iBAAiB,EAAE,aAAa;IAChC,SAAS,EAAE,MAAM;IACjB,sBAAsB,EAAE,kBAAkB;IAC1C,cAAc,EAAE,WAAW;IAC3B,gBAAgB,EAAE,aAAa;IAC/B,yBAAyB,EAAE,qBAAqB;CACjD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,qBAAqB,MAAM,8BAA8B,CAAC;AACjE,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,OAAO;IACnB,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,MAAM;IACjB,aAAa,EAAE,UAAU;IACzB,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,SAAS,EAAE,MAAM;IACjB,uBAAuB,EAAE,mBAAmB;IAC5C,sBAAsB,EAAE,kBAAkB;IAC1C,uBAAuB,EAAE,mBAAmB;IAC5C,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,uBAAuB,EAAE,kBAAkB;IAC3C,uBAAuB,EAAE,kBAAkB;IAC3C,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,iBAAiB,EAAE,aAAa;IAChC,SAAS,EAAE,MAAM;IACjB,sBAAsB,EAAE,kBAAkB;IAC1C,cAAc,EAAE,WAAW;IAC3B,gBAAgB,EAAE,aAAa;IAC/B,yBAAyB,EAAE,qBAAqB;IAChD,aAAa,EAAE,UAAU;IACzB,iBAAiB,EAAE,aAAa;IAChC,sBAAsB,EAAE,kBAAkB;CAC3C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CredentialDefinition } from "../schema.js";
2
+ declare const slackBotToken: CredentialDefinition;
3
+ export default slackBotToken;
4
+ //# sourceMappingURL=slack-bot-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-bot-token.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/slack-bot-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,QAAA,MAAM,aAAa,EAAE,oBAwBpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,28 @@
1
+ const slackBotToken = {
2
+ id: "slack_bot_token",
3
+ label: "Slack Bot Token",
4
+ description: "Slack bot user OAuth token for interacting with the Slack API",
5
+ helpUrl: "https://api.slack.com/authentication/token-types#bot",
6
+ fields: [
7
+ { name: "token", label: "Bot Token", description: "Slack bot user OAuth token (xoxb-...)", secret: true },
8
+ ],
9
+ envVars: { token: "SLACK_BOT_TOKEN" },
10
+ agentContext: "`SLACK_BOT_TOKEN` — use for Slack API access via curl or HTTP libraries",
11
+ async validate(values) {
12
+ if (!values.token)
13
+ throw new Error("Slack bot token is required");
14
+ const response = await fetch("https://slack.com/api/auth.test", {
15
+ method: "POST",
16
+ headers: {
17
+ Authorization: `Bearer ${values.token}`,
18
+ "Content-Type": "application/json",
19
+ },
20
+ });
21
+ const data = await response.json();
22
+ if (!data.ok)
23
+ throw new Error(`Invalid Slack bot token: ${data.error}`);
24
+ return true;
25
+ },
26
+ };
27
+ export default slackBotToken;
28
+ //# sourceMappingURL=slack-bot-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-bot-token.js","sourceRoot":"","sources":["../../../src/credentials/builtins/slack-bot-token.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAyB;IAC1C,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,+DAA+D;IAC5E,OAAO,EAAE,sDAAsD;IAC/D,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,uCAAuC,EAAE,MAAM,EAAE,IAAI,EAAE;KAC1G;IACD,OAAO,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACrC,YAAY,EAAE,yEAAyE;IAEvF,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iCAAiC,EAAE;YAC9D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;gBACvC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CredentialDefinition } from "../schema.js";
2
+ declare const slackSigningSecret: CredentialDefinition;
3
+ export default slackSigningSecret;
4
+ //# sourceMappingURL=slack-signing-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-signing-secret.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/slack-signing-secret.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,QAAA,MAAM,kBAAkB,EAAE,oBAezB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,19 @@
1
+ const slackSigningSecret = {
2
+ id: "slack_signing_secret",
3
+ label: "Slack Signing Secret",
4
+ description: "Signing secret for verifying Slack webhook payloads. Found in your Slack app settings under App Settings → Basic Information → App Credentials.",
5
+ helpUrl: "https://api.slack.com/authentication/verifying-requests-from-slack",
6
+ fields: [
7
+ { name: "secret", label: "Signing Secret", description: "Slack app signing secret (found in App Settings → Basic Information → App Credentials)", secret: true },
8
+ ],
9
+ // No envVars or agentContext — used by the gateway, not injected into agents
10
+ async validate(values) {
11
+ if (!values.secret)
12
+ throw new Error("Signing secret is required");
13
+ if (values.secret.length < 8)
14
+ throw new Error("Signing secret must be at least 8 characters");
15
+ return true;
16
+ },
17
+ };
18
+ export default slackSigningSecret;
19
+ //# sourceMappingURL=slack-signing-secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-signing-secret.js","sourceRoot":"","sources":["../../../src/credentials/builtins/slack-signing-secret.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAyB;IAC/C,EAAE,EAAE,sBAAsB;IAC1B,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EAAE,iJAAiJ;IAC9J,OAAO,EAAE,oEAAoE;IAC7E,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,wFAAwF,EAAE,MAAM,EAAE,IAAI,EAAE;KACjK;IACD,6EAA6E;IAE7E,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9F,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"x-twitter-api.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,QAAA,MAAM,WAAW,EAAE,oBAyBlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"x-twitter-api.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,QAAA,MAAM,WAAW,EAAE,oBAqBlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -2,23 +2,19 @@ import { validateXTwitterToken } from "../../setup/validators.js";
2
2
  const xTwitterApi = {
3
3
  id: "x_twitter_api",
4
4
  label: "X (Twitter) API Credentials",
5
- description: "API credentials for X (formerly Twitter) platform",
5
+ description: "App-level API credentials for X (formerly Twitter) platform",
6
6
  helpUrl: "https://developer.x.com/en/portal/dashboard",
7
7
  fields: [
8
- { name: "api_key", label: "API Key", description: "Consumer Key from X Developer Portal", secret: true },
9
- { name: "api_secret", label: "API Secret", description: "Consumer Secret from X Developer Portal", secret: true },
10
- { name: "bearer_token", label: "Bearer Token", description: "Bearer Token for app-only authentication", secret: true },
11
- { name: "access_token", label: "Access Token", description: "User Access Token (optional, for user authentication)", secret: true },
12
- { name: "access_token_secret", label: "Access Token Secret", description: "User Access Token Secret (optional, for user authentication)", secret: true },
8
+ { name: "consumer_key", label: "Consumer Key", description: "OAuth 1.0a Consumer Key from X Developer Portal", secret: true },
9
+ { name: "consumer_secret", label: "Consumer Secret", description: "OAuth 1.0a Consumer Secret from X Developer Portal", secret: true },
10
+ { name: "bearer_token", label: "Bearer Token", description: "App-Only authentication token from X Developer Portal", secret: true },
13
11
  ],
14
12
  envVars: {
15
- api_key: "X_API_KEY",
16
- api_secret: "X_API_SECRET",
13
+ consumer_key: "X_CONSUMER_KEY",
14
+ consumer_secret: "X_CONSUMER_SECRET",
17
15
  bearer_token: "X_BEARER_TOKEN",
18
- access_token: "X_ACCESS_TOKEN",
19
- access_token_secret: "X_ACCESS_TOKEN_SECRET"
20
16
  },
21
- agentContext: "`X_API_KEY`, `X_API_SECRET`, `X_BEARER_TOKEN`, `X_ACCESS_TOKEN`, `X_ACCESS_TOKEN_SECRET` — use X API v2 directly",
17
+ agentContext: "`X_CONSUMER_KEY`, `X_CONSUMER_SECRET`, `X_BEARER_TOKEN` — use X API v2 directly",
22
18
  async validate(values) {
23
19
  await validateXTwitterToken(values.bearer_token);
24
20
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"x-twitter-api.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,GAAyB;IACxC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,6BAA6B;IACpC,WAAW,EAAE,mDAAmD;IAChE,OAAO,EAAE,6CAA6C;IACtD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,sCAAsC,EAAE,MAAM,EAAE,IAAI,EAAE;QACxG,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,yCAAyC,EAAE,MAAM,EAAE,IAAI,EAAE;QACjH,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,0CAA0C,EAAE,MAAM,EAAE,IAAI,EAAE;QACtH,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,uDAAuD,EAAE,MAAM,EAAE,IAAI,EAAE;QACnI,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,8DAA8D,EAAE,MAAM,EAAE,IAAI,EAAE;KACzJ;IACD,OAAO,EAAE;QACP,OAAO,EAAE,WAAW;QACpB,UAAU,EAAE,cAAc;QAC1B,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,gBAAgB;QAC9B,mBAAmB,EAAE,uBAAuB;KAC7C;IACD,YAAY,EAAE,kHAAkH;IAEhI,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,MAAM,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"x-twitter-api.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,GAAyB;IACxC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,6BAA6B;IACpC,WAAW,EAAE,6DAA6D;IAC1E,OAAO,EAAE,6CAA6C;IACtD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,iDAAiD,EAAE,MAAM,EAAE,IAAI,EAAE;QAC7H,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,oDAAoD,EAAE,MAAM,EAAE,IAAI,EAAE;QACtI,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,uDAAuD,EAAE,MAAM,EAAE,IAAI,EAAE;KACpI;IACD,OAAO,EAAE;QACP,YAAY,EAAE,gBAAgB;QAC9B,eAAe,EAAE,mBAAmB;QACpC,YAAY,EAAE,gBAAgB;KAC/B;IACD,YAAY,EAAE,iFAAiF;IAE/F,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,MAAM,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CredentialDefinition } from "../schema.js";
2
+ declare const xTwitterUserOauth1: CredentialDefinition;
3
+ export default xTwitterUserOauth1;
4
+ //# sourceMappingURL=x-twitter-user-oauth1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x-twitter-user-oauth1.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,QAAA,MAAM,kBAAkB,EAAE,oBAczB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,17 @@
1
+ const xTwitterUserOauth1 = {
2
+ id: "x_twitter_user_oauth1",
3
+ label: "X (Twitter) User OAuth 1.0a Tokens",
4
+ description: "OAuth 1.0a user-context tokens for a bot account (required for Account Activity API subscriptions)",
5
+ helpUrl: "https://developer.x.com/en/portal/dashboard",
6
+ fields: [
7
+ { name: "access_token", label: "Access Token", description: "OAuth 1.0a Access Token from the bot user's 'Keys and tokens' tab", secret: true },
8
+ { name: "access_token_secret", label: "Access Token Secret", description: "OAuth 1.0a Access Token Secret from the bot user's 'Keys and tokens' tab", secret: true },
9
+ ],
10
+ envVars: {
11
+ access_token: "X_ACCESS_TOKEN",
12
+ access_token_secret: "X_ACCESS_TOKEN_SECRET",
13
+ },
14
+ agentContext: "`X_ACCESS_TOKEN`, `X_ACCESS_TOKEN_SECRET` — OAuth 1.0a user-context auth for X API (Account Activity API)",
15
+ };
16
+ export default xTwitterUserOauth1;
17
+ //# sourceMappingURL=x-twitter-user-oauth1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x-twitter-user-oauth1.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth1.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAyB;IAC/C,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,oCAAoC;IAC3C,WAAW,EAAE,oGAAoG;IACjH,OAAO,EAAE,6CAA6C;IACtD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,mEAAmE,EAAE,MAAM,EAAE,IAAI,EAAE;QAC/I,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,0EAA0E,EAAE,MAAM,EAAE,IAAI,EAAE;KACrK;IACD,OAAO,EAAE;QACP,YAAY,EAAE,gBAAgB;QAC9B,mBAAmB,EAAE,uBAAuB;KAC7C;IACD,YAAY,EAAE,2GAA2G;CAC1H,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CredentialDefinition } from "../schema.js";
2
+ declare const xTwitterUserOauth2: CredentialDefinition;
3
+ export default xTwitterUserOauth2;
4
+ //# sourceMappingURL=x-twitter-user-oauth2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x-twitter-user-oauth2.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAqJzD,QAAA,MAAM,kBAAkB,EAAE,oBAiEzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,195 @@
1
+ import { createHash, randomBytes } from "crypto";
2
+ import { createServer } from "http";
3
+ import { password, confirm } from "@inquirer/prompts";
4
+ /** Scopes required for Account Activity API subscriptions and DMs */
5
+ const OAUTH2_SCOPES = "dm.read dm.write tweet.read users.read offline.access";
6
+ const AUTHORIZE_URL = "https://x.com/i/oauth2/authorize";
7
+ const TOKEN_URL = "https://api.x.com/2/oauth2/token";
8
+ /** Fixed port for the OAuth callback server — must match the redirect URI registered in the X console */
9
+ const CALLBACK_PORT = 3829;
10
+ const CALLBACK_URI = `http://localhost:${CALLBACK_PORT}/callback`;
11
+ /**
12
+ * Run the OAuth 2.0 PKCE flow by starting a temporary local HTTP server,
13
+ * opening the browser for user authorization, and exchanging the code for tokens.
14
+ */
15
+ async function runPkceFlow(clientId, clientSecret) {
16
+ // Generate PKCE code verifier and challenge
17
+ const codeVerifier = randomBytes(32).toString("base64url");
18
+ const codeChallenge = createHash("sha256").update(codeVerifier).digest("base64url");
19
+ const state = randomBytes(16).toString("hex");
20
+ return new Promise((resolve, reject) => {
21
+ const connections = new Set();
22
+ const server = createServer((req, res) => {
23
+ const url = new URL(req.url ?? "/", "http://localhost");
24
+ if (url.pathname !== "/callback") {
25
+ res.writeHead(404);
26
+ res.end();
27
+ return;
28
+ }
29
+ const code = url.searchParams.get("code");
30
+ const returnedState = url.searchParams.get("state");
31
+ const error = url.searchParams.get("error");
32
+ if (error) {
33
+ res.writeHead(200, { "Content-Type": "text/html" });
34
+ res.end("<html><body><h2>Authorization failed</h2><p>You can close this tab.</p></body></html>");
35
+ shutdown();
36
+ reject(new Error(`OAuth 2.0 authorization error: ${error}`));
37
+ return;
38
+ }
39
+ if (!code || returnedState !== state) {
40
+ res.writeHead(400, { "Content-Type": "text/html" });
41
+ res.end("<html><body><h2>Invalid callback</h2><p>Missing code or state mismatch.</p></body></html>");
42
+ shutdown();
43
+ reject(new Error("OAuth 2.0 callback: missing code or state mismatch"));
44
+ return;
45
+ }
46
+ res.writeHead(200, { "Content-Type": "text/html" });
47
+ res.end("<html><body><h2>Authorization successful!</h2><p>You can close this tab and return to the terminal.</p></body></html>");
48
+ // Exchange authorization code for tokens (30-second deadline)
49
+ const basicAuth = Buffer.from(`${clientId}:${clientSecret}`).toString("base64");
50
+ fetch(TOKEN_URL, {
51
+ method: "POST",
52
+ headers: {
53
+ "Content-Type": "application/x-www-form-urlencoded",
54
+ Authorization: `Basic ${basicAuth}`,
55
+ },
56
+ body: new URLSearchParams({
57
+ grant_type: "authorization_code",
58
+ code,
59
+ redirect_uri: CALLBACK_URI,
60
+ code_verifier: codeVerifier,
61
+ }),
62
+ })
63
+ .then(async (tokenRes) => {
64
+ if (!tokenRes.ok) {
65
+ const body = await tokenRes.text();
66
+ throw new Error(`Token exchange failed (${tokenRes.status}): ${body}`);
67
+ }
68
+ return tokenRes.json();
69
+ })
70
+ .then((data) => {
71
+ shutdown();
72
+ if (!data.access_token) {
73
+ reject(new Error("Token exchange response missing access_token"));
74
+ return;
75
+ }
76
+ resolve({
77
+ accessToken: data.access_token,
78
+ refreshToken: data.refresh_token ?? "",
79
+ });
80
+ })
81
+ .catch((err) => {
82
+ shutdown();
83
+ reject(err);
84
+ });
85
+ });
86
+ server.on("connection", (sock) => {
87
+ connections.add(sock);
88
+ sock.on("close", () => connections.delete(sock));
89
+ });
90
+ function shutdown() {
91
+ for (const sock of connections)
92
+ sock.destroy();
93
+ server.close();
94
+ }
95
+ server.listen(CALLBACK_PORT, "127.0.0.1", () => {
96
+ const params = new URLSearchParams({
97
+ response_type: "code",
98
+ client_id: clientId,
99
+ redirect_uri: CALLBACK_URI,
100
+ scope: OAUTH2_SCOPES,
101
+ state,
102
+ code_challenge: codeChallenge,
103
+ code_challenge_method: "S256",
104
+ });
105
+ const authUrl = `${AUTHORIZE_URL}?${params}`;
106
+ console.log(`\n Opening browser for X authorization...`);
107
+ console.log(` If it doesn't open, visit:\n ${authUrl}\n`);
108
+ // Open browser (best-effort)
109
+ import("child_process").then(({ exec }) => {
110
+ const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
111
+ exec(`${cmd} "${authUrl}"`);
112
+ });
113
+ });
114
+ // Timeout after 2 minutes
115
+ setTimeout(() => {
116
+ shutdown();
117
+ reject(new Error("OAuth 2.0 authorization timed out (2 minutes)"));
118
+ }, 120_000);
119
+ });
120
+ }
121
+ /** Validate the access token by calling the /2/users/me endpoint */
122
+ async function validateAccessToken(accessToken) {
123
+ const res = await fetch("https://api.x.com/2/users/me", {
124
+ headers: { Authorization: `Bearer ${accessToken}` },
125
+ });
126
+ if (!res.ok) {
127
+ const body = await res.text();
128
+ throw new Error(`X OAuth 2.0 token validation failed (${res.status}): ${body}`);
129
+ }
130
+ const data = (await res.json());
131
+ if (data.data?.username) {
132
+ console.log(` Authenticated as @${data.data.username}`);
133
+ }
134
+ }
135
+ const xTwitterUserOauth2 = {
136
+ id: "x_twitter_user_oauth2",
137
+ label: "X (Twitter) User OAuth 2.0 Credentials",
138
+ description: "OAuth 2.0 PKCE credentials for user-context authentication (DMs, tweets, Account Activity subscriptions)",
139
+ helpUrl: "https://developer.x.com/en/portal/dashboard",
140
+ fields: [
141
+ { name: "client_id", label: "Client ID", description: "OAuth 2.0 Client ID from the 'Keys and tokens' tab in the X Developer Portal", secret: true },
142
+ { name: "client_secret", label: "Client Secret", description: "OAuth 2.0 Client Secret from the 'Keys and tokens' tab in the X Developer Portal", secret: true },
143
+ { name: "access_token", label: "Access Token", description: "OAuth 2.0 user access token (obtained via PKCE flow)", secret: true },
144
+ { name: "refresh_token", label: "Refresh Token", description: "OAuth 2.0 refresh token for obtaining new access tokens", secret: true },
145
+ ],
146
+ envVars: {
147
+ client_id: "X_OAUTH2_CLIENT_ID",
148
+ client_secret: "X_OAUTH2_CLIENT_SECRET",
149
+ access_token: "X_OAUTH2_ACCESS_TOKEN",
150
+ refresh_token: "X_OAUTH2_REFRESH_TOKEN",
151
+ },
152
+ agentContext: "`X_OAUTH2_ACCESS_TOKEN`, `X_OAUTH2_REFRESH_TOKEN`, `X_OAUTH2_CLIENT_ID`, `X_OAUTH2_CLIENT_SECRET` — OAuth 2.0 user-context auth for X API v2 (DMs, tweets, Account Activity subscriptions)",
153
+ async prompt(existing) {
154
+ if (existing?.access_token && existing?.client_id) {
155
+ const reuse = await confirm({
156
+ message: "Found existing X OAuth 2.0 credentials. Use them?",
157
+ default: true,
158
+ });
159
+ if (reuse)
160
+ return { values: existing };
161
+ }
162
+ console.log(`\n X (Twitter) User OAuth 2.0 Credentials`);
163
+ console.log(` OAuth 2.0 PKCE flow for user-context auth (DMs, Account Activity subscriptions)`);
164
+ console.log(` → https://developer.x.com/en/portal/dashboard\n`);
165
+ console.log(` Add this exact Callback URI in your app's OAuth 2.0 settings:`);
166
+ console.log(` ${CALLBACK_URI}\n`);
167
+ const clientId = await password({
168
+ message: "X OAuth 2.0 — Client ID:",
169
+ mask: "*",
170
+ validate: (v) => (v.trim().length > 0 ? true : "Client ID is required"),
171
+ });
172
+ const clientSecret = await password({
173
+ message: "X OAuth 2.0 — Client Secret:",
174
+ mask: "*",
175
+ validate: (v) => (v.trim().length > 0 ? true : "Client Secret is required"),
176
+ });
177
+ console.log(`\n Starting OAuth 2.0 PKCE flow to obtain user access token...`);
178
+ console.log(` Requested scopes: ${OAUTH2_SCOPES}\n`);
179
+ const { accessToken, refreshToken } = await runPkceFlow(clientId.trim(), clientSecret.trim());
180
+ return {
181
+ values: {
182
+ client_id: clientId.trim(),
183
+ client_secret: clientSecret.trim(),
184
+ access_token: accessToken,
185
+ refresh_token: refreshToken,
186
+ },
187
+ };
188
+ },
189
+ async validate(values) {
190
+ await validateAccessToken(values.access_token);
191
+ return true;
192
+ },
193
+ };
194
+ export default xTwitterUserOauth2;
195
+ //# sourceMappingURL=x-twitter-user-oauth2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x-twitter-user-oauth2.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qEAAqE;AACrE,MAAM,aAAa,GAAG,uDAAuD,CAAC;AAE9E,MAAM,aAAa,GAAG,kCAAkC,CAAC;AACzD,MAAM,SAAS,GAAG,kCAAkC,CAAC;AACrD,yGAAyG;AACzG,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,YAAY,GAAG,oBAAoB,aAAa,WAAW,CAAC;AAElE;;;GAGG;AACH,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,YAAoB;IAC/D,4CAA4C;IAC5C,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE5C,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC;gBACjG,QAAQ,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;gBACrC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC;gBACrG,QAAQ,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,uHAAuH,CAAC,CAAC;YAEjI,8DAA8D;YAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChF,KAAK,CAAC,SAAS,EAAE;gBACf,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,mCAAmC;oBACnD,aAAa,EAAE,SAAS,SAAS,EAAE;iBACpC;gBACD,IAAI,EAAE,IAAI,eAAe,CAAC;oBACxB,UAAU,EAAE,oBAAoB;oBAChC,IAAI;oBACJ,YAAY,EAAE,YAAY;oBAC1B,aAAa,EAAE,YAAY;iBAC5B,CAAC;aACH,CAAC;iBACC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzB,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;gBAClB,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;oBAClE,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC;oBACN,WAAW,EAAE,IAAI,CAAC,YAAY;oBAC9B,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;iBACvC,CAAC,CAAC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,QAAQ,EAAE,CAAC;gBACX,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,SAAS,QAAQ;YACf,KAAK,MAAM,IAAI,IAAI,WAAW;gBAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;gBACjC,aAAa,EAAE,MAAM;gBACrB,SAAS,EAAE,QAAQ;gBACnB,YAAY,EAAE,YAAY;gBAC1B,KAAK,EAAE,aAAa;gBACpB,KAAK;gBACL,cAAc,EAAE,aAAa;gBAC7B,qBAAqB,EAAE,MAAM;aAC9B,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,GAAG,aAAa,IAAI,MAAM,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,IAAI,CAAC,CAAC;YAE5D,6BAA6B;YAC7B,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBACxC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;gBACzG,IAAI,CAAC,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACrE,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IACpD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,8BAA8B,EAAE;QACtD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;KACpD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqC,CAAC;IACpE,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,MAAM,kBAAkB,GAAyB;IAC/C,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,wCAAwC;IAC/C,WAAW,EAAE,0GAA0G;IACvH,OAAO,EAAE,6CAA6C;IACtD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,8EAA8E,EAAE,MAAM,EAAE,IAAI,EAAE;QACpJ,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kFAAkF,EAAE,MAAM,EAAE,IAAI,EAAE;QAChK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,sDAAsD,EAAE,MAAM,EAAE,IAAI,EAAE;QAClI,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,yDAAyD,EAAE,MAAM,EAAE,IAAI,EAAE;KACxI;IACD,OAAO,EAAE;QACP,SAAS,EAAE,oBAAoB;QAC/B,aAAa,EAAE,wBAAwB;QACvC,YAAY,EAAE,uBAAuB;QACrC,aAAa,EAAE,wBAAwB;KACxC;IACD,YAAY,EAAE,4LAA4L;IAE1M,KAAK,CAAC,MAAM,CAAC,QAAQ;QACnB,IAAI,QAAQ,EAAE,YAAY,IAAI,QAAQ,EAAE,SAAS,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;gBAC1B,OAAO,EAAE,mDAAmD;gBAC5D,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,IAAI,KAAK;gBAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACzC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC;QAEnC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC;YAC9B,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;SAChF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC;YAClC,OAAO,EAAE,8BAA8B;YACvC,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;SACpF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,uBAAuB,aAAa,IAAI,CAAC,CAAC;QAEtD,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9F,OAAO;YACL,MAAM,EAAE;gBACN,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE;gBAC1B,aAAa,EAAE,YAAY,CAAC,IAAI,EAAE;gBAClC,YAAY,EAAE,WAAW;gBACzB,aAAa,EAAE,YAAY;aAC5B;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,MAAM,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompter.d.ts","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAUhF;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,oBAAoB,EACzB,QAAQ,GAAE,MAAkB,GAC3B,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CA2C7C"}
1
+ {"version":3,"file":"prompter.d.ts","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAUhF;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,oBAAoB,EACzB,QAAQ,GAAE,MAAkB,GAC3B,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAwE7C"}
@@ -25,12 +25,37 @@ export async function promptCredential(def, instance = "default") {
25
25
  }
26
26
  // Default field-by-field prompting
27
27
  if (existing) {
28
- const reuse = await confirm({
29
- message: `Found existing ${def.label}. Use it?`,
30
- default: true,
31
- });
32
- if (reuse)
33
- return { values: existing };
28
+ // Check for missing optional fields that were added after initial setup
29
+ const missingOptional = def.fields.filter((f) => f.optional && !(f.name in existing));
30
+ if (missingOptional.length === 0) {
31
+ const reuse = await confirm({
32
+ message: `Found existing ${def.label}. Use it?`,
33
+ default: true,
34
+ });
35
+ if (reuse)
36
+ return { values: existing };
37
+ }
38
+ else {
39
+ const reuse = await confirm({
40
+ message: `Found existing ${def.label} (${missingOptional.length} new optional field${missingOptional.length > 1 ? "s" : ""} available). Keep existing and add new fields?`,
41
+ default: true,
42
+ });
43
+ if (reuse) {
44
+ const values = { ...existing };
45
+ console.log();
46
+ for (const field of missingOptional) {
47
+ const prompt = field.secret ? password : input;
48
+ const value = await prompt({
49
+ message: `${def.label} — ${field.label} (optional):`,
50
+ mask: field.secret ? "*" : undefined,
51
+ });
52
+ if (value.trim()) {
53
+ values[field.name] = value.trim();
54
+ }
55
+ }
56
+ return { values };
57
+ }
58
+ }
34
59
  }
35
60
  // Show context
36
61
  console.log(`\n ${def.label}: ${def.description}`);
@@ -42,11 +67,15 @@ export async function promptCredential(def, instance = "default") {
42
67
  for (const field of def.fields) {
43
68
  const prompt = field.secret ? password : input;
44
69
  const value = await prompt({
45
- message: `${def.label} — ${field.label}:`,
70
+ message: `${def.label} — ${field.label}${field.optional ? " (optional)" : ""}:`,
46
71
  mask: field.secret ? "*" : undefined,
47
- validate: (v) => (v.trim().length > 0 ? true : `${field.label} is required`),
72
+ validate: field.optional
73
+ ? undefined
74
+ : (v) => (v.trim().length > 0 ? true : `${field.label} is required`),
48
75
  });
49
- values[field.name] = value.trim();
76
+ if (value.trim()) {
77
+ values[field.name] = value.trim();
78
+ }
50
79
  }
51
80
  // Validate if validator is defined
52
81
  if (def.validate) {
@@ -1 +1 @@
1
- {"version":3,"file":"prompter.js","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAyB,EAAE,QAAgB;IAC3E,OAAO,MAAM,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAyB,EACzB,WAAmB,SAAS;IAE5B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,mCAAmC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;YAC1B,OAAO,EAAE,kBAAkB,GAAG,CAAC,KAAK,WAAW;YAC/C,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;YACzB,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM,KAAK,CAAC,KAAK,GAAG;YACzC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YACpC,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,cAAc,CAAC;SAC9E,CAAC,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,mCAAmC;IACnC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;QAC1C,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"prompter.js","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export interface CredentialField {
3
3
  label: string;
4
4
  description: string;
5
5
  secret: boolean;
6
+ optional?: boolean;
6
7
  }
7
8
  export interface CredentialPromptResult {
8
9
  values: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/credentials/schema.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAG1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAKjC,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAKhE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;CAC7F"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/credentials/schema.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAG1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAKjC,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAKhE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;CAC7F"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * HostUserRuntime — runs agents as a separate OS user via `sudo -u`.
3
+ *
4
+ * Provides lightweight isolation without Docker:
5
+ * - Agent process runs as a dedicated OS user (can't access operator credentials)
6
+ * - Credentials staged to a temp dir, path passed via AL_CREDENTIALS_PATH
7
+ * - Working directory: /tmp/al-runs/<instance-id>/ (chowned to agent user)
8
+ * - Logs written to /tmp/al-runs/<instance-id>.log (owned by scheduler)
9
+ * - No image builds, no containers, no Docker dependency
10
+ */
11
+ import type { Runtime, RuntimeLaunchOpts, RuntimeCredentials, RunningAgent } from "./runtime.js";
12
+ export declare class HostUserRuntime implements Runtime {
13
+ readonly needsGateway = false;
14
+ private runAs;
15
+ private processes;
16
+ private runAgentNames;
17
+ constructor(runAs?: string);
18
+ isAgentRunning(agentName: string): Promise<boolean>;
19
+ listRunningAgents(): Promise<RunningAgent[]>;
20
+ prepareCredentials(credRefs: string[]): Promise<RuntimeCredentials>;
21
+ cleanupCredentials(creds: RuntimeCredentials): void;
22
+ launch(opts: RuntimeLaunchOpts): Promise<string>;
23
+ streamLogs(runId: string, onLine: (line: string) => void, onStderr?: (text: string) => void): {
24
+ stop: () => void;
25
+ };
26
+ waitForExit(runId: string, timeoutSeconds: number): Promise<number>;
27
+ kill(runId: string): Promise<void>;
28
+ remove(runId: string): Promise<void>;
29
+ fetchLogs(agentName: string, limit: number): Promise<string[]>;
30
+ followLogs(_agentName: string, _onLine: (line: string) => void, _onStderr?: (text: string) => void): {
31
+ stop: () => void;
32
+ };
33
+ getTaskUrl(): string | null;
34
+ }
35
+ //# sourceMappingURL=host-user-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-user-runtime.d.ts","sourceRoot":"","sources":["../../src/docker/host-user-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EACV,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAC5B,YAAY,EAC/B,MAAM,cAAc,CAAC;AAkCtB,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,YAAY,SAAS;IAE9B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,aAAa,CAA6B;gBAEtC,KAAK,GAAE,MAAmB;IAIhC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnD,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAe5C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoDzE,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAM7C,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6DtD,UAAU,CACR,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;IA4BvB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B7D,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBpE,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC/B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACjC;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;IAKvB,UAAU,IAAI,MAAM,GAAG,IAAI;CAG5B"}