aura-code 0.6.3 → 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 (265) 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 +14 -5
  27. package/dist/agent/loop.js +167 -39
  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 +138 -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 +18 -4
  62. package/dist/cli/display.js +74 -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 +1002 -852
  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 +1176 -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 +71 -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/repl/queue.d.ts +22 -0
  172. package/dist/repl/queue.js +165 -0
  173. package/dist/repl/queue.js.map +1 -0
  174. package/dist/repl/side-channel.d.ts +23 -0
  175. package/dist/repl/side-channel.js +63 -0
  176. package/dist/repl/side-channel.js.map +1 -0
  177. package/dist/research/council.d.ts +2 -0
  178. package/dist/research/council.js +29 -4
  179. package/dist/research/council.js.map +1 -1
  180. package/dist/ruby/alternator.d.ts +11 -30
  181. package/dist/ruby/alternator.js +59 -38
  182. package/dist/ruby/alternator.js.map +1 -1
  183. package/dist/ruby/episode-capture.d.ts +0 -10
  184. package/dist/ruby/episode-capture.js +0 -33
  185. package/dist/ruby/episode-capture.js.map +1 -1
  186. package/dist/ruby/types.js +1 -1
  187. package/dist/ruby/types.js.map +1 -1
  188. package/dist/safety/path-jail.d.ts +17 -0
  189. package/dist/safety/path-jail.js +100 -0
  190. package/dist/safety/path-jail.js.map +1 -0
  191. package/dist/safety/permissions.d.ts +12 -21
  192. package/dist/safety/permissions.js +81 -216
  193. package/dist/safety/permissions.js.map +1 -1
  194. package/dist/safety/ssrf.d.ts +29 -0
  195. package/dist/safety/ssrf.js +185 -0
  196. package/dist/safety/ssrf.js.map +1 -0
  197. package/dist/server/index.js +64 -10
  198. package/dist/server/index.js.map +1 -1
  199. package/dist/setup/first-run.d.ts +0 -24
  200. package/dist/setup/first-run.js +10 -344
  201. package/dist/setup/first-run.js.map +1 -1
  202. package/dist/setup/key-store.d.ts +12 -0
  203. package/dist/setup/key-store.js +108 -0
  204. package/dist/setup/key-store.js.map +1 -0
  205. package/dist/setup/provider-registry.js +31 -18
  206. package/dist/setup/provider-registry.js.map +1 -1
  207. package/dist/setup/provider-test.d.ts +7 -0
  208. package/dist/setup/provider-test.js +73 -10
  209. package/dist/setup/provider-test.js.map +1 -1
  210. package/dist/setup/provider-wizard.d.ts +4 -1
  211. package/dist/setup/provider-wizard.js +92 -26
  212. package/dist/setup/provider-wizard.js.map +1 -1
  213. package/dist/setup/xiaomi.d.ts +1 -1
  214. package/dist/setup/xiaomi.js +3 -3
  215. package/dist/setup/xiaomi.js.map +1 -1
  216. package/dist/tools/browser.js +14 -10
  217. package/dist/tools/browser.js.map +1 -1
  218. package/dist/tools/clipboard.js +7 -1
  219. package/dist/tools/clipboard.js.map +1 -1
  220. package/dist/tools/dictate.d.ts +60 -0
  221. package/dist/tools/dictate.js +983 -0
  222. package/dist/tools/dictate.js.map +1 -0
  223. package/dist/tools/dictate_patched.js +1057 -0
  224. package/dist/tools/edit-file.js +10 -2
  225. package/dist/tools/edit-file.js.map +1 -1
  226. package/dist/tools/http-request.js +14 -4
  227. package/dist/tools/http-request.js.map +1 -1
  228. package/dist/tools/image-read.js +34 -2
  229. package/dist/tools/image-read.js.map +1 -1
  230. package/dist/tools/index.d.ts +16 -1
  231. package/dist/tools/index.js +59 -8
  232. package/dist/tools/index.js.map +1 -1
  233. package/dist/tools/mcp.js +12 -0
  234. package/dist/tools/mcp.js.map +1 -1
  235. package/dist/tools/read-file.js +10 -14
  236. package/dist/tools/read-file.js.map +1 -1
  237. package/dist/tools/telegram-audio-policy.d.ts +30 -0
  238. package/dist/tools/telegram-audio-policy.js +49 -0
  239. package/dist/tools/telegram-audio-policy.js.map +1 -0
  240. package/dist/tools/telegram-bot.js +1136 -537
  241. package/dist/tools/telegram-bot.js.map +1 -1
  242. package/dist/tools/telegram-voice.d.ts +18 -5
  243. package/dist/tools/telegram-voice.js +54 -12
  244. package/dist/tools/telegram-voice.js.map +1 -1
  245. package/dist/tools/telegram.d.ts +3 -3
  246. package/dist/tools/telegram.js +5 -84
  247. package/dist/tools/telegram.js.map +1 -1
  248. package/dist/tools/tools.d.ts +2 -14
  249. package/dist/tools/tools.js +79 -144
  250. package/dist/tools/tools.js.map +1 -1
  251. package/dist/tools/web-fetch.js +39 -7
  252. package/dist/tools/web-fetch.js.map +1 -1
  253. package/dist/tools/web-search.d.ts +0 -20
  254. package/dist/tools/web-search.js +40 -137
  255. package/dist/tools/web-search.js.map +1 -1
  256. package/dist/util/errors.js +1 -15
  257. package/dist/util/errors.js.map +1 -1
  258. package/dist/util/json-repair.d.ts +11 -0
  259. package/dist/util/json-repair.js +31 -0
  260. package/dist/util/json-repair.js.map +1 -0
  261. package/dist/util/rate-limiter.js +2 -8
  262. package/dist/util/rate-limiter.js.map +1 -1
  263. package/dist/viz/index.js +793 -792
  264. package/dist/viz/index.js.map +1 -1
  265. package/package.json +12 -32
@@ -33,185 +33,365 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.sessionFlushFile = sessionFlushFile;
36
37
  exports.lastDreamTimestamp = lastDreamTimestamp;
38
+ exports.distillText = distillText;
37
39
  exports.runDream = runDream;
40
+ exports.runReconciliation = runReconciliation;
41
+ exports.getReconciledOrLatest = getReconciledOrLatest;
42
+ exports.runGlobalReconciliation = runGlobalReconciliation;
43
+ exports.loadReconciledMemorySection = loadReconciledMemorySection;
44
+ /**
45
+ * Dream -> Reconcile -> Inject — layers 2-3 of the memory loop (MEMORY.md).
46
+ * Dream spends exactly ONE LLM call. Reconciliation is pure statistics —
47
+ * confidence is a literal ratio, never a model's guess.
48
+ */
38
49
  const fs = __importStar(require("fs"));
39
50
  const path = __importStar(require("path"));
51
+ const os = __importStar(require("os"));
52
+ const episode_js_1 = require("./episode.js");
40
53
  const episode_capture_js_1 = require("../ruby/episode-capture.js");
41
54
  const factory_js_1 = require("../providers/factory.js");
42
- const parser_js_1 = require("./parser.js");
43
- const reconcile_js_1 = require("./reconcile.js");
44
- const okf_js_1 = require("./okf.js");
45
- const DREAMS_DIRNAME = 'dreams';
46
- const STATE_FILENAME = '.last.json';
47
- function dreamsDir(projectRoot) {
48
- return path.join(projectRoot, DREAMS_DIRNAME);
49
- }
50
- /** Timestamp (ms) of the last dream for this project, or 0 if never. */
51
- function lastDreamTimestamp(projectRoot) {
55
+ function dreamsDir(root) {
56
+ return path.join(root, 'dreams');
57
+ }
58
+ function todayFile(root) {
59
+ const d = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
60
+ return path.join(dreamsDir(root), `${d}.md`);
61
+ }
62
+ /**
63
+ * Dated dream-store path for a mid-session flush (see generational-flush.ts).
64
+ * Suffixed so multiple flushes in one day don't collide with each other or
65
+ * with the end-of-session `todayFile()` dream — each is its own dream file,
66
+ * picked up the same way by `listDreamFiles`/`runReconciliation`.
67
+ */
68
+ function sessionFlushFile(root, seq) {
69
+ const d = new Date().toISOString().slice(0, 10);
70
+ return path.join(dreamsDir(root), `${d}-flush-${seq}.md`);
71
+ }
72
+ function listDreamFiles(root) {
73
+ const dir = dreamsDir(root);
74
+ if (!fs.existsSync(dir))
75
+ return [];
76
+ return fs.readdirSync(dir)
77
+ .filter(f => /^\d{4}-\d{2}-\d{2}(-flush-\d+)?\.md$/.test(f))
78
+ .sort(); // ISO dates + suffix sort chronologically as strings
79
+ }
80
+ function stateFile(root) {
81
+ return path.join(dreamsDir(root), '.state.json');
82
+ }
83
+ /**
84
+ * The consolidation cutoff: the timestamp of the newest episode covered by
85
+ * the last successful dream. Stored in dreams/.state.json — NOT derived from
86
+ * file mtimes, so a failed run (which writes nothing) can never advance it
87
+ * and the same episodes are re-recalled next time.
88
+ */
89
+ function lastDreamTimestamp(root) {
52
90
  try {
53
- const raw = fs.readFileSync(path.join(dreamsDir(projectRoot), STATE_FILENAME), 'utf8');
91
+ const raw = fs.readFileSync(stateFile(root), 'utf8');
54
92
  const parsed = JSON.parse(raw);
55
- return typeof parsed.lastDreamTs === 'number' ? parsed.lastDreamTs : 0;
93
+ return typeof parsed.lastEpisodeTimestamp === 'number' ? parsed.lastEpisodeTimestamp : 0;
56
94
  }
57
95
  catch {
58
96
  return 0;
59
97
  }
60
98
  }
61
- function writeState(projectRoot, lastDreamTs) {
62
- const dir = dreamsDir(projectRoot);
63
- fs.mkdirSync(dir, { recursive: true });
64
- fs.writeFileSync(path.join(dir, STATE_FILENAME), JSON.stringify({ lastDreamTs }, null, 2));
65
- }
66
- /** Compact, low-token digest of one episode for the consolidation prompt. */
67
- function digestEpisode(ep) {
68
- const tier = ep.rubySucceeded ? 'ruby' : ep.largeModelUsed ? `large(${ep.largeModelUsed})` : 'none';
69
- const ok = ep.reviewerApproved ? 'approved' : 'unreviewed';
70
- const secs = Math.round(ep.durationMs / 1000);
71
- return `- [${ep.taskCategory}] "${ep.task.slice(0, 140)}" tier=${tier}, ${ok}, ${secs}s`;
72
- }
73
- function buildConsolidationPrompt(episodes) {
74
- const system = 'You are Aura consolidating a day of work into durable memory, like a brain dreaming. ' +
75
- 'You are given digests of today\'s task episodes. Produce concise, reusable knowledge — ' +
76
- 'not a transcript. Be specific and tagged. Respond in GitHub Markdown with EXACTLY these ' +
77
- 'sections and nothing else:\n\n' +
78
- '## Lessons\n(bullet list; each line starts with a [tag] in brackets, e.g. [routing], [tooling], [bug]. ' +
79
- 'State what was learned, generalised beyond the single task.)\n\n' +
80
- '## Patterns\n(bullet list of recurring task shapes or failure modes seen across episodes.)\n\n' +
81
- '## Open threads\n(bullet list of unresolved problems worth picking up tomorrow; ' +
82
- 'prefix each with [todo]. Empty bullet "- none" if nothing.)\n\n' +
83
- '## Tomorrow brief\n(2–4 sentences: what Aura should be ready for next session.)';
84
- const user = `Today's episodes (${episodes.length}):\n\n` +
85
- episodes.map(digestEpisode).join('\n');
86
- return { system, user };
87
- }
88
- function header(date, episodes, since) {
89
- const succeeded = episodes.filter(e => e.reviewerApproved).length;
90
- const rubyWins = episodes.filter(e => e.rubySucceeded).length;
91
- const sinceStr = since > 0 ? new Date(since).toISOString() : 'beginning';
92
- const cats = [...new Set(episodes.map(e => e.taskCategory))].join(', ') || '—';
93
- return (`# Dream — ${date}\n\n` +
94
- `> ${episodes.length} episodes recalled since ${sinceStr} · ` +
95
- `${succeeded} approved · ${rubyWins} ruby wins\n` +
96
- `> Categories: ${cats}\n`);
99
+ function advanceCutoff(root, ts) {
100
+ fs.mkdirSync(dreamsDir(root), { recursive: true });
101
+ fs.writeFileSync(stateFile(root), JSON.stringify({ lastEpisodeTimestamp: ts }, null, 2) + '\n');
102
+ }
103
+ function formatEpisodesForPrompt(episodes) {
104
+ return episodes.map(e => {
105
+ const date = new Date(e.timestamp).toISOString();
106
+ const outcome = e.rubyAttempted
107
+ ? (e.rubySucceeded ? 'ruby succeeded' : `ruby failed${e.largeModelUsed ? `, escalated to ${e.largeModelUsed}` : ''}`)
108
+ : (e.largeModelUsed ? `handled by ${e.largeModelUsed}` : 'no model recorded');
109
+ const review = e.reviewerApproved ? 'approved' : 'NOT approved';
110
+ return `- [${date}] (${e.taskCategory ?? 'uncategorized'}, ${outcome}, ${review}, ${Math.round(e.durationMs / 1000)}s): ${e.task.slice(0, 200)}`;
111
+ }).join('\n');
97
112
  }
113
+ const DREAM_SYSTEM = [
114
+ 'You distill a set of recent coding-agent task episodes into a compact, dated memory entry.',
115
+ 'Write exactly four sections, in this order, as markdown headers: ## Lessons, ## Patterns, ## Open threads, ## Tomorrow brief.',
116
+ 'Lessons: concrete, specific things learned — file names, root causes, gotchas. Not generic advice.',
117
+ 'Patterns: recurring behavior across multiple episodes (which task types fail, which models struggle, repeated bugs).',
118
+ 'Open threads: unfinished work or unresolved questions visible from the episodes.',
119
+ 'Tomorrow brief: 2-4 sentences a future session should read first.',
120
+ 'Be concrete and specific. No filler, no generic AI-assistant advice.',
121
+ ].join(' ');
98
122
  /**
99
- * Run a dream. Pure with respect to I/O sources: caller supplies the provider.
100
- * Never throws on an empty day returns { skipped: true }.
101
- *
102
- * IMPORTANT: the `.last.json` state cutoff is only advanced when the LLM
103
- * consolidation succeeds. If the primary provider fails, a single retry on a
104
- * local Ollama instance is attempted before giving up gracefully. Episodes are
105
- * NEVER burned (cut off) when the provider is unreachable.
123
+ * Spend one LLM call distilling `userContent` under `systemPrompt`, and
124
+ * write the result to `outPath`. The one shared distillation primitive
125
+ * `runDream` uses it for episode batches, and a mid-session context-window
126
+ * rollover (src/agent/generational-flush.ts) uses it for a recap block
127
+ * so both write into the same dream-store shape and both feed the same
128
+ * `runReconciliation()` pass.
129
+ */
130
+ async function distillText(opts) {
131
+ const response = await opts.provider.complete(opts.systemPrompt, [{ role: 'user', content: opts.userContent }], []);
132
+ const text = response.text || '(model returned no content)';
133
+ fs.mkdirSync(path.dirname(opts.outPath), { recursive: true });
134
+ fs.writeFileSync(opts.outPath, text);
135
+ return text;
136
+ }
137
+ /**
138
+ * Run one dream cycle: consolidate episodes since the last dream into a
139
+ * dated markdown file. Spends exactly one LLM call (plus at most one Ollama
140
+ * fallback call). Triggers reconciliation automatically once >=3 dream
141
+ * files exist.
106
142
  *
107
- * After a successful dream write, memory reconciliation runs (if ≥3 dreams
108
- * exist). If reconciliation succeeds, an OKF knowledge bundle is also
109
- * written to `knowledge/`. Both are best-effort if either fails, the
110
- * dream file and cutoff are already committed.
143
+ * Critical invariant: episodes are NEVER burned on failure. The dream file
144
+ * and the cutoff advance together, and only after the model produced real
145
+ * content any provider error or empty response leaves both untouched, so
146
+ * the next run re-recalls the same episodes.
111
147
  */
112
148
  async function runDream(opts) {
113
- const { projectRoot, provider } = opts;
114
- const ollamaFallbackModel = opts.ollamaFallbackModel === undefined ? 'llama3.2' : opts.ollamaFallbackModel;
115
- const date = new Date().toISOString().slice(0, 10);
116
- const since = opts.full ? 0 : (opts.since ?? lastDreamTimestamp(projectRoot));
117
- const all = await (0, episode_capture_js_1.loadEpisodes)(projectRoot);
118
- const episodes = all.filter(e => e.timestamp > since);
149
+ const root = opts.projectRoot;
150
+ const recalledSince = opts.full ? 0 : (opts.since ?? lastDreamTimestamp(root));
151
+ const all = await (0, episode_capture_js_1.loadEpisodes)(root);
152
+ const episodes = all.filter(e => e.timestamp > recalledSince);
119
153
  if (episodes.length === 0) {
120
- return { path: '', date, episodeCount: 0, recalledSince: since, skipped: true, reason: 'no new episodes since last dream' };
154
+ return {
155
+ skipped: true,
156
+ episodeCount: 0,
157
+ reason: opts.full ? 'no episodes recorded at all' : 'no new episodes since the last dream',
158
+ recalledSince,
159
+ };
121
160
  }
122
- // ── Consolidate via the LLM ──────────────────────────────────────────────
123
- // Critical invariant: we do NOT advance the cutoff unless this succeeds.
124
- const { system, user } = buildConsolidationPrompt(episodes);
125
- let body;
126
- let providerError;
127
- const tryComplete = async (p) => {
128
- const res = await p.complete(system, [{ role: 'user', content: user }], []);
129
- const text = (res.text ?? '').trim();
161
+ const categories = [...new Set(episodes.map(e => e.taskCategory ?? 'uncategorized'))];
162
+ const userContent = `${episodes.length} episodes${opts.full ? ' (full all recorded)' : ' since last dream'}:\n\n`
163
+ + formatEpisodesForPrompt(episodes);
164
+ const complete = async (provider) => {
165
+ const response = await provider.complete(DREAM_SYSTEM, [{ role: 'user', content: userContent }], []);
166
+ const text = (response.text ?? '').trim();
130
167
  if (!text)
131
- throw new Error('Provider returned an empty response');
168
+ throw new Error('provider returned an empty response');
132
169
  return text;
133
170
  };
134
- // Primary attempt
171
+ let body;
135
172
  try {
136
- body = await tryComplete(provider);
173
+ body = await complete(opts.provider);
137
174
  }
138
175
  catch (primaryErr) {
139
176
  const primaryMsg = primaryErr instanceof Error ? primaryErr.message : String(primaryErr);
140
- // ── Ollama fallback ───────────────────────────────────────────────────
141
- if (ollamaFallbackModel) {
142
- const ollamaBaseUrl = 'http://localhost:11434/v1';
143
- const ollamaHealthy = await (0, factory_js_1.checkOllamaHealth)('http://localhost:11434').catch(() => false);
144
- if (ollamaHealthy) {
145
- try {
146
- const ollamaProvider = (0, factory_js_1.createProvider)({
147
- model: `ollama/${ollamaFallbackModel}`,
148
- baseUrl: ollamaBaseUrl,
149
- maxTokens: 2048,
150
- });
151
- body = await tryComplete(ollamaProvider);
152
- providerError = undefined;
153
- }
154
- catch (ollamaErr) {
155
- const ollamaMsg = ollamaErr instanceof Error ? ollamaErr.message : String(ollamaErr);
156
- providerError = `primary: ${primaryMsg}; ollama fallback: ${ollamaMsg}`;
157
- }
158
- }
159
- else {
160
- providerError = `${primaryMsg} (Ollama not reachable at ${ollamaBaseUrl})`;
161
- }
177
+ const fallbackModel = opts.ollamaFallbackModel ?? 'llama3.2';
178
+ if (fallbackModel === false) {
179
+ return { skipped: true, episodeCount: episodes.length, providerError: primaryMsg, recalledSince };
180
+ }
181
+ if (!(await (0, factory_js_1.checkOllamaHealth)())) {
182
+ return {
183
+ skipped: true,
184
+ episodeCount: episodes.length,
185
+ providerError: `${primaryMsg}; Ollama not reachable for fallback`,
186
+ recalledSince,
187
+ };
188
+ }
189
+ try {
190
+ const fallback = (0, factory_js_1.createProvider)({ model: `ollama/${fallbackModel}`, maxTokens: 2048 });
191
+ body = await complete(fallback);
192
+ }
193
+ catch (fallbackErr) {
194
+ const fallbackMsg = fallbackErr instanceof Error ? fallbackErr.message : String(fallbackErr);
195
+ return {
196
+ skipped: true,
197
+ episodeCount: episodes.length,
198
+ providerError: `${primaryMsg}; Ollama fallback also failed: ${fallbackMsg}`,
199
+ recalledSince,
200
+ };
201
+ }
202
+ }
203
+ const dreamPath = todayFile(root);
204
+ const dateLabel = new Date().toISOString().slice(0, 10);
205
+ const header = `# Dream — ${dateLabel}\n\n`
206
+ + `${episodes.length} episodes recalled (categories: ${categories.join(', ')})\n\n`;
207
+ fs.mkdirSync(dreamsDir(root), { recursive: true });
208
+ fs.writeFileSync(dreamPath, header + body + '\n');
209
+ advanceCutoff(root, Math.max(...episodes.map(e => e.timestamp)));
210
+ let reconciled = false;
211
+ if (listDreamFiles(root).length >= 3) {
212
+ runReconciliation(root);
213
+ reconciled = true;
214
+ }
215
+ return {
216
+ skipped: false,
217
+ episodeCount: episodes.length,
218
+ path: dreamPath,
219
+ recalledSince,
220
+ reconciled,
221
+ };
222
+ }
223
+ const STOPWORDS = new Set(['the', 'a', 'an', 'is', 'was', 'were', 'be', 'been', 'to', 'of', 'in', 'on', 'for', 'and', 'or', 'it', 'this', 'that']);
224
+ const NEGATIVE_WORDS = ['broken', 'fails', 'failing', 'wrong', 'bug', 'error', 'not', "doesn't", 'never'];
225
+ const POSITIVE_WORDS = ['works', 'fixed', 'working', 'resolved', 'correct', 'passes'];
226
+ function normalizeLine(line) {
227
+ return line.replace(/^[-*]\s*/, '').trim();
228
+ }
229
+ function topicKey(text) {
230
+ const words = text.toLowerCase().replace(/[^a-z0-9\s]/g, '').split(/\s+/)
231
+ .filter(w => w.length > 0 && !STOPWORDS.has(w));
232
+ return words.slice(0, 6).join(' ');
233
+ }
234
+ function extractClaims(root, files) {
235
+ const claims = [];
236
+ files.forEach((file, idx) => {
237
+ const content = fs.readFileSync(path.join(dreamsDir(root), file), 'utf8');
238
+ for (const rawLine of content.split('\n')) {
239
+ const line = normalizeLine(rawLine);
240
+ if (line.startsWith('-') || line.length < 15)
241
+ continue;
242
+ if (line.startsWith('#'))
243
+ continue;
244
+ const key = topicKey(line);
245
+ if (key.length < 5)
246
+ continue;
247
+ claims.push({ text: line, topicKey: key, dreamFile: file, dreamIndex: idx });
248
+ }
249
+ // Also catch actual bullet lines (lines starting with "- " after trim)
250
+ for (const rawLine of content.split('\n')) {
251
+ const trimmed = rawLine.trim();
252
+ if (!trimmed.startsWith('-'))
253
+ continue;
254
+ const line = normalizeLine(trimmed);
255
+ if (line.length < 10)
256
+ continue;
257
+ const key = topicKey(line);
258
+ if (key.length < 5)
259
+ continue;
260
+ claims.push({ text: line, topicKey: key, dreamFile: file, dreamIndex: idx });
261
+ }
262
+ });
263
+ return claims;
264
+ }
265
+ function hasSentiment(text, words) {
266
+ const lower = text.toLowerCase();
267
+ return words.some(w => lower.includes(w));
268
+ }
269
+ /**
270
+ * Reconcile all dream files into one projection. Pure statistics:
271
+ * confidence = (number of dreams whose topicKey group contains this claim) / (total dream files).
272
+ * This is a lexical-overlap heuristic (v1) — not full semantic dedup.
273
+ */
274
+ function runReconciliation(root) {
275
+ const files = listDreamFiles(root);
276
+ const totalDreams = files.length;
277
+ const claims = extractClaims(root, files);
278
+ const groups = new Map();
279
+ for (const c of claims) {
280
+ if (!groups.has(c.topicKey))
281
+ groups.set(c.topicKey, []);
282
+ groups.get(c.topicKey).push(c);
283
+ }
284
+ const lines = ['# Reconciled Memory', '', `Generated from ${totalDreams} dream file(s).`, ''];
285
+ for (const [key, group] of groups) {
286
+ const distinctDreams = new Set(group.map(c => c.dreamFile)).size;
287
+ const confidence = distinctDreams / totalDreams;
288
+ const latest = group.reduce((a, b) => (b.dreamIndex > a.dreamIndex ? b : a));
289
+ const oldest = group.reduce((a, b) => (b.dreamIndex < a.dreamIndex ? b : a));
290
+ const hasPositive = group.some(c => hasSentiment(c.text, POSITIVE_WORDS));
291
+ const hasNegative = group.some(c => hasSentiment(c.text, NEGATIVE_WORDS));
292
+ let verdict;
293
+ if (hasPositive && hasNegative) {
294
+ verdict = 'CONFLICT';
295
+ }
296
+ else if (distinctDreams === 1 && oldest.dreamIndex < totalDreams - 3) {
297
+ verdict = 'DROP';
298
+ }
299
+ else if (group.length > distinctDreams) {
300
+ verdict = 'MERGE';
301
+ }
302
+ else if (confidence >= 0.5) {
303
+ verdict = 'STRENGTHEN';
304
+ }
305
+ else if (latest.dreamIndex !== oldest.dreamIndex && latest.text !== oldest.text) {
306
+ verdict = 'SUPERSEDE';
162
307
  }
163
308
  else {
164
- providerError = primaryMsg;
309
+ verdict = 'KEEP';
165
310
  }
311
+ if (verdict === 'DROP')
312
+ continue; // dropped claims don't make the projection
313
+ lines.push(`- **[${verdict}]** (confidence: ${confidence.toFixed(2)}) ${latest.text}`);
314
+ lines.push(` _source: ${[...new Set(group.map(c => c.dreamFile))].join(', ')}_`);
166
315
  }
167
- // ── Provider failed — preserve episodes, return without writing state ─────
168
- if (providerError !== undefined) {
169
- return {
170
- path: '',
171
- date,
172
- episodeCount: episodes.length,
173
- recalledSince: since,
174
- skipped: true,
175
- reason: 'provider error episodes preserved for next :dream run',
176
- providerError,
177
- };
316
+ const output = lines.join('\n');
317
+ fs.writeFileSync(path.join(dreamsDir(root), '.reconciled.md'), output);
318
+ return output;
319
+ }
320
+ /** For :rem — the current reconciled projection, or the latest dream if reconciliation hasn't triggered yet. */
321
+ function getReconciledOrLatest(root) {
322
+ const reconciledPath = path.join(dreamsDir(root), '.reconciled.md');
323
+ if (fs.existsSync(reconciledPath)) {
324
+ return { content: fs.readFileSync(reconciledPath, 'utf8'), isReconciled: true };
178
325
  }
179
- // ── Write dream file ──────────────────────────────────────────────────────
180
- const md = `${header(date, episodes, since)}\n${body}\n`;
181
- const dir = dreamsDir(projectRoot);
182
- fs.mkdirSync(dir, { recursive: true });
183
- const outPath = path.join(dir, `${date}.md`);
184
- fs.writeFileSync(outPath, md);
185
- // Advance the cutoff ONLY on success.
186
- const newest = Math.max(...episodes.map(e => e.timestamp));
187
- writeState(projectRoot, newest);
188
- // ── Reconciliation (best-effort) ──────────────────────────────────────────
189
- let reconciled = false;
190
- let okfBundlePath;
326
+ const files = listDreamFiles(root);
327
+ if (files.length === 0)
328
+ return null;
329
+ const latest = path.join(dreamsDir(root), files[files.length - 1]);
330
+ return { content: fs.readFileSync(latest, 'utf8'), isReconciled: false };
331
+ }
332
+ /**
333
+ * Global lessons digest — pure statistics over EVERY project's episodes.
334
+ * Written to ~/.aura/memory/lessons-global.md for the Telegram bot (which
335
+ * isn't tied to one project). No LLM call: counts successes/failures per model
336
+ * and surfaces the most recent activity. Mirrors runReconciliation's "trust
337
+ * numbers, not a model's guess" philosophy.
338
+ */
339
+ function runGlobalReconciliation() {
340
+ const episodes = (0, episode_js_1.listAllEpisodes)();
341
+ const outPath = path.join(os.homedir(), '.aura', 'memory', 'lessons-global.md');
342
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
343
+ if (episodes.length === 0) {
344
+ const empty = '# Global Lessons\n\n(no episodes recorded yet)\n';
345
+ fs.writeFileSync(outPath, empty);
346
+ return empty;
347
+ }
348
+ // Per-model success stats. Skip episodes with no model recorded (older
349
+ // entries predate model capture) — they'd show as a meaningless "undefined".
350
+ const byModel = new Map();
351
+ for (const e of episodes) {
352
+ if (!e.model || e.model === 'undefined')
353
+ continue;
354
+ const m = byModel.get(e.model) ?? { ok: 0, fail: 0 };
355
+ if (e.success)
356
+ m.ok++;
357
+ else
358
+ m.fail++;
359
+ byModel.set(e.model, m);
360
+ }
361
+ const total = episodes.length;
362
+ const ok = episodes.filter(e => e.success).length;
363
+ const lines = [
364
+ '# Global Lessons (across all projects)',
365
+ '',
366
+ `Generated from ${total} episode(s) — ${ok} succeeded, ${total - ok} failed (${((ok / total) * 100).toFixed(0)}% success).`,
367
+ '',
368
+ '## Model reliability',
369
+ ];
370
+ for (const [model, s] of [...byModel.entries()].sort((a, b) => (b[1].ok + b[1].fail) - (a[1].ok + a[1].fail))) {
371
+ const n = s.ok + s.fail;
372
+ lines.push(`- **${model}**: ${s.ok}/${n} succeeded (${((s.ok / n) * 100).toFixed(0)}%)`);
373
+ }
374
+ // Most recent tasks (a quick "what has Aura been doing lately").
375
+ lines.push('', '## Recent activity');
376
+ for (const e of episodes.slice(-8).reverse()) {
377
+ const date = new Date(e.timestamp).toISOString().slice(0, 10);
378
+ lines.push(`- [${date}] ${e.success ? '✓' : '✗'} (${e.model}) ${e.task.slice(0, 120)}`);
379
+ }
380
+ const output = lines.join('\n') + '\n';
381
+ fs.writeFileSync(outPath, output);
382
+ return output;
383
+ }
384
+ /** For system-prompt injection — the reconciled memory, truncated, or empty string if none exists. */
385
+ function loadReconciledMemorySection(root) {
386
+ const reconciledPath = path.join(dreamsDir(root), '.reconciled.md');
387
+ if (!fs.existsSync(reconciledPath))
388
+ return '';
191
389
  try {
192
- const allDreams = (0, parser_js_1.loadExistingDreams)(projectRoot);
193
- const result = await (0, reconcile_js_1.reconcileDreams)({
194
- projectRoot,
195
- provider,
196
- dreams: allDreams,
197
- });
198
- if (result) {
199
- // Append reconciliation log to today's dream file for traceability.
200
- fs.appendFileSync(outPath, result.logSection);
201
- reconciled = true;
202
- // ── OKF bundle (best-effort) ────────────────────────────────────────
203
- // Write the portable knowledge bundle from the same reconciled data.
204
- try {
205
- okfBundlePath = (0, okf_js_1.writeOkfBundle)(result.bullets, result.totalDreams, projectRoot);
206
- }
207
- catch {
208
- // OKF write failure is silent — reconciled.md is already committed.
209
- }
210
- }
390
+ const content = fs.readFileSync(reconciledPath, 'utf8').slice(0, 3000);
391
+ return `\n\n### Memory (from past sessions)\n${content}`;
211
392
  }
212
393
  catch {
213
- // Reconciliation failure is silent — dream is already saved.
394
+ return '';
214
395
  }
215
- return { path: outPath, date, episodeCount: episodes.length, recalledSince: since, skipped: false, reconciled, okfBundlePath };
216
396
  }
217
397
  //# sourceMappingURL=dream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dream.js","sourceRoot":"","sources":["../../src/dream/dream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dream.js","sourceRoot":"","sources":["../../src/dream/dream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface Episode {
2
+ id: string;
3
+ timestamp: number;
4
+ task: string;
5
+ model: string;
6
+ success: boolean;
7
+ tokens: number;
8
+ durationMs: number;
9
+ }
10
+ /** Record one episode. Best-effort — never throws into the caller's task flow. */
11
+ export declare function recordEpisode(root: string, ep: Omit<Episode, 'id' | 'timestamp'>): void;
12
+ /** All episodes for a project, oldest first. */
13
+ export declare function listEpisodes(root: string): Episode[];
14
+ /** Episodes newer than a given timestamp (used for "since last dream"). */
15
+ export declare function listEpisodesSince(root: string, sinceMs: number): Episode[];
16
+ /** All episodes across EVERY project (used for the global lessons digest). */
17
+ export declare function listAllEpisodes(): Episode[];