@swarmify/agents-cli 1.13.3 → 1.14.0

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 (567) hide show
  1. package/README.md +2 -319
  2. package/bin/agents.js +2 -0
  3. package/package.json +13 -79
  4. package/scripts/postinstall.js +4 -71
  5. package/CHANGELOG.md +0 -316
  6. package/LICENSE +0 -21
  7. package/dist/commands/__tests__/sessions-tail.test.d.ts +0 -2
  8. package/dist/commands/__tests__/sessions-tail.test.d.ts.map +0 -1
  9. package/dist/commands/__tests__/sessions-tail.test.js +0 -108
  10. package/dist/commands/__tests__/sessions-tail.test.js.map +0 -1
  11. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  12. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  13. package/dist/commands/__tests__/sessions.test.js +0 -636
  14. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  15. package/dist/commands/cloud.d.ts +0 -11
  16. package/dist/commands/cloud.d.ts.map +0 -1
  17. package/dist/commands/cloud.js +0 -363
  18. package/dist/commands/cloud.js.map +0 -1
  19. package/dist/commands/commands.d.ts +0 -12
  20. package/dist/commands/commands.d.ts.map +0 -1
  21. package/dist/commands/commands.js +0 -629
  22. package/dist/commands/commands.js.map +0 -1
  23. package/dist/commands/daemon.d.ts +0 -11
  24. package/dist/commands/daemon.d.ts.map +0 -1
  25. package/dist/commands/daemon.js +0 -119
  26. package/dist/commands/daemon.js.map +0 -1
  27. package/dist/commands/drive.d.ts +0 -11
  28. package/dist/commands/drive.d.ts.map +0 -1
  29. package/dist/commands/drive.js +0 -175
  30. package/dist/commands/drive.js.map +0 -1
  31. package/dist/commands/exec.d.ts +0 -11
  32. package/dist/commands/exec.d.ts.map +0 -1
  33. package/dist/commands/exec.js +0 -251
  34. package/dist/commands/exec.js.map +0 -1
  35. package/dist/commands/factory.d.ts +0 -11
  36. package/dist/commands/factory.d.ts.map +0 -1
  37. package/dist/commands/factory.js +0 -445
  38. package/dist/commands/factory.js.map +0 -1
  39. package/dist/commands/fork.d.ts +0 -11
  40. package/dist/commands/fork.d.ts.map +0 -1
  41. package/dist/commands/fork.js +0 -147
  42. package/dist/commands/fork.js.map +0 -1
  43. package/dist/commands/hooks.d.ts +0 -12
  44. package/dist/commands/hooks.d.ts.map +0 -1
  45. package/dist/commands/hooks.js +0 -690
  46. package/dist/commands/hooks.js.map +0 -1
  47. package/dist/commands/init.d.ts +0 -15
  48. package/dist/commands/init.d.ts.map +0 -1
  49. package/dist/commands/init.js +0 -137
  50. package/dist/commands/init.js.map +0 -1
  51. package/dist/commands/mcp.d.ts +0 -12
  52. package/dist/commands/mcp.d.ts.map +0 -1
  53. package/dist/commands/mcp.js +0 -583
  54. package/dist/commands/mcp.js.map +0 -1
  55. package/dist/commands/models.d.ts +0 -11
  56. package/dist/commands/models.d.ts.map +0 -1
  57. package/dist/commands/models.js +0 -170
  58. package/dist/commands/models.js.map +0 -1
  59. package/dist/commands/packages.d.ts +0 -11
  60. package/dist/commands/packages.d.ts.map +0 -1
  61. package/dist/commands/packages.js +0 -551
  62. package/dist/commands/packages.js.map +0 -1
  63. package/dist/commands/permissions.d.ts +0 -12
  64. package/dist/commands/permissions.d.ts.map +0 -1
  65. package/dist/commands/permissions.js +0 -724
  66. package/dist/commands/permissions.js.map +0 -1
  67. package/dist/commands/plugins.d.ts +0 -11
  68. package/dist/commands/plugins.d.ts.map +0 -1
  69. package/dist/commands/plugins.js +0 -393
  70. package/dist/commands/plugins.js.map +0 -1
  71. package/dist/commands/profiles.d.ts +0 -12
  72. package/dist/commands/profiles.d.ts.map +0 -1
  73. package/dist/commands/profiles.js +0 -255
  74. package/dist/commands/profiles.js.map +0 -1
  75. package/dist/commands/pty.d.ts +0 -21
  76. package/dist/commands/pty.d.ts.map +0 -1
  77. package/dist/commands/pty.js +0 -391
  78. package/dist/commands/pty.js.map +0 -1
  79. package/dist/commands/pull.d.ts +0 -11
  80. package/dist/commands/pull.d.ts.map +0 -1
  81. package/dist/commands/pull.js +0 -456
  82. package/dist/commands/pull.js.map +0 -1
  83. package/dist/commands/push.d.ts +0 -11
  84. package/dist/commands/push.d.ts.map +0 -1
  85. package/dist/commands/push.js +0 -188
  86. package/dist/commands/push.js.map +0 -1
  87. package/dist/commands/refresh-memory.d.ts +0 -16
  88. package/dist/commands/refresh-memory.d.ts.map +0 -1
  89. package/dist/commands/refresh-memory.js +0 -52
  90. package/dist/commands/refresh-memory.js.map +0 -1
  91. package/dist/commands/resource-view.d.ts +0 -39
  92. package/dist/commands/resource-view.d.ts.map +0 -1
  93. package/dist/commands/resource-view.js +0 -197
  94. package/dist/commands/resource-view.js.map +0 -1
  95. package/dist/commands/routines.d.ts +0 -11
  96. package/dist/commands/routines.d.ts.map +0 -1
  97. package/dist/commands/routines.js +0 -590
  98. package/dist/commands/routines.js.map +0 -1
  99. package/dist/commands/rules.d.ts +0 -12
  100. package/dist/commands/rules.d.ts.map +0 -1
  101. package/dist/commands/rules.js +0 -489
  102. package/dist/commands/rules.js.map +0 -1
  103. package/dist/commands/secrets.d.ts +0 -11
  104. package/dist/commands/secrets.d.ts.map +0 -1
  105. package/dist/commands/secrets.js +0 -352
  106. package/dist/commands/secrets.js.map +0 -1
  107. package/dist/commands/sessions-picker.d.ts +0 -18
  108. package/dist/commands/sessions-picker.d.ts.map +0 -1
  109. package/dist/commands/sessions-picker.js +0 -265
  110. package/dist/commands/sessions-picker.js.map +0 -1
  111. package/dist/commands/sessions-tail.d.ts +0 -20
  112. package/dist/commands/sessions-tail.d.ts.map +0 -1
  113. package/dist/commands/sessions-tail.js +0 -236
  114. package/dist/commands/sessions-tail.js.map +0 -1
  115. package/dist/commands/sessions.d.ts +0 -18
  116. package/dist/commands/sessions.d.ts.map +0 -1
  117. package/dist/commands/sessions.js +0 -1173
  118. package/dist/commands/sessions.js.map +0 -1
  119. package/dist/commands/skills.d.ts +0 -12
  120. package/dist/commands/skills.d.ts.map +0 -1
  121. package/dist/commands/skills.js +0 -717
  122. package/dist/commands/skills.js.map +0 -1
  123. package/dist/commands/status.d.ts +0 -10
  124. package/dist/commands/status.d.ts.map +0 -1
  125. package/dist/commands/status.js +0 -26
  126. package/dist/commands/status.js.map +0 -1
  127. package/dist/commands/subagents.d.ts +0 -11
  128. package/dist/commands/subagents.d.ts.map +0 -1
  129. package/dist/commands/subagents.js +0 -361
  130. package/dist/commands/subagents.js.map +0 -1
  131. package/dist/commands/sync.d.ts +0 -11
  132. package/dist/commands/sync.d.ts.map +0 -1
  133. package/dist/commands/sync.js +0 -70
  134. package/dist/commands/sync.js.map +0 -1
  135. package/dist/commands/teams-picker.d.ts +0 -18
  136. package/dist/commands/teams-picker.d.ts.map +0 -1
  137. package/dist/commands/teams-picker.js +0 -290
  138. package/dist/commands/teams-picker.js.map +0 -1
  139. package/dist/commands/teams.d.ts +0 -18
  140. package/dist/commands/teams.d.ts.map +0 -1
  141. package/dist/commands/teams.js +0 -1144
  142. package/dist/commands/teams.js.map +0 -1
  143. package/dist/commands/utils.d.ts +0 -45
  144. package/dist/commands/utils.d.ts.map +0 -1
  145. package/dist/commands/utils.js +0 -106
  146. package/dist/commands/utils.js.map +0 -1
  147. package/dist/commands/versions.d.ts +0 -11
  148. package/dist/commands/versions.d.ts.map +0 -1
  149. package/dist/commands/versions.js +0 -701
  150. package/dist/commands/versions.js.map +0 -1
  151. package/dist/commands/view.d.ts +0 -43
  152. package/dist/commands/view.d.ts.map +0 -1
  153. package/dist/commands/view.js +0 -894
  154. package/dist/commands/view.js.map +0 -1
  155. package/dist/index.d.ts +0 -9
  156. package/dist/index.d.ts.map +0 -1
  157. package/dist/index.js +0 -496
  158. package/dist/index.js.map +0 -1
  159. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  160. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  161. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  162. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  163. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  164. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  165. package/dist/lib/__tests__/exec.test.js +0 -446
  166. package/dist/lib/__tests__/exec.test.js.map +0 -1
  167. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  168. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  169. package/dist/lib/__tests__/git-sync.test.js +0 -138
  170. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  171. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  172. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  173. package/dist/lib/__tests__/hooks.test.js +0 -203
  174. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  175. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  176. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  177. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  178. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  179. package/dist/lib/__tests__/models.test.d.ts +0 -2
  180. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  181. package/dist/lib/__tests__/models.test.js +0 -239
  182. package/dist/lib/__tests__/models.test.js.map +0 -1
  183. package/dist/lib/__tests__/rotate.test.d.ts +0 -2
  184. package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
  185. package/dist/lib/__tests__/rotate.test.js +0 -80
  186. package/dist/lib/__tests__/rotate.test.js.map +0 -1
  187. package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
  188. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
  189. package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
  190. package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
  191. package/dist/lib/__tests__/secrets.test.d.ts +0 -2
  192. package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
  193. package/dist/lib/__tests__/secrets.test.js +0 -90
  194. package/dist/lib/__tests__/secrets.test.js.map +0 -1
  195. package/dist/lib/__tests__/shims.test.d.ts +0 -2
  196. package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
  197. package/dist/lib/__tests__/shims.test.js +0 -57
  198. package/dist/lib/__tests__/shims.test.js.map +0 -1
  199. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  200. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  201. package/dist/lib/__tests__/usage.test.js +0 -220
  202. package/dist/lib/__tests__/usage.test.js.map +0 -1
  203. package/dist/lib/__tests__/versions.test.d.ts +0 -2
  204. package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
  205. package/dist/lib/__tests__/versions.test.js +0 -63
  206. package/dist/lib/__tests__/versions.test.js.map +0 -1
  207. package/dist/lib/agents.d.ts +0 -158
  208. package/dist/lib/agents.d.ts.map +0 -1
  209. package/dist/lib/agents.js +0 -1159
  210. package/dist/lib/agents.js.map +0 -1
  211. package/dist/lib/artifact-actions.d.ts +0 -27
  212. package/dist/lib/artifact-actions.d.ts.map +0 -1
  213. package/dist/lib/artifact-actions.js +0 -58
  214. package/dist/lib/artifact-actions.js.map +0 -1
  215. package/dist/lib/cloud/codex.d.ts +0 -26
  216. package/dist/lib/cloud/codex.d.ts.map +0 -1
  217. package/dist/lib/cloud/codex.js +0 -237
  218. package/dist/lib/cloud/codex.js.map +0 -1
  219. package/dist/lib/cloud/factory.d.ts +0 -32
  220. package/dist/lib/cloud/factory.d.ts.map +0 -1
  221. package/dist/lib/cloud/factory.js +0 -43
  222. package/dist/lib/cloud/factory.js.map +0 -1
  223. package/dist/lib/cloud/registry.d.ts +0 -16
  224. package/dist/lib/cloud/registry.d.ts.map +0 -1
  225. package/dist/lib/cloud/registry.js +0 -68
  226. package/dist/lib/cloud/registry.js.map +0 -1
  227. package/dist/lib/cloud/rush.d.ts +0 -37
  228. package/dist/lib/cloud/rush.d.ts.map +0 -1
  229. package/dist/lib/cloud/rush.js +0 -230
  230. package/dist/lib/cloud/rush.js.map +0 -1
  231. package/dist/lib/cloud/rush.test.d.ts +0 -2
  232. package/dist/lib/cloud/rush.test.d.ts.map +0 -1
  233. package/dist/lib/cloud/rush.test.js +0 -63
  234. package/dist/lib/cloud/rush.test.js.map +0 -1
  235. package/dist/lib/cloud/store.d.ts +0 -23
  236. package/dist/lib/cloud/store.d.ts.map +0 -1
  237. package/dist/lib/cloud/store.js +0 -116
  238. package/dist/lib/cloud/store.js.map +0 -1
  239. package/dist/lib/cloud/stream.d.ts +0 -24
  240. package/dist/lib/cloud/stream.d.ts.map +0 -1
  241. package/dist/lib/cloud/stream.js +0 -145
  242. package/dist/lib/cloud/stream.js.map +0 -1
  243. package/dist/lib/cloud/types.d.ts +0 -109
  244. package/dist/lib/cloud/types.d.ts.map +0 -1
  245. package/dist/lib/cloud/types.js +0 -33
  246. package/dist/lib/cloud/types.js.map +0 -1
  247. package/dist/lib/cloud/types.test.d.ts +0 -2
  248. package/dist/lib/cloud/types.test.d.ts.map +0 -1
  249. package/dist/lib/cloud/types.test.js +0 -41
  250. package/dist/lib/cloud/types.test.js.map +0 -1
  251. package/dist/lib/commands.d.ts +0 -141
  252. package/dist/lib/commands.d.ts.map +0 -1
  253. package/dist/lib/commands.js +0 -514
  254. package/dist/lib/commands.js.map +0 -1
  255. package/dist/lib/convert.d.ts +0 -21
  256. package/dist/lib/convert.d.ts.map +0 -1
  257. package/dist/lib/convert.js +0 -54
  258. package/dist/lib/convert.js.map +0 -1
  259. package/dist/lib/daemon.d.ts +0 -43
  260. package/dist/lib/daemon.d.ts.map +0 -1
  261. package/dist/lib/daemon.js +0 -332
  262. package/dist/lib/daemon.js.map +0 -1
  263. package/dist/lib/drive-sync.d.ts +0 -46
  264. package/dist/lib/drive-sync.d.ts.map +0 -1
  265. package/dist/lib/drive-sync.js +0 -209
  266. package/dist/lib/drive-sync.js.map +0 -1
  267. package/dist/lib/exec.d.ts +0 -101
  268. package/dist/lib/exec.d.ts.map +0 -1
  269. package/dist/lib/exec.js +0 -450
  270. package/dist/lib/exec.js.map +0 -1
  271. package/dist/lib/factory/__tests__/config.test.d.ts +0 -2
  272. package/dist/lib/factory/__tests__/config.test.d.ts.map +0 -1
  273. package/dist/lib/factory/__tests__/config.test.js +0 -128
  274. package/dist/lib/factory/__tests__/config.test.js.map +0 -1
  275. package/dist/lib/factory/config.d.ts +0 -49
  276. package/dist/lib/factory/config.d.ts.map +0 -1
  277. package/dist/lib/factory/config.js +0 -127
  278. package/dist/lib/factory/config.js.map +0 -1
  279. package/dist/lib/factory.d.ts +0 -57
  280. package/dist/lib/factory.d.ts.map +0 -1
  281. package/dist/lib/factory.js +0 -107
  282. package/dist/lib/factory.js.map +0 -1
  283. package/dist/lib/git.d.ts +0 -157
  284. package/dist/lib/git.d.ts.map +0 -1
  285. package/dist/lib/git.js +0 -647
  286. package/dist/lib/git.js.map +0 -1
  287. package/dist/lib/help.d.ts +0 -10
  288. package/dist/lib/help.d.ts.map +0 -1
  289. package/dist/lib/help.js +0 -66
  290. package/dist/lib/help.js.map +0 -1
  291. package/dist/lib/hooks.d.ts +0 -125
  292. package/dist/lib/hooks.d.ts.map +0 -1
  293. package/dist/lib/hooks.js +0 -846
  294. package/dist/lib/hooks.js.map +0 -1
  295. package/dist/lib/ledger/__tests__/local.test.d.ts +0 -2
  296. package/dist/lib/ledger/__tests__/local.test.d.ts.map +0 -1
  297. package/dist/lib/ledger/__tests__/local.test.js +0 -177
  298. package/dist/lib/ledger/__tests__/local.test.js.map +0 -1
  299. package/dist/lib/ledger/__tests__/sync.test.d.ts +0 -2
  300. package/dist/lib/ledger/__tests__/sync.test.d.ts.map +0 -1
  301. package/dist/lib/ledger/__tests__/sync.test.js +0 -117
  302. package/dist/lib/ledger/__tests__/sync.test.js.map +0 -1
  303. package/dist/lib/ledger/index.d.ts +0 -18
  304. package/dist/lib/ledger/index.d.ts.map +0 -1
  305. package/dist/lib/ledger/index.js +0 -32
  306. package/dist/lib/ledger/index.js.map +0 -1
  307. package/dist/lib/ledger/local.d.ts +0 -22
  308. package/dist/lib/ledger/local.d.ts.map +0 -1
  309. package/dist/lib/ledger/local.js +0 -333
  310. package/dist/lib/ledger/local.js.map +0 -1
  311. package/dist/lib/ledger/r2.d.ts +0 -41
  312. package/dist/lib/ledger/r2.d.ts.map +0 -1
  313. package/dist/lib/ledger/r2.js +0 -335
  314. package/dist/lib/ledger/r2.js.map +0 -1
  315. package/dist/lib/ledger/sync.d.ts +0 -33
  316. package/dist/lib/ledger/sync.d.ts.map +0 -1
  317. package/dist/lib/ledger/sync.js +0 -106
  318. package/dist/lib/ledger/sync.js.map +0 -1
  319. package/dist/lib/ledger/types.d.ts +0 -100
  320. package/dist/lib/ledger/types.d.ts.map +0 -1
  321. package/dist/lib/ledger/types.js +0 -21
  322. package/dist/lib/ledger/types.js.map +0 -1
  323. package/dist/lib/manifest.d.ts +0 -14
  324. package/dist/lib/manifest.d.ts.map +0 -1
  325. package/dist/lib/manifest.js +0 -48
  326. package/dist/lib/manifest.js.map +0 -1
  327. package/dist/lib/markdown.d.ts +0 -5
  328. package/dist/lib/markdown.d.ts.map +0 -1
  329. package/dist/lib/markdown.js +0 -17
  330. package/dist/lib/markdown.js.map +0 -1
  331. package/dist/lib/mcp.d.ts +0 -64
  332. package/dist/lib/mcp.d.ts.map +0 -1
  333. package/dist/lib/mcp.js +0 -327
  334. package/dist/lib/mcp.js.map +0 -1
  335. package/dist/lib/memory-compile.d.ts +0 -65
  336. package/dist/lib/memory-compile.d.ts.map +0 -1
  337. package/dist/lib/memory-compile.js +0 -174
  338. package/dist/lib/memory-compile.js.map +0 -1
  339. package/dist/lib/memory.d.ts +0 -64
  340. package/dist/lib/memory.d.ts.map +0 -1
  341. package/dist/lib/memory.js +0 -275
  342. package/dist/lib/memory.js.map +0 -1
  343. package/dist/lib/models.d.ts +0 -98
  344. package/dist/lib/models.d.ts.map +0 -1
  345. package/dist/lib/models.js +0 -728
  346. package/dist/lib/models.js.map +0 -1
  347. package/dist/lib/permissions.d.ts +0 -227
  348. package/dist/lib/permissions.d.ts.map +0 -1
  349. package/dist/lib/permissions.js +0 -1071
  350. package/dist/lib/permissions.js.map +0 -1
  351. package/dist/lib/picker.d.ts +0 -27
  352. package/dist/lib/picker.d.ts.map +0 -1
  353. package/dist/lib/picker.js +0 -110
  354. package/dist/lib/picker.js.map +0 -1
  355. package/dist/lib/plugins.d.ts +0 -80
  356. package/dist/lib/plugins.d.ts.map +0 -1
  357. package/dist/lib/plugins.js +0 -556
  358. package/dist/lib/plugins.js.map +0 -1
  359. package/dist/lib/profiles-keychain.d.ts +0 -11
  360. package/dist/lib/profiles-keychain.d.ts.map +0 -1
  361. package/dist/lib/profiles-keychain.js +0 -14
  362. package/dist/lib/profiles-keychain.js.map +0 -1
  363. package/dist/lib/profiles-presets.d.ts +0 -25
  364. package/dist/lib/profiles-presets.d.ts.map +0 -1
  365. package/dist/lib/profiles-presets.js +0 -104
  366. package/dist/lib/profiles-presets.js.map +0 -1
  367. package/dist/lib/profiles.d.ts +0 -70
  368. package/dist/lib/profiles.d.ts.map +0 -1
  369. package/dist/lib/profiles.js +0 -145
  370. package/dist/lib/profiles.js.map +0 -1
  371. package/dist/lib/pty-client.d.ts +0 -23
  372. package/dist/lib/pty-client.d.ts.map +0 -1
  373. package/dist/lib/pty-client.js +0 -181
  374. package/dist/lib/pty-client.js.map +0 -1
  375. package/dist/lib/pty-server.d.ts +0 -21
  376. package/dist/lib/pty-server.d.ts.map +0 -1
  377. package/dist/lib/pty-server.js +0 -427
  378. package/dist/lib/pty-server.js.map +0 -1
  379. package/dist/lib/registry.d.ts +0 -45
  380. package/dist/lib/registry.d.ts.map +0 -1
  381. package/dist/lib/registry.js +0 -220
  382. package/dist/lib/registry.js.map +0 -1
  383. package/dist/lib/resources.d.ts +0 -55
  384. package/dist/lib/resources.d.ts.map +0 -1
  385. package/dist/lib/resources.js +0 -103
  386. package/dist/lib/resources.js.map +0 -1
  387. package/dist/lib/rotate.d.ts +0 -58
  388. package/dist/lib/rotate.d.ts.map +0 -1
  389. package/dist/lib/rotate.js +0 -93
  390. package/dist/lib/rotate.js.map +0 -1
  391. package/dist/lib/routines.d.ts +0 -99
  392. package/dist/lib/routines.d.ts.map +0 -1
  393. package/dist/lib/routines.js +0 -352
  394. package/dist/lib/routines.js.map +0 -1
  395. package/dist/lib/runner.d.ts +0 -26
  396. package/dist/lib/runner.d.ts.map +0 -1
  397. package/dist/lib/runner.js +0 -325
  398. package/dist/lib/runner.js.map +0 -1
  399. package/dist/lib/sandbox.d.ts +0 -26
  400. package/dist/lib/sandbox.d.ts.map +0 -1
  401. package/dist/lib/sandbox.js +0 -218
  402. package/dist/lib/sandbox.js.map +0 -1
  403. package/dist/lib/scheduler.d.ts +0 -26
  404. package/dist/lib/scheduler.d.ts.map +0 -1
  405. package/dist/lib/scheduler.js +0 -77
  406. package/dist/lib/scheduler.js.map +0 -1
  407. package/dist/lib/secrets-bundles.d.ts +0 -38
  408. package/dist/lib/secrets-bundles.d.ts.map +0 -1
  409. package/dist/lib/secrets-bundles.js +0 -176
  410. package/dist/lib/secrets-bundles.js.map +0 -1
  411. package/dist/lib/secrets.d.ts +0 -53
  412. package/dist/lib/secrets.d.ts.map +0 -1
  413. package/dist/lib/secrets.js +0 -140
  414. package/dist/lib/secrets.js.map +0 -1
  415. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  416. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  417. package/dist/lib/session/__tests__/db.test.js +0 -54
  418. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  419. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  420. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  421. package/dist/lib/session/__tests__/discover.test.js +0 -63
  422. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  423. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  424. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  425. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  426. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  427. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  428. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  429. package/dist/lib/session/__tests__/render.test.js +0 -602
  430. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  431. package/dist/lib/session/active.d.ts +0 -44
  432. package/dist/lib/session/active.d.ts.map +0 -1
  433. package/dist/lib/session/active.js +0 -379
  434. package/dist/lib/session/active.js.map +0 -1
  435. package/dist/lib/session/artifacts.d.ts +0 -15
  436. package/dist/lib/session/artifacts.d.ts.map +0 -1
  437. package/dist/lib/session/artifacts.js +0 -86
  438. package/dist/lib/session/artifacts.js.map +0 -1
  439. package/dist/lib/session/db.d.ts +0 -140
  440. package/dist/lib/session/db.d.ts.map +0 -1
  441. package/dist/lib/session/db.js +0 -599
  442. package/dist/lib/session/db.js.map +0 -1
  443. package/dist/lib/session/discover.d.ts +0 -72
  444. package/dist/lib/session/discover.d.ts.map +0 -1
  445. package/dist/lib/session/discover.js +0 -1315
  446. package/dist/lib/session/discover.js.map +0 -1
  447. package/dist/lib/session/parse.d.ts +0 -34
  448. package/dist/lib/session/parse.d.ts.map +0 -1
  449. package/dist/lib/session/parse.js +0 -663
  450. package/dist/lib/session/parse.js.map +0 -1
  451. package/dist/lib/session/prompt.d.ts +0 -13
  452. package/dist/lib/session/prompt.d.ts.map +0 -1
  453. package/dist/lib/session/prompt.js +0 -79
  454. package/dist/lib/session/prompt.js.map +0 -1
  455. package/dist/lib/session/prompt.test.d.ts +0 -2
  456. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  457. package/dist/lib/session/prompt.test.js +0 -57
  458. package/dist/lib/session/prompt.test.js.map +0 -1
  459. package/dist/lib/session/render.d.ts +0 -103
  460. package/dist/lib/session/render.d.ts.map +0 -1
  461. package/dist/lib/session/render.js +0 -798
  462. package/dist/lib/session/render.js.map +0 -1
  463. package/dist/lib/session/team-filter.d.ts +0 -35
  464. package/dist/lib/session/team-filter.d.ts.map +0 -1
  465. package/dist/lib/session/team-filter.js +0 -75
  466. package/dist/lib/session/team-filter.js.map +0 -1
  467. package/dist/lib/session/team-filter.test.d.ts +0 -2
  468. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  469. package/dist/lib/session/team-filter.test.js +0 -157
  470. package/dist/lib/session/team-filter.test.js.map +0 -1
  471. package/dist/lib/session/types.d.ts +0 -84
  472. package/dist/lib/session/types.d.ts.map +0 -1
  473. package/dist/lib/session/types.js +0 -11
  474. package/dist/lib/session/types.js.map +0 -1
  475. package/dist/lib/shims.d.ts +0 -272
  476. package/dist/lib/shims.d.ts.map +0 -1
  477. package/dist/lib/shims.js +0 -1322
  478. package/dist/lib/shims.js.map +0 -1
  479. package/dist/lib/skills.d.ts +0 -142
  480. package/dist/lib/skills.d.ts.map +0 -1
  481. package/dist/lib/skills.js +0 -791
  482. package/dist/lib/skills.js.map +0 -1
  483. package/dist/lib/state.d.ts +0 -87
  484. package/dist/lib/state.d.ts.map +0 -1
  485. package/dist/lib/state.js +0 -333
  486. package/dist/lib/state.js.map +0 -1
  487. package/dist/lib/subagents.d.ts +0 -84
  488. package/dist/lib/subagents.d.ts.map +0 -1
  489. package/dist/lib/subagents.js +0 -410
  490. package/dist/lib/subagents.js.map +0 -1
  491. package/dist/lib/teams/__tests__/oracle.test.d.ts +0 -2
  492. package/dist/lib/teams/__tests__/oracle.test.d.ts.map +0 -1
  493. package/dist/lib/teams/__tests__/oracle.test.js +0 -89
  494. package/dist/lib/teams/__tests__/oracle.test.js.map +0 -1
  495. package/dist/lib/teams/__tests__/supervisor.test.d.ts +0 -2
  496. package/dist/lib/teams/__tests__/supervisor.test.d.ts.map +0 -1
  497. package/dist/lib/teams/__tests__/supervisor.test.js +0 -179
  498. package/dist/lib/teams/__tests__/supervisor.test.js.map +0 -1
  499. package/dist/lib/teams/agents.d.ts +0 -247
  500. package/dist/lib/teams/agents.d.ts.map +0 -1
  501. package/dist/lib/teams/agents.js +0 -1244
  502. package/dist/lib/teams/agents.js.map +0 -1
  503. package/dist/lib/teams/api.d.ts +0 -91
  504. package/dist/lib/teams/api.d.ts.map +0 -1
  505. package/dist/lib/teams/api.js +0 -239
  506. package/dist/lib/teams/api.js.map +0 -1
  507. package/dist/lib/teams/cloud.d.ts +0 -11
  508. package/dist/lib/teams/cloud.d.ts.map +0 -1
  509. package/dist/lib/teams/cloud.js +0 -169
  510. package/dist/lib/teams/cloud.js.map +0 -1
  511. package/dist/lib/teams/debug.d.ts +0 -8
  512. package/dist/lib/teams/debug.d.ts.map +0 -1
  513. package/dist/lib/teams/debug.js +0 -12
  514. package/dist/lib/teams/debug.js.map +0 -1
  515. package/dist/lib/teams/file_ops.d.ts +0 -13
  516. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  517. package/dist/lib/teams/file_ops.js +0 -66
  518. package/dist/lib/teams/file_ops.js.map +0 -1
  519. package/dist/lib/teams/index.d.ts +0 -16
  520. package/dist/lib/teams/index.d.ts.map +0 -1
  521. package/dist/lib/teams/index.js +0 -15
  522. package/dist/lib/teams/index.js.map +0 -1
  523. package/dist/lib/teams/oracle.d.ts +0 -20
  524. package/dist/lib/teams/oracle.d.ts.map +0 -1
  525. package/dist/lib/teams/oracle.js +0 -59
  526. package/dist/lib/teams/oracle.js.map +0 -1
  527. package/dist/lib/teams/parsers.d.ts +0 -9
  528. package/dist/lib/teams/parsers.d.ts.map +0 -1
  529. package/dist/lib/teams/parsers.js +0 -837
  530. package/dist/lib/teams/parsers.js.map +0 -1
  531. package/dist/lib/teams/persistence.d.ts +0 -43
  532. package/dist/lib/teams/persistence.d.ts.map +0 -1
  533. package/dist/lib/teams/persistence.js +0 -299
  534. package/dist/lib/teams/persistence.js.map +0 -1
  535. package/dist/lib/teams/ralph.d.ts +0 -8
  536. package/dist/lib/teams/ralph.d.ts.map +0 -1
  537. package/dist/lib/teams/ralph.js +0 -59
  538. package/dist/lib/teams/ralph.js.map +0 -1
  539. package/dist/lib/teams/registry.d.ts +0 -18
  540. package/dist/lib/teams/registry.d.ts.map +0 -1
  541. package/dist/lib/teams/registry.js +0 -68
  542. package/dist/lib/teams/registry.js.map +0 -1
  543. package/dist/lib/teams/summarizer.d.ts +0 -73
  544. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  545. package/dist/lib/teams/summarizer.js +0 -780
  546. package/dist/lib/teams/summarizer.js.map +0 -1
  547. package/dist/lib/teams/supervisor.d.ts +0 -49
  548. package/dist/lib/teams/supervisor.d.ts.map +0 -1
  549. package/dist/lib/teams/supervisor.js +0 -74
  550. package/dist/lib/teams/supervisor.js.map +0 -1
  551. package/dist/lib/template.d.ts +0 -27
  552. package/dist/lib/template.d.ts.map +0 -1
  553. package/dist/lib/template.js +0 -60
  554. package/dist/lib/template.js.map +0 -1
  555. package/dist/lib/types.d.ts +0 -331
  556. package/dist/lib/types.d.ts.map +0 -1
  557. package/dist/lib/types.js +0 -29
  558. package/dist/lib/types.js.map +0 -1
  559. package/dist/lib/usage.d.ts +0 -105
  560. package/dist/lib/usage.d.ts.map +0 -1
  561. package/dist/lib/usage.js +0 -686
  562. package/dist/lib/usage.js.map +0 -1
  563. package/dist/lib/versions.d.ts +0 -253
  564. package/dist/lib/versions.d.ts.map +0 -1
  565. package/dist/lib/versions.js +0 -1796
  566. package/dist/lib/versions.js.map +0 -1
  567. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,602 +0,0 @@
1
- import { describe, expect, it, beforeEach, afterEach } from 'vitest';
2
- // Mock HOME for normalizeForDedup tests
3
- const ORIG_HOME = process.env.HOME;
4
- import { unwrapCommand, normalizeForDedup, bucketKey, relativeToCwd, linkPath, collapseRetries, computeSummaryStats, renderSummaryHeader, renderSummary, filterEvents, parseRoleList, renderConversationMarkdown, } from '../render.js';
5
- // ── filterEvents ──────────────────────────────────────────────────────────────
6
- describe('filterEvents', () => {
7
- const events = [
8
- { type: 'message', agent: 'claude', timestamp: '2024-01-01T00:00:00Z', role: 'user', content: 'Hello' },
9
- { type: 'message', agent: 'claude', timestamp: '2024-01-01T00:00:01Z', role: 'assistant', content: 'Hi there' },
10
- { type: 'thinking', agent: 'claude', timestamp: '2024-01-01T00:00:02Z', content: 'Let me think' },
11
- { type: 'tool_use', agent: 'claude', timestamp: '2024-01-01T00:00:03Z', tool: 'Read', args: {} },
12
- { type: 'tool_result', agent: 'claude', timestamp: '2024-01-01T00:00:04Z', content: 'file contents' },
13
- { type: 'error', agent: 'claude', timestamp: '2024-01-01T00:00:05Z', content: 'fail' },
14
- ];
15
- it('include: keeps only whitelisted roles', () => {
16
- const result = filterEvents(events, { include: ['user'] });
17
- expect(result).toHaveLength(1);
18
- expect(result[0].role).toBe('user');
19
- });
20
- it('include: supports multiple roles', () => {
21
- const result = filterEvents(events, { include: ['user', 'assistant'] });
22
- expect(result).toHaveLength(2);
23
- expect(result.every(e => e.type === 'message')).toBe(true);
24
- });
25
- it('include: tools captures both tool_use and tool_result', () => {
26
- const result = filterEvents(events, { include: ['tools'] });
27
- expect(result).toHaveLength(2);
28
- expect(result.every(e => e.type === 'tool_use' || e.type === 'tool_result')).toBe(true);
29
- });
30
- it('exclude: drops listed roles, keeps non-role events', () => {
31
- // error has no role, so it stays.
32
- const result = filterEvents(events, { exclude: ['thinking', 'tools'] });
33
- expect(result.some(e => e.type === 'message' && e.role === 'user')).toBe(true);
34
- expect(result.some(e => e.type === 'message' && e.role === 'assistant')).toBe(true);
35
- expect(result.some(e => e.type === 'error')).toBe(true);
36
- expect(result.every(e => e.type !== 'thinking' && e.type !== 'tool_use' && e.type !== 'tool_result')).toBe(true);
37
- });
38
- it('throws when include and exclude are both passed', () => {
39
- expect(() => filterEvents(events, { include: ['user'], exclude: ['tools'] })).toThrow(/mutually exclusive/);
40
- });
41
- it('first: keeps events up to the Nth user turn', () => {
42
- const twoTurns = [
43
- { type: 'message', agent: 'claude', timestamp: 't0', role: 'user', content: 'q1' },
44
- { type: 'message', agent: 'claude', timestamp: 't1', role: 'assistant', content: 'a1' },
45
- { type: 'message', agent: 'claude', timestamp: 't2', role: 'user', content: 'q2' },
46
- { type: 'message', agent: 'claude', timestamp: 't3', role: 'assistant', content: 'a2' },
47
- ];
48
- const result = filterEvents(twoTurns, { first: 1 });
49
- expect(result).toHaveLength(2);
50
- expect(result[0].content).toBe('q1');
51
- expect(result[1].content).toBe('a1');
52
- });
53
- it('last: keeps events from the start of the (M-N+1)th user turn', () => {
54
- const twoTurns = [
55
- { type: 'message', agent: 'claude', timestamp: 't0', role: 'user', content: 'q1' },
56
- { type: 'message', agent: 'claude', timestamp: 't1', role: 'assistant', content: 'a1' },
57
- { type: 'message', agent: 'claude', timestamp: 't2', role: 'user', content: 'q2' },
58
- { type: 'message', agent: 'claude', timestamp: 't3', role: 'assistant', content: 'a2' },
59
- ];
60
- const result = filterEvents(twoTurns, { last: 1 });
61
- expect(result).toHaveLength(2);
62
- expect(result[0].content).toBe('q2');
63
- expect(result[1].content).toBe('a2');
64
- });
65
- it('first with N >= total turns returns all events', () => {
66
- const result = filterEvents(events, { first: 100 });
67
- expect(result).toHaveLength(events.length);
68
- });
69
- it('throws when first and last are both passed', () => {
70
- expect(() => filterEvents(events, { first: 1, last: 1 })).toThrow(/mutually exclusive/);
71
- });
72
- it('turn slice and role filter compose: last 1 turn, user only', () => {
73
- const twoTurns = [
74
- { type: 'message', agent: 'claude', timestamp: 't0', role: 'user', content: 'q1' },
75
- { type: 'message', agent: 'claude', timestamp: 't1', role: 'assistant', content: 'a1' },
76
- { type: 'message', agent: 'claude', timestamp: 't2', role: 'user', content: 'q2' },
77
- { type: 'message', agent: 'claude', timestamp: 't3', role: 'assistant', content: 'a2' },
78
- ];
79
- const result = filterEvents(twoTurns, { last: 1, include: ['user'] });
80
- expect(result).toHaveLength(1);
81
- expect(result[0].content).toBe('q2');
82
- });
83
- it('no filters is a passthrough', () => {
84
- const result = filterEvents(events, {});
85
- expect(result).toEqual(events);
86
- });
87
- });
88
- // ── parseRoleList ─────────────────────────────────────────────────────────────
89
- describe('parseRoleList', () => {
90
- it('parses a comma-separated list', () => {
91
- expect(parseRoleList('user,assistant', '--include')).toEqual(['user', 'assistant']);
92
- });
93
- it('trims whitespace', () => {
94
- expect(parseRoleList(' user , thinking ', '--exclude')).toEqual(['user', 'thinking']);
95
- });
96
- it('rejects unknown roles with the flag name', () => {
97
- expect(() => parseRoleList('user,foo', '--include')).toThrow(/"foo" for --include/);
98
- expect(() => parseRoleList('user,foo', '--include')).toThrow(/user, assistant, thinking, tools/);
99
- });
100
- it('rejects empty input', () => {
101
- expect(() => parseRoleList('', '--include')).toThrow(/at least one role/);
102
- });
103
- });
104
- // ── renderConversationMarkdown ────────────────────────────────────────────────
105
- describe('renderConversationMarkdown', () => {
106
- it('includes user, assistant, thinking, and tool calls in event order', () => {
107
- const events = [
108
- { type: 'message', agent: 'claude', timestamp: 't0', role: 'user', content: 'Read foo.ts' },
109
- { type: 'thinking', agent: 'claude', timestamp: 't1', content: 'I should open the file first.' },
110
- { type: 'message', agent: 'claude', timestamp: 't2', role: 'assistant', content: 'Reading now.' },
111
- { type: 'tool_use', agent: 'claude', timestamp: 't3', tool: 'Read', args: { file_path: '/x/foo.ts' }, path: '/x/foo.ts' },
112
- ];
113
- const out = renderConversationMarkdown(events);
114
- expect(out).toContain('## User');
115
- expect(out).toContain('Read foo.ts');
116
- expect(out).toContain('### Thinking');
117
- expect(out).toContain('I should open the file first.');
118
- expect(out).toContain('## Assistant');
119
- expect(out).toContain('Reading now.');
120
- expect(out).toContain('### Tool: Read');
121
- expect(out).toContain('/x/foo.ts');
122
- // Order: user before thinking before assistant before tool
123
- const userIdx = out.indexOf('## User');
124
- const thinkIdx = out.indexOf('### Thinking');
125
- const asstIdx = out.indexOf('## Assistant');
126
- const toolIdx = out.indexOf('### Tool: Read');
127
- expect(userIdx).toBeLessThan(thinkIdx);
128
- expect(thinkIdx).toBeLessThan(asstIdx);
129
- expect(asstIdx).toBeLessThan(toolIdx);
130
- });
131
- it('renders bash commands inside a code fence', () => {
132
- const events = [
133
- { type: 'tool_use', agent: 'claude', timestamp: 't0', tool: 'Bash', args: { command: 'ls -la' }, command: 'ls -la' },
134
- ];
135
- const out = renderConversationMarkdown(events);
136
- expect(out).toContain('```bash');
137
- expect(out).toContain('ls -la');
138
- });
139
- });
140
- // ── unwrapCommand ─────────────────────────────────────────────────────────────
141
- describe('unwrapCommand', () => {
142
- it('returns bare command unchanged', () => {
143
- expect(unwrapCommand('ls -la')).toBe('ls -la');
144
- });
145
- it('unwraps ssh with double-quoted payload', () => {
146
- expect(unwrapCommand('ssh host "ls -la"')).toBe('ls -la');
147
- });
148
- it('unwraps ssh with quoted payload plus pipe (pipe is stripped)', () => {
149
- // ls is not a wrapper so recursion stops there; pipe after closing quote is stripped
150
- expect(unwrapCommand('ssh host "ls -la" | cat')).toBe('ls -la');
151
- });
152
- it('unwraps sudo prefix', () => {
153
- expect(unwrapCommand('sudo bun install')).toBe('bun install');
154
- });
155
- it('unwraps cd && prefix', () => {
156
- expect(unwrapCommand('cd /tmp && ls')).toBe('ls');
157
- });
158
- it('keeps bun run intact (two-level bucketKey handles it)', () => {
159
- expect(unwrapCommand('bun run build')).toBe('bun run build');
160
- });
161
- it('unwraps npx prefix', () => {
162
- expect(unwrapCommand('npx tsc --noEmit')).toBe('tsc --noEmit');
163
- });
164
- it('unwraps shell env prefix', () => {
165
- expect(unwrapCommand('BENCH_MODE=full npx tsx bench/x.ts')).toBe('tsx bench/x.ts');
166
- expect(unwrapCommand('FOO=bar BAR=baz cargo build')).toBe('cargo build');
167
- });
168
- it('unwraps ssh with env-prefixed inner command', () => {
169
- expect(unwrapCommand('ssh host "PATH=/opt/bin:$PATH openclaw browser profiles"')).toBe('openclaw browser profiles');
170
- });
171
- it('unwraps nested: ssh + sudo', () => {
172
- expect(unwrapCommand('ssh host "sudo tsc --noEmit"')).toBe('tsc --noEmit');
173
- });
174
- it('unwraps time prefix', () => {
175
- expect(unwrapCommand('time cargo build')).toBe('cargo build');
176
- });
177
- });
178
- // ── normalizeForDedup ─────────────────────────────────────────────────────────
179
- describe('normalizeForDedup', () => {
180
- beforeEach(() => {
181
- process.env.HOME = '/home/user';
182
- });
183
- afterEach(() => {
184
- process.env.HOME = ORIG_HOME;
185
- });
186
- it('strips short flags', () => {
187
- expect(normalizeForDedup('ls -lh /tmp')).toBe('ls /tmp');
188
- });
189
- it('strips long flags', () => {
190
- expect(normalizeForDedup('git --no-pager log')).toBe('git log');
191
- });
192
- it('strips long flags with value', () => {
193
- expect(normalizeForDedup('git log --format=oneline')).toBe('git log');
194
- });
195
- it('strips trailing pipe to head', () => {
196
- expect(normalizeForDedup('ls /tmp | head -20')).toBe('ls /tmp');
197
- });
198
- it('strips trailing pipe to wc', () => {
199
- expect(normalizeForDedup('ls /tmp | wc -l')).toBe('ls /tmp');
200
- });
201
- it('strips 2>&1', () => {
202
- expect(normalizeForDedup('ls /tmp 2>&1')).toBe('ls /tmp');
203
- });
204
- it('strips ; echo done suffix', () => {
205
- expect(normalizeForDedup('bun test; echo done')).toBe('bun test');
206
- });
207
- it('replaces leading $HOME with ~ when command starts with home path', () => {
208
- // The ^ anchor replaces only when the string begins with $HOME
209
- expect(normalizeForDedup('/home/user/.agents/run.sh')).toBe('~/.agents/run.sh');
210
- });
211
- it('collapses ls -lh + ls -la + ls 2>&1 to same key', () => {
212
- const a = normalizeForDedup('ls -lh /home/user/sessions/ | head');
213
- const b = normalizeForDedup('ls -la /home/user/sessions/');
214
- const c = normalizeForDedup('ls /home/user/sessions/ 2>&1');
215
- expect(a).toBe(b);
216
- expect(b).toBe(c);
217
- });
218
- });
219
- // ── bucketKey ─────────────────────────────────────────────────────────────────
220
- describe('bucketKey', () => {
221
- it('returns two-level key for git', () => {
222
- expect(bucketKey('git status')).toBe('git status');
223
- expect(bucketKey('git diff HEAD')).toBe('git diff');
224
- });
225
- it('returns two-level key for gh', () => {
226
- expect(bucketKey('gh pr view 123')).toBe('gh pr');
227
- });
228
- it('returns two-level key for bun', () => {
229
- expect(bucketKey('bun test --watch')).toBe('bun test');
230
- });
231
- it('returns two-level key for cargo', () => {
232
- expect(bucketKey('cargo build --release')).toBe('cargo build');
233
- });
234
- it('returns single-token key for ls', () => {
235
- expect(bucketKey('ls -la')).toBe('ls');
236
- });
237
- it('returns single-token key for grep', () => {
238
- expect(bucketKey('grep -r pattern .')).toBe('grep');
239
- });
240
- it('returns ssh→CMD prefix for ssh-wrapped commands', () => {
241
- expect(bucketKey('ssh host "ls -la"')).toBe('ssh\u2192ls');
242
- });
243
- it('returns ssh→two-level for ssh-wrapped openclaw', () => {
244
- expect(bucketKey('ssh host "openclaw browser profiles"')).toBe('ssh\u2192openclaw browser');
245
- });
246
- it('returns ssh→git status for ssh-wrapped git', () => {
247
- expect(bucketKey('ssh host "git status"')).toBe('ssh\u2192git status');
248
- });
249
- it('returns single token for unknown commands', () => {
250
- expect(bucketKey('python3 bench.py')).toBe('python3');
251
- });
252
- });
253
- // ── Category routing ──────────────────────────────────────────────────────────
254
- describe('category routing (via renderSummary commands section)', () => {
255
- function buildBashEvents(cmds) {
256
- return cmds.map((cmd, i) => ({
257
- type: 'tool_use',
258
- agent: 'claude',
259
- timestamp: new Date(Date.now() + i * 1000).toISOString(),
260
- tool: 'Bash',
261
- args: { command: cmd },
262
- command: cmd,
263
- }));
264
- }
265
- it('includes Build/test bucket for bun commands', () => {
266
- const events = buildBashEvents(['bun run build', 'bun test']);
267
- const out = renderSummary(events);
268
- expect(out).toContain('Build/test');
269
- });
270
- it('includes VCS bucket for git commands', () => {
271
- const events = buildBashEvents(['git status', 'git diff']);
272
- const out = renderSummary(events);
273
- expect(out).toContain('VCS');
274
- });
275
- it('includes Remote bucket for ssh commands', () => {
276
- const events = buildBashEvents(['ssh host "ls"']);
277
- const out = renderSummary(events);
278
- expect(out).toContain('Remote');
279
- });
280
- it('Probes bucket uses low signal (inline list, not expanded)', () => {
281
- const events = buildBashEvents(['ls /tmp', 'cat file.txt', 'head -n 5 file.txt']);
282
- const out = renderSummary(events);
283
- expect(out).toContain('Probes');
284
- // Low signal: should show inline dash-separated list, not individual lines
285
- expect(out).toMatch(/Probes.*—/);
286
- });
287
- it('Other bucket catches uncategorized tokens', () => {
288
- const events = buildBashEvents(['python3 bench.py', 'ruby script.rb']);
289
- const out = renderSummary(events);
290
- expect(out).toContain('Other');
291
- });
292
- it('Wait bucket for sleep commands', () => {
293
- const events = buildBashEvents(['sleep 30', 'sleep 10']);
294
- const out = renderSummary(events);
295
- expect(out).toContain('Wait');
296
- // Low signal — inline
297
- expect(out).toMatch(/Wait.*—/);
298
- });
299
- });
300
- // ── collapseRetries ───────────────────────────────────────────────────────────
301
- describe('collapseRetries', () => {
302
- const base = Date.now();
303
- it('collapses 3 identical commands within 60s to one entry', () => {
304
- const cmds = [
305
- { cmd: 'bun test', ts: base },
306
- { cmd: 'bun test', ts: base + 10_000 },
307
- { cmd: 'bun test', ts: base + 20_000 },
308
- ];
309
- const result = collapseRetries(cmds);
310
- expect(result).toHaveLength(1);
311
- expect(result[0].count).toBe(3);
312
- });
313
- it('keeps 2 identical commands within 60s as separate entries', () => {
314
- const cmds = [
315
- { cmd: 'bun test', ts: base },
316
- { cmd: 'bun test', ts: base + 10_000 },
317
- ];
318
- const result = collapseRetries(cmds);
319
- expect(result).toHaveLength(2);
320
- expect(result[0].count).toBe(1);
321
- expect(result[1].count).toBe(1);
322
- });
323
- it('keeps invocations >60s apart as separate entries', () => {
324
- const cmds = [
325
- { cmd: 'bun test', ts: base },
326
- { cmd: 'bun test', ts: base + 10_000 },
327
- { cmd: 'bun test', ts: base + 90_000 }, // >60s gap
328
- ];
329
- const result = collapseRetries(cmds);
330
- // First two: within 60s but count=2, expanded back to 2
331
- // Third: new group
332
- expect(result.some(r => r.count === 1)).toBe(true);
333
- });
334
- it('collapses flag-variant commands that normalize to same key', () => {
335
- const cmds = [
336
- { cmd: 'ls -la /tmp', ts: base },
337
- { cmd: 'ls -lh /tmp', ts: base + 5_000 },
338
- { cmd: 'ls /tmp 2>&1', ts: base + 10_000 },
339
- ];
340
- const result = collapseRetries(cmds);
341
- expect(result).toHaveLength(1);
342
- expect(result[0].count).toBe(3);
343
- });
344
- });
345
- // ── relativeToCwd ─────────────────────────────────────────────────────────────
346
- describe('relativeToCwd', () => {
347
- beforeEach(() => { process.env.HOME = '/home/user'; });
348
- afterEach(() => { process.env.HOME = ORIG_HOME; });
349
- it('returns cwd-relative path when inside cwd', () => {
350
- expect(relativeToCwd('/home/user/project/src/index.ts', '/home/user/project')).toBe('src/index.ts');
351
- });
352
- it('returns . when path equals cwd', () => {
353
- expect(relativeToCwd('/home/user/project', '/home/user/project')).toBe('.');
354
- });
355
- it('returns home-relative path when outside cwd', () => {
356
- expect(relativeToCwd('/home/user/.claude/settings.json', '/home/user/project')).toBe('~/.claude/settings.json');
357
- });
358
- it('returns absolute path when outside both cwd and home', () => {
359
- expect(relativeToCwd('/etc/hosts', '/home/user/project')).toBe('/etc/hosts');
360
- });
361
- it('works without cwd (falls back to home-relative)', () => {
362
- expect(relativeToCwd('/home/user/foo.ts')).toBe('~/foo.ts');
363
- });
364
- });
365
- // ── linkPath ──────────────────────────────────────────────────────────────────
366
- describe('linkPath', () => {
367
- it('returns plain label when stdout is not TTY', () => {
368
- const origIsTTY = process.stdout.isTTY;
369
- Object.defineProperty(process.stdout, 'isTTY', { value: false, configurable: true });
370
- const result = linkPath('/some/path', 'label');
371
- expect(result).toBe('label');
372
- Object.defineProperty(process.stdout, 'isTTY', { value: origIsTTY, configurable: true });
373
- });
374
- it('emits OSC 8 sequence when TTY env is set', () => {
375
- const origIsTTY = process.stdout.isTTY;
376
- const origTermProgram = process.env.TERM_PROGRAM;
377
- Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
378
- process.env.TERM_PROGRAM = 'iTerm.app';
379
- const result = linkPath('/some/path', 'label');
380
- expect(result).toContain('\x1b]8;;file:///some/path\x1b\\');
381
- expect(result).toContain('label');
382
- expect(result).toContain('\x1b]8;;\x1b\\');
383
- Object.defineProperty(process.stdout, 'isTTY', { value: origIsTTY, configurable: true });
384
- if (origTermProgram === undefined)
385
- delete process.env.TERM_PROGRAM;
386
- else
387
- process.env.TERM_PROGRAM = origTermProgram;
388
- });
389
- });
390
- // ── computeSummaryStats ───────────────────────────────────────────────────────
391
- describe('computeSummaryStats', () => {
392
- it('counts user/assistant turns, tools, errors', () => {
393
- const events = [
394
- { type: 'message', agent: 'claude', timestamp: '2024-01-01T00:00:00Z', role: 'user', content: 'hi' },
395
- { type: 'tool_use', agent: 'claude', timestamp: '2024-01-01T00:00:01Z', tool: 'Read', args: {} },
396
- { type: 'message', agent: 'claude', timestamp: '2024-01-01T00:00:02Z', role: 'assistant', content: 'done' },
397
- { type: 'error', agent: 'claude', timestamp: '2024-01-01T00:00:03Z', content: 'fail' },
398
- ];
399
- const stats = computeSummaryStats(events);
400
- expect(stats.userTurns).toBe(1);
401
- expect(stats.assistantTurns).toBe(1);
402
- expect(stats.toolCount).toBe(1);
403
- expect(stats.errorCount).toBe(1);
404
- });
405
- it('sums token counts from usage events', () => {
406
- const events = [
407
- {
408
- type: 'usage', agent: 'claude', timestamp: '2024-01-01T00:00:00Z',
409
- model: 'claude-opus-4-7-20251001',
410
- outputTokens: 1000, cacheReadTokens: 50000,
411
- },
412
- {
413
- type: 'usage', agent: 'claude', timestamp: '2024-01-01T00:00:01Z',
414
- model: 'claude-opus-4-7-20251001',
415
- outputTokens: 500, cacheReadTokens: 10000,
416
- },
417
- ];
418
- const stats = computeSummaryStats(events);
419
- expect(stats.outputTokens).toBe(1500);
420
- expect(stats.cacheReadTokens).toBe(60000);
421
- expect(stats.models).toEqual(['opus-4-7']);
422
- });
423
- it('skips local tool_use events in tool count', () => {
424
- const events = [
425
- { type: 'tool_use', agent: 'claude', timestamp: '2024-01-01T00:00:00Z', tool: 'Bash', args: {}, _local: true },
426
- ];
427
- const stats = computeSummaryStats(events);
428
- expect(stats.toolCount).toBe(0);
429
- });
430
- });
431
- // ── renderSummaryHeader ───────────────────────────────────────────────────────
432
- describe('renderSummaryHeader', () => {
433
- it('formats turn/tool/token/duration stats', () => {
434
- const stats = {
435
- models: ['opus-4-7'],
436
- userTurns: 10,
437
- assistantTurns: 10,
438
- toolCount: 50,
439
- errorCount: 2,
440
- outputTokens: 361_000,
441
- cacheReadTokens: 67_500_000,
442
- firstTs: 0,
443
- lastTs: 12 * 60_000,
444
- };
445
- const out = renderSummaryHeader(stats);
446
- expect(out).toContain('20 turns');
447
- expect(out).toContain('50 tools');
448
- expect(out).toContain('2 errors');
449
- expect(out).toContain('67.5M cached');
450
- expect(out).toContain('361K out');
451
- expect(out).toContain('12 min');
452
- });
453
- it('omits token section when no tokens recorded', () => {
454
- const stats = {
455
- models: [],
456
- userTurns: 5,
457
- assistantTurns: 5,
458
- toolCount: 0,
459
- errorCount: 0,
460
- outputTokens: 0,
461
- cacheReadTokens: 0,
462
- firstTs: 0,
463
- lastTs: 0,
464
- };
465
- const out = renderSummaryHeader(stats);
466
- expect(out).not.toContain('cached');
467
- expect(out).not.toContain('out');
468
- });
469
- });
470
- // ── renderSummary integration ─────────────────────────────────────────────────
471
- describe('renderSummary', () => {
472
- function makeEvent(overrides) {
473
- return {
474
- type: 'message',
475
- agent: 'claude',
476
- timestamp: '2024-01-01T00:00:00Z',
477
- ...overrides,
478
- };
479
- }
480
- it('dedupes Read vs Modified: modified file not in read count', () => {
481
- const events = [
482
- makeEvent({ type: 'tool_use', tool: 'Read', args: { file_path: '/project/src/a.ts' }, path: '/project/src/a.ts' }),
483
- makeEvent({ type: 'tool_use', tool: 'Edit', args: { file_path: '/project/src/a.ts' }, path: '/project/src/a.ts' }),
484
- ];
485
- const out = renderSummary(events, '/project');
486
- // a.ts should appear in Modified, not in Read
487
- expect(out).toContain('Modified');
488
- // The Read section should not appear since the only read file was also modified
489
- // (and would be deduped out, leaving 0 read-only files)
490
- const readMatch = out.match(/Read\s+\((\d+)\)/);
491
- if (readMatch) {
492
- expect(parseInt(readMatch[1])).toBe(0);
493
- }
494
- });
495
- it('renders final message up to 3000 chars', () => {
496
- const longMsg = 'x'.repeat(4000);
497
- const events = [
498
- makeEvent({ role: 'assistant', content: longMsg }),
499
- ];
500
- const out = renderSummary(events);
501
- expect(out).toContain('x'.repeat(100));
502
- // Should truncate at 3000
503
- expect(out.indexOf('...')).toBeGreaterThan(0);
504
- expect(out.indexOf('x'.repeat(3001))).toBe(-1);
505
- });
506
- it('renders prompt without 300-char cap', () => {
507
- const longPrompt = 'Implement a feature that '.repeat(20); // >300 chars
508
- const events = [
509
- makeEvent({ role: 'user', content: longPrompt }),
510
- ];
511
- const out = renderSummary(events);
512
- // Should not be truncated at 300 chars
513
- expect(out.length).toBeGreaterThan(300);
514
- // Should not contain '...' from truncation
515
- const promptSection = out.split('\n').find(l => l.includes('Prompt:'));
516
- expect(promptSection).toBeTruthy();
517
- expect(promptSection?.endsWith('...')).toBe(false);
518
- });
519
- it('shows attachment count line for image blocks', () => {
520
- const events = [
521
- makeEvent({ type: 'attachment', mediaType: 'image/png', sizeBytes: 1024 }),
522
- makeEvent({ type: 'attachment', mediaType: 'image/jpeg', sizeBytes: 2048 }),
523
- ];
524
- const out = renderSummary(events);
525
- expect(out).toContain('2 screenshot');
526
- expect(out).toContain('image/png');
527
- expect(out).toContain('image/jpeg');
528
- });
529
- it('shows TodoWrite items in Plan section', () => {
530
- const events = [
531
- makeEvent({
532
- type: 'tool_use',
533
- tool: 'TodoWrite',
534
- args: {
535
- todos: [
536
- { content: 'Write tests', status: 'pending' },
537
- { content: 'Build project', status: 'pending' },
538
- ],
539
- },
540
- }),
541
- ];
542
- const out = renderSummary(events);
543
- expect(out).toContain('Plan');
544
- expect(out).toContain('Write tests');
545
- expect(out).toContain('Build project');
546
- });
547
- it('shows subagent spawns in Subagents section', () => {
548
- const events = [
549
- makeEvent({
550
- type: 'tool_use',
551
- tool: 'Agent',
552
- args: {
553
- description: 'Explore the codebase',
554
- subagent_type: 'Explore',
555
- },
556
- }),
557
- ];
558
- const out = renderSummary(events);
559
- expect(out).toContain('Subagents');
560
- expect(out).toContain('Explore the codebase');
561
- expect(out).toContain('Explore');
562
- });
563
- it('shows error count and first failing tool', () => {
564
- const events = [
565
- makeEvent({ type: 'error', tool: 'Bash', args: { command: 'bun test' }, content: 'exit 1' }),
566
- makeEvent({ type: 'error', tool: 'Bash', args: { command: 'bun build' }, content: 'exit 1' }),
567
- ];
568
- const out = renderSummary(events);
569
- expect(out).toContain('2 failure');
570
- expect(out).toContain('Bash');
571
- });
572
- it('separates external edits (outside cwd) from in-project Modified', () => {
573
- const events = [
574
- makeEvent({ type: 'tool_use', tool: 'Edit', args: { file_path: '/project/src/a.ts' }, path: '/project/src/a.ts' }),
575
- makeEvent({ type: 'tool_use', tool: 'Edit', args: { file_path: '/tmp/scratch.md' }, path: '/tmp/scratch.md' }),
576
- ];
577
- const out = renderSummary(events, '/project');
578
- expect(out).toContain('Modified');
579
- expect(out).toContain('src/a.ts');
580
- expect(out).toContain('External edits');
581
- expect(out).toContain('/tmp/scratch.md');
582
- });
583
- it('surfaces TaskCreate descriptions in Plan section', () => {
584
- const events = [
585
- makeEvent({ type: 'tool_use', tool: 'TaskCreate', args: { description: 'Build benchmark harness', prompt: '...' } }),
586
- makeEvent({ type: 'tool_use', tool: 'TaskCreate', args: { description: 'Migrate to FTS5 index' } }),
587
- ];
588
- const out = renderSummary(events);
589
- expect(out).toContain('Plan');
590
- expect(out).toContain('Build benchmark harness');
591
- expect(out).toContain('Migrate to FTS5 index');
592
- });
593
- it('uses cwd-relative paths in Modified section', () => {
594
- const events = [
595
- makeEvent({ type: 'tool_use', tool: 'Edit', args: { file_path: '/project/src/lib/render.ts' }, path: '/project/src/lib/render.ts' }),
596
- ];
597
- const out = renderSummary(events, '/project');
598
- expect(out).toContain('src/lib/render.ts');
599
- expect(out).not.toContain('/project/src/lib/render.ts');
600
- });
601
- });
602
- //# sourceMappingURL=render.test.js.map