loopforge 1.15.1 → 2.0.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/README.md +172 -95
- package/dist/backends/interface.d.ts +3 -9
- package/dist/backends/interface.d.ts.map +1 -1
- package/dist/backends/interface.js +1 -5
- package/dist/backends/interface.js.map +1 -1
- package/dist/canonical-state.d.ts +53 -0
- package/dist/canonical-state.d.ts.map +1 -0
- package/dist/canonical-state.js +161 -0
- package/dist/canonical-state.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +227 -0
- package/dist/cli.js.map +1 -0
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +28 -10
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +7 -4
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +78 -138
- package/dist/engine.js.map +1 -1
- package/dist/evidence-provider.d.ts +113 -0
- package/dist/evidence-provider.d.ts.map +1 -0
- package/dist/evidence-provider.js +419 -0
- package/dist/evidence-provider.js.map +1 -0
- package/dist/index.d.ts +18 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -9
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +15 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +49 -0
- package/dist/init.js.map +1 -0
- package/dist/interop.d.ts +30 -0
- package/dist/interop.d.ts.map +1 -0
- package/dist/interop.js +29 -0
- package/dist/interop.js.map +1 -0
- package/dist/loop-compiler.d.ts +14 -64
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +303 -2206
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-store.d.ts +82 -0
- package/dist/loop-store.d.ts.map +1 -0
- package/dist/loop-store.js +332 -0
- package/dist/loop-store.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -6
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +109 -73
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +75 -19
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +707 -361
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +18 -268
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +225 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/observability.d.ts +36 -16
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +82 -23
- package/dist/observability.js.map +1 -1
- package/dist/policy-metrics.d.ts +46 -0
- package/dist/policy-metrics.d.ts.map +1 -0
- package/dist/policy-metrics.js +146 -0
- package/dist/policy-metrics.js.map +1 -0
- package/dist/policy.d.ts +53 -140
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +119 -184
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +30 -0
- package/dist/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt-assembler.js +257 -0
- package/dist/prompt-assembler.js.map +1 -0
- package/dist/prompt-policy.d.ts +29 -0
- package/dist/prompt-policy.d.ts.map +1 -0
- package/dist/prompt-policy.js +51 -0
- package/dist/prompt-policy.js.map +1 -0
- package/dist/protocol.d.ts +88 -93
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +23 -39
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +1 -27
- package/dist/replay.js.map +1 -1
- package/dist/round-coordinator.d.ts +90 -0
- package/dist/round-coordinator.d.ts.map +1 -0
- package/dist/round-coordinator.js +186 -0
- package/dist/round-coordinator.js.map +1 -0
- package/dist/round-driver.d.ts +53 -0
- package/dist/round-driver.d.ts.map +1 -0
- package/dist/round-driver.js +101 -0
- package/dist/round-driver.js.map +1 -0
- package/dist/round-transaction.d.ts +70 -0
- package/dist/round-transaction.d.ts.map +1 -0
- package/dist/round-transaction.js +290 -0
- package/dist/round-transaction.js.map +1 -0
- package/dist/runtime.d.ts +33 -19
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +355 -336
- package/dist/runtime.js.map +1 -1
- package/dist/storage.d.ts +38 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +201 -0
- package/dist/storage.js.map +1 -0
- package/dist/verification-gate.d.ts +33 -7
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +195 -7
- package/dist/verification-gate.js.map +1 -1
- package/loop_policy.json +22 -48
- package/package.json +13 -10
- package/skills/perception/SKILL.md +80 -267
- package/dist/backends/fs.d.ts +0 -36
- package/dist/backends/fs.d.ts.map +0 -1
- package/dist/backends/fs.js +0 -362
- package/dist/backends/fs.js.map +0 -1
- package/dist/builder.d.ts +0 -19
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js +0 -215
- package/dist/builder.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -12
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -14
- package/dist/mcp-server.js.map +0 -1
- package/dist/memory-bridge.d.ts +0 -47
- package/dist/memory-bridge.d.ts.map +0 -1
- package/dist/memory-bridge.js +0 -290
- package/dist/memory-bridge.js.map +0 -1
- package/dist/tests/_helpers.d.ts +0 -25
- package/dist/tests/_helpers.d.ts.map +0 -1
- package/dist/tests/_helpers.js +0 -47
- package/dist/tests/_helpers.js.map +0 -1
- package/dist/tests/builder.test.d.ts +0 -2
- package/dist/tests/builder.test.d.ts.map +0 -1
- package/dist/tests/builder.test.js +0 -112
- package/dist/tests/builder.test.js.map +0 -1
- package/dist/tests/enforcement-gate.test.d.ts +0 -2
- package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
- package/dist/tests/enforcement-gate.test.js +0 -328
- package/dist/tests/enforcement-gate.test.js.map +0 -1
- package/dist/tests/engine.test.d.ts +0 -2
- package/dist/tests/engine.test.d.ts.map +0 -1
- package/dist/tests/engine.test.js +0 -375
- package/dist/tests/engine.test.js.map +0 -1
- package/dist/tests/generate-schema.test.d.ts +0 -8
- package/dist/tests/generate-schema.test.d.ts.map +0 -1
- package/dist/tests/generate-schema.test.js +0 -199
- package/dist/tests/generate-schema.test.js.map +0 -1
- package/dist/tests/loop-compiler.test.d.ts +0 -2
- package/dist/tests/loop-compiler.test.d.ts.map +0 -1
- package/dist/tests/loop-compiler.test.js +0 -1059
- package/dist/tests/loop-compiler.test.js.map +0 -1
- package/dist/tests/mcp.test.d.ts +0 -7
- package/dist/tests/mcp.test.d.ts.map +0 -1
- package/dist/tests/mcp.test.js +0 -505
- package/dist/tests/mcp.test.js.map +0 -1
- package/dist/tests/memory-bridge.test.d.ts +0 -8
- package/dist/tests/memory-bridge.test.d.ts.map +0 -1
- package/dist/tests/memory-bridge.test.js +0 -383
- package/dist/tests/memory-bridge.test.js.map +0 -1
- package/dist/tests/policy.test.d.ts +0 -2
- package/dist/tests/policy.test.d.ts.map +0 -1
- package/dist/tests/policy.test.js +0 -49
- package/dist/tests/policy.test.js.map +0 -1
- package/dist/tests/protocol.test.d.ts +0 -2
- package/dist/tests/protocol.test.d.ts.map +0 -1
- package/dist/tests/protocol.test.js +0 -73
- package/dist/tests/protocol.test.js.map +0 -1
- package/dist/tests/replay.test.d.ts +0 -2
- package/dist/tests/replay.test.d.ts.map +0 -1
- package/dist/tests/replay.test.js +0 -222
- package/dist/tests/replay.test.js.map +0 -1
- package/dist/tests/runtime.test.d.ts +0 -7
- package/dist/tests/runtime.test.d.ts.map +0 -1
- package/dist/tests/runtime.test.js +0 -337
- package/dist/tests/runtime.test.js.map +0 -1
- package/dist/tests/verification-gate.test.d.ts +0 -2
- package/dist/tests/verification-gate.test.d.ts.map +0 -1
- package/dist/tests/verification-gate.test.js +0 -407
- package/dist/tests/verification-gate.test.js.map +0 -1
- package/skills/prompt-techniques/SKILL.md +0 -52
- package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
- package/skills/prompt-techniques/references/few-shot.md +0 -174
- package/skills/prompt-techniques/references/least-to-most.md +0 -182
- package/skills/prompt-techniques/references/step-back.md +0 -160
- package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
- package/skills/prompt-techniques/references/zero-shot.md +0 -97
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/** In-process policy effectiveness metrics with no runtime dependency. */
|
|
2
|
+
function empty(loopId) {
|
|
3
|
+
return {
|
|
4
|
+
loopId,
|
|
5
|
+
roundAttempts: 0,
|
|
6
|
+
committedRounds: 0,
|
|
7
|
+
rejectedAttempts: 0,
|
|
8
|
+
terminatedRounds: 0,
|
|
9
|
+
stoppedRounds: 0,
|
|
10
|
+
replayedTransactions: 0,
|
|
11
|
+
successfulRounds: 0,
|
|
12
|
+
contradictedRounds: 0,
|
|
13
|
+
verificationFlags: {},
|
|
14
|
+
enforcementReasons: {},
|
|
15
|
+
evidenceOutcomesByProvider: {},
|
|
16
|
+
evidenceCaptures: 0,
|
|
17
|
+
evidenceAvailable: 0,
|
|
18
|
+
evidenceUnavailable: 0,
|
|
19
|
+
evidenceFailures: 0,
|
|
20
|
+
evidenceTimeouts: 0,
|
|
21
|
+
evidenceLatencyMs: 0,
|
|
22
|
+
levels: {},
|
|
23
|
+
strategyEffectiveness: {},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function increment(target, key) {
|
|
27
|
+
target[key] = (target[key] ?? 0) + 1;
|
|
28
|
+
}
|
|
29
|
+
export class PolicyMetricsCollector {
|
|
30
|
+
loops = new Map();
|
|
31
|
+
aggregate = empty();
|
|
32
|
+
targets(loopId) {
|
|
33
|
+
if (!loopId)
|
|
34
|
+
return [this.aggregate];
|
|
35
|
+
let metric = this.loops.get(loopId);
|
|
36
|
+
if (!metric) {
|
|
37
|
+
metric = empty(loopId);
|
|
38
|
+
this.loops.set(loopId, metric);
|
|
39
|
+
}
|
|
40
|
+
return [this.aggregate, metric];
|
|
41
|
+
}
|
|
42
|
+
recordRound(loopId, result, replayed = false) {
|
|
43
|
+
for (const metric of this.targets(loopId)) {
|
|
44
|
+
if (replayed) {
|
|
45
|
+
metric.replayedTransactions++;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
metric.roundAttempts++;
|
|
49
|
+
if (result.action === "reject")
|
|
50
|
+
metric.rejectedAttempts++;
|
|
51
|
+
else
|
|
52
|
+
metric.committedRounds++;
|
|
53
|
+
if (result.action === "terminate")
|
|
54
|
+
metric.terminatedRounds++;
|
|
55
|
+
if (result.action === "stop")
|
|
56
|
+
metric.stoppedRounds++;
|
|
57
|
+
if (result.roundSuccess)
|
|
58
|
+
metric.successfulRounds++;
|
|
59
|
+
if (result.gateContradicted)
|
|
60
|
+
metric.contradictedRounds++;
|
|
61
|
+
for (const flag of result.verificationFlags) {
|
|
62
|
+
increment(metric.verificationFlags, flag.check);
|
|
63
|
+
}
|
|
64
|
+
if (result.enforcementReason) {
|
|
65
|
+
increment(metric.enforcementReasons, result.enforcementReason);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
recordEvidence(provider, outcome, latencyMs, loopId) {
|
|
70
|
+
for (const metric of this.targets(loopId)) {
|
|
71
|
+
metric.evidenceCaptures++;
|
|
72
|
+
metric.evidenceLatencyMs += Math.max(0, latencyMs);
|
|
73
|
+
if (outcome === "available")
|
|
74
|
+
metric.evidenceAvailable++;
|
|
75
|
+
if (outcome === "unavailable")
|
|
76
|
+
metric.evidenceUnavailable++;
|
|
77
|
+
if (outcome === "failure")
|
|
78
|
+
metric.evidenceFailures++;
|
|
79
|
+
if (outcome === "timeout")
|
|
80
|
+
metric.evidenceTimeouts++;
|
|
81
|
+
increment(metric.evidenceOutcomesByProvider, `${provider}:${outcome}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
recordStrategy(loopId, level) {
|
|
85
|
+
for (const metric of this.targets(loopId)) {
|
|
86
|
+
if (level)
|
|
87
|
+
increment(metric.levels, level);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
recordStrategyOutcome(loopId, level, result, replayed = false) {
|
|
91
|
+
if (replayed)
|
|
92
|
+
return;
|
|
93
|
+
const key = level ?? "unknown";
|
|
94
|
+
for (const metric of this.targets(loopId)) {
|
|
95
|
+
const current = metric.strategyEffectiveness[key] ?? {
|
|
96
|
+
attempts: 0,
|
|
97
|
+
successes: 0,
|
|
98
|
+
rejections: 0,
|
|
99
|
+
};
|
|
100
|
+
current.attempts++;
|
|
101
|
+
if (result.roundSuccess && result.action !== "reject")
|
|
102
|
+
current.successes++;
|
|
103
|
+
if (result.action === "reject")
|
|
104
|
+
current.rejections++;
|
|
105
|
+
metric.strategyEffectiveness[key] = current;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
snapshot(loopId) {
|
|
109
|
+
const source = loopId ? this.loops.get(loopId) ?? empty(loopId) : this.aggregate;
|
|
110
|
+
const attempts = source.roundAttempts;
|
|
111
|
+
const evidence = source.evidenceCaptures;
|
|
112
|
+
const strategyEffectiveness = {};
|
|
113
|
+
for (const [key, value] of Object.entries(source.strategyEffectiveness)) {
|
|
114
|
+
strategyEffectiveness[key] = {
|
|
115
|
+
...value,
|
|
116
|
+
successRate: value.attempts === 0 ? 0 : value.successes / value.attempts,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
...source,
|
|
121
|
+
verificationFlags: { ...source.verificationFlags },
|
|
122
|
+
enforcementReasons: { ...source.enforcementReasons },
|
|
123
|
+
evidenceOutcomesByProvider: { ...source.evidenceOutcomesByProvider },
|
|
124
|
+
levels: { ...source.levels },
|
|
125
|
+
strategyEffectiveness,
|
|
126
|
+
acceptanceRate: attempts === 0 ? 0 : source.committedRounds / attempts,
|
|
127
|
+
evidenceAvailabilityRate: evidence === 0 ? 0 : source.evidenceAvailable / evidence,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
reset(loopId) {
|
|
131
|
+
if (loopId) {
|
|
132
|
+
this.loops.delete(loopId);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
this.loops.clear();
|
|
136
|
+
this.aggregate = empty();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export const policyMetrics = new PolicyMetricsCollector();
|
|
140
|
+
export function getPolicyMetrics(loopId) {
|
|
141
|
+
return policyMetrics.snapshot(loopId);
|
|
142
|
+
}
|
|
143
|
+
export function resetPolicyMetrics(loopId) {
|
|
144
|
+
policyMetrics.reset(loopId);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=policy-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-metrics.js","sourceRoot":"","sources":["../src/policy-metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* All tunable parameters live here instead of as module-level constants.
|
|
4
|
-
*/
|
|
1
|
+
/** Externalized LoopForge runtime policy. */
|
|
5
2
|
export interface ConstraintsPolicy {
|
|
6
3
|
retire_window: number;
|
|
7
4
|
}
|
|
@@ -9,13 +6,6 @@ export interface SummaryPolicy {
|
|
|
9
6
|
window: number;
|
|
10
7
|
health_check_interval: number;
|
|
11
8
|
}
|
|
12
|
-
export interface TechniquePolicy {
|
|
13
|
-
/** @deprecated v1.15 — Escalation (N failures → Tier 2) removed.
|
|
14
|
-
* The Agent freely chooses techniques at L2; keyword routing stays
|
|
15
|
-
* in Tier 1 at L1. This field is retained for config compatibility
|
|
16
|
-
* but no longer consumed by the routing logic. */
|
|
17
|
-
tier2_escalation_failures: number;
|
|
18
|
-
}
|
|
19
9
|
export interface EnginePolicy {
|
|
20
10
|
feedback_flush_interval: number;
|
|
21
11
|
max_circuit_breaker: number;
|
|
@@ -26,169 +16,92 @@ export interface RuntimePolicy {
|
|
|
26
16
|
heartbeat_interval_ms: number;
|
|
27
17
|
stall_grace_ms: number;
|
|
28
18
|
max_consecutive_errors: number;
|
|
19
|
+
pause_double_tap_ms: number;
|
|
20
|
+
}
|
|
21
|
+
/** Levels control state density only; reasoning strategy belongs to the Agent. */
|
|
22
|
+
export interface PromptPolicy {
|
|
23
|
+
injection_mode: "adaptive" | "full" | "pointer";
|
|
24
|
+
full_refresh_interval: number;
|
|
25
|
+
l0_max_chars: number;
|
|
26
|
+
l1_max_chars: number;
|
|
27
|
+
l2_max_chars: number;
|
|
28
|
+
base_prompt_version: string;
|
|
29
29
|
}
|
|
30
30
|
export interface BackendPolicy {
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
/** Root for typed per-loop documents. */
|
|
32
|
+
root_dir: string;
|
|
33
33
|
}
|
|
34
34
|
export interface EvolutionPolicy {
|
|
35
|
-
/** P0: Max new constraints the agent can discover per round. */
|
|
36
35
|
max_discovered_constraints_per_round: number;
|
|
37
|
-
/** P0: Hard upper bound on total active constraints. */
|
|
38
36
|
max_active_constraints: number;
|
|
39
|
-
/** P1: Max versions of the loop objective to retain in history. */
|
|
40
37
|
max_objective_versions: number;
|
|
41
|
-
/** P4: Minimum progress delta to not be considered stalled. */
|
|
42
38
|
progress_stall_threshold: number;
|
|
43
|
-
/** P4: Consecutive rounds below stall threshold before warning. */
|
|
44
39
|
progress_stall_rounds: number;
|
|
45
|
-
/** P4: Max allowed difference between objective and subjective progress. */
|
|
46
40
|
progress_mismatch_threshold: number;
|
|
47
41
|
}
|
|
48
|
-
/** A tier in the round-based injection strategy.
|
|
49
|
-
* Each tier defines how many and which injection phases are allowed
|
|
50
|
-
* based on the loop's maxRounds. */
|
|
51
|
-
export interface MemoryInjectionTier {
|
|
52
|
-
/** Upper bound of maxRounds for this tier (inclusive). */
|
|
53
|
-
max_rounds: number;
|
|
54
|
-
/** Which phases are allowed in this tier: [1], [1,3], or [1,2,3]. */
|
|
55
|
-
allowed_phases: number[];
|
|
56
|
-
}
|
|
57
|
-
export interface MemoryInjectionPolicy {
|
|
58
|
-
/** Master toggle for memory injection. */
|
|
59
|
-
enabled: boolean;
|
|
60
|
-
/** Minimum rounds between two consecutive injections. */
|
|
61
|
-
min_rounds_between_injections: number;
|
|
62
|
-
/** Phase trigger configuration. */
|
|
63
|
-
phase_thresholds: {
|
|
64
|
-
phase1: {
|
|
65
|
-
trigger: "round_1";
|
|
66
|
-
};
|
|
67
|
-
phase2: {
|
|
68
|
-
trigger: "progress";
|
|
69
|
-
threshold: number;
|
|
70
|
-
};
|
|
71
|
-
phase3: {
|
|
72
|
-
trigger: "progress";
|
|
73
|
-
threshold: number;
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
/** Round-based tiered injection strategy. Each tier defines which phases
|
|
77
|
-
* are allowed based on maxRounds. The first matching tier wins.
|
|
78
|
-
* Tiers should be ordered by max_rounds ascending. */
|
|
79
|
-
round_tiers: MemoryInjectionTier[];
|
|
80
|
-
/** Jaccard similarity threshold above which a new context is considered
|
|
81
|
-
* duplicate and skipped. */
|
|
82
|
-
dedup_threshold: number;
|
|
83
|
-
/** Maximum characters of memory context to inject (truncated if longer). */
|
|
84
|
-
max_context_length: number;
|
|
85
|
-
/** Section header for the injected context block in the L2 prompt. */
|
|
86
|
-
section_title: string;
|
|
87
|
-
}
|
|
88
|
-
/** Resolve which injection phases are allowed for a given maxRounds.
|
|
89
|
-
* Uses the tiered strategy: finds the first tier where maxRounds ≤ tier.max_rounds,
|
|
90
|
-
* and returns its allowed_phases. If maxRounds exceeds all tiers, returns the
|
|
91
|
-
* last tier's phases. */
|
|
92
|
-
export declare function resolveAllowedPhases(maxRounds: number, tiers: MemoryInjectionTier[]): number[];
|
|
93
|
-
/** Resolve which memory injection phase (1/2/3) should fire this round.
|
|
94
|
-
* Shared between LoopRuntime (runtime.ts) and SessionManager (mcp/session.ts).
|
|
95
|
-
* Returns the phase number, or 0 if no injection should occur this round.
|
|
96
|
-
*
|
|
97
|
-
* @param currentRound Current round number (1-based).
|
|
98
|
-
* @param injectionCount How many injections have already occurred.
|
|
99
|
-
* @param allowedPhases Phases allowed by the round-tier policy.
|
|
100
|
-
* @param progress Current progress estimate (-1 if unavailable).
|
|
101
|
-
* @param phase2Triggered Whether phase 2 has already fired in this loop.
|
|
102
|
-
* @param phase3Triggered Whether phase 3 has already fired in this loop.
|
|
103
|
-
* @param thresholds Policy threshold config for phase2/phase3. */
|
|
104
|
-
export declare function resolveInjectionPhase(currentRound: number, injectionCount: number, allowedPhases: Set<number>, progress: number, phase2Triggered: boolean, phase3Triggered: boolean, thresholds: {
|
|
105
|
-
phase2: number;
|
|
106
|
-
phase3: number;
|
|
107
|
-
}): 0 | 1 | 2 | 3;
|
|
108
|
-
/** Build accumulated context for a targeted memory query from a SelfEvaluation.
|
|
109
|
-
* Extracts recurring issues, key lessons, and remaining criteria.
|
|
110
|
-
* Shared between LoopRuntime (runtime.ts) and SessionManager (mcp/session.ts). */
|
|
111
|
-
export declare function buildAccumulatedMemoryContext(selfEval: {
|
|
112
|
-
constraint_violations: string[];
|
|
113
|
-
execution_evidence?: {
|
|
114
|
-
success_criteria_remaining?: string[];
|
|
115
|
-
} | null;
|
|
116
|
-
emerged_subtasks?: string[];
|
|
117
|
-
wrong_assumptions?: string[];
|
|
118
|
-
}): {
|
|
119
|
-
recurringIssues: string[];
|
|
120
|
-
failedPatterns: string[];
|
|
121
|
-
keyLessons: string[];
|
|
122
|
-
remainingCriteria: string[];
|
|
123
|
-
};
|
|
124
|
-
/** Build a base LoopMemoryWriteback payload from loop terminal state.
|
|
125
|
-
* Shared between LoopRuntime (runtime.ts) and SessionManager (mcp/session.ts).
|
|
126
|
-
* Callers may layer additional feedback entries on top of the returned payload. */
|
|
127
|
-
export declare function buildBaseMemoryWriteback(params: {
|
|
128
|
-
loopId: string;
|
|
129
|
-
task: string;
|
|
130
|
-
stopReason: string;
|
|
131
|
-
roundsCompleted: number;
|
|
132
|
-
discoveries: string[];
|
|
133
|
-
}): {
|
|
134
|
-
loopId: string;
|
|
135
|
-
task: string;
|
|
136
|
-
outcome: "completed" | "circuit_breaker" | "stalled" | "max_rounds" | "stopped";
|
|
137
|
-
roundsCompleted: number;
|
|
138
|
-
projectEntry: {
|
|
139
|
-
title: string;
|
|
140
|
-
objective: string;
|
|
141
|
-
keyOutcome: string;
|
|
142
|
-
keyDiscoveries: string[];
|
|
143
|
-
date: string;
|
|
144
|
-
};
|
|
145
|
-
referenceEntry: {
|
|
146
|
-
description: string;
|
|
147
|
-
vaultLocation: string;
|
|
148
|
-
};
|
|
149
|
-
};
|
|
150
|
-
export interface MemoryWritebackPolicy {
|
|
151
|
-
/** Master toggle for memory writeback on loop end. */
|
|
152
|
-
enabled: boolean;
|
|
153
|
-
/** Maximum number of feedback entries to write back. */
|
|
154
|
-
max_feedback_entries: number;
|
|
155
|
-
/** Maximum number of discoveries in the project entry. */
|
|
156
|
-
max_discoveries_in_project: number;
|
|
157
|
-
/** Only write back for these stop reasons. */
|
|
158
|
-
write_on_outcomes: string[];
|
|
159
|
-
}
|
|
160
42
|
export interface CheckpointPolicy {
|
|
161
|
-
/** Maximum number of constraints carried forward in a checkpoint. */
|
|
162
43
|
max_carried_constraints: number;
|
|
163
|
-
/** Maximum character length of the outcome field in a checkpoint. */
|
|
164
44
|
outcome_max_chars: number;
|
|
165
45
|
}
|
|
46
|
+
/** Human-readable derived state view. JSON LoopStore documents remain truth. */
|
|
166
47
|
export interface StateFilePolicy {
|
|
167
|
-
/** Master toggle. false = fully disabled, state stays inlined in prompt. */
|
|
168
48
|
enabled: boolean;
|
|
169
|
-
/** Directory relative to project root where state files are written. */
|
|
170
49
|
directory: string;
|
|
171
|
-
/** Max checkpoints to carry in state file. */
|
|
172
50
|
max_checkpoints: number;
|
|
173
|
-
/** Max rounds in cross-round summary section. */
|
|
174
51
|
max_summary_rounds: number;
|
|
175
52
|
}
|
|
53
|
+
export interface EvidencePolicy {
|
|
54
|
+
providers: string[];
|
|
55
|
+
timeout_ms: number;
|
|
56
|
+
commands: CommandEvidencePolicy[];
|
|
57
|
+
}
|
|
58
|
+
export interface CommandEvidencePolicy {
|
|
59
|
+
name: string;
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
executable: string;
|
|
62
|
+
args: string[];
|
|
63
|
+
cwd?: string;
|
|
64
|
+
phase: "after" | "both";
|
|
65
|
+
required: boolean;
|
|
66
|
+
timeout_ms: number;
|
|
67
|
+
max_output_chars: number;
|
|
68
|
+
success_exit_codes: number[];
|
|
69
|
+
}
|
|
70
|
+
export interface McpPolicy {
|
|
71
|
+
session_lease_ms: number;
|
|
72
|
+
session_lease_renew_interval_ms: number;
|
|
73
|
+
}
|
|
176
74
|
export interface LoopPolicy {
|
|
177
75
|
version: string;
|
|
178
76
|
constraints: ConstraintsPolicy;
|
|
179
77
|
summary: SummaryPolicy;
|
|
180
|
-
technique: TechniquePolicy;
|
|
181
78
|
engine: EnginePolicy;
|
|
182
79
|
runtime: RuntimePolicy;
|
|
80
|
+
prompt: PromptPolicy;
|
|
183
81
|
backend: BackendPolicy;
|
|
184
82
|
evolution: EvolutionPolicy;
|
|
185
|
-
memory_injection: MemoryInjectionPolicy;
|
|
186
|
-
memory_writeback: MemoryWritebackPolicy;
|
|
187
83
|
checkpoint: CheckpointPolicy;
|
|
188
84
|
state_file: StateFilePolicy;
|
|
85
|
+
evidence: EvidencePolicy;
|
|
86
|
+
mcp: McpPolicy;
|
|
189
87
|
}
|
|
190
88
|
export declare const DEFAULT_POLICY: LoopPolicy;
|
|
89
|
+
/** Write a full default `loop_policy.json` to the target directory.
|
|
90
|
+
*
|
|
91
|
+
* The written file contains every configurable key and its default value
|
|
92
|
+
* so users can discover and tune the system without reading source code.
|
|
93
|
+
* Skip creation when the file already exists unless `force` is true.
|
|
94
|
+
*
|
|
95
|
+
* @returns The resolved file path and whether it was freshly created.
|
|
96
|
+
*/
|
|
97
|
+
export declare function writeDefaultPolicy(targetDir: string, force?: boolean): {
|
|
98
|
+
path: string;
|
|
99
|
+
created: boolean;
|
|
100
|
+
};
|
|
191
101
|
export declare function loadPolicy(path?: string): LoopPolicy;
|
|
192
102
|
export declare function getPolicy(path?: string): LoopPolicy;
|
|
193
103
|
export declare function resetPolicy(): void;
|
|
104
|
+
export declare function validateLoopId(loopId: string): void;
|
|
105
|
+
export declare function resolveStateDirectory(workspaceRoot: string, configuredDirectory: string): string;
|
|
106
|
+
export declare function writeStateFile(loopId: string, content: string | undefined): void;
|
|
194
107
|
//# sourceMappingURL=policy.d.ts.map
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAe7C,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IAChD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,oCAAoC,EAAE,MAAM,CAAC;IAC7C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,+BAA+B,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,SAAS,CAAC;CAChB;AAED,eAAO,MAAM,cAAc,EAAE,UA0C5B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,UAAQ,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAOpC;AAwBD,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAapD;AAID,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAGnD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAanD;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CA2BR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAsBhF"}
|