@jakkrichm/create-nexus-devflow 2.13.0 → 2.15.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.
Files changed (65) hide show
  1. package/README.md +4 -4
  2. package/dist/bin/create-nexus-devflow.d.ts +1 -1
  3. package/dist/bin/create-nexus-devflow.js +4 -3
  4. package/dist/bin/create-nexus-devflow.js.map +1 -1
  5. package/dist/lib/branch-context.d.ts +1 -0
  6. package/dist/lib/branch-context.js +8 -3
  7. package/dist/lib/branch-context.js.map +1 -1
  8. package/dist/lib/dashboard-page.d.ts +5 -2
  9. package/dist/lib/dashboard-page.js +7 -388
  10. package/dist/lib/dashboard-page.js.map +1 -1
  11. package/dist/lib/dashboard-snapshot.d.ts +22 -3
  12. package/dist/lib/dashboard-snapshot.js +154 -3
  13. package/dist/lib/dashboard-snapshot.js.map +1 -1
  14. package/dist/lib/delivery-lifecycle-engine.d.ts +1 -1
  15. package/dist/lib/delivery-lifecycle-engine.js +1 -1
  16. package/dist/lib/delivery-lifecycle-engine.js.map +1 -1
  17. package/dist/lib/mcp-server-engine.d.ts +57 -0
  18. package/dist/lib/mcp-server-engine.js +678 -0
  19. package/dist/lib/mcp-server-engine.js.map +1 -0
  20. package/dist/lib/mcp.d.ts +15 -27
  21. package/dist/lib/mcp.js +20 -646
  22. package/dist/lib/mcp.js.map +1 -1
  23. package/dist/lib/project-status-engine.d.ts +110 -0
  24. package/dist/lib/project-status-engine.js +493 -0
  25. package/dist/lib/project-status-engine.js.map +1 -0
  26. package/dist/lib/skill-manager.d.ts +2 -82
  27. package/dist/lib/skill-manager.js +15 -856
  28. package/dist/lib/skill-manager.js.map +1 -1
  29. package/dist/lib/skill-registry-engine.d.ts +121 -0
  30. package/dist/lib/skill-registry-engine.js +824 -0
  31. package/dist/lib/skill-registry-engine.js.map +1 -0
  32. package/dist/lib/status.d.ts +1 -90
  33. package/dist/lib/status.js +7 -467
  34. package/dist/lib/status.js.map +1 -1
  35. package/dist/lib/studio-view-renderer.d.ts +17 -1
  36. package/dist/lib/studio-view-renderer.js +855 -3
  37. package/dist/lib/studio-view-renderer.js.map +1 -1
  38. package/dist/lib/tooling/commands/scan-doc-contract.js +1 -0
  39. package/dist/lib/tooling/commands/scan-doc-contract.js.map +1 -1
  40. package/dist/lib/update.js +1 -1
  41. package/dist/lib/update.js.map +1 -1
  42. package/package.json +1 -1
  43. package/template/.agents/skills/complete/SKILL.md +14 -13
  44. package/template/.agents/skills/implement/SKILL.md +36 -2
  45. package/template/.claude/skills/complete/SKILL.md +14 -13
  46. package/template/.claude/skills/implement/SKILL.md +36 -2
  47. package/template/AGENTS.md +1 -1
  48. package/template/devflow/build-plan.md +5 -4
  49. package/template/devflow/context/ai-interaction.md +4 -2
  50. package/template/devflow/docs/USAGE.md +145 -0
  51. package/template/devflow/docs/diagrams/nexus-devflow-architecture.html +14821 -0
  52. package/template/devflow/docs/diagrams/nexus-devflow-architecture.json +80 -0
  53. package/template/devflow/docs/diagrams/nexus-devflow-lifecycle.html +14860 -0
  54. package/template/devflow/docs/diagrams/nexus-devflow-lifecycle.json +88 -0
  55. package/template/devflow/docs/examples/living-spec/adr.example.md +43 -0
  56. package/template/devflow/docs/examples/living-spec/current-feature.example.md +113 -0
  57. package/template/devflow/docs/examples/living-spec/discovery.example.md +45 -0
  58. package/template/devflow/docs/examples/living-spec/ideas.example.md +22 -0
  59. package/template/devflow/docs/governance-rules.md +39 -0
  60. package/template/devflow/docs/manual-review-workflow-spec.md +116 -0
  61. package/template/devflow/docs/markdown-metadata-contract.md +140 -0
  62. package/template/devflow/docs/quickstart.md +119 -0
  63. package/template/devflow/docs/release-process.md +52 -0
  64. package/template/devflow/docs/skill-selection-policy.md +64 -0
  65. package/template/devflow/docs/workflow-surface-map.md +85 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../lib/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../lib/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EAIf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EAIf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACf,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,IAAY,EACZ,OAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,UAAkB;IAElB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,WAAqB,OAAO,CAAC,KAAK,EAClC,YAAsB,OAAO,CAAC,MAAM;IAEpC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,110 @@
1
+ import type { ActiveRunSummary } from "./branch-context.js";
2
+ import type { CurrentWorkSummary, CurrentWorkType } from "./current-work.js";
3
+ import type { Finding, FindingStatus } from "./findings.js";
4
+ import type { GitStatusSummary } from "./git-status.js";
5
+ import type { ProjectAdapter } from "./project-metadata.js";
6
+ import type { IdeasSummary } from "./ideas.js";
7
+ import type { ProjectConfig, ProjectConfigState } from "./project-config.js";
8
+ import type { RunStateSummary } from "./run-state.js";
9
+ import type { ReviewCheckResult, ReviewFreshness, ReviewState } from "./review.js";
10
+ export type CompletionState = "blocked" | "idle" | "needs_verification" | "ready";
11
+ export interface StatusWarning {
12
+ code: string;
13
+ message: string;
14
+ }
15
+ export interface StatusConfiguration {
16
+ path: string;
17
+ state: ProjectConfigState;
18
+ values: ProjectConfig;
19
+ }
20
+ export type StatusActivity = Omit<RunStateSummary, "warnings">;
21
+ export interface StatusCurrentWork {
22
+ state: CurrentWorkSummary["state"];
23
+ type: CurrentWorkType | null;
24
+ title: string | null;
25
+ status: string | null;
26
+ runId: string | null;
27
+ completed: number;
28
+ remaining: number;
29
+ total: number;
30
+ nextStep: {
31
+ title: string;
32
+ } | null;
33
+ }
34
+ export interface StatusFindings {
35
+ total: number;
36
+ byStatus: Record<FindingStatus, number>;
37
+ active: Array<Pick<Finding, "id" | "severity" | "status" | "title">>;
38
+ blockers: Array<Pick<Finding, "id" | "severity" | "status" | "title">>;
39
+ }
40
+ export interface StatusReview {
41
+ state: ReviewState;
42
+ freshness: ReviewFreshness;
43
+ verdict: "changes-requested" | "passed" | null;
44
+ checkResult: ReviewCheckResult | null;
45
+ targetCommit: string | null;
46
+ requestedReviewer: string | null;
47
+ requestedModel: string | null;
48
+ requestedExecution: string | null;
49
+ reviewerAdapter: string | null;
50
+ reviewerModel: string | null;
51
+ actualExecution: string | null;
52
+ warnings: StatusWarning[];
53
+ }
54
+ export interface StatusActiveRun extends ActiveRunSummary {
55
+ review: StatusReview;
56
+ }
57
+ export interface StatusNextAction {
58
+ command: string | null;
59
+ reason: string;
60
+ }
61
+ export interface StatusCompletion {
62
+ state: CompletionState;
63
+ blockers: string[];
64
+ }
65
+ export interface HumanStatusOptions {
66
+ color?: boolean;
67
+ }
68
+ export interface TextStyle {
69
+ bold: (value: string) => string;
70
+ brightCyan: (value: string) => string;
71
+ cyan: (value: string) => string;
72
+ dim: (value: string) => string;
73
+ green: (value: string) => string;
74
+ red: (value: string) => string;
75
+ yellow: (value: string) => string;
76
+ }
77
+ export interface ProjectStatus {
78
+ schemaVersion: number;
79
+ health: "ok" | "warning";
80
+ project: {
81
+ name: string;
82
+ root: string;
83
+ };
84
+ devflow: {
85
+ version: string | null;
86
+ adapters: ProjectAdapter[];
87
+ };
88
+ configuration: StatusConfiguration;
89
+ activity: StatusActivity;
90
+ currentWork: StatusCurrentWork;
91
+ activeRuns: StatusActiveRun[];
92
+ findings: StatusFindings;
93
+ review: StatusReview;
94
+ ideas: IdeasSummary;
95
+ git: GitStatusSummary;
96
+ completion: StatusCompletion;
97
+ nextAction: StatusNextAction;
98
+ warnings: StatusWarning[];
99
+ }
100
+ export declare class ProjectStatusEngine {
101
+ private projectRoot;
102
+ constructor(projectRoot?: string);
103
+ getStatus(): Promise<ProjectStatus>;
104
+ formatHuman(status: ProjectStatus, options?: HumanStatusOptions): string;
105
+ shouldUseColor(isTTY?: boolean | undefined, environment?: NodeJS.ProcessEnv): boolean;
106
+ }
107
+ declare function shouldUseColor(isTTY?: boolean | undefined, environment?: NodeJS.ProcessEnv): boolean;
108
+ declare function readProjectStatus(startPath?: string): Promise<ProjectStatus>;
109
+ declare function formatHumanStatus(status: ProjectStatus, options?: HumanStatusOptions): string;
110
+ export { formatHumanStatus, readProjectStatus, shouldUseColor };
@@ -0,0 +1,493 @@
1
+ import fs from "node:fs/promises";
2
+ import { listActiveRunContexts, resolveActiveContextPaths } from "./branch-context.js";
3
+ import { readCurrentWork } from "./current-work.js";
4
+ import { readFindings } from "./findings.js";
5
+ import { readGitStatus } from "./git-status.js";
6
+ import { readProjectMetadata } from "./project-metadata.js";
7
+ import { readIdeas } from "./ideas.js";
8
+ import { readProjectConfig } from "./project-config.js";
9
+ import { readRunState } from "./run-state.js";
10
+ import { readIndependentReview } from "./review.js";
11
+ export class ProjectStatusEngine {
12
+ projectRoot;
13
+ constructor(projectRoot = process.cwd()) {
14
+ this.projectRoot = projectRoot;
15
+ }
16
+ async getStatus() {
17
+ const startPath = this.projectRoot;
18
+ const metadata = await readProjectMetadata(startPath);
19
+ const [contextPaths, config, currentWork, activeRuns, findings, git, ideas, runState] = await Promise.all([
20
+ resolveActiveContextPaths(metadata.project.root),
21
+ readProjectConfig(metadata.project.root),
22
+ readCurrentWork(metadata.project.root),
23
+ listActiveRunContexts(metadata.project.root),
24
+ readFindings(metadata.project.root),
25
+ readGitStatus(metadata.project.root),
26
+ readIdeas(metadata.project.root),
27
+ readRunState(metadata.project.root)
28
+ ]);
29
+ const primaryRunId = currentWork.runId || (activeRuns.length === 1 ? activeRuns[0]?.runId : undefined);
30
+ const [review, activeRunReviews] = await Promise.all([
31
+ readIndependentReview(metadata.project.root, primaryRunId || undefined),
32
+ Promise.all(activeRuns.map((run) => readIndependentReview(metadata.project.root, run.runId)))
33
+ ]);
34
+ const statusReview = formatReview(review);
35
+ const statusActiveRuns = activeRuns.map((run, index) => ({
36
+ ...run,
37
+ review: formatReview(activeRunReviews[index] || review)
38
+ }));
39
+ let stageMarkdown = "";
40
+ try {
41
+ stageMarkdown = await fs.readFile(contextPaths.stagePath, "utf8");
42
+ }
43
+ catch { }
44
+ const warnings = [
45
+ ...metadata.warnings,
46
+ ...config.warnings,
47
+ ...currentWork.warnings,
48
+ ...findings.warnings,
49
+ ...runState.warnings,
50
+ ...review.warnings,
51
+ ...findDrift(currentWork, git)
52
+ ];
53
+ const completion = selectCompletion(currentWork, findings, git, stageMarkdown, review, config.values);
54
+ const nextAction = selectNextAction(currentWork, findings, stageMarkdown);
55
+ return {
56
+ schemaVersion: metadata.schemaVersion,
57
+ health: warnings.length > 0 || findings.blockers.length > 0
58
+ ? "warning"
59
+ : "ok",
60
+ project: metadata.project,
61
+ devflow: metadata.devflow,
62
+ configuration: {
63
+ path: config.path,
64
+ state: config.state,
65
+ values: config.values
66
+ },
67
+ activity: {
68
+ state: runState.state,
69
+ mode: runState.mode,
70
+ command: runState.command,
71
+ status: runState.status,
72
+ freshness: runState.freshness,
73
+ summary: runState.summary,
74
+ detail: runState.detail,
75
+ boundary: runState.boundary,
76
+ startedAt: runState.startedAt,
77
+ updatedAt: runState.updatedAt,
78
+ resumeCommand: runState.resumeCommand,
79
+ progress: runState.progress,
80
+ feature: runState.feature
81
+ },
82
+ currentWork: formatCurrentWork(currentWork),
83
+ activeRuns: statusActiveRuns,
84
+ findings: formatFindings(findings),
85
+ review: statusReview,
86
+ ideas,
87
+ git,
88
+ completion,
89
+ nextAction,
90
+ warnings
91
+ };
92
+ }
93
+ formatHuman(status, options = {}) {
94
+ const style = createTextStyle(options.color === true);
95
+ const adapters = status.devflow.adapters.length > 0
96
+ ? status.devflow.adapters.join(", ")
97
+ : "none detected";
98
+ const lines = [
99
+ `${style.bold(style.cyan("Nexus-DevFlow Status"))} ${style.bold(status.project.name)}`,
100
+ "",
101
+ formatSection("Project", style),
102
+ formatRow("Path", status.project.root, style),
103
+ formatRow("Version", status.devflow.version || "unknown", style),
104
+ formatRow("Adapters", adapters, style),
105
+ formatRow("Config", formatConfigValue(status.configuration.state), style),
106
+ formatRow("Review exec.", status.configuration.values.review.independentExecution, style),
107
+ formatRow("Quality gates", formatQualityGates(status.configuration.values.qualityGates.regular), style),
108
+ "",
109
+ formatSection("Progress", style),
110
+ formatRow("Progress", formatWorkValue(status.currentWork, style), style)
111
+ ];
112
+ if (status.activity && status.activity.state === "recorded" && status.activity.command) {
113
+ lines.push(formatRow("Activity", formatActivityValue(status.activity, style), style));
114
+ }
115
+ if (status.currentWork.state === "active") {
116
+ lines.push(formatRow("Steps", `${status.currentWork.completed}/${status.currentWork.total} complete`, style));
117
+ if (status.currentWork.nextStep) {
118
+ lines.push(formatRow("Next step", status.currentWork.nextStep.title, style));
119
+ }
120
+ }
121
+ if (status.activeRuns && status.activeRuns.length > 0) {
122
+ lines.push(formatRow("Spec Queue", `${status.activeRuns.length} active (${status.activeRuns.map((r) => r.runId).join(", ")})`, style));
123
+ }
124
+ lines.push(formatRow("Findings", formatFindingsValue(status.findings, style), style));
125
+ if (status.review && status.review.state !== "none") {
126
+ lines.push(formatRow("Review", formatReviewValue(status.review, style), style));
127
+ }
128
+ lines.push(formatRow("Completion", formatCompletionValue(status.completion, style), style), "", formatSection("Git", style));
129
+ appendGitLines(lines, status.git, style);
130
+ if (status.warnings.length > 0) {
131
+ lines.push("", formatSection("Attention", style));
132
+ for (const warning of status.warnings) {
133
+ lines.push(` ${style.yellow("!")} ${style.yellow(warning.message)}`);
134
+ }
135
+ }
136
+ lines.push("", formatSection("Next action", style));
137
+ if (status.nextAction.command) {
138
+ lines.push(` ${style.bold(style.brightCyan(status.nextAction.command))}`);
139
+ }
140
+ lines.push(` ${status.nextAction.reason}`);
141
+ return lines.join("\n");
142
+ }
143
+ shouldUseColor(isTTY = process.stdout.isTTY, environment = process.env) {
144
+ return shouldUseColor(isTTY, environment);
145
+ }
146
+ }
147
+ function formatConfigValue(state) {
148
+ if (state === "project") {
149
+ return "project settings";
150
+ }
151
+ if (state === "invalid") {
152
+ return "invalid, using defaults";
153
+ }
154
+ return "built-in defaults";
155
+ }
156
+ function formatQualityGates(gates) {
157
+ return `audit ${gates.audit}, review ${gates.independentReview}, check ${gates.check}, try guide ${gates.tryGuide}`;
158
+ }
159
+ function shouldUseColor(isTTY = process.stdout.isTTY, environment = process.env) {
160
+ return isTTY === true && !Object.hasOwn(environment, "NO_COLOR");
161
+ }
162
+ function formatSection(label, style) {
163
+ return style.bold(label);
164
+ }
165
+ function formatRow(label, value, style) {
166
+ return ` ${style.cyan(label.padEnd(14))}${value}`;
167
+ }
168
+ function formatReviewValue(review, style) {
169
+ const reviewer = review.reviewerAdapter || review.requestedReviewer;
170
+ const model = review.reviewerModel || review.requestedModel;
171
+ const execution = review.actualExecution || review.requestedExecution;
172
+ const reviewerLabel = reviewer && model ? `${reviewer}/${model}` : reviewer || model;
173
+ const parts = [review.state];
174
+ if (review.verdict) {
175
+ parts.push(`verdict ${review.verdict}`);
176
+ }
177
+ if (review.checkResult) {
178
+ parts.push(`check ${review.checkResult}`);
179
+ }
180
+ parts.push(`freshness ${review.freshness}`);
181
+ if (reviewerLabel) {
182
+ parts.push(execution ? `(${reviewerLabel}, ${execution})` : `(${reviewerLabel})`);
183
+ }
184
+ else if (execution) {
185
+ parts.push(`(${execution})`);
186
+ }
187
+ return review.freshness === "stale"
188
+ ? style.yellow(parts.join(", "))
189
+ : parts.join(", ");
190
+ }
191
+ function formatReview(review) {
192
+ return {
193
+ state: review.state,
194
+ freshness: review.freshness,
195
+ verdict: review.verdict,
196
+ checkResult: review.checkResult,
197
+ targetCommit: review.targetCommit,
198
+ requestedReviewer: review.requestedReviewer,
199
+ requestedModel: review.requestedModel,
200
+ requestedExecution: review.requestedExecution,
201
+ reviewerAdapter: review.reviewerAdapter,
202
+ reviewerModel: review.reviewerModel,
203
+ actualExecution: review.actualExecution,
204
+ warnings: review.warnings.map((warning) => ({
205
+ code: warning.code,
206
+ message: warning.message
207
+ }))
208
+ };
209
+ }
210
+ function formatActivityValue(activity, style) {
211
+ if (activity.state !== "recorded" || !activity.command) {
212
+ return style.dim("none");
213
+ }
214
+ const parts = [`/${activity.command}`];
215
+ if (activity.status) {
216
+ parts.push(activity.status === "running"
217
+ ? style.brightCyan(activity.status)
218
+ : activity.status === "ready"
219
+ ? style.green(activity.status)
220
+ : activity.status === "blocked"
221
+ ? style.red(activity.status)
222
+ : activity.status);
223
+ }
224
+ if (activity.progress) {
225
+ parts.push(`${activity.progress.current}/${activity.progress.total} ${activity.progress.label}`);
226
+ }
227
+ if (activity.boundary) {
228
+ parts.push(`(${activity.boundary})`);
229
+ }
230
+ if (activity.freshness === "stale") {
231
+ parts.push(style.yellow("[stale]"));
232
+ }
233
+ return parts.join(" ");
234
+ }
235
+ function formatWorkValue(work, style) {
236
+ if (work.state === "idle") {
237
+ return style.dim("none");
238
+ }
239
+ if (work.state === "malformed") {
240
+ return style.red("present but malformed");
241
+ }
242
+ const type = work.type || "work";
243
+ const identity = work.runId
244
+ ? `${work.runId} - ${work.title || "untitled"}`
245
+ : work.title || "untitled";
246
+ return style.brightCyan(`${type} ${identity}`);
247
+ }
248
+ function formatFindingsValue(findings, style) {
249
+ if (findings.total === 0) {
250
+ return style.green("none");
251
+ }
252
+ const activeGroups = new Map();
253
+ for (const finding of findings.active) {
254
+ const key = `${finding.status} ${finding.severity}`;
255
+ activeGroups.set(key, [...(activeGroups.get(key) || []), finding.id]);
256
+ }
257
+ const activeCounts = [...activeGroups.entries()].map(([label, ids]) => `${ids.length} ${label} (${ids.join(", ")})`);
258
+ const resolvedCounts = ["closed", "accepted", "invalid"]
259
+ .map((status) => {
260
+ const count = findings.byStatus[status] || 0;
261
+ return count > 0 ? `${count} ${status}` : null;
262
+ })
263
+ .filter(Boolean);
264
+ const parts = [...activeCounts, ...resolvedCounts];
265
+ return parts.join(", ");
266
+ }
267
+ function formatCompletionValue(completion, style) {
268
+ if (completion.state === "idle") {
269
+ return style.dim("idle");
270
+ }
271
+ if (completion.state === "ready") {
272
+ return style.green("ready to complete");
273
+ }
274
+ if (completion.state === "needs_verification") {
275
+ return style.yellow(`needs verification (${completion.blockers.join("; ")})`);
276
+ }
277
+ return style.red(`blocked (${completion.blockers.join("; ")})`);
278
+ }
279
+ function appendGitLines(lines, git, style) {
280
+ if (!git.available) {
281
+ lines.push(formatRow("Status", style.red("not a Git repository"), style));
282
+ return;
283
+ }
284
+ const workingTree = git.clean
285
+ ? style.green("clean")
286
+ : style.yellow(`${git.changedFiles} changed ${git.changedFiles === 1 ? "file" : "files"}`);
287
+ const remote = git.upstream
288
+ ? `${git.upstream} (${git.ahead || 0} ahead, ${git.behind || 0} behind)`
289
+ : "not configured";
290
+ const coloredRemote = git.upstream && git.ahead === 0 && git.behind === 0
291
+ ? style.green(remote)
292
+ : style.yellow(remote);
293
+ lines.push(formatRow("Branch", git.branch || "unknown", style), formatRow("Working tree", workingTree, style), formatRow("Remote", coloredRemote, style));
294
+ if (git.lastCommit) {
295
+ lines.push(` ${style.cyan("Last commit")}`, ` ${git.lastCommit}`);
296
+ }
297
+ }
298
+ function createTextStyle(enabled) {
299
+ const paint = (code, value) => enabled ? `\u001b[${code}m${value}\u001b[0m` : value;
300
+ return {
301
+ bold: (value) => paint(1, value),
302
+ brightCyan: (value) => paint(96, value),
303
+ cyan: (value) => paint(36, value),
304
+ dim: (value) => paint(2, value),
305
+ green: (value) => paint(32, value),
306
+ red: (value) => paint(31, value),
307
+ yellow: (value) => paint(33, value)
308
+ };
309
+ }
310
+ function formatCurrentWork(currentWork) {
311
+ return {
312
+ state: currentWork.state,
313
+ type: currentWork.type,
314
+ title: currentWork.title,
315
+ status: currentWork.status,
316
+ runId: currentWork.runId,
317
+ completed: currentWork.completed,
318
+ remaining: currentWork.remaining,
319
+ total: currentWork.total,
320
+ nextStep: currentWork.nextStep
321
+ ? { title: currentWork.nextStep.title }
322
+ : null
323
+ };
324
+ }
325
+ function formatFindings(findings) {
326
+ const selectFinding = (finding) => ({
327
+ id: finding.id,
328
+ severity: finding.severity,
329
+ status: finding.status,
330
+ title: finding.title
331
+ });
332
+ return {
333
+ total: findings.total,
334
+ byStatus: findings.byStatus,
335
+ active: findings.items
336
+ .filter((finding) => finding.status === "unverified" ||
337
+ finding.status === "open" ||
338
+ finding.status === "fixed")
339
+ .map(selectFinding),
340
+ blockers: findings.blockers.map(selectFinding)
341
+ };
342
+ }
343
+ function selectCompletion(currentWork, findings, git, stageMarkdown, review, config) {
344
+ if (currentWork.state === "idle") {
345
+ return { state: "idle", blockers: [] };
346
+ }
347
+ if (currentWork.state === "malformed") {
348
+ return {
349
+ state: "blocked",
350
+ blockers: ["current work contract is malformed"]
351
+ };
352
+ }
353
+ const blockers = [];
354
+ if (currentWork.remaining > 0) {
355
+ blockers.push(`${currentWork.remaining} checklist steps remain`);
356
+ }
357
+ if (findings.blockers.length > 0) {
358
+ blockers.push(`blocking findings ${findings.blockers.map((finding) => finding.id).join(", ")}`);
359
+ }
360
+ if (!git.available) {
361
+ blockers.push("Git repository is unavailable");
362
+ }
363
+ if (review && config) {
364
+ const isGateActive = config.qualityGates.regular.independentReview !== "manual";
365
+ if (review.state === "malformed") {
366
+ blockers.push("independent review record is malformed");
367
+ }
368
+ else if (review.state === "changes-requested") {
369
+ blockers.push("independent review requested changes");
370
+ }
371
+ else if (review.state === "pending") {
372
+ blockers.push("independent review is pending");
373
+ }
374
+ else if (isGateActive && review.state === "none") {
375
+ blockers.push("independent review is required");
376
+ }
377
+ else if (review.state === "passed" && review.freshness !== "current") {
378
+ blockers.push("independent review receipt is stale");
379
+ }
380
+ }
381
+ if (blockers.length > 0) {
382
+ return { state: "blocked", blockers };
383
+ }
384
+ const isVerified = Boolean(stageMarkdown &&
385
+ (/ready\s+for\s+\/complete|Passed\s+->\s+Ready|\/complete/i.test(stageMarkdown) ||
386
+ /Current Stage:\s*check\s*\(Passed/i.test(stageMarkdown)));
387
+ if (isVerified ||
388
+ currentWork.status?.toLowerCase().includes("verified") ||
389
+ currentWork.status?.toLowerCase().includes("ready")) {
390
+ return {
391
+ state: "ready",
392
+ blockers: []
393
+ };
394
+ }
395
+ return {
396
+ state: "needs_verification",
397
+ blockers: ["verification evidence is not persisted"]
398
+ };
399
+ }
400
+ function selectNextAction(currentWork, findings, stageMarkdown) {
401
+ if (currentWork.state === "malformed") {
402
+ return {
403
+ command: "/doctor",
404
+ reason: "Repair the stage or spec contract before continuing."
405
+ };
406
+ }
407
+ // 1. Authoritative Next Action from current-stage.md
408
+ if (stageMarkdown) {
409
+ const stageNextActionMatch = stageMarkdown.match(/^-\s+(?:\*\*)?Next Action(?:\*\*)?:\s*`?(\/[^\r\n`]+)`?/im);
410
+ const stageNextAction = stageNextActionMatch?.[1]?.trim();
411
+ const rawStage = stageMarkdown.match(/^-\s+(?:\*\*)?Current Stage(?:\*\*)?:\s*`?([^\r\n`]+)`?/im)?.[1]?.trim();
412
+ if (stageNextAction &&
413
+ !stageNextAction.toLowerCase().includes("none") &&
414
+ !stageNextAction.toLowerCase().startsWith("/idle")) {
415
+ const isReadyForComplete = stageNextAction.startsWith("/complete") ||
416
+ /ready\s+for\s+\/complete/i.test(rawStage || "");
417
+ const reason = isReadyForComplete
418
+ ? "Verification passed. Ready to complete, archive, and merge."
419
+ : `Continue active stage at ${rawStage || stageNextAction}.`;
420
+ return {
421
+ command: stageNextAction,
422
+ reason
423
+ };
424
+ }
425
+ }
426
+ if (currentWork.state === "active") {
427
+ if (currentWork.nextStep) {
428
+ const runSuffix = currentWork.runId ? ` ${currentWork.runId}` : "";
429
+ return {
430
+ command: `/implement${runSuffix}`,
431
+ reason: `Resume active work with ${currentWork.nextStep.title}.`
432
+ };
433
+ }
434
+ const openBlocker = findings.blockers.find((finding) => finding.status === "open");
435
+ if (openBlocker) {
436
+ return {
437
+ command: "/implement",
438
+ reason: `Repair blocking finding ${openBlocker.id}.`
439
+ };
440
+ }
441
+ const fixedBlocker = findings.blockers.find((finding) => finding.status === "fixed");
442
+ if (fixedBlocker) {
443
+ return {
444
+ command: "/check",
445
+ reason: `Re-verify fixed finding ${fixedBlocker.id}.`
446
+ };
447
+ }
448
+ return {
449
+ command: "/check",
450
+ reason: "All checklist steps are completed; run QA verification."
451
+ };
452
+ }
453
+ const openBlocker = findings.blockers.find((finding) => finding.status === "open");
454
+ if (openBlocker) {
455
+ return {
456
+ command: `/fix ${openBlocker.id}`,
457
+ reason: "Start a tracked repair for the blocking finding."
458
+ };
459
+ }
460
+ return {
461
+ command: "/feature",
462
+ reason: "Workspace is idle. Ready to spec or discover a new feature."
463
+ };
464
+ }
465
+ function findDrift(currentWork, git) {
466
+ if (currentWork.state !== "active") {
467
+ return [];
468
+ }
469
+ const warnings = [];
470
+ if (git.available && (git.branch === "main" || git.branch === "master")) {
471
+ warnings.push({
472
+ code: "active_work_on_default_branch",
473
+ message: `Active ${currentWork.type || "work"} is running on the default branch.`
474
+ });
475
+ }
476
+ if (currentWork.total > 0 && currentWork.remaining === 0) {
477
+ warnings.push({
478
+ code: "completed_steps_not_released",
479
+ message: "All checklist steps are checked, but run has not been completed or verified."
480
+ });
481
+ }
482
+ return warnings;
483
+ }
484
+ async function readProjectStatus(startPath = process.cwd()) {
485
+ const engine = new ProjectStatusEngine(startPath);
486
+ return engine.getStatus();
487
+ }
488
+ function formatHumanStatus(status, options = {}) {
489
+ const engine = new ProjectStatusEngine(status.project?.root || process.cwd());
490
+ return engine.formatHuman(status, options);
491
+ }
492
+ export { formatHumanStatus, readProjectStatus, shouldUseColor };
493
+ //# sourceMappingURL=project-status-engine.js.map