@mobrienv/autoloop 0.1.4 → 0.2.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 (328) hide show
  1. package/README.md +103 -42
  2. package/bin/autoloop +0 -0
  3. package/dist/agent-map.d.ts +10 -0
  4. package/dist/agent-map.js +58 -0
  5. package/dist/agent-map.js.map +1 -0
  6. package/dist/backend/acp-client.d.ts +38 -0
  7. package/dist/backend/acp-client.js +288 -0
  8. package/dist/backend/acp-client.js.map +1 -0
  9. package/dist/backend/index.d.ts +1 -1
  10. package/dist/backend/index.js +17 -5
  11. package/dist/backend/index.js.map +1 -1
  12. package/dist/backend/kiro-bridge.d.ts +17 -0
  13. package/dist/backend/kiro-bridge.js +80 -0
  14. package/dist/backend/kiro-bridge.js.map +1 -0
  15. package/dist/backend/kiro-worker.d.ts +1 -0
  16. package/dist/backend/kiro-worker.js +83 -0
  17. package/dist/backend/kiro-worker.js.map +1 -0
  18. package/dist/backend/run-command.js +2 -2
  19. package/dist/backend/run-command.js.map +1 -1
  20. package/dist/backend/run-kiro.d.ts +3 -0
  21. package/dist/backend/run-kiro.js +12 -0
  22. package/dist/backend/run-kiro.js.map +1 -0
  23. package/dist/backend/run-pi.js.map +1 -1
  24. package/dist/chains/budget.js +16 -4
  25. package/dist/chains/budget.js.map +1 -1
  26. package/dist/chains/load.d.ts +7 -1
  27. package/dist/chains/load.js +58 -9
  28. package/dist/chains/load.js.map +1 -1
  29. package/dist/chains/render.js +36 -8
  30. package/dist/chains/render.js.map +1 -1
  31. package/dist/chains/run.js +129 -44
  32. package/dist/chains/run.js.map +1 -1
  33. package/dist/chains/types.d.ts +1 -0
  34. package/dist/chains.d.ts +5 -4
  35. package/dist/chains.js +3 -3
  36. package/dist/chains.js.map +1 -1
  37. package/dist/commands/chain.js +6 -4
  38. package/dist/commands/chain.js.map +1 -1
  39. package/dist/commands/config.d.ts +1 -0
  40. package/dist/commands/config.js +74 -0
  41. package/dist/commands/config.js.map +1 -0
  42. package/dist/commands/dashboard.d.ts +1 -0
  43. package/dist/commands/dashboard.js +68 -0
  44. package/dist/commands/dashboard.js.map +1 -0
  45. package/dist/commands/inspect.js +125 -17
  46. package/dist/commands/inspect.js.map +1 -1
  47. package/dist/commands/list.d.ts +1 -1
  48. package/dist/commands/list.js +6 -3
  49. package/dist/commands/list.js.map +1 -1
  50. package/dist/commands/loops.js +11 -11
  51. package/dist/commands/loops.js.map +1 -1
  52. package/dist/commands/memory.js +2 -2
  53. package/dist/commands/memory.js.map +1 -1
  54. package/dist/commands/run.d.ts +1 -1
  55. package/dist/commands/run.js +102 -15
  56. package/dist/commands/run.js.map +1 -1
  57. package/dist/commands/runs.d.ts +1 -0
  58. package/dist/commands/runs.js +50 -0
  59. package/dist/commands/runs.js.map +1 -0
  60. package/dist/commands/task.d.ts +1 -0
  61. package/dist/commands/task.js +74 -0
  62. package/dist/commands/task.js.map +1 -0
  63. package/dist/commands/worktree.d.ts +1 -0
  64. package/dist/commands/worktree.js +162 -0
  65. package/dist/commands/worktree.js.map +1 -0
  66. package/dist/config.d.ts +15 -1
  67. package/dist/config.js +90 -21
  68. package/dist/config.js.map +1 -1
  69. package/dist/dashboard/app.d.ts +12 -0
  70. package/dist/dashboard/app.js +23 -0
  71. package/dist/dashboard/app.js.map +1 -0
  72. package/dist/dashboard/routes/api.d.ts +3 -0
  73. package/dist/dashboard/routes/api.js +103 -0
  74. package/dist/dashboard/routes/api.js.map +1 -0
  75. package/dist/dashboard/routes/pages.d.ts +2 -0
  76. package/dist/dashboard/routes/pages.js +14 -0
  77. package/dist/dashboard/routes/pages.js.map +1 -0
  78. package/dist/dashboard/views/alpine-vendor.d.ts +1 -0
  79. package/dist/dashboard/views/alpine-vendor.js +10 -0
  80. package/dist/dashboard/views/alpine-vendor.js.map +1 -0
  81. package/dist/dashboard/views/shell.d.ts +1 -0
  82. package/dist/dashboard/views/shell.js +714 -0
  83. package/dist/dashboard/views/shell.js.map +1 -0
  84. package/dist/events/decode.js.map +1 -1
  85. package/dist/events/encode.js +2 -2
  86. package/dist/events/encode.js.map +1 -1
  87. package/dist/harness/config-helpers.d.ts +11 -0
  88. package/dist/harness/config-helpers.js +242 -64
  89. package/dist/harness/config-helpers.js.map +1 -1
  90. package/dist/harness/coordination.js +12 -12
  91. package/dist/harness/coordination.js.map +1 -1
  92. package/dist/harness/display.d.ts +4 -3
  93. package/dist/harness/display.js +57 -11
  94. package/dist/harness/display.js.map +1 -1
  95. package/dist/harness/emit.js +31 -13
  96. package/dist/harness/emit.js.map +1 -1
  97. package/dist/harness/index.d.ts +7 -7
  98. package/dist/harness/index.js +151 -35
  99. package/dist/harness/index.js.map +1 -1
  100. package/dist/harness/iteration.d.ts +12 -0
  101. package/dist/harness/iteration.js +66 -64
  102. package/dist/harness/iteration.js.map +1 -1
  103. package/dist/harness/journal.d.ts +17 -0
  104. package/dist/harness/journal.js +74 -5
  105. package/dist/harness/journal.js.map +1 -1
  106. package/dist/harness/metareview.js +30 -15
  107. package/dist/harness/metareview.js.map +1 -1
  108. package/dist/harness/metrics.js +12 -12
  109. package/dist/harness/metrics.js.map +1 -1
  110. package/dist/harness/parallel.d.ts +1 -1
  111. package/dist/harness/parallel.js +141 -62
  112. package/dist/harness/parallel.js.map +1 -1
  113. package/dist/harness/prompt.d.ts +18 -9
  114. package/dist/harness/prompt.js +80 -44
  115. package/dist/harness/prompt.js.map +1 -1
  116. package/dist/harness/scratchpad.js +8 -6
  117. package/dist/harness/scratchpad.js.map +1 -1
  118. package/dist/harness/stop.js +16 -9
  119. package/dist/harness/stop.js.map +1 -1
  120. package/dist/harness/tools.js +39 -13
  121. package/dist/harness/tools.js.map +1 -1
  122. package/dist/harness/types.d.ts +29 -0
  123. package/dist/harness/wave/finalize-wave.d.ts +1 -1
  124. package/dist/harness/wave/finalize-wave.js +36 -9
  125. package/dist/harness/wave/finalize-wave.js.map +1 -1
  126. package/dist/harness/wave/launch-branches.d.ts +2 -2
  127. package/dist/harness/wave/launch-branches.js +147 -51
  128. package/dist/harness/wave/launch-branches.js.map +1 -1
  129. package/dist/harness/wave/parse-objectives.js +4 -1
  130. package/dist/harness/wave/parse-objectives.js.map +1 -1
  131. package/dist/harness/wave.d.ts +2 -2
  132. package/dist/harness/wave.js +89 -28
  133. package/dist/harness/wave.js.map +1 -1
  134. package/dist/isolation/index.d.ts +4 -0
  135. package/dist/isolation/index.js +3 -0
  136. package/dist/isolation/index.js.map +1 -0
  137. package/dist/isolation/resolve.d.ts +39 -0
  138. package/dist/isolation/resolve.js +118 -0
  139. package/dist/isolation/resolve.js.map +1 -0
  140. package/dist/isolation/run-scope.d.ts +21 -0
  141. package/dist/isolation/run-scope.js +50 -0
  142. package/dist/isolation/run-scope.js.map +1 -0
  143. package/dist/json.js +10 -8
  144. package/dist/json.js.map +1 -1
  145. package/dist/loops/health.d.ts +4 -2
  146. package/dist/loops/health.js +73 -25
  147. package/dist/loops/health.js.map +1 -1
  148. package/dist/loops/list.d.ts +2 -2
  149. package/dist/loops/list.js +6 -6
  150. package/dist/loops/list.js.map +1 -1
  151. package/dist/loops/policy.d.ts +6 -0
  152. package/dist/loops/policy.js +41 -0
  153. package/dist/loops/policy.js.map +1 -0
  154. package/dist/loops/render.d.ts +2 -1
  155. package/dist/loops/render.js +24 -11
  156. package/dist/loops/render.js.map +1 -1
  157. package/dist/loops/show.d.ts +2 -2
  158. package/dist/loops/show.js +13 -13
  159. package/dist/loops/show.js.map +1 -1
  160. package/dist/loops/watch.d.ts +7 -1
  161. package/dist/loops/watch.js +82 -16
  162. package/dist/loops/watch.js.map +1 -1
  163. package/dist/main.js +58 -16
  164. package/dist/main.js.map +1 -1
  165. package/dist/markdown.js +11 -11
  166. package/dist/markdown.js.map +1 -1
  167. package/dist/memory-render.js +5 -5
  168. package/dist/memory-render.js.map +1 -1
  169. package/dist/memory.d.ts +1 -2
  170. package/dist/memory.js +44 -40
  171. package/dist/memory.js.map +1 -1
  172. package/dist/pi-adapter.js +11 -11
  173. package/dist/pi-adapter.js.map +1 -1
  174. package/dist/profiles.d.ts +12 -0
  175. package/dist/profiles.js +71 -0
  176. package/dist/profiles.js.map +1 -0
  177. package/dist/registry/derive.js +10 -3
  178. package/dist/registry/derive.js.map +1 -1
  179. package/dist/registry/discover.d.ts +20 -0
  180. package/dist/registry/discover.js +98 -0
  181. package/dist/registry/discover.js.map +1 -0
  182. package/dist/registry/harness.js +8 -2
  183. package/dist/registry/harness.js.map +1 -1
  184. package/dist/registry/index.d.ts +4 -3
  185. package/dist/registry/index.js +3 -2
  186. package/dist/registry/index.js.map +1 -1
  187. package/dist/registry/read.js.map +1 -1
  188. package/dist/registry/rebuild.js +7 -4
  189. package/dist/registry/rebuild.js.map +1 -1
  190. package/dist/registry/types.d.ts +9 -0
  191. package/dist/registry/update.js +1 -1
  192. package/dist/registry/update.js.map +1 -1
  193. package/dist/tasks-render.d.ts +2 -0
  194. package/dist/tasks-render.js +44 -0
  195. package/dist/tasks-render.js.map +1 -0
  196. package/dist/tasks.d.ts +24 -0
  197. package/dist/tasks.js +184 -0
  198. package/dist/tasks.js.map +1 -0
  199. package/dist/testing/mock-backend.js +2 -2
  200. package/dist/testing/mock-backend.js.map +1 -1
  201. package/dist/topology.d.ts +6 -0
  202. package/dist/topology.js +129 -8
  203. package/dist/topology.js.map +1 -1
  204. package/dist/usage.d.ts +1 -0
  205. package/dist/usage.js +56 -11
  206. package/dist/usage.js.map +1 -1
  207. package/dist/utils.d.ts +6 -0
  208. package/dist/utils.js +272 -2
  209. package/dist/utils.js.map +1 -1
  210. package/dist/worktree/clean.d.ts +12 -0
  211. package/dist/worktree/clean.js +98 -0
  212. package/dist/worktree/clean.js.map +1 -0
  213. package/dist/worktree/create.d.ts +14 -0
  214. package/dist/worktree/create.js +71 -0
  215. package/dist/worktree/create.js.map +1 -0
  216. package/dist/worktree/index.d.ts +10 -0
  217. package/dist/worktree/index.js +6 -0
  218. package/dist/worktree/index.js.map +1 -0
  219. package/dist/worktree/list.d.ts +9 -0
  220. package/dist/worktree/list.js +24 -0
  221. package/dist/worktree/list.js.map +1 -0
  222. package/dist/worktree/merge.d.ts +11 -0
  223. package/dist/worktree/merge.js +129 -0
  224. package/dist/worktree/merge.js.map +1 -0
  225. package/dist/worktree/meta.d.ts +17 -0
  226. package/dist/worktree/meta.js +34 -0
  227. package/dist/worktree/meta.js.map +1 -0
  228. package/package.json +24 -4
  229. package/presets/autocode/README.md +1 -1
  230. package/presets/autocode/autoloops.toml +9 -1
  231. package/presets/autocode/harness.md +12 -5
  232. package/presets/autocode/roles/build.md +5 -4
  233. package/presets/autocode/roles/critic.md +2 -2
  234. package/presets/autocode/roles/finalizer.md +2 -2
  235. package/presets/autocode/roles/planner.md +7 -7
  236. package/presets/autodoc/README.md +1 -1
  237. package/presets/autodoc/autoloops.toml +1 -1
  238. package/presets/autodoc/harness.md +6 -6
  239. package/presets/autodoc/roles/auditor.md +3 -3
  240. package/presets/autodoc/roles/checker.md +2 -2
  241. package/presets/autodoc/roles/publisher.md +3 -3
  242. package/presets/autodoc/roles/writer.md +4 -4
  243. package/presets/autofix/README.md +1 -1
  244. package/presets/autofix/autoloops.toml +5 -2
  245. package/presets/autofix/harness.md +8 -7
  246. package/presets/autofix/roles/closer.md +4 -4
  247. package/presets/autofix/roles/diagnoser.md +6 -5
  248. package/presets/autofix/roles/fixer.md +4 -4
  249. package/presets/autofix/roles/verifier.md +2 -2
  250. package/presets/autoideas/README.md +1 -1
  251. package/presets/autoideas/autoloops.toml +1 -1
  252. package/presets/autoideas/harness.md +11 -11
  253. package/presets/autoideas/roles/analyst.md +4 -4
  254. package/presets/autoideas/roles/reviewer.md +3 -3
  255. package/presets/autoideas/roles/scanner.md +3 -3
  256. package/presets/autoideas/roles/synthesizer.md +20 -7
  257. package/presets/automerge/README.md +3 -0
  258. package/presets/automerge/autoloops.toml +12 -0
  259. package/presets/automerge/harness.md +10 -0
  260. package/presets/automerge/miniloops.toml +12 -0
  261. package/presets/automerge/roles/merge.md +10 -0
  262. package/presets/automerge/topology.toml +10 -0
  263. package/presets/autoperf/README.md +1 -1
  264. package/presets/autoperf/autoloops.toml +1 -1
  265. package/presets/autoperf/harness.md +5 -5
  266. package/presets/autoperf/roles/judge.md +3 -3
  267. package/presets/autoperf/roles/measurer.md +4 -4
  268. package/presets/autoperf/roles/optimizer.md +4 -4
  269. package/presets/autoperf/roles/profiler.md +4 -4
  270. package/presets/autopr/README.md +99 -0
  271. package/presets/autopr/autoloops.toml +22 -0
  272. package/presets/autopr/harness.md +27 -0
  273. package/presets/autopr/miniloops.toml +22 -0
  274. package/presets/autopr/roles/collector.md +55 -0
  275. package/presets/autopr/roles/drafter.md +38 -0
  276. package/presets/autopr/roles/publisher.md +28 -0
  277. package/presets/autopr/roles/validator.md +31 -0
  278. package/presets/autopr/topology.toml +32 -0
  279. package/presets/autoqa/README.md +1 -1
  280. package/presets/autoqa/autoloops.toml +1 -1
  281. package/presets/autoqa/harness.md +10 -10
  282. package/presets/autoqa/roles/executor.md +3 -3
  283. package/presets/autoqa/roles/inspector.md +2 -2
  284. package/presets/autoqa/roles/planner.md +6 -6
  285. package/presets/autoqa/roles/reporter.md +9 -9
  286. package/presets/autoresearch/README.md +1 -1
  287. package/presets/autoresearch/autoloops.toml +1 -1
  288. package/presets/autoresearch/harness.md +5 -5
  289. package/presets/autoresearch/roles/benchmarker.md +3 -3
  290. package/presets/autoresearch/roles/evaluator.md +5 -5
  291. package/presets/autoresearch/roles/implementer.md +4 -4
  292. package/presets/autoresearch/roles/strategist.md +6 -6
  293. package/presets/autoreview/README.md +1 -1
  294. package/presets/autoreview/autoloops.toml +1 -1
  295. package/presets/autoreview/harness.md +5 -5
  296. package/presets/autoreview/roles/checker.md +4 -4
  297. package/presets/autoreview/roles/reader.md +5 -5
  298. package/presets/autoreview/roles/suggester.md +4 -4
  299. package/presets/autoreview/roles/summarizer.md +4 -4
  300. package/presets/autosec/README.md +1 -1
  301. package/presets/autosec/autoloops.toml +1 -1
  302. package/presets/autosec/harness.md +5 -5
  303. package/presets/autosec/roles/analyst.md +4 -4
  304. package/presets/autosec/roles/hardener.md +2 -2
  305. package/presets/autosec/roles/reporter.md +4 -4
  306. package/presets/autosec/roles/scanner.md +3 -3
  307. package/presets/autosimplify/README.md +1 -1
  308. package/presets/autosimplify/autoloops.toml +7 -3
  309. package/presets/autosimplify/harness.md +7 -7
  310. package/presets/autosimplify/roles/reviewer.md +3 -3
  311. package/presets/autosimplify/roles/scoper.md +7 -7
  312. package/presets/autosimplify/roles/simplifier.md +4 -4
  313. package/presets/autosimplify/roles/verifier.md +3 -3
  314. package/presets/autospec/README.md +1 -1
  315. package/presets/autospec/autoloops.toml +1 -1
  316. package/presets/autospec/harness.md +6 -6
  317. package/presets/autospec/roles/clarifier.md +4 -3
  318. package/presets/autospec/roles/critic.md +1 -1
  319. package/presets/autospec/roles/designer.md +3 -3
  320. package/presets/autospec/roles/planner.md +2 -2
  321. package/presets/autospec/roles/researcher.md +3 -3
  322. package/presets/autotest/README.md +1 -1
  323. package/presets/autotest/autoloops.toml +1 -1
  324. package/presets/autotest/harness.md +6 -6
  325. package/presets/autotest/roles/assessor.md +3 -3
  326. package/presets/autotest/roles/runner.md +2 -2
  327. package/presets/autotest/roles/surveyor.md +4 -4
  328. package/presets/autotest/roles/writer.md +4 -4
@@ -4,12 +4,15 @@
4
4
  */
5
5
  export function renderRunLine(r) {
6
6
  const shortId = shortRunId(r.run_id);
7
+ const wt = r.isolation_mode === "worktree" ? "WT" : "──";
7
8
  const parts = [
8
9
  shortId.padEnd(24),
9
10
  r.status.padEnd(10),
10
11
  r.preset.padEnd(14),
11
- ("iter:" + r.iteration).padEnd(8),
12
+ wt.padEnd(4),
13
+ `iter:${r.iteration}`.padEnd(8),
12
14
  r.latest_event.padEnd(18),
15
+ formatTime(r.created_at).padEnd(18),
13
16
  formatTime(r.updated_at),
14
17
  ];
15
18
  return parts.join(" ");
@@ -25,11 +28,17 @@ export function renderRunDetail(r) {
25
28
  field("Objective", truncate(r.objective, 120)),
26
29
  field("Trigger", r.trigger),
27
30
  field("Backend", r.backend),
31
+ field("Args", r.backend_args?.length ? r.backend_args.join(" ") : "(none)"),
28
32
  field("Iteration", String(r.iteration)),
29
33
  field("Latest", r.latest_event),
30
34
  ];
31
35
  if (r.stop_reason)
32
36
  lines.push(field("Stop", r.stop_reason));
37
+ lines.push(field("Isolation", r.isolation_mode || "shared"));
38
+ if (r.worktree_name)
39
+ lines.push(field("Worktree", r.worktree_name));
40
+ if (r.worktree_path)
41
+ lines.push(field("WT Path", r.worktree_path));
33
42
  lines.push(field("Created", r.created_at));
34
43
  lines.push(field("Updated", r.updated_at));
35
44
  lines.push(field("Work dir", r.work_dir));
@@ -41,11 +50,10 @@ export function renderRunDetail(r) {
41
50
  /**
42
51
  * Render artifact paths for a run.
43
52
  */
44
- export function renderArtifacts(r, registryPath) {
53
+ export function renderArtifacts(r, stateDir) {
45
54
  const lines = [
46
55
  field("Journal", r.journal_file),
47
- field("Registry", registryPath),
48
- field("State dir", r.state_dir),
56
+ field("State dir", r.state_dir || stateDir),
49
57
  field("Work dir", r.work_dir),
50
58
  ];
51
59
  return lines.join("\n");
@@ -58,30 +66,35 @@ export function renderListHeader() {
58
66
  "RUN ID".padEnd(24),
59
67
  "STATUS".padEnd(10),
60
68
  "PRESET".padEnd(14),
69
+ "WT".padEnd(4),
61
70
  "ITER".padEnd(8),
62
71
  "LATEST EVENT".padEnd(18),
72
+ "STARTED".padEnd(18),
63
73
  "UPDATED",
64
74
  ];
65
75
  return parts.join(" ");
66
76
  }
67
77
  function field(label, value) {
68
- return (label + ":").padEnd(12) + value;
78
+ return `${label}:`.padEnd(12) + value;
69
79
  }
70
80
  function shortRunId(id) {
71
- // run-abc12345-xyz0 keep full id but it's already short enough
72
- // If run IDs are long, truncate to 16 chars
81
+ // Human-readable ids fit comfortably; only truncate unusually long custom ids.
73
82
  if (id.length <= 24)
74
83
  return id;
75
- return id.slice(0, 22) + "..";
84
+ return `${id.slice(0, 22)}..`;
76
85
  }
77
86
  function truncate(s, max) {
78
87
  if (s.length <= max)
79
88
  return s;
80
- return s.slice(0, max - 3) + "...";
89
+ return `${s.slice(0, max - 3)}...`;
81
90
  }
82
- function formatTime(iso) {
91
+ export function formatTime(iso) {
83
92
  if (!iso)
84
93
  return "-";
85
- return iso;
94
+ const d = new Date(iso);
95
+ if (Number.isNaN(d.getTime()))
96
+ return iso;
97
+ const pad = (n) => String(n).padStart(2, "0");
98
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
86
99
  }
87
100
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/loops/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/loops/render.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Show detail view for a run by exact or partial ID.
3
3
  */
4
- export declare function showRun(registryPath: string, partial: string): string;
4
+ export declare function showRun(stateDir: string, partial: string): string;
5
5
  /**
6
6
  * Show artifact paths for a run by exact or partial ID.
7
7
  */
8
- export declare function showArtifacts(registryPath: string, partial: string): string;
8
+ export declare function showArtifacts(stateDir: string, partial: string): string;
@@ -1,31 +1,31 @@
1
- import { findRunByPrefix } from "../registry/read.js";
2
- import { renderRunDetail, renderArtifacts } from "./render.js";
1
+ import { mergedFindRunByPrefix } from "../registry/discover.js";
2
+ import { renderArtifacts, renderRunDetail } from "./render.js";
3
3
  /**
4
4
  * Show detail view for a run by exact or partial ID.
5
5
  */
6
- export function showRun(registryPath, partial) {
7
- const result = findRunByPrefix(registryPath, partial);
6
+ export function showRun(stateDir, partial) {
7
+ const result = mergedFindRunByPrefix(stateDir, partial);
8
8
  if (result === undefined) {
9
- return "No run matching '" + partial + "'.";
9
+ return `No run matching '${partial}'.`;
10
10
  }
11
11
  if (Array.isArray(result)) {
12
- const ids = result.map((r) => " " + r.run_id).join("\n");
13
- return "Ambiguous run ID '" + partial + "'. Matches:\n" + ids;
12
+ const ids = result.map((r) => ` ${r.run_id}`).join("\n");
13
+ return `Ambiguous run ID '${partial}'. Matches:\n${ids}`;
14
14
  }
15
15
  return renderRunDetail(result);
16
16
  }
17
17
  /**
18
18
  * Show artifact paths for a run by exact or partial ID.
19
19
  */
20
- export function showArtifacts(registryPath, partial) {
21
- const result = findRunByPrefix(registryPath, partial);
20
+ export function showArtifacts(stateDir, partial) {
21
+ const result = mergedFindRunByPrefix(stateDir, partial);
22
22
  if (result === undefined) {
23
- return "No run matching '" + partial + "'.";
23
+ return `No run matching '${partial}'.`;
24
24
  }
25
25
  if (Array.isArray(result)) {
26
- const ids = result.map((r) => " " + r.run_id).join("\n");
27
- return "Ambiguous run ID '" + partial + "'. Matches:\n" + ids;
26
+ const ids = result.map((r) => ` ${r.run_id}`).join("\n");
27
+ return `Ambiguous run ID '${partial}'. Matches:\n${ids}`;
28
28
  }
29
- return renderArtifacts(result, registryPath);
29
+ return renderArtifacts(result, stateDir);
30
30
  }
31
31
  //# sourceMappingURL=show.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/loops/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,YAAoB,EAAE,OAAe;IAC3D,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,mBAAmB,GAAG,OAAO,GAAG,IAAI,CAAC;IAC9C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,oBAAoB,GAAG,OAAO,GAAG,eAAe,GAAG,GAAG,CAAC;IAChE,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB,EAAE,OAAe;IACjE,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,mBAAmB,GAAG,OAAO,GAAG,IAAI,CAAC;IAC9C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,oBAAoB,GAAG,OAAO,GAAG,eAAe,GAAG,GAAG,CAAC;IAChE,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/loops/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,QAAgB,EAAE,OAAe;IACvD,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAExD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,oBAAoB,OAAO,IAAI,CAAC;IACzC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,qBAAqB,OAAO,gBAAgB,GAAG,EAAE,CAAC;IAC3D,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe;IAC7D,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAExD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,oBAAoB,OAAO,IAAI,CAAC;IACzC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,qBAAqB,OAAO,gBAAgB,GAAG,EAAE,CAAC;IAC3D,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,3 +1,9 @@
1
+ import type { RunRecord } from "../registry/types.js";
2
+ /**
3
+ * Compute a health advisory string for a run, or null if the run is healthy.
4
+ * Returns a message only when the run is in the watching or stuck band.
5
+ */
6
+ export declare function healthAdvisory(r: RunRecord, nowMs?: number): string | null;
1
7
  /**
2
8
  * Watch a run by polling the registry. Prints compact progress lines when
3
9
  * state changes, then a full detail view when the run reaches a terminal
@@ -5,4 +11,4 @@
5
11
  *
6
12
  * For already-terminal runs, prints the detail view and returns immediately.
7
13
  */
8
- export declare function watchRun(registryPath: string, partial: string, intervalMs?: number): Promise<void>;
14
+ export declare function watchRun(stateDir: string, partial: string, intervalMs?: number): Promise<void>;
@@ -1,7 +1,59 @@
1
- import { findRunByPrefix } from "../registry/read.js";
2
- import { renderRunDetail, renderRunLine, renderListHeader } from "./render.js";
1
+ import { mergedFindRunByPrefix } from "../registry/discover.js";
2
+ import { policyForPreset } from "./policy.js";
3
+ import { renderListHeader, renderRunDetail, renderRunLine } from "./render.js";
3
4
  const DEFAULT_INTERVAL_MS = 2000;
4
- const TERMINAL_STATUSES = new Set(["completed", "failed", "timed_out", "stopped"]);
5
+ const TERMINAL_STATUSES = new Set([
6
+ "completed",
7
+ "failed",
8
+ "timed_out",
9
+ "stopped",
10
+ ]);
11
+ /**
12
+ * Compute a health advisory string for a run, or null if the run is healthy.
13
+ * Returns a message only when the run is in the watching or stuck band.
14
+ */
15
+ export function healthAdvisory(r, nowMs = Date.now()) {
16
+ if (r.status !== "running")
17
+ return null;
18
+ if (!r.updated_at)
19
+ return null;
20
+ const updatedMs = new Date(r.updated_at).getTime();
21
+ if (Number.isNaN(updatedMs))
22
+ return null;
23
+ const elapsed = nowMs - updatedMs;
24
+ const policy = policyForPreset(r.preset);
25
+ if (elapsed > policy.stuckAfterMs) {
26
+ const mins = Math.round(elapsed / 60000);
27
+ return ("[watch] " +
28
+ r.preset +
29
+ ": no progress for " +
30
+ mins +
31
+ "m — likely stuck, investigate now");
32
+ }
33
+ if (elapsed > policy.warningAfterMs) {
34
+ const mins = Math.round(elapsed / 60000);
35
+ return ("[watch] " +
36
+ r.preset +
37
+ ": no progress for " +
38
+ mins +
39
+ "m — investigate soon");
40
+ }
41
+ return null;
42
+ }
43
+ function healthState(r, nowMs) {
44
+ if (r.status !== "running" || !r.updated_at)
45
+ return "active";
46
+ const updatedMs = new Date(r.updated_at).getTime();
47
+ if (Number.isNaN(updatedMs))
48
+ return "active";
49
+ const elapsed = nowMs - updatedMs;
50
+ const policy = policyForPreset(r.preset);
51
+ if (elapsed > policy.stuckAfterMs)
52
+ return "stuck";
53
+ if (elapsed > policy.warningAfterMs)
54
+ return "watching";
55
+ return "active";
56
+ }
5
57
  /**
6
58
  * Watch a run by polling the registry. Prints compact progress lines when
7
59
  * state changes, then a full detail view when the run reaches a terminal
@@ -9,21 +61,26 @@ const TERMINAL_STATUSES = new Set(["completed", "failed", "timed_out", "stopped"
9
61
  *
10
62
  * For already-terminal runs, prints the detail view and returns immediately.
11
63
  */
12
- export async function watchRun(registryPath, partial, intervalMs = DEFAULT_INTERVAL_MS) {
13
- const initial = resolveRun(registryPath, partial);
64
+ export async function watchRun(stateDir, partial, intervalMs = DEFAULT_INTERVAL_MS) {
65
+ const initial = resolveRun(stateDir, partial);
14
66
  if (typeof initial === "string") {
15
67
  console.log(initial);
16
68
  return;
17
69
  }
18
70
  if (isTerminal(initial)) {
19
- console.log("[watch] Run already " + initial.status + ".");
71
+ console.log(`[watch] Run already ${initial.status}.`);
20
72
  console.log(renderRunDetail(initial));
21
73
  return;
22
74
  }
23
- console.log("[watch] Watching " + initial.run_id + " (poll every " + (intervalMs / 1000) + "s)");
75
+ console.log("[watch] Watching " +
76
+ initial.run_id +
77
+ " (poll every " +
78
+ intervalMs / 1000 +
79
+ "s)");
24
80
  console.log(renderListHeader());
25
81
  console.log(renderRunLine(initial));
26
82
  let prev = snapshot(initial);
83
+ let prevHealth = healthState(initial, Date.now());
27
84
  return new Promise((resolve) => {
28
85
  const onSigint = () => {
29
86
  console.log("\n[watch] Interrupted.");
@@ -32,10 +89,10 @@ export async function watchRun(registryPath, partial, intervalMs = DEFAULT_INTER
32
89
  };
33
90
  process.on("SIGINT", onSigint);
34
91
  const timer = setInterval(() => {
35
- const current = resolveRun(registryPath, initial.run_id);
92
+ const current = resolveRun(stateDir, initial.run_id);
36
93
  if (typeof current === "string") {
37
94
  // Run disappeared from registry — unusual but handle gracefully
38
- console.log("[watch] " + current);
95
+ console.log(`[watch] ${current}`);
39
96
  clearInterval(timer);
40
97
  process.off("SIGINT", onSigint);
41
98
  resolve();
@@ -46,9 +103,18 @@ export async function watchRun(registryPath, partial, intervalMs = DEFAULT_INTER
46
103
  prev = snap;
47
104
  console.log(renderRunLine(current));
48
105
  }
106
+ // Print advisory on health state transition
107
+ const nowMs = Date.now();
108
+ const currentHealth = healthState(current, nowMs);
109
+ if (currentHealth !== prevHealth && currentHealth !== "active") {
110
+ const advisory = healthAdvisory(current, nowMs);
111
+ if (advisory)
112
+ console.log(advisory);
113
+ }
114
+ prevHealth = currentHealth;
49
115
  if (isTerminal(current)) {
50
116
  console.log("");
51
- console.log("[watch] Run " + current.status + ".");
117
+ console.log(`[watch] Run ${current.status}.`);
52
118
  console.log(renderRunDetail(current));
53
119
  clearInterval(timer);
54
120
  process.off("SIGINT", onSigint);
@@ -57,14 +123,14 @@ export async function watchRun(registryPath, partial, intervalMs = DEFAULT_INTER
57
123
  }, intervalMs);
58
124
  });
59
125
  }
60
- function resolveRun(registryPath, partial) {
61
- const result = findRunByPrefix(registryPath, partial);
126
+ function resolveRun(stateDir, partial) {
127
+ const result = mergedFindRunByPrefix(stateDir, partial);
62
128
  if (result === undefined) {
63
- return "No run matching '" + partial + "'.";
129
+ return `No run matching '${partial}'.`;
64
130
  }
65
131
  if (Array.isArray(result)) {
66
- const ids = result.map((r) => " " + r.run_id).join("\n");
67
- return "Ambiguous run ID '" + partial + "'. Matches:\n" + ids;
132
+ const ids = result.map((r) => ` ${r.run_id}`).join("\n");
133
+ return `Ambiguous run ID '${partial}'. Matches:\n${ids}`;
68
134
  }
69
135
  return result;
70
136
  }
@@ -72,6 +138,6 @@ function isTerminal(r) {
72
138
  return TERMINAL_STATUSES.has(r.status);
73
139
  }
74
140
  function snapshot(r) {
75
- return r.iteration + "|" + r.latest_event + "|" + r.status + "|" + r.updated_at;
141
+ return `${r.iteration}|${r.latest_event}|${r.status}|${r.updated_at}`;
76
142
  }
77
143
  //# sourceMappingURL=watch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/loops/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/loops/watch.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -1,14 +1,20 @@
1
1
  import { existsSync } from "node:fs";
2
- import { resolve, join } from "node:path";
3
- import * as harness from "./harness/index.js";
4
- import { printUsage, printEmitUsage } from "./usage.js";
5
- import { dispatchRun } from "./commands/run.js";
6
- import { dispatchMemory } from "./commands/memory.js";
2
+ import { join, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
7
4
  import { dispatchChain } from "./commands/chain.js";
5
+ import { dispatchConfig } from "./commands/config.js";
6
+ import { dispatchDashboard } from "./commands/dashboard.js";
8
7
  import { dispatchInspect } from "./commands/inspect.js";
9
8
  import { dispatchList } from "./commands/list.js";
10
- import { dispatchPiAdapter } from "./commands/pi-adapter.js";
11
9
  import { dispatchLoops } from "./commands/loops.js";
10
+ import { dispatchMemory } from "./commands/memory.js";
11
+ import { dispatchPiAdapter } from "./commands/pi-adapter.js";
12
+ import { dispatchRun } from "./commands/run.js";
13
+ import { dispatchRuns } from "./commands/runs.js";
14
+ import { dispatchTask } from "./commands/task.js";
15
+ import { dispatchWorktree } from "./commands/worktree.js";
16
+ import * as harness from "./harness/index.js";
17
+ import { printEmitUsage, printUsage } from "./usage.js";
12
18
  function main() {
13
19
  const argv = process.argv;
14
20
  const args = runtimeArgv(argv);
@@ -34,7 +40,7 @@ function dispatch(args, argv) {
34
40
  harness.emit(resolveRuntimeProjectDir(), args[1], args.slice(2).join(" "));
35
41
  return;
36
42
  case "list":
37
- dispatchList(args.slice(1));
43
+ dispatchList(args.slice(1), bundleRoot);
38
44
  return;
39
45
  case "loops":
40
46
  dispatchLoops(args.slice(1));
@@ -51,15 +57,30 @@ function dispatch(args, argv) {
51
57
  case "memory":
52
58
  dispatchMemory(args.slice(1));
53
59
  return;
60
+ case "task":
61
+ dispatchTask(args.slice(1));
62
+ return;
63
+ case "worktree":
64
+ dispatchWorktree(args.slice(1));
65
+ return;
66
+ case "runs":
67
+ dispatchRuns(args.slice(1));
68
+ return;
54
69
  case "chain":
55
70
  dispatchChain(args.slice(1), selfCmd);
56
71
  return;
72
+ case "config":
73
+ dispatchConfig(args.slice(1));
74
+ return;
75
+ case "dashboard":
76
+ dispatchDashboard(args.slice(1), bundleRoot, selfCmd);
77
+ return;
57
78
  default:
58
79
  dispatchRun(args, argv, bundleRoot, selfCmd);
59
80
  }
60
81
  }
61
82
  function resolveRuntimeProjectDir() {
62
- return process.env["MINILOOPS_PROJECT_DIR"] || ".";
83
+ return process.env.AUTOLOOP_PROJECT_DIR || ".";
63
84
  }
64
85
  function runtimeArgv(argv) {
65
86
  // argv[0] is node, argv[1] is script, rest is user args
@@ -76,24 +97,45 @@ function runtimeArgv(argv) {
76
97
  return userArgs;
77
98
  }
78
99
  function isCliCommand(value) {
79
- return ["run", "emit", "inspect", "memory", "list", "loops", "chain", "pi-adapter", "branch-run", "--help", "-h"].includes(value);
100
+ return [
101
+ "run",
102
+ "emit",
103
+ "inspect",
104
+ "memory",
105
+ "task",
106
+ "list",
107
+ "loops",
108
+ "runs",
109
+ "chain",
110
+ "pi-adapter",
111
+ "branch-run",
112
+ "worktree",
113
+ "config",
114
+ "dashboard",
115
+ "--help",
116
+ "-h",
117
+ ].includes(value);
80
118
  }
81
119
  function selfCommand(argv) {
82
120
  // Return a command that re-invokes this program
83
- return "'" + resolve(argv[1] ?? "autoloop") + "'";
121
+ return `'${resolve(argv[1] ?? "autoloop")}'`;
84
122
  }
85
123
  function resolveBundleRoot(argv) {
86
- const envRoot = process.env["AUTOLOOPS_BUNDLE_ROOT"];
124
+ const envRoot = process.env.AUTOLOOPS_BUNDLE_ROOT;
87
125
  if (envRoot)
88
126
  return envRoot;
89
- // Try to resolve from the script location
127
+ // Resolve relative to this file works for both source and npm-installed binary
128
+ const thisFile = fileURLToPath(import.meta.url);
129
+ const candidate = resolve(thisFile, "../..");
130
+ if (existsSync(join(candidate, "presets")))
131
+ return candidate;
132
+ // Fallback: try argv[1] heuristic (works when running from source via bin/)
90
133
  const scriptPath = argv[1] ?? "";
91
134
  if (scriptPath) {
92
- // The bundle root is the directory containing the script's parent project
93
135
  const scriptDir = resolve(scriptPath, "..");
94
- const candidate = resolve(scriptDir, "..");
95
- if (existsSync(join(candidate, "presets")))
96
- return candidate;
136
+ const argvCandidate = resolve(scriptDir, "..");
137
+ if (existsSync(join(argvCandidate, "presets")))
138
+ return argvCandidate;
97
139
  }
98
140
  return ".";
99
141
  }
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/dist/markdown.js CHANGED
@@ -1,52 +1,52 @@
1
1
  export function bold(text) {
2
- return "**" + text + "**";
2
+ return `**${text}**`;
3
3
  }
4
4
  export function italic(text) {
5
- return "_" + text + "_";
5
+ return `_${text}_`;
6
6
  }
7
7
  export function code(text) {
8
- return "`" + text + "`";
8
+ return `\`${text}\``;
9
9
  }
10
10
  export function heading(level, text) {
11
11
  const prefix = "#".repeat(Math.min(Math.max(level, 1), 5));
12
- return prefix + " " + text;
12
+ return `${prefix} ${text}`;
13
13
  }
14
14
  export function codeBlock(text, lang = "") {
15
- return "```" + lang + "\n" + text + "\n```";
15
+ return `\`\`\`${lang}\n${text}\n\`\`\``;
16
16
  }
17
17
  export function blockquote(text) {
18
18
  return prefixLines(text, "> ");
19
19
  }
20
20
  export function section(title, body, level = 2) {
21
- return heading(level, title) + "\n\n" + body;
21
+ return `${heading(level, title)}\n\n${body}`;
22
22
  }
23
23
  export function bulletList(items) {
24
24
  if (items.length === 0)
25
25
  return "";
26
- return items.map((item) => "- " + item).join("\n");
26
+ return items.map((item) => `- ${item}`).join("\n");
27
27
  }
28
28
  export function numberedList(items) {
29
29
  if (items.length === 0)
30
30
  return "";
31
- return items.map((item, i) => (i + 1) + ". " + item).join("\n");
31
+ return items.map((item, i) => `${i + 1}. ${item}`).join("\n");
32
32
  }
33
33
  export function table(headers, rows) {
34
34
  const widths = columnWidths(headers, rows);
35
35
  const headerRow = tableRow(headers, widths);
36
36
  const separator = separatorRow(widths);
37
37
  const body = rows.map((row) => tableRow(row, widths)).join("\n");
38
- return headerRow + "\n" + separator + (rows.length > 0 ? "\n" + body : "");
38
+ return `${headerRow}\n${separator}${rows.length > 0 ? `\n${body}` : ""}`;
39
39
  }
40
40
  function tableRow(cells, widths) {
41
41
  const padded = cells.map((cell, i) => padCell(cell, widths[i] ?? cell.length));
42
- return "| " + padded.join(" | ") + " |";
42
+ return `| ${padded.join(" | ")} |`;
43
43
  }
44
44
  function padCell(cell, width) {
45
45
  return cell.padEnd(width);
46
46
  }
47
47
  function separatorRow(widths) {
48
48
  const dashes = widths.map((w) => "-".repeat(w));
49
- return "| " + dashes.join(" | ") + " |";
49
+ return `| ${dashes.join(" | ")} |`;
50
50
  }
51
51
  function columnWidths(headers, rows) {
52
52
  const widths = headers.map((h) => h.length);
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { lineSep, joinCsv } from "./utils.js";
1
+ import { joinCsv, lineSep } from "./utils.js";
2
2
  export function truncateText(text, budgetChars, memory) {
3
3
  if (budgetChars <= 0)
4
4
  return text;
@@ -60,12 +60,12 @@ function formatDroppedCounts(prefs, learnings, meta) {
60
60
  return "";
61
61
  const parts = [];
62
62
  if (prefs > 0)
63
- parts.push(prefs + " preferences");
63
+ parts.push(`${prefs} preferences`);
64
64
  if (learnings > 0)
65
- parts.push(learnings + " learnings");
65
+ parts.push(`${learnings} learnings`);
66
66
  if (meta > 0)
67
- parts.push(meta + " meta");
68
- return " (" + joinCsv(parts) + " truncated)";
67
+ parts.push(`${meta} meta`);
68
+ return ` (${joinCsv(parts)} truncated)`;
69
69
  }
70
70
  function truncationFooter(droppedEntries, droppedDetail, renderedChars, budgetChars) {
71
71
  return ("(memory truncated: " +