@straiffi/archon 1.0.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 (124) hide show
  1. package/README.md +224 -0
  2. package/dist/cli.js +216 -0
  3. package/dist/client/assets/index-8_-boBBA.css +2 -0
  4. package/dist/client/assets/index-s_jjeqha.js +176 -0
  5. package/dist/client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  6. package/dist/client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  7. package/dist/client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  8. package/dist/client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  9. package/dist/client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  10. package/dist/client/favicon.svg +62 -0
  11. package/dist/client/icons.svg +24 -0
  12. package/dist/client/index.html +14 -0
  13. package/dist/server/db.js +764 -0
  14. package/dist/server/db.js.map +1 -0
  15. package/dist/server/index.js +5134 -0
  16. package/dist/server/index.js.map +1 -0
  17. package/dist/server/lib/agent.js +1302 -0
  18. package/dist/server/lib/agent.js.map +1 -0
  19. package/dist/server/lib/buildChains.js +2 -0
  20. package/dist/server/lib/buildChains.js.map +1 -0
  21. package/dist/server/lib/buildFlow.js +59 -0
  22. package/dist/server/lib/buildFlow.js.map +1 -0
  23. package/dist/server/lib/buildSequences.js +599 -0
  24. package/dist/server/lib/buildSequences.js.map +1 -0
  25. package/dist/server/lib/bundleActivity.js +95 -0
  26. package/dist/server/lib/bundleActivity.js.map +1 -0
  27. package/dist/server/lib/bundlePullRequests.js +126 -0
  28. package/dist/server/lib/bundlePullRequests.js.map +1 -0
  29. package/dist/server/lib/chatMessages.js +60 -0
  30. package/dist/server/lib/chatMessages.js.map +1 -0
  31. package/dist/server/lib/chatTargets.js +123 -0
  32. package/dist/server/lib/chatTargets.js.map +1 -0
  33. package/dist/server/lib/chatTicketProposals.js +180 -0
  34. package/dist/server/lib/chatTicketProposals.js.map +1 -0
  35. package/dist/server/lib/chats.js +279 -0
  36. package/dist/server/lib/chats.js.map +1 -0
  37. package/dist/server/lib/config.js +3 -0
  38. package/dist/server/lib/config.js.map +1 -0
  39. package/dist/server/lib/cors.js +30 -0
  40. package/dist/server/lib/cors.js.map +1 -0
  41. package/dist/server/lib/directoryPicker.js +174 -0
  42. package/dist/server/lib/directoryPicker.js.map +1 -0
  43. package/dist/server/lib/git.js +1284 -0
  44. package/dist/server/lib/git.js.map +1 -0
  45. package/dist/server/lib/integrations/github.js +511 -0
  46. package/dist/server/lib/integrations/github.js.map +1 -0
  47. package/dist/server/lib/integrations/index.js +162 -0
  48. package/dist/server/lib/integrations/index.js.map +1 -0
  49. package/dist/server/lib/integrations/jira.js +283 -0
  50. package/dist/server/lib/integrations/jira.js.map +1 -0
  51. package/dist/server/lib/integrations/planning.js +27 -0
  52. package/dist/server/lib/integrations/planning.js.map +1 -0
  53. package/dist/server/lib/integrations/types.js +2 -0
  54. package/dist/server/lib/integrations/types.js.map +1 -0
  55. package/dist/server/lib/lightweightPrompt.js +88 -0
  56. package/dist/server/lib/lightweightPrompt.js.map +1 -0
  57. package/dist/server/lib/models.js +219 -0
  58. package/dist/server/lib/models.js.map +1 -0
  59. package/dist/server/lib/preview.js +377 -0
  60. package/dist/server/lib/preview.js.map +1 -0
  61. package/dist/server/lib/previewProxy.js +659 -0
  62. package/dist/server/lib/previewProxy.js.map +1 -0
  63. package/dist/server/lib/projectAutoConfig.js +682 -0
  64. package/dist/server/lib/projectAutoConfig.js.map +1 -0
  65. package/dist/server/lib/projectFileSuggestions.js +133 -0
  66. package/dist/server/lib/projectFileSuggestions.js.map +1 -0
  67. package/dist/server/lib/projectMemory.js +1519 -0
  68. package/dist/server/lib/projectMemory.js.map +1 -0
  69. package/dist/server/lib/projectMemoryPrompt.js +390 -0
  70. package/dist/server/lib/projectMemoryPrompt.js.map +1 -0
  71. package/dist/server/lib/projectMemoryScan.js +681 -0
  72. package/dist/server/lib/projectMemoryScan.js.map +1 -0
  73. package/dist/server/lib/projectMemorySuggestions.js +166 -0
  74. package/dist/server/lib/projectMemorySuggestions.js.map +1 -0
  75. package/dist/server/lib/projectMemoryTransfer.js +958 -0
  76. package/dist/server/lib/projectMemoryTransfer.js.map +1 -0
  77. package/dist/server/lib/projects.js +569 -0
  78. package/dist/server/lib/projects.js.map +1 -0
  79. package/dist/server/lib/promptSkills.js +28 -0
  80. package/dist/server/lib/promptSkills.js.map +1 -0
  81. package/dist/server/lib/queue.js +15 -0
  82. package/dist/server/lib/queue.js.map +1 -0
  83. package/dist/server/lib/reviewFindings.js +390 -0
  84. package/dist/server/lib/reviewFindings.js.map +1 -0
  85. package/dist/server/lib/run.js +416 -0
  86. package/dist/server/lib/run.js.map +1 -0
  87. package/dist/server/lib/runtimePaths.js +93 -0
  88. package/dist/server/lib/runtimePaths.js.map +1 -0
  89. package/dist/server/lib/shell.js +27 -0
  90. package/dist/server/lib/shell.js.map +1 -0
  91. package/dist/server/lib/skills.js +124 -0
  92. package/dist/server/lib/skills.js.map +1 -0
  93. package/dist/server/lib/startDev.js +18 -0
  94. package/dist/server/lib/startDev.js.map +1 -0
  95. package/dist/server/lib/staticClient.js +80 -0
  96. package/dist/server/lib/staticClient.js.map +1 -0
  97. package/dist/server/lib/terminal.js +366 -0
  98. package/dist/server/lib/terminal.js.map +1 -0
  99. package/dist/server/lib/ticketDependencies.js +174 -0
  100. package/dist/server/lib/ticketDependencies.js.map +1 -0
  101. package/dist/server/lib/ticketMessages.js +65 -0
  102. package/dist/server/lib/ticketMessages.js.map +1 -0
  103. package/dist/server/lib/ticketOpenQuestions.js +128 -0
  104. package/dist/server/lib/ticketOpenQuestions.js.map +1 -0
  105. package/dist/server/lib/ticketUndo.js +549 -0
  106. package/dist/server/lib/ticketUndo.js.map +1 -0
  107. package/dist/server/lib/tickets.js +981 -0
  108. package/dist/server/lib/tickets.js.map +1 -0
  109. package/dist/server/lib/types.js +2 -0
  110. package/dist/server/lib/types.js.map +1 -0
  111. package/dist/server/package.json +3 -0
  112. package/dist/server/workers/build.js +229 -0
  113. package/dist/server/workers/build.js.map +1 -0
  114. package/dist/server/workers/chat.js +190 -0
  115. package/dist/server/workers/chat.js.map +1 -0
  116. package/dist/server/workers/followUp.js +204 -0
  117. package/dist/server/workers/followUp.js.map +1 -0
  118. package/dist/server/workers/plan.js +1130 -0
  119. package/dist/server/workers/plan.js.map +1 -0
  120. package/dist/server/workers/planFollowUp.js +360 -0
  121. package/dist/server/workers/planFollowUp.js.map +1 -0
  122. package/dist/server/workers/review.js +167 -0
  123. package/dist/server/workers/review.js.map +1 -0
  124. package/package.json +40 -0
@@ -0,0 +1,162 @@
1
+ import { randomUUID } from 'crypto';
2
+ import db from '../../db.js';
3
+ const normalizeIncludedFieldNames = (value) => {
4
+ if (!Array.isArray(value)) {
5
+ return [];
6
+ }
7
+ return value
8
+ .filter((entry) => typeof entry === 'string')
9
+ .map(entry => entry.trim())
10
+ .filter(Boolean)
11
+ .filter((entry, index, values) => values.indexOf(entry) === index);
12
+ };
13
+ const parseJiraConnectionConfig = (value) => {
14
+ if (!value) {
15
+ return null;
16
+ }
17
+ try {
18
+ const parsed = JSON.parse(value);
19
+ if (parsed.connection_mode !== 'direct'
20
+ || typeof parsed.base_url !== 'string'
21
+ || typeof parsed.email !== 'string'
22
+ || typeof parsed.api_token !== 'string') {
23
+ return null;
24
+ }
25
+ return {
26
+ connection_mode: 'direct',
27
+ base_url: parsed.base_url,
28
+ email: parsed.email,
29
+ api_token: parsed.api_token,
30
+ included_field_names: normalizeIncludedFieldNames(parsed.included_field_names),
31
+ };
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ };
37
+ const parseGitHubConnectionConfig = (value) => {
38
+ if (!value) {
39
+ return null;
40
+ }
41
+ try {
42
+ const parsed = JSON.parse(value);
43
+ const defaultBaseBranch = typeof parsed.default_base_branch === 'string' && parsed.default_base_branch.trim()
44
+ ? parsed.default_base_branch.trim()
45
+ : null;
46
+ if (parsed.host !== 'github.com'
47
+ || typeof parsed.repo_owner !== 'string'
48
+ || typeof parsed.repo_name !== 'string'
49
+ || (parsed.default_base_branch !== null && typeof parsed.default_base_branch !== 'string' && parsed.default_base_branch !== undefined)) {
50
+ return null;
51
+ }
52
+ if (parsed.connection_mode === 'direct') {
53
+ if (typeof parsed.api_token !== 'string') {
54
+ return null;
55
+ }
56
+ return {
57
+ connection_mode: 'direct',
58
+ host: 'github.com',
59
+ api_token: parsed.api_token,
60
+ repo_owner: parsed.repo_owner,
61
+ repo_name: parsed.repo_name,
62
+ default_base_branch: defaultBaseBranch,
63
+ };
64
+ }
65
+ if (parsed.connection_mode === 'gh') {
66
+ return {
67
+ connection_mode: 'gh',
68
+ host: 'github.com',
69
+ repo_owner: parsed.repo_owner,
70
+ repo_name: parsed.repo_name,
71
+ default_base_branch: defaultBaseBranch,
72
+ };
73
+ }
74
+ return null;
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ };
80
+ const toPublicGitHubConfig = (config) => {
81
+ if (!config) {
82
+ return null;
83
+ }
84
+ if (config.connection_mode === 'gh') {
85
+ return {
86
+ connection_mode: 'gh',
87
+ host: 'github.com',
88
+ repo_owner: config.repo_owner,
89
+ repo_name: config.repo_name,
90
+ default_base_branch: config.default_base_branch,
91
+ };
92
+ }
93
+ return {
94
+ connection_mode: 'direct',
95
+ host: 'github.com',
96
+ repo_owner: config.repo_owner,
97
+ repo_name: config.repo_name,
98
+ default_base_branch: config.default_base_branch,
99
+ };
100
+ };
101
+ const toPublicJiraConfig = (config) => {
102
+ if (!config) {
103
+ return null;
104
+ }
105
+ return {
106
+ connection_mode: config.connection_mode,
107
+ base_url: config.base_url,
108
+ email: config.email,
109
+ included_field_names: config.included_field_names,
110
+ };
111
+ };
112
+ const serializeIntegrationConnection = (row) => {
113
+ if (!row) {
114
+ return null;
115
+ }
116
+ return {
117
+ id: row.id,
118
+ provider: row.provider,
119
+ project_id: row.project_id,
120
+ status: row.status,
121
+ config: row.provider === 'jira'
122
+ ? toPublicJiraConfig(parseJiraConnectionConfig(row.config_json))
123
+ : toPublicGitHubConfig(parseGitHubConnectionConfig(row.config_json)),
124
+ created_at: row.created_at,
125
+ updated_at: row.updated_at,
126
+ };
127
+ };
128
+ export const listIntegrationConnections = (projectId) => {
129
+ const rows = db.prepare('SELECT * FROM integration_connections WHERE project_id = ? ORDER BY provider ASC, updated_at DESC').all(projectId);
130
+ return rows
131
+ .map(row => serializeIntegrationConnection(row))
132
+ .filter((connection) => connection !== null);
133
+ };
134
+ export const getIntegrationConnectionRecord = (provider, projectId) => {
135
+ const row = db.prepare('SELECT * FROM integration_connections WHERE provider = ? AND project_id = ?').get(provider, projectId);
136
+ return row ?? null;
137
+ };
138
+ export const getJiraConnectionConfig = (projectId) => {
139
+ const row = getIntegrationConnectionRecord('jira', projectId);
140
+ return parseJiraConnectionConfig(row?.config_json);
141
+ };
142
+ export const getGitHubConnectionConfig = (projectId) => {
143
+ const row = getIntegrationConnectionRecord('github', projectId);
144
+ return parseGitHubConnectionConfig(row?.config_json);
145
+ };
146
+ export const upsertIntegrationConnection = ({ provider, projectId, status, config, }) => {
147
+ const existing = getIntegrationConnectionRecord(provider, projectId);
148
+ const id = existing?.id ?? randomUUID();
149
+ db.prepare(`
150
+ INSERT INTO integration_connections (id, provider, project_id, status, config_json)
151
+ VALUES (?, ?, ?, ?, ?)
152
+ ON CONFLICT(provider, project_id) DO UPDATE SET
153
+ status = excluded.status,
154
+ config_json = excluded.config_json,
155
+ updated_at = CURRENT_TIMESTAMP
156
+ `).run(id, provider, projectId, status, config ? JSON.stringify(config) : null);
157
+ return serializeIntegrationConnection(getIntegrationConnectionRecord(provider, projectId));
158
+ };
159
+ export const deleteIntegrationConnection = (provider, projectId) => {
160
+ db.prepare('DELETE FROM integration_connections WHERE provider = ? AND project_id = ?').run(provider, projectId);
161
+ };
162
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/lib/integrations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,283 @@
1
+ const ISSUE_KEY_RE = /^[A-Z][A-Z0-9]+-\d+$/i;
2
+ const JIRA_ISSUE_URL_RE = /^https?:\/\/\S+\/browse\/[A-Z][A-Z0-9]+-\d+(?:[/?#].*)?$/i;
3
+ const PLAN_JIRA_COMMAND_RE = /^plan\s+(.+)$/i;
4
+ export class JiraApiError extends Error {
5
+ status;
6
+ publicMessage;
7
+ constructor({ status, publicMessage, causeMessage }) {
8
+ super(causeMessage ?? publicMessage);
9
+ this.name = 'JiraApiError';
10
+ this.status = status;
11
+ this.publicMessage = publicMessage;
12
+ }
13
+ }
14
+ const normalizeBaseUrl = (value) => value.trim().replace(/\/+$/, '');
15
+ const buildIssueUrl = (baseUrl, issueKey) => `${normalizeBaseUrl(baseUrl)}/browse/${issueKey}`;
16
+ const getAuthHeader = (config) => {
17
+ return `Basic ${Buffer.from(`${config.email}:${config.api_token}`).toString('base64')}`;
18
+ };
19
+ const jiraTextFromNode = (node, depth = 0) => {
20
+ if (!node || typeof node !== 'object') {
21
+ return '';
22
+ }
23
+ const typedNode = node;
24
+ const type = typeof typedNode.type === 'string' ? typedNode.type : '';
25
+ const text = typeof typedNode.text === 'string' ? typedNode.text : '';
26
+ const content = Array.isArray(typedNode.content) ? typedNode.content : [];
27
+ const childText = content.map(child => jiraTextFromNode(child, depth)).join('');
28
+ if (type === 'text') {
29
+ return text;
30
+ }
31
+ if (type === 'hardBreak') {
32
+ return '\n';
33
+ }
34
+ if (type === 'paragraph') {
35
+ return `${childText.trimEnd()}\n\n`;
36
+ }
37
+ if (type === 'heading') {
38
+ const level = typeof typedNode.attrs?.level === 'number' ? typedNode.attrs.level : 2;
39
+ return `${'#'.repeat(Math.max(1, Math.min(6, level)))} ${childText.trim()}\n\n`;
40
+ }
41
+ if (type === 'bulletList' || type === 'orderedList') {
42
+ const lines = content
43
+ .map((child, index) => {
44
+ const prefix = type === 'orderedList' ? `${index + 1}. ` : '- ';
45
+ const childValue = jiraTextFromNode(child, depth + 1).trim();
46
+ return childValue ? `${prefix}${childValue}` : '';
47
+ })
48
+ .filter(Boolean)
49
+ .join('\n');
50
+ return lines ? `${lines}\n\n` : '';
51
+ }
52
+ if (type === 'listItem') {
53
+ return content.map(child => jiraTextFromNode(child, depth + 1).trim()).filter(Boolean).join(' ');
54
+ }
55
+ if (type === 'codeBlock') {
56
+ return childText.trim() ? `\`\`\`\n${childText.trimEnd()}\n\`\`\`\n\n` : '';
57
+ }
58
+ if (type === 'blockquote') {
59
+ const quoted = childText
60
+ .trim()
61
+ .split(/\r?\n/)
62
+ .filter(Boolean)
63
+ .map(line => `> ${line}`)
64
+ .join('\n');
65
+ return quoted ? `${quoted}\n\n` : '';
66
+ }
67
+ if (type === 'rule') {
68
+ return '\n---\n\n';
69
+ }
70
+ if (type === 'emoji') {
71
+ return '';
72
+ }
73
+ if (type === 'doc' || type === 'panel') {
74
+ return childText;
75
+ }
76
+ if (childText) {
77
+ return childText;
78
+ }
79
+ return depth === 0 && text ? text : '';
80
+ };
81
+ const normalizeJiraDescription = (value) => {
82
+ if (typeof value === 'string') {
83
+ return value.trim();
84
+ }
85
+ const rendered = jiraTextFromNode(value).trim();
86
+ return rendered;
87
+ };
88
+ const normalizeFieldLabel = (value) => value.trim().replace(/\s+/g, ' ').toLowerCase();
89
+ const normalizeJiraFieldValue = (value) => {
90
+ if (typeof value === 'string') {
91
+ return value.trim();
92
+ }
93
+ if (typeof value === 'number' || typeof value === 'boolean') {
94
+ return String(value);
95
+ }
96
+ if (Array.isArray(value)) {
97
+ const parts = value
98
+ .map(entry => normalizeJiraFieldValue(entry))
99
+ .filter(Boolean);
100
+ return parts.join('\n').trim();
101
+ }
102
+ if (!value || typeof value !== 'object') {
103
+ return '';
104
+ }
105
+ const maybeNamedValue = value;
106
+ if (typeof maybeNamedValue.value === 'string' && maybeNamedValue.value.trim()) {
107
+ return maybeNamedValue.value.trim();
108
+ }
109
+ if (typeof maybeNamedValue.name === 'string' && maybeNamedValue.name.trim()) {
110
+ return maybeNamedValue.name.trim();
111
+ }
112
+ if (typeof maybeNamedValue.displayName === 'string' && maybeNamedValue.displayName.trim()) {
113
+ return maybeNamedValue.displayName.trim();
114
+ }
115
+ return normalizeJiraDescription(value);
116
+ };
117
+ const getAllowlistedFieldDefinitions = async (config) => {
118
+ if (config.included_field_names.length === 0) {
119
+ return [];
120
+ }
121
+ const definitions = await requestJira(config, '/rest/api/3/field');
122
+ const wantedNames = new Set(config.included_field_names.map(normalizeFieldLabel));
123
+ return definitions
124
+ .map(definition => ({
125
+ id: typeof definition.id === 'string' ? definition.id.trim() : '',
126
+ name: typeof definition.name === 'string' ? definition.name.trim() : '',
127
+ }))
128
+ .filter(definition => definition.id.startsWith('customfield_') && definition.name.length > 0)
129
+ .filter(definition => wantedNames.has(normalizeFieldLabel(definition.name)));
130
+ };
131
+ const isHumanJiraCommentAuthor = (author) => {
132
+ if (!author) {
133
+ return false;
134
+ }
135
+ const accountType = author.accountType?.trim().toLowerCase();
136
+ if (accountType === 'app') {
137
+ return false;
138
+ }
139
+ return author.active !== false;
140
+ };
141
+ const formatJiraTimestamp = (value) => {
142
+ if (!value) {
143
+ return 'Unknown time';
144
+ }
145
+ const parsed = new Date(value);
146
+ if (Number.isNaN(parsed.getTime())) {
147
+ return value;
148
+ }
149
+ return parsed.toISOString().slice(0, 16).replace('T', ' ');
150
+ };
151
+ const normalizeJiraComments = (comments) => {
152
+ const humanComments = (comments ?? [])
153
+ .filter(comment => isHumanJiraCommentAuthor(comment.author))
154
+ .map(comment => {
155
+ const body = normalizeJiraDescription(comment.body);
156
+ return {
157
+ createdAt: formatJiraTimestamp(comment.created),
158
+ body,
159
+ };
160
+ })
161
+ .filter(comment => comment.body.length > 0);
162
+ return humanComments.slice(-10);
163
+ };
164
+ const normalizeIssueReference = (value) => {
165
+ const trimmed = value.trim();
166
+ if (!trimmed) {
167
+ return '';
168
+ }
169
+ const issueKeyMatch = trimmed.match(/([A-Z][A-Z0-9]+-\d+)/i);
170
+ return issueKeyMatch?.[1]?.toUpperCase() ?? trimmed;
171
+ };
172
+ export const isJiraIssueReference = (value) => {
173
+ const trimmed = value.trim();
174
+ return ISSUE_KEY_RE.test(trimmed) || JIRA_ISSUE_URL_RE.test(trimmed);
175
+ };
176
+ export const extractPlanningJiraReference = (value) => {
177
+ const trimmed = value.trim();
178
+ const matchedCommand = trimmed.match(PLAN_JIRA_COMMAND_RE);
179
+ if (!matchedCommand) {
180
+ return null;
181
+ }
182
+ const reference = matchedCommand[1]?.trim() ?? '';
183
+ return isJiraIssueReference(reference) ? reference : null;
184
+ };
185
+ const requestJira = async (config, path) => {
186
+ const response = await fetch(`${normalizeBaseUrl(config.base_url)}${path}`, {
187
+ headers: {
188
+ Accept: 'application/json',
189
+ Authorization: getAuthHeader(config),
190
+ },
191
+ });
192
+ if (!response.ok) {
193
+ if (response.status === 401 || response.status === 403) {
194
+ throw new JiraApiError({
195
+ status: 401,
196
+ publicMessage: 'Jira rejected the credentials for this connection.',
197
+ });
198
+ }
199
+ if (response.status === 404) {
200
+ throw new JiraApiError({
201
+ status: 404,
202
+ publicMessage: 'Jira issue not found.',
203
+ });
204
+ }
205
+ throw new JiraApiError({
206
+ status: 502,
207
+ publicMessage: 'Jira returned an unexpected response.',
208
+ causeMessage: `Jira request failed with status ${response.status}`,
209
+ });
210
+ }
211
+ return await response.json();
212
+ };
213
+ export const validateJiraConnection = async (config) => {
214
+ await requestJira(config, '/rest/api/3/myself');
215
+ };
216
+ export const importJiraIssue = async (config, issueReference) => {
217
+ const normalizedReference = normalizeIssueReference(issueReference);
218
+ if (!normalizedReference) {
219
+ throw new JiraApiError({
220
+ status: 400,
221
+ publicMessage: 'issue must be a Jira issue key or URL',
222
+ });
223
+ }
224
+ const allowlistedFields = await getAllowlistedFieldDefinitions(config);
225
+ const requestedFieldIds = [
226
+ 'summary',
227
+ 'description',
228
+ 'issuetype',
229
+ 'status',
230
+ 'assignee',
231
+ 'comment',
232
+ ...allowlistedFields.map(field => field.id),
233
+ ];
234
+ const issue = await requestJira(config, `/rest/api/3/issue/${encodeURIComponent(normalizedReference)}?fields=${encodeURIComponent(requestedFieldIds.join(','))}`);
235
+ const issueId = typeof issue.id === 'string' ? issue.id : '';
236
+ const issueKey = typeof issue.key === 'string' ? issue.key : normalizedReference;
237
+ const summary = issue.fields?.summary?.trim() ?? '';
238
+ const issueType = issue.fields?.issuetype?.name?.trim() ?? null;
239
+ const status = issue.fields?.status?.name?.trim() ?? null;
240
+ const assignee = issue.fields?.assignee?.displayName?.trim()
241
+ ?? issue.fields?.assignee?.emailAddress?.trim()
242
+ ?? null;
243
+ const description = normalizeJiraDescription(issue.fields?.description);
244
+ const comments = normalizeJiraComments(issue.fields?.comment?.comments);
245
+ const issueUrl = buildIssueUrl(config.base_url, issueKey);
246
+ const additionalFieldSections = allowlistedFields
247
+ .map(field => {
248
+ const renderedValue = normalizeJiraFieldValue(issue.fields?.[field.id]);
249
+ if (!renderedValue) {
250
+ return '';
251
+ }
252
+ return `## ${field.name}\n${renderedValue}`;
253
+ })
254
+ .filter(Boolean);
255
+ const commentsSection = comments.length > 0
256
+ ? `## Comments\n${comments
257
+ .map(comment => `### ${comment.createdAt}\n${comment.body}`)
258
+ .join('\n\n')}`
259
+ : '';
260
+ const descriptionSections = [
261
+ summary ? `## Summary\n${summary}` : '',
262
+ description ? `## Description\n${description}` : '',
263
+ ...additionalFieldSections,
264
+ commentsSection,
265
+ ].filter(section => section && section.trim().length > 0);
266
+ return {
267
+ title: issueKey,
268
+ description: descriptionSections.join('\n\n'),
269
+ external_source: {
270
+ provider: 'jira',
271
+ external_id: issueId || issueKey,
272
+ external_key: issueKey,
273
+ external_url: issueUrl,
274
+ metadata: {
275
+ summary,
276
+ issue_type: issueType,
277
+ status,
278
+ assignee,
279
+ },
280
+ },
281
+ };
282
+ };
283
+ //# sourceMappingURL=jira.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../../server/lib/integrations/jira.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { getJiraConnectionConfig } from './index.js';
2
+ import { extractPlanningJiraReference, importJiraIssue } from './jira.js';
3
+ export class JiraPlanningReferenceError extends Error {
4
+ status;
5
+ constructor(status, message) {
6
+ super(message);
7
+ this.name = 'JiraPlanningReferenceError';
8
+ this.status = status;
9
+ }
10
+ }
11
+ export const resolveJiraPlanningDescription = async (projectId, description) => {
12
+ const jiraReference = extractPlanningJiraReference(description);
13
+ if (!jiraReference) {
14
+ return description;
15
+ }
16
+ if (!projectId) {
17
+ throw new JiraPlanningReferenceError(400, 'project_id is required when planning from Jira.');
18
+ }
19
+ const jiraConfig = getJiraConnectionConfig(projectId);
20
+ if (!jiraConfig) {
21
+ throw new JiraPlanningReferenceError(400, 'Jira is not connected for this project.');
22
+ }
23
+ console.info(`[integrations] jira planning resolve project=${projectId} issue=${jiraReference}`);
24
+ const draft = await importJiraIssue(jiraConfig, jiraReference);
25
+ return draft.description;
26
+ };
27
+ //# sourceMappingURL=planning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning.js","sourceRoot":"","sources":["../../../../server/lib/integrations/planning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEzE,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,MAAM,CAAQ;IAEd,YAAY,MAAc,EAAE,OAAe;QACzC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAA;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAE,SAAoC,EAAE,WAAmB,EAAE,EAAE;IAChH,MAAM,aAAa,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAA;IAC/D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,0BAA0B,CAAC,GAAG,EAAE,iDAAiD,CAAC,CAAA;IAC9F,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,0BAA0B,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAA;IACtF,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,gDAAgD,SAAS,UAAU,aAAa,EAAE,CAAC,CAAA;IAChG,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IAC9D,OAAO,KAAK,CAAC,WAAW,CAAA;AAC1B,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../server/lib/integrations/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,88 @@
1
+ import { spawn } from 'child_process';
2
+ const parseOpencodeEvent = (line) => {
3
+ const trimmedLine = line.trim();
4
+ if (!trimmedLine) {
5
+ return null;
6
+ }
7
+ try {
8
+ return JSON.parse(trimmedLine);
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ };
14
+ const stripSystemReminderBlocks = (output) => {
15
+ return output.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/g, '').trim();
16
+ };
17
+ const extractOpencodeOutput = (output) => {
18
+ const trimmedOutput = output.trim();
19
+ if (!trimmedOutput) {
20
+ return trimmedOutput;
21
+ }
22
+ const finalParts = [];
23
+ const textParts = [];
24
+ let sawStructuredOutput = false;
25
+ for (const line of trimmedOutput.split('\n')) {
26
+ const event = parseOpencodeEvent(line);
27
+ if (!event) {
28
+ continue;
29
+ }
30
+ sawStructuredOutput = true;
31
+ if (event.type === 'text' && event.part?.type === 'text' && event.part.text) {
32
+ textParts.push(event.part.text);
33
+ }
34
+ if (event.type === 'text'
35
+ && event.part?.type === 'text'
36
+ && event.part.metadata?.openai?.phase === 'final_answer'
37
+ && event.part.text) {
38
+ finalParts.push(event.part.text);
39
+ }
40
+ }
41
+ if (finalParts.length > 0) {
42
+ return finalParts.join('');
43
+ }
44
+ if (sawStructuredOutput) {
45
+ return textParts.length > 0 ? stripSystemReminderBlocks(textParts.join('')) : '';
46
+ }
47
+ return stripSystemReminderBlocks(trimmedOutput);
48
+ };
49
+ export const runLightweightPrompt = ({ tool, model, variant }, prompt, cwd) => {
50
+ const resolvedModel = typeof model === 'string' && model.trim() !== '' ? model.trim() : null;
51
+ const resolvedVariant = typeof variant === 'string' && variant.trim() !== '' ? variant.trim() : null;
52
+ const [cmd, args] = tool === 'claude'
53
+ ? ['claude', ['--dangerously-skip-permissions', '--print', prompt]]
54
+ : ['opencode', ['run', '--format', 'json', ...(resolvedModel ? ['--model', resolvedModel] : []), ...(resolvedVariant ? ['--variant', resolvedVariant] : []), prompt]];
55
+ return new Promise((resolve, reject) => {
56
+ const child = spawn(cmd, args, {
57
+ stdio: ['ignore', 'pipe', 'pipe'],
58
+ env: process.env,
59
+ cwd,
60
+ });
61
+ const stdoutChunks = [];
62
+ const stderrChunks = [];
63
+ child.stdout?.on('data', (chunk) => stdoutChunks.push(chunk));
64
+ child.stderr?.on('data', (chunk) => stderrChunks.push(chunk));
65
+ child.on('close', code => {
66
+ const rawOutput = Buffer.concat(stdoutChunks).toString();
67
+ const output = tool === 'opencode' ? extractOpencodeOutput(rawOutput).trim() : rawOutput.trim();
68
+ const errorOutput = Buffer.concat(stderrChunks).toString().trim();
69
+ if (code === 0 && output) {
70
+ resolve(output);
71
+ return;
72
+ }
73
+ const fallbackError = code === 0
74
+ ? 'The helper model did not return a usable result.'
75
+ : `Process exited with code ${code}`;
76
+ reject(new Error(output || errorOutput || fallbackError));
77
+ });
78
+ child.on('error', error => {
79
+ const errorCode = error.code;
80
+ if (errorCode === 'ENOENT') {
81
+ reject(new Error(`${tool === 'claude' ? 'Claude' : 'OpenCode'} CLI is not available.`));
82
+ return;
83
+ }
84
+ reject(error instanceof Error ? error : new Error(String(error)));
85
+ });
86
+ });
87
+ };
88
+ //# sourceMappingURL=lightweightPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightweightPrompt.js","sourceRoot":"","sources":["../../../server/lib/lightweightPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAsBrC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAwB,CAAA;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,yBAAyB,GAAG,CAAC,MAAc,EAAE,EAAE;IACnD,OAAO,MAAM,CAAC,OAAO,CAAC,+CAA+C,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AACnF,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,EAAE;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IACnC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAE/B,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAQ;QACV,CAAC;QAED,mBAAmB,GAAG,IAAI,CAAA;QAE1B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5E,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC;QAED,IACE,KAAK,CAAC,IAAI,KAAK,MAAM;eAClB,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM;eAC3B,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,KAAK,cAAc;eACrD,KAAK,CAAC,IAAI,CAAC,IAAI,EAClB,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,CAAC;IAED,OAAO,yBAAyB,CAAC,aAAa,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAa,EAAE,MAAc,EAAE,GAAW,EAAmB,EAAE;IACxH,MAAM,aAAa,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5F,MAAM,eAAe,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACpG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAuB,IAAI,KAAK,QAAQ;QACvD,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,gCAAgC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAEvK,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG;SACJ,CAAC,CAAA;QAEF,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,MAAM,YAAY,GAAa,EAAE,CAAA;QAEjC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACrE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAErE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACvB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAA;YACxD,MAAM,MAAM,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;YAC/F,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;YAEjE,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC;gBAC9B,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,4BAA4B,IAAI,EAAE,CAAA;YACtC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,WAAW,IAAI,aAAa,CAAC,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACxB,MAAM,SAAS,GAAI,KAA+B,CAAC,IAAI,CAAA;YACvD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,wBAAwB,CAAC,CAAC,CAAA;gBACvF,OAAM;YACR,CAAC;YAED,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}