waterplane 0.1.6 → 0.1.14

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 (656) hide show
  1. package/CHANGELOG.md +146 -1
  2. package/README.md +47 -24
  3. package/SECURITY.md +11 -3
  4. package/deploy/node-version +1 -1
  5. package/node_modules/@waterplane/shared/dist/agentfiles.d.ts +17 -0
  6. package/node_modules/@waterplane/shared/dist/agentfiles.js +60 -5
  7. package/node_modules/@waterplane/shared/dist/agentfiles.js.map +1 -1
  8. package/node_modules/@waterplane/shared/dist/alwaysonwords.d.ts +83 -0
  9. package/node_modules/@waterplane/shared/dist/alwaysonwords.js +215 -0
  10. package/node_modules/@waterplane/shared/dist/alwaysonwords.js.map +1 -0
  11. package/node_modules/@waterplane/shared/dist/assess/sasswords.js +4 -0
  12. package/node_modules/@waterplane/shared/dist/assess/sasswords.js.map +1 -1
  13. package/node_modules/@waterplane/shared/dist/autocompact.js +3 -2
  14. package/node_modules/@waterplane/shared/dist/autocompact.js.map +1 -1
  15. package/node_modules/@waterplane/shared/dist/backendsources.d.ts +11 -1
  16. package/node_modules/@waterplane/shared/dist/backendsources.js.map +1 -1
  17. package/node_modules/@waterplane/shared/dist/branchmode.d.ts +33 -0
  18. package/node_modules/@waterplane/shared/dist/branchmode.js +88 -0
  19. package/node_modules/@waterplane/shared/dist/branchmode.js.map +1 -0
  20. package/node_modules/@waterplane/shared/dist/budget.d.ts +7 -1
  21. package/node_modules/@waterplane/shared/dist/budget.js +11 -3
  22. package/node_modules/@waterplane/shared/dist/budget.js.map +1 -1
  23. package/node_modules/@waterplane/shared/dist/buildstamp.d.ts +37 -0
  24. package/node_modules/@waterplane/shared/dist/buildstamp.js +95 -0
  25. package/node_modules/@waterplane/shared/dist/buildstamp.js.map +1 -0
  26. package/node_modules/@waterplane/shared/dist/burn.d.ts +16 -1
  27. package/node_modules/@waterplane/shared/dist/burn.js +30 -0
  28. package/node_modules/@waterplane/shared/dist/burn.js.map +1 -1
  29. package/node_modules/@waterplane/shared/dist/calday.d.ts +4 -0
  30. package/node_modules/@waterplane/shared/dist/calday.js +25 -0
  31. package/node_modules/@waterplane/shared/dist/calday.js.map +1 -0
  32. package/node_modules/@waterplane/shared/dist/changebrief.d.ts +77 -0
  33. package/node_modules/@waterplane/shared/dist/changebrief.js +70 -0
  34. package/node_modules/@waterplane/shared/dist/changebrief.js.map +1 -0
  35. package/node_modules/@waterplane/shared/dist/clihealth/healthrecord.js +1 -0
  36. package/node_modules/@waterplane/shared/dist/clihealth/healthrecord.js.map +1 -1
  37. package/node_modules/@waterplane/shared/dist/costwindow.d.ts +24 -5
  38. package/node_modules/@waterplane/shared/dist/costwindow.js +35 -15
  39. package/node_modules/@waterplane/shared/dist/costwindow.js.map +1 -1
  40. package/node_modules/@waterplane/shared/dist/desktopfiles.d.ts +100 -0
  41. package/node_modules/@waterplane/shared/dist/desktopfiles.js +192 -0
  42. package/node_modules/@waterplane/shared/dist/desktopfiles.js.map +1 -0
  43. package/node_modules/@waterplane/shared/dist/exposure.d.ts +175 -0
  44. package/node_modules/@waterplane/shared/dist/exposure.js +357 -0
  45. package/node_modules/@waterplane/shared/dist/exposure.js.map +1 -0
  46. package/node_modules/@waterplane/shared/dist/exposurepush.d.ts +60 -0
  47. package/node_modules/@waterplane/shared/dist/exposurepush.js +103 -0
  48. package/node_modules/@waterplane/shared/dist/exposurepush.js.map +1 -0
  49. package/node_modules/@waterplane/shared/dist/healthindex/commits.d.ts +26 -0
  50. package/node_modules/@waterplane/shared/dist/healthindex/commits.js +57 -0
  51. package/node_modules/@waterplane/shared/dist/healthindex/commits.js.map +1 -0
  52. package/node_modules/@waterplane/shared/dist/healthindex/move.d.ts +25 -0
  53. package/node_modules/@waterplane/shared/dist/healthindex/move.js +79 -0
  54. package/node_modules/@waterplane/shared/dist/healthindex/move.js.map +1 -0
  55. package/node_modules/@waterplane/shared/dist/healthindex/readings.d.ts +53 -0
  56. package/node_modules/@waterplane/shared/dist/healthindex/readings.js +154 -0
  57. package/node_modules/@waterplane/shared/dist/healthindex/readings.js.map +1 -0
  58. package/node_modules/@waterplane/shared/dist/healthindex/repoindex.d.ts +41 -0
  59. package/node_modules/@waterplane/shared/dist/healthindex/repoindex.js +19 -0
  60. package/node_modules/@waterplane/shared/dist/healthindex/repoindex.js.map +1 -0
  61. package/node_modules/@waterplane/shared/dist/healthindex/score.d.ts +26 -0
  62. package/node_modules/@waterplane/shared/dist/healthindex/score.js +156 -0
  63. package/node_modules/@waterplane/shared/dist/healthindex/score.js.map +1 -0
  64. package/node_modules/@waterplane/shared/dist/healthindex/types.d.ts +206 -0
  65. package/node_modules/@waterplane/shared/dist/healthindex/types.js +58 -0
  66. package/node_modules/@waterplane/shared/dist/healthindex/types.js.map +1 -0
  67. package/node_modules/@waterplane/shared/dist/healthindex/vs.d.ts +26 -0
  68. package/node_modules/@waterplane/shared/dist/healthindex/vs.js +38 -0
  69. package/node_modules/@waterplane/shared/dist/healthindex/vs.js.map +1 -0
  70. package/node_modules/@waterplane/shared/dist/healthindex/words.d.ts +28 -0
  71. package/node_modules/@waterplane/shared/dist/healthindex/words.js +124 -0
  72. package/node_modules/@waterplane/shared/dist/healthindex/words.js.map +1 -0
  73. package/node_modules/@waterplane/shared/dist/healthindex.d.ts +15 -411
  74. package/node_modules/@waterplane/shared/dist/healthindex.js +8 -602
  75. package/node_modules/@waterplane/shared/dist/healthindex.js.map +1 -1
  76. package/node_modules/@waterplane/shared/dist/hints.js +15 -0
  77. package/node_modules/@waterplane/shared/dist/hints.js.map +1 -1
  78. package/node_modules/@waterplane/shared/dist/index.d.ts +37 -0
  79. package/node_modules/@waterplane/shared/dist/index.js +37 -0
  80. package/node_modules/@waterplane/shared/dist/index.js.map +1 -1
  81. package/node_modules/@waterplane/shared/dist/intent/clean.d.ts +87 -0
  82. package/node_modules/@waterplane/shared/dist/intent/clean.js +51 -3
  83. package/node_modules/@waterplane/shared/dist/intent/clean.js.map +1 -1
  84. package/node_modules/@waterplane/shared/dist/intent/kind.d.ts +40 -1
  85. package/node_modules/@waterplane/shared/dist/intent/kind.js +36 -3
  86. package/node_modules/@waterplane/shared/dist/intent/kind.js.map +1 -1
  87. package/node_modules/@waterplane/shared/dist/intent/types.d.ts +13 -0
  88. package/node_modules/@waterplane/shared/dist/intent/types.js.map +1 -1
  89. package/node_modules/@waterplane/shared/dist/intent/verdict.js +9 -16
  90. package/node_modules/@waterplane/shared/dist/intent/verdict.js.map +1 -1
  91. package/node_modules/@waterplane/shared/dist/intent/words.js +5 -0
  92. package/node_modules/@waterplane/shared/dist/intent/words.js.map +1 -1
  93. package/node_modules/@waterplane/shared/dist/intent.d.ts +2 -2
  94. package/node_modules/@waterplane/shared/dist/intent.js +2 -2
  95. package/node_modules/@waterplane/shared/dist/intent.js.map +1 -1
  96. package/node_modules/@waterplane/shared/dist/launchmodes.d.ts +2 -0
  97. package/node_modules/@waterplane/shared/dist/launchmodes.js +12 -0
  98. package/node_modules/@waterplane/shared/dist/launchmodes.js.map +1 -1
  99. package/node_modules/@waterplane/shared/dist/ledgerspan.d.ts +106 -0
  100. package/node_modules/@waterplane/shared/dist/ledgerspan.js +196 -0
  101. package/node_modules/@waterplane/shared/dist/ledgerspan.js.map +1 -0
  102. package/node_modules/@waterplane/shared/dist/naming.d.ts +3 -1
  103. package/node_modules/@waterplane/shared/dist/naming.js +6 -2
  104. package/node_modules/@waterplane/shared/dist/naming.js.map +1 -1
  105. package/node_modules/@waterplane/shared/dist/netfuse.d.ts +5 -0
  106. package/node_modules/@waterplane/shared/dist/netfuse.js +6 -1
  107. package/node_modules/@waterplane/shared/dist/netfuse.js.map +1 -1
  108. package/node_modules/@waterplane/shared/dist/netretry.d.ts +78 -0
  109. package/node_modules/@waterplane/shared/dist/netretry.js +85 -0
  110. package/node_modules/@waterplane/shared/dist/netretry.js.map +1 -0
  111. package/node_modules/@waterplane/shared/dist/netretrycfg.d.ts +12 -0
  112. package/node_modules/@waterplane/shared/dist/netretrycfg.js +27 -0
  113. package/node_modules/@waterplane/shared/dist/netretrycfg.js.map +1 -0
  114. package/node_modules/@waterplane/shared/dist/nodemin.d.ts +6 -4
  115. package/node_modules/@waterplane/shared/dist/nodemin.js +6 -4
  116. package/node_modules/@waterplane/shared/dist/nodemin.js.map +1 -1
  117. package/node_modules/@waterplane/shared/dist/optins.d.ts +35 -1
  118. package/node_modules/@waterplane/shared/dist/optins.js +39 -1
  119. package/node_modules/@waterplane/shared/dist/optins.js.map +1 -1
  120. package/node_modules/@waterplane/shared/dist/pairing.js +4 -0
  121. package/node_modules/@waterplane/shared/dist/pairing.js.map +1 -1
  122. package/node_modules/@waterplane/shared/dist/passive.js +3 -0
  123. package/node_modules/@waterplane/shared/dist/passive.js.map +1 -1
  124. package/node_modules/@waterplane/shared/dist/plugin/api.d.ts +394 -0
  125. package/node_modules/@waterplane/shared/dist/plugin/api.js +2 -0
  126. package/node_modules/@waterplane/shared/dist/plugin/api.js.map +1 -0
  127. package/node_modules/@waterplane/shared/dist/plugin/backend.d.ts +197 -0
  128. package/node_modules/@waterplane/shared/dist/plugin/backend.js +9 -0
  129. package/node_modules/@waterplane/shared/dist/plugin/backend.js.map +1 -0
  130. package/node_modules/@waterplane/shared/dist/plugin/manifest.d.ts +160 -0
  131. package/node_modules/@waterplane/shared/dist/plugin/manifest.js +98 -0
  132. package/node_modules/@waterplane/shared/dist/plugin/manifest.js.map +1 -0
  133. package/node_modules/@waterplane/shared/dist/plugin/module.d.ts +98 -0
  134. package/node_modules/@waterplane/shared/dist/plugin/module.js +13 -0
  135. package/node_modules/@waterplane/shared/dist/plugin/module.js.map +1 -0
  136. package/node_modules/@waterplane/shared/dist/plugin/version.d.ts +66 -0
  137. package/node_modules/@waterplane/shared/dist/plugin/version.js +86 -0
  138. package/node_modules/@waterplane/shared/dist/plugin/version.js.map +1 -0
  139. package/node_modules/@waterplane/shared/dist/plugin.d.ts +5 -867
  140. package/node_modules/@waterplane/shared/dist/plugin.js +27 -186
  141. package/node_modules/@waterplane/shared/dist/plugin.js.map +1 -1
  142. package/node_modules/@waterplane/shared/dist/pluginlaunch.d.ts +7 -0
  143. package/node_modules/@waterplane/shared/dist/prview.d.ts +23 -0
  144. package/node_modules/@waterplane/shared/dist/prview.js +107 -0
  145. package/node_modules/@waterplane/shared/dist/prview.js.map +1 -0
  146. package/node_modules/@waterplane/shared/dist/queue/queueserial.d.ts +11 -2
  147. package/node_modules/@waterplane/shared/dist/queue/queueserial.js +13 -4
  148. package/node_modules/@waterplane/shared/dist/queue/queueserial.js.map +1 -1
  149. package/node_modules/@waterplane/shared/dist/queue/queuewords.js +1 -0
  150. package/node_modules/@waterplane/shared/dist/queue/queuewords.js.map +1 -1
  151. package/node_modules/@waterplane/shared/dist/repohealth.d.ts +4 -0
  152. package/node_modules/@waterplane/shared/dist/repohealth.js.map +1 -1
  153. package/node_modules/@waterplane/shared/dist/repotwins.d.ts +31 -0
  154. package/node_modules/@waterplane/shared/dist/repotwins.js +52 -0
  155. package/node_modules/@waterplane/shared/dist/repotwins.js.map +1 -0
  156. package/node_modules/@waterplane/shared/dist/requirements.js +4 -1
  157. package/node_modules/@waterplane/shared/dist/requirements.js.map +1 -1
  158. package/node_modules/@waterplane/shared/dist/schedule/schedaction.d.ts +29 -0
  159. package/node_modules/@waterplane/shared/dist/schedule/schedaction.js +22 -0
  160. package/node_modules/@waterplane/shared/dist/schedule/schedaction.js.map +1 -1
  161. package/node_modules/@waterplane/shared/dist/schedule/schedclean.js +26 -0
  162. package/node_modules/@waterplane/shared/dist/schedule/schedclean.js.map +1 -1
  163. package/node_modules/@waterplane/shared/dist/schedule/schedhorizon.d.ts +1 -0
  164. package/node_modules/@waterplane/shared/dist/schedule/schedhorizon.js +1 -0
  165. package/node_modules/@waterplane/shared/dist/schedule/schedhorizon.js.map +1 -1
  166. package/node_modules/@waterplane/shared/dist/schedule.d.ts +1 -1
  167. package/node_modules/@waterplane/shared/dist/schedule.js +1 -1
  168. package/node_modules/@waterplane/shared/dist/schedule.js.map +1 -1
  169. package/node_modules/@waterplane/shared/dist/sessionbudget.d.ts +34 -7
  170. package/node_modules/@waterplane/shared/dist/sessionbudget.js +59 -21
  171. package/node_modules/@waterplane/shared/dist/sessionbudget.js.map +1 -1
  172. package/node_modules/@waterplane/shared/dist/sweep.d.ts +2 -1
  173. package/node_modules/@waterplane/shared/dist/sweep.js +2 -1
  174. package/node_modules/@waterplane/shared/dist/sweep.js.map +1 -1
  175. package/node_modules/@waterplane/shared/dist/tokens.d.ts +4 -3
  176. package/node_modules/@waterplane/shared/dist/tokens.js +9 -7
  177. package/node_modules/@waterplane/shared/dist/tokens.js.map +1 -1
  178. package/node_modules/@waterplane/shared/dist/weekburn.d.ts +144 -0
  179. package/node_modules/@waterplane/shared/dist/weekburn.js +250 -0
  180. package/node_modules/@waterplane/shared/dist/weekburn.js.map +1 -0
  181. package/node_modules/@waterplane/shared/dist/wire/alwayson.d.ts +64 -0
  182. package/node_modules/@waterplane/shared/dist/wire/alwayson.js +7 -0
  183. package/node_modules/@waterplane/shared/dist/wire/alwayson.js.map +1 -0
  184. package/node_modules/@waterplane/shared/dist/wire/backend.d.ts +4 -0
  185. package/node_modules/@waterplane/shared/dist/wire/backendtokens.d.ts +6 -0
  186. package/node_modules/@waterplane/shared/dist/wire/backendtokens.js +0 -9
  187. package/node_modules/@waterplane/shared/dist/wire/backendtokens.js.map +1 -1
  188. package/node_modules/@waterplane/shared/dist/wire/costwindow.d.ts +25 -0
  189. package/node_modules/@waterplane/shared/dist/wire/messages/clienthost.d.ts +15 -1
  190. package/node_modules/@waterplane/shared/dist/wire/messages/clientsession.d.ts +24 -0
  191. package/node_modules/@waterplane/shared/dist/wire/messages/hosttools.d.ts +12 -2
  192. package/node_modules/@waterplane/shared/dist/wire/notify.d.ts +194 -1
  193. package/node_modules/@waterplane/shared/dist/wire/notify.js +139 -1
  194. package/node_modules/@waterplane/shared/dist/wire/notify.js.map +1 -1
  195. package/node_modules/@waterplane/shared/dist/wire/pullrequest.d.ts +42 -0
  196. package/node_modules/@waterplane/shared/dist/wire/pullrequest.js +2 -0
  197. package/node_modules/@waterplane/shared/dist/wire/pullrequest.js.map +1 -0
  198. package/node_modules/@waterplane/shared/dist/wire/repo.d.ts +131 -0
  199. package/node_modules/@waterplane/shared/dist/wire/repo.js +8 -3
  200. package/node_modules/@waterplane/shared/dist/wire/repo.js.map +1 -1
  201. package/node_modules/@waterplane/shared/dist/wire/sent.d.ts +3 -1
  202. package/node_modules/@waterplane/shared/dist/wire/session/contextspark.d.ts +7 -0
  203. package/node_modules/@waterplane/shared/dist/wire/session/info.d.ts +4 -1
  204. package/node_modules/@waterplane/shared/dist/wire/session/launch.d.ts +36 -0
  205. package/node_modules/@waterplane/shared/dist/wire/session.d.ts +1 -1
  206. package/node_modules/@waterplane/shared/dist/wire/telemetry.d.ts +30 -0
  207. package/node_modules/@waterplane/shared/dist/wire/work.d.ts +13 -0
  208. package/node_modules/@waterplane/shared/dist/wire/work.js.map +1 -1
  209. package/node_modules/@waterplane/shared/dist/wordof.d.ts +11 -0
  210. package/node_modules/@waterplane/shared/dist/wordof.js +14 -0
  211. package/node_modules/@waterplane/shared/dist/wordof.js.map +1 -0
  212. package/npm-shrinkwrap.json +3 -3
  213. package/package.json +2 -2
  214. package/packages/extensions/scorecard/waterplane-plugin.json +10 -0
  215. package/packages/host/dist/agentexposure.d.ts +13 -0
  216. package/packages/host/dist/agentexposure.js +90 -0
  217. package/packages/host/dist/agentexposure.js.map +1 -0
  218. package/packages/host/dist/agentintents.js +7 -8
  219. package/packages/host/dist/agentintents.js.map +1 -1
  220. package/packages/host/dist/agentwatch.d.ts +3 -7
  221. package/packages/host/dist/agentwatch.js.map +1 -1
  222. package/packages/host/dist/alwayson.d.ts +18 -0
  223. package/packages/host/dist/alwayson.js +159 -0
  224. package/packages/host/dist/alwayson.js.map +1 -0
  225. package/packages/host/dist/answergate.d.ts +3 -7
  226. package/packages/host/dist/answergate.js.map +1 -1
  227. package/packages/host/dist/attentionstore.d.ts +94 -0
  228. package/packages/host/dist/attentionstore.js +232 -0
  229. package/packages/host/dist/attentionstore.js.map +1 -0
  230. package/packages/host/dist/backends/claude-sources.d.ts +2 -0
  231. package/packages/host/dist/backends/claude-sources.js +12 -0
  232. package/packages/host/dist/backends/claude-sources.js.map +1 -1
  233. package/packages/host/dist/backends/claude.js +3 -2
  234. package/packages/host/dist/backends/claude.js.map +1 -1
  235. package/packages/host/dist/backends/derive.js +1 -0
  236. package/packages/host/dist/backends/derive.js.map +1 -1
  237. package/packages/host/dist/backends/overhead.d.ts +7 -5
  238. package/packages/host/dist/backends/overhead.js +15 -13
  239. package/packages/host/dist/backends/overhead.js.map +1 -1
  240. package/packages/host/dist/backends/registry.js +4 -1
  241. package/packages/host/dist/backends/registry.js.map +1 -1
  242. package/packages/host/dist/backends/types.d.ts +2 -0
  243. package/packages/host/dist/besidespend.d.ts +22 -0
  244. package/packages/host/dist/besidespend.js +65 -0
  245. package/packages/host/dist/besidespend.js.map +1 -0
  246. package/packages/host/dist/boxkit.d.ts +19 -0
  247. package/packages/host/dist/boxkit.js +38 -0
  248. package/packages/host/dist/boxkit.js.map +1 -0
  249. package/packages/host/dist/branchrules.d.ts +14 -0
  250. package/packages/host/dist/branchrules.js +47 -0
  251. package/packages/host/dist/branchrules.js.map +1 -0
  252. package/packages/host/dist/budget.d.ts +3 -2
  253. package/packages/host/dist/budget.js +5 -3
  254. package/packages/host/dist/budget.js.map +1 -1
  255. package/packages/host/dist/builds.d.ts +31 -1
  256. package/packages/host/dist/builds.js +55 -3
  257. package/packages/host/dist/builds.js.map +1 -1
  258. package/packages/host/dist/buildversions.d.ts +2 -0
  259. package/packages/host/dist/buildversions.js +36 -0
  260. package/packages/host/dist/buildversions.js.map +1 -0
  261. package/packages/host/dist/burnwatch.d.ts +23 -11
  262. package/packages/host/dist/burnwatch.js +57 -3
  263. package/packages/host/dist/burnwatch.js.map +1 -1
  264. package/packages/host/dist/changebrief.d.ts +37 -0
  265. package/packages/host/dist/changebrief.js +157 -0
  266. package/packages/host/dist/changebrief.js.map +1 -0
  267. package/packages/host/dist/cli/index.js +1 -1
  268. package/packages/host/dist/cli/index.js.map +1 -1
  269. package/packages/host/dist/clihealth.d.ts +2 -0
  270. package/packages/host/dist/clihealth.js +11 -2
  271. package/packages/host/dist/clihealth.js.map +1 -1
  272. package/packages/host/dist/compliance.d.ts +5 -1
  273. package/packages/host/dist/compliance.js +70 -31
  274. package/packages/host/dist/compliance.js.map +1 -1
  275. package/packages/host/dist/composer.d.ts +3 -1
  276. package/packages/host/dist/composer.js +3 -1
  277. package/packages/host/dist/composer.js.map +1 -1
  278. package/packages/host/dist/context.js +29 -4
  279. package/packages/host/dist/context.js.map +1 -1
  280. package/packages/host/dist/convlog.d.ts +1 -1
  281. package/packages/host/dist/convlog.js +1 -1
  282. package/packages/host/dist/costwindow.d.ts +25 -0
  283. package/packages/host/dist/costwindow.js +63 -1
  284. package/packages/host/dist/costwindow.js.map +1 -1
  285. package/packages/host/dist/ctxlog/ctxagents.js +16 -25
  286. package/packages/host/dist/ctxlog/ctxagents.js.map +1 -1
  287. package/packages/host/dist/ctxlog/ctxcursor.d.ts +36 -1
  288. package/packages/host/dist/ctxlog/ctxcursor.js +96 -2
  289. package/packages/host/dist/ctxlog/ctxcursor.js.map +1 -1
  290. package/packages/host/dist/ctxlog/ctxproject.js +2 -1
  291. package/packages/host/dist/ctxlog/ctxproject.js.map +1 -1
  292. package/packages/host/dist/ctxlog/ctxupdate.js +30 -24
  293. package/packages/host/dist/ctxlog/ctxupdate.js.map +1 -1
  294. package/packages/host/dist/ctxlog/usagerecord.d.ts +28 -0
  295. package/packages/host/dist/ctxlog/usagerecord.js +81 -0
  296. package/packages/host/dist/ctxlog/usagerecord.js.map +1 -0
  297. package/packages/host/dist/diskwatch.d.ts +4 -6
  298. package/packages/host/dist/diskwatch.js +3 -1
  299. package/packages/host/dist/diskwatch.js.map +1 -1
  300. package/packages/host/dist/eraseen.d.ts +6 -0
  301. package/packages/host/dist/eraseen.js +100 -0
  302. package/packages/host/dist/eraseen.js.map +1 -0
  303. package/packages/host/dist/explainjob.d.ts +24 -0
  304. package/packages/host/dist/explainjob.js +80 -0
  305. package/packages/host/dist/explainjob.js.map +1 -0
  306. package/packages/host/dist/exposure.d.ts +56 -0
  307. package/packages/host/dist/exposure.js +371 -0
  308. package/packages/host/dist/exposure.js.map +1 -0
  309. package/packages/host/dist/exposurepush.d.ts +28 -0
  310. package/packages/host/dist/exposurepush.js +136 -0
  311. package/packages/host/dist/exposurepush.js.map +1 -0
  312. package/packages/host/dist/exposurerun.d.ts +18 -0
  313. package/packages/host/dist/exposurerun.js +126 -0
  314. package/packages/host/dist/exposurerun.js.map +1 -0
  315. package/packages/host/dist/exposurewatch.d.ts +29 -0
  316. package/packages/host/dist/exposurewatch.js +127 -0
  317. package/packages/host/dist/exposurewatch.js.map +1 -0
  318. package/packages/host/dist/extensions/scorecard/host/engine.d.mts +54 -0
  319. package/packages/host/dist/extensions/scorecard/host/engine.mjs +303 -0
  320. package/packages/host/dist/extensions/scorecard/host/engine.mjs.map +1 -0
  321. package/packages/host/dist/extensions/scorecard/host/gitslug.d.mts +5 -0
  322. package/packages/host/dist/extensions/scorecard/host/gitslug.mjs +45 -0
  323. package/packages/host/dist/extensions/scorecard/host/gitslug.mjs.map +1 -0
  324. package/packages/host/dist/extensions/scorecard/host/index.d.mts +15 -0
  325. package/packages/host/dist/extensions/scorecard/host/index.mjs +47 -0
  326. package/packages/host/dist/extensions/scorecard/host/index.mjs.map +1 -0
  327. package/packages/host/dist/extensions/scorecard/host/store.d.mts +12 -0
  328. package/packages/host/dist/extensions/scorecard/host/store.mjs +91 -0
  329. package/packages/host/dist/extensions/scorecard/host/store.mjs.map +1 -0
  330. package/packages/host/dist/extensions/scorecard/shared/logic.d.mts +42 -0
  331. package/packages/host/dist/extensions/scorecard/shared/logic.mjs +170 -0
  332. package/packages/host/dist/extensions/scorecard/shared/logic.mjs.map +1 -0
  333. package/packages/host/dist/extensions/scorecard/shared/wire.d.mts +140 -0
  334. package/packages/host/dist/extensions/scorecard/shared/wire.mjs +29 -0
  335. package/packages/host/dist/extensions/scorecard/shared/wire.mjs.map +1 -0
  336. package/packages/host/dist/files.d.ts +14 -12
  337. package/packages/host/dist/files.js +64 -94
  338. package/packages/host/dist/files.js.map +1 -1
  339. package/packages/host/dist/forge/github.d.ts +3 -0
  340. package/packages/host/dist/forge/github.js +96 -0
  341. package/packages/host/dist/forge/github.js.map +1 -0
  342. package/packages/host/dist/forge/index.d.ts +14 -0
  343. package/packages/host/dist/forge/index.js +32 -0
  344. package/packages/host/dist/forge/index.js.map +1 -0
  345. package/packages/host/dist/forge/types.d.ts +58 -0
  346. package/packages/host/dist/forge/types.js +2 -0
  347. package/packages/host/dist/forge/types.js.map +1 -0
  348. package/packages/host/dist/git.d.ts +41 -16
  349. package/packages/host/dist/git.js +162 -101
  350. package/packages/host/dist/git.js.map +1 -1
  351. package/packages/host/dist/gitnotify.d.ts +54 -0
  352. package/packages/host/dist/gitnotify.js +167 -0
  353. package/packages/host/dist/gitnotify.js.map +1 -0
  354. package/packages/host/dist/healthwatch.d.ts +2 -1
  355. package/packages/host/dist/healthwatch.js +4 -2
  356. package/packages/host/dist/healthwatch.js.map +1 -1
  357. package/packages/host/dist/hoststore.js +2 -2
  358. package/packages/host/dist/hoststore.js.map +1 -1
  359. package/packages/host/dist/intents/adapters.js +68 -19
  360. package/packages/host/dist/intents/adapters.js.map +1 -1
  361. package/packages/host/dist/intents/clock.d.ts +6 -3
  362. package/packages/host/dist/intents/clock.js +19 -5
  363. package/packages/host/dist/intents/clock.js.map +1 -1
  364. package/packages/host/dist/intents/contract.d.ts +15 -5
  365. package/packages/host/dist/intents/contract.js.map +1 -1
  366. package/packages/host/dist/intents/disk.d.ts +16 -0
  367. package/packages/host/dist/intents/disk.js +26 -1
  368. package/packages/host/dist/intents/disk.js.map +1 -1
  369. package/packages/host/dist/intents/fire.js +7 -1
  370. package/packages/host/dist/intents/fire.js.map +1 -1
  371. package/packages/host/dist/intents/ladder.js +3 -1
  372. package/packages/host/dist/intents/ladder.js.map +1 -1
  373. package/packages/host/dist/intents/manager.d.ts +3 -3
  374. package/packages/host/dist/intents/manager.js +2 -2
  375. package/packages/host/dist/intents/manager.js.map +1 -1
  376. package/packages/host/dist/intents/watch.d.ts +27 -3
  377. package/packages/host/dist/intents/watch.js +70 -9
  378. package/packages/host/dist/intents/watch.js.map +1 -1
  379. package/packages/host/dist/intents/write.d.ts +28 -1
  380. package/packages/host/dist/intents/write.js +87 -2
  381. package/packages/host/dist/intents/write.js.map +1 -1
  382. package/packages/host/dist/localcistatus.d.ts +22 -0
  383. package/packages/host/dist/localcistatus.js +105 -0
  384. package/packages/host/dist/localcistatus.js.map +1 -0
  385. package/packages/host/dist/main.js +45 -12
  386. package/packages/host/dist/main.js.map +1 -1
  387. package/packages/host/dist/net.d.ts +2 -0
  388. package/packages/host/dist/net.js +11 -2
  389. package/packages/host/dist/net.js.map +1 -1
  390. package/packages/host/dist/netlog.d.ts +40 -0
  391. package/packages/host/dist/netlog.js +165 -0
  392. package/packages/host/dist/netlog.js.map +1 -0
  393. package/packages/host/dist/netretrycfg.d.ts +7 -0
  394. package/packages/host/dist/netretrycfg.js +51 -0
  395. package/packages/host/dist/netretrycfg.js.map +1 -0
  396. package/packages/host/dist/notifyprefs.d.ts +6 -2
  397. package/packages/host/dist/notifyprefs.js +20 -5
  398. package/packages/host/dist/notifyprefs.js.map +1 -1
  399. package/packages/host/dist/notifytypes.d.ts +63 -0
  400. package/packages/host/dist/notifytypes.js +2 -0
  401. package/packages/host/dist/notifytypes.js.map +1 -0
  402. package/packages/host/dist/opendeliveries.js +24 -0
  403. package/packages/host/dist/opendeliveries.js.map +1 -1
  404. package/packages/host/dist/optins.d.ts +28 -1
  405. package/packages/host/dist/optins.js +96 -4
  406. package/packages/host/dist/optins.js.map +1 -1
  407. package/packages/host/dist/peers/agentpeer.js +1 -1
  408. package/packages/host/dist/peers/agentpeer.js.map +1 -1
  409. package/packages/host/dist/peers/jobs.d.ts +2 -4
  410. package/packages/host/dist/peers/jobs.js +6 -1
  411. package/packages/host/dist/peers/jobs.js.map +1 -1
  412. package/packages/host/dist/periodspend.d.ts +22 -3
  413. package/packages/host/dist/periodspend.js +44 -4
  414. package/packages/host/dist/periodspend.js.map +1 -1
  415. package/packages/host/dist/plugins/pluginapi.js +40 -10
  416. package/packages/host/dist/plugins/pluginapi.js.map +1 -1
  417. package/packages/host/dist/plugins/pluginregistry.d.ts +3 -8
  418. package/packages/host/dist/plugins/pluginregistry.js +1 -1
  419. package/packages/host/dist/plugins/pluginregistry.js.map +1 -1
  420. package/packages/host/dist/plugins/plugintoolkit/sessionof.d.ts +47 -0
  421. package/packages/host/dist/plugins/plugintoolkit/sessionof.js +136 -0
  422. package/packages/host/dist/plugins/plugintoolkit/sessionof.js.map +1 -0
  423. package/packages/host/dist/prmergestore.d.ts +31 -0
  424. package/packages/host/dist/prmergestore.js +106 -0
  425. package/packages/host/dist/prmergestore.js.map +1 -0
  426. package/packages/host/dist/protectmain.d.ts +35 -0
  427. package/packages/host/dist/protectmain.js +73 -0
  428. package/packages/host/dist/protectmain.js.map +1 -0
  429. package/packages/host/dist/prpush.d.ts +38 -0
  430. package/packages/host/dist/prpush.js +351 -0
  431. package/packages/host/dist/prpush.js.map +1 -0
  432. package/packages/host/dist/prs.d.ts +118 -0
  433. package/packages/host/dist/prs.js +681 -0
  434. package/packages/host/dist/prs.js.map +1 -0
  435. package/packages/host/dist/push.d.ts +85 -1
  436. package/packages/host/dist/push.js +238 -8
  437. package/packages/host/dist/push.js.map +1 -1
  438. package/packages/host/dist/pushlanded.d.ts +29 -0
  439. package/packages/host/dist/pushlanded.js +61 -0
  440. package/packages/host/dist/pushlanded.js.map +1 -0
  441. package/packages/host/dist/pushreach.d.ts +9 -0
  442. package/packages/host/dist/pushreach.js +102 -0
  443. package/packages/host/dist/pushreach.js.map +1 -0
  444. package/packages/host/dist/pushverdict.d.ts +42 -0
  445. package/packages/host/dist/pushverdict.js +110 -0
  446. package/packages/host/dist/pushverdict.js.map +1 -0
  447. package/packages/host/dist/render.d.ts +57 -0
  448. package/packages/host/dist/render.js +57 -39
  449. package/packages/host/dist/render.js.map +1 -1
  450. package/packages/host/dist/repohealth.js +5 -2
  451. package/packages/host/dist/repohealth.js.map +1 -1
  452. package/packages/host/dist/repohealthapproval.d.ts +3 -0
  453. package/packages/host/dist/repohealthapproval.js +92 -2
  454. package/packages/host/dist/repohealthapproval.js.map +1 -1
  455. package/packages/host/dist/repos.d.ts +7 -1
  456. package/packages/host/dist/repos.js +30 -3
  457. package/packages/host/dist/repos.js.map +1 -1
  458. package/packages/host/dist/reposkill.d.ts +8 -5
  459. package/packages/host/dist/reposkill.js +16 -11
  460. package/packages/host/dist/reposkill.js.map +1 -1
  461. package/packages/host/dist/reposkilltext.d.ts +8 -1
  462. package/packages/host/dist/reposkilltext.js +85 -12
  463. package/packages/host/dist/reposkilltext.js.map +1 -1
  464. package/packages/host/dist/routes/apigitspend.d.ts +2 -0
  465. package/packages/host/dist/routes/apigitspend.js +40 -0
  466. package/packages/host/dist/routes/apigitspend.js.map +1 -0
  467. package/packages/host/dist/routes/apihost.js +17 -0
  468. package/packages/host/dist/routes/apihost.js.map +1 -1
  469. package/packages/host/dist/routes/apiprs.d.ts +2 -0
  470. package/packages/host/dist/routes/apiprs.js +47 -0
  471. package/packages/host/dist/routes/apiprs.js.map +1 -0
  472. package/packages/host/dist/routes/apirepofiles.js +13 -1
  473. package/packages/host/dist/routes/apirepofiles.js.map +1 -1
  474. package/packages/host/dist/routes/apirepowork.d.ts +6 -0
  475. package/packages/host/dist/routes/apirepowork.js +42 -33
  476. package/packages/host/dist/routes/apirepowork.js.map +1 -1
  477. package/packages/host/dist/routes/apiroutes.js +2 -1
  478. package/packages/host/dist/routes/apiroutes.js.map +1 -1
  479. package/packages/host/dist/routes/apisession.js +24 -0
  480. package/packages/host/dist/routes/apisession.js.map +1 -1
  481. package/packages/host/dist/routes/apistats.js +12 -7
  482. package/packages/host/dist/routes/apistats.js.map +1 -1
  483. package/packages/host/dist/routes/apisystem.js +23 -1
  484. package/packages/host/dist/routes/apisystem.js.map +1 -1
  485. package/packages/host/dist/routes/apitable.d.ts +10 -0
  486. package/packages/host/dist/routes/apitable.js.map +1 -1
  487. package/packages/host/dist/routes/apiweekburn.d.ts +2 -0
  488. package/packages/host/dist/routes/apiweekburn.js +30 -0
  489. package/packages/host/dist/routes/apiweekburn.js.map +1 -0
  490. package/packages/host/dist/routes/session.js +10 -0
  491. package/packages/host/dist/routes/session.js.map +1 -1
  492. package/packages/host/dist/routes/system.js +34 -6
  493. package/packages/host/dist/routes/system.js.map +1 -1
  494. package/packages/host/dist/routes/types.d.ts +29 -21
  495. package/packages/host/dist/routes/work/workbuild.js +3 -2
  496. package/packages/host/dist/routes/work/workbuild.js.map +1 -1
  497. package/packages/host/dist/routes/work/workintent.js +6 -2
  498. package/packages/host/dist/routes/work/workintent.js.map +1 -1
  499. package/packages/host/dist/routes/work/workschedule.js +33 -3
  500. package/packages/host/dist/routes/work/workschedule.js.map +1 -1
  501. package/packages/host/dist/screenlog.d.ts +20 -0
  502. package/packages/host/dist/screenlog.js +40 -0
  503. package/packages/host/dist/screenlog.js.map +1 -1
  504. package/packages/host/dist/server/billingwire.d.ts +3 -1
  505. package/packages/host/dist/server/billingwire.js +4 -2
  506. package/packages/host/dist/server/billingwire.js.map +1 -1
  507. package/packages/host/dist/server/clients.d.ts +14 -24
  508. package/packages/host/dist/server/clients.js +81 -11
  509. package/packages/host/dist/server/clients.js.map +1 -1
  510. package/packages/host/dist/server/ctx.d.ts +2 -0
  511. package/packages/host/dist/server/ctxseal.d.ts +1 -1
  512. package/packages/host/dist/server/ctxseal.js +6 -6
  513. package/packages/host/dist/server/ctxseal.js.map +1 -1
  514. package/packages/host/dist/server/deliveries.js +4 -2
  515. package/packages/host/dist/server/deliveries.js.map +1 -1
  516. package/packages/host/dist/server/http.js +2 -2
  517. package/packages/host/dist/server/http.js.map +1 -1
  518. package/packages/host/dist/server/intentDeps.js +13 -6
  519. package/packages/host/dist/server/intentDeps.js.map +1 -1
  520. package/packages/host/dist/server/intentEvents.js +9 -4
  521. package/packages/host/dist/server/intentEvents.js.map +1 -1
  522. package/packages/host/dist/server/scan.js +23 -1
  523. package/packages/host/dist/server/scan.js.map +1 -1
  524. package/packages/host/dist/server/sessionEvents.js +40 -15
  525. package/packages/host/dist/server/sessionEvents.js.map +1 -1
  526. package/packages/host/dist/server/shutdown.d.ts +3 -1
  527. package/packages/host/dist/server/shutdown.js +9 -1
  528. package/packages/host/dist/server/shutdown.js.map +1 -1
  529. package/packages/host/dist/sessionbudget.d.ts +2 -0
  530. package/packages/host/dist/sessionbudget.js +17 -6
  531. package/packages/host/dist/sessionbudget.js.map +1 -1
  532. package/packages/host/dist/sessions/agentpoll.d.ts +42 -0
  533. package/packages/host/dist/sessions/agentpoll.js +193 -0
  534. package/packages/host/dist/sessions/agentpoll.js.map +1 -0
  535. package/packages/host/dist/sessions/apiretry.d.ts +106 -0
  536. package/packages/host/dist/sessions/apiretry.js +387 -0
  537. package/packages/host/dist/sessions/apiretry.js.map +1 -0
  538. package/packages/host/dist/sessions/askwatch.d.ts +62 -0
  539. package/packages/host/dist/sessions/askwatch.js +169 -0
  540. package/packages/host/dist/sessions/askwatch.js.map +1 -0
  541. package/packages/host/dist/sessions/boxes.d.ts +2 -23
  542. package/packages/host/dist/sessions/boxes.js +10 -664
  543. package/packages/host/dist/sessions/boxes.js.map +1 -1
  544. package/packages/host/dist/sessions/boxread.d.ts +47 -0
  545. package/packages/host/dist/sessions/boxread.js +628 -0
  546. package/packages/host/dist/sessions/boxread.js.map +1 -0
  547. package/packages/host/dist/sessions/core.d.ts +22 -1
  548. package/packages/host/dist/sessions/ctxseries.js +3 -0
  549. package/packages/host/dist/sessions/ctxseries.js.map +1 -1
  550. package/packages/host/dist/sessions/drive.d.ts +20 -6
  551. package/packages/host/dist/sessions/drive.js +45 -12
  552. package/packages/host/dist/sessions/drive.js.map +1 -1
  553. package/packages/host/dist/sessions/endsession.d.ts +11 -0
  554. package/packages/host/dist/sessions/endsession.js +71 -0
  555. package/packages/host/dist/sessions/endsession.js.map +1 -0
  556. package/packages/host/dist/sessions/haltall.d.ts +14 -0
  557. package/packages/host/dist/sessions/haltall.js +32 -1
  558. package/packages/host/dist/sessions/haltall.js.map +1 -1
  559. package/packages/host/dist/sessions/knobs.d.ts +11 -0
  560. package/packages/host/dist/sessions/knobs.js +12 -0
  561. package/packages/host/dist/sessions/knobs.js.map +1 -1
  562. package/packages/host/dist/sessions/record.js +7 -2
  563. package/packages/host/dist/sessions/record.js.map +1 -1
  564. package/packages/host/dist/sessions/resume.d.ts +17 -0
  565. package/packages/host/dist/sessions/resume.js +65 -11
  566. package/packages/host/dist/sessions/resume.js.map +1 -1
  567. package/packages/host/dist/sessions/roster.js +3 -0
  568. package/packages/host/dist/sessions/roster.js.map +1 -1
  569. package/packages/host/dist/sessions/sidechannel.d.ts +1 -1
  570. package/packages/host/dist/sessions/sidechannel.js +2 -2
  571. package/packages/host/dist/sessions/tmux.js +21 -2
  572. package/packages/host/dist/sessions/tmux.js.map +1 -1
  573. package/packages/host/dist/sessions/turn.d.ts +15 -58
  574. package/packages/host/dist/sessions/turn.js +19 -358
  575. package/packages/host/dist/sessions/turn.js.map +1 -1
  576. package/packages/host/dist/sessions.d.ts +10 -7
  577. package/packages/host/dist/sessions.js +31 -79
  578. package/packages/host/dist/sessions.js.map +1 -1
  579. package/packages/host/dist/settle.d.ts +30 -2
  580. package/packages/host/dist/settle.js +94 -49
  581. package/packages/host/dist/settle.js.map +1 -1
  582. package/packages/host/dist/setupprefs.d.ts +26 -1
  583. package/packages/host/dist/setupprefs.js +49 -1
  584. package/packages/host/dist/setupprefs.js.map +1 -1
  585. package/packages/host/dist/setupwatch.d.ts +10 -8
  586. package/packages/host/dist/setupwatch.js +19 -16
  587. package/packages/host/dist/setupwatch.js.map +1 -1
  588. package/packages/host/dist/sidecar/sidecarname.d.ts +2 -0
  589. package/packages/host/dist/sidecar/sidecarname.js +5 -1
  590. package/packages/host/dist/sidecar/sidecarname.js.map +1 -1
  591. package/packages/host/dist/sidecar/sidecarroute.d.ts +1 -1
  592. package/packages/host/dist/sidecar/sidecarroute.js +5 -0
  593. package/packages/host/dist/sidecar/sidecarroute.js.map +1 -1
  594. package/packages/host/dist/sidecar.d.ts +1 -1
  595. package/packages/host/dist/sidecar.js +1 -1
  596. package/packages/host/dist/sidecar.js.map +1 -1
  597. package/packages/host/dist/tokenscan.d.ts +4 -4
  598. package/packages/host/dist/tokenscan.js +18 -37
  599. package/packages/host/dist/tokenscan.js.map +1 -1
  600. package/packages/host/dist/tokenstats.js +16 -18
  601. package/packages/host/dist/tokenstats.js.map +1 -1
  602. package/packages/host/dist/transcript/transcriptparse.js +17 -26
  603. package/packages/host/dist/transcript/transcriptparse.js.map +1 -1
  604. package/packages/host/dist/transcript/transcriptturns.d.ts +29 -0
  605. package/packages/host/dist/transcript/transcriptturns.js +27 -0
  606. package/packages/host/dist/transcript/transcriptturns.js.map +1 -1
  607. package/packages/host/dist/transcript.d.ts +1 -1
  608. package/packages/host/dist/transcript.js +1 -1
  609. package/packages/host/dist/transcript.js.map +1 -1
  610. package/packages/host/dist/usagesources.d.ts +1 -1
  611. package/packages/host/dist/usagesources.js +7 -2
  612. package/packages/host/dist/usagesources.js.map +1 -1
  613. package/packages/host/dist/visualskill.js +2 -2
  614. package/packages/host/dist/weekburn.d.ts +79 -0
  615. package/packages/host/dist/weekburn.js +276 -0
  616. package/packages/host/dist/weekburn.js.map +1 -0
  617. package/packages/host/dist/worktreeleftover.d.ts +9 -0
  618. package/packages/host/dist/worktreeleftover.js +17 -1
  619. package/packages/host/dist/worktreeleftover.js.map +1 -1
  620. package/packages/web/dist/assets/demo-DsZGy-MC.js +24 -0
  621. package/packages/web/dist/assets/icons-eqlvjswV.js +1 -0
  622. package/packages/web/dist/assets/index-GHwJuQb3.js +169 -0
  623. package/packages/web/dist/assets/index-VzDSZwwH.css +1 -0
  624. package/packages/web/dist/assets/shared-BWk5jXWb.js +49 -0
  625. package/packages/web/dist/assets/sheets-Dj-0m0DB.js +232 -0
  626. package/packages/web/dist/assets/{sheets-Bjv2L-cG.css → sheets-DoUhPGK0.css} +1 -1
  627. package/packages/web/dist/build-id.txt +1 -1
  628. package/packages/web/dist/buildstamp.json +1 -0
  629. package/packages/web/dist/index.html +7 -7
  630. package/packages/web/dist/sw.js +18 -3
  631. package/release.json +7 -4
  632. package/scripts/windows/wsl-setup.sh +10 -1
  633. package/tools/repohealth/constants.mjs +21 -1
  634. package/tools/repohealth/fixture.json +493 -30
  635. package/tools/repohealth/lang/typescript-resolve.mjs +354 -0
  636. package/tools/repohealth/metrics/graph.mjs +258 -0
  637. package/tools/repohealth/metrics/size.mjs +1 -1
  638. package/tools/repohealth/own.mjs +4 -4
  639. package/tools/repohealth/packs/c.mjs +4 -0
  640. package/tools/repohealth/packs/common.mjs +4 -0
  641. package/tools/repohealth/packs/dart.mjs +4 -0
  642. package/tools/repohealth/packs/kotlin.mjs +8 -0
  643. package/tools/repohealth/packs/python.mjs +8 -0
  644. package/tools/repohealth/packs/shell.mjs +4 -0
  645. package/tools/repohealth/packs/typescript.mjs +278 -7
  646. package/tools/repohealth/readings.mjs +39 -0
  647. package/tools/repohealth/series.mjs +1 -0
  648. package/tools/repohealth/snapshot.mjs +14 -0
  649. package/tools/repohealth/types.mjs +12 -0
  650. package/tools/repohealth.mjs +2 -0
  651. package/packages/web/dist/assets/demo-CXlqlYE4.js +0 -23
  652. package/packages/web/dist/assets/icons-BbqDBVjw.js +0 -1
  653. package/packages/web/dist/assets/index-CgPoyb3Y.css +0 -1
  654. package/packages/web/dist/assets/index-D5JKj8DK.js +0 -169
  655. package/packages/web/dist/assets/shared-eyaskl5l.js +0 -47
  656. package/packages/web/dist/assets/sheets-BzzL2re1.js +0 -204
package/CHANGELOG.md CHANGED
@@ -1,7 +1,152 @@
1
1
  # Changelog
2
2
 
3
3
  Notable changes. This project has no release branches — `main` is the supported
4
- version — so entries are grouped by the release they shipped in.
4
+ version — so entries are grouped by the release they shipped in. A fixed security
5
+ vulnerability in what ships is listed under a **Security:** bullet of the release that
6
+ fixed it, with its CVE or GHSA id when one exists.
7
+
8
+ ## 0.1.14
9
+
10
+ 0.1.13 and 0.1.12 were tagged but never released; their changes ship here.
11
+
12
+ ### New
13
+
14
+ - **Token stats step back through earlier weeks.** The weekly limit chart has older and newer arrows at its two edges, over the desktop's 30 days of kept usage. A past week shows no rate or projection, and the running window's figure hides while you look back.
15
+ - **Repo health reads the import graph.** Two new series: the files caught in import cycles (the largest cycles listed with their members) and imports per file at the 95th percentile, with the file that imports most. TypeScript `paths`, `baseUrl` and workspace packages are resolved, so a missed edge does not hide a cycle; an import inside a comment or a string is not an edge, and a file whose imports cannot be read makes the reading absent rather than smaller.
16
+
17
+ ### Fixed
18
+
19
+ - A push that lost a race to another push of the same commit says it landed, instead of showing a failure for work that is on the remote, and leaves git's tracking branch and upstream as a successful push would. A remote that moved to anyone else's commit, or one that does not answer the check in time, is still a refusal.
20
+ - The context badge no longer reads a meter figure that the conversation itself shows, such as a quoted line, a diff row or a tool result.
21
+ - The always-on overhead is read from the session's first request even when that request names no model; it is absent rather than a bigger, later figure.
22
+
23
+ ## 0.1.13
24
+
25
+ 0.1.12 was tagged but never released; its changes ship here.
26
+
27
+ ### New
28
+
29
+ - **A PR-mode push is safer and says what it did.** In a repo that takes changes only through a pull request, the push goes to its own `wp/` branch and never to the default branch, which is read from GitHub. Main moves back only if nothing was committed after the push; a commit that landed late is named by its sha. A retry after a failed PR open reuses the branch already pushed, and an unknown default branch is refused in words instead of pushing plain.
30
+ - **Merge when green keeps your choice, and the desktop tidies after the merge.** The pull request card merges by the method you picked, or lets the desktop choose if you picked none. A merge you asked for survives a desktop restart, and once GitHub says it is merged the desktop tidies the checkout once. You get one notice with the receipt, and something is filed for you only when part of the tidy needs a person.
31
+ - **A failed push names its branch and opens on itself.** The git view and What's new say which branch failed. A tapped push notification opens that failure, and a push clears only its own branch's failure, once git shows the commit on the remote. A repeated network error is one log line an hour, and a notification too large for the push service is cut to fit and resent smaller.
32
+ - **The git view opens on the right repo, and Back keeps it.** The toolbar's diff and untracked count open the session's repo. A reload or an update restart lands on the repo you had open, and the branch list shows the current branch's upstream (a branch whose upstream is gone shows none).
33
+ - **A build sheet shows its own run.** Starting a build selects its run, and a refused or dismissed start says so with the desktop's reason instead of reading *Starting* for ever. A run that left the list opens nothing and says why.
34
+ - **Budget caps follow the backend you switch to.** A cap the new backend cannot carry is set aside, not deleted, says what it was, and comes back when you switch back. Editing the field discards a set-aside cap.
35
+ - **Native-unit amounts read right.** A small positive amount in a backend's own unit prints as *<0.1* and never as 0.
36
+ - **Pausing a schedule is its own switch.** A paused rule stays paused when you edit it or give it a new time, and an older desktop's paused rule is read as paused.
37
+ - **Backlog and queue sheets keep your place.** The backlog cut you were on is the one Back returns to, every in-session door opens it on the session's repo, and a repo you opened it from stays in the cut. The send queue's sentences read right in singular and plural, and a failed send tells *not submitted* from *not confirmed*.
38
+
39
+ ### Fixed
40
+
41
+ - **Token stats no longer print a span they cannot stand behind.** When some records carry no date, claude's ledger says how many it could not place. A calendar span, the trend or a budget over that range says why it refuses, one past-window box refuses without blanking the others, and the undated count reads the same on every screen.
42
+ - The week boundary, daily averages and hourly charts keep the right days across a daylight-saving change, including the repeated hour in autumn.
43
+ - A launcher whose repo list is still loading says it is waiting, instead of *No repos under host root*, and the git view on a host with no repos no longer waits for ever.
44
+ - The setup checks run in the background when a session opens, and an older check never replaces a fresher result.
45
+ - A screen you leave (gallery viewer, token-stats history, diff sides, scrollback, found desktops, leftover worktrees) now cancels its request on the desktop instead of letting it finish unwanted.
46
+ - A backlog row, build, fan-out, health-index or budget state this phone does not recognise is shown as a sentence instead of breaking the sheet.
47
+ - Leaving a session returns to a launcher sheet only when it comes back whole, and an exited session clears its agents and shells.
48
+ - The Docker entrypoint and the WSL setup check the Claude installer script against a pinned sha256 before running it.
49
+
50
+ ## 0.1.12
51
+
52
+ ### New
53
+
54
+ - **Two repos with the same folder name are told apart.** When the desktop finds two clones that share a folder name, everywhere you pick or read a repo (the launcher, the repo picker, the send and schedule sheets, Activity, the week-end burn) names each with the shortest part of its path that differs, e.g. *ciqkit · garmin/* and *ciqkit · out-ciqkit/*. The launcher lists them as two groups instead of merging them into one.
55
+ - **The week-end burn and a repo's backlog link both ways.** A row the burn wrote says *from the week-end burn* and opens the burn. The repo's backlog says what the burn is doing there, counts its rows (the count opens exactly those) and opens the burn sheet. Each repo in the burn sheet opens its backlog on the burn's rows.
56
+ - **The week-end burn says how it works, and you write its prompt.** Numbered steps say when sessions start, what each is told, and when it stops. You can replace the default task, add a line per repo, and see the exact prompt each repo's sessions get before anything runs. The safety rules (one change, tests, commit, never push) are always added.
57
+ - **A turn out of network retries is stalled, not failed.** It stays running with *retry now* and the retry switch on its row, the desktop probes every 30 minutes, and work queued behind it says why it waits. The desktop now listens for the CLI's `StopFailure`, since an API error never sends `Stop`.
58
+ - **The git view's *explain* runs on the desktop.** Leaving the screen no longer loses the brief: a notification says when it is ready, and reopening shows the running job or the last answer.
59
+ - **A button that files a backlog row opens the backlog on that row.**
60
+ - **Plugin API 2.4:** `api.sessionOf` says which live session a requesting process belongs to.
61
+
62
+ ## 0.1.11
63
+
64
+ The first public release since 0.1.6. 0.1.10 was tagged but never released; its changes, and those of 0.1.7 to 0.1.9, ship here.
65
+
66
+ ### New
67
+
68
+ - **The backlog lists the newest rows first.** A sort switch above the list picks *newest first* (the default) or *run order*, and the phone remembers the choice. The number on each row is still its place in the run order. Dragging and the move arrows appear only in run order, and the *on a clock* filter always shows run order.
69
+ - **Repos that take changes only through a pull request.** The desktop reads each repo's own branch rules on GitHub. Where they require a pull request, the git view's push becomes *Push & open PR*: your commits go to a `wp/` branch with a PR, and main moves back. Open PRs show above the history with merge, auto-merge, close and the failing check's log, and a PR's checks notify you. A repo without such rules pushes as before, and the desktop never calls GitHub for it.
70
+ - **A turn the CLI gave up on a network error is retried.** When claude ends a turn on a transient API error (no connection, DNS, 5xx, overloaded), the desktop types `continue` again on a widening ladder (20 s up to 10 min) and shows the countdown with *turn off*. Settings › Sessions › *retry on network errors* (on by default).
71
+ - **Re-check on the watch runs the exposure watch.** On Repo readings › watch, *re-check* now runs the watch for that repo on the desktop and says what it found, instead of re-reading the last daily run.
72
+ - **Other backends beside your spend.** Where the month and week went also lists every other backend over the same span in its own unit, never summed with claude's; a budget can be set in a backend's own unit. An opencode turn shows its subagents' tokens and cost, and an opencode session stopped at a dated limit is reopened at the reset.
73
+ - **Trend proposals ask first.** *Assess and propose improvements* lists its proposals and posts only the ones you pick as backlog rows.
74
+
75
+ ### Fixes
76
+
77
+ - **Security:** CodeQL fixes: complete regex escaping in the VS Code extension's git reader and the release tooling, and a backslash escaped before a pipe in generated tables. No shipped path was exploitable.
78
+ - The phone no longer sits on "connecting" when a WebSocket handshake never completes: each dial has a timeout and dials again.
79
+ - Back from a session started from a backlog cut returns to that cut, not the bare launcher.
80
+ - A backlog row called off (by you, an assessment or its own agent) reads *withdrawn* or *called off*, not *failed*, and offers no action the desktop would refuse.
81
+ - The git view: a running pull or push hides the stored failure, and *done* says what it clears.
82
+ - A long build failure scrolls inside the build sheet instead of pushing *done* off screen; a failed build reads *failed* beside the hammer.
83
+ - The Scorecard sheet's refresh says whether Scorecard has a newer scan, and the date is the scan's.
84
+ - VS Code extension (0.8.0): the tree highlights the session only while the panel shows one.
85
+
86
+ ## 0.1.10
87
+
88
+ Tagged but never released; it ships in 0.1.11.
89
+
90
+ ### New
91
+
92
+ - **A `! cmd` line in the reader opens the session's shell.** A code span or shell fence starting with `!` gets a shell button: it opens the session's companion shell and puts the command there, on its own line, without running it. With no shell on the desktop it copies the command instead.
93
+ - **Mark a crash or finding.** Exposure findings carry a mark — seen, investigating, or fixed in a version — set from the phone or by an agent; a crash fixed in a version that comes back there or later alerts as a regression.
94
+ - **Which build is running.** The app-update screen names the shell and the web bundle builds, and each build entry's row says which build it last produced. The VS Code extension (0.8.0) shows the same line.
95
+ - **Capture: set up with AI.** The capture sheet can seed a new session that writes and verifies the capture targets.
96
+
97
+ ### Fixes
98
+
99
+ - **Security:** the installer pins Node 24.22.1, the 2026-10-20 security release.
100
+ - A session's agent reaches its own desktop's API (`$WATERPLANE_API`), not whichever host wrote the shared plugin file last.
101
+ - The VS Code build entry's *install latest* installs the vsix it just packaged.
102
+ - A document tile in the new-files strip shows its name and folder.
103
+
104
+ ## 0.1.9
105
+
106
+ ### Breaking
107
+
108
+ - **Node 22.12 or newer.** Node 20 reached end of life on 2026-04-30; the host, the doctor and `engines` now refuse anything older than 22.12. The release installer already pins a current Node.
109
+
110
+ ### New
111
+
112
+ - **What's new.** One place that opens every new thing, with its state.
113
+ - **What every turn carries.** The context sheet, Repo readings and token stats show the always-on part of each request — CLAUDE.md, skills, subagents, MCP servers and this desktop's files — measured on a session's first request and drawn as a strip, with doors between the three views. The VS Code extension (0.7.0) draws the same views.
114
+ - **Exposure watch.** A daily, model-free reading of a repo's dependencies, runtimes, settings and store listings. Findings show as Repo readings rows you can accept with a reason, a new finding pushes once, and an unprotected default branch can be fixed with one tap. An optional OpenSSF Scorecard reading sits beside it, scored locally for private repos.
115
+ - **Offline terminals.** Every session's terminal screen is cached for offline, not only the one you had open, and the offline card points at the cached transcript.
116
+ - **Git Explain.** The desktop explains what a push sends and what a pull brings. It says it is an AI call, and what it cost.
117
+ - **A push a branch rule refused says so in words**, with the remote's rules and a link to their page. A failed push clears once its commits are upstream, however they got there.
118
+ - **Tabs list from anywhere.** Ctrl+E opens it, with type-to-filter and arrow/Return navigation, even with the tab strip switched off.
119
+ - A build rule's card opens its last run. The menu's activity badge counts desktop rows that wait on a person, and Activity lands on what is open.
120
+
121
+ ### Fixes
122
+
123
+ - **Security:** the iOS shell pins Capacitor 8.5.2 (GHSA-rvm3-566m-v7fv). The Android APK already shipped with the fix in 0.1.8.
124
+ - **Security:** the VS Code extension's publish tooling resolves `@azure/msal-node` 7.1.0 (GHSA-xcx6-jx8p-x3h5). It was never part of the shipped extension.
125
+ - Filters and bulk actions sit above their lists: backlog, commit form, sweep, Week-end burn.
126
+ - Week-end burn (was *This week's burn*): the sheet scrolls, has one start line, hides agent worktrees unless picked and tells twin clone names apart by path.
127
+ - New settings are findable: *Push information too*, Automation and the Downloads switches.
128
+
129
+ ## 0.1.8
130
+
131
+ 0.1.7 was tagged but never released; its changes ship here.
132
+
133
+ ### New
134
+
135
+ - **Notifications split into *needs you* and *information*.** Only what needs you counts on the bell and buzzes the phone; a tap on the bell opens exactly those, and each one has *done*. Information stays readable in the feed and is pushed only when Settings › Notifications › *Push information too* is on. What needs you is the same on every device and survives a desktop restart.
136
+ - **Failed pulls, pushes and builds show on the repo.** A git pull or push the desktop ran that failed raises *Push failed · repo* and a red *push failed* / *pull failed* / *build failed* chip on that repo's buttons; the git view and build sheet show the stored failure until it is fixed or marked done.
137
+ - **A schedule can run a build.** *Run on a clock…* in a build entry's editor sets when it runs; the entry then shows its clock (*every weekday 07:00 · next in 3h*). The Schedules sheet is now **Automation**, and its foot lists what runs on its own without a clock.
138
+ - **Downloads are kept once.** A file saved to the phone's Downloads no longer keeps a second copy inside the app (a per-phone switch, on by default). APKs still install from the Downloads copy. Needs this release's APK.
139
+ - **This week's burn.** Settings → Sessions → *This week's burn* lets you pick repos to spend leftover weekly budget on before the reset: a stop line, a start time, and one backlog row per picked repo. Picking is the approval — nothing starts on its own, and *Same as last week* is one tap. A once-a-week nudge says when you are on pace to leave budget unused.
140
+ - **Every notification tap lands somewhere.** An alert with no session or file behind it used to open the bare launcher; now it opens the screen it is about (a health move opens that repo's health chart, a burn alert opens token stats), or its own row in the feed. Needs this release's APK.
141
+
142
+ ### Fixes
143
+
144
+ - **Sends no longer stick at "the desktop hasn't answered yet".** After the phone's keyboard had opened and closed a few times, the desktop could misread an empty input box as holding text (`──⏵⏵ auto mode on …`) and refuse every send to that session, retrying forever. It now reads the screen at the pane's real size. Affected every release since 0.1.0.
145
+ - A prompt claude is holding in its own queue is no longer reported as lost.
146
+ - The composer's backlog button counts waiting and failed rows as two numbers, and a tap opens exactly those rows.
147
+ - The fan-out prompt has a clear button (two taps, with *put it back* until you type).
148
+ - The LAN address chips skip VM bridges and tunnels.
149
+ - Combined screenshots keep each panel at the chosen upload width, instead of the whole collage, so four phone screens side by side stay readable.
5
150
 
6
151
  ## 0.1.6
7
152
 
package/README.md CHANGED
@@ -12,9 +12,9 @@ customized: a plugin adds the button, switch or status line your way of working
12
12
  [How it compares](#how-it-compares) · [Security](SECURITY.md) · [Open source (MIT)](LICENSE) ·
13
13
  macOS, Linux, Windows via WSL2 · Android app or web app, no iOS app yet
14
14
 
15
- <a href="https://waterplane-dev.github.io/media/first-look-01e0e72583.mp4"><img src="docs/media/first-look.gif" width="270" alt="A session starts from the phone; Claude Code on the desktop builds the app and screenshots it in the iOS simulator and the Android emulator; the two screenshots are combined, the clipped Android button circled and sent back; Claude fixes it, re-checks both, and the debug APK arrives as a download for the real phone"></a>
15
+ <a href="https://waterplane-dev.github.io/media/first-look-9e3dc02a21.mp4"><img src="docs/media/first-look.gif" width="270" alt="A session starts from the phone; Claude Code on the desktop builds the app and screenshots it in the iOS simulator and the Android emulator; the two screenshots are combined, the clipped Android button circled and sent back; Claude fixes it, re-checks both, and the debug APK arrives as a download for the real phone"></a>
16
16
 
17
- *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/first-look-01e0e72583.mp4), with pause and seek.*
17
+ *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/first-look-9e3dc02a21.mp4), with pause and seek.*
18
18
  <!-- /site:intro -->
19
19
 
20
20
  - **The real CLI, not a re-implementation.** Every slash command, plan and trust prompt and the
@@ -35,9 +35,9 @@ elsewhere: the Mac Studio builds and runs the simulators while the notebook only
35
35
  The window gets a sidebar of repos, the session in the middle and a panel beside it, and it is
36
36
  the same sessions, queue and costs, so what you left on the laptop is waiting on the phone.
37
37
 
38
- <a href="https://waterplane-dev.github.io/media/desktop-179819b225.mp4"><img src="docs/media/desktop.gif" width="720" alt="The same app in a laptop's browser: repos in a sidebar, todo-garden's session started in the main pane, the prompt sent with Cmd+Return, Claude Code builds and checks the iOS simulator and the Android emulator, and the gallery opens as a panel beside the session with both screenshots"></a>
38
+ <a href="https://waterplane-dev.github.io/media/desktop-7af0b11f01.mp4"><img src="docs/media/desktop.gif" width="720" alt="The same app in a laptop's browser: repos in a sidebar, todo-garden's session started in the main pane, the prompt sent with Cmd+Return, Claude Code builds and checks the iOS simulator and the Android emulator, and the gallery opens as a panel beside the session with both screenshots"></a>
39
39
 
40
- *A short loop. [The whole film as a video](https://waterplane-dev.github.io/media/desktop-179819b225.mp4).*
40
+ *A short loop. [The whole film as a video](https://waterplane-dev.github.io/media/desktop-7af0b11f01.mp4).*
41
41
 
42
42
  Desktops can also work for each other. Pair two of them and an agent on one can hand a job to the
43
43
  other (run the Windows build, the tests on the bigger machine): the branch travels through your
@@ -120,7 +120,8 @@ You need:
120
120
  (`curl -fsSL https://claude.ai/install.sh | bash`, or `npm install -g @anthropic-ai/claude-code`),
121
121
  and something for it to run on: a **paid Claude plan** (Pro, Max, Team) or an **Anthropic API
122
122
  key** — run `claude` once and sign in — or, with no account, a **local model through Ollama**.
123
- GitHub Copilot works too, as a plugin (`install.sh --with copilot`).
123
+ GitHub Copilot works too, as a [plugin](https://github.com/waterplane-dev/waterplane-plugin-copilot)
124
+ (`install.sh --with copilot`).
124
125
  - **A way for the phone to reach the desktop.** Recommended: **[Tailscale](https://tailscale.com)**
125
126
  on both, on the same tailnet. It works from anywhere, its device sign-in is the gate, and its HTTPS
126
127
  gives the phone push, install and clipboard. From the same Wi-Fi or over a VPN of your own, a
@@ -134,7 +135,7 @@ The installer (macOS, Linux, WSL2) brings its own pinned Node, verifies checksum
134
135
  curl -fsSL https://github.com/waterplane-dev/waterplane/releases/latest/download/install.sh | sh
135
136
  ```
136
137
 
137
- Or from source, which also needs **Node ≥ 20.12** and **tmux 3.3+** (every session runs inside it,
138
+ Or from source, which also needs **Node ≥ 22.12** and **tmux 3.3+** (every session runs inside it,
138
139
  so it survives a host restart; the installer handles both). The doctor builds what it checks, so it
139
140
  runs before the build:
140
141
 
@@ -147,9 +148,9 @@ npm run build
147
148
  npm start
148
149
  ```
149
150
 
150
- <a href="https://waterplane-dev.github.io/media/setup-7fd327bf01.mp4"><img src="docs/media/setup.gif" width="270" alt="The desktop builds and starts the host; on the phone the app lists the repo, + now starts claude in it, and its trust question is answered with a tap"></a>
151
+ <a href="https://waterplane-dev.github.io/media/setup-30becef6cf.mp4"><img src="docs/media/setup.gif" width="270" alt="The desktop builds and starts the host; on the phone the app lists the repo, + now starts claude in it, and its trust question is answered with a tap"></a>
151
152
 
152
- *From `npm run build` on the desktop to claude running in your repo on the phone. [The whole setup as a video](https://waterplane-dev.github.io/media/setup-7fd327bf01.mp4), with pause and seek.*
153
+ *From `npm run build` on the desktop to claude running in your repo on the phone. [The whole setup as a video](https://waterplane-dev.github.io/media/setup-30becef6cf.mp4), with pause and seek.*
153
154
 
154
155
  `npm run doctor` (or `waterplane doctor`) is the first thing to re-run when something misbehaves:
155
156
  it names what is wrong and what to type. The host lists the git repos under `~/dev` (or
@@ -173,9 +174,9 @@ updating and every environment variable: [docs/install.md](docs/install.md).
173
174
  <!-- site:outbox -->
174
175
  ### What Claude made, on your phone
175
176
 
176
- <a href="https://waterplane-dev.github.io/media/gallery-and-files-9f1edea03e.mp4"><img src="docs/media/gallery-and-files.png" width="270" alt="The gallery lists what Claude left in the outbox: a markdown file, a live HTML page and a screenshot open on the phone"></a>
177
+ <a href="https://waterplane-dev.github.io/media/gallery-and-files-6250099dbb.mp4"><img src="docs/media/gallery-and-files.png" width="270" alt="The gallery lists what Claude left in the outbox: a markdown file, a live HTML page and a screenshot open on the phone"></a>
177
178
 
178
- *[The walkthrough as a video](https://waterplane-dev.github.io/media/gallery-and-files-9f1edea03e.mp4).*
179
+ *[The walkthrough as a video](https://waterplane-dev.github.io/media/gallery-and-files-6250099dbb.mp4).*
179
180
 
180
181
  What Claude leaves in `.claude/outbox/` appears on the phone as a picture or a file, with a badge on
181
182
  the repo and a notification. Open it full size, draw a circle or a box on it, type what to change,
@@ -186,9 +187,9 @@ of text to point Claude at it.
186
187
  <!-- site:limit -->
187
188
  ### When the usage limit hits, it carries on
188
189
 
189
- <a href="https://waterplane-dev.github.io/media/limit-and-budget-d61307c1a1.mp4"><img src="docs/media/limit-and-budget.gif" width="270" alt="Claude stops at the 5-hour usage wall; at the reset waterplane types continue and the turn finishes"></a>
190
+ <a href="https://waterplane-dev.github.io/media/limit-and-budget-49f91fd711.mp4"><img src="docs/media/limit-and-budget.gif" width="270" alt="Claude stops at the 5-hour usage wall; at the reset waterplane types continue and the turn finishes"></a>
190
191
 
191
- *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/limit-and-budget-d61307c1a1.mp4), with pause and seek.*
192
+ *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/limit-and-budget-49f91fd711.mp4), with pause and seek.*
192
193
 
193
194
  When a session hits a Claude usage limit, the host notices, waits for the reset and continues it,
194
195
  reopening the conversation with `--continue` if the CLI exited. Bounded retries, and an off switch
@@ -200,9 +201,9 @@ your words kept and the reason said.
200
201
  <!-- site:queue -->
201
202
  ### Queue it now, or schedule it against the usage windows
202
203
 
203
- <a href="https://waterplane-dev.github.io/media/queue-and-schedule-a2c6c90637.mp4"><img src="docs/media/queue-and-schedule.gif" width="270" alt="A prompt queued behind a running turn starts by itself when the turn ends; schedules wait for a time or for the weekly window"></a>
204
+ <a href="https://waterplane-dev.github.io/media/queue-and-schedule-1cb4c31dac.mp4"><img src="docs/media/queue-and-schedule.gif" width="270" alt="A prompt queued behind a running turn starts by itself when the turn ends; schedules wait for a time or for the weekly window"></a>
204
205
 
205
- *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/queue-and-schedule-a2c6c90637.mp4), with pause and seek.*
206
+ *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/queue-and-schedule-1cb4c31dac.mp4), with pause and seek.*
206
207
 
207
208
  A prompt sent while you are offline or while the session is busy waits in a queue and is typed in
208
209
  exactly once. Or post a prompt for later: at a time, when the session goes quiet, after another one
@@ -213,15 +214,16 @@ before the reset, spend what is left"). The Backlog holds a repo's work that nob
213
214
  <!-- site:cost -->
214
215
  ### Know what it costs
215
216
 
216
- <a href="https://waterplane-dev.github.io/media/numbers-edb5a4da7e.mp4"><img src="docs/media/numbers.gif" width="270" alt="A week of heavy use priced at API list price, what drives the cost, and when a fresh session would be cheaper"></a>
217
+ <a href="https://waterplane-dev.github.io/media/numbers-6b4a0ebc6b.mp4"><img src="docs/media/numbers.gif" width="270" alt="A week of heavy use priced at API list price, what drives the cost, and a ten-hour session whose subagents are most of its bill"></a>
217
218
 
218
- *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/numbers-edb5a4da7e.mp4), with pause and seek.*
219
+ *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/numbers-6b4a0ebc6b.mp4), with pause and seek.*
219
220
 
220
221
  Every finished turn says what it cost: tokens in, out and cached, and dollars at list price, plus
221
222
  what the *next* turn will cost compared with a fresh session. The token ledger splits every total by
222
223
  day, repo and model; the header carries the 5-hour and weekly usage windows with their resets; each
223
- session has a context sheet showing how full the window was over time and where it compacted. A
224
- per-repo check weighs `CLAUDE.md` and skill descriptions, the part every turn pays for again. All
224
+ session has a context sheet showing how full the window was over time and where it compacted, and
225
+ on a fan-out session what its subagents cost, each one as a bar, the skills they loaded and what
226
+ every turn carries before your prompt. A per-repo check weighs `CLAUDE.md` and skill descriptions, the part every turn pays for again. All
225
227
  read off the CLI's own logs and screens; where there is nothing to read, nothing is shown rather
226
228
  than a guess.
227
229
  <!-- /site:cost -->
@@ -229,9 +231,9 @@ than a guess.
229
231
  <!-- site:health -->
230
232
  ### Repo health, so the vibe coding stays maintainable
231
233
 
232
- <a href="https://waterplane-dev.github.io/media/repo-health-55ce394cae.mp4"><img src="docs/media/repo-health.gif" width="270" alt="A repo vibe-coded for eight months scores 46 out of 100: one 8,397-line file caps the score, two severe warnings name it, and the trend slides from 100 in February"></a>
234
+ <a href="https://waterplane-dev.github.io/media/repo-health-a6076318e5.mp4"><img src="docs/media/repo-health.gif" width="270" alt="A repo vibe-coded for eight months scores 46 out of 100: one 8,397-line file caps the score, two severe warnings name it, and the trend slides from 100 in February"></a>
233
235
 
234
- *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/repo-health-55ce394cae.mp4), with pause and seek.*
236
+ *A short loop. [The whole walkthrough as a video](https://waterplane-dev.github.io/media/repo-health-a6076318e5.mp4), with pause and seek.*
235
237
 
236
238
  Vibe coding drifts into a mess quietly, and a steady number does not mean a healthy repo. Each repo
237
239
  gets one health score out of 100, measured against fixed good values: file length, files reworked
@@ -341,7 +343,7 @@ plainly:
341
343
 
342
344
  ## Built with waterplane
343
345
 
344
- **ciqkit** is developer tooling for Garmin Connect IQ watch apps: a broker that makes the Connect IQ
346
+ **[ciqkit](https://github.com/JohannesHoh/ciqkit)** is developer tooling for Garmin Connect IQ watch apps: a broker that makes the Connect IQ
345
347
  simulator usable from scripts, CI and coding agents, plus static checks for watch screens. It and
346
348
  the watch apps it serves were developed largely from a phone with waterplane: build on the desktop,
347
349
  run it in the simulator, and get the verified screenshot in the phone's gallery. waterplane shells out
@@ -353,9 +355,30 @@ Garmin watch app on the Connect IQ store that counts indoor boulder problems by
353
355
  rate and the accelerometer, with a companion web app for live sessions. It is closed source; it was
354
356
  built, tested on the simulator and shipped to the store with waterplane, mostly from a phone.
355
357
 
356
- **Little Painter** is a small Android app for children: brush, shapes that stay movable after the
357
- finger lifts, a paint bucket, and a parent mode. It was written with waterplane, with the APK built
358
- from the phone's build sheet.
358
+ **[Little Painter](https://play.google.com/store/apps/details?id=io.github.johanneshoh.childpaint)**
359
+ is a small Android app for children: brush, shapes that stay movable after the finger lifts, a paint
360
+ bucket, and a parent mode. It was written with waterplane, with the APK built from the phone's build
361
+ sheet. [Source](https://github.com/waterplane-dev/child-paint).
362
+
363
+ **[Talking Pictures](https://play.google.com/store/apps/details?id=de.hoh.talkingpictures)** is an
364
+ Android app for small children: take a photo, put invisible spots on the things in it, record your
365
+ own voice behind each spot, and hand the phone over. It is offline, with no network permission. It
366
+ was built with waterplane; it is closed source.
367
+
368
+ **[Waterplane Game](https://play.google.com/store/apps/details?id=dev.waterplane.game)** is a small
369
+ Android side-scroller in which you fly the waterplane logo through storm clouds, rock spires,
370
+ lighthouses and reefs. It was built from a phone, start to finish: one prompt sent through
371
+ waterplane, then one follow-up to test it on an emulator.
372
+ [Source](https://github.com/waterplane-dev/waterplane-game).
373
+
374
+ All public repos: [waterplane](https://github.com/waterplane-dev/waterplane) ·
375
+ [demo](https://github.com/waterplane-dev/demo) ·
376
+ [waterplane-plugin-copilot](https://github.com/waterplane-dev/waterplane-plugin-copilot) ·
377
+ [waterplane.dev site](https://github.com/waterplane-dev/waterplane-dev.github.io) ·
378
+ [media](https://github.com/waterplane-dev/media) ·
379
+ [child-paint](https://github.com/waterplane-dev/child-paint) ·
380
+ [waterplane-game](https://github.com/waterplane-dev/waterplane-game) ·
381
+ [ciqkit](https://github.com/JohannesHoh/ciqkit).
359
382
 
360
383
  ## Known limits
361
384
 
package/SECURITY.md CHANGED
@@ -29,7 +29,7 @@ This is maintained by one person, unpaid, alongside other things. There is
29
29
  something clearly in scope and serious, could be longer for anything
30
30
  lower-severity. I'll keep you posted rather than go silent.
31
31
 
32
- If you don't hear back after a reasonable wait, a follow-up email is fine.
32
+ If you don't hear back after a reasonable wait, a follow-up comment on the advisory is fine.
33
33
 
34
34
  ## Threat model
35
35
 
@@ -193,8 +193,8 @@ summary:
193
193
  for requests arriving through `tailscale serve`, and only when the Origin
194
194
  names the same host the request was sent to; the name is re-read
195
195
  until known.
196
- - `/api/agent/intents` and `/api/agent/backlog` (an agent in a driven repo
197
- posting work for later, `agentintents.ts`) answers only a loopback caller that is neither a browser
196
+ - `/api/agent/intents`, `/api/agent/backlog`, `/api/agent/followup` and `/api/agent/exposure[/triage]` (an agent in a driven repo
197
+ posting work for later, `agentintents.ts`; marking a crash / exposure finding, `agentexposure.ts`: a read, and a mark that needs a live session, never a clear) answers only a loopback caller that is neither a browser
198
198
  (any `Origin` or `Sec-Fetch-Site` header is refused, same-origin included)
199
199
  nor proxied (`tailscale serve` forwards to 127.0.0.1, so the same
200
200
  reverse-proxy headers as the hook sinks above are refused). It adds no new power:
@@ -331,6 +331,14 @@ summary:
331
331
  named them) and the variables passed with `--env`, never the installing
332
332
  shell's environment, and refuses `WATERPLANE_ALLOW_PUBLIC` outright: a public bind
333
333
  stays an explicit, visible opt-in in `.env`.
334
+ - **`node-pty` is pinned to a pre-release (`1.2.0-beta.15`) on purpose.** The
335
+ stable 1.1.0 leaks two file descriptors into the daemon on every macOS spawn
336
+ (a spare `/dev/ptmx` and the child's slave), which exhausted the machine's
337
+ pseudo-terminals; the 1.2.0 betas fix it. The pin is exact, the published
338
+ package's `npm-shrinkwrap.json` holds it, and `ptyleak.test.mjs` guards the fix.
339
+ Scanners that flag the pre-release or node-pty's install script (a native
340
+ build fallback; prebuilt binaries ship in the package) are seeing this choice.
341
+ It moves to `1.2.0` once that is released stable.
334
342
 
335
343
  ### In scope
336
344
 
@@ -1 +1 @@
1
- 24.21.0
1
+ 24.22.1
@@ -24,6 +24,13 @@ export interface InstructionFile {
24
24
  parts: InstructionPart[];
25
25
  /** A Copilot setting that is off and so dropped Copilot from this row, by name. */
26
26
  off?: string;
27
+ /** `"desktop"`: a row this desktop adds to every session whatever the repo (`desktopInventory`). Absent = the folder's own. */
28
+ scope?: "desktop";
29
+ /**
30
+ * Set when the row's weight cannot be known from a file (an MCP server's tool schemas arrive when
31
+ * it connects): the sentence why. Such a row has no parts and is NEVER counted as 0.
32
+ */
33
+ unsized?: string;
27
34
  }
28
35
  export interface InstructionTotals {
29
36
  always: number;
@@ -80,12 +87,22 @@ export declare function classifySkill(text: string, readers: InstructionReader[]
80
87
  export declare function claudeImports(text: string): string[];
81
88
  /** A file only Copilot's world writes: AGENTS.md, anything under `.github/` or `.agents/`. */
82
89
  export declare const isCopilotFile: (path: string) => boolean;
90
+ /** Why an MCP server row carries no number. */
91
+ export declare const MCP_UNSIZED = "its tool schemas are sent by the server when it connects \u2014 not measurable from the file";
83
92
  /** Every instruction file in the folder, in a fixed order (always-on families first), and the repeats between them. */
84
93
  export declare function instructionInventory(fs: AgentFilesFs, sw?: CopilotSwitches): InstructionInventory;
85
94
  /** One agent's share of the inventory: what it carries every request, when a file matches, and on demand. */
86
95
  export declare function instructionTotals(files: InstructionFile[], agent: InstructionReader): InstructionTotals;
87
96
  /** The characters of `b`'s lines that also stand in `a`, whitespace-normalised, each distinct line once. */
88
97
  export declare function sharedChars(a: string, b: string): number;
98
+ /**
99
+ * Whether the threshold reading (`claudeWeightInput` → `weighContext(...).alwaysOnChars`) counts
100
+ * this row. D1 (always-on plan, 2026-10-26): the threshold keeps measuring what it always measured.
101
+ * Subagent descriptions, CLAUDE.local.md and what only it imports (gitignored — the working tree
102
+ * would drift from the commit the repo-health series weighs) and unsized rows are LISTED with their
103
+ * own figures, never folded in; desktop rows are not this repo's weight at all.
104
+ */
105
+ export declare function countedByThreshold(f: InstructionFile): boolean;
89
106
  /**
90
107
  * Claude Code's half as `weighContext`'s input: what it carries every turn apart from skill
91
108
  * descriptions (CLAUDE.md, its imports, unscoped rules) and its skills. The one place the
@@ -25,6 +25,7 @@
25
25
  * Pure: the caller hands in a synchronous reader over the folder (`AgentFilesFs`).
26
26
  */
27
27
  import { CHARS_PER_TOKEN, frontmatterLines, skillDescChars } from "./contextweight.js";
28
+ import { wordOf } from "./wordof.js";
28
29
  export const READER_NAME = { claude: "Claude Code", copilot: "Copilot" };
29
30
  /** The YAML frontmatter as raw lines, or null. Only flat keys and simple lists are read. */
30
31
  function frontmatter(text) {
@@ -108,6 +109,10 @@ function walk(fs, dir, keep, depth = 4) {
108
109
  }
109
110
  /** A file only Copilot's world writes: AGENTS.md, anything under `.github/` or `.agents/`. */
110
111
  export const isCopilotFile = (path) => path === "AGENTS.md" || path.startsWith(".github/") || path.startsWith(".agents/");
112
+ /** The kind word of a file only CLAUDE.local.md imports. */
113
+ const LOCAL_IMPORT = "imported by CLAUDE.local.md";
114
+ /** Why an MCP server row carries no number. */
115
+ export const MCP_UNSIZED = "its tool schemas are sent by the server when it connects — not measurable from the file";
111
116
  /** Every instruction file in the folder, in a fixed order (always-on families first), and the repeats between them. */
112
117
  export function instructionInventory(fs, sw = {}) {
113
118
  const files = [];
@@ -125,20 +130,29 @@ export function instructionInventory(fs, sw = {}) {
125
130
  claudeMds.push(t);
126
131
  add({ path: p, kind: "CLAUDE.md", parts: [{ readers: without(["claude", "copilot"], "copilot", sw.claudeMd), when: { kind: "always" }, chars: t.length }], ...offWord(sw.claudeMd, "chat.useClaudeMdFile") }, t);
127
132
  }
133
+ // CLAUDE.local.md: the person's own, gitignored, Claude Code reads it every turn beside CLAUDE.md.
134
+ const local = fs.read("CLAUDE.local.md");
135
+ if (local != null) {
136
+ add({ path: "CLAUDE.local.md", kind: "CLAUDE.local.md", parts: [{ readers: ["claude"], when: { kind: "always" }, chars: local.length }] }, local);
137
+ }
128
138
  const imports = new Set(claudeMds.flatMap(claudeImports));
139
+ // What only CLAUDE.local.md imports is the person's, like the file itself (D1: listed, not weighed).
140
+ const localImports = new Set(local == null ? [] : claudeImports(local).filter((p) => !imports.has(p)));
141
+ const importer = (p) => (localImports.has(p) ? LOCAL_IMPORT : "imported by CLAUDE.md");
129
142
  const agentsMd = fs.read("AGENTS.md");
130
143
  if (agentsMd != null) {
131
144
  const readers = without(["copilot"], "copilot", sw.agentsMd);
132
- if (imports.has("AGENTS.md"))
145
+ const imported = imports.has("AGENTS.md") || localImports.has("AGENTS.md");
146
+ if (imported)
133
147
  readers.unshift("claude");
134
- add({ path: "AGENTS.md", kind: imports.has("AGENTS.md") ? "AGENTS.md, imported by CLAUDE.md" : "AGENTS.md", parts: [{ readers, when: { kind: "always" }, chars: agentsMd.length }], ...offWord(sw.agentsMd, "chat.useAgentsMdFile") }, agentsMd);
148
+ add({ path: "AGENTS.md", kind: imported ? `AGENTS.md, ${importer("AGENTS.md")}` : "AGENTS.md", parts: [{ readers, when: { kind: "always" }, chars: agentsMd.length }], ...offWord(sw.agentsMd, "chat.useAgentsMdFile") }, agentsMd);
135
149
  }
136
- for (const imp of imports) {
150
+ for (const imp of [...imports, ...localImports]) {
137
151
  if (imp === "AGENTS.md" || text.has(imp))
138
152
  continue;
139
153
  const t = fs.read(imp);
140
154
  if (t != null)
141
- add({ path: imp, kind: "imported by CLAUDE.md", parts: [{ readers: ["claude"], when: { kind: "always" }, chars: t.length }] }, t);
155
+ add({ path: imp, kind: importer(imp), parts: [{ readers: ["claude"], when: { kind: "always" }, chars: t.length }] }, t);
142
156
  }
143
157
  const ci = fs.read(".github/copilot-instructions.md");
144
158
  if (ci != null) {
@@ -171,6 +185,34 @@ export function instructionInventory(fs, sw = {}) {
171
185
  add({ path: p, kind, parts: classifySkill(t, without(readers, "copilot", sw.skills)), ...offWord(sw.skills, "chat.useAgentSkills") }, t);
172
186
  }
173
187
  }
188
+ // Subagent definitions: Claude Code lists each one's description to the model every turn; the
189
+ // body is the subagent's own prompt, sent only when it runs (as `instructionFileWeight` says).
190
+ for (const p of walk(fs, ".claude/agents", (n) => n.endsWith(".md"), 0)) {
191
+ const t = fs.read(p);
192
+ if (t != null)
193
+ add({ path: p, kind: "subagent", parts: classifySkill(t, ["claude"]) }, t);
194
+ }
195
+ // `.mcp.json`: the server NAMES are knowable, their weight is not — each server sends its tool
196
+ // schemas when it connects. A row per server with no number; never 0, never a guess.
197
+ const mcp = fs.read(".mcp.json");
198
+ if (mcp != null) {
199
+ let names = null;
200
+ try {
201
+ const j = JSON.parse(mcp);
202
+ const servers = j && typeof j === "object" ? j.mcpServers : undefined;
203
+ names = servers && typeof servers === "object" && !Array.isArray(servers) ? Object.keys(servers) : [];
204
+ }
205
+ catch {
206
+ names = null;
207
+ }
208
+ if (names == null) {
209
+ files.push({ path: ".mcp.json", kind: ".mcp.json (unreadable)", parts: [], unsized: "the file is not valid JSON, so its servers could not be read" });
210
+ }
211
+ else {
212
+ for (const name of names)
213
+ files.push({ path: ".mcp.json", kind: `MCP server ${name}`, parts: [], unsized: MCP_UNSIZED });
214
+ }
215
+ }
174
216
  // Copilot also reads CLAUDE.md and `.claude/skills`, but a repo with no file of Copilot's own is
175
217
  // not one anybody drives with Copilot: counting it there put a Copilot sentence on every Claude
176
218
  // repo. Without such a file, Copilot is nobody's reader here.
@@ -237,6 +279,16 @@ function overlapsOf(files, text) {
237
279
  }
238
280
  return out;
239
281
  }
282
+ /**
283
+ * Whether the threshold reading (`claudeWeightInput` → `weighContext(...).alwaysOnChars`) counts
284
+ * this row. D1 (always-on plan, 2026-10-26): the threshold keeps measuring what it always measured.
285
+ * Subagent descriptions, CLAUDE.local.md and what only it imports (gitignored — the working tree
286
+ * would drift from the commit the repo-health series weighs) and unsized rows are LISTED with their
287
+ * own figures, never folded in; desktop rows are not this repo's weight at all.
288
+ */
289
+ export function countedByThreshold(f) {
290
+ return !(f.unsized || f.scope === "desktop" || f.kind === "subagent" || f.kind === "CLAUDE.local.md" || f.kind.endsWith(LOCAL_IMPORT));
291
+ }
240
292
  /**
241
293
  * Claude Code's half as `weighContext`'s input: what it carries every turn apart from skill
242
294
  * descriptions (CLAUDE.md, its imports, unscoped rules) and its skills. The one place the
@@ -246,6 +298,9 @@ export function claudeWeightInput(files) {
246
298
  const skills = [];
247
299
  let claudeMdChars = 0;
248
300
  for (const f of files) {
301
+ // D1: see `countedByThreshold`.
302
+ if (!countedByThreshold(f))
303
+ continue;
249
304
  const mine = f.parts.filter((p) => p.readers.includes("claude"));
250
305
  if (!mine.length)
251
306
  continue;
@@ -262,7 +317,7 @@ export function claudeWeightInput(files) {
262
317
  }
263
318
  /** One repeat, said: the two files, what they share, who carries both — and for the migration case, how one copy serves both agents. */
264
319
  export function overlapWords(o, fmt = String) {
265
- const who = o.readers.map((r) => READER_NAME[r]).join(" and ");
320
+ const who = o.readers.map((r) => wordOf(READER_NAME, r, r)).join(" and ");
266
321
  const pair = new Set([o.a, o.b]);
267
322
  const fix = pair.has("CLAUDE.md") && pair.has("AGENTS.md")
268
323
  ? " One copy is enough: keep the text in AGENTS.md and let CLAUDE.md be the single line @AGENTS.md, which Claude Code inlines."