@ginkoai/cli 1.7.2 → 2.0.0-beta.2

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 (101) hide show
  1. package/dist/commands/assign.d.ts +19 -0
  2. package/dist/commands/assign.d.ts.map +1 -0
  3. package/dist/commands/assign.js +200 -0
  4. package/dist/commands/assign.js.map +1 -0
  5. package/dist/commands/epic.d.ts.map +1 -1
  6. package/dist/commands/epic.js +48 -23
  7. package/dist/commands/epic.js.map +1 -1
  8. package/dist/commands/graph/api-client.d.ts +1 -0
  9. package/dist/commands/graph/api-client.d.ts.map +1 -1
  10. package/dist/commands/graph/api-client.js.map +1 -1
  11. package/dist/commands/insights/index.d.ts +12 -0
  12. package/dist/commands/insights/index.d.ts.map +1 -0
  13. package/dist/commands/insights/index.js +12 -0
  14. package/dist/commands/insights/index.js.map +1 -0
  15. package/dist/commands/insights/insights-command.d.ts +20 -0
  16. package/dist/commands/insights/insights-command.d.ts.map +1 -0
  17. package/dist/commands/insights/insights-command.js +369 -0
  18. package/dist/commands/insights/insights-command.js.map +1 -0
  19. package/dist/commands/principles/seed.d.ts +26 -0
  20. package/dist/commands/principles/seed.d.ts.map +1 -0
  21. package/dist/commands/principles/seed.js +150 -0
  22. package/dist/commands/principles/seed.js.map +1 -0
  23. package/dist/commands/start/start-reflection.d.ts +11 -0
  24. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  25. package/dist/commands/start/start-reflection.js +149 -16
  26. package/dist/commands/start/start-reflection.js.map +1 -1
  27. package/dist/commands/sync/index.d.ts +21 -0
  28. package/dist/commands/sync/index.d.ts.map +1 -0
  29. package/dist/commands/sync/index.js +38 -0
  30. package/dist/commands/sync/index.js.map +1 -0
  31. package/dist/commands/sync/node-syncer.d.ts +58 -0
  32. package/dist/commands/sync/node-syncer.d.ts.map +1 -0
  33. package/dist/commands/sync/node-syncer.js +192 -0
  34. package/dist/commands/sync/node-syncer.js.map +1 -0
  35. package/dist/commands/sync/sprint-syncer.d.ts +42 -0
  36. package/dist/commands/sync/sprint-syncer.d.ts.map +1 -0
  37. package/dist/commands/sync/sprint-syncer.js +274 -0
  38. package/dist/commands/sync/sprint-syncer.js.map +1 -0
  39. package/dist/commands/sync/sync-command.d.ts +16 -0
  40. package/dist/commands/sync/sync-command.d.ts.map +1 -0
  41. package/dist/commands/sync/sync-command.js +429 -0
  42. package/dist/commands/sync/sync-command.js.map +1 -0
  43. package/dist/commands/sync/types.d.ts +86 -0
  44. package/dist/commands/sync/types.d.ts.map +1 -0
  45. package/dist/commands/sync/types.js +12 -0
  46. package/dist/commands/sync/types.js.map +1 -0
  47. package/dist/core/session-log-manager.d.ts +3 -1
  48. package/dist/core/session-log-manager.d.ts.map +1 -1
  49. package/dist/core/session-log-manager.js +5 -3
  50. package/dist/core/session-log-manager.js.map +1 -1
  51. package/dist/data/standard-principles.d.ts +43 -0
  52. package/dist/data/standard-principles.d.ts.map +1 -0
  53. package/dist/data/standard-principles.js +323 -0
  54. package/dist/data/standard-principles.js.map +1 -0
  55. package/dist/index.js +54 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/insights/analyzers/anti-patterns.d.ts +32 -0
  58. package/dist/lib/insights/analyzers/anti-patterns.d.ts.map +1 -0
  59. package/dist/lib/insights/analyzers/anti-patterns.js +302 -0
  60. package/dist/lib/insights/analyzers/anti-patterns.js.map +1 -0
  61. package/dist/lib/insights/analyzers/efficiency.d.ts +22 -0
  62. package/dist/lib/insights/analyzers/efficiency.d.ts.map +1 -0
  63. package/dist/lib/insights/analyzers/efficiency.js +311 -0
  64. package/dist/lib/insights/analyzers/efficiency.js.map +1 -0
  65. package/dist/lib/insights/analyzers/index.d.ts +24 -0
  66. package/dist/lib/insights/analyzers/index.d.ts.map +1 -0
  67. package/dist/lib/insights/analyzers/index.js +37 -0
  68. package/dist/lib/insights/analyzers/index.js.map +1 -0
  69. package/dist/lib/insights/analyzers/patterns.d.ts +21 -0
  70. package/dist/lib/insights/analyzers/patterns.d.ts.map +1 -0
  71. package/dist/lib/insights/analyzers/patterns.js +337 -0
  72. package/dist/lib/insights/analyzers/patterns.js.map +1 -0
  73. package/dist/lib/insights/analyzers/quality.d.ts +29 -0
  74. package/dist/lib/insights/analyzers/quality.d.ts.map +1 -0
  75. package/dist/lib/insights/analyzers/quality.js +371 -0
  76. package/dist/lib/insights/analyzers/quality.js.map +1 -0
  77. package/dist/lib/insights/data-collector.d.ts +68 -0
  78. package/dist/lib/insights/data-collector.d.ts.map +1 -0
  79. package/dist/lib/insights/data-collector.js +514 -0
  80. package/dist/lib/insights/data-collector.js.map +1 -0
  81. package/dist/lib/insights/index.d.ts +14 -0
  82. package/dist/lib/insights/index.d.ts.map +1 -0
  83. package/dist/lib/insights/index.js +17 -0
  84. package/dist/lib/insights/index.js.map +1 -0
  85. package/dist/lib/insights/scheduler.d.ts +71 -0
  86. package/dist/lib/insights/scheduler.d.ts.map +1 -0
  87. package/dist/lib/insights/scheduler.js +126 -0
  88. package/dist/lib/insights/scheduler.js.map +1 -0
  89. package/dist/lib/insights/types.d.ts +216 -0
  90. package/dist/lib/insights/types.d.ts.map +1 -0
  91. package/dist/lib/insights/types.js +12 -0
  92. package/dist/lib/insights/types.js.map +1 -0
  93. package/dist/templates/ai-instructions-template.d.ts +1 -0
  94. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  95. package/dist/templates/ai-instructions-template.js +51 -0
  96. package/dist/templates/ai-instructions-template.js.map +1 -1
  97. package/package.json +1 -1
  98. package/dist/lib/__tests__/task-timeout.test.d.ts +0 -12
  99. package/dist/lib/__tests__/task-timeout.test.d.ts.map +0 -1
  100. package/dist/lib/__tests__/task-timeout.test.js +0 -278
  101. package/dist/lib/__tests__/task-timeout.test.js.map +0 -1
@@ -0,0 +1,429 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-15
5
+ * @tags: [sync, cloud-to-local, git, ADR-054]
6
+ * @related: [index.ts, node-syncer.ts, types.ts]
7
+ * @priority: critical
8
+ * @complexity: high
9
+ * @dependencies: [chalk, prompts, simple-git]
10
+ */
11
+ /**
12
+ * Sync Command (ADR-054)
13
+ *
14
+ * Pull dashboard edits from cloud graph to local git repository.
15
+ *
16
+ * Usage:
17
+ * ginko sync # Sync all unsynced nodes
18
+ * ginko sync --dry-run # Preview what would be synced
19
+ * ginko sync --force # Overwrite local with graph versions
20
+ * ginko sync --type=ADR # Sync only specific node type
21
+ */
22
+ import chalk from 'chalk';
23
+ import prompts from 'prompts';
24
+ import { getConfig, getApiToken } from '../graph/config.js';
25
+ import { syncNode, getFilePath, computeHash, readFileContent, applyResolution, } from './node-syncer.js';
26
+ import { findSprintFiles, syncSprintFile, updateCurrentSprintFile, } from './sprint-syncer.js';
27
+ const API_BASE = process.env.GINKO_API_URL || 'https://app.ginkoai.com';
28
+ /**
29
+ * Transform raw API node to UnsyncedNode
30
+ */
31
+ function transformApiNode(raw) {
32
+ const props = raw.node.properties || {};
33
+ return {
34
+ id: raw.node.id || props.id || '',
35
+ type: (raw.node.label || props.type || 'ADR'),
36
+ title: props.title || props.name || raw.node.id || 'Untitled',
37
+ content: props.content || props.body || '',
38
+ status: props.status || 'draft',
39
+ tags: Array.isArray(props.tags) ? props.tags : [],
40
+ synced: raw.syncStatus?.synced ?? false,
41
+ syncedAt: raw.syncStatus?.syncedAt || null,
42
+ editedAt: raw.syncStatus?.editedAt || new Date().toISOString(),
43
+ editedBy: raw.syncStatus?.editedBy || 'unknown',
44
+ contentHash: raw.syncStatus?.contentHash || '',
45
+ gitHash: raw.syncStatus?.gitHash || null,
46
+ slug: props.slug || undefined,
47
+ };
48
+ }
49
+ /**
50
+ * Fetch unsynced nodes from API
51
+ */
52
+ async function fetchUnsyncedNodes(graphId, token, type) {
53
+ const url = new URL(`${API_BASE}/api/v1/graph/nodes/unsynced`);
54
+ url.searchParams.set('graphId', graphId);
55
+ if (type) {
56
+ url.searchParams.set('type', type);
57
+ }
58
+ const response = await fetch(url.toString(), {
59
+ headers: {
60
+ Authorization: `Bearer ${token}`,
61
+ 'Content-Type': 'application/json',
62
+ },
63
+ });
64
+ if (!response.ok) {
65
+ const text = await response.text();
66
+ throw new Error(`Failed to fetch unsynced nodes: ${response.status} ${text}`);
67
+ }
68
+ const data = (await response.json());
69
+ // Transform raw API nodes to expected UnsyncedNode format
70
+ return (data.nodes || []).map(transformApiNode);
71
+ }
72
+ /**
73
+ * Mark a node as synced in the API
74
+ */
75
+ async function markNodeSynced(nodeId, gitHash, graphId, token) {
76
+ // graphId must be in query params, not just body
77
+ const url = `${API_BASE}/api/v1/graph/nodes/${encodeURIComponent(nodeId)}/sync?graphId=${encodeURIComponent(graphId)}`;
78
+ const response = await fetch(url, {
79
+ method: 'POST',
80
+ headers: {
81
+ Authorization: `Bearer ${token}`,
82
+ 'Content-Type': 'application/json',
83
+ },
84
+ body: JSON.stringify({
85
+ gitHash,
86
+ syncedAt: new Date().toISOString(),
87
+ }),
88
+ });
89
+ if (!response.ok) {
90
+ const text = await response.text();
91
+ throw new Error(`Failed to mark node synced: ${response.status} ${text}`);
92
+ }
93
+ }
94
+ /**
95
+ * Show conflict resolution dialog
96
+ */
97
+ async function resolveConflict(conflict) {
98
+ console.log(chalk.yellow(`\n⚠️ Conflict detected: ${conflict.node.title}`));
99
+ console.log(chalk.dim(` File: ${conflict.node.type}/${conflict.node.id}`));
100
+ console.log(chalk.dim(` Local hash: ${conflict.localHash.substring(0, 8)}...`));
101
+ console.log(chalk.dim(` Graph hash: ${conflict.node.contentHash.substring(0, 8)}...`));
102
+ const { resolution } = await prompts({
103
+ type: 'select',
104
+ name: 'resolution',
105
+ message: 'How would you like to resolve this conflict?',
106
+ choices: [
107
+ { title: 'Use graph version (overwrite local)', value: 'use-graph' },
108
+ { title: 'Keep local version (update graph)', value: 'use-local' },
109
+ { title: 'Skip this file', value: 'skip' },
110
+ ],
111
+ });
112
+ return resolution || 'skip';
113
+ }
114
+ /**
115
+ * Stage and commit synced files
116
+ */
117
+ async function commitSyncedFiles(files, projectRoot) {
118
+ if (files.length === 0)
119
+ return true;
120
+ try {
121
+ const { simpleGit } = await import('simple-git');
122
+ const git = simpleGit(projectRoot);
123
+ // Stage files
124
+ await git.add(files);
125
+ // Determine if this is sprint sync or knowledge sync
126
+ const isSprintSync = files.some(f => f.includes('sprints/'));
127
+ const syncType = isSprintSync ? 'sprint' : 'knowledge node';
128
+ // Commit
129
+ const message = `sync: Pull ${files.length} ${syncType}(s) from dashboard
130
+
131
+ Synced files:
132
+ ${files.map((f) => `- ${f}`).join('\n')}
133
+
134
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
135
+
136
+ Co-Authored-By: Claude <noreply@anthropic.com>
137
+ Co-Authored-By: Chris Norton <chris@watchhill.ai>`;
138
+ await git.commit(message);
139
+ return true;
140
+ }
141
+ catch (error) {
142
+ console.error(chalk.red('Failed to commit:'), error);
143
+ return false;
144
+ }
145
+ }
146
+ /**
147
+ * Sync sprints from graph to local markdown
148
+ */
149
+ async function syncSprints(graphId, token, projectRoot, options) {
150
+ console.log(chalk.dim('📋 Finding sprint files...'));
151
+ const sprintFiles = await findSprintFiles(projectRoot);
152
+ if (sprintFiles.length === 0) {
153
+ console.log(chalk.yellow('No sprint files found in docs/sprints/'));
154
+ return [];
155
+ }
156
+ console.log(chalk.cyan(`Found ${sprintFiles.length} sprint file(s):\n`));
157
+ for (const sf of sprintFiles) {
158
+ console.log(` 📋 ${sf.sprintId}: ${sf.path.split('/').pop()}`);
159
+ }
160
+ console.log('');
161
+ if (options.dryRun) {
162
+ console.log(chalk.yellow('📋 Dry run mode - no changes will be made.\n'));
163
+ return [];
164
+ }
165
+ // Confirm before proceeding
166
+ if (!options.force) {
167
+ const { proceed } = await prompts({
168
+ type: 'confirm',
169
+ name: 'proceed',
170
+ message: `Sync ${sprintFiles.length} sprint(s) from graph?`,
171
+ initial: true,
172
+ });
173
+ if (!proceed) {
174
+ console.log(chalk.dim('Sync cancelled.'));
175
+ return [];
176
+ }
177
+ }
178
+ console.log('');
179
+ const results = [];
180
+ for (const sprintFile of sprintFiles) {
181
+ console.log(chalk.dim(`Syncing: ${sprintFile.sprintId}...`));
182
+ const result = await syncSprintFile(sprintFile, graphId, token, API_BASE);
183
+ results.push(result);
184
+ if (result.error) {
185
+ console.log(chalk.red(` ✗ Error: ${result.error}`));
186
+ }
187
+ else if (result.tasksUpdated > 0) {
188
+ console.log(chalk.green(` ✓ Updated ${result.tasksUpdated} task(s)`));
189
+ for (const change of result.changes) {
190
+ console.log(chalk.dim(` ${change}`));
191
+ }
192
+ }
193
+ else {
194
+ console.log(chalk.dim(` ○ ${result.changes[0] || 'No changes'}`));
195
+ }
196
+ }
197
+ // Update CURRENT-SPRINT.md if we have an active sprint
198
+ const updatedSprints = results.filter(r => r.tasksUpdated > 0);
199
+ if (updatedSprints.length > 0) {
200
+ // Find the most recently updated sprint
201
+ const latestSprint = sprintFiles.find(sf => sf.sprintId === updatedSprints[0].sprintId);
202
+ if (latestSprint) {
203
+ try {
204
+ await updateCurrentSprintFile(projectRoot, latestSprint.path);
205
+ console.log(chalk.dim('\n Updated CURRENT-SPRINT.md'));
206
+ }
207
+ catch {
208
+ // Ignore errors updating CURRENT-SPRINT.md
209
+ }
210
+ }
211
+ }
212
+ return results;
213
+ }
214
+ /**
215
+ * Main sync command implementation
216
+ */
217
+ export async function syncCommand(options) {
218
+ const result = {
219
+ synced: [],
220
+ skipped: [],
221
+ conflicts: [],
222
+ errors: [],
223
+ };
224
+ console.log(chalk.bold.cyan('🔄 Sync: Dashboard → Git\n'));
225
+ // Get config and auth
226
+ const config = await getConfig();
227
+ const graphId = config?.graphId;
228
+ if (!graphId) {
229
+ console.error(chalk.red('❌ No graph ID found.'));
230
+ console.error(chalk.dim(' Run `ginko graph init` first.'));
231
+ return result;
232
+ }
233
+ const token = await getApiToken();
234
+ if (!token) {
235
+ console.error(chalk.red('❌ Not authenticated.'));
236
+ console.error(chalk.dim(' Run `ginko login` to authenticate.'));
237
+ return result;
238
+ }
239
+ // Get git root directory (not cwd, which might be a subdirectory)
240
+ let projectRoot = process.cwd();
241
+ try {
242
+ const { simpleGit } = await import('simple-git');
243
+ const git = simpleGit(process.cwd());
244
+ projectRoot = await git.revparse(['--show-toplevel']);
245
+ projectRoot = projectRoot.trim();
246
+ }
247
+ catch {
248
+ // Fall back to cwd if not in a git repo
249
+ console.warn(chalk.dim('⚠️ Not in a git repository, using current directory.'));
250
+ }
251
+ // Handle Sprint type separately (different sync mechanism)
252
+ if (options.type === 'Sprint') {
253
+ console.log(chalk.bold('📋 Sprint Sync Mode\n'));
254
+ const sprintResults = await syncSprints(graphId, token, projectRoot, options);
255
+ // Commit changes if any sprints were updated
256
+ const updatedSprints = sprintResults.filter(r => r.tasksUpdated > 0);
257
+ if (updatedSprints.length > 0) {
258
+ const files = updatedSprints.map(r => r.filePath);
259
+ // Also include CURRENT-SPRINT.md
260
+ files.push('docs/sprints/CURRENT-SPRINT.md');
261
+ console.log(chalk.dim('\n📝 Committing changes...'));
262
+ const committed = await commitSyncedFiles(files, projectRoot);
263
+ if (committed) {
264
+ console.log(chalk.green(`\n✓ Synced ${updatedSprints.length} sprint(s) and committed to git.`));
265
+ }
266
+ }
267
+ // Summary
268
+ const totalUpdated = sprintResults.reduce((sum, r) => sum + r.tasksUpdated, 0);
269
+ console.log(chalk.bold('\n📊 Summary:'));
270
+ console.log(` Sprints processed: ${sprintResults.length}`);
271
+ console.log(` Tasks updated: ${totalUpdated}`);
272
+ console.log(` Errors: ${sprintResults.filter(r => r.error).length}`);
273
+ return result;
274
+ }
275
+ // Fetch unsynced nodes (knowledge nodes only)
276
+ console.log(chalk.dim('📡 Fetching unsynced nodes from dashboard...'));
277
+ let nodes;
278
+ try {
279
+ nodes = await fetchUnsyncedNodes(graphId, token, options.type);
280
+ }
281
+ catch (error) {
282
+ console.error(chalk.red('❌ Failed to fetch unsynced nodes:'), error);
283
+ return result;
284
+ }
285
+ if (nodes.length === 0) {
286
+ console.log(chalk.green('✓ All nodes are synced. Nothing to do.'));
287
+ return result;
288
+ }
289
+ console.log(chalk.cyan(`Found ${nodes.length} unsynced node(s):\n`));
290
+ // Show preview
291
+ for (const node of nodes) {
292
+ const icon = getTypeIcon(node.type);
293
+ console.log(` ${icon} ${node.type}: ${node.title}`);
294
+ console.log(chalk.dim(` Edited by ${node.editedBy} at ${node.editedAt}`));
295
+ }
296
+ console.log('');
297
+ // Dry run - just show what would happen
298
+ if (options.dryRun) {
299
+ console.log(chalk.yellow('📋 Dry run mode - no changes will be made.\n'));
300
+ for (const node of nodes) {
301
+ const filePath = getFilePath(projectRoot, node);
302
+ const localContent = await readFileContent(filePath);
303
+ if (!localContent) {
304
+ console.log(chalk.green(` + Would create: ${filePath}`));
305
+ }
306
+ else {
307
+ const localHash = computeHash(localContent);
308
+ if (localHash !== node.gitHash) {
309
+ console.log(chalk.yellow(` ~ Would update (conflict): ${filePath}`));
310
+ }
311
+ else {
312
+ console.log(chalk.blue(` ~ Would update: ${filePath}`));
313
+ }
314
+ }
315
+ }
316
+ return result;
317
+ }
318
+ // Confirm before proceeding
319
+ if (!options.force) {
320
+ const { proceed } = await prompts({
321
+ type: 'confirm',
322
+ name: 'proceed',
323
+ message: `Sync ${nodes.length} node(s) to local git?`,
324
+ initial: true,
325
+ });
326
+ if (!proceed) {
327
+ console.log(chalk.dim('Sync cancelled.'));
328
+ return result;
329
+ }
330
+ }
331
+ console.log('');
332
+ // Process each node
333
+ const syncedFiles = [];
334
+ for (const node of nodes) {
335
+ const filePath = getFilePath(projectRoot, node);
336
+ console.log(chalk.dim(`Processing: ${node.title}...`));
337
+ try {
338
+ const syncResult = await syncNode(node, projectRoot, { force: options.force });
339
+ if (syncResult.conflict) {
340
+ // Handle conflict
341
+ if (options.force) {
342
+ // Force mode: use graph version
343
+ await applyResolution(syncResult.conflict, 'use-graph', projectRoot);
344
+ syncedFiles.push(syncResult.filePath);
345
+ result.synced.push(node.id);
346
+ console.log(chalk.green(` ✓ Force synced: ${filePath}`));
347
+ }
348
+ else {
349
+ // Interactive conflict resolution
350
+ const resolution = await resolveConflict(syncResult.conflict);
351
+ syncResult.conflict.resolution = resolution;
352
+ result.conflicts.push(syncResult.conflict);
353
+ if (resolution !== 'skip') {
354
+ const applied = await applyResolution(syncResult.conflict, resolution, projectRoot);
355
+ if (applied.applied) {
356
+ syncedFiles.push(filePath);
357
+ result.synced.push(node.id);
358
+ console.log(chalk.green(` ✓ Resolved: ${filePath}`));
359
+ }
360
+ }
361
+ else {
362
+ result.skipped.push(node.id);
363
+ console.log(chalk.yellow(` ○ Skipped: ${filePath}`));
364
+ }
365
+ }
366
+ }
367
+ else if (syncResult.success) {
368
+ syncedFiles.push(syncResult.filePath);
369
+ result.synced.push(node.id);
370
+ console.log(chalk.green(` ✓ Synced: ${filePath}`));
371
+ // Mark as synced in API
372
+ try {
373
+ await markNodeSynced(node.id, syncResult.hash, graphId, token);
374
+ }
375
+ catch (error) {
376
+ console.warn(chalk.yellow(` ⚠ Could not mark as synced in API: ${error}`));
377
+ }
378
+ }
379
+ }
380
+ catch (error) {
381
+ result.errors.push({ nodeId: node.id, error: String(error) });
382
+ console.error(chalk.red(` ✗ Failed: ${node.id} - ${error}`));
383
+ }
384
+ }
385
+ console.log('');
386
+ // Commit changes
387
+ if (syncedFiles.length > 0) {
388
+ console.log(chalk.dim('📝 Committing changes...'));
389
+ const committed = await commitSyncedFiles(syncedFiles, projectRoot);
390
+ if (committed) {
391
+ console.log(chalk.green(`\n✓ Synced ${syncedFiles.length} file(s) and committed to git.`));
392
+ }
393
+ else {
394
+ console.log(chalk.yellow(`\n⚠ Synced ${syncedFiles.length} file(s) but commit failed.`));
395
+ console.log(chalk.dim(' You can commit manually with: git add . && git commit'));
396
+ }
397
+ }
398
+ // Summary
399
+ console.log(chalk.bold('\n📊 Summary:'));
400
+ console.log(` Synced: ${result.synced.length}`);
401
+ console.log(` Skipped: ${result.skipped.length}`);
402
+ console.log(` Conflicts: ${result.conflicts.length}`);
403
+ console.log(` Errors: ${result.errors.length}`);
404
+ return result;
405
+ }
406
+ /**
407
+ * Get icon for node type
408
+ */
409
+ function getTypeIcon(type) {
410
+ switch (type) {
411
+ case 'ADR':
412
+ return '📜';
413
+ case 'PRD':
414
+ return '📋';
415
+ case 'Pattern':
416
+ return '🔷';
417
+ case 'Gotcha':
418
+ return '⚠️';
419
+ case 'Charter':
420
+ return '🎯';
421
+ case 'Sprint':
422
+ return '🏃';
423
+ case 'Task':
424
+ return '✅';
425
+ default:
426
+ return '📄';
427
+ }
428
+ }
429
+ //# sourceMappingURL=sync-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-command.js","sourceRoot":"","sources":["../../../src/commands/sync/sync-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @fileType: types
3
+ * @status: current
4
+ * @updated: 2025-12-15
5
+ * @tags: [sync, types, cloud-to-local, ADR-054]
6
+ * @related: [sync-command.ts, node-syncer.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: []
10
+ */
11
+ /**
12
+ * Sync Types (ADR-054)
13
+ *
14
+ * Types for the cloud→local sync command that pulls dashboard edits to git.
15
+ */
16
+ export type NodeType = 'ADR' | 'PRD' | 'Pattern' | 'Gotcha' | 'Charter' | 'Sprint' | 'Task';
17
+ export interface NodeSyncStatus {
18
+ nodeId: string;
19
+ nodeType: NodeType;
20
+ synced: boolean;
21
+ syncedAt: Date | null;
22
+ editedAt: Date;
23
+ editedBy: string;
24
+ contentHash: string;
25
+ gitHash: string | null;
26
+ lastKnownGitHash: string | null;
27
+ }
28
+ export interface UnsyncedNode {
29
+ id: string;
30
+ type: NodeType;
31
+ title: string;
32
+ content: string;
33
+ status: string;
34
+ tags: string[];
35
+ synced: boolean;
36
+ syncedAt: string | null;
37
+ editedAt: string;
38
+ editedBy: string;
39
+ contentHash: string;
40
+ gitHash: string | null;
41
+ slug?: string;
42
+ }
43
+ export interface SyncOptions {
44
+ dryRun?: boolean;
45
+ force?: boolean;
46
+ type?: NodeType;
47
+ interactive?: boolean;
48
+ }
49
+ export type ConflictResolution = 'use-graph' | 'use-local' | 'skip' | 'merge';
50
+ export interface SyncConflict {
51
+ node: UnsyncedNode;
52
+ localContent: string;
53
+ localHash: string;
54
+ resolution?: ConflictResolution;
55
+ }
56
+ export interface SyncResult {
57
+ synced: string[];
58
+ skipped: string[];
59
+ conflicts: SyncConflict[];
60
+ errors: {
61
+ nodeId: string;
62
+ error: string;
63
+ }[];
64
+ }
65
+ export interface SyncApiResponse {
66
+ nodes: UnsyncedNode[];
67
+ count: number;
68
+ }
69
+ export interface TaskStatusUpdate {
70
+ taskId: string;
71
+ newStatus: string;
72
+ sprintId: string;
73
+ }
74
+ export interface SprintFile {
75
+ path: string;
76
+ sprintId: string;
77
+ content: string;
78
+ }
79
+ export interface SprintSyncResult {
80
+ sprintId: string;
81
+ filePath: string;
82
+ tasksUpdated: number;
83
+ changes: string[];
84
+ error: string | null;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AAEH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IAGnB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAGtB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IAGjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IAGf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAGvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileType: types
3
+ * @status: current
4
+ * @updated: 2025-12-15
5
+ * @tags: [sync, types, cloud-to-local, ADR-054]
6
+ * @related: [sync-command.ts, node-syncer.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: []
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -18,11 +18,13 @@ export interface LogEntry {
18
18
  files?: string[];
19
19
  impact: LogImpact;
20
20
  }
21
+ export type FlowState = 'hot' | 'warm' | 'cool' | 'cold';
21
22
  export interface SessionLogMetadata {
22
23
  session_id: string;
23
24
  started: string;
24
25
  user: string;
25
26
  branch: string;
27
+ flow_state?: FlowState;
26
28
  }
27
29
  export interface SessionLog {
28
30
  metadata: SessionLogMetadata;
@@ -46,7 +48,7 @@ export declare class SessionLogManager {
46
48
  /**
47
49
  * Create a new session log
48
50
  */
49
- static createSessionLog(userDir: string, user: string, branch: string): Promise<void>;
51
+ static createSessionLog(userDir: string, user: string, branch: string, flowState?: FlowState): Promise<void>;
50
52
  /**
51
53
  * Append an entry to the session log
52
54
  * Atomic operation to prevent corruption
@@ -1 +1 @@
1
- {"version":3,"file":"session-log-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-log-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-log-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-log-manager.ts"],"names":[],"mappings":"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"}
@@ -38,13 +38,14 @@ export class SessionLogManager {
38
38
  /**
39
39
  * Create a new session log
40
40
  */
41
- static async createSessionLog(userDir, user, branch) {
41
+ static async createSessionLog(userDir, user, branch, flowState) {
42
42
  const sessionId = `session-${new Date().toISOString().replace(/[:.]/g, '-')}`;
43
+ const flowStateLine = flowState ? `\nflow_state: ${flowState}` : '';
43
44
  const logContent = `---
44
45
  session_id: ${sessionId}
45
46
  started: ${new Date().toISOString()}
46
47
  user: ${user}
47
- branch: ${branch}
48
+ branch: ${branch}${flowStateLine}
48
49
  ---
49
50
 
50
51
  # Session Log: ${sessionId}
@@ -235,7 +236,8 @@ Impact: ${entry.impact}
235
236
  session_id: metadata.session_id || '',
236
237
  started: metadata.started || '',
237
238
  user: metadata.user || '',
238
- branch: metadata.branch || ''
239
+ branch: metadata.branch || '',
240
+ flow_state: metadata.flow_state
239
241
  };
240
242
  }
241
243
  /**