charness 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/.env.example +8 -7
  2. package/DEVELOPMENT.md +12 -6
  3. package/MIGRATION_1_TO_2.md +1 -1
  4. package/MIGRATION_RENAME_TO_CHARNESS.md +133 -0
  5. package/README.md +221 -555
  6. package/SETUP.md +539 -0
  7. package/dist/adapters/claudeCliAdapter.d.ts +16 -1
  8. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
  9. package/dist/adapters/claudeCliAdapter.js +37 -2
  10. package/dist/adapters/claudeCliAdapter.js.map +1 -1
  11. package/dist/adapters/claudeConfigDir.d.ts +40 -0
  12. package/dist/adapters/claudeConfigDir.d.ts.map +1 -0
  13. package/dist/adapters/claudeConfigDir.js +3 -0
  14. package/dist/adapters/claudeConfigDir.js.map +1 -0
  15. package/dist/adapters/claudeJsonStreamAdapter.d.ts +32 -0
  16. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
  17. package/dist/adapters/claudeJsonStreamAdapter.js +90 -8
  18. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
  19. package/dist/adapters/claudePlatformFlags.d.ts +4 -4
  20. package/dist/adapters/claudePlatformFlags.js +4 -4
  21. package/dist/adapters/createAdapter.d.ts +8 -0
  22. package/dist/adapters/createAdapter.d.ts.map +1 -1
  23. package/dist/adapters/createAdapter.js +37 -0
  24. package/dist/adapters/createAdapter.js.map +1 -1
  25. package/dist/adapters/openCodeAdapter.d.ts +23 -0
  26. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  27. package/dist/adapters/openCodeAdapter.js +85 -2
  28. package/dist/adapters/openCodeAdapter.js.map +1 -1
  29. package/dist/agentLogin/agentLogin.d.ts +15 -2
  30. package/dist/agentLogin/agentLogin.d.ts.map +1 -1
  31. package/dist/agentLogin/agentLogin.js +53 -16
  32. package/dist/agentLogin/agentLogin.js.map +1 -1
  33. package/dist/apiErrorRetry.d.ts +8 -3
  34. package/dist/apiErrorRetry.d.ts.map +1 -1
  35. package/dist/apiErrorRetry.js +36 -5
  36. package/dist/apiErrorRetry.js.map +1 -1
  37. package/dist/apiRetryKick.d.ts +9 -0
  38. package/dist/apiRetryKick.d.ts.map +1 -1
  39. package/dist/apiRetryKick.js +16 -0
  40. package/dist/apiRetryKick.js.map +1 -1
  41. package/dist/bot.d.ts.map +1 -1
  42. package/dist/bot.js +642 -26
  43. package/dist/bot.js.map +1 -1
  44. package/dist/cli/bot.d.ts +4 -2
  45. package/dist/cli/bot.d.ts.map +1 -1
  46. package/dist/cli/bot.js +11 -3
  47. package/dist/cli/bot.js.map +1 -1
  48. package/dist/cli/botEntry.js +3 -1
  49. package/dist/cli/botEntry.js.map +1 -1
  50. package/dist/cli/claudeProfiles.d.ts +42 -0
  51. package/dist/cli/claudeProfiles.d.ts.map +1 -0
  52. package/dist/cli/claudeProfiles.js +106 -0
  53. package/dist/cli/claudeProfiles.js.map +1 -0
  54. package/dist/cli/envLoader.d.ts +6 -5
  55. package/dist/cli/envLoader.d.ts.map +1 -1
  56. package/dist/cli/envLoader.js +8 -27
  57. package/dist/cli/envLoader.js.map +1 -1
  58. package/dist/cli/hot.d.ts +2 -2
  59. package/dist/cli/hot.d.ts.map +1 -1
  60. package/dist/cli/hot.js +26 -16
  61. package/dist/cli/hot.js.map +1 -1
  62. package/dist/cli.js +19 -9
  63. package/dist/cli.js.map +1 -1
  64. package/dist/connectors/jira/adf.d.ts +23 -0
  65. package/dist/connectors/jira/adf.d.ts.map +1 -1
  66. package/dist/connectors/jira/adf.js +44 -0
  67. package/dist/connectors/jira/adf.js.map +1 -1
  68. package/dist/connectors/jira/answerSink.d.ts +27 -3
  69. package/dist/connectors/jira/answerSink.d.ts.map +1 -1
  70. package/dist/connectors/jira/answerSink.js +145 -18
  71. package/dist/connectors/jira/answerSink.js.map +1 -1
  72. package/dist/connectors/jira/attachmentTool.d.ts +7 -0
  73. package/dist/connectors/jira/attachmentTool.d.ts.map +1 -1
  74. package/dist/connectors/jira/attachmentTool.js +16 -0
  75. package/dist/connectors/jira/attachmentTool.js.map +1 -1
  76. package/dist/connectors/jira/client.d.ts +36 -0
  77. package/dist/connectors/jira/client.d.ts.map +1 -1
  78. package/dist/connectors/jira/client.js +46 -5
  79. package/dist/connectors/jira/client.js.map +1 -1
  80. package/dist/connectors/jira/config.d.ts +13 -17
  81. package/dist/connectors/jira/config.d.ts.map +1 -1
  82. package/dist/connectors/jira/config.js +15 -33
  83. package/dist/connectors/jira/config.js.map +1 -1
  84. package/dist/connectors/jira/connector.d.ts +10 -1
  85. package/dist/connectors/jira/connector.d.ts.map +1 -1
  86. package/dist/connectors/jira/connector.js +90 -16
  87. package/dist/connectors/jira/connector.js.map +1 -1
  88. package/dist/connectors/jira/contextLedger.d.ts +7 -0
  89. package/dist/connectors/jira/contextLedger.d.ts.map +1 -1
  90. package/dist/connectors/jira/contextLedger.js +18 -0
  91. package/dist/connectors/jira/contextLedger.js.map +1 -1
  92. package/dist/connectors/jira/contextPreamble.d.ts.map +1 -1
  93. package/dist/connectors/jira/contextPreamble.js +6 -3
  94. package/dist/connectors/jira/contextPreamble.js.map +1 -1
  95. package/dist/connectors/jira/inbound.d.ts +72 -10
  96. package/dist/connectors/jira/inbound.d.ts.map +1 -1
  97. package/dist/connectors/jira/inbound.js +204 -36
  98. package/dist/connectors/jira/inbound.js.map +1 -1
  99. package/dist/connectors/jira/issueBlocks.d.ts +31 -3
  100. package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
  101. package/dist/connectors/jira/issueBlocks.js +108 -29
  102. package/dist/connectors/jira/issueBlocks.js.map +1 -1
  103. package/dist/connectors/jira/issueContext.d.ts +11 -5
  104. package/dist/connectors/jira/issueContext.d.ts.map +1 -1
  105. package/dist/connectors/jira/issueContext.js +23 -6
  106. package/dist/connectors/jira/issueContext.js.map +1 -1
  107. package/dist/connectors/jira/issueDelta.d.ts +3 -0
  108. package/dist/connectors/jira/issueDelta.d.ts.map +1 -1
  109. package/dist/connectors/jira/issueDelta.js +15 -6
  110. package/dist/connectors/jira/issueDelta.js.map +1 -1
  111. package/dist/connectors/jira/mediaPlaceholders.d.ts +2 -0
  112. package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -1
  113. package/dist/connectors/jira/mediaPlaceholders.js +16 -3
  114. package/dist/connectors/jira/mediaPlaceholders.js.map +1 -1
  115. package/dist/connectors/jira/prompt.d.ts +4 -0
  116. package/dist/connectors/jira/prompt.d.ts.map +1 -1
  117. package/dist/connectors/jira/prompt.js +20 -1
  118. package/dist/connectors/jira/prompt.js.map +1 -1
  119. package/dist/connectors/jira/sessionKeyCodec.d.ts +2 -0
  120. package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -1
  121. package/dist/connectors/jira/sessionKeyCodec.js +5 -0
  122. package/dist/connectors/jira/sessionKeyCodec.js.map +1 -1
  123. package/dist/connectors/jira/trigger.d.ts +16 -3
  124. package/dist/connectors/jira/trigger.d.ts.map +1 -1
  125. package/dist/connectors/jira/trigger.js +17 -2
  126. package/dist/connectors/jira/trigger.js.map +1 -1
  127. package/dist/connectors/jira/triggerLog.d.ts +12 -3
  128. package/dist/connectors/jira/triggerLog.d.ts.map +1 -1
  129. package/dist/connectors/jira/triggerLog.js +18 -2
  130. package/dist/connectors/jira/triggerLog.js.map +1 -1
  131. package/dist/connectors/jira/trustedGroup.d.ts +54 -0
  132. package/dist/connectors/jira/trustedGroup.d.ts.map +1 -0
  133. package/dist/connectors/jira/trustedGroup.js +98 -0
  134. package/dist/connectors/jira/trustedGroup.js.map +1 -0
  135. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +3 -0
  136. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
  137. package/dist/connectors/telegram/commands/autoContinueLimits.js +15 -45
  138. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
  139. package/dist/connectors/telegram/commands/claudeAccounts.d.ts +58 -0
  140. package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -0
  141. package/dist/connectors/telegram/commands/claudeAccounts.js +591 -0
  142. package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -0
  143. package/dist/connectors/telegram/commands/fallbackChain.d.ts +49 -0
  144. package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -0
  145. package/dist/connectors/telegram/commands/fallbackChain.js +624 -0
  146. package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -0
  147. package/dist/connectors/telegram/commands/modelProviders.d.ts +23 -1
  148. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
  149. package/dist/connectors/telegram/commands/modelProviders.js +131 -6
  150. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
  151. package/dist/i18n/de.d.ts.map +1 -1
  152. package/dist/i18n/de.js +137 -9
  153. package/dist/i18n/de.js.map +1 -1
  154. package/dist/i18n/en.d.ts.map +1 -1
  155. package/dist/i18n/en.js +137 -9
  156. package/dist/i18n/en.js.map +1 -1
  157. package/dist/i18n/es.d.ts.map +1 -1
  158. package/dist/i18n/es.js +137 -9
  159. package/dist/i18n/es.js.map +1 -1
  160. package/dist/i18n/fr.d.ts.map +1 -1
  161. package/dist/i18n/fr.js +137 -9
  162. package/dist/i18n/fr.js.map +1 -1
  163. package/dist/i18n/hi.d.ts.map +1 -1
  164. package/dist/i18n/hi.js +137 -9
  165. package/dist/i18n/hi.js.map +1 -1
  166. package/dist/i18n/ja.d.ts.map +1 -1
  167. package/dist/i18n/ja.js +137 -9
  168. package/dist/i18n/ja.js.map +1 -1
  169. package/dist/i18n/ka.d.ts.map +1 -1
  170. package/dist/i18n/ka.js +137 -9
  171. package/dist/i18n/ka.js.map +1 -1
  172. package/dist/i18n/pt.d.ts.map +1 -1
  173. package/dist/i18n/pt.js +137 -9
  174. package/dist/i18n/pt.js.map +1 -1
  175. package/dist/i18n/ru.d.ts.map +1 -1
  176. package/dist/i18n/ru.js +137 -9
  177. package/dist/i18n/ru.js.map +1 -1
  178. package/dist/i18n/uk.d.ts.map +1 -1
  179. package/dist/i18n/uk.js +137 -9
  180. package/dist/i18n/uk.js.map +1 -1
  181. package/dist/i18n/uz.d.ts.map +1 -1
  182. package/dist/i18n/uz.js +137 -9
  183. package/dist/i18n/uz.js.map +1 -1
  184. package/dist/i18n/zh.d.ts.map +1 -1
  185. package/dist/i18n/zh.js +137 -9
  186. package/dist/i18n/zh.js.map +1 -1
  187. package/dist/index.js +1 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/installManager.d.ts +16 -2
  190. package/dist/installManager.d.ts.map +1 -1
  191. package/dist/installManager.js +42 -12
  192. package/dist/installManager.js.map +1 -1
  193. package/dist/instanceLock.d.ts.map +1 -1
  194. package/dist/instanceLock.js +10 -8
  195. package/dist/instanceLock.js.map +1 -1
  196. package/dist/legacyMigration.d.ts +69 -0
  197. package/dist/legacyMigration.d.ts.map +1 -0
  198. package/dist/legacyMigration.js +338 -0
  199. package/dist/legacyMigration.js.map +1 -0
  200. package/dist/legacyNames.d.ts +107 -0
  201. package/dist/legacyNames.d.ts.map +1 -0
  202. package/dist/legacyNames.js +230 -0
  203. package/dist/legacyNames.js.map +1 -0
  204. package/dist/platform/answerSink.d.ts +5 -0
  205. package/dist/platform/answerSink.d.ts.map +1 -1
  206. package/dist/platform/answerSink.js.map +1 -1
  207. package/dist/requests/answerRequest.d.ts +2 -0
  208. package/dist/requests/answerRequest.d.ts.map +1 -1
  209. package/dist/requests/answerRequest.js +3 -1
  210. package/dist/requests/answerRequest.js.map +1 -1
  211. package/dist/requests/answerStyle.d.ts +11 -0
  212. package/dist/requests/answerStyle.d.ts.map +1 -0
  213. package/dist/requests/answerStyle.js +14 -0
  214. package/dist/requests/answerStyle.js.map +1 -0
  215. package/dist/requests/answerTail.d.ts.map +1 -1
  216. package/dist/requests/answerTail.js +2 -0
  217. package/dist/requests/answerTail.js.map +1 -1
  218. package/dist/requests/requestHeader.d.ts.map +1 -1
  219. package/dist/requests/requestHeader.js +3 -0
  220. package/dist/requests/requestHeader.js.map +1 -1
  221. package/dist/requests/requestLedger.js +1 -1
  222. package/dist/requests/requestLedger.js.map +1 -1
  223. package/dist/requests/types.d.ts +3 -1
  224. package/dist/requests/types.d.ts.map +1 -1
  225. package/dist/scheduler/mcpSurface.d.ts +17 -1
  226. package/dist/scheduler/mcpSurface.d.ts.map +1 -1
  227. package/dist/scheduler/mcpSurface.js +86 -13
  228. package/dist/scheduler/mcpSurface.js.map +1 -1
  229. package/dist/state.d.ts +175 -2
  230. package/dist/state.d.ts.map +1 -1
  231. package/dist/state.js +303 -2
  232. package/dist/state.js.map +1 -1
  233. package/dist/types.d.ts +7 -0
  234. package/dist/types.d.ts.map +1 -1
  235. package/dist/utils/autoContinueOnLimit.d.ts +7 -0
  236. package/dist/utils/autoContinueOnLimit.d.ts.map +1 -1
  237. package/dist/utils/autoContinueOnLimit.js +10 -0
  238. package/dist/utils/autoContinueOnLimit.js.map +1 -1
  239. package/dist/utils/claudeAccountPickerPlan.d.ts +85 -0
  240. package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -0
  241. package/dist/utils/claudeAccountPickerPlan.js +123 -0
  242. package/dist/utils/claudeAccountPickerPlan.js.map +1 -0
  243. package/dist/utils/claudeLimitSwitch.d.ts +40 -0
  244. package/dist/utils/claudeLimitSwitch.d.ts.map +1 -0
  245. package/dist/utils/claudeLimitSwitch.js +54 -0
  246. package/dist/utils/claudeLimitSwitch.js.map +1 -0
  247. package/dist/utils/claudeProfileUsageLines.d.ts +15 -0
  248. package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -0
  249. package/dist/utils/claudeProfileUsageLines.js +42 -0
  250. package/dist/utils/claudeProfileUsageLines.js.map +1 -0
  251. package/dist/utils/claudeProfiles.d.ts +124 -0
  252. package/dist/utils/claudeProfiles.d.ts.map +1 -0
  253. package/dist/utils/claudeProfiles.js +304 -0
  254. package/dist/utils/claudeProfiles.js.map +1 -0
  255. package/dist/utils/claudeStreamJson.d.ts +13 -1
  256. package/dist/utils/claudeStreamJson.d.ts.map +1 -1
  257. package/dist/utils/claudeStreamJson.js +13 -0
  258. package/dist/utils/claudeStreamJson.js.map +1 -1
  259. package/dist/utils/claudeUsage.d.ts +209 -0
  260. package/dist/utils/claudeUsage.d.ts.map +1 -0
  261. package/dist/utils/claudeUsage.js +413 -0
  262. package/dist/utils/claudeUsage.js.map +1 -0
  263. package/dist/utils/claudeUsageRefresher.d.ts +44 -0
  264. package/dist/utils/claudeUsageRefresher.d.ts.map +1 -0
  265. package/dist/utils/claudeUsageRefresher.js +95 -0
  266. package/dist/utils/claudeUsageRefresher.js.map +1 -0
  267. package/dist/utils/fallbackBridge.d.ts +32 -0
  268. package/dist/utils/fallbackBridge.d.ts.map +1 -0
  269. package/dist/utils/fallbackBridge.js +62 -0
  270. package/dist/utils/fallbackBridge.js.map +1 -0
  271. package/dist/utils/fallbackChain.d.ts +299 -0
  272. package/dist/utils/fallbackChain.d.ts.map +1 -0
  273. package/dist/utils/fallbackChain.js +542 -0
  274. package/dist/utils/fallbackChain.js.map +1 -0
  275. package/dist/utils/jsonStreamHost.d.ts +14 -3
  276. package/dist/utils/jsonStreamHost.d.ts.map +1 -1
  277. package/dist/utils/jsonStreamHost.js +26 -5
  278. package/dist/utils/jsonStreamHost.js.map +1 -1
  279. package/dist/utils/modelRecentPlan.d.ts +56 -0
  280. package/dist/utils/modelRecentPlan.d.ts.map +1 -0
  281. package/dist/utils/modelRecentPlan.js +107 -0
  282. package/dist/utils/modelRecentPlan.js.map +1 -0
  283. package/dist/utils/openCodeCompactPlugin.d.ts +11 -3
  284. package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -1
  285. package/dist/utils/openCodeCompactPlugin.js +37 -5
  286. package/dist/utils/openCodeCompactPlugin.js.map +1 -1
  287. package/dist/utils/threadStatusReport.d.ts +25 -1
  288. package/dist/utils/threadStatusReport.d.ts.map +1 -1
  289. package/dist/utils/threadStatusReport.js +24 -1
  290. package/dist/utils/threadStatusReport.js.map +1 -1
  291. package/examples/.env.example +7 -7
  292. package/examples/docker-compose.yml +15 -14
  293. package/package.json +3 -1
@@ -5,12 +5,14 @@ import type { JiraTriggerLog } from './triggerLog';
5
5
  import { type JiraExtraField } from './issueBlocks';
6
6
  import type { JiraContextLedger } from './contextLedger';
7
7
  import type { SessionPromptText } from '../../postToSession';
8
+ import { type JiraTrust } from './trustedGroup';
8
9
  /**
9
10
  * @description The Jira connector's inbound side (plan J5, D12/D13/D15/D21): a
10
11
  * poll loop, one search per cycle, and per issue the decision chain
11
12
  *
12
13
  * allowlist → still matching → no post in flight → trigger (newest changelog pages first) → seen before → self-authored
13
- * → run budget → fetch the issue → bind → open a request → post (not awaited)
14
+ * → hand-over backed by the trusted group (only with `trustedGroup`) → run budget → fetch the issue → bind
15
+ * → open a request → post (not awaited)
14
16
  * → RECORD the trigger once the post settled
15
17
  *
16
18
  * The trigger is recorded only once its post SETTLED: a restart while the prompt
@@ -22,20 +24,38 @@ import type { SessionPromptText } from '../../postToSession';
22
24
  * flight the issue is skipped, so one process never posts two requests of an
23
25
  * issue at once. A Jira event never cancels an armed usage-limit wait — the
24
26
  * ledger's create hook tells the new request about it (core S5).
27
+ *
28
+ * With mention wakes on (a trusted group is set), the same poll also finds a comment that @-mentions the AI
29
+ * account — on an issue that is NOT handed to it — and opens a request that answers only:
30
+ *
31
+ * issue returned and its `updated` moved since this process last read it → its newest comments, those
32
+ * created or edited within the mention window that mention the AI account (the ADF mention node's id) and
33
+ * whose trigger id `mention:<commentId>` is not seen →
34
+ * author and last editor trusted → not covered by an open hand-over request of the same person
35
+ * → run budget → open a request (no hand-back; the answer sink knows by the origin kind)
36
+ *
37
+ * One decision per comment, recorded in the same trigger log: an edit of a decided comment wakes nothing.
25
38
  */
26
39
  export declare const jiraSearchPageSize = 50;
27
40
  /** The longest wait between two attempts while Jira keeps failing (R22). */
28
41
  export declare const jiraRetryBackoffCapMs: number;
42
+ /** The shortest mention window: a mention this young is found by a poll, whatever the poll interval (D12). */
43
+ export declare const jiraMentionWindowMinMs: number;
44
+ /** How many of an issue's newest comments a mention scan reads — more than a window of activity holds. */
45
+ export declare const jiraMentionScanCommentCount = 100;
29
46
  /**
30
47
  * @description R22: the wait before the next attempt after `failureCount`
31
48
  * failures in a row — the base interval doubled per failure, up to
32
49
  * {@link jiraRetryBackoffCapMs} (never below the base interval).
33
50
  */
34
51
  export declare function getJiraRetryDelayMs(baseMs: number, failureCount: number): number;
35
- /** Jira's largest changelog page. */
36
- export declare const jiraChangelogPageSize = 100;
37
- /** Enough of each issue to decide; the prompt's fields are fetched only for a new request. */
52
+ /** `updated` tells the mention scan whether an issue changed at all since it last read its comments. */
38
53
  export declare const jiraSearchFields: string[];
54
+ /**
55
+ * @description D12: the window in which a mention is looked for — `max(5 min, 2 × poll interval)`, so a slow poll
56
+ * never outruns it. The JQL's `updated >= -<n>m` and the comment scan use the same window.
57
+ */
58
+ export declare function getJiraMentionWindowMs(pollIntervalMs: number): number;
39
59
  /** @name JiraProjectTrigger @description One allowlisted project as the poller uses it. */
40
60
  export interface JiraProjectTrigger {
41
61
  folder: string;
@@ -50,12 +70,15 @@ export interface JiraProjectTrigger {
50
70
  * - `notMatching` — no longer assigned to the AI account, or not in a trigger status.
51
71
  * - `posting` — the post of its last request has not settled yet (skipped).
52
72
  * - `seen` — its trigger was decided before.
53
- * - `selfAuthored`, `parked`, `request` — the recorded outcomes.
73
+ * - `selfAuthored`, `parked`, `untrusted`, `covered`, `request` — the recorded outcomes; `untrusted` — the
74
+ * hand-over was made by someone the trusted group does not back (a notice and the hand-back, no request; for
75
+ * a mention: silent, nothing posted); `covered` — a mention by the requester of the issue's open hand-over
76
+ * request, which that run already carries (no request).
54
77
  * - `failed` — an error stopped it; the next poll tries again.
55
78
  */
56
- export type JiraIssueDecision = 'notAllowed' | 'notMatching' | 'posting' | 'seen' | 'selfAuthored' | 'parked' | 'request' | 'failed';
79
+ export type JiraIssueDecision = 'notAllowed' | 'notMatching' | 'posting' | 'seen' | 'selfAuthored' | 'parked' | 'untrusted' | 'covered' | 'request' | 'failed';
57
80
  export interface JiraInboundDeps {
58
- client: Pick<JiraClient, 'searchIssues' | 'getChangelogPage' | 'getIssue' | 'getComments' | 'getRemoteLinks'>;
81
+ client: Pick<JiraClient, 'searchIssues' | 'getChangelogPage' | 'getIssue' | 'getComments' | 'getRecentComments' | 'getRemoteLinks'>;
59
82
  aiAccountId: string;
60
83
  /** `https://<site>` (or the test-only loopback base) — issue links are `<siteUrl>/browse/<KEY>`. */
61
84
  siteUrl: string;
@@ -65,6 +88,12 @@ export interface JiraInboundDeps {
65
88
  /** Where a conversation's text too long for its prompt is written whole (`promptSpill.ts`). */
66
89
  getSpillDir: (key: SessionKey) => string;
67
90
  triggerLog: JiraTriggerLog;
91
+ /** The trusted group (`trustedGroup.ts`); `null` without `trustedGroup` in `jira.json`: no filter. */
92
+ trust: JiraTrust | null;
93
+ /** An @-mention of the AI account wakes it (`config.isMentionWakeOn`); never without {@link trust} — nobody could be judged. */
94
+ isMentionWakeOn: boolean;
95
+ /** The open requests of an issue's conversation — a hand-over's requester who mentions the AI is already served (D9). */
96
+ listOpenRequests: (key: SessionKey) => ReadonlyArray<Pick<OpenRequestState, 'origin'>>;
68
97
  now: () => number;
69
98
  /** Bind the issue's conversation to its project's folder. */
70
99
  bindConversation: (key: SessionKey, folder: string) => Promise<void>;
@@ -83,9 +112,17 @@ export interface JiraInboundDeps {
83
112
  contextLedger: Pick<JiraContextLedger, 'getSnapshot' | 'recordBuild'>;
84
113
  /** Over the run budget: the park notice and the hand-back (the answer side, J6). */
85
114
  parkIssue: (issueKey: string, requester: JiraAccount | null) => Promise<void>;
115
+ /** A hand-over the trusted group `groupName` does not back: the fixed notice and the hand-back (the answer side). */
116
+ refuseUntrusted: (issueKey: string, requester: JiraAccount | null, groupName: string) => Promise<void>;
117
+ /** A mention over the run budget: the park notice, no hand-back (the answer side). */
118
+ parkMention: (issueKey: string) => Promise<void>;
86
119
  }
87
- /** @description The poll's JQL (D13): the allowlist, assigned to the AI account, in a trigger status. */
88
- export declare function buildJiraTriggerJql(projects: ReadonlyMap<string, JiraProjectTrigger>): string;
120
+ /**
121
+ * @description The poll's JQL (D13): the allowlist, assigned to the AI account, in a trigger status — and, with
122
+ * `mentionWindowMs`, the issues whose comments mention the AI account and that changed within that window. The
123
+ * mention clause is `comment ~ currentUser()` run as the AI account; it keys on the mention node itself.
124
+ */
125
+ export declare function buildJiraTriggerJql(projects: ReadonlyMap<string, JiraProjectTrigger>, mentionWindowMs: number | null): string;
89
126
  export declare class JiraInbound {
90
127
  private readonly deps;
91
128
  private timer;
@@ -94,16 +131,41 @@ export declare class JiraInbound {
94
131
  private failureCount;
95
132
  /** Issues whose last request's post has not settled yet. */
96
133
  private readonly postingIssueKeys;
134
+ /** Per issue, its `updated` as of the last mention scan that decided every comment — in memory only: a restart scans once more. */
135
+ private readonly lastUpdatedByIssue;
97
136
  constructor(deps: JiraInboundDeps);
98
137
  /** @description Poll now, then every `pollIntervalMs` after each poll ENDS (never two at once). */
99
138
  start(): void;
100
139
  stop(): void;
101
140
  private scheduleNext;
102
141
  private runScheduledPoll;
103
- /** @description One poll: every matching issue, each decided once. A {@link JiraAuthError} propagates. */
142
+ /**
143
+ * @description One poll: every matching issue, each decided once. A {@link JiraAuthError} and a
144
+ * {@link JiraTrustedGroupGoneError} propagate, and so does a failed membership read: nothing is decided on a
145
+ * trusted-group list older than its age.
146
+ */
104
147
  pollOnce(): Promise<Map<string, JiraIssueDecision>>;
148
+ /** The issue's project as the allowlist has it, or `undefined` when the issue is outside it. */
149
+ private getAllowlistedProject;
150
+ /** The mention window, or `null` when mention wakes are off (or cannot judge anyone: no trusted group read yet). */
151
+ private getMentionWindowMs;
152
+ /**
153
+ * Runs `run`: a refused token propagates (it stops polling); any other failure is one warning naming the issue and
154
+ * `what` failed, and the answer is `fallback` — the next poll tries again.
155
+ */
156
+ private runOrWarn;
105
157
  private getDecisionSafely;
106
158
  private getDecision;
159
+ private getMentionDecisionsSafely;
160
+ /**
161
+ * @description The comments of `issue` that mention the AI account and were not decided yet, each decided once
162
+ * (oldest first). Skipped altogether while the issue's `updated` is what the last complete scan saw, and while
163
+ * a request of the issue is being posted (the next poll takes the rest: one request is posted at a time).
164
+ */
165
+ private getMentionDecisions;
166
+ /** One comment failing (the issue could not be read for its prompt, say) leaves the others' decisions standing; the next poll retries it. */
167
+ private getMentionDecisionSafely;
168
+ private getMentionDecision;
107
169
  private openRequest;
108
170
  /**
109
171
  * @description Post the request, then record its trigger — also when the post
@@ -1 +1 @@
1
- {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/connectors/jira/inbound.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/connectors/jira/inbound.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JiraInbound = exports.jiraSearchFields = exports.jiraChangelogPageSize = exports.jiraRetryBackoffCapMs = exports.jiraSearchPageSize = void 0;
3
+ exports.JiraInbound = exports.jiraSearchFields = exports.jiraMentionScanCommentCount = exports.jiraMentionWindowMinMs = exports.jiraRetryBackoffCapMs = exports.jiraSearchPageSize = void 0;
4
4
  exports.getJiraRetryDelayMs = getJiraRetryDelayMs;
5
+ exports.getJiraMentionWindowMs = getJiraMentionWindowMs;
5
6
  exports.buildJiraTriggerJql = buildJiraTriggerJql;
6
7
  const requestGroup_1 = require("../../requests/requestGroup");
7
8
  const client_1 = require("./client");
9
+ const adf_1 = require("./adf");
8
10
  const sessionKeyCodec_1 = require("./sessionKeyCodec");
9
11
  const trigger_1 = require("./trigger");
10
12
  const issueBlocks_1 = require("./issueBlocks");
@@ -12,12 +14,14 @@ const issueContext_1 = require("./issueContext");
12
14
  const prompt_1 = require("./prompt");
13
15
  const issueDelta_1 = require("./issueDelta");
14
16
  const promptSpill_1 = require("./promptSpill");
17
+ const trustedGroup_1 = require("./trustedGroup");
15
18
  /**
16
19
  * @description The Jira connector's inbound side (plan J5, D12/D13/D15/D21): a
17
20
  * poll loop, one search per cycle, and per issue the decision chain
18
21
  *
19
22
  * allowlist → still matching → no post in flight → trigger (newest changelog pages first) → seen before → self-authored
20
- * → run budget → fetch the issue → bind → open a request → post (not awaited)
23
+ * → hand-over backed by the trusted group (only with `trustedGroup`) → run budget → fetch the issue → bind
24
+ * → open a request → post (not awaited)
21
25
  * → RECORD the trigger once the post settled
22
26
  *
23
27
  * The trigger is recorded only once its post SETTLED: a restart while the prompt
@@ -29,10 +33,28 @@ const promptSpill_1 = require("./promptSpill");
29
33
  * flight the issue is skipped, so one process never posts two requests of an
30
34
  * issue at once. A Jira event never cancels an armed usage-limit wait — the
31
35
  * ledger's create hook tells the new request about it (core S5).
36
+ *
37
+ * With mention wakes on (a trusted group is set), the same poll also finds a comment that @-mentions the AI
38
+ * account — on an issue that is NOT handed to it — and opens a request that answers only:
39
+ *
40
+ * issue returned and its `updated` moved since this process last read it → its newest comments, those
41
+ * created or edited within the mention window that mention the AI account (the ADF mention node's id) and
42
+ * whose trigger id `mention:<commentId>` is not seen →
43
+ * author and last editor trusted → not covered by an open hand-over request of the same person
44
+ * → run budget → open a request (no hand-back; the answer sink knows by the origin kind)
45
+ *
46
+ * One decision per comment, recorded in the same trigger log: an edit of a decided comment wakes nothing.
32
47
  */
33
48
  exports.jiraSearchPageSize = 50;
34
49
  /** The longest wait between two attempts while Jira keeps failing (R22). */
35
50
  exports.jiraRetryBackoffCapMs = 15 * 60 * 1000;
51
+ /** The shortest mention window: a mention this young is found by a poll, whatever the poll interval (D12). */
52
+ exports.jiraMentionWindowMinMs = 5 * 60 * 1000;
53
+ /** How many of an issue's newest comments a mention scan reads — more than a window of activity holds. */
54
+ exports.jiraMentionScanCommentCount = 100;
55
+ const msPerMinute = 60 * 1000;
56
+ /** Separates an issue key from a trigger id in the key a mention decision has in the poll's result and log line. */
57
+ const mentionDecisionKeySeparator = '#';
36
58
  /**
37
59
  * @description R22: the wait before the next attempt after `failureCount`
38
60
  * failures in a row — the base interval doubled per failure, up to
@@ -41,28 +63,32 @@ exports.jiraRetryBackoffCapMs = 15 * 60 * 1000;
41
63
  function getJiraRetryDelayMs(baseMs, failureCount) {
42
64
  return Math.min(baseMs * 2 ** failureCount, Math.max(baseMs, exports.jiraRetryBackoffCapMs));
43
65
  }
44
- /** Jira's largest changelog page. */
45
- exports.jiraChangelogPageSize = 100;
46
- /** Enough of each issue to decide; the prompt's fields are fetched only for a new request. */
47
- exports.jiraSearchFields = ['status', 'assignee', 'reporter', 'creator'];
66
+ /** `updated` tells the mention scan whether an issue changed at all since it last read its comments. */
67
+ exports.jiraSearchFields = ['status', 'assignee', 'reporter', 'creator', 'updated'];
68
+ /**
69
+ * @description D12: the window in which a mention is looked for — `max(5 min, 2 × poll interval)`, so a slow poll
70
+ * never outruns it. The JQL's `updated >= -<n>m` and the comment scan use the same window.
71
+ */
72
+ function getJiraMentionWindowMs(pollIntervalMs) {
73
+ return Math.max(exports.jiraMentionWindowMinMs, 2 * pollIntervalMs);
74
+ }
48
75
  /** Decisions that change nothing, left out of the poll's log line. */
49
76
  const quietDecisions = new Set(['notMatching', 'posting', 'seen']);
50
- /** @description The poll's JQL (D13): the allowlist, assigned to the AI account, in a trigger status. */
51
- function buildJiraTriggerJql(projects) {
77
+ /**
78
+ * @description The poll's JQL (D13): the allowlist, assigned to the AI account, in a trigger status — and, with
79
+ * `mentionWindowMs`, the issues whose comments mention the AI account and that changed within that window. The
80
+ * mention clause is `comment ~ currentUser()` run as the AI account; it keys on the mention node itself.
81
+ */
82
+ function buildJiraTriggerJql(projects, mentionWindowMs) {
52
83
  const projectKeys = [...projects.keys()].map((projectKey) => `"${projectKey}"`).join(', ');
53
84
  const statusIds = [...new Set([...projects.values()].flatMap((project) => [...project.triggerStatusIds]))]
54
85
  .map((statusId) => `"${statusId}"`)
55
86
  .join(', ');
56
- return `project in (${projectKeys}) AND assignee = currentUser() AND status in (${statusIds}) ORDER BY created ASC`;
57
- }
58
- /** The issue's project from its key, or `null` for a key that is not a Jira issue key. */
59
- function getIssueProjectKey(issueKey) {
60
- try {
61
- return (0, sessionKeyCodec_1.makeJiraKey)(issueKey).space;
62
- }
63
- catch {
64
- return null;
65
- }
87
+ const assignedBranch = `assignee = currentUser() AND status in (${statusIds})`;
88
+ if (mentionWindowMs === null)
89
+ return `project in (${projectKeys}) AND ${assignedBranch} ORDER BY created ASC`;
90
+ const windowMinutes = Math.ceil(mentionWindowMs / msPerMinute);
91
+ return `project in (${projectKeys}) AND ((${assignedBranch}) OR (comment ~ currentUser() AND updated >= -${windowMinutes}m)) ORDER BY created ASC`;
66
92
  }
67
93
  class JiraInbound {
68
94
  deps;
@@ -72,6 +98,8 @@ class JiraInbound {
72
98
  failureCount = 0;
73
99
  /** Issues whose last request's post has not settled yet. */
74
100
  postingIssueKeys = new Set();
101
+ /** Per issue, its `updated` as of the last mention scan that decided every comment — in memory only: a restart scans once more. */
102
+ lastUpdatedByIssue = new Map();
75
103
  constructor(deps) {
76
104
  this.deps = deps;
77
105
  }
@@ -100,8 +128,9 @@ class JiraInbound {
100
128
  this.failureCount = 0;
101
129
  }
102
130
  catch (error) {
103
- if (error instanceof client_1.JiraAuthError) {
104
- // D14: wrong or revoked credentials do not fix themselves; one loud line, then stop.
131
+ if (error instanceof client_1.JiraAuthError || error instanceof trustedGroup_1.JiraTrustedGroupGoneError) {
132
+ // D14: wrong or revoked credentials, or a trusted group deleted from the site, do not fix themselves;
133
+ // one loud line, then stop.
105
134
  console.error(`[jira] polling STOPPED: ${error.message}`);
106
135
  this.stop();
107
136
  return;
@@ -113,12 +142,20 @@ class JiraInbound {
113
142
  if (this.isRunning)
114
143
  this.scheduleNext(getJiraRetryDelayMs(this.deps.pollIntervalMs, this.failureCount));
115
144
  }
116
- /** @description One poll: every matching issue, each decided once. A {@link JiraAuthError} propagates. */
145
+ /**
146
+ * @description One poll: every matching issue, each decided once. A {@link JiraAuthError} and a
147
+ * {@link JiraTrustedGroupGoneError} propagate, and so does a failed membership read: nothing is decided on a
148
+ * trusted-group list older than its age.
149
+ */
117
150
  async pollOnce() {
118
151
  const decisions = new Map();
119
- const jql = buildJiraTriggerJql(this.deps.projects);
152
+ const mentionWindowMs = this.getMentionWindowMs();
153
+ const jql = buildJiraTriggerJql(this.deps.projects, mentionWindowMs);
154
+ const returnedIssueKeys = new Set();
120
155
  let nextPageToken;
121
156
  do {
157
+ // Before every page, not only the first: deciding a long page takes time, and the list must not age out under it.
158
+ await this.deps.trust?.refreshIfStale();
122
159
  const page = await this.deps.client.searchIssues({
123
160
  jql,
124
161
  fields: exports.jiraSearchFields,
@@ -126,30 +163,57 @@ class JiraInbound {
126
163
  maxResults: exports.jiraSearchPageSize,
127
164
  nextPageToken,
128
165
  });
129
- for (const issue of page.issues)
130
- decisions.set(issue.key, await this.getDecisionSafely(issue));
166
+ for (const issue of page.issues) {
167
+ returnedIssueKeys.add(issue.key);
168
+ const decision = await this.getDecisionSafely(issue);
169
+ decisions.set(issue.key, decision);
170
+ if (mentionWindowMs !== null && decision !== 'notAllowed') {
171
+ for (const [decisionKey, mentionDecision] of await this.getMentionDecisionsSafely(issue))
172
+ decisions.set(decisionKey, mentionDecision);
173
+ }
174
+ }
131
175
  nextPageToken = page.isLast ? undefined : (page.nextPageToken ?? undefined);
132
176
  } while (nextPageToken);
177
+ // An issue that left the results is read from scratch if it comes back; the seen-log keeps that from waking twice.
178
+ for (const issueKey of this.lastUpdatedByIssue.keys()) {
179
+ if (!returnedIssueKeys.has(issueKey))
180
+ this.lastUpdatedByIssue.delete(issueKey);
181
+ }
133
182
  const acted = [...decisions].filter(([, decision]) => !quietDecisions.has(decision));
134
183
  if (acted.length > 0)
135
184
  console.log(`[jira] poll: ${acted.map(([issueKey, decision]) => `${issueKey} ${decision}`).join(', ')}`);
136
185
  return decisions;
137
186
  }
138
- async getDecisionSafely(issue) {
187
+ /** The issue's project as the allowlist has it, or `undefined` when the issue is outside it. */
188
+ getAllowlistedProject(issue) {
189
+ const projectKey = (0, sessionKeyCodec_1.getJiraIssueProjectKey)(issue.key);
190
+ return projectKey === null ? undefined : this.deps.projects.get(projectKey);
191
+ }
192
+ /** The mention window, or `null` when mention wakes are off (or cannot judge anyone: no trusted group read yet). */
193
+ getMentionWindowMs() {
194
+ return this.deps.isMentionWakeOn && this.deps.trust !== null ? getJiraMentionWindowMs(this.deps.pollIntervalMs) : null;
195
+ }
196
+ /**
197
+ * Runs `run`: a refused token propagates (it stops polling); any other failure is one warning naming the issue and
198
+ * `what` failed, and the answer is `fallback` — the next poll tries again.
199
+ */
200
+ async runOrWarn(issueKey, what, run, fallback) {
139
201
  try {
140
- return await this.getDecision(issue);
202
+ return await run();
141
203
  }
142
204
  catch (error) {
143
205
  if (error instanceof client_1.JiraAuthError)
144
206
  throw error;
145
- console.warn(`[jira] ${issue.key}: ${error instanceof Error ? error.message : String(error)}`);
146
- return 'failed';
207
+ console.warn(`[jira] ${issueKey}: ${what}${error instanceof Error ? error.message : String(error)}`);
208
+ return fallback;
147
209
  }
148
210
  }
211
+ getDecisionSafely(issue) {
212
+ return this.runOrWarn(issue.key, '', () => this.getDecision(issue), 'failed');
213
+ }
149
214
  async getDecision(issue) {
150
215
  const { deps } = this;
151
- const projectKey = getIssueProjectKey(issue.key);
152
- const project = projectKey === null ? undefined : deps.projects.get(projectKey);
216
+ const project = this.getAllowlistedProject(issue);
153
217
  // D13: the JQL names only the allowlist, but every returned issue is checked again.
154
218
  if (!project)
155
219
  return 'notAllowed';
@@ -168,6 +232,16 @@ class JiraInbound {
168
232
  this.recordOrWarn({ issueKey: issue.key, triggerId: trigger.triggerId, outcome: 'selfAuthored', at });
169
233
  return 'selfAuthored';
170
234
  }
235
+ // The HAND-OVER decides: the account that made the change — an app or automation is trusted, so what it hands
236
+ // over starts the agent whoever the requester turns out to be. A change Jira names no one for falls back to the
237
+ // requester, and no account at all is untrusted (fail closed).
238
+ if (deps.trust && !deps.trust.checkIsTrusted(trigger.author ?? requester)) {
239
+ // Recorded first, as a park: the notice is posted at most once per trigger, never again by a failed or repeated poll.
240
+ if (!this.recordOrWarn({ issueKey: issue.key, triggerId: trigger.triggerId, outcome: 'untrusted', at }))
241
+ return 'failed';
242
+ await deps.refuseUntrusted(issue.key, requester, deps.trust.groupName);
243
+ return 'untrusted';
244
+ }
171
245
  if (deps.triggerLog.getRequestCountLastDay(issue.key, at) >= deps.runBudgetPer24h) {
172
246
  // Recorded first: a failed notice is not repeated on every poll (at most one per trigger).
173
247
  if (!this.recordOrWarn({ issueKey: issue.key, triggerId: trigger.triggerId, outcome: 'parked', at }))
@@ -177,11 +251,102 @@ class JiraInbound {
177
251
  }
178
252
  return this.openRequest(issue, project, trigger, requester, at);
179
253
  }
254
+ getMentionDecisionsSafely(issue) {
255
+ const failed = new Map([[`${issue.key}${mentionDecisionKeySeparator}mention`, 'failed']]);
256
+ return this.runOrWarn(issue.key, 'mention scan: ', () => this.getMentionDecisions(issue), failed);
257
+ }
258
+ /**
259
+ * @description The comments of `issue` that mention the AI account and were not decided yet, each decided once
260
+ * (oldest first). Skipped altogether while the issue's `updated` is what the last complete scan saw, and while
261
+ * a request of the issue is being posted (the next poll takes the rest: one request is posted at a time).
262
+ */
263
+ async getMentionDecisions(issue) {
264
+ const { deps } = this;
265
+ const decisions = new Map();
266
+ const project = this.getAllowlistedProject(issue);
267
+ const { trust } = deps;
268
+ if (!project || !trust)
269
+ return decisions;
270
+ const { updated } = issue.fields;
271
+ if (updated !== undefined && this.lastUpdatedByIssue.get(issue.key) === updated)
272
+ return decisions;
273
+ if (this.postingIssueKeys.has(issue.key))
274
+ return decisions;
275
+ const comments = await deps.client.getRecentComments(issue.key, exports.jiraMentionScanCommentCount);
276
+ // The whole window every time, not "since the last scan": a comment that became visible a moment after a scan
277
+ // is still inside it, and the seen-log makes the overlap harmless.
278
+ const windowStartMs = deps.now() - getJiraMentionWindowMs(deps.pollIntervalMs);
279
+ const undecidedMentions = comments
280
+ .filter((comment) => comment.author?.accountId !== deps.aiAccountId
281
+ && Math.max(Date.parse(comment.created), Date.parse(comment.updated ?? comment.created)) >= windowStartMs
282
+ && (0, adf_1.getMentionedAccountIds)(comment.body).includes(deps.aiAccountId)
283
+ && !deps.triggerLog.checkIsSeen(issue.key, `${trigger_1.mentionTriggerIdPrefix}${comment.id}`))
284
+ .sort((left, right) => Date.parse(left.created) - Date.parse(right.created));
285
+ let isEveryMentionDecided = true;
286
+ for (const comment of undecidedMentions) {
287
+ if (this.postingIssueKeys.has(issue.key)) {
288
+ isEveryMentionDecided = false;
289
+ break;
290
+ }
291
+ const decision = await this.getMentionDecisionSafely(issue, project, comment, trust);
292
+ decisions.set(`${issue.key}${mentionDecisionKeySeparator}${trigger_1.mentionTriggerIdPrefix}${comment.id}`, decision);
293
+ if (decision === 'failed')
294
+ isEveryMentionDecided = false;
295
+ }
296
+ if (isEveryMentionDecided && updated !== undefined)
297
+ this.lastUpdatedByIssue.set(issue.key, updated);
298
+ return decisions;
299
+ }
300
+ /** One comment failing (the issue could not be read for its prompt, say) leaves the others' decisions standing; the next poll retries it. */
301
+ getMentionDecisionSafely(issue, project, comment, trust) {
302
+ return this.runOrWarn(issue.key, `mention in comment ${comment.id}: `, () => this.getMentionDecision(issue, project, comment, trust), 'failed');
303
+ }
304
+ async getMentionDecision(issue, project, comment, trust) {
305
+ const { deps } = this;
306
+ const at = deps.now();
307
+ const trigger = (0, trigger_1.createMentionTrigger)(comment.id, comment.author ?? null);
308
+ const record = (outcome, extra = {}) => this.recordOrWarn({ issueKey: issue.key, triggerId: trigger.triggerId, outcome, at, ...extra });
309
+ // The same rule as for the comment's text: its author AND its last editor. A comment that fails it is recorded,
310
+ // so the line below is logged once; nothing is posted — an outsider gets no answer and no notice.
311
+ if (!(0, issueBlocks_1.checkIsCommentTrusted)(comment, trust)) {
312
+ if (!record('untrusted'))
313
+ return 'failed';
314
+ console.log(`[jira] ${issue.key}: the mention in comment ${comment.id} is ignored: its author or last editor is outside the trusted group`);
315
+ return 'untrusted';
316
+ }
317
+ // D9: the requester of an open hand-over request already has the agent on this issue; their comment reaches that
318
+ // run (a delta, or the news). A request of their own would supersede it and strip its hand-back. A hand-over
319
+ // request with NO requester is superseded by ANY next request of the conversation (`requestLedger.ts`), so while
320
+ // one is open every mention is covered by it.
321
+ const requesterAccountId = comment.author?.accountId;
322
+ const isCovered = deps.listOpenRequests((0, sessionKeyCodec_1.makeJiraKey)(issue.key)).some((request) => {
323
+ const openRequester = (0, requestGroup_1.getRequestRequester)(request.origin);
324
+ return request.origin.kind === 'trackerEvent' && (openRequester === requesterAccountId || openRequester === requestGroup_1.emptyRequester);
325
+ });
326
+ if (isCovered)
327
+ return record('covered') ? 'covered' : 'failed';
328
+ if (deps.triggerLog.getRequestCountLastDay(issue.key, at) >= deps.runBudgetPer24h) {
329
+ // D10: the notice is posted at most once per issue per rolling 24 h; later over-budget mentions are recorded silently.
330
+ const isNoticeDue = !deps.triggerLog.checkIsMentionParkNoticePostedLastDay(issue.key, at);
331
+ if (!record('parked', { isNoticePosted: isNoticeDue }))
332
+ return 'failed';
333
+ if (isNoticeDue)
334
+ await deps.parkMention(issue.key);
335
+ return 'parked';
336
+ }
337
+ return this.openRequest(issue, project, trigger, comment.author ?? null, at);
338
+ }
180
339
  async openRequest(issue, project, trigger, requester, at) {
181
340
  const { deps } = this;
182
- // Fetched before the request opens: a request is never left without its prompt.
183
- const context = await (0, issueContext_1.fetchJiraIssueContext)(deps.client, issue.key, project.extraFields.map((extraField) => extraField.id));
184
- const blocks = (0, issueBlocks_1.buildIssueBlocks)(context, project.extraFields, deps.aiAccountId);
341
+ const { trust } = deps;
342
+ // Fetched before the request opens: a request is never left without its prompt. The whole changelog is read
343
+ // only with a trusted group — it says who wrote each field — and once per request, never per poll.
344
+ const context = await (0, issueContext_1.fetchJiraIssueContext)(deps.client, issue.key, project.extraFields.map((extraField) => extraField.id), trust !== null);
345
+ const blockTrust = trust && {
346
+ checkIsTrusted: (account) => trust.checkIsTrusted(account),
347
+ allowlistedProjectKeys: new Set(deps.projects.keys()),
348
+ };
349
+ const blocks = (0, issueBlocks_1.buildIssueBlocks)(context, project.extraFields, deps.aiAccountId, blockTrust);
185
350
  const key = (0, sessionKeyCodec_1.makeJiraKey)(issue.key);
186
351
  const promptInput = {
187
352
  issueKey: issue.key,
@@ -189,6 +354,8 @@ class JiraInbound {
189
354
  issueUrl: `${deps.siteUrl.replace(/\/+$/, '')}/browse/${issue.key}`,
190
355
  trigger,
191
356
  requester,
357
+ assignee: context.issue.fields.assignee ?? null,
358
+ isTextFiltered: trust !== null,
192
359
  };
193
360
  // Rendered and written BEFORE the request opens: the ledger builds the prompt inside its own synchronous update.
194
361
  const fitted = await (0, promptSpill_1.fitBlocksToPrompt)({
@@ -206,7 +373,8 @@ class JiraInbound {
206
373
  // R34: the requester is part of the request's group key — a second person's trigger on the same
207
374
  // issue opens a request of its own instead of superseding the first (`requests/requestGroup.ts`).
208
375
  const request = await deps.createRequest(key, {
209
- kind: 'trackerEvent',
376
+ // A mention hands nothing over, so its answer never hands anything back: the origin kind is what the sink reads.
377
+ kind: trigger.kind === 'mentioned' ? 'trackerMention' : 'trackerEvent',
210
378
  attributes: { issueKey: issue.key, triggerId: trigger.triggerId, [requestGroup_1.requestRequesterAttribute]: requester?.accountId ?? requestGroup_1.emptyRequester },
211
379
  }, createPrompt);
212
380
  const supersededRequestIds = request.supersededRequestIds ?? [];
@@ -295,7 +463,7 @@ class JiraInbound {
295
463
  }
296
464
  let total = changelog?.total;
297
465
  if (total === undefined) {
298
- const first = await this.deps.client.getChangelogPage(issue.key, 0, exports.jiraChangelogPageSize);
466
+ const first = await this.deps.client.getChangelogPage(issue.key, 0, client_1.jiraChangelogPageSize);
299
467
  if (first.total <= first.values.length) {
300
468
  yield first.values;
301
469
  return;
@@ -303,7 +471,7 @@ class JiraInbound {
303
471
  total = first.total;
304
472
  }
305
473
  for (let end = total; end > 0;) {
306
- const startAt = Math.max(0, end - exports.jiraChangelogPageSize);
474
+ const startAt = Math.max(0, end - client_1.jiraChangelogPageSize);
307
475
  const page = await this.deps.client.getChangelogPage(issue.key, startAt, end - startAt);
308
476
  if (page.values.length === 0)
309
477
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../../src/connectors/jira/inbound.ts"],"names":[],"mappings":";;;AA2CA,kDAEC;AAiED,kDAMC;AAlHD,8DAAwF;AACxF,qCAAuH;AACvH,uDAAgD;AAChD,uCAAoG;AAEpG,+CAAsE;AACtE,iDAAuD;AACvD,qCAAwE;AACxE,6CAA6C;AAG7C,+CAAoE;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AAEU,QAAA,kBAAkB,GAAG,EAAE,CAAC;AACrC,4EAA4E;AAC/D,QAAA,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpD;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,MAAc,EAAE,YAAoB;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,6BAAqB,CAAC,CAAC,CAAC;AACvF,CAAC;AACD,qCAAqC;AACxB,QAAA,qBAAqB,GAAG,GAAG,CAAC;AACzC,8FAA8F;AACjF,QAAA,gBAAgB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAsB9E,sEAAsE;AACtE,MAAM,cAAc,GAAmC,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAqCnG,yGAAyG;AACzG,SAAgB,mBAAmB,CAAC,QAAiD;IACnF,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;SACvG,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAQ,GAAG,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,eAAe,WAAW,iDAAiD,SAAS,wBAAwB,CAAC;AACtH,CAAC;AAED,0FAA0F;AAC1F,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC;QACH,OAAO,IAAA,6BAAW,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAa,WAAW;IAQO;IAPrB,KAAK,GAA0B,IAAI,CAAC;IACpC,SAAS,GAAG,KAAK,CAAC;IAC1B,iEAAiE;IACzD,YAAY,GAAG,CAAC,CAAC;IACzB,4DAA4D;IAC3C,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtD,YAA6B,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IAEtD,mGAAmG;IACnG,KAAK;QACH,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,mGAAmG;QACnG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/B,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAa,EAAE,CAAC;gBACnC,qFAAqF;gBACrF,OAAO,CAAC,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,+EAA+E;YAC/E,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,YAAY,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChI,CAAC;QACD,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,0GAA0G;IAC1G,KAAK,CAAC,QAAQ;QACZ,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;QACvD,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,aAAiC,CAAC;QACtC,GAAG,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC/C,GAAG;gBACH,MAAM,EAAE,wBAAgB;gBACxB,mBAAmB,EAAE,IAAI;gBACzB,UAAU,EAAE,0BAAkB;gBAC9B,aAAa;aACd,CAAC,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;gBAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/F,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;QAC9E,CAAC,QAAQ,aAAa,EAAE;QACxB,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/H,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,KAAgB;QAC9C,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAa;gBAAE,MAAM,KAAK,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,GAAG,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/F,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,KAAgB;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChF,oFAAoF;QACpF,IAAI,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/H,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;YACtG,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAClF,2FAA2F;YAC3F,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACtH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC3C,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,KAAgB,EAChB,OAA2B,EAC3B,OAAyB,EACzB,SAA6B,EAC7B,EAAU;QAEV,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,gFAAgF;QAChF,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAqB,EAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5H,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,IAAA,6BAAW,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG;YAClB,QAAQ,EAAE,KAAK,CAAC,GAAG;YACnB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI;YAC7C,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,KAAK,CAAC,GAAG,EAAE;YACnE,OAAO;YACP,SAAS;SACV,CAAC;QACF,iHAAiH;QACjH,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAiB,EAAC;YACrC,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAC9B,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,+BAAsB,EAAC,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,8BAAgB,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,MAAM;SACrH,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,oBAAuC,EAAU,EAAE,CAAC,IAAA,+BAAsB,EAAC;YAClH,GAAG,WAAW;YACd,SAAS;YACT,GAAG,MAAM;YACT,oBAAoB;SACrB,CAAC,CAAC;QACH,gGAAgG;QAChG,kGAAkG;QAClG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YAC5C,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,wCAAyB,CAAC,EAAE,SAAS,EAAE,SAAS,IAAI,6BAAc,EAAE;SACvI,EAAE,YAAY,CAAC,CAAC;QACjB,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAChE,MAAM,MAAM,GAAsB;YAChC,QAAQ;YACR,8FAA8F;YAC9F,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;gBACnE,MAAM,KAAK,GAAG,IAAA,0BAAa,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACzE,uFAAuF;gBACvF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvF,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,6BAAoB,EAAC,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3H,CAAC;SACF,CAAC;QACF,mFAAmF;QACnF,+EAA+E;QAC/E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACvJ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,aAAa,CAAC,GAAe,EAAE,SAAiB,EAAE,MAAyB,EAAE,MAAyB;QAClH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,QAAQ,aAAa,SAAS,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxI,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAEO,YAAY,CAAC,MAAyB;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,QAAQ,aAAa,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;QAClI,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,WAAW,CAAC,KAAgB,EAAE,OAA2B;QACrE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC5F,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC/C,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACxB,MAAM,OAAO,GAAG,IAAA,2BAAiB,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC;gBAAE,OAAO,MAAM,CAAC;YAC7E,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC,WAAW;mBAClE,IAAA,sBAAY,EAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;YACvE,IAAI,gBAAgB;gBAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAA,sBAAY,EAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpH,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,yBAAe,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,MAAM,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAA,sBAAY,EAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IAC9F,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,CAAC,4BAA4B,CAAC,KAAgB;QAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAC5B,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC/D,MAAM,SAAS,CAAC,SAAS,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC;QAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,6BAAqB,CAAC,CAAC;YAC3F,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC,MAAM,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,6BAAqB,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;YACxF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACrC,MAAM,IAAI,CAAC,MAAM,CAAC;YAClB,GAAG,GAAG,OAAO,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AAnPD,kCAmPC"}
1
+ {"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../../src/connectors/jira/inbound.ts"],"names":[],"mappings":"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"}