wogiflow 2.20.1 → 2.22.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 (255) hide show
  1. package/.claude/commands/wogi-finalize.md +83 -0
  2. package/.claude/rules/_internal/self-maintenance.md +1 -1
  3. package/.claude/settings.json +1 -1
  4. package/lib/commands/login.js +1 -1
  5. package/lib/installer.js +5 -5
  6. package/lib/release-channel.js +1 -1
  7. package/lib/skill-registry.js +3 -3
  8. package/lib/workspace-events.js +1 -1
  9. package/lib/workspace-gates.js +2 -2
  10. package/lib/workspace-intelligence.js +1 -1
  11. package/lib/workspace-routing.js +1 -1
  12. package/lib/workspace.js +16 -17
  13. package/package.json +2 -2
  14. package/scripts/base-workflow-step.js +2 -2
  15. package/scripts/flow-adaptive-learning.js +6 -6
  16. package/scripts/flow-api-index.js +2 -2
  17. package/scripts/flow-architect-pass.js +1 -1
  18. package/scripts/flow-ask.js +1 -1
  19. package/scripts/flow-assumption-detector.js +1 -1
  20. package/scripts/flow-audit-gates.js +38 -12
  21. package/scripts/flow-audit.js +4 -4
  22. package/scripts/flow-auto-context.js +3 -3
  23. package/scripts/flow-background.js +1 -1
  24. package/scripts/flow-best-of-n.js +7 -7
  25. package/scripts/flow-bridge.js +3 -3
  26. package/scripts/flow-bug.js +2 -2
  27. package/scripts/flow-bulk-loop.js +7 -7
  28. package/scripts/flow-cascade-completion.js +2 -2
  29. package/scripts/flow-cascade.js +1 -1
  30. package/scripts/flow-checkpoint.js +2 -2
  31. package/scripts/flow-clarifying-questions.js +2 -2
  32. package/scripts/flow-cli.js +2 -2
  33. package/scripts/flow-code-intelligence.js +4 -4
  34. package/scripts/flow-community-sync.js +6 -6
  35. package/scripts/flow-community.js +1 -1
  36. package/scripts/flow-completion-truth-gate.js +161 -5
  37. package/scripts/flow-complexity.js +1 -1
  38. package/scripts/flow-config-defaults.js +16 -4
  39. package/scripts/flow-config-interactive.js +2 -2
  40. package/scripts/flow-config-loader.js +1 -1
  41. package/scripts/flow-config-migrate.js +5 -6
  42. package/scripts/flow-consistency-check.js +5 -5
  43. package/scripts/flow-context-compact/expander.js +1 -1
  44. package/scripts/flow-context-compact/index.js +2 -2
  45. package/scripts/flow-context-compact/section-extractor.js +3 -3
  46. package/scripts/flow-context-compact/summary-tree.js +1 -1
  47. package/scripts/flow-context-estimator.js +1 -1
  48. package/scripts/flow-context-gatherer.js +6 -6
  49. package/scripts/flow-context-generator.js +6 -6
  50. package/scripts/flow-context-init.js +2 -2
  51. package/scripts/flow-context-manager.js +1 -1
  52. package/scripts/flow-context-manifest.js +1 -1
  53. package/scripts/flow-context-monitor.js +5 -5
  54. package/scripts/flow-context-orchestrator.js +2 -2
  55. package/scripts/flow-context-scoring.js +4 -4
  56. package/scripts/flow-contract-scan.js +1 -1
  57. package/scripts/flow-correct.js +3 -3
  58. package/scripts/flow-damage-control.js +2 -2
  59. package/scripts/flow-deploy-gate.js +2 -2
  60. package/scripts/flow-deploy-history.js +1 -1
  61. package/scripts/flow-diff.js +3 -3
  62. package/scripts/flow-done-gates.js +1 -1
  63. package/scripts/flow-done.js +7 -7
  64. package/scripts/flow-durable-session.js +1 -1
  65. package/scripts/flow-entropy-monitor.js +3 -3
  66. package/scripts/flow-epics.js +5 -5
  67. package/scripts/flow-error-recovery.js +4 -4
  68. package/scripts/flow-eval-judge.js +5 -5
  69. package/scripts/flow-eval.js +7 -7
  70. package/scripts/flow-export-scanner.js +5 -5
  71. package/scripts/flow-extraction-review.js +1 -1
  72. package/scripts/flow-failure-learning.js +9 -9
  73. package/scripts/flow-feature.js +5 -5
  74. package/scripts/flow-figma-confirm.js +1 -1
  75. package/scripts/flow-figma-extract.js +2 -2
  76. package/scripts/flow-figma-index.js +2 -2
  77. package/scripts/flow-figma-match.js +1 -1
  78. package/scripts/flow-figma-mcp-server.js +3 -3
  79. package/scripts/flow-figma-orchestrator.js +1 -1
  80. package/scripts/flow-figma-registry.js +2 -2
  81. package/scripts/flow-function-index.js +2 -2
  82. package/scripts/flow-gate-confidence.js +2 -2
  83. package/scripts/flow-gate-telemetry.js +1 -1
  84. package/scripts/flow-gitignore.js +1 -1
  85. package/scripts/flow-guided-edit.js +3 -3
  86. package/scripts/flow-health.js +95 -8
  87. package/scripts/flow-hooks.js +3 -3
  88. package/scripts/flow-hybrid-detect.js +2 -2
  89. package/scripts/flow-hybrid-interactive.js +1 -1
  90. package/scripts/flow-hybrid-test.js +1 -1
  91. package/scripts/flow-hypothesis-generator.js +4 -4
  92. package/scripts/flow-instruction-richness.js +11 -11
  93. package/scripts/flow-intent-bootstrap.js +1 -1
  94. package/scripts/flow-intent-framing.js +1 -1
  95. package/scripts/flow-item-link.js +2 -2
  96. package/scripts/flow-knowledge-router.js +7 -7
  97. package/scripts/flow-knowledge-sync.js +3 -3
  98. package/scripts/flow-learning-orchestrator.js +1 -1
  99. package/scripts/flow-links.js +2 -2
  100. package/scripts/flow-log-manager.js +2 -2
  101. package/scripts/flow-logic-adversary.js +5 -4
  102. package/scripts/flow-long-input-chunking.js +1 -1
  103. package/scripts/flow-long-input-cli.js +3 -3
  104. package/scripts/flow-long-input.js +18 -18
  105. package/scripts/flow-loop-retry-learning.js +2 -2
  106. package/scripts/flow-lsp.js +4 -4
  107. package/scripts/flow-mcp-docs.js +1 -1
  108. package/scripts/flow-memory-blocks.js +5 -5
  109. package/scripts/flow-memory-compactor.js +3 -3
  110. package/scripts/flow-memory-db.js +4 -4
  111. package/scripts/flow-memory-sync.js +3 -3
  112. package/scripts/flow-metrics.js +2 -2
  113. package/scripts/flow-migrate-igr.js +2 -2
  114. package/scripts/flow-migrate.js +2 -2
  115. package/scripts/flow-model-adapter.js +4 -4
  116. package/scripts/flow-model-caller.js +8 -8
  117. package/scripts/flow-model-config.js +5 -5
  118. package/scripts/flow-model-profile.js +7 -7
  119. package/scripts/flow-model-router.js +5 -5
  120. package/scripts/flow-model-types.js +3 -3
  121. package/scripts/flow-models.js +8 -8
  122. package/scripts/flow-morning.js +1 -1
  123. package/scripts/flow-multi-approach.js +1 -1
  124. package/scripts/flow-orchestrate-context.js +2 -2
  125. package/scripts/flow-orchestrate-llm.js +4 -4
  126. package/scripts/flow-orchestrate-rollback.js +1 -1
  127. package/scripts/flow-orchestrate-state.js +6 -6
  128. package/scripts/flow-orchestrate-templates.js +1 -1
  129. package/scripts/flow-orchestrate-validation.js +2 -2
  130. package/scripts/flow-orchestrate-validator.js +1 -1
  131. package/scripts/flow-orchestrate.js +25 -25
  132. package/scripts/flow-parallel.js +1 -1
  133. package/scripts/flow-pattern-enforcer.js +7 -7
  134. package/scripts/flow-pattern-extractor.js +3 -3
  135. package/scripts/flow-peer-review.js +8 -8
  136. package/scripts/flow-pending.js +1 -1
  137. package/scripts/flow-permissions.js +1 -1
  138. package/scripts/flow-phased-task.js +1 -1
  139. package/scripts/flow-plan.js +1 -1
  140. package/scripts/flow-prd-manager.js +2 -2
  141. package/scripts/flow-product-scanner.js +2 -2
  142. package/scripts/flow-progress-tracker.js +2 -2
  143. package/scripts/flow-progress.js +1 -1
  144. package/scripts/flow-project-analyzer.js +3 -3
  145. package/scripts/flow-prompt-capture.js +2 -2
  146. package/scripts/flow-prompt-composer.js +3 -3
  147. package/scripts/flow-prompt-template.js +4 -4
  148. package/scripts/flow-providers.js +31 -23
  149. package/scripts/flow-queue.js +1 -1
  150. package/scripts/flow-registry-manager.js +4 -4
  151. package/scripts/flow-regression.js +1 -1
  152. package/scripts/flow-response-parser.js +1 -1
  153. package/scripts/flow-resume.js +1 -1
  154. package/scripts/flow-review-passes/index.js +2 -2
  155. package/scripts/flow-review-passes/integration.js +3 -3
  156. package/scripts/flow-review-passes/logic.js +3 -3
  157. package/scripts/flow-review-passes/security.js +2 -2
  158. package/scripts/flow-review-passes/structure.js +1 -1
  159. package/scripts/flow-review.js +11 -11
  160. package/scripts/flow-revision-tracker.js +2 -2
  161. package/scripts/flow-roadmap.js +2 -2
  162. package/scripts/flow-run-trace.js +1 -1
  163. package/scripts/flow-safety.js +3 -3
  164. package/scripts/flow-scanner-base.js +1 -1
  165. package/scripts/flow-scenario-engine.js +7 -7
  166. package/scripts/flow-schema-drift.js +4 -3
  167. package/scripts/flow-section-index.js +2 -2
  168. package/scripts/flow-section-resolver.js +4 -4
  169. package/scripts/flow-semantic-match.js +3 -3
  170. package/scripts/flow-session-end.js +56 -0
  171. package/scripts/flow-session-learning.js +2 -2
  172. package/scripts/flow-setup-hooks.js +1 -1
  173. package/scripts/flow-skill-create.js +3 -3
  174. package/scripts/flow-skill-freshness.js +2 -2
  175. package/scripts/flow-skill-generator.js +6 -6
  176. package/scripts/flow-skill-learn.js +7 -7
  177. package/scripts/flow-skill-matcher.js +2 -2
  178. package/scripts/flow-solution-optimizer.js +1 -1
  179. package/scripts/flow-spec-generator.js +5 -5
  180. package/scripts/flow-spec-verifier.js +2 -2
  181. package/scripts/flow-stack-wizard.js +6 -6
  182. package/scripts/flow-standards-checker.js +8 -8
  183. package/scripts/flow-standards-gate.js +4 -4
  184. package/scripts/flow-standards-learner.js +2 -2
  185. package/scripts/flow-start.js +9 -9
  186. package/scripts/flow-stats-collector.js +2 -2
  187. package/scripts/flow-status.js +1 -1
  188. package/scripts/flow-step-changelog.js +3 -3
  189. package/scripts/flow-step-complexity.js +1 -1
  190. package/scripts/flow-step-coverage.js +3 -3
  191. package/scripts/flow-step-knowledge.js +2 -2
  192. package/scripts/flow-step-pr-tests.js +2 -2
  193. package/scripts/flow-step-regression.js +3 -3
  194. package/scripts/flow-step-review.js +5 -5
  195. package/scripts/flow-story.js +2 -2
  196. package/scripts/flow-strict-adherence.js +2 -2
  197. package/scripts/flow-structure-sensor.js +283 -0
  198. package/scripts/flow-sync-anonymizer.js +3 -3
  199. package/scripts/flow-task-checkpoint.js +2 -2
  200. package/scripts/flow-task-classifier.js +2 -2
  201. package/scripts/flow-task-completion-summary.js +1 -1
  202. package/scripts/flow-task-enforcer.js +5 -5
  203. package/scripts/flow-tech-debt.js +3 -3
  204. package/scripts/flow-template-extractor.js +3 -3
  205. package/scripts/flow-templates.js +1 -1
  206. package/scripts/flow-test-api.js +12 -12
  207. package/scripts/flow-test-discovery.js +9 -9
  208. package/scripts/flow-test-generate.js +5 -5
  209. package/scripts/flow-test-integrity.js +3 -3
  210. package/scripts/flow-test-ui.js +8 -8
  211. package/scripts/flow-testing-deps.js +4 -4
  212. package/scripts/flow-tiered-learning.js +3 -3
  213. package/scripts/flow-todowrite-sync.js +1 -1
  214. package/scripts/flow-trap-zone.js +1 -1
  215. package/scripts/flow-verification-profile.js +9 -9
  216. package/scripts/flow-verify.js +2 -2
  217. package/scripts/flow-version-check.js +2 -2
  218. package/scripts/flow-webmcp-generator.js +3 -3
  219. package/scripts/flow-wiring-verifier.js +13 -13
  220. package/scripts/flow-worker-question-classifier.js +256 -0
  221. package/scripts/flow-workflow-steps.js +3 -3
  222. package/scripts/flow-workflow.js +1 -1
  223. package/scripts/flow-worktree.js +1 -1
  224. package/scripts/hooks/adapters/base-adapter.js +2 -2
  225. package/scripts/hooks/core/commit-log-gate.js +2 -2
  226. package/scripts/hooks/core/component-check.js +3 -3
  227. package/scripts/hooks/core/config-change.js +1 -1
  228. package/scripts/hooks/core/deploy-gate.js +2 -1
  229. package/scripts/hooks/core/git-safety-gate.js +1 -1
  230. package/scripts/hooks/core/instructions-loaded.js +1 -1
  231. package/scripts/hooks/core/loop-check.js +1 -1
  232. package/scripts/hooks/core/manager-boundary-gate.js +3 -2
  233. package/scripts/hooks/core/observation-capture.js +6 -6
  234. package/scripts/hooks/core/phase-gate.js +4 -4
  235. package/scripts/hooks/core/pre-compact.js +1 -1
  236. package/scripts/hooks/core/pre-tool-orchestrator.js +1 -1
  237. package/scripts/hooks/core/routing-gate.js +2 -84
  238. package/scripts/hooks/core/session-context.js +1 -1
  239. package/scripts/hooks/core/session-end.js +3 -3
  240. package/scripts/hooks/core/session-history.js +1 -1
  241. package/scripts/hooks/core/setup-handler.js +1 -1
  242. package/scripts/hooks/core/task-boundary-reset.js +2 -4
  243. package/scripts/hooks/core/task-completed.js +13 -7
  244. package/scripts/hooks/core/task-created.js +1 -1
  245. package/scripts/hooks/core/worktree-lifecycle.js +1 -1
  246. package/scripts/hooks/entry/claude-code/permission-denied.js +4 -2
  247. package/scripts/hooks/entry/claude-code/stop.js +60 -0
  248. package/scripts/hooks/entry/claude-code/user-prompt-submit.js +1 -1
  249. package/scripts/hooks/git/post-commit.js +1 -1
  250. package/scripts/postinstall.js +7 -7
  251. package/scripts/preuninstall.js +5 -5
  252. package/scripts/registries/component-registry.js +2 -2
  253. package/scripts/registries/contract-scanner.js +11 -11
  254. package/scripts/registries/schema-registry.js +5 -5
  255. package/scripts/registries/service-registry.js +9 -9
@@ -165,7 +165,7 @@ class LocalLLM {
165
165
  parsed.parameters?.num_ctx ||
166
166
  parsed.details?.parameter_size && 4096; // fallback
167
167
  resolve({ contextLength: contextLength || 4096 });
168
- } catch (err) {
168
+ } catch (_err) {
169
169
  reject(new Error('Invalid response from Ollama /api/show'));
170
170
  }
171
171
  });
@@ -208,7 +208,7 @@ class LocalLLM {
208
208
  // LM Studio may include context_length in model object
209
209
  const contextLength = model?.context_length || model?.max_tokens || 4096;
210
210
  resolve({ contextLength });
211
- } catch (err) {
211
+ } catch (_err) {
212
212
  reject(new Error('Invalid response from /v1/models'));
213
213
  }
214
214
  });
@@ -262,7 +262,7 @@ class LocalLLM {
262
262
  try {
263
263
  const parsed = JSON.parse(data);
264
264
  resolve(parsed.response || '');
265
- } catch (err) {
265
+ } catch (_err) {
266
266
  reject(new Error('Invalid response from Ollama'));
267
267
  }
268
268
  });
@@ -305,7 +305,7 @@ class LocalLLM {
305
305
  try {
306
306
  const parsed = JSON.parse(data);
307
307
  resolve(parsed.choices?.[0]?.message?.content || '');
308
- } catch (err) {
308
+ } catch (_err) {
309
309
  reject(new Error('Invalid response from LLM'));
310
310
  }
311
311
  });
@@ -8,7 +8,7 @@
8
8
 
9
9
  const fs = require('node:fs');
10
10
  const path = require('node:path');
11
- const { getProjectRoot, colors, PATHS } = require('./flow-utils');
11
+ const { colors, PATHS } = require('./flow-utils');
12
12
  const { readJson } = require('./flow-io');
13
13
 
14
14
  function log(color, ...args) {
@@ -8,7 +8,7 @@
8
8
 
9
9
  const fs = require('node:fs');
10
10
  const path = require('node:path');
11
- const { getProjectRoot, colors, getConfig, writeJson, PATHS } = require('./flow-utils');
11
+ const { colors, getConfig, writeJson, PATHS } = require('./flow-utils');
12
12
  const { readJson } = require('./flow-io');
13
13
  const { loadCachedExportMap } = require('./flow-export-scanner');
14
14
  const durableSession = require('./flow-durable-session');
@@ -235,7 +235,7 @@ ${step.description || ''}
235
235
  // Format components
236
236
  if (Object.keys(exportMap.components).length > 0) {
237
237
  context.availableComponents = Object.entries(exportMap.components)
238
- .map(([name, info]) => {
238
+ .map(([_name, info]) => {
239
239
  if (info.exports.length > 0) {
240
240
  return `import { ${info.exports.join(', ')} } from '${info.importPath}';`;
241
241
  } else if (info.defaultExport) {
@@ -250,7 +250,7 @@ ${step.description || ''}
250
250
  // Format hooks
251
251
  if (Object.keys(exportMap.hooks).length > 0) {
252
252
  context.availableHooks = Object.entries(exportMap.hooks)
253
- .map(([name, info]) => info.exports.length > 0
253
+ .map(([_name, info]) => info.exports.length > 0
254
254
  ? `import { ${info.exports.join(', ')} } from '${info.importPath}';`
255
255
  : null)
256
256
  .filter(Boolean)
@@ -260,7 +260,7 @@ ${step.description || ''}
260
260
  // Format services
261
261
  if (Object.keys(exportMap.services).length > 0) {
262
262
  context.availableServices = Object.entries(exportMap.services)
263
- .map(([name, info]) => info.exports.length > 0
263
+ .map(([_name, info]) => info.exports.length > 0
264
264
  ? `import { ${info.exports.join(', ')} } from '${info.importPath}';`
265
265
  : null)
266
266
  .filter(Boolean)
@@ -270,7 +270,7 @@ ${step.description || ''}
270
270
  // Format types
271
271
  if (Object.keys(exportMap.types).length > 0) {
272
272
  context.availableTypes = Object.entries(exportMap.types)
273
- .map(([name, info]) => info.types?.length > 0
273
+ .map(([_name, info]) => info.types?.length > 0
274
274
  ? `import type { ${info.types.join(', ')} } from '${info.importPath}';`
275
275
  : null)
276
276
  .filter(Boolean)
@@ -280,7 +280,7 @@ ${step.description || ''}
280
280
  // Format utils
281
281
  if (Object.keys(exportMap.utils).length > 0) {
282
282
  context.availableUtils = Object.entries(exportMap.utils)
283
- .map(([name, info]) => info.exports.length > 0
283
+ .map(([_name, info]) => info.exports.length > 0
284
284
  ? `import { ${info.exports.join(', ')} } from '${info.importPath}';`
285
285
  : null)
286
286
  .filter(Boolean)
@@ -9,7 +9,7 @@
9
9
 
10
10
  const fs = require('node:fs');
11
11
  const path = require('node:path');
12
- const { getProjectRoot, colors, getConfig, PATHS } = require('./flow-utils');
12
+ const { colors, getConfig, PATHS } = require('./flow-utils');
13
13
  const {
14
14
  getVerbosityGuidance,
15
15
  loadPatterns,
@@ -32,7 +32,7 @@ const { loadCachedExportMap } = require('./flow-export-scanner');
32
32
  * - JSON wrapper responses
33
33
  * - Multiple code blocks (selects largest/most relevant)
34
34
  */
35
- function extractCodeFromResponse(response, modelName = '') {
35
+ function extractCodeFromResponse(response, _modelName = '') {
36
36
  if (!response || typeof response !== 'string') {
37
37
  return response;
38
38
  }
@@ -304,7 +304,7 @@ function validateOutputMatchesTask(code, step) {
304
304
  const stepType = step.type;
305
305
  const expectedName = step.params?.name || step.params?.componentName || '';
306
306
  const targetPath = step.params?.path || '';
307
- const codeLower = code.toLowerCase();
307
+ const _codeLower = code.toLowerCase();
308
308
  const issues = [];
309
309
  let confidence = 100;
310
310
 
@@ -9,7 +9,7 @@
9
9
  const fs = require('node:fs');
10
10
  const path = require('node:path');
11
11
  const { execFileSync } = require('node:child_process');
12
- const { getProjectRoot, colors, PATHS } = require('./flow-utils');
12
+ const { colors, PATHS } = require('./flow-utils');
13
13
  const { getExecParts } = require('./flow-script-resolver');
14
14
 
15
15
  function log(color, ...args) {
@@ -13,10 +13,10 @@
13
13
 
14
14
  const fs = require('node:fs');
15
15
  const path = require('node:path');
16
- const { execSync, execFileSync, spawn } = require('node:child_process');
17
- const readline = require('node:readline');
18
- const { validatePathWithinProject } = require('./flow-security');
19
- const { getExecParts } = require('./flow-script-resolver');
16
+ const { } = require('node:child_process');
17
+ const _readline = require('node:readline');
18
+ const { } = require('./flow-security');
19
+ const { } = require('./flow-script-resolver');
20
20
  const { readJson } = require('./flow-io');
21
21
 
22
22
  // Extracted class modules
@@ -27,12 +27,12 @@ const { RollbackManager } = require('./flow-orchestrate-rollback');
27
27
  const { StateManager } = require('./flow-orchestrate-state');
28
28
 
29
29
  // Import LLM clients (extracted for modularity)
30
- const { LocalLLM, CloudExecutor, createExecutor } = require('./flow-orchestrate-llm');
30
+ const { createExecutor } = require('./flow-orchestrate-llm');
31
31
 
32
32
  // Import complexity assessment module
33
33
  const {
34
34
  assessTaskComplexity,
35
- TOKEN_BUDGETS,
35
+ TOKEN_BUDGETS: _TOKEN_BUDGETS,
36
36
  getDefaultTokens,
37
37
  clampTokens
38
38
  } = require('./flow-complexity');
@@ -40,33 +40,33 @@ const {
40
40
  // Import instruction richness module
41
41
  const {
42
42
  getInstructionRichness,
43
- getVerbosityGuidance,
43
+ getVerbosityGuidance: _getVerbosityGuidance,
44
44
  loadProjectContext: loadRichnessContext,
45
- loadPatterns,
46
- loadRelevantTypes,
45
+ loadPatterns: _loadPatterns,
46
+ loadRelevantTypes: _loadRelevantTypes,
47
47
  loadRelatedCode
48
48
  } = require('./flow-instruction-richness');
49
49
 
50
50
  // Import export scanner module
51
51
  const {
52
- buildExportMap,
53
- loadCachedExportMap,
54
- saveExportMapCache,
55
- formatExportMapForTemplate,
56
- validateComponentUsage,
57
- formatComponentWithUsage,
52
+ buildExportMap: _buildExportMap,
53
+ loadCachedExportMap: _loadCachedExportMap,
54
+ saveExportMapCache: _saveExportMapCache,
55
+ formatExportMapForTemplate: _formatExportMapForTemplate,
56
+ validateComponentUsage: _validateComponentUsage,
57
+ formatComponentWithUsage: _formatComponentWithUsage,
58
58
  setProjectRoot: setExportScannerRoot
59
59
  } = require('./flow-export-scanner');
60
60
 
61
61
  // Import utilities for consistent project root, colors, and config
62
- const { getProjectRoot, colors, getConfig, writeJson, estimateTokens, error, PATHS } = require('./flow-utils');
62
+ const { colors, getConfig, estimateTokens, error, PATHS } = require('./flow-utils');
63
63
  const { getPromptAdjustments, recordModelResult } = require('./flow-model-adapter');
64
64
 
65
65
  // Import provider infrastructure for cloud executors
66
66
  const {
67
- createExecutorFromConfig,
67
+ createExecutorFromConfig: _createExecutorFromConfig,
68
68
  getExecutorConfig,
69
- MODEL_CAPABILITIES,
69
+ MODEL_CAPABILITIES: _MODEL_CAPABILITIES,
70
70
  getModelContextLimit
71
71
  } = require('./flow-providers');
72
72
 
@@ -92,13 +92,13 @@ const {
92
92
  // Import pattern enforcer for active learning enforcement
93
93
  const {
94
94
  injectPatterns,
95
- extractRelevantPatterns,
96
- validateAgainstPatterns,
95
+ extractRelevantPatterns: _extractRelevantPatterns,
96
+ validateAgainstPatterns: _validateAgainstPatterns,
97
97
  generateSessionSummary
98
98
  } = require('./flow-pattern-enforcer');
99
99
 
100
100
  // v2.0: Import durable session for unified step tracking
101
- const durableSession = require('./flow-durable-session');
101
+ const _durableSession = require('./flow-durable-session');
102
102
 
103
103
  // v2.1: Import Hybrid Mode Intelligence modules
104
104
  const {
@@ -175,7 +175,7 @@ function generateFixSuggestion(errorHistory) {
175
175
  return 'Review the task requirements and try again';
176
176
  }
177
177
 
178
- const lastError = errorHistory[errorHistory.length - 1];
178
+ const _lastError = errorHistory[errorHistory.length - 1];
179
179
  const errorCounts = {};
180
180
 
181
181
  for (const e of errorHistory) {
@@ -290,7 +290,7 @@ function getProjectContext() {
290
290
  try {
291
291
  const config = getConfig();
292
292
  return config.hybrid?.projectContext ?? {};
293
- } catch (err) {
293
+ } catch (_err) {
294
294
  return {};
295
295
  }
296
296
  }
@@ -444,7 +444,7 @@ function detectUIFramework(projectRoot = PATHS.root) {
444
444
  if (deps['tailwindcss']) return 'tailwind';
445
445
 
446
446
  return 'react'; // vanilla
447
- } catch (err) {
447
+ } catch (_err) {
448
448
  return 'react';
449
449
  }
450
450
  }
@@ -1242,7 +1242,7 @@ class Orchestrator {
1242
1242
 
1243
1243
  // Smart retry tracking - detect stuck loops and progress
1244
1244
  const errorHistory = [];
1245
- const errorSignatures = new Map(); // Track how many times we see each error pattern
1245
+ const _errorSignatures = new Map(); // Track how many times we see each error pattern
1246
1246
  let consecutiveSameError = 0;
1247
1247
  let lastErrorSignature = null;
1248
1248
 
@@ -36,7 +36,7 @@
36
36
 
37
37
  const fs = require('node:fs');
38
38
  const path = require('node:path');
39
- const { getProjectRoot, getConfig, readJson, info, PATHS } = require('./flow-utils');
39
+ const { getProjectRoot, getConfig, readJson, info } = require('./flow-utils');
40
40
 
41
41
  // ============================================================
42
42
  // Configuration (uses centralized getConfig from flow-utils)
@@ -22,13 +22,13 @@
22
22
  const fs = require('node:fs');
23
23
  const path = require('node:path');
24
24
  const {
25
- getProjectRoot,
25
+ getProjectRoot: _getProjectRoot,
26
26
  getConfig,
27
27
  PATHS,
28
- fileExists,
29
- readFile,
28
+ fileExists: _fileExists,
29
+ readFile: _readFile,
30
30
  writeFile,
31
- withLockSync,
31
+ withLockSync: _withLockSync,
32
32
  info,
33
33
  success,
34
34
  warn,
@@ -354,7 +354,7 @@ function injectPatterns(prompt, task, projectRoot = PATHS.root) {
354
354
  /**
355
355
  * Validation rules based on pattern categories
356
356
  */
357
- const VALIDATION_RULES = {
357
+ const _VALIDATION_RULES = {
358
358
  'naming': [
359
359
  { pattern: /PascalCase/i, check: (code) => /[A-Z][a-z]+[A-Z]/.test(code), inverse: false },
360
360
  { pattern: /kebab-case/i, check: (code, files) => files?.every(f => /^[a-z0-9-]+\.[a-z]+$/.test(path.basename(f))), inverse: false },
@@ -461,7 +461,7 @@ function validateAgainstPatterns(code, patterns, files = []) {
461
461
  /**
462
462
  * Check if code includes required citations
463
463
  */
464
- function validateCitations(code, patterns) {
464
+ function validateCitations(code, _patterns) {
465
465
  const citations = code.match(/\/\/\s*(?:Following|Reusing|Pattern):\s*.+/gi) || [];
466
466
 
467
467
  return {
@@ -483,7 +483,7 @@ function validateCitations(code, patterns) {
483
483
  function generateSessionSummary(projectRoot = PATHS.root) {
484
484
  const decisions = loadDecisionPatterns(projectRoot);
485
485
  const components = loadAppMapComponents(projectRoot);
486
- const config = getConfig();
486
+ const _config = getConfig();
487
487
 
488
488
  let summary = '\n';
489
489
  summary += '┌─────────────────────────────────────────────────────────────┐\n';
@@ -36,9 +36,9 @@
36
36
 
37
37
  const fs = require('node:fs');
38
38
  const path = require('node:path');
39
- const { execSync, execFileSync } = require('node:child_process');
39
+ const { execFileSync } = require('node:child_process');
40
40
  const { resolvePatterns } = require('./flow-framework-resolver');
41
- const { getProjectRoot, generateHashId, readJson, safeJsonParse, PATHS } = require('./flow-utils');
41
+ const { getProjectRoot, generateHashId, readJson, safeJsonParse } = require('./flow-utils');
42
42
 
43
43
  // ============================================================================
44
44
  // Constants
@@ -2154,7 +2154,7 @@ async function extractPatterns(projectRoot, options = {}) {
2154
2154
  // Merge framework patterns with base patterns (additive only)
2155
2155
  filePatterns = [...new Set([...filePatterns, ...frameworkResolved.patterns])];
2156
2156
  }
2157
- } catch (err) {
2157
+ } catch (_err) {
2158
2158
  // Fallback: if detectStack or resolver fails, continue with base patterns only
2159
2159
  // This ensures backwards compatibility
2160
2160
  }
@@ -11,15 +11,15 @@
11
11
  */
12
12
 
13
13
  const { execSync } = require('node:child_process');
14
- const path = require('node:path');
14
+ const _path = require('node:path');
15
15
  const {
16
- PATHS,
16
+ PATHS: _PATHS,
17
17
  parseFlags,
18
18
  outputJson,
19
19
  getConfig,
20
- getConfigValue,
20
+ getConfigValue: _getConfigValue,
21
21
  color,
22
- success,
22
+ success: _success,
23
23
  warn,
24
24
  error,
25
25
  info,
@@ -87,7 +87,7 @@ function getStagedChanges() {
87
87
  // If no staged changes, try unstaged
88
88
  const unstaged = execSync('git diff', { encoding: 'utf-8' });
89
89
  return unstaged;
90
- } catch (err) {
90
+ } catch (_err) {
91
91
  return '';
92
92
  }
93
93
  }
@@ -120,7 +120,7 @@ function getTaskChanges(taskId) {
120
120
  }
121
121
  return execSync(`git show ${commitHash} --no-notes`, { encoding: 'utf-8' });
122
122
  }
123
- } catch (err) {
123
+ } catch (_err) {
124
124
  // Fall back to staged changes
125
125
  }
126
126
  return getStagedChanges();
@@ -175,7 +175,7 @@ function getFilesContent(glob) {
175
175
  }
176
176
  }
177
177
  return content;
178
- } catch (err) {
178
+ } catch (_err) {
179
179
  return '';
180
180
  }
181
181
  }
@@ -200,7 +200,7 @@ function parseModelResponse(response, modelName) {
200
200
  overallAssessment: parsed.overallAssessment || ''
201
201
  };
202
202
  }
203
- } catch (err) {
203
+ } catch (_err) {
204
204
  // Parse as free-form text
205
205
  }
206
206
 
@@ -12,7 +12,7 @@
12
12
  * flow pending mark-processed <id> # Mark item as processed
13
13
  */
14
14
 
15
- const fs = require('node:fs');
15
+ const _fs = require('node:fs');
16
16
  const path = require('node:path');
17
17
  const { PATHS, readJson, writeJson } = require('./flow-utils');
18
18
 
@@ -19,7 +19,7 @@
19
19
  const fs = require('node:fs');
20
20
  const path = require('node:path');
21
21
  const {
22
- getProjectRoot,
22
+ getProjectRoot: _getProjectRoot,
23
23
  safeJsonParse, PATHS
24
24
  } = require('./flow-utils')
25
25
  const { color, printHeader, printSection, success } = require('./flow-output');;
@@ -25,7 +25,7 @@ const {
25
25
  ensureDir,
26
26
  color,
27
27
  success,
28
- warn,
28
+ warn: _warn,
29
29
  error,
30
30
  info
31
31
  } = require('./flow-utils');
@@ -19,7 +19,7 @@ const fs = require('node:fs');
19
19
  const path = require('node:path');
20
20
  const {
21
21
  PATHS,
22
- readJson,
22
+ readJson: _readJson,
23
23
  writeJson,
24
24
  ensureDir,
25
25
  success,
@@ -17,11 +17,11 @@
17
17
  * ./scripts/flow prd clear Clear PRD memory
18
18
  */
19
19
 
20
- const fs = require('node:fs');
20
+ const _fs = require('node:fs');
21
21
  const path = require('node:path');
22
22
  const {
23
23
  getConfig,
24
- colors,
24
+ colors: _colors,
25
25
  color,
26
26
  success,
27
27
  warn,
@@ -26,7 +26,7 @@ const {
26
26
  safeJsonParse,
27
27
  parseFlags,
28
28
  outputJson,
29
- info,
29
+ info: _info,
30
30
  warn
31
31
  } = require('./flow-utils');
32
32
 
@@ -293,7 +293,7 @@ function detectRoutes(projectRoot) {
293
293
  });
294
294
  }
295
295
  }
296
- } catch (err) {
296
+ } catch (_err) {
297
297
  // Ignore read errors
298
298
  }
299
299
  }
@@ -97,7 +97,7 @@ function getExistingStartTime() {
97
97
  try {
98
98
  const existing = safeJsonParse(PROGRESS_PATH, null);
99
99
  return existing?.startedAt || null;
100
- } catch (err) {
100
+ } catch (_err) {
101
101
  return null;
102
102
  }
103
103
  }
@@ -186,7 +186,7 @@ function formatProgressBar(opts) {
186
186
  */
187
187
  function formatProgress(opts) {
188
188
  const lines = [];
189
- const pct = calculatePercentage(opts);
189
+ const _pct = calculatePercentage(opts);
190
190
 
191
191
  // Phase-level bar
192
192
  lines.push(formatProgressBar({
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  const readline = require('node:readline/promises');
10
- const { colors, getTodayDate } = require('./flow-utils');
10
+ const { colors } = require('./flow-utils');
11
11
 
12
12
  // ANSI escape prefix (was referenced as ESC without definition — latent
13
13
  // no-undef bug caught by eslint upgrade; wf-5a6df88a)
@@ -612,7 +612,7 @@ function detectProjectType(projectRoot) {
612
612
  }
613
613
  }
614
614
  }
615
- } catch (err) {
615
+ } catch (_err) {
616
616
  // Config read failure — use defaults
617
617
  }
618
618
 
@@ -672,7 +672,7 @@ function detectProjectType(projectRoot) {
672
672
  uiScore += weights.uiDirectory;
673
673
  break; // Only count one directory match
674
674
  }
675
- } catch (err) {
675
+ } catch (_err) {
676
676
  // stat failure — skip
677
677
  }
678
678
  }
@@ -684,7 +684,7 @@ function detectProjectType(projectRoot) {
684
684
  apiScore += weights.apiDirectory;
685
685
  break; // Only count one directory match
686
686
  }
687
- } catch (err) {
687
+ } catch (_err) {
688
688
  // stat failure — skip
689
689
  }
690
690
  }
@@ -20,7 +20,7 @@
20
20
  * - Bug 3: Top-level prompts[] never used → now the primary storage
21
21
  */
22
22
 
23
- const fs = require('node:fs');
23
+ const _fs = require('node:fs');
24
24
  const path = require('node:path');
25
25
  const {
26
26
  PATHS,
@@ -234,7 +234,7 @@ function getCurrentTaskId() {
234
234
  }
235
235
 
236
236
  return taskId;
237
- } catch (err) {
237
+ } catch (_err) {
238
238
  return null;
239
239
  }
240
240
  }
@@ -24,7 +24,7 @@ const {
24
24
  info,
25
25
  warn,
26
26
  error,
27
- fileExists,
27
+ fileExists: _fileExists,
28
28
  dirExists,
29
29
  printHeader,
30
30
  printSection,
@@ -41,7 +41,7 @@ try {
41
41
  sectionResolver = require('./flow-section-resolver');
42
42
  contextGatherer = require('./flow-context-gatherer');
43
43
  instructionRichness = require('./flow-instruction-richness');
44
- } catch (err) {
44
+ } catch (_err) {
45
45
  // Smart Context modules not available, will use traditional approach
46
46
  }
47
47
 
@@ -50,7 +50,7 @@ try {
50
50
  // ============================================================
51
51
 
52
52
  const FRAGMENTS_DIR = path.join(PATHS.workflow, 'prompts', 'fragments');
53
- const COMPOSED_DIR = path.join(PATHS.workflow, 'prompts', 'composed');
53
+ const _COMPOSED_DIR = path.join(PATHS.workflow, 'prompts', 'composed');
54
54
 
55
55
  // Model to CLI mapping (Claude Code only)
56
56
  const MODEL_CLI_MAP = {
@@ -209,7 +209,7 @@ function listTemplates() {
209
209
  return fs.readdirSync(TEMPLATES_DIR)
210
210
  .filter((f) => f.endsWith('.yaml'))
211
211
  .map((f) => f.replace('.yaml', ''));
212
- } catch (err) {
212
+ } catch (_err) {
213
213
  return [];
214
214
  }
215
215
  }
@@ -391,9 +391,9 @@ function getCapabilityScore(modelFamily, taskType) {
391
391
 
392
392
  // Map model family to capability file
393
393
  const fileMap = {
394
- opus: 'claude-opus-4-6.yaml',
394
+ opus: 'claude-opus-4-7.yaml',
395
395
  sonnet: 'claude-sonnet-4-6.yaml',
396
- haiku: 'claude-haiku-3-5.yaml'
396
+ haiku: 'claude-haiku-4-5.yaml'
397
397
  };
398
398
 
399
399
  const fileName = fileMap[modelFamily];
@@ -435,7 +435,7 @@ function getCapabilityScore(modelFamily, taskType) {
435
435
  const capKey = keyMap[taskType] || taskType;
436
436
  const score = parseInt(scores[capKey], 10);
437
437
  return isNaN(score) ? 0 : score;
438
- } catch (err) {
438
+ } catch (_err) {
439
439
  return 0;
440
440
  }
441
441
  }