@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.
Files changed (137) hide show
  1. package/README.md +3 -1
  2. package/dist/cli/commands/admin.d.ts.map +1 -1
  3. package/dist/cli/commands/admin.js +313 -3
  4. package/dist/cli/commands/admin.js.map +1 -1
  5. package/dist/cli/commands/auto-link-helper.d.ts +33 -0
  6. package/dist/cli/commands/auto-link-helper.d.ts.map +1 -0
  7. package/dist/cli/commands/auto-link-helper.js +73 -0
  8. package/dist/cli/commands/auto-link-helper.js.map +1 -0
  9. package/dist/cli/commands/crud.d.ts +1 -0
  10. package/dist/cli/commands/crud.d.ts.map +1 -1
  11. package/dist/cli/commands/crud.js +44 -5
  12. package/dist/cli/commands/crud.js.map +1 -1
  13. package/dist/cli/commands/docs.d.ts +1 -0
  14. package/dist/cli/commands/docs.d.ts.map +1 -1
  15. package/dist/cli/commands/docs.js +81 -1
  16. package/dist/cli/commands/docs.js.map +1 -1
  17. package/dist/cli/commands/external-sync.d.ts +17 -0
  18. package/dist/cli/commands/external-sync.d.ts.map +1 -0
  19. package/dist/cli/commands/external-sync.js +1647 -0
  20. package/dist/cli/commands/external-sync.js.map +1 -0
  21. package/dist/cli/commands/log.d.ts +18 -0
  22. package/dist/cli/commands/log.d.ts.map +1 -0
  23. package/dist/cli/commands/log.js +282 -0
  24. package/dist/cli/commands/log.js.map +1 -0
  25. package/dist/cli/commands/metrics.d.ts +9 -0
  26. package/dist/cli/commands/metrics.d.ts.map +1 -0
  27. package/dist/cli/commands/metrics.js +219 -0
  28. package/dist/cli/commands/metrics.js.map +1 -0
  29. package/dist/cli/runner.d.ts.map +1 -1
  30. package/dist/cli/runner.js +8 -0
  31. package/dist/cli/runner.js.map +1 -1
  32. package/dist/config/config.d.ts.map +1 -1
  33. package/dist/config/config.js +28 -0
  34. package/dist/config/config.js.map +1 -1
  35. package/dist/config/defaults.d.ts +13 -1
  36. package/dist/config/defaults.d.ts.map +1 -1
  37. package/dist/config/defaults.js +21 -0
  38. package/dist/config/defaults.js.map +1 -1
  39. package/dist/config/file.d.ts.map +1 -1
  40. package/dist/config/file.js +61 -0
  41. package/dist/config/file.js.map +1 -1
  42. package/dist/config/index.d.ts +3 -3
  43. package/dist/config/index.d.ts.map +1 -1
  44. package/dist/config/index.js +2 -2
  45. package/dist/config/index.js.map +1 -1
  46. package/dist/config/merge.d.ts.map +1 -1
  47. package/dist/config/merge.js +46 -1
  48. package/dist/config/merge.js.map +1 -1
  49. package/dist/config/types.d.ts +63 -1
  50. package/dist/config/types.d.ts.map +1 -1
  51. package/dist/config/types.js +30 -0
  52. package/dist/config/types.js.map +1 -1
  53. package/dist/config/validation.d.ts.map +1 -1
  54. package/dist/config/validation.js +51 -1
  55. package/dist/config/validation.js.map +1 -1
  56. package/dist/external-sync/adapters/task-sync-adapter.d.ts +177 -0
  57. package/dist/external-sync/adapters/task-sync-adapter.d.ts.map +1 -0
  58. package/dist/external-sync/adapters/task-sync-adapter.js +353 -0
  59. package/dist/external-sync/adapters/task-sync-adapter.js.map +1 -0
  60. package/dist/external-sync/auto-link.d.ts +66 -0
  61. package/dist/external-sync/auto-link.d.ts.map +1 -0
  62. package/dist/external-sync/auto-link.js +98 -0
  63. package/dist/external-sync/auto-link.js.map +1 -0
  64. package/dist/external-sync/conflict-resolver.d.ts +170 -0
  65. package/dist/external-sync/conflict-resolver.d.ts.map +1 -0
  66. package/dist/external-sync/conflict-resolver.js +580 -0
  67. package/dist/external-sync/conflict-resolver.js.map +1 -0
  68. package/dist/external-sync/index.d.ts +20 -0
  69. package/dist/external-sync/index.d.ts.map +1 -0
  70. package/dist/external-sync/index.js +20 -0
  71. package/dist/external-sync/index.js.map +1 -0
  72. package/dist/external-sync/provider-registry.d.ts +109 -0
  73. package/dist/external-sync/provider-registry.d.ts.map +1 -0
  74. package/dist/external-sync/provider-registry.js +188 -0
  75. package/dist/external-sync/provider-registry.js.map +1 -0
  76. package/dist/external-sync/providers/github/github-api.d.ts +271 -0
  77. package/dist/external-sync/providers/github/github-api.d.ts.map +1 -0
  78. package/dist/external-sync/providers/github/github-api.js +366 -0
  79. package/dist/external-sync/providers/github/github-api.js.map +1 -0
  80. package/dist/external-sync/providers/github/github-field-map.d.ts +76 -0
  81. package/dist/external-sync/providers/github/github-field-map.d.ts.map +1 -0
  82. package/dist/external-sync/providers/github/github-field-map.js +157 -0
  83. package/dist/external-sync/providers/github/github-field-map.js.map +1 -0
  84. package/dist/external-sync/providers/github/github-provider.d.ts +36 -0
  85. package/dist/external-sync/providers/github/github-provider.d.ts.map +1 -0
  86. package/dist/external-sync/providers/github/github-provider.js +212 -0
  87. package/dist/external-sync/providers/github/github-provider.js.map +1 -0
  88. package/dist/external-sync/providers/github/github-task-adapter.d.ts +135 -0
  89. package/dist/external-sync/providers/github/github-task-adapter.d.ts.map +1 -0
  90. package/dist/external-sync/providers/github/github-task-adapter.js +374 -0
  91. package/dist/external-sync/providers/github/github-task-adapter.js.map +1 -0
  92. package/dist/external-sync/providers/github/index.d.ts +12 -0
  93. package/dist/external-sync/providers/github/index.d.ts.map +1 -0
  94. package/dist/external-sync/providers/github/index.js +15 -0
  95. package/dist/external-sync/providers/github/index.js.map +1 -0
  96. package/dist/external-sync/providers/index.d.ts +9 -0
  97. package/dist/external-sync/providers/index.d.ts.map +1 -0
  98. package/dist/external-sync/providers/index.js +10 -0
  99. package/dist/external-sync/providers/index.js.map +1 -0
  100. package/dist/external-sync/providers/linear/index.d.ts +19 -0
  101. package/dist/external-sync/providers/linear/index.d.ts.map +1 -0
  102. package/dist/external-sync/providers/linear/index.js +19 -0
  103. package/dist/external-sync/providers/linear/index.js.map +1 -0
  104. package/dist/external-sync/providers/linear/linear-api.d.ts +252 -0
  105. package/dist/external-sync/providers/linear/linear-api.d.ts.map +1 -0
  106. package/dist/external-sync/providers/linear/linear-api.js +522 -0
  107. package/dist/external-sync/providers/linear/linear-api.js.map +1 -0
  108. package/dist/external-sync/providers/linear/linear-field-map.d.ts +135 -0
  109. package/dist/external-sync/providers/linear/linear-field-map.d.ts.map +1 -0
  110. package/dist/external-sync/providers/linear/linear-field-map.js +338 -0
  111. package/dist/external-sync/providers/linear/linear-field-map.js.map +1 -0
  112. package/dist/external-sync/providers/linear/linear-provider.d.ts +52 -0
  113. package/dist/external-sync/providers/linear/linear-provider.d.ts.map +1 -0
  114. package/dist/external-sync/providers/linear/linear-provider.js +169 -0
  115. package/dist/external-sync/providers/linear/linear-provider.js.map +1 -0
  116. package/dist/external-sync/providers/linear/linear-task-adapter.d.ts +190 -0
  117. package/dist/external-sync/providers/linear/linear-task-adapter.d.ts.map +1 -0
  118. package/dist/external-sync/providers/linear/linear-task-adapter.js +521 -0
  119. package/dist/external-sync/providers/linear/linear-task-adapter.js.map +1 -0
  120. package/dist/external-sync/providers/linear/linear-types.d.ts +114 -0
  121. package/dist/external-sync/providers/linear/linear-types.d.ts.map +1 -0
  122. package/dist/external-sync/providers/linear/linear-types.js +10 -0
  123. package/dist/external-sync/providers/linear/linear-types.js.map +1 -0
  124. package/dist/external-sync/sync-engine.d.ts +298 -0
  125. package/dist/external-sync/sync-engine.d.ts.map +1 -0
  126. package/dist/external-sync/sync-engine.js +785 -0
  127. package/dist/external-sync/sync-engine.js.map +1 -0
  128. package/dist/index.d.ts +1 -0
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +2 -0
  131. package/dist/index.js.map +1 -1
  132. package/dist/services/inbox.js +1 -1
  133. package/dist/sync/hash.d.ts +5 -0
  134. package/dist/sync/hash.d.ts.map +1 -1
  135. package/dist/sync/hash.js +21 -2
  136. package/dist/sync/hash.js.map +1 -1
  137. 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"}