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.
- package/.claude/commands/wogi-finalize.md +83 -0
- package/.claude/rules/_internal/self-maintenance.md +1 -1
- package/.claude/settings.json +1 -1
- package/lib/commands/login.js +1 -1
- package/lib/installer.js +5 -5
- package/lib/release-channel.js +1 -1
- package/lib/skill-registry.js +3 -3
- package/lib/workspace-events.js +1 -1
- package/lib/workspace-gates.js +2 -2
- package/lib/workspace-intelligence.js +1 -1
- package/lib/workspace-routing.js +1 -1
- package/lib/workspace.js +16 -17
- package/package.json +2 -2
- package/scripts/base-workflow-step.js +2 -2
- package/scripts/flow-adaptive-learning.js +6 -6
- package/scripts/flow-api-index.js +2 -2
- package/scripts/flow-architect-pass.js +1 -1
- package/scripts/flow-ask.js +1 -1
- package/scripts/flow-assumption-detector.js +1 -1
- package/scripts/flow-audit-gates.js +38 -12
- package/scripts/flow-audit.js +4 -4
- package/scripts/flow-auto-context.js +3 -3
- package/scripts/flow-background.js +1 -1
- package/scripts/flow-best-of-n.js +7 -7
- package/scripts/flow-bridge.js +3 -3
- package/scripts/flow-bug.js +2 -2
- package/scripts/flow-bulk-loop.js +7 -7
- package/scripts/flow-cascade-completion.js +2 -2
- package/scripts/flow-cascade.js +1 -1
- package/scripts/flow-checkpoint.js +2 -2
- package/scripts/flow-clarifying-questions.js +2 -2
- package/scripts/flow-cli.js +2 -2
- package/scripts/flow-code-intelligence.js +4 -4
- package/scripts/flow-community-sync.js +6 -6
- package/scripts/flow-community.js +1 -1
- package/scripts/flow-completion-truth-gate.js +161 -5
- package/scripts/flow-complexity.js +1 -1
- package/scripts/flow-config-defaults.js +16 -4
- package/scripts/flow-config-interactive.js +2 -2
- package/scripts/flow-config-loader.js +1 -1
- package/scripts/flow-config-migrate.js +5 -6
- package/scripts/flow-consistency-check.js +5 -5
- package/scripts/flow-context-compact/expander.js +1 -1
- package/scripts/flow-context-compact/index.js +2 -2
- package/scripts/flow-context-compact/section-extractor.js +3 -3
- package/scripts/flow-context-compact/summary-tree.js +1 -1
- package/scripts/flow-context-estimator.js +1 -1
- package/scripts/flow-context-gatherer.js +6 -6
- package/scripts/flow-context-generator.js +6 -6
- package/scripts/flow-context-init.js +2 -2
- package/scripts/flow-context-manager.js +1 -1
- package/scripts/flow-context-manifest.js +1 -1
- package/scripts/flow-context-monitor.js +5 -5
- package/scripts/flow-context-orchestrator.js +2 -2
- package/scripts/flow-context-scoring.js +4 -4
- package/scripts/flow-contract-scan.js +1 -1
- package/scripts/flow-correct.js +3 -3
- package/scripts/flow-damage-control.js +2 -2
- package/scripts/flow-deploy-gate.js +2 -2
- package/scripts/flow-deploy-history.js +1 -1
- package/scripts/flow-diff.js +3 -3
- package/scripts/flow-done-gates.js +1 -1
- package/scripts/flow-done.js +7 -7
- package/scripts/flow-durable-session.js +1 -1
- package/scripts/flow-entropy-monitor.js +3 -3
- package/scripts/flow-epics.js +5 -5
- package/scripts/flow-error-recovery.js +4 -4
- package/scripts/flow-eval-judge.js +5 -5
- package/scripts/flow-eval.js +7 -7
- package/scripts/flow-export-scanner.js +5 -5
- package/scripts/flow-extraction-review.js +1 -1
- package/scripts/flow-failure-learning.js +9 -9
- package/scripts/flow-feature.js +5 -5
- package/scripts/flow-figma-confirm.js +1 -1
- package/scripts/flow-figma-extract.js +2 -2
- package/scripts/flow-figma-index.js +2 -2
- package/scripts/flow-figma-match.js +1 -1
- package/scripts/flow-figma-mcp-server.js +3 -3
- package/scripts/flow-figma-orchestrator.js +1 -1
- package/scripts/flow-figma-registry.js +2 -2
- package/scripts/flow-function-index.js +2 -2
- package/scripts/flow-gate-confidence.js +2 -2
- package/scripts/flow-gate-telemetry.js +1 -1
- package/scripts/flow-gitignore.js +1 -1
- package/scripts/flow-guided-edit.js +3 -3
- package/scripts/flow-health.js +95 -8
- package/scripts/flow-hooks.js +3 -3
- package/scripts/flow-hybrid-detect.js +2 -2
- package/scripts/flow-hybrid-interactive.js +1 -1
- package/scripts/flow-hybrid-test.js +1 -1
- package/scripts/flow-hypothesis-generator.js +4 -4
- package/scripts/flow-instruction-richness.js +11 -11
- package/scripts/flow-intent-bootstrap.js +1 -1
- package/scripts/flow-intent-framing.js +1 -1
- package/scripts/flow-item-link.js +2 -2
- package/scripts/flow-knowledge-router.js +7 -7
- package/scripts/flow-knowledge-sync.js +3 -3
- package/scripts/flow-learning-orchestrator.js +1 -1
- package/scripts/flow-links.js +2 -2
- package/scripts/flow-log-manager.js +2 -2
- package/scripts/flow-logic-adversary.js +5 -4
- package/scripts/flow-long-input-chunking.js +1 -1
- package/scripts/flow-long-input-cli.js +3 -3
- package/scripts/flow-long-input.js +18 -18
- package/scripts/flow-loop-retry-learning.js +2 -2
- package/scripts/flow-lsp.js +4 -4
- package/scripts/flow-mcp-docs.js +1 -1
- package/scripts/flow-memory-blocks.js +5 -5
- package/scripts/flow-memory-compactor.js +3 -3
- package/scripts/flow-memory-db.js +4 -4
- package/scripts/flow-memory-sync.js +3 -3
- package/scripts/flow-metrics.js +2 -2
- package/scripts/flow-migrate-igr.js +2 -2
- package/scripts/flow-migrate.js +2 -2
- package/scripts/flow-model-adapter.js +4 -4
- package/scripts/flow-model-caller.js +8 -8
- package/scripts/flow-model-config.js +5 -5
- package/scripts/flow-model-profile.js +7 -7
- package/scripts/flow-model-router.js +5 -5
- package/scripts/flow-model-types.js +3 -3
- package/scripts/flow-models.js +8 -8
- package/scripts/flow-morning.js +1 -1
- package/scripts/flow-multi-approach.js +1 -1
- package/scripts/flow-orchestrate-context.js +2 -2
- package/scripts/flow-orchestrate-llm.js +4 -4
- package/scripts/flow-orchestrate-rollback.js +1 -1
- package/scripts/flow-orchestrate-state.js +6 -6
- package/scripts/flow-orchestrate-templates.js +1 -1
- package/scripts/flow-orchestrate-validation.js +2 -2
- package/scripts/flow-orchestrate-validator.js +1 -1
- package/scripts/flow-orchestrate.js +25 -25
- package/scripts/flow-parallel.js +1 -1
- package/scripts/flow-pattern-enforcer.js +7 -7
- package/scripts/flow-pattern-extractor.js +3 -3
- package/scripts/flow-peer-review.js +8 -8
- package/scripts/flow-pending.js +1 -1
- package/scripts/flow-permissions.js +1 -1
- package/scripts/flow-phased-task.js +1 -1
- package/scripts/flow-plan.js +1 -1
- package/scripts/flow-prd-manager.js +2 -2
- package/scripts/flow-product-scanner.js +2 -2
- package/scripts/flow-progress-tracker.js +2 -2
- package/scripts/flow-progress.js +1 -1
- package/scripts/flow-project-analyzer.js +3 -3
- package/scripts/flow-prompt-capture.js +2 -2
- package/scripts/flow-prompt-composer.js +3 -3
- package/scripts/flow-prompt-template.js +4 -4
- package/scripts/flow-providers.js +31 -23
- package/scripts/flow-queue.js +1 -1
- package/scripts/flow-registry-manager.js +4 -4
- package/scripts/flow-regression.js +1 -1
- package/scripts/flow-response-parser.js +1 -1
- package/scripts/flow-resume.js +1 -1
- package/scripts/flow-review-passes/index.js +2 -2
- package/scripts/flow-review-passes/integration.js +3 -3
- package/scripts/flow-review-passes/logic.js +3 -3
- package/scripts/flow-review-passes/security.js +2 -2
- package/scripts/flow-review-passes/structure.js +1 -1
- package/scripts/flow-review.js +11 -11
- package/scripts/flow-revision-tracker.js +2 -2
- package/scripts/flow-roadmap.js +2 -2
- package/scripts/flow-run-trace.js +1 -1
- package/scripts/flow-safety.js +3 -3
- package/scripts/flow-scanner-base.js +1 -1
- package/scripts/flow-scenario-engine.js +7 -7
- package/scripts/flow-schema-drift.js +4 -3
- package/scripts/flow-section-index.js +2 -2
- package/scripts/flow-section-resolver.js +4 -4
- package/scripts/flow-semantic-match.js +3 -3
- package/scripts/flow-session-end.js +56 -0
- package/scripts/flow-session-learning.js +2 -2
- package/scripts/flow-setup-hooks.js +1 -1
- package/scripts/flow-skill-create.js +3 -3
- package/scripts/flow-skill-freshness.js +2 -2
- package/scripts/flow-skill-generator.js +6 -6
- package/scripts/flow-skill-learn.js +7 -7
- package/scripts/flow-skill-matcher.js +2 -2
- package/scripts/flow-solution-optimizer.js +1 -1
- package/scripts/flow-spec-generator.js +5 -5
- package/scripts/flow-spec-verifier.js +2 -2
- package/scripts/flow-stack-wizard.js +6 -6
- package/scripts/flow-standards-checker.js +8 -8
- package/scripts/flow-standards-gate.js +4 -4
- package/scripts/flow-standards-learner.js +2 -2
- package/scripts/flow-start.js +9 -9
- package/scripts/flow-stats-collector.js +2 -2
- package/scripts/flow-status.js +1 -1
- package/scripts/flow-step-changelog.js +3 -3
- package/scripts/flow-step-complexity.js +1 -1
- package/scripts/flow-step-coverage.js +3 -3
- package/scripts/flow-step-knowledge.js +2 -2
- package/scripts/flow-step-pr-tests.js +2 -2
- package/scripts/flow-step-regression.js +3 -3
- package/scripts/flow-step-review.js +5 -5
- package/scripts/flow-story.js +2 -2
- package/scripts/flow-strict-adherence.js +2 -2
- package/scripts/flow-structure-sensor.js +283 -0
- package/scripts/flow-sync-anonymizer.js +3 -3
- package/scripts/flow-task-checkpoint.js +2 -2
- package/scripts/flow-task-classifier.js +2 -2
- package/scripts/flow-task-completion-summary.js +1 -1
- package/scripts/flow-task-enforcer.js +5 -5
- package/scripts/flow-tech-debt.js +3 -3
- package/scripts/flow-template-extractor.js +3 -3
- package/scripts/flow-templates.js +1 -1
- package/scripts/flow-test-api.js +12 -12
- package/scripts/flow-test-discovery.js +9 -9
- package/scripts/flow-test-generate.js +5 -5
- package/scripts/flow-test-integrity.js +3 -3
- package/scripts/flow-test-ui.js +8 -8
- package/scripts/flow-testing-deps.js +4 -4
- package/scripts/flow-tiered-learning.js +3 -3
- package/scripts/flow-todowrite-sync.js +1 -1
- package/scripts/flow-trap-zone.js +1 -1
- package/scripts/flow-verification-profile.js +9 -9
- package/scripts/flow-verify.js +2 -2
- package/scripts/flow-version-check.js +2 -2
- package/scripts/flow-webmcp-generator.js +3 -3
- package/scripts/flow-wiring-verifier.js +13 -13
- package/scripts/flow-worker-question-classifier.js +256 -0
- package/scripts/flow-workflow-steps.js +3 -3
- package/scripts/flow-workflow.js +1 -1
- package/scripts/flow-worktree.js +1 -1
- package/scripts/hooks/adapters/base-adapter.js +2 -2
- package/scripts/hooks/core/commit-log-gate.js +2 -2
- package/scripts/hooks/core/component-check.js +3 -3
- package/scripts/hooks/core/config-change.js +1 -1
- package/scripts/hooks/core/deploy-gate.js +2 -1
- package/scripts/hooks/core/git-safety-gate.js +1 -1
- package/scripts/hooks/core/instructions-loaded.js +1 -1
- package/scripts/hooks/core/loop-check.js +1 -1
- package/scripts/hooks/core/manager-boundary-gate.js +3 -2
- package/scripts/hooks/core/observation-capture.js +6 -6
- package/scripts/hooks/core/phase-gate.js +4 -4
- package/scripts/hooks/core/pre-compact.js +1 -1
- package/scripts/hooks/core/pre-tool-orchestrator.js +1 -1
- package/scripts/hooks/core/routing-gate.js +2 -84
- package/scripts/hooks/core/session-context.js +1 -1
- package/scripts/hooks/core/session-end.js +3 -3
- package/scripts/hooks/core/session-history.js +1 -1
- package/scripts/hooks/core/setup-handler.js +1 -1
- package/scripts/hooks/core/task-boundary-reset.js +2 -4
- package/scripts/hooks/core/task-completed.js +13 -7
- package/scripts/hooks/core/task-created.js +1 -1
- package/scripts/hooks/core/worktree-lifecycle.js +1 -1
- package/scripts/hooks/entry/claude-code/permission-denied.js +4 -2
- package/scripts/hooks/entry/claude-code/stop.js +60 -0
- package/scripts/hooks/entry/claude-code/user-prompt-submit.js +1 -1
- package/scripts/hooks/git/post-commit.js +1 -1
- package/scripts/postinstall.js +7 -7
- package/scripts/preuninstall.js +5 -5
- package/scripts/registries/component-registry.js +2 -2
- package/scripts/registries/contract-scanner.js +11 -11
- package/scripts/registries/schema-registry.js +5 -5
- 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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 {
|
|
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 {
|
|
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(([
|
|
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(([
|
|
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(([
|
|
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(([
|
|
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(([
|
|
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 {
|
|
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,
|
|
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
|
|
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 {
|
|
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 {
|
|
17
|
-
const
|
|
18
|
-
const {
|
|
19
|
-
const {
|
|
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 {
|
|
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 {
|
|
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
|
|
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
|
|
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 (
|
|
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 (
|
|
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
|
|
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
|
|
package/scripts/flow-parallel.js
CHANGED
|
@@ -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
|
|
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
|
|
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,
|
|
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
|
|
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 {
|
|
39
|
+
const { execFileSync } = require('node:child_process');
|
|
40
40
|
const { resolvePatterns } = require('./flow-framework-resolver');
|
|
41
|
-
const { getProjectRoot, generateHashId, readJson, safeJsonParse
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
203
|
+
} catch (_err) {
|
|
204
204
|
// Parse as free-form text
|
|
205
205
|
}
|
|
206
206
|
|
package/scripts/flow-pending.js
CHANGED
|
@@ -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');;
|
package/scripts/flow-plan.js
CHANGED
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
* ./scripts/flow prd clear Clear PRD memory
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
const
|
|
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 (
|
|
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 (
|
|
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
|
|
189
|
+
const _pct = calculatePercentage(opts);
|
|
190
190
|
|
|
191
191
|
// Phase-level bar
|
|
192
192
|
lines.push(formatProgressBar({
|
package/scripts/flow-progress.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
const readline = require('node:readline/promises');
|
|
10
|
-
const { colors
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
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
|
|
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 (
|
|
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-
|
|
394
|
+
opus: 'claude-opus-4-7.yaml',
|
|
395
395
|
sonnet: 'claude-sonnet-4-6.yaml',
|
|
396
|
-
haiku: 'claude-haiku-
|
|
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 (
|
|
438
|
+
} catch (_err) {
|
|
439
439
|
return 0;
|
|
440
440
|
}
|
|
441
441
|
}
|