aura-code 0.5.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) 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/domain-expertise.d.ts +22 -0
  12. package/dist/agent/domain-expertise.js +110 -0
  13. package/dist/agent/domain-expertise.js.map +1 -0
  14. package/dist/agent/executive-queue.d.ts +26 -0
  15. package/dist/agent/executive-queue.js +50 -0
  16. package/dist/agent/executive-queue.js.map +1 -0
  17. package/dist/agent/generational-flush.d.ts +28 -0
  18. package/dist/agent/generational-flush.js +48 -0
  19. package/dist/agent/generational-flush.js.map +1 -0
  20. package/dist/agent/loop-profile.d.ts +50 -0
  21. package/dist/agent/loop-profile.js +88 -0
  22. package/dist/agent/loop-profile.js.map +1 -0
  23. package/dist/agent/loop.d.ts +14 -5
  24. package/dist/agent/loop.js +167 -23
  25. package/dist/agent/loop.js.map +1 -1
  26. package/dist/agent/memory-consolidate.d.ts +14 -0
  27. package/dist/agent/memory-consolidate.js +141 -0
  28. package/dist/agent/memory-consolidate.js.map +1 -0
  29. package/dist/agent/mixture.d.ts +33 -0
  30. package/dist/agent/mixture.js +138 -0
  31. package/dist/agent/mixture.js.map +1 -0
  32. package/dist/agent/spawner.js +2 -2
  33. package/dist/agent/spawner.js.map +1 -1
  34. package/dist/agent/system-prompt.d.ts +1 -1
  35. package/dist/agent/system-prompt.js +49 -13
  36. package/dist/agent/system-prompt.js.map +1 -1
  37. package/dist/agent/unified-memory.d.ts +15 -0
  38. package/dist/agent/unified-memory.js +164 -0
  39. package/dist/agent/unified-memory.js.map +1 -0
  40. package/dist/checkpoints/engine.d.ts +44 -0
  41. package/dist/checkpoints/engine.js +324 -0
  42. package/dist/checkpoints/engine.js.map +1 -0
  43. package/dist/cli/command-palette.d.ts +26 -0
  44. package/dist/cli/command-palette.js +133 -0
  45. package/dist/cli/command-palette.js.map +1 -0
  46. package/dist/cli/context-health.d.ts +51 -0
  47. package/dist/cli/context-health.js +187 -0
  48. package/dist/cli/context-health.js.map +1 -0
  49. package/dist/cli/diamond.d.ts +67 -0
  50. package/dist/cli/diamond.js +222 -12
  51. package/dist/cli/diamond.js.map +1 -1
  52. package/dist/cli/dic.d.ts +2 -0
  53. package/dist/cli/dic.js +106 -0
  54. package/dist/cli/dic.js.map +1 -0
  55. package/dist/cli/diff-view.d.ts +18 -0
  56. package/dist/cli/diff-view.js +114 -0
  57. package/dist/cli/diff-view.js.map +1 -0
  58. package/dist/cli/display.d.ts +18 -4
  59. package/dist/cli/display.js +74 -146
  60. package/dist/cli/display.js.map +1 -1
  61. package/dist/cli/help-data.d.ts +7 -0
  62. package/dist/cli/help-data.js +80 -0
  63. package/dist/cli/help-data.js.map +1 -0
  64. package/dist/cli/index.js +1001 -788
  65. package/dist/cli/index.js.map +1 -1
  66. package/dist/cli/markdown.d.ts +5 -0
  67. package/dist/cli/markdown.js +128 -0
  68. package/dist/cli/markdown.js.map +1 -0
  69. package/dist/cli/model-select.d.ts +39 -0
  70. package/dist/cli/model-select.js +65 -0
  71. package/dist/cli/model-select.js.map +1 -0
  72. package/dist/cli/tui.d.ts +34 -0
  73. package/dist/cli/tui.js +1176 -0
  74. package/dist/cli/tui.js.map +1 -0
  75. package/dist/config/defaults.d.ts +6 -17
  76. package/dist/config/defaults.js +25 -39
  77. package/dist/config/defaults.js.map +1 -1
  78. package/dist/config/project-config.d.ts +2 -6
  79. package/dist/config/project-config.js +2 -2
  80. package/dist/config/project-config.js.map +1 -1
  81. package/dist/doctor/checks.d.ts +18 -0
  82. package/dist/doctor/checks.js +524 -0
  83. package/dist/doctor/checks.js.map +1 -0
  84. package/dist/doctor/index.d.ts +4 -0
  85. package/dist/doctor/index.js +229 -0
  86. package/dist/doctor/index.js.map +1 -0
  87. package/dist/doctor/repair.d.ts +19 -0
  88. package/dist/doctor/repair.js +126 -0
  89. package/dist/doctor/repair.js.map +1 -0
  90. package/dist/doctor/types.d.ts +38 -0
  91. package/dist/doctor/types.js +10 -0
  92. package/dist/doctor/types.js.map +1 -0
  93. package/dist/dream/dream.d.ts +79 -36
  94. package/dist/dream/dream.js +327 -117
  95. package/dist/dream/dream.js.map +1 -1
  96. package/dist/dream/episode.d.ts +17 -0
  97. package/dist/dream/episode.js +116 -0
  98. package/dist/dream/episode.js.map +1 -0
  99. package/dist/dream/okf.d.ts +10 -0
  100. package/dist/dream/okf.js +280 -0
  101. package/dist/dream/okf.js.map +1 -0
  102. package/dist/dream/parser.d.ts +60 -0
  103. package/dist/dream/parser.js +176 -0
  104. package/dist/dream/parser.js.map +1 -0
  105. package/dist/dream/reconcile.d.ts +69 -0
  106. package/dist/dream/reconcile.js +303 -0
  107. package/dist/dream/reconcile.js.map +1 -0
  108. package/dist/kanban/engine.d.ts +26 -0
  109. package/dist/kanban/engine.js +208 -0
  110. package/dist/kanban/engine.js.map +1 -0
  111. package/dist/kanban/types.d.ts +19 -0
  112. package/dist/kanban/types.js +9 -1
  113. package/dist/kanban/types.js.map +1 -1
  114. package/dist/machina/index.d.ts +16 -0
  115. package/dist/machina/index.js +61 -0
  116. package/dist/machina/index.js.map +1 -0
  117. package/dist/machina/render-html.d.ts +2 -0
  118. package/dist/machina/render-html.js +191 -0
  119. package/dist/machina/render-html.js.map +1 -0
  120. package/dist/machina/render-terminal.d.ts +2 -0
  121. package/dist/machina/render-terminal.js +99 -0
  122. package/dist/machina/render-terminal.js.map +1 -0
  123. package/dist/machina/repair.d.ts +23 -0
  124. package/dist/machina/repair.js +98 -0
  125. package/dist/machina/repair.js.map +1 -0
  126. package/dist/machina/spec.d.ts +61 -0
  127. package/dist/machina/spec.js +124 -0
  128. package/dist/machina/spec.js.map +1 -0
  129. package/dist/machina/verify.d.ts +39 -0
  130. package/dist/machina/verify.js +95 -0
  131. package/dist/machina/verify.js.map +1 -0
  132. package/dist/mining/extract.d.ts +34 -0
  133. package/dist/mining/extract.js +229 -0
  134. package/dist/mining/extract.js.map +1 -0
  135. package/dist/mining/refine.d.ts +28 -0
  136. package/dist/mining/refine.js +256 -0
  137. package/dist/mining/refine.js.map +1 -0
  138. package/dist/perception/extractor.js +5 -3
  139. package/dist/perception/extractor.js.map +1 -1
  140. package/dist/perception/graph-store.d.ts +0 -11
  141. package/dist/perception/graph-store.js +0 -33
  142. package/dist/perception/graph-store.js.map +1 -1
  143. package/dist/perception/index.d.ts +1 -1
  144. package/dist/perception/index.js +1 -2
  145. package/dist/perception/index.js.map +1 -1
  146. package/dist/plugins/commands.d.ts +38 -0
  147. package/dist/plugins/commands.js +134 -0
  148. package/dist/plugins/commands.js.map +1 -0
  149. package/dist/plugins/frontmatter.d.ts +14 -0
  150. package/dist/plugins/frontmatter.js +78 -0
  151. package/dist/plugins/frontmatter.js.map +1 -0
  152. package/dist/plugins/hooks.d.ts +12 -0
  153. package/dist/plugins/hooks.js +148 -0
  154. package/dist/plugins/hooks.js.map +1 -0
  155. package/dist/plugins/loader.d.ts +7 -0
  156. package/dist/plugins/loader.js +255 -0
  157. package/dist/plugins/loader.js.map +1 -0
  158. package/dist/plugins/market.d.ts +23 -0
  159. package/dist/plugins/market.js +281 -0
  160. package/dist/plugins/market.js.map +1 -0
  161. package/dist/plugins/types.d.ts +90 -0
  162. package/dist/plugins/types.js +20 -0
  163. package/dist/plugins/types.js.map +1 -0
  164. package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
  165. package/dist/providers/anthropic-oauth-draft.js +414 -0
  166. package/dist/providers/anthropic-oauth-draft.js.map +1 -0
  167. package/dist/providers/anthropic.d.ts +4 -1
  168. package/dist/providers/anthropic.js +34 -6
  169. package/dist/providers/anthropic.js.map +1 -1
  170. package/dist/providers/factory.d.ts +71 -14
  171. package/dist/providers/factory.js +205 -124
  172. package/dist/providers/factory.js.map +1 -1
  173. package/dist/providers/google.js +8 -21
  174. package/dist/providers/google.js.map +1 -1
  175. package/dist/providers/live-models.d.ts +23 -0
  176. package/dist/providers/live-models.js +145 -0
  177. package/dist/providers/live-models.js.map +1 -0
  178. package/dist/providers/openai-compatible.d.ts +1 -12
  179. package/dist/providers/openai-compatible.js +71 -108
  180. package/dist/providers/openai-compatible.js.map +1 -1
  181. package/dist/providers/resilient-factory.js +1 -1
  182. package/dist/providers/resilient-factory.js.map +1 -1
  183. package/dist/rem/graph.d.ts +72 -0
  184. package/dist/rem/graph.js +139 -0
  185. package/dist/rem/graph.js.map +1 -0
  186. package/dist/rem/index.d.ts +16 -0
  187. package/dist/rem/index.js +60 -0
  188. package/dist/rem/index.js.map +1 -0
  189. package/dist/rem/render-html.d.ts +2 -0
  190. package/dist/rem/render-html.js +189 -0
  191. package/dist/rem/render-html.js.map +1 -0
  192. package/dist/rem/render-terminal.d.ts +4 -0
  193. package/dist/rem/render-terminal.js +94 -0
  194. package/dist/rem/render-terminal.js.map +1 -0
  195. package/dist/repl/queue.d.ts +22 -0
  196. package/dist/repl/queue.js +165 -0
  197. package/dist/repl/queue.js.map +1 -0
  198. package/dist/repl/side-channel.d.ts +23 -0
  199. package/dist/repl/side-channel.js +63 -0
  200. package/dist/repl/side-channel.js.map +1 -0
  201. package/dist/research/council.d.ts +5 -2
  202. package/dist/research/council.js +73 -10
  203. package/dist/research/council.js.map +1 -1
  204. package/dist/ruby/alternator.d.ts +11 -30
  205. package/dist/ruby/alternator.js +59 -38
  206. package/dist/ruby/alternator.js.map +1 -1
  207. package/dist/ruby/episode-capture.d.ts +0 -10
  208. package/dist/ruby/episode-capture.js +0 -33
  209. package/dist/ruby/episode-capture.js.map +1 -1
  210. package/dist/ruby/types.js +1 -1
  211. package/dist/ruby/types.js.map +1 -1
  212. package/dist/safety/path-jail.d.ts +17 -0
  213. package/dist/safety/path-jail.js +100 -0
  214. package/dist/safety/path-jail.js.map +1 -0
  215. package/dist/safety/permissions.d.ts +12 -21
  216. package/dist/safety/permissions.js +81 -216
  217. package/dist/safety/permissions.js.map +1 -1
  218. package/dist/safety/ssrf.d.ts +29 -0
  219. package/dist/safety/ssrf.js +185 -0
  220. package/dist/safety/ssrf.js.map +1 -0
  221. package/dist/server/index.js +64 -10
  222. package/dist/server/index.js.map +1 -1
  223. package/dist/setup/first-run.d.ts +0 -24
  224. package/dist/setup/first-run.js +10 -344
  225. package/dist/setup/first-run.js.map +1 -1
  226. package/dist/setup/key-store.d.ts +12 -0
  227. package/dist/setup/key-store.js +108 -0
  228. package/dist/setup/key-store.js.map +1 -0
  229. package/dist/setup/provider-registry.js +31 -18
  230. package/dist/setup/provider-registry.js.map +1 -1
  231. package/dist/setup/provider-test.d.ts +7 -0
  232. package/dist/setup/provider-test.js +73 -10
  233. package/dist/setup/provider-test.js.map +1 -1
  234. package/dist/setup/provider-wizard.d.ts +4 -1
  235. package/dist/setup/provider-wizard.js +92 -26
  236. package/dist/setup/provider-wizard.js.map +1 -1
  237. package/dist/setup/xiaomi.d.ts +1 -1
  238. package/dist/setup/xiaomi.js +3 -3
  239. package/dist/setup/xiaomi.js.map +1 -1
  240. package/dist/tools/browser.js +6 -4
  241. package/dist/tools/browser.js.map +1 -1
  242. package/dist/tools/clipboard.js +7 -1
  243. package/dist/tools/clipboard.js.map +1 -1
  244. package/dist/tools/dictate.d.ts +60 -0
  245. package/dist/tools/dictate.js +983 -0
  246. package/dist/tools/dictate.js.map +1 -0
  247. package/dist/tools/dictate_patched.js +1057 -0
  248. package/dist/tools/edit-file.js +10 -2
  249. package/dist/tools/edit-file.js.map +1 -1
  250. package/dist/tools/gmail-tool.d.ts +5 -1
  251. package/dist/tools/gmail-tool.js +151 -11
  252. package/dist/tools/gmail-tool.js.map +1 -1
  253. package/dist/tools/http-request.js +14 -4
  254. package/dist/tools/http-request.js.map +1 -1
  255. package/dist/tools/image-read.js +34 -2
  256. package/dist/tools/image-read.js.map +1 -1
  257. package/dist/tools/index.d.ts +16 -1
  258. package/dist/tools/index.js +59 -8
  259. package/dist/tools/index.js.map +1 -1
  260. package/dist/tools/mcp.js +12 -0
  261. package/dist/tools/mcp.js.map +1 -1
  262. package/dist/tools/read-file.js +10 -14
  263. package/dist/tools/read-file.js.map +1 -1
  264. package/dist/tools/telegram-audio-policy.d.ts +30 -0
  265. package/dist/tools/telegram-audio-policy.js +49 -0
  266. package/dist/tools/telegram-audio-policy.js.map +1 -0
  267. package/dist/tools/telegram-bot.js +1136 -539
  268. package/dist/tools/telegram-bot.js.map +1 -1
  269. package/dist/tools/telegram-voice.d.ts +18 -5
  270. package/dist/tools/telegram-voice.js +54 -12
  271. package/dist/tools/telegram-voice.js.map +1 -1
  272. package/dist/tools/telegram.d.ts +3 -3
  273. package/dist/tools/telegram.js +5 -84
  274. package/dist/tools/telegram.js.map +1 -1
  275. package/dist/tools/tools.d.ts +2 -14
  276. package/dist/tools/tools.js +79 -144
  277. package/dist/tools/tools.js.map +1 -1
  278. package/dist/tools/web-fetch.js +39 -7
  279. package/dist/tools/web-fetch.js.map +1 -1
  280. package/dist/tools/web-search.js +2 -3
  281. package/dist/tools/web-search.js.map +1 -1
  282. package/dist/util/errors.js +1 -15
  283. package/dist/util/errors.js.map +1 -1
  284. package/dist/util/json-repair.d.ts +11 -0
  285. package/dist/util/json-repair.js +31 -0
  286. package/dist/util/json-repair.js.map +1 -0
  287. package/dist/util/rate-limiter.js +2 -8
  288. package/dist/util/rate-limiter.js.map +1 -1
  289. package/dist/viz/index.js +793 -792
  290. package/dist/viz/index.js.map +1 -1
  291. package/dist/viz/reader.d.ts +33 -0
  292. package/dist/viz/reader.js +343 -0
  293. package/dist/viz/reader.js.map +1 -0
  294. package/package.json +13 -32
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maybeRollover = maybeRollover;
4
+ const compactor_js_1 = require("./compactor.js");
5
+ const dream_js_1 = require("../dream/dream.js");
6
+ const FLUSH_SYSTEM = [
7
+ 'You distill an in-progress coding session\'s compacted history into durable memory bullets.',
8
+ 'Write ONLY markdown bullet points, one per line, each starting with "- ".',
9
+ 'Each bullet must be a concrete, standalone fact: a decision made, a file touched, a root cause found, or an unresolved thread.',
10
+ 'Be specific — file names, exact behavior, not generic advice. No headers, no prose paragraphs.',
11
+ ].join(' ');
12
+ /** Per-process counter for sessionFlushFile's uniqueness suffix. */
13
+ let flushSeq = 0;
14
+ /**
15
+ * Flush the current recap to the dream store and replace it in `history`
16
+ * with a pointer line + a freshly regenerated executive digest and affect
17
+ * hint (never the old recap's text — that's what's being flushed). Mutates
18
+ * `history` in place, matching compactHistory's contract. No-ops if there's
19
+ * no recap to flush.
20
+ */
21
+ async function maybeRollover(history, sessionRoot, provider, extras = {}) {
22
+ const recapIndex = (0, compactor_js_1.findRecapIndex)(history);
23
+ if (recapIndex === -1)
24
+ return { flushed: false };
25
+ const recap = history[recapIndex];
26
+ flushSeq++;
27
+ const flushPath = (0, dream_js_1.sessionFlushFile)(sessionRoot, flushSeq);
28
+ await (0, dream_js_1.distillText)({
29
+ systemPrompt: FLUSH_SYSTEM,
30
+ userContent: recap.content,
31
+ provider,
32
+ outPath: flushPath,
33
+ });
34
+ const pointer = {
35
+ role: 'assistant',
36
+ content: [
37
+ `[Session context flushed to memory (${flushPath}) — continuing with a fresh context window.]`,
38
+ ...(extras.affectHint ? [extras.affectHint] : []),
39
+ ...(extras.executiveDigest ? ['', extras.executiveDigest] : []),
40
+ ].join('\n'),
41
+ };
42
+ // Note: the pointer's content deliberately does NOT start with compactor's
43
+ // RECAP_MARKER, so getRecapGeneration(history) reads back to 0 next time —
44
+ // this message is ordinary content from here on, not a growing recap.
45
+ history.splice(recapIndex, 1, pointer);
46
+ return { flushed: true, flushPath };
47
+ }
48
+ //# sourceMappingURL=generational-flush.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generational-flush.js","sourceRoot":"","sources":["../../src/agent/generational-flush.ts"],"names":[],"mappings":";;AAsCA,sCAmCC;AA5DD,iDAAgD;AAChD,gDAAkE;AAElE,MAAM,YAAY,GAAG;IACnB,6FAA6F;IAC7F,2EAA2E;IAC3E,gIAAgI;IAChI,gGAAgG;CACjG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,oEAAoE;AACpE,IAAI,QAAQ,GAAG,CAAC,CAAC;AAOjB;;;;;;GAMG;AACI,KAAK,UAAU,aAAa,CACjC,OAAyB,EACzB,WAAmB,EACnB,QAAqB,EACrB,SAA4D,EAAE;IAE9D,MAAM,UAAU,GAAG,IAAA,6BAAc,EAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEjD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAA2C,CAAC;IAC5E,QAAQ,EAAE,CAAC;IACX,MAAM,SAAS,GAAG,IAAA,2BAAgB,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE1D,MAAM,IAAA,sBAAW,EAAC;QAChB,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,KAAK,CAAC,OAAO;QAC1B,QAAQ;QACR,OAAO,EAAE,SAAS;KACnB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAmB;QAC9B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE;YACP,uCAAuC,SAAS,8CAA8C;YAC9F,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;IAEF,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAEvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Task classification for turn-budget sizing.
3
+ *
4
+ * Cheap heuristics only — no LLM call. Spending a model turn to decide
5
+ * how many turns to allow defeats the purpose. This is pattern matching
6
+ * on the task string, nothing more.
7
+ */
8
+ export type TaskShape = 'single-file' | 'multi-file' | 'exploratory';
9
+ export interface LoopProfile {
10
+ maxTurns: number;
11
+ shape: TaskShape;
12
+ /** How many identical consecutive turn-signatures count as a stall. */
13
+ stallThreshold: number;
14
+ /**
15
+ * One-time budget upgrade: if the run hits maxTurns while still making
16
+ * progress (not stalled), widen once to this ceiling instead of ending
17
+ * with a resume hint. Absent for shapes already at the top tier and
18
+ * whenever the user passed an explicit --max-turns (a hard ceiling).
19
+ */
20
+ widenTo?: number;
21
+ }
22
+ /**
23
+ * Classify a task string into a rough shape. Defaults to 'single-file'
24
+ * when nothing matches — the common case (fix X, add Y to file Z).
25
+ */
26
+ export declare function classifyTask(task: string): TaskShape;
27
+ /**
28
+ * Get the loop profile for a task.
29
+ *
30
+ * @param task The task prompt.
31
+ * @param override Explicit maxTurns from CLI flag or config — always wins,
32
+ * and is a hard ceiling (no adaptive widening past it).
33
+ */
34
+ export declare function getLoopProfile(task: string, override?: number): LoopProfile;
35
+ export type StallKind = 'repeat' | 'cycle';
36
+ /**
37
+ * Detect a stalled run from the sequence of per-turn tool-call signatures.
38
+ *
39
+ * - 'repeat': the last `threshold` signatures are identical (A A A) — the
40
+ * agent retrying the same call verbatim.
41
+ * - 'cycle': the last `2 * threshold` signatures alternate between two
42
+ * distinct signatures (A B A B A B) — the agent bouncing between two
43
+ * equally-wrong edits. Requires `threshold` full repetitions of the pair,
44
+ * so it is strictly harder to trigger than 'repeat'.
45
+ *
46
+ * Exact-match only, deliberately conservative: a false stop on a run that
47
+ * was making slow progress is worse than a few wasted turns, since a human
48
+ * can always resume a stopped session.
49
+ */
50
+ export declare function detectStall(signatures: string[], threshold: number): StallKind | null;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /**
3
+ * Task classification for turn-budget sizing.
4
+ *
5
+ * Cheap heuristics only — no LLM call. Spending a model turn to decide
6
+ * how many turns to allow defeats the purpose. This is pattern matching
7
+ * on the task string, nothing more.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.classifyTask = classifyTask;
11
+ exports.getLoopProfile = getLoopProfile;
12
+ exports.detectStall = detectStall;
13
+ const MULTI_FILE_SIGNALS = [
14
+ 'all endpoints', 'every file', 'across the', 'throughout the',
15
+ 'all files', 'each file', 'entire codebase', 'orchestrate',
16
+ ];
17
+ const EXPLORATORY_SIGNALS = [
18
+ 'explain', 'analyze', 'investigate', 'research', 'understand',
19
+ 'why does', 'why is', 'how does', 'what causes', 'diagnose',
20
+ ];
21
+ /**
22
+ * Classify a task string into a rough shape. Defaults to 'single-file'
23
+ * when nothing matches — the common case (fix X, add Y to file Z).
24
+ */
25
+ function classifyTask(task) {
26
+ const lower = task.toLowerCase();
27
+ if (MULTI_FILE_SIGNALS.some((s) => lower.includes(s))) {
28
+ return 'multi-file';
29
+ }
30
+ if (EXPLORATORY_SIGNALS.some((s) => lower.includes(s))) {
31
+ return 'exploratory';
32
+ }
33
+ return 'single-file';
34
+ }
35
+ const PROFILES = {
36
+ 'single-file': { maxTurns: 30, stallThreshold: 3, widenTo: 80 },
37
+ 'multi-file': { maxTurns: 150, stallThreshold: 4 },
38
+ 'exploratory': { maxTurns: 80, stallThreshold: 4 },
39
+ };
40
+ /**
41
+ * Get the loop profile for a task.
42
+ *
43
+ * @param task The task prompt.
44
+ * @param override Explicit maxTurns from CLI flag or config — always wins,
45
+ * and is a hard ceiling (no adaptive widening past it).
46
+ */
47
+ function getLoopProfile(task, override) {
48
+ const shape = classifyTask(task);
49
+ const base = PROFILES[shape];
50
+ if (override !== undefined) {
51
+ return { shape, maxTurns: override, stallThreshold: base.stallThreshold };
52
+ }
53
+ return {
54
+ shape,
55
+ maxTurns: base.maxTurns,
56
+ stallThreshold: base.stallThreshold,
57
+ widenTo: base.widenTo,
58
+ };
59
+ }
60
+ /**
61
+ * Detect a stalled run from the sequence of per-turn tool-call signatures.
62
+ *
63
+ * - 'repeat': the last `threshold` signatures are identical (A A A) — the
64
+ * agent retrying the same call verbatim.
65
+ * - 'cycle': the last `2 * threshold` signatures alternate between two
66
+ * distinct signatures (A B A B A B) — the agent bouncing between two
67
+ * equally-wrong edits. Requires `threshold` full repetitions of the pair,
68
+ * so it is strictly harder to trigger than 'repeat'.
69
+ *
70
+ * Exact-match only, deliberately conservative: a false stop on a run that
71
+ * was making slow progress is worse than a few wasted turns, since a human
72
+ * can always resume a stopped session.
73
+ */
74
+ function detectStall(signatures, threshold) {
75
+ const tail = signatures.slice(-threshold);
76
+ if (tail.length === threshold && tail.every((s) => s === tail[0])) {
77
+ return 'repeat';
78
+ }
79
+ const pairTail = signatures.slice(-2 * threshold);
80
+ if (pairTail.length === 2 * threshold) {
81
+ const [a, b] = pairTail;
82
+ if (a !== b && pairTail.every((s, i) => s === (i % 2 === 0 ? a : b))) {
83
+ return 'cycle';
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ //# sourceMappingURL=loop-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-profile.js","sourceRoot":"","sources":["../../src/agent/loop-profile.ts"],"names":[],"mappings":"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"}
@@ -25,12 +25,20 @@ export interface LoopOptions {
25
25
  disableSpawn?: boolean;
26
26
  /** Internal: skip post-task verification (used by runWithVerification wrapper). */
27
27
  verify?: boolean;
28
- /**
29
- * Custom confirmation function for destructive operations.
30
- * Defaults to terminal-based confirm() from permissions.
31
- * Telegram bot overrides this to send approval requests via Telegram messages.
32
- */
28
+ /** Shadow-git checkpoints before mutating tool calls (default: true; no-op outside a git repo). */
29
+ checkpoints?: boolean;
30
+ /** Plugin hooks fired around tool execution (PreToolUse can block). */
31
+ hooks?: import('../plugins/types.js').HookEntry[];
32
+ /** Optional abort signal — when aborted the loop stops after the current tool turn. */
33
+ abortSignal?: AbortSignal;
34
+ /** Confirmation prompt override for needs-confirm tool calls. Defaults to the
35
+ * terminal readline confirm — embedded callers (alternator, bots) supply
36
+ * their own so confirmation isn't silently impossible off-terminal. */
33
37
  confirmFn?: (message: string) => Promise<boolean>;
38
+ /** Optional shared context-health tracker (e.g. the REPL's). When omitted the
39
+ * loop creates an internal one. Passing it in lets a /context command read
40
+ * the accumulated compaction history and per-turn snapshots. */
41
+ healthTracker?: import('../cli/context-health.js').ContextHealthTracker;
34
42
  }
35
43
  export interface LoopResult {
36
44
  success: boolean;
@@ -52,6 +60,7 @@ export interface TokenUsage {
52
60
  outputTokens: number;
53
61
  totalTokens: number;
54
62
  }
63
+ export declare function costFor(model: string, input: number, output: number): number;
55
64
  export declare function runAgentLoop(opts: LoopOptions): Promise<LoopResult>;
56
65
  export declare function runAgentLoopVerified(opts: LoopOptions, config: VerificationConfig, projectRoot: string): Promise<{
57
66
  loopResult: LoopResult;
@@ -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,6 +59,10 @@ 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 },
@@ -62,7 +73,7 @@ function costFor(model, input, output) {
62
73
  }
63
74
  async function runAgentLoop(opts) {
64
75
  const { provider, task, context, permissions, display } = opts;
65
- const maxTurns = opts.maxTurns ?? defaults_js_1.DEFAULTS.maxTurns;
76
+ const profile = (0, loop_profile_js_1.getLoopProfile)(task, opts.maxTurns);
66
77
  const pricingModel = opts.pricingModel ?? provider.model;
67
78
  const system = (0, system_prompt_js_1.buildSystemPrompt)(context, provider.name, task);
68
79
  const history = [
@@ -77,29 +88,97 @@ async function runAgentLoop(opts) {
77
88
  }
78
89
  display.agentThinking();
79
90
  try {
80
- return await runLoopBody({ opts, provider, system, history, maxTurns, pricingModel, display, permissions, turns, toolCallCount, usage });
91
+ return await runLoopBody({ opts, provider, system, history, profile, pricingModel, display, permissions, turns, toolCallCount, usage });
81
92
  }
82
93
  finally {
83
94
  (0, spawner_js_1.clearSpawner)();
84
95
  }
85
96
  }
86
97
  async function runLoopBody(args) {
87
- const { opts, provider, system, history, maxTurns, pricingModel, display, permissions } = args;
98
+ const { opts, provider, system, history, profile, pricingModel, display, permissions } = args;
88
99
  let { turns, toolCallCount, usage } = args;
89
100
  const toolCallLog = [];
90
- while (turns < maxTurns) {
101
+ // Bounded record of state-altering calls; its digest survives compaction so
102
+ // the model never repeats a write/edit/command it already executed.
103
+ const execQueue = new executive_queue_js_1.ExecutiveQueue();
104
+ // Context health tracker: observational visibility into token pressure,
105
+ // compaction ladder, and session cost. Never mutates history itself.
106
+ // Use the caller-provided tracker (so /context can read it) or make one.
107
+ const health = opts.healthTracker ?? new context_health_js_1.ContextHealthTracker(() => system, () => history, provider.model, pricingModel);
108
+ health.updateSystem(system);
109
+ // Stall detection: if the recent turns repeat the exact same tool call(s)
110
+ // (or alternate between the same two), the agent is stuck rather than
111
+ // progressing. Stopping early here saves turns/cost on a run that would
112
+ // otherwise burn out to maxTurns without ever changing course.
113
+ const turnSignatures = [];
114
+ let stall = null;
115
+ // Adaptive widening: a run that hits its profile ceiling while still
116
+ // making progress gets ONE upgrade to profile.widenTo instead of dying
117
+ // with a resume hint. Explicit --max-turns never widens.
118
+ let maxTurns = profile.maxTurns;
119
+ let widened = false;
120
+ // Mutable bag for per-loop state (empty-response retry counter, etc.).
121
+ const loopState = {};
122
+ // Sticky set of triggered conditional tools — survives history compaction.
123
+ const includedTools = new Set();
124
+ while (true) {
125
+ if (turns >= maxTurns) {
126
+ if (profile.widenTo !== undefined && !widened) {
127
+ widened = true;
128
+ maxTurns = profile.widenTo;
129
+ display.warning(`Turn budget (${profile.maxTurns}) reached with work in progress — widening once to ${maxTurns}.`);
130
+ }
131
+ else {
132
+ break;
133
+ }
134
+ }
135
+ // Abort check — user requested stop via :stop / Ctrl+C
136
+ if (opts.abortSignal?.aborted) {
137
+ display.warning('Task cancelled by user — stopping loop.');
138
+ break;
139
+ }
91
140
  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);
141
+ health.incrementTurn();
142
+ // Compaction check runs pre-call: estimateContextTokens measures the
143
+ // payload about to be sent (see its doc for why not per-turn usage sums).
144
+ {
145
+ const compactionExtras = {
146
+ executiveDigest: execQueue.size > 0 ? execQueue.digest() : undefined,
147
+ affectHint: (0, affect_js_1.detectFrustration)(history) ?? undefined,
148
+ };
149
+ // The ladder in compactHistory escalates its own trigger per recap
150
+ // generation; once a recap has been recompacted ROLLOVER_AT_GENERATION
151
+ // times, a further in-place pass would just be lossy recompaction —
152
+ // flush it to the dream store instead (one LLM call) and start clean.
153
+ if ((0, compactor_js_1.getRecapGeneration)(history) >= compactor_js_1.ROLLOVER_AT_GENERATION) {
154
+ const beforeTokens = (0, compactor_js_1.estimateContextTokens)(system, history);
155
+ const { flushed } = await (0, generational_flush_js_1.maybeRollover)(history, opts.context.root, provider, compactionExtras);
156
+ if (flushed) {
157
+ const afterTokens = (0, compactor_js_1.estimateContextTokens)(system, history);
158
+ const generation = (0, compactor_js_1.getRecapGeneration)(history);
159
+ health.recordCompaction(beforeTokens, afterTokens, generation);
160
+ display.compactionEvent?.({ beforeTokens, afterTokens, generation, threshold: beforeTokens });
161
+ await persist(opts.sessionPath, history);
162
+ }
163
+ }
164
+ else {
165
+ const estimated = (0, compactor_js_1.estimateContextTokens)(system, history);
166
+ const compacted = (0, compactor_js_1.compactHistory)(history, estimated, provider.model, compactionExtras);
167
+ if (compacted) {
168
+ const afterTokens = (0, compactor_js_1.estimateContextTokens)(system, history);
169
+ const generation = (0, compactor_js_1.getRecapGeneration)(history);
170
+ health.recordCompaction(estimated, afterTokens, generation);
171
+ display.compactionEvent?.({ beforeTokens: estimated, afterTokens, generation, threshold: estimated });
172
+ await persist(opts.sessionPath, history);
173
+ }
174
+ }
175
+ }
176
+ display.contextBar?.(health.snapshot(usage.inputTokens, usage.outputTokens));
98
177
  let responseText = '';
99
178
  const responseToolCalls = [];
100
179
  let finalResponse = null;
101
180
  try {
102
- const stream = provider.stream(system, history, index_js_1.TOOL_DEFINITIONS);
181
+ const stream = provider.stream(system, history, (0, index_js_1.selectTools)(opts.task, history, includedTools));
103
182
  for await (const chunk of stream) {
104
183
  switch (chunk.type) {
105
184
  case 'text':
@@ -133,12 +212,6 @@ async function runLoopBody(args) {
133
212
  }
134
213
  catch (e) {
135
214
  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
215
  await persist(opts.sessionPath, history);
143
216
  return {
144
217
  success: false,
@@ -149,13 +222,36 @@ async function runLoopBody(args) {
149
222
  }
150
223
  if (responseText)
151
224
  display.streamEnd();
225
+ // Guard: an empty response with no tools and stop reason "done"
226
+ // usually means the provider returned a silent error / rate-limit /
227
+ // content filter. Retry up to 3 times before accepting it as "done"
228
+ // so sessions don't silently die with no output.
152
229
  const noProgress = !responseText && responseToolCalls.length === 0;
153
- if (noProgress || finalResponse?.stopReason === 'done') {
230
+ if (finalResponse?.stopReason === 'done' && noProgress) {
231
+ if (!('_emptyRetries' in loopState))
232
+ loopState._emptyRetries = 0;
233
+ loopState._emptyRetries++;
234
+ if (loopState._emptyRetries <= 3) {
235
+ display.warning(`Empty response from provider (attempt ${loopState._emptyRetries}/3) — retrying…`);
236
+ display.agentThinking();
237
+ continue;
238
+ }
239
+ // Exhausted retries — provider can't produce output
240
+ history.push({ role: 'assistant', content: '' });
241
+ await persist(opts.sessionPath, history);
242
+ return {
243
+ success: false,
244
+ summary: 'Provider returned empty response after 4 attempts — likely rate-limited or filtered',
245
+ turns, toolCallCount, usage, history, toolCallLog,
246
+ costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens),
247
+ };
248
+ }
249
+ if (finalResponse?.stopReason === 'done') {
154
250
  history.push({ role: 'assistant', content: responseText });
155
251
  await persist(opts.sessionPath, history);
156
252
  return {
157
253
  success: true,
158
- summary: responseText || '(Task completed with no output)',
254
+ summary: responseText,
159
255
  turns, toolCallCount, usage, history, toolCallLog,
160
256
  costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens),
161
257
  };
@@ -169,7 +265,17 @@ async function runLoopBody(args) {
169
265
  content: responseText,
170
266
  toolCalls: responseToolCalls,
171
267
  });
268
+ // Record this turn's tool-call signature before executing, so a
269
+ // stall is detected even if every call in the streak errors out.
270
+ if (responseToolCalls.length > 0) {
271
+ const signature = JSON.stringify(responseToolCalls.map((c) => ({ name: c.name, input: c.input })));
272
+ turnSignatures.push(signature);
273
+ stall = (0, loop_profile_js_1.detectStall)(turnSignatures, profile.stallThreshold);
274
+ }
172
275
  const toolResults = [];
276
+ // One checkpoint per turn, taken lazily before the first mutating call —
277
+ // a turn's writes form one burst, and the engine dedupes identical trees.
278
+ let checkpointedThisTurn = false;
173
279
  for (const call of responseToolCalls) {
174
280
  toolCallCount++;
175
281
  display.toolCall(call.name, call.input);
@@ -184,20 +290,44 @@ async function runLoopBody(args) {
184
290
  }
185
291
  if (perm.needsConfirm) {
186
292
  const desc = formatCallForConfirmation(call);
187
- const doConfirm = opts.confirmFn ?? permissions_js_1.confirm;
188
- const approved = await doConfirm(`Allow: ${desc}?`);
293
+ const approved = await (opts.confirmFn ?? permissions_js_1.confirm)(`Allow: ${desc}?`);
189
294
  if (!approved) {
190
295
  display.toolBlocked(call.name, 'denied by user');
191
296
  toolResults.push({ id: call.id, name: call.name, content: 'User denied this action.', isError: true });
192
297
  continue;
193
298
  }
194
299
  }
300
+ if (opts.checkpoints !== false && !checkpointedThisTurn && executive_queue_js_1.MUTATING_TOOLS.has(call.name)) {
301
+ checkpointedThisTurn = true;
302
+ try {
303
+ const cp = await (0, engine_js_1.createCheckpoint)(opts.context.root, `turn ${turns}: ${opts.task}`);
304
+ if (cp)
305
+ await (0, engine_js_1.pruneCheckpoints)(opts.context.root, defaults_js_1.DEFAULTS.maxCheckpoints);
306
+ }
307
+ catch { /* checkpointing must never block the tool call */ }
308
+ }
309
+ if (opts.hooks && opts.hooks.length > 0) {
310
+ const { runHooks } = await Promise.resolve().then(() => __importStar(require('../plugins/hooks.js')));
311
+ const pre = await runHooks('PreToolUse', call.name, call.input, opts.hooks, opts.context.root);
312
+ if (pre.block) {
313
+ const why = pre.messages.join('; ') || 'blocked by plugin hook';
314
+ display.toolBlocked(call.name, why);
315
+ toolResults.push({ id: call.id, name: call.name, content: `Blocked by plugin hook: ${why}`, isError: true });
316
+ continue;
317
+ }
318
+ }
195
319
  const startMs = Date.now();
196
320
  result = await (0, index_js_1.executeTool)(call.name, call.input, opts.context.root);
197
321
  const elapsed = Date.now() - startMs;
198
322
  display.toolResult(call.name, result, elapsed);
199
323
  isError = result.startsWith('Error:') || result.startsWith('Tool error');
200
324
  toolCallLog.push({ name: call.name, input: call.input });
325
+ if (!isError)
326
+ execQueue.push(call.name, call.input, turns);
327
+ if (opts.hooks && opts.hooks.length > 0) {
328
+ const { runHooks } = await Promise.resolve().then(() => __importStar(require('../plugins/hooks.js')));
329
+ await runHooks('PostToolUse', call.name, call.input, opts.hooks, opts.context.root, result);
330
+ }
201
331
  }
202
332
  catch (e) {
203
333
  result = `Tool error (${call.name}): ${String(e)}`;
@@ -206,15 +336,25 @@ async function runLoopBody(args) {
206
336
  }
207
337
  toolResults.push({ id: call.id, name: call.name, content: result, isError });
208
338
  }
339
+ health.incrementToolCalls(responseToolCalls.length);
209
340
  history.push({ role: 'tool_result', results: toolResults });
341
+ if (stall) {
342
+ display.warning(stall === 'repeat'
343
+ ? `Repeated identical tool call ${profile.stallThreshold}x in a row — stopping loop (stall detected)`
344
+ : `Alternating between the same two tool calls ${profile.stallThreshold}x — stopping loop (cycle stall detected)`);
345
+ break;
346
+ }
210
347
  display.agentThinking();
211
348
  }
212
349
  await persist(opts.sessionPath, history);
213
350
  const sessionId = opts.sessionPath ? path.basename(opts.sessionPath, '.json') : undefined;
214
351
  const resumeHint = sessionId ? ` Type /continue to resume session ${sessionId}` : '';
352
+ const reason = stall === 'repeat' ? 'stalled (repeated identical tool calls)'
353
+ : stall === 'cycle' ? 'stalled (cycling between the same two tool calls)'
354
+ : `ended after ${turns} turns${widened ? `, after widening once from ${profile.maxTurns}` : ''}`;
215
355
  return {
216
356
  success: false,
217
- summary: `Loop ended after ${turns} turns.${resumeHint}`,
357
+ summary: `Loop ${reason}.${resumeHint}`,
218
358
  turns, toolCallCount, usage, history, toolCallLog,
219
359
  costUsd: costFor(pricingModel, usage.inputTokens, usage.outputTokens),
220
360
  };
@@ -236,6 +376,10 @@ function formatCallForConfirmation(call) {
236
376
  return `$ ${call.input.command}`;
237
377
  if (call.name === 'write_file')
238
378
  return `overwrite ${call.input.path}`;
379
+ if (call.name === 'mcp' && call.input.action === 'connect') {
380
+ const args = Array.isArray(call.input.args_list) ? call.input.args_list.join(' ') : '';
381
+ return `spawn MCP server '${call.input.server}': ${call.input.command} ${args}`.trim();
382
+ }
239
383
  return `${call.name}(${JSON.stringify(call.input).slice(0, 80)})`;
240
384
  }
241
385
  //# 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":"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"}
@@ -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;