@lumoai/cli 1.15.0 → 1.17.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.
- package/README.md +13 -13
- package/assets/skill/SKILL.md +111 -0
- package/assets/skill/references/artifacts-figma.md +124 -0
- package/assets/skill/references/docs.md +306 -0
- package/assets/skill/references/memory.md +69 -0
- package/assets/skill/references/milestones.md +244 -0
- package/assets/skill/references/onboarding.md +102 -0
- package/assets/skill/references/sessions.md +142 -0
- package/assets/skill/references/sprints.md +157 -0
- package/assets/skill/references/task-context.md +109 -0
- package/assets/skill/references/tasks.md +205 -0
- package/dist/cli/src/commands/milestone-show.js +23 -0
- package/dist/cli/src/commands/setup.js +50 -22
- package/dist/cli/src/commands/sprint-show.js +32 -3
- package/dist/cli/src/index.js +1 -1
- package/package.json +1 -1
- package/assets/skill.md +0 -1445
|
@@ -10,7 +10,15 @@ const sanitize_1 = require("../lib/sanitize");
|
|
|
10
10
|
function fmtDate(iso) {
|
|
11
11
|
return iso ? iso.slice(0, 10) : '-';
|
|
12
12
|
}
|
|
13
|
-
function
|
|
13
|
+
function blockerLine(label, items) {
|
|
14
|
+
if (items.length === 0)
|
|
15
|
+
return null;
|
|
16
|
+
const rendered = items
|
|
17
|
+
.map(i => `${i.identifier} ${(0, sanitize_1.sanitizeField)(i.title)}`)
|
|
18
|
+
.join(', ');
|
|
19
|
+
return ` ${label.padEnd(11)}${rendered}`;
|
|
20
|
+
}
|
|
21
|
+
function formatSprintShow(s, progress, tasks, risk, topBlockers) {
|
|
14
22
|
const lines = [
|
|
15
23
|
`Sprint: #${s.number} ${(0, sanitize_1.sanitizeField)(s.name)}`,
|
|
16
24
|
`Status: ${s.status}`,
|
|
@@ -22,6 +30,27 @@ function formatSprintShow(s, progress, tasks) {
|
|
|
22
30
|
``,
|
|
23
31
|
`Progress: ${progress.done} / ${progress.total}`,
|
|
24
32
|
];
|
|
33
|
+
if (risk) {
|
|
34
|
+
lines.push(`Health: ${risk.level.toUpperCase()}`);
|
|
35
|
+
for (const r of risk.reasons) {
|
|
36
|
+
lines.push(` - ${(0, sanitize_1.sanitizeField)(r.detail)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (topBlockers) {
|
|
40
|
+
const blockerLines = [
|
|
41
|
+
blockerLine('Overdue:', topBlockers.overdueTaskIds),
|
|
42
|
+
blockerLine('Stalled:', topBlockers.stalledTaskIds),
|
|
43
|
+
blockerLine('Agent fail:', topBlockers.failingAgentTaskIds),
|
|
44
|
+
topBlockers.staleOpenPrNumbers.length > 0
|
|
45
|
+
? ` ${'Stale PRs:'.padEnd(11)}${topBlockers.staleOpenPrNumbers
|
|
46
|
+
.map(n => `#${n}`)
|
|
47
|
+
.join(', ')}`
|
|
48
|
+
: null,
|
|
49
|
+
].filter((l) => l !== null);
|
|
50
|
+
if (blockerLines.length > 0) {
|
|
51
|
+
lines.push('Blockers:', ...blockerLines);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
25
54
|
if (tasks.length > 0) {
|
|
26
55
|
lines.push('', (0, format_1.formatTaskListTable)(tasks));
|
|
27
56
|
}
|
|
@@ -75,7 +104,7 @@ async function sprintShow(identifier, opts) {
|
|
|
75
104
|
console.error(`Error: sprint tasks failed (HTTP ${tasksRes.status})`);
|
|
76
105
|
return 1;
|
|
77
106
|
}
|
|
78
|
-
const { sprint, progress } = (await sprintRes.json());
|
|
107
|
+
const { sprint, progress, risk, topBlockers } = (await sprintRes.json());
|
|
79
108
|
const { tasks } = (await tasksRes.json());
|
|
80
|
-
process.stdout.write(formatSprintShow(sprint, progress, tasks) + '\n');
|
|
109
|
+
process.stdout.write(formatSprintShow(sprint, progress, tasks, risk, topBlockers) + '\n');
|
|
81
110
|
}
|
package/dist/cli/src/index.js
CHANGED
|
@@ -186,7 +186,7 @@ program
|
|
|
186
186
|
.description('Install the Lumo Claude Code skill and wire hook handlers into .claude/settings.json. Run via `npx @lumoai/cli setup` for first-time onboarding.')
|
|
187
187
|
.option('--user', 'Install into ~/.claude (applies across all projects for this user)')
|
|
188
188
|
.option('--project', 'Install into ./.claude (applies to the current project only)')
|
|
189
|
-
.option('--force', 'Overwrite
|
|
189
|
+
.option('--force', 'Overwrite existing skill files (SKILL.md + references/) when they differ from the bundled version')
|
|
190
190
|
.option('--agent <token>', 'Coding agent these hooks run under (claude-code, codex, cursor, gemini-cli, github-copilot, windsurf). Baked into every hook command. Defaults to claude-code.')
|
|
191
191
|
.action(wrap(options => (0, setup_1.setup)(options)));
|
|
192
192
|
program
|