openryoko 2026.7.5 → 2026.7.25

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 (120) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/cli/setup.js +2 -2
  3. package/dist/src/connectors/slack/__tests__/conversation-tracker.test.js +27 -0
  4. package/dist/src/connectors/slack/__tests__/conversation-tracker.test.js.map +1 -1
  5. package/dist/src/connectors/slack/__tests__/respond-policy.test.d.ts +2 -0
  6. package/dist/src/connectors/slack/__tests__/respond-policy.test.d.ts.map +1 -0
  7. package/dist/src/connectors/slack/__tests__/respond-policy.test.js +137 -0
  8. package/dist/src/connectors/slack/__tests__/respond-policy.test.js.map +1 -0
  9. package/dist/src/connectors/slack/conversation-tracker.d.ts +7 -0
  10. package/dist/src/connectors/slack/conversation-tracker.d.ts.map +1 -1
  11. package/dist/src/connectors/slack/conversation-tracker.js +11 -0
  12. package/dist/src/connectors/slack/conversation-tracker.js.map +1 -1
  13. package/dist/src/connectors/slack/index.d.ts +8 -0
  14. package/dist/src/connectors/slack/index.d.ts.map +1 -1
  15. package/dist/src/connectors/slack/index.js +73 -40
  16. package/dist/src/connectors/slack/index.js.map +1 -1
  17. package/dist/src/connectors/slack/respond-policy.d.ts +44 -0
  18. package/dist/src/connectors/slack/respond-policy.d.ts.map +1 -0
  19. package/dist/src/connectors/slack/respond-policy.js +44 -0
  20. package/dist/src/connectors/slack/respond-policy.js.map +1 -0
  21. package/dist/src/shared/__tests__/models.test.js +1 -0
  22. package/dist/src/shared/__tests__/models.test.js.map +1 -1
  23. package/dist/src/shared/models.js +2 -2
  24. package/dist/src/shared/models.js.map +1 -1
  25. package/dist/src/shared/types.d.ts +24 -0
  26. package/dist/src/shared/types.d.ts.map +1 -1
  27. package/dist/web/404.html +1 -1
  28. package/dist/web/__next.__PAGE__.txt +1 -1
  29. package/dist/web/__next._full.txt +1 -1
  30. package/dist/web/__next._head.txt +1 -1
  31. package/dist/web/__next._index.txt +1 -1
  32. package/dist/web/__next._tree.txt +1 -1
  33. package/dist/web/_next/static/chunks/{0y~qqhmf2o7pt.js → 0lt7kv1k1jla0.js} +1 -1
  34. package/dist/web/_next/static/chunks/0tcvgwr3rcw29.js +1 -0
  35. package/dist/web/_not-found/__next._full.txt +1 -1
  36. package/dist/web/_not-found/__next._head.txt +1 -1
  37. package/dist/web/_not-found/__next._index.txt +1 -1
  38. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
  39. package/dist/web/_not-found/__next._not-found.txt +1 -1
  40. package/dist/web/_not-found/__next._tree.txt +1 -1
  41. package/dist/web/_not-found.html +1 -1
  42. package/dist/web/_not-found.txt +1 -1
  43. package/dist/web/chat/__next._full.txt +1 -1
  44. package/dist/web/chat/__next._head.txt +1 -1
  45. package/dist/web/chat/__next._index.txt +1 -1
  46. package/dist/web/chat/__next._tree.txt +1 -1
  47. package/dist/web/chat/__next.chat.__PAGE__.txt +1 -1
  48. package/dist/web/chat/__next.chat.txt +1 -1
  49. package/dist/web/chat.html +1 -1
  50. package/dist/web/chat.txt +1 -1
  51. package/dist/web/cron/__next._full.txt +1 -1
  52. package/dist/web/cron/__next._head.txt +1 -1
  53. package/dist/web/cron/__next._index.txt +1 -1
  54. package/dist/web/cron/__next._tree.txt +1 -1
  55. package/dist/web/cron/__next.cron.__PAGE__.txt +1 -1
  56. package/dist/web/cron/__next.cron.txt +1 -1
  57. package/dist/web/cron.html +1 -1
  58. package/dist/web/cron.txt +1 -1
  59. package/dist/web/index.html +1 -1
  60. package/dist/web/index.txt +1 -1
  61. package/dist/web/kanban/__next._full.txt +1 -1
  62. package/dist/web/kanban/__next._head.txt +1 -1
  63. package/dist/web/kanban/__next._index.txt +1 -1
  64. package/dist/web/kanban/__next._tree.txt +1 -1
  65. package/dist/web/kanban/__next.kanban.__PAGE__.txt +1 -1
  66. package/dist/web/kanban/__next.kanban.txt +1 -1
  67. package/dist/web/kanban.html +1 -1
  68. package/dist/web/kanban.txt +1 -1
  69. package/dist/web/logs/__next._full.txt +1 -1
  70. package/dist/web/logs/__next._head.txt +1 -1
  71. package/dist/web/logs/__next._index.txt +1 -1
  72. package/dist/web/logs/__next._tree.txt +1 -1
  73. package/dist/web/logs/__next.logs.__PAGE__.txt +1 -1
  74. package/dist/web/logs/__next.logs.txt +1 -1
  75. package/dist/web/logs.html +1 -1
  76. package/dist/web/logs.txt +1 -1
  77. package/dist/web/org/__next._full.txt +2 -2
  78. package/dist/web/org/__next._head.txt +1 -1
  79. package/dist/web/org/__next._index.txt +1 -1
  80. package/dist/web/org/__next._tree.txt +1 -1
  81. package/dist/web/org/__next.org.__PAGE__.txt +2 -2
  82. package/dist/web/org/__next.org.txt +1 -1
  83. package/dist/web/org.html +1 -1
  84. package/dist/web/org.txt +2 -2
  85. package/dist/web/sessions/__next._full.txt +1 -1
  86. package/dist/web/sessions/__next._head.txt +1 -1
  87. package/dist/web/sessions/__next._index.txt +1 -1
  88. package/dist/web/sessions/__next._tree.txt +1 -1
  89. package/dist/web/sessions/__next.sessions.__PAGE__.txt +1 -1
  90. package/dist/web/sessions/__next.sessions.txt +1 -1
  91. package/dist/web/sessions.html +1 -1
  92. package/dist/web/sessions.txt +1 -1
  93. package/dist/web/settings/__next._full.txt +2 -2
  94. package/dist/web/settings/__next._head.txt +1 -1
  95. package/dist/web/settings/__next._index.txt +1 -1
  96. package/dist/web/settings/__next._tree.txt +1 -1
  97. package/dist/web/settings/__next.settings.__PAGE__.txt +2 -2
  98. package/dist/web/settings/__next.settings.txt +1 -1
  99. package/dist/web/settings.html +1 -1
  100. package/dist/web/settings.txt +2 -2
  101. package/dist/web/skills/__next._full.txt +1 -1
  102. package/dist/web/skills/__next._head.txt +1 -1
  103. package/dist/web/skills/__next._index.txt +1 -1
  104. package/dist/web/skills/__next._tree.txt +1 -1
  105. package/dist/web/skills/__next.skills.__PAGE__.txt +1 -1
  106. package/dist/web/skills/__next.skills.txt +1 -1
  107. package/dist/web/skills.html +1 -1
  108. package/dist/web/skills.txt +1 -1
  109. package/package.json +1 -1
  110. package/template/CLAUDE.md +1 -1
  111. package/template/config.default.yaml +8 -3
  112. package/template/docs/connectors.md +30 -0
  113. package/template/migrations/2026.7.10/MIGRATION.md +65 -0
  114. package/template/migrations/2026.7.10/config-patch.json +3 -0
  115. package/template/migrations/2026.7.25/MIGRATION.md +69 -0
  116. package/template/migrations/2026.7.25/config-patch.json +3 -0
  117. package/dist/web/_next/static/chunks/0ye0gt~bwlgy~.js +0 -1
  118. /package/dist/web/_next/static/{jsJO_tAphtOhs2xGLy0QA → l5mY7Bohnbs6ZCOK_Fkpn}/_buildManifest.js +0 -0
  119. /package/dist/web/_next/static/{jsJO_tAphtOhs2xGLy0QA → l5mY7Bohnbs6ZCOK_Fkpn}/_clientMiddlewareManifest.js +0 -0
  120. /package/dist/web/_next/static/{jsJO_tAphtOhs2xGLy0QA → l5mY7Bohnbs6ZCOK_Fkpn}/_ssgManifest.js +0 -0
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openryoko",
3
- "version": "2026.7.5",
3
+ "version": "2026.7.25",
4
4
  "description": "OpenRyoko — Slackで空気を読んで働くAIアシスタント・ゲートウェイ(Jinnベース、Claude Code/Codex/Gemini CLI対応)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -215,11 +215,11 @@ engines:
215
215
  default: claude
216
216
  claude:
217
217
  bin: claude
218
- model: opus
218
+ model: claude-opus-5
219
219
  effortLevel: xhigh
220
220
  codex:
221
221
  bin: codex
222
- model: gpt-5.5
222
+ model: gpt-5.6-sol
223
223
  connectors: {}
224
224
  portal: {}
225
225
  logging:
@@ -129,4 +129,31 @@ describe("ConversationTracker — robustness", () => {
129
129
  expect(t.isDmEquivalent({ channel: "C1", ts: "T3", userId: "U1" })).toBe(false);
130
130
  });
131
131
  });
132
+ describe("ConversationTracker.isBotEngagedThread", () => {
133
+ it("is true after the bot replies in the thread (recordBotInitiatedThread)", () => {
134
+ const t = new ConversationTracker();
135
+ t.recordBotInitiatedThread("C1", "T1");
136
+ expect(t.isBotEngagedThread("C1", "T1")).toBe(true);
137
+ });
138
+ it("is true after recordBotEngaged on a threaded message", () => {
139
+ const t = new ConversationTracker();
140
+ t.recordBotEngaged({ channel: "C1", threadTs: "T1", ts: "T2", userId: "U1" });
141
+ expect(t.isBotEngagedThread("C1", "T1")).toBe(true);
142
+ });
143
+ it("is false for threads the bot never engaged", () => {
144
+ const t = new ConversationTracker();
145
+ t.recordHumanMessage({ channel: "C1", threadTs: "T1", ts: "T2", userId: "U1" });
146
+ expect(t.isBotEngagedThread("C1", "T1")).toBe(false);
147
+ });
148
+ it("is false for user-key engagement (top-level messages, no thread)", () => {
149
+ const t = new ConversationTracker();
150
+ t.recordBotEngaged({ channel: "C1", ts: "T1", userId: "U1" });
151
+ expect(t.isBotEngagedThread("C1", "T1")).toBe(false);
152
+ });
153
+ it("tolerates missing fields", () => {
154
+ const t = new ConversationTracker();
155
+ expect(t.isBotEngagedThread("", "T1")).toBe(false);
156
+ expect(t.isBotEngagedThread("C1", "")).toBe(false);
157
+ });
158
+ });
132
159
  //# sourceMappingURL=conversation-tracker.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-tracker.test.js","sourceRoot":"","sources":["../../../../../src/connectors/slack/__tests__/conversation-tracker.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-tracker.test.js","sourceRoot":"","sources":["../../../../../src/connectors/slack/__tests__/conversation-tracker.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=respond-policy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respond-policy.test.d.ts","sourceRoot":"","sources":["../../../../../src/connectors/slack/__tests__/respond-policy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { scopeForChannelType, resolveRespondMode, evaluateRespondPolicy, hasMentionScope, respondPolicyNeedsTracking, } from "../respond-policy.js";
3
+ describe("scopeForChannelType", () => {
4
+ it("maps im to im", () => {
5
+ expect(scopeForChannelType("im")).toBe("im");
6
+ });
7
+ it("maps mpim to mpim", () => {
8
+ expect(scopeForChannelType("mpim")).toBe("mpim");
9
+ });
10
+ it("maps channel to channel", () => {
11
+ expect(scopeForChannelType("channel")).toBe("channel");
12
+ });
13
+ it("maps legacy private-channel type 'group' to channel", () => {
14
+ expect(scopeForChannelType("group")).toBe("channel");
15
+ });
16
+ it("maps unknown/undefined to channel (safe default)", () => {
17
+ expect(scopeForChannelType(undefined)).toBe("channel");
18
+ expect(scopeForChannelType("something-new")).toBe("channel");
19
+ });
20
+ });
21
+ describe("resolveRespondMode", () => {
22
+ it("defaults every scope to always when config is absent", () => {
23
+ expect(resolveRespondMode(undefined, "im")).toBe("always");
24
+ expect(resolveRespondMode(undefined, "mpim")).toBe("always");
25
+ expect(resolveRespondMode(undefined, "channel")).toBe("always");
26
+ });
27
+ it("defaults unset scopes to always when config is partial", () => {
28
+ const config = { channel: "mention" };
29
+ expect(resolveRespondMode(config, "im")).toBe("always");
30
+ expect(resolveRespondMode(config, "mpim")).toBe("always");
31
+ expect(resolveRespondMode(config, "channel")).toBe("mention");
32
+ });
33
+ it("treats invalid values as always (config files are untyped YAML)", () => {
34
+ const config = { channel: "sometimes" };
35
+ expect(resolveRespondMode(config, "channel")).toBe("always");
36
+ });
37
+ });
38
+ describe("evaluateRespondPolicy", () => {
39
+ const mentionOnly = {
40
+ im: "always",
41
+ mpim: "mention",
42
+ channel: "mention",
43
+ };
44
+ it("allows everything when config is absent (legacy behavior)", () => {
45
+ expect(evaluateRespondPolicy({
46
+ config: undefined,
47
+ channelType: "channel",
48
+ wasMentioned: false,
49
+ isEngagedThread: false,
50
+ }).allow).toBe(true);
51
+ });
52
+ it("allows DMs without a mention under the mention-only config", () => {
53
+ expect(evaluateRespondPolicy({
54
+ config: mentionOnly,
55
+ channelType: "im",
56
+ wasMentioned: false,
57
+ isEngagedThread: false,
58
+ }).allow).toBe(true);
59
+ });
60
+ it("drops un-mentioned channel messages", () => {
61
+ const decision = evaluateRespondPolicy({
62
+ config: mentionOnly,
63
+ channelType: "channel",
64
+ wasMentioned: false,
65
+ isEngagedThread: false,
66
+ });
67
+ expect(decision.allow).toBe(false);
68
+ if (!decision.allow)
69
+ expect(decision.reason).toContain("channel=mention");
70
+ });
71
+ it("drops un-mentioned group-DM (mpim) messages", () => {
72
+ expect(evaluateRespondPolicy({
73
+ config: mentionOnly,
74
+ channelType: "mpim",
75
+ wasMentioned: false,
76
+ isEngagedThread: false,
77
+ }).allow).toBe(false);
78
+ });
79
+ it("allows @-mentioned channel messages", () => {
80
+ expect(evaluateRespondPolicy({
81
+ config: mentionOnly,
82
+ channelType: "channel",
83
+ wasMentioned: true,
84
+ isEngagedThread: false,
85
+ }).allow).toBe(true);
86
+ });
87
+ it("allows un-mentioned follow-ups inside a bot-engaged thread by default", () => {
88
+ expect(evaluateRespondPolicy({
89
+ config: mentionOnly,
90
+ channelType: "channel",
91
+ wasMentioned: false,
92
+ isEngagedThread: true,
93
+ }).allow).toBe(true);
94
+ });
95
+ it("drops engaged-thread follow-ups when engagedThreads is false", () => {
96
+ expect(evaluateRespondPolicy({
97
+ config: { ...mentionOnly, engagedThreads: false },
98
+ channelType: "channel",
99
+ wasMentioned: false,
100
+ isEngagedThread: true,
101
+ }).allow).toBe(false);
102
+ });
103
+ it("treats legacy private-channel type 'group' under the channel scope", () => {
104
+ expect(evaluateRespondPolicy({
105
+ config: mentionOnly,
106
+ channelType: "group",
107
+ wasMentioned: false,
108
+ isEngagedThread: false,
109
+ }).allow).toBe(false);
110
+ });
111
+ it("drops everything in a never scope, even mentions", () => {
112
+ expect(evaluateRespondPolicy({
113
+ config: { channel: "never" },
114
+ channelType: "channel",
115
+ wasMentioned: true,
116
+ isEngagedThread: true,
117
+ }).allow).toBe(false);
118
+ });
119
+ });
120
+ describe("hasMentionScope / respondPolicyNeedsTracking", () => {
121
+ it("is false when config is absent", () => {
122
+ expect(hasMentionScope(undefined)).toBe(false);
123
+ expect(respondPolicyNeedsTracking(undefined)).toBe(false);
124
+ });
125
+ it("is false when no scope uses mention", () => {
126
+ expect(hasMentionScope({ im: "always", channel: "never" })).toBe(false);
127
+ });
128
+ it("is true when any scope uses mention", () => {
129
+ expect(hasMentionScope({ channel: "mention" })).toBe(true);
130
+ expect(hasMentionScope({ mpim: "mention" })).toBe(true);
131
+ });
132
+ it("needs tracking only when engaged-thread continuation is on", () => {
133
+ expect(respondPolicyNeedsTracking({ channel: "mention" })).toBe(true);
134
+ expect(respondPolicyNeedsTracking({ channel: "mention", engagedThreads: false })).toBe(false);
135
+ });
136
+ });
137
+ //# sourceMappingURL=respond-policy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respond-policy.test.js","sourceRoot":"","sources":["../../../../../src/connectors/slack/__tests__/respond-policy.test.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,13 @@ export declare class ConversationTracker {
42
42
  * this conversation.
43
43
  */
44
44
  isDmEquivalent(input: ConversationKeyInput): boolean;
45
+ /**
46
+ * True when the bot has engaged (replied, reacted, or posted the root)
47
+ * in the given thread. Used by the deterministic respondTo gate to keep
48
+ * replying inside threads the bot is already part of without requiring a
49
+ * re-mention on every message.
50
+ */
51
+ isBotEngagedThread(channel: string, threadTs: string): boolean;
45
52
  /** For tests / debugging. */
46
53
  size(): number;
47
54
  /** Remove a key (e.g. on member_left_channel). */
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-tracker.d.ts","sourceRoot":"","sources":["../../../../src/connectors/slack/conversation-tracker.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AASD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAEhE;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI;IAQzD;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAMrD;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAOnD;;;;;OAKG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQjE;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO;IAQpD,6BAA6B;IAC7B,IAAI,IAAI,MAAM;IAId,kDAAkD;IAClD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,KAAK;IAOb;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB;CAS9B"}
1
+ {"version":3,"file":"conversation-tracker.d.ts","sourceRoot":"","sources":["../../../../src/connectors/slack/conversation-tracker.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AASD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAEhE;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI;IAQzD;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAMrD;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAOnD;;;;;OAKG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQjE;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO;IAQpD;;;;;OAKG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK9D,6BAA6B;IAC7B,IAAI,IAAI,MAAM;IAId,kDAAkD;IAClD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,KAAK;IAOb;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB;CAS9B"}
@@ -92,6 +92,17 @@ export class ConversationTracker {
92
92
  return false;
93
93
  return state.botEngaged && state.humanSpeakers.size === 1;
94
94
  }
95
+ /**
96
+ * True when the bot has engaged (replied, reacted, or posted the root)
97
+ * in the given thread. Used by the deterministic respondTo gate to keep
98
+ * replying inside threads the bot is already part of without requiring a
99
+ * re-mention on every message.
100
+ */
101
+ isBotEngagedThread(channel, threadTs) {
102
+ if (!channel || !threadTs)
103
+ return false;
104
+ return this.entries.get(`${channel}:thread:${threadTs}`)?.botEngaged === true;
105
+ }
95
106
  /** For tests / debugging. */
96
107
  size() {
97
108
  return this.entries.size;
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-tracker.js","sourceRoot":"","sources":["../../../../src/connectors/slack/conversation-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-tracker.js","sourceRoot":"","sources":["../../../../src/connectors/slack/conversation-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAchD,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,MAAM,OAAO,mBAAmB;IACb,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEhE;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,KAA2B;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACjD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;YAClD,OAAO,GAAG,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,GAAG,KAAK,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,KAA2B;QAC5C,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,KAA2B;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO;QAC1B,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,OAAe,EAAE,QAAgB;QACxD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAClC,MAAM,GAAG,GAAG,GAAG,OAAO,WAAW,QAAQ,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACvF,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,KAA2B;QACxC,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,OAAe,EAAE,QAAgB;QAClD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,WAAW,QAAQ,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAChF,CAAC;IAED,6BAA6B;IAC7B,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,kDAAkD;IAClD,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,MAAc;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;oBAC7D,MAAM,CAAC,KAAK,CAAC,wBAAwB,GAAG,+CAA+C,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAsB,EAAE,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACzF,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,GAAW,EAAE,MAAe;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACvF,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACxB,IAAI,MAAM;YAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,GAAW,EAAE,KAAwB;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,qBAAqB,CAAC,OAAe;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,GAAG,KAAK,OAAO;gBAAE,SAAS;YAC9B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -23,6 +23,7 @@ export declare class SlackConnector implements Connector {
23
23
  private botUserId;
24
24
  private typingIntervals;
25
25
  private readonly triageConfig;
26
+ private readonly respondTo;
26
27
  private readonly goalExtractionConfig;
27
28
  private readonly portalName;
28
29
  private readonly operatorName;
@@ -41,6 +42,13 @@ export declare class SlackConnector implements Connector {
41
42
  */
42
43
  setTypingStatus(channelId: string, threadTs: string | undefined, status: string): Promise<void>;
43
44
  constructor(config: SlackConnectorConfig, context?: SlackConnectorContext);
45
+ /**
46
+ * Conversation tracking feeds two consumers: triage DM-equivalence and the
47
+ * respondTo engaged-thread exception. When neither is active, tracking is
48
+ * skipped entirely — engaged entries can't be evicted, so tracking in the
49
+ * default configuration would just leak memory.
50
+ */
51
+ private conversationTrackingEnabled;
44
52
  private resolveSpeakerInfo;
45
53
  private speakerTransportFields;
46
54
  private runSlackTriage;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connectors/slack/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connectors/slack/index.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { formatResponse, downloadAttachment } from "./format.js";
4
4
  import { normalizeSpeakerInfo } from "./speaker.js";
5
5
  import { runTriage } from "./triage.js";
6
6
  import { isShortAckCandidate } from "./triage-prompt.js";
7
+ import { evaluateRespondPolicy, hasMentionScope, respondPolicyNeedsTracking, } from "./respond-policy.js";
7
8
  import { isOperatorSpeaker } from "../../shared/operator-match.js";
8
9
  import { ConversationTracker } from "./conversation-tracker.js";
9
10
  import { AgentsCanvasUpdater } from "./agents-canvas.js";
@@ -25,6 +26,7 @@ export class SlackConnector {
25
26
  botUserId = null;
26
27
  typingIntervals = new Map();
27
28
  triageConfig;
29
+ respondTo;
28
30
  goalExtractionConfig;
29
31
  portalName;
30
32
  operatorName;
@@ -105,6 +107,7 @@ export class SlackConnector {
105
107
  : [];
106
108
  this.allowedUsers = allowFrom.length > 0 ? new Set(allowFrom) : null;
107
109
  this.triageConfig = config.triage;
110
+ this.respondTo = config.respondTo;
108
111
  this.goalExtractionConfig = config.goalExtraction;
109
112
  this.portalName = context.portalName;
110
113
  this.operatorName = context.operatorName;
@@ -115,6 +118,15 @@ export class SlackConnector {
115
118
  ? new AgentsCanvasUpdater(this.app, config.agentsCanvas)
116
119
  : null;
117
120
  }
121
+ /**
122
+ * Conversation tracking feeds two consumers: triage DM-equivalence and the
123
+ * respondTo engaged-thread exception. When neither is active, tracking is
124
+ * skipped entirely — engaged entries can't be evicted, so tracking in the
125
+ * default configuration would just leak memory.
126
+ */
127
+ conversationTrackingEnabled() {
128
+ return this.triageConfig?.enabled === true || respondPolicyNeedsTracking(this.respondTo);
129
+ }
118
130
  async resolveSpeakerInfo(userId) {
119
131
  if (!userId)
120
132
  return null;
@@ -270,11 +282,56 @@ export class SlackConnector {
270
282
  logger.debug(`Ignoring Slack message from unauthorized user ${event.user}`);
271
283
  return;
272
284
  }
285
+ const slackUserId = event.user;
286
+ const rawText = (event.text || "");
287
+ const channelType = event.channel_type || "channel";
288
+ const threadTs = event.thread_ts;
289
+ const wasMentioned = !!this.botUserId && rawText.includes(`<@${this.botUserId}>`);
290
+ const triageEnabled = this.triageConfig?.enabled === true;
291
+ const conversationKey = {
292
+ channel: event.channel,
293
+ threadTs,
294
+ ts: event.ts,
295
+ userId: slackUserId,
296
+ };
297
+ // Record the human speaker even for messages the gates below drop:
298
+ // a third human joining a thread must invalidate DM-equivalence
299
+ // whether or not we end up responding to their message.
300
+ if (this.conversationTrackingEnabled()) {
301
+ this.conversations.recordHumanMessage(conversationKey);
302
+ }
303
+ // Deterministic respondTo gate — evaluated before any network fetches
304
+ // and before LLM triage, so gated scopes cost nothing for dropped
305
+ // messages. "mention" scopes drop un-mentioned messages outright,
306
+ // except inside threads the bot has already engaged.
307
+ const respondDecision = evaluateRespondPolicy({
308
+ config: this.respondTo,
309
+ channelType,
310
+ wasMentioned,
311
+ isEngagedThread: !!threadTs &&
312
+ this.conversations.isBotEngagedThread(event.channel, threadTs),
313
+ });
314
+ if (!respondDecision.allow) {
315
+ logger.info(`[slack] respondTo gate → silent (${respondDecision.reason}) for ts=${event.ts}`);
316
+ return;
317
+ }
318
+ // Early silent for cross-bot / cross-user traffic in shared channels.
319
+ // If the message @-mentions specific user(s), none of whom are us, and
320
+ // it isn't a DM, stay silent — regardless of whether the thread was
321
+ // previously marked "active" by an earlier reply. The activeThread
322
+ // TTL exists for mid-conversation follow-ups, not for sibling mentions
323
+ // directed at another bot or human in the same channel.
324
+ if (!wasMentioned && this.botUserId && channelType !== "im") {
325
+ const mentionedUsers = Array.from(rawText.matchAll(/<@([UW][A-Z0-9]+)>/g), (m) => m[1]);
326
+ if (mentionedUsers.length > 0 && !mentionedUsers.includes(this.botUserId)) {
327
+ logger.info(`[slack] message @-mentions ${mentionedUsers.join(",")} (not us) — staying silent for ts=${event.ts}`);
328
+ return;
329
+ }
330
+ }
273
331
  const sessionKey = deriveSessionKey(event);
274
332
  const replyContext = buildReplyContext(event);
275
333
  // Fetch parent message for thread replies so the session has full context
276
334
  let parentContext = "";
277
- const threadTs = event.thread_ts;
278
335
  if (threadTs && threadTs !== event.ts) {
279
336
  try {
280
337
  const parentResult = await this.app.client.conversations.replies({
@@ -310,30 +367,13 @@ export class SlackConnector {
310
367
  }
311
368
  }
312
369
  }
313
- const slackUserId = event.user;
314
370
  const [channelInfo, speaker] = await Promise.all([
315
371
  this.resolveChannelInfo(event.channel),
316
372
  this.resolveSpeakerInfo(slackUserId),
317
373
  ]);
318
374
  const channelName = channelInfo.name;
319
- const channelType = event.channel_type || "channel";
320
375
  // DM is never "external"; otherwise trust the Slack Connect flag.
321
376
  const channelExternal = channelType !== "im" && channelInfo.isExtShared;
322
- const rawText = (event.text || "");
323
- const wasMentioned = !!this.botUserId && rawText.includes(`<@${this.botUserId}>`);
324
- // Early silent for cross-bot / cross-user traffic in shared channels.
325
- // If the message @-mentions specific user(s), none of whom are us, and
326
- // it isn't a DM, stay silent — regardless of whether the thread was
327
- // previously marked "active" by an earlier reply. The activeThread
328
- // TTL exists for mid-conversation follow-ups, not for sibling mentions
329
- // directed at another bot or human in the same channel.
330
- if (!wasMentioned && this.botUserId && channelType !== "im") {
331
- const mentionedUsers = Array.from(rawText.matchAll(/<@([UW][A-Z0-9]+)>/g), (m) => m[1]);
332
- if (mentionedUsers.length > 0 && !mentionedUsers.includes(this.botUserId)) {
333
- logger.info(`[slack] message @-mentions ${mentionedUsers.join(",")} (not us) — staying silent for ts=${event.ts}`);
334
- return;
335
- }
336
- }
337
377
  // Slash commands (/new, /status, …) are control directives the session
338
378
  // manager parses by exact string match. Wrapping them in the
339
379
  // "[Thread context — …]" preamble below silently breaks that parsing,
@@ -369,20 +409,6 @@ export class SlackConnector {
369
409
  // - DM-equivalent conversation: bot has engaged AND only this user has
370
410
  // spoken in the conversation (thread or channel-user scope). Permanent
371
411
  // until a third human joins.
372
- const triageEnabled = this.triageConfig?.enabled === true;
373
- const conversationKey = {
374
- channel: event.channel,
375
- threadTs: event.thread_ts,
376
- ts: event.ts,
377
- userId: slackUserId,
378
- };
379
- // Skip conversation tracking entirely when triage is disabled — it
380
- // serves no purpose (skipTriage is unconditionally true) and engaged
381
- // entries can't be evicted, so doing it would leak memory in the
382
- // default no-triage configuration.
383
- if (triageEnabled) {
384
- this.conversations.recordHumanMessage(conversationKey);
385
- }
386
412
  const isDmEquivalent = triageEnabled && channelType !== "im" && !wasMentioned
387
413
  ? this.conversations.isDmEquivalent(conversationKey)
388
414
  : false;
@@ -442,7 +468,7 @@ export class SlackConnector {
442
468
  }
443
469
  logger.info(`[slack] triage → reply (${decision.reason ?? "no reason"}) for ts=${event.ts}`);
444
470
  }
445
- if (triageEnabled) {
471
+ if (this.conversationTrackingEnabled()) {
446
472
  this.conversations.recordBotEngaged(conversationKey);
447
473
  }
448
474
  // Natural-language `/goal` injection.
@@ -484,6 +510,13 @@ export class SlackConnector {
484
510
  catch (err) {
485
511
  logger.warn(`[slack] Failed to get bot user ID: ${err}`);
486
512
  }
513
+ // Fail closed: without our own user ID, mention detection is impossible,
514
+ // so mention-gated scopes will drop everything (except engaged threads).
515
+ // That honors "never barge in un-mentioned" at the cost of missed
516
+ // mentions until the next successful start — surface it loudly.
517
+ if (!this.botUserId && hasMentionScope(this.respondTo)) {
518
+ logger.warn("[slack] respondTo mention gate is configured but the bot user ID could not be resolved — un-mentioned messages in mention scopes will be dropped");
519
+ }
487
520
  this.app.event("reaction_added", async ({ event }) => {
488
521
  // Only handle reactions on messages (not files, etc.)
489
522
  if (event.item.type !== "message")
@@ -677,8 +710,8 @@ export class SlackConnector {
677
710
  lastTs = res.ts;
678
711
  }
679
712
  // A newly-posted root message will be the thread_ts for any follow-up replies,
680
- // so mark its future thread as bot-engaged. Only relevant when triage is on.
681
- if (lastTs && this.triageConfig?.enabled === true) {
713
+ // so mark its future thread as bot-engaged. Only relevant when tracking is on.
714
+ if (lastTs && this.conversationTrackingEnabled()) {
682
715
  this.conversations.recordBotInitiatedThread(target.channel, lastTs);
683
716
  }
684
717
  return lastTs;
@@ -700,9 +733,9 @@ export class SlackConnector {
700
733
  lastTs = res.ts;
701
734
  }
702
735
  // Record the thread the bot just replied in. Subsequent user replies in
703
- // this same thread will carry thread_ts === threadTs and bypass triage.
704
- // Only relevant when triage is on.
705
- if (threadTs && this.triageConfig?.enabled === true) {
736
+ // this same thread will carry thread_ts === threadTs and bypass triage
737
+ // and the respondTo mention gate. Only relevant when tracking is on.
738
+ if (threadTs && this.conversationTrackingEnabled()) {
706
739
  this.conversations.recordBotInitiatedThread(target.channel, threadTs);
707
740
  }
708
741
  return lastTs;
@@ -722,9 +755,9 @@ export class SlackConnector {
722
755
  }
723
756
  // A reaction on a message also counts as engagement; mark the target's
724
757
  // thread anchor so follow-ups in that thread are treated as bot-engaged.
725
- // Only relevant when triage is on.
758
+ // Only relevant when tracking is on.
726
759
  const anchor = target.thread || target.messageTs;
727
- if (anchor && this.triageConfig?.enabled === true) {
760
+ if (anchor && this.conversationTrackingEnabled()) {
728
761
  this.conversations.recordBotInitiatedThread(target.channel, anchor);
729
762
  }
730
763
  }