mindweave 2.5.1 → 3.0.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 (236) hide show
  1. package/README.md +50 -114
  2. package/dist/cli/App.js +580 -305
  3. package/dist/cli/App.js.map +1 -1
  4. package/dist/cli/analytics.js +27 -18
  5. package/dist/cli/analytics.js.map +1 -1
  6. package/dist/cli/attachments.js +34 -0
  7. package/dist/cli/attachments.js.map +1 -1
  8. package/dist/cli/bannerFit.js +70 -0
  9. package/dist/cli/bannerFit.js.map +1 -0
  10. package/dist/cli/bootstrap.js +41 -3
  11. package/dist/cli/bootstrap.js.map +1 -1
  12. package/dist/cli/commands.js +4 -1
  13. package/dist/cli/commands.js.map +1 -1
  14. package/dist/cli/components/ApprovalBox.js +3 -2
  15. package/dist/cli/components/ApprovalBox.js.map +1 -1
  16. package/dist/cli/components/BlockView.js +27 -6
  17. package/dist/cli/components/BlockView.js.map +1 -1
  18. package/dist/cli/components/FirstRunFrame.js +2 -1
  19. package/dist/cli/components/FirstRunFrame.js.map +1 -1
  20. package/dist/cli/components/KeyManager.js +5 -4
  21. package/dist/cli/components/KeyManager.js.map +1 -1
  22. package/dist/cli/components/KeySetup.js +29 -13
  23. package/dist/cli/components/KeySetup.js.map +1 -1
  24. package/dist/cli/components/MarathonBox.js +64 -0
  25. package/dist/cli/components/MarathonBox.js.map +1 -0
  26. package/dist/cli/components/McpMinitabs.js +8 -7
  27. package/dist/cli/components/McpMinitabs.js.map +1 -1
  28. package/dist/cli/components/Picker.js +4 -3
  29. package/dist/cli/components/Picker.js.map +1 -1
  30. package/dist/cli/components/PromptInput.js +47 -8
  31. package/dist/cli/components/PromptInput.js.map +1 -1
  32. package/dist/cli/components/PulseDot.js +42 -0
  33. package/dist/cli/components/PulseDot.js.map +1 -0
  34. package/dist/cli/components/SubagentView.js +9 -6
  35. package/dist/cli/components/SubagentView.js.map +1 -1
  36. package/dist/cli/components/TipLine.js +2 -1
  37. package/dist/cli/components/TipLine.js.map +1 -1
  38. package/dist/cli/components/ToolGroup.js +65 -49
  39. package/dist/cli/components/ToolGroup.js.map +1 -1
  40. package/dist/cli/components/ToolLine.js +20 -19
  41. package/dist/cli/components/ToolLine.js.map +1 -1
  42. package/dist/cli/components/TrustGate.js +2 -1
  43. package/dist/cli/components/TrustGate.js.map +1 -1
  44. package/dist/cli/components/minitabs.js +3 -2
  45. package/dist/cli/components/minitabs.js.map +1 -1
  46. package/dist/cli/desktopApp.js +45 -0
  47. package/dist/cli/desktopApp.js.map +1 -0
  48. package/dist/cli/help.js +1 -0
  49. package/dist/cli/help.js.map +1 -1
  50. package/dist/cli/inkOutputPatch.js +285 -0
  51. package/dist/cli/inkOutputPatch.js.map +1 -0
  52. package/dist/cli/inkSpeed.js +29 -0
  53. package/dist/cli/inkSpeed.js.map +1 -0
  54. package/dist/cli/inkSpeedLoader.js +47 -0
  55. package/dist/cli/inkSpeedLoader.js.map +1 -0
  56. package/dist/cli/inputText.js +30 -0
  57. package/dist/cli/inputText.js.map +1 -0
  58. package/dist/cli/keyManager.js +2 -1
  59. package/dist/cli/keyManager.js.map +1 -1
  60. package/dist/cli/keyPrefs.js +90 -0
  61. package/dist/cli/keyPrefs.js.map +1 -0
  62. package/dist/cli/keySetup.js +5 -2
  63. package/dist/cli/keySetup.js.map +1 -1
  64. package/dist/cli/marathonUi.js +113 -0
  65. package/dist/cli/marathonUi.js.map +1 -0
  66. package/dist/cli/markdown.js +63 -11
  67. package/dist/cli/markdown.js.map +1 -1
  68. package/dist/cli/modes.js +3 -3
  69. package/dist/cli/modes.js.map +1 -1
  70. package/dist/cli/prodEnv.js +43 -0
  71. package/dist/cli/prodEnv.js.map +1 -0
  72. package/dist/cli/revealPace.js +5 -5
  73. package/dist/cli/revealPace.js.map +1 -1
  74. package/dist/cli/revealQueue.js +120 -0
  75. package/dist/cli/revealQueue.js.map +1 -0
  76. package/dist/cli/startupArgs.js +1 -1
  77. package/dist/cli/theme.js +47 -0
  78. package/dist/cli/theme.js.map +1 -0
  79. package/dist/cli/toolDisplay.js +112 -18
  80. package/dist/cli/toolDisplay.js.map +1 -1
  81. package/dist/cli/transcript.js +1 -1
  82. package/dist/cli/transcript.js.map +1 -1
  83. package/dist/cli/virtualWindow.js +14 -2
  84. package/dist/cli/virtualWindow.js.map +1 -1
  85. package/dist/cli/wheelAccel.js +73 -0
  86. package/dist/cli/wheelAccel.js.map +1 -0
  87. package/dist/cli/widestLinePatch.js +48 -0
  88. package/dist/cli/widestLinePatch.js.map +1 -0
  89. package/dist/cli/workingVerb.js +88 -28
  90. package/dist/cli/workingVerb.js.map +1 -1
  91. package/dist/cli/wrap.js +1 -1
  92. package/dist/cli/wrap.js.map +1 -1
  93. package/dist/core/contextSettings.js +84 -0
  94. package/dist/core/contextSettings.js.map +1 -0
  95. package/dist/core/limitsView.js +40 -0
  96. package/dist/core/limitsView.js.map +1 -0
  97. package/dist/core/mcpServers.js +164 -0
  98. package/dist/core/mcpServers.js.map +1 -0
  99. package/dist/core/permissions.js +209 -0
  100. package/dist/core/permissions.js.map +1 -0
  101. package/dist/core/providerKeys.js +187 -0
  102. package/dist/core/providerKeys.js.map +1 -0
  103. package/dist/core/rulesSkills.js +142 -0
  104. package/dist/core/rulesSkills.js.map +1 -0
  105. package/dist/core/spendView.js +90 -0
  106. package/dist/core/spendView.js.map +1 -0
  107. package/dist/core/turnRunner.js +453 -60
  108. package/dist/core/turnRunner.js.map +1 -1
  109. package/dist/drivers/anthropic/client.js +24 -5
  110. package/dist/drivers/anthropic/client.js.map +1 -1
  111. package/dist/drivers/anthropic/manifest.js +15 -2
  112. package/dist/drivers/anthropic/manifest.js.map +1 -1
  113. package/dist/drivers/cerebras/manifest.js +6 -2
  114. package/dist/drivers/cerebras/manifest.js.map +1 -1
  115. package/dist/drivers/deepseek/manifest.js +12 -3
  116. package/dist/drivers/deepseek/manifest.js.map +1 -1
  117. package/dist/drivers/glm/manifest.js +3 -1
  118. package/dist/drivers/glm/manifest.js.map +1 -1
  119. package/dist/drivers/groq/manifest.js +5 -2
  120. package/dist/drivers/groq/manifest.js.map +1 -1
  121. package/dist/drivers/ollama/catalog.js +71 -0
  122. package/dist/drivers/ollama/catalog.js.map +1 -0
  123. package/dist/drivers/ollama/client.js +164 -0
  124. package/dist/drivers/ollama/client.js.map +1 -0
  125. package/dist/drivers/ollama/endpoint.js +42 -0
  126. package/dist/drivers/ollama/endpoint.js.map +1 -0
  127. package/dist/drivers/ollama/index.js +5 -0
  128. package/dist/drivers/ollama/index.js.map +1 -0
  129. package/dist/drivers/ollama/manifest.js +64 -0
  130. package/dist/drivers/ollama/manifest.js.map +1 -0
  131. package/dist/drivers/openai/client.js +10 -4
  132. package/dist/drivers/openai/client.js.map +1 -1
  133. package/dist/drivers/openai/manifest.js +46 -12
  134. package/dist/drivers/openai/manifest.js.map +1 -1
  135. package/dist/drivers/registry.js +11 -0
  136. package/dist/drivers/registry.js.map +1 -1
  137. package/dist/drivers/retryPolicy.js +26 -1
  138. package/dist/drivers/retryPolicy.js.map +1 -1
  139. package/dist/dynamo/auxModel.js +54 -0
  140. package/dist/dynamo/auxModel.js.map +1 -0
  141. package/dist/dynamo/engine.js +380 -99
  142. package/dist/dynamo/engine.js.map +1 -1
  143. package/dist/dynamo/guard.js +10 -0
  144. package/dist/dynamo/guard.js.map +1 -1
  145. package/dist/dynamo/liveMeter.js +25 -6
  146. package/dist/dynamo/liveMeter.js.map +1 -1
  147. package/dist/dynamo/marathon.js +409 -0
  148. package/dist/dynamo/marathon.js.map +1 -0
  149. package/dist/dynamo/marathonPrompt.js +45 -0
  150. package/dist/dynamo/marathonPrompt.js.map +1 -0
  151. package/dist/dynamo/model.js +6 -2
  152. package/dist/dynamo/model.js.map +1 -1
  153. package/dist/dynamo/toolBatches.js +58 -0
  154. package/dist/dynamo/toolBatches.js.map +1 -0
  155. package/dist/dynamo/usageLimits.js +446 -0
  156. package/dist/dynamo/usageLimits.js.map +1 -0
  157. package/dist/governor/freshness.js +10 -7
  158. package/dist/governor/freshness.js.map +1 -1
  159. package/dist/governor/index.js +76 -9
  160. package/dist/governor/index.js.map +1 -1
  161. package/dist/governor/write.js +43 -14
  162. package/dist/governor/write.js.map +1 -1
  163. package/dist/index.js +18 -151
  164. package/dist/index.js.map +1 -1
  165. package/dist/main.js +162 -0
  166. package/dist/main.js.map +1 -0
  167. package/dist/mcp/manager.js +18 -0
  168. package/dist/mcp/manager.js.map +1 -1
  169. package/dist/memory/allMetas.js +69 -0
  170. package/dist/memory/allMetas.js.map +1 -0
  171. package/dist/memory/compaction.js +69 -14
  172. package/dist/memory/compaction.js.map +1 -1
  173. package/dist/memory/earlier.js +15 -0
  174. package/dist/memory/earlier.js.map +1 -0
  175. package/dist/memory/profile.js +93 -0
  176. package/dist/memory/profile.js.map +1 -0
  177. package/dist/memory/rewind.js +262 -0
  178. package/dist/memory/rewind.js.map +1 -0
  179. package/dist/memory/session.js +42 -10
  180. package/dist/memory/session.js.map +1 -1
  181. package/dist/memory/sessionMemory.js +48 -13
  182. package/dist/memory/sessionMemory.js.map +1 -1
  183. package/dist/memory/sessionMemoryCompact.js +1 -1
  184. package/dist/memory/sessionMemoryCompact.js.map +1 -1
  185. package/dist/memory/sessionTitle.js +50 -0
  186. package/dist/memory/sessionTitle.js.map +1 -0
  187. package/dist/memory/store.js +42 -1
  188. package/dist/memory/store.js.map +1 -1
  189. package/dist/memory/types.js.map +1 -1
  190. package/dist/tools/askUser.js +14 -0
  191. package/dist/tools/askUser.js.map +1 -1
  192. package/dist/tools/backgroundShells.js +208 -5
  193. package/dist/tools/backgroundShells.js.map +1 -1
  194. package/dist/tools/browser.js +176 -0
  195. package/dist/tools/browser.js.map +1 -0
  196. package/dist/tools/cdp.js +165 -0
  197. package/dist/tools/cdp.js.map +1 -0
  198. package/dist/tools/checkpoints.js +208 -5
  199. package/dist/tools/checkpoints.js.map +1 -1
  200. package/dist/tools/deferredNative.js +2 -0
  201. package/dist/tools/deferredNative.js.map +1 -1
  202. package/dist/tools/exitPlan.js +4 -0
  203. package/dist/tools/exitPlan.js.map +1 -1
  204. package/dist/tools/hiddenDesktop.js +273 -0
  205. package/dist/tools/hiddenDesktop.js.map +1 -0
  206. package/dist/tools/listeningPorts.js +134 -0
  207. package/dist/tools/listeningPorts.js.map +1 -0
  208. package/dist/tools/mcpSearch.js +8 -0
  209. package/dist/tools/mcpSearch.js.map +1 -1
  210. package/dist/tools/mindweaveStatus.js +1 -1
  211. package/dist/tools/mindweaveStatus.js.map +1 -1
  212. package/dist/tools/registry.js +3 -0
  213. package/dist/tools/registry.js.map +1 -1
  214. package/dist/tools/runCommand.js +107 -6
  215. package/dist/tools/runCommand.js.map +1 -1
  216. package/dist/tools/screenshot.js +4 -6
  217. package/dist/tools/screenshot.js.map +1 -1
  218. package/dist/tools/screenshotWin.js +26 -9
  219. package/dist/tools/screenshotWin.js.map +1 -1
  220. package/dist/tools/stateCheckpoint.js +128 -0
  221. package/dist/tools/stateCheckpoint.js.map +1 -0
  222. package/dist/tools/todo.js +6 -0
  223. package/dist/tools/todo.js.map +1 -1
  224. package/dist/tools/ui.js +1295 -0
  225. package/dist/tools/ui.js.map +1 -0
  226. package/dist/tools/uiHide.js +356 -0
  227. package/dist/tools/uiHide.js.map +1 -0
  228. package/dist/tools/uiPage.js +861 -0
  229. package/dist/tools/uiPage.js.map +1 -0
  230. package/dist/tools/uiWin.js +506 -0
  231. package/dist/tools/uiWin.js.map +1 -0
  232. package/dist/tools/webFetch.js +32 -25
  233. package/dist/tools/webFetch.js.map +1 -1
  234. package/dist/tools/webSearch.js +12 -0
  235. package/dist/tools/webSearch.js.map +1 -1
  236. package/package.json +78 -78
@@ -0,0 +1,90 @@
1
+ /**
2
+ * spendView.ts — tokens Mindweave has actually used, across every project on this
3
+ * machine, read-only.
4
+ *
5
+ * Nothing new is recorded here: every session already keeps a per-call log
6
+ * (`SessionMeta.callLog` — timestamp, tokens, model; see memory/types.ts's `CallUsage`),
7
+ * written for exactly this kind of question. This module only reads it back, across
8
+ * every project's every session, and sums it by model and by day/week/month.
9
+ *
10
+ * TOKENS ONLY, deliberately — no dollar figure. Several providers price in tiers this
11
+ * module does not model, so a total in USD would look more authoritative than it is;
12
+ * a token count carries no such claim. `billed` is the same definition SessionSpend
13
+ * already uses elsewhere: fresh input plus output, cache hits excluded, because a hit
14
+ * is not what the conversation actually cost to run.
15
+ *
16
+ * A session saved before callLog existed has only the coarser `spend` + `model` total
17
+ * (one lump for the whole session, no per-call split) — used as a fallback so an old
18
+ * session is not silently missing from the total, just less precisely attributed.
19
+ */
20
+ import { callRecords, everyMeta } from "../memory/allMetas.js";
21
+ function dayKey(ms) {
22
+ return new Date(ms).toISOString().slice(0, 10);
23
+ }
24
+ function monthKey(ms) {
25
+ return new Date(ms).toISOString().slice(0, 7);
26
+ }
27
+ /** The Monday (UTC) of the week containing `ms`, as a day key — a stable, sortable
28
+ * bucket id without pulling in a week-numbering library for one line of arithmetic. */
29
+ function weekKey(ms) {
30
+ const d = new Date(ms);
31
+ const mondayOffset = (d.getUTCDay() + 6) % 7;
32
+ d.setUTCDate(d.getUTCDate() - mondayOffset);
33
+ return dayKey(d.getTime());
34
+ }
35
+ function bump(map, key, n) {
36
+ map.set(key, (map.get(key) ?? 0) + n);
37
+ }
38
+ /** Newest `limit` keys, then re-sorted chronologically — what a chart or a list
39
+ * reading top-to-bottom-by-recency both want, from the same map. */
40
+ function recentBuckets(map, limit) {
41
+ return [...map.entries()]
42
+ .sort(([a], [b]) => (a < b ? 1 : a > b ? -1 : 0))
43
+ .slice(0, limit)
44
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
45
+ .map(([key, billed]) => ({ key, billed }));
46
+ }
47
+ function accumulate(model, billed, output, at, byModel, daily, weekly, monthly) {
48
+ const row = byModel.get(model) ?? { model, billed: 0, output: 0, calls: 0 };
49
+ row.billed += billed;
50
+ row.output += output;
51
+ row.calls += 1;
52
+ byModel.set(model, row);
53
+ bump(daily, dayKey(at), billed);
54
+ bump(weekly, weekKey(at), billed);
55
+ bump(monthly, monthKey(at), billed);
56
+ }
57
+ function accumulateCall(call, byModel, daily, weekly, monthly) {
58
+ const billed = call.miss + call.out;
59
+ accumulate(call.model, billed, call.out, call.at, byModel, daily, weekly, monthly);
60
+ return billed;
61
+ }
62
+ /** Everything the Spend screen shows: total tokens billed, by model, by day/week/month. */
63
+ export async function spendView() {
64
+ const metas = await everyMeta();
65
+ const byModel = new Map();
66
+ const daily = new Map();
67
+ const weekly = new Map();
68
+ const monthly = new Map();
69
+ const projects = new Set();
70
+ let totalBilled = 0;
71
+ let totalOutput = 0;
72
+ for (const meta of metas) {
73
+ projects.add(meta.cwd);
74
+ for (const call of callRecords(meta)) {
75
+ totalBilled += accumulateCall(call, byModel, daily, weekly, monthly);
76
+ totalOutput += call.out;
77
+ }
78
+ }
79
+ return {
80
+ totalBilled,
81
+ totalOutput,
82
+ byModel: [...byModel.values()].sort((a, b) => b.billed - a.billed),
83
+ daily: recentBuckets(daily, 30),
84
+ weekly: recentBuckets(weekly, 12),
85
+ monthly: recentBuckets(monthly, 12),
86
+ sessionsScanned: metas.length,
87
+ projectsScanned: projects.size,
88
+ };
89
+ }
90
+ //# sourceMappingURL=spendView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spendView.js","sourceRoot":"","sources":["../../src/core/spendView.ts"],"names":[],"mappings":"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"}