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
|
@@ -39,13 +39,13 @@
|
|
|
39
39
|
* node scripts/flow-logic-adversary.js rubric
|
|
40
40
|
*/
|
|
41
41
|
|
|
42
|
-
const
|
|
42
|
+
const _fs = require('node:fs');
|
|
43
43
|
const path = require('node:path');
|
|
44
44
|
|
|
45
45
|
const { PATHS } = require('./flow-paths');
|
|
46
46
|
const { fileExists, safeJsonParse, readFile } = require('./flow-io');
|
|
47
47
|
const { getConfig } = require('./flow-config-loader');
|
|
48
|
-
const {
|
|
48
|
+
const { info, error, color } = require('./flow-output');
|
|
49
49
|
const gateTelemetry = require('./flow-gate-telemetry');
|
|
50
50
|
|
|
51
51
|
// ============================================================
|
|
@@ -446,10 +446,11 @@ function shouldIterate(verdict, round) {
|
|
|
446
446
|
*/
|
|
447
447
|
// CL-008 fix (2026-04-13): pairing table moved to config so model IDs stay
|
|
448
448
|
// current as new versions release. Defaults preserved as fallback.
|
|
449
|
+
// Updated 2026-04-16: Opus 4.7 is the new top tier; sonnet/haiku adversary upgraded.
|
|
449
450
|
const DEFAULT_MODEL_PAIRING = {
|
|
450
451
|
opus: 'claude-sonnet-4-6',
|
|
451
|
-
sonnet: 'claude-opus-4-
|
|
452
|
-
haiku: 'claude-opus-4-
|
|
452
|
+
sonnet: 'claude-opus-4-7',
|
|
453
|
+
haiku: 'claude-opus-4-7',
|
|
453
454
|
};
|
|
454
455
|
|
|
455
456
|
function selectAdversaryModel(architectModel) {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
const fs = require('node:fs');
|
|
13
13
|
const path = require('node:path');
|
|
14
14
|
const { readJson } = require('./flow-io');
|
|
15
|
-
const {
|
|
15
|
+
const { } = require('./flow-utils');
|
|
16
16
|
|
|
17
17
|
// Core functions are injected via init() to avoid circular dependencies
|
|
18
18
|
let digestCore = null;
|
|
@@ -34,9 +34,9 @@ async function main() {
|
|
|
34
34
|
const longInput = require('./flow-long-input');
|
|
35
35
|
const {
|
|
36
36
|
// Core session
|
|
37
|
-
getStatus, createSession, countWords, loadActiveDigest, saveActiveDigest,
|
|
38
|
-
updatePhase, saveTopics, loadTopics, loadStatementMap, loadOrphans,
|
|
39
|
-
loadClarifications, saveClarifications,
|
|
37
|
+
getStatus, createSession, countWords, loadActiveDigest: _loadActiveDigest, saveActiveDigest: _saveActiveDigest,
|
|
38
|
+
updatePhase: _updatePhase, saveTopics, loadTopics, loadStatementMap, loadOrphans,
|
|
39
|
+
loadClarifications, saveClarifications: _saveClarifications,
|
|
40
40
|
// Detection
|
|
41
41
|
detectLargeInput, analyzeInput, classifyContentTypes, shouldExcludeContent,
|
|
42
42
|
// Parsing - subtitles
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
const fs = require('node:fs');
|
|
30
30
|
const path = require('node:path');
|
|
31
31
|
const { estimateTokens, generateHashId, getConfig, safeJsonParse, PATHS } = require('./flow-utils');
|
|
32
|
-
const {
|
|
32
|
+
const { } = require('./flow-output');
|
|
33
33
|
|
|
34
34
|
// Import extracted sub-modules
|
|
35
35
|
const transcriptParsing = require('./flow-long-input-parsing');
|
|
@@ -51,37 +51,37 @@ const {
|
|
|
51
51
|
|
|
52
52
|
// Destructure parsing functions
|
|
53
53
|
const {
|
|
54
|
-
parseVTT, parseSRT, parseSubtitle, mergeCues, formatCuesAsText, getSubtitleStats,
|
|
55
|
-
parseZoom, parseTeams, parseMeeting, mergeMeetingEntries, formatMeetingAsText, getMeetingStats
|
|
54
|
+
parseVTT: _parseVTT, parseSRT: _parseSRT, parseSubtitle: _parseSubtitle, mergeCues: _mergeCues, formatCuesAsText: _formatCuesAsText, getSubtitleStats: _getSubtitleStats,
|
|
55
|
+
parseZoom: _parseZoom, parseTeams: _parseTeams, parseMeeting: _parseMeeting, mergeMeetingEntries: _mergeMeetingEntries, formatMeetingAsText: _formatMeetingAsText, getMeetingStats
|
|
56
56
|
} = transcriptParsing;
|
|
57
57
|
|
|
58
58
|
// Destructure chunking functions
|
|
59
59
|
const {
|
|
60
|
-
loadDurableSessions, listDurableSessions, getDurableSession, switchDurableSession,
|
|
61
|
-
archiveDurableSession, deleteDurableSession, generateRecoverySummaryForSession,
|
|
62
|
-
getTimeSince, needsChunking, planChunks, getChunkingStatus
|
|
60
|
+
loadDurableSessions: _loadDurableSessions, listDurableSessions: _listDurableSessions, getDurableSession: _getDurableSession, switchDurableSession: _switchDurableSession,
|
|
61
|
+
archiveDurableSession: _archiveDurableSession, deleteDurableSession: _deleteDurableSession, generateRecoverySummaryForSession: _generateRecoverySummaryForSession,
|
|
62
|
+
getTimeSince: _getTimeSince, needsChunking: _needsChunking, planChunks: _planChunks, getChunkingStatus
|
|
63
63
|
} = transcriptChunking;
|
|
64
64
|
|
|
65
65
|
const { listSupportedLanguages } = transcriptLanguage;
|
|
66
66
|
|
|
67
67
|
// Destructure story functions
|
|
68
68
|
const {
|
|
69
|
-
generateStoryFromTopic, generateAllStories, saveStory, loadStory, loadAllStories,
|
|
70
|
-
formatStoryAsMarkdown, getPresentationStatus, getNextStory, getCurrentStory,
|
|
71
|
-
approveCurrentStory, rejectCurrentStory, skipCurrentStory, formatStorySummary,
|
|
72
|
-
formatActionsPrompt, getCompletionSummary, resetPresentation,
|
|
73
|
-
startEditSession, editUserStory, editCriterion, addCriterion, removeCriterion,
|
|
74
|
-
getEditChanges, commitEditSession, cancelEditSession, getEditHistory, listEditableStories,
|
|
75
|
-
previewExport, exportApprovedStories, finalizeDigestion
|
|
69
|
+
generateStoryFromTopic: _generateStoryFromTopic, generateAllStories: _generateAllStories, saveStory: _saveStory, loadStory: _loadStory, loadAllStories: _loadAllStories,
|
|
70
|
+
formatStoryAsMarkdown: _formatStoryAsMarkdown, getPresentationStatus: _getPresentationStatus, getNextStory: _getNextStory, getCurrentStory: _getCurrentStory,
|
|
71
|
+
approveCurrentStory: _approveCurrentStory, rejectCurrentStory: _rejectCurrentStory, skipCurrentStory: _skipCurrentStory, formatStorySummary: _formatStorySummary,
|
|
72
|
+
formatActionsPrompt: _formatActionsPrompt, getCompletionSummary: _getCompletionSummary, resetPresentation: _resetPresentation,
|
|
73
|
+
startEditSession: _startEditSession, editUserStory: _editUserStory, editCriterion: _editCriterion, addCriterion: _addCriterion, removeCriterion: _removeCriterion,
|
|
74
|
+
getEditChanges: _getEditChanges, commitEditSession: _commitEditSession, cancelEditSession: _cancelEditSession, getEditHistory: _getEditHistory, listEditableStories: _listEditableStories,
|
|
75
|
+
previewExport: _previewExport, exportApprovedStories: _exportApprovedStories, finalizeDigestion
|
|
76
76
|
} = transcriptStories;
|
|
77
77
|
|
|
78
78
|
// Destructure constants
|
|
79
79
|
const {
|
|
80
|
-
FILLER_PATTERNS, REQUIREMENT_PATTERNS, SEMANTIC_EXPANSIONS,
|
|
81
|
-
CORRECTION_PATTERNS, ADDITIVE_PATTERNS,
|
|
80
|
+
FILLER_PATTERNS: _FILLER_PATTERNS, REQUIREMENT_PATTERNS, SEMANTIC_EXPANSIONS: _SEMANTIC_EXPANSIONS,
|
|
81
|
+
CORRECTION_PATTERNS: _CORRECTION_PATTERNS, ADDITIVE_PATTERNS: _ADDITIVE_PATTERNS,
|
|
82
82
|
ENTITY_PATTERNS, VAGUE_PATTERNS, QUESTION_TEMPLATES,
|
|
83
83
|
DETAIL_PATTERNS, QUESTION_TEMPLATES_BY_LANGUAGE, FOLLOWUP_TRIGGERS,
|
|
84
|
-
UI_PATTERNS, DATA_PATTERNS, INTERACTION_PATTERNS, COMPLEXITY_LEVELS
|
|
84
|
+
UI_PATTERNS: _UI_PATTERNS, DATA_PATTERNS: _DATA_PATTERNS, INTERACTION_PATTERNS: _INTERACTION_PATTERNS, COMPLEXITY_LEVELS
|
|
85
85
|
} = longInputConstants;
|
|
86
86
|
|
|
87
87
|
// Destructure voice functions
|
|
@@ -124,14 +124,14 @@ const {
|
|
|
124
124
|
|
|
125
125
|
// Destructure passes functions
|
|
126
126
|
const {
|
|
127
|
-
extractKeyPhrase, createTopicFromOrphans, ensureGeneralTopic,
|
|
127
|
+
extractKeyPhrase: _extractKeyPhrase, createTopicFromOrphans, ensureGeneralTopic,
|
|
128
128
|
saveOrphans, loadOrphans, runPass2, runPass3, runPass4,
|
|
129
129
|
runFullPipeline, quickProcess, generateQuickSummary
|
|
130
130
|
} = longInputPasses;
|
|
131
131
|
|
|
132
132
|
// Paths - temp processing files go to .workflow/tmp/, cleaned up after completion
|
|
133
133
|
const TMP_DIR = path.join(process.cwd(), '.workflow', 'tmp', 'long-input');
|
|
134
|
-
const
|
|
134
|
+
const _STATE_DIR = TMP_DIR; // Alias for backward compatibility during migration
|
|
135
135
|
const ACTIVE_DIGEST_FILE = path.join(TMP_DIR, 'active-digest.json');
|
|
136
136
|
|
|
137
137
|
// ============================================
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
const fs = require('node:fs');
|
|
17
17
|
const path = require('node:path');
|
|
18
|
-
const { getConfig,
|
|
18
|
+
const { getConfig, colors, readJson, info, success, PATHS, getTodayDate } = require('./flow-utils');
|
|
19
19
|
const { FailureCategory, detectCategory } = require('./flow-failure-categories');
|
|
20
20
|
|
|
21
21
|
const LEARNING_LOG_PATH = path.join(PATHS.state, 'adaptive-learning.json');
|
|
@@ -279,7 +279,7 @@ function generateLearning(rootCause, session) {
|
|
|
279
279
|
* @param {string} taskId - Task ID
|
|
280
280
|
* @returns {boolean}
|
|
281
281
|
*/
|
|
282
|
-
function isDuplicateLearning(rootCause,
|
|
282
|
+
function isDuplicateLearning(rootCause, _taskId) {
|
|
283
283
|
if (!fs.existsSync(LEARNING_LOG_PATH)) {
|
|
284
284
|
return false;
|
|
285
285
|
}
|
package/scripts/flow-lsp.js
CHANGED
|
@@ -102,7 +102,7 @@ class LSPClient {
|
|
|
102
102
|
if (result.status === 0) {
|
|
103
103
|
return result.stdout.trim() || loc;
|
|
104
104
|
}
|
|
105
|
-
} catch (
|
|
105
|
+
} catch (_err) {
|
|
106
106
|
// Try next location
|
|
107
107
|
}
|
|
108
108
|
|
|
@@ -112,7 +112,7 @@ class LSPClient {
|
|
|
112
112
|
if (result.status === 0) {
|
|
113
113
|
return loc;
|
|
114
114
|
}
|
|
115
|
-
} catch (
|
|
115
|
+
} catch (_err) {
|
|
116
116
|
// Try next location
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -579,7 +579,7 @@ class LSPClient {
|
|
|
579
579
|
try {
|
|
580
580
|
await this._send('shutdown', null);
|
|
581
581
|
this._notify('exit', null);
|
|
582
|
-
} catch (
|
|
582
|
+
} catch (_err) {
|
|
583
583
|
// Ignore errors during shutdown
|
|
584
584
|
}
|
|
585
585
|
|
|
@@ -686,7 +686,7 @@ async function getTypesForPositions(filePath, positions) {
|
|
|
686
686
|
const key = pos.name || `${pos.line}:${pos.character}`;
|
|
687
687
|
types[key] = extractTypeFromHover(content);
|
|
688
688
|
}
|
|
689
|
-
} catch (
|
|
689
|
+
} catch (_err) {
|
|
690
690
|
// Skip individual errors
|
|
691
691
|
}
|
|
692
692
|
}
|
package/scripts/flow-mcp-docs.js
CHANGED
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
const fs = require('node:fs');
|
|
16
16
|
const path = require('node:path');
|
|
17
17
|
const {
|
|
18
|
-
getConfig,
|
|
18
|
+
getConfig: _getConfig,
|
|
19
19
|
PATHS,
|
|
20
|
-
STATE_DIR,
|
|
21
|
-
colors,
|
|
22
|
-
color,
|
|
20
|
+
STATE_DIR: _STATE_DIR,
|
|
21
|
+
colors: _colors,
|
|
22
|
+
color: _color,
|
|
23
23
|
warn,
|
|
24
24
|
success,
|
|
25
25
|
error,
|
|
26
|
-
readFile,
|
|
26
|
+
readFile: _readFile,
|
|
27
27
|
writeFile,
|
|
28
28
|
fileExists,
|
|
29
29
|
printHeader,
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
* Part of v1.8.0 - Automatic Memory Management
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
const
|
|
20
|
-
const
|
|
19
|
+
const _fs = require('node:fs');
|
|
20
|
+
const _path = require('node:path');
|
|
21
21
|
const memoryDb = require('./flow-memory-db');
|
|
22
|
-
const { getConfig
|
|
22
|
+
const { getConfig } = require('./flow-config-loader');
|
|
23
23
|
const { color } = require('./flow-output');
|
|
24
24
|
|
|
25
25
|
// ============================================================
|
|
@@ -54,7 +54,7 @@ const DEFAULTS = {
|
|
|
54
54
|
// Configuration
|
|
55
55
|
// ============================================================
|
|
56
56
|
|
|
57
|
-
const {
|
|
57
|
+
const { PATHS } = require('./flow-paths');
|
|
58
58
|
const MEMORY_DIR = path.join(PATHS.workflow, 'memory');
|
|
59
59
|
const DB_PATH = path.join(MEMORY_DIR, 'local.db');
|
|
60
60
|
|
|
@@ -69,7 +69,7 @@ try {
|
|
|
69
69
|
const flowUtils = require('./flow-utils');
|
|
70
70
|
safeJsonParseString = flowUtils.safeJsonParseString;
|
|
71
71
|
getConfig = flowUtils.getConfig;
|
|
72
|
-
} catch (
|
|
72
|
+
} catch (_err) {
|
|
73
73
|
// Fallback if flow-utils not available (e.g., in MCP server context)
|
|
74
74
|
safeJsonParseString = null;
|
|
75
75
|
getConfig = null;
|
|
@@ -2326,7 +2326,7 @@ async function generateSectionEmbeddings() {
|
|
|
2326
2326
|
} else {
|
|
2327
2327
|
results.skipped++;
|
|
2328
2328
|
}
|
|
2329
|
-
} catch (
|
|
2329
|
+
} catch (_err) {
|
|
2330
2330
|
results.failed++;
|
|
2331
2331
|
}
|
|
2332
2332
|
}
|
|
@@ -2349,7 +2349,7 @@ function getMemoryLevel() {
|
|
|
2349
2349
|
if (!getConfig) return 'off';
|
|
2350
2350
|
const config = getConfig();
|
|
2351
2351
|
return config.memory?.level || 'off';
|
|
2352
|
-
} catch (
|
|
2352
|
+
} catch (_err) {
|
|
2353
2353
|
return 'off';
|
|
2354
2354
|
}
|
|
2355
2355
|
}
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
const fs = require('node:fs');
|
|
21
|
-
const
|
|
21
|
+
const _path = require('node:path');
|
|
22
22
|
const memoryDb = require('./flow-memory-db');
|
|
23
|
-
const { getConfig
|
|
23
|
+
const { getConfig } = require('./flow-config-loader');
|
|
24
24
|
const { color } = require('./flow-output');
|
|
25
25
|
const { PATHS } = require('./flow-utils');
|
|
26
26
|
|
|
@@ -29,7 +29,7 @@ let _syncDecisionsToRules = null;
|
|
|
29
29
|
function syncDecisionsToRules() {
|
|
30
30
|
if (!_syncDecisionsToRules) {
|
|
31
31
|
_syncDecisionsToRules = require('./flow-rules-sync').syncDecisionsToRules;
|
|
32
|
-
const {
|
|
32
|
+
const { } = require('./flow-utils');
|
|
33
33
|
}
|
|
34
34
|
return _syncDecisionsToRules();
|
|
35
35
|
}
|
package/scripts/flow-metrics.js
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
const fs = require('node:fs');
|
|
20
20
|
const path = require('node:path');
|
|
21
|
-
const {
|
|
22
|
-
const { success
|
|
21
|
+
const { getConfig, PATHS, colors, showHelp: showHelpGeneric, readJson } = require('./flow-utils');
|
|
22
|
+
const { success } = require('./flow-output');
|
|
23
23
|
|
|
24
24
|
const METRICS_PATH = PATHS.commandMetrics;
|
|
25
25
|
|
|
@@ -29,8 +29,8 @@ const fs = require('node:fs');
|
|
|
29
29
|
const path = require('node:path');
|
|
30
30
|
|
|
31
31
|
const { PATHS } = require('./flow-paths');
|
|
32
|
-
const { fileExists,
|
|
33
|
-
const { color, info, success,
|
|
32
|
+
const { fileExists, safeJsonParse } = require('./flow-io');
|
|
33
|
+
const { color, info, success, error } = require('./flow-output');
|
|
34
34
|
|
|
35
35
|
const REQUIRED_INTENT_ARTIFACTS = [
|
|
36
36
|
'product.md',
|
package/scripts/flow-migrate.js
CHANGED
|
@@ -18,12 +18,12 @@ const {
|
|
|
18
18
|
PATHS,
|
|
19
19
|
PROJECT_ROOT,
|
|
20
20
|
WORKFLOW_DIR,
|
|
21
|
-
fileExists,
|
|
21
|
+
fileExists: _fileExists,
|
|
22
22
|
dirExists,
|
|
23
23
|
parseFlags,
|
|
24
24
|
outputJson,
|
|
25
25
|
checkSpecMigration,
|
|
26
|
-
SPEC_FILE_MAP,
|
|
26
|
+
SPEC_FILE_MAP: _SPEC_FILE_MAP,
|
|
27
27
|
getTodayDate
|
|
28
28
|
} = require('./flow-utils')
|
|
29
29
|
const { printHeader, printSection, color, success, warn, error, info } = require('./flow-output');;
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
const fs = require('node:fs');
|
|
29
29
|
const path = require('node:path');
|
|
30
|
-
const {
|
|
30
|
+
const { getConfig, PATHS, colors, readJson, getTodayDate } = require('./flow-utils');
|
|
31
31
|
|
|
32
32
|
const ADAPTERS_DIR = PATHS.modelAdapters;
|
|
33
33
|
const MODEL_STATS_PATH = PATHS.modelStatsLegacy;
|
|
@@ -40,9 +40,9 @@ const MODEL_STATS_PATH = PATHS.modelStatsLegacy;
|
|
|
40
40
|
* Known model patterns for identification
|
|
41
41
|
*/
|
|
42
42
|
const MODEL_PATTERNS = {
|
|
43
|
-
'claude-opus': ['claude-opus', 'opus', 'claude-3-opus', 'claude-opus-4', 'claude-opus-4-5', 'claude-opus-4-6', 'opus-4.5', 'opus-4.6'],
|
|
43
|
+
'claude-opus': ['claude-opus', 'opus', 'claude-3-opus', 'claude-opus-4', 'claude-opus-4-5', 'claude-opus-4-6', 'claude-opus-4-7', 'opus-4.5', 'opus-4.6', 'opus-4.7'],
|
|
44
44
|
'claude-sonnet': ['claude-sonnet', 'sonnet', 'claude-3-sonnet', 'claude-sonnet-4', 'claude-sonnet-4-5', 'claude-sonnet-4-6', 'sonnet-4.5', 'sonnet-4.6'],
|
|
45
|
-
'claude-haiku': ['claude-haiku', 'haiku', 'claude-3-haiku'],
|
|
45
|
+
'claude-haiku': ['claude-haiku', 'haiku', 'claude-3-haiku', 'claude-haiku-4-5', 'haiku-4.5'],
|
|
46
46
|
'gpt-4': ['gpt-4', 'gpt-4-turbo', 'gpt-4o'],
|
|
47
47
|
'gpt-3.5': ['gpt-3.5', 'gpt-3.5-turbo'],
|
|
48
48
|
'ollama-nemotron': ['nemotron', 'nvidia-nemotron'],
|
|
@@ -141,7 +141,7 @@ function getAdapterPath(modelName) {
|
|
|
141
141
|
function safeReadFile(filePath) {
|
|
142
142
|
try {
|
|
143
143
|
return fs.readFileSync(filePath, 'utf-8');
|
|
144
|
-
} catch (
|
|
144
|
+
} catch (_err) {
|
|
145
145
|
// File may have been deleted/moved between existsSync and readFileSync (TOCTOU)
|
|
146
146
|
return null;
|
|
147
147
|
}
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
* const response = await callModel('openai:gpt-4o', prompt);
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
const
|
|
14
|
+
const _path = require('node:path');
|
|
15
15
|
const {
|
|
16
|
-
PATHS,
|
|
16
|
+
PATHS: _PATHS,
|
|
17
17
|
getConfig,
|
|
18
|
-
getConfigValue,
|
|
19
|
-
color,
|
|
20
|
-
warn,
|
|
18
|
+
getConfigValue: _getConfigValue,
|
|
19
|
+
color: _color,
|
|
20
|
+
warn: _warn,
|
|
21
21
|
error
|
|
22
22
|
} = require('./flow-utils');
|
|
23
23
|
|
|
@@ -37,8 +37,8 @@ const PROVIDERS = {
|
|
|
37
37
|
name: 'Anthropic',
|
|
38
38
|
apiBase: 'https://api.anthropic.com/v1',
|
|
39
39
|
envKey: 'ANTHROPIC_API_KEY',
|
|
40
|
-
models: ['claude-opus-4-6', 'claude-sonnet-4-6', 'claude-sonnet-4-5-20250929', 'claude-3-5-haiku-latest', 'claude-3-opus-latest'],
|
|
41
|
-
defaultModel: 'claude-
|
|
40
|
+
models: ['claude-opus-4-7', 'claude-opus-4-6', 'claude-sonnet-4-6', 'claude-sonnet-4-5-20250929', 'claude-haiku-4-5-20251001', 'claude-3-5-haiku-latest', 'claude-3-opus-latest'],
|
|
41
|
+
defaultModel: 'claude-haiku-4-5-20251001'
|
|
42
42
|
},
|
|
43
43
|
google: {
|
|
44
44
|
name: 'Google',
|
|
@@ -352,7 +352,7 @@ function isModelCallingAvailable() {
|
|
|
352
352
|
/**
|
|
353
353
|
* Format manual mode prompt for copy-paste
|
|
354
354
|
*/
|
|
355
|
-
function formatManualPrompt(prompt,
|
|
355
|
+
function formatManualPrompt(prompt, _context) {
|
|
356
356
|
return `
|
|
357
357
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
358
358
|
📋 Copy this prompt to another AI model:
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
const fs = require('node:fs');
|
|
33
33
|
const path = require('node:path');
|
|
34
|
-
const {
|
|
34
|
+
const { safeJsonParse, safeJsonParseString, colors: c, error, success, PATHS } = require('./flow-utils');
|
|
35
35
|
|
|
36
36
|
const CONFIG_PATH = path.join(PATHS.workflow, 'config.json');
|
|
37
37
|
const ENV_PATH = path.join(PATHS.root, '.env');
|
|
@@ -62,8 +62,8 @@ const KNOWN_PROVIDERS = {
|
|
|
62
62
|
envKey: 'ANTHROPIC_API_KEY',
|
|
63
63
|
endpoint: 'https://api.anthropic.com/v1',
|
|
64
64
|
testEndpoint: '/messages',
|
|
65
|
-
models: ['claude-opus-4-6', 'claude-sonnet-4-5-20250929', 'claude-3-5-haiku-20241022', 'claude-opus-4-5-20251101'],
|
|
66
|
-
defaultModel: 'claude-
|
|
65
|
+
models: ['claude-opus-4-7', 'claude-opus-4-6', 'claude-sonnet-4-6', 'claude-sonnet-4-5-20250929', 'claude-haiku-4-5-20251001', 'claude-3-5-haiku-20241022', 'claude-opus-4-5-20251101'],
|
|
66
|
+
defaultModel: 'claude-opus-4-7'
|
|
67
67
|
},
|
|
68
68
|
local: {
|
|
69
69
|
displayName: 'Local LLM',
|
|
@@ -277,7 +277,7 @@ function updateEnvFile(keyName, keyValue) {
|
|
|
277
277
|
|
|
278
278
|
try {
|
|
279
279
|
envContent = fs.readFileSync(ENV_PATH, 'utf-8');
|
|
280
|
-
} catch (
|
|
280
|
+
} catch (_err) {
|
|
281
281
|
if (process.env.DEBUG) {
|
|
282
282
|
console.log(`[model-config] .env doesn't exist, will create`);
|
|
283
283
|
}
|
|
@@ -387,7 +387,7 @@ async function testLocalProvider(endpoint) {
|
|
|
387
387
|
message: `Connected to Ollama. Found ${models.length} models.`,
|
|
388
388
|
models
|
|
389
389
|
});
|
|
390
|
-
} catch (
|
|
390
|
+
} catch (_err) {
|
|
391
391
|
resolve({ success: false, message: 'Invalid response from local LLM' });
|
|
392
392
|
}
|
|
393
393
|
});
|
|
@@ -28,7 +28,7 @@ const fs = require('node:fs');
|
|
|
28
28
|
const path = require('node:path');
|
|
29
29
|
const {
|
|
30
30
|
PATHS,
|
|
31
|
-
PROJECT_ROOT,
|
|
31
|
+
PROJECT_ROOT: _PROJECT_ROOT,
|
|
32
32
|
readFile,
|
|
33
33
|
writeFile,
|
|
34
34
|
fileExists,
|
|
@@ -39,18 +39,18 @@ const {
|
|
|
39
39
|
error,
|
|
40
40
|
parseFlags,
|
|
41
41
|
outputJson,
|
|
42
|
-
safeJsonParse,
|
|
42
|
+
safeJsonParse: _safeJsonParse,
|
|
43
43
|
getTodayDate
|
|
44
44
|
} = require('./flow-utils');
|
|
45
45
|
|
|
46
|
-
const { getSectionsByPins
|
|
46
|
+
const { getSectionsByPins } = require('./flow-section-index');
|
|
47
47
|
|
|
48
48
|
// ============================================================
|
|
49
49
|
// Configuration
|
|
50
50
|
// ============================================================
|
|
51
51
|
|
|
52
52
|
const PROFILES_DIR = path.join(PATHS.state, 'model-profiles');
|
|
53
|
-
const
|
|
53
|
+
const _TEMPLATE_PATH = path.join(PROFILES_DIR, '_template.md');
|
|
54
54
|
|
|
55
55
|
// Default profile settings
|
|
56
56
|
const DEFAULT_SETTINGS = {
|
|
@@ -297,7 +297,7 @@ function getModelProfile(modelId, taskType = null) {
|
|
|
297
297
|
if (Array.isArray(sections)) {
|
|
298
298
|
profile._pinSections = sections.filter(s => s && typeof s === 'object');
|
|
299
299
|
}
|
|
300
|
-
} catch (
|
|
300
|
+
} catch (_err) {
|
|
301
301
|
// PIN lookup optional, continue without it
|
|
302
302
|
}
|
|
303
303
|
}
|
|
@@ -539,7 +539,7 @@ function getInstructionRichness(modelId, taskType, tokenBudget = 8192) {
|
|
|
539
539
|
* @param {string} taskDescription - Task description for additional matching
|
|
540
540
|
* @returns {Object} - Context recommendation
|
|
541
541
|
*/
|
|
542
|
-
function getContextRecommendation(modelId, taskType,
|
|
542
|
+
function getContextRecommendation(modelId, taskType, _taskDescription = '') {
|
|
543
543
|
const richness = getInstructionRichness(modelId, taskType);
|
|
544
544
|
|
|
545
545
|
const recommendation = {
|
|
@@ -591,7 +591,7 @@ function getContextRecommendation(modelId, taskType, taskDescription = '') {
|
|
|
591
591
|
// Try to load sections by PIN
|
|
592
592
|
try {
|
|
593
593
|
recommendation.sections = getSectionsByPins(recommendation.pins);
|
|
594
|
-
} catch (
|
|
594
|
+
} catch (_err) {
|
|
595
595
|
// PIN lookup optional
|
|
596
596
|
}
|
|
597
597
|
|
|
@@ -18,15 +18,15 @@
|
|
|
18
18
|
|
|
19
19
|
const path = require('node:path');
|
|
20
20
|
const {
|
|
21
|
-
PROJECT_ROOT,
|
|
21
|
+
PROJECT_ROOT: _PROJECT_ROOT,
|
|
22
22
|
parseFlags,
|
|
23
23
|
outputJson,
|
|
24
24
|
color,
|
|
25
|
-
info,
|
|
25
|
+
info: _info,
|
|
26
26
|
warn,
|
|
27
27
|
error,
|
|
28
28
|
safeJsonParse,
|
|
29
|
-
getConfig,
|
|
29
|
+
getConfig: _getConfig,
|
|
30
30
|
printHeader,
|
|
31
31
|
printSection,
|
|
32
32
|
estimateTokens, PATHS
|
|
@@ -42,7 +42,7 @@ let instructionRichness = null;
|
|
|
42
42
|
try {
|
|
43
43
|
contextGatherer = require('./flow-context-gatherer');
|
|
44
44
|
instructionRichness = require('./flow-instruction-richness');
|
|
45
|
-
} catch (
|
|
45
|
+
} catch (_err) {
|
|
46
46
|
// Smart Context modules not available
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -1126,7 +1126,7 @@ module.exports = {
|
|
|
1126
1126
|
getAgentModel: (() => {
|
|
1127
1127
|
try {
|
|
1128
1128
|
return require('./flow-prompt-template').getAgentModel;
|
|
1129
|
-
} catch (
|
|
1129
|
+
} catch (_err) {
|
|
1130
1130
|
// Fallback if prompt template module not available
|
|
1131
1131
|
return () => 'sonnet';
|
|
1132
1132
|
}
|
|
@@ -54,7 +54,7 @@ function clearCapabilitiesCache() {
|
|
|
54
54
|
/**
|
|
55
55
|
* Load a single capability file for a model.
|
|
56
56
|
* Exported as public API for plugin/extension use.
|
|
57
|
-
* @param {string} modelKey - Model key (e.g., "claude-opus-4-
|
|
57
|
+
* @param {string} modelKey - Model key (e.g., "claude-opus-4-7")
|
|
58
58
|
* @returns {Object|null} Capability data or null if not found
|
|
59
59
|
*/
|
|
60
60
|
function loadCapability(modelKey) {
|
|
@@ -92,7 +92,7 @@ function loadAllCapabilities() {
|
|
|
92
92
|
try {
|
|
93
93
|
const stat = fs.lstatSync(path.join(CAPABILITIES_DIR, entry));
|
|
94
94
|
if (!stat.isFile()) continue;
|
|
95
|
-
} catch (
|
|
95
|
+
} catch (_err) {
|
|
96
96
|
continue;
|
|
97
97
|
}
|
|
98
98
|
const modelKey = entry.replace(/\.json$/, '');
|
|
@@ -101,7 +101,7 @@ function loadAllCapabilities() {
|
|
|
101
101
|
capabilities[modelKey] = capData;
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
} catch (
|
|
104
|
+
} catch (_err) {
|
|
105
105
|
warn(`Failed to read capabilities directory`);
|
|
106
106
|
}
|
|
107
107
|
|
package/scripts/flow-models.js
CHANGED
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
* flow models providers List available providers
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
const
|
|
21
|
+
const _fs = require('node:fs');
|
|
22
|
+
const _path = require('node:path');
|
|
23
23
|
const {
|
|
24
|
-
PROJECT_ROOT,
|
|
24
|
+
PROJECT_ROOT: _PROJECT_ROOT,
|
|
25
25
|
parseFlags,
|
|
26
26
|
outputJson,
|
|
27
27
|
color,
|
|
@@ -30,8 +30,8 @@ const {
|
|
|
30
30
|
warn,
|
|
31
31
|
getConfig,
|
|
32
32
|
fileExists,
|
|
33
|
-
dirExists,
|
|
34
|
-
safeJsonParse,
|
|
33
|
+
dirExists: _dirExists,
|
|
34
|
+
safeJsonParse: _safeJsonParse,
|
|
35
35
|
printHeader,
|
|
36
36
|
printSection,
|
|
37
37
|
showHelp: showHelpGeneric
|
|
@@ -39,9 +39,9 @@ const {
|
|
|
39
39
|
|
|
40
40
|
// Shared model registry/stats (extracted to break circular dep)
|
|
41
41
|
const {
|
|
42
|
-
MODELS_DIR,
|
|
42
|
+
MODELS_DIR: _MODELS_DIR,
|
|
43
43
|
REGISTRY_PATH,
|
|
44
|
-
STATS_PATH,
|
|
44
|
+
STATS_PATH: _STATS_PATH,
|
|
45
45
|
loadRegistry,
|
|
46
46
|
loadStats,
|
|
47
47
|
saveStats
|
|
@@ -506,7 +506,7 @@ function recordTaskExecution(modelId, taskData) {
|
|
|
506
506
|
/**
|
|
507
507
|
* Get cost analysis
|
|
508
508
|
*/
|
|
509
|
-
function getCostAnalysis(
|
|
509
|
+
function getCostAnalysis(_options = {}) {
|
|
510
510
|
const stats = loadStats();
|
|
511
511
|
const registry = loadRegistry();
|
|
512
512
|
|
package/scripts/flow-morning.js
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
const fs = require('node:fs');
|
|
29
29
|
const path = require('node:path');
|
|
30
|
-
const {
|
|
30
|
+
const { getConfig, PATHS, colors, writeJson, ensureDir, readJson, safeJsonParse } = require('./flow-utils');
|
|
31
31
|
const { success, error: errorMsg } = require('./flow-output');
|
|
32
32
|
|
|
33
33
|
const APPROACHES_DIR = path.join(PATHS.state, 'approaches');
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
const fs = require('node:fs');
|
|
17
17
|
const path = require('node:path');
|
|
18
|
-
const {
|
|
18
|
+
const { colors, getConfig, PATHS } = require('./flow-utils');
|
|
19
19
|
const {
|
|
20
20
|
buildExportMap,
|
|
21
21
|
loadCachedExportMap,
|
|
@@ -308,7 +308,7 @@ class ProjectContextGenerator {
|
|
|
308
308
|
};
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
|
-
} catch (
|
|
311
|
+
} catch (_err) {
|
|
312
312
|
// Ignore scan errors
|
|
313
313
|
}
|
|
314
314
|
|