@cliangdev/flux-plugin 0.2.0-dev.e34d43b → 0.2.0-dev.f718bcf
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/agents/coder.md +150 -25
- package/commands/breakdown.md +44 -7
- package/commands/implement.md +165 -15
- package/commands/prd.md +176 -1
- package/manifest.json +2 -1
- package/package.json +4 -2
- package/skills/prd-writer/SKILL.md +184 -0
- package/skills/ux-ui-design/SKILL.md +346 -0
- package/skills/ux-ui-design/references/design-tokens.md +359 -0
- package/src/dashboard/__tests__/api.test.ts +211 -0
- package/src/dashboard/browser.ts +35 -0
- package/src/dashboard/public/app.js +869 -0
- package/src/dashboard/public/index.html +90 -0
- package/src/dashboard/public/styles.css +807 -0
- package/src/dashboard/public/vendor/highlight.css +10 -0
- package/src/dashboard/public/vendor/highlight.min.js +8422 -0
- package/src/dashboard/public/vendor/marked.min.js +2210 -0
- package/src/dashboard/server.ts +296 -0
- package/src/dashboard/watchers.ts +83 -0
- package/src/server/adapters/__tests__/dependency-ops.test.ts +52 -18
- package/src/server/adapters/linear/adapter.ts +19 -14
- package/src/server/adapters/local-adapter.ts +48 -7
- package/src/server/db/__tests__/queries.test.ts +2 -1
- package/src/server/db/schema.ts +9 -0
- package/src/server/tools/__tests__/crud.test.ts +111 -1
- package/src/server/tools/__tests__/mcp-interface.test.ts +2 -1
- package/src/server/tools/__tests__/query.test.ts +73 -2
- package/src/server/tools/__tests__/z-configure-linear.test.ts +1 -1
- package/src/server/tools/__tests__/z-get-linear-url.test.ts +1 -1
- package/src/server/tools/create-epic.ts +11 -2
- package/src/server/tools/create-prd.ts +11 -2
- package/src/server/tools/create-task.ts +11 -2
- package/src/server/tools/dependencies.ts +2 -2
- package/src/server/tools/get-entity.ts +12 -10
- package/src/server/tools/render-status.ts +38 -20
- package/src/status-line/__tests__/status-line.test.ts +1 -1
- package/src/utils/status-renderer.ts +32 -6
|
@@ -34,12 +34,14 @@ interface Epic {
|
|
|
34
34
|
status: string;
|
|
35
35
|
task_count: number;
|
|
36
36
|
tasks_completed: number;
|
|
37
|
+
dependencies?: string[];
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
interface Task {
|
|
40
41
|
ref: string;
|
|
41
42
|
title: string;
|
|
42
43
|
status: string;
|
|
44
|
+
dependencies?: string[];
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
interface EpicWithTasks {
|
|
@@ -47,6 +49,7 @@ interface EpicWithTasks {
|
|
|
47
49
|
title: string;
|
|
48
50
|
status: string;
|
|
49
51
|
tasks: Task[];
|
|
52
|
+
dependencies?: string[];
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
interface Prd {
|
|
@@ -54,6 +57,7 @@ interface Prd {
|
|
|
54
57
|
title: string;
|
|
55
58
|
status: string;
|
|
56
59
|
epics: Epic[];
|
|
60
|
+
dependencies?: string[];
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
interface PrdWithTasks {
|
|
@@ -61,6 +65,7 @@ interface PrdWithTasks {
|
|
|
61
65
|
title: string;
|
|
62
66
|
status: string;
|
|
63
67
|
epics: EpicWithTasks[];
|
|
68
|
+
dependencies?: string[];
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
const STATUS_ORDER: Record<string, number> = {
|
|
@@ -117,13 +122,22 @@ export function renderSummaryView(
|
|
|
117
122
|
|
|
118
123
|
for (const prd of sortedPrds) {
|
|
119
124
|
const badge = getStatusBadge(prd.status);
|
|
120
|
-
|
|
125
|
+
const prdBlocked = prd.dependencies && prd.dependencies.length > 0;
|
|
126
|
+
const prdBlockedBy = prdBlocked
|
|
127
|
+
? ` ⚠️ blocked by: ${prd.dependencies?.join(", ")}`
|
|
128
|
+
: "";
|
|
129
|
+
lines.push(`${prd.ref} ${prd.title} ${badge}${prdBlockedBy}`);
|
|
121
130
|
|
|
122
131
|
for (const epic of prd.epics) {
|
|
123
132
|
const icon = getStatusIcon(epic.status);
|
|
133
|
+
const epicBlocked = epic.dependencies && epic.dependencies.length > 0;
|
|
134
|
+
const epicBlockedBy = epicBlocked
|
|
135
|
+
? ` ⚠️ blocked by: ${epic.dependencies?.join(", ")}`
|
|
136
|
+
: "";
|
|
137
|
+
|
|
124
138
|
if (epic.task_count === 0) {
|
|
125
139
|
lines.push(
|
|
126
|
-
` ${icon} ${epic.ref} ${epic.title} ·········· (no tasks)`,
|
|
140
|
+
` ${icon} ${epic.ref} ${epic.title} ·········· (no tasks)${epicBlockedBy}`,
|
|
127
141
|
);
|
|
128
142
|
} else {
|
|
129
143
|
const epicProgress = renderProgressBar(
|
|
@@ -131,7 +145,7 @@ export function renderSummaryView(
|
|
|
131
145
|
10,
|
|
132
146
|
);
|
|
133
147
|
lines.push(
|
|
134
|
-
` ${icon} ${epic.ref} ${epic.title} ${epicProgress} ${epic.tasks_completed}/${epic.task_count}`,
|
|
148
|
+
` ${icon} ${epic.ref} ${epic.title} ${epicProgress} ${epic.tasks_completed}/${epic.task_count}${epicBlockedBy}`,
|
|
135
149
|
);
|
|
136
150
|
}
|
|
137
151
|
}
|
|
@@ -157,23 +171,35 @@ export function renderFullTreeView(prds: PrdWithTasks[]): string {
|
|
|
157
171
|
|
|
158
172
|
for (const prd of sortedPrds) {
|
|
159
173
|
const prdBadge = getStatusBadge(prd.status);
|
|
174
|
+
const prdBlocked = prd.dependencies && prd.dependencies.length > 0;
|
|
175
|
+
const prdBlockedBy = prdBlocked
|
|
176
|
+
? ` ⚠️ blocked by: ${prd.dependencies?.join(", ")}`
|
|
177
|
+
: "";
|
|
160
178
|
lines.push(`${prd.ref} ${prd.title}`);
|
|
161
|
-
lines.push(`${prdBadge}`);
|
|
179
|
+
lines.push(`${prdBadge}${prdBlockedBy}`);
|
|
162
180
|
lines.push("");
|
|
163
181
|
|
|
164
182
|
for (const epic of prd.epics) {
|
|
165
183
|
const epicIcon = getStatusIcon(epic.status);
|
|
166
|
-
|
|
184
|
+
const epicBlocked = epic.dependencies && epic.dependencies.length > 0;
|
|
185
|
+
const epicBlockedBy = epicBlocked
|
|
186
|
+
? ` ⚠️ blocked by: ${epic.dependencies?.join(", ")}`
|
|
187
|
+
: "";
|
|
188
|
+
lines.push(` ${epicIcon} ${epic.ref} ${epic.title}${epicBlockedBy}`);
|
|
167
189
|
|
|
168
190
|
if (epic.tasks.length > 0) {
|
|
169
191
|
lines.push(` ┌${"─".repeat(50)}┐`);
|
|
170
192
|
|
|
171
193
|
for (const task of epic.tasks) {
|
|
172
194
|
const taskIcon = getStatusIcon(task.status);
|
|
195
|
+
const taskBlocked = task.dependencies && task.dependencies.length > 0;
|
|
196
|
+
const taskBlockedBy = taskBlocked
|
|
197
|
+
? ` ⚠️ blocked by: ${task.dependencies?.join(", ")}`
|
|
198
|
+
: "";
|
|
173
199
|
const currentMarker =
|
|
174
200
|
task.status === "IN_PROGRESS" ? " ← CURRENT" : "";
|
|
175
201
|
lines.push(
|
|
176
|
-
` │ ${taskIcon} ${task.ref} ${task.title}${currentMarker}`,
|
|
202
|
+
` │ ${taskIcon} ${task.ref} ${task.title}${currentMarker}${taskBlockedBy}`,
|
|
177
203
|
);
|
|
178
204
|
}
|
|
179
205
|
|