@ginkoai/cli 1.8.0 → 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.
- package/dist/commands/assign.d.ts +19 -0
- package/dist/commands/assign.d.ts.map +1 -0
- package/dist/commands/assign.js +200 -0
- package/dist/commands/assign.js.map +1 -0
- package/dist/commands/epic.d.ts.map +1 -1
- package/dist/commands/epic.js +48 -23
- package/dist/commands/epic.js.map +1 -1
- package/dist/commands/graph/api-client.d.ts +1 -0
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/insights/insights-command.d.ts.map +1 -1
- package/dist/commands/insights/insights-command.js +51 -13
- package/dist/commands/insights/insights-command.js.map +1 -1
- package/dist/commands/principles/seed.d.ts +26 -0
- package/dist/commands/principles/seed.d.ts.map +1 -0
- package/dist/commands/principles/seed.js +150 -0
- package/dist/commands/principles/seed.js.map +1 -0
- package/dist/commands/start/start-reflection.d.ts +11 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +99 -3
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/sync/index.d.ts +21 -0
- package/dist/commands/sync/index.d.ts.map +1 -0
- package/dist/commands/sync/index.js +38 -0
- package/dist/commands/sync/index.js.map +1 -0
- package/dist/commands/sync/node-syncer.d.ts +58 -0
- package/dist/commands/sync/node-syncer.d.ts.map +1 -0
- package/dist/commands/sync/node-syncer.js +192 -0
- package/dist/commands/sync/node-syncer.js.map +1 -0
- package/dist/commands/sync/sprint-syncer.d.ts +42 -0
- package/dist/commands/sync/sprint-syncer.d.ts.map +1 -0
- package/dist/commands/sync/sprint-syncer.js +274 -0
- package/dist/commands/sync/sprint-syncer.js.map +1 -0
- package/dist/commands/sync/sync-command.d.ts +16 -0
- package/dist/commands/sync/sync-command.d.ts.map +1 -0
- package/dist/commands/sync/sync-command.js +429 -0
- package/dist/commands/sync/sync-command.js.map +1 -0
- package/dist/commands/sync/types.d.ts +86 -0
- package/dist/commands/sync/types.d.ts.map +1 -0
- package/dist/commands/sync/types.js +12 -0
- package/dist/commands/sync/types.js.map +1 -0
- package/dist/core/session-log-manager.d.ts +3 -1
- package/dist/core/session-log-manager.d.ts.map +1 -1
- package/dist/core/session-log-manager.js +5 -3
- package/dist/core/session-log-manager.js.map +1 -1
- package/dist/data/standard-principles.d.ts +43 -0
- package/dist/data/standard-principles.d.ts.map +1 -0
- package/dist/data/standard-principles.js +323 -0
- package/dist/data/standard-principles.js.map +1 -0
- package/dist/index.js +24 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/insights/analyzers/anti-patterns.js +2 -2
- package/dist/lib/insights/analyzers/anti-patterns.js.map +1 -1
- package/dist/lib/insights/analyzers/efficiency.js +2 -2
- package/dist/lib/insights/analyzers/efficiency.js.map +1 -1
- package/dist/lib/insights/analyzers/patterns.d.ts.map +1 -1
- package/dist/lib/insights/analyzers/patterns.js +16 -6
- package/dist/lib/insights/analyzers/patterns.js.map +1 -1
- package/dist/lib/insights/analyzers/quality.d.ts.map +1 -1
- package/dist/lib/insights/analyzers/quality.js +14 -9
- package/dist/lib/insights/analyzers/quality.js.map +1 -1
- package/dist/lib/insights/data-collector.d.ts.map +1 -1
- package/dist/lib/insights/data-collector.js +60 -13
- package/dist/lib/insights/data-collector.js.map +1 -1
- package/dist/lib/insights/scheduler.d.ts +71 -0
- package/dist/lib/insights/scheduler.d.ts.map +1 -0
- package/dist/lib/insights/scheduler.js +126 -0
- package/dist/lib/insights/scheduler.js.map +1 -0
- package/package.json +1 -1
- package/dist/lib/__tests__/task-timeout.test.d.ts +0 -12
- package/dist/lib/__tests__/task-timeout.test.d.ts.map +0 -1
- package/dist/lib/__tests__/task-timeout.test.js +0 -278
- package/dist/lib/__tests__/task-timeout.test.js.map +0 -1
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-22
|
|
5
|
+
* @tags: [sync, sprint-syncer, cloud-to-local, ADR-054, EPIC-006]
|
|
6
|
+
* @related: [sync-command.ts, types.ts, node-syncer.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [fs, path, glob]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Sprint Syncer (ADR-054 Extension)
|
|
13
|
+
*
|
|
14
|
+
* Handles syncing Sprint and Task status from cloud graph to local markdown.
|
|
15
|
+
* Unlike knowledge nodes which replace entire files, sprint sync updates
|
|
16
|
+
* specific task status checkboxes within existing markdown files.
|
|
17
|
+
*/
|
|
18
|
+
import * as fs from 'fs/promises';
|
|
19
|
+
import * as path from 'path';
|
|
20
|
+
import glob from 'glob';
|
|
21
|
+
import { promisify } from 'util';
|
|
22
|
+
const globAsync = promisify(glob);
|
|
23
|
+
/**
|
|
24
|
+
* Map graph status to markdown checkbox format
|
|
25
|
+
*/
|
|
26
|
+
function statusToCheckbox(status) {
|
|
27
|
+
switch (status) {
|
|
28
|
+
case 'complete':
|
|
29
|
+
return '[x]';
|
|
30
|
+
case 'in_progress':
|
|
31
|
+
return '[@]';
|
|
32
|
+
case 'blocked':
|
|
33
|
+
return '[Z]';
|
|
34
|
+
case 'todo':
|
|
35
|
+
default:
|
|
36
|
+
return '[ ]';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Map graph status to display text
|
|
41
|
+
*/
|
|
42
|
+
function statusToText(status) {
|
|
43
|
+
switch (status) {
|
|
44
|
+
case 'complete':
|
|
45
|
+
return 'Complete';
|
|
46
|
+
case 'in_progress':
|
|
47
|
+
return 'In Progress';
|
|
48
|
+
case 'blocked':
|
|
49
|
+
return 'Blocked';
|
|
50
|
+
case 'todo':
|
|
51
|
+
default:
|
|
52
|
+
return 'Pending';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Find all sprint markdown files in the project
|
|
57
|
+
*/
|
|
58
|
+
export async function findSprintFiles(projectRoot) {
|
|
59
|
+
const pattern = path.join(projectRoot, 'docs/sprints/SPRINT-*.md');
|
|
60
|
+
const files = await globAsync(pattern);
|
|
61
|
+
const sprintFiles = [];
|
|
62
|
+
for (const filePath of files) {
|
|
63
|
+
// Skip CURRENT-SPRINT.md as it's a copy
|
|
64
|
+
if (filePath.includes('CURRENT-SPRINT.md'))
|
|
65
|
+
continue;
|
|
66
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
67
|
+
const sprintId = extractSprintId(content, filePath);
|
|
68
|
+
if (sprintId) {
|
|
69
|
+
sprintFiles.push({
|
|
70
|
+
path: filePath,
|
|
71
|
+
sprintId,
|
|
72
|
+
content,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return sprintFiles;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Extract sprint ID from file content or filename
|
|
80
|
+
* Looks for patterns like e006_s02 or adhoc_251209_s01
|
|
81
|
+
*/
|
|
82
|
+
function extractSprintId(content, filePath) {
|
|
83
|
+
// Try to find sprint ID in content (from task IDs)
|
|
84
|
+
const taskIdMatch = content.match(/\*\*ID:\*\*\s*(e\d{3}_s\d{2}|adhoc_\d{6}_s\d{2})_t\d{2}/);
|
|
85
|
+
if (taskIdMatch) {
|
|
86
|
+
// Extract sprint portion from task ID
|
|
87
|
+
const fullId = taskIdMatch[1];
|
|
88
|
+
return fullId;
|
|
89
|
+
}
|
|
90
|
+
// Try to extract from filename pattern
|
|
91
|
+
// e.g., SPRINT-2025-12-epic006-sprint2.md -> e006_s02
|
|
92
|
+
const filenameMatch = path.basename(filePath).match(/epic(\d{3})-sprint(\d+)/i);
|
|
93
|
+
if (filenameMatch) {
|
|
94
|
+
const epicNum = filenameMatch[1].padStart(3, '0');
|
|
95
|
+
const sprintNum = filenameMatch[2].padStart(2, '0');
|
|
96
|
+
return `e${epicNum}_s${sprintNum}`;
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract task IDs and their current status from sprint markdown
|
|
102
|
+
*/
|
|
103
|
+
export function extractTasksFromMarkdown(content) {
|
|
104
|
+
const tasks = new Map();
|
|
105
|
+
const lines = content.split('\n');
|
|
106
|
+
let currentTaskId = null;
|
|
107
|
+
for (let i = 0; i < lines.length; i++) {
|
|
108
|
+
const line = lines[i];
|
|
109
|
+
// Look for task ID line: **ID:** e006_s02_t01
|
|
110
|
+
const idMatch = line.match(/\*\*ID:\*\*\s*(\w+)/);
|
|
111
|
+
if (idMatch) {
|
|
112
|
+
currentTaskId = idMatch[1];
|
|
113
|
+
}
|
|
114
|
+
// Look for status line: **Status:** [ ] Pending
|
|
115
|
+
const statusMatch = line.match(/\*\*Status:\*\*\s*\[([ xX@Z])\]/);
|
|
116
|
+
if (statusMatch && currentTaskId) {
|
|
117
|
+
tasks.set(currentTaskId, {
|
|
118
|
+
status: statusMatch[1],
|
|
119
|
+
lineNum: i,
|
|
120
|
+
});
|
|
121
|
+
currentTaskId = null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return tasks;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Update sprint markdown with new task statuses
|
|
128
|
+
*/
|
|
129
|
+
export function updateSprintMarkdown(content, updates) {
|
|
130
|
+
const lines = content.split('\n');
|
|
131
|
+
const changes = [];
|
|
132
|
+
let currentTaskId = null;
|
|
133
|
+
let totalTasks = 0;
|
|
134
|
+
let completedTasks = 0;
|
|
135
|
+
// First pass: update task statuses
|
|
136
|
+
for (let i = 0; i < lines.length; i++) {
|
|
137
|
+
const line = lines[i];
|
|
138
|
+
// Track task ID
|
|
139
|
+
const idMatch = line.match(/\*\*ID:\*\*\s*(\w+)/);
|
|
140
|
+
if (idMatch) {
|
|
141
|
+
currentTaskId = idMatch[1];
|
|
142
|
+
}
|
|
143
|
+
// Update status line if we have an update for this task
|
|
144
|
+
const statusMatch = line.match(/(\*\*Status:\*\*\s*)\[([ xX@Z])\](\s*\w+)?/);
|
|
145
|
+
if (statusMatch && currentTaskId) {
|
|
146
|
+
totalTasks++;
|
|
147
|
+
const update = updates.find(u => u.taskId === currentTaskId);
|
|
148
|
+
if (update) {
|
|
149
|
+
const newCheckbox = statusToCheckbox(update.newStatus);
|
|
150
|
+
const newText = statusToText(update.newStatus);
|
|
151
|
+
const newLine = `${statusMatch[1]}${newCheckbox} ${newText}`;
|
|
152
|
+
if (lines[i] !== newLine) {
|
|
153
|
+
changes.push(`${currentTaskId}: ${statusMatch[2]} -> ${newCheckbox}`);
|
|
154
|
+
lines[i] = newLine;
|
|
155
|
+
}
|
|
156
|
+
if (update.newStatus === 'complete') {
|
|
157
|
+
completedTasks++;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
// Count existing complete tasks
|
|
162
|
+
if (statusMatch[2].toLowerCase() === 'x') {
|
|
163
|
+
completedTasks++;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
currentTaskId = null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Second pass: update progress line
|
|
170
|
+
const progressPercent = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0;
|
|
171
|
+
const progressComplete = progressPercent === 100 ? ' \u2713' : '';
|
|
172
|
+
for (let i = 0; i < lines.length; i++) {
|
|
173
|
+
const progressMatch = lines[i].match(/(\*\*Progress:\*\*\s*)\d+%\s*\(\d+\/\d+\s*tasks?\s*complete\)(\s*[✓✔])?/i);
|
|
174
|
+
if (progressMatch) {
|
|
175
|
+
const newProgress = `${progressMatch[1]}${progressPercent}% (${completedTasks}/${totalTasks} tasks complete)${progressComplete}`;
|
|
176
|
+
if (lines[i] !== newProgress) {
|
|
177
|
+
changes.push(`Progress: ${progressPercent}% (${completedTasks}/${totalTasks})`);
|
|
178
|
+
lines[i] = newProgress;
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Third pass: update success criteria checkboxes if all tasks complete
|
|
184
|
+
if (progressPercent === 100) {
|
|
185
|
+
for (let i = 0; i < lines.length; i++) {
|
|
186
|
+
// Update unchecked success criteria to checked
|
|
187
|
+
if (lines[i].match(/^- \[ \]/)) {
|
|
188
|
+
lines[i] = lines[i].replace(/^- \[ \]/, '- [x]');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return {
|
|
193
|
+
updated: lines.join('\n'),
|
|
194
|
+
changes,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Fetch task statuses from graph API
|
|
199
|
+
*/
|
|
200
|
+
export async function fetchTaskStatuses(graphId, token, sprintId, apiBase) {
|
|
201
|
+
const url = new URL(`${apiBase}/api/v1/graph/nodes`);
|
|
202
|
+
url.searchParams.set('graphId', graphId);
|
|
203
|
+
url.searchParams.set('labels', 'Task');
|
|
204
|
+
url.searchParams.set('limit', '100');
|
|
205
|
+
const response = await fetch(url.toString(), {
|
|
206
|
+
headers: {
|
|
207
|
+
Authorization: `Bearer ${token}`,
|
|
208
|
+
'Content-Type': 'application/json',
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
if (!response.ok) {
|
|
212
|
+
throw new Error(`Failed to fetch tasks: ${response.status}`);
|
|
213
|
+
}
|
|
214
|
+
const data = (await response.json());
|
|
215
|
+
const updates = [];
|
|
216
|
+
// Filter tasks belonging to this sprint
|
|
217
|
+
for (const node of data.nodes || []) {
|
|
218
|
+
const taskId = node.properties?.id;
|
|
219
|
+
const status = node.properties?.status;
|
|
220
|
+
// Check if task belongs to this sprint (starts with sprint ID)
|
|
221
|
+
if (taskId && taskId.startsWith(sprintId) && status) {
|
|
222
|
+
updates.push({
|
|
223
|
+
taskId,
|
|
224
|
+
newStatus: status,
|
|
225
|
+
sprintId,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return updates;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Sync a single sprint file with graph data
|
|
233
|
+
*/
|
|
234
|
+
export async function syncSprintFile(sprintFile, graphId, token, apiBase) {
|
|
235
|
+
const result = {
|
|
236
|
+
sprintId: sprintFile.sprintId,
|
|
237
|
+
filePath: sprintFile.path,
|
|
238
|
+
tasksUpdated: 0,
|
|
239
|
+
changes: [],
|
|
240
|
+
error: null,
|
|
241
|
+
};
|
|
242
|
+
try {
|
|
243
|
+
// Fetch task statuses from graph
|
|
244
|
+
const updates = await fetchTaskStatuses(graphId, token, sprintFile.sprintId, apiBase);
|
|
245
|
+
if (updates.length === 0) {
|
|
246
|
+
result.changes.push('No tasks found in graph for this sprint');
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
// Update markdown content
|
|
250
|
+
const { updated, changes } = updateSprintMarkdown(sprintFile.content, updates);
|
|
251
|
+
if (changes.length === 0) {
|
|
252
|
+
result.changes.push('Already in sync');
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
// Write updated content
|
|
256
|
+
await fs.writeFile(sprintFile.path, updated, 'utf-8');
|
|
257
|
+
result.tasksUpdated = changes.filter(c => c.includes('->')).length;
|
|
258
|
+
result.changes = changes;
|
|
259
|
+
return result;
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
result.error = error instanceof Error ? error.message : String(error);
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Update CURRENT-SPRINT.md to match the active sprint
|
|
268
|
+
*/
|
|
269
|
+
export async function updateCurrentSprintFile(projectRoot, activeSprintPath) {
|
|
270
|
+
const currentSprintPath = path.join(projectRoot, 'docs/sprints/CURRENT-SPRINT.md');
|
|
271
|
+
const content = await fs.readFile(activeSprintPath, 'utf-8');
|
|
272
|
+
await fs.writeFile(currentSprintPath, content, 'utf-8');
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=sprint-syncer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint-syncer.js","sourceRoot":"","sources":["../../../src/commands/sync/sprint-syncer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
import type { SyncOptions, SyncResult } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Main sync command implementation
|
|
14
|
+
*/
|
|
15
|
+
export declare function syncCommand(options: SyncOptions): Promise<SyncResult>;
|
|
16
|
+
//# sourceMappingURL=sync-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-command.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH,OAAO,KAAK,EACV,WAAW,EAEX,UAAU,EAKX,MAAM,YAAY,CAAC;AA8PpB;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAsN3E"}
|