lorenz 0.1.1 → 0.1.3

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 (112) hide show
  1. package/README.md +75 -738
  2. package/RELEASE-MANIFEST.json +1 -1
  3. package/apps/cli/dist/doctor.d.ts.map +1 -1
  4. package/apps/cli/dist/doctor.js +20 -1
  5. package/apps/cli/dist/doctor.js.map +1 -1
  6. package/apps/cli/dist/main.d.ts.map +1 -1
  7. package/apps/cli/dist/main.js +10 -1
  8. package/apps/cli/dist/main.js.map +1 -1
  9. package/extensions/docker-worker/package.json +1 -1
  10. package/extensions/jira-tracker/package.json +1 -1
  11. package/extensions/linear-tracker/package.json +1 -1
  12. package/extensions/local-tracker/package.json +1 -1
  13. package/extensions/memory-tracker/package.json +1 -1
  14. package/extensions/slack-tracker/dist/client.d.ts +13 -2
  15. package/extensions/slack-tracker/dist/client.d.ts.map +1 -1
  16. package/extensions/slack-tracker/dist/client.js +28 -2
  17. package/extensions/slack-tracker/dist/client.js.map +1 -1
  18. package/extensions/slack-tracker/dist/inMemoryTransport.d.ts +4 -1
  19. package/extensions/slack-tracker/dist/inMemoryTransport.d.ts.map +1 -1
  20. package/extensions/slack-tracker/dist/inMemoryTransport.js +4 -2
  21. package/extensions/slack-tracker/dist/inMemoryTransport.js.map +1 -1
  22. package/extensions/slack-tracker/dist/index.d.ts +3 -1
  23. package/extensions/slack-tracker/dist/index.d.ts.map +1 -1
  24. package/extensions/slack-tracker/dist/index.js +2 -1
  25. package/extensions/slack-tracker/dist/index.js.map +1 -1
  26. package/extensions/slack-tracker/dist/mapping.d.ts +9 -0
  27. package/extensions/slack-tracker/dist/mapping.d.ts.map +1 -1
  28. package/extensions/slack-tracker/dist/mapping.js +13 -0
  29. package/extensions/slack-tracker/dist/mapping.js.map +1 -1
  30. package/extensions/slack-tracker/dist/operations.d.ts.map +1 -1
  31. package/extensions/slack-tracker/dist/operations.js +8 -4
  32. package/extensions/slack-tracker/dist/operations.js.map +1 -1
  33. package/extensions/slack-tracker/dist/options.d.ts +21 -1
  34. package/extensions/slack-tracker/dist/options.d.ts.map +1 -1
  35. package/extensions/slack-tracker/dist/options.js +3 -0
  36. package/extensions/slack-tracker/dist/options.js.map +1 -1
  37. package/extensions/slack-tracker/dist/provider.d.ts.map +1 -1
  38. package/extensions/slack-tracker/dist/provider.js +21 -1
  39. package/extensions/slack-tracker/dist/provider.js.map +1 -1
  40. package/extensions/slack-tracker/dist/socketMode.d.ts +81 -0
  41. package/extensions/slack-tracker/dist/socketMode.d.ts.map +1 -0
  42. package/extensions/slack-tracker/dist/socketMode.js +226 -0
  43. package/extensions/slack-tracker/dist/socketMode.js.map +1 -0
  44. package/extensions/slack-tracker/dist/threadState.d.ts.map +1 -1
  45. package/extensions/slack-tracker/dist/threadState.js +8 -4
  46. package/extensions/slack-tracker/dist/threadState.js.map +1 -1
  47. package/extensions/slack-tracker/dist/webTransport.d.ts +1 -0
  48. package/extensions/slack-tracker/dist/webTransport.d.ts.map +1 -1
  49. package/extensions/slack-tracker/dist/webTransport.js +10 -4
  50. package/extensions/slack-tracker/dist/webTransport.js.map +1 -1
  51. package/extensions/slack-tracker/package.json +1 -1
  52. package/package.json +1 -2
  53. package/packages/acp/package.json +1 -1
  54. package/packages/agent-runner/package.json +1 -1
  55. package/packages/agent-sdk/package.json +1 -1
  56. package/packages/cli-kit/package.json +1 -1
  57. package/packages/config/dist/deprecations.d.ts +13 -0
  58. package/packages/config/dist/deprecations.d.ts.map +1 -0
  59. package/packages/config/dist/deprecations.js +25 -0
  60. package/packages/config/dist/deprecations.js.map +1 -0
  61. package/packages/config/dist/index.d.ts +3 -0
  62. package/packages/config/dist/index.d.ts.map +1 -1
  63. package/packages/config/dist/index.js +1 -0
  64. package/packages/config/dist/index.js.map +1 -1
  65. package/packages/config/dist/parse.d.ts +11 -1
  66. package/packages/config/dist/parse.d.ts.map +1 -1
  67. package/packages/config/dist/parse.js +6 -1
  68. package/packages/config/dist/parse.js.map +1 -1
  69. package/packages/config/dist/schemas.d.ts +15 -0
  70. package/packages/config/dist/schemas.d.ts.map +1 -1
  71. package/packages/config/dist/schemas.js +127 -14
  72. package/packages/config/dist/schemas.js.map +1 -1
  73. package/packages/config/package.json +1 -1
  74. package/packages/dispatch/package.json +1 -1
  75. package/packages/dispatch-coordinator/package.json +1 -1
  76. package/packages/domain/dist/index.d.ts +22 -0
  77. package/packages/domain/dist/index.d.ts.map +1 -1
  78. package/packages/domain/dist/index.js.map +1 -1
  79. package/packages/domain/package.json +1 -1
  80. package/packages/humanize/package.json +1 -1
  81. package/packages/issue/package.json +1 -1
  82. package/packages/log-file/package.json +1 -1
  83. package/packages/mcp/package.json +1 -1
  84. package/packages/orchestrator/package.json +1 -1
  85. package/packages/policies/package.json +1 -1
  86. package/packages/presenter/package.json +1 -1
  87. package/packages/projections/package.json +1 -1
  88. package/packages/prompt/package.json +1 -1
  89. package/packages/retry-scheduler/package.json +1 -1
  90. package/packages/runtime/dist/index.d.ts +24 -0
  91. package/packages/runtime/dist/index.d.ts.map +1 -1
  92. package/packages/runtime/dist/index.js +78 -0
  93. package/packages/runtime/dist/index.js.map +1 -1
  94. package/packages/runtime/package.json +1 -1
  95. package/packages/runtime-events/dist/index.d.ts +1 -1
  96. package/packages/runtime-events/dist/index.d.ts.map +1 -1
  97. package/packages/runtime-events/dist/index.js +3 -0
  98. package/packages/runtime-events/dist/index.js.map +1 -1
  99. package/packages/runtime-events/package.json +1 -1
  100. package/packages/server/package.json +1 -1
  101. package/packages/ssh/package.json +1 -1
  102. package/packages/static-worker/package.json +1 -1
  103. package/packages/tool-sdk/package.json +1 -1
  104. package/packages/traceviz-emitter/package.json +1 -1
  105. package/packages/traceviz-server/package.json +1 -1
  106. package/packages/tracker-sdk/package.json +1 -1
  107. package/packages/tui/package.json +1 -1
  108. package/packages/worker-host-pool/package.json +1 -1
  109. package/packages/worker-pool/package.json +1 -1
  110. package/packages/worker-sdk/package.json +1 -1
  111. package/packages/workflow/package.json +1 -1
  112. package/packages/workspace/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAQ3D;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED,8FAA8F;AAC9F,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAChD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAgBnC;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAQ3D;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAED,8FAA8F;AAC9F,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAChD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAgBnC;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -1,4 +1,4 @@
1
- import { emojiForState, isBotMention, statusEmojiMap } from "./mapping.js";
1
+ import { emojiForState, isAllowedAuthor, isBotMention, statusEmojiMap } from "./mapping.js";
2
2
  import { slackTrackerOptions } from "./options.js";
3
3
  import { BOT_STATUS_PREFIX, resolveStateName } from "./threadState.js";
4
4
  /**
@@ -20,7 +20,7 @@ export function requireBotUserId(settings) {
20
20
  * otherwise.
21
21
  */
22
22
  export async function requireTrackedMessage(settings, transport, channel, ts) {
23
- const { channels } = slackTrackerOptions(settings);
23
+ const { channels, users } = slackTrackerOptions(settings);
24
24
  const botUserId = requireBotUserId(settings);
25
25
  if (!channels.includes(channel)) {
26
26
  throw new Error(`channel '${channel}' is not a configured tracker channel`);
@@ -29,14 +29,18 @@ export async function requireTrackedMessage(settings, transport, channel, ts) {
29
29
  if (!message) {
30
30
  throw new Error(`no tracked issue at ${channel}:${ts}`);
31
31
  }
32
- if (isBotMention(message.text, botUserId) || message.botReacted === true) {
32
+ // A root the bot already marked (its own reaction) stays tracked regardless of the author
33
+ // allowlist: it was accepted on an earlier poll, so tightening `users` later must not orphan
34
+ // an issue the agent is mid-flight on. New tracking honors the allowlist on the author.
35
+ if ((isBotMention(message.text, botUserId) && isAllowedAuthor(message.user, users)) ||
36
+ message.botReacted === true) {
33
37
  return message;
34
38
  }
35
39
  // Reply-tracked thread: the request lives in a reply rather than the root. Last resort
36
40
  // because it costs a conversations.replies fetch.
37
41
  if ((message.replyCount ?? 0) > 0) {
38
42
  const replies = await transport.getThread(channel, ts);
39
- if (replies.some((reply) => isBotMention(reply.text, botUserId)))
43
+ if (replies.some((reply) => isBotMention(reply.text, botUserId) && isAllowedAuthor(reply.user, users)))
40
44
  return message;
41
45
  }
42
46
  throw new Error("message is not a tracked bot-mention issue");
@@ -1 +1 @@
1
- {"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,11 @@ import type { Settings } from "@lorenz/domain";
2
2
  export declare const SLACK_DEFAULT_ENDPOINT = "https://slack.com/api";
3
3
  /** Slack-specific keys of the selected tracker bundle, validated by the provider. */
4
4
  export interface SlackTrackerOptions {
5
- /** Slack channel IDs to watch for mentions. */
5
+ /**
6
+ * Slack conversation IDs to watch for mentions. Public/private channels (`C…`/`G…`) and
7
+ * direct-message channels (`D…`) are treated identically: the bot-mention requirement applies
8
+ * to all of them, so a DM is watched by listing its `D…` id here.
9
+ */
6
10
  channels: string[];
7
11
  /**
8
12
  * Slack user id of the bot/worker identity (e.g. `"U0123ABCD"`). Only messages that
@@ -10,6 +14,22 @@ export interface SlackTrackerOptions {
10
14
  * (matches nothing) when it is unset.
11
15
  */
12
16
  botUserId?: string | undefined;
17
+ /**
18
+ * Slack app-level token (`xapp-...`) with the `connections:write` scope, enabling Socket Mode
19
+ * push: the client opens a WebSocket to Slack and re-polls the instant a watched mention or
20
+ * thread reply arrives, instead of waiting out `polling.intervalMs`. Optional; when unset the
21
+ * tracker is pull-only (interval polling), exactly as before. Bot-token reads/writes are
22
+ * unaffected either way - this token is used ONLY to open the events socket.
23
+ */
24
+ appToken?: string | undefined;
25
+ /**
26
+ * Optional allowlist of Slack user ids (e.g. `"U0123ABCD"`) whose messages may create issues.
27
+ * Empty means no author constraint (any author, as long as the bot is mentioned). When
28
+ * non-empty, only these users' bot-mentions become issues - the way to constrain dispatch to a
29
+ * known set of requesters, which is what makes a watched DM channel (anyone can DM the bot)
30
+ * safe. It only narrows dispatch; the bot-mention requirement still applies on top of it.
31
+ */
32
+ users: string[];
13
33
  /** Slack emoji-name → workflow-state overrides (merged over the defaults). */
14
34
  emojiStates?: Record<string, string> | undefined;
15
35
  /** Emoji the bot reacts with to mark a reply-tracked thread root (default `robot_face`). */
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACjD,4FAA4F;IAC5F,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB,CAa3E;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO9F;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAExD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAcnF"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACjD,4FAA4F;IAC5F,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB,CAgB3E;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO9F;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAExD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAcnF"}
@@ -5,12 +5,15 @@ export const SLACK_DEFAULT_ENDPOINT = "https://slack.com/api";
5
5
  export function slackTrackerOptions(settings) {
6
6
  const options = settings.tracker.options;
7
7
  const botUserId = stringOption(options, "botUserId");
8
+ const appToken = stringOption(options, "appToken");
8
9
  const emojiStates = emojiStatesValue(options.emojiStates);
9
10
  const markerEmoji = stringOption(options, "markerEmoji");
10
11
  const replyLookbackDays = numberOption(options, "replyLookbackDays");
11
12
  return {
12
13
  channels: stringListOption(options, "channels") ?? [],
14
+ users: stringListOption(options, "users") ?? [],
13
15
  ...(botUserId !== undefined ? { botUserId } : {}),
16
+ ...(appToken !== undefined ? { appToken } : {}),
14
17
  ...(emojiStates !== undefined ? { emojiStates } : {}),
15
18
  ...(markerEmoji !== undefined ? { markerEmoji } : {}),
16
19
  ...(replyLookbackDays !== undefined ? { replyLookbackDays } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkB3D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAwElC,CAAC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkB3D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,eA4FlC,CAAC"}
@@ -13,6 +13,7 @@ export const slackTrackerProvider = {
13
13
  kind: "slack",
14
14
  configAliases: {
15
15
  bot_user_id: "botUserId",
16
+ app_token: "appToken",
16
17
  emoji_states: "emojiStates",
17
18
  marker_emoji: "markerEmoji",
18
19
  reply_lookback_days: "replyLookbackDays",
@@ -20,20 +21,39 @@ export const slackTrackerProvider = {
20
21
  envFallbacks: { apiKey: "SLACK_BOT_TOKEN" },
21
22
  defaultEndpoint: SLACK_DEFAULT_ENDPOINT,
22
23
  parseOptions(options, context) {
23
- rejectUnknownOptions(options, ["channels", "botUserId", "emojiStates", "markerEmoji", "replyLookbackDays"], "slack");
24
+ rejectUnknownOptions(options, [
25
+ "channels",
26
+ "users",
27
+ "botUserId",
28
+ "appToken",
29
+ "emojiStates",
30
+ "markerEmoji",
31
+ "replyLookbackDays",
32
+ ], "slack");
24
33
  // Channel entries resolve `$VAR` references like the documented bot_user_id one line below
25
34
  // them; an unresolved reference collapses to empty and is dropped, so an all-empty list
26
35
  // fails dispatch validation instead of polling a literal "$SLACK_CHANNEL_ID" forever.
27
36
  const channels = stringListOption(options, "channels")
28
37
  ?.map((channel) => resolveEnvReference(channel, context.env))
29
38
  .filter((channel) => channel !== "");
39
+ // The optional author allowlist resolves `$VAR` references the same way and drops empties, so
40
+ // an unresolved `$SLACK_USER_ID` collapses to "no entry" rather than narrowing dispatch to a
41
+ // literal that can never match.
42
+ const users = stringListOption(options, "users")
43
+ ?.map((user) => resolveEnvReference(user, context.env))
44
+ .filter((user) => user !== "");
30
45
  const botUserId = context.resolveSecret?.(stringOption(options, "botUserId"), "SLACK_BOT_USER_ID");
46
+ // Resolved like the bot token: an explicit `$VAR`/`op://` reference, else the SLACK_APP_TOKEN
47
+ // env fallback. Left undefined when neither is present, which keeps the tracker pull-only.
48
+ const appToken = context.resolveSecret?.(stringOption(options, "appToken"), "SLACK_APP_TOKEN");
31
49
  const emojiStates = emojiStatesValue(options.emojiStates);
32
50
  const markerEmoji = stringOption(options, "markerEmoji");
33
51
  const replyLookbackDays = numberOption(options, "replyLookbackDays");
34
52
  return {
35
53
  ...(channels !== undefined && channels.length > 0 ? { channels } : {}),
54
+ ...(users !== undefined && users.length > 0 ? { users } : {}),
36
55
  ...(botUserId !== undefined ? { botUserId } : {}),
56
+ ...(appToken !== undefined && appToken !== "" ? { appToken } : {}),
37
57
  ...(emojiStates !== undefined ? { emojiStates } : {}),
38
58
  ...(markerEmoji !== undefined ? { markerEmoji } : {}),
39
59
  ...(replyLookbackDays !== undefined ? { replyLookbackDays } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { type TrackerChangeStream } from "@lorenz/domain";
2
+ import type { SlackTrackerLogger } from "./webTransport.js";
3
+ /**
4
+ * Minimal structural view of a WHATWG `WebSocket` - just the members Socket Mode needs. Kept
5
+ * local (rather than depending on a DOM lib or a `ws` package) so the only runtime requirement is
6
+ * the global `WebSocket` shipped by Node 22+, and so tests can inject a fake socket.
7
+ */
8
+ export interface SlackWebSocketLike {
9
+ send(data: string): void;
10
+ close(): void;
11
+ addEventListener(type: "open", listener: () => void): void;
12
+ addEventListener(type: "message", listener: (event: {
13
+ data: unknown;
14
+ }) => void): void;
15
+ addEventListener(type: "close", listener: () => void): void;
16
+ addEventListener(type: "error", listener: (event: unknown) => void): void;
17
+ }
18
+ export type SlackWebSocketFactory = (url: string) => SlackWebSocketLike;
19
+ /** Dependencies and knobs for {@link SlackSocketMode}; production callers rely on the defaults. */
20
+ export interface SlackSocketModeOptions {
21
+ /** Slack Web API base (e.g. `https://slack.com/api`) for `apps.connections.open`. */
22
+ endpoint: string;
23
+ /** App-level token (`xapp-...`) with `connections:write`; used ONLY to open the events socket. */
24
+ appToken: string;
25
+ /** Watched channel ids; events outside these are ignored so we never poll on unrelated traffic. */
26
+ channels: string[];
27
+ /** Invoked when a watched channel sees a mention/reply/reaction - the runtime re-polls promptly. */
28
+ onChange: () => void;
29
+ fetchImpl?: typeof fetch;
30
+ webSocketFactory?: SlackWebSocketFactory;
31
+ logger?: SlackTrackerLogger;
32
+ /** Backoff for the Nth (0-based) consecutive reconnect; defaults to capped exponential. */
33
+ reconnectDelayMs?: (attempt: number) => number;
34
+ }
35
+ /**
36
+ * Slack Socket Mode client: opens a WebSocket via `apps.connections.open` and invokes
37
+ * {@link SlackSocketModeOptions.onChange} the instant a watched channel sees an `app_mention`,
38
+ * a `message` (covers thread-reply mentions and human `!status` commands), or a reaction change.
39
+ * This is Slack's recommended push transport - no public HTTP endpoint, just an app-level token -
40
+ * and it lets the runtime dispatch immediately instead of waiting out the (deliberately
41
+ * conservative) poll interval.
42
+ *
43
+ * The connection self-heals: Slack recycles Socket Mode connections periodically (a `disconnect`
44
+ * frame precedes closure) and the network can drop, so a closed socket reconnects with capped
45
+ * exponential backoff. The nudge is best-effort by contract - the interval poll remains the safety
46
+ * net - so a dropped frame or a reconnect gap only delays discovery to the next interval, never
47
+ * loses an issue.
48
+ */
49
+ export declare class SlackSocketMode implements TrackerChangeStream {
50
+ private readonly endpoint;
51
+ private readonly appToken;
52
+ private readonly channels;
53
+ private readonly onChange;
54
+ private readonly fetchImpl;
55
+ private readonly webSocketFactory;
56
+ private readonly logger;
57
+ private readonly reconnectDelayMs;
58
+ private socket;
59
+ private closed;
60
+ private reconnectAttempts;
61
+ private reconnectTimer;
62
+ constructor(options: SlackSocketModeOptions);
63
+ /** Begins connecting (detached). Resolves once the first connection attempt has been kicked off. */
64
+ start(): void;
65
+ /** Idempotent: stops reconnecting and closes the live socket. Safe to call more than once. */
66
+ close(): void;
67
+ private connect;
68
+ /** Resolve the single-use `wss://` URL for a Socket Mode connection. */
69
+ private openConnection;
70
+ private onMessage;
71
+ /**
72
+ * True when an Events API payload describes activity in a watched channel that could create or
73
+ * advance an issue: a mention, any channel/thread message, or a reaction change. The poll
74
+ * re-derives candidates with the real bot-mention/marker scoping, so a broad match here only
75
+ * risks one extra (coalesced, rate-limited) poll - never a spurious dispatch.
76
+ */
77
+ private eventTouchesWatchedChannel;
78
+ private onSocketClosed;
79
+ private scheduleReconnect;
80
+ }
81
+ //# sourceMappingURL=socketMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketMode.d.ts","sourceRoot":"","sources":["../src/socketMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAElF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC3D,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACtF,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC5D,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CAC3E;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,kBAAkB,CAAC;AAmBxE,mGAAmG;AACnG,MAAM,WAAW,sBAAsB;IACrC,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,kGAAkG;IAClG,QAAQ,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oGAAoG;IACpG,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAChD;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAgB,YAAW,mBAAmB;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAE/D,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;gBAExD,OAAO,EAAE,sBAAsB;IAW3C,oGAAoG;IACpG,KAAK,IAAI,IAAI;IAIb,8FAA8F;IAC9F,KAAK,IAAI,IAAI;YAkBC,OAAO;IAiCrB,wEAAwE;YAC1D,cAAc;IAsB5B,OAAO,CAAC,SAAS;IAwCjB;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAkBlC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,iBAAiB;CAY1B"}
@@ -0,0 +1,226 @@
1
+ import { errorMessage, isRecord } from "@lorenz/domain";
2
+ const defaultWebSocketFactory = (url) => {
3
+ const Ctor = globalThis.WebSocket;
4
+ if (!Ctor) {
5
+ throw new Error("slack socket mode: a global WebSocket is required (Node 22+) but is unavailable");
6
+ }
7
+ return new Ctor(url);
8
+ };
9
+ /** Cap on reconnect backoff: a persistently failing socket retries at most this often. */
10
+ const MAX_RECONNECT_DELAY_MS = 30_000;
11
+ const BASE_RECONNECT_DELAY_MS = 1_000;
12
+ const defaultReconnectDelayMs = (attempt) => Math.min(BASE_RECONNECT_DELAY_MS * 2 ** attempt, MAX_RECONNECT_DELAY_MS);
13
+ /**
14
+ * Slack Socket Mode client: opens a WebSocket via `apps.connections.open` and invokes
15
+ * {@link SlackSocketModeOptions.onChange} the instant a watched channel sees an `app_mention`,
16
+ * a `message` (covers thread-reply mentions and human `!status` commands), or a reaction change.
17
+ * This is Slack's recommended push transport - no public HTTP endpoint, just an app-level token -
18
+ * and it lets the runtime dispatch immediately instead of waiting out the (deliberately
19
+ * conservative) poll interval.
20
+ *
21
+ * The connection self-heals: Slack recycles Socket Mode connections periodically (a `disconnect`
22
+ * frame precedes closure) and the network can drop, so a closed socket reconnects with capped
23
+ * exponential backoff. The nudge is best-effort by contract - the interval poll remains the safety
24
+ * net - so a dropped frame or a reconnect gap only delays discovery to the next interval, never
25
+ * loses an issue.
26
+ */
27
+ export class SlackSocketMode {
28
+ endpoint;
29
+ appToken;
30
+ channels;
31
+ onChange;
32
+ fetchImpl;
33
+ webSocketFactory;
34
+ logger;
35
+ reconnectDelayMs;
36
+ socket = null;
37
+ closed = false;
38
+ reconnectAttempts = 0;
39
+ reconnectTimer = null;
40
+ constructor(options) {
41
+ this.endpoint = options.endpoint.replace(/\/+$/, "");
42
+ this.appToken = options.appToken;
43
+ this.channels = new Set(options.channels);
44
+ this.onChange = options.onChange;
45
+ this.fetchImpl = options.fetchImpl ?? fetch;
46
+ this.webSocketFactory = options.webSocketFactory ?? defaultWebSocketFactory;
47
+ this.logger = options.logger ?? { warn: (message) => console.warn(message) };
48
+ this.reconnectDelayMs = options.reconnectDelayMs ?? defaultReconnectDelayMs;
49
+ }
50
+ /** Begins connecting (detached). Resolves once the first connection attempt has been kicked off. */
51
+ start() {
52
+ void this.connect();
53
+ }
54
+ /** Idempotent: stops reconnecting and closes the live socket. Safe to call more than once. */
55
+ close() {
56
+ if (this.closed)
57
+ return;
58
+ this.closed = true;
59
+ if (this.reconnectTimer) {
60
+ clearTimeout(this.reconnectTimer);
61
+ this.reconnectTimer = null;
62
+ }
63
+ const socket = this.socket;
64
+ this.socket = null;
65
+ if (socket) {
66
+ try {
67
+ socket.close();
68
+ }
69
+ catch {
70
+ // The socket may already be closing/closed; nothing to recover.
71
+ }
72
+ }
73
+ }
74
+ async connect() {
75
+ if (this.closed)
76
+ return;
77
+ let url;
78
+ try {
79
+ url = await this.openConnection();
80
+ }
81
+ catch (error) {
82
+ this.scheduleReconnect(`apps.connections.open failed: ${errorMessage(error)}`);
83
+ return;
84
+ }
85
+ if (this.closed)
86
+ return;
87
+ let socket;
88
+ try {
89
+ socket = this.webSocketFactory(url);
90
+ }
91
+ catch (error) {
92
+ this.scheduleReconnect(`websocket open failed: ${errorMessage(error)}`);
93
+ return;
94
+ }
95
+ this.socket = socket;
96
+ socket.addEventListener("message", (event) => this.onMessage(socket, event.data));
97
+ socket.addEventListener("close", () => this.onSocketClosed(socket));
98
+ socket.addEventListener("error", () => {
99
+ // The matching `close` event drives reconnection; a bare error with no close should not
100
+ // wedge the connection, so close the socket to force one.
101
+ try {
102
+ socket.close();
103
+ }
104
+ catch {
105
+ // Already closing.
106
+ }
107
+ });
108
+ }
109
+ /** Resolve the single-use `wss://` URL for a Socket Mode connection. */
110
+ async openConnection() {
111
+ const response = await this.fetchImpl(`${this.endpoint}/apps.connections.open`, {
112
+ method: "POST",
113
+ headers: {
114
+ authorization: `Bearer ${this.appToken}`,
115
+ "content-type": "application/x-www-form-urlencoded",
116
+ },
117
+ signal: AbortSignal.timeout(30_000),
118
+ });
119
+ let body;
120
+ try {
121
+ body = (await response.json());
122
+ }
123
+ catch {
124
+ throw new Error(`non-JSON response (HTTP ${response.status})`);
125
+ }
126
+ if (body.ok !== true || typeof body.url !== "string" || body.url === "") {
127
+ const reason = typeof body.error === "string" ? body.error : String(response.status);
128
+ throw new Error(reason);
129
+ }
130
+ return body.url;
131
+ }
132
+ onMessage(socket, data) {
133
+ if (typeof data !== "string")
134
+ return;
135
+ let frame;
136
+ try {
137
+ frame = JSON.parse(data);
138
+ }
139
+ catch {
140
+ return;
141
+ }
142
+ if (!isRecord(frame))
143
+ return;
144
+ // Every envelope-bearing frame MUST be acknowledged or Slack treats delivery as failed and
145
+ // redelivers; ack first, then act, so a throw in handling never drops the ack.
146
+ if (typeof frame.envelope_id === "string") {
147
+ try {
148
+ socket.send(JSON.stringify({ envelope_id: frame.envelope_id }));
149
+ }
150
+ catch {
151
+ // A send on a half-closed socket throws; the close handler will reconnect.
152
+ }
153
+ }
154
+ if (frame.type === "hello") {
155
+ // A live connection resets the backoff so the NEXT drop retries promptly.
156
+ this.reconnectAttempts = 0;
157
+ return;
158
+ }
159
+ if (frame.type === "disconnect") {
160
+ // Slack is recycling this connection. Close so the standard reconnect path opens a fresh
161
+ // one (the interval poll covers the brief gap).
162
+ try {
163
+ socket.close();
164
+ }
165
+ catch {
166
+ // Already closing.
167
+ }
168
+ return;
169
+ }
170
+ if (frame.type === "events_api" && this.eventTouchesWatchedChannel(frame.payload)) {
171
+ this.onChange();
172
+ }
173
+ }
174
+ /**
175
+ * True when an Events API payload describes activity in a watched channel that could create or
176
+ * advance an issue: a mention, any channel/thread message, or a reaction change. The poll
177
+ * re-derives candidates with the real bot-mention/marker scoping, so a broad match here only
178
+ * risks one extra (coalesced, rate-limited) poll - never a spurious dispatch.
179
+ */
180
+ eventTouchesWatchedChannel(payload) {
181
+ if (!isRecord(payload))
182
+ return false;
183
+ const event = payload.event;
184
+ if (!isRecord(event))
185
+ return false;
186
+ const type = event.type;
187
+ if (type !== "app_mention" &&
188
+ type !== "message" &&
189
+ type !== "reaction_added" &&
190
+ type !== "reaction_removed") {
191
+ return false;
192
+ }
193
+ const channel = channelOfEvent(event);
194
+ // No channels configured means "watch nothing" rather than "watch everything": fail closed.
195
+ return channel !== null && this.channels.has(channel);
196
+ }
197
+ onSocketClosed(socket) {
198
+ if (this.socket !== socket)
199
+ return; // a stale socket (already replaced); ignore.
200
+ this.socket = null;
201
+ this.scheduleReconnect("socket closed");
202
+ }
203
+ scheduleReconnect(reason) {
204
+ if (this.closed)
205
+ return;
206
+ const delay = this.reconnectDelayMs(this.reconnectAttempts);
207
+ this.reconnectAttempts += 1;
208
+ this.logger.warn(`slack socket mode: ${reason}; reconnecting in ${delay}ms`);
209
+ this.reconnectTimer = setTimeout(() => {
210
+ this.reconnectTimer = null;
211
+ void this.connect();
212
+ }, delay);
213
+ // A daemon shutting down must not be held open by a pending reconnect timer.
214
+ this.reconnectTimer.unref?.();
215
+ }
216
+ }
217
+ /** Channel id carried by an Events API event: top-level for messages/mentions, `item` for reactions. */
218
+ function channelOfEvent(event) {
219
+ if (typeof event.channel === "string")
220
+ return event.channel;
221
+ const item = event.item;
222
+ if (isRecord(item) && typeof item.channel === "string")
223
+ return item.channel;
224
+ return null;
225
+ }
226
+ //# sourceMappingURL=socketMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketMode.js","sourceRoot":"","sources":["../src/socketMode.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"threadState.d.ts","sourceRoot":"","sources":["../src/threadState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU/C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErF;;;;;;;;;;;;;GAaG;AAEH,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,YAAY,CAAC;AA4B3C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAShF;AAeD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,QAAQ,GACjB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoB1B;AAED,+FAA+F;AAC/F,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;CAC/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,QAAQ,GACjB,WAAW,CAiDb;AAuBD,4FAA4F;AAC5F,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,CAAC,CAsBtB"}
1
+ {"version":3,"file":"threadState.d.ts","sourceRoot":"","sources":["../src/threadState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAW/C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErF;;;;;;;;;;;;;GAaG;AAEH,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,YAAY,CAAC;AA4B3C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAShF;AAeD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,QAAQ,GACjB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoB1B;AAED,+FAA+F;AAC/F,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;CAC/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,QAAQ,GACjB,WAAW,CAqDb;AAuBD,4FAA4F;AAC5F,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,CAAC,CAsBtB"}
@@ -1,5 +1,5 @@
1
1
  import { defaultStateType } from "@lorenz/issue";
2
- import { isBotMention, stateFromReactions, statusEmojiMap, stripLeadingMention, } from "./mapping.js";
2
+ import { isAllowedAuthor, isBotMention, stateFromReactions, statusEmojiMap, stripLeadingMention, } from "./mapping.js";
3
3
  import { slackTrackerOptions } from "./options.js";
4
4
  /**
5
5
  * Thread-command state model. Slack reactions are per-author (the bot cannot remove a human's
@@ -104,7 +104,7 @@ export function parseStatusCommand(text, botUserId, settings) {
104
104
  * bare bot-mention re-opens a terminal state.
105
105
  */
106
106
  export function stateFromThread(root, replies, settings) {
107
- const { botUserId } = slackTrackerOptions(settings);
107
+ const { botUserId, users } = slackTrackerOptions(settings);
108
108
  const ordered = [...replies].sort((a, b) => tsValue(a.ts) - tsValue(b.ts));
109
109
  const rootIsMention = isBotMention(root.text, botUserId);
110
110
  const events = [];
@@ -123,8 +123,12 @@ export function stateFromThread(root, replies, settings) {
123
123
  if (!isBotMention(reply.text, botUserId))
124
124
  continue;
125
125
  if (!rootIsMention && request === undefined) {
126
- // The first mention in a non-mention thread is the request itself, not a transition.
127
- request = { ts: reply.ts, text: reply.text, user: reply.user };
126
+ // The first bot-mention reply from an allowed author in a non-mention thread is the request
127
+ // itself, not a transition. A reply from a non-allowed author is skipped so a later allowed
128
+ // reply can still become the request (the author allowlist narrows who can create issues).
129
+ if (isAllowedAuthor(reply.user, users)) {
130
+ request = { ts: reply.ts, text: reply.text, user: reply.user };
131
+ }
128
132
  continue;
129
133
  }
130
134
  const command = parseStatusCommand(reply.text, botUserId, settings);
@@ -1 +1 @@
1
- {"version":3,"file":"threadState.js","sourceRoot":"","sources":["../src/threadState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threadState.js","sourceRoot":"","sources":["../src/threadState.ts"],"names":[],"mappings":"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"}