@yuaone/core 0.6.1 → 0.7.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.
Files changed (67) hide show
  1. package/dist/agent-loop.d.ts +38 -0
  2. package/dist/agent-loop.d.ts.map +1 -1
  3. package/dist/agent-loop.js +532 -117
  4. package/dist/agent-loop.js.map +1 -1
  5. package/dist/code-indexer.d.ts +50 -0
  6. package/dist/code-indexer.d.ts.map +1 -0
  7. package/dist/code-indexer.js +199 -0
  8. package/dist/code-indexer.js.map +1 -0
  9. package/dist/failure-recovery.d.ts +15 -2
  10. package/dist/failure-recovery.d.ts.map +1 -1
  11. package/dist/failure-recovery.js +53 -2
  12. package/dist/failure-recovery.js.map +1 -1
  13. package/dist/index.d.ts +8 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +8 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/llm-client.d.ts +20 -2
  18. package/dist/llm-client.d.ts.map +1 -1
  19. package/dist/llm-client.js +213 -8
  20. package/dist/llm-client.js.map +1 -1
  21. package/dist/llm-orchestrator.d.ts +74 -0
  22. package/dist/llm-orchestrator.d.ts.map +1 -0
  23. package/dist/llm-orchestrator.js +144 -0
  24. package/dist/llm-orchestrator.js.map +1 -0
  25. package/dist/planner/index.d.ts +9 -0
  26. package/dist/planner/index.d.ts.map +1 -0
  27. package/dist/planner/index.js +5 -0
  28. package/dist/planner/index.js.map +1 -0
  29. package/dist/planner/milestone-checker.d.ts +48 -0
  30. package/dist/planner/milestone-checker.d.ts.map +1 -0
  31. package/dist/planner/milestone-checker.js +113 -0
  32. package/dist/planner/milestone-checker.js.map +1 -0
  33. package/dist/planner/plan-evaluator.d.ts +35 -0
  34. package/dist/planner/plan-evaluator.d.ts.map +1 -0
  35. package/dist/planner/plan-evaluator.js +92 -0
  36. package/dist/planner/plan-evaluator.js.map +1 -0
  37. package/dist/planner/replanning-engine.d.ts +37 -0
  38. package/dist/planner/replanning-engine.d.ts.map +1 -0
  39. package/dist/planner/replanning-engine.js +130 -0
  40. package/dist/planner/replanning-engine.js.map +1 -0
  41. package/dist/planner/risk-estimator.d.ts +44 -0
  42. package/dist/planner/risk-estimator.d.ts.map +1 -0
  43. package/dist/planner/risk-estimator.js +108 -0
  44. package/dist/planner/risk-estimator.js.map +1 -0
  45. package/dist/types.d.ts +12 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/world-model/index.d.ts +8 -0
  48. package/dist/world-model/index.d.ts.map +1 -0
  49. package/dist/world-model/index.js +5 -0
  50. package/dist/world-model/index.js.map +1 -0
  51. package/dist/world-model/simulation-engine.d.ts +58 -0
  52. package/dist/world-model/simulation-engine.d.ts.map +1 -0
  53. package/dist/world-model/simulation-engine.js +191 -0
  54. package/dist/world-model/simulation-engine.js.map +1 -0
  55. package/dist/world-model/state-store.d.ts +149 -0
  56. package/dist/world-model/state-store.d.ts.map +1 -0
  57. package/dist/world-model/state-store.js +379 -0
  58. package/dist/world-model/state-store.js.map +1 -0
  59. package/dist/world-model/state-updater.d.ts +35 -0
  60. package/dist/world-model/state-updater.d.ts.map +1 -0
  61. package/dist/world-model/state-updater.js +131 -0
  62. package/dist/world-model/state-updater.js.map +1 -0
  63. package/dist/world-model/transition-model.d.ts +54 -0
  64. package/dist/world-model/transition-model.d.ts.map +1 -0
  65. package/dist/world-model/transition-model.js +240 -0
  66. package/dist/world-model/transition-model.js.map +1 -0
  67. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/planner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @module planner/milestone-checker
3
+ * @description Tracks milestone progress within a HierarchicalPlan execution.
4
+ * Milestones are checkpoints derived from tactical tasks that indicate overall
5
+ * plan health and schedule adherence.
6
+ */
7
+ import type { HierarchicalPlan } from "../hierarchical-planner.js";
8
+ export interface Milestone {
9
+ id: string;
10
+ description: string;
11
+ targetTaskIds: string[];
12
+ expectedByIteration: number;
13
+ priority: "must" | "should" | "could";
14
+ }
15
+ export interface MilestoneStatus {
16
+ achieved: Milestone[];
17
+ missed: Milestone[];
18
+ pending: Milestone[];
19
+ behindSchedule: boolean;
20
+ consecutiveMisses: number;
21
+ overallProgress: number;
22
+ }
23
+ export declare class MilestoneChecker {
24
+ private milestones;
25
+ private consecutiveMisses;
26
+ private lastStatus;
27
+ /**
28
+ * Extract milestones from a HierarchicalPlan.
29
+ * Groups tactical tasks into milestones:
30
+ * - Independent tasks (no dependsOn) → first "should" milestone
31
+ * - Every 3 tasks → one "should" milestone
32
+ * - Last task → one "must" milestone (completion)
33
+ */
34
+ extractMilestones(plan: HierarchicalPlan): Milestone[];
35
+ /**
36
+ * Evaluate current milestone status given completed tasks and current iteration.
37
+ */
38
+ check(milestones: Milestone[], completedTaskIds: string[], currentIteration: number): MilestoneStatus;
39
+ /**
40
+ * Register externally defined milestones.
41
+ */
42
+ setMilestones(milestones: Milestone[]): void;
43
+ /**
44
+ * Get milestones at risk: pending milestones past their expectedByIteration.
45
+ */
46
+ getAtRisk(currentIteration: number): Milestone[];
47
+ }
48
+ //# sourceMappingURL=milestone-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milestone-checker.d.ts","sourceRoot":"","sources":["../../src/planner/milestone-checker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,UAAU,CAAgC;IAElD;;;;;;OAMG;IACH,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAAE;IA8CtD;;OAEG;IACH,KAAK,CACH,UAAU,EAAE,SAAS,EAAE,EACvB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,gBAAgB,EAAE,MAAM,GACvB,eAAe;IAsClB;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAI5C;;OAEG;IACH,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EAAE;CAOjD"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @module planner/milestone-checker
3
+ * @description Tracks milestone progress within a HierarchicalPlan execution.
4
+ * Milestones are checkpoints derived from tactical tasks that indicate overall
5
+ * plan health and schedule adherence.
6
+ */
7
+ // ─── MilestoneChecker ───
8
+ export class MilestoneChecker {
9
+ milestones = [];
10
+ consecutiveMisses = 0;
11
+ lastStatus = null;
12
+ /**
13
+ * Extract milestones from a HierarchicalPlan.
14
+ * Groups tactical tasks into milestones:
15
+ * - Independent tasks (no dependsOn) → first "should" milestone
16
+ * - Every 3 tasks → one "should" milestone
17
+ * - Last task → one "must" milestone (completion)
18
+ */
19
+ extractMilestones(plan) {
20
+ const tasks = plan.tactical;
21
+ if (tasks.length === 0)
22
+ return [];
23
+ const milestones = [];
24
+ const totalIterations = plan.totalEstimatedIterations;
25
+ // Milestone 1: Initial exploration (first batch of independent tasks)
26
+ const independentFirst = tasks
27
+ .filter((t) => t.dependsOn.length === 0)
28
+ .map((t) => t.id);
29
+ if (independentFirst.length > 0) {
30
+ milestones.push({
31
+ id: "milestone:initial",
32
+ description: "Initial exploration and file reading complete",
33
+ targetTaskIds: independentFirst.slice(0, Math.min(3, independentFirst.length)),
34
+ expectedByIteration: Math.floor(totalIterations * 0.2),
35
+ priority: "should",
36
+ });
37
+ }
38
+ // Middle milestones: every 3 tasks
39
+ for (let i = 0; i < tasks.length - 1; i += 3) {
40
+ const batch = tasks.slice(i, i + 3).map((t) => t.id);
41
+ milestones.push({
42
+ id: `milestone:batch-${Math.floor(i / 3)}`,
43
+ description: `Tasks ${i + 1}–${Math.min(i + 3, tasks.length)} complete`,
44
+ targetTaskIds: batch,
45
+ expectedByIteration: Math.floor(totalIterations * ((i + 3) / tasks.length)),
46
+ priority: "should",
47
+ });
48
+ }
49
+ // Final milestone: all tasks done
50
+ milestones.push({
51
+ id: "milestone:complete",
52
+ description: "All planned tasks completed",
53
+ targetTaskIds: tasks.map((t) => t.id),
54
+ expectedByIteration: totalIterations,
55
+ priority: "must",
56
+ });
57
+ this.milestones = milestones;
58
+ return milestones;
59
+ }
60
+ /**
61
+ * Evaluate current milestone status given completed tasks and current iteration.
62
+ */
63
+ check(milestones, completedTaskIds, currentIteration) {
64
+ const completedSet = new Set(completedTaskIds);
65
+ const achieved = [];
66
+ const missed = [];
67
+ const pending = [];
68
+ for (const m of milestones) {
69
+ const allDone = m.targetTaskIds.every((id) => completedSet.has(id));
70
+ if (allDone) {
71
+ achieved.push(m);
72
+ }
73
+ else if (currentIteration > m.expectedByIteration) {
74
+ missed.push(m);
75
+ }
76
+ else {
77
+ pending.push(m);
78
+ }
79
+ }
80
+ // Track consecutive misses for "must" milestones
81
+ const mustMissed = missed.filter((m) => m.priority === "must").length;
82
+ if (mustMissed > 0) {
83
+ this.consecutiveMisses++;
84
+ }
85
+ else if (achieved.length > 0) {
86
+ this.consecutiveMisses = 0;
87
+ }
88
+ const status = {
89
+ achieved,
90
+ missed,
91
+ pending,
92
+ behindSchedule: missed.some((m) => m.priority === "must"),
93
+ consecutiveMisses: this.consecutiveMisses,
94
+ overallProgress: milestones.length > 0 ? achieved.length / milestones.length : 1,
95
+ };
96
+ this.lastStatus = status;
97
+ return status;
98
+ }
99
+ /**
100
+ * Register externally defined milestones.
101
+ */
102
+ setMilestones(milestones) {
103
+ this.milestones = milestones;
104
+ }
105
+ /**
106
+ * Get milestones at risk: pending milestones past their expectedByIteration.
107
+ */
108
+ getAtRisk(currentIteration) {
109
+ return this.milestones.filter((m) => currentIteration > m.expectedByIteration &&
110
+ !this.lastStatus?.achieved.some((a) => a.id === m.id));
111
+ }
112
+ }
113
+ //# sourceMappingURL=milestone-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milestone-checker.js","sourceRoot":"","sources":["../../src/planner/milestone-checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @module planner/plan-evaluator
3
+ * @description Evaluates the health of a running HierarchicalPlan.
4
+ * Detects deviations, predicts token overruns, and recommends corrective actions.
5
+ */
6
+ import type { HierarchicalPlan } from "../hierarchical-planner.js";
7
+ import type { StateStore } from "../world-model/state-store.js";
8
+ import type { SimulationEngine } from "../world-model/simulation-engine.js";
9
+ import type { ToolResult } from "../types.js";
10
+ export type DeviantType = "unexpected_file" | "scope_creep" | "blocked_dependency" | "token_overrun" | "quality_regression";
11
+ export interface PlanDeviation {
12
+ type: DeviantType;
13
+ description: string;
14
+ severity: "low" | "medium" | "high";
15
+ affectedTaskIds: string[];
16
+ }
17
+ export interface PlanHealth {
18
+ score: number;
19
+ completedTasks: number;
20
+ totalTasks: number;
21
+ progressRatio: number;
22
+ tokensUsed: number;
23
+ tokensRemaining: number;
24
+ deviations: PlanDeviation[];
25
+ recommendation: "continue" | "replan_minor" | "replan_major" | "abort";
26
+ }
27
+ export declare class PlanEvaluator {
28
+ private stateStore;
29
+ private simulationEngine;
30
+ constructor(stateStore: StateStore, simulationEngine: SimulationEngine);
31
+ evaluate(plan: HierarchicalPlan, completedTaskIds: string[], toolResults: ToolResult[], tokensUsed: number, tokenBudget: number): PlanHealth;
32
+ detectUnexpectedChanges(plan: HierarchicalPlan, actualChangedFiles: string[]): PlanDeviation[];
33
+ predictTokenOverrun(plan: HierarchicalPlan, tokensUsed: number, completedRatio: number): boolean;
34
+ }
35
+ //# sourceMappingURL=plan-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-evaluator.d.ts","sourceRoot":"","sources":["../../src/planner/plan-evaluator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,MAAM,WAAW,GACnB,iBAAiB,GACjB,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,oBAAoB,CAAC;AAEzB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,cAAc,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,CAAC;CACxE;AAID,qBAAa,aAAa;IAEtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,gBAAgB;gBADhB,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB;IAG5C,QAAQ,CACN,IAAI,EAAE,gBAAgB,EACtB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,UAAU;IAoEb,uBAAuB,CACrB,IAAI,EAAE,gBAAgB,EACtB,kBAAkB,EAAE,MAAM,EAAE,GAC3B,aAAa,EAAE;IAelB,mBAAmB,CACjB,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO;CAKX"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @module planner/plan-evaluator
3
+ * @description Evaluates the health of a running HierarchicalPlan.
4
+ * Detects deviations, predicts token overruns, and recommends corrective actions.
5
+ */
6
+ // ─── PlanEvaluator ───
7
+ export class PlanEvaluator {
8
+ stateStore;
9
+ simulationEngine;
10
+ constructor(stateStore, simulationEngine) {
11
+ this.stateStore = stateStore;
12
+ this.simulationEngine = simulationEngine;
13
+ }
14
+ evaluate(plan, completedTaskIds, toolResults, tokensUsed, tokenBudget) {
15
+ const completedSet = new Set(completedTaskIds);
16
+ const totalTasks = plan.tactical.length;
17
+ const completedTasks = completedTaskIds.length;
18
+ const progressRatio = totalTasks > 0 ? completedTasks / totalTasks : 0;
19
+ const tokensRemaining = tokenBudget - tokensUsed;
20
+ const deviations = [];
21
+ // 1. Detect unexpected file changes
22
+ // ToolResult has no args field — callers should pass changedFiles separately.
23
+ // We collect tool names that indicate file writes for quality assessment only.
24
+ const writeToolCount = toolResults
25
+ .filter(r => r.success && (r.name === "file_write" || r.name === "file_edit"))
26
+ .length;
27
+ void writeToolCount; // available for future heuristics
28
+ deviations.push(...this.detectUnexpectedChanges(plan, []));
29
+ // 2. Detect token overrun risk
30
+ if (this.predictTokenOverrun(plan, tokensUsed, progressRatio)) {
31
+ deviations.push({
32
+ type: "token_overrun",
33
+ description: `Token usage on pace to exceed budget (used ${Math.round(tokensUsed / 1000)}K / ${Math.round(tokenBudget / 1000)}K at ${Math.round(progressRatio * 100)}% completion)`,
34
+ severity: tokensUsed / tokenBudget > 0.9 ? "high" : "medium",
35
+ affectedTaskIds: plan.tactical.slice(completedTasks).map(t => t.id),
36
+ });
37
+ }
38
+ // 3. Check for failed tool results
39
+ const failedCount = toolResults.filter(r => !r.success).length;
40
+ if (failedCount > 2) {
41
+ deviations.push({
42
+ type: "quality_regression",
43
+ description: `${failedCount} tool executions failed`,
44
+ severity: failedCount > 5 ? "high" : "medium",
45
+ affectedTaskIds: [],
46
+ });
47
+ }
48
+ // 4. Compute health score (100 = perfect)
49
+ let score = 100;
50
+ for (const d of deviations) {
51
+ score -= d.severity === "high" ? 25 : d.severity === "medium" ? 10 : 5;
52
+ }
53
+ // Penalize low progress ratio relative to tokens used
54
+ const efficiency = progressRatio / Math.max(tokensUsed / tokenBudget, 0.01);
55
+ if (efficiency < 0.5)
56
+ score -= 15;
57
+ score = Math.max(0, Math.min(100, score));
58
+ const recommendation = score < 20 ? "abort" :
59
+ score < 45 ? "replan_major" :
60
+ score < 65 ? "replan_minor" :
61
+ "continue";
62
+ return {
63
+ score,
64
+ completedTasks,
65
+ totalTasks,
66
+ progressRatio,
67
+ tokensUsed,
68
+ tokensRemaining,
69
+ deviations,
70
+ recommendation,
71
+ };
72
+ }
73
+ detectUnexpectedChanges(plan, actualChangedFiles) {
74
+ const plannedFiles = new Set(plan.tactical.flatMap(t => [...t.targetFiles, ...t.readFiles]));
75
+ const unexpected = actualChangedFiles.filter(f => !plannedFiles.has(f));
76
+ if (unexpected.length === 0)
77
+ return [];
78
+ return [{
79
+ type: "unexpected_file",
80
+ description: `${unexpected.length} files modified outside plan: ${unexpected.slice(0, 3).join(", ")}${unexpected.length > 3 ? " ..." : ""}`,
81
+ severity: unexpected.length > 5 ? "high" : unexpected.length > 2 ? "medium" : "low",
82
+ affectedTaskIds: [],
83
+ }];
84
+ }
85
+ predictTokenOverrun(plan, tokensUsed, completedRatio) {
86
+ if (completedRatio < 0.1)
87
+ return false; // too early to predict
88
+ const projectedTotal = tokensUsed / completedRatio;
89
+ return projectedTotal > plan.estimatedTokenBudget * 1.3; // 30% over budget
90
+ }
91
+ }
92
+ //# sourceMappingURL=plan-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-evaluator.js","sourceRoot":"","sources":["../../src/planner/plan-evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @module planner/replanning-engine
3
+ * @description Proactive replanning engine — evaluates plan health mid-execution
4
+ * and triggers partial or full replanning when deviations are detected.
5
+ */
6
+ import type { HierarchicalPlan, HierarchicalPlanner, TacticalTask } from "../hierarchical-planner.js";
7
+ import type { BYOKClient } from "../llm-client.js";
8
+ import type { WorldState } from "../world-model/state-store.js";
9
+ import type { ToolResult } from "../types.js";
10
+ import type { PlanEvaluator } from "./plan-evaluator.js";
11
+ import type { RiskEstimator } from "./risk-estimator.js";
12
+ import type { MilestoneChecker, Milestone } from "./milestone-checker.js";
13
+ export interface ReplanDecision {
14
+ shouldReplan: boolean;
15
+ scope: "none" | "operational" | "tactical" | "strategic";
16
+ trigger: string;
17
+ urgency: "low" | "medium" | "high" | "critical";
18
+ reasoning: string;
19
+ }
20
+ export interface ProactiveReplanResult {
21
+ triggered: boolean;
22
+ decision: ReplanDecision;
23
+ newPlan?: HierarchicalPlan;
24
+ modifiedTasks?: TacticalTask[];
25
+ message: string;
26
+ }
27
+ export declare class ReplanningEngine {
28
+ private planner;
29
+ private planEvaluator;
30
+ private riskEstimator;
31
+ private milestoneChecker;
32
+ constructor(planner: HierarchicalPlanner, planEvaluator: PlanEvaluator, riskEstimator: RiskEstimator, milestoneChecker: MilestoneChecker);
33
+ evaluate(plan: HierarchicalPlan, currentState: WorldState, completedTaskIds: string[], toolResults: ToolResult[], tokensUsed: number, tokenBudget: number, changedFiles: string[], currentIteration: number, activeMilestones: Milestone[], llmClient: BYOKClient): Promise<ProactiveReplanResult>;
34
+ private shouldTrigger;
35
+ private executeReplan;
36
+ }
37
+ //# sourceMappingURL=replanning-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replanning-engine.d.ts","sourceRoot":"","sources":["../../src/planner/replanning-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EAEb,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAmB,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAI3F,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;gBAHhB,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB;IAGtC,QAAQ,CACZ,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,UAAU,EACxB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,SAAS,EAAE,EAC7B,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,qBAAqB,CAAC;IAmDjC,OAAO,CAAC,aAAa;YAgFP,aAAa;CAwB5B"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @module planner/replanning-engine
3
+ * @description Proactive replanning engine — evaluates plan health mid-execution
4
+ * and triggers partial or full replanning when deviations are detected.
5
+ */
6
+ // ─── ReplanningEngine ───
7
+ export class ReplanningEngine {
8
+ planner;
9
+ planEvaluator;
10
+ riskEstimator;
11
+ milestoneChecker;
12
+ constructor(planner, planEvaluator, riskEstimator, milestoneChecker) {
13
+ this.planner = planner;
14
+ this.planEvaluator = planEvaluator;
15
+ this.riskEstimator = riskEstimator;
16
+ this.milestoneChecker = milestoneChecker;
17
+ }
18
+ async evaluate(plan, currentState, completedTaskIds, toolResults, tokensUsed, tokenBudget, changedFiles, currentIteration, activeMilestones, llmClient) {
19
+ const remainingTasks = plan.tactical.filter(t => !completedTaskIds.includes(t.id));
20
+ const completedTasks = plan.tactical.filter(t => completedTaskIds.includes(t.id));
21
+ // 1. Evaluate plan health
22
+ const health = this.planEvaluator.evaluate(plan, completedTaskIds, toolResults, tokensUsed, tokenBudget);
23
+ // 2. Estimate risk
24
+ const risk = await this.riskEstimator.estimate(currentState, remainingTasks, completedTasks, changedFiles, tokensUsed, tokenBudget);
25
+ // 3. Check milestones
26
+ const milestoneStatus = this.milestoneChecker.check(activeMilestones, completedTaskIds, currentIteration);
27
+ // 4. Decide whether to replan
28
+ const decision = this.shouldTrigger(health, risk, milestoneStatus);
29
+ if (!decision.shouldReplan) {
30
+ return { triggered: false, decision, message: "Plan on track" };
31
+ }
32
+ // 5. Execute replan
33
+ try {
34
+ const result = await this.executeReplan(plan, decision, currentState, llmClient);
35
+ const message = `Proactive replan triggered (${decision.scope}): ${decision.trigger}`;
36
+ return { triggered: true, decision, modifiedTasks: result, message };
37
+ }
38
+ catch (err) {
39
+ return {
40
+ triggered: false,
41
+ decision,
42
+ message: `Replan attempted but failed: ${String(err)}`,
43
+ };
44
+ }
45
+ }
46
+ shouldTrigger(health, risk, milestoneStatus) {
47
+ // Critical: abort conditions
48
+ if (health.recommendation === "abort") {
49
+ return {
50
+ shouldReplan: true,
51
+ scope: "strategic",
52
+ trigger: "Plan health critical",
53
+ urgency: "critical",
54
+ reasoning: `Health score ${health.score}/100, recommendation: abort`,
55
+ };
56
+ }
57
+ // High risk → strategic replan
58
+ if (risk.overall >= 85) {
59
+ return {
60
+ shouldReplan: true,
61
+ scope: "strategic",
62
+ trigger: `Risk score ${risk.overall}/100`,
63
+ urgency: "critical",
64
+ reasoning: risk.factors.join("; "),
65
+ };
66
+ }
67
+ // Medium-high risk → tactical replan
68
+ if (risk.overall >= 70) {
69
+ return {
70
+ shouldReplan: true,
71
+ scope: "tactical",
72
+ trigger: `Elevated risk: ${risk.overall}/100`,
73
+ urgency: "high",
74
+ reasoning: risk.factors.join("; "),
75
+ };
76
+ }
77
+ // Major health issues → major replan
78
+ if (health.recommendation === "replan_major") {
79
+ return {
80
+ shouldReplan: true,
81
+ scope: "tactical",
82
+ trigger: "Plan health deteriorated",
83
+ urgency: "high",
84
+ reasoning: health.deviations.map(d => d.description).join("; "),
85
+ };
86
+ }
87
+ // Milestone misses
88
+ if (milestoneStatus.consecutiveMisses >= 2) {
89
+ return {
90
+ shouldReplan: true,
91
+ scope: "tactical",
92
+ trigger: `${milestoneStatus.consecutiveMisses} consecutive milestone misses`,
93
+ urgency: "high",
94
+ reasoning: "Falling behind schedule",
95
+ };
96
+ }
97
+ // Minor issues → minor replan
98
+ if (health.recommendation === "replan_minor") {
99
+ return {
100
+ shouldReplan: true,
101
+ scope: "operational",
102
+ trigger: "Minor plan deviations",
103
+ urgency: "medium",
104
+ reasoning: health.deviations.map(d => d.description).join("; "),
105
+ };
106
+ }
107
+ return {
108
+ shouldReplan: false,
109
+ scope: "none",
110
+ trigger: "",
111
+ urgency: "low",
112
+ reasoning: "Plan healthy",
113
+ };
114
+ }
115
+ async executeReplan(plan, decision, _currentState, llmClient) {
116
+ const triggerType = decision.scope === "strategic" ? "strategic" : "error";
117
+ const severity = decision.urgency === "critical" ? "critical" :
118
+ decision.urgency === "high" ? "major" :
119
+ "minor";
120
+ const trigger = {
121
+ type: triggerType,
122
+ description: `[Proactive] ${decision.trigger}: ${decision.reasoning}`,
123
+ affectedTaskIds: [],
124
+ severity,
125
+ };
126
+ const result = await this.planner.replan(plan, trigger, llmClient);
127
+ return result.modifiedTasks;
128
+ }
129
+ }
130
+ //# sourceMappingURL=replanning-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replanning-engine.js","sourceRoot":"","sources":["../../src/planner/replanning-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @module planner/risk-estimator
3
+ * @description Estimates execution risk across multiple dimensions:
4
+ * build, test, scope, dependency, and token budget.
5
+ * Used by the autonomous planner to decide when to pause, re-plan, or alert.
6
+ */
7
+ import type { ImpactAnalyzer } from "../impact-analyzer.js";
8
+ import type { TransitionModel } from "../world-model/transition-model.js";
9
+ import type { WorldState } from "../world-model/state-store.js";
10
+ import type { TacticalTask } from "../hierarchical-planner.js";
11
+ export interface RiskComponents {
12
+ buildRisk: number;
13
+ testRisk: number;
14
+ scopeRisk: number;
15
+ dependencyRisk: number;
16
+ tokenRisk: number;
17
+ }
18
+ export interface RiskScore {
19
+ overall: number;
20
+ components: RiskComponents;
21
+ factors: string[];
22
+ mitigations: string[];
23
+ level: "low" | "medium" | "high" | "critical";
24
+ }
25
+ export declare class RiskEstimator {
26
+ private transitionModel;
27
+ private impactAnalyzer;
28
+ constructor(transitionModel: TransitionModel, impactAnalyzer: ImpactAnalyzer);
29
+ /**
30
+ * Estimate overall risk given current world state, remaining tasks, and resource usage.
31
+ */
32
+ estimate(currentState: WorldState, remainingTasks: TacticalTask[], completedTasks: TacticalTask[], changedFiles: string[], tokensUsed: number, tokenBudget: number): Promise<RiskScore>;
33
+ /**
34
+ * Estimate risk for a single task given the current world state.
35
+ * Returns a 0-100 score.
36
+ */
37
+ estimateTaskRisk(task: TacticalTask, state: WorldState): Promise<number>;
38
+ /**
39
+ * Returns true if the risk score's overall value meets or exceeds the threshold.
40
+ * Default threshold is 70 ("high").
41
+ */
42
+ isHighRisk(score: RiskScore, threshold?: number): boolean;
43
+ }
44
+ //# sourceMappingURL=risk-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-estimator.d.ts","sourceRoot":"","sources":["../../src/planner/risk-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CAC/C;AAID,qBAAa,aAAa;IAEtB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;gBADd,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc;IAGxC;;OAEG;IACG,QAAQ,CACZ,YAAY,EAAE,UAAU,EACxB,cAAc,EAAE,YAAY,EAAE,EAC9B,cAAc,EAAE,YAAY,EAAE,EAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC;IA6ErB;;;OAGG;IACG,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB9E;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,SAAK,GAAG,OAAO;CAGtD"}