@sascha384/tic 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +17 -63
  3. package/dist/auth/github.d.ts +27 -0
  4. package/dist/auth/github.js +96 -0
  5. package/dist/auth/github.js.map +1 -0
  6. package/dist/auth/index.d.ts +3 -0
  7. package/dist/auth/index.js +3 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/keychain.d.ts +14 -0
  10. package/dist/auth/keychain.js +36 -0
  11. package/dist/auth/keychain.js.map +1 -0
  12. package/dist/backends/factory.d.ts +5 -2
  13. package/dist/backends/factory.js +4 -4
  14. package/dist/backends/factory.js.map +1 -1
  15. package/dist/backends/github/api.d.ts +9 -0
  16. package/dist/backends/github/api.js +117 -0
  17. package/dist/backends/github/api.js.map +1 -0
  18. package/dist/backends/github/index.d.ts +9 -5
  19. package/dist/backends/github/index.js +119 -81
  20. package/dist/backends/github/index.js.map +1 -1
  21. package/dist/backends/github/mappers.d.ts +1 -0
  22. package/dist/backends/github/mappers.js.map +1 -1
  23. package/dist/backends/shared/api-client.d.ts +16 -0
  24. package/dist/backends/shared/api-client.js +73 -0
  25. package/dist/backends/shared/api-client.js.map +1 -0
  26. package/dist/cli/commands/auth.d.ts +17 -0
  27. package/dist/cli/commands/auth.js +47 -0
  28. package/dist/cli/commands/auth.js.map +1 -0
  29. package/dist/cli/commands/mcp.js +32 -9
  30. package/dist/cli/commands/mcp.js.map +1 -1
  31. package/dist/cli/index.js +58 -0
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/components/AutocompleteInput.d.ts +2 -1
  34. package/dist/components/AutocompleteInput.js +5 -1
  35. package/dist/components/AutocompleteInput.js.map +1 -1
  36. package/dist/components/MultiAutocompleteInput.d.ts +2 -1
  37. package/dist/components/MultiAutocompleteInput.js +5 -1
  38. package/dist/components/MultiAutocompleteInput.js.map +1 -1
  39. package/dist/components/WorkItemForm.js +12 -0
  40. package/dist/components/WorkItemForm.js.map +1 -1
  41. package/dist/stores/backendDataStore.js +12 -1
  42. package/dist/stores/backendDataStore.js.map +1 -1
  43. package/drizzle/0000_next_vance_astro.sql +183 -0
  44. package/drizzle/meta/0000_snapshot.json +1188 -0
  45. package/drizzle/meta/_journal.json +13 -0
  46. package/package.json +4 -1
  47. package/skills/config/SKILL.md +2 -2
  48. package/dist/backends/github/gh.d.ts +0 -9
  49. package/dist/backends/github/gh.js +0 -95
  50. package/dist/backends/github/gh.js.map +0 -1
@@ -1,5 +1,9 @@
1
+ import { execSync } from 'node:child_process';
2
+ import open from 'open';
1
3
  import { BaseBackend, UnsupportedOperationError } from '../types.js';
2
- import { gh, ghExec, ghGraphQL, ghExecSync, ghSync } from './gh.js';
4
+ import { getGitHubToken, authenticateGitHub } from '../../auth/github.js';
5
+ import { AuthError } from '../shared/api-client.js';
6
+ import { GitHubApiClient } from './api.js';
3
7
  import { mapIssueToWorkItem } from './mappers.js';
4
8
  const LIST_ISSUES_QUERY = `
5
9
  query($owner: String!, $repo: String!, $cursor: String) {
@@ -57,14 +61,52 @@ const REMOVE_SUB_ISSUE_MUTATION = `
57
61
  }
58
62
  }
59
63
  `;
64
+ const DELETE_ISSUE_MUTATION = `
65
+ mutation($issueId: ID!) {
66
+ deleteIssue(input: { issueId: $issueId }) {
67
+ repository { name }
68
+ }
69
+ }
70
+ `;
60
71
  export class GitHubBackend extends BaseBackend {
61
- cwd;
62
- ownerRepo = null;
72
+ api;
73
+ owner;
74
+ repo;
63
75
  cachedMilestones = null;
64
- constructor(cwd) {
76
+ constructor(api, owner, repo) {
65
77
  super(60_000);
66
- this.cwd = cwd;
67
- ghExecSync(['auth', 'status'], cwd);
78
+ this.api = api;
79
+ this.owner = owner;
80
+ this.repo = repo;
81
+ }
82
+ static async create(cwd, options) {
83
+ const { owner, repo } = GitHubBackend.detectOwnerRepo(cwd);
84
+ let token = getGitHubToken();
85
+ if (!token) {
86
+ if (options?.skipAuth) {
87
+ throw new AuthError('GitHub authentication required. Run "tic auth login github" to authenticate.');
88
+ }
89
+ token = await authenticateGitHub({
90
+ onCode: (code, url) => {
91
+ console.log(`\nGitHub authentication required.`);
92
+ console.log(`Visit ${url} and enter code: ${code}\n`);
93
+ },
94
+ });
95
+ }
96
+ const api = new GitHubApiClient(token);
97
+ return new GitHubBackend(api, owner, repo);
98
+ }
99
+ static detectOwnerRepo(cwd) {
100
+ const output = execSync('git remote -v', {
101
+ cwd,
102
+ encoding: 'utf-8',
103
+ stdio: ['pipe', 'pipe', 'pipe'],
104
+ });
105
+ const match = output.match(/github\.com[:/]([^/\s]+)\/([^/\s.]+?)(?:\.git)?(?:\s|$)/);
106
+ if (!match) {
107
+ throw new Error('Could not detect GitHub owner/repo from git remotes');
108
+ }
109
+ return { owner: match[1], repo: match[2] };
68
110
  }
69
111
  onCacheInvalidate() {
70
112
  this.cachedMilestones = null;
@@ -107,8 +149,10 @@ export class GitHubBackend extends BaseBackend {
107
149
  }
108
150
  async getAssignees() {
109
151
  try {
110
- const { owner, repo } = await this.getOwnerRepo();
111
- const collaborators = await gh(['api', `repos/${owner}/${repo}/collaborators`, '--jq', '.'], this.cwd);
152
+ const collaborators = [];
153
+ for await (const page of this.api.paginate(`/repos/${this.owner}/${this.repo}/collaborators`)) {
154
+ collaborators.push(...page);
155
+ }
112
156
  return collaborators.map((c) => c.login);
113
157
  }
114
158
  catch {
@@ -133,11 +177,14 @@ export class GitHubBackend extends BaseBackend {
133
177
  // No-op — current iteration is always first open milestone
134
178
  }
135
179
  async listWorkItems(iteration) {
136
- const { owner, repo } = await this.getOwnerRepo();
137
180
  const allIssues = [];
138
181
  let cursor = null;
139
182
  do {
140
- const data = await ghGraphQL(LIST_ISSUES_QUERY, { owner, repo, cursor }, this.cwd);
183
+ const data = await this.api.graphql(LIST_ISSUES_QUERY, {
184
+ owner: this.owner,
185
+ repo: this.repo,
186
+ cursor,
187
+ });
141
188
  allIssues.push(...data.repository.issues.nodes);
142
189
  cursor = data.repository.issues.pageInfo.hasNextPage
143
190
  ? data.repository.issues.pageInfo.endCursor
@@ -150,14 +197,17 @@ export class GitHubBackend extends BaseBackend {
150
197
  return items;
151
198
  }
152
199
  async getWorkItem(id) {
153
- const { owner, repo } = await this.getOwnerRepo();
154
- const data = await ghGraphQL(GET_ISSUE_QUERY, { owner, repo, number: Number(id) }, this.cwd);
200
+ const data = await this.api.graphql(GET_ISSUE_QUERY, {
201
+ owner: this.owner,
202
+ repo: this.repo,
203
+ number: Number(id),
204
+ });
155
205
  return mapIssueToWorkItem(data.repository.issue);
156
206
  }
157
207
  async ensureLabels(labels) {
158
208
  for (const label of labels) {
159
209
  try {
160
- await ghExec(['label', 'create', label], this.cwd);
210
+ await this.api.rest('POST', `/repos/${this.owner}/${this.repo}/labels`, { name: label });
161
211
  }
162
212
  catch {
163
213
  // Label already exists — ignore
@@ -169,37 +219,32 @@ export class GitHubBackend extends BaseBackend {
169
219
  if (data.labels.length > 0) {
170
220
  await this.ensureLabels(data.labels);
171
221
  }
172
- const args = [
173
- 'issue',
174
- 'create',
175
- '--title',
176
- data.title,
177
- '--body',
178
- data.description || '',
179
- ];
222
+ const issueBody = {
223
+ title: data.title,
224
+ body: data.description || '',
225
+ };
180
226
  if (data.assignee) {
181
- args.push('--assignee', data.assignee);
182
- }
183
- if (data.iteration) {
184
- args.push('--milestone', data.iteration);
227
+ issueBody.assignees = [data.assignee];
185
228
  }
186
- for (const label of data.labels) {
187
- args.push('--label', label);
229
+ if (data.labels.length > 0) {
230
+ issueBody.labels = data.labels;
188
231
  }
189
- const output = await ghExec(args, this.cwd);
190
- // gh issue create prints the URL: https://github.com/owner/repo/issues/123
191
- const match = output.match(/\/issues\/(\d+)/);
192
- if (!match) {
193
- throw new Error('Failed to parse issue number from gh output');
232
+ if (data.iteration) {
233
+ const milestones = await this.fetchMilestones();
234
+ const milestone = milestones.find((m) => m.title === data.iteration);
235
+ if (milestone) {
236
+ issueBody.milestone = milestone.number;
237
+ }
194
238
  }
195
- const id = match[1];
239
+ const result = await this.api.rest('POST', `/repos/${this.owner}/${this.repo}/issues`, issueBody);
240
+ const id = String(result.number);
196
241
  if (data.parent) {
197
242
  try {
198
243
  await this.addSubIssue(data.parent, id);
199
244
  }
200
245
  catch (err) {
201
246
  try {
202
- await ghExec(['issue', 'delete', id, '--yes'], this.cwd);
247
+ await this.deleteWorkItem(id);
203
248
  }
204
249
  catch {
205
250
  // Best-effort cleanup
@@ -229,55 +274,58 @@ export class GitHubBackend extends BaseBackend {
229
274
  throw new Error(`Failed to update parent relationship for issue #${id}: ${err instanceof Error ? err.message : String(err)}`);
230
275
  }
231
276
  }
232
- // Handle status changes via close/reopen
233
- if (data.status === 'closed') {
234
- await ghExec(['issue', 'close', id], this.cwd);
277
+ // Build PATCH body for REST API
278
+ const patchBody = {};
279
+ let hasPatch = false;
280
+ if (data.status !== undefined) {
281
+ patchBody.state = data.status === 'closed' ? 'closed' : 'open';
282
+ hasPatch = true;
235
283
  }
236
- else if (data.status === 'open') {
237
- await ghExec(['issue', 'reopen', id], this.cwd);
238
- }
239
- // Handle field edits
240
- const editArgs = ['issue', 'edit', id];
241
- let hasEdits = false;
242
284
  if (data.title !== undefined) {
243
- editArgs.push('--title', data.title);
244
- hasEdits = true;
285
+ patchBody.title = data.title;
286
+ hasPatch = true;
245
287
  }
246
288
  if (data.description !== undefined) {
247
- editArgs.push('--body', data.description);
248
- hasEdits = true;
289
+ patchBody.body = data.description;
290
+ hasPatch = true;
249
291
  }
250
292
  if (data.iteration !== undefined) {
251
293
  if (data.iteration) {
252
- editArgs.push('--milestone', data.iteration);
294
+ const milestones = await this.fetchMilestones();
295
+ const milestone = milestones.find((m) => m.title === data.iteration);
296
+ if (milestone) {
297
+ patchBody.milestone = milestone.number;
298
+ }
253
299
  }
254
300
  else {
255
- editArgs.push('--remove-milestone');
301
+ patchBody.milestone = null;
256
302
  }
257
- hasEdits = true;
303
+ hasPatch = true;
258
304
  }
259
305
  if (data.assignee !== undefined) {
260
306
  if (data.assignee) {
261
- editArgs.push('--add-assignee', data.assignee);
307
+ patchBody.assignees = [data.assignee];
262
308
  }
263
- hasEdits = true;
309
+ else {
310
+ patchBody.assignees = [];
311
+ }
312
+ hasPatch = true;
264
313
  }
265
314
  if (data.labels !== undefined) {
266
- for (const label of data.labels) {
267
- editArgs.push('--add-label', label);
268
- }
269
- hasEdits = true;
315
+ patchBody.labels = data.labels;
316
+ hasPatch = true;
270
317
  }
271
- if (hasEdits) {
272
- await ghExec(editArgs, this.cwd);
318
+ if (hasPatch) {
319
+ await this.api.rest('PATCH', `/repos/${this.owner}/${this.repo}/issues/${id}`, patchBody);
273
320
  }
274
321
  return this.getWorkItem(id);
275
322
  }
276
323
  async deleteWorkItem(id) {
277
- await ghExec(['issue', 'delete', id, '--yes'], this.cwd);
324
+ const nodeId = await this.getIssueNodeId(Number(id));
325
+ await this.api.graphql(DELETE_ISSUE_MUTATION, { issueId: nodeId });
278
326
  }
279
327
  async addComment(workItemId, comment) {
280
- await ghExec(['issue', 'comment', workItemId, '--body', comment.body], this.cwd);
328
+ await this.api.rest('POST', `/repos/${this.owner}/${this.repo}/issues/${workItemId}/comments`, { body: comment.body });
281
329
  return {
282
330
  author: comment.author,
283
331
  date: new Date().toISOString(),
@@ -285,11 +333,11 @@ export class GitHubBackend extends BaseBackend {
285
333
  };
286
334
  }
287
335
  getItemUrl(id) {
288
- const result = ghSync(['issue', 'view', id, '--json', 'url'], this.cwd);
289
- return result.url;
336
+ return `https://github.com/${this.owner}/${this.repo}/issues/${id}`;
290
337
  }
291
338
  async openItem(id) {
292
- await ghExec(['issue', 'view', id, '--web'], this.cwd);
339
+ const url = this.getItemUrl(id);
340
+ await open(url);
293
341
  }
294
342
  /* eslint-disable @typescript-eslint/require-await, @typescript-eslint/no-unused-vars */
295
343
  async listTemplates() {
@@ -309,33 +357,27 @@ export class GitHubBackend extends BaseBackend {
309
357
  }
310
358
  /* eslint-enable @typescript-eslint/require-await, @typescript-eslint/no-unused-vars */
311
359
  async getIssueNodeId(issueNumber) {
312
- const { owner, repo } = await this.getOwnerRepo();
313
- const data = await ghGraphQL(GET_ISSUE_NODE_ID_QUERY, { owner, repo, number: issueNumber }, this.cwd);
360
+ const data = await this.api.graphql(GET_ISSUE_NODE_ID_QUERY, { owner: this.owner, repo: this.repo, number: issueNumber });
314
361
  return data.repository.issue.id;
315
362
  }
316
363
  async addSubIssue(parentNumber, childNumber) {
317
364
  const parentId = await this.getIssueNodeId(Number(parentNumber));
318
365
  const childId = await this.getIssueNodeId(Number(childNumber));
319
- await ghGraphQL(ADD_SUB_ISSUE_MUTATION, { parentId, childId }, this.cwd);
366
+ await this.api.graphql(ADD_SUB_ISSUE_MUTATION, { parentId, childId });
320
367
  }
321
368
  async removeSubIssue(parentNumber, childNumber) {
322
369
  const parentId = await this.getIssueNodeId(Number(parentNumber));
323
370
  const childId = await this.getIssueNodeId(Number(childNumber));
324
- await ghGraphQL(REMOVE_SUB_ISSUE_MUTATION, { parentId, childId }, this.cwd);
325
- }
326
- async getOwnerRepo() {
327
- if (!this.ownerRepo) {
328
- const nwo = await this.getRepoNwo();
329
- const [owner, repo] = nwo.split('/');
330
- this.ownerRepo = { owner: owner, repo: repo };
331
- }
332
- return this.ownerRepo;
371
+ await this.api.graphql(REMOVE_SUB_ISSUE_MUTATION, { parentId, childId });
333
372
  }
334
373
  async fetchMilestones() {
335
374
  if (this.cachedMilestones)
336
375
  return this.cachedMilestones;
337
- const { owner, repo } = await this.getOwnerRepo();
338
- this.cachedMilestones = await gh(['api', `repos/${owner}/${repo}/milestones`, '--jq', '.'], this.cwd);
376
+ const milestones = [];
377
+ for await (const page of this.api.paginate(`/repos/${this.owner}/${this.repo}/milestones`)) {
378
+ milestones.push(...page);
379
+ }
380
+ this.cachedMilestones = milestones;
339
381
  return this.cachedMilestones;
340
382
  }
341
383
  async fetchOpenMilestones() {
@@ -352,9 +394,5 @@ export class GitHubBackend extends BaseBackend {
352
394
  return a.due_on.localeCompare(b.due_on);
353
395
  });
354
396
  }
355
- async getRepoNwo() {
356
- const result = await gh(['repo', 'view', '--json', 'nameWithOwner'], this.cwd);
357
- return result.nameWithOwner;
358
- }
359
397
  }
360
398
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/github/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/github/index.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ export interface GhComment {
34
34
  body: string;
35
35
  }
36
36
  export interface GhMilestone {
37
+ number: number;
37
38
  title: string;
38
39
  state: string;
39
40
  due_on: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../src/backends/github/mappers.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO;QACL,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK;QAC9B,IAAI,EAAE,SAAS,CAAC,SAAS;QACzB,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QAC/B,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;QACpD,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACzC,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,OAAO,CAAC,SAAS;QAC1B,OAAO,EAAE,OAAO,CAAC,SAAS;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7D,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;KAC1D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../src/backends/github/mappers.ts"],"names":[],"mappings":"AA6BA,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO;QACL,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK;QAC9B,IAAI,EAAE,SAAS,CAAC,SAAS;QACzB,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QAC/B,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;QACpD,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACzC,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,OAAO,CAAC,SAAS;QAC1B,OAAO,EAAE,OAAO,CAAC,SAAS;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7D,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;KAC1D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare class AuthError extends Error {
2
+ constructor(message?: string);
3
+ }
4
+ export declare class RateLimitError extends Error {
5
+ resetAt: Date;
6
+ constructor(resetAt: Date, message?: string);
7
+ }
8
+ export declare abstract class BaseApiClient {
9
+ protected token: string;
10
+ protected baseUrl: string;
11
+ constructor(token: string, baseUrl: string);
12
+ protected fetch<T>(method: string, path: string, body?: unknown): Promise<T>;
13
+ protected retry<T>(fn: () => Promise<T>): Promise<T>;
14
+ protected checkRateLimit(headers: Headers): void;
15
+ abstract paginate<T>(path: string): AsyncGenerator<T[]>;
16
+ }
@@ -0,0 +1,73 @@
1
+ export class AuthError extends Error {
2
+ constructor(message = 'Authentication failed') {
3
+ super(message);
4
+ this.name = 'AuthError';
5
+ }
6
+ }
7
+ export class RateLimitError extends Error {
8
+ resetAt;
9
+ constructor(resetAt, message = 'Rate limit exceeded') {
10
+ super(message);
11
+ this.name = 'RateLimitError';
12
+ this.resetAt = resetAt;
13
+ }
14
+ }
15
+ export class BaseApiClient {
16
+ token;
17
+ baseUrl;
18
+ constructor(token, baseUrl) {
19
+ this.token = token;
20
+ this.baseUrl = baseUrl;
21
+ }
22
+ async fetch(method, path, body) {
23
+ const url = this.baseUrl + path;
24
+ const headers = {
25
+ Authorization: `Bearer ${this.token}`,
26
+ Accept: 'application/json',
27
+ };
28
+ const init = { method, headers };
29
+ if (body !== undefined && ['POST', 'PATCH', 'PUT'].includes(method)) {
30
+ headers['Content-Type'] = 'application/json';
31
+ init.body = JSON.stringify(body);
32
+ }
33
+ const response = await globalThis.fetch(url, init);
34
+ this.checkRateLimit(response.headers);
35
+ if (response.status === 401) {
36
+ throw new AuthError();
37
+ }
38
+ if (response.status === 403) {
39
+ const remaining = response.headers.get('X-RateLimit-Remaining');
40
+ const reset = response.headers.get('X-RateLimit-Reset');
41
+ if (remaining === '0' && reset) {
42
+ throw new RateLimitError(new Date(Number(reset) * 1000));
43
+ }
44
+ }
45
+ if (!response.ok) {
46
+ const text = await response.text();
47
+ throw new Error(`HTTP ${response.status}: ${text}`);
48
+ }
49
+ return (await response.json());
50
+ }
51
+ async retry(fn) {
52
+ try {
53
+ return await fn();
54
+ }
55
+ catch (error) {
56
+ if (error instanceof AuthError || error instanceof RateLimitError) {
57
+ throw error;
58
+ }
59
+ if (error instanceof Error && error.message.startsWith('HTTP 5')) {
60
+ await new Promise((resolve) => setTimeout(resolve, 1000));
61
+ return await fn();
62
+ }
63
+ throw error;
64
+ }
65
+ }
66
+ checkRateLimit(headers) {
67
+ const remaining = headers.get('X-RateLimit-Remaining');
68
+ if (remaining !== null && Number(remaining) < 100) {
69
+ console.warn(`API rate limit warning: ${remaining} requests remaining`);
70
+ }
71
+ }
72
+ }
73
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/backends/shared/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Authenticate with a backend provider using the device code flow.
3
+ * Currently supports: github
4
+ */
5
+ export declare function runAuthLogin(provider: string): Promise<string>;
6
+ /**
7
+ * Return authentication status for all known providers.
8
+ */
9
+ export declare function runAuthStatus(): {
10
+ provider: string;
11
+ authenticated: boolean;
12
+ }[];
13
+ /**
14
+ * Remove stored credentials for a provider.
15
+ * Currently supports: github
16
+ */
17
+ export declare function runAuthLogout(provider: string): void;
@@ -0,0 +1,47 @@
1
+ import { authenticateGitHub, clearGitHubToken, GITHUB_ACCOUNT, } from '../../auth/github.js';
2
+ import { getToken } from '../../auth/keychain.js';
3
+ const VALID_PROVIDERS = ['github'];
4
+ function assertProvider(provider) {
5
+ if (!VALID_PROVIDERS.includes(provider)) {
6
+ throw new Error(`Unknown provider "${provider}". Valid providers: ${VALID_PROVIDERS.join(', ')}`);
7
+ }
8
+ }
9
+ /**
10
+ * Authenticate with a backend provider using the device code flow.
11
+ * Currently supports: github
12
+ */
13
+ export async function runAuthLogin(provider) {
14
+ assertProvider(provider);
15
+ switch (provider) {
16
+ case 'github':
17
+ return authenticateGitHub({
18
+ onCode(userCode, verificationUri) {
19
+ console.log(`Open ${verificationUri} and enter code: ${userCode}`);
20
+ },
21
+ });
22
+ }
23
+ }
24
+ /**
25
+ * Return authentication status for all known providers.
26
+ */
27
+ export function runAuthStatus() {
28
+ return [
29
+ {
30
+ provider: 'github',
31
+ authenticated: getToken(GITHUB_ACCOUNT) !== null,
32
+ },
33
+ ];
34
+ }
35
+ /**
36
+ * Remove stored credentials for a provider.
37
+ * Currently supports: github
38
+ */
39
+ export function runAuthLogout(provider) {
40
+ assertProvider(provider);
41
+ switch (provider) {
42
+ case 'github':
43
+ clearGitHubToken();
44
+ break;
45
+ }
46
+ }
47
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAU,CAAC;AAG5C,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAoB,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,uBAAuB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC;gBACxB,MAAM,CAAC,QAAQ,EAAE,eAAe;oBAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,eAAe,oBAAoB,QAAQ,EAAE,CAAC,CAAC;gBACrE,CAAC;aACF,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAI3B,OAAO;QACL;YACE,QAAQ,EAAE,QAAQ;YAClB,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI;SACjD;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,gBAAgB,EAAE,CAAC;YACnB,MAAM;IACV,CAAC;AACH,CAAC"}
@@ -2,7 +2,8 @@ import { VERSION } from '../../version.js';
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { z } from 'zod';
5
- import { createBackendWithSync, VALID_BACKENDS, } from '../../backends/factory.js';
5
+ import { createBackend, createBackendWithSync, VALID_BACKENDS, } from '../../backends/factory.js';
6
+ import { AuthError } from '../../backends/shared/api-client.js';
6
7
  import { configStore } from '../../stores/configStore.js';
7
8
  import fs from 'node:fs';
8
9
  import path from 'node:path';
@@ -490,10 +491,22 @@ export async function startMcpServer() {
490
491
  let backend = null;
491
492
  const syncState = { syncManager: null, queue: null };
492
493
  if (isTicProject(root)) {
493
- const setup = await createBackendWithSync(root);
494
- backend = setup.backend;
495
- syncState.syncManager = setup.syncManager;
496
- syncState.queue = setup.queue;
494
+ try {
495
+ const setup = await createBackendWithSync(root, { skipAuth: true });
496
+ backend = setup.backend;
497
+ syncState.syncManager = setup.syncManager;
498
+ syncState.queue = setup.queue;
499
+ }
500
+ catch (err) {
501
+ if (err instanceof AuthError) {
502
+ // Remote backend requires auth — fall back to local-only so local operations still work
503
+ console.error(err.message);
504
+ backend = await createBackend(root);
505
+ }
506
+ else {
507
+ throw err;
508
+ }
509
+ }
497
510
  }
498
511
  const pendingDeletes = createDeleteTracker();
499
512
  const guardedBackend = new Proxy({}, {
@@ -508,10 +521,20 @@ export async function startMcpServer() {
508
521
  server.tool('init_project', 'Initialize a new tic project', async () => {
509
522
  const result = await handleInitProject(root);
510
523
  if (!result.isError && !backend && isTicProject(root)) {
511
- const setup = await createBackendWithSync(root);
512
- backend = setup.backend;
513
- syncState.syncManager = setup.syncManager;
514
- syncState.queue = setup.queue;
524
+ try {
525
+ const setup = await createBackendWithSync(root, { skipAuth: true });
526
+ backend = setup.backend;
527
+ syncState.syncManager = setup.syncManager;
528
+ syncState.queue = setup.queue;
529
+ }
530
+ catch (err) {
531
+ if (err instanceof AuthError) {
532
+ // Remote backend requires auth — fall back to local-only
533
+ backend = await createBackend(root);
534
+ return error(err.message);
535
+ }
536
+ throw err;
537
+ }
515
538
  }
516
539
  return result;
517
540
  });