@ginkoai/cli 2.2.1 → 2.4.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 (77) hide show
  1. package/dist/commands/charter.d.ts.map +1 -1
  2. package/dist/commands/charter.js +5 -80
  3. package/dist/commands/charter.js.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +100 -36
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/create.d.ts.map +1 -1
  8. package/dist/commands/create.js +4 -9
  9. package/dist/commands/create.js.map +1 -1
  10. package/dist/commands/epic/index.js +7 -7
  11. package/dist/commands/epic/index.js.map +1 -1
  12. package/dist/commands/epic.d.ts +2 -2
  13. package/dist/commands/epic.d.ts.map +1 -1
  14. package/dist/commands/epic.js +7 -276
  15. package/dist/commands/epic.js.map +1 -1
  16. package/dist/commands/graph/api-client.d.ts +85 -99
  17. package/dist/commands/graph/api-client.d.ts.map +1 -1
  18. package/dist/commands/graph/api-client.js +27 -56
  19. package/dist/commands/graph/api-client.js.map +1 -1
  20. package/dist/commands/graph/cleanup.d.ts +23 -0
  21. package/dist/commands/graph/cleanup.d.ts.map +1 -0
  22. package/dist/commands/graph/cleanup.js +241 -0
  23. package/dist/commands/graph/cleanup.js.map +1 -0
  24. package/dist/commands/graph/index.d.ts.map +1 -1
  25. package/dist/commands/graph/index.js +13 -0
  26. package/dist/commands/graph/index.js.map +1 -1
  27. package/dist/commands/graph/init.d.ts.map +1 -1
  28. package/dist/commands/graph/init.js +2 -10
  29. package/dist/commands/graph/init.js.map +1 -1
  30. package/dist/commands/graph/load.d.ts +10 -15
  31. package/dist/commands/graph/load.d.ts.map +1 -1
  32. package/dist/commands/graph/load.js +13 -280
  33. package/dist/commands/graph/load.js.map +1 -1
  34. package/dist/commands/init.d.ts.map +1 -1
  35. package/dist/commands/init.js +19 -6
  36. package/dist/commands/init.js.map +1 -1
  37. package/dist/commands/login.d.ts.map +1 -1
  38. package/dist/commands/login.js +16 -0
  39. package/dist/commands/login.js.map +1 -1
  40. package/dist/commands/project/create.d.ts.map +1 -1
  41. package/dist/commands/project/create.js +3 -0
  42. package/dist/commands/project/create.js.map +1 -1
  43. package/dist/commands/push/push-command.d.ts.map +1 -1
  44. package/dist/commands/push/push-command.js +83 -3
  45. package/dist/commands/push/push-command.js.map +1 -1
  46. package/dist/commands/sprint/create.js +1 -1
  47. package/dist/commands/sprint/create.js.map +1 -1
  48. package/dist/commands/start/start-reflection.d.ts +8 -0
  49. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  50. package/dist/commands/start/start-reflection.js +22 -0
  51. package/dist/commands/start/start-reflection.js.map +1 -1
  52. package/dist/commands/sync/sync-command.d.ts.map +1 -1
  53. package/dist/commands/sync/sync-command.js +12 -4
  54. package/dist/commands/sync/sync-command.js.map +1 -1
  55. package/dist/commands/task/status.d.ts.map +1 -1
  56. package/dist/commands/task/status.js +38 -4
  57. package/dist/commands/task/status.js.map +1 -1
  58. package/dist/lib/sync-state.d.ts +7 -0
  59. package/dist/lib/sync-state.d.ts.map +1 -1
  60. package/dist/lib/sync-state.js +11 -0
  61. package/dist/lib/sync-state.js.map +1 -1
  62. package/dist/lib/task-parser.d.ts.map +1 -1
  63. package/dist/lib/task-parser.js +33 -2
  64. package/dist/lib/task-parser.js.map +1 -1
  65. package/dist/lib/write-dispatcher/adapters/graph-adapter.d.ts +14 -5
  66. package/dist/lib/write-dispatcher/adapters/graph-adapter.d.ts.map +1 -1
  67. package/dist/lib/write-dispatcher/adapters/graph-adapter.js +43 -8
  68. package/dist/lib/write-dispatcher/adapters/graph-adapter.js.map +1 -1
  69. package/dist/templates/epic-template.md +22 -20
  70. package/dist/utils/config-loader.d.ts.map +1 -1
  71. package/dist/utils/config-loader.js +19 -5
  72. package/dist/utils/config-loader.js.map +1 -1
  73. package/dist/utils/identity.d.ts +40 -0
  74. package/dist/utils/identity.d.ts.map +1 -0
  75. package/dist/utils/identity.js +92 -0
  76. package/dist/utils/identity.js.map +1 -0
  77. package/package.json +1 -1
@@ -17,14 +17,14 @@
17
17
  *
18
18
  * Environment Variables:
19
19
  * - GINKO_GRAPH_ENABLED: 'true' to enable graph writes
20
- * - GINKO_GRAPH_API_URL: Graph API endpoint (default: https://mcp.ginko.ai)
20
+ * - GINKO_GRAPH_API_URL: Graph API endpoint (default: https://app.ginkoai.com)
21
21
  * - GINKO_GRAPH_TOKEN: Bearer token for authentication
22
22
  * - GINKO_GRAPH_ID: Graph ID for user's namespace
23
23
  *
24
24
  * Usage:
25
25
  * ```typescript
26
26
  * const adapter = new GraphAdapter({
27
- * apiUrl: process.env.GINKO_GRAPH_API_URL || 'https://mcp.ginko.ai',
27
+ * apiUrl: process.env.GINKO_GRAPH_API_URL || 'https://app.ginkoai.com',
28
28
  * bearerToken: process.env.GINKO_GRAPH_TOKEN || '',
29
29
  * graphId: process.env.GINKO_GRAPH_ID || ''
30
30
  * });
@@ -39,20 +39,34 @@ export class GraphAdapter {
39
39
  this.config = {
40
40
  apiUrl: config.apiUrl,
41
41
  bearerToken: config.bearerToken,
42
+ tokenResolver: config.tokenResolver,
42
43
  graphId: config.graphId,
43
44
  timeout: config.timeout || 10000,
44
45
  };
45
46
  }
47
+ /**
48
+ * Resolve the bearer token at call time.
49
+ * Prefers tokenResolver (lazy) over static bearerToken.
50
+ */
51
+ async resolveToken() {
52
+ if (this.config.tokenResolver) {
53
+ const token = await this.config.tokenResolver();
54
+ if (token)
55
+ return token;
56
+ }
57
+ return this.config.bearerToken || '';
58
+ }
46
59
  /**
47
60
  * Check if adapter is enabled.
48
- * Enabled when config has valid bearerToken + graphId.
61
+ * Enabled when config has a token source (static or resolver) + graphId.
49
62
  * GINKO_GRAPH_ENABLED=false can explicitly disable (opt-out override).
50
63
  */
51
64
  enabled() {
52
65
  if (process.env.GINKO_GRAPH_ENABLED === 'false') {
53
66
  return false;
54
67
  }
55
- return !!this.config.bearerToken && !!this.config.graphId;
68
+ const hasTokenSource = !!this.config.bearerToken || !!this.config.tokenResolver;
69
+ return hasTokenSource && !!this.config.graphId;
56
70
  }
57
71
  /**
58
72
  * Write knowledge document to graph via REST API
@@ -77,10 +91,12 @@ export class GraphAdapter {
77
91
  }
78
92
  }
79
93
  /**
80
- * Create node in graph via REST API
94
+ * Create node in graph via REST API.
95
+ * Uses lazy token resolution and retries once on 401/403 with a fresh token.
81
96
  */
82
- async createNode(label, data) {
97
+ async createNode(label, data, isRetry = false) {
83
98
  const url = `${this.config.apiUrl}/api/v1/graph/nodes`;
99
+ const bearerToken = await this.resolveToken();
84
100
  const payload = {
85
101
  graphId: this.config.graphId,
86
102
  label,
@@ -99,7 +115,7 @@ export class GraphAdapter {
99
115
  method: 'POST',
100
116
  headers: {
101
117
  'Content-Type': 'application/json',
102
- 'Authorization': `Bearer ${this.config.bearerToken}`,
118
+ 'Authorization': `Bearer ${bearerToken}`,
103
119
  },
104
120
  body: JSON.stringify(payload),
105
121
  signal: controller.signal,
@@ -108,6 +124,10 @@ export class GraphAdapter {
108
124
  clearTimeout(timeoutId);
109
125
  if (!response.ok) {
110
126
  const errorBody = await response.text().catch(() => 'Unknown error');
127
+ // Retry once on 401/403 with a fresh token (token may have been refreshed on disk)
128
+ if ((response.status === 401 || response.status === 403) && !isRetry) {
129
+ return this.createNode(label, data, true);
130
+ }
111
131
  throw new Error(`HTTP ${response.status}: ${errorBody}`);
112
132
  }
113
133
  const result = await response.json();
@@ -193,10 +213,24 @@ export async function createGraphAdapterFromEnv() {
193
213
  // Config not available - continue with env vars only
194
214
  }
195
215
  }
216
+ // Use lazy token resolver instead of loading token once at creation time.
217
+ // This ensures the adapter always uses the freshest token from disk,
218
+ // matching the pattern that works in GraphApiClient.requireAuth().
219
+ let tokenResolver;
196
220
  if (!bearerToken) {
197
221
  try {
198
222
  const { getAccessToken } = await import('../../../utils/auth-storage.js');
199
- bearerToken = await getAccessToken() || '';
223
+ // Try to load once to validate auth is available
224
+ const initialToken = await getAccessToken();
225
+ if (initialToken) {
226
+ // Set up lazy resolver for future calls
227
+ tokenResolver = async () => {
228
+ const { getAccessToken: getToken } = await import('../../../utils/auth-storage.js');
229
+ return getToken();
230
+ };
231
+ // Also set static token for enabled() check
232
+ bearerToken = initialToken;
233
+ }
200
234
  }
201
235
  catch {
202
236
  // Auth not available - continue without token
@@ -208,6 +242,7 @@ export async function createGraphAdapterFromEnv() {
208
242
  return new GraphAdapter({
209
243
  apiUrl,
210
244
  bearerToken,
245
+ tokenResolver,
211
246
  graphId,
212
247
  timeout: parseInt(process.env.GINKO_GRAPH_TIMEOUT || '10000', 10),
213
248
  });
@@ -1 +1 @@
1
- {"version":3,"file":"graph-adapter.js","sourceRoot":"","sources":["../../../../src/lib/write-dispatcher/adapters/graph-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph-adapter.js","sourceRoot":"","sources":["../../../../src/lib/write-dispatcher/adapters/graph-adapter.ts"],"names":[],"mappings":"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"}
@@ -93,19 +93,21 @@
93
93
  **Ask:** "For each sprint, what are the specific tasks? Let's estimate effort."
94
94
 
95
95
  **For each task, capture:**
96
- - Task ID and title
96
+ - Task ID and title (MUST use canonical format: `eNNN_sNN_tNN`)
97
97
  - Effort estimate (hours or t-shirt size)
98
98
  - Priority (HIGH/MEDIUM/LOW)
99
99
  - Key files to modify
100
100
  - Related ADRs/patterns/gotchas
101
101
 
102
- **Example:**
103
- > **TASK-1: Design Graph Schema (4h)**
102
+ **CRITICAL: Task IDs must be globally unique.** Use the format `eNNN_sNN_tNN` where NNN is the epic number, NN is the sprint number, and NN is the task number. Do NOT use `TASK-1`, `TASK-2` etc. — those collide across sprints.
103
+
104
+ **Example (for EPIC-005, Sprint 1):**
105
+ > **e005_s01_t01: Design Graph Schema (4h)**
104
106
  > Priority: HIGH
105
107
  > Files: src/graph/schema/patterns.cypher
106
108
  > Follow: ADR-002
107
109
  >
108
- > **TASK-2: Create Pattern API (8h)**
110
+ > **e005_s01_t02: Create Pattern API (8h)**
109
111
  > Priority: HIGH
110
112
  > Files: dashboard/src/app/api/v1/task/[id]/patterns/route.ts
111
113
  > Apply: retry-pattern
@@ -245,14 +247,18 @@ updated: YYYY-MM-DD
245
247
  - Participants: [user email], Claude
246
248
  ```
247
249
 
248
- ### Sprint Files: `docs/sprints/SPRINT-YYYY-MM-[epic]-sprint[N].md`
250
+ ### Sprint Files: `docs/sprints/SPRINT-YYYY-MM-eNNN-sNN-[title].md`
251
+
252
+ **IMPORTANT: Sprint filenames MUST include the canonical epic and sprint IDs.**
253
+ Example: `SPRINT-2026-02-e005-s01-core-infrastructure.md`
249
254
 
250
255
  ```markdown
251
- # SPRINT: [Epic Name] Sprint [N] - [Sprint Title]
256
+ # SPRINT: [Epic Name] Sprint [N] - [Sprint Title] (EPIC-NNN Sprint N)
252
257
 
253
258
  ## Sprint Overview
254
259
 
255
260
  **Sprint Goal**: [What this sprint achieves]
261
+ **ID:** eNNN_sNN
256
262
  **Duration**: [X weeks] (YYYY-MM-DD to YYYY-MM-DD)
257
263
  **Type**: [Infrastructure|Feature|Polish] sprint
258
264
  **Progress:** 0% (0/N tasks complete)
@@ -265,8 +271,9 @@ updated: YYYY-MM-DD
265
271
 
266
272
  ## Sprint Tasks
267
273
 
268
- ### TASK-1: [Task Title] ([Effort])
274
+ ### eNNN_sNN_t01: [Task Title] ([Effort])
269
275
  **Priority:** HIGH
276
+ **Status:** [ ]
270
277
 
271
278
  **Goal:** [What this task achieves]
272
279
 
@@ -282,8 +289,9 @@ Avoid: [gotcha-name]
282
289
 
283
290
  ---
284
291
 
285
- ### TASK-2: [Task Title] ([Effort])
292
+ ### eNNN_sNN_t02: [Task Title] ([Effort])
286
293
  **Priority:** MEDIUM
294
+ **Status:** [ ]
287
295
 
288
296
  ...
289
297
 
@@ -309,24 +317,18 @@ Avoid: [gotcha-name]
309
317
  After creating the epic and sprint files, **you must sync them to the graph** so they're available for team collaboration and tracking:
310
318
 
311
319
  ```bash
312
- ginko epic --sync
320
+ ginko push epic
313
321
  ```
314
322
 
315
323
  This will:
316
- - Create Epic node: `(:Epic {id, title, goal, status, progress})`
317
- - Create Sprint nodes: `(:Sprint {id, name, goal, progress})`
318
- - Create Task nodes: `(:Task {id, title, status, effort, priority})`
319
- - Establish relationships:
320
- - `(Epic)-[:CONTAINS]->(Sprint)`
321
- - `(Sprint)-[:CONTAINS]->(Task)`
322
- - `(Task)-[:MUST_FOLLOW]->(ADR)`
323
- - `(Task)-[:APPLIES_PATTERN]->(Pattern)`
324
- - `(Task)-[:AVOID_GOTCHA]->(Gotcha)`
324
+ - Upload Epic and Sprint documents to the graph
325
+ - Parse tasks from sprint files and create Task nodes
326
+ - Create BELONGS_TO relationships (Task→Sprint→Epic)
325
327
 
326
328
  **Complete workflow:**
327
329
  1. Create `docs/epics/EPIC-XXX-name.md` with epic content
328
- 2. Create `docs/sprints/SPRINT-*.md` files for each sprint
329
- 3. Run `ginko epic --sync` to sync everything to graph
330
+ 2. Create `docs/sprints/SPRINT-YYYY-MM-eNNN-sNN-title.md` files for each sprint
331
+ 3. Run `ginko push epic` to sync everything to graph
330
332
  4. Confirm sync success message
331
333
 
332
334
  ---
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAwB,MAAM,oBAAoB,CAAC;AAmBpF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAwE9D;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAuD5D;AAuCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9E;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAanE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAoCD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAetD"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAwB,MAAM,oBAAoB,CAAC;AAmBpF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAwE9D;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAuD5D;AAsDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9E;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAanE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAoCD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAetD"}
@@ -138,14 +138,28 @@ export async function loadLocalConfig() {
138
138
  * @returns LocalConfig object
139
139
  */
140
140
  async function createLocalConfig(projectRoot) {
141
- // Get user email from git config or use default
141
+ // Priority: (1) auth email from ~/.ginko/auth.json, (2) git config user.email, (3) default
142
142
  let userEmail = 'user@example.com';
143
+ // Try authenticated email first (ensures new projects default to correct identity)
143
144
  try {
144
- const { execSync } = await import('child_process');
145
- userEmail = execSync('git config user.email', { encoding: 'utf8' }).trim();
145
+ const { loadAuthSession } = await import('./auth-storage.js');
146
+ const session = await loadAuthSession();
147
+ if (session?.user?.email) {
148
+ userEmail = session.user.email;
149
+ }
150
+ }
151
+ catch {
152
+ // Auth not available - fall through to git
146
153
  }
147
- catch (e) {
148
- // Git not configured, use default
154
+ // Fall back to git config if auth didn't provide an email
155
+ if (userEmail === 'user@example.com') {
156
+ try {
157
+ const { execSync } = await import('child_process');
158
+ userEmail = execSync('git config user.email', { encoding: 'utf8' }).trim();
159
+ }
160
+ catch {
161
+ // Git not configured, use default
162
+ }
149
163
  }
150
164
  const userSlug = userEmail.replace('@', '-at-').replace(/\./g, '-');
151
165
  const localConfig = {
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAA4B,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,IAAI,WAAW,GAKX,EAAE,CAAC;AAEP;;GAEG;AACH,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,cAAc;IACd,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC;QAC/C,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;YACpB,OAAO,WAAW,CAAC,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,IAAI,WAAW,GAAG,MAAM,aAAa,EAAE,CAAC;IAExC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,uEAAuE;QACvE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE1D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,WAAW,GAAG,UAAU,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAE3D,yBAAyB;IACzB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAEhD,4BAA4B;YAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;YACJ,CAAC;YAED,mBAAmB;YACnB,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;YACjC,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;YACtC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEnC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC3E,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,OAAO,CAAC,IAAI,CACV,8DAA8D;QAC9D,iEAAiE,CAClE,CAAC;IAEF,sDAAsD;IACtD,MAAM,aAAa,GAAG,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAClD,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAExD,2BAA2B;IAC3B,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;IACxC,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IACtC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,cAAc;IACd,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC;QAC/C,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;YACpB,OAAO,WAAW,CAAC,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,IAAI,MAAM,aAAa,EAAE,CAAC;IAErE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEvE,yBAAyB;IACzB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAElD,qBAAqB;YACrB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;YACJ,CAAC;YAED,mBAAmB;YACnB,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;YACjC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEnC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC3E,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CACb,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEzD,uBAAuB;IACvB,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IACtC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,gDAAgD;IAChD,IAAI,SAAS,GAAG,kBAAkB,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACnD,SAAS,GAAG,QAAQ,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,kCAAkC;IACpC,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAgB;QAC/B,WAAW;QACX,SAAS;QACT,QAAQ;QACR,QAAQ,EAAE,aAAa;KACxB,CAAC;IAEF,iCAAiC;IACjC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErD,mBAAmB;IACnB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAC;IAEhE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,YAAoB;IAC3D,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,eAAe,EAAE;QACjB,iBAAiB,EAAE;KACpB,CAAC,CAAC;IAEH,gDAAgD;IAChD,IAAI,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,qEAAqE;IACrE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,eAAe,EAAE;QACjB,iBAAiB,EAAE;KACpB,CAAC,CAAC;IAEH,MAAM,aAAa,GAA2B,EAAE,CAAC;IAEjD,KAAK,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,WAAW,GAAG,EAAE,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IAKzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,aAAa,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEhD,6BAA6B;QAC7B,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAE9C,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAC/B,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAC7B,CAAC;gBAEF,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;oBACzC,QAAQ,CAAC,IAAI,CACX,SAAS,OAAO,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB;wBACtE,mDAAmD,CACpD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC,WAAW,CAAC;IACjC,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,aAAa,EAAE,CAAC;IAE1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IACtC,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2026-02-02
5
+ * @tags: [identity, auth, attribution, BUG-021]
6
+ * @related: [auth-storage.ts, config-loader.ts, config.ts]
7
+ * @priority: critical
8
+ * @complexity: low
9
+ * @dependencies: [fs-extra, chalk]
10
+ */
11
+ import { type AuthSession } from './auth-storage.js';
12
+ /**
13
+ * Confirm the user is authenticated and display who they're logged in as.
14
+ * Used by commands that create or join projects (init, create, join).
15
+ *
16
+ * @returns The authenticated session, or exits the process if not authenticated.
17
+ */
18
+ export declare function confirmAuthIdentity(commandName: string): Promise<AuthSession>;
19
+ /**
20
+ * Get the authenticated identity if available, without exiting.
21
+ * Returns the auth session if authenticated, null otherwise.
22
+ *
23
+ * Used by commands like `ginko init` that prefer auth identity
24
+ * but can fall back to git config with a warning.
25
+ */
26
+ export declare function getAuthIdentity(): Promise<AuthSession | null>;
27
+ /**
28
+ * Sync .ginko/local.json identity to match the authenticated account.
29
+ *
30
+ * Called on `ginko start` (auto-fix) and `ginko login` (proactive sync).
31
+ * If local.json doesn't exist or the project isn't initialized, this is a no-op.
32
+ *
33
+ * @returns true if local.json was updated, false if already in sync or no local.json
34
+ */
35
+ export declare function syncLocalIdentity(ginkoDir: string): Promise<{
36
+ updated: boolean;
37
+ oldEmail?: string;
38
+ newEmail?: string;
39
+ }>;
40
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/utils/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEtE;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAcnF;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAQnE;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgC7H"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2026-02-02
5
+ * @tags: [identity, auth, attribution, BUG-021]
6
+ * @related: [auth-storage.ts, config-loader.ts, config.ts]
7
+ * @priority: critical
8
+ * @complexity: low
9
+ * @dependencies: [fs-extra, chalk]
10
+ */
11
+ /**
12
+ * Identity Utilities (BUG-021)
13
+ *
14
+ * Ginko identity is tied to GitHub auth. Within a project, the git identity
15
+ * and ginko identity must agree to preserve traceability. The ginko
16
+ * authenticated account is authoritative.
17
+ *
18
+ * - ~/.ginko/auth.json → authentication + authoritative identity
19
+ * - .ginko/local.json → project-local attribution (must match auth)
20
+ *
21
+ * A user may use a different account for another project, but within any
22
+ * single project the identities must agree.
23
+ */
24
+ import fs from 'fs-extra';
25
+ import path from 'path';
26
+ import chalk from 'chalk';
27
+ import { loadAuthSession } from './auth-storage.js';
28
+ /**
29
+ * Confirm the user is authenticated and display who they're logged in as.
30
+ * Used by commands that create or join projects (init, create, join).
31
+ *
32
+ * @returns The authenticated session, or exits the process if not authenticated.
33
+ */
34
+ export async function confirmAuthIdentity(commandName) {
35
+ const session = await loadAuthSession();
36
+ if (!session?.user?.email) {
37
+ console.log(chalk.red('\n✗ Authentication required'));
38
+ console.log(chalk.dim(` You must be logged in to run \`ginko ${commandName}\``));
39
+ console.log(chalk.dim(' Run `ginko login` to authenticate with GitHub\n'));
40
+ process.exit(1);
41
+ }
42
+ const displayName = session.user.full_name || session.user.github_username || session.user.email;
43
+ console.log(chalk.dim(` Authenticated as: ${displayName} (${session.user.email})`));
44
+ return session;
45
+ }
46
+ /**
47
+ * Get the authenticated identity if available, without exiting.
48
+ * Returns the auth session if authenticated, null otherwise.
49
+ *
50
+ * Used by commands like `ginko init` that prefer auth identity
51
+ * but can fall back to git config with a warning.
52
+ */
53
+ export async function getAuthIdentity() {
54
+ const session = await loadAuthSession();
55
+ if (!session?.user?.email) {
56
+ return null;
57
+ }
58
+ return session;
59
+ }
60
+ /**
61
+ * Sync .ginko/local.json identity to match the authenticated account.
62
+ *
63
+ * Called on `ginko start` (auto-fix) and `ginko login` (proactive sync).
64
+ * If local.json doesn't exist or the project isn't initialized, this is a no-op.
65
+ *
66
+ * @returns true if local.json was updated, false if already in sync or no local.json
67
+ */
68
+ export async function syncLocalIdentity(ginkoDir) {
69
+ const localFile = path.join(ginkoDir, 'local.json');
70
+ if (!await fs.pathExists(localFile)) {
71
+ return { updated: false };
72
+ }
73
+ const session = await loadAuthSession();
74
+ if (!session?.user?.email) {
75
+ return { updated: false };
76
+ }
77
+ const localConfig = await fs.readJson(localFile);
78
+ const localEmail = localConfig.userEmail;
79
+ const authEmail = session.user.email;
80
+ if (localEmail && localEmail.toLowerCase() === authEmail.toLowerCase()) {
81
+ return { updated: false };
82
+ }
83
+ const oldEmail = localEmail;
84
+ const newSlug = authEmail.replace('@', '-at-').replace(/\./g, '-');
85
+ localConfig.userEmail = authEmail;
86
+ localConfig.userSlug = newSlug;
87
+ // Clean up the suppress flag — it's no longer relevant
88
+ delete localConfig.suppressIdentityWarning;
89
+ await fs.writeJson(localFile, localConfig, { spaces: 2 });
90
+ return { updated: true, oldEmail, newEmail: authEmail };
91
+ }
92
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/utils/identity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ginkoai/cli",
3
- "version": "2.2.1",
3
+ "version": "2.4.0",
4
4
  "description": "Git-native session management and cloud context for AI-mediated development. AI Collaboration for Vibe Tribes.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {