@curdx/flow 2.0.15 → 2.0.17

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.
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
9
- "version": "2.0.15"
9
+ "version": "2.0.17"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "curdx-flow",
3
- "version": "2.0.15",
3
+ "version": "2.0.17",
4
4
  "description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
5
5
  "author": {
6
6
  "name": "wdx",
@@ -1,4 +1,4 @@
1
- import { color, ensureClaudeMemRuntimes, listPlugins, log, multiselectClack, note, run, text, writeConfig } from "./utils.js";
1
+ import { color, ensureClaudeMemRuntimes, listPlugins, log, multiselectClack, note, resultLastLine, run, text, writeConfig } from "./utils.js";
2
2
  import { BUNDLED_MCPS, RECOMMENDED_PLUGINS, REQUIRED_PLUGINS } from "./registry.js";
3
3
  import { readUserMcpConfig } from "./utils.js";
4
4
  import {
@@ -37,7 +37,7 @@ export async function installRequiredPlugins({ yes, language, config }) {
37
37
  }
38
38
  } else {
39
39
  console.log(
40
- ` ${color.red("✗")} ${plugin.name} install failed: ${ir.stderr.trim().split("\n").pop()}`
40
+ ` ${color.red("✗")} ${plugin.name} install failed: ${resultLastLine(ir)}`
41
41
  );
42
42
  console.log(
43
43
  color.dim(
@@ -76,7 +76,7 @@ export async function registerBundledMcps() {
76
76
  log.info(` ${mcp.name.padEnd(22)} ${color.dim("already exists — skipped")}`);
77
77
  } else {
78
78
  log.warn(
79
- ` ${mcp.name.padEnd(22)} registration failed: ${r.stderr.trim().split("\n").pop()}`
79
+ ` ${mcp.name.padEnd(22)} registration failed: ${resultLastLine(r)}`
80
80
  );
81
81
  log.info(
82
82
  ` Run manually: claude mcp add --scope user ${mcp.name} -- ${mcp.command} ${mcp.args.join(" ")}`
@@ -165,7 +165,7 @@ export async function installRecommendedPlugins({ all, yes, language }) {
165
165
  }
166
166
  } else {
167
167
  console.log(
168
- ` ${color.red("✗")} ${rec.name} install failed: ${ir.stderr.trim().split("\n").pop()}`
168
+ ` ${color.red("✗")} ${rec.name} install failed: ${resultLastLine(ir)}`
169
169
  );
170
170
  console.log(
171
171
  color.dim(
@@ -246,8 +246,8 @@ async function promptPluginConfig(plugin, language, config) {
246
246
  } else {
247
247
  log.warn(
248
248
  language === "zh"
249
- ? ` Context7 MCP 配置失败: ${r.stderr.trim().split("\n").pop()}`
250
- : ` Context7 MCP configuration failed: ${r.stderr.trim().split("\n").pop()}`
249
+ ? ` Context7 MCP 配置失败: ${resultLastLine(r)}`
250
+ : ` Context7 MCP configuration failed: ${resultLastLine(r)}`
251
251
  );
252
252
  log.info(
253
253
  color.dim(
@@ -1,4 +1,4 @@
1
- import { color, log, run } from "./utils.js";
1
+ import { color, log, resultOutput, run } from "./utils.js";
2
2
  import {
3
3
  pluginInstallArgs,
4
4
  pluginMarketplaceAddArgs,
@@ -24,7 +24,7 @@ export async function addCurdxMarketplace({ marketplaceSource, marketplaceLabel,
24
24
  { silent: true }
25
25
  );
26
26
  if (addRes.code !== 0 && !addRes.stderr.includes("already")) {
27
- log.warn(`marketplace add output: ${addRes.stderr.trim() || addRes.stdout.trim()}`);
27
+ log.warn(`marketplace add output: ${resultOutput(addRes)}`);
28
28
  } else {
29
29
  log.ok(
30
30
  `curdx-flow-marketplace added ${color.dim(useOffline ? "(offline, no GitHub fetch)" : "(from GitHub)")}`
@@ -59,7 +59,7 @@ export async function installCurdxFlowPlugin({ prevCurdxFlow, shippedVersion })
59
59
  { silent: true }
60
60
  );
61
61
  if (r.code !== 0) {
62
- log.err(`Install failed: ${r.stderr.trim() || r.stdout.trim()}`);
62
+ log.err(`Install failed: ${resultOutput(r)}`);
63
63
  process.exit(1);
64
64
  }
65
65
  log.ok(`curdx-flow re-registered at v${shippedVersion}`);
@@ -76,7 +76,7 @@ export async function installCurdxFlowPlugin({ prevCurdxFlow, shippedVersion })
76
76
  { silent: true }
77
77
  );
78
78
  if (r.code !== 0) {
79
- log.err(`Install failed: ${r.stderr.trim() || r.stdout.trim()}`);
79
+ log.err(`Install failed: ${resultOutput(r)}`);
80
80
  process.exit(1);
81
81
  }
82
82
  log.ok(`curdx-flow upgraded to v${shippedVersion}`);
@@ -93,7 +93,7 @@ export async function installCurdxFlowPlugin({ prevCurdxFlow, shippedVersion })
93
93
  { silent: true }
94
94
  );
95
95
  if (r.code !== 0) {
96
- log.err(`Install failed: ${r.stderr.trim() || r.stdout.trim()}`);
96
+ log.err(`Install failed: ${resultOutput(r)}`);
97
97
  process.exit(1);
98
98
  }
99
99
  log.ok("curdx-flow re-registered");
@@ -107,7 +107,7 @@ export async function installCurdxFlowPlugin({ prevCurdxFlow, shippedVersion })
107
107
  { silent: true }
108
108
  );
109
109
  if (r.code !== 0) {
110
- log.err(`Install failed: ${r.stderr.trim() || r.stdout.trim()}`);
110
+ log.err(`Install failed: ${resultOutput(r)}`);
111
111
  process.exit(1);
112
112
  }
113
113
  if (shippedVersion) {
@@ -42,3 +42,14 @@ export function has(cmd) {
42
42
  const res = runSync("which", [cmd]);
43
43
  return res.code === 0 && res.stdout.trim().length > 0;
44
44
  }
45
+
46
+ export function resultOutput(result) {
47
+ return (result?.stderr || "").trim() || (result?.stdout || "").trim();
48
+ }
49
+
50
+ export function resultLastLine(result) {
51
+ const output = resultOutput(result);
52
+ if (!output) return "";
53
+ const lines = output.split(/\r?\n/).filter(Boolean);
54
+ return lines.at(-1) || "";
55
+ }
package/cli/uninstall.js CHANGED
@@ -10,6 +10,8 @@ import {
10
10
  color,
11
11
  log,
12
12
  run,
13
+ resultLastLine,
14
+ resultOutput,
13
15
  confirm,
14
16
  multiSelect,
15
17
  claudeVersion,
@@ -92,7 +94,7 @@ export async function uninstall(args = []) {
92
94
  if (r.code === 0) {
93
95
  log.ok("curdx-flow uninstalled");
94
96
  } else {
95
- log.err(`Uninstall failed: ${r.stderr.trim() || r.stdout.trim()}`);
97
+ log.err(`Uninstall failed: ${resultOutput(r)}`);
96
98
  }
97
99
  }
98
100
 
@@ -142,7 +144,7 @@ export async function uninstall(args = []) {
142
144
  console.log(` ${color.green("✓")} ${rec.name} uninstalled`);
143
145
  } else {
144
146
  console.log(
145
- ` ${color.red("✗")} ${rec.name} uninstall failed: ${r.stderr.trim().split("\n").pop()}`
147
+ ` ${color.red("✗")} ${rec.name} uninstall failed: ${resultLastLine(r)}`
146
148
  );
147
149
  }
148
150
  }
@@ -239,7 +241,7 @@ export async function uninstall(args = []) {
239
241
  if (r.code === 0) {
240
242
  log.ok(`Removed marketplace ${marketplaceId}`);
241
243
  } else if (!r.stderr.includes("not found")) {
242
- log.warn(`Failed to remove marketplace ${marketplaceId}: ${r.stderr.trim().split("\n").pop()}`);
244
+ log.warn(`Failed to remove marketplace ${marketplaceId}: ${resultLastLine(r)}`);
243
245
  }
244
246
  }
245
247
 
package/cli/upgrade.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * upgrade command — update curdx-flow + recommended plugins to latest.
3
3
  */
4
4
 
5
- import { color, log, run, listPlugins, claudeVersion } from "./utils.js";
5
+ import { color, log, run, listPlugins, claudeVersion, resultLastLine } from "./utils.js";
6
6
  import {
7
7
  PLUGINS_TO_UPDATE,
8
8
  MARKETPLACES_TO_REFRESH,
@@ -33,7 +33,7 @@ export async function upgrade(args = []) {
33
33
  } else {
34
34
  // Not a fatal — might not be added
35
35
  if (!r.stderr.includes("not found")) {
36
- log.warn(` ${mp}: ${r.stderr.trim().split("\n").pop()}`);
36
+ log.warn(` ${mp}: ${resultLastLine(r)}`);
37
37
  }
38
38
  }
39
39
  }
@@ -65,7 +65,7 @@ export async function upgrade(args = []) {
65
65
  log.info(` ${pluginName.padEnd(22)} already up to date`);
66
66
  }
67
67
  } else {
68
- log.warn(` ${pluginName.padEnd(22)} ${r.stderr.trim().split("\n").pop()}`);
68
+ log.warn(` ${pluginName.padEnd(22)} ${resultLastLine(r)}`);
69
69
  }
70
70
  }
71
71
 
package/cli/utils.js CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  export { VERSION } from "./lib/version.js";
9
9
  export { color, log } from "./lib/logging.js";
10
- export { has, run, runSync } from "./lib/process.js";
10
+ export { has, resultLastLine, resultOutput, run, runSync } from "./lib/process.js";
11
11
  export {
12
12
  confirm,
13
13
  intro,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curdx/flow",
3
- "version": "2.0.15",
3
+ "version": "2.0.17",
4
4
  "description": "CLI installer for CurdX-Flow — AI engineering workflow meta-framework for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {