@jakkrichm/create-nexus-devflow 2.0.14 → 2.0.16

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 (89) hide show
  1. package/README.md +4 -4
  2. package/dist/bin/create-nexus-devflow.d.ts +14 -1
  3. package/dist/bin/create-nexus-devflow.js +45 -7
  4. package/dist/bin/create-nexus-devflow.js.map +1 -1
  5. package/dist/lib/current-work.d.ts +30 -0
  6. package/dist/lib/current-work.js +208 -0
  7. package/dist/lib/current-work.js.map +1 -0
  8. package/dist/lib/findings.d.ts +26 -0
  9. package/dist/lib/findings.js +110 -0
  10. package/dist/lib/findings.js.map +1 -0
  11. package/dist/lib/git-status.d.ts +13 -0
  12. package/dist/lib/git-status.js +98 -0
  13. package/dist/lib/git-status.js.map +1 -0
  14. package/dist/lib/project-metadata.d.ts +22 -0
  15. package/dist/lib/project-metadata.js +84 -0
  16. package/dist/lib/project-metadata.js.map +1 -0
  17. package/dist/lib/project-root.d.ts +3 -0
  18. package/dist/lib/project-root.js +76 -0
  19. package/dist/lib/project-root.js.map +1 -0
  20. package/dist/lib/status.d.ts +62 -0
  21. package/dist/lib/status.js +273 -0
  22. package/dist/lib/status.js.map +1 -0
  23. package/dist/lib/update.js +1 -1
  24. package/dist/lib/update.js.map +1 -1
  25. package/package.json +4 -3
  26. package/template/.agents/skills/30-plan/SKILL.md +6 -6
  27. package/template/.agents/skills/{40-implement → 40-execute}/SKILL.md +21 -26
  28. package/template/.agents/skills/50-verify/SKILL.md +10 -10
  29. package/template/.agents/skills/60-report/SKILL.md +1 -1
  30. package/template/.agents/skills/70-release/SKILL.md +6 -6
  31. package/template/.agents/skills/agent/SKILL.md +3 -3
  32. package/template/.agents/skills/autopilot/SKILL.md +6 -6
  33. package/template/.agents/skills/brainstorm/SKILL.md +1 -1
  34. package/template/.agents/skills/brief/SKILL.md +1 -1
  35. package/template/.agents/skills/codebase-design/SKILL.md +2 -2
  36. package/template/.agents/skills/commit/SKILL.md +1 -1
  37. package/template/.agents/skills/debug/SKILL.md +2 -2
  38. package/template/.agents/skills/devflow/SKILL.md +5 -5
  39. package/template/.agents/skills/doctor/SKILL.md +1 -1
  40. package/template/.agents/skills/feature/SKILL.md +103 -0
  41. package/template/.agents/skills/fix/SKILL.md +102 -0
  42. package/template/.agents/skills/followup/SKILL.md +5 -5
  43. package/template/.agents/skills/help/SKILL.md +4 -4
  44. package/template/.agents/skills/insight/SKILL.md +1 -1
  45. package/template/.agents/skills/pr/SKILL.md +1 -1
  46. package/template/.agents/skills/preview/SKILL.md +1 -1
  47. package/template/.agents/skills/review/SKILL.md +1 -1
  48. package/template/.agents/skills/rollback/SKILL.md +3 -3
  49. package/template/.agents/skills/security-review/SKILL.md +2 -2
  50. package/template/.agents/skills/simplify/SKILL.md +1 -1
  51. package/template/.agents/skills/spec/SKILL.md +17 -84
  52. package/template/.agents/skills/test/SKILL.md +2 -2
  53. package/template/.agents/skills/try/SKILL.md +2 -2
  54. package/template/.claude/skills/30-plan/SKILL.md +6 -6
  55. package/template/.claude/skills/{40-implement → 40-execute}/SKILL.md +21 -26
  56. package/template/.claude/skills/50-verify/SKILL.md +10 -10
  57. package/template/.claude/skills/60-report/SKILL.md +1 -1
  58. package/template/.claude/skills/70-release/SKILL.md +6 -6
  59. package/template/.claude/skills/agent/SKILL.md +3 -3
  60. package/template/.claude/skills/autopilot/SKILL.md +6 -6
  61. package/template/.claude/skills/brainstorm/SKILL.md +1 -1
  62. package/template/.claude/skills/brief/SKILL.md +1 -1
  63. package/template/.claude/skills/codebase-design/SKILL.md +2 -2
  64. package/template/.claude/skills/commit/SKILL.md +1 -1
  65. package/template/.claude/skills/debug/SKILL.md +2 -2
  66. package/template/.claude/skills/devflow/SKILL.md +5 -5
  67. package/template/.claude/skills/doctor/SKILL.md +1 -1
  68. package/template/.claude/skills/feature/SKILL.md +103 -0
  69. package/template/.claude/skills/fix/SKILL.md +102 -0
  70. package/template/.claude/skills/followup/SKILL.md +5 -5
  71. package/template/.claude/skills/help/SKILL.md +4 -4
  72. package/template/.claude/skills/insight/SKILL.md +1 -1
  73. package/template/.claude/skills/pr/SKILL.md +1 -1
  74. package/template/.claude/skills/preview/SKILL.md +1 -1
  75. package/template/.claude/skills/review/SKILL.md +1 -1
  76. package/template/.claude/skills/rollback/SKILL.md +3 -3
  77. package/template/.claude/skills/security-review/SKILL.md +2 -2
  78. package/template/.claude/skills/simplify/SKILL.md +1 -1
  79. package/template/.claude/skills/spec/SKILL.md +17 -84
  80. package/template/.claude/skills/test/SKILL.md +2 -2
  81. package/template/.claude/skills/try/SKILL.md +2 -2
  82. package/template/AGENTS.md +11 -10
  83. package/template/devflow/context/ai-interaction.md +2 -2
  84. package/template/devflow/context/coding-standards.md +1 -1
  85. package/template/devflow/context/current-stage.md +3 -2
  86. package/template/devflow/context/project-overview.md +10 -6
  87. package/template/devflow/history/HISTORY.md +3 -0
  88. package/template/devflow/ideas.md +1 -1
  89. package/template/devflow/reference/running-id-contract.md +2 -2
@@ -0,0 +1,98 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execFileAsync = promisify(execFile);
4
+ async function readGitStatus(projectRoot) {
5
+ if (!(await isGitRepository(projectRoot))) {
6
+ return unavailableSummary();
7
+ }
8
+ const porcelain = await runGit(projectRoot, [
9
+ "status",
10
+ "--porcelain=v1",
11
+ "--untracked-files=all"
12
+ ]);
13
+ const changedFiles = porcelain
14
+ .split(/\r?\n/)
15
+ .filter((line) => line.length > 0)
16
+ .length;
17
+ const branch = await readBranch(projectRoot);
18
+ const lastCommit = await runOptionalGit(projectRoot, [
19
+ "log",
20
+ "-1",
21
+ "--format=%s"
22
+ ]);
23
+ const upstream = await runOptionalGit(projectRoot, [
24
+ "rev-parse",
25
+ "--abbrev-ref",
26
+ "--symbolic-full-name",
27
+ "@{upstream}"
28
+ ]);
29
+ const divergence = upstream
30
+ ? await readDivergence(projectRoot)
31
+ : { ahead: null, behind: null };
32
+ return {
33
+ available: true,
34
+ branch,
35
+ clean: changedFiles === 0,
36
+ changedFiles,
37
+ lastCommit,
38
+ upstream,
39
+ ahead: divergence.ahead,
40
+ behind: divergence.behind
41
+ };
42
+ }
43
+ async function isGitRepository(projectRoot) {
44
+ return (await runOptionalGit(projectRoot, [
45
+ "rev-parse",
46
+ "--is-inside-work-tree"
47
+ ])) === "true";
48
+ }
49
+ async function readBranch(projectRoot) {
50
+ const branch = await runOptionalGit(projectRoot, [
51
+ "symbolic-ref",
52
+ "--quiet",
53
+ "--short",
54
+ "HEAD"
55
+ ]);
56
+ return branch || "(detached HEAD)";
57
+ }
58
+ async function readDivergence(projectRoot) {
59
+ const counts = await runOptionalGit(projectRoot, [
60
+ "rev-list",
61
+ "--left-right",
62
+ "--count",
63
+ "HEAD...@{upstream}"
64
+ ]);
65
+ const match = counts?.match(/^(\d+)\s+(\d+)$/);
66
+ return match
67
+ ? { ahead: Number(match[1]), behind: Number(match[2]) }
68
+ : { ahead: null, behind: null };
69
+ }
70
+ async function runOptionalGit(projectRoot, args) {
71
+ try {
72
+ return await runGit(projectRoot, args);
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ }
78
+ async function runGit(projectRoot, args) {
79
+ const result = await execFileAsync("git", ["-C", projectRoot, ...args], {
80
+ encoding: "utf8",
81
+ maxBuffer: 1024 * 1024
82
+ });
83
+ return result.stdout.trim();
84
+ }
85
+ function unavailableSummary() {
86
+ return {
87
+ available: false,
88
+ branch: null,
89
+ clean: null,
90
+ changedFiles: 0,
91
+ lastCommit: null,
92
+ upstream: null,
93
+ ahead: null,
94
+ behind: null
95
+ };
96
+ }
97
+ export { readGitStatus };
98
+ //# sourceMappingURL=git-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-status.js","sourceRoot":"","sources":["../../lib/git-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ declare const PROJECT_STATE_SCHEMA_VERSION: 1;
2
+ type ProjectAdapter = "codex" | "claude" | "antigravity";
3
+ interface ProjectWarning {
4
+ code: "invalid_manifest";
5
+ message: string;
6
+ }
7
+ interface ProjectMetadata {
8
+ schemaVersion: typeof PROJECT_STATE_SCHEMA_VERSION;
9
+ project: {
10
+ name: string;
11
+ root: string;
12
+ };
13
+ devflow: {
14
+ version: string | null;
15
+ adapters: ProjectAdapter[];
16
+ };
17
+ warnings: ProjectWarning[];
18
+ }
19
+ declare function readProjectMetadata(startPath?: string): Promise<ProjectMetadata>;
20
+ declare function detectAdapters(projectRoot: string): Promise<ProjectAdapter[]>;
21
+ export { PROJECT_STATE_SCHEMA_VERSION, detectAdapters, readProjectMetadata };
22
+ export type { ProjectAdapter, ProjectMetadata, ProjectWarning };
@@ -0,0 +1,84 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { findProjectRoot } from "./project-root.js";
4
+ import { readManifest } from "./update.js";
5
+ const PROJECT_STATE_SCHEMA_VERSION = 1;
6
+ const ADAPTER_PATHS = {
7
+ codex: path.join(".agents", "skills"),
8
+ claude: path.join(".claude", "skills"),
9
+ antigravity: path.join(".agents", "skills")
10
+ };
11
+ async function readProjectMetadata(startPath = process.cwd()) {
12
+ const projectRoot = await findProjectRoot(startPath);
13
+ if (!projectRoot) {
14
+ throw new Error(`No Nexus-DevFlow project found from: ${path.resolve(startPath)}`);
15
+ }
16
+ const warnings = [];
17
+ let manifest = null;
18
+ try {
19
+ manifest = await readManifest(projectRoot);
20
+ }
21
+ catch (error) {
22
+ warnings.push({
23
+ code: "invalid_manifest",
24
+ message: error instanceof Error ? error.message : String(error)
25
+ });
26
+ }
27
+ let projectVersion = manifest?.version || null;
28
+ if (!projectVersion) {
29
+ try {
30
+ const packageJsonPath = path.join(projectRoot, "package.json");
31
+ const packageContent = await fs.readFile(packageJsonPath, "utf8");
32
+ const pkg = JSON.parse(packageContent);
33
+ if (pkg.version) {
34
+ projectVersion = pkg.version;
35
+ }
36
+ }
37
+ catch {
38
+ // Ignore fallback failure
39
+ }
40
+ }
41
+ return {
42
+ schemaVersion: PROJECT_STATE_SCHEMA_VERSION,
43
+ project: {
44
+ name: path.basename(projectRoot),
45
+ root: projectRoot
46
+ },
47
+ devflow: {
48
+ version: projectVersion,
49
+ adapters: await detectAdapters(projectRoot)
50
+ },
51
+ warnings
52
+ };
53
+ }
54
+ async function detectAdapters(projectRoot) {
55
+ const adapters = [];
56
+ for (const adapter of ["codex", "claude"]) {
57
+ if (await isDirectory(path.join(projectRoot, ADAPTER_PATHS[adapter]))) {
58
+ adapters.push(adapter);
59
+ }
60
+ }
61
+ return adapters;
62
+ }
63
+ async function isDirectory(targetPath) {
64
+ try {
65
+ return (await fs.lstat(targetPath)).isDirectory();
66
+ }
67
+ catch (error) {
68
+ const code = getErrorCode(error);
69
+ if (code === "ENOENT" || code === "ENOTDIR") {
70
+ return false;
71
+ }
72
+ throw error;
73
+ }
74
+ }
75
+ function getErrorCode(error) {
76
+ return typeof error === "object" &&
77
+ error !== null &&
78
+ "code" in error &&
79
+ typeof error.code === "string"
80
+ ? error.code
81
+ : undefined;
82
+ }
83
+ export { PROJECT_STATE_SCHEMA_VERSION, detectAdapters, readProjectMetadata };
84
+ //# sourceMappingURL=project-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-metadata.js","sourceRoot":"","sources":["../../lib/project-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare function findProjectRoot(startPath?: string): Promise<string | null>;
2
+ declare function isDevFlowProjectRoot(directory: string): Promise<boolean>;
3
+ export { findProjectRoot, isDevFlowProjectRoot };
@@ -0,0 +1,76 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const DEVFLOW_MANIFEST_PATH = path.join("devflow", ".state", "manifest.json");
4
+ const BLUEPRINT_MANIFEST_PATH = path.join("blueprint", ".state", "manifest.json");
5
+ async function findProjectRoot(startPath = process.cwd()) {
6
+ const resolvedStart = await fs.realpath(startPath);
7
+ const stats = await fs.stat(resolvedStart);
8
+ let currentDir = stats.isDirectory()
9
+ ? resolvedStart
10
+ : path.dirname(resolvedStart);
11
+ while (true) {
12
+ if (await isDevFlowProjectRoot(currentDir)) {
13
+ return currentDir;
14
+ }
15
+ const parentDir = path.dirname(currentDir);
16
+ if (parentDir === currentDir) {
17
+ return null;
18
+ }
19
+ currentDir = parentDir;
20
+ }
21
+ }
22
+ async function isDevFlowProjectRoot(directory) {
23
+ const devflowDir = path.join(directory, "devflow");
24
+ const blueprintDir = path.join(directory, "blueprint");
25
+ const hasDevFlowDir = await isDirectory(devflowDir);
26
+ const hasBlueprintDir = await isDirectory(blueprintDir);
27
+ if (!hasDevFlowDir && !hasBlueprintDir) {
28
+ return false;
29
+ }
30
+ return ((await hasInstallManifest(directory)) ||
31
+ (await isFile(path.join(directory, "AGENTS.md"))));
32
+ }
33
+ async function hasInstallManifest(directory) {
34
+ const devflowStateDir = path.join(directory, "devflow", ".state");
35
+ const blueprintStateDir = path.join(directory, "blueprint", ".state");
36
+ if ((await isDirectory(devflowStateDir)) &&
37
+ (await isFile(path.join(directory, DEVFLOW_MANIFEST_PATH)))) {
38
+ return true;
39
+ }
40
+ return ((await isDirectory(blueprintStateDir)) &&
41
+ (await isFile(path.join(directory, BLUEPRINT_MANIFEST_PATH))));
42
+ }
43
+ async function isDirectory(targetPath) {
44
+ try {
45
+ return (await fs.lstat(targetPath)).isDirectory();
46
+ }
47
+ catch (error) {
48
+ const code = getErrorCode(error);
49
+ if (code === "ENOENT" || code === "ENOTDIR") {
50
+ return false;
51
+ }
52
+ throw error;
53
+ }
54
+ }
55
+ async function isFile(targetPath) {
56
+ try {
57
+ return (await fs.lstat(targetPath)).isFile();
58
+ }
59
+ catch (error) {
60
+ const code = getErrorCode(error);
61
+ if (code === "ENOENT" || code === "ENOTDIR") {
62
+ return false;
63
+ }
64
+ throw error;
65
+ }
66
+ }
67
+ function getErrorCode(error) {
68
+ return typeof error === "object" &&
69
+ error !== null &&
70
+ "code" in error &&
71
+ typeof error.code === "string"
72
+ ? error.code
73
+ : undefined;
74
+ }
75
+ export { findProjectRoot, isDevFlowProjectRoot };
76
+ //# sourceMappingURL=project-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../lib/project-root.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { CurrentWorkSummary, CurrentWorkType } from "./current-work.js";
2
+ import type { Finding, FindingStatus } from "./findings.js";
3
+ import type { GitStatusSummary } from "./git-status.js";
4
+ import type { ProjectAdapter } from "./project-metadata.js";
5
+ type CompletionState = "blocked" | "needs_verification" | "ready";
6
+ interface StatusWarning {
7
+ code: string;
8
+ message: string;
9
+ }
10
+ interface StatusCurrentWork {
11
+ state: CurrentWorkSummary["state"];
12
+ type: CurrentWorkType | null;
13
+ title: string | null;
14
+ status: string | null;
15
+ runId: string | null;
16
+ completed: number;
17
+ remaining: number;
18
+ total: number;
19
+ nextStep: {
20
+ title: string;
21
+ } | null;
22
+ }
23
+ interface StatusFindings {
24
+ total: number;
25
+ byStatus: Record<FindingStatus, number>;
26
+ active: Array<Pick<Finding, "id" | "severity" | "status" | "title">>;
27
+ blockers: Array<Pick<Finding, "id" | "severity" | "status" | "title">>;
28
+ }
29
+ interface StatusNextAction {
30
+ command: string | null;
31
+ reason: string;
32
+ }
33
+ interface StatusCompletion {
34
+ state: CompletionState;
35
+ blockers: string[];
36
+ }
37
+ interface HumanStatusOptions {
38
+ color?: boolean;
39
+ }
40
+ interface ProjectStatus {
41
+ schemaVersion: 1;
42
+ health: "ok" | "warning";
43
+ project: {
44
+ name: string;
45
+ root: string;
46
+ };
47
+ devflow: {
48
+ version: string | null;
49
+ adapters: ProjectAdapter[];
50
+ };
51
+ currentWork: StatusCurrentWork;
52
+ findings: StatusFindings;
53
+ git: GitStatusSummary;
54
+ completion: StatusCompletion;
55
+ nextAction: StatusNextAction;
56
+ warnings: StatusWarning[];
57
+ }
58
+ declare function readProjectStatus(startPath?: string): Promise<ProjectStatus>;
59
+ declare function formatHumanStatus(status: ProjectStatus, options?: HumanStatusOptions): string;
60
+ declare function shouldUseColor(isTTY?: boolean | undefined, environment?: NodeJS.ProcessEnv): boolean;
61
+ export { formatHumanStatus, readProjectStatus, shouldUseColor };
62
+ export type { CompletionState, HumanStatusOptions, ProjectStatus, StatusCompletion, StatusCurrentWork, StatusFindings, StatusNextAction, StatusWarning };
@@ -0,0 +1,273 @@
1
+ import { readCurrentWork } from "./current-work.js";
2
+ import { readFindings } from "./findings.js";
3
+ import { readGitStatus } from "./git-status.js";
4
+ import { readProjectMetadata } from "./project-metadata.js";
5
+ async function readProjectStatus(startPath = process.cwd()) {
6
+ const metadata = await readProjectMetadata(startPath);
7
+ const [currentWork, findings, git] = await Promise.all([
8
+ readCurrentWork(metadata.project.root),
9
+ readFindings(metadata.project.root),
10
+ readGitStatus(metadata.project.root)
11
+ ]);
12
+ const warnings = [
13
+ ...metadata.warnings,
14
+ ...currentWork.warnings,
15
+ ...findings.warnings,
16
+ ...findDrift(currentWork, git)
17
+ ];
18
+ const completion = selectCompletion(currentWork, findings, git);
19
+ const nextAction = selectNextAction(currentWork, findings);
20
+ return {
21
+ schemaVersion: metadata.schemaVersion,
22
+ health: warnings.length > 0 || findings.blockers.length > 0
23
+ ? "warning"
24
+ : "ok",
25
+ project: metadata.project,
26
+ devflow: metadata.devflow,
27
+ currentWork: formatCurrentWork(currentWork),
28
+ findings: formatFindings(findings),
29
+ git,
30
+ completion,
31
+ nextAction,
32
+ warnings
33
+ };
34
+ }
35
+ function formatHumanStatus(status, options = {}) {
36
+ const style = createTextStyle(options.color === true);
37
+ const adapters = status.devflow.adapters.length > 0
38
+ ? status.devflow.adapters.join(", ")
39
+ : "none detected";
40
+ const lines = [
41
+ `${style.bold(style.cyan("Nexus-DevFlow Status"))} ${style.bold(status.project.name)}`,
42
+ "",
43
+ formatSection("Project", style),
44
+ formatRow("Path", status.project.root, style),
45
+ formatRow("Version", status.devflow.version || "unknown", style),
46
+ formatRow("Adapters", adapters, style),
47
+ "",
48
+ formatSection("Progress", style),
49
+ formatRow("Work", formatWorkValue(status.currentWork, style), style)
50
+ ];
51
+ if (status.currentWork.state === "active") {
52
+ lines.push(formatRow("Steps", `${status.currentWork.completed}/${status.currentWork.total} complete`, style));
53
+ if (status.currentWork.nextStep) {
54
+ lines.push(formatRow("Next step", status.currentWork.nextStep.title, style));
55
+ }
56
+ }
57
+ lines.push(formatRow("Findings", formatFindingsValue(status.findings, style), style), formatRow("Completion", formatCompletionValue(status.completion, style), style), "", formatSection("Git", style));
58
+ appendGitLines(lines, status.git, style);
59
+ if (status.warnings.length > 0) {
60
+ lines.push("", formatSection("Attention", style));
61
+ for (const warning of status.warnings) {
62
+ lines.push(` ${style.yellow("!")} ${style.yellow(warning.message)}`);
63
+ }
64
+ }
65
+ lines.push("", formatSection("Next action", style));
66
+ if (status.nextAction.command) {
67
+ lines.push(` ${style.bold(style.brightCyan(status.nextAction.command))}`);
68
+ }
69
+ lines.push(` ${status.nextAction.reason}`);
70
+ return lines.join("\n");
71
+ }
72
+ function shouldUseColor(isTTY = process.stdout.isTTY, environment = process.env) {
73
+ return isTTY === true && !Object.hasOwn(environment, "NO_COLOR");
74
+ }
75
+ function formatSection(label, style) {
76
+ return style.bold(label);
77
+ }
78
+ function formatRow(label, value, style) {
79
+ return ` ${style.cyan(label.padEnd(14))}${value}`;
80
+ }
81
+ function formatWorkValue(work, style) {
82
+ if (work.state === "idle") {
83
+ return style.dim("none");
84
+ }
85
+ if (work.state === "malformed") {
86
+ return style.red("present but malformed");
87
+ }
88
+ const type = work.type || "work";
89
+ const identity = work.runId
90
+ ? `${work.runId} - ${work.title || "untitled"}`
91
+ : work.title || "untitled";
92
+ return style.brightCyan(`${type} ${identity}`);
93
+ }
94
+ function formatFindingsValue(findings, style) {
95
+ if (findings.total === 0) {
96
+ return style.green("none");
97
+ }
98
+ const activeGroups = new Map();
99
+ for (const finding of findings.active) {
100
+ const key = `${finding.status} ${finding.severity}`;
101
+ activeGroups.set(key, [...(activeGroups.get(key) || []), finding.id]);
102
+ }
103
+ const activeCounts = [...activeGroups.entries()].map(([label, ids]) => `${ids.length} ${label} (${ids.join(", ")})`);
104
+ const resolvedCounts = ["closed", "accepted", "invalid"]
105
+ .filter((status) => findings.byStatus[status] > 0)
106
+ .map((status) => `${findings.byStatus[status]} ${status}`);
107
+ const value = [...activeCounts, ...resolvedCounts].join(", ");
108
+ if (findings.blockers.length > 0) {
109
+ return style.red(value);
110
+ }
111
+ return findings.active.length > 0 ? style.yellow(value) : style.green(value);
112
+ }
113
+ function formatCompletionValue(completion, style) {
114
+ if (completion.state === "ready") {
115
+ return style.green("ready");
116
+ }
117
+ if (completion.state === "needs_verification") {
118
+ return style.yellow("needs verification");
119
+ }
120
+ return style.red(`blocked: ${completion.blockers.join("; ")}`);
121
+ }
122
+ function appendGitLines(lines, git, style) {
123
+ if (!git.available) {
124
+ lines.push(formatRow("Status", style.red("not a Git repository"), style));
125
+ return;
126
+ }
127
+ const workingTree = git.clean
128
+ ? style.green("clean")
129
+ : style.yellow(`${git.changedFiles} changed ${git.changedFiles === 1 ? "file" : "files"}`);
130
+ const remote = git.upstream
131
+ ? `${git.upstream} (${git.ahead || 0} ahead, ${git.behind || 0} behind)`
132
+ : "not configured";
133
+ const coloredRemote = git.upstream && git.ahead === 0 && git.behind === 0
134
+ ? style.green(remote)
135
+ : style.yellow(remote);
136
+ lines.push(formatRow("Branch", git.branch || "unknown", style), formatRow("Working tree", workingTree, style), formatRow("Remote", coloredRemote, style));
137
+ if (git.lastCommit) {
138
+ lines.push(` ${style.cyan("Last commit")}`, ` ${git.lastCommit}`);
139
+ }
140
+ }
141
+ function createTextStyle(enabled) {
142
+ const paint = (code, value) => enabled ? `\u001b[${code}m${value}\u001b[0m` : value;
143
+ return {
144
+ bold: (value) => paint(1, value),
145
+ brightCyan: (value) => paint(96, value),
146
+ cyan: (value) => paint(36, value),
147
+ dim: (value) => paint(2, value),
148
+ green: (value) => paint(32, value),
149
+ red: (value) => paint(31, value),
150
+ yellow: (value) => paint(33, value)
151
+ };
152
+ }
153
+ function formatCurrentWork(currentWork) {
154
+ return {
155
+ state: currentWork.state,
156
+ type: currentWork.type,
157
+ title: currentWork.title,
158
+ status: currentWork.status,
159
+ runId: currentWork.runId,
160
+ completed: currentWork.completed,
161
+ remaining: currentWork.remaining,
162
+ total: currentWork.total,
163
+ nextStep: currentWork.nextStep
164
+ ? { title: currentWork.nextStep.title }
165
+ : null
166
+ };
167
+ }
168
+ function formatFindings(findings) {
169
+ const selectFinding = (finding) => ({
170
+ id: finding.id,
171
+ severity: finding.severity,
172
+ status: finding.status,
173
+ title: finding.title
174
+ });
175
+ return {
176
+ total: findings.total,
177
+ byStatus: findings.byStatus,
178
+ active: findings.items
179
+ .filter((finding) => finding.status === "unverified" ||
180
+ finding.status === "open" ||
181
+ finding.status === "fixed")
182
+ .map(selectFinding),
183
+ blockers: findings.blockers.map(selectFinding)
184
+ };
185
+ }
186
+ function selectCompletion(currentWork, findings, git) {
187
+ const blockers = [];
188
+ if (currentWork.state !== "active") {
189
+ blockers.push("no active delivery run or living spec");
190
+ }
191
+ else if (currentWork.remaining > 0) {
192
+ blockers.push(`${currentWork.remaining} checklist steps remain`);
193
+ }
194
+ if (findings.blockers.length > 0) {
195
+ blockers.push(`blocking findings ${findings.blockers.map((finding) => finding.id).join(", ")}`);
196
+ }
197
+ if (!git.available) {
198
+ blockers.push("Git repository is unavailable");
199
+ }
200
+ if (blockers.length > 0) {
201
+ return { state: "blocked", blockers };
202
+ }
203
+ return {
204
+ state: "needs_verification",
205
+ blockers: ["verification evidence is not persisted"]
206
+ };
207
+ }
208
+ function selectNextAction(currentWork, findings) {
209
+ if (currentWork.state === "malformed") {
210
+ return {
211
+ command: "/doctor",
212
+ reason: "Repair the stage or spec contract before continuing."
213
+ };
214
+ }
215
+ if (currentWork.state === "active") {
216
+ if (currentWork.nextStep) {
217
+ return {
218
+ command: "/implement",
219
+ reason: `Resume active work with ${currentWork.nextStep.title}.`
220
+ };
221
+ }
222
+ const openBlocker = findings.blockers.find((finding) => finding.status === "open");
223
+ if (openBlocker) {
224
+ return {
225
+ command: "/implement",
226
+ reason: `Repair blocking finding ${openBlocker.id}.`
227
+ };
228
+ }
229
+ const fixedBlocker = findings.blockers.find((finding) => finding.status === "fixed");
230
+ if (fixedBlocker) {
231
+ return {
232
+ command: "/check",
233
+ reason: `Re-verify fixed finding ${fixedBlocker.id}.`
234
+ };
235
+ }
236
+ return {
237
+ command: "/check",
238
+ reason: "All checklist steps are completed; run QA verification."
239
+ };
240
+ }
241
+ const openBlocker = findings.blockers.find((finding) => finding.status === "open");
242
+ if (openBlocker) {
243
+ return {
244
+ command: `/fix ${openBlocker.id}`,
245
+ reason: "Start a tracked repair for the blocking finding."
246
+ };
247
+ }
248
+ return {
249
+ command: "/feature",
250
+ reason: "Workspace is idle. Ready to spec or discover a new feature."
251
+ };
252
+ }
253
+ function findDrift(currentWork, git) {
254
+ if (currentWork.state !== "active") {
255
+ return [];
256
+ }
257
+ const warnings = [];
258
+ if (git.available && (git.branch === "main" || git.branch === "master")) {
259
+ warnings.push({
260
+ code: "active_work_on_default_branch",
261
+ message: `Active ${currentWork.type || "work"} is running on the default branch.`
262
+ });
263
+ }
264
+ if (currentWork.total > 0 && currentWork.remaining === 0) {
265
+ warnings.push({
266
+ code: "completed_steps_not_released",
267
+ message: "All checklist steps are checked, but run has not been completed or verified."
268
+ });
269
+ }
270
+ return warnings;
271
+ }
272
+ export { formatHumanStatus, readProjectStatus, shouldUseColor };
273
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../lib/status.ts"],"names":[],"mappings":"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"}