@curdx/flow 2.3.3 → 2.3.4

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.3.3"
9
+ "version": "2.3.4"
10
10
  },
11
11
  "allowCrossMarketplaceDependenciesOn": [
12
12
  "context7-marketplace"
@@ -16,7 +16,7 @@
16
16
  "name": "curdx-flow",
17
17
  "source": "./",
18
18
  "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.",
19
- "version": "2.3.3",
19
+ "version": "2.3.4",
20
20
  "author": {
21
21
  "name": "wdx",
22
22
  "email": "bydongxin@gmail.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "curdx-flow",
3
- "version": "2.3.3",
3
+ "version": "2.3.4",
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",
@@ -121,6 +121,23 @@ const CURDX_FLOW_REQUIRED_PLUGIN_IDS = ["context7-plugin@context7-marketplace"];
121
121
  const HTTP_HOOK_SETTINGS = ["allowedHttpHookUrls", "httpHookAllowedEnvVars"];
122
122
  const PERSISTED_EFFORT_LEVELS = ["low", "medium", "high", "xhigh"];
123
123
  const ENV_EFFORT_LEVELS = [...PERSISTED_EFFORT_LEVELS, "max", "auto"];
124
+ const CURDX_FLOW_RUNTIME_CONSUMERS = {
125
+ autonomous_blocking: {
126
+ envVar: "CLAUDE_PLUGIN_OPTION_AUTONOMOUS_BLOCKING",
127
+ consumer: "hooks/scripts/stop-watcher.sh",
128
+ summary: "controls whether the Stop hook blocks Claude from stopping while execute work remains",
129
+ },
130
+ daily_dependency_check: {
131
+ envVar: "CLAUDE_PLUGIN_OPTION_DAILY_DEPENDENCY_CHECK",
132
+ consumer: "hooks/scripts/session-start.sh",
133
+ summary: "controls the once-per-day recommended companion plugin reminder",
134
+ },
135
+ monitor_interval_seconds: {
136
+ envVar: "CLAUDE_PLUGIN_OPTION_MONITOR_INTERVAL_SECONDS",
137
+ consumer: "monitors/scripts/flow-state-monitor.sh",
138
+ summary: "controls the polling interval for the interactive flow-state monitor",
139
+ },
140
+ };
124
141
 
125
142
  function envFlagEnabled(value) {
126
143
  if (value === true || value === 1) return true;
@@ -258,6 +275,43 @@ function applyCurdxFlowPluginOptionOverride(pluginOptionsState, key, value, scop
258
275
  }
259
276
  }
260
277
 
278
+ function buildCurdxFlowRuntimeProjection(pluginOptionsState) {
279
+ return pluginOptionsState.definitions.map((definition) => {
280
+ const effective = pluginOptionsState.machineEffective[definition.key] || {
281
+ value: definition.default,
282
+ source: "default",
283
+ };
284
+ const runtime = CURDX_FLOW_RUNTIME_CONSUMERS[definition.key] || {};
285
+ const details = [];
286
+
287
+ if (definition.key === "autonomous_blocking") {
288
+ details.push(
289
+ effective.value === false
290
+ ? "stop-hook continuation is disabled; Claude may stop at turn end even when execute tasks remain"
291
+ : "stop-hook continuation is enabled; CurDX-Flow can block turn end while execute tasks remain"
292
+ );
293
+ } else if (definition.key === "daily_dependency_check") {
294
+ details.push(
295
+ effective.value === false
296
+ ? "SessionStart plugin reminder is disabled on this machine"
297
+ : "SessionStart plugin reminder runs at most once per day on this machine"
298
+ );
299
+ } else if (definition.key === "monitor_interval_seconds") {
300
+ details.push(`flow-state monitor polls every ${effective.value} second(s) when Monitor is available`);
301
+ }
302
+
303
+ return {
304
+ key: definition.key,
305
+ envVar: runtime.envVar || `CLAUDE_PLUGIN_OPTION_${definition.key.toUpperCase()}`,
306
+ consumer: runtime.consumer || "plugin subprocess",
307
+ summary: runtime.summary || "runtime consumer",
308
+ value: effective.value,
309
+ source: effective.source,
310
+ details,
311
+ };
312
+ });
313
+ }
314
+
261
315
  function auditCurdxFlowPluginOptions(parsed, warnings, pluginOptionsState, scope = "project") {
262
316
  if (!isNonArrayObject(parsed) || !("pluginConfigs" in parsed)) {
263
317
  return;
@@ -593,6 +647,7 @@ export async function readProjectClaudeSettings(cwd = process.cwd(), { homeDir =
593
647
  localParseError: null,
594
648
  localWarnings: [],
595
649
  pluginOptions: createCurdxFlowPluginOptionsState(),
650
+ pluginRuntimeProjection: [],
596
651
  };
597
652
 
598
653
  try {
@@ -972,5 +1027,7 @@ export async function readProjectClaudeSettings(cwd = process.cwd(), { homeDir =
972
1027
  }
973
1028
  }
974
1029
 
1030
+ state.pluginRuntimeProjection = buildCurdxFlowRuntimeProjection(state.pluginOptions);
1031
+
975
1032
  return state;
976
1033
  }
@@ -598,6 +598,30 @@ export function buildDoctorReport({
598
598
  }
599
599
  }
600
600
 
601
+ if ((projectClaudeSettings?.pluginRuntimeProjection || []).length > 0) {
602
+ const runtimeProjectionSection = createSection("CurDX-Flow runtime projection:");
603
+
604
+ for (const entry of projectClaudeSettings.pluginRuntimeProjection) {
605
+ const sourceLabel = entry.source === "local"
606
+ ? "local"
607
+ : entry.source === "project"
608
+ ? "project"
609
+ : entry.source === "user"
610
+ ? "user"
611
+ : "bundled default";
612
+ pushSectionLine(
613
+ runtimeProjectionSection,
614
+ "info",
615
+ `${entry.envVar.padEnd(36)} ${formatInlineValue(entry.value)} (${sourceLabel})`,
616
+ [
617
+ `consumer: ${entry.consumer}`,
618
+ entry.summary,
619
+ ...(entry.details || []),
620
+ ]
621
+ );
622
+ }
623
+ }
624
+
601
625
  const localProjectSection = createSection("Local project:");
602
626
  if (projectState?.exists) {
603
627
  pushSectionLine(localProjectSection, "ok", `.flow/ ${cwd}`);
@@ -88,6 +88,7 @@ Guarded artifact targets:
88
88
  - `autonomous_blocking`: lets users disable stop-hook continuation without editing plugin files.
89
89
  - `daily_dependency_check`: silences or enables the once-per-day recommended-plugin reminder.
90
90
  - `monitor_interval_seconds`: controls plugin monitor polling cadence.
91
+ - `doctor` should explain both the machine-effective config value and the projected plugin subprocess env var for these knobs, since hook/monitor behavior depends on the env projection rather than direct JSON parsing.
91
92
 
92
93
  ## Plugin Dependency Constraints
93
94
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curdx/flow",
3
- "version": "2.3.3",
3
+ "version": "2.3.4",
4
4
  "description": "Skill-first discipline layer and CLI installer for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {