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
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
* flow providers configure <type> # Configure a provider
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
-
const
|
|
24
|
-
const
|
|
23
|
+
const _fs = require('node:fs');
|
|
24
|
+
const _path = require('node:path');
|
|
25
25
|
const https = require('node:https');
|
|
26
26
|
const http = require('node:http');
|
|
27
|
-
const {
|
|
27
|
+
const { getConfig, colors: c, estimateTokens } = require('./flow-utils');
|
|
28
28
|
const { success: printSuccess, error: printError } = require('./flow-output');
|
|
29
29
|
|
|
30
30
|
/**
|
|
@@ -64,6 +64,7 @@ const MODEL_CAPABILITIES = {
|
|
|
64
64
|
'gemma2': { codeQuality: 'high', instructionFollowing: 'high', contextWindow: 8192 },
|
|
65
65
|
|
|
66
66
|
// Cloud models - Full capability
|
|
67
|
+
'claude-opus-4-7': { codeQuality: 'excellent', instructionFollowing: 'excellent', contextWindow: 1000000, costTier: 'premium' },
|
|
67
68
|
'claude-opus-4-6': { codeQuality: 'excellent', instructionFollowing: 'excellent', contextWindow: 200000, costTier: 'premium' },
|
|
68
69
|
'claude-opus-4-5': { codeQuality: 'excellent', instructionFollowing: 'excellent', contextWindow: 200000, costTier: 'premium' },
|
|
69
70
|
'claude-sonnet-4-6': { codeQuality: 'excellent', instructionFollowing: 'excellent', contextWindow: 200000, costTier: 'standard' },
|
|
@@ -74,6 +75,7 @@ const MODEL_CAPABILITIES = {
|
|
|
74
75
|
|
|
75
76
|
// Cloud models - Executor tier (cheaper/faster)
|
|
76
77
|
'gpt-4o-mini': { codeQuality: 'high', instructionFollowing: 'high', contextWindow: 128000, costTier: 'cheap' },
|
|
78
|
+
'claude-haiku-4-5': { codeQuality: 'high', instructionFollowing: 'excellent', contextWindow: 200000, costTier: 'cheap' },
|
|
77
79
|
'claude-3-haiku': { codeQuality: 'high', instructionFollowing: 'high', contextWindow: 200000, costTier: 'cheap' },
|
|
78
80
|
'claude-3-5-haiku': { codeQuality: 'high', instructionFollowing: 'excellent', contextWindow: 200000, costTier: 'cheap' },
|
|
79
81
|
'gemini-flash': { codeQuality: 'high', instructionFollowing: 'high', contextWindow: 1000000, costTier: 'cheap' },
|
|
@@ -197,8 +199,13 @@ class BaseProvider {
|
|
|
197
199
|
this.name = 'base';
|
|
198
200
|
}
|
|
199
201
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
+
/**
|
|
203
|
+
* Abstract — every concrete provider subclass (AnthropicProvider,
|
|
204
|
+
* OpenAIProvider, OllamaProvider, etc.) must override this.
|
|
205
|
+
*/
|
|
206
|
+
// eslint-disable-next-line no-unused-vars
|
|
207
|
+
async complete(prompt, _options = {}) {
|
|
208
|
+
throw new Error(`Provider ${this.name}: complete() not implemented — override in subclass`);
|
|
202
209
|
}
|
|
203
210
|
|
|
204
211
|
async test() {
|
|
@@ -235,8 +242,8 @@ class OllamaProvider extends BaseProvider {
|
|
|
235
242
|
prompt,
|
|
236
243
|
stream: false,
|
|
237
244
|
options: {
|
|
238
|
-
temperature: options.temperature
|
|
239
|
-
num_predict: options.maxTokens
|
|
245
|
+
temperature: options.temperature ?? this.config.temperature ?? 0.7,
|
|
246
|
+
num_predict: options.maxTokens ?? this.config.maxTokens ?? 4096
|
|
240
247
|
}
|
|
241
248
|
};
|
|
242
249
|
|
|
@@ -323,7 +330,7 @@ class OllamaProvider extends BaseProvider {
|
|
|
323
330
|
headers: {
|
|
324
331
|
'Content-Type': 'application/json'
|
|
325
332
|
},
|
|
326
|
-
timeout: this.config.timeout
|
|
333
|
+
timeout: this.config.timeout ?? 120000
|
|
327
334
|
};
|
|
328
335
|
|
|
329
336
|
const req = http.request(options, (res) => {
|
|
@@ -365,8 +372,8 @@ class LMStudioProvider extends BaseProvider {
|
|
|
365
372
|
const body = {
|
|
366
373
|
model: options.model || this.config.model || 'local-model',
|
|
367
374
|
messages: [{ role: 'user', content: prompt }],
|
|
368
|
-
temperature: options.temperature
|
|
369
|
-
max_tokens: options.maxTokens
|
|
375
|
+
temperature: options.temperature ?? this.config.temperature ?? 0.7,
|
|
376
|
+
max_tokens: options.maxTokens ?? this.config.maxTokens ?? 4096
|
|
370
377
|
};
|
|
371
378
|
|
|
372
379
|
const response = await this._request(url, body);
|
|
@@ -391,7 +398,7 @@ class LMStudioProvider extends BaseProvider {
|
|
|
391
398
|
headers: {
|
|
392
399
|
'Content-Type': 'application/json'
|
|
393
400
|
},
|
|
394
|
-
timeout: this.config.timeout
|
|
401
|
+
timeout: this.config.timeout ?? 120000
|
|
395
402
|
};
|
|
396
403
|
|
|
397
404
|
const req = http.request(options, (res) => {
|
|
@@ -462,7 +469,7 @@ class AnthropicProvider extends BaseProvider {
|
|
|
462
469
|
|
|
463
470
|
const body = {
|
|
464
471
|
model: options.model || this.config.model || DEFAULT_CONFIGS.anthropic.model,
|
|
465
|
-
max_tokens: options.maxTokens
|
|
472
|
+
max_tokens: options.maxTokens ?? this.config.maxTokens ?? 4096,
|
|
466
473
|
messages: [{ role: 'user', content: prompt }]
|
|
467
474
|
};
|
|
468
475
|
|
|
@@ -499,7 +506,7 @@ class AnthropicProvider extends BaseProvider {
|
|
|
499
506
|
'x-api-key': this.apiKey,
|
|
500
507
|
'anthropic-version': '2023-06-01'
|
|
501
508
|
},
|
|
502
|
-
timeout: this.config.timeout
|
|
509
|
+
timeout: this.config.timeout ?? 60000
|
|
503
510
|
};
|
|
504
511
|
|
|
505
512
|
const req = https.request(options, (res) => {
|
|
@@ -549,8 +556,8 @@ class OpenAIProvider extends BaseProvider {
|
|
|
549
556
|
const body = {
|
|
550
557
|
model: options.model || this.config.model || DEFAULT_CONFIGS.openai.model,
|
|
551
558
|
messages,
|
|
552
|
-
temperature: options.temperature
|
|
553
|
-
max_tokens: options.maxTokens
|
|
559
|
+
temperature: options.temperature ?? this.config.temperature ?? 0.7,
|
|
560
|
+
max_tokens: options.maxTokens ?? this.config.maxTokens ?? 4096
|
|
554
561
|
};
|
|
555
562
|
|
|
556
563
|
const response = await this._request(url, body);
|
|
@@ -601,7 +608,7 @@ class OpenAIProvider extends BaseProvider {
|
|
|
601
608
|
'Content-Type': 'application/json',
|
|
602
609
|
'Authorization': `Bearer ${this.apiKey}`
|
|
603
610
|
},
|
|
604
|
-
timeout: this.config.timeout
|
|
611
|
+
timeout: this.config.timeout ?? 60000
|
|
605
612
|
};
|
|
606
613
|
|
|
607
614
|
const req = https.request(options, (res) => {
|
|
@@ -652,8 +659,8 @@ class GoogleProvider extends BaseProvider {
|
|
|
652
659
|
parts: [{ text: prompt }]
|
|
653
660
|
}],
|
|
654
661
|
generationConfig: {
|
|
655
|
-
temperature: options.temperature
|
|
656
|
-
maxOutputTokens: options.maxTokens
|
|
662
|
+
temperature: options.temperature ?? this.config.temperature ?? 0.7,
|
|
663
|
+
maxOutputTokens: options.maxTokens ?? this.config.maxTokens ?? 4096
|
|
657
664
|
}
|
|
658
665
|
};
|
|
659
666
|
|
|
@@ -714,7 +721,7 @@ class GoogleProvider extends BaseProvider {
|
|
|
714
721
|
'Content-Type': 'application/json',
|
|
715
722
|
...additionalHeaders
|
|
716
723
|
},
|
|
717
|
-
timeout: this.config.timeout
|
|
724
|
+
timeout: this.config.timeout ?? 60000
|
|
718
725
|
};
|
|
719
726
|
|
|
720
727
|
const req = https.request(options, (res) => {
|
|
@@ -929,11 +936,12 @@ async function detectProviders() {
|
|
|
929
936
|
local: false,
|
|
930
937
|
cost: 'paid',
|
|
931
938
|
models: [
|
|
939
|
+
{ id: 'claude-opus-4-7', name: 'Claude Opus 4.7 (latest)', recommended: true },
|
|
932
940
|
{ id: 'claude-opus-4-6', name: 'Claude Opus 4.6' },
|
|
933
|
-
{ id: 'claude-
|
|
934
|
-
{ id: 'claude-sonnet-4-6
|
|
935
|
-
{ id: 'claude-
|
|
936
|
-
{ id: 'claude-
|
|
941
|
+
{ id: 'claude-haiku-4-5-20251001', name: 'Claude Haiku 4.5 (Best for executor)' },
|
|
942
|
+
{ id: 'claude-sonnet-4-6', name: 'Claude Sonnet 4.6' },
|
|
943
|
+
{ id: 'claude-3-5-haiku-20241022', name: 'Claude 3.5 Haiku' },
|
|
944
|
+
{ id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5' }
|
|
937
945
|
]
|
|
938
946
|
});
|
|
939
947
|
}
|
package/scripts/flow-queue.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
const fs = require('node:fs');
|
|
18
18
|
const path = require('node:path');
|
|
19
|
-
const {
|
|
19
|
+
const { getConfig, safeJsonParse, color, success, warn, error, info, PATHS } = require('./flow-utils');
|
|
20
20
|
|
|
21
21
|
const MANIFEST_PATH = path.join(PATHS.state, 'registry-manifest.json');
|
|
22
22
|
const REGISTRIES_DIR = path.join(__dirname, 'registries');
|
|
@@ -55,7 +55,7 @@ class RegistryPlugin {
|
|
|
55
55
|
* @param {Object} stack - Output from detectStack()
|
|
56
56
|
* @returns {boolean} True if plugin should activate
|
|
57
57
|
*/
|
|
58
|
-
activateWhen(
|
|
58
|
+
activateWhen(_stack) {
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -264,7 +264,7 @@ class RegistryManager {
|
|
|
264
264
|
try {
|
|
265
265
|
const { detectStack } = require('./flow-context-init');
|
|
266
266
|
this.stack = detectStack(PATHS.root);
|
|
267
|
-
} catch (
|
|
267
|
+
} catch (_err) {
|
|
268
268
|
this.stack = null;
|
|
269
269
|
}
|
|
270
270
|
|
|
@@ -439,7 +439,7 @@ function printStatus(manager) {
|
|
|
439
439
|
console.log(` Generated: ${manifest.generatedAt || 'unknown'}`);
|
|
440
440
|
console.log(` Version: ${manifest.version || 'unknown'}`);
|
|
441
441
|
console.log(` Registries: ${(manifest.registries || []).length}`);
|
|
442
|
-
} catch (
|
|
442
|
+
} catch (_err) {
|
|
443
443
|
console.log(` Manifest: ${color('red', 'error reading')}`);
|
|
444
444
|
}
|
|
445
445
|
} else {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
const fs = require('node:fs');
|
|
18
18
|
const path = require('node:path');
|
|
19
19
|
const { execFileSync } = require('node:child_process');
|
|
20
|
-
const {
|
|
20
|
+
const { colors, getConfig, safeJsonParse, PATHS } = require('./flow-utils');
|
|
21
21
|
const { getExecParts, getCommand } = require('./flow-script-resolver');
|
|
22
22
|
|
|
23
23
|
const READY_PATH = PATHS.ready;
|
|
@@ -190,7 +190,7 @@ function removePreambles(content) {
|
|
|
190
190
|
* @param {string} expectedLanguage - Expected language (optional)
|
|
191
191
|
* @returns {string} - Clean code
|
|
192
192
|
*/
|
|
193
|
-
function cleanCodeBlock(response,
|
|
193
|
+
function cleanCodeBlock(response, _expectedLanguage = null) {
|
|
194
194
|
if (!response) return '';
|
|
195
195
|
|
|
196
196
|
let content = response;
|
package/scripts/flow-resume.js
CHANGED
|
@@ -230,7 +230,7 @@ function main() {
|
|
|
230
230
|
console.log(`Reason: ${result.reason}`);
|
|
231
231
|
|
|
232
232
|
// Show helpful info based on condition type
|
|
233
|
-
const
|
|
233
|
+
const _status = getSuspensionStatus();
|
|
234
234
|
switch (result.reason) {
|
|
235
235
|
case 'waiting-for-time':
|
|
236
236
|
console.log(`Resume at: ${result.resumeAt}`);
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* 4. Integration (Sonnet, conditional) - Breaking changes, contracts
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
const
|
|
18
|
-
const { getConfig,
|
|
17
|
+
const _path = require('node:path');
|
|
18
|
+
const { getConfig, warn, error, info } = require('../flow-utils');
|
|
19
19
|
|
|
20
20
|
// Import pass modules
|
|
21
21
|
const structurePass = require('./structure');
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
const path = require('node:path');
|
|
20
|
-
const {
|
|
20
|
+
const { } = require('../flow-utils');
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* API contract patterns
|
|
@@ -90,7 +90,7 @@ const BREAKING_CHANGE_PATTERNS = [
|
|
|
90
90
|
/**
|
|
91
91
|
* Import/export mismatch patterns
|
|
92
92
|
*/
|
|
93
|
-
const
|
|
93
|
+
const _IMPORT_EXPORT_PATTERNS = [
|
|
94
94
|
{
|
|
95
95
|
pattern: /import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g,
|
|
96
96
|
type: 'named-import'
|
|
@@ -351,7 +351,7 @@ function checkCrossModuleIssues(file) {
|
|
|
351
351
|
* @param {Object} context - Review context with project files
|
|
352
352
|
* @returns {Object[]} Array of disconnected module warnings
|
|
353
353
|
*/
|
|
354
|
-
function checkDisconnectedModules(files,
|
|
354
|
+
function checkDisconnectedModules(files, _context = {}) {
|
|
355
355
|
const issues = [];
|
|
356
356
|
|
|
357
357
|
// Build a map of all exports in the changed files
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* - Algorithm complexity hints
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
const {
|
|
18
|
+
const _path = require('node:path');
|
|
19
|
+
const { } = require('../flow-utils');
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Error handling patterns to check
|
|
@@ -188,7 +188,7 @@ const EDGE_CASE_PATTERNS = [
|
|
|
188
188
|
* @param {Object} context - Review context
|
|
189
189
|
* @returns {Object[]} Array of issues
|
|
190
190
|
*/
|
|
191
|
-
function checkFileLogic(file,
|
|
191
|
+
function checkFileLogic(file, _context) {
|
|
192
192
|
const issues = [];
|
|
193
193
|
const content = file.content || '';
|
|
194
194
|
const isTestFile = /\.(test|spec)\.[tj]sx?$/.test(file.path);
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
const path = require('node:path');
|
|
20
|
-
const {
|
|
20
|
+
const { } = require('../flow-utils');
|
|
21
21
|
const { CREDENTIAL_SCAN_PATTERNS } = require('../flow-security');
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -359,7 +359,7 @@ async function run(context) {
|
|
|
359
359
|
};
|
|
360
360
|
|
|
361
361
|
// Focus on files flagged by previous passes
|
|
362
|
-
const
|
|
362
|
+
const _priorityFiles = [
|
|
363
363
|
...(previousResults.structure?.filesToExamine || []),
|
|
364
364
|
...(previousResults.logic?.filesToExamine || [])
|
|
365
365
|
];
|
|
@@ -301,7 +301,7 @@ async function run(context) {
|
|
|
301
301
|
|
|
302
302
|
// Load project-specific patterns
|
|
303
303
|
const projectPatterns = loadProjectPatterns();
|
|
304
|
-
const
|
|
304
|
+
const _allContentPatterns = [...CONTENT_ANTI_PATTERNS, ...projectPatterns];
|
|
305
305
|
|
|
306
306
|
// Check each file
|
|
307
307
|
for (const file of files) {
|
package/scripts/flow-review.js
CHANGED
|
@@ -12,21 +12,21 @@ const {
|
|
|
12
12
|
const fs = require('node:fs');
|
|
13
13
|
const path = require('node:path');
|
|
14
14
|
const {
|
|
15
|
-
PATHS,
|
|
16
|
-
fileExists,
|
|
15
|
+
PATHS: _PATHS,
|
|
16
|
+
fileExists: _fileExists,
|
|
17
17
|
getConfig,
|
|
18
18
|
isPathWithinProject
|
|
19
19
|
} = require('./flow-utils')
|
|
20
|
-
const { color, success, warn, error
|
|
20
|
+
const { color, success, warn, error } = require('./flow-output');;
|
|
21
21
|
|
|
22
22
|
// v3.1 spec verification
|
|
23
|
-
const { verifySpecDeliverables
|
|
23
|
+
const { verifySpecDeliverables } = require('./flow-spec-verifier');
|
|
24
24
|
|
|
25
25
|
// v3.1 multi-pass review system
|
|
26
26
|
let multiPassReview;
|
|
27
27
|
try {
|
|
28
28
|
multiPassReview = require('./flow-review-passes');
|
|
29
|
-
} catch (
|
|
29
|
+
} catch (_err) {
|
|
30
30
|
multiPassReview = null;
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -34,7 +34,7 @@ try {
|
|
|
34
34
|
let standardsChecker;
|
|
35
35
|
try {
|
|
36
36
|
standardsChecker = require('./flow-standards-checker');
|
|
37
|
-
} catch (
|
|
37
|
+
} catch (_err) {
|
|
38
38
|
standardsChecker = null;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -42,7 +42,7 @@ try {
|
|
|
42
42
|
let solutionOptimizer;
|
|
43
43
|
try {
|
|
44
44
|
solutionOptimizer = require('./flow-solution-optimizer');
|
|
45
|
-
} catch (
|
|
45
|
+
} catch (_err) {
|
|
46
46
|
solutionOptimizer = null;
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -50,7 +50,7 @@ try {
|
|
|
50
50
|
let standardsGate;
|
|
51
51
|
try {
|
|
52
52
|
standardsGate = require('./flow-standards-gate');
|
|
53
|
-
} catch (
|
|
53
|
+
} catch (_err) {
|
|
54
54
|
standardsGate = null;
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -315,7 +315,7 @@ function runVerificationGates(files, options = {}) {
|
|
|
315
315
|
try {
|
|
316
316
|
execFileSync('npm', ['run', 'lint'], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
317
317
|
results.gates.push({ name: 'Lint', passed: true });
|
|
318
|
-
} catch (
|
|
318
|
+
} catch (_err) {
|
|
319
319
|
results.gates.push({ name: 'Lint', passed: false, details: 'Lint errors found' });
|
|
320
320
|
results.allPassed = false;
|
|
321
321
|
}
|
|
@@ -326,7 +326,7 @@ function runVerificationGates(files, options = {}) {
|
|
|
326
326
|
try {
|
|
327
327
|
execFileSync('npm', ['run', 'typecheck'], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
328
328
|
results.gates.push({ name: 'TypeCheck', passed: true });
|
|
329
|
-
} catch (
|
|
329
|
+
} catch (_err) {
|
|
330
330
|
results.gates.push({ name: 'TypeCheck', passed: false, details: 'Type errors found' });
|
|
331
331
|
results.allPassed = false;
|
|
332
332
|
}
|
|
@@ -337,7 +337,7 @@ function runVerificationGates(files, options = {}) {
|
|
|
337
337
|
try {
|
|
338
338
|
execFileSync('npm', ['test'], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
339
339
|
results.gates.push({ name: 'Tests', passed: true });
|
|
340
|
-
} catch (
|
|
340
|
+
} catch (_err) {
|
|
341
341
|
results.gates.push({ name: 'Tests', passed: false, details: 'Test failures' });
|
|
342
342
|
results.allPassed = false;
|
|
343
343
|
}
|
|
@@ -17,8 +17,8 @@ const path = require('node:path');
|
|
|
17
17
|
const {
|
|
18
18
|
getConfig,
|
|
19
19
|
PATHS,
|
|
20
|
-
readJson,
|
|
21
|
-
fileExists,
|
|
20
|
+
readJson: _readJson,
|
|
21
|
+
fileExists: _fileExists,
|
|
22
22
|
getTodayDate
|
|
23
23
|
} = require('./flow-utils');
|
|
24
24
|
const { recordRevision, loadStats } = require('./flow-stats-collector');
|
package/scripts/flow-roadmap.js
CHANGED
|
@@ -23,12 +23,12 @@ const {
|
|
|
23
23
|
fileExists,
|
|
24
24
|
safeJsonParse,
|
|
25
25
|
parseFlags,
|
|
26
|
-
getConfig,
|
|
26
|
+
getConfig: _getConfig,
|
|
27
27
|
isPathWithinProject,
|
|
28
28
|
escapeRegex,
|
|
29
29
|
getTodayDate
|
|
30
30
|
} = require('./flow-utils');
|
|
31
|
-
const { success, warn, error
|
|
31
|
+
const { success, warn, error } = require('./flow-output');
|
|
32
32
|
|
|
33
33
|
// Phase headers constant (used by add and move)
|
|
34
34
|
const PHASE_HEADERS = {
|
|
@@ -20,7 +20,7 @@ const fs = require('node:fs');
|
|
|
20
20
|
const path = require('node:path');
|
|
21
21
|
const { readJson, safeJsonParse, safeJsonParseString } = require('./flow-io');
|
|
22
22
|
const crypto = require('node:crypto');
|
|
23
|
-
const {
|
|
23
|
+
const { colors: c, PATHS } = require('./flow-utils');
|
|
24
24
|
const { success: printSuccess } = require('./flow-output');
|
|
25
25
|
|
|
26
26
|
const RUNS_DIR = PATHS.runs;
|
package/scripts/flow-safety.js
CHANGED
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
* flow safety status # Show current limits and permissions
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
const
|
|
20
|
+
const _fs = require('node:fs');
|
|
21
21
|
const path = require('node:path');
|
|
22
|
-
const {
|
|
22
|
+
const { getConfig, colors: c, PATHS } = require('./flow-utils');
|
|
23
23
|
const { success: printSuccess, error: printError } = require('./flow-output');
|
|
24
24
|
|
|
25
25
|
/**
|
|
@@ -201,7 +201,7 @@ class SafetyGuard {
|
|
|
201
201
|
/**
|
|
202
202
|
* Check if file access is allowed
|
|
203
203
|
*/
|
|
204
|
-
checkFilePermission(filePath,
|
|
204
|
+
checkFilePermission(filePath, _operation = 'read') {
|
|
205
205
|
if (!this.enabled) return true;
|
|
206
206
|
|
|
207
207
|
const permissions = this.config.permissions?.files || {};
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
const fs = require('node:fs');
|
|
16
16
|
const path = require('node:path');
|
|
17
|
-
const {
|
|
17
|
+
const { getConfig, PATHS } = require('./flow-utils');
|
|
18
18
|
|
|
19
19
|
// ============================================================
|
|
20
20
|
// Base Scanner Class
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
const fs = require('node:fs');
|
|
20
20
|
const path = require('node:path');
|
|
21
21
|
const crypto = require('node:crypto');
|
|
22
|
-
const {
|
|
22
|
+
const { safeJsonParseString } = require('./flow-utils');
|
|
23
23
|
|
|
24
24
|
let verificationProfile;
|
|
25
25
|
try {
|
|
26
26
|
verificationProfile = require('./flow-verification-profile');
|
|
27
|
-
} catch (
|
|
27
|
+
} catch (_err) {
|
|
28
28
|
verificationProfile = null;
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -241,13 +241,13 @@ async function executeStep(step, baseUrl, context, options = {}) {
|
|
|
241
241
|
if (contentType.includes('application/json')) {
|
|
242
242
|
try {
|
|
243
243
|
body = await response.json();
|
|
244
|
-
} catch (
|
|
244
|
+
} catch (_err) {
|
|
245
245
|
body = null;
|
|
246
246
|
}
|
|
247
247
|
} else {
|
|
248
248
|
try {
|
|
249
249
|
body = await response.text();
|
|
250
|
-
} catch (
|
|
250
|
+
} catch (_err) {
|
|
251
251
|
body = null;
|
|
252
252
|
}
|
|
253
253
|
}
|
|
@@ -378,7 +378,7 @@ function runAssertion(assertion, stepResult, context) {
|
|
|
378
378
|
try {
|
|
379
379
|
const regex = new RegExp(assertion.expected);
|
|
380
380
|
passed = regex.test(actualStr);
|
|
381
|
-
} catch (
|
|
381
|
+
} catch (_err) {
|
|
382
382
|
return {
|
|
383
383
|
passed: false,
|
|
384
384
|
type,
|
|
@@ -652,7 +652,7 @@ function resolveBaseUrl(scenario) {
|
|
|
652
652
|
if (profile && profile.api && profile.api.baseUrl) {
|
|
653
653
|
return profile.api.baseUrl;
|
|
654
654
|
}
|
|
655
|
-
} catch (
|
|
655
|
+
} catch (_err) {
|
|
656
656
|
// Fall through to default
|
|
657
657
|
}
|
|
658
658
|
}
|
|
@@ -679,7 +679,7 @@ function applyIsolationStrategy(scenario) {
|
|
|
679
679
|
return { ...scenario, teardown: { strategy: 'none' } };
|
|
680
680
|
}
|
|
681
681
|
// Tier 2 (database) and Tier 3 (reverse DELETE) use default teardown
|
|
682
|
-
} catch (
|
|
682
|
+
} catch (_err) {
|
|
683
683
|
// Non-fatal — use existing teardown config
|
|
684
684
|
}
|
|
685
685
|
return scenario;
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
const fs = require('node:fs');
|
|
23
23
|
const path = require('node:path');
|
|
24
24
|
const { execFileSync } = require('node:child_process');
|
|
25
|
+
const { safeJsonParse } = require('./flow-io');
|
|
25
26
|
|
|
26
27
|
// ============================================================
|
|
27
28
|
// Constants
|
|
@@ -68,7 +69,7 @@ function getRegisteredSchemaFiles() {
|
|
|
68
69
|
// Try schema-index.json first (structured data)
|
|
69
70
|
try {
|
|
70
71
|
if (fs.existsSync(SCHEMA_INDEX_PATH)) {
|
|
71
|
-
const index =
|
|
72
|
+
const index = safeJsonParse(SCHEMA_INDEX_PATH, {});
|
|
72
73
|
if (index.models) {
|
|
73
74
|
for (const model of index.models) {
|
|
74
75
|
if (model.file) {
|
|
@@ -554,7 +555,7 @@ function runSchemaDriftGate(changedFiles, opts = {}) {
|
|
|
554
555
|
let enabled = true;
|
|
555
556
|
try {
|
|
556
557
|
if (fs.existsSync(CONFIG_PATH)) {
|
|
557
|
-
const config =
|
|
558
|
+
const config = safeJsonParse(CONFIG_PATH, {});
|
|
558
559
|
enabled = config.enforcement?.schemaDrift?.enabled ?? config.schemaDrift?.enabled ?? true;
|
|
559
560
|
}
|
|
560
561
|
} catch (_err) {
|
|
@@ -641,7 +642,7 @@ function scanCrossRepoConsumers(driftEntries, workspaceRoot) {
|
|
|
641
642
|
try {
|
|
642
643
|
const configPath = path.join(workspaceRoot, 'wogi-workspace.json');
|
|
643
644
|
if (!fs.existsSync(configPath)) return results;
|
|
644
|
-
config =
|
|
645
|
+
config = safeJsonParse(configPath, {});
|
|
645
646
|
} catch (_err) {
|
|
646
647
|
return results;
|
|
647
648
|
}
|
|
@@ -25,7 +25,7 @@ const path = require('node:path');
|
|
|
25
25
|
const crypto = require('node:crypto');
|
|
26
26
|
const {
|
|
27
27
|
PATHS,
|
|
28
|
-
PROJECT_ROOT,
|
|
28
|
+
PROJECT_ROOT: _PROJECT_ROOT,
|
|
29
29
|
readFile,
|
|
30
30
|
writeFile,
|
|
31
31
|
fileExists,
|
|
@@ -40,7 +40,7 @@ const {
|
|
|
40
40
|
} = require('./flow-utils');
|
|
41
41
|
|
|
42
42
|
// Re-use existing section parser from flow-rules-sync
|
|
43
|
-
const {
|
|
43
|
+
const { slugify } = require('./flow-rules-sync');
|
|
44
44
|
|
|
45
45
|
// ============================================================
|
|
46
46
|
// Configuration
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
const {
|
|
28
|
-
PATHS,
|
|
29
|
-
fileExists,
|
|
30
|
-
readFile,
|
|
28
|
+
PATHS: _PATHS,
|
|
29
|
+
fileExists: _fileExists,
|
|
30
|
+
readFile: _readFile,
|
|
31
31
|
info,
|
|
32
32
|
warn
|
|
33
33
|
} = require('./flow-utils');
|
|
@@ -45,7 +45,7 @@ const {
|
|
|
45
45
|
searchSectionsByPins: dbSearchSectionsByPins,
|
|
46
46
|
searchSectionsBySimilarity,
|
|
47
47
|
getSectionById: dbGetSectionById,
|
|
48
|
-
getSectionsBySource,
|
|
48
|
+
getSectionsBySource: _getSectionsBySource,
|
|
49
49
|
getSectionStats
|
|
50
50
|
} = require('./flow-memory-db');
|
|
51
51
|
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
* - AI-as-judge for candidates above 50% combined score
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const { getConfig
|
|
16
|
+
const _fs = require('node:fs');
|
|
17
|
+
const _path = require('node:path');
|
|
18
|
+
const { getConfig } = require('./flow-utils');
|
|
19
19
|
|
|
20
20
|
// ============================================================
|
|
21
21
|
// Configuration
|