@ginkoai/cli 2.0.6 → 2.1.1
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/epic/index.d.ts +29 -0
- package/dist/commands/epic/index.d.ts.map +1 -0
- package/dist/commands/epic/index.js +94 -0
- package/dist/commands/epic/index.js.map +1 -0
- package/dist/commands/epic/status.d.ts +40 -0
- package/dist/commands/epic/status.d.ts.map +1 -0
- package/dist/commands/epic/status.js +244 -0
- package/dist/commands/epic/status.js.map +1 -0
- package/dist/commands/graph/api-client.d.ts +221 -1
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +141 -2
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/graph/load.d.ts.map +1 -1
- package/dist/commands/graph/load.js +40 -2
- package/dist/commands/graph/load.js.map +1 -1
- package/dist/commands/handoff.d.ts +3 -3
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +32 -3
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/migrate/index.d.ts +27 -0
- package/dist/commands/migrate/index.d.ts.map +1 -0
- package/dist/commands/migrate/index.js +76 -0
- package/dist/commands/migrate/index.js.map +1 -0
- package/dist/commands/migrate/status-migration.d.ts +58 -0
- package/dist/commands/migrate/status-migration.d.ts.map +1 -0
- package/dist/commands/migrate/status-migration.js +323 -0
- package/dist/commands/migrate/status-migration.js.map +1 -0
- package/dist/commands/nudging/index.d.ts +24 -0
- package/dist/commands/nudging/index.d.ts.map +1 -0
- package/dist/commands/nudging/index.js +175 -0
- package/dist/commands/nudging/index.js.map +1 -0
- package/dist/commands/sprint/create.d.ts +26 -0
- package/dist/commands/sprint/create.d.ts.map +1 -0
- package/dist/commands/sprint/create.js +269 -0
- package/dist/commands/sprint/create.js.map +1 -0
- package/dist/commands/sprint/index.d.ts.map +1 -1
- package/dist/commands/sprint/index.js +28 -0
- package/dist/commands/sprint/index.js.map +1 -1
- package/dist/commands/sprint/quick-fix.d.ts +25 -0
- package/dist/commands/sprint/quick-fix.d.ts.map +1 -0
- package/dist/commands/sprint/quick-fix.js +151 -0
- package/dist/commands/sprint/quick-fix.js.map +1 -0
- package/dist/commands/sprint/sprint-pipeline-enhanced.d.ts.map +1 -1
- package/dist/commands/sprint/sprint-pipeline-enhanced.js +37 -0
- package/dist/commands/sprint/sprint-pipeline-enhanced.js.map +1 -1
- package/dist/commands/sprint/status.d.ts +42 -0
- package/dist/commands/sprint/status.d.ts.map +1 -0
- package/dist/commands/sprint/status.js +298 -0
- package/dist/commands/sprint/status.js.map +1 -0
- package/dist/commands/start/start-reflection.d.ts +53 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +464 -71
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/sync/sprint-syncer.d.ts +19 -12
- package/dist/commands/sync/sprint-syncer.d.ts.map +1 -1
- package/dist/commands/sync/sprint-syncer.js +58 -140
- package/dist/commands/sync/sprint-syncer.js.map +1 -1
- package/dist/commands/sync/sync-command.d.ts.map +1 -1
- package/dist/commands/sync/sync-command.js +6 -18
- package/dist/commands/sync/sync-command.js.map +1 -1
- package/dist/commands/task/index.d.ts +25 -0
- package/dist/commands/task/index.d.ts.map +1 -0
- package/dist/commands/task/index.js +100 -0
- package/dist/commands/task/index.js.map +1 -0
- package/dist/commands/task/status.d.ts +46 -0
- package/dist/commands/task/status.d.ts.map +1 -0
- package/dist/commands/task/status.js +348 -0
- package/dist/commands/task/status.js.map +1 -0
- package/dist/commands/team/index.d.ts +5 -0
- package/dist/commands/team/index.d.ts.map +1 -1
- package/dist/commands/team/index.js +28 -0
- package/dist/commands/team/index.js.map +1 -1
- package/dist/commands/team/status.d.ts +16 -0
- package/dist/commands/team/status.d.ts.map +1 -0
- package/dist/commands/team/status.js +180 -0
- package/dist/commands/team/status.js.map +1 -0
- package/dist/index.js +21 -32
- package/dist/index.js.map +1 -1
- package/dist/lib/adoption-score.d.ts +69 -0
- package/dist/lib/adoption-score.d.ts.map +1 -0
- package/dist/lib/adoption-score.js +206 -0
- package/dist/lib/adoption-score.js.map +1 -0
- package/dist/lib/coaching-level.d.ts +127 -0
- package/dist/lib/coaching-level.d.ts.map +1 -0
- package/dist/lib/coaching-level.js +406 -0
- package/dist/lib/coaching-level.js.map +1 -0
- package/dist/lib/context-loader-events.d.ts.map +1 -1
- package/dist/lib/context-loader-events.js +7 -26
- package/dist/lib/context-loader-events.js.map +1 -1
- package/dist/lib/event-logger.d.ts +42 -0
- package/dist/lib/event-logger.d.ts.map +1 -1
- package/dist/lib/event-logger.js +77 -0
- package/dist/lib/event-logger.js.map +1 -1
- package/dist/lib/output-formatter.d.ts +8 -2
- package/dist/lib/output-formatter.d.ts.map +1 -1
- package/dist/lib/output-formatter.js +98 -18
- package/dist/lib/output-formatter.js.map +1 -1
- package/dist/lib/pending-updates.d.ts +148 -0
- package/dist/lib/pending-updates.d.ts.map +1 -0
- package/dist/lib/pending-updates.js +301 -0
- package/dist/lib/pending-updates.js.map +1 -0
- package/dist/lib/planning-menu.d.ts +69 -0
- package/dist/lib/planning-menu.d.ts.map +1 -0
- package/dist/lib/planning-menu.js +342 -0
- package/dist/lib/planning-menu.js.map +1 -0
- package/dist/lib/sprint-loader.d.ts +86 -14
- package/dist/lib/sprint-loader.d.ts.map +1 -1
- package/dist/lib/sprint-loader.js +293 -98
- package/dist/lib/sprint-loader.js.map +1 -1
- package/dist/lib/state-cache.d.ts +142 -0
- package/dist/lib/state-cache.d.ts.map +1 -0
- package/dist/lib/state-cache.js +259 -0
- package/dist/lib/state-cache.js.map +1 -0
- package/dist/lib/targeted-coaching.d.ts +71 -0
- package/dist/lib/targeted-coaching.d.ts.map +1 -0
- package/dist/lib/targeted-coaching.js +318 -0
- package/dist/lib/targeted-coaching.js.map +1 -0
- package/dist/lib/task-graph-sync.d.ts +105 -0
- package/dist/lib/task-graph-sync.d.ts.map +1 -0
- package/dist/lib/task-graph-sync.js +178 -0
- package/dist/lib/task-graph-sync.js.map +1 -0
- package/dist/lib/task-parser.d.ts +109 -0
- package/dist/lib/task-parser.d.ts.map +1 -0
- package/dist/lib/task-parser.js +407 -0
- package/dist/lib/task-parser.js.map +1 -0
- package/dist/lib/user-sprint.d.ts +53 -0
- package/dist/lib/user-sprint.d.ts.map +1 -1
- package/dist/lib/user-sprint.js +137 -2
- package/dist/lib/user-sprint.js.map +1 -1
- package/dist/lib/work-reconciliation.d.ts +59 -0
- package/dist/lib/work-reconciliation.d.ts.map +1 -0
- package/dist/lib/work-reconciliation.js +267 -0
- package/dist/lib/work-reconciliation.js.map +1 -0
- package/dist/templates/ai-instructions-template.d.ts.map +1 -1
- package/dist/templates/ai-instructions-template.js +7 -5
- package/dist/templates/ai-instructions-template.js.map +1 -1
- package/dist/templates/epic-template.md +0 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +7 -5
- package/dist/types/config.js.map +1 -1
- package/dist/utils/synthesis.d.ts +4 -0
- package/dist/utils/synthesis.d.ts.map +1 -1
- package/dist/utils/synthesis.js +12 -18
- package/dist/utils/synthesis.js.map +1 -1
- package/dist/utils/version-check.d.ts +26 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +186 -0
- package/dist/utils/version-check.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-20
|
|
5
|
+
* @tags: [migrate, status, sprint-to-graph, epic-015, sprint-3]
|
|
6
|
+
* @related: [../sync/sprint-syncer.ts, ../graph/api-client.ts, ../task/status.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [glob, chalk, fs]
|
|
10
|
+
*/
|
|
11
|
+
import { TaskStatus } from '../graph/api-client.js';
|
|
12
|
+
export interface MigrationTask {
|
|
13
|
+
id: string;
|
|
14
|
+
currentStatus: string;
|
|
15
|
+
targetStatus: TaskStatus;
|
|
16
|
+
sprintId: string;
|
|
17
|
+
sprintFile: string;
|
|
18
|
+
lineNumber: number;
|
|
19
|
+
}
|
|
20
|
+
export interface MigrationReport {
|
|
21
|
+
totalTasks: number;
|
|
22
|
+
toUpdate: MigrationTask[];
|
|
23
|
+
noChange: MigrationTask[];
|
|
24
|
+
errors: Array<{
|
|
25
|
+
task: MigrationTask;
|
|
26
|
+
error: string;
|
|
27
|
+
}>;
|
|
28
|
+
updated: MigrationTask[];
|
|
29
|
+
skipped: MigrationTask[];
|
|
30
|
+
}
|
|
31
|
+
export interface StatusMigrationOptions {
|
|
32
|
+
dryRun?: boolean;
|
|
33
|
+
verbose?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Find all sprint files in the project
|
|
37
|
+
*/
|
|
38
|
+
export declare function findSprintFiles(projectRoot: string): Promise<string[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Parse tasks from sprint markdown content
|
|
41
|
+
* Supports two formats:
|
|
42
|
+
* 1. Block format with **ID:** and **Status:** lines
|
|
43
|
+
* 2. Simple list format: - [x] e015_s03_t01 - Description
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseTasksFromMarkdown(content: string, sprintFile: string, sprintId: string): MigrationTask[];
|
|
46
|
+
/**
|
|
47
|
+
* Scan all sprint files and build migration plan
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildMigrationPlan(projectRoot: string): Promise<MigrationTask[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Execute the migration
|
|
52
|
+
*/
|
|
53
|
+
export declare function executeMigration(tasks: MigrationTask[], options?: StatusMigrationOptions): Promise<MigrationReport>;
|
|
54
|
+
/**
|
|
55
|
+
* Main migration command entry point
|
|
56
|
+
*/
|
|
57
|
+
export declare function runStatusMigration(options?: StatusMigrationOptions): Promise<void>;
|
|
58
|
+
//# sourceMappingURL=status-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-migration.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/status-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,OAAO,EAAkB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AASpE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,UAAU,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA6CD;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM5E;AAsDD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAmDjB;AAMD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAqBtF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,eAAe,CAAC,CAqE1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE5F"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-20
|
|
5
|
+
* @tags: [migrate, status, sprint-to-graph, epic-015, sprint-3]
|
|
6
|
+
* @related: [../sync/sprint-syncer.ts, ../graph/api-client.ts, ../task/status.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [glob, chalk, fs]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Status Migration (EPIC-015 Sprint 3 Task 1)
|
|
13
|
+
*
|
|
14
|
+
* Migrates task status from sprint markdown files to the knowledge graph.
|
|
15
|
+
* This is a one-way migration: markdown -> graph.
|
|
16
|
+
*
|
|
17
|
+
* Checkbox mapping:
|
|
18
|
+
* [x] -> complete
|
|
19
|
+
* [@] -> in_progress
|
|
20
|
+
* [Z] -> not_started (paused)
|
|
21
|
+
* [ ] -> not_started
|
|
22
|
+
*/
|
|
23
|
+
import * as fs from 'fs/promises';
|
|
24
|
+
import * as path from 'path';
|
|
25
|
+
import glob from 'glob';
|
|
26
|
+
import { promisify } from 'util';
|
|
27
|
+
import chalk from 'chalk';
|
|
28
|
+
import { GraphApiClient } from '../graph/api-client.js';
|
|
29
|
+
import { getGraphId } from '../graph/config.js';
|
|
30
|
+
const globAsync = promisify(glob);
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Checkbox Parsing
|
|
33
|
+
// =============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Map markdown checkbox to graph task status
|
|
36
|
+
*/
|
|
37
|
+
function checkboxToStatus(checkbox) {
|
|
38
|
+
switch (checkbox.toLowerCase()) {
|
|
39
|
+
case 'x':
|
|
40
|
+
return 'complete';
|
|
41
|
+
case '@':
|
|
42
|
+
return 'in_progress';
|
|
43
|
+
case 'z':
|
|
44
|
+
// [Z] is "paused" in markdown, maps to not_started in graph
|
|
45
|
+
return 'not_started';
|
|
46
|
+
case ' ':
|
|
47
|
+
default:
|
|
48
|
+
return 'not_started';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get display name for checkbox character
|
|
53
|
+
*/
|
|
54
|
+
function checkboxDisplay(checkbox) {
|
|
55
|
+
switch (checkbox.toLowerCase()) {
|
|
56
|
+
case 'x':
|
|
57
|
+
return '[x] complete';
|
|
58
|
+
case '@':
|
|
59
|
+
return '[@] in_progress';
|
|
60
|
+
case 'z':
|
|
61
|
+
return '[Z] paused';
|
|
62
|
+
case ' ':
|
|
63
|
+
default:
|
|
64
|
+
return '[ ] not_started';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// Sprint File Parsing
|
|
69
|
+
// =============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Find all sprint files in the project
|
|
72
|
+
*/
|
|
73
|
+
export async function findSprintFiles(projectRoot) {
|
|
74
|
+
const pattern = path.join(projectRoot, 'docs/sprints/SPRINT-*.md');
|
|
75
|
+
const files = await globAsync(pattern);
|
|
76
|
+
// Filter out CURRENT-SPRINT.md as it's a symlink/copy
|
|
77
|
+
return files.filter(f => !f.includes('CURRENT-SPRINT.md'));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extract sprint ID from file content
|
|
81
|
+
* Looks for patterns like e006_s02 or adhoc_251209_s01 in task IDs or sprint declarations
|
|
82
|
+
*/
|
|
83
|
+
function extractSprintIdFromContent(content) {
|
|
84
|
+
// Try to find sprint ID from task IDs in content
|
|
85
|
+
// Pattern: **ID:** e015_s03_t01 -> extract e015_s03
|
|
86
|
+
const taskIdMatch = content.match(/\*\*ID:\*\*\s*`?(e\d{3}_s\d{2}|adhoc_\d{6}_s\d{2})_t\d{2}/);
|
|
87
|
+
if (taskIdMatch) {
|
|
88
|
+
return taskIdMatch[1];
|
|
89
|
+
}
|
|
90
|
+
// Try to find sprint ID directly declared
|
|
91
|
+
// Pattern: **ID:** `adhoc_260117_s01` or **ID:** e015_s03
|
|
92
|
+
const sprintIdMatch = content.match(/\*\*ID:\*\*\s*`?(e\d{3}_s\d{2}|adhoc_\d{6}_s\d{2})`?/);
|
|
93
|
+
if (sprintIdMatch) {
|
|
94
|
+
return sprintIdMatch[1];
|
|
95
|
+
}
|
|
96
|
+
// Fallback: look for standalone sprint reference
|
|
97
|
+
const sprintMatch = content.match(/Sprint[:\s]+`?(e\d{3}_s\d{2}|adhoc_\d{6}_s\d{2})`?/i);
|
|
98
|
+
if (sprintMatch) {
|
|
99
|
+
return sprintMatch[1];
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Extract sprint ID from filename as fallback
|
|
105
|
+
* e.g., SPRINT-2025-12-epic006-sprint2.md -> e006_s02
|
|
106
|
+
*/
|
|
107
|
+
function extractSprintIdFromFilename(filePath) {
|
|
108
|
+
const filename = path.basename(filePath);
|
|
109
|
+
// Pattern: e015-s03 format
|
|
110
|
+
const directMatch = filename.match(/e(\d{3})-s(\d{2})/i);
|
|
111
|
+
if (directMatch) {
|
|
112
|
+
return `e${directMatch[1]}_s${directMatch[2]}`;
|
|
113
|
+
}
|
|
114
|
+
// Pattern: epic006-sprint2 format
|
|
115
|
+
const legacyMatch = filename.match(/epic(\d{1,3})-sprint(\d+)/i);
|
|
116
|
+
if (legacyMatch) {
|
|
117
|
+
const epicNum = legacyMatch[1].padStart(3, '0');
|
|
118
|
+
const sprintNum = legacyMatch[2].padStart(2, '0');
|
|
119
|
+
return `e${epicNum}_s${sprintNum}`;
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Parse tasks from sprint markdown content
|
|
125
|
+
* Supports two formats:
|
|
126
|
+
* 1. Block format with **ID:** and **Status:** lines
|
|
127
|
+
* 2. Simple list format: - [x] e015_s03_t01 - Description
|
|
128
|
+
*/
|
|
129
|
+
export function parseTasksFromMarkdown(content, sprintFile, sprintId) {
|
|
130
|
+
const tasks = [];
|
|
131
|
+
const lines = content.split('\n');
|
|
132
|
+
let currentTaskId = null;
|
|
133
|
+
for (let i = 0; i < lines.length; i++) {
|
|
134
|
+
const line = lines[i];
|
|
135
|
+
// Format 1: Block format with **ID:** line
|
|
136
|
+
const idMatch = line.match(/\*\*ID:\*\*\s*(\w+)/);
|
|
137
|
+
if (idMatch) {
|
|
138
|
+
currentTaskId = idMatch[1];
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
// Format 1: Block format **Status:** line
|
|
142
|
+
const blockStatusMatch = line.match(/\*\*Status:\*\*\s*\[([ xX@Z])\]/);
|
|
143
|
+
if (blockStatusMatch && currentTaskId) {
|
|
144
|
+
const checkbox = blockStatusMatch[1];
|
|
145
|
+
tasks.push({
|
|
146
|
+
id: currentTaskId,
|
|
147
|
+
currentStatus: checkboxDisplay(checkbox),
|
|
148
|
+
targetStatus: checkboxToStatus(checkbox),
|
|
149
|
+
sprintId,
|
|
150
|
+
sprintFile,
|
|
151
|
+
lineNumber: i + 1,
|
|
152
|
+
});
|
|
153
|
+
currentTaskId = null;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// Format 2: Simple list format - [x] task_id - Description
|
|
157
|
+
// Matches: - [x] e015_s03_t01 - Description
|
|
158
|
+
// Also matches: - [x] TASK-1 - Description
|
|
159
|
+
const listMatch = line.match(/^[-*]\s*\[([ xX@Z])\]\s*(e\d{3}_s\d{2}_t\d{2}|TASK-\d+)/);
|
|
160
|
+
if (listMatch) {
|
|
161
|
+
const checkbox = listMatch[1];
|
|
162
|
+
const taskId = listMatch[2];
|
|
163
|
+
tasks.push({
|
|
164
|
+
id: taskId,
|
|
165
|
+
currentStatus: checkboxDisplay(checkbox),
|
|
166
|
+
targetStatus: checkboxToStatus(checkbox),
|
|
167
|
+
sprintId,
|
|
168
|
+
sprintFile,
|
|
169
|
+
lineNumber: i + 1,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return tasks;
|
|
174
|
+
}
|
|
175
|
+
// =============================================================================
|
|
176
|
+
// Migration Logic
|
|
177
|
+
// =============================================================================
|
|
178
|
+
/**
|
|
179
|
+
* Scan all sprint files and build migration plan
|
|
180
|
+
*/
|
|
181
|
+
export async function buildMigrationPlan(projectRoot) {
|
|
182
|
+
const sprintFiles = await findSprintFiles(projectRoot);
|
|
183
|
+
const allTasks = [];
|
|
184
|
+
for (const filePath of sprintFiles) {
|
|
185
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
186
|
+
// Extract sprint ID
|
|
187
|
+
const sprintId = extractSprintIdFromContent(content) || extractSprintIdFromFilename(filePath);
|
|
188
|
+
if (!sprintId) {
|
|
189
|
+
console.warn(chalk.yellow(` Warning: Could not determine sprint ID for ${path.basename(filePath)}`));
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const tasks = parseTasksFromMarkdown(content, filePath, sprintId);
|
|
193
|
+
allTasks.push(...tasks);
|
|
194
|
+
}
|
|
195
|
+
return allTasks;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Execute the migration
|
|
199
|
+
*/
|
|
200
|
+
export async function executeMigration(tasks, options = {}) {
|
|
201
|
+
const report = {
|
|
202
|
+
totalTasks: tasks.length,
|
|
203
|
+
toUpdate: [],
|
|
204
|
+
noChange: [],
|
|
205
|
+
errors: [],
|
|
206
|
+
updated: [],
|
|
207
|
+
skipped: [],
|
|
208
|
+
};
|
|
209
|
+
// Get graph ID
|
|
210
|
+
const graphId = process.env.GINKO_GRAPH_ID || (await getGraphId());
|
|
211
|
+
if (!graphId) {
|
|
212
|
+
console.error(chalk.red('Error: Graph not initialized. Run `ginko graph init` first.'));
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
const client = new GraphApiClient();
|
|
216
|
+
// Check current status for each task and categorize
|
|
217
|
+
console.log(chalk.dim('Checking current graph status...'));
|
|
218
|
+
for (const task of tasks) {
|
|
219
|
+
try {
|
|
220
|
+
const currentGraphStatus = await client.getTaskStatus(graphId, task.id);
|
|
221
|
+
if (currentGraphStatus.status === task.targetStatus) {
|
|
222
|
+
report.noChange.push(task);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
report.toUpdate.push(task);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
// Task might not exist in graph - treat as needing update
|
|
230
|
+
if (error instanceof Error && error.message.includes('not found')) {
|
|
231
|
+
report.toUpdate.push(task);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
// Other errors - still try to update
|
|
235
|
+
report.toUpdate.push(task);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// If dry run, just return the plan
|
|
240
|
+
if (options.dryRun) {
|
|
241
|
+
return report;
|
|
242
|
+
}
|
|
243
|
+
// Execute updates
|
|
244
|
+
console.log(chalk.cyan('\nMigrating task statuses...'));
|
|
245
|
+
for (const task of report.toUpdate) {
|
|
246
|
+
try {
|
|
247
|
+
await client.updateTaskStatus(graphId, task.id, task.targetStatus);
|
|
248
|
+
report.updated.push(task);
|
|
249
|
+
if (options.verbose) {
|
|
250
|
+
console.log(chalk.green(` ✓ ${task.id}: ${task.currentStatus} -> ${task.targetStatus}`));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
255
|
+
report.errors.push({ task, error: errorMsg });
|
|
256
|
+
if (options.verbose) {
|
|
257
|
+
console.log(chalk.red(` ✗ ${task.id}: ${errorMsg}`));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return report;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Main migration command entry point
|
|
265
|
+
*/
|
|
266
|
+
export async function runStatusMigration(options = {}) {
|
|
267
|
+
const projectRoot = process.cwd();
|
|
268
|
+
const { dryRun = false, verbose = false } = options;
|
|
269
|
+
console.log(chalk.bold('\nStatus Migration: Markdown -> Graph\n'));
|
|
270
|
+
// Build migration plan
|
|
271
|
+
console.log(chalk.dim('Scanning sprint files...'));
|
|
272
|
+
const tasks = await buildMigrationPlan(projectRoot);
|
|
273
|
+
if (tasks.length === 0) {
|
|
274
|
+
console.log(chalk.yellow('No tasks found in sprint files.'));
|
|
275
|
+
console.log(chalk.dim(' Expected files in: docs/sprints/SPRINT-*.md'));
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
console.log(chalk.dim(`Found ${tasks.length} tasks in sprint files.\n`));
|
|
279
|
+
// Execute migration
|
|
280
|
+
const report = await executeMigration(tasks, { dryRun, verbose });
|
|
281
|
+
// Display report
|
|
282
|
+
console.log(chalk.bold('\n--- Migration Report ---\n'));
|
|
283
|
+
if (dryRun) {
|
|
284
|
+
console.log(chalk.cyan('DRY RUN - No changes made\n'));
|
|
285
|
+
console.log(chalk.bold('Migration Plan:'));
|
|
286
|
+
console.log(` Tasks to update: ${chalk.cyan(report.toUpdate.length)}`);
|
|
287
|
+
console.log(` Already in sync: ${chalk.dim(report.noChange.length)}`);
|
|
288
|
+
console.log(` Total tasks: ${report.totalTasks}`);
|
|
289
|
+
// Show tasks to update in verbose mode
|
|
290
|
+
if (verbose) {
|
|
291
|
+
if (report.toUpdate.length > 0) {
|
|
292
|
+
console.log(chalk.bold('\nTasks to update:'));
|
|
293
|
+
for (const task of report.toUpdate) {
|
|
294
|
+
console.log(` ${chalk.cyan(task.id)}: ${chalk.yellow(task.currentStatus)} -> ${chalk.green(task.targetStatus)}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
console.log(chalk.dim('\nAll tasks already in sync with graph.'));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
console.log(chalk.dim('\nRun without --dry-run to apply changes.'));
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
console.log(chalk.bold('Results:'));
|
|
305
|
+
console.log(` Updated: ${chalk.green(report.updated.length)}`);
|
|
306
|
+
console.log(` No change: ${chalk.dim(report.noChange.length)}`);
|
|
307
|
+
console.log(` Errors: ${report.errors.length > 0 ? chalk.red(report.errors.length) : chalk.dim('0')}`);
|
|
308
|
+
console.log(` Total: ${report.totalTasks}`);
|
|
309
|
+
if (report.errors.length > 0) {
|
|
310
|
+
console.log(chalk.bold('\nErrors:'));
|
|
311
|
+
for (const { task, error } of report.errors) {
|
|
312
|
+
console.log(chalk.red(` ${task.id}: ${error}`));
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (report.updated.length > 0) {
|
|
316
|
+
console.log(chalk.green('\n✓ Migration complete'));
|
|
317
|
+
}
|
|
318
|
+
else if (report.errors.length === 0) {
|
|
319
|
+
console.log(chalk.dim('\nNo updates needed - already in sync'));
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=status-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-migration.js","sourceRoot":"","sources":["../../../src/commands/migrate/status-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command-index
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-26
|
|
5
|
+
* @tags: [cli, nudging, coaching, command, epic-016-s05]
|
|
6
|
+
* @related: [coaching-level.ts, adoption-score.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [commander, chalk]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* ginko nudging - Manual override for coaching intensity (EPIC-016 Sprint 5 Task 2)
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ginko nudging # View current level
|
|
16
|
+
* ginko nudging minimal # Set to minimal (expert mode)
|
|
17
|
+
* ginko nudging standard # Set to balanced guidance
|
|
18
|
+
* ginko nudging supportive # Set to extra help
|
|
19
|
+
* ginko nudging auto # Return to auto-adjustment
|
|
20
|
+
*/
|
|
21
|
+
import { Command } from 'commander';
|
|
22
|
+
export declare function nudgingCommand(): Command;
|
|
23
|
+
export default nudgingCommand;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/nudging/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiJpC,wBAAgB,cAAc,IAAI,OAAO,CAoCxC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command-index
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-26
|
|
5
|
+
* @tags: [cli, nudging, coaching, command, epic-016-s05]
|
|
6
|
+
* @related: [coaching-level.ts, adoption-score.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [commander, chalk]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* ginko nudging - Manual override for coaching intensity (EPIC-016 Sprint 5 Task 2)
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ginko nudging # View current level
|
|
16
|
+
* ginko nudging minimal # Set to minimal (expert mode)
|
|
17
|
+
* ginko nudging standard # Set to balanced guidance
|
|
18
|
+
* ginko nudging supportive # Set to extra help
|
|
19
|
+
* ginko nudging auto # Return to auto-adjustment
|
|
20
|
+
*/
|
|
21
|
+
import { Command } from 'commander';
|
|
22
|
+
import chalk from 'chalk';
|
|
23
|
+
import { getCoachingContext, setCoachingOverride, } from '../../lib/coaching-level.js';
|
|
24
|
+
import { getGraphId } from '../graph/config.js';
|
|
25
|
+
import { logCoachingLevelChange } from '../../lib/event-logger.js';
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// Level Descriptions
|
|
28
|
+
// =============================================================================
|
|
29
|
+
const LEVEL_INFO = {
|
|
30
|
+
minimal: {
|
|
31
|
+
emoji: '🚀',
|
|
32
|
+
label: 'Minimal',
|
|
33
|
+
description: 'Brief prompts, assume competence',
|
|
34
|
+
},
|
|
35
|
+
standard: {
|
|
36
|
+
emoji: '📋',
|
|
37
|
+
label: 'Standard',
|
|
38
|
+
description: 'Balanced guidance with context',
|
|
39
|
+
},
|
|
40
|
+
supportive: {
|
|
41
|
+
emoji: '🤝',
|
|
42
|
+
label: 'Supportive',
|
|
43
|
+
description: 'Detailed prompts with examples',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const SOURCE_LABELS = {
|
|
47
|
+
dashboard: 'Live dashboard insights',
|
|
48
|
+
cache: 'Cached insights',
|
|
49
|
+
adoption_fallback: 'Local adoption score (offline)',
|
|
50
|
+
};
|
|
51
|
+
// =============================================================================
|
|
52
|
+
// Display Helpers
|
|
53
|
+
// =============================================================================
|
|
54
|
+
function formatScore(score) {
|
|
55
|
+
if (score >= 75)
|
|
56
|
+
return chalk.green(`${score}`);
|
|
57
|
+
if (score >= 60)
|
|
58
|
+
return chalk.yellow(`${score}`);
|
|
59
|
+
return chalk.red(`${score}`);
|
|
60
|
+
}
|
|
61
|
+
function formatLevel(level) {
|
|
62
|
+
const info = LEVEL_INFO[level];
|
|
63
|
+
return `${info.emoji} ${info.label}`;
|
|
64
|
+
}
|
|
65
|
+
// =============================================================================
|
|
66
|
+
// View Command
|
|
67
|
+
// =============================================================================
|
|
68
|
+
async function viewNudgingStatus() {
|
|
69
|
+
const graphId = await getGraphId();
|
|
70
|
+
const context = await getCoachingContext(graphId || undefined);
|
|
71
|
+
console.log(chalk.cyan('\n🎯 Coaching Settings\n'));
|
|
72
|
+
// Current level
|
|
73
|
+
const levelInfo = LEVEL_INFO[context.level];
|
|
74
|
+
console.log(` Current level: ${formatLevel(context.level)}`);
|
|
75
|
+
console.log(chalk.dim(` ${levelInfo.description}`));
|
|
76
|
+
// Score info
|
|
77
|
+
console.log(`\n 7-day score: ${formatScore(context.overallScore)}/100`);
|
|
78
|
+
// Category breakdown
|
|
79
|
+
console.log(chalk.dim('\n Category Breakdown:'));
|
|
80
|
+
console.log(chalk.dim(` Session Efficiency: ${context.metrics.sessionEfficiency}`));
|
|
81
|
+
console.log(chalk.dim(` Pattern Adoption: ${context.metrics.patternAdoption}`));
|
|
82
|
+
console.log(chalk.dim(` Collaboration Quality: ${context.metrics.collaborationQuality}`));
|
|
83
|
+
console.log(chalk.dim(` Anti-Patterns: ${context.metrics.antiPatterns}`));
|
|
84
|
+
// Source
|
|
85
|
+
console.log(chalk.dim(`\n Data source: ${SOURCE_LABELS[context.source]}`));
|
|
86
|
+
if (context.cacheAge !== undefined) {
|
|
87
|
+
console.log(chalk.dim(` Cache age: ${context.cacheAge} minutes`));
|
|
88
|
+
}
|
|
89
|
+
// Override status
|
|
90
|
+
if (context.override) {
|
|
91
|
+
console.log(chalk.yellow(`\n ⚠️ Manual override active: ${context.override}`));
|
|
92
|
+
console.log(chalk.dim(' Run `ginko nudging auto` to return to auto-adjustment'));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(chalk.green('\n ✓ Auto-adjusting based on 7-day insights'));
|
|
96
|
+
}
|
|
97
|
+
console.log('');
|
|
98
|
+
}
|
|
99
|
+
// =============================================================================
|
|
100
|
+
// Set Command
|
|
101
|
+
// =============================================================================
|
|
102
|
+
async function setNudgingLevel(level) {
|
|
103
|
+
// Validate level
|
|
104
|
+
const validLevels = ['minimal', 'standard', 'supportive', 'auto'];
|
|
105
|
+
if (!validLevels.includes(level)) {
|
|
106
|
+
console.error(chalk.red(`\n✗ Invalid level: ${level}`));
|
|
107
|
+
console.error(chalk.dim(` Valid options: ${validLevels.join(', ')}`));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Get previous level before changing
|
|
111
|
+
const graphId = await getGraphId();
|
|
112
|
+
const previousContext = await getCoachingContext(graphId || undefined);
|
|
113
|
+
const previousLevel = previousContext.level;
|
|
114
|
+
await setCoachingOverride(level);
|
|
115
|
+
if (level === 'auto') {
|
|
116
|
+
// Fetch current auto level
|
|
117
|
+
const context = await getCoachingContext(graphId || undefined);
|
|
118
|
+
console.log(chalk.green('\n✓ Coaching returned to auto-adjustment'));
|
|
119
|
+
console.log(` Current level: ${formatLevel(context.level)} (score: ${context.overallScore})`);
|
|
120
|
+
// EPIC-016 Sprint 5 t05: Log level change for feedback loop
|
|
121
|
+
logCoachingLevelChange(context.level, false, context.overallScore, previousLevel).catch(() => {
|
|
122
|
+
// Non-critical - don't fail on logging errors
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const info = LEVEL_INFO[level];
|
|
127
|
+
console.log(chalk.green(`\n✓ Coaching set to: ${info.emoji} ${info.label}`));
|
|
128
|
+
console.log(chalk.dim(` ${info.description}`));
|
|
129
|
+
console.log(chalk.dim('\n Override active until: ginko nudging auto'));
|
|
130
|
+
// EPIC-016 Sprint 5 t05: Log level change for feedback loop
|
|
131
|
+
logCoachingLevelChange(level, true, previousContext.overallScore, previousLevel).catch(() => {
|
|
132
|
+
// Non-critical - don't fail on logging errors
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
console.log('');
|
|
136
|
+
}
|
|
137
|
+
// =============================================================================
|
|
138
|
+
// Command Registration
|
|
139
|
+
// =============================================================================
|
|
140
|
+
export function nudgingCommand() {
|
|
141
|
+
const nudging = new Command('nudging')
|
|
142
|
+
.description('Configure coaching intensity (EPIC-016 Sprint 5)')
|
|
143
|
+
.argument('[level]', 'Set coaching level: minimal, standard, supportive, or auto')
|
|
144
|
+
.action(async (level) => {
|
|
145
|
+
try {
|
|
146
|
+
if (level) {
|
|
147
|
+
await setNudgingLevel(level);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
await viewNudgingStatus();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// Add help examples
|
|
159
|
+
nudging.addHelpText('after', `
|
|
160
|
+
Examples:
|
|
161
|
+
$ ginko nudging # View current coaching level
|
|
162
|
+
$ ginko nudging minimal # Expert mode - brief prompts
|
|
163
|
+
$ ginko nudging standard # Balanced guidance
|
|
164
|
+
$ ginko nudging supportive # Extra help and examples
|
|
165
|
+
$ ginko nudging auto # Return to auto-adjustment
|
|
166
|
+
|
|
167
|
+
Levels are determined by your 7-day insight score:
|
|
168
|
+
≥75 → Minimal (assume competence)
|
|
169
|
+
60-74 → Standard (balanced guidance)
|
|
170
|
+
<60 → Supportive (detailed prompts)
|
|
171
|
+
`);
|
|
172
|
+
return nudging;
|
|
173
|
+
}
|
|
174
|
+
export default nudgingCommand;
|
|
175
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/nudging/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-26
|
|
5
|
+
* @tags: [sprint, create, conversational, ai, epic-016-s04]
|
|
6
|
+
* @related: [index.ts, quick-fix.ts, ../../lib/planning-menu.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [prompts, chalk, ora, ai-service]
|
|
10
|
+
*/
|
|
11
|
+
export interface CreateSprintResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
sprintId?: string;
|
|
14
|
+
taskCount?: number;
|
|
15
|
+
message?: string;
|
|
16
|
+
}
|
|
17
|
+
interface CreateSprintOptions {
|
|
18
|
+
adhoc?: boolean;
|
|
19
|
+
epic?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a new feature sprint (conversational flow)
|
|
23
|
+
*/
|
|
24
|
+
export declare function createSprintCommand(options?: CreateSprintOptions): Promise<CreateSprintResult>;
|
|
25
|
+
export default createSprintCommand;
|
|
26
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/sprint/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuCH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuKD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAiH7B;AAGD,eAAe,mBAAmB,CAAC"}
|