@causyne/agent 0.0.0-stage ā 1.10.1
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/LICENSE +102 -0
- package/README.md +31 -2
- package/SECURITY.md +24 -0
- package/bin/causyne.js +13 -0
- package/docs/ARCHITECTURE.md +63 -0
- package/docs/PROVENANCE.md +29 -0
- package/docs/SECURITY_REVIEW.md +89 -0
- package/docs/THIRD_PARTY_NOTICES.md +49 -0
- package/native-skills/ai-engineering/context-window-management/SKILL.md +43 -0
- package/native-skills/ai-engineering/llm-evaluation/SKILL.md +46 -0
- package/native-skills/ai-engineering/model-cost-and-latency/SKILL.md +46 -0
- package/native-skills/ai-engineering/prompt-construction/SKILL.md +42 -0
- package/native-skills/ai-engineering/retrieval-augmented-generation/SKILL.md +42 -0
- package/native-skills/ai-engineering/structured-output-and-schemas/SKILL.md +45 -0
- package/native-skills/ai-engineering/tool-calling-agents/SKILL.md +43 -0
- package/native-skills/android/app-performance-profiling/SKILL.md +42 -0
- package/native-skills/android/background-work-scheduling/SKILL.md +47 -0
- package/native-skills/android/compose-state-and-recomposition/SKILL.md +43 -0
- package/native-skills/android/gradle-build-configuration/SKILL.md +41 -0
- package/native-skills/android/lifecycle-and-leaks/SKILL.md +46 -0
- package/native-skills/android/play-store-release/SKILL.md +43 -0
- package/native-skills/android/room-and-persistence/SKILL.md +40 -0
- package/native-skills/backend/authentication-and-sessions/SKILL.md +45 -0
- package/native-skills/backend/background-jobs-and-queues/SKILL.md +42 -0
- package/native-skills/backend/caching-strategy/SKILL.md +44 -0
- package/native-skills/backend/graceful-shutdown/SKILL.md +42 -0
- package/native-skills/backend/rate-limiting-and-quotas/SKILL.md +40 -0
- package/native-skills/backend/rest-api-design/SKILL.md +40 -0
- package/native-skills/backend/webhook-delivery-and-receipt/SKILL.md +43 -0
- package/native-skills/cloud/cost-optimisation/SKILL.md +46 -0
- package/native-skills/cloud/iam-least-privilege/SKILL.md +43 -0
- package/native-skills/cloud/infrastructure-as-code/SKILL.md +43 -0
- package/native-skills/cloud/multi-region-and-failover/SKILL.md +43 -0
- package/native-skills/cloud/serverless-patterns/SKILL.md +47 -0
- package/native-skills/data/data-quality-monitoring/SKILL.md +51 -0
- package/native-skills/data/etl-pipeline-reliability/SKILL.md +43 -0
- package/native-skills/data/exploratory-analysis/SKILL.md +43 -0
- package/native-skills/data/metric-definition/SKILL.md +42 -0
- package/native-skills/data/notebook-to-production/SKILL.md +43 -0
- package/native-skills/database/backup-and-recovery/SKILL.md +43 -0
- package/native-skills/database/connection-pooling/SKILL.md +42 -0
- package/native-skills/database/data-integrity-and-constraints/SKILL.md +42 -0
- package/native-skills/database/query-optimisation/SKILL.md +38 -0
- package/native-skills/database/safe-migrations/SKILL.md +47 -0
- package/native-skills/database/schema-design/SKILL.md +38 -0
- package/native-skills/database/transactions-and-isolation/SKILL.md +41 -0
- package/native-skills/design/colour-system-construction/SKILL.md +38 -0
- package/native-skills/design/design-direction-brief/SKILL.md +41 -0
- package/native-skills/design/motion-and-transitions/SKILL.md +38 -0
- package/native-skills/design/responsive-strategy/SKILL.md +39 -0
- package/native-skills/design/spacing-and-rhythm/SKILL.md +38 -0
- package/native-skills/design/type-scale-and-hierarchy/SKILL.md +39 -0
- package/native-skills/design/visual-qa-loop/SKILL.md +42 -0
- package/native-skills/devops/docker-multi-stage-builds/SKILL.md +60 -0
- package/native-skills/devops/github-actions-ci/SKILL.md +60 -0
- package/native-skills/devops/incident-triage/SKILL.md +38 -0
- package/native-skills/devops/kubernetes-deployment-hardening/SKILL.md +64 -0
- package/native-skills/devops/observability-baseline/SKILL.md +38 -0
- package/native-skills/devops/secret-management/SKILL.md +40 -0
- package/native-skills/devops/terraform-state-and-modules/SKILL.md +36 -0
- package/native-skills/devops/zero-downtime-deploys/SKILL.md +40 -0
- package/native-skills/git/bisect-regression-hunt/SKILL.md +43 -0
- package/native-skills/git/branch-strategy/SKILL.md +39 -0
- package/native-skills/git/commit-hygiene/SKILL.md +41 -0
- package/native-skills/git/history-recovery/SKILL.md +44 -0
- package/native-skills/git/large-repository-surgery/SKILL.md +46 -0
- package/native-skills/git/merge-conflict-resolution/SKILL.md +42 -0
- package/native-skills/media/cinematic-3d-shot/SKILL.md +104 -0
- package/native-skills/mobile/app-startup-optimisation/SKILL.md +41 -0
- package/native-skills/mobile/cross-platform-tradeoffs/SKILL.md +42 -0
- package/native-skills/mobile/deep-linking/SKILL.md +39 -0
- package/native-skills/mobile/mobile-storage-security/SKILL.md +45 -0
- package/native-skills/mobile/offline-first-sync/SKILL.md +42 -0
- package/native-skills/mobile/push-notifications/SKILL.md +38 -0
- package/native-skills/performance/algorithmic-complexity/SKILL.md +43 -0
- package/native-skills/performance/concurrency-and-parallelism/SKILL.md +42 -0
- package/native-skills/performance/load-testing/SKILL.md +42 -0
- package/native-skills/performance/memory-and-leak-hunting/SKILL.md +41 -0
- package/native-skills/performance/network-and-payload-efficiency/SKILL.md +42 -0
- package/native-skills/performance/profiling-methodology/SKILL.md +46 -0
- package/native-skills/python/async-correctness/SKILL.md +40 -0
- package/native-skills/python/cli-tool-construction/SKILL.md +44 -0
- package/native-skills/python/data-processing-pipelines/SKILL.md +38 -0
- package/native-skills/python/environment-isolation/SKILL.md +41 -0
- package/native-skills/python/packaging-and-distribution/SKILL.md +56 -0
- package/native-skills/python/pytest-suite-design/SKILL.md +39 -0
- package/native-skills/python/type-hints-and-static-checking/SKILL.md +42 -0
- package/native-skills/security/authorization-model/SKILL.md +42 -0
- package/native-skills/security/crypto-usage/SKILL.md +48 -0
- package/native-skills/security/dependency-supply-chain/SKILL.md +42 -0
- package/native-skills/security/input-validation-and-injection/SKILL.md +44 -0
- package/native-skills/security/secure-file-uploads/SKILL.md +46 -0
- package/native-skills/security/security-headers-and-csp/SKILL.md +44 -0
- package/native-skills/security/threat-modelling/SKILL.md +46 -0
- package/native-skills/testing/end-to-end-test-stability/SKILL.md +42 -0
- package/native-skills/testing/property-based-testing/SKILL.md +46 -0
- package/native-skills/testing/regression-test-from-a-bug/SKILL.md +41 -0
- package/native-skills/testing/snapshot-and-visual-regression/SKILL.md +42 -0
- package/native-skills/testing/test-doubles-and-mocking/SKILL.md +43 -0
- package/native-skills/testing/test-strategy-and-pyramid/SKILL.md +39 -0
- package/native-skills/testing/writing-good-assertions/SKILL.md +42 -0
- package/native-skills/web/accessible-components/SKILL.md +45 -0
- package/native-skills/web/api-client-resilience/SKILL.md +39 -0
- package/native-skills/web/bundle-size-reduction/SKILL.md +38 -0
- package/native-skills/web/core-web-vitals/SKILL.md +40 -0
- package/native-skills/web/css-layout-systems/SKILL.md +41 -0
- package/native-skills/web/form-validation-ux/SKILL.md +39 -0
- package/native-skills/web/react-state-architecture/SKILL.md +41 -0
- package/native-skills/web/ssr-hydration-correctness/SKILL.md +45 -0
- package/package.json +68 -4
- package/src/agentLoop.js +2458 -0
- package/src/appChannel.js +109 -0
- package/src/approvalGrants.js +66 -0
- package/src/auditLog.js +52 -0
- package/src/autoUpdate.js +12 -0
- package/src/capabilities.js +36 -0
- package/src/checkpoints.js +1199 -0
- package/src/cliMode.js +638 -0
- package/src/commands.js +805 -0
- package/src/compiledSkills.js +540 -0
- package/src/config.js +130 -0
- package/src/contextManager.js +498 -0
- package/src/cortex/autoCondenser.js +192 -0
- package/src/cortex/provisioner.js +27 -0
- package/src/cortex/vectorDb.js +447 -0
- package/src/designPalettes.js +99 -0
- package/src/devMode.js +6 -0
- package/src/embodimentSession.js +180 -0
- package/src/entrypoint.js +194 -0
- package/src/execSafe.js +21 -0
- package/src/gitSnapshot.js +378 -0
- package/src/mcp/jsonRpc.js +165 -0
- package/src/mcp/mcpClient.js +136 -0
- package/src/mcp/mcpRegistry.js +207 -0
- package/src/memory.js +62 -0
- package/src/memoryManager.js +124 -0
- package/src/modelCatalogue.js +132 -0
- package/src/modelIds.js +42 -0
- package/src/modelRouter.js +145 -0
- package/src/outputStore.js +246 -0
- package/src/perception.js +124 -0
- package/src/planCache.js +437 -0
- package/src/procSignal.js +32 -0
- package/src/providers/anthropic.js +408 -0
- package/src/providers/base.js +328 -0
- package/src/providers/dashscope-byok.js +86 -0
- package/src/providers/deepseek.js +80 -0
- package/src/providers/factory.js +37 -0
- package/src/providers/gemini.js +346 -0
- package/src/providers/moonshot.js +73 -0
- package/src/providers/muse.js +169 -0
- package/src/providers/ollama.js +104 -0
- package/src/providers/openai-compatible.js +84 -0
- package/src/providers/openai.js +20 -0
- package/src/providers/qwen-byok.js +76 -0
- package/src/providers/xai.js +73 -0
- package/src/provisioning/capabilityConsent.js +24 -0
- package/src/provisioning/capabilityProvisioner.js +271 -0
- package/src/provisioning/capabilityTools.js +29 -0
- package/src/reporting.js +373 -0
- package/src/sandbox.js +529 -0
- package/src/sessionStore.js +279 -0
- package/src/skillsManager.js +288 -0
- package/src/slopDetector.js +307 -0
- package/src/taskBuffer.js +45 -0
- package/src/taskShape.js +241 -0
- package/src/textDiff.js +150 -0
- package/src/tokenTracker.js +560 -0
- package/src/tool-scripts/ax_snapshot.applescript +39 -0
- package/src/tool-scripts/ax_snapshot.ps1 +10 -0
- package/src/tool-scripts/desktop_act.applescript +58 -0
- package/src/tool-scripts/resolve_automator.py +119 -0
- package/src/toolPacks.js +524 -0
- package/src/tools/archive.js +63 -0
- package/src/tools/astryxOracle.js +78 -0
- package/src/tools/axSnapshot.js +165 -0
- package/src/tools/blenderAutomator.js +349 -0
- package/src/tools/browserAutomator.js +252 -0
- package/src/tools/checkSystemSpecs.js +64 -0
- package/src/tools/clipboard.js +36 -0
- package/src/tools/codeSearchAst.js +101 -0
- package/src/tools/codeSearcher.js +230 -0
- package/src/tools/codeTools.js +262 -0
- package/src/tools/codebaseSearch.js +75 -0
- package/src/tools/createSkill.js +129 -0
- package/src/tools/deferredMcpSearch.js +246 -0
- package/src/tools/desktopAct.js +208 -0
- package/src/tools/desktopOpen.js +34 -0
- package/src/tools/dynamicLoader.js +44 -0
- package/src/tools/executeProceduralMedia.js +93 -0
- package/src/tools/fsDelete.js +51 -0
- package/src/tools/fsEdit.js +105 -0
- package/src/tools/fsFind.js +128 -0
- package/src/tools/fsList.js +77 -0
- package/src/tools/fsMove.js +57 -0
- package/src/tools/fsRead.js +87 -0
- package/src/tools/fsSearch.js +198 -0
- package/src/tools/fsWrite.js +41 -0
- package/src/tools/gameAiBehaviorTree.js +208 -0
- package/src/tools/gameAnimationRig.js +194 -0
- package/src/tools/gameAssetFetcher.js +372 -0
- package/src/tools/gameAssetHarvester.js +210 -0
- package/src/tools/gameAudioSynth.js +267 -0
- package/src/tools/gameBuilder.js +886 -0
- package/src/tools/gameCanvasAudit.js +101 -0
- package/src/tools/gameCinematicSequencer.js +151 -0
- package/src/tools/gameDataForge.js +124 -0
- package/src/tools/gameDialogueTreeGen.js +166 -0
- package/src/tools/gameEconomyBalancer.js +161 -0
- package/src/tools/gameEntitySpawner.js +207 -0
- package/src/tools/gameLoreForge.js +153 -0
- package/src/tools/gameQuestArcBuilder.js +152 -0
- package/src/tools/gameSceneBuilder.js +158 -0
- package/src/tools/gameShaderForge.js +181 -0
- package/src/tools/gameTilemapGenerator.js +164 -0
- package/src/tools/gameUiHudBuilder.js +292 -0
- package/src/tools/gameVfxEmitterGen.js +108 -0
- package/src/tools/gameWebRuntimeInspector.js +91 -0
- package/src/tools/generateMediaViaApi.js +358 -0
- package/src/tools/gitExec.js +54 -0
- package/src/tools/godotAutomator.js +437 -0
- package/src/tools/manageLocalAiDependencies.js +220 -0
- package/src/tools/memoryWrite.js +99 -0
- package/src/tools/multiEdit.js +107 -0
- package/src/tools/palmierAutomator.js +104 -0
- package/src/tools/pdfReader.js +112 -0
- package/src/tools/persistentShell.js +148 -0
- package/src/tools/printer.js +316 -0
- package/src/tools/procTerm.js +91 -0
- package/src/tools/processList.js +52 -0
- package/src/tools/readNativeSkill.js +39 -0
- package/src/tools/registry.js +277 -0
- package/src/tools/resolveAutomator.js +102 -0
- package/src/tools/screenshot.js +75 -0
- package/src/tools/subagentOrchestrator.js +305 -0
- package/src/tools/sysRun.js +125 -0
- package/src/tools/todoWrite.js +75 -0
- package/src/tools/toolDispatch.js +127 -0
- package/src/tools/toolForge.js +124 -0
- package/src/tools/updatePlan.js +88 -0
- package/src/tools/viewImage.js +82 -0
- package/src/tools/visionInspector.js +154 -0
- package/src/tools/webFetch.js +74 -0
- package/src/tools/webSearch.js +82 -0
- package/src/tui/ask.js +164 -0
- package/src/tui/banner.js +158 -0
- package/src/tui/block.js +152 -0
- package/src/tui/chatRenderer.js +953 -0
- package/src/tui/completion.js +424 -0
- package/src/tui/dialogs.js +606 -0
- package/src/tui/diff.js +296 -0
- package/src/tui/history.js +135 -0
- package/src/tui/home.js +217 -0
- package/src/tui/invocation.js +105 -0
- package/src/tui/keys.js +443 -0
- package/src/tui/lineEditor.js +256 -0
- package/src/tui/overlay.js +256 -0
- package/src/tui/prompt.js +1258 -0
- package/src/tui/selectList.js +335 -0
- package/src/tui/stage.js +330 -0
- package/src/tui/stageSurface.js +609 -0
- package/src/tui/statusLine.js +254 -0
- package/src/tui/text.js +345 -0
- package/src/tui/theme.js +393 -0
- package/src/tui/toolDisplay.js +176 -0
- package/src/tui/transcript.js +235 -0
- package/src/tui/viewport.js +337 -0
- package/src/uncertainty.js +271 -0
- package/src/userSkills.js +265 -0
- package/src/utils/cli_ui.js +0 -0
- package/src/utils/inquirer.js +12 -0
- package/src/utils/paths.js +37 -0
- package/src/version.js +38 -0
- package/src/vfeTracker.js +220 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file vfeTracker.js
|
|
3
|
+
* Variational Free Energy (VFE) Tracker & Active Inference Plateau Detector.
|
|
4
|
+
*
|
|
5
|
+
* Implements Active Inference principles (Friston et al. / Research Section D):
|
|
6
|
+
* In language-mediated active inference, VFE represents the prediction error
|
|
7
|
+
* between the agent's expected environmental state transitions and actual
|
|
8
|
+
* tool execution outcomes.
|
|
9
|
+
*
|
|
10
|
+
* Detection Rule (Research Section D5):
|
|
11
|
+
* When Var(VFE_recent) < VARIANCE_EPSILON and Mean(VFE_recent) > MEAN_ERROR_THRESHOLD
|
|
12
|
+
* over a sliding window (N=10), the agent has converged onto a flat error plateau
|
|
13
|
+
* (a local minimum). Retrying local step variations will waste tokens. Instead,
|
|
14
|
+
* the agent must execute a PARADIGM SHIFT: re-evaluate underlying assumptions,
|
|
15
|
+
* invalidate the current operational hypothesis, and select a fundamentally
|
|
16
|
+
* different route.
|
|
17
|
+
*
|
|
18
|
+
* Zero LLM calls. Computed purely from execution signals already tracked.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { failureClass } from './planCache.js';
|
|
22
|
+
|
|
23
|
+
/** Window size for rolling VFE metrics (default N=10 steps). */
|
|
24
|
+
export const VFE_WINDOW_SIZE = 10;
|
|
25
|
+
|
|
26
|
+
/** Minimum observations needed before plateau detection can trigger. */
|
|
27
|
+
export const MIN_SAMPLES_FOR_PLATEAU = 4;
|
|
28
|
+
|
|
29
|
+
/** Upper bound on variance to qualify as a "plateau" (stuck with no progress). */
|
|
30
|
+
export const VARIANCE_EPSILON = 0.01;
|
|
31
|
+
|
|
32
|
+
/** Lower bound on mean error to qualify as high-error plateau. */
|
|
33
|
+
export const MEAN_ERROR_THRESHOLD = 0.50;
|
|
34
|
+
|
|
35
|
+
/** Minimum step interval between paradigm shift triggers to prevent spamming. */
|
|
36
|
+
export const SHIFT_COOLDOWN_STEPS = 5;
|
|
37
|
+
|
|
38
|
+
/** Hard route-breaking failure categories from uncertainty taxonomy. */
|
|
39
|
+
const ROUTE_BREAKING_FAILURES = new Set(['not_found', 'permission', 'syntax', 'invalid_args']);
|
|
40
|
+
|
|
41
|
+
export class VFETracker {
|
|
42
|
+
/**
|
|
43
|
+
* @param {Object} [options]
|
|
44
|
+
* @param {number} [options.windowSize=10]
|
|
45
|
+
* @param {number} [options.varianceEpsilon=0.01]
|
|
46
|
+
* @param {number} [options.meanThreshold=0.50]
|
|
47
|
+
*/
|
|
48
|
+
constructor(options = {}) {
|
|
49
|
+
this.windowSize = options.windowSize || VFE_WINDOW_SIZE;
|
|
50
|
+
this.varianceEpsilon = options.varianceEpsilon || VARIANCE_EPSILON;
|
|
51
|
+
this.meanThreshold = options.meanThreshold || MEAN_ERROR_THRESHOLD;
|
|
52
|
+
|
|
53
|
+
/** @type {Array<{ step: number, vfe: number, tool: string, success: boolean }>} */
|
|
54
|
+
this.history = [];
|
|
55
|
+
this.lastShiftStep = -SHIFT_COOLDOWN_STEPS;
|
|
56
|
+
this.totalSteps = 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Reset tracker state for a fresh task.
|
|
61
|
+
*/
|
|
62
|
+
reset() {
|
|
63
|
+
this.history = [];
|
|
64
|
+
this.lastShiftStep = -SHIFT_COOLDOWN_STEPS;
|
|
65
|
+
this.totalSteps = 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Compute the VFE (prediction error proxy) for a single tool execution step.
|
|
70
|
+
*
|
|
71
|
+
* @param {Object} stepData
|
|
72
|
+
* @param {boolean} stepData.success
|
|
73
|
+
* @param {Object} [stepData.result]
|
|
74
|
+
* @param {number} [stepData.consecutiveFailures=0]
|
|
75
|
+
* @param {boolean} [stepData.isThrashing=false]
|
|
76
|
+
* @returns {number} VFE score in [0.0, 1.0]
|
|
77
|
+
*/
|
|
78
|
+
computeStepVFE({ success, result, consecutiveFailures = 0, isThrashing = false }) {
|
|
79
|
+
if (success) {
|
|
80
|
+
// Nominal observation matches expected state: minimal free energy
|
|
81
|
+
return 0.05;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Base prediction error for an unexpected negative outcome
|
|
85
|
+
let vfe = 0.65;
|
|
86
|
+
|
|
87
|
+
// Consecutive repetitions of failure increase prediction mismatch
|
|
88
|
+
if (consecutiveFailures > 1) {
|
|
89
|
+
vfe += Math.min(0.20, (consecutiveFailures - 1) * 0.10);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Hard route errors (missing file, invalid syntax) mean mental model is wrong
|
|
93
|
+
if (result) {
|
|
94
|
+
const fClass = failureClass(result);
|
|
95
|
+
if (fClass && ROUTE_BREAKING_FAILURES.has(fClass)) {
|
|
96
|
+
vfe += 0.15;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Thrashing tool calls mean cyclic un-converging belief state
|
|
101
|
+
if (isThrashing) {
|
|
102
|
+
vfe += 0.15;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return Math.min(1.0, Math.max(0.0, vfe));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Record a completed tool step and compute rolling window statistics.
|
|
110
|
+
*
|
|
111
|
+
* @param {Object} params
|
|
112
|
+
* @param {string} params.tool
|
|
113
|
+
* @param {boolean} params.success
|
|
114
|
+
* @param {Object} [params.result]
|
|
115
|
+
* @param {number} [params.consecutiveFailures=0]
|
|
116
|
+
* @param {boolean} [params.isThrashing=false]
|
|
117
|
+
* @returns {{
|
|
118
|
+
* vfe: number,
|
|
119
|
+
* mean: number,
|
|
120
|
+
* variance: number,
|
|
121
|
+
* isPlateau: boolean,
|
|
122
|
+
* paradigmShift: boolean
|
|
123
|
+
* }}
|
|
124
|
+
*/
|
|
125
|
+
recordStep({ tool, success, result, consecutiveFailures = 0, isThrashing = false }) {
|
|
126
|
+
this.totalSteps += 1;
|
|
127
|
+
const currentStep = this.totalSteps;
|
|
128
|
+
|
|
129
|
+
const vfe = this.computeStepVFE({ success, result, consecutiveFailures, isThrashing });
|
|
130
|
+
|
|
131
|
+
this.history.push({ step: currentStep, vfe, tool, success });
|
|
132
|
+
if (this.history.length > this.windowSize) {
|
|
133
|
+
this.history.shift();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const stats = this.computeWindowStats();
|
|
137
|
+
const isPlateau = (
|
|
138
|
+
this.history.length >= MIN_SAMPLES_FOR_PLATEAU &&
|
|
139
|
+
stats.mean >= this.meanThreshold &&
|
|
140
|
+
stats.variance <= this.varianceEpsilon
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
const canShift = (currentStep - this.lastShiftStep) >= SHIFT_COOLDOWN_STEPS;
|
|
144
|
+
const paradigmShift = isPlateau && canShift;
|
|
145
|
+
|
|
146
|
+
if (paradigmShift) {
|
|
147
|
+
this.lastShiftStep = currentStep;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
vfe,
|
|
152
|
+
mean: stats.mean,
|
|
153
|
+
variance: stats.variance,
|
|
154
|
+
isPlateau,
|
|
155
|
+
paradigmShift
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Calculate mean and sample variance over the current sliding window.
|
|
161
|
+
* @returns {{ mean: number, variance: number, count: number }}
|
|
162
|
+
*/
|
|
163
|
+
computeWindowStats() {
|
|
164
|
+
const n = this.history.length;
|
|
165
|
+
if (n === 0) return { mean: 0, variance: 0, count: 0 };
|
|
166
|
+
if (n === 1) return { mean: this.history[0].vfe, variance: 0, count: 1 };
|
|
167
|
+
|
|
168
|
+
const sum = this.history.reduce((acc, item) => acc + item.vfe, 0);
|
|
169
|
+
const mean = sum / n;
|
|
170
|
+
|
|
171
|
+
const sumSqDiff = this.history.reduce((acc, item) => {
|
|
172
|
+
const diff = item.vfe - mean;
|
|
173
|
+
return acc + (diff * diff);
|
|
174
|
+
}, 0);
|
|
175
|
+
|
|
176
|
+
const variance = sumSqDiff / (n - 1);
|
|
177
|
+
|
|
178
|
+
return {
|
|
179
|
+
mean: Number(mean.toFixed(4)),
|
|
180
|
+
variance: Number(variance.toFixed(6)),
|
|
181
|
+
count: n
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Get the current status for telemetry or debugging.
|
|
187
|
+
*/
|
|
188
|
+
getStatus() {
|
|
189
|
+
const stats = this.computeWindowStats();
|
|
190
|
+
const isPlateau = (
|
|
191
|
+
this.history.length >= MIN_SAMPLES_FOR_PLATEAU &&
|
|
192
|
+
stats.mean >= this.meanThreshold &&
|
|
193
|
+
stats.variance <= this.varianceEpsilon
|
|
194
|
+
);
|
|
195
|
+
return {
|
|
196
|
+
totalSteps: this.totalSteps,
|
|
197
|
+
windowCount: this.history.length,
|
|
198
|
+
mean: stats.mean,
|
|
199
|
+
variance: stats.variance,
|
|
200
|
+
isPlateau
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Format the high-priority paradigm shift prompt directive.
|
|
206
|
+
*
|
|
207
|
+
* @returns {string}
|
|
208
|
+
*/
|
|
209
|
+
getParadigmShiftDirective() {
|
|
210
|
+
return (
|
|
211
|
+
`\n\nšØ [PARADIGM SHIFT REQUIRED ā ACTIVE INFERENCE DEADLOCK DETECTED]\n` +
|
|
212
|
+
`Variational Free Energy tracking detected a persistent error plateau with zero convergence.\n` +
|
|
213
|
+
`Your current mental model and execution route are trapped in a local minimum.\n` +
|
|
214
|
+
`DO NOT retry previous variations, tweak parameters, or repeat failed commands.\n` +
|
|
215
|
+
`1. Explicitly identify which core assumption failed.\n` +
|
|
216
|
+
`2. State your revised hypothesis about the environment/codebase.\n` +
|
|
217
|
+
`3. Choose a fundamentally different tool, strategy, or alternative path.\n`
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
}
|