aura-code 0.6.3 → 0.10.2

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 (266) hide show
  1. package/README.md +47 -164
  2. package/dist/agent/affect.d.ts +13 -0
  3. package/dist/agent/affect.js +34 -0
  4. package/dist/agent/affect.js.map +1 -0
  5. package/dist/agent/compactor.d.ts +27 -4
  6. package/dist/agent/compactor.js +185 -54
  7. package/dist/agent/compactor.js.map +1 -1
  8. package/dist/agent/confess.d.ts +35 -0
  9. package/dist/agent/confess.js +296 -0
  10. package/dist/agent/confess.js.map +1 -0
  11. package/dist/agent/context.d.ts +0 -4
  12. package/dist/agent/context.js +0 -38
  13. package/dist/agent/context.js.map +1 -1
  14. package/dist/agent/domain-expertise.d.ts +22 -0
  15. package/dist/agent/domain-expertise.js +110 -0
  16. package/dist/agent/domain-expertise.js.map +1 -0
  17. package/dist/agent/executive-queue.d.ts +26 -0
  18. package/dist/agent/executive-queue.js +50 -0
  19. package/dist/agent/executive-queue.js.map +1 -0
  20. package/dist/agent/generational-flush.d.ts +28 -0
  21. package/dist/agent/generational-flush.js +48 -0
  22. package/dist/agent/generational-flush.js.map +1 -0
  23. package/dist/agent/loop-profile.d.ts +50 -0
  24. package/dist/agent/loop-profile.js +88 -0
  25. package/dist/agent/loop-profile.js.map +1 -0
  26. package/dist/agent/loop.d.ts +15 -5
  27. package/dist/agent/loop.js +182 -45
  28. package/dist/agent/loop.js.map +1 -1
  29. package/dist/agent/memory-consolidate.d.ts +14 -0
  30. package/dist/agent/memory-consolidate.js +141 -0
  31. package/dist/agent/memory-consolidate.js.map +1 -0
  32. package/dist/agent/mixture.d.ts +33 -0
  33. package/dist/agent/mixture.js +140 -0
  34. package/dist/agent/mixture.js.map +1 -0
  35. package/dist/agent/spawner.js +2 -2
  36. package/dist/agent/spawner.js.map +1 -1
  37. package/dist/agent/system-prompt.d.ts +1 -1
  38. package/dist/agent/system-prompt.js +50 -22
  39. package/dist/agent/system-prompt.js.map +1 -1
  40. package/dist/agent/unified-memory.d.ts +15 -0
  41. package/dist/agent/unified-memory.js +164 -0
  42. package/dist/agent/unified-memory.js.map +1 -0
  43. package/dist/checkpoints/engine.d.ts +44 -0
  44. package/dist/checkpoints/engine.js +324 -0
  45. package/dist/checkpoints/engine.js.map +1 -0
  46. package/dist/cli/command-palette.d.ts +26 -0
  47. package/dist/cli/command-palette.js +133 -0
  48. package/dist/cli/command-palette.js.map +1 -0
  49. package/dist/cli/context-health.d.ts +51 -0
  50. package/dist/cli/context-health.js +187 -0
  51. package/dist/cli/context-health.js.map +1 -0
  52. package/dist/cli/diamond.d.ts +67 -0
  53. package/dist/cli/diamond.js +222 -12
  54. package/dist/cli/diamond.js.map +1 -1
  55. package/dist/cli/dic.d.ts +2 -0
  56. package/dist/cli/dic.js +106 -0
  57. package/dist/cli/dic.js.map +1 -0
  58. package/dist/cli/diff-view.d.ts +18 -0
  59. package/dist/cli/diff-view.js +114 -0
  60. package/dist/cli/diff-view.js.map +1 -0
  61. package/dist/cli/display.d.ts +20 -4
  62. package/dist/cli/display.js +77 -151
  63. package/dist/cli/display.js.map +1 -1
  64. package/dist/cli/help-data.d.ts +7 -0
  65. package/dist/cli/help-data.js +80 -0
  66. package/dist/cli/help-data.js.map +1 -0
  67. package/dist/cli/index.js +1018 -851
  68. package/dist/cli/index.js.map +1 -1
  69. package/dist/cli/markdown.d.ts +5 -0
  70. package/dist/cli/markdown.js +128 -0
  71. package/dist/cli/markdown.js.map +1 -0
  72. package/dist/cli/model-select.d.ts +39 -0
  73. package/dist/cli/model-select.js +65 -0
  74. package/dist/cli/model-select.js.map +1 -0
  75. package/dist/cli/tui.d.ts +34 -0
  76. package/dist/cli/tui.js +1190 -0
  77. package/dist/cli/tui.js.map +1 -0
  78. package/dist/config/defaults.d.ts +6 -17
  79. package/dist/config/defaults.js +25 -46
  80. package/dist/config/defaults.js.map +1 -1
  81. package/dist/config/project-config.d.ts +2 -6
  82. package/dist/config/project-config.js +2 -2
  83. package/dist/config/project-config.js.map +1 -1
  84. package/dist/doctor/checks.d.ts +18 -0
  85. package/dist/doctor/checks.js +524 -0
  86. package/dist/doctor/checks.js.map +1 -0
  87. package/dist/doctor/index.d.ts +4 -0
  88. package/dist/doctor/index.js +229 -0
  89. package/dist/doctor/index.js.map +1 -0
  90. package/dist/doctor/repair.d.ts +19 -0
  91. package/dist/doctor/repair.js +126 -0
  92. package/dist/doctor/repair.js.map +1 -0
  93. package/dist/doctor/types.d.ts +38 -0
  94. package/dist/doctor/types.js +10 -0
  95. package/dist/doctor/types.js.map +1 -0
  96. package/dist/dream/dream.d.ts +79 -59
  97. package/dist/dream/dream.js +324 -144
  98. package/dist/dream/dream.js.map +1 -1
  99. package/dist/dream/episode.d.ts +17 -0
  100. package/dist/dream/episode.js +116 -0
  101. package/dist/dream/episode.js.map +1 -0
  102. package/dist/kanban/engine.d.ts +26 -0
  103. package/dist/kanban/engine.js +208 -0
  104. package/dist/kanban/engine.js.map +1 -0
  105. package/dist/kanban/types.d.ts +19 -0
  106. package/dist/kanban/types.js +9 -1
  107. package/dist/kanban/types.js.map +1 -1
  108. package/dist/machina/render-html.js +4 -2
  109. package/dist/machina/render-html.js.map +1 -1
  110. package/dist/machina/render-terminal.js +11 -4
  111. package/dist/machina/render-terminal.js.map +1 -1
  112. package/dist/machina/repair.d.ts +23 -0
  113. package/dist/machina/repair.js +98 -0
  114. package/dist/machina/repair.js.map +1 -0
  115. package/dist/machina/spec.js +12 -12
  116. package/dist/machina/spec.js.map +1 -1
  117. package/dist/machina/verify.d.ts +13 -1
  118. package/dist/machina/verify.js +12 -2
  119. package/dist/machina/verify.js.map +1 -1
  120. package/dist/mining/extract.d.ts +34 -0
  121. package/dist/mining/extract.js +229 -0
  122. package/dist/mining/extract.js.map +1 -0
  123. package/dist/mining/refine.d.ts +28 -0
  124. package/dist/mining/refine.js +256 -0
  125. package/dist/mining/refine.js.map +1 -0
  126. package/dist/perception/extractor.js +5 -3
  127. package/dist/perception/extractor.js.map +1 -1
  128. package/dist/perception/graph-store.d.ts +0 -11
  129. package/dist/perception/graph-store.js +0 -33
  130. package/dist/perception/graph-store.js.map +1 -1
  131. package/dist/perception/index.d.ts +1 -1
  132. package/dist/perception/index.js +1 -2
  133. package/dist/perception/index.js.map +1 -1
  134. package/dist/plugins/commands.d.ts +38 -0
  135. package/dist/plugins/commands.js +134 -0
  136. package/dist/plugins/commands.js.map +1 -0
  137. package/dist/plugins/frontmatter.d.ts +14 -0
  138. package/dist/plugins/frontmatter.js +78 -0
  139. package/dist/plugins/frontmatter.js.map +1 -0
  140. package/dist/plugins/hooks.d.ts +12 -0
  141. package/dist/plugins/hooks.js +148 -0
  142. package/dist/plugins/hooks.js.map +1 -0
  143. package/dist/plugins/loader.d.ts +7 -0
  144. package/dist/plugins/loader.js +255 -0
  145. package/dist/plugins/loader.js.map +1 -0
  146. package/dist/plugins/market.d.ts +23 -0
  147. package/dist/plugins/market.js +281 -0
  148. package/dist/plugins/market.js.map +1 -0
  149. package/dist/plugins/types.d.ts +90 -0
  150. package/dist/plugins/types.js +20 -0
  151. package/dist/plugins/types.js.map +1 -0
  152. package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
  153. package/dist/providers/anthropic-oauth-draft.js +414 -0
  154. package/dist/providers/anthropic-oauth-draft.js.map +1 -0
  155. package/dist/providers/anthropic.d.ts +4 -1
  156. package/dist/providers/anthropic.js +35 -7
  157. package/dist/providers/anthropic.js.map +1 -1
  158. package/dist/providers/factory.d.ts +43 -19
  159. package/dist/providers/factory.js +183 -129
  160. package/dist/providers/factory.js.map +1 -1
  161. package/dist/providers/google.js +9 -22
  162. package/dist/providers/google.js.map +1 -1
  163. package/dist/providers/live-models.d.ts +23 -0
  164. package/dist/providers/live-models.js +145 -0
  165. package/dist/providers/live-models.js.map +1 -0
  166. package/dist/providers/openai-compatible.d.ts +1 -12
  167. package/dist/providers/openai-compatible.js +92 -108
  168. package/dist/providers/openai-compatible.js.map +1 -1
  169. package/dist/providers/resilient-factory.js +1 -1
  170. package/dist/providers/resilient-factory.js.map +1 -1
  171. package/dist/providers/types.d.ts +1 -0
  172. package/dist/repl/queue.d.ts +22 -0
  173. package/dist/repl/queue.js +165 -0
  174. package/dist/repl/queue.js.map +1 -0
  175. package/dist/repl/side-channel.d.ts +23 -0
  176. package/dist/repl/side-channel.js +63 -0
  177. package/dist/repl/side-channel.js.map +1 -0
  178. package/dist/research/council.d.ts +2 -0
  179. package/dist/research/council.js +29 -4
  180. package/dist/research/council.js.map +1 -1
  181. package/dist/ruby/alternator.d.ts +11 -30
  182. package/dist/ruby/alternator.js +59 -38
  183. package/dist/ruby/alternator.js.map +1 -1
  184. package/dist/ruby/episode-capture.d.ts +0 -10
  185. package/dist/ruby/episode-capture.js +0 -33
  186. package/dist/ruby/episode-capture.js.map +1 -1
  187. package/dist/ruby/types.js +1 -1
  188. package/dist/ruby/types.js.map +1 -1
  189. package/dist/safety/path-jail.d.ts +17 -0
  190. package/dist/safety/path-jail.js +100 -0
  191. package/dist/safety/path-jail.js.map +1 -0
  192. package/dist/safety/permissions.d.ts +12 -21
  193. package/dist/safety/permissions.js +81 -216
  194. package/dist/safety/permissions.js.map +1 -1
  195. package/dist/safety/ssrf.d.ts +29 -0
  196. package/dist/safety/ssrf.js +185 -0
  197. package/dist/safety/ssrf.js.map +1 -0
  198. package/dist/server/index.js +64 -10
  199. package/dist/server/index.js.map +1 -1
  200. package/dist/setup/first-run.d.ts +0 -24
  201. package/dist/setup/first-run.js +10 -344
  202. package/dist/setup/first-run.js.map +1 -1
  203. package/dist/setup/key-store.d.ts +12 -0
  204. package/dist/setup/key-store.js +108 -0
  205. package/dist/setup/key-store.js.map +1 -0
  206. package/dist/setup/provider-registry.js +31 -18
  207. package/dist/setup/provider-registry.js.map +1 -1
  208. package/dist/setup/provider-test.d.ts +7 -0
  209. package/dist/setup/provider-test.js +73 -10
  210. package/dist/setup/provider-test.js.map +1 -1
  211. package/dist/setup/provider-wizard.d.ts +4 -1
  212. package/dist/setup/provider-wizard.js +92 -26
  213. package/dist/setup/provider-wizard.js.map +1 -1
  214. package/dist/setup/xiaomi.d.ts +1 -1
  215. package/dist/setup/xiaomi.js +3 -3
  216. package/dist/setup/xiaomi.js.map +1 -1
  217. package/dist/tools/browser.js +14 -10
  218. package/dist/tools/browser.js.map +1 -1
  219. package/dist/tools/clipboard.js +7 -1
  220. package/dist/tools/clipboard.js.map +1 -1
  221. package/dist/tools/dictate.d.ts +60 -0
  222. package/dist/tools/dictate.js +983 -0
  223. package/dist/tools/dictate.js.map +1 -0
  224. package/dist/tools/dictate_patched.js +1057 -0
  225. package/dist/tools/edit-file.js +10 -2
  226. package/dist/tools/edit-file.js.map +1 -1
  227. package/dist/tools/http-request.js +14 -4
  228. package/dist/tools/http-request.js.map +1 -1
  229. package/dist/tools/image-read.js +34 -2
  230. package/dist/tools/image-read.js.map +1 -1
  231. package/dist/tools/index.d.ts +16 -1
  232. package/dist/tools/index.js +59 -8
  233. package/dist/tools/index.js.map +1 -1
  234. package/dist/tools/mcp.js +12 -0
  235. package/dist/tools/mcp.js.map +1 -1
  236. package/dist/tools/read-file.js +10 -14
  237. package/dist/tools/read-file.js.map +1 -1
  238. package/dist/tools/telegram-audio-policy.d.ts +30 -0
  239. package/dist/tools/telegram-audio-policy.js +49 -0
  240. package/dist/tools/telegram-audio-policy.js.map +1 -0
  241. package/dist/tools/telegram-bot.js +1136 -537
  242. package/dist/tools/telegram-bot.js.map +1 -1
  243. package/dist/tools/telegram-voice.d.ts +18 -5
  244. package/dist/tools/telegram-voice.js +54 -12
  245. package/dist/tools/telegram-voice.js.map +1 -1
  246. package/dist/tools/telegram.d.ts +3 -3
  247. package/dist/tools/telegram.js +5 -84
  248. package/dist/tools/telegram.js.map +1 -1
  249. package/dist/tools/tools.d.ts +2 -14
  250. package/dist/tools/tools.js +79 -144
  251. package/dist/tools/tools.js.map +1 -1
  252. package/dist/tools/web-fetch.js +39 -7
  253. package/dist/tools/web-fetch.js.map +1 -1
  254. package/dist/tools/web-search.d.ts +0 -20
  255. package/dist/tools/web-search.js +40 -137
  256. package/dist/tools/web-search.js.map +1 -1
  257. package/dist/util/errors.js +1 -15
  258. package/dist/util/errors.js.map +1 -1
  259. package/dist/util/json-repair.d.ts +11 -0
  260. package/dist/util/json-repair.js +31 -0
  261. package/dist/util/json-repair.js.map +1 -0
  262. package/dist/util/rate-limiter.js +2 -8
  263. package/dist/util/rate-limiter.js.map +1 -1
  264. package/dist/viz/index.js +793 -792
  265. package/dist/viz/index.js.map +1 -1
  266. package/package.json +12 -32
@@ -33,16 +33,23 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.costFor = costFor;
36
37
  exports.runAgentLoop = runAgentLoop;
37
38
  exports.runAgentLoopVerified = runAgentLoopVerified;
38
39
  const path = __importStar(require("path"));
39
40
  const index_js_1 = require("../tools/index.js");
40
41
  const permissions_js_1 = require("../safety/permissions.js");
41
42
  const system_prompt_js_1 = require("./system-prompt.js");
42
- const defaults_js_1 = require("../config/defaults.js");
43
43
  const session_store_js_1 = require("./session-store.js");
44
44
  const spawner_js_1 = require("./spawner.js");
45
+ const loop_profile_js_1 = require("./loop-profile.js");
46
+ const engine_js_1 = require("../checkpoints/engine.js");
47
+ const defaults_js_1 = require("../config/defaults.js");
48
+ const executive_queue_js_1 = require("./executive-queue.js");
45
49
  const compactor_js_1 = require("./compactor.js");
50
+ const generational_flush_js_1 = require("./generational-flush.js");
51
+ const affect_js_1 = require("./affect.js");
52
+ const context_health_js_1 = require("../cli/context-health.js");
46
53
  const PRICING_USD_PER_MTOK = {
47
54
  'claude-opus-4-5-20251001': { in: 15, out: 75 },
48
55
  'claude-sonnet-4-5-20251001': { in: 3, out: 15 },
@@ -52,17 +59,27 @@ const PRICING_USD_PER_MTOK = {
52
59
  'gemini-2.5-pro': { in: 1.25, out: 10 },
53
60
  'gemini-2.5-flash': { in: 0.075, out: 0.3 },
54
61
  'grok-beta': { in: 5, out: 15 },
62
+ // Zhipu publishes GLM-5 rates only; 5.1/5.2 assumed equal until announced.
63
+ 'glm-5.2': { in: 1, out: 3.2 },
64
+ 'glm-5.1': { in: 1, out: 3.2 },
65
+ 'glm-5': { in: 1, out: 3.2 },
55
66
  'mimo-v2.5-pro': { in: 1, out: 4 },
56
67
  'mimo-v2.5': { in: 0.5, out: 2 },
57
68
  'mimo-v2-flash': { in: 0.1, out: 0.4 },
69
+ // DeepSeek V4 — cache hits billed at 1/10th of standard input rate.
70
+ 'deepseek-v4-flash': { in: 0.14, out: 0.28, cachedIn: 0.014 },
71
+ 'deepseek-v4-pro': { in: 0.435, out: 0.87, cachedIn: 0.0435 },
58
72
  };
59
- function costFor(model, input, output) {
73
+ function costFor(model, input, output, cachedTokens) {
60
74
  const p = PRICING_USD_PER_MTOK[model] ?? PRICING_USD_PER_MTOK[Object.keys(PRICING_USD_PER_MTOK).find(k => model.includes(k.split('-')[1] ?? '') && k.startsWith(model.split('-')[0] ?? '')) ?? ''] ?? { in: 0, out: 0 };
61
- return (input / 1_000_000) * p.in + (output / 1_000_000) * p.out;
75
+ const cached = Math.min(cachedTokens ?? 0, input);
76
+ const billable = input - cached;
77
+ const cachedRate = p.cachedIn ?? p.in / 10;
78
+ return (billable / 1_000_000) * p.in + (cached / 1_000_000) * cachedRate + (output / 1_000_000) * p.out;
62
79
  }
63
80
  async function runAgentLoop(opts) {
64
81
  const { provider, task, context, permissions, display } = opts;
65
- const maxTurns = opts.maxTurns ?? defaults_js_1.DEFAULTS.maxTurns;
82
+ const profile = (0, loop_profile_js_1.getLoopProfile)(task, opts.maxTurns);
66
83
  const pricingModel = opts.pricingModel ?? provider.model;
67
84
  const system = (0, system_prompt_js_1.buildSystemPrompt)(context, provider.name, task);
68
85
  const history = [
@@ -71,35 +88,104 @@ async function runAgentLoop(opts) {
71
88
  ];
72
89
  let turns = 0;
73
90
  let toolCallCount = 0;
74
- const usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
91
+ const usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0, cachedTokens: 0 };
75
92
  if (!opts.disableSpawn) {
76
93
  (0, spawner_js_1.registerSpawner)((0, spawner_js_1.makeDefaultSpawner)(context, opts.spawnConfig ?? {}, display));
77
94
  }
78
95
  display.agentThinking();
79
96
  try {
80
- return await runLoopBody({ opts, provider, system, history, maxTurns, pricingModel, display, permissions, turns, toolCallCount, usage });
97
+ return await runLoopBody({ opts, provider, system, history, profile, pricingModel, display, permissions, turns, toolCallCount, usage });
81
98
  }
82
99
  finally {
100
+ display.stopThinking?.();
83
101
  (0, spawner_js_1.clearSpawner)();
84
102
  }
85
103
  }
86
104
  async function runLoopBody(args) {
87
- const { opts, provider, system, history, maxTurns, pricingModel, display, permissions } = args;
105
+ const { opts, provider, system, history, profile, pricingModel, display, permissions } = args;
88
106
  let { turns, toolCallCount, usage } = args;
89
107
  const toolCallLog = [];
90
- while (turns < maxTurns) {
108
+ // Bounded record of state-altering calls; its digest survives compaction so
109
+ // the model never repeats a write/edit/command it already executed.
110
+ const execQueue = new executive_queue_js_1.ExecutiveQueue();
111
+ // Context health tracker: observational visibility into token pressure,
112
+ // compaction ladder, and session cost. Never mutates history itself.
113
+ // Use the caller-provided tracker (so /context can read it) or make one.
114
+ const health = opts.healthTracker ?? new context_health_js_1.ContextHealthTracker(() => system, () => history, provider.model, pricingModel);
115
+ health.updateSystem(system);
116
+ // Stall detection: if the recent turns repeat the exact same tool call(s)
117
+ // (or alternate between the same two), the agent is stuck rather than
118
+ // progressing. Stopping early here saves turns/cost on a run that would
119
+ // otherwise burn out to maxTurns without ever changing course.
120
+ const turnSignatures = [];
121
+ let stall = null;
122
+ // Adaptive widening: a run that hits its profile ceiling while still
123
+ // making progress gets ONE upgrade to profile.widenTo instead of dying
124
+ // with a resume hint. Explicit --max-turns never widens.
125
+ let maxTurns = profile.maxTurns;
126
+ let widened = false;
127
+ // Mutable bag for per-loop state (empty-response retry counter, etc.).
128
+ const loopState = {};
129
+ // Sticky set of triggered conditional tools — survives history compaction.
130
+ const includedTools = new Set();
131
+ while (true) {
132
+ if (turns >= maxTurns) {
133
+ if (profile.widenTo !== undefined && !widened) {
134
+ widened = true;
135
+ maxTurns = profile.widenTo;
136
+ display.warning(`Turn budget (${profile.maxTurns}) reached with work in progress — widening once to ${maxTurns}.`);
137
+ }
138
+ else {
139
+ break;
140
+ }
141
+ }
142
+ // Abort check — user requested stop via :stop / Ctrl+C
143
+ if (opts.abortSignal?.aborted) {
144
+ display.warning('Task cancelled by user — stopping loop.');
145
+ break;
146
+ }
91
147
  turns++;
92
- // Compact BEFORE the next provider call, using the size of the payload we
93
- // are about to send (system + current history), measured locally. This was
94
- // previously driven by `usage.totalTokens`, which stays 0 whenever the
95
- // provider omits streamed usage — so compaction silently never fired and
96
- // history grew until the provider rejected the request. See compactor.ts.
97
- (0, compactor_js_1.compactHistory)(history, (0, compactor_js_1.estimateContextTokens)(system, history), provider.model);
148
+ health.incrementTurn();
149
+ // Compaction check runs pre-call: estimateContextTokens measures the
150
+ // payload about to be sent (see its doc for why not per-turn usage sums).
151
+ {
152
+ const compactionExtras = {
153
+ executiveDigest: execQueue.size > 0 ? execQueue.digest() : undefined,
154
+ affectHint: (0, affect_js_1.detectFrustration)(history) ?? undefined,
155
+ };
156
+ // The ladder in compactHistory escalates its own trigger per recap
157
+ // generation; once a recap has been recompacted ROLLOVER_AT_GENERATION
158
+ // times, a further in-place pass would just be lossy recompaction —
159
+ // flush it to the dream store instead (one LLM call) and start clean.
160
+ if ((0, compactor_js_1.getRecapGeneration)(history) >= compactor_js_1.ROLLOVER_AT_GENERATION) {
161
+ const beforeTokens = (0, compactor_js_1.estimateContextTokens)(system, history);
162
+ const { flushed } = await (0, generational_flush_js_1.maybeRollover)(history, opts.context.root, provider, compactionExtras);
163
+ if (flushed) {
164
+ const afterTokens = (0, compactor_js_1.estimateContextTokens)(system, history);
165
+ const generation = (0, compactor_js_1.getRecapGeneration)(history);
166
+ health.recordCompaction(beforeTokens, afterTokens, generation);
167
+ display.compactionEvent?.({ beforeTokens, afterTokens, generation, threshold: beforeTokens });
168
+ await persist(opts.sessionPath, history);
169
+ }
170
+ }
171
+ else {
172
+ const estimated = (0, compactor_js_1.estimateContextTokens)(system, history);
173
+ const compacted = (0, compactor_js_1.compactHistory)(history, estimated, provider.model, compactionExtras);
174
+ if (compacted) {
175
+ const afterTokens = (0, compactor_js_1.estimateContextTokens)(system, history);
176
+ const generation = (0, compactor_js_1.getRecapGeneration)(history);
177
+ health.recordCompaction(estimated, afterTokens, generation);
178
+ display.compactionEvent?.({ beforeTokens: estimated, afterTokens, generation, threshold: estimated });
179
+ await persist(opts.sessionPath, history);
180
+ }
181
+ }
182
+ }
183
+ display.contextBar?.(health.snapshot(usage.inputTokens, usage.outputTokens));
98
184
  let responseText = '';
99
185
  const responseToolCalls = [];
100
186
  let finalResponse = null;
101
187
  try {
102
- const stream = provider.stream(system, history, index_js_1.TOOL_DEFINITIONS);
188
+ const stream = provider.stream(system, history, (0, index_js_1.selectTools)(opts.task, history, includedTools));
103
189
  for await (const chunk of stream) {
104
190
  switch (chunk.type) {
105
191
  case 'text':
@@ -123,9 +209,11 @@ async function runLoopBody(args) {
123
209
  if (u) {
124
210
  const inT = u.inputTokens ?? 0;
125
211
  const outT = u.outputTokens ?? 0;
212
+ const cachedT = u.cachedTokens ?? 0;
126
213
  usage.inputTokens += inT;
127
214
  usage.outputTokens += outT;
128
215
  usage.totalTokens += inT + outT;
216
+ usage.cachedTokens += cachedT;
129
217
  }
130
218
  break;
131
219
  }
@@ -133,31 +221,48 @@ async function runLoopBody(args) {
133
221
  }
134
222
  catch (e) {
135
223
  display.error(`Provider error: ${String(e)}`);
136
- // If we failed on the first turn without making any tool calls, the assistant
137
- // never responded. Pop the user's task so we don't poison the chat history
138
- // with consecutive user messages on the next attempt.
139
- if (turns === 1 && toolCallCount === 0) {
140
- history.pop();
141
- }
142
224
  await persist(opts.sessionPath, history);
143
225
  return {
144
226
  success: false,
145
227
  summary: `Provider error on turn ${turns}: ${String(e)}`,
146
228
  turns, toolCallCount, usage, history, toolCallLog,
147
- costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens),
229
+ costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens, usage.cachedTokens),
148
230
  };
149
231
  }
150
232
  if (responseText)
151
233
  display.streamEnd();
234
+ // Guard: an empty response with no tools and stop reason "done"
235
+ // usually means the provider returned a silent error / rate-limit /
236
+ // content filter. Retry up to 3 times before accepting it as "done"
237
+ // so sessions don't silently die with no output.
152
238
  const noProgress = !responseText && responseToolCalls.length === 0;
153
- if (noProgress || finalResponse?.stopReason === 'done') {
239
+ if (finalResponse?.stopReason === 'done' && noProgress) {
240
+ if (!('_emptyRetries' in loopState))
241
+ loopState._emptyRetries = 0;
242
+ loopState._emptyRetries++;
243
+ if (loopState._emptyRetries <= 3) {
244
+ display.warning(`Empty response from provider (attempt ${loopState._emptyRetries}/3) — retrying…`);
245
+ display.agentThinking();
246
+ continue;
247
+ }
248
+ // Exhausted retries — provider can't produce output
249
+ history.push({ role: 'assistant', content: '' });
250
+ await persist(opts.sessionPath, history);
251
+ return {
252
+ success: false,
253
+ summary: 'Provider returned empty response after 4 attempts — likely rate-limited or filtered',
254
+ turns, toolCallCount, usage, history, toolCallLog,
255
+ costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens, usage.cachedTokens),
256
+ };
257
+ }
258
+ if (finalResponse?.stopReason === 'done') {
154
259
  history.push({ role: 'assistant', content: responseText });
155
260
  await persist(opts.sessionPath, history);
156
261
  return {
157
262
  success: true,
158
- summary: responseText || '(Task completed with no output)',
263
+ summary: responseText,
159
264
  turns, toolCallCount, usage, history, toolCallLog,
160
- costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens),
265
+ costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens, usage.cachedTokens),
161
266
  };
162
267
  }
163
268
  if (finalResponse?.stopReason === 'limit') {
@@ -169,29 +274,23 @@ async function runLoopBody(args) {
169
274
  content: responseText,
170
275
  toolCalls: responseToolCalls,
171
276
  });
277
+ // Record this turn's tool-call signature before executing, so a
278
+ // stall is detected even if every call in the streak errors out.
279
+ if (responseToolCalls.length > 0) {
280
+ const signature = JSON.stringify(responseToolCalls.map((c) => ({ name: c.name, input: c.input })));
281
+ turnSignatures.push(signature);
282
+ stall = (0, loop_profile_js_1.detectStall)(turnSignatures, profile.stallThreshold);
283
+ }
172
284
  const toolResults = [];
285
+ // One checkpoint per turn, taken lazily before the first mutating call —
286
+ // a turn's writes form one burst, and the engine dedupes identical trees.
287
+ let checkpointedThisTurn = false;
173
288
  for (const call of responseToolCalls) {
174
289
  toolCallCount++;
175
290
  display.toolCall(call.name, call.input);
176
291
  let result;
177
292
  let isError = false;
178
293
  try {
179
- // If the provider failed to parse this call's arguments as JSON, the
180
- // input was replaced with a raw-string fallback (see openai-compatible.ts
181
- // / anthropic.ts) rather than real structured fields. Running a tool
182
- // against that — or worse, letting the model keep reasoning as if it
183
- // were valid data — is exactly the kind of malformed context that
184
- // produces confabulated output downstream (confirmed in a :council run).
185
- // Fail loudly and immediately instead: tell the model its own call
186
- // didn't parse, so it can retry with corrected arguments.
187
- if ('_raw' in call.input) {
188
- const raw = String(call.input._raw ?? '').slice(0, 300);
189
- result = `Tool error (${call.name}): your previous call's arguments did not parse as valid JSON and were not executed. Raw fragment received: ${raw}${raw.length >= 300 ? '…' : ''}. Re-issue this call with corrected, valid JSON arguments.`;
190
- isError = true;
191
- display.error(result);
192
- toolResults.push({ id: call.id, name: call.name, content: result, isError: true });
193
- continue;
194
- }
195
294
  const perm = permissions.check(call.name, call.input);
196
295
  if (!perm.allowed) {
197
296
  display.toolBlocked(call.name, perm.reason ?? 'not permitted');
@@ -200,20 +299,44 @@ async function runLoopBody(args) {
200
299
  }
201
300
  if (perm.needsConfirm) {
202
301
  const desc = formatCallForConfirmation(call);
203
- const doConfirm = opts.confirmFn ?? permissions_js_1.confirm;
204
- const approved = await doConfirm(`Allow: ${desc}?`);
302
+ const approved = await (opts.confirmFn ?? permissions_js_1.confirm)(`Allow: ${desc}?`);
205
303
  if (!approved) {
206
304
  display.toolBlocked(call.name, 'denied by user');
207
305
  toolResults.push({ id: call.id, name: call.name, content: 'User denied this action.', isError: true });
208
306
  continue;
209
307
  }
210
308
  }
309
+ if (opts.checkpoints !== false && !checkpointedThisTurn && executive_queue_js_1.MUTATING_TOOLS.has(call.name)) {
310
+ checkpointedThisTurn = true;
311
+ try {
312
+ const cp = await (0, engine_js_1.createCheckpoint)(opts.context.root, `turn ${turns}: ${opts.task}`);
313
+ if (cp)
314
+ await (0, engine_js_1.pruneCheckpoints)(opts.context.root, defaults_js_1.DEFAULTS.maxCheckpoints);
315
+ }
316
+ catch { /* checkpointing must never block the tool call */ }
317
+ }
318
+ if (opts.hooks && opts.hooks.length > 0) {
319
+ const { runHooks } = await Promise.resolve().then(() => __importStar(require('../plugins/hooks.js')));
320
+ const pre = await runHooks('PreToolUse', call.name, call.input, opts.hooks, opts.context.root);
321
+ if (pre.block) {
322
+ const why = pre.messages.join('; ') || 'blocked by plugin hook';
323
+ display.toolBlocked(call.name, why);
324
+ toolResults.push({ id: call.id, name: call.name, content: `Blocked by plugin hook: ${why}`, isError: true });
325
+ continue;
326
+ }
327
+ }
211
328
  const startMs = Date.now();
212
329
  result = await (0, index_js_1.executeTool)(call.name, call.input, opts.context.root);
213
330
  const elapsed = Date.now() - startMs;
214
331
  display.toolResult(call.name, result, elapsed);
215
332
  isError = result.startsWith('Error:') || result.startsWith('Tool error');
216
333
  toolCallLog.push({ name: call.name, input: call.input });
334
+ if (!isError)
335
+ execQueue.push(call.name, call.input, turns);
336
+ if (opts.hooks && opts.hooks.length > 0) {
337
+ const { runHooks } = await Promise.resolve().then(() => __importStar(require('../plugins/hooks.js')));
338
+ await runHooks('PostToolUse', call.name, call.input, opts.hooks, opts.context.root, result);
339
+ }
217
340
  }
218
341
  catch (e) {
219
342
  result = `Tool error (${call.name}): ${String(e)}`;
@@ -222,17 +345,27 @@ async function runLoopBody(args) {
222
345
  }
223
346
  toolResults.push({ id: call.id, name: call.name, content: result, isError });
224
347
  }
348
+ health.incrementToolCalls(responseToolCalls.length);
225
349
  history.push({ role: 'tool_result', results: toolResults });
350
+ if (stall) {
351
+ display.warning(stall === 'repeat'
352
+ ? `Repeated identical tool call ${profile.stallThreshold}x in a row — stopping loop (stall detected)`
353
+ : `Alternating between the same two tool calls ${profile.stallThreshold}x — stopping loop (cycle stall detected)`);
354
+ break;
355
+ }
226
356
  display.agentThinking();
227
357
  }
228
358
  await persist(opts.sessionPath, history);
229
359
  const sessionId = opts.sessionPath ? path.basename(opts.sessionPath, '.json') : undefined;
230
360
  const resumeHint = sessionId ? ` Type /continue to resume session ${sessionId}` : '';
361
+ const reason = stall === 'repeat' ? 'stalled (repeated identical tool calls)'
362
+ : stall === 'cycle' ? 'stalled (cycling between the same two tool calls)'
363
+ : `ended after ${turns} turns${widened ? `, after widening once from ${profile.maxTurns}` : ''}`;
231
364
  return {
232
365
  success: false,
233
- summary: `Loop ended after ${turns} turns.${resumeHint}`,
366
+ summary: `Loop ${reason}.${resumeHint}`,
234
367
  turns, toolCallCount, usage, history, toolCallLog,
235
- costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens),
368
+ costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens, usage.cachedTokens),
236
369
  };
237
370
  }
238
371
  async function runAgentLoopVerified(opts, config, projectRoot) {
@@ -252,6 +385,10 @@ function formatCallForConfirmation(call) {
252
385
  return `$ ${call.input.command}`;
253
386
  if (call.name === 'write_file')
254
387
  return `overwrite ${call.input.path}`;
388
+ if (call.name === 'mcp' && call.input.action === 'connect') {
389
+ const args = Array.isArray(call.input.args_list) ? call.input.args_list.join(' ') : '';
390
+ return `spawn MCP server '${call.input.server}': ${call.input.command} ${args}`.trim();
391
+ }
255
392
  return `${call.name}(${JSON.stringify(call.input).slice(0, 80)})`;
256
393
  }
257
394
  //# sourceMappingURL=loop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGA,0BAMC;AAED,oCA4BC;AAyTD,oDAOC;AApcD,2CAA6B;AAE7B,gDAA6D;AAE7D,6DAAmD;AACnD,yDAAuD;AAGvD,yDAAkD;AAClD,6CAAiF;AAEjF,uDAAkG;AAClG,wDAA8E;AAC9E,uDAAiD;AACjD,6DAAsE;AACtE,iDAAmH;AACnH,mEAAwD;AACxD,2CAAgD;AAChD,gEAAgE;AAyDhE,MAAM,oBAAoB,GAAmE;IAC3F,0BAA0B,EAAI,EAAE,EAAE,EAAE,EAAE,EAAG,GAAG,EAAE,EAAE,EAAG;IACnD,4BAA4B,EAAE,EAAE,EAAE,EAAE,CAAC,EAAI,GAAG,EAAE,EAAE,EAAG;IACnD,2BAA2B,EAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAI;IACnD,QAAQ,EAAsB,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAG;IACnD,aAAa,EAAiB,EAAE,EAAE,EAAE,IAAI,EAAC,GAAG,EAAE,GAAG,EAAE;IACnD,gBAAgB,EAAc,EAAE,EAAE,EAAE,IAAI,EAAC,GAAG,EAAE,EAAE,EAAG;IACnD,kBAAkB,EAAY,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,EAAE,GAAG,EAAC;IACnD,WAAW,EAAmB,EAAE,EAAE,EAAE,CAAC,EAAI,GAAG,EAAE,EAAE,EAAG;IACnD,2EAA2E;IAC3E,SAAS,EAAqB,EAAE,EAAE,EAAE,CAAC,EAAI,GAAG,EAAE,GAAG,EAAE;IACnD,SAAS,EAAqB,EAAE,EAAE,EAAE,CAAC,EAAI,GAAG,EAAE,GAAG,EAAE;IACnD,OAAO,EAAuB,EAAE,EAAE,EAAE,CAAC,EAAI,GAAG,EAAE,GAAG,EAAE;IACnD,eAAe,EAAe,EAAE,EAAE,EAAE,CAAC,EAAI,GAAG,EAAE,CAAC,EAAI;IACnD,WAAW,EAAmB,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAI;IACnD,eAAe,EAAe,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IACnD,oEAAoE;IACpE,mBAAmB,EAAW,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;IACtE,iBAAiB,EAAa,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;CACzE,CAAC;AAEF,SAAgB,OAAO,CAAC,KAAa,EAAE,KAAa,EAAE,MAAc,EAAE,YAAqB;IACzF,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACxN,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAC3C,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC1G,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAiB;IAClD,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE/D,MAAM,OAAO,GAAG,IAAA,gCAAc,EAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC;IAEzD,MAAM,MAAM,GAAG,IAAA,oCAAiB,EAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAqB;QAChC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;QAC9B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;KAChC,CAAC;IAEF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,KAAK,GAAe,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAE/F,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,IAAA,4BAAe,EAAC,IAAA,+BAAkB,EAAC,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,CAAC,aAAa,EAAE,CAAC;IAExB,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1I,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QACzB,IAAA,yBAAY,GAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAgBD,KAAK,UAAU,WAAW,CAAC,IAAc;IACvC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC9F,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC3C,MAAM,WAAW,GAA4D,EAAE,CAAC;IAChF,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,SAAS,GAAG,IAAI,mCAAc,EAAE,CAAC;IAEvC,wEAAwE;IACxE,qEAAqE;IACrE,yEAAyE;IACzE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,wCAAoB,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAE5B,0EAA0E;IAC1E,sEAAsE;IACtE,wEAAwE;IACxE,+DAA+D;IAC/D,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,KAAK,GAAqB,IAAI,CAAC;IAEnC,qEAAqE;IACrE,uEAAuE;IACvE,yDAAyD;IACzD,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,uEAAuE;IACvE,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,2EAA2E;IAC3E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAGxC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC9C,OAAO,GAAG,IAAI,CAAC;gBACf,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC3B,OAAO,CAAC,OAAO,CACb,gBAAgB,OAAO,CAAC,QAAQ,sDAAsD,QAAQ,GAAG,CAClG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;YAC3D,MAAM;QACR,CAAC;QAED,KAAK,EAAE,CAAC;QACR,MAAM,CAAC,aAAa,EAAE,CAAC;QAEvB,qEAAqE;QACrE,0EAA0E;QAC1E,CAAC;YACC,MAAM,gBAAgB,GAAG;gBACvB,eAAe,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;gBACpE,UAAU,EAAE,IAAA,6BAAiB,EAAC,OAAO,CAAC,IAAI,SAAS;aACpD,CAAC;YACF,mEAAmE;YACnE,uEAAuE;YACvE,oEAAoE;YACpE,sEAAsE;YACtE,IAAI,IAAA,iCAAkB,EAAC,OAAO,CAAC,IAAI,qCAAsB,EAAE,CAAC;gBAC1D,MAAM,YAAY,GAAG,IAAA,oCAAqB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,qCAAa,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;gBAChG,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,WAAW,GAAG,IAAA,oCAAqB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC3D,MAAM,UAAU,GAAG,IAAA,iCAAkB,EAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;oBAC/D,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC9F,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,IAAA,oCAAqB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,IAAA,6BAAc,EAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBACvF,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,WAAW,GAAG,IAAA,oCAAqB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC3D,MAAM,UAAU,GAAG,IAAA,iCAAkB,EAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;oBAC5D,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;oBACtG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAE7E,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,MAAM,iBAAiB,GAAe,EAAE,CAAC;QACzC,IAAI,aAAa,GAAsD,IAAI,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAA,sBAAW,EAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YAChG,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,MAAM;wBACT,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC/B,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC;wBAC3B,MAAM;oBACR,KAAK,YAAY;wBACf,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;wBACxC,MAAM;oBACR,KAAK,YAAY;wBACf,MAAM;oBACR,KAAK,UAAU;wBACb,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACnC,MAAM;oBACR,KAAK,MAAM;wBACT,aAAa,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;wBAC1D,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC1E,iBAAiB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;wBACtD,CAAC;wBACD,MAAM,CAAC,GAAI,KAAK,CAAC,QAA+F,CAAC,KAAK,CAAC;wBACvH,IAAI,CAAC,EAAE,CAAC;4BACN,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;4BAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;4BACjC,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;4BACpC,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;4BACzB,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC;4BAC3B,KAAK,CAAC,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC;4BAChC,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC;wBAChC,CAAC;wBACD,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,0BAA0B,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;gBACxD,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW;gBACjD,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;aAC1F,CAAC;QACJ,CAAC;QAED,IAAI,YAAY;YAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QAEtC,gEAAgE;QAChE,oEAAoE;QACpE,oEAAoE;QACpE,iDAAiD;QACjD,MAAM,UAAU,GAAG,CAAC,YAAY,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;QACnE,IAAI,aAAa,EAAE,UAAU,KAAK,MAAM,IAAI,UAAU,EAAE,CAAC;YACvD,IAAI,CAAC,CAAC,eAAe,IAAI,SAAS,CAAC;gBAAE,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC;YACjE,SAAS,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,SAAS,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,OAAO,CACb,yCAAyC,SAAS,CAAC,aAAa,iBAAiB,CAClF,CAAC;gBACF,OAAO,CAAC,aAAa,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YACD,oDAAoD;YACpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qFAAqF;gBAC9F,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW;gBACjD,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;aAC1F,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,EAAE,UAAU,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3D,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW;gBACjD,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;aAC1F,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,EAAE,UAAU,KAAK,OAAO,EAAE,CAAC;YAC1C,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YACnD,MAAM;QACR,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QAEH,gEAAgE;QAChE,iEAAiE;QACjE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAC9B,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CACjE,CAAC;YACF,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,KAAK,GAAG,IAAA,6BAAW,EAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,oBAAoB,GAAG,KAAK,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;YACrC,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAExC,IAAI,MAAc,CAAC;YACnB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC;oBAC/D,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtG,SAAS;gBACX,CAAC;gBAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;oBAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,wBAAO,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;oBACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;wBACjD,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;wBACvG,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,oBAAoB,IAAI,mCAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzF,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,EAAE,GAAG,MAAM,IAAA,4BAAgB,EAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;wBACpF,IAAI,EAAE;4BAAE,MAAM,IAAA,4BAAgB,EAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,sBAAQ,CAAC,cAAc,CAAC,CAAC;oBAC7E,CAAC;oBAAC,MAAM,CAAC,CAAC,kDAAkD,CAAC,CAAC;gBAChE,CAAC;gBAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,qBAAqB,GAAC,CAAC;oBACzD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC/F,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC;wBAChE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;wBACpC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,2BAA2B,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC7G,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACrC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC/C,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACzE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,OAAO;oBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAE3D,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,qBAAqB,GAAC,CAAC;oBACzD,MAAM,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9F,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,GAAG,eAAe,IAAI,CAAC,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAE5D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;gBAChC,CAAC,CAAC,gCAAgC,OAAO,CAAC,cAAc,6CAA6C;gBACrG,CAAC,CAAC,+CAA+C,OAAO,CAAC,cAAc,0CAA0C,CAAC,CAAC;YACrH,MAAM;QACR,CAAC;QAED,OAAO,CAAC,aAAa,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,yCAAyC;QAC3E,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,mDAAmD;YACzE,CAAC,CAAC,eAAe,KAAK,SAAS,OAAO,CAAC,CAAC,CAAC,8BAA8B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACnG,OAAO;QACL,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,QAAQ,MAAM,IAAI,UAAU,EAAE;QACvC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW;QACjD,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;KAC1F,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,IAAiB,EACjB,MAA0B,EAC1B,WAAmB;IAEnB,MAAM,EAAE,mBAAmB,EAAE,GAAG,wDAAa,oBAAoB,GAAC,CAAC;IACnE,OAAO,mBAAmB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAwB,EAAE,OAAyB;IACxE,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QAAC,MAAM,+BAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAC/C,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAc;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,SAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,OAAO,qBAAqB,IAAI,CAAC,KAAK,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AACpE,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface ConsolidateResult {
2
+ backupDir: string;
3
+ identityKeys: number;
4
+ projectKeys: number;
5
+ conflicts: string[];
6
+ alreadyDone: boolean;
7
+ }
8
+ /**
9
+ * Merge the identity namespaces into identity.json + project.json.
10
+ * Idempotent: if identity.json already exists it does nothing (unless force).
11
+ */
12
+ export declare function consolidateMemory(opts?: {
13
+ force?: boolean;
14
+ }): ConsolidateResult;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.consolidateMemory = consolidateMemory;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ // ─────────────────────────────────────────────────────────────────────────────
41
+ // Memory consolidation — one-time (idempotent) migration that merges the 8
42
+ // overlapping ~/.aura/memory namespaces into a clean structure:
43
+ //
44
+ // identity.json — global identity/facts, prompt-visible everywhere
45
+ // (who Dušan is, who Aura is, preferences, relationship)
46
+ // project.json — machine/project state that isn't identity
47
+ // (paths, recovery notes, service state, tool locations)
48
+ //
49
+ // Originals are backed up to ~/.aura/memory/.pre-unify-<ts>/ first. Conflicting
50
+ // values for the same canonical key are PRESERVED as a CONFLICT entry rather
51
+ // than silently picking a winner (that's where auto-dedupe goes wrong).
52
+ // ─────────────────────────────────────────────────────────────────────────────
53
+ const MEMORY_DIR = path.join(os.homedir(), '.aura', 'memory');
54
+ // Keys that describe WHO Dušan/Aura are (global identity) vs machine state.
55
+ // Anything not listed as project-state defaults to identity.
56
+ const PROJECT_STATE_KEYS = new Set([
57
+ 'learnlight', 'linux-login-recovery', 'webcam-surveillance',
58
+ 'update-on-other-machines', 'personal-tools-location',
59
+ 'personal-content-save-location', 'sluzbeni-glasnik-grupa',
60
+ 'desktop-install-options', 'telegram-bot-status-line',
61
+ 'lessonprep_automation_path', 'clipai-pro', 'aura_code_path',
62
+ 'aura_code_status', 'system-recovery-state-2026-06-30',
63
+ 'weekly-backup-system', 'root-overflow-protection',
64
+ ]);
65
+ // Namespaces that hold identity-ish content and should be merged.
66
+ const SOURCE_NAMESPACES = ['default', 'user', 'user_prefs', 'relationship', 'aura-core'];
67
+ function loadJson(file) {
68
+ try {
69
+ return fs.existsSync(file) ? JSON.parse(fs.readFileSync(file, 'utf8')) : {};
70
+ }
71
+ catch {
72
+ return {};
73
+ }
74
+ }
75
+ function norm(s) {
76
+ return s.replace(/\s+/g, ' ').trim().toLowerCase();
77
+ }
78
+ /**
79
+ * Merge the identity namespaces into identity.json + project.json.
80
+ * Idempotent: if identity.json already exists it does nothing (unless force).
81
+ */
82
+ function consolidateMemory(opts = {}) {
83
+ const identityFile = path.join(MEMORY_DIR, 'identity.json');
84
+ const projectFile = path.join(MEMORY_DIR, 'project.json');
85
+ if (!opts.force && fs.existsSync(identityFile)) {
86
+ return { backupDir: '', identityKeys: 0, projectKeys: 0, conflicts: [], alreadyDone: true };
87
+ }
88
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
89
+ // 1. Back up every source namespace first.
90
+ const backupDir = path.join(MEMORY_DIR, `.pre-unify-${Date.now()}`);
91
+ fs.mkdirSync(backupDir, { recursive: true });
92
+ for (const ns of [...SOURCE_NAMESPACES, 'identity', 'project']) {
93
+ const f = path.join(MEMORY_DIR, `${ns}.json`);
94
+ if (fs.existsSync(f))
95
+ fs.copyFileSync(f, path.join(backupDir, `${ns}.json`));
96
+ }
97
+ const identity = {};
98
+ const project = {};
99
+ const conflicts = [];
100
+ // 2. Merge. A key already present with a DIFFERENT value becomes a CONFLICT
101
+ // entry that keeps both, tagged with their source namespaces.
102
+ const place = (target, ns, key, entry) => {
103
+ const existing = target[key];
104
+ if (!existing) {
105
+ target[key] = { value: entry.value, updated: entry.updated };
106
+ return;
107
+ }
108
+ if (norm(existing.value) === norm(entry.value))
109
+ return; // true duplicate — keep one
110
+ // Genuine conflict: preserve both instead of picking a winner.
111
+ const conflictKey = `${key}__CONFLICT`;
112
+ if (!target[conflictKey]) {
113
+ target[conflictKey] = {
114
+ value: `[CONFLICT — reconcile manually]\n(A) ${existing.value}\n(B, from ${ns}) ${entry.value}`,
115
+ updated: new Date().toISOString(),
116
+ };
117
+ conflicts.push(key);
118
+ }
119
+ else {
120
+ target[conflictKey].value += `\n(+, from ${ns}) ${entry.value}`;
121
+ }
122
+ };
123
+ for (const ns of SOURCE_NAMESPACES) {
124
+ const store = loadJson(path.join(MEMORY_DIR, `${ns}.json`));
125
+ for (const [key, entry] of Object.entries(store)) {
126
+ const target = PROJECT_STATE_KEYS.has(key) ? project : identity;
127
+ place(target, ns, key, entry);
128
+ }
129
+ }
130
+ // 3. Write the consolidated stores.
131
+ fs.writeFileSync(identityFile, JSON.stringify(identity, null, 2), 'utf8');
132
+ fs.writeFileSync(projectFile, JSON.stringify(project, null, 2), 'utf8');
133
+ return {
134
+ backupDir,
135
+ identityKeys: Object.keys(identity).length,
136
+ projectKeys: Object.keys(project).length,
137
+ conflicts,
138
+ alreadyDone: false,
139
+ };
140
+ }
141
+ //# sourceMappingURL=memory-consolidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-consolidate.js","sourceRoot":"","sources":["../../src/agent/memory-consolidate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Mixture of Agents — Phase 2: parallel domain sub-agents.
3
+ *
4
+ * For exploratory-shaped tasks (per loop-profile.ts — that's where ambiguity
5
+ * actually benefits from multiple angles), fan out 2-3 read-only sub-agents
6
+ * in parallel, each framed with a different domain lens, then synthesize
7
+ * their reports into one answer with a real model call.
8
+ *
9
+ * Design constraints (see docs/MIXTURE_OF_AGENTS.md):
10
+ * - Read-only only — parallel sub-agents never edit files.
11
+ * - Gated by task shape AND an explicit opt-in (--moa). The N-call cost is
12
+ * real; it stays off the default path until benchmarks justify it.
13
+ * - Synthesis is an actual provider call — reconciling N expert opinions
14
+ * is judgment, not pattern matching.
15
+ */
16
+ import type { LLMProvider } from '../providers/types.js';
17
+ import type { ProjectContext } from './context.js';
18
+ import type { Display } from '../cli/display.js';
19
+ import type { LoopResult } from './loop.js';
20
+ export interface MixtureOptions {
21
+ provider: LLMProvider;
22
+ task: string;
23
+ context: ProjectContext;
24
+ display: Display;
25
+ /** Optional model pricing id, as in LoopOptions. */
26
+ pricingModel?: string;
27
+ }
28
+ /**
29
+ * Run the mixture: N parallel read-only sub-agents + one synthesis call.
30
+ * Returns a LoopResult so callers can treat it exactly like a single-agent
31
+ * run (summary display, cost footer, exit codes).
32
+ */
33
+ export declare function runMixtureOfAgents(opts: MixtureOptions): Promise<LoopResult>;