@stoneforge/quarry 1.10.2 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/cli/commands/admin.d.ts.map +1 -1
- package/dist/cli/commands/admin.js +313 -3
- package/dist/cli/commands/admin.js.map +1 -1
- package/dist/cli/commands/auto-link-helper.d.ts +33 -0
- package/dist/cli/commands/auto-link-helper.d.ts.map +1 -0
- package/dist/cli/commands/auto-link-helper.js +73 -0
- package/dist/cli/commands/auto-link-helper.js.map +1 -0
- package/dist/cli/commands/crud.d.ts +1 -0
- package/dist/cli/commands/crud.d.ts.map +1 -1
- package/dist/cli/commands/crud.js +44 -5
- package/dist/cli/commands/crud.js.map +1 -1
- package/dist/cli/commands/docs.d.ts +1 -0
- package/dist/cli/commands/docs.d.ts.map +1 -1
- package/dist/cli/commands/docs.js +81 -1
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/external-sync.d.ts +17 -0
- package/dist/cli/commands/external-sync.d.ts.map +1 -0
- package/dist/cli/commands/external-sync.js +1647 -0
- package/dist/cli/commands/external-sync.js.map +1 -0
- package/dist/cli/commands/log.d.ts +18 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +282 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/metrics.d.ts +9 -0
- package/dist/cli/commands/metrics.d.ts.map +1 -0
- package/dist/cli/commands/metrics.js +219 -0
- package/dist/cli/commands/metrics.js.map +1 -0
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +8 -0
- package/dist/cli/runner.js.map +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +28 -0
- package/dist/config/config.js.map +1 -1
- package/dist/config/defaults.d.ts +13 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +21 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/file.d.ts.map +1 -1
- package/dist/config/file.js +61 -0
- package/dist/config/file.js.map +1 -1
- package/dist/config/index.d.ts +3 -3
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -2
- package/dist/config/index.js.map +1 -1
- package/dist/config/merge.d.ts.map +1 -1
- package/dist/config/merge.js +46 -1
- package/dist/config/merge.js.map +1 -1
- package/dist/config/types.d.ts +63 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +30 -0
- package/dist/config/types.js.map +1 -1
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +51 -1
- package/dist/config/validation.js.map +1 -1
- package/dist/external-sync/adapters/task-sync-adapter.d.ts +177 -0
- package/dist/external-sync/adapters/task-sync-adapter.d.ts.map +1 -0
- package/dist/external-sync/adapters/task-sync-adapter.js +353 -0
- package/dist/external-sync/adapters/task-sync-adapter.js.map +1 -0
- package/dist/external-sync/auto-link.d.ts +66 -0
- package/dist/external-sync/auto-link.d.ts.map +1 -0
- package/dist/external-sync/auto-link.js +98 -0
- package/dist/external-sync/auto-link.js.map +1 -0
- package/dist/external-sync/conflict-resolver.d.ts +170 -0
- package/dist/external-sync/conflict-resolver.d.ts.map +1 -0
- package/dist/external-sync/conflict-resolver.js +580 -0
- package/dist/external-sync/conflict-resolver.js.map +1 -0
- package/dist/external-sync/index.d.ts +20 -0
- package/dist/external-sync/index.d.ts.map +1 -0
- package/dist/external-sync/index.js +20 -0
- package/dist/external-sync/index.js.map +1 -0
- package/dist/external-sync/provider-registry.d.ts +109 -0
- package/dist/external-sync/provider-registry.d.ts.map +1 -0
- package/dist/external-sync/provider-registry.js +188 -0
- package/dist/external-sync/provider-registry.js.map +1 -0
- package/dist/external-sync/providers/github/github-api.d.ts +271 -0
- package/dist/external-sync/providers/github/github-api.d.ts.map +1 -0
- package/dist/external-sync/providers/github/github-api.js +366 -0
- package/dist/external-sync/providers/github/github-api.js.map +1 -0
- package/dist/external-sync/providers/github/github-field-map.d.ts +76 -0
- package/dist/external-sync/providers/github/github-field-map.d.ts.map +1 -0
- package/dist/external-sync/providers/github/github-field-map.js +157 -0
- package/dist/external-sync/providers/github/github-field-map.js.map +1 -0
- package/dist/external-sync/providers/github/github-provider.d.ts +36 -0
- package/dist/external-sync/providers/github/github-provider.d.ts.map +1 -0
- package/dist/external-sync/providers/github/github-provider.js +212 -0
- package/dist/external-sync/providers/github/github-provider.js.map +1 -0
- package/dist/external-sync/providers/github/github-task-adapter.d.ts +135 -0
- package/dist/external-sync/providers/github/github-task-adapter.d.ts.map +1 -0
- package/dist/external-sync/providers/github/github-task-adapter.js +374 -0
- package/dist/external-sync/providers/github/github-task-adapter.js.map +1 -0
- package/dist/external-sync/providers/github/index.d.ts +12 -0
- package/dist/external-sync/providers/github/index.d.ts.map +1 -0
- package/dist/external-sync/providers/github/index.js +15 -0
- package/dist/external-sync/providers/github/index.js.map +1 -0
- package/dist/external-sync/providers/index.d.ts +9 -0
- package/dist/external-sync/providers/index.d.ts.map +1 -0
- package/dist/external-sync/providers/index.js +10 -0
- package/dist/external-sync/providers/index.js.map +1 -0
- package/dist/external-sync/providers/linear/index.d.ts +19 -0
- package/dist/external-sync/providers/linear/index.d.ts.map +1 -0
- package/dist/external-sync/providers/linear/index.js +19 -0
- package/dist/external-sync/providers/linear/index.js.map +1 -0
- package/dist/external-sync/providers/linear/linear-api.d.ts +252 -0
- package/dist/external-sync/providers/linear/linear-api.d.ts.map +1 -0
- package/dist/external-sync/providers/linear/linear-api.js +522 -0
- package/dist/external-sync/providers/linear/linear-api.js.map +1 -0
- package/dist/external-sync/providers/linear/linear-field-map.d.ts +135 -0
- package/dist/external-sync/providers/linear/linear-field-map.d.ts.map +1 -0
- package/dist/external-sync/providers/linear/linear-field-map.js +338 -0
- package/dist/external-sync/providers/linear/linear-field-map.js.map +1 -0
- package/dist/external-sync/providers/linear/linear-provider.d.ts +52 -0
- package/dist/external-sync/providers/linear/linear-provider.d.ts.map +1 -0
- package/dist/external-sync/providers/linear/linear-provider.js +169 -0
- package/dist/external-sync/providers/linear/linear-provider.js.map +1 -0
- package/dist/external-sync/providers/linear/linear-task-adapter.d.ts +190 -0
- package/dist/external-sync/providers/linear/linear-task-adapter.d.ts.map +1 -0
- package/dist/external-sync/providers/linear/linear-task-adapter.js +521 -0
- package/dist/external-sync/providers/linear/linear-task-adapter.js.map +1 -0
- package/dist/external-sync/providers/linear/linear-types.d.ts +114 -0
- package/dist/external-sync/providers/linear/linear-types.d.ts.map +1 -0
- package/dist/external-sync/providers/linear/linear-types.js +10 -0
- package/dist/external-sync/providers/linear/linear-types.js.map +1 -0
- package/dist/external-sync/sync-engine.d.ts +298 -0
- package/dist/external-sync/sync-engine.d.ts.map +1 -0
- package/dist/external-sync/sync-engine.js +785 -0
- package/dist/external-sync/sync-engine.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/inbox.js +1 -1
- package/dist/sync/hash.d.ts +5 -0
- package/dist/sync/hash.d.ts.map +1 -1
- package/dist/sync/hash.js +21 -2
- package/dist/sync/hash.js.map +1 -1
- package/package.json +11 -5
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Task Sync Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements TaskSyncAdapter for GitHub Issues.
|
|
5
|
+
* Uses GitHubApiClient internally for all API operations and maps between
|
|
6
|
+
* the normalized ExternalTask format and GitHub's issue representation.
|
|
7
|
+
*
|
|
8
|
+
* Project format: 'owner/repo' (e.g., 'stoneforge-ai/stoneforge')
|
|
9
|
+
* External ID format: issue number as string (e.g., '42')
|
|
10
|
+
*/
|
|
11
|
+
import { GitHubApiClient, isGitHubApiError } from './github-api.js';
|
|
12
|
+
import { GITHUB_SYNC_LABEL_PREFIX } from './github-field-map.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Project Parsing
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Parses a project string in 'owner/repo' format into owner and repo components.
|
|
18
|
+
*
|
|
19
|
+
* @param project - Project identifier in 'owner/repo' format
|
|
20
|
+
* @returns Tuple of [owner, repo]
|
|
21
|
+
* @throws Error if the project string is not in the expected format
|
|
22
|
+
*/
|
|
23
|
+
function parseProject(project) {
|
|
24
|
+
const parts = project.split('/');
|
|
25
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
26
|
+
throw new Error(`Invalid GitHub project format: '${project}'. Expected 'owner/repo' (e.g., 'stoneforge-ai/stoneforge').`);
|
|
27
|
+
}
|
|
28
|
+
return [parts[0], parts[1]];
|
|
29
|
+
}
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// GitHub Issue <-> ExternalTask Mapping
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Converts a GitHub API issue response to the normalized ExternalTask format.
|
|
35
|
+
*
|
|
36
|
+
* @param issue - Raw GitHub issue from the API client
|
|
37
|
+
* @param project - The 'owner/repo' project identifier
|
|
38
|
+
* @returns Normalized ExternalTask
|
|
39
|
+
*/
|
|
40
|
+
function githubIssueToExternalTask(issue, project) {
|
|
41
|
+
return {
|
|
42
|
+
externalId: String(issue.number),
|
|
43
|
+
url: issue.html_url,
|
|
44
|
+
provider: 'github',
|
|
45
|
+
project,
|
|
46
|
+
title: issue.title,
|
|
47
|
+
body: issue.body ?? undefined,
|
|
48
|
+
state: issue.state,
|
|
49
|
+
labels: issue.labels.map((label) => label.name),
|
|
50
|
+
assignees: issue.assignees.map((user) => user.login),
|
|
51
|
+
createdAt: issue.created_at,
|
|
52
|
+
updatedAt: issue.updated_at,
|
|
53
|
+
closedAt: issue.closed_at ?? undefined,
|
|
54
|
+
raw: issue,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// Label Color Defaults
|
|
59
|
+
// ============================================================================
|
|
60
|
+
/**
|
|
61
|
+
* Default colors for auto-created sf:* labels on GitHub repos.
|
|
62
|
+
* Colors are hex strings without '#' prefix.
|
|
63
|
+
*
|
|
64
|
+
* - Priority labels: blue shades
|
|
65
|
+
* - Type labels: green shades
|
|
66
|
+
* - Fallback: neutral gray
|
|
67
|
+
*/
|
|
68
|
+
const SF_LABEL_COLORS = {
|
|
69
|
+
// Priority labels — blue palette
|
|
70
|
+
'sf:priority:critical': 'b60205', // red for critical
|
|
71
|
+
'sf:priority:high': 'd93f0b', // orange-red
|
|
72
|
+
'sf:priority:medium': 'fbca04', // yellow
|
|
73
|
+
'sf:priority:low': '0e8a16', // green
|
|
74
|
+
'sf:priority:minimal': 'c5def5', // light blue
|
|
75
|
+
// Type labels — green/teal palette
|
|
76
|
+
'sf:type:bug': 'd73a4a', // red (bug convention)
|
|
77
|
+
'sf:type:feature': 'a2eeef', // teal
|
|
78
|
+
'sf:type:task': '0075ca', // blue
|
|
79
|
+
'sf:type:chore': 'e4e669', // yellow-green
|
|
80
|
+
// Status labels — distinct palette for workflow states
|
|
81
|
+
'sf:status:open': '0e8a16', // green — active
|
|
82
|
+
'sf:status:in-progress': '1d76db', // blue — working
|
|
83
|
+
'sf:status:blocked': 'e4e669', // yellow — waiting
|
|
84
|
+
'sf:status:deferred': 'c5def5', // light blue — postponed
|
|
85
|
+
'sf:status:backlog': 'd4c5f9', // lavender — queued
|
|
86
|
+
'sf:status:review': 'f9d0c4', // peach — review
|
|
87
|
+
'sf:status:closed': '5319e7', // purple — done
|
|
88
|
+
'sf:status:tombstone': 'ededed', // gray — deleted
|
|
89
|
+
};
|
|
90
|
+
/** Fallback color for sf:* labels not in the mapping */
|
|
91
|
+
const SF_LABEL_DEFAULT_COLOR = 'ededed';
|
|
92
|
+
/**
|
|
93
|
+
* Returns the default color for a given sf:* label name.
|
|
94
|
+
* Falls back to a neutral gray if no specific color is defined.
|
|
95
|
+
*/
|
|
96
|
+
export function getDefaultLabelColor(labelName) {
|
|
97
|
+
return SF_LABEL_COLORS[labelName] ?? SF_LABEL_DEFAULT_COLOR;
|
|
98
|
+
}
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// GitHubTaskAdapter
|
|
101
|
+
// ============================================================================
|
|
102
|
+
/**
|
|
103
|
+
* TaskSyncAdapter implementation for GitHub Issues.
|
|
104
|
+
*
|
|
105
|
+
* Maps between Stoneforge's normalized ExternalTask format and GitHub's
|
|
106
|
+
* issue API. Uses GitHubApiClient for all HTTP operations.
|
|
107
|
+
*
|
|
108
|
+
* Auto-creates sf:* labels on the target repository before assigning them
|
|
109
|
+
* to issues, preventing GitHub 422 "Validation Failed" errors.
|
|
110
|
+
*
|
|
111
|
+
* Usage:
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const adapter = new GitHubTaskAdapter({
|
|
114
|
+
* token: 'ghp_...',
|
|
115
|
+
* apiBaseUrl: 'https://api.github.com', // optional
|
|
116
|
+
* });
|
|
117
|
+
*
|
|
118
|
+
* const issue = await adapter.getIssue('owner/repo', '42');
|
|
119
|
+
* const issues = await adapter.listIssuesSince('owner/repo', Date.now());
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export class GitHubTaskAdapter {
|
|
123
|
+
client;
|
|
124
|
+
/**
|
|
125
|
+
* Per-repo cache of known label names.
|
|
126
|
+
* Key is 'owner/repo', value is a Set of label names that exist on the repo.
|
|
127
|
+
* Populated once per repo per session to avoid redundant API calls.
|
|
128
|
+
*/
|
|
129
|
+
labelCache = new Map();
|
|
130
|
+
constructor(options) {
|
|
131
|
+
this.client = new GitHubApiClient(options);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Fetch a single issue by its number.
|
|
135
|
+
*
|
|
136
|
+
* @param project - Repository in 'owner/repo' format
|
|
137
|
+
* @param externalId - GitHub issue number as a string
|
|
138
|
+
* @returns The normalized ExternalTask, or null if not found
|
|
139
|
+
*/
|
|
140
|
+
async getIssue(project, externalId) {
|
|
141
|
+
const [owner, repo] = parseProject(project);
|
|
142
|
+
const issueNumber = parseInt(externalId, 10);
|
|
143
|
+
if (isNaN(issueNumber) || issueNumber <= 0) {
|
|
144
|
+
throw new Error(`Invalid GitHub issue number: '${externalId}'. Expected a positive integer.`);
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const issue = await this.client.getIssue(owner, repo, issueNumber);
|
|
148
|
+
return githubIssueToExternalTask(issue, project);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
// Return null for 404 (issue not found), rethrow other errors
|
|
152
|
+
if (isGitHubApiError(error) && error.isNotFound) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* List all issues updated since the given timestamp.
|
|
160
|
+
*
|
|
161
|
+
* Fetches all issues (open and closed) that have been updated since
|
|
162
|
+
* the provided timestamp. Uses auto-pagination to retrieve all matching
|
|
163
|
+
* issues across multiple pages.
|
|
164
|
+
*
|
|
165
|
+
* @param project - Repository in 'owner/repo' format
|
|
166
|
+
* @param since - Timestamp (milliseconds since epoch) to filter by
|
|
167
|
+
* @returns Array of normalized ExternalTask objects
|
|
168
|
+
*/
|
|
169
|
+
async listIssuesSince(project, since) {
|
|
170
|
+
const [owner, repo] = parseProject(project);
|
|
171
|
+
// Convert Timestamp (ms since epoch) to ISO 8601 string
|
|
172
|
+
const sinceISO = new Date(since).toISOString();
|
|
173
|
+
const issues = await this.client.listIssues(owner, repo, {
|
|
174
|
+
since: sinceISO,
|
|
175
|
+
state: 'all',
|
|
176
|
+
per_page: 100,
|
|
177
|
+
});
|
|
178
|
+
return issues.map((issue) => githubIssueToExternalTask(issue, project));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Create a new issue in the specified repository.
|
|
182
|
+
*
|
|
183
|
+
* Maps ExternalTaskInput fields to GitHub's create issue payload:
|
|
184
|
+
* - title -> title
|
|
185
|
+
* - body -> body
|
|
186
|
+
* - labels -> labels (as label names)
|
|
187
|
+
*
|
|
188
|
+
* Note: Assignees are intentionally NOT set on created issues. Stoneforge
|
|
189
|
+
* assignees are ephemeral agents that don't correspond to GitHub users.
|
|
190
|
+
*
|
|
191
|
+
* Note: The 'state' field from ExternalTaskInput is ignored for creation
|
|
192
|
+
* since GitHub issues are always created in the 'open' state.
|
|
193
|
+
*
|
|
194
|
+
* @param project - Repository in 'owner/repo' format
|
|
195
|
+
* @param issue - The issue data to create
|
|
196
|
+
* @returns The created ExternalTask with its new external ID and URL
|
|
197
|
+
*/
|
|
198
|
+
async createIssue(project, issue) {
|
|
199
|
+
const [owner, repo] = parseProject(project);
|
|
200
|
+
// Ensure sf:* labels exist on the repo before creating the issue
|
|
201
|
+
if (issue.labels && issue.labels.length > 0) {
|
|
202
|
+
await this.ensureLabelsExist(project, [...issue.labels]);
|
|
203
|
+
}
|
|
204
|
+
const created = await this.client.createIssue(owner, repo, {
|
|
205
|
+
title: issue.title,
|
|
206
|
+
body: issue.body,
|
|
207
|
+
labels: issue.labels ? [...issue.labels] : undefined,
|
|
208
|
+
// Assignees intentionally omitted — Stoneforge agents are not GitHub users
|
|
209
|
+
});
|
|
210
|
+
return githubIssueToExternalTask(created, project);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Update an existing issue in the specified repository.
|
|
214
|
+
*
|
|
215
|
+
* Maps partial ExternalTaskInput fields to GitHub's update issue payload.
|
|
216
|
+
* Only fields present in the updates object are sent to GitHub —
|
|
217
|
+
* undefined fields are left unchanged.
|
|
218
|
+
*
|
|
219
|
+
* @param project - Repository in 'owner/repo' format
|
|
220
|
+
* @param externalId - GitHub issue number as a string
|
|
221
|
+
* @param updates - Partial issue data to update
|
|
222
|
+
* @returns The updated ExternalTask
|
|
223
|
+
*/
|
|
224
|
+
async updateIssue(project, externalId, updates) {
|
|
225
|
+
const [owner, repo] = parseProject(project);
|
|
226
|
+
const issueNumber = parseInt(externalId, 10);
|
|
227
|
+
if (isNaN(issueNumber) || issueNumber <= 0) {
|
|
228
|
+
throw new Error(`Invalid GitHub issue number: '${externalId}'. Expected a positive integer.`);
|
|
229
|
+
}
|
|
230
|
+
// Ensure sf:* labels exist on the repo before updating the issue
|
|
231
|
+
if (updates.labels !== undefined && updates.labels.length > 0) {
|
|
232
|
+
await this.ensureLabelsExist(project, [...updates.labels]);
|
|
233
|
+
}
|
|
234
|
+
// Build the update payload, only including defined fields
|
|
235
|
+
const payload = {};
|
|
236
|
+
if (updates.title !== undefined) {
|
|
237
|
+
payload.title = updates.title;
|
|
238
|
+
}
|
|
239
|
+
if (updates.body !== undefined) {
|
|
240
|
+
payload.body = updates.body;
|
|
241
|
+
}
|
|
242
|
+
if (updates.state !== undefined) {
|
|
243
|
+
payload.state = updates.state;
|
|
244
|
+
}
|
|
245
|
+
if (updates.labels !== undefined) {
|
|
246
|
+
payload.labels = [...updates.labels];
|
|
247
|
+
}
|
|
248
|
+
// Assignees intentionally omitted — Stoneforge agents are not GitHub users
|
|
249
|
+
const updated = await this.client.updateIssue(owner, repo, issueNumber, payload);
|
|
250
|
+
return githubIssueToExternalTask(updated, project);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Ensures that all sf:* labels in the given list exist on the target repository.
|
|
254
|
+
*
|
|
255
|
+
* For each label with the sync prefix (sf:), checks the per-repo cache first.
|
|
256
|
+
* If the cache hasn't been populated yet, fetches all labels from the repo once.
|
|
257
|
+
* Any missing sf:* labels are created with sensible default colors.
|
|
258
|
+
*
|
|
259
|
+
* Non-sf:* labels (user-managed) are not checked or created — those are the
|
|
260
|
+
* user's responsibility.
|
|
261
|
+
*
|
|
262
|
+
* @param project - Repository in 'owner/repo' format
|
|
263
|
+
* @param labels - Array of label names that will be assigned to an issue
|
|
264
|
+
*/
|
|
265
|
+
async ensureLabelsExist(project, labels) {
|
|
266
|
+
const sfLabels = labels.filter((l) => l.startsWith(GITHUB_SYNC_LABEL_PREFIX));
|
|
267
|
+
if (sfLabels.length === 0)
|
|
268
|
+
return;
|
|
269
|
+
const [owner, repo] = parseProject(project);
|
|
270
|
+
// Populate cache if this is the first time we're checking this repo
|
|
271
|
+
if (!this.labelCache.has(project)) {
|
|
272
|
+
const existingLabels = await this.client.getLabels(owner, repo);
|
|
273
|
+
this.labelCache.set(project, new Set(existingLabels.map((l) => l.name)));
|
|
274
|
+
}
|
|
275
|
+
const knownLabels = this.labelCache.get(project);
|
|
276
|
+
// Create any missing sf:* labels
|
|
277
|
+
for (const labelName of sfLabels) {
|
|
278
|
+
if (knownLabels.has(labelName))
|
|
279
|
+
continue;
|
|
280
|
+
const color = getDefaultLabelColor(labelName);
|
|
281
|
+
try {
|
|
282
|
+
await this.client.createLabel(owner, repo, {
|
|
283
|
+
name: labelName,
|
|
284
|
+
color,
|
|
285
|
+
description: `Stoneforge sync label`,
|
|
286
|
+
});
|
|
287
|
+
knownLabels.add(labelName);
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
// If the label was created concurrently (422 with "already_exists"),
|
|
291
|
+
// just add it to the cache and continue
|
|
292
|
+
if (isGitHubApiError(error) &&
|
|
293
|
+
error.status === 422 &&
|
|
294
|
+
error.responseBody?.errors &&
|
|
295
|
+
Array.isArray(error.responseBody.errors) &&
|
|
296
|
+
error.responseBody.errors.some((e) => e.code === 'already_exists')) {
|
|
297
|
+
knownLabels.add(labelName);
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Returns the GitHub-specific field mapping configuration.
|
|
306
|
+
*
|
|
307
|
+
* This configuration is used by the shared task sync adapter utilities
|
|
308
|
+
* to map between Stoneforge task fields and GitHub issue fields.
|
|
309
|
+
*
|
|
310
|
+
* The returned TaskFieldMapConfig describes individual field mappings
|
|
311
|
+
* with their directions and transform function names.
|
|
312
|
+
*
|
|
313
|
+
* @returns TaskFieldMapConfig for GitHub
|
|
314
|
+
*/
|
|
315
|
+
getFieldMapConfig() {
|
|
316
|
+
return {
|
|
317
|
+
provider: 'github',
|
|
318
|
+
fields: [
|
|
319
|
+
{
|
|
320
|
+
localField: 'title',
|
|
321
|
+
externalField: 'title',
|
|
322
|
+
direction: 'bidirectional',
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
localField: 'descriptionRef',
|
|
326
|
+
externalField: 'body',
|
|
327
|
+
direction: 'bidirectional',
|
|
328
|
+
toExternal: 'hydrateDescription',
|
|
329
|
+
toLocal: 'createDescriptionDoc',
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
localField: 'status',
|
|
333
|
+
externalField: 'state',
|
|
334
|
+
direction: 'bidirectional',
|
|
335
|
+
toExternal: 'statusToGitHubState',
|
|
336
|
+
toLocal: 'gitHubStateToStatus',
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
localField: 'tags',
|
|
340
|
+
externalField: 'labels',
|
|
341
|
+
direction: 'bidirectional',
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
localField: 'priority',
|
|
345
|
+
externalField: 'labels',
|
|
346
|
+
direction: 'bidirectional',
|
|
347
|
+
toExternal: 'priorityToLabel',
|
|
348
|
+
toLocal: 'labelToPriority',
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
localField: 'taskType',
|
|
352
|
+
externalField: 'labels',
|
|
353
|
+
direction: 'bidirectional',
|
|
354
|
+
toExternal: 'taskTypeToLabel',
|
|
355
|
+
toLocal: 'labelToTaskType',
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
localField: 'assignee',
|
|
359
|
+
externalField: 'assignees',
|
|
360
|
+
direction: 'pull',
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Returns the GitHub-specific TaskSyncFieldMapConfig for use with
|
|
368
|
+
* the shared task sync adapter utilities.
|
|
369
|
+
*
|
|
370
|
+
* This is a convenience export for code that needs the config directly
|
|
371
|
+
* without going through the adapter's getFieldMapConfig() method.
|
|
372
|
+
*/
|
|
373
|
+
export { GITHUB_FIELD_MAP_CONFIG } from './github-field-map.js';
|
|
374
|
+
//# sourceMappingURL=github-task-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-task-adapter.js","sourceRoot":"","sources":["../../../../src/external-sync/providers/github/github-task-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Provider — exports for the GitHub external sync provider
|
|
3
|
+
*
|
|
4
|
+
* Exports the full GitHub provider implementation, task adapter,
|
|
5
|
+
* field mapping configuration, and API client.
|
|
6
|
+
*/
|
|
7
|
+
export { createGitHubProvider, createGitHubPlaceholderProvider } from './github-provider.js';
|
|
8
|
+
export { GitHubTaskAdapter, getDefaultLabelColor } from './github-task-adapter.js';
|
|
9
|
+
export { GITHUB_FIELD_MAP_CONFIG, GITHUB_PRIORITY_LABELS, GITHUB_TASK_TYPE_LABELS, GITHUB_SYNC_LABEL_PREFIX, statusToGitHubState, gitHubStateToStatus, } from './github-field-map.js';
|
|
10
|
+
export { GitHubApiClient, GitHubApiError, isGitHubApiError } from './github-api.js';
|
|
11
|
+
export type { GitHubIssue, GitHubLabel, GitHubUser, GitHubApiClientOptions, ListIssuesOptions, CreateIssueInput, CreateLabelInput, UpdateIssueInput, RateLimitInfo, } from './github-api.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/external-sync/providers/github/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAG7F,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Provider — exports for the GitHub external sync provider
|
|
3
|
+
*
|
|
4
|
+
* Exports the full GitHub provider implementation, task adapter,
|
|
5
|
+
* field mapping configuration, and API client.
|
|
6
|
+
*/
|
|
7
|
+
// Provider factories
|
|
8
|
+
export { createGitHubProvider, createGitHubPlaceholderProvider } from './github-provider.js';
|
|
9
|
+
// Task adapter
|
|
10
|
+
export { GitHubTaskAdapter, getDefaultLabelColor } from './github-task-adapter.js';
|
|
11
|
+
// Field mapping configuration
|
|
12
|
+
export { GITHUB_FIELD_MAP_CONFIG, GITHUB_PRIORITY_LABELS, GITHUB_TASK_TYPE_LABELS, GITHUB_SYNC_LABEL_PREFIX, statusToGitHubState, gitHubStateToStatus, } from './github-field-map.js';
|
|
13
|
+
// API client (re-export for convenience)
|
|
14
|
+
export { GitHubApiClient, GitHubApiError, isGitHubApiError } from './github-api.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/external-sync/providers/github/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAqB;AACrB,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAE7F,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEnF,8BAA8B;AAC9B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,yCAAyC;AACzC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Sync Providers — barrel exports for all provider implementations
|
|
3
|
+
*
|
|
4
|
+
* Re-exports provider factory functions and key types from each provider module.
|
|
5
|
+
*/
|
|
6
|
+
export { createGitHubPlaceholderProvider } from './github/index.js';
|
|
7
|
+
export { createLinearProvider, createLinearPlaceholderProvider, } from './linear/index.js';
|
|
8
|
+
export type { CreateLinearProviderOptions } from './linear/index.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/external-sync/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Sync Providers — barrel exports for all provider implementations
|
|
3
|
+
*
|
|
4
|
+
* Re-exports provider factory functions and key types from each provider module.
|
|
5
|
+
*/
|
|
6
|
+
// GitHub provider
|
|
7
|
+
export { createGitHubPlaceholderProvider } from './github/index.js';
|
|
8
|
+
// Linear provider
|
|
9
|
+
export { createLinearProvider, createLinearPlaceholderProvider, } from './linear/index.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/external-sync/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kBAAkB;AAClB,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAEpE,kBAAkB;AAClB,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Provider — exports for the Linear external sync provider
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - LinearApiClient: GraphQL API client for Linear
|
|
6
|
+
* - LinearTaskAdapter: TaskSyncAdapter implementation for Linear issues
|
|
7
|
+
* - LinearProvider: ExternalProvider implementation (via factory functions)
|
|
8
|
+
* - Field mapping utilities for priority and workflow state conversion
|
|
9
|
+
* - Linear API response types
|
|
10
|
+
*/
|
|
11
|
+
export { createLinearProvider, createLinearPlaceholderProvider, } from './linear-provider.js';
|
|
12
|
+
export type { CreateLinearProviderOptions } from './linear-provider.js';
|
|
13
|
+
export { LinearTaskAdapter } from './linear-task-adapter.js';
|
|
14
|
+
export { stoneforgePriorityToLinear, linearPriorityToStoneforge, linearStateTypeToStatus, statusToLinearStateType, shouldAddBlockedLabel, createLinearFieldMapConfig, createLinearSyncFieldMapConfig, } from './linear-field-map.js';
|
|
15
|
+
export type { LinearStateType } from './linear-field-map.js';
|
|
16
|
+
export { LinearApiClient, LinearApiError, isLinearApiError } from './linear-api.js';
|
|
17
|
+
export type { LinearApiClientOptions, RateLimitInfo, GraphQLError, CreateIssueInput, UpdateIssueInput, } from './linear-api.js';
|
|
18
|
+
export type { LinearIssue, LinearTeam, LinearUser, LinearLabel, LinearWorkflowState, LinearPageInfo, LinearConnection, } from './linear-types.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/external-sync/providers/linear/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAGxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Provider — exports for the Linear external sync provider
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - LinearApiClient: GraphQL API client for Linear
|
|
6
|
+
* - LinearTaskAdapter: TaskSyncAdapter implementation for Linear issues
|
|
7
|
+
* - LinearProvider: ExternalProvider implementation (via factory functions)
|
|
8
|
+
* - Field mapping utilities for priority and workflow state conversion
|
|
9
|
+
* - Linear API response types
|
|
10
|
+
*/
|
|
11
|
+
// Provider factory functions
|
|
12
|
+
export { createLinearProvider, createLinearPlaceholderProvider, } from './linear-provider.js';
|
|
13
|
+
// Task adapter
|
|
14
|
+
export { LinearTaskAdapter } from './linear-task-adapter.js';
|
|
15
|
+
// Field mapping
|
|
16
|
+
export { stoneforgePriorityToLinear, linearPriorityToStoneforge, linearStateTypeToStatus, statusToLinearStateType, shouldAddBlockedLabel, createLinearFieldMapConfig, createLinearSyncFieldMapConfig, } from './linear-field-map.js';
|
|
17
|
+
// API client
|
|
18
|
+
export { LinearApiClient, LinearApiError, isLinearApiError } from './linear-api.js';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/external-sync/providers/linear/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,6BAA6B;AAC7B,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAG9B,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,gBAAgB;AAChB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAG/B,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|