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.
- package/.env.example +8 -7
- package/DEVELOPMENT.md +12 -6
- package/MIGRATION_1_TO_2.md +1 -1
- package/MIGRATION_RENAME_TO_CHARNESS.md +133 -0
- package/README.md +221 -555
- package/SETUP.md +539 -0
- package/dist/adapters/claudeCliAdapter.d.ts +16 -1
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeCliAdapter.js +37 -2
- package/dist/adapters/claudeCliAdapter.js.map +1 -1
- package/dist/adapters/claudeConfigDir.d.ts +40 -0
- package/dist/adapters/claudeConfigDir.d.ts.map +1 -0
- package/dist/adapters/claudeConfigDir.js +3 -0
- package/dist/adapters/claudeConfigDir.js.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +32 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.js +90 -8
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
- package/dist/adapters/claudePlatformFlags.d.ts +4 -4
- package/dist/adapters/claudePlatformFlags.js +4 -4
- package/dist/adapters/createAdapter.d.ts +8 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -1
- package/dist/adapters/createAdapter.js +37 -0
- package/dist/adapters/createAdapter.js.map +1 -1
- package/dist/adapters/openCodeAdapter.d.ts +23 -0
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +85 -2
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/agentLogin/agentLogin.d.ts +15 -2
- package/dist/agentLogin/agentLogin.d.ts.map +1 -1
- package/dist/agentLogin/agentLogin.js +53 -16
- package/dist/agentLogin/agentLogin.js.map +1 -1
- package/dist/apiErrorRetry.d.ts +8 -3
- package/dist/apiErrorRetry.d.ts.map +1 -1
- package/dist/apiErrorRetry.js +36 -5
- package/dist/apiErrorRetry.js.map +1 -1
- package/dist/apiRetryKick.d.ts +9 -0
- package/dist/apiRetryKick.d.ts.map +1 -1
- package/dist/apiRetryKick.js +16 -0
- package/dist/apiRetryKick.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +642 -26
- package/dist/bot.js.map +1 -1
- package/dist/cli/bot.d.ts +4 -2
- package/dist/cli/bot.d.ts.map +1 -1
- package/dist/cli/bot.js +11 -3
- package/dist/cli/bot.js.map +1 -1
- package/dist/cli/botEntry.js +3 -1
- package/dist/cli/botEntry.js.map +1 -1
- package/dist/cli/claudeProfiles.d.ts +42 -0
- package/dist/cli/claudeProfiles.d.ts.map +1 -0
- package/dist/cli/claudeProfiles.js +106 -0
- package/dist/cli/claudeProfiles.js.map +1 -0
- package/dist/cli/envLoader.d.ts +6 -5
- package/dist/cli/envLoader.d.ts.map +1 -1
- package/dist/cli/envLoader.js +8 -27
- package/dist/cli/envLoader.js.map +1 -1
- package/dist/cli/hot.d.ts +2 -2
- package/dist/cli/hot.d.ts.map +1 -1
- package/dist/cli/hot.js +26 -16
- package/dist/cli/hot.js.map +1 -1
- package/dist/cli.js +19 -9
- package/dist/cli.js.map +1 -1
- package/dist/connectors/jira/adf.d.ts +23 -0
- package/dist/connectors/jira/adf.d.ts.map +1 -1
- package/dist/connectors/jira/adf.js +44 -0
- package/dist/connectors/jira/adf.js.map +1 -1
- package/dist/connectors/jira/answerSink.d.ts +27 -3
- package/dist/connectors/jira/answerSink.d.ts.map +1 -1
- package/dist/connectors/jira/answerSink.js +145 -18
- package/dist/connectors/jira/answerSink.js.map +1 -1
- package/dist/connectors/jira/attachmentTool.d.ts +7 -0
- package/dist/connectors/jira/attachmentTool.d.ts.map +1 -1
- package/dist/connectors/jira/attachmentTool.js +16 -0
- package/dist/connectors/jira/attachmentTool.js.map +1 -1
- package/dist/connectors/jira/client.d.ts +36 -0
- package/dist/connectors/jira/client.d.ts.map +1 -1
- package/dist/connectors/jira/client.js +46 -5
- package/dist/connectors/jira/client.js.map +1 -1
- package/dist/connectors/jira/config.d.ts +13 -17
- package/dist/connectors/jira/config.d.ts.map +1 -1
- package/dist/connectors/jira/config.js +15 -33
- package/dist/connectors/jira/config.js.map +1 -1
- package/dist/connectors/jira/connector.d.ts +10 -1
- package/dist/connectors/jira/connector.d.ts.map +1 -1
- package/dist/connectors/jira/connector.js +90 -16
- package/dist/connectors/jira/connector.js.map +1 -1
- package/dist/connectors/jira/contextLedger.d.ts +7 -0
- package/dist/connectors/jira/contextLedger.d.ts.map +1 -1
- package/dist/connectors/jira/contextLedger.js +18 -0
- package/dist/connectors/jira/contextLedger.js.map +1 -1
- package/dist/connectors/jira/contextPreamble.d.ts.map +1 -1
- package/dist/connectors/jira/contextPreamble.js +6 -3
- package/dist/connectors/jira/contextPreamble.js.map +1 -1
- package/dist/connectors/jira/inbound.d.ts +72 -10
- package/dist/connectors/jira/inbound.d.ts.map +1 -1
- package/dist/connectors/jira/inbound.js +204 -36
- package/dist/connectors/jira/inbound.js.map +1 -1
- package/dist/connectors/jira/issueBlocks.d.ts +31 -3
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
- package/dist/connectors/jira/issueBlocks.js +108 -29
- package/dist/connectors/jira/issueBlocks.js.map +1 -1
- package/dist/connectors/jira/issueContext.d.ts +11 -5
- package/dist/connectors/jira/issueContext.d.ts.map +1 -1
- package/dist/connectors/jira/issueContext.js +23 -6
- package/dist/connectors/jira/issueContext.js.map +1 -1
- package/dist/connectors/jira/issueDelta.d.ts +3 -0
- package/dist/connectors/jira/issueDelta.d.ts.map +1 -1
- package/dist/connectors/jira/issueDelta.js +15 -6
- package/dist/connectors/jira/issueDelta.js.map +1 -1
- package/dist/connectors/jira/mediaPlaceholders.d.ts +2 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -1
- package/dist/connectors/jira/mediaPlaceholders.js +16 -3
- package/dist/connectors/jira/mediaPlaceholders.js.map +1 -1
- package/dist/connectors/jira/prompt.d.ts +4 -0
- package/dist/connectors/jira/prompt.d.ts.map +1 -1
- package/dist/connectors/jira/prompt.js +20 -1
- package/dist/connectors/jira/prompt.js.map +1 -1
- package/dist/connectors/jira/sessionKeyCodec.d.ts +2 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -1
- package/dist/connectors/jira/sessionKeyCodec.js +5 -0
- package/dist/connectors/jira/sessionKeyCodec.js.map +1 -1
- package/dist/connectors/jira/trigger.d.ts +16 -3
- package/dist/connectors/jira/trigger.d.ts.map +1 -1
- package/dist/connectors/jira/trigger.js +17 -2
- package/dist/connectors/jira/trigger.js.map +1 -1
- package/dist/connectors/jira/triggerLog.d.ts +12 -3
- package/dist/connectors/jira/triggerLog.d.ts.map +1 -1
- package/dist/connectors/jira/triggerLog.js +18 -2
- package/dist/connectors/jira/triggerLog.js.map +1 -1
- package/dist/connectors/jira/trustedGroup.d.ts +54 -0
- package/dist/connectors/jira/trustedGroup.d.ts.map +1 -0
- package/dist/connectors/jira/trustedGroup.js +98 -0
- package/dist/connectors/jira/trustedGroup.js.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +3 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/autoContinueLimits.js +15 -45
- package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts +58 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/claudeAccounts.js +591 -0
- package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -0
- package/dist/connectors/telegram/commands/fallbackChain.d.ts +49 -0
- package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/fallbackChain.js +624 -0
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +23 -1
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/modelProviders.js +131 -6
- package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +137 -9
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +137 -9
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +137 -9
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +137 -9
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +137 -9
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +137 -9
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +137 -9
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +137 -9
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +137 -9
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +137 -9
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +137 -9
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +137 -9
- package/dist/i18n/zh.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/installManager.d.ts +16 -2
- package/dist/installManager.d.ts.map +1 -1
- package/dist/installManager.js +42 -12
- package/dist/installManager.js.map +1 -1
- package/dist/instanceLock.d.ts.map +1 -1
- package/dist/instanceLock.js +10 -8
- package/dist/instanceLock.js.map +1 -1
- package/dist/legacyMigration.d.ts +69 -0
- package/dist/legacyMigration.d.ts.map +1 -0
- package/dist/legacyMigration.js +338 -0
- package/dist/legacyMigration.js.map +1 -0
- package/dist/legacyNames.d.ts +107 -0
- package/dist/legacyNames.d.ts.map +1 -0
- package/dist/legacyNames.js +230 -0
- package/dist/legacyNames.js.map +1 -0
- package/dist/platform/answerSink.d.ts +5 -0
- package/dist/platform/answerSink.d.ts.map +1 -1
- package/dist/platform/answerSink.js.map +1 -1
- package/dist/requests/answerRequest.d.ts +2 -0
- package/dist/requests/answerRequest.d.ts.map +1 -1
- package/dist/requests/answerRequest.js +3 -1
- package/dist/requests/answerRequest.js.map +1 -1
- package/dist/requests/answerStyle.d.ts +11 -0
- package/dist/requests/answerStyle.d.ts.map +1 -0
- package/dist/requests/answerStyle.js +14 -0
- package/dist/requests/answerStyle.js.map +1 -0
- package/dist/requests/answerTail.d.ts.map +1 -1
- package/dist/requests/answerTail.js +2 -0
- package/dist/requests/answerTail.js.map +1 -1
- package/dist/requests/requestHeader.d.ts.map +1 -1
- package/dist/requests/requestHeader.js +3 -0
- package/dist/requests/requestHeader.js.map +1 -1
- package/dist/requests/requestLedger.js +1 -1
- package/dist/requests/requestLedger.js.map +1 -1
- package/dist/requests/types.d.ts +3 -1
- package/dist/requests/types.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.d.ts +17 -1
- package/dist/scheduler/mcpSurface.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.js +86 -13
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/state.d.ts +175 -2
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +303 -2
- package/dist/state.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/autoContinueOnLimit.d.ts +7 -0
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -1
- package/dist/utils/autoContinueOnLimit.js +10 -0
- package/dist/utils/autoContinueOnLimit.js.map +1 -1
- package/dist/utils/claudeAccountPickerPlan.d.ts +85 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.js +123 -0
- package/dist/utils/claudeAccountPickerPlan.js.map +1 -0
- package/dist/utils/claudeLimitSwitch.d.ts +40 -0
- package/dist/utils/claudeLimitSwitch.d.ts.map +1 -0
- package/dist/utils/claudeLimitSwitch.js +54 -0
- package/dist/utils/claudeLimitSwitch.js.map +1 -0
- package/dist/utils/claudeProfileUsageLines.d.ts +15 -0
- package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -0
- package/dist/utils/claudeProfileUsageLines.js +42 -0
- package/dist/utils/claudeProfileUsageLines.js.map +1 -0
- package/dist/utils/claudeProfiles.d.ts +124 -0
- package/dist/utils/claudeProfiles.d.ts.map +1 -0
- package/dist/utils/claudeProfiles.js +304 -0
- package/dist/utils/claudeProfiles.js.map +1 -0
- package/dist/utils/claudeStreamJson.d.ts +13 -1
- package/dist/utils/claudeStreamJson.d.ts.map +1 -1
- package/dist/utils/claudeStreamJson.js +13 -0
- package/dist/utils/claudeStreamJson.js.map +1 -1
- package/dist/utils/claudeUsage.d.ts +209 -0
- package/dist/utils/claudeUsage.d.ts.map +1 -0
- package/dist/utils/claudeUsage.js +413 -0
- package/dist/utils/claudeUsage.js.map +1 -0
- package/dist/utils/claudeUsageRefresher.d.ts +44 -0
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -0
- package/dist/utils/claudeUsageRefresher.js +95 -0
- package/dist/utils/claudeUsageRefresher.js.map +1 -0
- package/dist/utils/fallbackBridge.d.ts +32 -0
- package/dist/utils/fallbackBridge.d.ts.map +1 -0
- package/dist/utils/fallbackBridge.js +62 -0
- package/dist/utils/fallbackBridge.js.map +1 -0
- package/dist/utils/fallbackChain.d.ts +299 -0
- package/dist/utils/fallbackChain.d.ts.map +1 -0
- package/dist/utils/fallbackChain.js +542 -0
- package/dist/utils/fallbackChain.js.map +1 -0
- package/dist/utils/jsonStreamHost.d.ts +14 -3
- package/dist/utils/jsonStreamHost.d.ts.map +1 -1
- package/dist/utils/jsonStreamHost.js +26 -5
- package/dist/utils/jsonStreamHost.js.map +1 -1
- package/dist/utils/modelRecentPlan.d.ts +56 -0
- package/dist/utils/modelRecentPlan.d.ts.map +1 -0
- package/dist/utils/modelRecentPlan.js +107 -0
- package/dist/utils/modelRecentPlan.js.map +1 -0
- package/dist/utils/openCodeCompactPlugin.d.ts +11 -3
- package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -1
- package/dist/utils/openCodeCompactPlugin.js +37 -5
- package/dist/utils/openCodeCompactPlugin.js.map +1 -1
- package/dist/utils/threadStatusReport.d.ts +25 -1
- package/dist/utils/threadStatusReport.d.ts.map +1 -1
- package/dist/utils/threadStatusReport.js +24 -1
- package/dist/utils/threadStatusReport.js.map +1 -1
- package/examples/.env.example +7 -7
- package/examples/docker-compose.yml +15 -14
- 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
|
-
* →
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
88
|
-
|
|
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
|
-
/**
|
|
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":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,
|
|
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.
|
|
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
|
-
* →
|
|
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
|
-
/**
|
|
45
|
-
exports.
|
|
46
|
-
/**
|
|
47
|
-
|
|
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
|
-
/**
|
|
51
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
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
|
-
/**
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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] ${
|
|
146
|
-
return
|
|
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
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
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,
|
|
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 -
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../../src/connectors/jira/inbound.ts"],"names":[],"mappings":"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"}
|