@soleri/core 2.0.2 → 2.4.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.
Files changed (226) hide show
  1. package/dist/brain/brain.d.ts +14 -50
  2. package/dist/brain/brain.d.ts.map +1 -1
  3. package/dist/brain/brain.js +207 -16
  4. package/dist/brain/brain.js.map +1 -1
  5. package/dist/brain/intelligence.d.ts +86 -0
  6. package/dist/brain/intelligence.d.ts.map +1 -0
  7. package/dist/brain/intelligence.js +771 -0
  8. package/dist/brain/intelligence.js.map +1 -0
  9. package/dist/brain/types.d.ts +197 -0
  10. package/dist/brain/types.d.ts.map +1 -0
  11. package/dist/brain/types.js +2 -0
  12. package/dist/brain/types.js.map +1 -0
  13. package/dist/cognee/client.d.ts +35 -0
  14. package/dist/cognee/client.d.ts.map +1 -0
  15. package/dist/cognee/client.js +291 -0
  16. package/dist/cognee/client.js.map +1 -0
  17. package/dist/cognee/types.d.ts +46 -0
  18. package/dist/cognee/types.d.ts.map +1 -0
  19. package/dist/cognee/types.js +3 -0
  20. package/dist/cognee/types.js.map +1 -0
  21. package/dist/control/identity-manager.d.ts +22 -0
  22. package/dist/control/identity-manager.d.ts.map +1 -0
  23. package/dist/control/identity-manager.js +233 -0
  24. package/dist/control/identity-manager.js.map +1 -0
  25. package/dist/control/intent-router.d.ts +32 -0
  26. package/dist/control/intent-router.d.ts.map +1 -0
  27. package/dist/control/intent-router.js +242 -0
  28. package/dist/control/intent-router.js.map +1 -0
  29. package/dist/control/types.d.ts +68 -0
  30. package/dist/control/types.d.ts.map +1 -0
  31. package/dist/control/types.js +9 -0
  32. package/dist/control/types.js.map +1 -0
  33. package/dist/curator/curator.d.ts +29 -0
  34. package/dist/curator/curator.d.ts.map +1 -1
  35. package/dist/curator/curator.js +142 -5
  36. package/dist/curator/curator.js.map +1 -1
  37. package/dist/facades/types.d.ts +1 -1
  38. package/dist/governance/governance.d.ts +42 -0
  39. package/dist/governance/governance.d.ts.map +1 -0
  40. package/dist/governance/governance.js +488 -0
  41. package/dist/governance/governance.js.map +1 -0
  42. package/dist/governance/index.d.ts +3 -0
  43. package/dist/governance/index.d.ts.map +1 -0
  44. package/dist/governance/index.js +2 -0
  45. package/dist/governance/index.js.map +1 -0
  46. package/dist/governance/types.d.ts +102 -0
  47. package/dist/governance/types.d.ts.map +1 -0
  48. package/dist/governance/types.js +3 -0
  49. package/dist/governance/types.js.map +1 -0
  50. package/dist/index.d.ts +35 -3
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +32 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/llm/llm-client.d.ts.map +1 -1
  55. package/dist/llm/llm-client.js +9 -2
  56. package/dist/llm/llm-client.js.map +1 -1
  57. package/dist/logging/logger.d.ts +37 -0
  58. package/dist/logging/logger.d.ts.map +1 -0
  59. package/dist/logging/logger.js +145 -0
  60. package/dist/logging/logger.js.map +1 -0
  61. package/dist/logging/types.d.ts +19 -0
  62. package/dist/logging/types.d.ts.map +1 -0
  63. package/dist/logging/types.js +2 -0
  64. package/dist/logging/types.js.map +1 -0
  65. package/dist/loop/loop-manager.d.ts +49 -0
  66. package/dist/loop/loop-manager.d.ts.map +1 -0
  67. package/dist/loop/loop-manager.js +105 -0
  68. package/dist/loop/loop-manager.js.map +1 -0
  69. package/dist/loop/types.d.ts +35 -0
  70. package/dist/loop/types.d.ts.map +1 -0
  71. package/dist/loop/types.js +8 -0
  72. package/dist/loop/types.js.map +1 -0
  73. package/dist/planning/gap-analysis.d.ts +29 -0
  74. package/dist/planning/gap-analysis.d.ts.map +1 -0
  75. package/dist/planning/gap-analysis.js +265 -0
  76. package/dist/planning/gap-analysis.js.map +1 -0
  77. package/dist/planning/gap-types.d.ts +29 -0
  78. package/dist/planning/gap-types.d.ts.map +1 -0
  79. package/dist/planning/gap-types.js +28 -0
  80. package/dist/planning/gap-types.js.map +1 -0
  81. package/dist/planning/planner.d.ts +150 -1
  82. package/dist/planning/planner.d.ts.map +1 -1
  83. package/dist/planning/planner.js +365 -2
  84. package/dist/planning/planner.js.map +1 -1
  85. package/dist/project/project-registry.d.ts +79 -0
  86. package/dist/project/project-registry.d.ts.map +1 -0
  87. package/dist/project/project-registry.js +276 -0
  88. package/dist/project/project-registry.js.map +1 -0
  89. package/dist/project/types.d.ts +28 -0
  90. package/dist/project/types.d.ts.map +1 -0
  91. package/dist/project/types.js +5 -0
  92. package/dist/project/types.js.map +1 -0
  93. package/dist/runtime/admin-extra-ops.d.ts +13 -0
  94. package/dist/runtime/admin-extra-ops.d.ts.map +1 -0
  95. package/dist/runtime/admin-extra-ops.js +284 -0
  96. package/dist/runtime/admin-extra-ops.js.map +1 -0
  97. package/dist/runtime/admin-ops.d.ts +15 -0
  98. package/dist/runtime/admin-ops.d.ts.map +1 -0
  99. package/dist/runtime/admin-ops.js +322 -0
  100. package/dist/runtime/admin-ops.js.map +1 -0
  101. package/dist/runtime/capture-ops.d.ts +15 -0
  102. package/dist/runtime/capture-ops.d.ts.map +1 -0
  103. package/dist/runtime/capture-ops.js +345 -0
  104. package/dist/runtime/capture-ops.js.map +1 -0
  105. package/dist/runtime/core-ops.d.ts +7 -3
  106. package/dist/runtime/core-ops.d.ts.map +1 -1
  107. package/dist/runtime/core-ops.js +646 -15
  108. package/dist/runtime/core-ops.js.map +1 -1
  109. package/dist/runtime/curator-extra-ops.d.ts +9 -0
  110. package/dist/runtime/curator-extra-ops.d.ts.map +1 -0
  111. package/dist/runtime/curator-extra-ops.js +59 -0
  112. package/dist/runtime/curator-extra-ops.js.map +1 -0
  113. package/dist/runtime/domain-ops.d.ts.map +1 -1
  114. package/dist/runtime/domain-ops.js +59 -13
  115. package/dist/runtime/domain-ops.js.map +1 -1
  116. package/dist/runtime/grading-ops.d.ts +14 -0
  117. package/dist/runtime/grading-ops.d.ts.map +1 -0
  118. package/dist/runtime/grading-ops.js +105 -0
  119. package/dist/runtime/grading-ops.js.map +1 -0
  120. package/dist/runtime/loop-ops.d.ts +13 -0
  121. package/dist/runtime/loop-ops.d.ts.map +1 -0
  122. package/dist/runtime/loop-ops.js +179 -0
  123. package/dist/runtime/loop-ops.js.map +1 -0
  124. package/dist/runtime/memory-cross-project-ops.d.ts +12 -0
  125. package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -0
  126. package/dist/runtime/memory-cross-project-ops.js +165 -0
  127. package/dist/runtime/memory-cross-project-ops.js.map +1 -0
  128. package/dist/runtime/memory-extra-ops.d.ts +13 -0
  129. package/dist/runtime/memory-extra-ops.d.ts.map +1 -0
  130. package/dist/runtime/memory-extra-ops.js +173 -0
  131. package/dist/runtime/memory-extra-ops.js.map +1 -0
  132. package/dist/runtime/orchestrate-ops.d.ts +17 -0
  133. package/dist/runtime/orchestrate-ops.d.ts.map +1 -0
  134. package/dist/runtime/orchestrate-ops.js +240 -0
  135. package/dist/runtime/orchestrate-ops.js.map +1 -0
  136. package/dist/runtime/planning-extra-ops.d.ts +17 -0
  137. package/dist/runtime/planning-extra-ops.d.ts.map +1 -0
  138. package/dist/runtime/planning-extra-ops.js +300 -0
  139. package/dist/runtime/planning-extra-ops.js.map +1 -0
  140. package/dist/runtime/project-ops.d.ts +15 -0
  141. package/dist/runtime/project-ops.d.ts.map +1 -0
  142. package/dist/runtime/project-ops.js +181 -0
  143. package/dist/runtime/project-ops.js.map +1 -0
  144. package/dist/runtime/runtime.d.ts.map +1 -1
  145. package/dist/runtime/runtime.js +48 -1
  146. package/dist/runtime/runtime.js.map +1 -1
  147. package/dist/runtime/types.d.ts +23 -0
  148. package/dist/runtime/types.d.ts.map +1 -1
  149. package/dist/runtime/vault-extra-ops.d.ts +9 -0
  150. package/dist/runtime/vault-extra-ops.d.ts.map +1 -0
  151. package/dist/runtime/vault-extra-ops.js +195 -0
  152. package/dist/runtime/vault-extra-ops.js.map +1 -0
  153. package/dist/telemetry/telemetry.d.ts +48 -0
  154. package/dist/telemetry/telemetry.d.ts.map +1 -0
  155. package/dist/telemetry/telemetry.js +87 -0
  156. package/dist/telemetry/telemetry.js.map +1 -0
  157. package/dist/vault/vault.d.ts +94 -0
  158. package/dist/vault/vault.d.ts.map +1 -1
  159. package/dist/vault/vault.js +340 -1
  160. package/dist/vault/vault.js.map +1 -1
  161. package/package.json +1 -1
  162. package/src/__tests__/admin-extra-ops.test.ts +420 -0
  163. package/src/__tests__/admin-ops.test.ts +271 -0
  164. package/src/__tests__/brain-intelligence.test.ts +828 -0
  165. package/src/__tests__/brain.test.ts +396 -27
  166. package/src/__tests__/capture-ops.test.ts +509 -0
  167. package/src/__tests__/cognee-client.test.ts +524 -0
  168. package/src/__tests__/core-ops.test.ts +341 -49
  169. package/src/__tests__/curator-extra-ops.test.ts +359 -0
  170. package/src/__tests__/curator.test.ts +126 -31
  171. package/src/__tests__/domain-ops.test.ts +111 -9
  172. package/src/__tests__/governance.test.ts +522 -0
  173. package/src/__tests__/grading-ops.test.ts +340 -0
  174. package/src/__tests__/identity-manager.test.ts +243 -0
  175. package/src/__tests__/intent-router.test.ts +222 -0
  176. package/src/__tests__/logger.test.ts +200 -0
  177. package/src/__tests__/loop-ops.test.ts +398 -0
  178. package/src/__tests__/memory-cross-project-ops.test.ts +246 -0
  179. package/src/__tests__/memory-extra-ops.test.ts +352 -0
  180. package/src/__tests__/orchestrate-ops.test.ts +284 -0
  181. package/src/__tests__/planner.test.ts +331 -0
  182. package/src/__tests__/planning-extra-ops.test.ts +548 -0
  183. package/src/__tests__/project-ops.test.ts +367 -0
  184. package/src/__tests__/runtime.test.ts +13 -11
  185. package/src/__tests__/vault-extra-ops.test.ts +407 -0
  186. package/src/brain/brain.ts +308 -72
  187. package/src/brain/intelligence.ts +1230 -0
  188. package/src/brain/types.ts +214 -0
  189. package/src/cognee/client.ts +352 -0
  190. package/src/cognee/types.ts +62 -0
  191. package/src/control/identity-manager.ts +354 -0
  192. package/src/control/intent-router.ts +326 -0
  193. package/src/control/types.ts +102 -0
  194. package/src/curator/curator.ts +265 -15
  195. package/src/governance/governance.ts +698 -0
  196. package/src/governance/index.ts +18 -0
  197. package/src/governance/types.ts +111 -0
  198. package/src/index.ts +128 -3
  199. package/src/llm/llm-client.ts +18 -24
  200. package/src/logging/logger.ts +154 -0
  201. package/src/logging/types.ts +21 -0
  202. package/src/loop/loop-manager.ts +130 -0
  203. package/src/loop/types.ts +44 -0
  204. package/src/planning/gap-analysis.ts +506 -0
  205. package/src/planning/gap-types.ts +58 -0
  206. package/src/planning/planner.ts +478 -2
  207. package/src/project/project-registry.ts +358 -0
  208. package/src/project/types.ts +31 -0
  209. package/src/runtime/admin-extra-ops.ts +307 -0
  210. package/src/runtime/admin-ops.ts +329 -0
  211. package/src/runtime/capture-ops.ts +385 -0
  212. package/src/runtime/core-ops.ts +747 -26
  213. package/src/runtime/curator-extra-ops.ts +71 -0
  214. package/src/runtime/domain-ops.ts +65 -13
  215. package/src/runtime/grading-ops.ts +121 -0
  216. package/src/runtime/loop-ops.ts +194 -0
  217. package/src/runtime/memory-cross-project-ops.ts +192 -0
  218. package/src/runtime/memory-extra-ops.ts +186 -0
  219. package/src/runtime/orchestrate-ops.ts +272 -0
  220. package/src/runtime/planning-extra-ops.ts +327 -0
  221. package/src/runtime/project-ops.ts +196 -0
  222. package/src/runtime/runtime.ts +54 -1
  223. package/src/runtime/types.ts +23 -0
  224. package/src/runtime/vault-extra-ops.ts +225 -0
  225. package/src/telemetry/telemetry.ts +118 -0
  226. package/src/vault/vault.ts +412 -1
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Loop system types — iterative validation loop state tracking.
3
+ *
4
+ * Loops let agents run validate-fix-validate cycles (e.g. token migration,
5
+ * contrast fixes, component builds). In-memory only — session-scoped.
6
+ */
7
+ /** Supported loop modes — each maps to a different validation strategy. */
8
+ export type LoopMode = 'token-migration' | 'contrast-fix' | 'component-build' | 'plan-iteration' | 'custom';
9
+ /** Configuration for starting a new loop. */
10
+ export interface LoopConfig {
11
+ mode: LoopMode;
12
+ prompt: string;
13
+ maxIterations: number;
14
+ targetScore?: number;
15
+ }
16
+ /** A single iteration result within a loop. */
17
+ export interface LoopIteration {
18
+ iteration: number;
19
+ timestamp: string;
20
+ validationScore?: number;
21
+ validationResult?: string;
22
+ passed: boolean;
23
+ }
24
+ /** Loop lifecycle status. */
25
+ export type LoopStatus = 'active' | 'completed' | 'cancelled' | 'max-iterations';
26
+ /** Full state of a loop (active or historical). */
27
+ export interface LoopState {
28
+ id: string;
29
+ config: LoopConfig;
30
+ iterations: LoopIteration[];
31
+ status: LoopStatus;
32
+ startedAt: string;
33
+ completedAt?: string;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/loop/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,QAAQ,GAChB,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,gBAAgB,GAChB,QAAQ,CAAC;AAEb,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,6BAA6B;AAC7B,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAEjF,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Loop system types — iterative validation loop state tracking.
3
+ *
4
+ * Loops let agents run validate-fix-validate cycles (e.g. token migration,
5
+ * contrast fixes, component builds). In-memory only — session-scoped.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/loop/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 6-pass gap analysis engine for plan grading.
3
+ * Ported from Salvador MCP's plan-gap-content.ts / plan-gap-technical.ts.
4
+ *
5
+ * Passes:
6
+ * 1. Structure — required fields present and sufficiently long
7
+ * 2. Completeness — measurable objectives, decision rationale, scope exclusions
8
+ * 3. Feasibility — overly broad scope, missing dependency awareness
9
+ * 4. Risk — breaking changes without mitigation, missing verification
10
+ * 5. Clarity — ambiguous language, vague criteria
11
+ * 6. Semantic Quality — generic objectives, shallow rationale, non-concrete approach
12
+ */
13
+ import type { Plan } from './planner.js';
14
+ import type { PlanGap } from './gap-types.js';
15
+ /** A custom gap analysis pass that agents can register. */
16
+ export type GapAnalysisPass = (plan: Plan) => PlanGap[];
17
+ export interface GapAnalysisOptions {
18
+ /** Custom gap analysis passes appended after the 6 built-in passes. */
19
+ customPasses?: GapAnalysisPass[];
20
+ }
21
+ /**
22
+ * Run all 6 built-in gap analysis passes on a plan, plus any custom passes.
23
+ * Returns a combined list of all gaps found, ordered by pass.
24
+ *
25
+ * @param plan - The plan to analyze
26
+ * @param options - Optional config with custom passes for domain-specific checks
27
+ */
28
+ export declare function runGapAnalysis(plan: Plan, options?: GapAnalysisOptions): PlanGap[];
29
+ //# sourceMappingURL=gap-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap-analysis.d.ts","sourceRoot":"","sources":["../../src/planning/gap-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,gBAAgB,CAAC;AAwcxE,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,EAAE,CAkBlF"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * 6-pass gap analysis engine for plan grading.
3
+ * Ported from Salvador MCP's plan-gap-content.ts / plan-gap-technical.ts.
4
+ *
5
+ * Passes:
6
+ * 1. Structure — required fields present and sufficiently long
7
+ * 2. Completeness — measurable objectives, decision rationale, scope exclusions
8
+ * 3. Feasibility — overly broad scope, missing dependency awareness
9
+ * 4. Risk — breaking changes without mitigation, missing verification
10
+ * 5. Clarity — ambiguous language, vague criteria
11
+ * 6. Semantic Quality — generic objectives, shallow rationale, non-concrete approach
12
+ */
13
+ import { generateGapId, MIN_OBJECTIVE_LENGTH, MIN_SCOPE_LENGTH, MIN_DECISION_LENGTH, } from './gap-types.js';
14
+ // ─── Helpers ─────────────────────────────────────────────────────
15
+ function gap(severity, category, description, recommendation, location, trigger) {
16
+ return {
17
+ id: generateGapId(),
18
+ severity,
19
+ category,
20
+ description,
21
+ recommendation,
22
+ ...(location ? { location } : {}),
23
+ ...(trigger ? { _trigger: trigger } : {}),
24
+ };
25
+ }
26
+ /** Combine all task descriptions + titles into a single text blob for analysis. */
27
+ function taskText(plan) {
28
+ return plan.tasks.map((t) => `${t.title} ${t.description}`).join(' ');
29
+ }
30
+ /** Check if text contains any of the given patterns (case-insensitive). */
31
+ function containsAny(text, patterns) {
32
+ const lower = text.toLowerCase();
33
+ return patterns.some((p) => lower.includes(p.toLowerCase()));
34
+ }
35
+ // ─── Pass 1: Structure ───────────────────────────────────────────
36
+ function analyzeStructure(plan) {
37
+ const gaps = [];
38
+ if (!plan.objective || plan.objective.trim().length < MIN_OBJECTIVE_LENGTH) {
39
+ gaps.push(gap('critical', 'structure', plan.objective
40
+ ? `Objective too short (${plan.objective.trim().length} chars, need ${MIN_OBJECTIVE_LENGTH}+).`
41
+ : 'Plan has no objective.', 'Add a clear objective describing what this plan achieves.', 'objective', 'missing_or_short_objective'));
42
+ }
43
+ if (!plan.scope || plan.scope.trim().length < MIN_SCOPE_LENGTH) {
44
+ gaps.push(gap('critical', 'structure', plan.scope
45
+ ? `Scope too short (${plan.scope.trim().length} chars, need ${MIN_SCOPE_LENGTH}+).`
46
+ : 'Plan has no scope defined.', 'Define the scope — what is included and excluded.', 'scope', 'missing_or_short_scope'));
47
+ }
48
+ if (plan.tasks.length === 0) {
49
+ gaps.push(gap('critical', 'structure', 'Plan has no tasks.', 'Add at least one task to make the plan actionable.', 'tasks', 'no_tasks'));
50
+ }
51
+ return gaps;
52
+ }
53
+ // ─── Pass 2: Completeness ────────────────────────────────────────
54
+ const METRIC_PATTERNS = [
55
+ /\d+/,
56
+ /percent/i,
57
+ /reduce/i,
58
+ /increase/i,
59
+ /measure/i,
60
+ /target/i,
61
+ /goal/i,
62
+ /kpi/i,
63
+ /metric/i,
64
+ /benchmark/i,
65
+ ];
66
+ const EXCLUSION_KEYWORDS = ['not', 'exclude', 'outside', 'beyond', 'limit', 'except', 'won\'t', 'will not'];
67
+ function analyzeCompleteness(plan) {
68
+ const gaps = [];
69
+ // Objective lacks measurable indicators
70
+ if (plan.objective && !METRIC_PATTERNS.some((p) => p.test(plan.objective))) {
71
+ gaps.push(gap('minor', 'completeness', 'Objective has no measurable targets or metrics.', 'Include quantifiable success criteria (numbers, percentages, concrete outcomes).', 'objective', 'no_metrics_in_objective'));
72
+ }
73
+ // Decisions without rationale-like content
74
+ if (plan.decisions.length > 0) {
75
+ for (let i = 0; i < plan.decisions.length; i++) {
76
+ const d = plan.decisions[i];
77
+ if (d.trim().length < MIN_DECISION_LENGTH) {
78
+ gaps.push(gap('major', 'completeness', `Decision ${i + 1} is too short (${d.trim().length} chars) — lacks rationale.`, 'Expand each decision to include the reasoning (why this choice over alternatives).', `decisions[${i}]`, 'short_decision'));
79
+ }
80
+ }
81
+ }
82
+ // Scope missing exclusions
83
+ if (plan.scope && !containsAny(plan.scope, EXCLUSION_KEYWORDS)) {
84
+ gaps.push(gap('minor', 'completeness', 'Scope does not mention what is excluded.', 'Add explicit exclusions to prevent scope creep (e.g., "does NOT include…").', 'scope', 'no_exclusions_in_scope'));
85
+ }
86
+ return gaps;
87
+ }
88
+ // ─── Pass 3: Feasibility ─────────────────────────────────────────
89
+ const OVERLY_BROAD_PATTERNS = [
90
+ 'everything',
91
+ 'all systems',
92
+ 'entire codebase',
93
+ 'complete rewrite',
94
+ 'from scratch',
95
+ 'total overhaul',
96
+ 'rewrite everything',
97
+ ];
98
+ const DEPENDENCY_KEYWORDS = ['depends', 'dependency', 'prerequisite', 'requires', 'blocked', 'before'];
99
+ function analyzeFeasibility(plan) {
100
+ const gaps = [];
101
+ const scopeAndTasks = `${plan.scope} ${taskText(plan)}`;
102
+ // Overly broad scope
103
+ if (containsAny(scopeAndTasks, OVERLY_BROAD_PATTERNS)) {
104
+ gaps.push(gap('major', 'feasibility', 'Scope contains overly broad indicators — risk of unrealistic delivery.', 'Narrow the scope to a well-defined subset. Prefer incremental delivery over big-bang rewrites.', 'scope', 'overly_broad_scope'));
105
+ }
106
+ // No dependency awareness in tasks
107
+ if (plan.tasks.length > 3 && !containsAny(scopeAndTasks, DEPENDENCY_KEYWORDS)) {
108
+ const hasDeps = plan.tasks.some((t) => t.dependsOn && t.dependsOn.length > 0);
109
+ if (!hasDeps) {
110
+ gaps.push(gap('minor', 'feasibility', `${plan.tasks.length} tasks with no dependency mentions — execution order unclear.`, 'Identify dependencies between tasks or add explicit ordering notes.', 'tasks', 'no_dependency_awareness'));
111
+ }
112
+ }
113
+ return gaps;
114
+ }
115
+ // ─── Pass 4: Risk ────────────────────────────────────────────────
116
+ const BREAKING_CHANGE_KEYWORDS = [
117
+ 'breaking change',
118
+ 'breaking',
119
+ 'migration',
120
+ 'deprecate',
121
+ 'remove api',
122
+ 'remove endpoint',
123
+ 'schema change',
124
+ 'database migration',
125
+ ];
126
+ const MITIGATION_KEYWORDS = [
127
+ 'rollback',
128
+ 'backward compatible',
129
+ 'backwards compatible',
130
+ 'feature flag',
131
+ 'gradual',
132
+ 'phased',
133
+ 'fallback',
134
+ 'backup',
135
+ 'canary',
136
+ 'blue-green',
137
+ ];
138
+ const VERIFICATION_KEYWORDS = ['test', 'verify', 'validate', 'check', 'assert', 'confirm', 'spec', 'coverage'];
139
+ function analyzeRisk(plan) {
140
+ const gaps = [];
141
+ const allText = `${plan.objective} ${plan.scope} ${taskText(plan)} ${plan.decisions.join(' ')}`;
142
+ // Breaking changes without mitigation
143
+ if (containsAny(allText, BREAKING_CHANGE_KEYWORDS) && !containsAny(allText, MITIGATION_KEYWORDS)) {
144
+ gaps.push(gap('major', 'risk', 'Plan involves breaking changes but mentions no mitigation strategy.', 'Add a rollback plan, feature flags, or phased migration approach.', undefined, 'breaking_without_mitigation'));
145
+ }
146
+ // No verification/testing mentioned
147
+ if (plan.tasks.length > 0 && !containsAny(allText, VERIFICATION_KEYWORDS)) {
148
+ gaps.push(gap('minor', 'risk', 'No verification or testing mentioned in the plan.', 'Add at least one task or note about testing/validation.', 'tasks', 'no_verification_mentioned'));
149
+ }
150
+ return gaps;
151
+ }
152
+ // ─── Pass 5: Clarity ─────────────────────────────────────────────
153
+ const AMBIGUOUS_WORDS = [
154
+ 'maybe',
155
+ 'perhaps',
156
+ 'might',
157
+ 'could',
158
+ 'some',
159
+ 'etc',
160
+ 'soon',
161
+ 'simple',
162
+ 'easy',
163
+ 'appropriate',
164
+ 'various',
165
+ 'several',
166
+ 'probably',
167
+ 'possibly',
168
+ 'somehow',
169
+ ];
170
+ function analyzeClarity(plan) {
171
+ const gaps = [];
172
+ const allText = `${plan.objective} ${plan.scope} ${plan.decisions.join(' ')}`;
173
+ const lower = allText.toLowerCase();
174
+ // Ambiguous language
175
+ const found = AMBIGUOUS_WORDS.filter((w) => {
176
+ const regex = new RegExp(`\\b${w}\\b`, 'i');
177
+ return regex.test(lower);
178
+ });
179
+ if (found.length > 0) {
180
+ gaps.push(gap('minor', 'clarity', `Ambiguous language detected: ${found.slice(0, 5).join(', ')}${found.length > 5 ? ` (+${found.length - 5} more)` : ''}.`, 'Replace vague terms with concrete, specific language.', undefined, `ambiguous_words:${found.join(',')}`));
181
+ }
182
+ // Tasks with very short or missing descriptions
183
+ const shortTasks = plan.tasks.filter((t) => !t.description || t.description.trim().length < 10);
184
+ if (shortTasks.length > 0) {
185
+ gaps.push(gap('minor', 'clarity', `${shortTasks.length} task(s) with very short descriptions: ${shortTasks.map((t) => t.id).join(', ')}.`, 'Add detailed descriptions to all tasks explaining what needs to be done.', 'tasks', 'short_task_descriptions'));
186
+ }
187
+ return gaps;
188
+ }
189
+ // ─── Pass 6: Semantic Quality ────────────────────────────────────
190
+ const GENERIC_OBJECTIVE_PATTERNS = [
191
+ /^(create|build|implement|add|make|do)\s+\w+$/i,
192
+ /^fix\s+\w+$/i,
193
+ /^update\s+\w+$/i,
194
+ ];
195
+ const RATIONALE_INDICATORS = ['because', 'since', 'due to', 'in order to', 'so that', 'given that', 'as a result'];
196
+ const SHALLOW_INDICATORS = ['better', 'good', 'best', 'nice', 'great', 'improved'];
197
+ function analyzeSemanticQuality(plan) {
198
+ const gaps = [];
199
+ // Generic/too-short objective
200
+ if (plan.objective) {
201
+ const words = plan.objective.trim().split(/\s+/);
202
+ const isGeneric = GENERIC_OBJECTIVE_PATTERNS.some((p) => p.test(plan.objective.trim()));
203
+ if (isGeneric || words.length < 5) {
204
+ gaps.push(gap('major', 'semantic-quality', `Objective is too generic${words.length < 5 ? ` (${words.length} words)` : ''}: "${plan.objective.trim()}".`, 'Expand the objective to describe the specific outcome, context, and constraints.', 'objective', 'generic_objective'));
205
+ }
206
+ }
207
+ // Task granularity check (too few or too many)
208
+ if (plan.tasks.length > 0 && plan.tasks.length < 3) {
209
+ gaps.push(gap('minor', 'semantic-quality', `Only ${plan.tasks.length} task(s) — plan may lack sufficient breakdown.`, 'Break down the work into 3-15 well-defined tasks for better tracking.', 'tasks', 'too_few_tasks'));
210
+ }
211
+ else if (plan.tasks.length > 20) {
212
+ gaps.push(gap('major', 'semantic-quality', `${plan.tasks.length} tasks — plan scope may be too large.`, 'Split into multiple plans or consolidate related tasks to stay under 20.', 'tasks', 'too_many_tasks'));
213
+ }
214
+ // Decisions with shallow rationale (uses "better/good" without "because/since")
215
+ for (let i = 0; i < plan.decisions.length; i++) {
216
+ const d = plan.decisions[i];
217
+ const hasShallow = containsAny(d, SHALLOW_INDICATORS);
218
+ const hasRationale = containsAny(d, RATIONALE_INDICATORS);
219
+ if (hasShallow && !hasRationale) {
220
+ gaps.push(gap('minor', 'semantic-quality', `Decision ${i + 1} uses subjective language without justification.`, 'Replace "better/good/best" with concrete reasoning using "because/since/due to".', `decisions[${i}]`, 'shallow_rationale'));
221
+ }
222
+ }
223
+ // All task titles must be unique
224
+ const titleSet = new Set();
225
+ const duplicates = [];
226
+ for (const t of plan.tasks) {
227
+ if (titleSet.has(t.title))
228
+ duplicates.push(t.title);
229
+ titleSet.add(t.title);
230
+ }
231
+ if (duplicates.length > 0) {
232
+ gaps.push(gap('minor', 'semantic-quality', `Duplicate task titles: ${[...new Set(duplicates)].join(', ')}.`, 'Give each task a unique, descriptive title.', 'tasks', 'duplicate_task_titles'));
233
+ }
234
+ // No decisions at all for multi-task plans
235
+ if (plan.tasks.length >= 3 && plan.decisions.length === 0) {
236
+ gaps.push(gap('major', 'semantic-quality', `${plan.tasks.length} tasks but no decisions documented.`, 'Document key decisions and their rationale — at least 1 per 3 tasks.', 'decisions', 'no_decisions'));
237
+ }
238
+ return gaps;
239
+ }
240
+ // ─── Orchestrator ────────────────────────────────────────────────
241
+ /**
242
+ * Run all 6 built-in gap analysis passes on a plan, plus any custom passes.
243
+ * Returns a combined list of all gaps found, ordered by pass.
244
+ *
245
+ * @param plan - The plan to analyze
246
+ * @param options - Optional config with custom passes for domain-specific checks
247
+ */
248
+ export function runGapAnalysis(plan, options) {
249
+ const gaps = [
250
+ ...analyzeStructure(plan),
251
+ ...analyzeCompleteness(plan),
252
+ ...analyzeFeasibility(plan),
253
+ ...analyzeRisk(plan),
254
+ ...analyzeClarity(plan),
255
+ ...analyzeSemanticQuality(plan),
256
+ ];
257
+ // Run custom passes (domain-specific checks like tool-feasibility, UI context, etc.)
258
+ if (options?.customPasses) {
259
+ for (const pass of options.customPasses) {
260
+ gaps.push(...pass(plan));
261
+ }
262
+ }
263
+ return gaps;
264
+ }
265
+ //# sourceMappingURL=gap-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap-analysis.js","sourceRoot":"","sources":["../../src/planning/gap-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,oEAAoE;AAEpE,SAAS,GAAG,CACV,QAAqB,EACrB,QAAqB,EACrB,WAAmB,EACnB,cAAsB,EACtB,QAAiB,EACjB,OAAgB;IAEhB,OAAO;QACL,EAAE,EAAE,aAAa,EAAE;QACnB,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,cAAc;QACd,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,QAAQ,CAAC,IAAU;IAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,2EAA2E;AAC3E,SAAS,WAAW,CAAC,IAAY,EAAE,QAAkB;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,oEAAoE;AAEpE,SAAS,gBAAgB,CAAC,IAAU;IAClC,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;QAC3E,IAAI,CAAC,IAAI,CACP,GAAG,CACD,UAAU,EACV,WAAW,EACX,IAAI,CAAC,SAAS;YACZ,CAAC,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,gBAAgB,oBAAoB,KAAK;YAC/F,CAAC,CAAC,wBAAwB,EAC5B,2DAA2D,EAC3D,WAAW,EACX,4BAA4B,CAC7B,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CACP,GAAG,CACD,UAAU,EACV,WAAW,EACX,IAAI,CAAC,KAAK;YACR,CAAC,CAAC,oBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,gBAAgB,gBAAgB,KAAK;YACnF,CAAC,CAAC,4BAA4B,EAChC,mDAAmD,EACnD,OAAO,EACP,wBAAwB,CACzB,CACF,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CACP,GAAG,CACD,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,oDAAoD,EACpD,OAAO,EACP,UAAU,CACX,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AAEpE,MAAM,eAAe,GAAG;IACtB,KAAK;IACL,UAAU;IACV,SAAS;IACT,WAAW;IACX,UAAU;IACV,SAAS;IACT,OAAO;IACP,MAAM;IACN,SAAS;IACT,YAAY;CACb,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE5G,SAAS,mBAAmB,CAAC,IAAU;IACrC,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,wCAAwC;IACxC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,cAAc,EACd,iDAAiD,EACjD,kFAAkF,EAClF,WAAW,EACX,yBAAyB,CAC1B,CACF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,cAAc,EACd,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,4BAA4B,EAC9E,oFAAoF,EACpF,aAAa,CAAC,GAAG,EACjB,gBAAgB,CACjB,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,cAAc,EACd,0CAA0C,EAC1C,6EAA6E,EAC7E,OAAO,EACP,wBAAwB,CACzB,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AAEpE,MAAM,qBAAqB,GAAG;IAC5B,YAAY;IACZ,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;IACd,gBAAgB;IAChB,oBAAoB;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEvG,SAAS,kBAAkB,CAAC,IAAU;IACpC,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAExD,qBAAqB;IACrB,IAAI,WAAW,CAAC,aAAa,EAAE,qBAAqB,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,aAAa,EACb,wEAAwE,EACxE,gGAAgG,EAChG,OAAO,EACP,oBAAoB,CACrB,CACF,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,CAAC,EAAE,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,aAAa,EACb,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,+DAA+D,EACnF,qEAAqE,EACrE,OAAO,EACP,yBAAyB,CAC1B,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AAEpE,MAAM,wBAAwB,GAAG;IAC/B,iBAAiB;IACjB,UAAU;IACV,WAAW;IACX,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,eAAe;IACf,oBAAoB;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,UAAU;IACV,qBAAqB;IACrB,sBAAsB;IACtB,cAAc;IACd,SAAS;IACT,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,YAAY;CACb,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAE/G,SAAS,WAAW,CAAC,IAAU;IAC7B,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAEhG,sCAAsC;IACtC,IAAI,WAAW,CAAC,OAAO,EAAE,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,CAAC;QACjG,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,MAAM,EACN,qEAAqE,EACrE,mEAAmE,EACnE,SAAS,EACT,6BAA6B,CAC9B,CACF,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,MAAM,EACN,mDAAmD,EACnD,yDAAyD,EACzD,OAAO,EACP,2BAA2B,CAC5B,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AAEpE,MAAM,eAAe,GAAG;IACtB,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,QAAQ;IACR,MAAM;IACN,aAAa;IACb,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,SAAS;CACV,CAAC;AAEF,SAAS,cAAc,CAAC,IAAU;IAChC,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEpC,qBAAqB;IACrB,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,SAAS,EACT,gCAAgC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EACxH,uDAAuD,EACvD,SAAS,EACT,mBAAmB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACrC,CACF,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAC1D,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,SAAS,EACT,GAAG,UAAU,CAAC,MAAM,0CAA0C,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACvG,0EAA0E,EAC1E,OAAO,EACP,yBAAyB,CAC1B,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AAEpE,MAAM,0BAA0B,GAAG;IACjC,+CAA+C;IAC/C,cAAc;IACd,iBAAiB;CAClB,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AACnH,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAEnF,SAAS,sBAAsB,CAAC,IAAU;IACxC,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,8BAA8B;IAC9B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAExF,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,kBAAkB,EAClB,2BAA2B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAC5G,kFAAkF,EAClF,WAAW,EACX,mBAAmB,CACpB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,kBAAkB,EAClB,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,gDAAgD,EACzE,uEAAuE,EACvE,OAAO,EACP,eAAe,CAChB,CACF,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,kBAAkB,EAClB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,uCAAuC,EAC3D,0EAA0E,EAC1E,OAAO,EACP,gBAAgB,CACjB,CACF,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC1D,IAAI,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,kBAAkB,EAClB,YAAY,CAAC,GAAG,CAAC,kDAAkD,EACnE,kFAAkF,EAClF,aAAa,CAAC,GAAG,EACjB,mBAAmB,CACpB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,kBAAkB,EAClB,0BAA0B,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAChE,6CAA6C,EAC7C,OAAO,EACP,uBAAuB,CACxB,CACF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CACP,GAAG,CACD,OAAO,EACP,kBAAkB,EAClB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,qCAAqC,EACzD,sEAAsE,EACtE,WAAW,EACX,cAAc,CACf,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD,oEAAoE;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,OAA4B;IACrE,MAAM,IAAI,GAAG;QACX,GAAG,gBAAgB,CAAC,IAAI,CAAC;QACzB,GAAG,mBAAmB,CAAC,IAAI,CAAC;QAC5B,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC3B,GAAG,WAAW,CAAC,IAAI,CAAC;QACpB,GAAG,cAAc,CAAC,IAAI,CAAC;QACvB,GAAG,sBAAsB,CAAC,IAAI,CAAC;KAChC,CAAC;IAEF,qFAAqF;IACrF,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Gap analysis types and scoring constants.
3
+ * Ported from Salvador MCP's multi-pass grading engine.
4
+ */
5
+ export type GapSeverity = 'critical' | 'major' | 'minor' | 'info';
6
+ export type GapCategory = 'structure' | 'completeness' | 'feasibility' | 'risk' | 'clarity' | 'semantic-quality';
7
+ export interface PlanGap {
8
+ id: string;
9
+ severity: GapSeverity;
10
+ category: GapCategory;
11
+ description: string;
12
+ recommendation: string;
13
+ /** Where in the plan this gap was found (e.g. 'objective', 'tasks[2]'). */
14
+ location?: string;
15
+ /** Machine-readable condition that fired — debug aid only. */
16
+ _trigger?: string;
17
+ }
18
+ /** Points deducted per gap severity. */
19
+ export declare const SEVERITY_WEIGHTS: Record<GapSeverity, number>;
20
+ /**
21
+ * Maximum deduction per category.
22
+ * Categories not listed here have NO cap — uncapped deductions.
23
+ */
24
+ export declare const CATEGORY_PENALTY_CAPS: Record<string, number>;
25
+ export declare const MIN_OBJECTIVE_LENGTH = 10;
26
+ export declare const MIN_SCOPE_LENGTH = 10;
27
+ export declare const MIN_DECISION_LENGTH = 10;
28
+ export declare function generateGapId(): string;
29
+ //# sourceMappingURL=gap-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap-types.d.ts","sourceRoot":"","sources":["../../src/planning/gap-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAElE,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,cAAc,GACd,aAAa,GACb,MAAM,GACN,SAAS,GACT,kBAAkB,CAAC;AAEvB,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,wCAAwC;AACxC,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAKxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAExD,CAAC;AAIF,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAItC,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Gap analysis types and scoring constants.
3
+ * Ported from Salvador MCP's multi-pass grading engine.
4
+ */
5
+ // ─── Scoring Constants ───────────────────────────────────────────
6
+ /** Points deducted per gap severity. */
7
+ export const SEVERITY_WEIGHTS = {
8
+ critical: 30,
9
+ major: 15,
10
+ minor: 2,
11
+ info: 0,
12
+ };
13
+ /**
14
+ * Maximum deduction per category.
15
+ * Categories not listed here have NO cap — uncapped deductions.
16
+ */
17
+ export const CATEGORY_PENALTY_CAPS = {
18
+ clarity: 10,
19
+ };
20
+ // ─── Validation Thresholds ───────────────────────────────────────
21
+ export const MIN_OBJECTIVE_LENGTH = 10;
22
+ export const MIN_SCOPE_LENGTH = 10;
23
+ export const MIN_DECISION_LENGTH = 10;
24
+ // ─── Helpers ─────────────────────────────────────────────────────
25
+ export function generateGapId() {
26
+ return `gap_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
27
+ }
28
+ //# sourceMappingURL=gap-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap-types.js","sourceRoot":"","sources":["../../src/planning/gap-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,oEAAoE;AAEpE,wCAAwC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAgC;IAC3D,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;CACR,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,oEAAoE;AAEpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,oEAAoE;AAEpE,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC"}
@@ -1,3 +1,5 @@
1
+ import type { PlanGap } from './gap-types.js';
2
+ import type { GapAnalysisOptions } from './gap-analysis.js';
1
3
  export type PlanStatus = 'draft' | 'approved' | 'executing' | 'completed';
2
4
  export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'skipped' | 'failed';
3
5
  export interface PlanTask {
@@ -5,8 +7,50 @@ export interface PlanTask {
5
7
  title: string;
6
8
  description: string;
7
9
  status: TaskStatus;
10
+ /** Optional dependency IDs — tasks that must complete before this one. */
11
+ dependsOn?: string[];
8
12
  updatedAt: number;
9
13
  }
14
+ export interface DriftItem {
15
+ type: 'skipped' | 'added' | 'modified' | 'reordered';
16
+ description: string;
17
+ impact: 'low' | 'medium' | 'high';
18
+ rationale: string;
19
+ }
20
+ export interface ReconciliationReport {
21
+ planId: string;
22
+ accuracy: number;
23
+ driftItems: DriftItem[];
24
+ summary: string;
25
+ reconciledAt: number;
26
+ }
27
+ export interface ReviewEvidence {
28
+ planId: string;
29
+ taskId?: string;
30
+ reviewer: string;
31
+ outcome: 'approved' | 'rejected' | 'needs_changes';
32
+ comments: string;
33
+ reviewedAt: number;
34
+ }
35
+ export type PlanGrade = 'A+' | 'A' | 'B' | 'C' | 'D' | 'F';
36
+ export interface PlanCheck {
37
+ checkId: string;
38
+ planId: string;
39
+ grade: PlanGrade;
40
+ score: number;
41
+ gaps: PlanGap[];
42
+ iteration: number;
43
+ checkedAt: number;
44
+ }
45
+ /**
46
+ * Calculate score from gaps with severity-weighted deductions and iteration leniency.
47
+ * Ported from Salvador MCP's plan-grading.ts.
48
+ *
49
+ * - Minor gaps: weight=0 on iteration 1 (free sketching), weight=1 on iteration 2, full weight on 3+
50
+ * - Per-category deductions are capped before summing (prevents one category from tanking the score)
51
+ * - Score = max(0, 100 - totalDeductions)
52
+ */
53
+ export declare function calculateScore(gaps: PlanGap[], iteration?: number): number;
10
54
  export interface Plan {
11
55
  id: string;
12
56
  objective: string;
@@ -14,6 +58,14 @@ export interface Plan {
14
58
  status: PlanStatus;
15
59
  decisions: string[];
16
60
  tasks: PlanTask[];
61
+ /** Reconciliation report — populated by reconcile(). */
62
+ reconciliation?: ReconciliationReport;
63
+ /** Review evidence — populated by addReview(). */
64
+ reviews?: ReviewEvidence[];
65
+ /** Latest grading check. */
66
+ latestCheck?: PlanCheck;
67
+ /** All check history. */
68
+ checks: PlanCheck[];
17
69
  createdAt: number;
18
70
  updatedAt: number;
19
71
  }
@@ -24,7 +76,8 @@ export interface PlanStore {
24
76
  export declare class Planner {
25
77
  private filePath;
26
78
  private store;
27
- constructor(filePath: string);
79
+ private gapOptions?;
80
+ constructor(filePath: string, gapOptions?: GapAnalysisOptions);
28
81
  private load;
29
82
  private save;
30
83
  create(params: {
@@ -44,5 +97,101 @@ export declare class Planner {
44
97
  complete(planId: string): Plan;
45
98
  getExecuting(): Plan[];
46
99
  getActive(): Plan[];
100
+ /**
101
+ * Iterate on a draft plan — modify objective, scope, decisions, or tasks.
102
+ * Only allowed on plans in 'draft' status.
103
+ */
104
+ iterate(planId: string, changes: {
105
+ objective?: string;
106
+ scope?: string;
107
+ decisions?: string[];
108
+ addTasks?: Array<{
109
+ title: string;
110
+ description: string;
111
+ }>;
112
+ removeTasks?: string[];
113
+ }): Plan;
114
+ /**
115
+ * Split a plan's tasks into sub-tasks with dependency tracking.
116
+ * Replaces existing tasks with a new set that includes dependency references.
117
+ * Only allowed on 'draft' or 'approved' plans.
118
+ */
119
+ splitTasks(planId: string, tasks: Array<{
120
+ title: string;
121
+ description: string;
122
+ dependsOn?: string[];
123
+ }>): Plan;
124
+ /**
125
+ * Reconcile a plan — compare what was planned vs what actually happened.
126
+ * Only allowed on 'executing' or 'completed' plans.
127
+ */
128
+ reconcile(planId: string, report: {
129
+ actualOutcome: string;
130
+ driftItems?: DriftItem[];
131
+ }): Plan;
132
+ /**
133
+ * Add review evidence to a plan or specific task.
134
+ */
135
+ addReview(planId: string, review: {
136
+ taskId?: string;
137
+ reviewer: string;
138
+ outcome: 'approved' | 'rejected' | 'needs_changes';
139
+ comments: string;
140
+ }): Plan;
141
+ /**
142
+ * Get dispatch instructions for a specific task — returns the task and its
143
+ * unmet dependencies so a subagent knows what to work on and what to wait for.
144
+ */
145
+ getDispatch(planId: string, taskId: string): {
146
+ task: PlanTask;
147
+ unmetDependencies: PlanTask[];
148
+ ready: boolean;
149
+ };
150
+ /**
151
+ * Archive completed plans older than the given number of days.
152
+ * Removes them from the active store and returns the archived plans.
153
+ */
154
+ archive(olderThanDays: number): Plan[];
155
+ /**
156
+ * Get statistics about all plans.
157
+ */
158
+ stats(): {
159
+ total: number;
160
+ byStatus: Record<PlanStatus, number>;
161
+ avgTasksPerPlan: number;
162
+ totalTasks: number;
163
+ tasksByStatus: Record<TaskStatus, number>;
164
+ };
165
+ /**
166
+ * Grade a plan using 6-pass gap analysis with severity-weighted scoring.
167
+ * Ported from Salvador MCP's multi-pass grading engine.
168
+ *
169
+ * Scoring:
170
+ * - Each gap has a severity (critical=30, major=15, minor=2, info=0)
171
+ * - Deductions are per-category with optional caps
172
+ * - Iteration leniency: minor gaps free on iter 1, half on iter 2, full on 3+
173
+ * - Score = max(0, 100 - deductions)
174
+ *
175
+ * Grade thresholds: A+=95, A=90, B=80, C=70, D=60, F=<60
176
+ */
177
+ grade(planId: string): PlanCheck;
178
+ /**
179
+ * Get the latest check for a plan.
180
+ */
181
+ getLatestCheck(planId: string): PlanCheck | null;
182
+ /**
183
+ * Get all checks for a plan (history).
184
+ */
185
+ getCheckHistory(planId: string): PlanCheck[];
186
+ /**
187
+ * Auto-grade: grade the plan and return whether it meets a target grade.
188
+ */
189
+ meetsGrade(planId: string, targetGrade: PlanGrade): {
190
+ meets: boolean;
191
+ check: PlanCheck;
192
+ };
193
+ private scoreToGrade;
194
+ private gradeToMinScore;
195
+ private hasCircularDependencies;
47
196
  }
48
197
  //# sourceMappingURL=planner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/planning/planner.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAY;gBAEb,QAAQ,EAAE,MAAM;IAK5B,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,IAAI;IAKZ,MAAM,CAAC,MAAM,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvD,GAAG,IAAI;IAuBR,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhC,IAAI,IAAI,IAAI,EAAE;IAId,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW7B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWpC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAgBpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW9B,YAAY,IAAI,IAAI,EAAE;IAItB,SAAS,IAAI,IAAI,EAAE;CAKpB"}
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/planning/planner.ts"],"names":[],"mappings":"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"}