@2amtech/hai 0.0.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 (239) hide show
  1. package/README.md +212 -0
  2. package/dist/ai/agent-info.d.ts +1 -0
  3. package/dist/ai/agent-info.js +42 -0
  4. package/dist/ai/agent-info.js.map +1 -0
  5. package/dist/ai/agents/architect.d.ts +3 -0
  6. package/dist/ai/agents/architect.js +107 -0
  7. package/dist/ai/agents/architect.js.map +1 -0
  8. package/dist/ai/agents/backend-dev.d.ts +3 -0
  9. package/dist/ai/agents/backend-dev.js +33 -0
  10. package/dist/ai/agents/backend-dev.js.map +1 -0
  11. package/dist/ai/agents/frontend-dev.d.ts +3 -0
  12. package/dist/ai/agents/frontend-dev.js +31 -0
  13. package/dist/ai/agents/frontend-dev.js.map +1 -0
  14. package/dist/ai/agents/index.d.ts +3 -0
  15. package/dist/ai/agents/index.js +17 -0
  16. package/dist/ai/agents/index.js.map +1 -0
  17. package/dist/ai/agents/refactorer.d.ts +3 -0
  18. package/dist/ai/agents/refactorer.js +38 -0
  19. package/dist/ai/agents/refactorer.js.map +1 -0
  20. package/dist/ai/agents/researcher.d.ts +3 -0
  21. package/dist/ai/agents/researcher.js +28 -0
  22. package/dist/ai/agents/researcher.js.map +1 -0
  23. package/dist/ai/agents/security-reviewer.d.ts +3 -0
  24. package/dist/ai/agents/security-reviewer.js +99 -0
  25. package/dist/ai/agents/security-reviewer.js.map +1 -0
  26. package/dist/ai/agents/types.d.ts +6 -0
  27. package/dist/ai/agents/types.js +2 -0
  28. package/dist/ai/agents/types.js.map +1 -0
  29. package/dist/ai/agents/verifier.d.ts +3 -0
  30. package/dist/ai/agents/verifier.js +28 -0
  31. package/dist/ai/agents/verifier.js.map +1 -0
  32. package/dist/ai/prompts/document.d.ts +3 -0
  33. package/dist/ai/prompts/document.js +57 -0
  34. package/dist/ai/prompts/document.js.map +1 -0
  35. package/dist/ai/prompts/implement.d.ts +3 -0
  36. package/dist/ai/prompts/implement.js +128 -0
  37. package/dist/ai/prompts/implement.js.map +1 -0
  38. package/dist/ai/prompts/index.d.ts +3 -0
  39. package/dist/ai/prompts/index.js +17 -0
  40. package/dist/ai/prompts/index.js.map +1 -0
  41. package/dist/ai/prompts/optimize-ai.d.ts +3 -0
  42. package/dist/ai/prompts/optimize-ai.js +104 -0
  43. package/dist/ai/prompts/optimize-ai.js.map +1 -0
  44. package/dist/ai/prompts/pull-specs.d.ts +3 -0
  45. package/dist/ai/prompts/pull-specs.js +10 -0
  46. package/dist/ai/prompts/pull-specs.js.map +1 -0
  47. package/dist/ai/prompts/pull-tickets.d.ts +3 -0
  48. package/dist/ai/prompts/pull-tickets.js +11 -0
  49. package/dist/ai/prompts/pull-tickets.js.map +1 -0
  50. package/dist/ai/prompts/pull.d.ts +3 -0
  51. package/dist/ai/prompts/pull.js +9 -0
  52. package/dist/ai/prompts/pull.js.map +1 -0
  53. package/dist/ai/prompts/review-changes.d.ts +3 -0
  54. package/dist/ai/prompts/review-changes.js +88 -0
  55. package/dist/ai/prompts/review-changes.js.map +1 -0
  56. package/dist/ai/prompts/types.d.ts +6 -0
  57. package/dist/ai/prompts/types.js +2 -0
  58. package/dist/ai/prompts/types.js.map +1 -0
  59. package/dist/app.d.ts +14 -0
  60. package/dist/app.js +40 -0
  61. package/dist/app.js.map +1 -0
  62. package/dist/cli.d.ts +2 -0
  63. package/dist/cli.js +79 -0
  64. package/dist/cli.js.map +1 -0
  65. package/dist/commands/get.d.ts +8 -0
  66. package/dist/commands/get.js +73 -0
  67. package/dist/commands/get.js.map +1 -0
  68. package/dist/commands/init.d.ts +3 -0
  69. package/dist/commands/init.js +113 -0
  70. package/dist/commands/init.js.map +1 -0
  71. package/dist/commands/mcp/helpers.d.ts +15 -0
  72. package/dist/commands/mcp/helpers.js +21 -0
  73. package/dist/commands/mcp/helpers.js.map +1 -0
  74. package/dist/commands/mcp/pull.d.ts +3 -0
  75. package/dist/commands/mcp/pull.js +85 -0
  76. package/dist/commands/mcp/pull.js.map +1 -0
  77. package/dist/commands/mcp/server.d.ts +2 -0
  78. package/dist/commands/mcp/server.js +80 -0
  79. package/dist/commands/mcp/server.js.map +1 -0
  80. package/dist/commands/mcp/specs.d.ts +2 -0
  81. package/dist/commands/mcp/specs.js +325 -0
  82. package/dist/commands/mcp/specs.js.map +1 -0
  83. package/dist/commands/mcp/tickets.d.ts +3 -0
  84. package/dist/commands/mcp/tickets.js +77 -0
  85. package/dist/commands/mcp/tickets.js.map +1 -0
  86. package/dist/commands/pull.d.ts +10 -0
  87. package/dist/commands/pull.js +61 -0
  88. package/dist/commands/pull.js.map +1 -0
  89. package/dist/commands/status.d.ts +2 -0
  90. package/dist/commands/status.js +102 -0
  91. package/dist/commands/status.js.map +1 -0
  92. package/dist/components/ticket-renderer.d.ts +5 -0
  93. package/dist/components/ticket-renderer.js +89 -0
  94. package/dist/components/ticket-renderer.js.map +1 -0
  95. package/dist/contexts/config-context.d.ts +17 -0
  96. package/dist/contexts/config-context.js +77 -0
  97. package/dist/contexts/config-context.js.map +1 -0
  98. package/dist/contexts/error-context.d.ts +12 -0
  99. package/dist/contexts/error-context.js +28 -0
  100. package/dist/contexts/error-context.js.map +1 -0
  101. package/dist/helpers/config.d.ts +4 -0
  102. package/dist/helpers/config.js +29 -0
  103. package/dist/helpers/config.js.map +1 -0
  104. package/dist/helpers/fs.d.ts +8 -0
  105. package/dist/helpers/fs.js +83 -0
  106. package/dist/helpers/fs.js.map +1 -0
  107. package/dist/helpers/init.d.ts +2 -0
  108. package/dist/helpers/init.js +18 -0
  109. package/dist/helpers/init.js.map +1 -0
  110. package/dist/helpers/preflight.d.ts +8 -0
  111. package/dist/helpers/preflight.js +77 -0
  112. package/dist/helpers/preflight.js.map +1 -0
  113. package/dist/helpers/pull.d.ts +9 -0
  114. package/dist/helpers/pull.js +79 -0
  115. package/dist/helpers/pull.js.map +1 -0
  116. package/dist/helpers/symlink.d.ts +9 -0
  117. package/dist/helpers/symlink.js +104 -0
  118. package/dist/helpers/symlink.js.map +1 -0
  119. package/dist/helpers/tickets.d.ts +4 -0
  120. package/dist/helpers/tickets.js +56 -0
  121. package/dist/helpers/tickets.js.map +1 -0
  122. package/dist/hooks/use-async.d.ts +6 -0
  123. package/dist/hooks/use-async.js +37 -0
  124. package/dist/hooks/use-async.js.map +1 -0
  125. package/dist/plugins/atlassian/adf-to-markdown.d.ts +11 -0
  126. package/dist/plugins/atlassian/adf-to-markdown.js +121 -0
  127. package/dist/plugins/atlassian/adf-to-markdown.js.map +1 -0
  128. package/dist/plugins/atlassian/auth-step.d.ts +10 -0
  129. package/dist/plugins/atlassian/auth-step.js +59 -0
  130. package/dist/plugins/atlassian/auth-step.js.map +1 -0
  131. package/dist/plugins/atlassian/confluence-client.d.ts +24 -0
  132. package/dist/plugins/atlassian/confluence-client.js +250 -0
  133. package/dist/plugins/atlassian/confluence-client.js.map +1 -0
  134. package/dist/plugins/atlassian/data.d.ts +18 -0
  135. package/dist/plugins/atlassian/data.js +12 -0
  136. package/dist/plugins/atlassian/data.js.map +1 -0
  137. package/dist/plugins/atlassian/index.d.ts +2 -0
  138. package/dist/plugins/atlassian/index.js +57 -0
  139. package/dist/plugins/atlassian/index.js.map +1 -0
  140. package/dist/plugins/atlassian/init-step.d.ts +11 -0
  141. package/dist/plugins/atlassian/init-step.js +54 -0
  142. package/dist/plugins/atlassian/init-step.js.map +1 -0
  143. package/dist/plugins/atlassian/jira-client.d.ts +38 -0
  144. package/dist/plugins/atlassian/jira-client.js +308 -0
  145. package/dist/plugins/atlassian/jira-client.js.map +1 -0
  146. package/dist/plugins/atlassian/specs-step.d.ts +13 -0
  147. package/dist/plugins/atlassian/specs-step.js +71 -0
  148. package/dist/plugins/atlassian/specs-step.js.map +1 -0
  149. package/dist/plugins/atlassian/tickets-step.d.ts +8 -0
  150. package/dist/plugins/atlassian/tickets-step.js +45 -0
  151. package/dist/plugins/atlassian/tickets-step.js.map +1 -0
  152. package/dist/plugins/claude-code/agents.d.ts +4 -0
  153. package/dist/plugins/claude-code/agents.js +56 -0
  154. package/dist/plugins/claude-code/agents.js.map +1 -0
  155. package/dist/plugins/claude-code/commands.d.ts +4 -0
  156. package/dist/plugins/claude-code/commands.js +54 -0
  157. package/dist/plugins/claude-code/commands.js.map +1 -0
  158. package/dist/plugins/claude-code/index.d.ts +2 -0
  159. package/dist/plugins/claude-code/index.js +57 -0
  160. package/dist/plugins/claude-code/index.js.map +1 -0
  161. package/dist/plugins/cursor/index.d.ts +2 -0
  162. package/dist/plugins/cursor/index.js +60 -0
  163. package/dist/plugins/cursor/index.js.map +1 -0
  164. package/dist/plugins/index.d.ts +1 -0
  165. package/dist/plugins/index.js +16 -0
  166. package/dist/plugins/index.js.map +1 -0
  167. package/dist/plugins/local/index.d.ts +2 -0
  168. package/dist/plugins/local/index.js +53 -0
  169. package/dist/plugins/local/index.js.map +1 -0
  170. package/dist/plugins/local/init-step.d.ts +9 -0
  171. package/dist/plugins/local/init-step.js +24 -0
  172. package/dist/plugins/local/init-step.js.map +1 -0
  173. package/dist/plugins/local/local-spec-provider.d.ts +9 -0
  174. package/dist/plugins/local/local-spec-provider.js +66 -0
  175. package/dist/plugins/local/local-spec-provider.js.map +1 -0
  176. package/dist/plugins/local/local-ticket-provider.d.ts +24 -0
  177. package/dist/plugins/local/local-ticket-provider.js +89 -0
  178. package/dist/plugins/local/local-ticket-provider.js.map +1 -0
  179. package/dist/plugins/none/index.d.ts +2 -0
  180. package/dist/plugins/none/index.js +78 -0
  181. package/dist/plugins/none/index.js.map +1 -0
  182. package/dist/plugins/other-ai/index.d.ts +2 -0
  183. package/dist/plugins/other-ai/index.js +48 -0
  184. package/dist/plugins/other-ai/index.js.map +1 -0
  185. package/dist/plugins/registry.d.ts +4 -0
  186. package/dist/plugins/registry.js +18 -0
  187. package/dist/plugins/registry.js.map +1 -0
  188. package/dist/plugins/resolve.d.ts +8 -0
  189. package/dist/plugins/resolve.js +23 -0
  190. package/dist/plugins/resolve.js.map +1 -0
  191. package/dist/plugins/types.d.ts +36 -0
  192. package/dist/plugins/types.js +2 -0
  193. package/dist/plugins/types.js.map +1 -0
  194. package/dist/plugins/vscode-copilot/agents.d.ts +4 -0
  195. package/dist/plugins/vscode-copilot/agents.js +51 -0
  196. package/dist/plugins/vscode-copilot/agents.js.map +1 -0
  197. package/dist/plugins/vscode-copilot/index.d.ts +2 -0
  198. package/dist/plugins/vscode-copilot/index.js +59 -0
  199. package/dist/plugins/vscode-copilot/index.js.map +1 -0
  200. package/dist/plugins/vscode-copilot/prompts.d.ts +4 -0
  201. package/dist/plugins/vscode-copilot/prompts.js +60 -0
  202. package/dist/plugins/vscode-copilot/prompts.js.map +1 -0
  203. package/dist/schemas/config.d.ts +24 -0
  204. package/dist/schemas/config.js +38 -0
  205. package/dist/schemas/config.js.map +1 -0
  206. package/dist/types.d.ts +84 -0
  207. package/dist/types.js +2 -0
  208. package/dist/types.js.map +1 -0
  209. package/dist/ui/confirm.d.ts +7 -0
  210. package/dist/ui/confirm.js +19 -0
  211. package/dist/ui/confirm.js.map +1 -0
  212. package/dist/ui/error-display.d.ts +6 -0
  213. package/dist/ui/error-display.js +23 -0
  214. package/dist/ui/error-display.js.map +1 -0
  215. package/dist/ui/masked-input.d.ts +9 -0
  216. package/dist/ui/masked-input.js +25 -0
  217. package/dist/ui/masked-input.js.map +1 -0
  218. package/dist/ui/multi-select.d.ts +13 -0
  219. package/dist/ui/multi-select.js +127 -0
  220. package/dist/ui/multi-select.js.map +1 -0
  221. package/dist/ui/select-input.d.ts +12 -0
  222. package/dist/ui/select-input.js +81 -0
  223. package/dist/ui/select-input.js.map +1 -0
  224. package/dist/ui/spinner.d.ts +6 -0
  225. package/dist/ui/spinner.js +18 -0
  226. package/dist/ui/spinner.js.map +1 -0
  227. package/dist/ui/text-input.d.ts +9 -0
  228. package/dist/ui/text-input.js +23 -0
  229. package/dist/ui/text-input.js.map +1 -0
  230. package/dist/wizard/passthrough-step.d.ts +6 -0
  231. package/dist/wizard/passthrough-step.js +8 -0
  232. package/dist/wizard/passthrough-step.js.map +1 -0
  233. package/dist/wizard/plugin-select-step.d.ts +10 -0
  234. package/dist/wizard/plugin-select-step.js +31 -0
  235. package/dist/wizard/plugin-select-step.js.map +1 -0
  236. package/dist/wizard/summary-step.d.ts +2 -0
  237. package/dist/wizard/summary-step.js +97 -0
  238. package/dist/wizard/summary-step.js.map +1 -0
  239. package/package.json +79 -0
@@ -0,0 +1,308 @@
1
+ import { readFile, writeFile, readdir, unlink, mkdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { Version3Client } from 'jira.js';
4
+ import { renderTicket } from '../../components/ticket-renderer.js';
5
+ import { adfToMarkdown } from './adf-to-markdown.js';
6
+ const MAX_RESULTS = 50;
7
+ const FIELDS = [
8
+ 'summary',
9
+ 'status',
10
+ 'assignee',
11
+ 'priority',
12
+ 'created',
13
+ 'updated',
14
+ 'description',
15
+ 'comment',
16
+ 'issuelinks',
17
+ 'subtasks',
18
+ 'parent',
19
+ 'attachment',
20
+ ];
21
+ export class JiraProvider {
22
+ constructor(config, projects) {
23
+ Object.defineProperty(this, "client", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: void 0
28
+ });
29
+ Object.defineProperty(this, "projects", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: void 0
34
+ });
35
+ this.client = new Version3Client({
36
+ host: config.baseUrl.replace(/\/+$/, ''),
37
+ authentication: {
38
+ basic: {
39
+ email: config.email,
40
+ apiToken: config.token,
41
+ },
42
+ },
43
+ });
44
+ this.projects = projects;
45
+ }
46
+ async fetchProjects() {
47
+ const allProjects = [];
48
+ let startAt = 0;
49
+ const maxResults = 100;
50
+ while (true) {
51
+ const data = await this.client.projects.searchProjects({
52
+ startAt,
53
+ maxResults,
54
+ });
55
+ for (const p of data.values ?? []) {
56
+ allProjects.push({ key: p.key, name: p.name });
57
+ }
58
+ if (data.isLast || startAt + maxResults >= (data.total ?? 0))
59
+ break;
60
+ startAt += maxResults;
61
+ }
62
+ return allProjects;
63
+ }
64
+ async fetchIssue(issueKey) {
65
+ const issue = await this.client.issues.getIssue({
66
+ issueIdOrKey: issueKey,
67
+ fields: FIELDS,
68
+ });
69
+ const linkedKeys = this.extractLinkedKeys(issue);
70
+ return { ticket: this.mapIssue(issue), linkedKeys };
71
+ }
72
+ async fetchWorkingTickets(projects) {
73
+ const projectClause = projects.map(p => `"${p}"`).join(', ');
74
+ return this.searchIssues(`project IN (${projectClause}) AND assignee = currentUser() AND statusCategory != "Done" ORDER BY updated DESC`);
75
+ }
76
+ async fetchDoneTickets(projects) {
77
+ const projectClause = projects.map(p => `"${p}"`).join(', ');
78
+ return this.searchIssues(`project IN (${projectClause}) AND assignee = currentUser() AND statusCategory = "Done" ORDER BY updated DESC`);
79
+ }
80
+ async searchByText(query) {
81
+ const escaped = query.replace(/"/g, '\\"');
82
+ return this.searchIssues(`text ~ "${escaped}" ORDER BY updated DESC`);
83
+ }
84
+ async sync(destPath, options) {
85
+ const dryRun = options?.dryRun ?? false;
86
+ const updateLocal = options?.updateLocal ?? false;
87
+ // Ensure project directories
88
+ for (const project of this.projects) {
89
+ await mkdir(join(destPath, project), { recursive: true });
90
+ }
91
+ const { tickets: workingTickets, linkedKeys } = await this.fetchWorkingTickets(this.projects);
92
+ // Build map of all tickets starting with working tickets
93
+ const allTickets = new Map();
94
+ const workingKeys = new Set();
95
+ for (const ticket of workingTickets) {
96
+ allTickets.set(ticket.key, ticket);
97
+ workingKeys.add(ticket.key);
98
+ }
99
+ // Recursively fetch linked issues
100
+ const visited = new Set(workingKeys);
101
+ await this.fetchLinkedRecursive(linkedKeys, visited, allTickets);
102
+ // Also follow links from working tickets' own links field
103
+ for (const ticket of workingTickets) {
104
+ const ticketLinkedKeys = ticket.links.map(l => l.key);
105
+ await this.fetchLinkedRecursive(ticketLinkedKeys, visited, allTickets);
106
+ }
107
+ const result = {
108
+ downloaded: [],
109
+ updated: [],
110
+ removed: [],
111
+ };
112
+ const localFileKeys = new Set(allTickets.keys());
113
+ for (const ticket of allTickets.values()) {
114
+ const project = JiraProvider.projectFromKey(ticket.key);
115
+ const projectDir = join(destPath, project);
116
+ await mkdir(projectDir, { recursive: true });
117
+ const filePath = join(projectDir, `${ticket.key}.md`);
118
+ const localContent = await JiraProvider.readFileContent(filePath);
119
+ if (localContent === null) {
120
+ result.downloaded.push(ticket.key);
121
+ if (!dryRun) {
122
+ await writeFile(filePath, renderTicket(ticket, { localFiles: localFileKeys }), 'utf-8');
123
+ }
124
+ continue;
125
+ }
126
+ const localDate = JiraProvider.parseUpdatedDate(localContent);
127
+ if (localDate !== null &&
128
+ !JiraProvider.isRemoteNewer(ticket.updated, localDate)) {
129
+ continue;
130
+ }
131
+ result.updated.push(ticket.key);
132
+ if (!dryRun) {
133
+ await writeFile(filePath, renderTicket(ticket, { localFiles: localFileKeys }), 'utf-8');
134
+ }
135
+ }
136
+ if (!updateLocal)
137
+ return result;
138
+ for (const project of this.projects) {
139
+ const projectPath = join(destPath, project);
140
+ const localKeys = await JiraProvider.listLocalTicketKeys(projectPath);
141
+ for (const key of localKeys) {
142
+ if (allTickets.has(key))
143
+ continue;
144
+ result.removed.push(key);
145
+ if (!dryRun) {
146
+ await unlink(join(projectPath, `${key}.md`));
147
+ }
148
+ }
149
+ }
150
+ return result;
151
+ }
152
+ async fetchLinkedRecursive(pendingKeys, visited, allTickets) {
153
+ for (const key of pendingKeys) {
154
+ if (visited.has(key))
155
+ continue;
156
+ visited.add(key);
157
+ try {
158
+ const { ticket, linkedKeys } = await this.fetchIssue(key);
159
+ allTickets.set(ticket.key, ticket);
160
+ await this.fetchLinkedRecursive(linkedKeys, visited, allTickets);
161
+ }
162
+ catch (error) {
163
+ const message = error instanceof Error ? error.message : String(error);
164
+ if (message.includes('(404)')) {
165
+ continue;
166
+ }
167
+ throw error;
168
+ }
169
+ }
170
+ }
171
+ static projectFromKey(key) {
172
+ const idx = key.lastIndexOf('-');
173
+ return idx > 0 ? key.slice(0, idx) : key;
174
+ }
175
+ static parseUpdatedDate(content) {
176
+ const match = /- \*\*Updated:\*\* (\d{4}-\d{2}-\d{2})/.exec(content);
177
+ return match ? match[1] : null;
178
+ }
179
+ static isRemoteNewer(remoteUpdated, localDate) {
180
+ const remoteDate = remoteUpdated.slice(0, 10);
181
+ return remoteDate >= localDate;
182
+ }
183
+ static async readFileContent(path) {
184
+ try {
185
+ return await readFile(path, 'utf-8');
186
+ }
187
+ catch (error) {
188
+ if (error.code === 'ENOENT')
189
+ return null;
190
+ throw error;
191
+ }
192
+ }
193
+ static async listLocalTicketKeys(dirPath) {
194
+ const keys = [];
195
+ try {
196
+ const entries = await readdir(dirPath, { withFileTypes: true });
197
+ for (const entry of entries) {
198
+ if (!entry.isFile() || !entry.name.endsWith('.md'))
199
+ continue;
200
+ keys.push(entry.name.slice(0, -3));
201
+ }
202
+ }
203
+ catch (error) {
204
+ if (error.code === 'ENOENT')
205
+ return [];
206
+ throw error;
207
+ }
208
+ return keys;
209
+ }
210
+ async searchIssues(jql) {
211
+ const allTickets = [];
212
+ const allLinkedKeys = [];
213
+ let nextPageToken;
214
+ while (true) {
215
+ const data = await this.client.issueSearch.searchForIssuesUsingJqlEnhancedSearchPost({
216
+ jql,
217
+ maxResults: MAX_RESULTS,
218
+ fields: FIELDS,
219
+ nextPageToken,
220
+ });
221
+ for (const issue of data.issues ?? []) {
222
+ allTickets.push(this.mapIssue(issue));
223
+ allLinkedKeys.push(...this.extractLinkedKeys(issue));
224
+ }
225
+ if (!data.nextPageToken)
226
+ break;
227
+ nextPageToken = data.nextPageToken;
228
+ }
229
+ return { tickets: allTickets, linkedKeys: allLinkedKeys };
230
+ }
231
+ extractLinkedKeys(issue) {
232
+ const fields = issue.fields;
233
+ const keys = [];
234
+ const issuelinks = fields['issuelinks'];
235
+ for (const link of issuelinks ?? []) {
236
+ if (link.inwardIssue)
237
+ keys.push(link.inwardIssue.key);
238
+ if (link.outwardIssue)
239
+ keys.push(link.outwardIssue.key);
240
+ }
241
+ const subtasks = fields['subtasks'];
242
+ for (const sub of subtasks ?? []) {
243
+ keys.push(sub.key);
244
+ }
245
+ const parent = fields['parent'];
246
+ if (parent) {
247
+ keys.push(parent.key);
248
+ }
249
+ return keys;
250
+ }
251
+ mapIssue(issue) {
252
+ const fields = issue.fields;
253
+ const status = fields['status'];
254
+ const assignee = fields['assignee'];
255
+ const priority = fields['priority'];
256
+ const description = fields['description'];
257
+ const comment = fields['comment'];
258
+ const issuelinks = fields['issuelinks'];
259
+ const subtasks = fields['subtasks'];
260
+ const parent = fields['parent'];
261
+ const attachment = fields['attachment'];
262
+ const links = [];
263
+ for (const link of issuelinks ?? []) {
264
+ if (link.outwardIssue) {
265
+ links.push({
266
+ key: link.outwardIssue.key,
267
+ relation: link.type.outward ?? link.type.name,
268
+ });
269
+ }
270
+ if (link.inwardIssue) {
271
+ links.push({
272
+ key: link.inwardIssue.key,
273
+ relation: link.type.inward ?? link.type.name,
274
+ });
275
+ }
276
+ }
277
+ for (const sub of subtasks ?? []) {
278
+ links.push({ key: sub.key, relation: 'subtask' });
279
+ }
280
+ if (parent) {
281
+ links.push({ key: parent.key, relation: 'parent' });
282
+ }
283
+ return {
284
+ key: issue.key,
285
+ summary: fields['summary'],
286
+ status: status.name,
287
+ statusCategory: status.statusCategory.key,
288
+ assignee: assignee?.displayName ?? null,
289
+ priority: priority.name,
290
+ created: fields['created'],
291
+ updated: fields['updated'],
292
+ description: adfToMarkdown(description),
293
+ comments: comment.comments.map(c => ({
294
+ author: c.author.displayName,
295
+ created: c.created,
296
+ body: adfToMarkdown(c.body),
297
+ })),
298
+ links,
299
+ attachments: (attachment ?? []).map(a => ({
300
+ id: a.id,
301
+ filename: a.filename,
302
+ mimeType: a.mimeType,
303
+ content: a.content,
304
+ })),
305
+ };
306
+ }
307
+ }
308
+ //# sourceMappingURL=jira-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-client.js","sourceRoot":"","sources":["../../../source/plugins/atlassian/jira-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { AtlassianAuth, AtlassianPluginData } from './data.js';
3
+ type Props = {
4
+ auth: AtlassianAuth;
5
+ onComplete: (data: AtlassianPluginData['confluence']) => void;
6
+ defaults?: {
7
+ spaces?: string[];
8
+ space?: string;
9
+ ancestor?: string;
10
+ };
11
+ };
12
+ export default function ConfluenceSpecsStep({ auth, onComplete, defaults, }: Props): React.JSX.Element;
13
+ export {};
@@ -0,0 +1,71 @@
1
+ import React, { useState } from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import MultiSelect from '../../ui/multi-select.js';
4
+ import TextInput from '../../ui/text-input.js';
5
+ import Spinner from '../../ui/spinner.js';
6
+ import ErrorDisplay from '../../ui/error-display.js';
7
+ import { useAsync } from '../../hooks/use-async.js';
8
+ import { ConfluenceProvider } from './confluence-client.js';
9
+ import { useConfigContext } from '../../contexts/config-context.js';
10
+ import Confirm from '../../ui/confirm.js';
11
+ export default function ConfluenceSpecsStep({ auth, onComplete, defaults, }) {
12
+ const [step, setStep] = useState('space');
13
+ const [spaces, setSpaces] = useState([]);
14
+ const { getPluginConfig, isEditMode } = useConfigContext();
15
+ const config = getPluginConfig('atlassian');
16
+ const [doEdit, setDoEdit] = useState(false);
17
+ if (isEditMode && !doEdit) {
18
+ return (React.createElement(Confirm, { message: `Do you want to reconfigure Confluence?`, onConfirm: confirmed => {
19
+ if (confirmed) {
20
+ setDoEdit(true);
21
+ }
22
+ else {
23
+ onComplete({
24
+ spaces: config?.confluence?.spaces || [],
25
+ ancestor: config?.confluence?.ancestor,
26
+ });
27
+ }
28
+ } }));
29
+ }
30
+ if (step === 'space') {
31
+ return (React.createElement(SpaceSelect, { auth: auth, onComplete: spaceKeys => {
32
+ setSpaces(spaceKeys);
33
+ setStep('ancestor');
34
+ } }));
35
+ }
36
+ return (React.createElement(Box, { flexDirection: "column" },
37
+ React.createElement(Text, { dimColor: true },
38
+ "Spaces: ",
39
+ spaces.join(', ')),
40
+ React.createElement(TextInput, { label: "Ancestor page title (Enter to skip)", defaultValue: defaults?.ancestor, onSubmit: value => {
41
+ onComplete({
42
+ spaces,
43
+ ancestor: value || undefined,
44
+ });
45
+ } })));
46
+ }
47
+ function SpaceSelect({ auth, onComplete, }) {
48
+ const { loading, error, result: spaces, } = useAsync(async () => {
49
+ const provider = new ConfluenceProvider(auth, []);
50
+ return provider.fetchSpaces();
51
+ });
52
+ const { getPluginConfig } = useConfigContext();
53
+ const config = getPluginConfig('atlassian');
54
+ if (loading) {
55
+ return React.createElement(Spinner, { label: "Fetching Confluence spaces..." });
56
+ }
57
+ if (error) {
58
+ return React.createElement(ErrorDisplay, { error: error });
59
+ }
60
+ if (!spaces || spaces.length === 0) {
61
+ return React.createElement(Text, { color: "yellow" }, "No spaces found.");
62
+ }
63
+ const items = spaces.map(s => ({
64
+ label: `${s.key} — ${s.name}`,
65
+ value: s.key,
66
+ }));
67
+ return (React.createElement(MultiSelect, { items: items, label: "Select Confluence spaces", initialSelected: config ? new Set(config.confluence?.spaces ?? []) : undefined, onSubmit: selected => {
68
+ onComplete(selected.map(s => s.value));
69
+ } }));
70
+ }
71
+ //# sourceMappingURL=specs-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs-step.js","sourceRoot":"","sources":["../../../source/plugins/atlassian/specs-step.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { AtlassianAuth, AtlassianPluginData } from './data.js';
3
+ type Props = {
4
+ auth: AtlassianAuth;
5
+ onComplete: (data: AtlassianPluginData['jira']) => void;
6
+ };
7
+ export default function JiraTicketsStep({ auth, onComplete }: Props): React.JSX.Element;
8
+ export {};
@@ -0,0 +1,45 @@
1
+ import React, { useState } from 'react';
2
+ import { Text } from 'ink';
3
+ import MultiSelect from '../../ui/multi-select.js';
4
+ import Spinner from '../../ui/spinner.js';
5
+ import ErrorDisplay from '../../ui/error-display.js';
6
+ import { useAsync } from '../../hooks/use-async.js';
7
+ import { JiraProvider } from './jira-client.js';
8
+ import { useConfigContext } from '../../contexts/config-context.js';
9
+ import Confirm from '../../ui/confirm.js';
10
+ export default function JiraTicketsStep({ auth, onComplete }) {
11
+ const { loading, error, result: projects, } = useAsync(async () => {
12
+ const provider = new JiraProvider(auth, []);
13
+ return provider.fetchProjects();
14
+ });
15
+ const { getPluginConfig, isEditMode } = useConfigContext();
16
+ const config = getPluginConfig('atlassian');
17
+ const [doEdit, setDoEdit] = useState(false);
18
+ if (isEditMode && !doEdit) {
19
+ return (React.createElement(Confirm, { message: `Do you want to reconfigure Jira?`, onConfirm: confirmed => {
20
+ if (confirmed) {
21
+ setDoEdit(true);
22
+ }
23
+ else {
24
+ onComplete({ projects: config?.jira?.projects || [] });
25
+ }
26
+ } }));
27
+ }
28
+ if (loading) {
29
+ return React.createElement(Spinner, { label: "Fetching Jira projects..." });
30
+ }
31
+ if (error) {
32
+ return React.createElement(ErrorDisplay, { error: error });
33
+ }
34
+ if (!projects || projects.length === 0) {
35
+ return React.createElement(Text, { color: "yellow" }, "No projects found.");
36
+ }
37
+ const items = projects.map(p => ({
38
+ label: `${p.key} — ${p.name}`,
39
+ value: p.key,
40
+ }));
41
+ return (React.createElement(MultiSelect, { items: items, label: "Select Jira projects", initialSelected: config ? new Set(config.jira?.projects) : undefined, onSubmit: selected => {
42
+ onComplete({ projects: selected.map(s => s.value) });
43
+ } }));
44
+ }
45
+ //# sourceMappingURL=tickets-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tickets-step.js","sourceRoot":"","sources":["../../../source/plugins/atlassian/tickets-step.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAC;AACzB,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,gBAAgB,EAAC,MAAM,kCAAkC,CAAC;AAElE,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAQ1C,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAC,IAAI,EAAE,UAAU,EAAQ;IAChE,MAAM,EACL,OAAO,EACP,KAAK,EACL,MAAM,EAAE,QAAQ,GAChB,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,EAAC,eAAe,EAAE,UAAU,EAAC,GAAG,gBAAgB,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,eAAe,CAAsB,WAAW,CAAC,CAAC;IAEjE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,CACN,oBAAC,OAAO,IACP,OAAO,EAAE,kCAAkC,EAC3C,SAAS,EAAE,SAAS,CAAC,EAAE;gBACtB,IAAI,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAC,CAAC,CAAC;gBACtD,CAAC;YACF,CAAC,GACA,CACF,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACb,OAAO,oBAAC,OAAO,IAAC,KAAK,EAAC,2BAA2B,GAAG,CAAC;IACtD,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,yBAA0B,CAAC;IACvD,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE;QAC7B,KAAK,EAAE,CAAC,CAAC,GAAG;KACZ,CAAC,CAAC,CAAC;IAEJ,OAAO,CACN,oBAAC,WAAW,IACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAC,sBAAsB,EAC5B,eAAe,EACd,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAEpD,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACpB,UAAU,CAAC,EAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC;QACpD,CAAC,GACA,CACF,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function getClaudeAgents(): Array<{
2
+ filename: string;
3
+ content: string;
4
+ }>;
@@ -0,0 +1,56 @@
1
+ import { AGENTS } from '../../ai/agents/index.js';
2
+ const CLAUDE_AGENT_OVERRIDES = {
3
+ architect: {
4
+ tools: 'Read, Glob, Grep, Agent(researcher), AskUserQuestion, Write, Edit',
5
+ model: 'opus',
6
+ },
7
+ 'backend-dev': {
8
+ tools: 'Read, Write, Edit, Bash, Grep, Glob, Agent(researcher)',
9
+ model: 'opus',
10
+ },
11
+ 'frontend-dev': {
12
+ tools: 'Read, Write, Edit, Bash, Grep, Glob, Agent(researcher)',
13
+ model: 'opus',
14
+ },
15
+ refactorer: {
16
+ tools: 'Read, Write, Edit, Bash, Grep, Glob',
17
+ model: 'sonnet',
18
+ },
19
+ researcher: {
20
+ tools: 'Read, Glob, Grep, Bash',
21
+ model: 'sonnet',
22
+ },
23
+ 'security-reviewer': {
24
+ tools: 'Read, Glob, Grep, Bash, AskUserQuestion',
25
+ model: 'sonnet',
26
+ },
27
+ verifier: {
28
+ tools: 'Read, Glob, Grep, Bash',
29
+ model: 'sonnet',
30
+ },
31
+ };
32
+ function buildAgentMarkdown(agent, config) {
33
+ return `---
34
+ name: ${agent.name}
35
+ description: >
36
+ ${agent.description}
37
+ tools: ${config.tools}
38
+ model: ${config.model}
39
+ ---
40
+
41
+ ${agent.body}
42
+ `;
43
+ }
44
+ export function getClaudeAgents() {
45
+ return Object.entries(AGENTS).map(([key, agent]) => {
46
+ const config = CLAUDE_AGENT_OVERRIDES[key];
47
+ if (!config) {
48
+ throw new Error(`Missing Claude agent config for: ${key}`);
49
+ }
50
+ return {
51
+ filename: `${key}.md`,
52
+ content: buildAgentMarkdown(agent, config),
53
+ };
54
+ });
55
+ }
56
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../source/plugins/claude-code/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAQhD,MAAM,sBAAsB,GAAsC;IACjE,SAAS,EAAE;QACV,KAAK,EAAE,mEAAmE;QAC1E,KAAK,EAAE,MAAM;KACb;IACD,aAAa,EAAE;QACd,KAAK,EAAE,wDAAwD;QAC/D,KAAK,EAAE,MAAM;KACb;IACD,cAAc,EAAE;QACf,KAAK,EAAE,wDAAwD;QAC/D,KAAK,EAAE,MAAM;KACb;IACD,UAAU,EAAE;QACX,KAAK,EAAE,qCAAqC;QAC5C,KAAK,EAAE,QAAQ;KACf;IACD,UAAU,EAAE;QACX,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,QAAQ;KACf;IACD,mBAAmB,EAAE;QACpB,KAAK,EAAE,yCAAyC;QAChD,KAAK,EAAE,QAAQ;KACf;IACD,QAAQ,EAAE;QACT,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,QAAQ;KACf;CACD,CAAC;AAEF,SAAS,kBAAkB,CAC1B,KAAsB,EACtB,MAAyB;IAEzB,OAAO;QACA,KAAK,CAAC,IAAI;;IAEd,KAAK,CAAC,WAAW;SACZ,MAAM,CAAC,KAAK;SACZ,MAAM,CAAC,KAAK;;;EAGnB,KAAK,CAAC,IAAI;CACX,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO;YACN,QAAQ,EAAE,GAAG,GAAG,KAAK;YACrB,OAAO,EAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;SAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function getClaudeCommands(): Array<{
2
+ filename: string;
3
+ content: string;
4
+ }>;
@@ -0,0 +1,54 @@
1
+ import { PROMPTS } from '../../ai/prompts/index.js';
2
+ const CLAUDE_COMMAND_OVERRIDES = {
3
+ 'pull-tickets': {
4
+ allowedTools: 'mcp',
5
+ model: 'sonnet',
6
+ },
7
+ 'pull-specs': {
8
+ allowedTools: 'mcp',
9
+ model: 'sonnet',
10
+ },
11
+ pull: {
12
+ allowedTools: 'mcp',
13
+ model: 'sonnet',
14
+ },
15
+ implement: {
16
+ allowedTools: 'mcp, Read, Write, Edit, Bash, Grep, Glob, Agent, TodoWrite, EnterPlanMode, ExitPlanMode, AskUserQuestion',
17
+ model: 'opus',
18
+ },
19
+ 'optimize-ai': {
20
+ allowedTools: 'Read, Write, Edit, Bash, Grep, Glob',
21
+ model: 'opus',
22
+ },
23
+ document: {
24
+ allowedTools: 'Read, Write, Bash, Grep, Glob',
25
+ model: 'sonnet',
26
+ },
27
+ 'review-changes': {
28
+ allowedTools: 'Read, Bash, Grep, Glob',
29
+ model: 'opus',
30
+ },
31
+ };
32
+ function buildCommandMarkdown(prompt, config) {
33
+ return `---
34
+ description: ${prompt.description}
35
+ allowed-tools: ${config.allowedTools}
36
+ model: ${config.model}
37
+ ---
38
+
39
+ ${prompt.body}
40
+ `;
41
+ }
42
+ export function getClaudeCommands() {
43
+ return Object.entries(PROMPTS).map(([key, prompt]) => {
44
+ const config = CLAUDE_COMMAND_OVERRIDES[key];
45
+ if (!config) {
46
+ throw new Error(`Missing Claude command config for: ${key}`);
47
+ }
48
+ return {
49
+ filename: `${key}.md`,
50
+ content: buildCommandMarkdown(prompt, config),
51
+ };
52
+ });
53
+ }
54
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../source/plugins/claude-code/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAQlD,MAAM,wBAAwB,GAAwC;IACrE,cAAc,EAAE;QACf,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,QAAQ;KACf;IACD,YAAY,EAAE;QACb,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,QAAQ;KACf;IACD,IAAI,EAAE;QACL,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,QAAQ;KACf;IACD,SAAS,EAAE;QACV,YAAY,EACX,0GAA0G;QAC3G,KAAK,EAAE,MAAM;KACb;IACD,aAAa,EAAE;QACd,YAAY,EAAE,qCAAqC;QACnD,KAAK,EAAE,MAAM;KACb;IACD,QAAQ,EAAE;QACT,YAAY,EAAE,+BAA+B;QAC7C,KAAK,EAAE,QAAQ;KACf;IACD,gBAAgB,EAAE;QACjB,YAAY,EAAE,wBAAwB;QACtC,KAAK,EAAE,MAAM;KACb;CACD,CAAC;AAEF,SAAS,oBAAoB,CAC5B,MAAwB,EACxB,MAA2B;IAE3B,OAAO;eACO,MAAM,CAAC,WAAW;iBAChB,MAAM,CAAC,YAAY;SAC3B,MAAM,CAAC,KAAK;;;EAGnB,MAAM,CAAC,IAAI;CACZ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB;IAIhC,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO;YACN,QAAQ,EAAE,GAAG,GAAG,KAAK;YACrB,OAAO,EAAE,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC;SAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { HaiPlugin } from '../types.js';
2
+ export declare const claudeCodePlugin: HaiPlugin;