@channelfactory/cliend 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/bin/cliend.d.ts +3 -0
  2. package/dist/bin/cliend.d.ts.map +1 -0
  3. package/dist/bin/cliend.js +7 -0
  4. package/dist/bin/cliend.js.map +1 -0
  5. package/dist/src/auth/auth-manager.d.ts +16 -0
  6. package/dist/src/auth/auth-manager.d.ts.map +1 -0
  7. package/dist/src/auth/auth-manager.js +135 -0
  8. package/dist/src/auth/auth-manager.js.map +1 -0
  9. package/dist/src/auth/credentials-store.d.ts +12 -0
  10. package/dist/src/auth/credentials-store.d.ts.map +1 -0
  11. package/dist/src/auth/credentials-store.js +95 -0
  12. package/dist/src/auth/credentials-store.js.map +1 -0
  13. package/dist/src/auth/local-server.d.ts +14 -0
  14. package/dist/src/auth/local-server.d.ts.map +1 -0
  15. package/dist/src/auth/local-server.js +49 -0
  16. package/dist/src/auth/local-server.js.map +1 -0
  17. package/dist/src/config/config-manager.d.ts +11 -0
  18. package/dist/src/config/config-manager.d.ts.map +1 -0
  19. package/dist/src/config/config-manager.js +102 -0
  20. package/dist/src/config/config-manager.js.map +1 -0
  21. package/dist/src/config/config.schema.d.ts +276 -0
  22. package/dist/src/config/config.schema.d.ts.map +1 -0
  23. package/dist/src/config/config.schema.js +46 -0
  24. package/dist/src/config/config.schema.js.map +1 -0
  25. package/dist/src/config/defaults.d.ts +3 -0
  26. package/dist/src/config/defaults.d.ts.map +1 -0
  27. package/dist/src/config/defaults.js +46 -0
  28. package/dist/src/config/defaults.js.map +1 -0
  29. package/dist/src/core/context-builder.d.ts +6 -0
  30. package/dist/src/core/context-builder.d.ts.map +1 -0
  31. package/dist/src/core/context-builder.js +55 -0
  32. package/dist/src/core/context-builder.js.map +1 -0
  33. package/dist/src/core/fan-out-executor.d.ts +16 -0
  34. package/dist/src/core/fan-out-executor.d.ts.map +1 -0
  35. package/dist/src/core/fan-out-executor.js +55 -0
  36. package/dist/src/core/fan-out-executor.js.map +1 -0
  37. package/dist/src/core/judge.d.ts +15 -0
  38. package/dist/src/core/judge.d.ts.map +1 -0
  39. package/dist/src/core/judge.js +133 -0
  40. package/dist/src/core/judge.js.map +1 -0
  41. package/dist/src/core/orchestrator.d.ts +19 -0
  42. package/dist/src/core/orchestrator.d.ts.map +1 -0
  43. package/dist/src/core/orchestrator.js +76 -0
  44. package/dist/src/core/orchestrator.js.map +1 -0
  45. package/dist/src/errors/auth-error.d.ts +16 -0
  46. package/dist/src/errors/auth-error.d.ts.map +1 -0
  47. package/dist/src/errors/auth-error.js +30 -0
  48. package/dist/src/errors/auth-error.js.map +1 -0
  49. package/dist/src/errors/base-error.d.ts +13 -0
  50. package/dist/src/errors/base-error.d.ts.map +1 -0
  51. package/dist/src/errors/base-error.js +13 -0
  52. package/dist/src/errors/base-error.js.map +1 -0
  53. package/dist/src/errors/error-handler.d.ts +7 -0
  54. package/dist/src/errors/error-handler.d.ts.map +1 -0
  55. package/dist/src/errors/error-handler.js +20 -0
  56. package/dist/src/errors/error-handler.js.map +1 -0
  57. package/dist/src/errors/integration-error.d.ts +20 -0
  58. package/dist/src/errors/integration-error.d.ts.map +1 -0
  59. package/dist/src/errors/integration-error.js +29 -0
  60. package/dist/src/errors/integration-error.js.map +1 -0
  61. package/dist/src/errors/provider-error.d.ts +23 -0
  62. package/dist/src/errors/provider-error.d.ts.map +1 -0
  63. package/dist/src/errors/provider-error.js +49 -0
  64. package/dist/src/errors/provider-error.js.map +1 -0
  65. package/dist/src/index.d.ts +2 -0
  66. package/dist/src/index.d.ts.map +1 -0
  67. package/dist/src/index.js +20 -0
  68. package/dist/src/index.js.map +1 -0
  69. package/dist/src/integrations/atlassian/jira-client.d.ts +16 -0
  70. package/dist/src/integrations/atlassian/jira-client.d.ts.map +1 -0
  71. package/dist/src/integrations/atlassian/jira-client.js +100 -0
  72. package/dist/src/integrations/atlassian/jira-client.js.map +1 -0
  73. package/dist/src/integrations/atlassian/oauth.d.ts +2 -0
  74. package/dist/src/integrations/atlassian/oauth.d.ts.map +1 -0
  75. package/dist/src/integrations/atlassian/oauth.js +3 -0
  76. package/dist/src/integrations/atlassian/oauth.js.map +1 -0
  77. package/dist/src/integrations/atlassian/rovo-client.d.ts +13 -0
  78. package/dist/src/integrations/atlassian/rovo-client.d.ts.map +1 -0
  79. package/dist/src/integrations/atlassian/rovo-client.js +17 -0
  80. package/dist/src/integrations/atlassian/rovo-client.js.map +1 -0
  81. package/dist/src/integrations/atlassian/token-store.d.ts +2 -0
  82. package/dist/src/integrations/atlassian/token-store.d.ts.map +1 -0
  83. package/dist/src/integrations/atlassian/token-store.js +3 -0
  84. package/dist/src/integrations/atlassian/token-store.js.map +1 -0
  85. package/dist/src/integrations/bitbucket/bitbucket-client.d.ts +23 -0
  86. package/dist/src/integrations/bitbucket/bitbucket-client.d.ts.map +1 -0
  87. package/dist/src/integrations/bitbucket/bitbucket-client.js +58 -0
  88. package/dist/src/integrations/bitbucket/bitbucket-client.js.map +1 -0
  89. package/dist/src/integrations/bitbucket/obsidian-reader.d.ts +21 -0
  90. package/dist/src/integrations/bitbucket/obsidian-reader.d.ts.map +1 -0
  91. package/dist/src/integrations/bitbucket/obsidian-reader.js +85 -0
  92. package/dist/src/integrations/bitbucket/obsidian-reader.js.map +1 -0
  93. package/dist/src/providers/chatgpt.provider.d.ts +17 -0
  94. package/dist/src/providers/chatgpt.provider.d.ts.map +1 -0
  95. package/dist/src/providers/chatgpt.provider.js +66 -0
  96. package/dist/src/providers/chatgpt.provider.js.map +1 -0
  97. package/dist/src/providers/claude.provider.d.ts +17 -0
  98. package/dist/src/providers/claude.provider.d.ts.map +1 -0
  99. package/dist/src/providers/claude.provider.js +70 -0
  100. package/dist/src/providers/claude.provider.js.map +1 -0
  101. package/dist/src/providers/codex.provider.d.ts +17 -0
  102. package/dist/src/providers/codex.provider.d.ts.map +1 -0
  103. package/dist/src/providers/codex.provider.js +64 -0
  104. package/dist/src/providers/codex.provider.js.map +1 -0
  105. package/dist/src/providers/provider-registry.d.ts +10 -0
  106. package/dist/src/providers/provider-registry.d.ts.map +1 -0
  107. package/dist/src/providers/provider-registry.js +29 -0
  108. package/dist/src/providers/provider-registry.js.map +1 -0
  109. package/dist/src/providers/provider.interface.d.ts +10 -0
  110. package/dist/src/providers/provider.interface.d.ts.map +1 -0
  111. package/dist/src/providers/provider.interface.js +2 -0
  112. package/dist/src/providers/provider.interface.js.map +1 -0
  113. package/dist/src/repl/command-registry.d.ts +25 -0
  114. package/dist/src/repl/command-registry.d.ts.map +1 -0
  115. package/dist/src/repl/command-registry.js +19 -0
  116. package/dist/src/repl/command-registry.js.map +1 -0
  117. package/dist/src/repl/commands/auth.d.ts +3 -0
  118. package/dist/src/repl/commands/auth.d.ts.map +1 -0
  119. package/dist/src/repl/commands/auth.js +17 -0
  120. package/dist/src/repl/commands/auth.js.map +1 -0
  121. package/dist/src/repl/commands/config.d.ts +3 -0
  122. package/dist/src/repl/commands/config.d.ts.map +1 -0
  123. package/dist/src/repl/commands/config.js +39 -0
  124. package/dist/src/repl/commands/config.js.map +1 -0
  125. package/dist/src/repl/commands/help.d.ts +3 -0
  126. package/dist/src/repl/commands/help.d.ts.map +1 -0
  127. package/dist/src/repl/commands/help.js +33 -0
  128. package/dist/src/repl/commands/help.js.map +1 -0
  129. package/dist/src/repl/commands/memory.d.ts +3 -0
  130. package/dist/src/repl/commands/memory.d.ts.map +1 -0
  131. package/dist/src/repl/commands/memory.js +30 -0
  132. package/dist/src/repl/commands/memory.js.map +1 -0
  133. package/dist/src/repl/commands/obsidian.d.ts +3 -0
  134. package/dist/src/repl/commands/obsidian.d.ts.map +1 -0
  135. package/dist/src/repl/commands/obsidian.js +30 -0
  136. package/dist/src/repl/commands/obsidian.js.map +1 -0
  137. package/dist/src/repl/commands/sessions.d.ts +5 -0
  138. package/dist/src/repl/commands/sessions.d.ts.map +1 -0
  139. package/dist/src/repl/commands/sessions.js +77 -0
  140. package/dist/src/repl/commands/sessions.js.map +1 -0
  141. package/dist/src/repl/commands/status.d.ts +3 -0
  142. package/dist/src/repl/commands/status.d.ts.map +1 -0
  143. package/dist/src/repl/commands/status.js +32 -0
  144. package/dist/src/repl/commands/status.js.map +1 -0
  145. package/dist/src/repl/commands/ticket.d.ts +3 -0
  146. package/dist/src/repl/commands/ticket.d.ts.map +1 -0
  147. package/dist/src/repl/commands/ticket.js +38 -0
  148. package/dist/src/repl/commands/ticket.js.map +1 -0
  149. package/dist/src/repl/input-parser.d.ts +13 -0
  150. package/dist/src/repl/input-parser.d.ts.map +1 -0
  151. package/dist/src/repl/input-parser.js +25 -0
  152. package/dist/src/repl/input-parser.js.map +1 -0
  153. package/dist/src/repl/repl.d.ts +34 -0
  154. package/dist/src/repl/repl.d.ts.map +1 -0
  155. package/dist/src/repl/repl.js +180 -0
  156. package/dist/src/repl/repl.js.map +1 -0
  157. package/dist/src/session/history.d.ts +8 -0
  158. package/dist/src/session/history.d.ts.map +1 -0
  159. package/dist/src/session/history.js +26 -0
  160. package/dist/src/session/history.js.map +1 -0
  161. package/dist/src/session/memory-manager.d.ts +20 -0
  162. package/dist/src/session/memory-manager.d.ts.map +1 -0
  163. package/dist/src/session/memory-manager.js +65 -0
  164. package/dist/src/session/memory-manager.js.map +1 -0
  165. package/dist/src/session/session-manager.d.ts +15 -0
  166. package/dist/src/session/session-manager.d.ts.map +1 -0
  167. package/dist/src/session/session-manager.js +139 -0
  168. package/dist/src/session/session-manager.js.map +1 -0
  169. package/dist/src/session/session.d.ts +31 -0
  170. package/dist/src/session/session.d.ts.map +1 -0
  171. package/dist/src/session/session.js +49 -0
  172. package/dist/src/session/session.js.map +1 -0
  173. package/dist/src/types/ai-response.d.ts +40 -0
  174. package/dist/src/types/ai-response.d.ts.map +1 -0
  175. package/dist/src/types/ai-response.js +2 -0
  176. package/dist/src/types/ai-response.js.map +1 -0
  177. package/dist/src/types/config.d.ts +51 -0
  178. package/dist/src/types/config.d.ts.map +1 -0
  179. package/dist/src/types/config.js +2 -0
  180. package/dist/src/types/config.js.map +1 -0
  181. package/dist/src/types/context.d.ts +18 -0
  182. package/dist/src/types/context.d.ts.map +1 -0
  183. package/dist/src/types/context.js +2 -0
  184. package/dist/src/types/context.js.map +1 -0
  185. package/dist/src/types/message.d.ts +13 -0
  186. package/dist/src/types/message.d.ts.map +1 -0
  187. package/dist/src/types/message.js +2 -0
  188. package/dist/src/types/message.js.map +1 -0
  189. package/dist/src/types/session.d.ts +30 -0
  190. package/dist/src/types/session.d.ts.map +1 -0
  191. package/dist/src/types/session.js +2 -0
  192. package/dist/src/types/session.js.map +1 -0
  193. package/dist/src/types/ticket.d.ts +18 -0
  194. package/dist/src/types/ticket.d.ts.map +1 -0
  195. package/dist/src/types/ticket.js +2 -0
  196. package/dist/src/types/ticket.js.map +1 -0
  197. package/dist/src/ui/logger.d.ts +3 -0
  198. package/dist/src/ui/logger.d.ts.map +1 -0
  199. package/dist/src/ui/logger.js +10 -0
  200. package/dist/src/ui/logger.js.map +1 -0
  201. package/dist/src/ui/output-formatter.d.ts +4 -0
  202. package/dist/src/ui/output-formatter.d.ts.map +1 -0
  203. package/dist/src/ui/output-formatter.js +52 -0
  204. package/dist/src/ui/output-formatter.js.map +1 -0
  205. package/dist/src/ui/prompt-line.d.ts +2 -0
  206. package/dist/src/ui/prompt-line.d.ts.map +1 -0
  207. package/dist/src/ui/prompt-line.js +4 -0
  208. package/dist/src/ui/prompt-line.js.map +1 -0
  209. package/dist/src/ui/spinner.d.ts +3 -0
  210. package/dist/src/ui/spinner.d.ts.map +1 -0
  211. package/dist/src/ui/spinner.js +5 -0
  212. package/dist/src/ui/spinner.js.map +1 -0
  213. package/dist/src/ui/welcome.d.ts +2 -0
  214. package/dist/src/ui/welcome.d.ts.map +1 -0
  215. package/dist/src/ui/welcome.js +14 -0
  216. package/dist/src/ui/welcome.js.map +1 -0
  217. package/dist/src/utils/crypto.d.ts +2 -0
  218. package/dist/src/utils/crypto.d.ts.map +1 -0
  219. package/dist/src/utils/crypto.js +3 -0
  220. package/dist/src/utils/crypto.js.map +1 -0
  221. package/dist/src/utils/http-client.d.ts +8 -0
  222. package/dist/src/utils/http-client.d.ts.map +1 -0
  223. package/dist/src/utils/http-client.js +36 -0
  224. package/dist/src/utils/http-client.js.map +1 -0
  225. package/dist/src/utils/retry.d.ts +7 -0
  226. package/dist/src/utils/retry.d.ts.map +1 -0
  227. package/dist/src/utils/retry.js +23 -0
  228. package/dist/src/utils/retry.js.map +1 -0
  229. package/dist/src/utils/validation.d.ts +9 -0
  230. package/dist/src/utils/validation.d.ts.map +1 -0
  231. package/dist/src/utils/validation.js +19 -0
  232. package/dist/src/utils/validation.js.map +1 -0
  233. package/package.json +65 -0
@@ -0,0 +1,100 @@
1
+ import { AuthManager } from '../../auth/auth-manager.js';
2
+ import { JiraApiError } from '../../errors/integration-error.js';
3
+ const API_BASE = 'https://api.atlassian.com';
4
+ export class JiraClient {
5
+ config;
6
+ logger;
7
+ authManager;
8
+ constructor(config, logger) {
9
+ this.config = config;
10
+ this.logger = logger;
11
+ this.authManager = new AuthManager(config, logger);
12
+ }
13
+ async getIssue(issueKey) {
14
+ const cloudId = await this.getCloudId();
15
+ const url = `${API_BASE}/ex/jira/${cloudId}/rest/api/3/issue/${issueKey}`;
16
+ const response = await this.request(url);
17
+ if (response.status === 404) {
18
+ throw JiraApiError.issueNotFound(issueKey);
19
+ }
20
+ if (response.status === 403) {
21
+ throw JiraApiError.forbidden(issueKey);
22
+ }
23
+ if (!response.ok) {
24
+ throw new JiraApiError('JIRA_API_ERROR', `Jira API returned ${response.status}`, `Failed to fetch ${issueKey}. Status: ${response.status}`);
25
+ }
26
+ const data = (await response.json());
27
+ return this.mapIssue(data);
28
+ }
29
+ async getCloudId() {
30
+ if (this.config.atlassian.cloudId) {
31
+ return this.config.atlassian.cloudId;
32
+ }
33
+ const token = await this.authManager.getAccessToken();
34
+ const response = await fetch(`${API_BASE}/oauth/token/accessible-resources`, {
35
+ headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
36
+ });
37
+ if (!response.ok) {
38
+ throw new JiraApiError('JIRA_CLOUD_ID_ERROR', 'Failed to fetch accessible resources', 'Could not determine Atlassian Cloud ID. Set it in config.');
39
+ }
40
+ const resources = (await response.json());
41
+ if (resources.length === 0) {
42
+ throw new JiraApiError('JIRA_NO_RESOURCES', 'No accessible resources found', 'No Atlassian sites accessible with current auth. Check permissions.');
43
+ }
44
+ const cloudId = resources[0].id;
45
+ this.logger.info({ cloudId, site: resources[0].name }, 'Resolved Cloud ID');
46
+ return cloudId;
47
+ }
48
+ async request(url) {
49
+ const token = await this.authManager.getAccessToken();
50
+ return fetch(url, {
51
+ headers: {
52
+ Authorization: `Bearer ${token}`,
53
+ Accept: 'application/json',
54
+ },
55
+ });
56
+ }
57
+ mapIssue(data) {
58
+ const fields = data.fields;
59
+ return {
60
+ key: data.key,
61
+ summary: fields.summary ?? '',
62
+ description: this.extractText(fields.description),
63
+ status: fields.status?.name ?? 'Unknown',
64
+ type: fields.issuetype?.name ?? 'Unknown',
65
+ priority: fields.priority?.name ?? 'Medium',
66
+ assignee: fields.assignee?.displayName,
67
+ labels: fields.labels ?? [],
68
+ acceptanceCriteria: this.extractCustomField(fields, 'acceptance criteria'),
69
+ projectKey: data.key.split('-')[0],
70
+ };
71
+ }
72
+ extractText(doc) {
73
+ if (!doc || typeof doc !== 'object')
74
+ return '';
75
+ // Atlassian Document Format — extract text content recursively
76
+ const adf = doc;
77
+ if (!adf.content)
78
+ return '';
79
+ return adf.content
80
+ .flatMap((block) => block.content?.map((inline) => inline.text ?? '') ?? [])
81
+ .join(' ')
82
+ .trim();
83
+ }
84
+ extractCustomField(fields, label) {
85
+ // Search custom fields for acceptance criteria
86
+ for (const [key, value] of Object.entries(fields)) {
87
+ if (key.startsWith('customfield_') && typeof value === 'string' && value.length > 0) {
88
+ // Heuristic: return the first non-empty custom field that looks like AC
89
+ return value;
90
+ }
91
+ if (key.startsWith('customfield_') && value && typeof value === 'object') {
92
+ const text = this.extractText(value);
93
+ if (text)
94
+ return text;
95
+ }
96
+ }
97
+ return undefined;
98
+ }
99
+ }
100
+ //# sourceMappingURL=jira-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-client.js","sourceRoot":"","sources":["../../../../src/integrations/atlassian/jira-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAE7C,MAAM,OAAO,UAAU;IAIF;IACA;IAJF,WAAW,CAAc;IAE1C,YACmB,MAAiB,EACjB,MAAc;QADd,WAAM,GAAN,MAAM,CAAW;QACjB,WAAM,GAAN,MAAM,CAAQ;QAE/B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,GAAG,QAAQ,YAAY,OAAO,qBAAqB,QAAQ,EAAE,CAAC;QAE1E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,qBAAqB,QAAQ,CAAC,MAAM,EAAE,EACtC,mBAAmB,QAAQ,aAAa,QAAQ,CAAC,MAAM,EAAE,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,mCAAmC,EAAE;YAC3E,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SAC1E,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,YAAY,CACpB,qBAAqB,EACrB,sCAAsC,EACtC,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAC;QAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,YAAY,CACpB,mBAAmB,EACnB,+BAA+B,EAC/B,qEAAqE,CACtE,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC5E,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAW;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,IAAkB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;YACjD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,SAAS;YACxC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,IAAI,SAAS;YACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ;YAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW;YACtC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC;YAC1E,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACnC,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,GAAY;QAC9B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC/C,+DAA+D;QAC/D,MAAM,GAAG,GAAG,GAAkE,CAAC;QAC/E,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO;aACf,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;aAC3E,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE,CAAC;IACZ,CAAC;IAEO,kBAAkB,CAAC,MAA+B,EAAE,KAAa;QACvE,+CAA+C;QAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpF,wEAAwE;gBACxE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACzE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { AuthManager } from '../../auth/auth-manager.js';
2
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/integrations/atlassian/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Re-export from auth-manager for integration access
2
+ export { AuthManager } from '../../auth/auth-manager.js';
3
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/integrations/atlassian/oauth.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Logger } from 'pino';
2
+ import type { AppConfig } from '../../types/config.js';
3
+ /**
4
+ * Rovo client — future-proofing for Atlassian Rovo AI integration.
5
+ * Currently a placeholder; will be implemented when Rovo MCP API stabilizes.
6
+ */
7
+ export declare class RovoClient {
8
+ private readonly _config;
9
+ private readonly _logger;
10
+ constructor(_config: AppConfig, _logger: Logger);
11
+ search(_query: string): Promise<unknown[]>;
12
+ }
13
+ //# sourceMappingURL=rovo-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rovo-client.d.ts","sourceRoot":"","sources":["../../../../src/integrations/atlassian/rovo-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;GAGG;AACH,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,MAAM;IAG5B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAIjD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Rovo client — future-proofing for Atlassian Rovo AI integration.
3
+ * Currently a placeholder; will be implemented when Rovo MCP API stabilizes.
4
+ */
5
+ export class RovoClient {
6
+ _config;
7
+ _logger;
8
+ constructor(_config, _logger) {
9
+ this._config = _config;
10
+ this._logger = _logger;
11
+ }
12
+ async search(_query) {
13
+ // TODO: Implement Rovo search via MCP or REST API
14
+ return [];
15
+ }
16
+ }
17
+ //# sourceMappingURL=rovo-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rovo-client.js","sourceRoot":"","sources":["../../../../src/integrations/atlassian/rovo-client.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,UAAU;IAEF;IACA;IAFnB,YACmB,OAAkB,EAClB,OAAe;QADf,YAAO,GAAP,OAAO,CAAW;QAClB,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,kDAAkD;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { CredentialsStore } from '../../auth/credentials-store.js';
2
+ //# sourceMappingURL=token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../../src/integrations/atlassian/token-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Re-export from auth for integration access
2
+ export { CredentialsStore } from '../../auth/credentials-store.js';
3
+ //# sourceMappingURL=token-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../../../src/integrations/atlassian/token-store.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { Logger } from 'pino';
2
+ import type { AppConfig } from '../../types/config.js';
3
+ export interface BitbucketFile {
4
+ path: string;
5
+ type: 'commit_file' | 'commit_directory';
6
+ size?: number;
7
+ }
8
+ export declare class BitbucketClient {
9
+ private readonly config;
10
+ private readonly logger;
11
+ private readonly authManager;
12
+ constructor(config: AppConfig, logger: Logger);
13
+ /**
14
+ * List files at a given path in the repository.
15
+ */
16
+ listFiles(path: string): Promise<BitbucketFile[]>;
17
+ /**
18
+ * Read the raw content of a file.
19
+ */
20
+ readFile(filePath: string): Promise<string>;
21
+ private request;
22
+ }
23
+ //# sourceMappingURL=bitbucket-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket-client.d.ts","sourceRoot":"","sources":["../../../../src/integrations/bitbucket/bitbucket-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,GAAG,kBAAkB,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAGvB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM;IAKjC;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAqBvD;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAiBnC,OAAO;CAetB"}
@@ -0,0 +1,58 @@
1
+ import { AuthManager } from '../../auth/auth-manager.js';
2
+ import { BitbucketApiError } from '../../errors/integration-error.js';
3
+ const API_BASE = 'https://api.bitbucket.org/2.0';
4
+ export class BitbucketClient {
5
+ config;
6
+ logger;
7
+ authManager;
8
+ constructor(config, logger) {
9
+ this.config = config;
10
+ this.logger = logger;
11
+ this.authManager = new AuthManager(config, logger);
12
+ }
13
+ /**
14
+ * List files at a given path in the repository.
15
+ */
16
+ async listFiles(path) {
17
+ const { workspace, repoSlug, branch } = this.config.bitbucket;
18
+ const url = `${API_BASE}/repositories/${workspace}/${repoSlug}/src/${branch}/${path}`;
19
+ const response = await this.request(url);
20
+ if (response.status === 404) {
21
+ throw BitbucketApiError.repoNotFound(workspace, repoSlug);
22
+ }
23
+ if (!response.ok) {
24
+ throw new BitbucketApiError('BITBUCKET_API_ERROR', `Bitbucket API returned ${response.status}`, `Failed to list files at ${path}. Status: ${response.status}`);
25
+ }
26
+ const data = (await response.json());
27
+ return data.values ?? [];
28
+ }
29
+ /**
30
+ * Read the raw content of a file.
31
+ */
32
+ async readFile(filePath) {
33
+ const { workspace, repoSlug, branch } = this.config.bitbucket;
34
+ const url = `${API_BASE}/repositories/${workspace}/${repoSlug}/src/${branch}/${filePath}`;
35
+ const response = await this.request(url);
36
+ if (!response.ok) {
37
+ throw new BitbucketApiError('BITBUCKET_FILE_NOT_FOUND', `Could not read ${filePath}: ${response.status}`, `Failed to read file ${filePath} from Bitbucket.`);
38
+ }
39
+ return response.text();
40
+ }
41
+ async request(url) {
42
+ try {
43
+ const token = await this.authManager.getAccessToken();
44
+ return fetch(url, {
45
+ headers: {
46
+ Authorization: `Bearer ${token}`,
47
+ Accept: 'application/json',
48
+ },
49
+ });
50
+ }
51
+ catch {
52
+ // If auth fails, try without auth (public repos)
53
+ this.logger.debug('Auth failed for Bitbucket, trying unauthenticated');
54
+ return fetch(url, { headers: { Accept: 'application/json' } });
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=bitbucket-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket-client.js","sourceRoot":"","sources":["../../../../src/integrations/bitbucket/bitbucket-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AAQjD,MAAM,OAAO,eAAe;IAIP;IACA;IAJF,WAAW,CAAc;IAE1C,YACmB,MAAiB,EACjB,MAAc;QADd,WAAM,GAAN,MAAM,CAAW;QACjB,WAAM,GAAN,MAAM,CAAQ;QAE/B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAC9D,MAAM,GAAG,GAAG,GAAG,QAAQ,iBAAiB,SAAS,IAAI,QAAQ,QAAQ,MAAM,IAAI,IAAI,EAAE,CAAC;QAEtF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,iBAAiB,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,CACzB,qBAAqB,EACrB,0BAA0B,QAAQ,CAAC,MAAM,EAAE,EAC3C,2BAA2B,IAAI,aAAa,QAAQ,CAAC,MAAM,EAAE,CAC9D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgC,CAAC;QACpE,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAC9D,MAAM,GAAG,GAAG,GAAG,QAAQ,iBAAiB,SAAS,IAAI,QAAQ,QAAQ,MAAM,IAAI,QAAQ,EAAE,CAAC;QAE1F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,kBAAkB,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,EAChD,uBAAuB,QAAQ,kBAAkB,CAClD,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAW;QAC/B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC,GAAG,EAAE;gBAChB,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,EAAE;oBAChC,MAAM,EAAE,kBAAkB;iBAC3B;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;YACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { Logger } from 'pino';
2
+ import type { AppConfig } from '../../types/config.js';
3
+ import type { ObsidianDocument } from '../../types/context.js';
4
+ export declare class ObsidianReader {
5
+ private readonly logger;
6
+ private readonly bitbucket;
7
+ private readonly basePath;
8
+ constructor(config: AppConfig, logger: Logger);
9
+ /**
10
+ * Fetch all markdown files from the Obsidian vault in Bitbucket.
11
+ */
12
+ fetchAll(): Promise<ObsidianDocument[]>;
13
+ /**
14
+ * Fetch docs and filter by relevance to a search query (ticket summary, labels, etc.).
15
+ */
16
+ fetchRelevant(query: string, maxDocs?: number): Promise<ObsidianDocument[]>;
17
+ private parseDocument;
18
+ private extractTitle;
19
+ private rankByRelevance;
20
+ }
21
+ //# sourceMappingURL=obsidian-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian-reader.d.ts","sourceRoot":"","sources":["../../../../src/integrations/bitbucket/obsidian-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,MAAM,EAAE,SAAS,EACA,MAAM,EAAE,MAAM;IAMjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAsB7C;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAK5E,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,eAAe;CA4BxB"}
@@ -0,0 +1,85 @@
1
+ import matter from 'gray-matter';
2
+ import { BitbucketClient } from './bitbucket-client.js';
3
+ export class ObsidianReader {
4
+ logger;
5
+ bitbucket;
6
+ basePath;
7
+ constructor(config, logger) {
8
+ this.logger = logger;
9
+ this.bitbucket = new BitbucketClient(config, logger);
10
+ this.basePath = config.bitbucket.obsidianPath;
11
+ }
12
+ /**
13
+ * Fetch all markdown files from the Obsidian vault in Bitbucket.
14
+ */
15
+ async fetchAll() {
16
+ const files = await this.bitbucket.listFiles(this.basePath);
17
+ const mdFiles = files.filter((f) => f.type === 'commit_file' && f.path.endsWith('.md'));
18
+ this.logger.info({ count: mdFiles.length }, 'Found Obsidian markdown files');
19
+ const docs = [];
20
+ for (const file of mdFiles) {
21
+ try {
22
+ const content = await this.bitbucket.readFile(file.path);
23
+ const parsed = this.parseDocument(file.path, content);
24
+ docs.push(parsed);
25
+ }
26
+ catch (error) {
27
+ this.logger.warn({ path: file.path, err: error }, 'Failed to read Obsidian doc');
28
+ }
29
+ }
30
+ return docs;
31
+ }
32
+ /**
33
+ * Fetch docs and filter by relevance to a search query (ticket summary, labels, etc.).
34
+ */
35
+ async fetchRelevant(query, maxDocs = 5) {
36
+ const allDocs = await this.fetchAll();
37
+ return this.rankByRelevance(allDocs, query).slice(0, maxDocs);
38
+ }
39
+ parseDocument(path, raw) {
40
+ const { data: frontmatter, content } = matter(raw);
41
+ const title = this.extractTitle(path, content, frontmatter);
42
+ return {
43
+ path,
44
+ title,
45
+ content,
46
+ frontmatter: frontmatter,
47
+ relevanceScore: 0,
48
+ };
49
+ }
50
+ extractTitle(path, content, frontmatter) {
51
+ // Priority: frontmatter title > first H1 > filename
52
+ if (typeof frontmatter.title === 'string')
53
+ return frontmatter.title;
54
+ const h1Match = content.match(/^#\s+(.+)$/m);
55
+ if (h1Match)
56
+ return h1Match[1];
57
+ const filename = path.split('/').pop() ?? path;
58
+ return filename.replace('.md', '').replace(/[-_]/g, ' ');
59
+ }
60
+ rankByRelevance(docs, query) {
61
+ const queryWords = query.toLowerCase().split(/\s+/);
62
+ for (const doc of docs) {
63
+ let score = 0;
64
+ const searchable = `${doc.title} ${doc.content} ${JSON.stringify(doc.frontmatter)}`.toLowerCase();
65
+ for (const word of queryWords) {
66
+ if (word.length < 3)
67
+ continue;
68
+ const matches = (searchable.match(new RegExp(word, 'g')) ?? []).length;
69
+ score += matches;
70
+ }
71
+ // Boost docs with relevant frontmatter tags
72
+ const tags = doc.frontmatter.tags;
73
+ if (Array.isArray(tags)) {
74
+ for (const tag of tags) {
75
+ if (typeof tag === 'string' && queryWords.some((w) => tag.toLowerCase().includes(w))) {
76
+ score += 5;
77
+ }
78
+ }
79
+ }
80
+ doc.relevanceScore = score;
81
+ }
82
+ return docs.sort((a, b) => b.relevanceScore - a.relevanceScore);
83
+ }
84
+ }
85
+ //# sourceMappingURL=obsidian-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian-reader.js","sourceRoot":"","sources":["../../../../src/integrations/bitbucket/obsidian-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { IAIProvider } from './provider.interface.js';
2
+ import type { ConversationMessage } from '../types/message.js';
3
+ import type { AIProviderResponse } from '../types/ai-response.js';
4
+ import type { AssembledContext } from '../types/context.js';
5
+ import type { ProviderConfig } from '../types/config.js';
6
+ export declare class ChatGPTProvider implements IAIProvider {
7
+ private readonly config;
8
+ readonly name = "ChatGPT";
9
+ private client;
10
+ private abortController;
11
+ constructor(config: ProviderConfig);
12
+ isAvailable(): Promise<boolean>;
13
+ execute(context: AssembledContext, history: ConversationMessage[]): Promise<AIProviderResponse>;
14
+ abort(): void;
15
+ private buildMessages;
16
+ }
17
+ //# sourceMappingURL=chatgpt.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt.provider.d.ts","sourceRoot":"","sources":["../../../src/providers/chatgpt.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,eAAgB,YAAW,WAAW;IAKrC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,eAAe,CAAgC;gBAE1B,MAAM,EAAE,cAAc;IAE7C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,CACX,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IA8C9B,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,aAAa;CAiBtB"}
@@ -0,0 +1,66 @@
1
+ import OpenAI from 'openai';
2
+ export class ChatGPTProvider {
3
+ config;
4
+ name = 'ChatGPT';
5
+ client = null;
6
+ abortController = null;
7
+ constructor(config) {
8
+ this.config = config;
9
+ }
10
+ async isAvailable() {
11
+ return this.config.enabled && !!this.config.apiKey;
12
+ }
13
+ async execute(context, history) {
14
+ const start = Date.now();
15
+ try {
16
+ if (!this.client) {
17
+ this.client = new OpenAI({ apiKey: this.config.apiKey });
18
+ }
19
+ this.abortController = new AbortController();
20
+ const messages = this.buildMessages(context, history);
21
+ const response = await this.client.chat.completions.create({
22
+ model: this.config.model ?? 'gpt-4o',
23
+ messages,
24
+ max_tokens: 8192,
25
+ }, { signal: this.abortController.signal });
26
+ const text = response.choices[0]?.message?.content ?? '';
27
+ return {
28
+ providerName: this.name,
29
+ success: true,
30
+ output: {
31
+ code: text,
32
+ explanation: '',
33
+ },
34
+ latencyMs: Date.now() - start,
35
+ tokenUsage: {
36
+ inputTokens: response.usage?.prompt_tokens ?? 0,
37
+ outputTokens: response.usage?.completion_tokens ?? 0,
38
+ },
39
+ };
40
+ }
41
+ catch (error) {
42
+ return {
43
+ providerName: this.name,
44
+ success: false,
45
+ error: error instanceof Error ? error.message : 'Unknown error',
46
+ latencyMs: Date.now() - start,
47
+ };
48
+ }
49
+ }
50
+ abort() {
51
+ this.abortController?.abort();
52
+ }
53
+ buildMessages(context, history) {
54
+ const messages = [
55
+ { role: 'system', content: context.prompt },
56
+ ];
57
+ for (const msg of history) {
58
+ if (msg.role === 'user' || msg.role === 'assistant') {
59
+ messages.push({ role: msg.role, content: msg.content });
60
+ }
61
+ }
62
+ messages.push({ role: 'user', content: context.userMessage });
63
+ return messages;
64
+ }
65
+ }
66
+ //# sourceMappingURL=chatgpt.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt.provider.js","sourceRoot":"","sources":["../../../src/providers/chatgpt.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { IAIProvider } from './provider.interface.js';
2
+ import type { ConversationMessage } from '../types/message.js';
3
+ import type { AIProviderResponse } from '../types/ai-response.js';
4
+ import type { AssembledContext } from '../types/context.js';
5
+ import type { ProviderConfig } from '../types/config.js';
6
+ export declare class ClaudeProvider implements IAIProvider {
7
+ private readonly config;
8
+ readonly name = "Claude";
9
+ private client;
10
+ private abortController;
11
+ constructor(config: ProviderConfig);
12
+ isAvailable(): Promise<boolean>;
13
+ execute(context: AssembledContext, history: ConversationMessage[]): Promise<AIProviderResponse>;
14
+ abort(): void;
15
+ private buildMessages;
16
+ }
17
+ //# sourceMappingURL=claude.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.provider.d.ts","sourceRoot":"","sources":["../../../src/providers/claude.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,cAAe,YAAW,WAAW;IAKpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,eAAe,CAAgC;gBAE1B,MAAM,EAAE,cAAc;IAE7C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,CACX,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IAkD9B,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,aAAa;CAkBtB"}
@@ -0,0 +1,70 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ export class ClaudeProvider {
3
+ config;
4
+ name = 'Claude';
5
+ client = null;
6
+ abortController = null;
7
+ constructor(config) {
8
+ this.config = config;
9
+ }
10
+ async isAvailable() {
11
+ return this.config.enabled && !!this.config.apiKey;
12
+ }
13
+ async execute(context, history) {
14
+ const start = Date.now();
15
+ try {
16
+ if (!this.client) {
17
+ this.client = new Anthropic({ apiKey: this.config.apiKey });
18
+ }
19
+ this.abortController = new AbortController();
20
+ const messages = this.buildMessages(context, history);
21
+ const response = await this.client.messages.create({
22
+ model: this.config.model ?? 'claude-sonnet-4-6',
23
+ max_tokens: 8192,
24
+ system: context.prompt,
25
+ messages,
26
+ }, { signal: this.abortController.signal });
27
+ const text = response.content
28
+ .filter((block) => block.type === 'text')
29
+ .map((block) => block.text)
30
+ .join('\n');
31
+ return {
32
+ providerName: this.name,
33
+ success: true,
34
+ output: {
35
+ code: text,
36
+ explanation: '',
37
+ },
38
+ latencyMs: Date.now() - start,
39
+ tokenUsage: {
40
+ inputTokens: response.usage.input_tokens,
41
+ outputTokens: response.usage.output_tokens,
42
+ },
43
+ };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ providerName: this.name,
48
+ success: false,
49
+ error: error instanceof Error ? error.message : 'Unknown error',
50
+ latencyMs: Date.now() - start,
51
+ };
52
+ }
53
+ }
54
+ abort() {
55
+ this.abortController?.abort();
56
+ }
57
+ buildMessages(context, history) {
58
+ const messages = [];
59
+ // Include conversation history
60
+ for (const msg of history) {
61
+ if (msg.role === 'user' || msg.role === 'assistant') {
62
+ messages.push({ role: msg.role, content: msg.content });
63
+ }
64
+ }
65
+ // Add current message
66
+ messages.push({ role: 'user', content: context.userMessage });
67
+ return messages;
68
+ }
69
+ }
70
+ //# sourceMappingURL=claude.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../src/providers/claude.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { IAIProvider } from './provider.interface.js';
2
+ import type { ConversationMessage } from '../types/message.js';
3
+ import type { AIProviderResponse } from '../types/ai-response.js';
4
+ import type { AssembledContext } from '../types/context.js';
5
+ import type { ProviderConfig } from '../types/config.js';
6
+ export declare class CodexProvider implements IAIProvider {
7
+ private readonly config;
8
+ readonly name = "Codex";
9
+ private client;
10
+ private abortController;
11
+ constructor(config: ProviderConfig);
12
+ isAvailable(): Promise<boolean>;
13
+ execute(context: AssembledContext, history: ConversationMessage[]): Promise<AIProviderResponse>;
14
+ abort(): void;
15
+ private buildMessages;
16
+ }
17
+ //# sourceMappingURL=codex.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.provider.d.ts","sourceRoot":"","sources":["../../../src/providers/codex.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,aAAc,YAAW,WAAW;IAKnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,eAAe,CAAgC;gBAE1B,MAAM,EAAE,cAAc;IAE7C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,CACX,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IA8C9B,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,aAAa;CAetB"}