@sireai/optimus 0.1.1

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 (204) hide show
  1. package/.env.example +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +104 -0
  4. package/dist/cli/optimus.d.ts +2 -0
  5. package/dist/cli/optimus.js +2951 -0
  6. package/dist/cli/optimus.js.map +1 -0
  7. package/dist/cli/self-update.d.ts +49 -0
  8. package/dist/cli/self-update.js +264 -0
  9. package/dist/cli/self-update.js.map +1 -0
  10. package/dist/config/load-config.d.ts +3 -0
  11. package/dist/config/load-config.js +321 -0
  12. package/dist/config/load-config.js.map +1 -0
  13. package/dist/config/optimus-paths.d.ts +13 -0
  14. package/dist/config/optimus-paths.js +44 -0
  15. package/dist/config/optimus-paths.js.map +1 -0
  16. package/dist/index.d.ts +25 -0
  17. package/dist/index.js +27 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/integrations/jira/jira-cli.d.ts +1 -0
  20. package/dist/integrations/jira/jira-cli.js +278 -0
  21. package/dist/integrations/jira/jira-cli.js.map +1 -0
  22. package/dist/integrations/jira/jira-client.d.ts +99 -0
  23. package/dist/integrations/jira/jira-client.js +521 -0
  24. package/dist/integrations/jira/jira-client.js.map +1 -0
  25. package/dist/integrations/jira/jira-submit.d.ts +71 -0
  26. package/dist/integrations/jira/jira-submit.js +351 -0
  27. package/dist/integrations/jira/jira-submit.js.map +1 -0
  28. package/dist/problem-solving-core/codex/codex-auth-resolver.d.ts +23 -0
  29. package/dist/problem-solving-core/codex/codex-auth-resolver.js +136 -0
  30. package/dist/problem-solving-core/codex/codex-auth-resolver.js.map +1 -0
  31. package/dist/problem-solving-core/codex/codex-connectivity-checks.d.ts +6 -0
  32. package/dist/problem-solving-core/codex/codex-connectivity-checks.js +81 -0
  33. package/dist/problem-solving-core/codex/codex-connectivity-checks.js.map +1 -0
  34. package/dist/problem-solving-core/codex/codex-failure-classifier.d.ts +2 -0
  35. package/dist/problem-solving-core/codex/codex-failure-classifier.js +49 -0
  36. package/dist/problem-solving-core/codex/codex-failure-classifier.js.map +1 -0
  37. package/dist/problem-solving-core/codex/codex-global-config.d.ts +17 -0
  38. package/dist/problem-solving-core/codex/codex-global-config.js +100 -0
  39. package/dist/problem-solving-core/codex/codex-global-config.js.map +1 -0
  40. package/dist/problem-solving-core/codex/codex-preflight.d.ts +13 -0
  41. package/dist/problem-solving-core/codex/codex-preflight.js +142 -0
  42. package/dist/problem-solving-core/codex/codex-preflight.js.map +1 -0
  43. package/dist/problem-solving-core/codex/codex-provider-profile.d.ts +14 -0
  44. package/dist/problem-solving-core/codex/codex-provider-profile.js +68 -0
  45. package/dist/problem-solving-core/codex/codex-provider-profile.js.map +1 -0
  46. package/dist/problem-solving-core/codex/codex-required-env.d.ts +3 -0
  47. package/dist/problem-solving-core/codex/codex-required-env.js +21 -0
  48. package/dist/problem-solving-core/codex/codex-required-env.js.map +1 -0
  49. package/dist/problem-solving-core/codex/codex-runner.d.ts +37 -0
  50. package/dist/problem-solving-core/codex/codex-runner.js +926 -0
  51. package/dist/problem-solving-core/codex/codex-runner.js.map +1 -0
  52. package/dist/problem-solving-core/codex/evolution-skill-guard.d.ts +36 -0
  53. package/dist/problem-solving-core/codex/evolution-skill-guard.js +143 -0
  54. package/dist/problem-solving-core/codex/evolution-skill-guard.js.map +1 -0
  55. package/dist/problem-solving-core/codex/repo-memory-service.d.ts +24 -0
  56. package/dist/problem-solving-core/codex/repo-memory-service.js +114 -0
  57. package/dist/problem-solving-core/codex/repo-memory-service.js.map +1 -0
  58. package/dist/problem-solving-core/codex/skill-sync-service.d.ts +35 -0
  59. package/dist/problem-solving-core/codex/skill-sync-service.js +280 -0
  60. package/dist/problem-solving-core/codex/skill-sync-service.js.map +1 -0
  61. package/dist/task-environment/cancellation/task-abort-registry.d.ts +17 -0
  62. package/dist/task-environment/cancellation/task-abort-registry.js +51 -0
  63. package/dist/task-environment/cancellation/task-abort-registry.js.map +1 -0
  64. package/dist/task-environment/cancellation/task-cancellation-service.d.ts +25 -0
  65. package/dist/task-environment/cancellation/task-cancellation-service.js +54 -0
  66. package/dist/task-environment/cancellation/task-cancellation-service.js.map +1 -0
  67. package/dist/task-environment/cancellation/task-cleanup-service.d.ts +22 -0
  68. package/dist/task-environment/cancellation/task-cleanup-service.js +67 -0
  69. package/dist/task-environment/cancellation/task-cleanup-service.js.map +1 -0
  70. package/dist/task-environment/delivery/commit-message/bugfix-commit-message-template.d.ts +13 -0
  71. package/dist/task-environment/delivery/commit-message/bugfix-commit-message-template.js +83 -0
  72. package/dist/task-environment/delivery/commit-message/bugfix-commit-message-template.js.map +1 -0
  73. package/dist/task-environment/delivery/commit-message/commit-message-builder.d.ts +6 -0
  74. package/dist/task-environment/delivery/commit-message/commit-message-builder.js +15 -0
  75. package/dist/task-environment/delivery/commit-message/commit-message-builder.js.map +1 -0
  76. package/dist/task-environment/delivery/commit-message/commit-message-template-types.d.ts +16 -0
  77. package/dist/task-environment/delivery/commit-message/commit-message-template-types.js +2 -0
  78. package/dist/task-environment/delivery/commit-message/commit-message-template-types.js.map +1 -0
  79. package/dist/task-environment/delivery/feishu-analysis-doc-service.d.ts +50 -0
  80. package/dist/task-environment/delivery/feishu-analysis-doc-service.js +454 -0
  81. package/dist/task-environment/delivery/feishu-analysis-doc-service.js.map +1 -0
  82. package/dist/task-environment/delivery/feishu-card-renderer.d.ts +38 -0
  83. package/dist/task-environment/delivery/feishu-card-renderer.js +449 -0
  84. package/dist/task-environment/delivery/feishu-card-renderer.js.map +1 -0
  85. package/dist/task-environment/delivery/feishu-content/feishu-content-renderer.d.ts +34 -0
  86. package/dist/task-environment/delivery/feishu-content/feishu-content-renderer.js +201 -0
  87. package/dist/task-environment/delivery/feishu-content/feishu-content-renderer.js.map +1 -0
  88. package/dist/task-environment/delivery/feishu-content/feishu-copy-config.d.ts +27 -0
  89. package/dist/task-environment/delivery/feishu-content/feishu-copy-config.js +74 -0
  90. package/dist/task-environment/delivery/feishu-content/feishu-copy-config.js.map +1 -0
  91. package/dist/task-environment/delivery/feishu-notifier.d.ts +45 -0
  92. package/dist/task-environment/delivery/feishu-notifier.js +250 -0
  93. package/dist/task-environment/delivery/feishu-notifier.js.map +1 -0
  94. package/dist/task-environment/delivery/feishu-templates/analysis-message-template.d.ts +6 -0
  95. package/dist/task-environment/delivery/feishu-templates/analysis-message-template.js +39 -0
  96. package/dist/task-environment/delivery/feishu-templates/analysis-message-template.js.map +1 -0
  97. package/dist/task-environment/delivery/feishu-templates/bugfix-message-template.d.ts +6 -0
  98. package/dist/task-environment/delivery/feishu-templates/bugfix-message-template.js +40 -0
  99. package/dist/task-environment/delivery/feishu-templates/bugfix-message-template.js.map +1 -0
  100. package/dist/task-environment/delivery/feishu-templates/default-message-template.d.ts +6 -0
  101. package/dist/task-environment/delivery/feishu-templates/default-message-template.js +33 -0
  102. package/dist/task-environment/delivery/feishu-templates/default-message-template.js.map +1 -0
  103. package/dist/task-environment/delivery/feishu-templates/patch-message-template.d.ts +6 -0
  104. package/dist/task-environment/delivery/feishu-templates/patch-message-template.js +40 -0
  105. package/dist/task-environment/delivery/feishu-templates/patch-message-template.js.map +1 -0
  106. package/dist/task-environment/delivery/feishu-templates/template-registry.d.ts +2 -0
  107. package/dist/task-environment/delivery/feishu-templates/template-registry.js +11 -0
  108. package/dist/task-environment/delivery/feishu-templates/template-registry.js.map +1 -0
  109. package/dist/task-environment/delivery/feishu-templates/template-types.d.ts +20 -0
  110. package/dist/task-environment/delivery/feishu-templates/template-types.js +2 -0
  111. package/dist/task-environment/delivery/feishu-templates/template-types.js.map +1 -0
  112. package/dist/task-environment/delivery/task-delivery-dispatcher.d.ts +14 -0
  113. package/dist/task-environment/delivery/task-delivery-dispatcher.js +109 -0
  114. package/dist/task-environment/delivery/task-delivery-dispatcher.js.map +1 -0
  115. package/dist/task-environment/delivery/task-delivery-service.d.ts +33 -0
  116. package/dist/task-environment/delivery/task-delivery-service.js +432 -0
  117. package/dist/task-environment/delivery/task-delivery-service.js.map +1 -0
  118. package/dist/task-environment/delivery/task-publication-service.d.ts +97 -0
  119. package/dist/task-environment/delivery/task-publication-service.js +1369 -0
  120. package/dist/task-environment/delivery/task-publication-service.js.map +1 -0
  121. package/dist/task-environment/execution-addresses.d.ts +40 -0
  122. package/dist/task-environment/execution-addresses.js +63 -0
  123. package/dist/task-environment/execution-addresses.js.map +1 -0
  124. package/dist/task-environment/intake/cli-file-intake.d.ts +12 -0
  125. package/dist/task-environment/intake/cli-file-intake.js +56 -0
  126. package/dist/task-environment/intake/cli-file-intake.js.map +1 -0
  127. package/dist/task-environment/intake/manual-problem-intake.d.ts +3 -0
  128. package/dist/task-environment/intake/manual-problem-intake.js +57 -0
  129. package/dist/task-environment/intake/manual-problem-intake.js.map +1 -0
  130. package/dist/task-environment/intake/polling-problem-intake.d.ts +14 -0
  131. package/dist/task-environment/intake/polling-problem-intake.js +232 -0
  132. package/dist/task-environment/intake/polling-problem-intake.js.map +1 -0
  133. package/dist/task-environment/observability/logger.d.ts +76 -0
  134. package/dist/task-environment/observability/logger.js +604 -0
  135. package/dist/task-environment/observability/logger.js.map +1 -0
  136. package/dist/task-environment/observability/runtime-panel.d.ts +82 -0
  137. package/dist/task-environment/observability/runtime-panel.js +1008 -0
  138. package/dist/task-environment/observability/runtime-panel.js.map +1 -0
  139. package/dist/task-environment/observability/sound-notifier.d.ts +18 -0
  140. package/dist/task-environment/observability/sound-notifier.js +71 -0
  141. package/dist/task-environment/observability/sound-notifier.js.map +1 -0
  142. package/dist/task-environment/orchestration/execution-context-assembler.d.ts +41 -0
  143. package/dist/task-environment/orchestration/execution-context-assembler.js +464 -0
  144. package/dist/task-environment/orchestration/execution-context-assembler.js.map +1 -0
  145. package/dist/task-environment/orchestration/git-change-classifier.d.ts +19 -0
  146. package/dist/task-environment/orchestration/git-change-classifier.js +106 -0
  147. package/dist/task-environment/orchestration/git-change-classifier.js.map +1 -0
  148. package/dist/task-environment/orchestration/harness-registry.d.ts +27 -0
  149. package/dist/task-environment/orchestration/harness-registry.js +116 -0
  150. package/dist/task-environment/orchestration/harness-registry.js.map +1 -0
  151. package/dist/task-environment/orchestration/harness-resolver.d.ts +8 -0
  152. package/dist/task-environment/orchestration/harness-resolver.js +39 -0
  153. package/dist/task-environment/orchestration/harness-resolver.js.map +1 -0
  154. package/dist/task-environment/orchestration/task-orchestrator.d.ts +45 -0
  155. package/dist/task-environment/orchestration/task-orchestrator.js +1122 -0
  156. package/dist/task-environment/orchestration/task-orchestrator.js.map +1 -0
  157. package/dist/task-environment/orchestration/task-package-assembler.d.ts +4 -0
  158. package/dist/task-environment/orchestration/task-package-assembler.js +10 -0
  159. package/dist/task-environment/orchestration/task-package-assembler.js.map +1 -0
  160. package/dist/task-environment/orchestration/triage-agent.d.ts +54 -0
  161. package/dist/task-environment/orchestration/triage-agent.js +636 -0
  162. package/dist/task-environment/orchestration/triage-agent.js.map +1 -0
  163. package/dist/task-environment/orchestration/triage-runner.d.ts +65 -0
  164. package/dist/task-environment/orchestration/triage-runner.js +655 -0
  165. package/dist/task-environment/orchestration/triage-runner.js.map +1 -0
  166. package/dist/task-environment/publication-target.d.ts +12 -0
  167. package/dist/task-environment/publication-target.js +174 -0
  168. package/dist/task-environment/publication-target.js.map +1 -0
  169. package/dist/task-environment/runtime/blocking-event-queue.d.ts +7 -0
  170. package/dist/task-environment/runtime/blocking-event-queue.js +27 -0
  171. package/dist/task-environment/runtime/blocking-event-queue.js.map +1 -0
  172. package/dist/task-environment/runtime/optimus-runtime.d.ts +69 -0
  173. package/dist/task-environment/runtime/optimus-runtime.js +751 -0
  174. package/dist/task-environment/runtime/optimus-runtime.js.map +1 -0
  175. package/dist/task-environment/storage/sqlite-event-store.d.ts +52 -0
  176. package/dist/task-environment/storage/sqlite-event-store.js +288 -0
  177. package/dist/task-environment/storage/sqlite-event-store.js.map +1 -0
  178. package/dist/task-environment/storage/sqlite-task-store.d.ts +122 -0
  179. package/dist/task-environment/storage/sqlite-task-store.js +1182 -0
  180. package/dist/task-environment/storage/sqlite-task-store.js.map +1 -0
  181. package/dist/types.d.ts +629 -0
  182. package/dist/types.js +2 -0
  183. package/dist/types.js.map +1 -0
  184. package/embedded-skills/shared/repo-inspection/SKILL.md +9 -0
  185. package/embedded-skills/shared/repo-inspection/skill.json +5 -0
  186. package/embedded-skills/task/bugfix/android-debug-protocol/SKILL.md +10 -0
  187. package/embedded-skills/task/bugfix/android-debug-protocol/skill.json +6 -0
  188. package/harness/AGENTS.md +30 -0
  189. package/harness/CHECKLIST.md +44 -0
  190. package/harness/CONSTRAINTS.md +60 -0
  191. package/harness/FRAMEWORK.md +28 -0
  192. package/harness/GOAL.md +28 -0
  193. package/harness/HANDOFF.md +45 -0
  194. package/harness/TASK_PLAN.md +79 -0
  195. package/optimus.config.template.json +34 -0
  196. package/package.json +109 -0
  197. package/task-harnesses/bugfix/ACCEPT.md +47 -0
  198. package/task-harnesses/bugfix/CONSTRAINTS.md +46 -0
  199. package/task-harnesses/bugfix/CONTEXT.md +29 -0
  200. package/task-harnesses/bugfix/EVOLUTION.md +82 -0
  201. package/task-harnesses/bugfix/ROLE.md +29 -0
  202. package/task-harnesses/bugfix/STANDARD.md +250 -0
  203. package/task-harnesses/bugfix/manifest.json +13 -0
  204. package/task-harnesses/registry.json +8 -0
@@ -0,0 +1,521 @@
1
+ // Jira integration exposes the two read-side capabilities we need right now: search and get issue.
2
+ // It supports two transports behind one interface: direct Jira REST and the MCP gateway transport.
3
+ // Current project config uses the MCP gateway path because the auth material came from the Jira MCP setup.
4
+ import { Buffer } from "node:buffer";
5
+ export class JiraIntegrationError extends Error {
6
+ diagnostics;
7
+ constructor(message, diagnostics) {
8
+ super(message);
9
+ this.name = "JiraIntegrationError";
10
+ this.diagnostics = diagnostics;
11
+ }
12
+ }
13
+ // JiraRestClient keeps the plain Jira REST path available for future basic/bearer auth setups.
14
+ export class JiraClient {
15
+ options;
16
+ fetchImpl;
17
+ constructor(options) {
18
+ this.options = options;
19
+ if (!options.fetchImpl) {
20
+ throw new Error("Global fetch is unavailable. Use Node 18+ or pass a fetch implementation.");
21
+ }
22
+ this.fetchImpl = options.fetchImpl;
23
+ }
24
+ async searchIssues(input) {
25
+ const effectiveJql = applyProjectsFilter(input.jql, input.projectsFilter);
26
+ const requestBody = {
27
+ jql: effectiveJql,
28
+ maxResults: input.limit ?? 50,
29
+ startAt: input.startAt ?? 0,
30
+ fieldsByKeys: false
31
+ };
32
+ if (input.fields && input.fields.length > 0) {
33
+ requestBody.fields = input.fields;
34
+ }
35
+ if (input.expand && input.expand.length > 0) {
36
+ requestBody.expand = input.expand;
37
+ }
38
+ const response = await this.request("/rest/api/2/search", {
39
+ method: "POST",
40
+ body: requestBody
41
+ });
42
+ return normalizeSearchResult(response, effectiveJql, input.limit ?? 50);
43
+ }
44
+ async getIssue(input) {
45
+ const query = new URLSearchParams();
46
+ if (input.fields && input.fields.length > 0) {
47
+ query.set("fields", input.fields.join(","));
48
+ }
49
+ if (input.expand && input.expand.length > 0) {
50
+ query.set("expand", input.expand.join(","));
51
+ }
52
+ if (input.properties && input.properties.length > 0) {
53
+ query.set("properties", input.properties.join(","));
54
+ }
55
+ if (typeof input.commentLimit === "number") {
56
+ query.set("commentLimit", String(input.commentLimit));
57
+ }
58
+ if (typeof input.updateHistory === "boolean") {
59
+ query.set("updateHistory", input.updateHistory ? "true" : "false");
60
+ }
61
+ const suffix = query.toString();
62
+ const path = `/rest/api/2/issue/${encodeURIComponent(input.issueKey)}${suffix ? `?${suffix}` : ""}`;
63
+ const response = await this.request(path);
64
+ return mapIssueDetail(response);
65
+ }
66
+ async request(path, options = {}) {
67
+ const url = `${this.options.baseUrl.replace(/\/$/, "")}${path}`;
68
+ const requestInit = {
69
+ method: options.method ?? "GET",
70
+ headers: {
71
+ accept: "application/json",
72
+ ...buildRequestHeaders(this.options),
73
+ ...(options.body ? { "content-type": "application/json" } : {})
74
+ }
75
+ };
76
+ if (options.body) {
77
+ requestInit.body = JSON.stringify(options.body);
78
+ }
79
+ const response = await this.executeFetch(url, requestInit, { baseUrl: this.options.baseUrl });
80
+ const text = await response.text();
81
+ if (!response.ok) {
82
+ throw new JiraIntegrationError(`Jira request failed: ${response.status} ${response.statusText} ${text.slice(0, 300)}`.trim(), {
83
+ category: "request_error",
84
+ summary: `Jira request failed: ${response.status} ${response.statusText}`.trim(),
85
+ ...(text.slice(0, 300) ? { detail: text.slice(0, 300) } : {}),
86
+ baseUrl: this.options.baseUrl
87
+ });
88
+ }
89
+ return parseJsonResponse(text, "Jira REST returned a non-JSON response. This usually means the request hit a web page or login page instead of the API.");
90
+ }
91
+ async executeFetch(url, requestInit, context) {
92
+ try {
93
+ return await this.fetchImpl(url, requestInit);
94
+ }
95
+ catch (error) {
96
+ const message = error instanceof Error ? error.message : String(error);
97
+ const causeCode = typeof error === "object" && error && "code" in error && typeof error.code === "string"
98
+ ? error.code
99
+ : undefined;
100
+ throw new JiraIntegrationError(`Jira request network failure: ${message}`, {
101
+ category: "network_error",
102
+ summary: `Jira request network failure: ${message}`,
103
+ detail: message,
104
+ baseUrl: context.baseUrl,
105
+ ...(causeCode ? { causeCode } : {})
106
+ });
107
+ }
108
+ }
109
+ }
110
+ // JiraMcpClient talks to the configured Jira MCP gateway using the minimal JSON-RPC handshake and tool calls.
111
+ class JiraMcpClient {
112
+ options;
113
+ fetchImpl;
114
+ sessionId;
115
+ initialized = false;
116
+ nextId = 1;
117
+ constructor(options) {
118
+ this.options = options;
119
+ if (!options.fetchImpl) {
120
+ throw new Error("Global fetch is unavailable. Use Node 18+ or pass a fetch implementation.");
121
+ }
122
+ this.fetchImpl = options.fetchImpl;
123
+ }
124
+ async searchIssues(input) {
125
+ const effectiveJql = applyProjectsFilter(input.jql, input.projectsFilter);
126
+ const payload = await this.callTool("jira_search", {
127
+ jql: effectiveJql,
128
+ ...(input.fields && input.fields.length > 0 ? { fields: input.fields.join(",") } : {}),
129
+ ...(typeof input.limit === "number" ? { limit: input.limit } : {}),
130
+ ...(typeof input.startAt === "number" ? { start_at: input.startAt } : {}),
131
+ ...(input.projectsFilter && input.projectsFilter.length > 0 ? { projects_filter: input.projectsFilter.join(",") } : {}),
132
+ ...(input.expand && input.expand.length > 0 ? { expand: input.expand.join(",") } : {})
133
+ });
134
+ return normalizeSearchResult(payload, effectiveJql, input.limit ?? 50);
135
+ }
136
+ async getIssue(input) {
137
+ const payload = await this.callTool("jira_get_issue", {
138
+ issue_key: input.issueKey,
139
+ ...(input.fields && input.fields.length > 0 ? { fields: input.fields.join(",") } : {}),
140
+ ...(input.expand && input.expand.length > 0 ? { expand: input.expand.join(",") } : {}),
141
+ ...(typeof input.commentLimit === "number" ? { comment_limit: input.commentLimit } : {}),
142
+ ...(input.properties && input.properties.length > 0 ? { properties: input.properties.join(",") } : {}),
143
+ ...(typeof input.updateHistory === "boolean" ? { update_history: input.updateHistory } : {})
144
+ });
145
+ return mapIssueDetail(payload);
146
+ }
147
+ async callTool(name, args) {
148
+ await this.ensureInitialized();
149
+ const response = await this.sendRequest({
150
+ jsonrpc: "2.0",
151
+ id: this.consumeRequestId(),
152
+ method: "tools/call",
153
+ params: {
154
+ name,
155
+ arguments: args
156
+ }
157
+ }, true);
158
+ if (response.error) {
159
+ throw new Error(`Jira MCP tool call failed: ${response.error.message ?? "unknown error"}`);
160
+ }
161
+ return extractToolPayload(response.result ?? {});
162
+ }
163
+ async ensureInitialized() {
164
+ if (this.initialized) {
165
+ return;
166
+ }
167
+ const response = await this.sendRequest({
168
+ jsonrpc: "2.0",
169
+ id: this.consumeRequestId(),
170
+ method: "initialize",
171
+ params: {
172
+ protocolVersion: "2024-11-05",
173
+ capabilities: {},
174
+ clientInfo: {
175
+ name: "optimus-jira-client",
176
+ version: "0.1.0"
177
+ }
178
+ }
179
+ }, false);
180
+ if (response.error) {
181
+ throw new Error(`Jira MCP initialize failed: ${response.error.message ?? "unknown error"}`);
182
+ }
183
+ if (!this.sessionId) {
184
+ throw new Error("Jira MCP initialize did not return a session id.");
185
+ }
186
+ await this.sendRequest({
187
+ jsonrpc: "2.0",
188
+ method: "notifications/initialized"
189
+ }, true);
190
+ this.initialized = true;
191
+ }
192
+ consumeRequestId() {
193
+ const current = this.nextId;
194
+ this.nextId += 1;
195
+ return current;
196
+ }
197
+ async sendRequest(request, includeSession) {
198
+ const requestHeaders = {
199
+ accept: "application/json, text/event-stream",
200
+ "content-type": "application/json",
201
+ ...this.options.httpHeaders,
202
+ ...(includeSession && this.sessionId ? { "mcp-session-id": this.sessionId } : {})
203
+ };
204
+ const response = await this.executeFetch(this.options.mcpUrl, {
205
+ method: "POST",
206
+ headers: requestHeaders,
207
+ body: JSON.stringify(request)
208
+ }, {
209
+ mcpUrl: this.options.mcpUrl,
210
+ httpHeaders: requestHeaders
211
+ });
212
+ const responseText = await response.text();
213
+ if (!response.ok) {
214
+ throw new JiraIntegrationError(`Jira MCP request failed: ${response.status} ${response.statusText} ${responseText.slice(0, 300)}`.trim(), {
215
+ category: "request_error",
216
+ summary: `Jira MCP request failed: ${response.status} ${response.statusText}`.trim(),
217
+ ...(responseText.slice(0, 300) ? { detail: responseText.slice(0, 300) } : {}),
218
+ mcpUrl: this.options.mcpUrl
219
+ });
220
+ }
221
+ const sessionId = response.headers.get("mcp-session-id") ?? response.headers.get("Mcp-Session-Id");
222
+ if (sessionId && !this.sessionId) {
223
+ this.sessionId = sessionId;
224
+ }
225
+ if (!responseText.trim()) {
226
+ return {};
227
+ }
228
+ return parseJsonRpcEnvelope(responseText);
229
+ }
230
+ async executeFetch(url, requestInit, context) {
231
+ try {
232
+ return await this.fetchImpl(url, requestInit);
233
+ }
234
+ catch (error) {
235
+ throw this.wrapFetchError(error, context);
236
+ }
237
+ }
238
+ wrapFetchError(error, context) {
239
+ const message = error instanceof Error ? error.message : String(error);
240
+ const causeCode = typeof error === "object" && error && "code" in error && typeof error.code === "string"
241
+ ? error.code
242
+ : undefined;
243
+ const missingHeaders = context.httpHeaders ? resolveMissingJiraMcpHeaders(context.httpHeaders) : [];
244
+ if (missingHeaders.length > 0) {
245
+ return new JiraIntegrationError(`Jira MCP auth headers are missing: ${missingHeaders.join(", ")}.`, {
246
+ category: "auth_header_missing",
247
+ summary: `Jira MCP auth headers are missing: ${missingHeaders.join(", ")}.`,
248
+ ...(context.mcpUrl ? { mcpUrl: context.mcpUrl } : {}),
249
+ missingHeaders
250
+ });
251
+ }
252
+ return new JiraIntegrationError(`Jira request network failure: ${message}`, {
253
+ category: "network_error",
254
+ summary: `Jira request network failure: ${message}`,
255
+ detail: message,
256
+ ...(context.mcpUrl ? { mcpUrl: context.mcpUrl } : {}),
257
+ ...(context.baseUrl ? { baseUrl: context.baseUrl } : {}),
258
+ ...(causeCode ? { causeCode } : {})
259
+ });
260
+ }
261
+ }
262
+ export function resolveJiraClientFromEnv(processEnv = process.env, fetchImpl = fetch) {
263
+ const baseUrl = processEnv.JIRA_BASE_URL?.trim();
264
+ if (!baseUrl) {
265
+ throw new Error("Missing required JIRA_BASE_URL.");
266
+ }
267
+ return new JiraClient({
268
+ baseUrl,
269
+ authHeader: resolveJiraAuthHeader(processEnv),
270
+ fetchImpl
271
+ });
272
+ }
273
+ export function createJiraClientFromConfig(config, fetchImpl = fetch) {
274
+ if (config.authType === "http_headers") {
275
+ if (!config.mcpUrl) {
276
+ throw new Error("Jira config uses http_headers auth but is missing mcpUrl.");
277
+ }
278
+ return new JiraMcpClient({
279
+ mcpUrl: config.mcpUrl,
280
+ httpHeaders: config.httpHeaders,
281
+ fetchImpl
282
+ });
283
+ }
284
+ if (config.authType === "bearer" && config.bearerToken) {
285
+ return new JiraClient({
286
+ baseUrl: config.baseUrl,
287
+ authHeader: `Bearer ${config.bearerToken}`,
288
+ fetchImpl
289
+ });
290
+ }
291
+ const username = config.username?.trim();
292
+ const password = (config.apiToken ?? config.password)?.trim();
293
+ if (config.authType === "basic" && username && password) {
294
+ return new JiraClient({
295
+ baseUrl: config.baseUrl,
296
+ authHeader: `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`,
297
+ fetchImpl
298
+ });
299
+ }
300
+ throw new Error("Jira config is missing required auth material.");
301
+ }
302
+ function buildRequestHeaders(options) {
303
+ if (options.httpHeaders && Object.keys(options.httpHeaders).length > 0) {
304
+ return options.httpHeaders;
305
+ }
306
+ if (options.authHeader) {
307
+ return { authorization: options.authHeader };
308
+ }
309
+ throw new Error("Jira client is missing authentication headers.");
310
+ }
311
+ function resolveJiraAuthHeader(processEnv) {
312
+ const bearerToken = processEnv.JIRA_BEARER_TOKEN?.trim();
313
+ if (bearerToken) {
314
+ return `Bearer ${bearerToken}`;
315
+ }
316
+ const username = processEnv.JIRA_USERNAME?.trim() || processEnv.JIRA_EMAIL?.trim();
317
+ const password = processEnv.JIRA_API_TOKEN?.trim() || processEnv.JIRA_PASSWORD?.trim();
318
+ if (username && password) {
319
+ return `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`;
320
+ }
321
+ throw new Error("Missing Jira auth. Set JIRA_BEARER_TOKEN or JIRA_USERNAME plus JIRA_API_TOKEN or JIRA_PASSWORD.");
322
+ }
323
+ function normalizeSearchResult(raw, effectiveJql, defaultLimit) {
324
+ const issues = readArray(raw.issues);
325
+ return {
326
+ jql: effectiveJql,
327
+ startAt: readNumber(raw.startAt) ?? readNumber(raw.start_at) ?? 0,
328
+ maxResults: readNumber(raw.maxResults) ?? readNumber(raw.max_results) ?? defaultLimit,
329
+ total: readNumber(raw.total) ?? issues.length,
330
+ items: issues.map((issue) => mapSearchIssue(issue)),
331
+ rawResponse: raw
332
+ };
333
+ }
334
+ function extractToolPayload(result) {
335
+ const structuredContent = readObject(result.structuredContent);
336
+ if (Object.keys(structuredContent).length > 0) {
337
+ return structuredContent;
338
+ }
339
+ const contentItems = readArray(result.content);
340
+ const textItem = contentItems.find((item) => readString(item.type) === "text" && readString(item.text));
341
+ const text = textItem ? readString(textItem.text) : undefined;
342
+ if (!text) {
343
+ return result;
344
+ }
345
+ return parseJsonResponse(text, "Jira MCP tool returned non-JSON text.");
346
+ }
347
+ function parseJsonRpcEnvelope(raw) {
348
+ const trimmed = raw.trim();
349
+ if (trimmed.startsWith("data:") || trimmed.startsWith("event:")) {
350
+ const eventBlocks = trimmed
351
+ .split(/\r?\n\r?\n/)
352
+ .map((block) => block.trim())
353
+ .filter(Boolean);
354
+ for (let index = eventBlocks.length - 1; index >= 0; index -= 1) {
355
+ const block = eventBlocks[index];
356
+ if (!block) {
357
+ continue;
358
+ }
359
+ const payload = extractSseDataPayload(block);
360
+ if (!payload) {
361
+ continue;
362
+ }
363
+ return parseJsonResponse(payload, "Jira MCP returned invalid SSE JSON.");
364
+ }
365
+ throw new Error("Jira MCP returned SSE without a data payload.");
366
+ }
367
+ return parseJsonResponse(trimmed, "Jira MCP returned invalid JSON-RPC JSON.");
368
+ }
369
+ function extractSseDataPayload(block) {
370
+ const dataLines = block
371
+ .split(/\r?\n/)
372
+ .map((line) => line.trim())
373
+ .filter((line) => line.startsWith("data:"))
374
+ .map((line) => line.slice(5).trim())
375
+ .filter(Boolean);
376
+ return dataLines.length > 0 ? dataLines.join("\n") : undefined;
377
+ }
378
+ function parseJsonResponse(raw, fallbackMessage) {
379
+ try {
380
+ return JSON.parse(raw);
381
+ }
382
+ catch {
383
+ throw new Error(`${fallbackMessage} Preview: ${raw.slice(0, 200)}`);
384
+ }
385
+ }
386
+ function applyProjectsFilter(jql, projectsFilter) {
387
+ const normalizedJql = jql.trim();
388
+ const projects = (projectsFilter ?? []).map((item) => item.trim()).filter(Boolean);
389
+ if (projects.length === 0) {
390
+ return normalizedJql;
391
+ }
392
+ return `project in (${projects.join(", ")}) AND (${normalizedJql})`;
393
+ }
394
+ function mapSearchIssue(issue) {
395
+ const fields = readIssueFields(issue);
396
+ const summary = normalizeJiraText(fields.summary);
397
+ const description = normalizeJiraText(fields.description);
398
+ const status = readNestedName(fields.status);
399
+ const priority = readNestedName(fields.priority);
400
+ const assignee = readPrincipalName(fields.assignee);
401
+ const assigneeEmail = readPrincipalEmail(fields.assignee);
402
+ const issueType = readNestedName(fields.issuetype) ?? readNestedName(fields.issueType);
403
+ const updated = readString(fields.updated);
404
+ return {
405
+ issueKey: readString(issue.key) ?? readString(issue.issueKey) ?? "",
406
+ ...(summary ? { summary } : {}),
407
+ ...(description ? { description } : {}),
408
+ ...(status ? { status } : {}),
409
+ ...(priority ? { priority } : {}),
410
+ ...(assignee ? { assignee } : {}),
411
+ ...(assigneeEmail ? { assigneeEmail } : {}),
412
+ ...(issueType ? { issueType } : {}),
413
+ labels: readStringArray(fields.labels),
414
+ ...(updated ? { updated } : {})
415
+ };
416
+ }
417
+ function mapIssueDetail(issue) {
418
+ const summary = mapSearchIssue(issue);
419
+ const fields = readIssueFields(issue);
420
+ const comments = readArray(readObject(fields.comment).comments).map((comment) => {
421
+ const id = readString(comment.id);
422
+ const author = readPrincipalName(comment.author);
423
+ const body = normalizeJiraText(comment.body);
424
+ const created = readString(comment.created);
425
+ const updated = readString(comment.updated);
426
+ return {
427
+ ...(id ? { id } : {}),
428
+ ...(author ? { author } : {}),
429
+ ...(body ? { body } : {}),
430
+ ...(created ? { created } : {}),
431
+ ...(updated ? { updated } : {})
432
+ };
433
+ });
434
+ const reporter = readPrincipalName(fields.reporter);
435
+ const environment = normalizeJiraText(fields.environment);
436
+ return {
437
+ ...summary,
438
+ ...(reporter ? { reporter } : {}),
439
+ ...(environment ? { environment } : {}),
440
+ comments,
441
+ rawResponse: issue
442
+ };
443
+ }
444
+ function readIssueFields(issue) {
445
+ const nestedFields = readObject(issue.fields);
446
+ return {
447
+ ...issue,
448
+ ...nestedFields
449
+ };
450
+ }
451
+ function normalizeJiraText(value) {
452
+ const plain = readString(value);
453
+ if (plain) {
454
+ return plain;
455
+ }
456
+ const extracted = extractRichText(value)?.replace(/\n{3,}/g, "\n\n").trim();
457
+ return extracted && extracted.length > 0 ? extracted : undefined;
458
+ }
459
+ function extractRichText(value) {
460
+ if (typeof value === "string") {
461
+ return value;
462
+ }
463
+ if (Array.isArray(value)) {
464
+ return value
465
+ .map((item) => extractRichText(item))
466
+ .filter((item) => Boolean(item && item.trim()))
467
+ .join("\n");
468
+ }
469
+ if (!value || typeof value !== "object") {
470
+ return undefined;
471
+ }
472
+ const record = value;
473
+ const text = readString(record.text);
474
+ const content = extractRichText(record.content);
475
+ const parts = [text, content].filter((item) => Boolean(item && item.trim()));
476
+ return parts.length > 0 ? parts.join(text && content ? "\n" : "") : undefined;
477
+ }
478
+ function readObject(value) {
479
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
480
+ }
481
+ function readArray(value) {
482
+ return Array.isArray(value)
483
+ ? value.filter((item) => Boolean(item && typeof item === "object" && !Array.isArray(item)))
484
+ : [];
485
+ }
486
+ function readString(value) {
487
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
488
+ }
489
+ function readNumber(value) {
490
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
491
+ }
492
+ function readStringArray(value) {
493
+ return Array.isArray(value)
494
+ ? value.filter((item) => typeof item === "string" && item.trim().length > 0).map((item) => item.trim())
495
+ : [];
496
+ }
497
+ function readNestedName(value) {
498
+ const record = readObject(value);
499
+ return readString(record.name);
500
+ }
501
+ function readPrincipalName(value) {
502
+ const record = readObject(value);
503
+ return readString(record.displayName)
504
+ ?? readString(record.display_name)
505
+ ?? readString(record.name)
506
+ ?? readString(record.emailAddress)
507
+ ?? readString(record.email);
508
+ }
509
+ function readPrincipalEmail(value) {
510
+ const record = readObject(value);
511
+ return readString(record.emailAddress) ?? readString(record.email);
512
+ }
513
+ function resolveMissingJiraMcpHeaders(headers) {
514
+ const requiredHeaders = [
515
+ "X-Atlassian-Jira-Url",
516
+ "X-Atlassian-Username",
517
+ "X-Atlassian-Jira-Personal-Token"
518
+ ];
519
+ return requiredHeaders.filter((name) => !headers[name]?.trim());
520
+ }
521
+ //# sourceMappingURL=jira-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-client.js","sourceRoot":"","sources":["../../../src/integrations/jira/jira-client.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,mGAAmG;AACnG,2GAA2G;AAE3G,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA4GrC,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7B,WAAW,CAAuB;IAElD,YAAmB,OAAe,EAAE,WAAiC;QACnE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,OAAO,UAAU;IAGe;IAFnB,SAAS,CAAe;IAEzC,YAAoC,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;QAC5D,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAsB;QAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1E,MAAM,WAAW,GAA4B;YAC3C,GAAG,EAAE,YAAY;YACjB,UAAU,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC;YAC3B,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;QACH,OAAO,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAwB;QAC5C,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAC7C,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,qBAAqB,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,UAA8B,EAAE;QACjE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;QAChE,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;gBACpC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;SACF,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC5H,QAAQ,EAAE,eAAe;gBACzB,OAAO,EAAE,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;gBAChF,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,yHAAyH,CAAC,CAAC;IAC5J,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,GAAW,EACX,WAAwB,EACxB,OAA4B;QAE5B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ;gBAC/H,CAAC,CAAE,KAA0B,CAAC,IAAI;gBAClC,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,IAAI,oBAAoB,CAAC,iCAAiC,OAAO,EAAE,EAAE;gBACzE,QAAQ,EAAE,eAAe;gBACzB,OAAO,EAAE,iCAAiC,OAAO,EAAE;gBACnD,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,8GAA8G;AAC9G,MAAM,aAAa;IAMmB;IALnB,SAAS,CAAe;IACjC,SAAS,CAAU;IACnB,WAAW,GAAG,KAAK,CAAC;IACpB,MAAM,GAAG,CAAC,CAAC;IAEnB,YAAoC,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QAC/D,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAsB;QAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;YACjD,GAAG,EAAE,YAAY;YACjB,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvH,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC,CAAC;QAEH,OAAO,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAwB;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YACpD,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,GAAG,CAAC,OAAO,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7F,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA6B;QAChE,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACtC,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3B,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,IAAI;gBACJ,SAAS,EAAE,IAAI;aAChB;SACF,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,kBAAkB,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACtC,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3B,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE;oBACV,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,OAAO;iBACjB;aACF;SACF,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,2BAA2B;SACpC,EAAE,IAAI,CAAC,CAAC;QACT,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAA8B,EAAE,cAAuB;QAC/E,MAAM,cAAc,GAAG;YACrB,MAAM,EAAE,qCAAqC;YAC7C,cAAc,EAAE,kBAAkB;YAClC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;YAC3B,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,EAAE;YACD,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,oBAAoB,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxI,QAAQ,EAAE,eAAe;gBACzB,OAAO,EAAE,4BAA4B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;gBACpF,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACnG,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,GAAW,EACX,WAAwB,EACxB,OAAoF;QAEpF,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,cAAc,CACpB,KAAc,EACd,OAAoF;QAEpF,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ;YAC/H,CAAC,CAAE,KAA0B,CAAC,IAAI;YAClC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,oBAAoB,CAAC,sCAAsC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBAClG,QAAQ,EAAE,qBAAqB;gBAC/B,OAAO,EAAE,sCAAsC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAC3E,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,oBAAoB,CAAC,iCAAiC,OAAO,EAAE,EAAE;YAC1E,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,iCAAiC,OAAO,EAAE;YACnD,MAAM,EAAE,OAAO;YACf,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,aAAgC,OAAO,CAAC,GAAG,EAAE,YAA0B,KAAK;IACnH,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,UAAU,CAAC;QACpB,OAAO;QACP,UAAU,EAAE,qBAAqB,CAAC,UAAU,CAAC;QAC7C,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAS1C,EAAE,YAA0B,KAAK;IAChC,IAAI,MAAM,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,IAAI,aAAa,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvD,OAAO,IAAI,UAAU,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE;YAC1C,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACxD,OAAO,IAAI,UAAU,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAChF,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,OAA0B;IACrD,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,OAAO,CAAC,WAAW,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,qBAAqB,CAAC,UAA6B;IAC1D,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACzD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,UAAU,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IACnF,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IACvF,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;AACrH,CAAC;AAED,SAAS,qBAAqB,CAAC,GAA4B,EAAE,YAAoB,EAAE,YAAoB;IACrG,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO;QACL,GAAG,EAAE,YAAY;QACjB,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,YAAY;QACrF,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM;QAC7C,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnD,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA+B;IACzD,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,OAAO;aACxB,KAAK,CAAC,YAAY,CAAC;aACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,KAAK,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,OAAO,iBAAiB,CAAC,OAAO,EAAE,qCAAqC,CAA2B,CAAC;QACrG,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,EAAE,0CAA0C,CAA2B,CAAC;AAC1G,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,SAAS,GAAG,KAAK;SACpB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACnC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,eAAuB;IAC7D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,eAAe,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,cAAyB;IACjE,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,aAAa,GAAG,CAAC;AACtE,CAAC;AAED,SAAS,cAAc,CAAC,KAA8B;IACpD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3C,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;QACnE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAA8B;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9E,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO;YACL,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1D,OAAO;QACL,GAAG,OAAO;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,QAAQ;QACR,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO;QACL,GAAG,KAAK;QACR,GAAG,YAAY;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,OAAO,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aACpC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aAC9D,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5H,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzF,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;WAChC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;WAC/B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;WACvB,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;WAC/B,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,SAAS,4BAA4B,CAAC,OAA+B;IACnE,MAAM,eAAe,GAAG;QACtB,sBAAsB;QACtB,sBAAsB;QACtB,iCAAiC;KAClC,CAAC;IACF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { FeishuAssigneeIdentity } from "../../types.js";
2
+ import type { JiraIssueDetail, JiraIssueReader } from "./jira-client.js";
3
+ interface JiraAssigneeResolveLogger {
4
+ info?: (event: string, context?: Record<string, unknown>) => unknown;
5
+ warn?: (event: string, context?: Record<string, unknown>) => unknown;
6
+ }
7
+ export interface JiraSubmitOptions {
8
+ assignee?: string;
9
+ repo?: string;
10
+ branch?: string;
11
+ limit?: number;
12
+ taskType?: string;
13
+ commentLimit?: number;
14
+ dryRun?: boolean;
15
+ allowDuplicate?: boolean;
16
+ projectsFilter?: string[];
17
+ }
18
+ export interface JiraSubmitPreview {
19
+ issueKey: string;
20
+ title: string;
21
+ description: string;
22
+ submitArgs: string[];
23
+ status?: string;
24
+ }
25
+ export interface JiraSubmitRecord {
26
+ issueKey: string;
27
+ title: string;
28
+ status?: string;
29
+ submitted: boolean;
30
+ submitOutput?: string;
31
+ }
32
+ export interface JiraSubmitResult {
33
+ jql: string;
34
+ matchedCount: number;
35
+ submittedCount: number;
36
+ dryRun: boolean;
37
+ items: JiraSubmitRecord[];
38
+ }
39
+ export interface JiraSubmitDependencies {
40
+ client: JiraIssueReader;
41
+ submitIssue: (issue: JiraIssueDetail, submitArgs: string[]) => Promise<string>;
42
+ resolveAssigneeIdentity?: (issue: JiraIssueDetail) => Promise<FeishuAssigneeIdentity | undefined>;
43
+ }
44
+ export interface JiraPollLoopOptions extends JiraSubmitOptions {
45
+ intervalMs: number;
46
+ logger?: Pick<typeof console, "info" | "error">;
47
+ }
48
+ export interface JiraPollLoopController {
49
+ stop: () => void;
50
+ done: Promise<void>;
51
+ }
52
+ export declare function buildAssignedOpenJql(assignee?: string): string;
53
+ export declare function buildJiraSubmitTitle(issue: JiraIssueDetail): string;
54
+ export declare function buildJiraSubmitDescription(issue: JiraIssueDetail): string;
55
+ export declare function buildJiraSubmitArgs(issue: JiraIssueDetail, options: JiraSubmitOptions, assigneeIdentity?: FeishuAssigneeIdentity): string[];
56
+ export declare function submitAssignedOpenIssues(dependencies: JiraSubmitDependencies, options?: JiraSubmitOptions): Promise<JiraSubmitResult>;
57
+ export declare function submitSingleIssue(dependencies: JiraSubmitDependencies, issueKey: string, options?: JiraSubmitOptions): Promise<JiraSubmitResult>;
58
+ export declare function resolveJiraAssigneeIdentity(issue: JiraIssueDetail, options?: {
59
+ userMappings?: Record<string, {
60
+ openId: string;
61
+ displayName?: string;
62
+ email?: string;
63
+ }>;
64
+ execFileImpl?: (file: string, args: string[]) => Promise<{
65
+ stdout: string;
66
+ stderr: string;
67
+ }>;
68
+ logger?: JiraAssigneeResolveLogger;
69
+ }): Promise<FeishuAssigneeIdentity | undefined>;
70
+ export declare function startAssignedOpenPolling(dependencies: JiraSubmitDependencies, options: JiraPollLoopOptions): JiraPollLoopController;
71
+ export {};