waterplane 0.1.24 → 0.1.26

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 (429) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/SECURITY.md +25 -5
  3. package/node_modules/@waterplane/shared/dist/agentseries/compare.d.ts +8 -0
  4. package/node_modules/@waterplane/shared/dist/agentseries/compare.js +103 -0
  5. package/node_modules/@waterplane/shared/dist/agentseries/compare.js.map +1 -0
  6. package/node_modules/@waterplane/shared/dist/agentseries/markers.d.ts +17 -0
  7. package/node_modules/@waterplane/shared/dist/agentseries/markers.js +125 -0
  8. package/node_modules/@waterplane/shared/dist/agentseries/markers.js.map +1 -0
  9. package/node_modules/@waterplane/shared/dist/agentseries/series.d.ts +16 -0
  10. package/node_modules/@waterplane/shared/dist/agentseries/series.js +93 -0
  11. package/node_modules/@waterplane/shared/dist/agentseries/series.js.map +1 -0
  12. package/node_modules/@waterplane/shared/dist/agentseries/stats.d.ts +8 -0
  13. package/node_modules/@waterplane/shared/dist/agentseries/stats.js +33 -0
  14. package/node_modules/@waterplane/shared/dist/agentseries/stats.js.map +1 -0
  15. package/node_modules/@waterplane/shared/dist/agentseries/types.d.ts +103 -0
  16. package/node_modules/@waterplane/shared/dist/agentseries/types.js +11 -0
  17. package/node_modules/@waterplane/shared/dist/agentseries/types.js.map +1 -0
  18. package/node_modules/@waterplane/shared/dist/agentseries.d.ts +10 -0
  19. package/node_modules/@waterplane/shared/dist/agentseries.js +11 -0
  20. package/node_modules/@waterplane/shared/dist/agentseries.js.map +1 -0
  21. package/node_modules/@waterplane/shared/dist/calday.d.ts +5 -0
  22. package/node_modules/@waterplane/shared/dist/calday.js +10 -0
  23. package/node_modules/@waterplane/shared/dist/calday.js.map +1 -1
  24. package/node_modules/@waterplane/shared/dist/clihealth/healthfixture.d.ts +13 -1
  25. package/node_modules/@waterplane/shared/dist/clihealth/healthfixture.js +22 -4
  26. package/node_modules/@waterplane/shared/dist/clihealth/healthfixture.js.map +1 -1
  27. package/node_modules/@waterplane/shared/dist/clihealth.d.ts +1 -1
  28. package/node_modules/@waterplane/shared/dist/clihealth.js +1 -1
  29. package/node_modules/@waterplane/shared/dist/clihealth.js.map +1 -1
  30. package/node_modules/@waterplane/shared/dist/dictate.d.ts +6 -0
  31. package/node_modules/@waterplane/shared/dist/dictate.js.map +1 -1
  32. package/node_modules/@waterplane/shared/dist/dictatemodels.d.ts +23 -0
  33. package/node_modules/@waterplane/shared/dist/dictatemodels.js +31 -0
  34. package/node_modules/@waterplane/shared/dist/dictatemodels.js.map +1 -0
  35. package/node_modules/@waterplane/shared/dist/healthindex/commits.d.ts +1 -1
  36. package/node_modules/@waterplane/shared/dist/healthindex/commits.js +2 -2
  37. package/node_modules/@waterplane/shared/dist/healthindex/commits.js.map +1 -1
  38. package/node_modules/@waterplane/shared/dist/healthindex/coverage.d.ts +128 -0
  39. package/node_modules/@waterplane/shared/dist/healthindex/coverage.js +343 -0
  40. package/node_modules/@waterplane/shared/dist/healthindex/coverage.js.map +1 -0
  41. package/node_modules/@waterplane/shared/dist/healthindex/readings.d.ts +9 -1
  42. package/node_modules/@waterplane/shared/dist/healthindex/readings.js +122 -4
  43. package/node_modules/@waterplane/shared/dist/healthindex/readings.js.map +1 -1
  44. package/node_modules/@waterplane/shared/dist/healthindex/repoindex.d.ts +5 -0
  45. package/node_modules/@waterplane/shared/dist/healthindex/repoindex.js +2 -0
  46. package/node_modules/@waterplane/shared/dist/healthindex/repoindex.js.map +1 -1
  47. package/node_modules/@waterplane/shared/dist/healthindex/score.d.ts +3 -0
  48. package/node_modules/@waterplane/shared/dist/healthindex/score.js +52 -16
  49. package/node_modules/@waterplane/shared/dist/healthindex/score.js.map +1 -1
  50. package/node_modules/@waterplane/shared/dist/healthindex/types.d.ts +82 -6
  51. package/node_modules/@waterplane/shared/dist/healthindex/types.js +35 -2
  52. package/node_modules/@waterplane/shared/dist/healthindex/types.js.map +1 -1
  53. package/node_modules/@waterplane/shared/dist/healthindex/words.js +65 -6
  54. package/node_modules/@waterplane/shared/dist/healthindex/words.js.map +1 -1
  55. package/node_modules/@waterplane/shared/dist/healthindex.d.ts +21 -7
  56. package/node_modules/@waterplane/shared/dist/healthindex.js +20 -7
  57. package/node_modules/@waterplane/shared/dist/healthindex.js.map +1 -1
  58. package/node_modules/@waterplane/shared/dist/healthindexresponse.js +3 -2
  59. package/node_modules/@waterplane/shared/dist/healthindexresponse.js.map +1 -1
  60. package/node_modules/@waterplane/shared/dist/healthspend.d.ts +23 -0
  61. package/node_modules/@waterplane/shared/dist/healthspend.js +32 -1
  62. package/node_modules/@waterplane/shared/dist/healthspend.js.map +1 -1
  63. package/node_modules/@waterplane/shared/dist/hints.js +9 -0
  64. package/node_modules/@waterplane/shared/dist/hints.js.map +1 -1
  65. package/node_modules/@waterplane/shared/dist/index.d.ts +9 -0
  66. package/node_modules/@waterplane/shared/dist/index.js +9 -0
  67. package/node_modules/@waterplane/shared/dist/index.js.map +1 -1
  68. package/node_modules/@waterplane/shared/dist/installrow.js +10 -0
  69. package/node_modules/@waterplane/shared/dist/installrow.js.map +1 -1
  70. package/node_modules/@waterplane/shared/dist/intent/kind.d.ts +45 -1
  71. package/node_modules/@waterplane/shared/dist/intent/kind.js +60 -2
  72. package/node_modules/@waterplane/shared/dist/intent/kind.js.map +1 -1
  73. package/node_modules/@waterplane/shared/dist/intent.d.ts +1 -1
  74. package/node_modules/@waterplane/shared/dist/intent.js +1 -1
  75. package/node_modules/@waterplane/shared/dist/intent.js.map +1 -1
  76. package/node_modules/@waterplane/shared/dist/itempaths.d.ts +23 -0
  77. package/node_modules/@waterplane/shared/dist/itempaths.js +38 -0
  78. package/node_modules/@waterplane/shared/dist/itempaths.js.map +1 -1
  79. package/node_modules/@waterplane/shared/dist/pluginlaunch.d.ts +3 -2
  80. package/node_modules/@waterplane/shared/dist/pluginlaunch.js +1 -1
  81. package/node_modules/@waterplane/shared/dist/pluginlaunch.js.map +1 -1
  82. package/node_modules/@waterplane/shared/dist/pricelist.d.ts +57 -0
  83. package/node_modules/@waterplane/shared/dist/pricelist.js +128 -0
  84. package/node_modules/@waterplane/shared/dist/pricelist.js.map +1 -0
  85. package/node_modules/@waterplane/shared/dist/pricing.d.ts +86 -9
  86. package/node_modules/@waterplane/shared/dist/pricing.js +140 -20
  87. package/node_modules/@waterplane/shared/dist/pricing.js.map +1 -1
  88. package/node_modules/@waterplane/shared/dist/queue/queuelanestate.d.ts +14 -0
  89. package/node_modules/@waterplane/shared/dist/queue/queuelanestate.js +25 -0
  90. package/node_modules/@waterplane/shared/dist/queue/queuelanestate.js.map +1 -0
  91. package/node_modules/@waterplane/shared/dist/queue/queueplan.d.ts +4 -0
  92. package/node_modules/@waterplane/shared/dist/queue/queueplan.js +21 -0
  93. package/node_modules/@waterplane/shared/dist/queue/queueplan.js.map +1 -1
  94. package/node_modules/@waterplane/shared/dist/queue/queuewords.js +2 -1
  95. package/node_modules/@waterplane/shared/dist/queue/queuewords.js.map +1 -1
  96. package/node_modules/@waterplane/shared/dist/queue.d.ts +2 -0
  97. package/node_modules/@waterplane/shared/dist/queue.js +1 -0
  98. package/node_modules/@waterplane/shared/dist/queue.js.map +1 -1
  99. package/node_modules/@waterplane/shared/dist/repohealth.d.ts +178 -0
  100. package/node_modules/@waterplane/shared/dist/repohealth.js.map +1 -1
  101. package/node_modules/@waterplane/shared/dist/repohealthhabits.d.ts +15 -0
  102. package/node_modules/@waterplane/shared/dist/repohealthhabits.js +117 -0
  103. package/node_modules/@waterplane/shared/dist/repohealthhabits.js.map +1 -0
  104. package/node_modules/@waterplane/shared/dist/repohealthnative.d.ts +10 -0
  105. package/node_modules/@waterplane/shared/dist/repohealthnative.js +94 -0
  106. package/node_modules/@waterplane/shared/dist/repohealthnative.js.map +1 -0
  107. package/node_modules/@waterplane/shared/dist/repohealthread.js +23 -1
  108. package/node_modules/@waterplane/shared/dist/repohealthread.js.map +1 -1
  109. package/node_modules/@waterplane/shared/dist/skillstate.d.ts +51 -0
  110. package/node_modules/@waterplane/shared/dist/skillstate.js +176 -0
  111. package/node_modules/@waterplane/shared/dist/skillstate.js.map +1 -0
  112. package/node_modules/@waterplane/shared/dist/skillwords.d.ts +10 -0
  113. package/node_modules/@waterplane/shared/dist/skillwords.js +18 -0
  114. package/node_modules/@waterplane/shared/dist/skillwords.js.map +1 -0
  115. package/node_modules/@waterplane/shared/dist/wire/agentreadings.d.ts +248 -0
  116. package/node_modules/@waterplane/shared/dist/wire/agentreadings.js +36 -0
  117. package/node_modules/@waterplane/shared/dist/wire/agentreadings.js.map +1 -0
  118. package/node_modules/@waterplane/shared/dist/wire/backend.d.ts +2 -0
  119. package/node_modules/@waterplane/shared/dist/wire/costwindow.d.ts +4 -0
  120. package/node_modules/@waterplane/shared/dist/wire/dictatesetup.d.ts +42 -0
  121. package/node_modules/@waterplane/shared/dist/wire/dictatesetup.js +9 -0
  122. package/node_modules/@waterplane/shared/dist/wire/dictatesetup.js.map +1 -0
  123. package/node_modules/@waterplane/shared/dist/wire/messages/hostcore.d.ts +22 -1
  124. package/node_modules/@waterplane/shared/dist/wire/notify.d.ts +6 -1
  125. package/node_modules/@waterplane/shared/dist/wire/notify.js +6 -1
  126. package/node_modules/@waterplane/shared/dist/wire/notify.js.map +1 -1
  127. package/node_modules/@waterplane/shared/dist/wire/repo.d.ts +1 -1
  128. package/node_modules/@waterplane/shared/dist/wire/skills.d.ts +142 -0
  129. package/node_modules/@waterplane/shared/dist/wire/skills.js +6 -0
  130. package/node_modules/@waterplane/shared/dist/wire/skills.js.map +1 -0
  131. package/node_modules/@waterplane/shared/dist/wire/sysstat.d.ts +17 -0
  132. package/node_modules/@waterplane/shared/dist/wire/telemetry.d.ts +4 -0
  133. package/npm-shrinkwrap.json +2 -2
  134. package/package.json +1 -1
  135. package/packages/extensions/diskspace/waterplane-plugin.json +16 -0
  136. package/packages/extensions/links/waterplane-plugin.json +18 -0
  137. package/packages/host/dist/agentclass.d.ts +116 -0
  138. package/packages/host/dist/agentclass.js +339 -0
  139. package/packages/host/dist/agentclass.js.map +1 -0
  140. package/packages/host/dist/agentintents.d.ts +18 -0
  141. package/packages/host/dist/agentintents.js +40 -7
  142. package/packages/host/dist/agentintents.js.map +1 -1
  143. package/packages/host/dist/agentmarkers.d.ts +49 -0
  144. package/packages/host/dist/agentmarkers.js +255 -0
  145. package/packages/host/dist/agentmarkers.js.map +1 -0
  146. package/packages/host/dist/agentreadings.d.ts +68 -0
  147. package/packages/host/dist/agentreadings.js +336 -0
  148. package/packages/host/dist/agentreadings.js.map +1 -0
  149. package/packages/host/dist/agentscan.d.ts +8 -0
  150. package/packages/host/dist/agentscan.js +427 -0
  151. package/packages/host/dist/agentscan.js.map +1 -0
  152. package/packages/host/dist/archive.js +9 -3
  153. package/packages/host/dist/archive.js.map +1 -1
  154. package/packages/host/dist/artifacts.js +4 -7
  155. package/packages/host/dist/artifacts.js.map +1 -1
  156. package/packages/host/dist/askrules.js +12 -4
  157. package/packages/host/dist/askrules.js.map +1 -1
  158. package/packages/host/dist/auth.d.ts +1 -0
  159. package/packages/host/dist/auth.js +5 -3
  160. package/packages/host/dist/auth.js.map +1 -1
  161. package/packages/host/dist/autopull.js +4 -8
  162. package/packages/host/dist/autopull.js.map +1 -1
  163. package/packages/host/dist/backends/claude.js +1 -0
  164. package/packages/host/dist/backends/claude.js.map +1 -1
  165. package/packages/host/dist/backends/derive.js +3 -1
  166. package/packages/host/dist/backends/derive.js.map +1 -1
  167. package/packages/host/dist/binguard.js +19 -2
  168. package/packages/host/dist/binguard.js.map +1 -1
  169. package/packages/host/dist/capture.js +7 -10
  170. package/packages/host/dist/capture.js.map +1 -1
  171. package/packages/host/dist/clifixtures.d.ts +24 -4
  172. package/packages/host/dist/clifixtures.js +50 -10
  173. package/packages/host/dist/clifixtures.js.map +1 -1
  174. package/packages/host/dist/clihealth.d.ts +8 -2
  175. package/packages/host/dist/clihealth.js +11 -3
  176. package/packages/host/dist/clihealth.js.map +1 -1
  177. package/packages/host/dist/costwindow.js +4 -2
  178. package/packages/host/dist/costwindow.js.map +1 -1
  179. package/packages/host/dist/ctxlog/ctxagents.d.ts +2 -0
  180. package/packages/host/dist/ctxlog/ctxagents.js +5 -5
  181. package/packages/host/dist/ctxlog/ctxagents.js.map +1 -1
  182. package/packages/host/dist/ctxlog/ctxcursor.d.ts +2 -0
  183. package/packages/host/dist/ctxlog/ctxcursor.js +2 -2
  184. package/packages/host/dist/ctxlog/ctxcursor.js.map +1 -1
  185. package/packages/host/dist/ctxlog/ctxupdate.js +11 -6
  186. package/packages/host/dist/ctxlog/ctxupdate.js.map +1 -1
  187. package/packages/host/dist/deliver/deliverknobs.d.ts +0 -2
  188. package/packages/host/dist/deliver/deliverknobs.js +0 -2
  189. package/packages/host/dist/deliver/deliverknobs.js.map +1 -1
  190. package/packages/host/dist/deliver/deliverproof.d.ts +3 -2
  191. package/packages/host/dist/deliver/deliverproof.js +9 -8
  192. package/packages/host/dist/deliver/deliverproof.js.map +1 -1
  193. package/packages/host/dist/deliver/deliverreturn.d.ts +3 -2
  194. package/packages/host/dist/deliver/deliverreturn.js +13 -12
  195. package/packages/host/dist/deliver/deliverreturn.js.map +1 -1
  196. package/packages/host/dist/deliver/deliverrun.js +20 -18
  197. package/packages/host/dist/deliver/deliverrun.js.map +1 -1
  198. package/packages/host/dist/deliver/deliverscreen.d.ts +2 -1
  199. package/packages/host/dist/deliver/deliverscreen.js +9 -8
  200. package/packages/host/dist/deliver/deliverscreen.js.map +1 -1
  201. package/packages/host/dist/deliver/delivertypes.d.ts +4 -0
  202. package/packages/host/dist/deliver.js +2 -1
  203. package/packages/host/dist/deliver.js.map +1 -1
  204. package/packages/host/dist/dictate.d.ts +11 -0
  205. package/packages/host/dist/dictate.js +20 -10
  206. package/packages/host/dist/dictate.js.map +1 -1
  207. package/packages/host/dist/dictatesetup.d.ts +54 -0
  208. package/packages/host/dist/dictatesetup.js +261 -0
  209. package/packages/host/dist/dictatesetup.js.map +1 -0
  210. package/packages/host/dist/doctor.js +1 -1
  211. package/packages/host/dist/doctor.js.map +1 -1
  212. package/packages/host/dist/exposure.d.ts +10 -0
  213. package/packages/host/dist/exposure.js +25 -0
  214. package/packages/host/dist/exposure.js.map +1 -1
  215. package/packages/host/dist/exposurepush.js +2 -2
  216. package/packages/host/dist/exposurepush.js.map +1 -1
  217. package/packages/host/dist/extensions/diskspace/host/candidates.d.mts +180 -0
  218. package/packages/host/dist/extensions/diskspace/host/candidates.mjs +716 -0
  219. package/packages/host/dist/extensions/diskspace/host/candidates.mjs.map +1 -0
  220. package/packages/host/dist/extensions/diskspace/host/engine.d.mts +21 -0
  221. package/packages/host/dist/extensions/diskspace/host/engine.mjs +498 -0
  222. package/packages/host/dist/extensions/diskspace/host/engine.mjs.map +1 -0
  223. package/packages/host/dist/extensions/diskspace/host/index.d.mts +25 -0
  224. package/packages/host/dist/extensions/diskspace/host/index.mjs +135 -0
  225. package/packages/host/dist/extensions/diskspace/host/index.mjs.map +1 -0
  226. package/packages/host/dist/extensions/diskspace/host/large.d.mts +11 -0
  227. package/packages/host/dist/extensions/diskspace/host/large.mjs +56 -0
  228. package/packages/host/dist/extensions/diskspace/host/large.mjs.map +1 -0
  229. package/packages/host/dist/extensions/diskspace/host/run.d.mts +94 -0
  230. package/packages/host/dist/extensions/diskspace/host/run.mjs +200 -0
  231. package/packages/host/dist/extensions/diskspace/host/run.mjs.map +1 -0
  232. package/packages/host/dist/extensions/diskspace/shared/wire.d.mts +197 -0
  233. package/packages/host/dist/extensions/diskspace/shared/wire.mjs +23 -0
  234. package/packages/host/dist/extensions/diskspace/shared/wire.mjs.map +1 -0
  235. package/packages/host/dist/extensions/links/host/engine.d.mts +39 -0
  236. package/packages/host/dist/extensions/links/host/engine.mjs +285 -0
  237. package/packages/host/dist/extensions/links/host/engine.mjs.map +1 -0
  238. package/packages/host/dist/extensions/links/host/index.d.mts +10 -0
  239. package/packages/host/dist/extensions/links/host/index.mjs +72 -0
  240. package/packages/host/dist/extensions/links/host/index.mjs.map +1 -0
  241. package/packages/host/dist/extensions/links/host/parse.d.mts +61 -0
  242. package/packages/host/dist/extensions/links/host/parse.mjs +225 -0
  243. package/packages/host/dist/extensions/links/host/parse.mjs.map +1 -0
  244. package/packages/host/dist/extensions/links/host/run.d.mts +15 -0
  245. package/packages/host/dist/extensions/links/host/run.mjs +32 -0
  246. package/packages/host/dist/extensions/links/host/run.mjs.map +1 -0
  247. package/packages/host/dist/extensions/links/host/store.d.mts +11 -0
  248. package/packages/host/dist/extensions/links/host/store.mjs +76 -0
  249. package/packages/host/dist/extensions/links/host/store.mjs.map +1 -0
  250. package/packages/host/dist/extensions/links/shared/wire.d.mts +141 -0
  251. package/packages/host/dist/extensions/links/shared/wire.mjs +20 -0
  252. package/packages/host/dist/extensions/links/shared/wire.mjs.map +1 -0
  253. package/packages/host/dist/git.d.ts +5 -3
  254. package/packages/host/dist/git.js +16 -28
  255. package/packages/host/dist/git.js.map +1 -1
  256. package/packages/host/dist/halt.js +16 -3
  257. package/packages/host/dist/halt.js.map +1 -1
  258. package/packages/host/dist/jsonstore.d.ts +16 -4
  259. package/packages/host/dist/jsonstore.js +32 -8
  260. package/packages/host/dist/jsonstore.js.map +1 -1
  261. package/packages/host/dist/landedbase.d.ts +41 -0
  262. package/packages/host/dist/landedbase.js +59 -0
  263. package/packages/host/dist/landedbase.js.map +1 -0
  264. package/packages/host/dist/lantls.js +2 -2
  265. package/packages/host/dist/lantls.js.map +1 -1
  266. package/packages/host/dist/limitretry.js +2 -3
  267. package/packages/host/dist/limitretry.js.map +1 -1
  268. package/packages/host/dist/localledger.js +9 -12
  269. package/packages/host/dist/localledger.js.map +1 -1
  270. package/packages/host/dist/main.js +2 -0
  271. package/packages/host/dist/main.js.map +1 -1
  272. package/packages/host/dist/opendeliveries.d.ts +4 -0
  273. package/packages/host/dist/opendeliveries.js +27 -1
  274. package/packages/host/dist/opendeliveries.js.map +1 -1
  275. package/packages/host/dist/plugins/setupcontrib.js +3 -2
  276. package/packages/host/dist/plugins/setupcontrib.js.map +1 -1
  277. package/packages/host/dist/pricefetch.d.ts +80 -0
  278. package/packages/host/dist/pricefetch.js +289 -0
  279. package/packages/host/dist/pricefetch.js.map +1 -0
  280. package/packages/host/dist/pricegap.d.ts +11 -0
  281. package/packages/host/dist/pricegap.js +30 -0
  282. package/packages/host/dist/pricegap.js.map +1 -0
  283. package/packages/host/dist/repohealthscopes.js +16 -24
  284. package/packages/host/dist/repohealthscopes.js.map +1 -1
  285. package/packages/host/dist/repos.d.ts +4 -0
  286. package/packages/host/dist/repos.js +1 -1
  287. package/packages/host/dist/repos.js.map +1 -1
  288. package/packages/host/dist/reposkilltext.d.ts +2 -0
  289. package/packages/host/dist/reposkilltext.js +8 -2
  290. package/packages/host/dist/reposkilltext.js.map +1 -1
  291. package/packages/host/dist/routes/apiagentpoints.d.ts +5 -0
  292. package/packages/host/dist/routes/apiagentpoints.js +48 -0
  293. package/packages/host/dist/routes/apiagentpoints.js.map +1 -0
  294. package/packages/host/dist/routes/apidictate.d.ts +2 -0
  295. package/packages/host/dist/routes/apidictate.js +27 -0
  296. package/packages/host/dist/routes/apidictate.js.map +1 -0
  297. package/packages/host/dist/routes/apihost.js +3 -2
  298. package/packages/host/dist/routes/apihost.js.map +1 -1
  299. package/packages/host/dist/routes/apirepofiles.js +3 -1
  300. package/packages/host/dist/routes/apirepofiles.js.map +1 -1
  301. package/packages/host/dist/routes/apirepowork.js +14 -0
  302. package/packages/host/dist/routes/apirepowork.js.map +1 -1
  303. package/packages/host/dist/routes/apiroutes.js +4 -1
  304. package/packages/host/dist/routes/apiroutes.js.map +1 -1
  305. package/packages/host/dist/routes/apiskills.d.ts +3 -0
  306. package/packages/host/dist/routes/apiskills.js +81 -0
  307. package/packages/host/dist/routes/apiskills.js.map +1 -0
  308. package/packages/host/dist/routes/apistats.js +2 -2
  309. package/packages/host/dist/routes/apistats.js.map +1 -1
  310. package/packages/host/dist/routes/apisystem.js +3 -1
  311. package/packages/host/dist/routes/apisystem.js.map +1 -1
  312. package/packages/host/dist/routes/apitable.d.ts +2 -0
  313. package/packages/host/dist/routes/apitable.js.map +1 -1
  314. package/packages/host/dist/server/billingwire.js +5 -0
  315. package/packages/host/dist/server/billingwire.js.map +1 -1
  316. package/packages/host/dist/server/deliveries.d.ts +4 -1
  317. package/packages/host/dist/server/deliveries.js +38 -6
  318. package/packages/host/dist/server/deliveries.js.map +1 -1
  319. package/packages/host/dist/server/http.js +1 -1
  320. package/packages/host/dist/server/http.js.map +1 -1
  321. package/packages/host/dist/server/intentDeps.js +20 -6
  322. package/packages/host/dist/server/intentDeps.js.map +1 -1
  323. package/packages/host/dist/server/wsops.js +2 -1
  324. package/packages/host/dist/server/wsops.js.map +1 -1
  325. package/packages/host/dist/sessions/core.d.ts +1 -0
  326. package/packages/host/dist/sessions/ctxseries.js +7 -5
  327. package/packages/host/dist/sessions/ctxseries.js.map +1 -1
  328. package/packages/host/dist/sessions/drive.d.ts +6 -1
  329. package/packages/host/dist/sessions/drive.js +13 -10
  330. package/packages/host/dist/sessions/drive.js.map +1 -1
  331. package/packages/host/dist/sessions/record.js +16 -17
  332. package/packages/host/dist/sessions/record.js.map +1 -1
  333. package/packages/host/dist/sessions/sidechannel.js +1 -1
  334. package/packages/host/dist/sessions/sidechannel.js.map +1 -1
  335. package/packages/host/dist/sessions/tmux.js +6 -1
  336. package/packages/host/dist/sessions/tmux.js.map +1 -1
  337. package/packages/host/dist/sessions/turn.js +5 -0
  338. package/packages/host/dist/sessions/turn.js.map +1 -1
  339. package/packages/host/dist/sessions.d.ts +2 -1
  340. package/packages/host/dist/sessions.js +1 -1
  341. package/packages/host/dist/sessions.js.map +1 -1
  342. package/packages/host/dist/settle.d.ts +3 -2
  343. package/packages/host/dist/settle.js +13 -13
  344. package/packages/host/dist/settle.js.map +1 -1
  345. package/packages/host/dist/sidecar/sidecarname.d.ts +2 -0
  346. package/packages/host/dist/sidecar/sidecarname.js +5 -1
  347. package/packages/host/dist/sidecar/sidecarname.js.map +1 -1
  348. package/packages/host/dist/sidecar/sidecarroute.d.ts +1 -1
  349. package/packages/host/dist/sidecar/sidecarroute.js +5 -0
  350. package/packages/host/dist/sidecar/sidecarroute.js.map +1 -1
  351. package/packages/host/dist/sidecar.d.ts +1 -1
  352. package/packages/host/dist/sidecar.js +1 -1
  353. package/packages/host/dist/sidecar.js.map +1 -1
  354. package/packages/host/dist/skills/skillinventory.d.ts +23 -0
  355. package/packages/host/dist/skills/skillinventory.js +275 -0
  356. package/packages/host/dist/skills/skillinventory.js.map +1 -0
  357. package/packages/host/dist/skills/skilllayers.d.ts +28 -0
  358. package/packages/host/dist/skills/skilllayers.js +73 -0
  359. package/packages/host/dist/skills/skilllayers.js.map +1 -0
  360. package/packages/host/dist/skills/skillrecommend.d.ts +42 -0
  361. package/packages/host/dist/skills/skillrecommend.js +171 -0
  362. package/packages/host/dist/skills/skillrecommend.js.map +1 -0
  363. package/packages/host/dist/skills/skillrefs.d.ts +2 -0
  364. package/packages/host/dist/skills/skillrefs.js +50 -0
  365. package/packages/host/dist/skills/skillrefs.js.map +1 -0
  366. package/packages/host/dist/skills/skilluse.d.ts +57 -0
  367. package/packages/host/dist/skills/skilluse.js +242 -0
  368. package/packages/host/dist/skills/skilluse.js.map +1 -0
  369. package/packages/host/dist/skills/skillweight.d.ts +18 -0
  370. package/packages/host/dist/skills/skillweight.js +69 -0
  371. package/packages/host/dist/skills/skillweight.js.map +1 -0
  372. package/packages/host/dist/skills/skillwrite.d.ts +56 -0
  373. package/packages/host/dist/skills/skillwrite.js +183 -0
  374. package/packages/host/dist/skills/skillwrite.js.map +1 -0
  375. package/packages/host/dist/sysstat.d.ts +34 -1
  376. package/packages/host/dist/sysstat.js +82 -14
  377. package/packages/host/dist/sysstat.js.map +1 -1
  378. package/packages/host/dist/tokenscan.js +5 -2
  379. package/packages/host/dist/tokenscan.js.map +1 -1
  380. package/packages/host/dist/tokenstats.js +7 -4
  381. package/packages/host/dist/tokenstats.js.map +1 -1
  382. package/packages/host/dist/transcript/transcriptparse.js +2 -2
  383. package/packages/host/dist/transcript/transcriptparse.js.map +1 -1
  384. package/packages/host/dist/waitclock.d.ts +12 -0
  385. package/packages/host/dist/waitclock.js +23 -0
  386. package/packages/host/dist/waitclock.js.map +1 -0
  387. package/packages/host/dist/weekburn.js +7 -5
  388. package/packages/host/dist/weekburn.js.map +1 -1
  389. package/packages/host/dist/worktreeleftover.js +13 -15
  390. package/packages/host/dist/worktreeleftover.js.map +1 -1
  391. package/packages/web/dist/assets/demo-DHkwSmU5.js +26 -0
  392. package/packages/web/dist/assets/{icons-D8RlmSLR.js → icons-5lVTFNUU.js} +1 -1
  393. package/packages/web/dist/assets/index-Bh4cH6X8.js +170 -0
  394. package/packages/web/dist/assets/index-F7VHtsLI.css +1 -0
  395. package/packages/web/dist/assets/shared-BvQMg9ra.js +51 -0
  396. package/packages/web/dist/assets/sheets-Cwi72V02.js +257 -0
  397. package/packages/web/dist/assets/sheets-DjU2XiUd.css +1 -0
  398. package/packages/web/dist/build-id.txt +1 -1
  399. package/packages/web/dist/buildstamp.json +1 -1
  400. package/packages/web/dist/index.html +7 -7
  401. package/packages/web/dist/sw.js +2 -2
  402. package/release.json +11 -3
  403. package/tools/repohealth/constants.mjs +34 -1
  404. package/tools/repohealth/fixture.json +5374 -38
  405. package/tools/repohealth/git.mjs +77 -0
  406. package/tools/repohealth/lang/dart-analyze.mjs +181 -0
  407. package/tools/repohealth/lang/dart-lex.mjs +494 -0
  408. package/tools/repohealth/lang/dart-resolve.mjs +95 -0
  409. package/tools/repohealth/lang/python-ast.mjs +602 -0
  410. package/tools/repohealth/lang/python-resolve.mjs +228 -0
  411. package/tools/repohealth/metrics/habits.mjs +286 -0
  412. package/tools/repohealth/metrics/native.mjs +542 -0
  413. package/tools/repohealth/metrics/untested.mjs +20 -8
  414. package/tools/repohealth/metrics/workspace.mjs +256 -0
  415. package/tools/repohealth/own.mjs +67 -5
  416. package/tools/repohealth/packs/dart.mjs +153 -85
  417. package/tools/repohealth/packs/python.mjs +51 -14
  418. package/tools/repohealth/plot.mjs +143 -1
  419. package/tools/repohealth/reach.mjs +98 -0
  420. package/tools/repohealth/scope.mjs +14 -1
  421. package/tools/repohealth/series.mjs +5 -0
  422. package/tools/repohealth/types.mjs +4 -0
  423. package/tools/repohealth.mjs +39 -5
  424. package/packages/web/dist/assets/demo-ad3g3HDa.js +0 -26
  425. package/packages/web/dist/assets/index-Csb7jynu.js +0 -170
  426. package/packages/web/dist/assets/index-Cz9Haocy.css +0 -1
  427. package/packages/web/dist/assets/shared-DBaaGttP.js +0 -51
  428. package/packages/web/dist/assets/sheets-CqsP9w1V.js +0 -256
  429. package/packages/web/dist/assets/sheets-DoUhPGK0.css +0 -1
@@ -143,6 +143,8 @@ export function scopeHistory(history, scope, prereg) {
143
143
  // `git.mjs`'s `readHunks`. A range is a fact about one file, so cutting the
144
144
  // path is the whole translation.
145
145
  const hunks = history.hunks ? new Map() : undefined;
146
+ // `churn` (rename-aware line counts, `git.readChurn`) is re-rooted the same way.
147
+ const churn = history.churn ? new Map() : undefined;
146
148
  for (const c of history.commits) {
147
149
  const paths = (history.touches?.get(c.sha) ?? c.filesTouched ?? [])
148
150
  .filter((p) => p.startsWith(pre))
@@ -158,6 +160,12 @@ export function scopeHistory(history, scope, prereg) {
158
160
  for (const [p, v] of num) if (p.startsWith(pre)) m.set(p.slice(pre.length), v);
159
161
  lines.set(c.sha, m);
160
162
  }
163
+ const ch = churn && history.churn.get(c.sha);
164
+ if (ch) {
165
+ const m = new Map();
166
+ for (const [p, v] of ch) if (p.startsWith(pre)) m.set(p.slice(pre.length), v);
167
+ churn.set(c.sha, m);
168
+ }
161
169
  const h = hunks && history.hunks.get(c.sha);
162
170
  if (h) {
163
171
  const m = new Map();
@@ -165,7 +173,12 @@ export function scopeHistory(history, scope, prereg) {
165
173
  hunks.set(c.sha, m);
166
174
  }
167
175
  }
168
- return { commits, touches, batch, lines, ...(hunks ? { hunks } : {}) };
176
+ return {
177
+ commits, touches, batch, lines,
178
+ ...(hunks ? { hunks } : {}),
179
+ ...(churn ? { churn } : {}),
180
+ ...(history.shallow ? { shallow: true } : {}),
181
+ };
169
182
  }
170
183
 
171
184
  /**
@@ -110,6 +110,11 @@ export const ROW_KEYS = Object.freeze([
110
110
  "untested",
111
111
  "classics",
112
112
  "graph",
113
+ "habits",
114
+ "workspace",
115
+ "native",
116
+ // Which index dimensions each active pack could read (`reach.mjs`) — the index's coverage.
117
+ "reach",
113
118
  "tripwires",
114
119
  // Not a measurement: the chain state `tripwires.mjs` needs to tell a
115
120
  // TRANSITION from a STATE. It lives on the row because it used to live in a
@@ -311,6 +311,10 @@
311
311
  * dependency manifest and where no active pack reads one, with `depsReason`
312
312
  * beside it saying which. `packages` is broken down by `Snapshot.groups`,
313
313
  * so a key is a group's own path (`packages/web`, `.`) and not a label.
314
+ * @property {{value: {packs: {name: string, files: number, reads: string[]}[]}}} [reach]
315
+ * Which index dimensions each active source pack could read, and how many
316
+ * files (at HEAD) it holds (`reach.mjs`). The index's coverage; absent on
317
+ * rows from an engine before the field.
314
318
  * @property {{kind: string, subject: string, detail: string}[]} tripwires
315
319
  */
316
320
 
@@ -85,7 +85,11 @@ import { measureDups } from "./repohealth/metrics/dups.mjs";
85
85
  import { measureDeadExports } from "./repohealth/metrics/deadexports.mjs";
86
86
  import { measureTripwires } from "./repohealth/metrics/tripwires.mjs";
87
87
  import { measureGraph } from "./repohealth/metrics/graph.mjs";
88
- import { OWN_FILE, declaresOwn, measureOwn } from "./repohealth/own.mjs";
88
+ import { measureHabits } from "./repohealth/metrics/habits.mjs";
89
+ import { measureWorkspaceAt, workspaceElsewhere } from "./repohealth/metrics/workspace.mjs";
90
+ import { measureNative, nativeElsewhere } from "./repohealth/metrics/native.mjs";
91
+ import { OWN_FILE, declaresOwn, measureOwn, notRunOwn } from "./repohealth/own.mjs";
92
+ import { measureReach } from "./repohealth/reach.mjs";
89
93
  import { declarationsByIndex, measureCentral } from "./repohealth/central.mjs";
90
94
 
91
95
  /**
@@ -382,6 +386,9 @@ function update({ fixture, recut = false }) {
382
386
  // cost). Attached to the unscoped history and re-scoped with it.
383
387
  if (missing.size) {
384
388
  raw.hunks = git.readHunks(ROOT);
389
+ // Rename-aware line counts and the shallow flag, for `habits`.
390
+ raw.churn = git.readChurn(ROOT);
391
+ raw.shallow = git.isShallow(ROOT);
385
392
  history = scopeHistory(raw, SCOPE, CFG);
386
393
  }
387
394
  // The health.json in force at each commit, for `central` — whole tree only,
@@ -416,15 +423,29 @@ function update({ fixture, recut = false }) {
416
423
  untested: measureUntested(snap, history, index, CFG),
417
424
  classics: measureClassics(snap, history, index, CFG),
418
425
  graph: measureGraph(snap, history, index, CFG),
426
+ habits: measureHabits(snap, history, index, CFG),
427
+ // Tree lists (tracked litter, docs naming missing paths): the newest
428
+ // commit only — see `metrics/workspace.mjs`.
429
+ workspace: { value: index === history.commits.length - 1
430
+ ? measureWorkspaceAt(ROOT, commit.sha, git, CFG, SCOPE)
431
+ : workspaceElsewhere() },
432
+ // The repo's own analyzers, scanner and coverage files: the newest
433
+ // commit of a whole-tree series only, run in the checkout — `metrics/native.mjs`.
434
+ native: { value: index === history.commits.length - 1 && !SCOPE
435
+ ? measureNative(ROOT, { files: git.listHeadPaths(ROOT), commitTs: commit.ts })
436
+ : nativeElsewhere() },
437
+ // Which index dimensions the active packs could read, over THIS commit's files (`reach.mjs`): the index's coverage.
438
+ reach: measureReach(CFG, snap),
419
439
  ...tripwireFields(measureTripwires(snap, history, index, CFG, prevRow)),
420
440
  };
421
441
  // The repo's OWN readings (`own.mjs`): HEAD only, the whole tree only. Not
422
442
  // one of the measurements above — no definition here moves when a repo
423
- // declares one, and nothing that reads the five index entries reads this.
443
+ // declares one; the index reads only a reading the repo marked as a gate.
424
444
  // `--no-own`: the host has not approved this repo's committed commands, so
425
445
  // none of them runs (neither its readings here nor its central overrides).
426
- if (!SCOPE && !NO_OWN && index === history.commits.length - 1) {
427
- const own = measureOwn(ROOT, commit.sha, git);
446
+ if (!SCOPE && index === history.commits.length - 1) {
447
+ // Unapproved: nothing runs, but a declared gate is still carried so the index counts it unknown.
448
+ const own = NO_OWN ? notRunOwn(ROOT, commit.sha, git) : measureOwn(ROOT, commit.sha, git);
428
449
  if (own) row.own = own;
429
450
  }
430
451
  // The repo's say over the CENTRAL readings (`central.mjs`): a disable is
@@ -454,7 +475,7 @@ function update({ fixture, recut = false }) {
454
475
  // again: re-measure that one row's own + central readings and rewrite it.
455
476
  const headIdx = history.commits.length - 1;
456
477
  const headKnown = headIdx >= 0 ? known.get(history.commits[headIdx].sha) : null;
457
- if (!SCOPE && !NO_OWN && headKnown && !headKnown.own && declaresOwn(ROOT, headKnown.sha, git)) {
478
+ if (!SCOPE && !NO_OWN && headKnown && (!headKnown.own || headKnown.own.notRun) && declaresOwn(ROOT, headKnown.sha, git)) {
458
479
  const own = measureOwn(ROOT, headKnown.sha, git);
459
480
  const central = measureCentral(ROOT, git.readFileAt(ROOT, headKnown.sha, OWN_FILE), { atHead: true });
460
481
  const redone = { ...headKnown, ...(own ? { own } : {}), ...(central ? { central } : {}) };
@@ -463,6 +484,15 @@ function update({ fixture, recut = false }) {
463
484
  rows[rows.indexOf(headKnown)] = redone;
464
485
  }
465
486
  }
487
+ // Unapproved and already measured: carry the declared gates as unknown, so the index never reads a missing `own` as "no gate".
488
+ if (!SCOPE && NO_OWN && headKnown && !headKnown.own) {
489
+ const own = notRunOwn(ROOT, headKnown.sha, git);
490
+ if (own) {
491
+ const redone = { ...headKnown, own };
492
+ replaceRow(SERIES, redone);
493
+ rows[rows.indexOf(headKnown)] = redone;
494
+ }
495
+ }
466
496
  const all = rows.concat(fresh);
467
497
  const last = all[all.length - 1];
468
498
  const secs = ((Date.now() - started) / 1000).toFixed(1);
@@ -573,6 +603,10 @@ function status() {
573
603
  // differ exactly when a re-cut is pending, which is the thing a reader
574
604
  // is trying to find out.
575
605
  engineVersion: CFG.VERSION,
606
+ // `update --recut` is understood here. The phone offers its re-cut tap
607
+ // only to an engine that says so — a repo's own older copy would ignore
608
+ // the flag and refuse again.
609
+ acceptsRecut: true,
576
610
  // Which languages this engine could read here, with two counts each. A
577
611
  // repo where this is `common` alone is one whose source no pack claims,
578
612
  // and saying so once here is cheaper than repeating it in every row.
@@ -1,26 +0,0 @@
1
- import{Au as e,Bl as t,Cu as n,E as r,El as i,H as a,Hl as o,Is as s,Ji as c,Ju as l,K as u,Ki as d,Mn as f,Mu as p,Nl as m,Ns as h,Pn as g,Q as _,Rn as v,Su as y,U as ee,Uc as b,V as te,Vi as ne,X as re,Y as ie,Yc as ae,Yo as oe,Zc as se,_l as ce,ao as le,ei as ue,el as x,fi as S,gl as C,kl as w,ku as de,lr as fe,mr as pe,nl as me,oo as he,qi as ge,vl as T,ws as _e,wu as ve}from"./shared-DBaaGttP.js";var ye={snippets:b(`snippets`),headerCmds:b(`headerCmds`),fanoutPresets:b(`fanout.presets`),toolbar:b(`toolbar`),launch:b(`launch`),launchAsk:b(`launchAsk`),spendWarn:b(`spendWarn`),weekAllDesktops:b(`weekAllDesktops`),pad:b(`pad`),hiddenRepos:b(`hiddenRepos`),enterSends:b(`enterSends`),dictateTerms:b(`dictate.terms`),autoSend:b(`autoSend`),updatesAutoCheck:b(`updates.autoCheck`),serialSessions:b(`serialSessions`),confirmQueue:b(`confirmQueue`),confirmClose:b(`confirmClose`),readerTools:b(`readerTools`),annKnobs:b(`annKnobs`),annTools:b(`annTools`),annPrompt:b(`annPrompt`),hints:b(`hints`),repoColors:b(`repoColors`),installAllow:b(`installAllow`),closeWhenDone:b(`backlog.closeWhenDone`),localSessions:b(`local.maxSessions`),agentWindowWarn:b(`agentWindowWarn`),agentWarn:b(`agentWarn`),deviceId:b(`deviceId`),deviceName:b(`deviceName`),pluginList:b(`pluginList`),hostBase:b(`hostBase`),hosts:b(`hosts`),hostActive:b(`hostActive`),hostSwitch:b(`hostSwitch`),hostSwitchFailed:b(`hostSwitchFailed`),hostOpenAfter:b(`hostOpenAfter`),hostsGone:b(`hostsGone`),deviceToken:b(`deviceToken`),passive:b(`passive`),tokenSeal:b(`tokenSeal`),tokenSealOn:b(`tokenSealOn`),tokenSealDead:b(`tokenSealDead`),tokenSealAuth:b(`tokenSealAuth`),lanIdentity:b(`lanIdentity`),pairCodesSent:b(`pairCodesSent`),dataSaver:b(`dataSaver`),bgFresh:b(`bgFresh`),uploadScale:b(`uploadScale`),upKbps:b(`upKbps`),netlog:b(`netlog`),netTraffic:b(`nettraffic`),netSync:b(`netsync`),netPulse:b(`netPulse`),localRtBar:b(`localRtBar`),unfoldToEnd:b(`unfoldToEnd`),repoSort:b(`repoSort`),sessionTabs:b(`sessionTabs`),sessionTabsCount:b(`sessionTabs.count`),sessionTabsOrder:b(`sessionTabs.order`),sessionTabsLimit:b(`sessionTabs.limit`),tabOpens:b(`sessionTabs.opens`),tabFiles:b(`sessionTabs.files`),sessionTabsSync:b(`sessionTabs.sync`),tabsSaverAsked:b(`sessionTabs.saverAsked`),tabOrderShared:b(`tabsShared.order`),tabOpensShared:b(`tabsShared.opens`),localRt:b(`localrt`)},be={sessionOrder:b(`sessionOrder`),collapsedRepos:b(`collapsedRepos`),toolbarOpen:b(`toolbarOpen`),hostBoots:b(`hostBoots`),readMode:b(`readMode`),cliMode:b(`cliMode`),termCostOpen:b(`termCostOpen`),sendMemory:b(`sendMemory`),slotAskOff:b(`slotAskOff`),launchLast:b(`launchLast`),wheelHidden:b(`wheelHidden`),typingRoom:b(`typingRoom`),hintChip:b(`hintChip`),termCornerPos:b(`termCornerPos`),wideSideW:b(`wideSideW`),wideBesideW:b(`wideBesideW`),widePanelW:b(`widePanelW`),sessChromeH:b(`sessChromeH`),launcherChromeH:b(`launcherChromeH`),agentListH:b(`agentListH`),closeKbOnSend:b(`closeKbOnSend`),shortcutCard:b(`shortcutCard`),busySend:b(`busySend`),btwToCli:b(`btwToCli`),theme:b(`theme`),themeOverlay:b(`themeOverlay`),themeOverlayCss:b(`themeOverlayCss`),textScale:b(`textScale`),iconScale:b(`iconScale`),termZoom:b(`termZoom`),readerZoom:b(`readerZoom`),scrollZoom:b(`scrollZoom`),gitZoom:b(`gitZoom`),gitExplainFoci:b(`gitExplainFoci`),gitExplainNote:b(`gitExplainNote`),gitExplainLast:b(`gitExplainLast`),textDumpWrap:b(`textDumpWrap`),closeCustomH:b(`closeCustomH`),schedPctLeft:b(`schedPctLeft`),schedLeadMin:b(`schedLeadMin`),closeBy:b(`closeBy`),closeKeepStar:b(`closeKeepStar`),backlogRepo:b(`backlogRepo`),backlogDraft:b(`backlogDraft`),backlogShowArchived:b(`backlogShowArchived`),backlogSortRun:b(`backlogSortRun`),fanoutText:b(`fanout.text`),fanoutSel:b(`fanout.sel`),fanoutModel:b(`fanout.model`),collageGap:b(`collageGap`),collageLabels:b(`collageLabels`),usage:b(`usage`),notifSeen:b(`notifSeen`),notifInfoNote:b(`notifInfoNote`),whatsNewSeen:b(`whatsNewSeen`),toastLog:b(`toastLog`),hostedAck:b(`hostedAck`),costNoticed:b(`costNoticed`),agentNoticed:b(`agentNoticed`),spendNoticed:b(`spendNoticed`),dismissInsecure:b(`dismissInsecure`),dismissPhoneSetup:b(`dismissPhoneSetup`),codeFolderLater:b(`codeFolderLater`),dismissedSelfUpdate:b(`dismissedSelfUpdate`),updatesReceiptSeen:b(`updatesReceiptSeen`),dismissedUpdate:b(`dismissedUpdate`),annHintHidden:b(`annHintHidden`),stowed:b(`stowed`),stowTold:b(`stowTold`),toldNoticed:b(`toldNoticed`),lastForcedReload:b(`lastForcedReload`),webUpdateStaged:b(`webUpdate.staged`),webUpdateAuto:b(`webUpdate.auto`),webUpdateApply:b(`webUpdate.apply`),webUpdateApplyTries:b(`webUpdate.applyTries`),webUpdateRecoverySeen:b(`webUpdate.recoverySeen`),webUpdateSnooze:b(`webUpdate.snooze`),routeLast:b(`route.last`),routeResume:b(`route.resume`),headerViews:b(`headerViews`),brandMigrated:r,brandStores:b(`brand.stores`),demo:b(`demo`),demoReturn:b(`demo.return`),demoTour:b(`demo.tour`)},xe={outbox:b(`outbox`),compose:b(`compose`),composeDrafts:b(`compose.drafts`),composeOutbox:b(`compose.outbox`),composeSheets:b(`compose.sheets`),deadUploads:b(`deadUploads`),dictations:b(`dictations`),dictateLang:b(`dictate.lang`),dictateLangs:b(`dictate.langs`),giveups:b(`giveups`),giveupsMigrated:b(`giveups.migrated`),activityDismissed:b(`activity.dismissed`),activityConfirmedDone:b(`activity.confirmedDone`),padRescue:b(`padRescue`),padRescueMigrated:b(`padRescue.migrated`),pendingStars:b(`pendingStars`),pendingFollowUps:b(`pendingFollowUps`),pullState:b(`pull.state`),pullAuto:b(`pull.auto`),pullBrowserAsk:b(`pull.browserask`),pullAutoSave:b(`pull.autosave`),snapSessions:b(`snap.sessions`),snapRepos:b(`snap.repos`),snapReposAt:b(`snapReposAt`),snapRecent:b(`snap.recent`),snapClosed:b(`snap.closed`),snapBacklog:b(`snap.backlog`),snapHistory:b(`snap.history`),snapBuilds:b(`snap.builds`),snapCapture:b(`snap.capture`),snapSchedules:b(`snap.schedules`),snapCliHealth:b(`snap.clihealth`),snapAt:b(`snap.at`),slashCache:b(`slashCache`),fileMtimes:b(`fileMtimes`),artMarks:b(`artMarks`),fileRemarks:b(`fileRemarks`),filesDir:b(`filesDir`),newImages:b(`newimg`),syncTs:b(`syncTs`),cmdHistory:b(`cmdHistory`)},E={healthAxis:b(`healthAxis`),appLock:b(`appLock`),appLockBlob:b(`appLockBlob`),...ye,...xe,...be},Se=b(`demoworld.`),Ce=b(`trSeen.`),we=e=>`${Ce}${e}`,Te=b(`ext.`),Ee=(e,t)=>`${Te}${e}.${t}`,De=b(`extdev.`),Oe=b(`demo.snap.`),ke=e=>`${Oe}${e}`,Ae={snippets:`host`,headerCmds:`host`,fanoutPresets:`host`,toolbar:`host`,launch:`host`,launchAsk:`host`,spendWarn:`host`,weekAllDesktops:`host`,pad:`host`,hiddenRepos:`host`,enterSends:`host`,dictateTerms:`host`,autoSend:`host`,updatesAutoCheck:`host`,serialSessions:`host`,confirmQueue:`host`,confirmClose:`host`,readerTools:`host`,annKnobs:`host`,annTools:`host`,annPrompt:`device`,hints:`host`,repoColors:`host`,installAllow:`host`,closeWhenDone:`host`,localSessions:`host`,agentWarn:`host`,agentWindowWarn:`host`,syncTs:`host`,healthAxis:`device`,appLock:`device`,appLockBlob:`device`,tokenSeal:`device`,tokenSealOn:`device`,tokenSealDead:`device`,tokenSealAuth:`device`,deviceId:`device`,deviceName:`device`,hostBase:`device`,hosts:`device`,hostActive:`device`,hostSwitch:`device`,hostSwitchFailed:`device`,pairCodesSent:`device`,hostOpenAfter:`device`,hostsGone:`device`,deviceToken:`host`,lanIdentity:`host`,passive:`host`,pluginList:`host`,dataSaver:`device`,bgFresh:`device`,uploadScale:`device`,netPulse:`device`,localRtBar:`device`,unfoldToEnd:`device`,repoSort:`device`,upKbps:`host`,netlog:`host`,netTraffic:`host`,netSync:`host`,localRt:`host`,sessionTabs:`device`,sessionTabsCount:`device`,sessionTabsOrder:`device`,sessionTabsLimit:`device`,tabOpens:`host`,tabFiles:`host`,sessionTabsSync:`device`,tabsSaverAsked:`device`,tabOrderShared:`host`,tabOpensShared:`host`,outbox:`host`,compose:`host`,composeDrafts:`host`,composeOutbox:`host`,composeSheets:`host`,deadUploads:`host`,dictations:`host`,pendingStars:`host`,pendingFollowUps:`host`,backlogDraft:`host`,dictateLang:`device`,dictateLangs:`device`,fanoutText:`host`,fanoutSel:`host`,fanoutModel:`host`,backlogRepo:`host`,backlogShowArchived:`host`,backlogSortRun:`host`,giveups:`device`,giveupsMigrated:`device`,padRescue:`device`,padRescueMigrated:`device`,activityDismissed:`host`,activityConfirmedDone:`host`,pullState:`host`,pullAuto:`host`,pullBrowserAsk:`host`,pullAutoSave:`host`,snapSessions:`host`,snapRepos:`host`,snapReposAt:`host`,snapRecent:`host`,snapClosed:`host`,snapBacklog:`host`,snapHistory:`host`,snapBuilds:`host`,snapCapture:`host`,snapSchedules:`host`,snapCliHealth:`host`,snapAt:`host`,themeOverlay:`host`,themeOverlayCss:`host`,slashCache:`host`,fileMtimes:`host`,artMarks:`host`,fileRemarks:`host`,filesDir:`host`,newImages:`host`,cmdHistory:`host`,usage:`host`,notifSeen:`host`,costNoticed:`host`,agentNoticed:`host`,spendNoticed:`host`,sessionOrder:`host`,collapsedRepos:`host`,sendMemory:`host`,slotAskOff:`host`,launchLast:`host`,wheelHidden:`host`,toolbarOpen:`device`,readMode:`device`,cliMode:`device`,termCostOpen:`device`,typingRoom:`device`,hintChip:`device`,termCornerPos:`device`,wideSideW:`device`,wideBesideW:`device`,widePanelW:`device`,sessChromeH:`device`,agentListH:`device`,launcherChromeH:`device`,closeKbOnSend:`device`,shortcutCard:`device`,busySend:`device`,btwToCli:`device`,theme:`device`,textScale:`device`,iconScale:`device`,termZoom:`device`,readerZoom:`device`,scrollZoom:`device`,gitZoom:`device`,gitExplainFoci:`device`,gitExplainNote:`device`,gitExplainLast:`device`,textDumpWrap:`device`,closeCustomH:`device`,schedPctLeft:`device`,schedLeadMin:`device`,closeBy:`device`,closeKeepStar:`device`,collageGap:`device`,collageLabels:`device`,toastLog:`device`,hostedAck:`device`,notifInfoNote:`device`,whatsNewSeen:`device`,dismissInsecure:`device`,dismissPhoneSetup:`device`,codeFolderLater:`device`,dismissedUpdate:`device`,dismissedSelfUpdate:`host`,updatesReceiptSeen:`host`,annHintHidden:`device`,stowed:`device`,stowTold:`device`,toldNoticed:`device`,hostBoots:`device`,lastForcedReload:`device`,webUpdateRecoverySeen:`device`,webUpdateStaged:`host`,webUpdateAuto:`host`,webUpdateApply:`host`,webUpdateApplyTries:`host`,webUpdateSnooze:`host`,routeLast:`host`,routeResume:`host`,headerViews:`host`,brandMigrated:`device`,brandStores:`device`,demo:`device`,demoReturn:`device`,demoTour:`device`},je=new Set(Object.keys(Ae).filter(e=>Ae[e]===`device`).map(e=>E[e]));function Me(e){return je.has(e)||e.startsWith(De)}new Set(ne);function Ne(e){try{return localStorage.getItem(e)}catch{return null}}function Pe(e,t){try{localStorage.setItem(e,t)}catch{}}function Fe(e){try{localStorage.removeItem(e)}catch{}}function Ie(e,t){try{let n=localStorage.getItem(e);if(n===null||n===``)return t;let r=JSON.parse(n);return r===null?t:r}catch{return t}}function Le(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch{}}function Re(e,t=!1){let n=Ne(e);return n===null?t:n===`1`||n===`true`}function ze(e,t){Pe(e,t?`1`:`0`)}function Be(e,t){let n=Ne(e);if(n===null||n===``)return t;let r=Number(n);return Number.isFinite(r)?r:t}var Ve=()=>Ne(E.healthAxis)===`commits`?`commits`:`weeks`,He=e=>Pe(E.healthAxis,e===`commits`?`commits`:`weeks`),Ue=`demo`,We=`ws://demo.invalid/ws`,Ge=/^[a-z0-9][a-z0-9-]{0,39}$/;function Ke(){let e=null;try{e=new URLSearchParams(globalThis.location?.search??``).get(Ue)}catch{}return e||=Ne(E.demo),e&&Ge.test(e)?e:null}var qe=null,Je=null;function Ye(){return qe!==null}function Xe(){return qe}function Ze(){return Je}function Qe(e,t=null){qe=e,Je=e?null:t}function $e(e){if(!Ge.test(e))throw Error(`not a demo scenario id: ${e}`);try{globalThis.sessionStorage?.removeItem(ke(e))}catch{}Fe(E.demoTour),Pe(E.demo,e),tt(nt(location.href,e))}function et(){let e=qe??Ke();try{e&&globalThis.sessionStorage?.removeItem(ke(e))}catch{}Fe(E.demoTour),Fe(E.demo),tt(nt(location.href,null))}function tt(e,t=location){e===t.href?t.reload():t.replace(e)}function nt(e,t){let n=new URL(e);return t?n.searchParams.set(Ue,t):n.searchParams.delete(Ue),n.toString()}var rt=`${`/`.replace(/\/$/,``)}/demo/media`,it=/^\/api\/repos\/([^/?#]+)\/artifact$/,at=/^\/api\/repos\/([^/?#]+)\/inbox\/([^/?#]+)$/,ot=new Map;function st(e,t,n){ot.set(`${e}/${t}`,n)}var ct=`.claude/inbox/`;function lt(e){return e.startsWith(`.`)?`dot-${e.slice(1)}`:e}function ut(e){return e.split(`/`).map(lt).join(`/`)}function dt(e){let t=e.split(`/`).filter(e=>e!==``&&e!==`.`);return!t.length||t.some(e=>e===`..`)?null:t.map(e=>encodeURIComponent(lt(e))).join(`/`)}function ft(e){if(!e.startsWith(`/api/`))return e;let t;try{t=new URL(e,`http://demo.invalid`)}catch{return e}if(t.searchParams.has(`stat`))return e;let n=it.exec(t.pathname);if(n){let r=t.searchParams.get(`path`)??``,i=r.startsWith(ct)?ot.get(`${n[1]}/${r.slice(14)}`):void 0;if(i)return i;let a=dt(r);return a?`${rt}/${n[1]}/${a}`:e}let r=at.exec(t.pathname);if(r){let t=ot.get(`${r[1]}/${decodeURIComponent(r[2])}`);if(t)return t;let n=dt(decodeURIComponent(r[2]));return n?`${rt}/${r[1]}/${ut(`.claude/inbox`)}/${n}`:e}return e}function pt(e,t,n){let r=e=>n.has(e)?e:t+e,i=()=>{let n=[];for(let r=0;r<e.length;r++){let i=e.key(r);i!==null&&i.startsWith(t)&&n.push(i.slice(t.length))}return n};return{get length(){return i().length},key:e=>i()[e]??null,getItem:t=>e.getItem(r(String(t))),setItem:(t,n)=>e.setItem(r(String(t)),String(n)),removeItem:t=>e.removeItem(r(String(t))),clear:()=>{for(let n of i())e.removeItem(t+n)}}}function mt(e){if(e||typeof window>`u`||!Ke())return!1;try{let e=window.localStorage,t=pt(e,Se,new Set([E.demo]));return Object.defineProperty(window,"localStorage",{configurable:!0,get:()=>t}),!0}catch{return!1}}var ht=new Map;function gt(e,t){t?ht.set(e,t):ht.delete(e)}function _t(){return[...ht.values()]}var vt=new Map;function yt(e,t){vt.set(e,t),gt(e,t.listed)}function bt(e=globalThis.location?.href??``){if(xt===null)try{xt=new URL(e).searchParams.has(`demoPlugins`)}catch{xt=!1}return xt}var xt=null;function St(){return[...vt].flatMap(([e,t])=>t.pushes().map(([t,n])=>({plugin:e,event:t,data:n})))}function Ct(e,t,n){if(!Ye())return;let r=vt.get(e);if(!r?.always&&!bt())return;let i=r?.calls[t];return i?i(n):void 0}var wt=e=>e.model;function D(e,t){return e.minted=(e.minted??0)+1,`${t}-${e.minted}`}function Tt(e,t){if(typeof t!=`string`||!t)return!1;let n=(e.repos??[]).map(e=>e&&typeof e==`object`?e.worktreePath:void 0).filter(e=>typeof e==`string`&&!!e);return!n.length||n.some(e=>t===e||t.startsWith(e.endsWith(`/`)?e:`${e}/`))}var Et=`That folder is not one of the demo's repos — pick one from the list.`;function Dt(e){let t=[];for(let n of e){let e=n.codePointAt(0)??0;e<128?t.push(e):e<2048?t.push(192|e>>6,128|e&63):e<65536?t.push(224|e>>12,128|e>>6&63,128|e&63):t.push(240|e>>18,128|e>>12&63,128|e>>6&63,128|e&63)}return t}var Ot=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;function kt(e){let t=``;for(let n=0;n<e.length;n+=3){let r=e[n],i=e[n+1],a=e[n+2];t+=Ot[r>>2]+Ot[(r&3)<<4|(i??0)>>4],t+=i===void 0?`=`:Ot[(i&15)<<2|(a??0)>>6],t+=a===void 0?`=`:Ot[a&63]}return t}var At=`budget not set: it needs a unit and an amount above zero (a percent at most 100)`,jt=`budget not set: that session is not open`;function Mt(e,t){let n=t.budget;if(!n)return!1;let r=me(n.cfg,t.contextSpark,n.cal??null,e.now(),t.running);t.budget={cfg:n.cfg,verdict:r,...n.cal?{cal:n.cal}:{}};let i=e.m.budgetTripped??={};return r.state===`over`&&!i[t.id]?(i[t.id]=!0,Pt(e,t),!0):(r.state===`ok`&&delete i[t.id],!1)}function Nt(e,t,n){let r=n===null?null:ae(n);if(n!==null&&!r)return At;let i=(e.m.sessions??[]).find(e=>e.id===t);if(!i)return jt;let a=i.budget?.cfg??null;if(JSON.stringify(a)!==JSON.stringify(r)){let n=!a||!r||a.unit!==r.unit||a.max!==r.max;r?i.budget={cfg:r,verdict:me(r,null,null,e.now())}:delete i.budget,n&&e.m.budgetTripped&&delete e.m.budgetTripped[t]}return Mt(e,i),e.broadcast({t:`session.updated`,session:i}),null}function Pt(e,t){let n=t.budget;if(!n)return;let r=n.cfg.interrupt?`No Esc was sent: the demo has no running claude to interrupt.`:`No Esc was sent: this budget is set not to interrupt.`,i=e.m.notifications??=[];i.unshift({id:D(e.m,`n`),ts:e.now(),kind:`limit`,title:`Session budget hit · ${t.title}`,body:`${x(n.verdict)}. Further sends to it are held until you raise or clear the budget. ${r}`,sessionId:t.id}),e.broadcast({t:`notification.list`,items:i})}var Ft=e=>new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}),It=e=>{let t=Math.max(0,Math.round(e/6e4));return t>=60?`${Math.floor(t/60)}h ${t%60}m`:`${t}m`},Lt=e=>({blocked:!1,blockedSince:0,resetAt:null,nextAttemptAt:null,attempts:0,weekly:!1,autoContinue:e,autoContinueOverride:null,queuePos:null,resuming:!1,first:!1}),Rt=e=>e.m.limitConfig?.enabled??!1;function zt(e,t,n,r,i){let a=e.m.decisions??=[];a.unshift({id:D(e.m,`d`),ts:e.now(),sessionId:t.id,sessionTitle:t.title,source:`limit`,phase:n,question:r,options:[],choice:null,rationale:i,outcome:`limit`}),e.broadcast({t:`decisions.log`,entries:a.slice(0,200)})}function Bt(e,t,n,r){let i=e.m.notifications??=[];i.unshift({id:D(e.m,`n`),ts:e.now(),kind:`limit`,title:n,body:r,sessionId:t.id}),e.broadcast({t:`notification.list`,items:i})}function Vt(e,t,n){let r=e.now(),i=Rt(e);t.limit={blocked:!0,blockedSince:r,resetAt:n,nextAttemptAt:i?n:null,attempts:0,weekly:!1,autoContinue:i,autoContinueOverride:null,queuePos:i?1:null,resuming:!1,first:!1},t.turnActive=!1,t.idle=!0,t.idleSince=r,delete t.turnStartedAt,e.broadcast({t:`session.updated`,session:t});let a=i?`auto-continue after the reset (~${Ft(n)})`:`auto-continue is off — resume manually`;return zt(e,t,`blocked`,`Session stopped at the Claude usage limit.`,a.charAt(0).toUpperCase()+a.slice(1)+`.`),Bt(e,t,`Usage limit · ${t.title}`,a),i}function Ht(e,t){let n=t.limit;if(!n?.blocked)return`notBlocked`;let r=e.now();zt(e,t,`attempt`,`Auto-continue attempt 1 — typing "continue" into the session.`,``);let i=n.blockedSince?r-n.blockedSince:0;t.limit=Lt(n.autoContinue),Object.assign(t,{turnActive:!0,turnStartedAt:r,idle:!1,lastTurnAt:r}),delete t.idleSince,e.broadcast({t:`session.updated`,session:t});let a=i?` · blocked ${It(i)}`:``;return zt(e,t,`resumed`,`Usage limit lifted — session resumed.`,`1 attempt${a}`),Bt(e,t,`Session resumed · ${t.title}`,`usage limit lifted after 1 attempt${a} — work continues`),`continued`}var Ut=`\x1B[38;2;215;119;87m`,Wt=`\x1B[0m`,Gt=`\x1B[1m`,Kt=`\x1B[38;5;246m`,O=(e,t=`Opus 5.5`)=>`\r
2
- \r
3
- \r
4
- ${Ut} ▐▛███▛█${Wt} ${Gt}Claude Code${Wt} ${Kt}v2.1.292${Wt}\r\n${Ut}▝▜██████▀${Wt} ${Kt}${t} · Claude Max${Wt}\r\n${Ut} ▝▝ ▝▝ ${Wt} ${Kt}${e}${Wt}\r\n\r\n`,qt=O(`{cwd}`),k=`\x1B[`,Jt=/\x1b\[[0-9;?]*[A-Za-z]/g,A=`${k}0m`,Yt=`${k}38;5;246m`,Xt=`${k}38;5;244m`,Zt=`${k}38;2;215;119;87m`,Qt=`${k}38;5;114m`,$t=`${k}48;5;237m`,en=e=>[...e.replace(Jt,``)].length;function tn(e,t,n){if(!Number.isFinite(t)||en(e)<=t)return[e];let r=e.match(/\x1b\[[0-9;?]*[A-Za-z]|\s+|[^\s\x1b]+/g)??[],i=[],a=``,o=0,s=``,c=` `.repeat(n),l=()=>{i.push(a+A),a=c+s,o=n};for(let e of r){if(e.startsWith(`\x1B`)){a+=e,s=e===A||e===`${k}m`?``:s+e;continue}if(/^\s+$/.test(e)){if(o+e.length>t){l();continue}(o>n||i.length===0)&&(a+=e,o+=e.length);continue}let r=[...e];for(o+r.length>t&&o>n&&(a=a.replace(/\s+$/,``),l());o+r.length>t;){let e=Math.max(1,t-o);a+=r.slice(0,e).join(``),r=r.slice(e),l()}a+=r.join(``),o+=r.length}return a.trim()&&i.push(a),i}function nn(e){let t=e.replace(Jt,``),n=/^(?:\x1b\[[0-9;]*m)*>(?:\x1b\[[0-9;]*m)* (.*)$/.exec(e);if(n)return{text:`${$t}${Yt}❯ ${k}38;5;255m${n[1]}${A}`,hang:2,block:!0};if(t.startsWith(`● `)){let t=/^(?:\x1b\[[0-9;]*m)*● ([A-Z][A-Za-z]*)(?:\x1b\[[0-9;]*m)*\((.*)$/.exec(e);return t?{text:`${Qt}⏺${A} ${k}1m${t[1]}${A}(${t[2]}`,hang:2,block:!0}:{text:e.replace(`● `,`⏺ `),hang:2,block:!0}}return t.startsWith(` ⎿`)?{text:e.replace(/\x1b\[2m/g,Yt),hang:5,block:!1}:{text:e,hang:0,block:!1}}function rn(e,t,n){let r=e.replace(/\r\n?/g,`
5
- `).replace(/\n$/,``).split(`
6
- `),i=[],a=n;for(let e of r){if(!e.replace(Jt,``).trim()){i.push(``),a=!0;continue}let n=nn(e);n.block&&!a&&i.push(``),i.push(...tn(n.text,t,n.hang)),a=!1}return{lines:i,endsBlank:a}}function an(e,t,n,r=!0){let i=Math.max(10,Math.min(Number.isFinite(t)?t:80,200)),a=`${Xt}${`─`.repeat(i)}${A}`,o=r?[]:[``];if(e?.turnActive&&!e.awaitingInput){let t=e.turnStartedAt?Math.max(1,Math.round((n-e.turnStartedAt)/1e3)):1;o.push(`${Zt}✻ Cooking…${A} ${Yt}(${t}s · esc to interrupt)${A}`,``)}return o.push(a,`${Yt}❯${A} `,a,`${Yt} ? for shortcuts${A}`),o}var on=e=>e>0?`\r${e>1?`${k}${e-1}A`:``}${k}J`:``,sn=e=>e.join(`\r
7
- `),cn=32e3,ln=`\r
8
- ● \x1B[2mThis demo has no scripted answer to that prompt. On your own desktop, claude would answer here.\x1B[0m\r
9
- `,un=`That session is closed — open a new one from the repo list.`,dn=qt,fn=e=>e.sessions??=[],j=(e,t)=>fn(e).find(e=>e.id===t),pn=e=>e.split(`/`).filter(Boolean).pop()??e;function mn(e,t,n,r=!1){if(!n)return;let i=yn(e,t);i.log=(i.log??``)+n,i.log.length>cn&&(i.log=i.log.slice(i.log.length-cn));let a=rn(n,i.cols??80,i.endsBlank??!0);i.endsBlank=a.endsBlank,gn(e,t,i,a.lines.length?sn(a.lines)+`\r
10
- `:``,r)}function hn(e,t){let n=e.m.screens?.[t];n?.log!=null&&gn(e,t,n,``,!1)}function gn(e,t,n,r,i){let a=an(j(e.m,t),n.cols??80,e.now(),n.endsBlank??!0),o=on(n.foot??0)+r+sn(a);n.foot=a.length,_n(e,t,n,o,i)}function _n(e,t,n,r,i,a=!1){let o=Dt(r);n.data=a?r:n.data+r,n.seq+=o.length,n.data.length>cn*2&&(n.data=n.data.slice(n.data.length-cn*2)),i||e.toSession(t,{t:`pty`,id:t,dataB64:kt(o),seq:n.seq})}function vn(e,t,n=!1){let r=e.m.screens?.[t];if(!r)return;let i=rn(r.log??``,r.cols??80,!0);r.endsBlank=i.endsBlank;let a=an(j(e.m,t),r.cols??80,e.now(),i.endsBlank);r.foot=a.length,_n(e,t,r,`\x1b[?25l\x1b[2J\x1b[3J\x1b[H${sn([...i.lines,...a])}`,n,!0)}function yn(e,t){let n=e.m.screens??={},r=n[t]??={data:``,seq:0};return r.log??(r.log=r.data,r.data=``,vn(e,t,!0)),r}function bn(e,t,n,r){if(!e.m.screens?.[t])return null;let i=yn(e,t),a=Dt(i.data),o=i.seq-a.length;return n!=null&&(!r||r===e.bootId)&&n>=o&&n<=i.seq?n===i.seq?null:{dataB64:kt(a.slice(n-o)),seq:i.seq}:{dataB64:kt(a),seq:i.seq,full:!0}}function xn(e,t){let n=e.screens?.[t];return rn(n?n.log??n.data:``,1/0,!0).lines.map(e=>e.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,``))}function Sn(e,t,n,r=[]){let i=j(e.m,t);if(i){Object.assign(i,n);for(let e of r)delete i[e];(`contextSpark`in n||`running`in n)&&Mt(e,i),e.broadcast({t:`session.updated`,session:i}),(`turnActive`in n||`awaitingInput`in n||r.includes(`turnActive`))&&hn(e,t)}}function Cn(e,t){let n=e.now(),r={id:D(e.m,`demo`),cwd:t.cwd,title:t.title||pn(t.cwd),remoteControl:!1,running:!0,createdAt:n,idle:!0,idleSince:n,liveMode:`default`};return fn(e.m).push(r),(e.m.screens??={})[r.id]={data:``,seq:0,cols:t.cols,rows:t.rows,log:(e.m.banner??dn).replaceAll(`{repo}`,pn(t.cwd)).replaceAll(`{cwd}`,t.cwd)},vn(e,r.id,!0),e.broadcast({t:`session.created`,session:r}),r}function wn(e,t){let n=j(e.m,t);return n?(n.running&&(n.running=!1,delete n.prompt,delete n.turnActive,e.m.boxes&&delete e.m.boxes[t],e.m.timeline=(e.m.timeline??[]).filter(e=>e.sessionId!==t),e.broadcast({t:`session.exit`,id:t,code:null}),e.broadcast({t:`session.updated`,session:n})),!0):!1}function Tn(e,t){let n=j(e.m,t);wn(e,t),e.m.sessions=fn(e.m).filter(e=>e.id!==t),e.m.screens&&delete e.m.screens[t],e.m.composer&&delete e.m.composer[t],n&&((e.m.closed??=[]).unshift({id:t,cwd:n.cwd,title:n.title,closedAt:e.now(),closedBy:`you`,firstPrompt:n.firstPrompt,lastPrompt:n.lastPrompt,...n.followUp?{followUp:n.followUp}:{}}),e.broadcast({t:`session.closed`,id:t,shellsStopped:0,shellsLeft:0}),e.broadcast({t:`closed.list`,closed:e.m.closed})),e.broadcast({t:`session.list`,sessions:fn(e.m)})}function En(e,t,n,r){let i=(e.m.history??={})[t]??=[],a=D(e.m,`h`);for(;i.some(e=>e.id===a);)a=D(e.m,`h`);i.push({id:a,kind:r,text:n,sentAt:e.now()})}function Dn(e,t,n,r=!0){let i=j(e.m,t);if(!i)return;let a=n.replace(/\r+$/,``);r&&mn(e,t,`\x1b[1m>\x1b[0m ${a}\r\n`),En(e,t,a,`prompt`);let o=e.now();if(On(e,t,a))return;Sn(e,t,{lastPrompt:a,firstPrompt:i.firstPrompt??a,turnActive:!0,turnStartedAt:o,idle:!1,lastTurnAt:o},[`idleSince`]);let s=a.toLowerCase(),c=(e.m.replies??[]).find(e=>(!e.match||s.includes(e.match.toLowerCase()))&&(!e.cwd||i.cwd===e.cwd||i.cwd.startsWith(`${e.cwd}/`))),l=c?[...c.steps]:[{kind:`output`,text:ln,afterMs:400}];l.push({kind:`turnEnd`}),An(e,t,l)}function On(e,t,n){let r=/^\/effort\s+(?:ultracode\s+(on|off)|(low|medium|high|xhigh|max))\s*$/i.exec(n.trim());if(!r)return!1;if(r[1]){let n=r[1].toLowerCase()===`on`;mn(e,t,n?`Ultracode on for this session\r
11
- `:`Ultracode off\r
12
- `),Sn(e,t,{ultracode:n})}else{let n=r[2].toLowerCase();mn(e,t,`Set effort level to ${n}\r\n`),Sn(e,t,{effort:n})}return!0}function kn(e,t,n){let r=j(e.m,t);if(!r||!r.running)return{ok:!1,reason:un};let i=r.liveMode??r.permissionMode??`default`,a=[`default`,`acceptEdits`,`plan`,`auto`];return r.permissionMode===`bypassPermissions`&&a.push(`bypassPermissions`),a.includes(n)?(Sn(e,t,{liveMode:n}),{ok:!0,mode:n}):{ok:!1,mode:i,reason:`${n} is not in this session’s shift+tab cycle — it exists only in a session launched with it.`}}function An(e,t,n,r=e.now()){let i=e.m.timeline??=[],a=r;for(let r=0;r<n.length;r++){let{afterMs:o,...s}=n[r];a+=Math.max(0,o??0);let c=e.m.minted=(e.m.minted??0)+1;if(s.kind===`prompt`||s.kind===`clock`||s.kind===`autoContinue`||s.kind===`wall`){i.push({at:a,n:c,sessionId:t,step:s,rest:n.slice(r+1)});return}i.push({at:a,n:c,sessionId:t,step:s})}}function jn(e){let t=!1;for(;;){let n=e.m.timeline??[],r=e.now(),i=-1;if(n.forEach((e,t)=>{e.at<=r&&(i<0||e.at<n[i].at||e.at===n[i].at&&e.n<n[i].n)&&(i=t)}),i<0)return t;let[a]=n.splice(i,1);Fn(e,a.step,a.sessionId,a.rest),t=!0}}function Mn(e,t){let n=t-e.now();n>0&&(e.m.clockShift=(e.m.clockShift??0)+n)}function Nn(e,t){switch(t.t){case`usage.status`:(e.numbers??={}).usage=t.usage;return;case`decisions.log`:e.decisions=t.entries;return;case`notification.list`:e.notifications=t.items;return;case`limit.config`:e.limitConfig={enabled:t.enabled,...t.mode?{mode:t.mode}:{}};return;case`netretry.config`:e.netRetry={enabled:t.enabled,...t.envOff?{envOff:!0}:{}};return;case`intent.list`:e.intents=t.intents;return;default:return}}var Pn=e=>(e.timeline??[]).reduce((e,t)=>e==null||t.at<e?t.at:e,null);function Fn(e,t,n,r=[]){if(t.kind===`frame`){t.keep&&Nn(e.m,t.msg),e.broadcast(t.msg);return}if(t.kind===`clock`){Mn(e,t.to),An(e,n,r);return}if(t.kind===`usage`){let n={...t.usage,checkedAt:e.now()};(e.m.numbers??={}).usage=n,e.broadcast({t:`usage.status`,usage:n});return}let i=t.sessionId??n;if(i&&j(e.m,i)?.running)switch(t.kind){case`output`:mn(e,i,t.text);return;case`session`:Sn(e,i,t.patch,t.unset);return;case`prompt`:(e.m.boxes??={})[i]={answers:t.answers??{},rest:r},Sn(e,i,{prompt:t.prompt,awaitingInput:!0});return;case`turnEnd`:Rn(e,i);return;case`facts`:{let n=(e.m.history?.[i]??[]).filter(e=>e.kind===`prompt`).at(-1);if(!n)return;((e.m.turnFacts??={})[i]??={})[n.id]=t.facts,n.outputAt??=e.now();let r=e.m.numbers?.context?.[i];r&&Array.isArray(r.samples)&&t.facts.ctxTok&&(r.samples.push({t:e.now(),tok:t.facts.ctxTok}),typeof r.turns==`number`&&(r.turns+=1),r.updatedAt=e.now());return}case`artifact`:In(e,i,t.repoId,t.relPath,t.size);return;case`deliverable`:Ln(e,i,t.repoId,t.relPath,t.size);return;case`wall`:{let n=j(e.m,i);if(!n)return;Vt(e,n,t.resetAt)&&An(e,i,[{kind:`autoContinue`},...t.resumed??[],...r],Math.max(e.now(),t.resetAt)),An(e,i,t.meanwhile??[]);return}case`autoContinue`:{let t=j(e.m,i);if(!t||Ht(e,t)!==`continued`)return;mn(e,i,`\x1B[1m>\x1B[0m continue\r
13
- `),En(e,i,`continue (auto, usage limit reset)`,`backlog`),An(e,i,r);return}}}function In(e,t,n,r,i){let a=e.now(),o=r.slice(r.lastIndexOf(`/`)+1),s=(e.m.gallery??={})[n]??=[];s.some(e=>e?.relPath===r)||s.unshift({name:o,relPath:r,size:i,mtime:a,ctime:a});let c=(e.m.repos??[]).find(e=>!!e&&typeof e==`object`&&e.id===n);c&&(c.outboxCount=(c.outboxCount??0)+1),e.broadcast({t:`session.images`,id:t,repoId:n,images:[{name:o,relPath:r,mtime:a}]});let l={id:D(e.m,`n`),ts:a,kind:`image`,title:`New screenshot in ${c?.repoName??`the repo`}`,body:o,sessionId:t,image:{repoId:n,relPath:r}};(e.m.notifications??=[]).unshift(l),e.broadcast({t:`notification`,item:l})}function Ln(e,t,n,r,i){let a=e.now(),o=r.slice(r.lastIndexOf(`/`)+1),s=(e.m.gallery??={})[n]??=[];s.some(e=>e?.relPath===r)||s.unshift({name:o,relPath:r,size:i,mtime:a,ctime:a});let c=(e.m.repos??[]).find(e=>!!e&&typeof e==`object`&&e.id===n);c&&(c.outboxCount=(c.outboxCount??0)+1);let l=`${(i/1048576).toFixed(1)} MB`,u={id:D(e.m,`n`),ts:a,kind:`artifact`,title:`Outbox: ${o}`,body:`${l} · ${j(e.m,t)?.title??`this session`} — tap to download`,sessionId:t,file:{repoId:n,relPath:r,name:o,size:i,mtime:a}};(e.m.notifications??=[]).unshift(u),e.broadcast({t:`notification`,item:u})}function Rn(e,t){let n=e.now();Sn(e,t,{turnActive:!1,idle:!0,idleSince:n,awaitingInput:!1},[`turnStartedAt`]);let r=e.m.backlog?.items??[],i=!1;for(let e of r)e.status===`running`&&e.sessionId===t&&(e.status=`done`,e.finishedAt=n,i=!0);i&&e.broadcast(zn(e.m))}function zn(e){return{t:`backlog.list`,items:e.backlog?.items??[],auto:e.backlog?.auto??!1,idleMs:e.backlog?.idleMs??6e4}}function Bn(e,t,n){let r=j(e.m,t),i=e.m.boxes?.[t]??{answers:{},rest:[]},a=r?.prompt?.options.find(e=>String(e.index)===n)?.label;e.m.boxes&&delete e.m.boxes[t],Sn(e,t,{awaitingInput:!1},[`prompt`]),a&&mn(e,t,`\x1b[2m ⎿ ${a}\x1b[0m\r\n`),An(e,t,[...i.answers[n]??i.answers[`*`]??[],...i.rest])}function Vn(e,t){Fn(e,{kind:`prompt`,sessionId:t,prompt:{kind:`tool`,question:`Do you want to make this edit to src/todo.ts?`,options:[{index:1,label:`Yes`},{index:2,label:`No, and tell Claude what to do differently`}]}})}function Hn(e,t){let n=j(e.m,t.id);if(!n||!n.running)return{ok:!1,reason:un};if(t.expectPrompt){if(!d(n.prompt,t.expectPrompt))return{ok:!1,state:`stale`,reason:n.prompt?`that question was replaced by a different one`:`that question is no longer open`};let r=/^(\d{1,2})\r?$/.exec(t.data??``),i=t.promptSubmit?`submit`:t.promptChoice==null?r?r[1]:t.data===`\x1B`?`esc`:`*`:String(t.promptChoice);return Bn(e,t.id,i),{ok:!0}}return t.submit?(Dn(e,t.id,t.data),{ok:!0,state:`ok`}):(Un(e,t.id,t.data??``),{ok:!0})}function Un(e,t,n){let r=e.m.composer??={},i=j(e.m,t);if(i?.prompt){let r=/^(\d{1,2})\r?$/.exec(n);if(r&&!i.prompt.multi){Bn(e,t,r[1]);return}if(n===`\x1B`){Bn(e,t,`esc`);return}}for(let i of n.match(/\x1b\[[0-9;?]*[A-Za-z~]|\x1b.?|[\s\S]/g)??[])if(i===`\r`||i===`
14
- `){let n=r[t]??``;r[t]=``,n.trim()&&(mn(e,t,`\r
15
- `),Dn(e,t,n,!1))}else i===``||i===`\b`?r[t]&&(r[t]=r[t].slice(0,-1),mn(e,t,`\b \b`)):i>=` `&&!i.startsWith(`\x1B`)&&(r[t]=(r[t]??``)+i,mn(e,t,i))}var Wn=`Builds run commands on your desktop — the demo has no desktop to run them on. Connect your own to build.`;function Gn(e,t){let n=e.m.builds;if(!n)return{ok:!1,reason:Wn};let r=n.refuse?.[t.buildId];if(r)return{ok:!1,reason:r};let i=t.repoDir===n.repoDir?n.list.find(e=>e.id===t.buildId):void 0;if(!i)return{ok:!1,reason:`unknown build`};let a={runId:D(e.m,`br`),repoDir:n.repoDir,buildId:i.id,name:i.name,cmd:i.cmd,cwd:n.repoDir,status:`running`,exitCode:null,startedAt:e.now()};return n.runs.unshift(a),e.broadcast({t:`build.run`,run:a}),{ok:!0,runId:a.runId}}function Kn(e,t,n){let r=(e.m.sessions??[]).find(e=>e.id===t||e.claudeSessionId===t);if(r){n?r.followUp||={by:`hand`,at:e.now()}:delete r.followUp,e.broadcast({t:`session.updated`,session:r});return}let i=(e.m.closed??[]).find(e=>(e.claudeSessionId??e.id)===t||e.id===t);i&&(n?i.followUp||={by:`hand`,at:e.now()}:delete i.followUp,e.broadcast({t:`closed.list`,closed:e.m.closed??[]}))}function qn(e,t){if(!t.targetSessionId)return;let n=oe({id:t.id,cwd:t.repoDir,payload:{kind:`prompt`,steps:[t.text]},target:{kind:`session`,sessionId:t.targetSessionId},trigger:{kind:`idle`},auto:!0,pinned:t.autoFire||void 0,label:t.label,order:t.order,state:`queued`,createdAt:e.now()},e.now());n&&((e.m.intents??=[]).push(n),(e.m.runs??=[]).push(n.id),e.broadcast({t:`intent.changed`,intent:n}),Xn(e))}function Jn(e){let t=fn(e.m),n=(e.m.repos??[]).map(e=>e.worktreePath).filter(e=>!!e);return{present:new Set,sessions:t.map(e=>({id:e.id,cwd:e.cwd,running:e.running,turnStartedAt:e.turnStartedAt,turnActive:e.turnActive,limitBlocked:e.limit?.blocked,promptKind:e.prompt?.kind,awaitingInput:e.awaitingInput,convId:e.claudeSessionId,block:pe(e)})),busyCwds:new Set,busySessions:new Set((e.m.intents??[]).filter(e=>e.state===`running`||e.state===`starting`).map(e=>e.sessionId).filter(e=>!!e)),budgetHeldSessions:new Set(t.filter(se).map(e=>e.id)),budgetBlocked:!1,autoFire:e.m.backlog?.auto??!1,knownDirs:new Set(n),hostBusy:!1,autoSlotsFree:1}}var Yn=(e,t)=>(e.m.backlog?.items??[]).find(e=>e.id===t);function Xn(e){let t=new Set(e.m.runs??[]);if(t.size)for(let n of e.m.intents??[]){if(!t.has(n.id))continue;if(n.state===`running`){Zn(e,n);continue}if(n.state!==`queued`&&n.state!==`blocked`)continue;let r=h(n,Jn(e),e.now());if(r.kind===`wait`){if(n.state===`blocked`&&n.blockReason===r.reason&&n.blockDetail===r.detail)continue;Object.assign(n,{state:`blocked`,blockReason:r.reason,blockDetail:r.detail}),e.broadcast({t:`intent.changed`,intent:n});continue}if(r.kind===`fail`)continue;let i=r.sessionId??(n.target.kind===`session`?n.target.sessionId:void 0),a=i?j(e.m,i):void 0;if(!a||n.payload.kind!==`prompt`)continue;let o=e.now();Object.assign(n,{state:`running`,startedAt:o,sessionId:a.id}),delete n.blockReason,delete n.blockDetail,e.broadcast({t:`intent.changed`,intent:n});let s=Yn(e,n.id);s&&(Object.assign(s,{status:`running`,sessionId:a.id,startedAt:o}),e.broadcast(zn(e.m))),Dn(e,a.id,n.payload.steps[0])}}function Zn(e,t){let n=t.sessionId?j(e.m,t.sessionId):void 0;if(n&&(n.turnActive||n.limit?.blocked))return;let r=e.now();Object.assign(t,{state:`done`,settledAt:r,result:{at:r,ok:!0,detail:`ran in ${n?.tabTitle??n?.title??`the session`}`}}),e.broadcast({t:`intent.changed`,intent:t})}var Qn={tier:`B`},M=e=>({tier:`B`,reason:e}),$n=M(Wn),er=M(`Screenshots are taken on your desktop's screen — connect your own desktop to capture one.`),tr=M(`An assessment spends model calls on your desktop — connect your own to run one.`),nr=M(`Fanning out opens sessions in several repos on your desktop — connect your own to try it.`),rr=M(`The password gate guards a real desktop — the demo has nothing to lock.`),ir=M(`Plugins run on your desktop, and the demo has none installed.`),ar=M(`Local models run on your desktop — the demo has none loaded.`),or=M(`Updating claude happens on your desktop — the demo's claude is not a real install.`),sr=M(`Usage-limit resumes need a real claude session — the demo never hits a limit of its own.`),cr=M(`The network-error retry types into a real claude session on your desktop — the demo's sessions never lose the network.`),lr=M(`This reads the real conversation log on your desktop — the demo keeps no logs.`),N=M(`The demo keeps your waiting work but does not start it — on your own desktop it would run here.`),ur=M(`A live desktop streams your own screen, and the demo has no desktop to show.`),P=M(`The demo keeps no records on disk to change — this needs your own desktop.`),dr=e=>e.plugins??[],F=e=>e.desk.m,fr=e=>(e.backlog??={}).items??=[],pr=e=>e.intents??=[];function mr(e,t){let n=e.desk,r=fr(n.m).find(e=>e.id===t);if(!r||r.status!==`queued`)return;let i=r.targetSessionId?j(n.m,r.targetSessionId):void 0,a=i?.running?i.id:Cn(n,{cwd:r.repoDir,title:`backlog · ${r.label??r.text.slice(0,40)}`}).id;Object.assign(r,{status:`running`,sessionId:a,startedAt:n.now()}),n.broadcast(zn(n.m)),Dn(n,a,r.text)}var hr=[{id:`claude`,label:`Claude Code`,caps:{contextMeter:!0,usageLimits:!0,transcript:!0,slash:!0,promptBoxes:!0,hooks:!0,effort:!0,remoteControl:!0,permissionModes:[`default`,`plan`,`acceptEdits`,`auto`,`dontAsk`,`bypassPermissions`]},models:{aliases:[`opus`,`sonnet`,`haiku`],ids:[`claude-opus-5-5`,`claude-sonnet-5`,`claude-haiku-4-5`]}}],gr=e=>({ok:!0,sessionPct:42,weeklyPct:61,checkedAt:e-12e4,sessionResetAt:e+78e5,weeklyResetAt:e+2772e5});function _r(e){let t=e.numbers??{};return[{t:`backends`,list:hr},{t:`session.list`,sessions:fn(e)},{t:`recent.list`,recent:e.recent??[]},{t:`closed.list`,closed:e.closed??[]},zn(e),t.update?{t:`update.status`,info:t.update}:null,{t:`plugin.list`,plugins:dr(e)},{t:`decisions.log`,entries:(e.decisions??[]).slice(0,100)},t.usage?{t:`usage.status`,usage:t.usage}:null,t.meter?{t:`meter.status`,summary:t.meter}:null,{t:`notification.list`,items:e.notifications??[]},t.notifyPrefs?{t:`notify.prefs`,prefs:t.notifyPrefs}:null,t.budget?{t:`budget.state`,budget:t.budget.budget,verdict:t.budget.verdict}:null,{t:`limit.config`,enabled:e.limitConfig?.enabled??!1,resumingId:null,holdUntil:null,...e.limitConfig?.mode?{mode:e.limitConfig.mode}:{}},{t:`netretry.config`,...e.netRetry??{enabled:!0}},{t:`fanout.list`,runs:[]},{t:`pull.list`,items:e.pulls??[]},{t:`schedule.list`,entries:e.schedules??[]},{t:`launch.list`,launches:e.launches??[]},{t:`intent.list`,intents:e.intents??[]},{t:`delivery.list`,items:e.deliveries??[]},{t:`settings.all`,doc:e.settings??{}},t.clihealth?{t:`clihealth`,health:t.clihealth.health,rollup:t.clihealth.rollup}:null].filter(e=>!!e)}var vr={ping:{tier:`A`,run:e=>{e.reply({t:`pong`})}},hello:{tier:`A`,run:()=>{}},"session.list":{tier:`A`,run:e=>{e.reply({t:`session.list`,sessions:fn(F(e))})}},"session.create":{tier:`A`,run:e=>{let{msg:t,desk:n}=e;if(!Tt(n.m,t.cwd))return{ok:!1,reason:Et};if(t.forkAtTurn)return{ok:!1,reason:`Forking cuts the real conversation log on your desktop — the demo keeps none.`};t.replaceSessionId&&wn(n,t.replaceSessionId);let r=Cn(n,{cwd:t.cwd,title:t.title,cols:t.cols,rows:t.rows});e.attach(r.id),t.budget&&Nt(n,r.id,t.budget);let i=t.prompt?.trim();return i&&Dn(n,r.id,i),{ok:!0,sessionId:r.id}}},"session.attach":{tier:`A`,run:e=>{e.attach(e.msg.id);let t=bn(e.desk,e.msg.id,e.msg.resumeSeq,e.msg.resumeBoot);t&&e.reply({t:`pty`,id:e.msg.id,...t}),e.reply({t:`session.history`,id:e.msg.id,entries:F(e).history?.[e.msg.id]??[]})}},"session.detach":{tier:`A`,run:e=>{e.detach(e.msg.id)}},"session.resize":{tier:`A`,run:e=>{let t=F(e).screens?.[e.msg.id];if(!t)return;let n=t.cols!==e.msg.cols;t.cols=e.msg.cols,t.rows=e.msg.rows,n&&t.log!=null&&vn(e.desk,e.msg.id)}},"session.kill":{tier:`A`,run:e=>{wn(e.desk,e.msg.id)}},"session.remove":{tier:`A`,run:e=>{Tn(e.desk,e.msg.id)}},"session.input":{tier:`A`,run:e=>Hn(e.desk,e.msg)},"session.history":{tier:`A`,run:e=>{e.reply({t:`session.history`,id:e.msg.id,entries:F(e).history?.[e.msg.id]??[]})}},"session.record":{tier:`A`,run:e=>{j(F(e),e.msg.id)&&En(e.desk,e.msg.id,e.msg.text,e.msg.kind)}},"recent.list":{tier:`A`,run:e=>{e.reply({t:`recent.list`,recent:F(e).recent??[]})}},"delivery.list":{tier:`A`,run:e=>{e.reply({t:`delivery.list`,items:F(e).deliveries??[]})}},"backlog.list":{tier:`A`,run:e=>{e.reply(zn(F(e)))}},"backlog.add":{tier:`A`,run:e=>{let{msg:t,desk:n}=e;if(!Tt(n.m,t.repoDir))return{ok:!1,reason:Et};if(!t.text?.trim())return{ok:!1,reason:`There is nothing to queue — the text is empty.`};let r=fr(n.m),i=D(n.m,`b`);if(r.push({id:i,text:t.text,status:`queued`,repoDir:t.repoDir,createdAt:n.now(),order:r.reduce((e,t)=>Math.max(e,t.order),0)+1,...t.label?{label:t.label}:{},...t.targetSessionId?{targetSessionId:t.targetSessionId}:{},...t.autoFire==null?{}:{autoFire:t.autoFire},...t.resume==null?{}:{resume:t.resume},...t.closeWhenDone==null?{}:{closeWhenDone:t.closeWhenDone}}),n.broadcast(zn(n.m)),t.fire)mr(e,i);else if(t.targetSessionId&&t.autoFire){let e=r.find(e=>e.id===i);e&&qn(n,e)}return{ok:!0,itemId:i}}},"backlog.remove":{tier:`A`,run:e=>{let t=F(e);t.backlog={...t.backlog,items:fr(t).filter(t=>t.id!==e.msg.id)},e.broadcast(zn(t))}},"backlog.fire":{tier:`A`,run:e=>{mr(e,e.msg.id)}},"backlog.update":{tier:`A`,run:e=>{let{msg:t}=e,n=fr(F(e)).find(e=>e.id===t.id);if(!n){e.reply({t:`toast`,text:`backlog: that item is gone`});return}if(t.repoDir!==void 0&&!Tt(F(e),t.repoDir)){e.reply({t:`toast`,text:Et});return}let r={text:t.text,label:t.label,repoDir:t.repoDir,targetSessionId:t.targetSessionId,autoFire:t.autoFire,resume:t.resume,headline:t.headline,category:t.category};for(let[e,t]of Object.entries(r))t!==void 0&&(n[e]=t);t.closeWhenDone===null?delete n.closeWhenDone:typeof t.closeWhenDone==`boolean`&&(n.closeWhenDone=t.closeWhenDone),e.broadcast(zn(F(e)))}},"schedule.list":{tier:`A`,run:e=>{e.reply({t:`schedule.list`,entries:F(e).schedules??[]})}},"schedule.save":{tier:`A`,run:e=>{let t=e.msg.entry;if(!t||typeof t.id!=`string`||!t.id)return{ok:!1,reason:`nothing to run (pick repos and write a prompt)`};let n=null;try{n=t.enabled?l(t.rule,e.now):null}catch{n=null}let r=F(e),i=r.schedules??=[],a={...t,nextAt:n},o=i.findIndex(e=>e.id===t.id);return o>=0?i[o]=a:i.push(a),e.broadcast({t:`schedule.list`,entries:i}),{ok:!0,intentId:t.id}}},"schedule.remove":{tier:`A`,run:e=>{let t=F(e);t.schedules=(t.schedules??[]).filter(t=>t.id!==e.msg.id),e.broadcast({t:`schedule.list`,entries:t.schedules})}},"intent.list":{tier:`A`,run:e=>{e.reply({t:`intent.list`,intents:F(e).intents??[]})}},"intent.post":{tier:`A`,run:e=>{let t=e.msg.intent;if(!Tt(F(e),t?.cwd))return{ok:!1,reason:Et};let n=pr(F(e)),r=n.find(e=>e.id===t.id),i=r??oe({...t,state:`queued`,createdAt:e.now},e.now);return i?(r||n.push(i),e.broadcast({t:`intent.changed`,intent:i}),{ok:!0,intentId:i.id,launchId:i.trigger.kind===`files`?i.id:void 0}):{ok:!1,reason:`That request could not be read, so nothing was written down.`}}},"intent.dismiss":{tier:`A`,run:e=>{let t=pr(F(e)).find(t=>t.id===e.msg.id);t&&t.dismissedAt==null&&[`done`,`failed`,`canceled`].includes(t.state)&&(t.dismissedAt=e.now,e.broadcast({t:`intent.changed`,intent:t}))}},"settings.get":{tier:`A`,run:e=>{e.reply({t:`settings.all`,doc:F(e).settings??{}})}},"settings.set":{tier:`A`,run:e=>{let{key:t,value:n,ts:r,device:i}=e.msg,a=F(e).settings??={},o=a[t];o&&o.ts>r?e.reply({t:`settings.update`,key:t,value:o.value,ts:o.ts,...o.device?{device:o.device}:{}}):(a[t]={value:n,ts:r,...i?{device:i}:{}},e.broadcast({t:`settings.update`,key:t,value:n,ts:r,...i?{device:i}:{}}))}},"usage.get":{tier:`A`,run:e=>{let t=F(e).numbers?.usage;t&&e.reply({t:`usage.status`,usage:t})}},"update.status":{tier:`A`,run:e=>{let t=F(e).numbers?.update;t&&e.reply({t:`update.status`,info:t})}},"notification.get":{tier:`A`,run:e=>{e.reply({t:`notification.list`,items:F(e).notifications??[]})}},"budget.get":{tier:`A`,run:e=>{let t=F(e).numbers?.budget;t&&e.reply({t:`budget.state`,budget:t.budget,verdict:t.verdict})}},"billing.get":{tier:`A`,run:()=>{}},"clihealth.get":{tier:`A`,run:e=>{let t=F(e).numbers?.clihealth;t&&e.reply({t:`clihealth`,health:t.health,rollup:t.rollup})}},"clihealth.clear":{tier:`A`,run:e=>{let t=F(e).numbers?.clihealth;t&&e.reply({t:`clihealth`,health:t.health,rollup:t.rollup})}},"meter.get":{tier:`A`,run:e=>{let t=F(e).numbers?.meter;t&&e.reply({t:`meter.status`,summary:t})}},"artifacts.get":{tier:`A`,run:e=>{Tt(F(e),e.msg.repoDir)&&e.reply({t:`artifacts.config`,repoDir:e.msg.repoDir,policy:F(e).artifactPolicies?.[e.msg.repoDir]??ue})}},"pull.list":{tier:`A`,run:e=>{e.reply({t:`pull.list`,items:F(e).pulls??[]})}},"plugin.list":{tier:`A`,run:e=>{e.reply({t:`plugin.list`,plugins:dr(F(e))})}},"auth.get":{tier:`A`,run:e=>{e.reply({t:`auth.state`,auth:{enabled:!1,gateTailscale:!1,canManage:!1}})}},"decisions.get":{tier:`A`,run:e=>{let t=e.msg.sessionId,n=(F(e).decisions??[]).filter(e=>!t||e.sessionId===t).slice(0,200);e.reply({t:`decisions.log`,entries:n,sessionId:t})}},"sent.get":{tier:`A`,run:e=>{let t=e.msg.sessionId;e.reply({t:`sent.log`,entries:(F(e).sent??[]).filter(e=>!t||e.sessionId===t),sessionId:t})}},"build.list":{tier:`A`,run:e=>{let t=F(e).builds?.repoDir===e.msg.repoDir?F(e).builds:void 0;e.reply({t:`build.list`,repoDir:e.msg.repoDir,builds:t?.list??[],runs:t?.runs??[]})}},"capture.list":{tier:`A`,run:e=>{e.reply({t:`capture.list`,repoDir:e.msg.repoDir,targets:[],runs:[],backends:[]})}},"fanout.list":{tier:`A`,run:e=>{e.reply({t:`fanout.list`,runs:[]})}},"launch.list":{tier:`A`,run:e=>{e.reply({t:`launch.list`,launches:F(e).launches??[]})}},"assess.state":{tier:`A`,run:e=>{e.reply({t:`assess.state`,repoDir:e.msg.repoDir??``,run:null})}},"session.name":lr,"session.fork":lr,"session.reopen":M(`Reopening resumes a conversation from your desktop's log — open a new session in the demo instead.`),"session.mode":{tier:`A`,run:e=>kn(e.desk,e.msg.id,e.msg.mode)},"session.budget.set":{tier:`A`,run:e=>{let t=Nt(e.desk,e.msg.id,e.msg.budget);t&&e.reply({t:`toast`,text:t})}},"session.rename":P,"session.star":P,"session.followup":{tier:`A`,run:e=>Kn(e.desk,e.msg.id,e.msg.on)},"session.pin":P,"session.background":Qn,"session.closecheck":M(`The close check reads git on your desktop — the demo has no working tree.`),"session.search":lr,"session.remoteControl":Qn,"session.ackAsking":Qn,"session.netRetryCancel":Qn,"session.netRetryNow":Qn,"signin.continue":Qn,"input.settle":Qn,"shell.kill":M(`The demo runs no background shells to stop.`),"backlog.archive":P,"backlog.check":tr,"backlog.continue":N,"backlog.done":P,"backlog.name":tr,"backlog.nextStep":N,"backlog.openRepoSession":N,"backlog.reorder":P,"backlog.setAuto":N,"backlog.swap":P,"backlog.validate":tr,"build.cancel":$n,"build.options":$n,"build.run":{tier:`A`,run:e=>Gn(e.desk,e.msg)},"build.save":$n,"build.scan":{tier:`A`,run:e=>{e.reply({t:`build.candidates`,repoDir:e.msg.repoDir,candidates:[],total:0})}},"capture.cancel":er,"capture.run":er,"capture.save":er,"assess.apply":tr,"assess.discard":tr,"assess.run":tr,"fanout.followup":nr,"fanout.run":nr,"artifacts.save":P,"auth.clear":rr,"auth.gateTailscale":rr,"auth.set":rr,"budget.set":P,"billing.set":P,"closed.clear":P,"decisions.archive":P,"decisions.archiveAll":P,"decisions.delete":P,"net.stalls":{tier:`A`,run:()=>{}},"intent.cancel":N,"intent.requeue":N,"intent.retarget":N,"intent.run":N,"intent.update":N,"intent.waive":N,"launch.cancel":N,"launch.run":N,"limit.first":sr,"limit.resume":sr,"limit.session":sr,"host.halt":M(`The demo has no AI processes to stop — on a real desktop this halts every agent session and holds automatic work until lifted.`),"limit.setAuto":sr,"netretry.set":cr,"limit.setMode":sr,"backends.recheck":Qn,"localrt.evict":ar,"localrt.watch":{tier:`A`,run:e=>{e.reply({t:`localrt.sample`,disabled:!0,sample:{at:e.now,models:[],reachable:!1,cpuPct:0,memTotal:0,memFree:0}})}},"notification.clear":P,"notification.handle":P,"notify.prefs.set":P,"plugin.action":ir,"plugin.call":ir,"plugin.enable":ir,"plugin.sessionAnswer":ir,"plugin.sessionToggle":ir,"plugin.set":ir,"pull.add":P,"pull.dismiss":P,"pull.get":P,"pull.save":P,"recent.clear":P,"schedule.run":N,"schedule.setEnabled":P,"schedule.skipNext":P,"sent.clear":P,"stream.ack":ur,"stream.close":ur,"stream.input":ur,"stream.keyframe":ur,"stream.open":ur,"stream.params":ur,"update.apply":or,"updates.apply":or,"updates.check":or,"updates.get":or,"update.check":or,"usage.refresh":{tier:`A`,run:e=>{let t=F(e).numbers?.usage;t&&e.reply({t:`usage.status`,usage:t})}}},yr=`~/dev/todo-garden`,br=`~/dev/pocket-notes`,xr=`~/dev/trail-log`,I=`claude-opus-5`,Sr=`claude-opus-5-5`,Cr=`claude-fable-5`,wr=`claude-fable-5-1`,Tr=`claude-sonnet-5`,Er=`claude-sonnet-5-5`,Dr=`claude-haiku-4-5`,L=36e5,Or=20261002,kr=3,Ar=12,jr=56e3,Mr=24e3,Nr=120,Pr=1.6,Fr={[yr]:[`make overdue tasks show a red edge`,`group the tasks by day`,`add a swipe to complete`,`persist the filter between launches`,`tidy the empty state`,`speed up the list on 2,000 tasks`,`recurring tasks every second Tuesday`,`undo for a deleted task`,`drag to reorder within a day`],[br]:[`the markdown export drops the title`,`search should ignore accents`,`pin a note to the top`,`autosave loses the last word`,`dark theme for the editor`,`tags with a colour each`],[xr]:[`import a GPX file and draw the route`,`elevation profile under the map`,`show distance per hour`,`merge two hikes into one`,`offline map tiles`,`photos pinned to the route`]},Ir=[{repo:yr,title:`rewrite the sync engine for offline edits`,back:9,at:9,spanH:25,sittings:4,model:I,turns:361,peak:43e4,agents:28,agentTurns:120,agentPeak:42e4},{repo:yr,title:`move every screen to the new design tokens`,back:4,at:8,spanH:14,sittings:3,model:I,turns:198,peak:36e4,agents:33,agentTurns:107,agentPeak:4e5},{repo:br,title:`end-to-end encryption for shared notebooks`,back:13,at:10,spanH:93,sittings:26,model:I,turns:319,peak:64e4,agents:18,agentTurns:132,agentPeak:46e4},{repo:yr,title:`split the 3,000-line store into modules`,back:2,at:9,spanH:10,sittings:2,model:I,turns:324,peak:3e5,agents:34,agentTurns:74,agentPeak:3e5},{repo:xr,title:`find why the route drifts on long hikes`,back:7,at:13,spanH:26,sittings:5,model:I,turns:626,peak:82e4,agents:0,agentTurns:0,agentPeak:0},{repo:br,title:`a plugin API for custom note types`,back:12,at:15,spanH:82,sittings:9,model:I,turns:380,peak:42e4,agents:6,agentTurns:112,agentPeak:38e4}];function Lr(e){let t=e>>>0;return()=>{t=t+1831565813>>>0;let e=t;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}}var Rr=[1.5,.9,.3,.15,.1,.1,1.4,2,4.1,6.2,11.8,11.5,10.1,8.5,9.3,10.3,11.8,10.3,6,7.2,15.3,15.5,13.6,3.3];function zr(e){let t=Lr(Or),n=(e,n)=>{let r=t()*n.reduce((e,t)=>e+t,0);for(let t=0;t<e.length;t++)if(r-=n[t],r<0)return e[t];return e[e.length-1]},r=(e,n)=>e+t()*(n-e),i=[],a=new Date(e);a.setHours(0,0,0,0);let s=(e,t=0)=>new Date(a.getFullYear(),a.getMonth(),a.getDate()-e,t).getTime(),c=0,l=new Map,u=e=>{let t=l.get(e)??0;return l.set(e,t+1),Fr[e][t%Fr[e].length]},d=()=>n([I,Tr,Cr,wr,Dr],[.5,.33,.06,.06,.05]),f=n=>{let a=`demo-tok-${c++}`,s=new Map,l=[],u=(t,n,r,i)=>{let a=ce(Math.min(n,e)),s=`${a}\u0000${r}`,c=t.get(s)??t.set(s,{hour:a,model:r,t:o()}).get(s);w(c.t,i)},d=Math.max(1,n.sittings),f=d===1?n.spanH:n.spanH*r(.45,.6),p=Array.from({length:d},()=>r(.6,1.4)),m=Array.from({length:d-1},()=>r(.4,1.6)),h=p.reduce((e,t)=>e+t,0),g=m.reduce((e,t)=>e+t,0)||1,_=[],v=n.start;for(let e=0;e<d;e++){let t=p[e]/h*f;_.push({from:v,hours:t,turns:Math.max(1,Math.round(p[e]/h*n.turns))}),v+=t*L,e<d-1&&(v+=Math.max(Pr,m[e]/g*(n.spanH-f))*L)}let y=0,ee=0;for(let i of _)for(let a=0;a<i.turns&&ee<n.turns;a++,ee++){let o=i.from+a/i.turns*i.hours*L,c=Math.round(n.base+(n.peak-n.base)*(ee/Math.max(1,n.turns-1))**.85*r(.97,1)),d=Math.round(r(100,n.model===`claude-haiku-4-5`?300:520)),f=1+Math.floor(t()*30);if(a===0)u(s,o,n.model,{input:f,output:d,cacheRead:0,cacheWrite:c,cacheWrite1h:n.oneHour?c:0,turns:1}),ee>0&&l.push({hour:ce(Math.min(o,e)),model:n.model,count:1,tok:c,tok1h:n.oneHour?c:0});else{let e=Math.max(300,c-y)+Math.round(t()*3200);u(s,o,n.model,{input:f,output:d,cacheRead:y,cacheWrite:e,cacheWrite1h:n.oneHour?e:0,turns:1})}y=c}i.push({convo:a,title:n.title,sub:!1,repo:n.repo,cells:[...s.values()],cold:l});for(let e of n.agents){let o=_[Math.floor(t()*_.length)],s=o.from+t()*o.hours*L,c=new Map,l=0;for(let n=0;n<e.turns;n++){let i=s+n/Nr*L,a=Math.round(Mr+(e.peak-Mr)*(n/Math.max(1,e.turns-1))**.8),o=Math.round(r(40,260));if(n===0)u(c,i,e.model,{input:3,output:o,cacheRead:0,cacheWrite:a,cacheWrite1h:0,turns:1});else{let n=Math.max(200,a-l)+Math.round(t()*900);u(c,i,e.model,{input:1+Math.floor(t()*8),output:o,cacheRead:l,cacheWrite:n,cacheWrite1h:0,turns:1})}l=a}i.push({convo:a,title:n.title,sub:!0,repo:n.repo,cells:[...c.values()],cold:[]})}};for(let e of Ir)f({repo:e.repo,title:e.title,start:s(e.back,e.at)+42e4,spanH:e.spanH,sittings:e.sittings,model:e.model,turns:e.turns,base:jr,peak:e.peak,oneHour:!0,agents:Array.from({length:e.agents},()=>({model:n([I,Cr,Tr],[.76,.06,.18]),turns:Math.round(e.agentTurns*r(.5,1.5)),peak:Math.round(e.agentPeak*r(.5,1.1))}))});for(let i=13;i>=0;i--){let a=new Date(s(i)).getDay(),o=Math.round((a===0?.35:a===6?.5:1)*22+t()*6),c=i===0?new Date(e).getHours():23,l=Array.from({length:c+1},(e,t)=>t);for(let e=0;e<o;e++){let e=n([yr,br,xr],[.55,.28,.17]),a=s(i,n(l,l.map(e=>Rr[e])))+Math.floor(t()*50)*6e4,o=n([`tiny`,`ordinary`,`long`],[.55,.36,.09]);if(o===`tiny`){let i=n([Dr,Er,Tr],[.5,.33,.17]),o=Math.round(r(14e3,4e4));f({repo:e,title:u(e),start:a,spanH:.2,sittings:1,model:i,turns:1+Math.floor(t()*6),base:o,peak:o+Math.round(t()*12e3),oneHour:!1,agents:[]})}else if(o===`ordinary`){let i=n([I,Sr,Cr,Tr],[.66,.22,.05,.07]),o=t()<.35?1+Math.floor(t()*4):0,s=n([1,2,3],[.45,.35,.2]);f({repo:e,title:u(e),start:a,spanH:s===1?r(.5,2.5):r(4,9),sittings:s,model:i,turns:Math.round(r(20,170)),base:jr,peak:Math.round(r(11e4,26e4)),oneHour:!0,agents:Array.from({length:o},()=>({model:d(),turns:Math.round(r(10,60)),peak:Math.round(r(6e4,22e4))}))})}else{let i=n([I,Sr],[.75,.25]),o=2+Math.floor(t()*9),s=2+Math.floor(t()*3);f({repo:e,title:u(e),start:a,spanH:r(5,14),sittings:s,model:i,turns:Math.round(r(180,520)),base:jr,peak:Math.round(r(26e4,48e4)),oneHour:!0,agents:Array.from({length:o},()=>({model:d(),turns:Math.round(r(25,110)),peak:Math.round(r(12e4,36e4))}))})}}}return i}var Br=(e,t,n,r)=>{let i=e.get(t)??e.set(t,new Map).get(t);return i.get(n)??i.set(n,r()).get(n)};function Vr(r,i){let a=o(),s=o(),c=new Map,l=new Map,u=Array.from({length:24},o),d=new Map,f=new Map,h=p(),g=p(),_=new Map,v=new Map,ee=Array.from({length:24},p),b=new Map,te=new Map,ne=o(),re=new Map,ie=new Map,ae=new Map,oe=new Map,se=new Map,ce=new Map,le=new Map,ue=new Map,x={count:0,tok:0,usd:0,premiumUsd:0},S=new Map,C=new Map,fe=new Map,pe=0,me=0;for(let e of r){e.sub?me++:pe++,C.set(e.convo,e.title);let t=S.get(e.convo)??S.set(e.convo,{id:e.convo,repo:e.repo,label:e.repo.split(`/`).pop()??e.repo,firstAt:null,lastAt:null,totals:o(),cost:p(),agentTotals:o(),agentCost:p(),agents:0,first:``,last:``}).get(e.convo);if(e.sub){t.agents++;let n=``,r=``;for(let t of e.cells)(!n||t.hour<n)&&(n=t.hour,r=t.model);if(n){let e=se.get(n.slice(0,10))??se.set(n.slice(0,10),new Map).get(n.slice(0,10));e.set(r,(e.get(r)??0)+1)}}for(let n of e.cold){let e=n.hour.slice(0,10);x.count+=n.count,x.tok+=n.tok;let r=ve({input:0,output:0,cacheRead:0,cacheWrite:n.tok,cacheWrite1h:n.tok1h},n.model,e),i=ve({input:0,output:0,cacheRead:n.tok,cacheWrite:0,cacheWrite1h:0},n.model,e);if(r&&(x.usd+=r.total,i)){let e=Math.max(0,r.total-i.total);x.premiumUsd+=e,e>0&&(t.coldUsd=(t.coldUsd??0)+e)}}for(let{hour:r,model:i,t:m}of e.cells){let y=r.slice(0,10),se=Number(r.slice(11,13));w(c.get(y)??c.set(y,o()).get(y),m),w(l.get(r)??l.set(r,o()).get(r),m),w(u[se],m),w(d.get(i)??d.set(i,o()).get(i),m),w(f.get(e.repo)??f.set(e.repo,o()).get(e.repo),m),w(a,m),e.sub&&w(s,m),w(Br(re,y,i,o),m),w(Br(ae,r,i,o),m);let x=Br(ce,y,e.repo,()=>({turns:0,pricedTurns:0,usd:0}));x.turns+=m.turns,w(Br(le,e.repo,i,o),m),w(t.totals,m),e.sub&&w(t.agentTotals,m),(!t.first||r<t.first)&&(t.first=r),(!t.last||r>t.last)&&(t.last=r);let S=Br(fe,r,i,()=>({t:o(),c:p()}));w(S.t,m);let C=ve(m,i,y);C?(x.pricedTurns+=m.turns,x.usd+=C.total,n(S.c,C),n(t.cost,C),e.sub&&n(t.agentCost,C),n(Br(ie,y,i,p),C),n(Br(oe,r,i,p),C),n(Br(ue,e.repo,i,p),C),n(h,C),e.sub&&n(g,C),n(_.get(y)??_.set(y,p()).get(y),C),n(v.get(r)??v.set(r,p()).get(r),C),n(ee[se],C),n(b.get(i)??b.set(i,p()).get(i),C),n(te.get(e.repo)??te.set(e.repo,p()).get(e.repo),C)):w(ne,m)}}let he=(e,n)=>[...(e??new Map).entries()].map(([e,t])=>({model:e,totals:t,cost:n?.get(e)??p()})).sort((e,n)=>t(n.totals)-t(e.totals)),ge=[...S.values()].filter(e=>t(e.totals)>0).sort((e,n)=>n.cost.total-e.cost.total||t(n.totals)-t(e.totals)).slice(0,Ar).map(({first:e,last:t,...n})=>({...n,firstAt:e?T(e):null,lastAt:t?T(t):null})),_e=[...c.entries()].map(([e,t])=>({day:e,...t,cost:_.get(e)??p(),byModel:he(re.get(e),ie.get(e)),agents:[...(se.get(e)??new Map).entries()].map(([e,t])=>({model:e,count:t})).sort((e,t)=>t.count-e.count),byRepo:[...(ce.get(e)??new Map).entries()].map(([e,t])=>({repo:e,...t})).sort((e,t)=>t.usd-e.usd)})).sort((e,t)=>e.day<t.day?-1:+(e.day>t.day)),ye=[...l.entries()].map(([e,t])=>({hour:e,...t,cost:v.get(e)??p(),byModel:he(ae.get(e),oe.get(e))})).sort((e,t)=>e.hour<t.hour?-1:+(e.hour>t.hour)),be=u.map((e,t)=>({hour:t,...e,cost:ee[t]})),xe=(e,n,r,i,a)=>[...e.entries()].map(([e,t])=>({key:e,label:r(e),...t,cost:n.get(e)??p(),priced:de(e),...i?{byModel:he(i.get(e),a?.get(e))}:{}})).sort((e,n)=>t(n)-t(e)),E=_e[0]?.day??null,Se=_e[_e.length-1]?.day??null;return{doc:{totals:a,days:_e,hours:ye,hoursFrom:ye.length?m(ye[0].hour.slice(0,10)):null,hourOfDay:be,models:xe(d,b,t=>e(t)??t),repos:xe(f,te,e=>e.split(`/`).pop()??e,le,ue),conversations:pe,subagents:s,subagentLogs:me,cost:h,subagentCost:g,unpriced:ne,fastTurns:Math.min(kr,a.turns),coldStarts:{count:x.count,tok:x.tok,...x.usd>0?{usd:x.usd}:{},...x.premiumUsd>0?{premiumUsd:x.premiumUsd}:{}},top:ge,pricesAsOf:y,firstAt:E?m(E):null,lastAt:Se?m(Se):null,scannedAt:i,logs:r.length,reread:0},cells:fe,titles:C,files:r}}var Hr=null;function Ur(e){let t=C(e);return Hr&&Hr.anchor===t||(Hr={anchor:t,ledger:Vr(zr(t),e)}),{...Hr.ledger,doc:{...Hr.ledger.doc,scannedAt:e}}}function Wr(e){let{doc:t,titles:n}=Ur(e);return(t.top??[]).map(e=>({convo:e,title:n.get(e.id)??e.label}))}function Gr(e){return Ur(e).doc}function Kr(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!(n>0))return[];let r=Math.ceil((t-e)/n)-1,a=[];for(let o of[r-1,r]){if(o<0)continue;let r=t-(o+1)*n,s=t-o*n;e>=i(r)&&e<i(s)&&a.push(o)}return a}function qr(e){return(e??``).split(`,`).map(e=>{let[t,n,r]=e.split(`:`);return{id:t||``,anchor:Number(n),lenMs:Number(r)}}).filter(e=>e.id&&Number.isFinite(e.anchor)&&e.lenMs>0)}function Jr(e,r){let{cells:i,doc:a}=Ur(e),s=[...i.keys()].sort(),c=s[0],l=s[s.length-1];return{series:r.map(e=>{let r=new Map;for(let[t,a]of i)for(let i of Kr(T(t),e.anchor,e.lenMs)){let e=r.get(i)??r.set(i,new Map).get(i);for(let[t,r]of a){let i=e.get(t)??e.set(t,{t:o(),c:p()}).get(t);w(i.t,r.t),n(i.c,r.c)}}let a=[...r.entries()].map(([e,r])=>{let i=o(),a=p(),s=[];for(let[e,t]of r)w(i,t.t),n(a,t.c),s.push({model:e,totals:t.t,cost:t.c});return{back:e,...i,cost:a,byModel:s.sort((e,n)=>t(n.totals)-t(e.totals))}}).sort((e,t)=>e.back-t.back);return{id:e.id,anchor:e.anchor,lenMs:e.lenMs,windows:a,oldestHour:c?T(c):null,newestHour:l?T(l):null}}),scannedAt:a.scannedAt}}var Yr=()=>({totals:o(),cost:p()}),Xr=(e,t,n)=>e.get(t)??e.set(t,n()).get(t),Zr=e=>[...e].map(([e,t])=>({model:e,...t})).sort((e,n)=>t(n.totals)-t(e.totals)),Qr=(e,n)=>n.cost.total-e.cost.total||t(n.totals)-t(e.totals),$r=([e],[t])=>e<t?-1:+(e>t),ei=e=>e.split(`/`).pop()??e;function ti(e,r,i,a=!0){let{files:s,titles:c,doc:l}=Ur(e),u=C(r),d=Yr(),f=Yr(),p=o(),m=new Map,h=new Map;for(let e of a?s:[]){let r;for(let{hour:a,model:o,t:s}of e.cells){let c=T(a);if(c<u||c>=i||t(s)<=0)continue;r||(r=Xr(h,e.convo,()=>({repo:e.repo,...Yr(),agent:Yr(),agents:0,byModel:new Map,agentByModel:new Map,byHour:new Map})),e.sub&&r.agents++);let l=Xr(m,a,()=>({...Yr(),byRepo:new Map,byModel:new Map})),g=Xr(r.byHour,a,()=>({hour:a,usd:0,tok:0})),_=ve(s,o,a.slice(0,10));g.tok+=t(s),g.usd+=_?.total??0,_||w(p,s);let v=[d,r,l,Xr(r.byModel,o,Yr),Xr(l.byModel,o,Yr),Xr(l.byRepo,e.repo,Yr),...e.sub?[f,r.agent,Xr(r.agentByModel,o,Yr)]:[]];for(let e of v)w(e.totals,s),_&&n(e.cost,_)}}let g=[...h].sort(([,e],[,t])=>Qr(e,t)).map(([e,t])=>{let n=[...t.byHour].sort($r).map(([,e])=>e);return{id:e,repo:t.repo,label:ei(t.repo),firstAt:T(n[0].hour),lastAt:T(n[n.length-1].hour),totals:t.totals,cost:t.cost,agentTotals:t.agent.totals,agentCost:t.agent.cost,agents:t.agents,byModel:Zr(t.byModel),agentByModel:Zr(t.agentByModel),byHour:n,live:!1,...c.get(e)?{title:c.get(e)}:{}}});return{from:r,to:i,fromHour:u,hours:[...m].sort($r).map(([e,t])=>({hour:e,t:T(e),totals:t.totals,cost:t.cost,byModel:Zr(t.byModel),byRepo:[...t.byRepo].map(([e,t])=>({repo:e,label:ei(e),...t})).sort(Qr)})),convos:g,totals:d.totals,cost:d.cost,agentTotals:f.totals,agentCost:f.cost,unpriced:p,pricesAsOf:y,scannedAt:l.scannedAt}}var ni=5*L,ri=168*L,ii=9e5,ai=336*L;function oi(e,t,n){let{cells:r}=Ur(e),i=new Map;for(let[e,t]of r){let n=0;for(let e of t.values())n+=e.c.total;i.set(T(e),n)}let a=(e,t)=>{if(t<=e)return 0;let n=0;for(let r=C(e);r<t;r+=L){let a=i.get(r);if(!a)continue;let o=Math.max(e,r),s=Math.min(t,r+L);s>o&&(n+=a*((s-o)/L))}return n},o=e-ai,s=(e,n,r)=>{if(e==null||r==null)return{end:e=>null,pct:e=>null};let i=t=>e-Math.floor((e-t-1)/n)*n,s=0;for(let t=e-n;t>o;t-=n)s=Math.max(s,a(t-n,t));let c=a(e-n,t.checkedAt),l=s>0?80/s:0,u=c>0?r/c:0;return{end:i,pct:o=>{let s=i(o),c=s===e?u?u*a(s-n,o):r*Math.min(1,(o-(s-n))/Math.max(1,t.checkedAt-(s-n))):l*a(s-n,o);return Math.max(0,Math.min(100,Math.round(c)))}}},c=s(t.sessionResetAt,ni,t.sessionPct),l=s(t.weeklyResetAt,ri,t.weeklyPct),u=[];for(let e=t.checkedAt-ii;e>o;e-=ii)new Date(e).getHours()<7||u.push({t:e,s:c.pct(e),w:l.pct(e),sr:c.end(e),wr:l.end(e)});u.reverse(),u.push({t:t.checkedAt,s:t.sessionPct,w:t.weeklyPct,sr:t.sessionResetAt,wr:t.weeklyResetAt});let d=n!=null&&Number.isFinite(n)&&n>0?e-n*L:null,f=d==null?u:u.filter(e=>e.t>=d);return{samples:f,keptFrom:f.length?f[0].t:null,cap:2e3,retainMs:ai,everyMs:ii}}var si=864e5,ci=60,li=14,ui=14,di=27,fi=[{name:`todo-garden`,groups:[{pkg:`app`,start:24e3,end:24900},{pkg:`lib`,start:9e3,end:9300},{pkg:`src`,start:4800,end:5800},{pkg:`.`,start:64,end:72}],types:[{ext:`.tsx`,pack:`TypeScript`,share:.46},{ext:`.ts`,pack:`TypeScript`,share:.44},{ext:`.mjs`,pack:`JavaScript`,share:.1}],files:[114,120],deps:[6,8],hatches:[80,96],claudeMd:[7350,7800],desc:[1150,1200],skills:[2,4],untested:[26,29],retouch:[.19,.22],touches:[38,52],commits:211,top:[{path:`src/garden/planner.ts`,start:3900,end:5200},{path:`app/GardenView.tsx`,start:900,end:1140},{path:`app/store.ts`,start:820,end:880},{path:`app/PlantSheet.tsx`,start:700,end:760},{path:`lib/watering.ts`,start:610,end:650},{path:`app/App.tsx`,start:560,end:600},{path:`lib/schedule.ts`,start:520,end:545},{path:`app/Reminders.tsx`,start:480,end:505},{path:`app/sync.ts`,start:450,end:470},{path:`lib/seasons.ts`,start:420,end:430},{path:`app/theme.ts`,start:390,end:400},{path:`app/Settings.tsx`,start:360,end:372}],offenders:[{path:`src/garden/planner.ts`,n:7},{path:`app/GardenView.tsx`,n:4},{path:`app/store.ts`,n:3}]},{name:`photo-shelf`,groups:[{pkg:`lib`,start:70500,end:74200},{pkg:`functions`,start:3600,end:4e3},{pkg:`tool`,start:1700,end:1800}],types:[{ext:`.dart`,pack:`Dart`,share:.93},{ext:`.ts`,pack:`TypeScript`,share:.05},{ext:`.sh`,pack:null,share:.02}],files:[142,146],deps:[28,31],hatches:[30,32],claudeMd:[8600,9e3],desc:[1180,1200],skills:[5,6],untested:[23,25],retouch:[.08,.07],touches:[70,84],commits:1140,top:[{path:`lib/services/sync_backend.dart`,start:7750,end:8397},{path:`lib/screens/library_screen.dart`,start:5050,end:5400},{path:`lib/services/album_store.dart`,start:3300,end:3560},{path:`lib/screens/editor_screen.dart`,start:2900,end:3120},{path:`lib/widgets/photo_grid.dart`,start:2600,end:2780},{path:`lib/services/upload_queue.dart`,start:2350,end:2510},{path:`lib/screens/settings_screen.dart`,start:2150,end:2270},{path:`lib/models/photo.dart`,start:1950,end:2089},{path:`lib/services/exif_reader.dart`,start:1700,end:1820},{path:`lib/widgets/share_sheet.dart`,start:1500,end:1640},{path:`functions/src/index.ts`,start:1250,end:1390},{path:`lib/main.dart`,start:1100,end:1210}],offenders:[{path:`lib/services/sync_backend.dart`,n:4},{path:`lib/screens/library_screen.dart`,n:2},{path:`lib/services/album_store.dart`,n:2}]},{name:`pocket-notes`,groups:[{pkg:`src`,start:4620,end:6240},{pkg:`server`,start:1380,end:2110},{pkg:`shared`,start:360,end:520}],types:[{ext:`.tsx`,pack:`TypeScript`,share:.38},{ext:`.ts`,pack:`TypeScript`,share:.55},{ext:`.css`,pack:null,share:.07}],files:[52,71],deps:[11,14],hatches:[18,17],claudeMd:[3050,3960],desc:[1120,1480],skills:[4,6],untested:[19,15],retouch:[.27,.19],touches:[51,66],commits:342,top:[{path:`src/Editor.tsx`,start:310,end:402},{path:`server/search.ts`,start:228,end:361},{path:`src/NoteList.tsx`,start:204,end:296},{path:`server/sync.ts`,start:180,end:274},{path:`src/markdown.ts`,start:166,end:232},{path:`src/App.tsx`,start:150,end:211},{path:`server/db.ts`,start:122,end:198},{path:`src/Tags.tsx`,start:90,end:177},{path:`shared/types.ts`,start:118,end:160},{path:`src/offline.ts`,start:80,end:148},{path:`src/Toolbar.tsx`,start:76,end:126},{path:`server/auth.ts`,start:60,end:109}],offenders:[{path:`src/Editor.tsx`,n:7},{path:`server/search.ts`,n:5},{path:`src/NoteList.tsx`,n:3}]},{name:`trail-log`,groups:[{pkg:`app`,start:1840,end:2760},{pkg:`tools`,start:240,end:310}],types:[{ext:`.ts`,pack:`TypeScript`,share:.58},{ext:`.tsx`,pack:`TypeScript`,share:.34},{ext:`.mjs`,pack:`JavaScript`,share:.08}],files:[22,29],deps:[4,5],hatches:[5,4],claudeMd:[1480,2020],desc:[380,520],skills:[1,2],untested:[6,4],retouch:[.36,.28],touches:[25,33],commits:118,top:[{path:`app/MapScreen.tsx`,start:176,end:262},{path:`app/gpx.ts`,start:188,end:241},{path:`app/TrackStore.ts`,start:130,end:205},{path:`app/elevation.ts`,start:92,end:166},{path:`app/App.tsx`,start:84,end:138},{path:`app/Stats.tsx`,start:40,end:124},{path:`tools/export.mjs`,start:70,end:98},{path:`app/units.ts`,start:58,end:82},{path:`app/Photos.tsx`,start:30,end:77},{path:`app/theme.ts`,start:44,end:61},{path:`app/Settings.tsx`,start:26,end:54},{path:`app/format.ts`,start:30,end:41}],offenders:[{path:`app/MapScreen.tsx`,n:5},{path:`app/gpx.ts`,n:4},{path:`app/TrackStore.ts`,n:2}]}];function pi(e){let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return t^=t>>>15,t=Math.imul(t,2246822519),t^=t>>>13,(t>>>0)/4294967296}var mi=e=>Array.from({length:7},(t,n)=>`0123456789abcdef`[Math.floor(pi(`${e}:${n}`)*16)]).join(``),hi=e=>String(e).padStart(2,`0`),gi=e=>{let t=new Date(e);return`${t.getFullYear()}-${hi(t.getMonth()+1)}-${hi(t.getDate())}`},_i=(e,t,n)=>e+(t-e)*n;function vi(e,t){let n=e.slice(-60);if(t)return{rank:null,slope:null,n:n.length,from:null,reason:`a count whose direction carries no claim, so it is drawn and not ranked`};if(n.length<li)return{rank:null,slope:null,n:n.length,from:null,reason:`only ${n.length} readings; a rank needs ${li}`};let r=n[n.length-1],i=n.filter(e=>e<=r).length/n.length,a=r-n[0],o=Math.max(Math.abs(n[0]),Math.abs(r),1e-9),s=Math.abs(a)/o<.02?`flat`:a>0?`rising`:`falling`;return{rank:Math.round(i*100)/100,slope:s,n:n.length,from:null}}var yi=(e,t,n)=>`${e.toLocaleString(`en-US`)} ${e===1?t:n}`;function bi(e,t){let n=fi.find(t=>t.name===e);if(!n)return null;let r=new Date(t);r.setHours(12,0,0,0);let i=[];for(let e=di;e>=0;e--)(e===0||(e*5+n.name.length)%7!=2)&&i.push(e);let a=i.length,o=i.map(e=>gi(r.getTime()-e*si)),s=o.map(e=>mi(`${n.name}:${e}`)),c=i.map((e,t)=>a===1?1:t/(a-1)),l=e=>c[e]**.85,u=(e,t,r)=>(pi(`${n.name}:${t}:${e}`)-.5)*2*r*(e===a-1?0:1),d=(e,t,n,r,i=0)=>_i(e,t,l(n))+u(n,r,i),f=e=>o.map((t,n)=>({day:t,sha7:s[n],v:e(n)})),p=n.groups.map(e=>i.map((t,n)=>Math.round(d(e.start,e.end,n,`g:${e.pkg}`,e.end*.004)))),m=i.map((e,t)=>p.reduce((e,n)=>e+n[t],0)),h=i.map((e,t)=>Math.round(_i(n.files[0],n.files[1],l(t)))),g=n.types.length-1,v=n.types.map((e,t)=>i.map((n,r)=>t===g?0:Math.round(m[r]*e.share)));for(let e=0;e<a;e++)v[g][e]=m[e]-v.reduce((t,n,r)=>r===g?t:t+n[e],0);let y=n.types.map((e,t)=>t===g?0:Math.round(h[a-1]*e.share));y[g]=h[a-1]-y.reduce((e,t,n)=>n===g?e:e+t,0);let ee=e=>n.top.map(t=>({path:t.path,len:Math.round(_i(t.start,t.end,c[e]**.8))})).sort((e,t)=>t.len-e.len||(e.path<t.path?-1:1)),b=e=>ee(e)[Math.max(0,Math.ceil(.05*h[e])-1)].len,te=ee(a-1),ne=i.map((e,t)=>Math.round(d(n.touches[0],n.touches[1],t,`touch`,3))),re=ne.map((e,t)=>Math.round(e*d(n.retouch[0],n.retouch[1],t,`rt`,.025))),ie=ne.map((e,t)=>Math.round(re[t]/e*100)/100),ae=i.map((e,t)=>Math.max(1,Math.round(d(n.hatches[0],n.hatches[1],t,`hatch`,.8)))),oe=ae.map((e,t)=>Math.round(e/(m[t]/1e3)*10)/10),se=i.map((e,t)=>Math.min(h[t],Math.max(0,Math.round(d(n.untested[0],n.untested[1],t,`unt`,.7))))),ce=i.map((e,t)=>Math.round(d(n.claudeMd[0],n.claudeMd[1],t,`cmd`,40))),le=i.map((e,t)=>Math.round(d(n.desc[0],n.desc[1],t,`desc`,8))),ue=i.map((e,t)=>Math.round(_i(n.skills[0],n.skills[1],c[t]<.5?c[t]*.6:.3+(c[t]-.5)*1.4))),x=a-1,S=(e,t,n,r,i,a=!1)=>({key:e,source:`central`,label:t,unit:n,points:f(e=>r[e]),last:r[x],reading:vi(r,a),detail:i}),C=n.offenders.map(e=>`${e.path} at ${yi(e.n,`re-touch`,`re-touches`)}`).join(`, `),w=[S(`size.p95`,`p95 file length`,`lines`,i.map((e,t)=>b(t)),``),S(`retouch.rate`,`the re-touch rate`,``,ie,` ${yi(re[x],`re-touch`,`re-touches`)} out of ${yi(ne[x],`touch`,`touches`)} over ${ui} days. The ${n.offenders.length} most re-touched: ${C}.`),S(`hatches.perKloc`,`escape hatches per kLOC`,``,oe,` ${yi(ae[x],`occurrence`,`occurrences`)} over ${yi(m[x],`line`,`lines`)}.`),S(`context.claudeMdChars`,`CLAUDE.md`,`chars`,ce,``),S(`context.descChars`,`the always-on skill descriptions`,`chars`,le,``),S(`context.skillCount`,`the count of skills`,``,ue,``,!0),S(`untested.count`,`the count of modules no test reaches`,``,se,` ${se[x].toLocaleString(`en-US`)} of ${yi(h[x],`module`,`modules`)} in the tree.`)],de=i.map((e,t)=>ee(t)[0]),fe=(e,t)=>e.name<t.name?-1:1,pe=n.groups.map((e,t)=>({name:e.pkg,loc:p[t][x],points:f(e=>p[t][e])})),me=[...pe].sort((e,t)=>t.loc-e.loc||fe(e,t)),he=n.types.map((e,t)=>({name:e.ext,pack:e.pack,files:y[t],loc:v[t][x],points:f(e=>v[t][e])})),ge=[...he].sort((e,t)=>t.loc-e.loc||fe(e,t)),T={scope:null,preregVersion:`3`,windowReadings:ci,minReadings:li,days:a,series:w,context:{areas:{},areasAbsent:`No skill in this repo routes to another, so there are no areas to split the always-on weight by; the repo-wide weight above still stands.`},classics:{loc:f(e=>m[e]),files:f(e=>h[e]),deps:f(e=>Math.round(_i(n.deps[0],n.deps[1],c[e]<.6?0:(c[e]-.6)/.4))),packages:[...pe].sort(fe).map(e=>({pkg:e.name,rank:me.findIndex(t=>t.name===e.name),points:e.points})),types:[...he].sort(fe).map(e=>({ext:e.name,pack:e.pack,rank:ge.findIndex(t=>t.name===e.name),files:e.files,points:e.points})),tape:te.map(e=>e.len),tapePaths:te.map(e=>e.path)},longest:{points:f(e=>de[e].len),paths:de.map(e=>e.path),path:de[x].path,day:o[x]},own:{file:_,declared:!1,series:[]}},_e=r.getTime()-24e5,ve=Math.max(a,Math.round(n.commits*.4));return{scope:null,scopes:[],tool:!0,engine:{kind:`bundled`},head:{sha:`${s[x]}${mi(`${n.name}:head`).slice(0,5)}`,ts:_e},series:{preregVersion:`3`,rows:ve,days:a,lastSha:s[x],lastDay:o[x],lastTs:_e,versions:[{version:`3`,rows:ve}],staleRows:0},measure:{commits:n.commits,packs:[...new Set(he.map(e=>e.pack).filter(e=>!!e))].map(e=>({name:e,version:`2`,files:he.reduce((t,n)=>n.pack===e?t+n.files:t,0)})),groups:n.groups.map(e=>e.pkg),engineVersion:`3`,recut:null,scope:null},readError:null,stepTimeoutMs:12e4,behind:0,narrative:null,page:null,run:null,last:null,plot:T,plotError:null,readAt:t}}var xi=864e5,Si=4,Ci=e=>(e*2654435761>>>0).toString(16).padStart(8,`0`).repeat(5),wi=10,Ti={"todo-garden":{lineMean:[420,900],max:[1300,5200],maxPath:`src/garden/planner.ts`,retouch:[.14,.22],hatches:[1.2,2.4],md:[6500,7800],untested:[20,29]},"pocket-notes":{lineMean:[640,430],max:[1700,980],maxPath:`src/notes/sync.ts`,retouch:[.3,.16],hatches:[4,1.8],md:[11e3,7e3],untested:[30,22]},"photo-shelf":{lineMean:[420,2235],max:[1020,8397],maxPath:`lib/services/sync_backend.dart`,retouch:[.06,.07],hatches:[.3,.4],md:[3800,9e3],desc:1200,untested:[5,25],files:[38,146],loc:[13e3,8e4],weeks:35}};function Ei(e){let t=new Date(e),n=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate());return n-(new Date(n).getUTCDay()+6)%7*xi}function Di(e,t){let n=Ti[e];if(!n)return null;let r=Ei(t),i=n.weeks??wi,a=[];for(let e=0;e<i;e++){let t=e/(i-1),o=e=>e[0]+(e[1]-e[0])*t,s=r-(i-1-e)*7*xi+2*xi,c=Math.round(n.loc?o(n.loc):4e4),l=Math.round(n.files?o(n.files):120);for(let t=3;t>=0;t--){let r=t===0?1:1+.06*Math.sin(e*7+t*3);a.push({sha:Ci(e*Si+(3-t)),day:new Date(s-t*xi/2).toISOString().slice(0,10),ts:s-t*xi/2,prereg:`demo-1`,size:{value:{lineMean:o(n.lineMean)*r,max:o(n.max),maxPath:n.maxPath}},retouch:{value:{rate:o(n.retouch)*r}},hatches:{value:{a:Math.round(o(n.hatches)*(c/1e3))}},context:{value:{claudeMdChars:o(n.md),descChars:n.desc??1200}},untested:{value:Array(Math.round(o(n.untested))).fill(`x`)},classics:{value:{loc:c,files:l}}})}}return a}function Oi(e,t){let n=Di(e,t);if(!n)return null;let r=ie(n,null);if(!r)return null;let i=ee(r.points,{minWeeks:4,minMonthWindows:99});return{series:r,move:i,words:a(r.points,i,re(new Date(t).toISOString().slice(0,10))),lastRefresh:null,commits:u(n,null)}}function ki(e,t){let n=Oi(e,t);return n?.series&&te(n.series,n.move)||void 0}var Ai=`Not in the demo — this needs your own desktop running the host.`,ji=[`session.create`,`fanout.run`,`fanout.followup`,`backlog.name`,`build.run`,`capture.run`,`assess.run`,`assess.apply`,`schedule.run`,`schedule.save`,`intent.post`,`intent.run`,`intent.requeue`,`intent.update`,`intent.waive`,`intent.retarget`,`updates.apply`,`signin.continue`],Mi=(e,t)=>e.ackId?{t:`op.ack`,ackId:e.ackId,ok:t.ok,reason:t.reason,sessionId:t.sessionId,runId:t.runId,launchId:t.launchId,intentId:t.intentId,filed:t.filed}:null,Ni={...Object.fromEntries(ji.map(e=>[e,Mi])),"session.input":(e,t)=>e.ackId?{t:`input.ack`,id:e.id,ackId:e.ackId,ok:t.ok,reason:t.reason,state:t.state}:null,"backlog.add":(e,t)=>e.ackId?{t:`backlog.ack`,ackId:e.ackId,ok:t.ok,itemId:t.itemId,reason:t.reason}:null,"plugin.call":(e,t)=>({t:`plugin.reply`,ackId:e.ackId,plugin:e.plugin,method:e.method,ok:t.ok,result:t.result,error:t.ok?void 0:t.reason}),"session.name":(e,t)=>({t:`session.named`,id:e.id,name:t.name,reason:t.reason}),"session.mode":(e,t)=>({t:`session.moded`,id:e.id,mode:t.mode,reason:t.ok?void 0:t.reason??`the mode did not change`}),"localrt.evict":(e,t)=>({t:`localrt.evict`,name:e.name,ok:t.ok,error:t.ok?void 0:t.reason}),"shell.kill":(e,t)=>({t:`shell.killed`,id:e.id,pid:e.pid,ok:t.ok,reason:t.reason}),"stream.open":(e,t)=>t.ok?null:{t:`stream.refused`,reqId:e.reqId,reason:t.reason??`Not in the demo — this needs your own desktop running the host.`}};function Pi(e,t){let n=Ni[e.t];return n?n(e,t):null}function Fi(e){if(!(e.t in Ni))return;let t=e.ackId;return typeof t==`string`&&t?t:void 0}function Ii(e,t=Ai){return Pi(e,{ok:!1,reason:t})??{t:`toast`,text:t}}var Li=`Not in the demo — this builds a real app on your desktop.`,R=(e,t=200)=>({status:t,contentType:`application/json`,body:JSON.stringify(e)}),Ri=e=>(e.repos??[]).filter(e=>!!e&&typeof e==`object`),zi=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.bmp`,`.heic`,`.heif`,`.svg`,`.avif`,`.tif`,`.tiff`,`.ico`,`.jfif`,`.mp4`,`.webm`,`.mov`,`.m4v`,`.ogv`,`.mkv`]);function Bi(e){let t=()=>o(),n=()=>p();return{totals:t(),days:[],hours:[],hoursFrom:null,hourOfDay:Array.from({length:24},(e,r)=>({hour:r,...t(),cost:n()})),models:[],repos:[],conversations:0,subagents:t(),subagentLogs:0,cost:n(),subagentCost:n(),unpriced:t(),fastTurns:0,coldStarts:{count:0,tok:0},top:[],pricesAsOf:y,firstAt:null,lastAt:null,scannedAt:e,logs:0,reread:0}}function Vi(e){if(!e)return null;let t=e;try{t=decodeURIComponent(e)}catch{}return t=t.split(/[\\/]/).pop()?.trim()??``,t&&t!==`.`&&t!==`..`?t:null}var Hi=e=>/\.(png|jpe?g|gif|webp|svg|avif|bmp|mp4|webm|mov)$/i.test(e);function Ui(e,t,n){let{method:r,path:i}=n,a=n.query??{};if(i===`/api/repos`&&r===`GET`)return R({targets:e.repos??[]});if(i===`/api/repodisplayname`&&r===`PUT`){let t=n.body??{},r=e.repos??[],i=r.find(e=>e.id===t.id);if(!i)return R({ok:!1,error:`That is not one of the demo's repos.`},404);if(!i.isPrimary)return R({ok:!1,error:`A name belongs to the repo — set it on its main checkout, not a worktree.`},400);let a=_e(t.name);if(!a.ok)return R({ok:!1,error:a.error},400);for(let e of r)e.repoName===i.repoName&&e.where===i.where&&(a.value?e.displayName=a.value:delete e.displayName);return R({ok:!0,name:a.value})}if(i===`/api/plainfolders`&&r===`GET`)return R({folders:[]});let o=/^\/api\/repos\/([^/]+)\/(artifacts|inbox)(?:\/(seen))?$/.exec(i);if(o){let[,i,s,c]=o,l=decodeURIComponent(i),u=Ri(e).find(e=>e.id===l);if(!u)return R({error:`That is not one of the demo's repos.`},404);if(c&&r===`POST`)return s===`artifacts`&&(u.outboxSeenAt=t,u.outboxCount=(e.gallery?.[l]??[]).filter(e=>Number(e?.mtime)>t).length),R({ok:!0});if(!c&&r===`GET`){if(s===`artifacts`){let n=Number(a.since)||void 0,r={kind:a.kind===`image`||a.kind===`doc`?a.kind:`all`,since:n,query:a.q};return R({files:S(e.gallery?.[l]??[],r,Hi,t),truncated:!1})}return R({files:e.inbox?.[l]??[]})}if(!c&&s===`inbox`&&r===`POST`){let r=Vi(n.headers?.[`x-file-name`]),i=(e.inbox??={})[l]??=[],a=r??`upload-${i.length+1}.png`,o={name:a,relPath:`.claude/inbox/${a}`,size:n.bodyBytes??0,mtime:t,ctime:t},s=i.findIndex(e=>e.name===a);return s>=0&&i.splice(s,1),i.unshift(o),R({saved:[o],skipped:[]})}}if(i===`/api/search`&&r===`GET`){let n=(a.q??``).trim().toLowerCase(),r=a.kind??``,i=a.repos?new Set(a.repos.split(`,`).map(e=>e.trim()).filter(Boolean)):null,o=Math.min(Number(a.limit||0)||300,1e3),s=Number(a.since||0)?t-Number(a.since)*1e3:0,c=[];for(let t of Ri(e))if(!(typeof t.id!=`string`||i&&!i.has(t.id)))for(let i of e.gallery?.[t.id]??[]){let e=/\.[^.]+$/.exec(i.name)?.[0].toLowerCase()??``;i.mtime<s||n&&!i.name.toLowerCase().includes(n)||r===`image`&&!zi.has(e)||r===`doc`&&zi.has(e)||c.push({repoId:t.id,repoName:t.repoName??t.id,branch:t.branch??`main`,...i})}return c.sort((e,t)=>Number(t.mtime)-Number(e.mtime)),R({hits:c.slice(0,o),truncated:c.length>o})}if(i===`/api/tokenstats`&&r===`GET`)return R(e.numbers?.ledger?Gr(t):Bi(t));if(i===`/api/tokenwindows`&&r===`GET`&&e.numbers?.ledger)return R(Jr(t,qr(a.w)));if(i===`/api/costwindow`&&r===`GET`){let n=Number(a.from),r=Number(a.to),i=r>n&&r-n<=3024e6;return R(ti(t,i?n:0,i?r:0,i&&!!e.numbers?.ledger))}if(i===`/api/usagelog`&&r===`GET`&&e.numbers?.ledger&&e.numbers.usage)return R(oi(t,e.numbers.usage,Number(a.hours||0)||void 0));if(i===`/api/transcript`&&r===`GET`){let n=a.id??``;if(!n||!j(e,n))return R({error:`no such session`},404);let r=Wi(e,n,t);return Number(a.since||0)>=r.updatedAt?{status:204,contentType:`text/plain`,body:``}:R(r)}if(i===`/api/scrollback`&&r===`GET`){let n=a.id??``;if(!n||!j(e,n))return R({error:`no such session`},404);let r=e.screens?.[n]?.cols??80;return R({sessionId:n,lines:xn(e,n),cols:r,history:!1,bounded:!1,at:t})}if(i===`/api/context`&&r===`GET`){let t=e.numbers?.context?.[a.id??``];return t?Number(a.since||0)>=t.updatedAt?{status:204,contentType:`text/plain`,body:``}:R(t):R({error:`no context series`},404)}let s=/^\/api\/repos\/([^/]+)\/repohealth$/.exec(i);if(s&&r===`GET`&&e.numbers?.repoHealth){let n=decodeURIComponent(s[1]),r=Ri(e).find(e=>e.id===n),i=typeof r?.repoName==`string`?bi(r.repoName,t):null;return i?R(i):R({error:`no repo-health series for that repo`},404)}let l=/^\/api\/repos\/([^/]+)\/healthindex$/.exec(i);if(l&&r===`GET`&&e.numbers?.repoHealth){let n=decodeURIComponent(l[1]),r=Ri(e).find(e=>e.id===n),i=typeof r?.repoName==`string`?Oi(r.repoName,t):null;return i?R(i):R({error:`no health index for that repo`},404)}return i===`/api/external`&&r===`GET`?R({sessions:[]}):i===`/api/attention`&&r===`GET`?R(fe(fn(e),e.notifications??[],t)):i===`/api/theme`&&r===`GET`?R({overlay:{}}):i===`/api/peerjobs`&&r===`GET`?R({ok:!0,jobs:[]}):i===`/api/storage/transport`&&r===`GET`?R(e.storage?.transport??{at:t,repos:[],total:{count:0,bytes:0},partial:!1}):i===`/api/storage/host`&&r===`GET`?R(e.storage?.host??{at:t,dir:`demo`,rows:[],total:0,partial:!1}):i===`/api/storage/host/clear`&&r===`POST`?R({deleted:0,bytes:0,failed:0,refused:`The demo's desktop keeps no files, so there is nothing to clear.`}):i===`/api/askrules`&&r===`GET`?R({ok:!0,doc:{rules:[]},suggested:c,honouredBy:ge,rev:`demo`}):i===`/api/askrules`&&r===`PUT`?R({ok:!1,error:`The demo's desktop launches no claude, so it keeps no ask rules — nothing was changed.`},400):i===`/api/onboard/plan`&&r===`GET`?R({ok:!1,error:Li,path:a.path===`android`?`android`:`web`,name:a.name??``,folder:``,steps:[],consent:[],suggestedPrompt:``}):i===`/api/onboard`&&r===`GET`?R({ok:!0,job:null}):(i===`/api/onboard`||i===`/api/onboard/resume`)&&r===`POST`?R({ok:!1,error:Li},400):{status:404,contentType:`text/plain`,body:`${Ai} (${r} ${i})`}}function Wi(e,t,n){let r=(e.history?.[t]??[]).filter(e=>e.kind===`prompt`),i=xn(e,t);return{sessionId:t,source:`history`,turns:r.map((n,a)=>{let o=[];if(n.output)o=[{kind:`text`,text:n.output}];else if(a===r.length-1){let e=i.lastIndexOf(`❯ ${n.text}`);if(e>=0){let t=[];for(let n of i.slice(e+1)){if(/^❯ (?!\d+\. )/.test(n))break;t.push(n)}let n=t.join(`
16
- `).trim();n&&(o=[{kind:`screen`,text:n}])}}return{id:n.id,n:a+1,prompt:n.text,promptLabel:n.text.replace(/\s+/g,` `).slice(0,80),sentAt:n.sentAt,endedAt:n.outputAt??n.sentAt,blocks:o,toolCount:0,files:[],sidechains:0,...e.turnFacts?.[t]?.[n.id]}}),truncated:!1,bytes:0,updatedAt:r.length>0&&!r[r.length-1].output||!r.length?n:Math.max(...r.map(e=>e.outputAt??e.sentAt)),detail:`lite`}}var Gi=e=>({ptys:null,sessions:fn(e).length});function Ki(e,t){if(!e||typeof e!=`object`)return null;let n=e;return n.v!==1||n.protocol!==t.protocol||n.scenario!==t.scenario||n.stamp!==t.stamp||typeof n.startedAt!=`number`||typeof n.scriptPos!=`number`||!n.state||typeof n.state.bootId!=`string`||!n.state.model||typeof n.state.model!=`object`||!n.acks||typeof n.acks!=`object`||!Array.isArray(n.faults)||!Array.isArray(n.faultHits)?null:n}function qi(e){if(e.faults&&e.faults.length>0)throw Error(`demo scenario "${e.meta.id}" carries ${e.faults.length} fault rule(s); faults are for tests only`)}var Ji=e=>JSON.parse(JSON.stringify(e));function Yi(e,t,n={}){return Zi(e,t,n,{v:1,protocol:2,scenario:e.meta.id,stamp:e.meta.stamp,startedAt:t.now(),scriptPos:0,state:Ji(e.state),acks:{},faults:Ji(e.faults??[]),faultHits:(e.faults??[]).map(()=>0)})}function Xi(e,t,n,r={}){let i=Ki(n,{scenario:e.meta.id,stamp:e.meta.stamp,protocol:2});return i?Zi(e,t,r,Ji(i)):Yi(e,t,r)}function Zi(e,t,n,r){if(e.meta.protocol!==2)throw Error(`demo scenario "${e.meta.id}" was recorded at protocol ${e.meta.protocol}, this build speaks 2`);let i=wt(r.state);i&&!i.numbers?.usage&&((i.numbers??={}).usage=gr(r.startedAt)),i&&!i.plugins&&n.plugins?.length&&(i.plugins=n.plugins);let a=new Set,o=new Map,s=new Set,c=!1,l=()=>{for(let e of s)e()},u=()=>r.faults.some(e=>e.kind===`offline`),d=()=>r.faults.some(e=>e.kind===`offline`&&!e.http);function f(e,t,n){if(t.t&&t.t!==n)return!1;let i=r.faultHits[e]++,a=t.from??0;return i>=a&&(t.times==null||i<a+t.times)}function p(e,t){let n=1,i;r.faults.forEach((e,r)=>{e.kind===`drop`&&f(r,e.match,t.t)?n=0:e.kind===`duplicate`&&f(r,e.match,t.t)?n&&=2:e.kind===`latency`&&f(r,e.match,t.t)&&(i=(i??0)+e.ms)});let a=i==null?{kind:`frame`,msg:t}:{kind:`frame`,msg:t,afterMs:i};for(let t=0;t<n;t++)e(a)}let m=()=>wt(r.state).clockShift??0,h=()=>t.now()+m(),g={get m(){return wt(r.state)},now:h,get bootId(){return r.state.bootId},broadcast:e=>{for(let t of a)p(t,e)},toSession:(e,t)=>{for(let n of a)o.get(n)?.has(e)&&p(n,t)}};function _(){return{t:`welcome`,protocol:2+r.faults.reduce((e,t)=>t.kind===`protocol`?e+t.delta:e,0),bootId:r.state.bootId,tailscaleIp:null,tailscaleBin:null,tailscaleDns:null,httpsUrl:null,lanIps:[],port:0,root:`demo`,tmux:!1,clientKind:`loopback`,auth:{enabled:!1,gateTailscale:!1,canManage:!1},hostName:`Demo`}}function v(e,t){if(t.t===`hello`){p(e,_());for(let t of _r(g.m))p(e,t);return}let n=vr[t.t];if(!n)return;let i=Fi(t),a=i?r.acks[i]:void 0;if(a){p(e,a);return}let s;if(n.tier===`A`){let i={msg:t,now:h(),state:r.state,desk:g,reply:t=>p(e,t),broadcast:g.broadcast,attach:t=>{o.get(e)?.add(t)},detach:t=>{o.get(e)?.delete(t)}};s=Pi(t,n.run(i)??{ok:!0})}else if(s=Ii(t,n.tier===`B`?n.reason??`Not in the demo — this needs your own desktop running the host.`:Ai),s.t===`toast`){p(e,s);return}s&&(s=Ji(s),i&&(r.acks[i]=s),p(e,s)),jn(g),Xn(g),l()}function y(e,t){r.faults.forEach((n,i)=>{if(n.kind===`disconnect`&&f(i,n.match,t.t))n.health===!1&&(c=!0),n.stayDown&&(r.faults.push({kind:`offline`,http:!0}),r.faultHits.push(0)),a.delete(e),o.delete(e),e({kind:`close`,code:1006,reason:`demo fault: disconnect`});else if(n.kind===`limit`&&f(i,n.match,t.t)){let e=h(),t=e+n.resetsInMs;Sn(g,n.sessionId,{limit:{blocked:!0,blockedSince:e,resetAt:t,nextAttemptAt:t,attempts:0,weekly:!1,autoContinue:!0,autoContinueOverride:null,queuePos:null,resuming:!1,first:!1}}),An(g,n.sessionId,[{kind:`session`,patch:{},unset:[`limit`],afterMs:n.resetsInMs}]),l()}else n.kind===`prompt`&&f(i,n.match,t.t)&&(Vn(g,n.sessionId),l())})}return{scenario:e.meta.id,connect(e){return u()?(e({kind:`close`,code:1006,reason:`demo fault: offline`}),{receive(){},close(){}}):(c=!1,a.add(e),o.set(e,new Set),{receive(t){a.has(e)&&(v(e,t),y(e,t))},close(){a.delete(e),o.delete(e)}})},request(e){if(d())return{status:503,contentType:`text/plain`,body:`offline`};if(e.path===`/api/health`)return c?{status:503,contentType:`text/plain`,body:`unreachable`}:{status:200,contentType:`application/json`,body:JSON.stringify({ok:!0,protocol:2,root:`demo`,...Gi(g.m)})};let t=Ui(g.m,h(),e);return e.method!==`GET`&&t.status<300&&l(),t},advance(){let t=h()-r.startedAt,n=!1;for(;r.scriptPos<e.script.length&&e.script[r.scriptPos].at<=t;)Fn(g,e.script[r.scriptPos++].event),n=!0;jn(g)&&(n=!0),n&&(Xn(g),l())},nextAt(){let t=r.scriptPos<e.script.length?r.startedAt+e.script[r.scriptPos].at:null,n=Pn(g.m),i=t==null?n:n==null?t:Math.min(t,n);return i==null?null:i-m()},clockShift:m,snapshot:()=>Ji(r),onChange(e){return s.add(e),()=>{s.delete(e)}},faults:{set(e){if(r.faults=Ji(e),r.faultHits=e.map(()=>0),u())for(let e of[...a])a.delete(e),o.delete(e),e({kind:`close`,code:1006,reason:`demo fault: offline`});l()},fired:()=>r.faults.map((e,t)=>{let n=`match`in e?e.match:{},i=Math.max(0,r.faultHits[t]-(n.from??0));return{rule:t,count:n.times==null?i:Math.min(i,n.times)}}),builds(e){g.m.builds=Ji(e),l()},emit(e){for(let t of a)t({kind:`frame`,msg:Ji(e)})}}}}var z=6e4,B=60*z,V=24*B,H=`~/dev/todo-garden`,U=`~/dev/pocket-notes`,W=`~/dev/trail-log`,Qi=new TextEncoder,$i=(e,t=80,n=24)=>({data:e,seq:Qi.encode(e).length,cols:t,rows:n}),ea=`\x1B[1m`,ta=`\x1B[2m`,na=`\x1B[32m`,ra=`\x1B[0m`,G=e=>`● ${e}\r\n`,K=(e,t,n)=>`${ea}● ${e}${ra}(${t})\r\n${ta} ⎿ ${n}${ra}\r\n`;function ia(e={}){let t=t=>e.outbox?.[t]??0,n=t=>e.healthIndex?{healthIndex:ki(t,e.healthIndex)}:{};return[{id:`r1`,repoName:`todo-garden`,branch:`main`,isPrimary:!0,worktreePath:H,outboxCount:t(`r1`),changedCount:2,hasRepoHealth:!0,...n(`todo-garden`)},{id:`r2`,repoName:`pocket-notes`,branch:`main`,isPrimary:!0,worktreePath:U,outboxCount:t(`r2`),changedCount:0,hasRepoHealth:!0,...n(`pocket-notes`)},{id:`r3`,repoName:`trail-log`,branch:`main`,isPrimary:!0,worktreePath:W,outboxCount:t(`r3`),changedCount:1,hasRepoHealth:!0}]}var aa=2e5,oa=1e6,sa=282e3,ca=38e3,la=[56e3,71e3,88e3,104e3,126e3,148e3,167e3,189e3,208e3,231e3,249e3,264e3,276e3,sa];function ua(e){let t=`2.1.0`,n={};return v.forEach((r,i)=>{let a=g(r.id,t),o=12+i%4;a.window=Array.from({length:o},(t,n)=>({at:e-(o-n)*17*z-i*z,ok:!0})),a.totalGood=o+40+i*3,a.lastGoodAt=e-(3+i*2)*z,n[r.id]=a}),{version:t,versionSeenAt:e-5*z,versionChangedAt:e-4*V,signals:n}}function da(e){let t=t=>e-t,n=ua(e),r=t(95*z),i=la,a=i.map((e,t)=>({t:r+Math.round(t*73*z/(i.length-1)),tok:e})),o=t(178*z),s=[2e4,34e3,51e3,72e3,98e3,127e3,148e3,161e3],c=[31e3,34e3,36e3,ca],l=[...s.map((e,t)=>({t:o+t*5*z,tok:e})),...c.map((e,t)=>({t:o+(s.length+1+t)*5*z,tok:e}))],u=o+(s.length-1)*5*z+3*z;return{ledger:!0,repoHealth:!0,usage:{ok:!0,sessionPct:42,weeklyPct:61,checkedAt:t(2*z),sessionResetAt:e+2*B+10*z,weeklyResetAt:e+3*V+5*B},budget:{budget:{enabled:!0,sessionMax:80,weeklyMax:90,leftoverMax:20},verdict:{blocked:!1,state:`ok`,which:`weekly`,pct:61,max:90}},meter:{calls:14,inTok:41200,outTok:3100,costUsd:.07,today:{calls:6,inTok:17800,outTok:1300,costUsd:.03},byModel:[{model:`haiku`,calls:11,inTok:30400,outTok:2300,costUsd:.04},{model:`sonnet`,calls:3,inTok:10800,outTok:800,costUsd:.03}],lastAt:t(9*z)},clihealth:{health:n,rollup:f(n,e)},context:{"demo-g1":{sessionId:`demo-g1`,claudeSessionId:`c-garden-1`,updatedAt:e,samples:a,events:[],windowTok:oa,windowFrom:`model`,model:`opus`,autoCompactTok:null,truncated:!1,turns:a.length},"demo-n1":{sessionId:`demo-n1`,claudeSessionId:`c-notes-1`,updatedAt:e,samples:l,events:[{t:u,kind:`compact`,trigger:`auto`,preTok:161e3,postTok:31e3}],windowTok:aa,windowFrom:`model`,model:`sonnet`,autoCompactTok:161e3,truncated:!1,turns:l.length}}}}function fa(e,t){let n=t=>e-t,r=`demo-t0`,i=`trail-log · main`,a=`The session window was used up; waiting for it to reset.`,o=[{id:`d3`,ts:n(1*V+5*z),sessionId:r,sessionTitle:i,source:`limit`,phase:`resumed`,question:a,options:[],outcome:`limit`,choice:null,answer:`continue`,rationale:`The window reset; the session was continued where it stopped.`},{id:`d2`,ts:n(1*V+8*z),sessionId:r,sessionTitle:i,source:`limit`,phase:`attempt`,question:a,options:[],outcome:`limit`,choice:null,rationale:`Reset time reached; trying to continue.`},{id:`d1`,ts:n(1*V+16*z),sessionId:r,sessionTitle:i,source:`limit`,phase:`blocked`,question:a,options:[],outcome:`limit`,choice:null,rationale:`Parked until the window resets; nothing was lost.`}],s=[{id:`s4`,ts:n(95*z),sessionId:`demo-g1`,sessionTitle:`todo-garden · main`,repoDir:H,actor:`user`,source:`compose`,kind:`prompt`,text:`make overdue tasks show a red edge`,result:`ok`},{id:`s3`,ts:n(3*B-2*z),sessionId:`demo-n1`,sessionTitle:`pocket-notes · main`,repoDir:U,actor:`user`,source:`compose`,kind:`prompt`,text:`the markdown export drops the title`,result:`unconfirmed`,detail:`The echo window closed first; the conversation log later showed it ran.`},{id:`s2`,ts:n(2*V-60*z),sessionId:`demo-b4`,sessionTitle:`todo-garden · main`,repoDir:H,actor:`auto`,source:`backlog`,kind:`prompt`,text:`Rename 'Tasks' to 'Beds' in the settings screen`,result:`ok`,detail:`Backlog item, opened in a new session`},{id:`s1`,ts:n(1*V+8*z),sessionId:r,sessionTitle:i,repoDir:W,actor:`auto`,source:`limit`,kind:`command`,text:`continue`,result:`ok`,detail:`Window reset, session continued`}],c=(e,t,r,i)=>({id:e,cwd:t,payload:{kind:`prompt`,steps:[r]},target:{kind:`repo`,fresh:!0},trigger:{kind:`now`},state:`done`,createdAt:n(1*V),...i}),l=[c(`b4`,H,`Rename 'Tasks' to 'Beds' in the settings screen`,{label:`Rename in settings`,createdAt:n(2*V),startedAt:n(2*V-B),settledAt:n(2*V-90*z),result:{at:n(2*V-90*z),ok:!0,detail:`ran in a new todo-garden session`}}),c(`i-dep`,H,`Check for outdated dependencies and list what is safe to update`,{label:`Dependency check`,createdAt:n(3*V+2*B),startedAt:n(3*V+2*B-z),settledAt:n(3*V+2*B-6*z),result:{at:n(3*V+2*B-6*z),ok:!0,detail:`3 packages are safe to update; listed in the session`}})],u=[{id:`l1`,cwd:W,repoName:`trail-log`,prompt:`Draw the route in the attached map on the hike page`,needs:[`.claude/inbox/trail-map.png`],createdAt:n(8*z),deadlineAt:e+6*B-8*z,state:`waiting`,missing:[`.claude/inbox/trail-map.png`],title:`Trail map`},{id:`l2`,cwd:U,repoName:`pocket-notes`,prompt:`Import the sample notes and check the markdown export on them`,needs:[`.claude/inbox/sample-notes.zip`],createdAt:n(25*z),deadlineAt:e+6*B-25*z,state:`waiting`,missing:[`.claude/inbox/sample-notes.zip`],title:`Sample import`}],d=(e,t,n,r)=>({id:e,repoId:`r1`,repoDir:H,repoName:`todo-garden`,name:t.slice(t.lastIndexOf(`/`)+1),relPath:t,size:n,mtime:r,ts:r+2e3,source:`outbox`});return{notifications:[{id:`n1`,ts:n(18*z),kind:`image`,title:`New screenshot in todo-garden`,body:`todo-garden-sorted.png`,sessionId:`demo-g1`,image:{repoId:`r1`,relPath:t.sorted}},{id:`n2`,ts:n(5*B),kind:`artifact`,title:`todo-garden-before.png is ready`,body:`A file landed in the outbox of todo-garden.`,file:{repoId:`r1`,relPath:t.before,name:`todo-garden-before.png`,size:31174,mtime:n(5*B)}},{id:`n3`,ts:n(20*B),kind:`backlog`,title:`Backlog groomed`,body:`3 items in todo-garden were ordered and given names.`,backlog:{cwd:H,ids:[`b1`,`b2`,`b3`]}},{id:`n4`,ts:n(3*V+2*B-6*z),kind:`autofire`,title:`Dependency check ran in todo-garden`,body:`3 packages are safe to update.`}],decisions:o,sent:s,intents:l,launches:u,deliveries:[{id:`dl1`,sessionId:`demo-n1`,sessionTitle:`pocket-notes · main`,cwd:U,repoName:`pocket-notes`,text:`the markdown export drops the title`,head:`the markdown export drops the title`,kind:`prompt`,source:`compose`,reported:`unconfirmed`,startedAt:n(3*B-2*z),verdict:`landed`,alive:!0,asks:1,nextAskAt:n(3*B-4*z),deadlineAt:n(3*B-2*z)+20*z,resolvedAt:n(3*B-3*z),reason:`The conversation log shows the prompt ran, so nothing needs sending again.`}],pulls:[d(`pu1`,t.sorted,31628,n(4*B)),d(`pu2`,t.before,31174,n(5*B))],inbox:{r1:[{name:`swipe-sketch.png`,relPath:t.sketch,size:t.sketchSize,mtime:n(2*B),ctime:n(2*B)}]}}}function pa(e){let t={kind:`window`,window:`weekly`,edge:`before`,offsetMin:-180,minPctLeft:20};return[{id:`sch-week`,name:`Spend what is left of the week`,enabled:!0,createdAt:e-4*V,graceMin:120,nextAt:l(t,e,da(e).usage??void 0),rule:t,action:{kind:`backlog`,repoDir:H,text:`Work through the queued backlog items while this week's allowance is still there`,label:`Use the week`,autoFire:!0}}]}var ma=sa,ha=56e3,ga=128e3,_a=151e3,va=6e4,q=60*va,ya=24*q,J=`~/dev/todo-garden`,ba=`~/dev/pocket-notes`,xa=`~/dev/trail-log`,Sa=`.claude/outbox/todo-garden-sorted.png`,Ca=`.claude/outbox/todo-garden-ios.png`,wa=`.claude/outbox/todo-garden-android.png`,Ta=`.claude/outbox/todo-garden-android-fixed.png`,Ea=`.claude/outbox/todo-garden-debug.apk`,Da=8812544,Oa=`make + Add bigger, check iOS sim and Android emulator`,ka=`look like`,Aa=`.claude/outbox/todo-garden-before.png`,ja=`.claude/inbox/swipe-sketch.png`,Ma=`.claude/outbox/trail-log-ridge-loop.png`,Na={[Sa]:31628,[Aa]:31174,[ja]:2169,[Ma]:4174,[Ca]:32068,[wa]:28428,[Ta]:31187},Pa=`claude-opus-5-5`,Fa=e=>e.input+e.output+e.cacheRead+e.cacheWrite;function Ia(e,t,n,r=[]){let i=(e,t,n)=>{let r=ve({...e,cacheWrite1h:n?e.cacheWrite:0},t);if(!r)throw Error(`${t} has no published rate`);return r.total},a=i(e,Pa,!0),o={costUsd:a,cumCostUsd:n.main+a,ctxTok:t,tokens:e,models:[{id:Pa,tok:Fa(e),costUsd:a}],cumAgentCostUsd:n.agents};if(!r.length)return o;let s=new Map,c=new Map,l=0;for(let e of r){let t=i(e.bag,e.model,!1);l+=t;let n=s.get(e.model)??s.set(e.model,{tok:0,costUsd:0}).get(e.model);n.tok+=Fa(e.bag),n.costUsd+=t,c.set(e.type,(c.get(e.type)??0)+1)}return{...o,agentCostUsd:l,cumAgentCostUsd:n.agents+l,agentModels:[...s.entries()].map(([e,t])=>({id:e,...t})),agentTypes:[...c.entries()].map(([e,t])=>({type:e,n:t}))}}var La=e=>({main:e.cumCostUsd??0,agents:e.cumAgentCostUsd??0}),Ra=e=>Math.round((1-e/oa)*100),za=new TextEncoder,Ba=(e,t=80,n=24)=>({data:e,seq:za.encode(e).length,cols:t,rows:n}),Va=`\x1B[1m`,Ha=`\x1B[2m`,Ua=`\x1B[32m`,Wa=`\x1B[0m`,Y=e=>`● ${e}\r\n`,X=(e,t,n)=>`${Va}● ${e}${Wa}(${t})\r\n${Ha} ⎿ ${n}${Wa}\r\n`;function Ga(e){let t=new Date(e),n=(8-t.getUTCDay())%7||7;return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()+n,7,0,0)}function Ka(e){let t=t=>e-t,n=[{kind:`output`,text:`${Ha}You chose: 1. Yes, sort by due date${Wa}\r\n`,afterMs:300},{kind:`output`,text:Y(`Sorting by due date, overdue tasks first.`),afterMs:500},{kind:`output`,text:X(`Update`,`src/store/tasks.ts`,`Added 12 lines, removed 2 lines`),afterMs:700},{kind:`output`,text:X(`Bash`,`npm test -- tasks`,`${Ua}PASS${Wa} src/store/tasks.test.ts (7 tests)`),afterMs:900},{kind:`output`,text:X(`Bash`,`npx playwright screenshot`,`saved ${Sa}`),afterMs:900},{kind:`output`,text:Y(`Done. Tasks now sort by due date, overdue ones on top (src/store/tasks.ts). Screenshot: ${Sa}`),afterMs:500},{kind:`session`,patch:{contextLeft:66},afterMs:100}],r=[{kind:`output`,text:`${Ha}You chose: 2. No, keep creation order${Wa}\r\n`,afterMs:300},{kind:`output`,text:Y(`Understood, the order stays as created. No changes made.`),afterMs:600}],i=[{kind:`output`,text:Y(`I'll look at how the task list is rendered first.`),afterMs:500},{kind:`output`,text:X(`Read`,`src/components/TaskList.tsx`,`Read 84 lines`),afterMs:700},{kind:`output`,text:X(`Read`,`src/store/tasks.ts`,`Read 61 lines`),afterMs:700},{kind:`output`,text:`\r\n${Va}Should the task list be sorted by due date?${Wa}\r\n${Ua}❯ 1. Yes, sort by due date${Wa}\r\n 2. No, keep creation order\r\n`,afterMs:600},{kind:`prompt`,afterMs:0,prompt:{kind:`select`,question:`Should the task list be sorted by due date?`,options:[{index:1,label:`Yes, sort by due date`},{index:2,label:`No, keep creation order`}]},answers:{1:n,2:r}}],a=`demo-g1`,o=(...e)=>{let t=[...la,...e];return{pts:t,marks:[],peak:Math.max(...t),windowTok:oa,windowFrom:`model`,autoCompactTok:null,baseTok:la[0],turns:1+e.length,spentTok:t.reduce((e,t)=>e+t,0)}},s=(...e)=>({pts:[ha,...e],marks:[],peak:Math.max(ha,...e),windowTok:oa,windowFrom:`model`,autoCompactTok:null,baseTok:ha,turns:e.length,spentTok:e.reduce((e,t)=>e+t,ha)}),c=(e,...t)=>({kind:`session`,patch:{contextLeft:Ra(e),contextSpark:s(...t,e)}}),l=Ia({input:3100,output:41e3,cacheRead:98e5,cacheWrite:29e4},ma,{main:0,agents:0},[{type:`Explore`,model:Pa,bag:{input:1200,output:64e3,cacheRead:88e6,cacheWrite:105e4}},{type:`Explore`,model:Pa,bag:{input:900,output:51e3,cacheRead:76e6,cacheWrite:82e4}}]),u=Ia({input:1400,output:33e3,cacheRead:62e5,cacheWrite:24e4},ga,{main:0,agents:0}),d=Ia({input:700,output:46e3,cacheRead:14e6,cacheWrite:6e4},_a,La(u),[{type:`Explore`,model:Pa,bag:{input:800,output:45e3,cacheRead:48e6,cacheWrite:5e5}},{type:`code-reviewer`,model:`claude-fable-5-1`,bag:{input:300,output:7e3,cacheRead:32e5,cacheWrite:14e4}},{type:`Explore`,model:`claude-sonnet-5-5`,bag:{input:200,output:6e3,cacheRead:22e5,cacheWrite:7e4}}]),f=[{kind:`output`,text:Y(`I'll make + Add 44px, then build and check it on both platforms.`),afterMs:150},{kind:`output`,text:X(`Update`,`src/components/QuickAdd.tsx`,`Added 4 lines, removed 2 lines`),afterMs:100},{...c(74e3),afterMs:0},{kind:`output`,text:X(`Bash`,`npm run build && npx cap sync`,`Built the web bundle · synced ios and android`),afterMs:100},{...c(88e3,74e3),afterMs:0},{kind:`output`,text:X(`Bash`,`xcrun simctl io booted screenshot ${Ca}`,`Wrote screenshot to: ${Ca}`)+X(`Bash`,`adb exec-out screencap -p > ${wa}`,`(No output)`),afterMs:1200},{kind:`output`,text:X(`Read`,Ca,`Read image (31KB)`)+X(`Read`,wa,`Read image (28KB)`),afterMs:150},{...c(104e3,74e3,88e3),afterMs:0},{kind:`artifact`,repoId:`r1`,relPath:Ca,size:Na[Ca],afterMs:300},{kind:`artifact`,repoId:`r1`,relPath:wa,size:Na[wa],afterMs:150},{kind:`output`,text:Y(`Done. + Add is 44px on iOS and Android (src/components/QuickAdd.tsx). Screenshots: ${Ca}, ${wa}`),afterMs:150},{kind:`facts`,facts:u,afterMs:100},{...c(ga,74e3,88e3,104e3),afterMs:0}],p=[{kind:`output`,text:Y(`I see your circle in ②: on Android the keyboard covers the bar, because the window does not resize for it. ① on iOS keeps it above.`),afterMs:150},{kind:`output`,text:X(`Update`,`android/app/src/main/AndroidManifest.xml`,`Added 1 line, removed 1 line`)+X(`Update`,`src/components/QuickAdd.tsx`,`Added 3 lines`),afterMs:150},{...c(132e3,ga),afterMs:0},{kind:`output`,text:Y(`Three agents look for other inputs the keyboard can cover while I check both devices again.`)+X(`Agent`,`Explore: text inputs in src/screens`,`Done · 2 sit low on the screen, both scroll`)+X(`Agent`,`Explore: windowSoftInputMode across activities`,`Done · 1 activity`)+X(`Agent`,`code-reviewer: the QuickAdd change`,`Done · no findings`)+X(`Bash`,`xcrun simctl io booted screenshot ${Ca}`,`Wrote screenshot to: ${Ca}`)+X(`Bash`,`adb exec-out screencap -p > ${Ta}`,`(No output)`)+X(`Read`,Ta,`Read image (30KB)`),afterMs:150},{kind:`artifact`,repoId:`r1`,relPath:Ta,size:Na[Ta],afterMs:150},{kind:`output`,text:Y(`Fixed on both: the bar now sits on the keyboard on Android too, + Add whole. After: ${Ta}`),afterMs:150},{...c(146e3,ga,132e3),afterMs:0},{kind:`output`,text:X(`Bash`,`cd android && ./gradlew assembleDebug`,`${Ua}BUILD SUCCESSFUL${Wa} in 41s`),afterMs:1600},{kind:`deliverable`,repoId:`r1`,relPath:Ea,size:Da,afterMs:900},{kind:`output`,text:Y(`Built the debug APK into the outbox: ${Ea} — install it on your phone to try it for real.`),afterMs:150},{kind:`facts`,facts:d,afterMs:2e3},{...c(_a,ga,132e3),afterMs:0}],m=`${O(`~/dev/todo-garden`)}> make overdue tasks show a red edge\r\n`+Y(`Done. Overdue tasks get a red left edge.`)+`\r
17
- `,h=`${O(`~/dev/pocket-notes`)}> the markdown export drops the title\r\n`+Y(`Found it: the exporter skips the first heading.`)+X(`Update`,`src/export/markdown.ts`,`Added 3 lines, removed 1 line`)+X(`Bash`,`npm test -- export`,`${Ua}PASS${Wa} src/export/markdown.test.ts (9 tests)`)+Y(`Fixed. The title is now the first line of the exported file.`)+`\r
18
- `,g={repos:[{id:`r1`,repoName:`todo-garden`,branch:`main`,isPrimary:!0,worktreePath:J,outboxCount:2,changedCount:2,hasRepoHealth:!0},{id:`r2`,repoName:`pocket-notes`,branch:`main`,isPrimary:!0,worktreePath:ba,outboxCount:0,changedCount:0,hasRepoHealth:!0},{id:`r3`,repoName:`trail-log`,branch:`main`,isPrimary:!0,worktreePath:xa,outboxCount:1,changedCount:1,hasRepoHealth:!0}],sessions:[{id:a,cwd:J,title:`todo-garden · main`,tabTitle:`Red edge for overdue`,remoteControl:!0,running:!0,idle:!0,idleSince:t(18*va),lastTurnAt:t(22*va),createdAt:t(100*va),claudeSessionId:`c-garden-1`,contextLeft:Ra(ma),contextSpark:o(),starred:!1,firstPrompt:`make overdue tasks show a red edge`,lastPrompt:`make overdue tasks show a red edge`},{id:`demo-n1`,cwd:ba,title:`pocket-notes · main`,tabTitle:`Markdown export title`,remoteControl:!0,running:!0,idle:!0,idleSince:t(2*q),createdAt:t(3*q),claudeSessionId:`c-notes-1`,contextLeft:81,starred:!1,firstPrompt:`the markdown export drops the title`,lastPrompt:`the markdown export drops the title`}],screens:{"demo-g1":Ba(m),"demo-n1":Ba(h)},history:{"demo-g1":[{id:`h-1`,kind:`prompt`,text:`make overdue tasks show a red edge`,sentAt:t(95*va),outputAt:t(22*va),output:`Done. An overdue task now has a red left edge and a bold due date. I changed src/components/TaskRow.tsx and added a test; all 4 pass.`}],"demo-n1":[{id:`h-2`,kind:`prompt`,text:`the markdown export drops the title`,sentAt:t(3*q-2*va),outputAt:t(102e5),output:`Fixed. The exporter skipped the first heading; the title is now the first line of the file. 9 tests pass.`}]},turnFacts:{[a]:{"h-1":l}},recent:[{cwd:J,title:`todo-garden`,lastActive:t(18*va),claudeSessionId:`c-garden-1`,launch:{}},{cwd:ba,title:`pocket-notes`,lastActive:t(2*q),claudeSessionId:`c-notes-1`,launch:{}},{cwd:xa,title:`trail-log`,lastActive:t(1*ya),claudeSessionId:`c-trail-1`,launch:{}},...Wr(e).map(({convo:e,title:n})=>({cwd:e.repo,title:n,lastActive:e.lastAt??t(ya),claudeSessionId:e.id,launch:{}}))],closed:[{id:`demo-t0`,cwd:xa,title:`trail-log · main`,closedAt:t(1*ya),closedBy:`you`,claudeSessionId:`c-trail-1`,openedAt:t(888e5),lastActiveAt:t(1*ya),turns:3,tabTitle:`GPX import`,firstPrompt:`import a GPX file and list the hikes by distance`,lastPrompt:`show the total distance on the list`}],backlog:{auto:!1,items:[{id:`b1`,text:`Add a due-date picker to the new-task sheet`,status:`queued`,repoDir:J,createdAt:t(1*ya),order:1,label:`Due-date picker`},{id:`b2`,text:`Group tasks by day in the list`,status:`queued`,repoDir:J,createdAt:t(1*ya),order:2,label:`Group by day`},{id:`b3`,text:`Make the empty state friendlier`,status:`queued`,repoDir:J,createdAt:t(20*q),order:3,label:`Empty state`},{id:`b4`,text:`Rename 'Tasks' to 'Beds' in the settings screen`,status:`done`,repoDir:J,createdAt:t(2*ya),order:0,label:`Rename in settings`,startedAt:t(2*ya-q),finishedAt:t(2*ya-90*va)},{id:`b5`,text:`Sync notes in the background every 15 minutes`,status:`queued`,repoDir:ba,createdAt:t(5*q),order:1,label:`Background sync`}]},schedules:[{id:`sch1`,name:`Weekly dependency check`,enabled:!0,createdAt:t(6*ya),graceMin:120,nextAt:Ga(e),rule:{kind:`weekly`,days:[1],hour:9,minute:0,tz:`Europe/Berlin`},action:{kind:`backlog`,repoDir:J,text:`Check for outdated dependencies and list what is safe to update`,label:`Dependency check`,autoFire:!0}},...pa(e)],gallery:{r1:[{name:`todo-garden-sorted.png`,relPath:Sa,size:Na[Sa],mtime:t(4*q),ctime:t(4*q)},{name:`todo-garden-before.png`,relPath:Aa,size:Na[Aa],mtime:t(5*q),ctime:t(5*q)}],r3:[{name:`trail-log-ridge-loop.png`,relPath:Ma,size:Na[Ma],mtime:t(882e5),ctime:t(882e5)}]},...fa(e,{sorted:Sa,before:Aa,sketch:ja,sketchSize:Na[ja]}),numbers:da(e),replies:[{match:Oa,cwd:J,steps:f},{match:`sort`,cwd:J,steps:i},{match:ka,cwd:J,steps:p},{steps:[{kind:`output`,text:Y(`I'll start by looking at how the project is laid out.`),afterMs:500},{kind:`output`,text:X(`Read`,`package.json`,`Read 38 lines`),afterMs:700},{kind:`output`,text:Y(`This is the demo desktop, so I stop here. On your own desktop I would carry on and make the change.`),afterMs:600}]}],banner:qt};return{meta:{id:`first-look`,protocol:2,stamp:`first-look-7`},clock:{start:e},state:{bootId:`boot`,model:g},script:[]}}var qa=`.claude/outbox/`,Z={empty:`${qa}todo-garden-empty-state.png`,picker:`${qa}todo-garden-date-picker.png`,grouped:`${qa}todo-garden-grouped.png`,sorted:`${qa}todo-garden-sorted.png`,html:`${qa}todo-garden-preview.html`,md:`${qa}todo-garden-release-notes.md`,ridge:`${qa}trail-log-ridge-loop.png`,sketch:`.claude/inbox/swipe-sketch.png`},Ja={[Z.empty]:4324,[Z.picker]:6080,[Z.grouped]:6142,[Z.sorted]:31628,[Z.html]:852,[Z.md]:430,[Z.ridge]:4174,[Z.sketch]:2169};function Ya(e){let t=t=>e-t,n=(e,t)=>({name:e.slice(e.lastIndexOf(`/`)+1),relPath:e,size:Ja[e],mtime:t,ctime:t}),r=`${O(`~/dev/todo-garden`)}> show me the new screens and write release notes for 0.4\r\n`+G(`I'll render the three screens and collect them in the outbox.`)+K(`Bash`,`npx playwright screenshot`,`saved ${Z.empty}`)+K(`Bash`,`npx playwright screenshot`,`saved ${Z.picker}`)+K(`Bash`,`npx playwright screenshot`,`saved ${Z.grouped}`)+K(`Write`,Z.md,`Wrote 19 lines`)+K(`Write`,Z.html,`Wrote 18 lines`)+G(`Done. Screens: ${Z.empty}, ${Z.picker}, ${Z.grouped}. Notes: ${Z.md}. Preview page: ${Z.html}`)+`\r
19
- `,i={repos:ia({outbox:{r1:6,r3:1}}),sessions:[{id:`demo-g1`,cwd:H,title:`todo-garden · main`,tabTitle:`Screens and release notes`,remoteControl:!0,running:!0,idle:!0,idleSince:t(25*z),createdAt:t(70*z),claudeSessionId:`c-garden-3`,contextLeft:68,starred:!1,firstPrompt:`show me the new screens and write release notes for 0.4`,lastPrompt:`show me the new screens and write release notes for 0.4`}],screens:{"demo-g1":$i(r)},history:{"demo-g1":[{id:`h-1`,kind:`prompt`,text:`show me the new screens and write release notes for 0.4`,sentAt:t(68*z),outputAt:t(25*z),output:`Done. Screens: ${Z.empty}, ${Z.picker}, ${Z.grouped}. Notes: ${Z.md}. Preview page: ${Z.html}`}]},recent:[{cwd:H,title:`todo-garden`,lastActive:t(25*z),claudeSessionId:`c-garden-3`,launch:{}},{cwd:U,title:`pocket-notes`,lastActive:t(1*V),claudeSessionId:`c-notes-1`,launch:{}},{cwd:W,title:`trail-log`,lastActive:t(3*B),claudeSessionId:`c-trail-1`,launch:{}}],closed:[],gallery:{r1:[n(Z.md,t(26*z)),n(Z.html,t(27*z)),n(Z.grouped,t(29*z)),n(Z.picker,t(31*z)),n(Z.empty,t(33*z)),n(Z.sorted,t(4*B))],r3:[n(Z.ridge,t(3*B))]},inbox:{r1:[n(Z.sketch,t(2*B))]},replies:[],banner:qt};return{meta:{id:`gallery-and-files`,protocol:2,stamp:`gallery-and-files-1`},clock:{start:e},state:{bootId:`boot`,model:i},script:[]}}var Xa=`add a week view to the calendar screen`,Za=12e5,Qa=2e5,$a=2e3,eo=[22e3,31e3,46e3,52e3,58e3,63e3,69e3,74e3,8e4,86e3,91e3,97e3,104e3],to=[112e3,121e3,133e3,141e3],no=[149e3,156e3],ro=[163e3,171e3],io=`\x1B[38;2;255;107;128m`,ao=e=>new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}),oo=e=>`${io}● 5-hour window used up · back at ${ao(e)} (demo)${ra}\r\n`,so=`Demo: the clock skips ahead to the 5-hour reset.`,co=5640,lo={think:2400,toastAfterWall:6600,jumpAfterToast:2400,firstLineAfterJump:1e3},uo=[lo.firstLineAfterJump,1e3],fo=e=>e*3e-7+4e3*375e-8+$a*15e-6,po=e=>Math.round(e*100)/100;function mo(e,t){let n=e.slice(0,t);return{pts:n,marks:[],peak:Math.max(...n),baseTok:n[0],usageTok:n.reduce((e,t)=>e+t+$a,0),costUsd:po(n.reduce((e,t)=>e+fo(t),0)),windowTok:Qa,windowFrom:`model`,autoCompactTok:18e4}}var ho=e=>Math.round(100*(1-e/Qa)),go=[...eo,...to,...no,...ro],_o=e=>mo(go,e).usageTok??0;function vo(e){let t=t=>e-t,n=`demo-g1`,r=e+1*B+47*z,i=r+3e4,a=e+3*V+4*B,o=(e,t,n=r)=>({ok:!0,sessionPct:e,weeklyPct:t,sessionResetAt:n,weeklyResetAt:a}),s=(e,t,n,r,i)=>[{kind:`session`,patch:{contextSpark:mo(go,e),contextLeft:ho(go[e-1])},...r?{afterMs:r}:{}},{kind:`usage`,usage:o(t,n,i)}],c=eo.length,l=c+to.length,u=l+no.length,d=(e,t)=>t.map(({afterMs:t,...r})=>({at:e,event:r.kind===`session`?{...r,sessionId:n}:r})),f=[{at:800,event:{kind:`output`,sessionId:n,text:K(`Read`,`src/screens/CalendarScreen.tsx`,`Read 118 lines`)}},...d(1600,s(c+1,88,38)),{at:2400,event:{kind:`output`,sessionId:n,text:G(`A week is seven day columns; each column lists that day's tasks.`)}},...d(3200,s(c+2,90,38)),{at:4200,event:{kind:`output`,sessionId:n,text:K(`Write`,`src/screens/WeekView.tsx`,`Wrote 96 lines`)}},...d(5e3,s(c+3,92,39)),{at:5800,event:{kind:`output`,sessionId:n,text:K(`Bash`,`npm test -- WeekView`,`${na}PASS${ra} src/screens/WeekView.test.tsx (5 tests)`)}},...d(6400,s(l,94,39)),{at:7200,event:{kind:`output`,sessionId:n,text:G(`Done. The calendar has a week view (src/screens/WeekView.tsx); a tab switches between day and week.`)}},{at:7300,event:{kind:`turnEnd`,sessionId:n}}],p=[{kind:`output`,text:G(`A task row becomes draggable; dropping it on a day column sets its due date.`),afterMs:lo.think},{kind:`output`,text:K(`Read`,`src/components/TaskRow.tsx`,`Read 64 lines`),afterMs:1e3},...s(l+1,97,40),{kind:`output`,text:K(`Update`,`src/components/TaskRow.tsx`,`Added 21 lines, removed 2 lines`),afterMs:200},...s(u,100,40),{kind:`wall`,resetAt:r,afterMs:200,meanwhile:[{kind:`output`,text:oo(r)},{kind:`frame`,msg:{t:`toast`,text:so},afterMs:lo.toastAfterWall},{kind:`clock`,to:i,afterMs:lo.jumpAfterToast},{kind:`usage`,usage:o(0,40,i+5*B)}],resumed:[{kind:`output`,text:G(`Picking up where it stopped: each day column takes the drop.`),afterMs:uo[0]},{kind:`output`,afterMs:uo[1],text:K(`Update`,`src/screens/WeekView.tsx`,`Added 34 lines, removed 5 lines`)+K(`Bash`,`npm test -- TaskRow WeekView`,`${na}PASS${ra} 2 files (11 tests)`)},...s(u+1,3,41,void 0,i+5*B),...s(u+2,5,41,void 0,i+5*B),{kind:`output`,text:G(`Done. Drag a task onto another day and its due date moves with it (src/components/TaskRow.tsx).`),afterMs:co-lo.jumpAfterToast-uo.reduce((e,t)=>e+t,0)-200}]}],m={id:n,cwd:H,title:`todo-garden · main`,tabTitle:`Week view`,remoteControl:!0,running:!0,turnActive:!0,turnStartedAt:t(2e4),lastTurnAt:t(2e4),idle:!1,createdAt:t(80*z),claudeSessionId:`c-garden-5`,contextLeft:ho(eo[c-1]),starred:!1,hooked:!0,firstPrompt:`group the tasks by day, today first`,lastPrompt:Xa,contextSpark:mo(go,c),budget:{cfg:{unit:`tok`,max:Za,interrupt:!1},verdict:{state:`ok`,unit:`tok`,max:Za,spent:_o(c),agentShare:null}}},h={repos:ia(),sessions:[m,{id:`demo-n1`,cwd:U,title:`pocket-notes · main`,tabTitle:`Background sync`,remoteControl:!0,running:!0,idle:!0,idleSince:t(55*z),createdAt:t(3*B),claudeSessionId:`c-notes-2`,contextLeft:83,starred:!1,firstPrompt:`sketch a background sync that runs every 15 minutes`,lastPrompt:`sketch a background sync that runs every 15 minutes`}],screens:{[n]:$i(`${O(`~/dev/todo-garden`)}\x1b[1m>\x1b[0m ${Xa}\r\n`+G(`I'll start with how the calendar screen lays out a day.`)),"demo-n1":$i(`${O(`~/dev/pocket-notes`)}> sketch a background sync that runs every 15 minutes\r\n`+G(`Sketched: a timer in src/sync/scheduler.ts calls the existing push, skipping when offline.`)+`\r
20
- `)},history:{[n]:[{id:`h-1`,kind:`prompt`,text:`group the tasks by day, today first`,sentAt:t(78*z),outputAt:t(70*z),output:`Done. The list is grouped by day, today first (src/store/tasks.ts).`},{id:`h-2`,kind:`prompt`,text:Xa,sentAt:t(2e4)}],"demo-n1":[]},recent:[{cwd:H,title:`todo-garden`,lastActive:t(1*z),claudeSessionId:`c-garden-5`,launch:{}},{cwd:U,title:`pocket-notes`,lastActive:t(55*z),claudeSessionId:`c-notes-2`,launch:{}},{cwd:W,title:`trail-log`,lastActive:t(1*V),claudeSessionId:`c-trail-1`,launch:{}}],closed:[],decisions:[],notifications:[],limitConfig:{enabled:!0,mode:`one`},numbers:{usage:{...o(86,38),checkedAt:t(1*z)}},replies:[{match:`dragged to another day`,cwd:H,steps:p}],banner:qt};return{meta:{id:`limit-and-budget`,protocol:2,stamp:`limit-and-budget-1`},clock:{start:e},state:{bootId:`boot`,model:h},script:f}}var yo={samples:[{t:-36476e3,tok:61135,used:61442,kinds:[2,307,31530,29603],cum:[2,307,31530,29603],model:0},{t:-36435e3,tok:65371,used:192152,kinds:[2,201,64822,547],cum:[6,822,157485,33839],model:0},{t:-36405e3,tok:75583,used:414996,kinds:[2,2182,75191,390],cum:[12,3483,367450,44051],model:0},{t:-36362e3,tok:81858,used:579239,kinds:[2,3265,78699,3157],cum:[16,7167,521730,50326],model:0},{t:-36278e3,tok:97472,used:861141,kinds:[2,131,89706,7764],cum:[22,15198,779981,65940],model:0},{t:-36148e3,tok:101279,used:1062742,kinds:[2,116,98891,2386],cum:[26,16627,976473,69616],model:0},{t:-36073e3,tok:105598,used:1376153,kinds:[2,287,104272,1324],cum:[32,17611,1284815,73695],model:0},{t:-36043e3,tok:111583,used:1596955,kinds:[2,368,107817,3764],cum:[36,19011,1498515,79393],model:0},{t:-3594e4,tok:117110,used:1945119,kinds:[2,979,115536,1572],cum:[42,21162,1839464,84451],model:0},{t:-35849e3,tok:120514,used:2186018,kinds:[2,1229,119154,1358],cum:[46,22561,2075726,87685],model:0},{t:-35828e3,tok:125414,used:2559973,kinds:[2,966,124462,950],cum:[52,24005,2443331,92585],model:0},{t:-35799e3,tok:128230,used:2816631,kinds:[2,1568,126858,1370],cum:[56,25684,2695601,95290],model:0},{t:-35725e3,tok:135086,used:3216434,kinds:[2,994,132903,2181],cum:[62,27419,3087548,101405],model:0},{t:-35658e3,tok:138362,used:3493155,kinds:[2,1255,137102,1258],cum:[66,28805,3359734,104550],model:0},{t:-35532e3,tok:146946,used:3926246,kinds:[2,240,142005,4939],cum:[72,32434,3780782,112958],model:0},{t:-3544e4,tok:151296,used:4226811,kinds:[2,389,148413,2881],cum:[76,33288,4076379,117068],model:0},{t:-35133e3,tok:156952,used:4694524,kinds:[2,978,155456,1494],cum:[82,35467,4536881,122094],model:0},{t:-34968e3,tok:160494,used:5015644,kinds:[2,1593,159031,1461],cum:[86,37255,4852862,125441],model:0},{t:-34905e3,tok:171732,used:5527576,kinds:[2,1064,170109,1621],cum:[92,40613,5350473,136398],model:0},{t:-34876e3,tok:177470,used:5882314,kinds:[2,179,175868,1600],cum:[96,42011,5698071,142136],model:0},{t:-3475e4,tok:182838,used:6427200,kinds:[2,356,181945,891],cum:[102,43039,6236734,147325],model:0},{t:-34663e3,tok:186672,used:6799767,kinds:[2,134,184535,2135],cum:[106,44397,6604461,150803],model:0},{t:-34593e3,tok:191781,used:7371960,kinds:[2,915,190269,1510],cum:[112,46613,7169596,155639],model:0},{t:-3453e4,tok:195373,used:7762366,kinds:[2,1238,193793,1578],cum:[116,48044,7555168,159038],model:0},{t:-34291e3,tok:202754,used:8362511,kinds:[2,222,199181,3571],cum:[122,48735,8147370,166284],model:0},{t:-34263e3,tok:206682,used:8775292,kinds:[2,221,203718,2962],cum:[126,51114,8553840,170212],model:0},{t:-34115e3,tok:211796,used:9407299,kinds:[2,1203,210025,1769],cum:[132,53361,9178848,174958],model:0},{t:-33959e3,tok:215390,used:9837131,kinds:[2,425,214015,1373],cum:[136,53904,9604657,178434],model:0},{t:-33938e3,tok:219753,used:10495255,kinds:[2,432,219501,250],cum:[142,54791,10257950,182372],model:0},{t:-33932e3,tok:220936,used:10937177,kinds:[2,116,220742,192],cum:[146,55033,10698443,183555],model:0},{t:-33919e3,tok:222389,used:11382165,kinds:[2,404,221346,1041],cum:[150,56284,11140723,185008],model:0},{t:-33893e3,tok:224812,used:12054996,kinds:[2,237,223480,1330],cum:[156,57925,11809484,187431],model:0},{t:-33796e3,tok:227407,used:12510204,kinds:[2,956,226564,841],cum:[160,59160,12261095,189789],model:0},{t:-33678e3,tok:234044,used:13210276,kinds:[2,1260,232694,1348],cum:[166,61897,12952034,196179],model:0},{t:-33613e3,tok:237954,used:13686019,kinds:[2,1397,236390,1562],cum:[170,63462,13422466,199921],model:0},{t:-33131e3,tok:245172,used:14418028,kinds:[2,825,243494,1676],cum:[176,65289,14146893,205670],model:0},{t:-33124e3,tok:247482,used:14912968,kinds:[2,315,246902,578],cum:[180,65843,14638965,207980],model:0},{t:-33065e3,tok:248834,used:15658561,kinds:[2,148,248453,379],cum:[186,66190,15382907,209278],model:0},{t:-33049e3,tok:251770,used:16161495,kinds:[2,1339,249161,2607],cum:[190,68191,15880900,212214],model:0},{t:-32938e3,tok:256956,used:16928361,kinds:[2,149,255077,1877],cum:[196,69535,16641445,217185],model:0},{t:-32855e3,tok:259845,used:17447206,kinds:[2,224,258364,1479],cum:[200,70169,17156912,219925],model:0},{t:-3283e4,tok:263510,used:18233566,kinds:[2,1197,260426,3082],cum:[206,72393,17937377,223590],model:0},{t:-32766e3,tok:266354,used:18765801,kinds:[2,605,265274,1078],cum:[210,73192,18466159,226240],model:0},{t:-32539e3,tok:271361,used:19575263,kinds:[2,734,269375,1984],cum:[216,74277,19269690,231080],model:0},{t:-32496e3,tok:272659,used:20120654,kinds:[2,82,272367,290],cum:[220,74640,19813416,232378],model:0},{t:-32399e3,tok:284009,used:20959688,kinds:[2,394,273599,10408],cum:[226,82874,20632942,243646],model:0},{t:-32315e3,tok:286780,used:21532703,kinds:[2,306,285634,1144],cum:[230,83473,21202583,246417],model:0},{t:-32291e3,tok:291479,used:22401488,kinds:[2,1037,287698,3779],cum:[236,85919,22064217,251116],model:0},{t:-32276e3,tok:294365,used:22989846,kinds:[2,1013,292978,1385],cum:[240,87018,22648672,253916],model:0},{t:-32169e3,tok:299964,used:23885425,kinds:[2,124,297596,2366],cum:[246,88759,23537057,259363],model:0},{t:-32127e3,tok:303262,used:24491280,kinds:[2,224,301394,1866],cum:[250,89956,24138537,262537],model:0},{t:-32088e3,tok:309367,used:25416284,kinds:[2,944,307866,1499],cum:[256,92469,25055286,268273],model:0},{t:-32018e3,tok:312913,used:26041607,kinds:[2,896,311512,1399],cum:[260,93662,25676163,271522],model:0},{t:-31983e3,tok:323334,used:27004353,kinds:[2,379,320435,2897],cum:[266,95937,26626207,281943],model:0},{t:-31934e3,tok:326611,used:27657555,kinds:[2,866,325339,1270],cum:[270,97187,27275257,284841],model:0},{t:-31857e3,tok:330656,used:28646253,kinds:[2,242,329478,1176],cum:[276,97898,28259317,288762],model:0},{t:-31836e3,tok:335039,used:29314940,kinds:[2,904,331731,3306],cum:[280,99813,28921702,293145],model:0},{t:-31815e3,tok:341625,used:30336348,kinds:[2,339,340088,1535],cum:[286,101379,29935304,299379],model:0},{t:-31783e3,tok:346191,used:31028044,kinds:[2,1004,344499,1690],cum:[290,102817,30621426,303511],model:0},{t:-31716e3,tok:351854,used:32078218,kinds:[2,284,349813,2039],cum:[296,103554,31665647,308721],model:0},{t:-31636e3,tok:355912,used:32789276,kinds:[2,137,353907,2003],cum:[300,104791,32371690,312495],model:0},{t:-3159e4,tok:359545,used:33507556,kinds:[2,102,357345,2198],cum:[304,106179,33085082,315991],model:0},{t:-31504e3,tok:364681,used:34598360,kinds:[2,265,363438,1241],cum:[310,107911,34169229,320910],model:0},{t:-31497e3,tok:365793,used:34964467,kinds:[2,314,364679,1112],cum:[312,108225,34533908,322022],model:0},{t:-31326e3,tok:71336,used:35036132,kinds:[2,329,31530,39804],cum:[314,108554,34565438,361826],model:0},{t:-30961e3,tok:77122,used:35262923,kinds:[2,450,74815,2305],cum:[320,110599,34784786,367218],model:0},{t:-3088e4,tok:78411,used:35419798,kinds:[2,176,78017,392],cum:[324,111044,34940373,368057],model:0},{t:-30866e3,tok:86742,used:35672046,kinds:[2,358,85137,1603],cum:[330,112079,35183249,376388],model:0},{t:-30855e3,tok:88171,used:35848301,kinds:[2,141,87436,733],cum:[334,112725,35357425,377817],model:0},{t:-30825e3,tok:93282,used:36126084,kinds:[2,138,92652,628],cum:[340,114834,35627982,382928],model:0},{t:-30814e3,tok:95360,used:36316615,kinds:[2,525,94342,1016],cum:[344,115661,35815604,385006],model:0},{t:-30802e3,tok:96998,used:36607309,kinds:[2,695,96495,501],cum:[350,116790,36103525,386644],model:0},{t:-30791e3,tok:99997,used:36807498,kinds:[2,259,99654,341],cum:[354,117326,36300175,389643],model:0},{t:-3075e4,tok:102966,used:37114754,kinds:[2,836,100934,2030],cum:[360,120365,36601417,392612],model:0},{t:-30249e3,tok:107558,used:37329136,kinds:[2,376,105251,2305],cum:[364,121936,36810468,396368],model:0},{t:-30108e3,tok:110966,used:37657897,kinds:[2,279,108678,2286],cum:[370,122669,37135458,399400],model:0},{t:-30099e3,tok:115597,used:37889e3,kinds:[2,721,114319,1276],cum:[374,123854,37360741,404031],model:0},{t:-30065e3,tok:117820,used:38242808,kinds:[2,935,117320,498],cum:[380,126149,37710025,406254],model:0},{t:-30029e3,tok:120200,used:38483861,kinds:[2,675,118775,1423],cum:[384,128225,37946618,408634],model:0},{t:-29931e3,tok:121815,used:38849466,kinds:[2,652,121478,335],cum:[390,129508,38309319,410249],model:0},{t:-29925e3,tok:123924,used:39096359,kinds:[2,258,122581,1341],cum:[394,129894,38553713,412358],model:0},{t:-29756e3,tok:130047,used:39481968,kinds:[2,792,128657,1388],cum:[400,134332,38930508,416728],model:0},{t:-29646e3,tok:133678,used:39748202,kinds:[2,229,132325,1351],cum:[404,135144,39192878,419776],model:0},{t:-29619e3,tok:137476,used:40160357,kinds:[2,319,136991,483],cum:[410,136914,39599459,423574],model:0},{t:-29477e3,tok:142065,used:40443636,kinds:[2,1605,139368,2695],cum:[414,138758,39876620,427844],model:0},{t:-932e3,tok:147932,used:40885393,kinds:[2,1371,29551,118379],cum:[420,141577,40192473,550923],model:0},{t:-56e4,tok:151249,used:41187005,kinds:[2,461,149900,1347],cum:[424,142262,40490303,554016],model:0},{t:-369e3,tok:155389,used:41653e3,kinds:[2,264,155114,273],cum:[430,143574,40950840,558156],model:0},{t:-203e3,tok:157997,used:41973376,kinds:[2,4466,157911,84],cum:[434,149840,41264138,558964],model:0},{t:-67e3,tok:166741,used:42471597,kinds:[2,194,165079,1660],cum:[440,151777,41752120,567260],model:0},{t:0,tok:170003,used:42810991,kinds:[2,287,168182,1819],cum:[444,152984,42087235,570328],model:0}],events:[{kind:`compact`,t:-31329e3,trigger:`auto`,preTok:367262,postTok:17560},{kind:`rebuild`,t:-932e3,wroteTok:118379,prevTok:146765,gapMs:28374677}],windowTok:1e6,windowFrom:`measured`,model:`claude-opus-5-5`,autoCompactTok:367262,autoCompactSet:{tokens:4e5,source:`project`,raw:`400k`},truncated:!1,turns:7,usageTok:288229903,agentTok:245418912,split:{input:444,output:152984,cacheRead:42087235,cacheWrite:570328,cacheWrite1h:570328,turns:222},agentSplit:{input:4960,output:1448003,cacheRead:235699991,cacheWrite:8265958,cacheWrite1h:0,turns:2374},agentCum:[[-36271e3,1033386],[-3626e4,2573086],[-36246e3,4288840],[-36222e3,6037965],[-36202e3,8045500],[-36181e3,10003217],[-3615e4,12013607],[-36128e3,13679210],[-36102e3,15477814],[-36075e3,17497687],[-36024e3,19711569],[-35976e3,21823554],[-35935e3,24048890],[-35913e3,25899009],[-35876e3,28344400],[-35835e3,30711253],[-35777e3,32259335],[-3573e4,34113875],[-35665e3,36047630],[-35627e3,37874038],[-3557e4,40373527],[-35531e3,42730025],[-35506e3,44795626],[-35476e3,47050058],[-35444e3,49671629],[-35403e3,52449416],[-35169e3,54778651],[-35116e3,56862184],[-35051e3,59328443],[-34976e3,62078326],[-3493e4,64408839],[-34901e3,66173603],[-34877e3,67740207],[-34847e3,69463977],[-34816e3,71433700],[-34789e3,73442144],[-34757e3,75497434],[-34721e3,77757881],[-34655e3,79944845],[-34624e3,81898242],[-34584e3,84098825],[-34546e3,86171672],[-34504e3,88337124],[-34446e3,90736594],[-34394e3,93167479],[-34328e3,95787214],[-34262e3,98210340],[-34218e3,100564637],[-3416e4,103178049],[-34108e3,105351737],[-34073e3,107205445],[-34035e3,109299956],[-3398e4,111877211],[-33895e3,114484423],[-33835e3,116465744],[-3378e4,118536503],[-33742e3,120493244],[-33661e3,122504659],[-33577e3,124998999],[-3348e4,127842543],[-33345e3,130681246],[-33219e3,134107618],[-33121e3,136544772],[-33067e3,138113361],[-33016e3,139731797],[-32922e3,141484793],[-32838e3,143130747],[-32729e3,144841413],[-32398e3,146558408],[-3239e4,147827721],[-32375e3,149445431],[-32353e3,151211714],[-3232e4,153109129],[-32278e3,154751486],[-32252e3,156465306],[-3223e4,158335177],[-32201e3,160135826],[-32175e3,162216489],[-32145e3,164107264],[-32116e3,166307754],[-32094e3,168128429],[-32066e3,170255304],[-32027e3,172413884],[-32002e3,174256121],[-3197e4,176021853],[-31934e3,178330890],[-31894e3,180261544],[-31866e3,182105031],[-31838e3,184180674],[-31817e3,185925988],[-31787e3,187599562],[-31765e3,189447959],[-3173e4,191290575],[-31675e3,193338716],[-31624e3,195353467],[-3156e4,197018547],[-31446e3,198558965],[-31376e3,200657565],[-31095e3,203509714],[-30862e3,205577702],[-30676e3,207479097],[-30516e3,209933231],[-30299e3,212965787],[-30163e3,214773439],[-29877e3,216122093],[-29817e3,217729736],[-29768e3,219611878],[-29677e3,221389975],[-29549e3,224234806],[-29353e3,225967302],[-769e3,227652879],[-161e3,229616786],[-151e3,231022879],[-133e3,232902927],[-1e5,234938423],[-73e3,236967403],[-5e4,238862235],[-18e3,241074650],[11e3,243143450],[34e3,245418912]],cost:{input:0,output:3.06,cacheRead:8.42,cacheWrite:4.56,total:16.04},agentCost:{input:.02,output:27.38,cacheRead:47.14,cacheWrite:37.57,total:112.11},models:[`claude-opus-5-5`,`claude-sonnet-5-5`],agents:[{id:`a01`,at:-36278e3,endAt:-35952e3,tok:2533059,type:`general-purpose`,costUsd:1.34,peakTok:105479,turns:28,ctx:[[-36278e3,46133],[-36266e3,80851],[-36201e3,91614],[-36107e3,96036],[-36023e3,101227],[-35952e3,105479]],skills:[{t:-36276e3,name:`server`,chars:8480},{t:-36276e3,name:`server-files`,chars:25420},{t:-36276e3,name:`testing`,chars:11725}],model:0},{id:`a02`,at:-36278e3,endAt:-36001e3,tok:5176271,type:`general-purpose`,costUsd:2.14,peakTok:138126,turns:46,ctx:[[-36278e3,46092],[-36252e3,96515],[-36208e3,108750],[-36151e3,121996],[-36083e3,132322],[-36001e3,138126]],skills:[{t:-36277e3,name:`server`,chars:8480},{t:-36277e3,name:`server-jobs`,chars:20933},{t:-36276e3,name:`client`,chars:8520},{t:-36276e3,name:`client-lists`,chars:23004},{t:-36276e3,name:`testing`,chars:11725}],model:0},{id:`a03`,at:-36278e3,endAt:-35727e3,tok:5400851,type:`general-purpose`,costUsd:2.41,peakTok:140211,turns:49,ctx:[[-36278e3,46119],[-36243e3,84495],[-36159e3,110886],[-36012e3,123121],[-35914e3,134756],[-35727e3,140211]],skills:[{t:-36276e3,name:`server`,chars:8480},{t:-36274e3,name:`server-files`,chars:25420},{t:-36181e3,name:`testing`,chars:11725}],model:0},{id:`a04`,at:-36278e3,endAt:-35847e3,tok:5798257,type:`general-purpose`,costUsd:2.51,peakTok:160655,turns:46,ctx:[[-36278e3,46174],[-36252e3,107601],[-36205e3,129327],[-36102e3,136208],[-35968e3,149665],[-35847e3,160655]],skills:[{t:-36271e3,name:`server`,chars:8480},{t:-36271e3,name:`server-files`,chars:25420},{t:-36269e3,name:`shared`,chars:26380},{t:-36269e3,name:`client`,chars:8520},{t:-36268e3,name:`client-lists`,chars:23004},{t:-36268e3,name:`testing`,chars:11725},{t:-35889e3,name:`ux`,chars:6225}],model:0},{id:`a05`,at:-36277e3,endAt:-36165e3,tok:1125126,type:`general-purpose`,costUsd:.46,peakTok:77326,turns:16,ctx:[[-36277e3,46041],[-3626e4,67409],[-36238e3,73033],[-36216e3,74117],[-36195e3,75326],[-36165e3,77326]],skills:[{t:-36272e3,name:`shared`,chars:26380},{t:-36272e3,name:`testing`,chars:11725}],model:1},{id:`a06`,at:-36276e3,endAt:-3606e4,tok:1820224,type:`general-purpose`,costUsd:.72,peakTok:90418,turns:24,ctx:[[-36276e3,45992],[-36248e3,66043],[-36202e3,74692],[-3615e4,81993],[-36117e3,85587],[-3606e4,90418]],skills:[{t:-36262e3,name:`client`,chars:8520}],model:1},{id:`a07`,at:-36275e3,endAt:-36146e3,tok:1845953,type:`general-purpose`,costUsd:.68,peakTok:94404,turns:22,ctx:[[-36275e3,45957],[-36255e3,77958],[-36229e3,86136],[-36196e3,90700],[-36176e3,92101],[-36146e3,94404]],skills:[{t:-3627e4,name:`server`,chars:8480},{t:-3627e4,name:`server-sessions`,chars:27097},{t:-3627e4,name:`testing`,chars:11725}],model:1},{id:`a08`,at:-36148e3,endAt:-36075e3,tok:847594,type:`general-purpose`,costUsd:.53,peakTok:68192,turns:14,ctx:[[-36148e3,46115],[-36135e3,56514],[-3613e4,59678],[-36117e3,62833],[-36107e3,65227],[-36075e3,68192]],model:0,skills:[]},{id:`a09`,at:-36135e3,endAt:-36057e3,tok:764298,type:`general-purpose`,costUsd:.6,peakTok:83404,turns:11,ctx:[[-36135e3,46245],[-36131e3,61566],[-36125e3,68046],[-36111e3,73869],[-36092e3,79222],[-36057e3,83404]],skills:[{t:-36133e3,name:`server-sessions`,chars:27097}],model:0},{id:`a10`,at:-36045e3,endAt:-35851e3,tok:1867778,type:`general-purpose`,costUsd:1.17,peakTok:111509,turns:20,ctx:[[-36045e3,46293],[-36022e3,85241],[-3595e4,95580],[-35939e3,102870],[-35924e3,104596],[-35851e3,111509]],skills:[{t:-36043e3,name:`client`,chars:8520},{t:-36043e3,name:`client-lists`,chars:23004},{t:-36043e3,name:`client-shell`,chars:19447}],model:0},{id:`a11`,at:-35985e3,endAt:-35804e3,tok:2762666,type:`general-purpose`,costUsd:1.36,peakTok:122662,turns:28,ctx:[[-35985e3,46256],[-35972e3,78915],[-35924e3,101877],[-3589e4,106562],[-35861e3,117288],[-35804e3,122662]],skills:[{t:-35982e3,name:`server-jobs`,chars:20933},{t:-35982e3,name:`client-lists`,chars:23004}],model:0},{id:`a12`,at:-35928e3,endAt:-35772e3,tok:1337293,type:`general-purpose`,costUsd:.95,peakTok:104417,turns:16,ctx:[[-35928e3,46435],[-35921e3,71501],[-35913e3,79677],[-35875e3,91950],[-35843e3,97936],[-35772e3,104417]],skills:[{t:-35926e3,name:`server`,chars:8480},{t:-35926e3,name:`server-files`,chars:25420}],model:0},{id:`a13`,at:-35835e3,endAt:-35195e3,tok:6364821,type:`general-purpose`,costUsd:2.84,peakTok:163157,turns:48,ctx:[[-35835e3,46485],[-35741e3,112955],[-35642e3,129605],[-35541e3,145394],[-35444e3,156680],[-35195e3,163157]],skills:[{t:-35833e3,name:`client`,chars:8520},{t:-35833e3,name:`client-lists`,chars:23004},{t:-35832e3,name:`client-shell`,chars:19447},{t:-35832e3,name:`testing`,chars:11725}],model:0},{id:`a14`,at:-35816e3,endAt:-35661e3,tok:1239184,type:`general-purpose`,costUsd:.87,peakTok:90856,turns:17,ctx:[[-35816e3,46246],[-35805e3,58221],[-35779e3,71386],[-35758e3,78543],[-35742e3,81255],[-35661e3,90856]],model:0,skills:[]},{id:`a15`,at:-35783e3,endAt:-34975e3,tok:8754695,type:`general-purpose`,costUsd:3.28,peakTok:169330,turns:65,ctx:[[-35783e3,46466],[-35692e3,105228],[-3557e4,135744],[-35498e3,149290],[-35403e3,158005],[-34975e3,169330]],skills:[{t:-35781e3,name:`server`,chars:8480},{t:-35781e3,name:`server-jobs`,chars:20933},{t:-35779e3,name:`shared`,chars:26380},{t:-35779e3,name:`testing`,chars:11725}],model:0},{id:`a16`,at:-35714e3,endAt:-35571e3,tok:1128569,type:`general-purpose`,costUsd:.87,peakTok:99602,turns:14,ctx:[[-35714e3,46242],[-35677e3,73555],[-35664e3,80959],[-35644e3,83716],[-35631e3,93220],[-35571e3,99602]],skills:[{t:-3571e4,name:`server-files`,chars:25420}],model:0},{id:`a17`,at:-35642e3,endAt:-34901e3,tok:4548421,type:`general-purpose`,costUsd:2.08,peakTok:143569,turns:38,ctx:[[-35642e3,46380],[-35624e3,102141],[-35474e3,124556],[-35252e3,131146],[-35002e3,139e3],[-34901e3,143569]],skills:[{t:-3564e4,name:`server`,chars:8480},{t:-35639e3,name:`server-files`,chars:25420},{t:-35637e3,name:`client`,chars:8520},{t:-35636e3,name:`client-lists`,chars:23004},{t:-35636e3,name:`ux`,chars:6225},{t:-35636e3,name:`testing`,chars:11725}],model:0},{id:`a18`,at:-35533e3,endAt:-34909e3,tok:4333829,type:`general-purpose`,costUsd:1.94,peakTok:152286,turns:34,ctx:[[-35533e3,46582],[-35515e3,113595],[-35476e3,129433],[-35076e3,138887],[-34972e3,148479],[-34909e3,152286]],skills:[{t:-35531e3,name:`server`,chars:8480},{t:-35531e3,name:`server-files`,chars:25420},{t:-35529e3,name:`shared`,chars:26380},{t:-35529e3,name:`client`,chars:8520},{t:-35528e3,name:`client-lists`,chars:23004},{t:-35528e3,name:`ux`,chars:6225},{t:-35528e3,name:`testing`,chars:11725}],model:0},{id:`a19`,at:-35533e3,endAt:-35137e3,tok:1907674,type:`general-purpose`,costUsd:1.02,peakTok:99236,turns:22,ctx:[[-35533e3,46440],[-35525e3,78e3],[-35482e3,87725],[-35416e3,92253],[-35231e3,95508],[-35137e3,99236]],skills:[{t:-35531e3,name:`server`,chars:8480},{t:-35531e3,name:`server-files`,chars:25420},{t:-35531e3,name:`testing`,chars:11725}],model:0},{id:`a20`,at:-35532e3,endAt:-35452e3,tok:1002532,type:`general-purpose`,costUsd:.48,peakTok:95059,turns:12,ctx:[[-35532e3,46543],[-35526e3,82217],[-3552e4,87248],[-35497e3,91439],[-35481e3,93205],[-35452e3,95059]],skills:[{t:-35529e3,name:`shared`,chars:26380},{t:-35529e3,name:`server`,chars:8480},{t:-35529e3,name:`server-sessions`,chars:27097},{t:-35529e3,name:`testing`,chars:11725}],model:1},{id:`a21`,at:-35179e3,endAt:-3496e4,tok:3296644,type:`general-purpose`,costUsd:1.63,peakTok:143791,turns:30,ctx:[[-35179e3,46567],[-35144e3,88195],[-35117e3,105868],[-3508e4,123374],[-35037e3,133679],[-3496e4,143791]],skills:[{t:-35176e3,name:`client`,chars:8520},{t:-35174e3,name:`client-lists`,chars:23004},{t:-35174e3,name:`client-shell`,chars:19447}],model:0},{id:`a22`,at:-3512e4,endAt:-34975e3,tok:830305,type:`general-purpose`,costUsd:.72,peakTok:88815,turns:11,ctx:[[-3512e4,46286],[-35116e3,66751],[-35078e3,77112],[-35055e3,82008],[-35024e3,84964],[-34975e3,88815]],skills:[{t:-35118e3,name:`server`,chars:8480},{t:-35118e3,name:`server-files`,chars:25420}],model:0},{id:`a23`,at:-34954e3,endAt:-34534e3,tok:2580074,type:`general-purpose`,costUsd:1.37,peakTok:112512,turns:27,ctx:[[-34954e3,46406],[-34941e3,84341],[-34819e3,96652],[-34743e3,101856],[-34616e3,108240],[-34534e3,112512]],skills:[{t:-34953e3,name:`server`,chars:8480},{t:-34952e3,name:`server-files`,chars:25420},{t:-34952e3,name:`testing`,chars:11725}],model:0},{id:`a24`,at:-3493e4,endAt:-34604e3,tok:6139864,type:`general-purpose`,costUsd:2.35,peakTok:143038,turns:57,ctx:[[-3493e4,46438],[-34899e3,88506],[-3484e4,102971],[-34782e3,115910],[-34721e3,126504],[-34604e3,143038]],skills:[{t:-34927e3,name:`server-jobs`,chars:20933}],model:0},{id:`a25`,at:-3493e4,endAt:-34764e3,tok:1695690,type:`general-purpose`,costUsd:.67,peakTok:96525,turns:20,ctx:[[-3493e4,46360],[-34909e3,78796],[-34879e3,87212],[-34847e3,89350],[-34798e3,94319],[-34764e3,96525]],skills:[{t:-34924e3,name:`client`,chars:8520},{t:-34924e3,name:`client-lists`,chars:23004},{t:-34924e3,name:`testing`,chars:11725}],model:1},{id:`a26`,at:-34891e3,endAt:-34679e3,tok:3758928,type:`general-purpose`,costUsd:1.59,peakTok:121307,turns:39,ctx:[[-34891e3,46200],[-34867e3,87822],[-34842e3,95260],[-34811e3,101015],[-34765e3,110207],[-34679e3,121307]],skills:[{t:-34883e3,name:`server-files`,chars:25420},{t:-34883e3,name:`client-lists`,chars:23004}],model:0},{id:`a27`,at:-34877e3,endAt:-34658e3,tok:1930727,type:`general-purpose`,costUsd:1.13,peakTok:108540,turns:22,ctx:[[-34877e3,46421],[-34865e3,74529],[-34805e3,86344],[-34758e3,94235],[-34722e3,100550],[-34658e3,108540]],skills:[{t:-34874e3,name:`server-files`,chars:25420}],model:0},{id:`a28`,at:-34663e3,endAt:-33962e3,tok:13182195,type:`general-purpose`,costUsd:4.54,peakTok:205630,turns:83,ctx:[[-34663e3,46343],[-34605e3,130082],[-34488e3,154734],[-34309e3,172001],[-34152e3,187220],[-33962e3,205630]],skills:[{t:-34661e3,name:`shared`,chars:26380},{t:-34661e3,name:`sync`,chars:14132},{t:-34659e3,name:`client`,chars:8520},{t:-34659e3,name:`server`,chars:8480},{t:-34657e3,name:`client-lists`,chars:23004},{t:-34657e3,name:`server-files`,chars:25420},{t:-34656e3,name:`ux`,chars:6225},{t:-34656e3,name:`testing`,chars:11725}],model:0},{id:`a29`,at:-3464e4,endAt:-3413e4,tok:5025853,type:`general-purpose`,costUsd:2.21,peakTok:140705,turns:45,ctx:[[-3464e4,46314],[-3462e4,92931],[-34541e3,110546],[-34416e3,121169],[-34262e3,130020],[-3413e4,140705]],skills:[{t:-34639e3,name:`server`,chars:8480},{t:-34637e3,name:`server-files`,chars:25420},{t:-34635e3,name:`testing`,chars:11725},{t:-34635e3,name:`requirements`,chars:1980},{t:-34635e3,name:`ux`,chars:6225}],model:0},{id:`a30`,at:-3459e4,endAt:-34297e3,tok:4649106,type:`general-purpose`,costUsd:1.93,peakTok:130017,turns:43,ctx:[[-3459e4,46315],[-34555e3,89206],[-34504e3,108039],[-34444e3,116308],[-34376e3,123766],[-34297e3,130017]],skills:[{t:-34588e3,name:`server`,chars:8480},{t:-34588e3,name:`server-jobs`,chars:20933},{t:-34588e3,name:`shared`,chars:26380},{t:-34588e3,name:`testing`,chars:11725}],model:0},{id:`a31`,at:-34512e3,endAt:-34294e3,tok:1524452,type:`general-purpose`,costUsd:1.05,peakTok:106183,turns:18,ctx:[[-34512e3,46362],[-34504e3,71598],[-34446e3,83290],[-34432e3,92540],[-34367e3,97950],[-34294e3,106183]],skills:[{t:-3451e4,name:`server`,chars:8480},{t:-3451e4,name:`server-files`,chars:25420}],model:0},{id:`a32`,at:-34264e3,endAt:-33811e3,tok:2800868,type:`general-purpose`,costUsd:1.4,peakTok:111168,turns:29,ctx:[[-34264e3,46586],[-34226e3,92561],[-34151e3,94756],[-34048e3,103095],[-33921e3,106793],[-33811e3,111168]],skills:[{t:-34262e3,name:`server`,chars:8480},{t:-34262e3,name:`server-files`,chars:25420},{t:-34262e3,name:`ux`,chars:6225},{t:-34261e3,name:`testing`,chars:11725}],model:0},{id:`a33`,at:-34264e3,endAt:-3416e4,tok:1115352,type:`general-purpose`,costUsd:.48,peakTok:89042,turns:14,ctx:[[-34264e3,46402],[-34253e3,81696],[-34247e3,84066],[-34202e3,86767],[-34191e3,87719],[-3416e4,89042]],skills:[{t:-34262e3,name:`shared`,chars:26380},{t:-34262e3,name:`server`,chars:8480},{t:-34259e3,name:`server-jobs`,chars:20933},{t:-34259e3,name:`testing`,chars:11725}],model:1},{id:`a34`,at:-34145e3,endAt:-33963e3,tok:2781752,type:`general-purpose`,costUsd:1.34,peakTok:117509,turns:31,ctx:[[-34145e3,46292],[-34122e3,76366],[-34093e3,86750],[-34071e3,94691],[-34035e3,107881],[-33963e3,117509]],skills:[{t:-3414e4,name:`server-jobs`,chars:20933}],model:0},{id:`a35`,at:-341e5,endAt:-33791e3,tok:3678090,type:`general-purpose`,costUsd:1.74,peakTok:128251,turns:38,ctx:[[-341e5,46362],[-34068e3,81776],[-34033e3,91865],[-3397e4,105992],[-33907e3,116018],[-33791e3,128251]],skills:[{t:-34095e3,name:`server`,chars:8480},{t:-34094e3,name:`server-files`,chars:25420}],model:0},{id:`a36`,at:-33895e3,endAt:-33681e3,tok:4809483,type:`general-purpose`,costUsd:1.85,peakTok:135561,turns:43,ctx:[[-33895e3,46250],[-33862e3,101317],[-33815e3,111941],[-33788e3,119876],[-33752e3,127803],[-33681e3,135561]],skills:[{t:-33892e3,name:`sync`,chars:14132},{t:-33892e3,name:`client-lists`,chars:23004},{t:-33892e3,name:`server-files`,chars:25420}],model:0},{id:`a37`,at:-33783e3,endAt:-33622e3,tok:812476,type:`general-purpose`,costUsd:.74,peakTok:88484,turns:11,ctx:[[-33783e3,46292],[-33777e3,63232],[-33756e3,74217],[-33689e3,80001],[-33681e3,83064],[-33622e3,88484]],skills:[{t:-3378e4,name:`server-files`,chars:25420}],model:0},{id:`a38`,at:-33769e3,endAt:-33173e3,tok:4376231,type:`general-purpose`,costUsd:2.04,peakTok:137751,turns:39,ctx:[[-33769e3,46442],[-33699e3,96195],[-3364e4,114947],[-33472e3,122339],[-33348e3,131556],[-33173e3,137751]],skills:[{t:-33767e3,name:`server`,chars:8480},{t:-33765e3,name:`server-files`,chars:25420},{t:-33765e3,name:`testing`,chars:11725}],model:0},{id:`a39`,at:-33665e3,endAt:-33143e3,tok:10412814,type:`general-purpose`,costUsd:3.76,peakTok:198647,turns:66,ctx:[[-33665e3,46435],[-33613e3,136097],[-33517e3,148659],[-33411e3,167721],[-33272e3,186883],[-33143e3,198647]],skills:[{t:-33661e3,name:`server`,chars:8480},{t:-33661e3,name:`server-files`,chars:25420},{t:-33661e3,name:`shared`,chars:26380},{t:-33661e3,name:`sync`,chars:14132},{t:-3366e4,name:`client`,chars:8520},{t:-3366e4,name:`client-lists`,chars:23004},{t:-3366e4,name:`client-shell`,chars:19447},{t:-33659e3,name:`testing`,chars:11725}],model:0},{id:`a40`,at:-33158e3,endAt:-3285e4,tok:2518704,type:`general-purpose`,costUsd:1.35,peakTok:112739,turns:28,ctx:[[-33158e3,46259],[-33146e3,72790],[-3308e4,92845],[-33037e3,97907],[-32924e3,105388],[-3285e4,112739]],skills:[{t:-33151e3,name:`server-files`,chars:25420}],model:0},{id:`a41`,at:-33129e3,endAt:-32951e3,tok:2501018,type:`general-purpose`,costUsd:1.2,peakTok:105352,turns:31,ctx:[[-33129e3,46208],[-33103e3,67165],[-33078e3,74758],[-33054e3,87421],[-33015e3,94558],[-32951e3,105352]],skills:[{t:-33123e3,name:`server`,chars:8480}],model:0},{id:`a42`,at:-33038e3,endAt:-32769e3,tok:1803162,type:`general-purpose`,costUsd:.64,peakTok:89122,turns:23,ctx:[[-33038e3,46361],[-33016e3,75885],[-32993e3,78939],[-32878e3,81229],[-32846e3,86129],[-32769e3,89122]],skills:[{t:-33036e3,name:`server`,chars:8480},{t:-33036e3,name:`server-files`,chars:25420},{t:-33036e3,name:`refactoring`,chars:4519},{t:-33036e3,name:`testing`,chars:11725}],model:1},{id:`a43`,at:-32937e3,endAt:-32864e3,tok:526628,type:`general-purpose`,costUsd:.26,peakTok:62638,turns:9,ctx:[[-32937e3,46124],[-32928e3,57301],[-32917e3,59261],[-32885e3,60789],[-3288e4,61507],[-32864e3,62638]],model:1,skills:[]},{id:`a44`,at:-32821e3,endAt:-32555e3,tok:2867451,type:`general-purpose`,costUsd:1.35,peakTok:115528,turns:30,ctx:[[-32821e3,46262],[-32808e3,79468],[-32771e3,99518],[-32729e3,106490],[-32641e3,109779],[-32555e3,115528]],skills:[{t:-32819e3,name:`server`,chars:8480},{t:-32817e3,name:`server-files`,chars:25501},{t:-32815e3,name:`testing`,chars:11725},{t:-32815e3,name:`requirements`,chars:1980}],model:0},{id:`a45`,at:-32401e3,endAt:-31945e3,tok:7831539,type:`general-purpose`,costUsd:2.84,peakTok:160240,turns:60,ctx:[[-32401e3,46174],[-32355e3,111252],[-32256e3,130130],[-32176e3,141155],[-32101e3,152634],[-31945e3,160240]],skills:[{t:-32399e3,name:`server`,chars:8480},{t:-32399e3,name:`server-jobs`,chars:20933},{t:-32398e3,name:`shared`,chars:26380},{t:-32398e3,name:`sync`,chars:14132},{t:-32398e3,name:`testing`,chars:11725}],model:0},{id:`a46`,at:-324e5,endAt:-3219e4,tok:955048,type:`general-purpose`,costUsd:.43,peakTok:80614,turns:13,ctx:[[-324e5,45994],[-32394e3,70495],[-32378e3,77215],[-32327e3,78460],[-32242e3,79878],[-3219e4,80614]],skills:[{t:-32396e3,name:`server`,chars:8480},{t:-32396e3,name:`server-files`,chars:25420},{t:-32396e3,name:`testing`,chars:11725}],model:1},{id:`a47`,at:-324e5,endAt:-32323e3,tok:832400,type:`general-purpose`,costUsd:.4,peakTok:76848,turns:12,ctx:[[-324e5,46034],[-32394e3,66476],[-32384e3,71397],[-32372e3,73916],[-32355e3,75349],[-32323e3,76848]],skills:[{t:-32397e3,name:`shared`,chars:26380},{t:-32397e3,name:`client`,chars:8520}],model:1},{id:`a48`,at:-324e5,endAt:-31838e3,tok:6643457,type:`general-purpose`,costUsd:2.87,peakTok:155438,turns:56,ctx:[[-324e5,46455],[-32355e3,83938],[-3222e4,116939],[-3209e4,135680],[-31986e3,144738],[-31838e3,155438]],skills:[{t:-32396e3,name:`client`,chars:8520},{t:-32395e3,name:`client-shell`,chars:19447},{t:-32395e3,name:`testing`,chars:11725}],model:0},{id:`a49`,at:-324e5,endAt:-3228e4,tok:1504943,type:`general-purpose`,costUsd:.62,peakTok:102260,turns:17,ctx:[[-324e5,46026],[-32391e3,85509],[-32371e3,92990],[-32335e3,95033],[-32318e3,98690],[-3228e4,102260]],skills:[{t:-32398e3,name:`client`,chars:8520},{t:-32398e3,name:`server`,chars:8480},{t:-32398e3,name:`testing`,chars:11725},{t:-32395e3,name:`client-lists`,chars:23004},{t:-32395e3,name:`server-ledgers`,chars:18484}],model:1},{id:`a50`,at:-324e5,endAt:-32306e3,tok:768541,type:`general-purpose`,costUsd:.39,peakTok:71845,turns:12,ctx:[[-324e5,46112],[-32391e3,60016],[-32381e3,64049],[-32352e3,67096],[-32318e3,69892],[-32306e3,71845]],skills:[{t:-32398e3,name:`client`,chars:8520},{t:-32398e3,name:`testing`,chars:11725}],model:1},{id:`a51`,at:-32397e3,endAt:-32027e3,tok:2188181,type:`general-purpose`,costUsd:.81,peakTok:105668,turns:24,ctx:[[-32397e3,46146],[-32379e3,83224],[-3234e4,93139],[-32172e3,96605],[-32137e3,103037],[-32027e3,105668]],skills:[{t:-32395e3,name:`server`,chars:8480},{t:-32395e3,name:`server-sessions`,chars:27097},{t:-32395e3,name:`testing`,chars:11725}],model:1},{id:`a52`,at:-32293e3,endAt:-32122e3,tok:1945148,type:`general-purpose`,costUsd:1.2,peakTok:121758,turns:20,ctx:[[-32293e3,46415],[-32282e3,83571],[-32247e3,98348],[-32221e3,105167],[-32189e3,112850],[-32122e3,121758]],skills:[{t:-3229e4,name:`shared`,chars:26380},{t:-3229e4,name:`server-ledgers`,chars:18484},{t:-3229e4,name:`client-charts`,chars:22497}],model:0},{id:`a53`,at:-3228e4,endAt:-32098e3,tok:1459996,type:`general-purpose`,costUsd:.89,peakTok:81417,turns:22,ctx:[[-3228e4,46313],[-32247e3,59622],[-32231e3,63909],[-3221e4,68317],[-3219e4,73305],[-32098e3,81417]],model:0,skills:[]},{id:`a54`,at:-32264e3,endAt:-32142e3,tok:1360154,type:`general-purpose`,costUsd:.79,peakTok:82915,turns:20,ctx:[[-32264e3,46243],[-32255e3,58238],[-32238e3,67068],[-32218e3,70432],[-32192e3,75447],[-32142e3,82915]],model:0,skills:[]},{id:`a55`,at:-32169e3,endAt:-32018e3,tok:1161074,type:`general-purpose`,costUsd:.85,peakTok:94862,turns:15,ctx:[[-32169e3,46426],[-32162e3,70068],[-3212e4,77276],[-32107e3,83489],[-32094e3,87829],[-32018e3,94862]],skills:[{t:-32164e3,name:`server`,chars:8480},{t:-32164e3,name:`server-files`,chars:25420}],model:0},{id:`a56`,at:-32127e3,endAt:-32003e3,tok:1284735,type:`general-purpose`,costUsd:.5,peakTok:90343,turns:16,ctx:[[-32127e3,46263],[-32114e3,78428],[-32103e3,80608],[-32085e3,86336],[-32031e3,89272],[-32003e3,90343]],skills:[{t:-32121e3,name:`client`,chars:8520},{t:-32121e3,name:`client-lists`,chars:23004},{t:-32121e3,name:`ux`,chars:6225},{t:-32121e3,name:`testing`,chars:11725}],model:1},{id:`a57`,at:-32103e3,endAt:-31785e3,tok:5051904,type:`general-purpose`,costUsd:2.09,peakTok:141427,turns:43,ctx:[[-32103e3,46651],[-32069e3,101716],[-31994e3,117279],[-31941e3,126721],[-31861e3,135876],[-31785e3,141427]],skills:[{t:-32099e3,name:`shared`,chars:26380},{t:-32099e3,name:`server-ledgers`,chars:18484},{t:-32098e3,name:`testing`,chars:11725},{t:-32098e3,name:`client-charts`,chars:22497},{t:-32095e3,name:`server`,chars:8420}],model:0},{id:`a58`,at:-32085e3,endAt:-31865e3,tok:1542608,type:`general-purpose`,costUsd:.55,peakTok:75903,turns:23,ctx:[[-32085e3,46582],[-32069e3,62904],[-32023e3,66491],[-32002e3,68318],[-31934e3,72830],[-31865e3,75903]],model:1,skills:[]},{id:`a59`,at:-32007e3,endAt:-31851e3,tok:1305064,type:`general-purpose`,costUsd:.8,peakTok:97099,turns:16,ctx:[[-32007e3,46345],[-31999e3,77500],[-31985e3,81063],[-31966e3,88236],[-31892e3,91862],[-31851e3,97099]],skills:[{t:-32005e3,name:`server`,chars:8420},{t:-32005e3,name:`server-sessions`,chars:27213},{t:-32004e3,name:`refactoring`,chars:4519}],model:0},{id:`a60`,at:-31994e3,endAt:-31817e3,tok:1223586,type:`general-purpose`,costUsd:.52,peakTok:99429,turns:15,ctx:[[-31994e3,46562],[-3198e4,58928],[-31964e3,84833],[-31944e3,93594],[-31846e3,97427],[-31817e3,99429]],skills:[{t:-31982e3,name:`server`,chars:8420},{t:-3198e4,name:`server-files`,chars:25494},{t:-3198e4,name:`testing`,chars:11725}],model:1},{id:`a61`,at:-31923e3,endAt:-31719e3,tok:3324903,type:`general-purpose`,costUsd:1.46,peakTok:113216,turns:39,ctx:[[-31923e3,46451],[-31891e3,67802],[-31869e3,78268],[-3184e4,90642],[-31782e3,104556],[-31719e3,113216]],model:0,skills:[]},{id:`a62`,at:-31842e3,endAt:-31652e3,tok:2782852,type:`general-purpose`,costUsd:1.33,peakTok:118144,turns:29,ctx:[[-31842e3,46367],[-31825e3,84863],[-31797e3,92698],[-31768e3,104125],[-31738e3,108672],[-31652e3,118144]],skills:[{t:-3184e4,name:`client`,chars:8520},{t:-31839e3,name:`client-lists`,chars:23004},{t:-31839e3,name:`client-shell`,chars:19447},{t:-31839e3,name:`ux`,chars:6225}],model:0},{id:`a63`,at:-31831e3,endAt:-31752e3,tok:1024886,type:`general-purpose`,costUsd:.4,peakTok:76156,turns:15,ctx:[[-31831e3,46413],[-31816e3,66232],[-31804e3,69108],[-31792e3,71245],[-31773e3,74076],[-31752e3,76156]],skills:[{t:-31829e3,name:`server`,chars:8420},{t:-31829e3,name:`testing`,chars:11725}],model:1},{id:`a64`,at:-31821e3,endAt:-31529e3,tok:3206809,type:`general-purpose`,costUsd:1.69,peakTok:135069,turns:32,ctx:[[-31821e3,46311],[-31787e3,83239],[-31745e3,94747],[-31672e3,109731],[-31637e3,116866],[-31529e3,135069]],skills:[{t:-31816e3,name:`client`,chars:8520},{t:-31816e3,name:`client-shell`,chars:19447}],model:0},{id:`a65`,at:-31771e3,endAt:-31606e3,tok:2282429,type:`general-purpose`,costUsd:1.1,peakTok:105425,turns:25,ctx:[[-31771e3,46299],[-31736e3,86663],[-31715e3,95492],[-31686e3,97365],[-31668e3,100632],[-31606e3,105425]],skills:[{t:-31767e3,name:`shared`,chars:26380}],model:0},{id:`a66`,at:-31634e3,endAt:-31506e3,tok:1170388,type:`general-purpose`,costUsd:.48,peakTok:88615,turns:15,ctx:[[-31634e3,46237],[-31624e3,77524],[-31605e3,79249],[-31586e3,80586],[-31562e3,85906],[-31506e3,88615]],skills:[{t:-31631e3,name:`client`,chars:8520},{t:-31631e3,name:`client-lists`,chars:23004},{t:-31631e3,name:`ux`,chars:6225},{t:-31631e3,name:`testing`,chars:11725}],model:1},{id:`a67`,at:-31589e3,endAt:-31395e3,tok:1287265,type:`general-purpose`,costUsd:.48,peakTok:76220,turns:20,ctx:[[-31589e3,46468],[-31577e3,57709],[-31512e3,59898],[-31456e3,65214],[-31438e3,71539],[-31395e3,76220]],model:1,skills:[]},{id:`a68`,at:-31513e3,endAt:-30978e3,tok:6158902,type:`general-purpose`,costUsd:2.68,peakTok:162018,turns:48,ctx:[[-31513e3,46540],[-31443e3,108266],[-31382e3,129944],[-31313e3,137461],[-31174e3,150130],[-30978e3,162018]],skills:[{t:-3151e4,name:`client`,chars:8520},{t:-3151e4,name:`client-shell`,chars:19447},{t:-3151e4,name:`testing`,chars:11725},{t:-31508e3,name:`client-files`,chars:17179},{t:-31508e3,name:`client-lists`,chars:23004}],model:0},{id:`a69`,at:-30963e3,endAt:-30805e3,tok:1418085,type:`general-purpose`,costUsd:.98,peakTok:107051,turns:17,ctx:[[-30963e3,46219],[-30956e3,66278],[-30918e3,82907],[-3089e4,90767],[-30862e3,94728],[-30805e3,107051]],skills:[{t:-30961e3,name:`client`,chars:8520},{t:-3096e4,name:`client-shell`,chars:19447}],model:0},{id:`a70`,at:-30755e3,endAt:-30267e3,tok:7401740,type:`general-purpose`,costUsd:2.99,peakTok:163497,turns:58,ctx:[[-30755e3,46637],[-30697e3,105727],[-30614e3,124796],[-30531e3,138367],[-30408e3,150434],[-30267e3,163497]],skills:[{t:-30753e3,name:`client`,chars:8520},{t:-30753e3,name:`client-shell`,chars:19447},{t:-30752e3,name:`client-lists`,chars:23004},{t:-30752e3,name:`testing`,chars:11725},{t:-30679e3,name:`ux`,chars:6225}],model:0},{id:`a71`,at:-30251e3,endAt:-30116e3,tok:1916249,type:`general-purpose`,costUsd:1.05,peakTok:110384,turns:22,ctx:[[-30251e3,46225],[-30241e3,75394],[-30207e3,83508],[-30183e3,94156],[-30163e3,102180],[-30116e3,110384]],skills:[{t:-30249e3,name:`client`,chars:8520},{t:-30249e3,name:`client-shell`,chars:19447},{t:-30249e3,name:`ux`,chars:6225}],model:0},{id:`a72`,at:-299e5,endAt:-29775e3,tok:1789139,type:`general-purpose`,costUsd:.93,peakTok:95003,turns:25,ctx:[[-299e5,46122],[-29889e3,56564],[-29865e3,64650],[-29837e3,74515],[-29798e3,90211],[-29775e3,95003]],skills:[{t:-29894e3,name:`server`,chars:8301},{t:-29855e3,name:`testing`,chars:11725},{t:-29806e3,name:`server-files`,chars:25747}],model:0},{id:`a73`,at:-29899e3,endAt:-29487e3,tok:7042482,type:`general-purpose`,costUsd:2.77,peakTok:162798,turns:60,ctx:[[-29899e3,46200],[-29857e3,87136],[-29793e3,104048],[-29697e3,135343],[-29607e3,149781],[-29487e3,162798]],skills:[{t:-29896e3,name:`server-ledgers`,chars:18484},{t:-29866e3,name:`shared`,chars:26380},{t:-29795e3,name:`client-settings`,chars:18839},{t:-29793e3,name:`client-charts`,chars:22497},{t:-29677e3,name:`ux`,chars:6225}],model:0},{id:`a74`,at:-29752e3,endAt:-29648e3,tok:842031,type:`general-purpose`,costUsd:.58,peakTok:68448,turns:14,ctx:[[-29752e3,46159],[-29731e3,56371],[-29725e3,59578],[-29715e3,62059],[-29706e3,63664],[-29648e3,68448]],model:0,skills:[]},{id:`a75`,at:-29464e3,endAt:-29312e3,tok:1266493,type:`general-purpose`,costUsd:.88,peakTok:90899,turns:18,ctx:[[-29464e3,46505],[-29458e3,55838],[-29438e3,63943],[-29406e3,76343],[-29373e3,83804],[-29312e3,90899]],model:0,skills:[]},{id:`a76`,at:-908e3,endAt:-565e3,tok:3281549,type:`general-purpose`,costUsd:1.62,peakTok:116513,turns:33,ctx:[[-908e3,46544],[-873e3,87997],[-79e4,100289],[-735e3,106523],[-657e3,112108],[-565e3,116513]],skills:[{t:-903e3,name:`client`,chars:8520},{t:-903e3,name:`client-settings`,chars:18839},{t:-903e3,name:`client-compose`,chars:16320},{t:-902e3,name:`ux`,chars:6225},{t:-902e3,name:`testing`,chars:11725}],model:0},{id:`a77`,at:-161e3,endAt:23e3,tok:1781959,type:`general-purpose`,costUsd:1.23,peakTok:111237,turns:21,ctx:[[-161e3,46243],[-152e3,70797],[-109e3,81599],[-81e3,89881],[-37e3,101357],[23e3,111237]],skills:[{t:-159e3,name:`server`,chars:8301},{t:-157e3,name:`server-files`,chars:25747},{t:-157e3,name:`testing`,chars:11725}],model:0},{id:`a78`,at:-161e3,endAt:17e3,tok:2683349,type:`general-purpose`,costUsd:1.46,peakTok:123210,turns:28,ctx:[[-161e3,46257],[-15e4,80917],[-128e3,90514],[-96e3,100852],[-47e3,116338],[17e3,123210]],skills:[{t:-159e3,name:`server`,chars:8301},{t:-159e3,name:`server-files`,chars:25747},{t:-159e3,name:`testing`,chars:11725}],model:0},{id:`a79`,at:-161e3,endAt:-15e3,tok:2010667,type:`general-purpose`,costUsd:1.12,peakTok:105752,turns:22,ctx:[[-161e3,46096],[-151e3,81729],[-131e3,91296],[-89e3,99698],[-66e3,103425],[-15e3,105752]],skills:[{t:-159e3,name:`client`,chars:8520},{t:-159e3,name:`client-compose`,chars:16320},{t:-158e3,name:`client-settings`,chars:18839},{t:-158e3,name:`ux`,chars:6225},{t:-158e3,name:`testing`,chars:11725}],model:0},{id:`a80`,at:-161e3,endAt:26e3,tok:4812439,type:`general-purpose`,costUsd:2.02,peakTok:150729,turns:39,ctx:[[-161e3,46092],[-14e4,110656],[-107e3,121608],[-73e3,130464],[-39e3,140521],[26e3,150729]],skills:[{t:-159e3,name:`client`,chars:8520},{t:-158e3,name:`client-lists`,chars:23004},{t:-158e3,name:`shared`,chars:26380},{t:-158e3,name:`sync`,chars:14132},{t:-158e3,name:`server`,chars:8301},{t:-157e3,name:`server-files`,chars:25747},{t:-157e3,name:`testing`,chars:11725}],model:0},{id:`a81`,at:-161e3,endAt:32e3,tok:2741522,type:`general-purpose`,costUsd:1.37,peakTok:124599,turns:28,ctx:[[-161e3,46016],[-147e3,84102],[-58e3,90838],[-23e3,104205],[4e3,115199],[32e3,124599]],skills:[{t:-16e4,name:`server`,chars:8301},{t:-158e3,name:`server-ledgers`,chars:18484},{t:-158e3,name:`shared`,chars:26380},{t:-158e3,name:`testing`,chars:11725}],model:0},{id:`a82`,at:-68e3,endAt:28e3,tok:1116182,type:`general-purpose`,costUsd:.8,peakTok:98279,turns:14,ctx:[[-68e3,46191],[-61e3,70659],[-57e3,79489],[-23e3,85871],[-9e3,90887],[28e3,98279]],skills:[{t:-67e3,name:`client`,chars:8520},{t:-66e3,name:`client-shell`,chars:19447},{t:-66e3,name:`ux`,chars:6225},{t:-66e3,name:`testing`,chars:11725}],model:0},{id:`a83`,at:-1e3,endAt:34e3,tok:841252,type:`general-purpose`,costUsd:.55,peakTok:86507,turns:11,ctx:[[-1e3,46421],[5e3,75517],[15e3,80479],[2e4,82595],[25e3,84485],[34e3,86507]],skills:[{t:1e3,name:`client`,chars:8520},{t:2e3,name:`client-compose`,chars:16320},{t:2e3,name:`client-settings`,chars:18839},{t:2e3,name:`ux`,chars:6225}],model:0}],compaction:{auto:{count:1,shedTok:349702,savedTok:23080332,rebuildTok:39804,savedUsd:4.616066400000003,rebuildUsd:.318432},manual:{count:0,shedTok:0,savedTok:0,rebuildTok:0},unmeasured:0},coldStarts:{count:1,tok:118379,usd:.947032,premiumUsd:.9233562,lastAt:-932e3,lastTok:118379},carried:{firstRequestTok:61135,firstRequestAt:-36476e3,parts:[{kind:`instructions`,chars:25514,count:3,files:[{path:`~/.claude/CLAUDE.md`,type:`User`,chars:4843},{path:`~/dev/todo-garden/CLAUDE.md`,type:`Project`,chars:12584},{path:`~/.claude/projects/garden/memory/MEMORY.md`,type:`AutoMem`,chars:8087}]},{kind:`skill_listing`,chars:29970,count:136,names:`server.server-sessions.server-jobs.server-files.server-ledgers.server-calls.client.client-shell.client-lists.client-files.client-settings.client-charts.client-compose.client-reader.shared.testing.ux.sync.requirements.refactoring.parsing.docs-media.visual-check.pdf.docx.xlsx.pptx.canvas-design.skill-creator.mcp-builder.deep-research`.split(`.`)},{kind:`mcp_instructions`,chars:1022,count:1,names:[]},{kind:`deferred_tools`,chars:4382,count:115,names:[`ArtifactComments`,`ArtifactData`,`CronCreate`,`CronDelete`,`CronList`,`DesignSync`,`EndConversation`,`EnterPlanMode`,`EnterWorktree`,`ExitPlanMode`,`ExitWorktree`,`FetchInboxMessage`,`Monitor`,`NotebookEdit`,`PushNotification`,`RemoteTrigger`,`SendMessage`,`SendUserFile`,`TaskStop`,`WebFetch`,`WebSearch`]},{kind:`agent_listing`,chars:2521,count:6,names:[`claude`,`claude-code-guide`,`Explore`,`general-purpose`,`Plan`,`statusline-setup`]},{kind:`hook_context`,chars:121,count:1,names:[`UserPromptSubmit`]},{kind:`system_prompt`,chars:13083,undocumented:!0},{kind:`tool_schemas`,chars:79031,count:15,names:[`Agent`,`Artifact`,`AskUserQuestion`,`Bash`,`Edit`,`ListAgents`,`Read`,`ReadNotifications`,`ReportFindings`,`ScheduleWakeup`,`SendFeedback`,`Skill`,`ToolSearch`,`Workflow`,`Write`],undocumented:!0}],laterDeltas:2,laterKinds:[`mcp_instructions`,`deferred_tools`]}},bo=6e4,xo=(e,t)=>e.map(e=>({...e,t:e.t+t})),So=(e,t)=>e.map(([e,n])=>[e+t,n]);function Co(e,t){let n=yo,r=e-3*bo;return{...n,sessionId:t,claudeSessionId:`c-garden-fan`,updatedAt:r,samples:xo(n.samples,r),events:xo(n.events,r),agentCum:So(n.agentCum,r),agents:n.agents?.map(e=>({...e,at:e.at+r,...e.endAt==null?{}:{endAt:e.endAt+r},...e.ctx?{ctx:So(e.ctx,r)}:{},...e.skills?{skills:xo(e.skills,r)}:{}})),...n.coldStarts?.lastAt==null?{}:{coldStarts:{...n.coldStarts,lastAt:n.coldStarts.lastAt+r}},...n.carried?.firstRequestAt==null?{}:{carried:{...n.carried,firstRequestAt:n.carried.firstRequestAt+r}}}}function wo(e){let t=e.samples.map(e=>e.tok),n=e.cost?.total??0,r=e.agentCost?.total??0;return{pts:t,marks:e.events.map(e=>({at:e.t,kind:e.kind})),peak:Math.max(...t),baseTok:t[0],turns:e.turns,usageTok:e.usageTok,agentTok:e.agentTok,costUsd:Math.round((n+r)*100)/100,agentCostUsd:Math.round(r*100)/100,windowTok:e.windowTok,windowFrom:e.windowFrom,autoCompactTok:e.autoCompactTok,...e.autoCompactSet?.tokens?{autoCompactSetTok:e.autoCompactSet.tokens}:{},...e.coldStarts?{coldStarts:e.coldStarts}:{}}}function To(e){let t=e.samples.at(-1)?.tok??0;return e.windowTok?Math.round(100*(1-t/e.windowTok)):100}var Eo=2e5,Do=78e3;function Oo(e){let t=t=>e-t,n=`demo-g1`,r=`demo-g2`,i=Co(e,r),a=[18e3,26e3,35e3,44e3,55e3,67e3,81e3,96e3,112e3,124e3],o=[34e3,41e3,52e3,Do],s=t(95*z),c=[...a,...o].map((e,t)=>({t:s+t*6*z+(t>=a.length?4*z:0),tok:e})),l=s+(a.length-1)*6*z+3*z,u={repos:ia({healthIndex:e}),sessions:[{id:n,cwd:H,title:`todo-garden · main`,tabTitle:`Group by day`,remoteControl:!0,running:!0,idle:!0,idleSince:t(6*z),createdAt:t(100*z),claudeSessionId:`c-garden-4`,contextLeft:61,starred:!1,firstPrompt:`group the tasks by day, today first`,lastPrompt:`add a test for the empty day`},{id:r,cwd:H,title:`todo-garden · main`,tabTitle:`Design sweep`,remoteControl:!0,running:!0,idle:!0,idleSince:i.updatedAt,createdAt:i.samples[0].t,claudeSessionId:`c-garden-fan`,contextLeft:To(i),contextSpark:wo(i),starred:!1,firstPrompt:`improve the app's design in rounds, until I stop you`,lastPrompt:`finish the loose ends and tell me what is still left`}],screens:{[n]:$i(`${O(`~/dev/todo-garden`,`Sonnet 5.5`)}> add a test for the empty day\r\n`+G(`A day with no tasks should not draw a heading.`)+K(`Update`,`src/store/tasks.test.ts`,`Added 14 lines`)+K(`Bash`,`npm test -- tasks`,`PASS src/store/tasks.test.ts (10 tests)`)+G(`Done. An empty day draws nothing; the test pins it.`)+`\r
21
- `),[r]:$i(`${O(`~/dev/todo-garden`,`Opus 5.5`)}> finish the loose ends and tell me what is still left\r\n`+G(`Three loose ends closed; two need a decision from you, listed below.`)+`\r
22
- `)},history:{[n]:[{id:`h-1`,kind:`prompt`,text:`add a test for the empty day`,sentAt:t(12*z),outputAt:t(6*z),output:`Done. An empty day draws nothing; the test pins it. 10 tests pass.`}]},recent:[{cwd:H,title:`todo-garden`,lastActive:t(6*z),claudeSessionId:`c-garden-4`,launch:{}},{cwd:U,title:`pocket-notes`,lastActive:t(1*V),claudeSessionId:`c-notes-1`,launch:{}},{cwd:W,title:`trail-log`,lastActive:t(2*V),claudeSessionId:`c-trail-1`,launch:{}},...Wr(e).map(({convo:e,title:n})=>({cwd:e.repo,title:n,lastActive:e.lastAt??t(864e5),claudeSessionId:e.id,launch:{}}))],closed:[],replies:[],numbers:{ledger:!0,repoHealth:!0,usage:{ok:!0,sessionPct:42,weeklyPct:61,checkedAt:t(2*z),sessionResetAt:e+2*B+10*z,weeklyResetAt:e+3*V+5*B},budget:{budget:{enabled:!0,sessionMax:80,weeklyMax:90,leftoverMax:20},verdict:{blocked:!1,state:`ok`,which:`weekly`,pct:61,max:90}},meter:{calls:14,inTok:41200,outTok:3100,costUsd:.07,today:{calls:6,inTok:17800,outTok:1300,costUsd:.03},byModel:[{model:`haiku`,calls:11,inTok:30400,outTok:2300,costUsd:.04},{model:`sonnet`,calls:3,inTok:10800,outTok:800,costUsd:.03}],lastAt:t(9*z)},context:{[n]:{sessionId:n,claudeSessionId:`c-garden-4`,updatedAt:e,samples:c,events:[{t:l,kind:`compact`,trigger:`auto`,preTok:13e4,postTok:3e4}],windowTok:Eo,windowFrom:`model`,model:`sonnet`,autoCompactTok:16e4,truncated:!1,turns:14},[r]:i}},banner:qt};return{meta:{id:`numbers`,protocol:2,stamp:`numbers-1`},clock:{start:e},state:{bootId:`boot`,model:u},script:[]}}var ko=`group the tasks by day, today first`,Ao=4500,jo=e=>[{id:`b1`,text:`Make the empty state friendlier`,status:`queued`,repoDir:H,createdAt:e(20*B),order:1,label:`Empty state`},{id:`b2`,text:`Add a swipe-to-complete gesture on a task row`,status:`queued`,repoDir:H,createdAt:e(1*V),order:2,label:`Swipe to complete`},{id:`b3`,text:`Rename 'Tasks' to 'Beds' in the settings screen`,status:`done`,repoDir:H,createdAt:e(2*V),order:0,label:`Rename in settings`,startedAt:e(2*V-B),finishedAt:e(2*V-90*z)},{id:`b4`,text:`Wire the background sync into app start`,status:`queued`,repoDir:U,createdAt:e(40*z),order:1,label:`Wire the sync`},{id:`b5`,text:`Show the total distance on the hike list`,status:`queued`,repoDir:W,createdAt:e(1*V),order:1,label:`Total distance`}];function Mo(e,t){let n={kind:`weekly`,days:[],hour:2,minute:0,tz:`Europe/Berlin`},r={kind:`window`,window:`weekly`,edge:`before`,offsetMin:-120,minPctLeft:20},i={kind:`window`,window:`weekly`,edge:`after`,offsetMin:0},a=n=>l(n,e,t);return[{id:`sch1`,name:`Nightly: run the full test suite`,enabled:!0,createdAt:e-6*V,graceMin:120,nextAt:a(n),rule:n,action:{kind:`backlog`,repoDir:U,text:`Run the full test suite and summarise anything that fails`,label:`Full test run`,autoFire:!0}},{id:`sch2`,name:`Before the weekly reset: spend what is left`,enabled:!0,createdAt:e-4*V,graceMin:120,nextAt:a(r),rule:r,action:{kind:`backlog`,repoDir:H,text:`Work through the queued backlog items while this week's allowance is still there`,label:`Use the week`,autoFire:!0}},{id:`sch3`,name:`When the week is back: dependency check`,enabled:!0,createdAt:e-5*V,graceMin:120,nextAt:a(i),rule:i,action:{kind:`backlog`,repoDir:W,text:`Check for outdated dependencies and list what is safe to update`,label:`Dependency check`,autoFire:!0}}]}function No(e,t){let n=e.action,r={id:e.id,cwd:n.repoDir,payload:{kind:`prompt`,steps:[n.text]},target:{kind:`repo`,fresh:!0},trigger:{kind:`at`,rule:e.rule,graceMin:e.graceMin},title:e.name,label:n.label,auto:n.autoFire!==!1,origin:s,state:`blocked`,createdAt:e.createdAt,nextAt:e.nextAt},i=h(r,{present:new Set,sessions:[],busyCwds:new Set,budgetBlocked:!1,autoFire:!0,knownDirs:new Set([H,U,W]),hostBusy:!1,autoSlotsFree:1},t);return i.kind===`wait`?{...r,blockReason:i.reason,blockDetail:i.detail}:r}function Po(e){let t=t=>e-t,n=t=>e+t,r=`demo-g1`,i=Ao,a=gr(e),o=Mo(e,a),s=o.map(t=>No(t,e)),c=`${O(`~/dev/todo-garden`)}> add a due-date picker to the new-task sheet\r\n`+G(`I'll start with how the new-task sheet is built.`)+K(`Read`,`src/components/NewTaskSheet.tsx`,`Read 96 lines`)+K(`Read`,`src/components/DatePicker.tsx`,`Read 41 lines`),l=e=>({id:`i1`,cwd:H,payload:{kind:`prompt`,steps:[ko]},target:{kind:`session`,sessionId:r,resumeConvId:`c-garden-2`},trigger:{kind:`idle`},state:`queued`,createdAt:t(3e4),label:`Group by day`,...e}),u=e=>({t:`intent.list`,intents:[e,...s]}),d=e=>({id:`i1`,text:ko,status:`queued`,repoDir:H,targetSessionId:r,autoFire:!0,label:`Group by day`,createdAt:t(3e4),order:0,...e}),f=e=>({t:`backlog.list`,items:[...e,...jo(t)],auto:!0,idleMs:6e4}),p=5e3,m=7e3,h=[{at:-1500,event:{kind:`output`,sessionId:r,text:K(`Update`,`src/components/NewTaskSheet.tsx`,`Added 18 lines, removed 3 lines`)}},{at:1500,event:{kind:`output`,sessionId:r,text:K(`Bash`,`npm test -- NewTaskSheet`,`${na}PASS${ra} src/components/NewTaskSheet.test.tsx (6 tests)`)}},{at:4400,event:{kind:`output`,sessionId:r,text:G(`Done. The new-task sheet now has a due-date picker (src/components/NewTaskSheet.tsx).`)}},{at:i,event:{kind:`turnEnd`,sessionId:r}},{at:p,event:{kind:`frame`,msg:u(l({state:`running`,startedAt:n(p),sessionId:r}))}},{at:p,event:{kind:`frame`,msg:f([d({status:`running`,startedAt:n(p),sessionId:r})])}},{at:p,event:{kind:`output`,sessionId:r,text:`\r\n> ${ko}\r\n`}},{at:p,event:{kind:`session`,sessionId:r,patch:{turnActive:!0,turnStartedAt:n(p),idle:!1,lastPrompt:ko,lastTurnAt:n(p)},unset:[`idleSince`]}},{at:5300,event:{kind:`output`,sessionId:r,text:G(`Grouping by day: today, tomorrow, later this week.`)}},{at:5800,event:{kind:`output`,sessionId:r,text:K(`Update`,`src/store/tasks.ts`,`Added 22 lines, removed 4 lines`)}},{at:6300,event:{kind:`output`,sessionId:r,text:K(`Bash`,`npm test -- tasks`,`${na}PASS${ra} src/store/tasks.test.ts (9 tests)`)}},{at:6800,event:{kind:`output`,sessionId:r,text:G(`Done. The list is grouped by day, today first (src/store/tasks.ts).`)}},{at:6900,event:{kind:`turnEnd`,sessionId:r}},{at:m,event:{kind:`frame`,msg:u(l({state:`done`,startedAt:n(p),settledAt:n(m),sessionId:r,result:{at:n(m),ok:!0,detail:`ran in Due-date picker`}}))}},{at:m,event:{kind:`frame`,msg:f([d({status:`done`,startedAt:n(p),finishedAt:n(m),sessionId:r})])}}],g={repos:ia(),sessions:[{id:r,cwd:H,title:`todo-garden · main`,tabTitle:`Due-date picker`,remoteControl:!0,running:!0,turnActive:!0,turnStartedAt:t(4e4),lastTurnAt:t(4e4),idle:!1,createdAt:t(25*z),claudeSessionId:`c-garden-2`,contextLeft:71,starred:!1,firstPrompt:`add a due-date picker to the new-task sheet`,lastPrompt:`add a due-date picker to the new-task sheet`},{id:`demo-n1`,cwd:U,title:`pocket-notes · main`,tabTitle:`Background sync`,remoteControl:!0,running:!0,idle:!0,idleSince:t(50*z),createdAt:t(2*B),claudeSessionId:`c-notes-2`,contextLeft:83,starred:!1,followUp:{by:`agent`,at:t(50*z),reason:`two ways to schedule the sync — pick one before I build it`},firstPrompt:`sketch a background sync that runs every 15 minutes`,lastPrompt:`sketch a background sync that runs every 15 minutes`}],screens:{[r]:$i(c),"demo-n1":$i(`${O(`~/dev/pocket-notes`)}> sketch a background sync that runs every 15 minutes\r\n`+G(`Sketched: a timer in src/sync/scheduler.ts calls the existing push, skipping when offline.`)+`\r
23
- `)},history:{[r]:[],"demo-n1":[{id:`h-1`,kind:`prompt`,text:`sketch a background sync that runs every 15 minutes`,sentAt:t(2*B-2*z),outputAt:t(50*z),output:`Sketched: a timer in src/sync/scheduler.ts calls the existing push, skipping when offline. Not wired in yet.`}]},recent:[{cwd:H,title:`todo-garden`,lastActive:t(1*z),claudeSessionId:`c-garden-2`,launch:{}},{cwd:U,title:`pocket-notes`,lastActive:t(50*z),claudeSessionId:`c-notes-2`,launch:{}},{cwd:W,title:`trail-log`,lastActive:t(1*V),claudeSessionId:`c-trail-1`,launch:{}}],closed:[],backlog:{auto:!0,items:[d({}),...jo(t)]},schedules:o,intents:[l({state:`blocked`,blockReason:`sessionBusy`,blockDetail:`the session is working on its current turn`}),...s],numbers:{usage:a},replies:[{match:`day`,cwd:H,steps:[{kind:`output`,text:G(`Grouping by day.`),afterMs:600}]}],banner:qt};return{meta:{id:`queue-and-schedule`,protocol:2,stamp:`queue-and-schedule-1`},clock:{start:e},state:{bootId:`boot`,model:g},script:h}}var Fo=`~/dev/photo-shelf`;function Io(e){let t=t=>e-t,n=`demo-p1`,r=`demo-n3`,i=`demo-t2`,a={repos:[...ia({healthIndex:e}),{id:`r4`,repoName:`photo-shelf`,branch:`main`,isPrimary:!0,worktreePath:Fo,outboxCount:0,changedCount:3,hasRepoHealth:!0,healthIndex:ki(`photo-shelf`,e)}],sessions:[{id:n,cwd:Fo,title:`photo-shelf · main`,tabTitle:`Retry big album uploads`,remoteControl:!0,running:!0,idle:!0,idleSince:t(18*z),createdAt:t(80*z),claudeSessionId:`c-shelf-1`,contextLeft:44,starred:!1,firstPrompt:`uploads of big albums stall at 80%, make them retry`,lastPrompt:`uploads of big albums stall at 80%, make them retry`},{id:r,cwd:U,title:`pocket-notes · main`,tabTitle:`Export to PDF`,remoteControl:!0,running:!0,idle:!0,idleSince:t(25*z),createdAt:t(2*B),claudeSessionId:`c-notes-3`,contextLeft:71,starred:!1,firstPrompt:`add an export to PDF`,lastPrompt:`add an export to PDF`,signedOut:!0},{id:i,cwd:W,title:`trail-log · main`,tabTitle:`Offline maps`,remoteControl:!0,running:!0,idle:!0,idleSince:t(9*z),createdAt:t(1*B),claudeSessionId:`c-trail-2`,contextLeft:58,starred:!1,firstPrompt:`cache map tiles for offline hikes`,lastPrompt:`cache map tiles for offline hikes`,netRetry:{state:`gaveup`,attempt:8,max:8,nextAt:null,error:`Connection error.`,at:t(9*z),why:`8 tries did not get through`}}],screens:{[n]:$i(`${O(Fo)}> uploads of big albums stall at 80%, make them retry\r\n`+G(`The stall is in the upload loop of the sync backend.`)+K(`Update`,`lib/services/sync_backend.dart`,`Added 212 lines`)+K(`Bash`,`flutter test test/sync_test.dart`,`All tests passed!`)+G(`Done. A chunk that times out is retried three times before the album is marked failed.`)+`\r
24
- `),[r]:$i(`${O(U)}> add an export to PDF\r\n`+G(`Not signed in · Please run /login`)+`\r
25
- `),[i]:$i(`${O(W)}> cache map tiles for offline hikes\r\n`+G(`API Error: Connection error.`)+`\r
26
- `)},history:{[n]:[{id:`h-1`,kind:`prompt`,text:`uploads of big albums stall at 80%, make them retry`,sentAt:t(30*z),outputAt:t(18*z),output:`Done. A chunk that times out is retried three times before the album is marked failed.`}],[r]:[],[i]:[]},recent:[{cwd:Fo,title:`photo-shelf`,lastActive:t(18*z),claudeSessionId:`c-shelf-1`,launch:{}},{cwd:H,title:`todo-garden`,lastActive:t(5*B),claudeSessionId:`c-garden-4`,launch:{}},{cwd:U,title:`pocket-notes`,lastActive:t(1*V),claudeSessionId:`c-notes-1`,launch:{}},{cwd:W,title:`trail-log`,lastActive:t(2*V),claudeSessionId:`c-trail-1`,launch:{}}],closed:[],replies:[],numbers:{repoHealth:!0},banner:qt};return{meta:{id:`repo-health`,protocol:2,stamp:`repo-health-1`},clock:{start:e},state:{bootId:`boot`,model:a},script:[]}}var Lo={"first-look":Ka(Date.now()),"queue-and-schedule":Po(Date.now()),"gallery-and-files":Ya(Date.now()),numbers:Oo(Date.now()),"limit-and-budget":vo(Date.now()),"repo-health":Io(Date.now())},Ro=200,zo=`Not in the demo — the demo makes no request off this device`;function Bo(e,t){let n;try{n=new URL(e,t)}catch{return{route:`refuse`,u:null}}if(n.protocol===`data:`||n.protocol===`blob:`)return{route:`local`,u:n};let r;try{r=new URL(t).origin}catch{return{route:`refuse`,u:n}}return n.origin===r?n.pathname===`/api`||n.pathname.startsWith(`/api/`)||n.pathname===`/ws`?{route:`host`,u:n}:{route:`local`,u:n}:{route:`refuse`,u:n}}function Vo(e){if(e!=null){if(typeof e==`string`)return new TextEncoder().encode(e).length;if(typeof Blob<`u`&&e instanceof Blob)return e.size;if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength}}function Ho(e,t){if(/json/i.test(t??``)||/^\s*[[{]/.test(e))try{return JSON.parse(e)}catch{}return e}function Uo(e,t,n,r){let i={method:e.toUpperCase(),path:t.pathname},a={},o=!1;if(t.searchParams.forEach((e,t)=>{a[t]=t in a?`${a[t]},${e}`:e,o=!0}),o&&(i.query=a),typeof n==`string`)i.body=Ho(n,r),i.bodyBytes=Vo(n);else if(n instanceof URLSearchParams)i.body=n.toString();else if(n!=null){let e=Vo(n);e!=null&&(i.bodyBytes=e)}return i}function Wo(e,t){try{return e.request(t)}catch(e){return{status:500,contentType:`text/plain`,body:`demo host failed on ${t.method} ${t.path}: ${String(e)}`}}}var Go=new Set([101,204,205,304]),Ko=0,qo=1,Jo=2,Yo=3,Xo=class{static CONNECTING=Ko;static OPEN=qo;static CLOSING=Jo;static CLOSED=Yo;CONNECTING=Ko;OPEN=qo;CLOSING=Jo;CLOSED=Yo;readyState=Ko;url;protocol=``;extensions=``;binaryType=`blob`;bufferedAmount=0;onopen=null;onmessage=null;onclose=null;onerror=null;host;conn=null;timers=new Set;attaching=!1;ptyQueued=0;replay;constructor(e,t,n=()=>[]){this.host=e,this.url=t,this.replay=n,this.later(0,()=>this.open())}later(e,t){let n=setTimeout(()=>{this.timers.delete(n),t()},Math.max(0,e));this.timers.add(n)}open(){if(this.readyState!==Ko)return;let e=null,t=this.host.connect(t=>{if(this.readyState===Ko){t.kind===`close`&&(e=t);return}let n=t.kind===`frame`&&t.msg.t===`pty`?t.msg:null;n?.full&&this.attaching&&t.kind===`frame`&&t.afterMs==null&&this.ptyQueued===0?this.deliver(t):(n&&this.ptyQueued++,this.later(t.afterMs??0,()=>{n&&this.ptyQueued--,this.deliver(t)}))}),n=e;if(n?.kind===`close`)this.finish(n.code,n.reason);else{this.conn=t,this.readyState=qo,this.onopen?.(new Event(`open`));for(let e of this.replay())this.later(0,()=>this.onmessage?.(new MessageEvent(`message`,{data:he({t:`plugin.push`,...e})})))}}deliver(e){this.readyState===qo&&(e.kind===`close`?(this.conn=null,this.finish(e.code,e.reason)):this.onmessage?.(new MessageEvent(`message`,{data:he(e.msg)})))}finish(e,t){if(this.readyState===Yo)return;this.readyState=Yo;for(let e of this.timers)clearTimeout(e);this.timers.clear();let n=Object.assign(new Event(`close`),{code:e,reason:t,wasClean:e===1e3});this.onclose?.(n)}send(e){if(this.readyState===Ko)throw new DOMException(`still connecting`,`InvalidStateError`);if(this.readyState!==qo||!this.conn)return;let t;try{t=le(e)}catch{return}this.attaching=t.t===`session.attach`;try{this.conn.receive(t)}finally{this.attaching=!1}}close(e=1e3,t=``){this.readyState!==Jo&&this.readyState!==Yo&&(this.readyState=Jo,this.conn?.close(),this.conn=null,setTimeout(()=>this.finish(e,t),0))}addEventListener(){}removeEventListener(){}};function Zo(e,t){if(e)try{let n=e.getItem(ke(t));return n?JSON.parse(n):void 0}catch{return}}function Qo(e,t){function n(...n){let r=e.now()+t();return new.target?Reflect.construct(e,n.length?n:[r],new.target):new e(r).toString()}return n.prototype=e.prototype,Object.setPrototypeOf(n,e),Object.defineProperty(n,"now",{value:()=>e.now()+t(),configurable:!0,writable:!0}),n}function $o(e){let{scenario:t,target:n,store:r}=e,i=n.Date??Date,a=e.clock??{now:()=>i.now()},o=()=>e.href,s=t.meta.id,c=Zo(r,s),l={plugins:_t()},u=c===void 0?Yi(t,a,l):Xi(t,a,c,l),d=!1,f=()=>{!d&&n.Date&&u.clockShift()!==0&&(n.Date=Qo(n.Date,()=>u.clockShift()),d=!0)};u.onChange(f),f();let p=()=>{if(r)try{r.setItem(ke(s),JSON.stringify(u.snapshot()))}catch{}};u.onChange(p),p();let m=(t,n)=>{try{e.onRefused?.(t,n)}catch{}},h=n.fetch;n.fetch=(async(e,t)=>{let n=typeof e!=`string`&&!(e instanceof URL),r=n?e.url:String(e),{route:i,u:a}=Bo(r,o());if(i===`local`)return h(e,t);if(i===`refuse`||!a)throw m(r,`fetch`),TypeError(`${zo}: ${r}`);let s=t?.method??(n?e.method:`GET`),c=new Headers(t?.headers??(n?e.headers:void 0)),l=t?.body;if(l==null&&n&&s!==`GET`&&s!==`HEAD`)try{l=await e.text()}catch{l=void 0}let d=t?.signal??(n?e.signal:void 0);if(d?.aborted)throw new DOMException(`aborted`,`AbortError`);let f=Wo(u,Uo(s,a,l,c.get(`content-type`)));f.afterMs&&await new Promise((e,t)=>{let n=setTimeout(e,f.afterMs);d?.addEventListener(`abort`,()=>{clearTimeout(n),t(new DOMException(`aborted`,`AbortError`))},{once:!0})});let p=new TextEncoder().encode(f.body).length,g=Go.has(f.status)||s.toUpperCase()===`HEAD`;return new Response(g?null:f.body,{status:f.status,headers:{"content-type":f.contentType,"content-length":String(g?0:p)}})});let g=n.XMLHttpRequest;g&&ts(g,u,o,m);let _=n.navigator;if(_){let e=typeof _.sendBeacon==`function`?_.sendBeacon.bind(_):null;_.sendBeacon=(t,n)=>{let r=String(t),{route:i,u:a}=Bo(r,o());if(i===`local`)return e?e(t,n):!1;if(i===`refuse`||!a)return m(r,`sendBeacon`),!1;let s=typeof Blob<`u`&&n instanceof Blob?n.type:null;return Wo(u,Uo(`POST`,a,n,s)),!0}}let v=null;return e.tick!==!1&&(v=setInterval(()=>u.advance(),Ro)),{host:u,dial:t=>new Xo(u,t,bt(e.href)?St:void 0),stop(){v!==null&&(clearInterval(v),v=null)}}}function Q(e,t,n){let r={lengthComputable:n>0,loaded:t,total:n};return typeof ProgressEvent==`function`?new ProgressEvent(e,r):Object.assign(new Event(e),r)}function es(e,t,n){let r=/^\/api\/repos\/([^/]+)\/inbox$/.exec(e.pathname);if(r&&n.status===200&&typeof Blob<`u`&&t instanceof Blob)try{let e=JSON.parse(n.body).saved?.[0]?.name;e&&st(decodeURIComponent(r[1]),e,URL.createObjectURL(t))}catch{}}function $(e,t,n){Object.defineProperty(e,t,{value:n,configurable:!0,writable:!0})}function ts(e,t,n,r){let i=e.prototype,a=new WeakMap,o=i.open,s=i.send,c=i.abort,l=i.setRequestHeader;i.setRequestHeader=function(e,t){let n=a.get(this);return n&&((n.headers??={})[e.toLowerCase()]=t),l.call(this,e,t)},i.open=function(e,t,...n){return a.set(this,{method:e,url:String(t)}),o.call(this,e,t,...n)},i.send=function(e){let i=a.get(this);if(!i)return s.call(this,e);let{route:o,u:c}=Bo(i.url,n());if(o===`local`)return s.call(this,e);i.demo=!0;let l=(e,t)=>{try{e?.dispatchEvent(t)}catch{}};if(o===`refuse`||!c){r(i.url,`XMLHttpRequest`),i.timer=setTimeout(()=>{$(this,`readyState`,4),$(this,`status`,0),l(this,new Event(`readystatechange`)),l(this,Q(`error`,0,0)),l(this,Q(`loadend`,0,0))},0);return}let u=Vo(e),d=typeof Blob<`u`&&e instanceof Blob?e.type:null,f=Uo(i.method,c,typeof e==`string`?e:e??void 0,d);i.headers&&(f.headers=i.headers);let p=Wo(t,f);es(c,e,p);let m=this;i.timer=setTimeout(()=>{i.timer=void 0,u!=null&&u>0&&m.upload&&(l(m.upload,Q(`loadstart`,0,u)),l(m.upload,Q(`progress`,u,u)),l(m.upload,Q(`load`,u,u)),l(m.upload,Q(`loadend`,u,u)));let e=new TextEncoder().encode(p.body).length;$(m,`readyState`,2),l(m,new Event(`readystatechange`)),$(m,`readyState`,3),l(m,new Event(`readystatechange`)),$(m,`status`,p.status),$(m,`statusText`,String(p.status)),$(m,`responseURL`,c.toString()),$(m,`responseText`,p.body);let t=p.body;if(m.responseType===`json`)try{t=JSON.parse(p.body)}catch{t=null}$(m,`response`,t);let n={"content-type":p.contentType,"content-length":String(e)};$(m,`getResponseHeader`,e=>n[e.toLowerCase()]??null),$(m,`getAllResponseHeaders`,()=>Object.entries(n).map(([e,t])=>`${e}: ${t}\r\n`).join(``)),$(m,`readyState`,4),l(m,new Event(`readystatechange`)),l(m,Q(`progress`,e,e)),l(m,Q(`load`,e,e)),l(m,Q(`loadend`,e,e))},p.afterMs??0)},i.abort=function(){let e=a.get(this);if(!e?.demo)return c.call(this);if(e.timer!==void 0){clearTimeout(e.timer),e.timer=void 0,$(this,`readyState`,4),$(this,`status`,0);try{this.dispatchEvent(new Event(`readystatechange`)),this.dispatchEvent(Q(`abort`,0,0)),this.dispatchEvent(Q(`loadend`,0,0))}catch{}$(this,`readyState`,0)}}}var ns=null;function rs(){return ns}function is(){if(ns)return!0;let e=Ke();if(!e)return!1;let t=Lo[e];if(!t)return Qe(null,`There is no demo called "${e}" in this build.`),!1;let n=null;try{n=globalThis.sessionStorage??null}catch{n=null}try{qi(t),ns=$o({scenario:t,href:location.href,target:globalThis,store:n,onRefused:(e,t)=>{}})}catch(t){return ns=null,Qe(null,`The demo "${e}" could not start in this build: ${String(t?.message??t)}`),!1}return Qe(e),!0}export{Be as C,Ve as D,Le as E,we as O,Ie as S,ze as T,Ee as _,mt as a,Fe as b,Xe as c,et as d,Ye as f,ke as g,E as h,yt as i,He as k,Ze as l,De as m,is as n,ft as o,Qe as p,Ct as r,We as s,rs as t,$e as u,Me as v,Pe as w,Ne as x,Re as y};