waterplane 0.1.14 → 0.1.16

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 (332) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +4 -1
  3. package/node_modules/@waterplane/shared/dist/agentfiles.js +25 -2
  4. package/node_modules/@waterplane/shared/dist/agentfiles.js.map +1 -1
  5. package/node_modules/@waterplane/shared/dist/alwaysonwords.d.ts +11 -0
  6. package/node_modules/@waterplane/shared/dist/alwaysonwords.js +19 -1
  7. package/node_modules/@waterplane/shared/dist/alwaysonwords.js.map +1 -1
  8. package/node_modules/@waterplane/shared/dist/artifacts.js +5 -1
  9. package/node_modules/@waterplane/shared/dist/artifacts.js.map +1 -1
  10. package/node_modules/@waterplane/shared/dist/askrules.d.ts +0 -13
  11. package/node_modules/@waterplane/shared/dist/askrules.js +2 -1
  12. package/node_modules/@waterplane/shared/dist/askrules.js.map +1 -1
  13. package/node_modules/@waterplane/shared/dist/block.d.ts +114 -0
  14. package/node_modules/@waterplane/shared/dist/block.js +104 -0
  15. package/node_modules/@waterplane/shared/dist/block.js.map +1 -0
  16. package/node_modules/@waterplane/shared/dist/buildscan.d.ts +16 -0
  17. package/node_modules/@waterplane/shared/dist/buildscan.js +73 -7
  18. package/node_modules/@waterplane/shared/dist/buildscan.js.map +1 -1
  19. package/node_modules/@waterplane/shared/dist/claudeconfig.js +2 -1
  20. package/node_modules/@waterplane/shared/dist/claudeconfig.js.map +1 -1
  21. package/node_modules/@waterplane/shared/dist/clihealth/healthfixture.js +1 -1
  22. package/node_modules/@waterplane/shared/dist/clihealth/healthfixture.js.map +1 -1
  23. package/node_modules/@waterplane/shared/dist/clirestart.js +23 -1
  24. package/node_modules/@waterplane/shared/dist/clirestart.js.map +1 -1
  25. package/node_modules/@waterplane/shared/dist/desktopfiles.js +2 -1
  26. package/node_modules/@waterplane/shared/dist/desktopfiles.js.map +1 -1
  27. package/node_modules/@waterplane/shared/dist/dictate.js +1 -1
  28. package/node_modules/@waterplane/shared/dist/dictate.js.map +1 -1
  29. package/node_modules/@waterplane/shared/dist/exposure.js +1 -0
  30. package/node_modules/@waterplane/shared/dist/exposure.js.map +1 -1
  31. package/node_modules/@waterplane/shared/dist/followup.d.ts +1 -1
  32. package/node_modules/@waterplane/shared/dist/followup.js +8 -6
  33. package/node_modules/@waterplane/shared/dist/followup.js.map +1 -1
  34. package/node_modules/@waterplane/shared/dist/hints.js +4 -3
  35. package/node_modules/@waterplane/shared/dist/hints.js.map +1 -1
  36. package/node_modules/@waterplane/shared/dist/hosturl.d.ts +0 -24
  37. package/node_modules/@waterplane/shared/dist/hosturl.js +3 -2
  38. package/node_modules/@waterplane/shared/dist/hosturl.js.map +1 -1
  39. package/node_modules/@waterplane/shared/dist/index.d.ts +11 -3
  40. package/node_modules/@waterplane/shared/dist/index.js +11 -3
  41. package/node_modules/@waterplane/shared/dist/index.js.map +1 -1
  42. package/node_modules/@waterplane/shared/dist/installrow.d.ts +156 -0
  43. package/node_modules/@waterplane/shared/dist/installrow.js +261 -0
  44. package/node_modules/@waterplane/shared/dist/installrow.js.map +1 -0
  45. package/node_modules/@waterplane/shared/dist/intent/types.d.ts +6 -0
  46. package/node_modules/@waterplane/shared/dist/intent/types.js.map +1 -1
  47. package/node_modules/@waterplane/shared/dist/intent/words.d.ts +2 -1
  48. package/node_modules/@waterplane/shared/dist/intent/words.js +7 -2
  49. package/node_modules/@waterplane/shared/dist/intent/words.js.map +1 -1
  50. package/node_modules/@waterplane/shared/dist/itempaths.d.ts +0 -10
  51. package/node_modules/@waterplane/shared/dist/itempaths.js +30 -3
  52. package/node_modules/@waterplane/shared/dist/itempaths.js.map +1 -1
  53. package/node_modules/@waterplane/shared/dist/lineartrim.d.ts +11 -0
  54. package/node_modules/@waterplane/shared/dist/lineartrim.js +22 -0
  55. package/node_modules/@waterplane/shared/dist/lineartrim.js.map +1 -0
  56. package/node_modules/@waterplane/shared/dist/netretry.d.ts +23 -2
  57. package/node_modules/@waterplane/shared/dist/netretry.js +24 -5
  58. package/node_modules/@waterplane/shared/dist/netretry.js.map +1 -1
  59. package/node_modules/@waterplane/shared/dist/pairing.js +2 -1
  60. package/node_modules/@waterplane/shared/dist/pairing.js.map +1 -1
  61. package/node_modules/@waterplane/shared/dist/peer.js +2 -1
  62. package/node_modules/@waterplane/shared/dist/peer.js.map +1 -1
  63. package/node_modules/@waterplane/shared/dist/plugin/api.d.ts +8 -0
  64. package/node_modules/@waterplane/shared/dist/plugin/manifest.d.ts +23 -0
  65. package/node_modules/@waterplane/shared/dist/plugin/manifest.js +8 -0
  66. package/node_modules/@waterplane/shared/dist/plugin/manifest.js.map +1 -1
  67. package/node_modules/@waterplane/shared/dist/plugin/version.d.ts +5 -1
  68. package/node_modules/@waterplane/shared/dist/plugin/version.js +5 -1
  69. package/node_modules/@waterplane/shared/dist/plugin/version.js.map +1 -1
  70. package/node_modules/@waterplane/shared/dist/queue/queuelane.d.ts +23 -2
  71. package/node_modules/@waterplane/shared/dist/queue/queuelane.js +16 -4
  72. package/node_modules/@waterplane/shared/dist/queue/queuelane.js.map +1 -1
  73. package/node_modules/@waterplane/shared/dist/queue/queueserial.js +5 -3
  74. package/node_modules/@waterplane/shared/dist/queue/queueserial.js.map +1 -1
  75. package/node_modules/@waterplane/shared/dist/requirements.js +5 -1
  76. package/node_modules/@waterplane/shared/dist/requirements.js.map +1 -1
  77. package/node_modules/@waterplane/shared/dist/schedule/schedrule.d.ts +3 -0
  78. package/node_modules/@waterplane/shared/dist/schedule/schedrule.js.map +1 -1
  79. package/node_modules/@waterplane/shared/dist/sessionwindow.d.ts +25 -0
  80. package/node_modules/@waterplane/shared/dist/sessionwindow.js +24 -0
  81. package/node_modules/@waterplane/shared/dist/sessionwindow.js.map +1 -0
  82. package/node_modules/@waterplane/shared/dist/statedir.js +2 -1
  83. package/node_modules/@waterplane/shared/dist/statedir.js.map +1 -1
  84. package/node_modules/@waterplane/shared/dist/themeoverlay.js +1 -1
  85. package/node_modules/@waterplane/shared/dist/themeoverlay.js.map +1 -1
  86. package/node_modules/@waterplane/shared/dist/urls.js +1 -1
  87. package/node_modules/@waterplane/shared/dist/urls.js.map +1 -1
  88. package/node_modules/@waterplane/shared/dist/wire/backend.d.ts +8 -0
  89. package/node_modules/@waterplane/shared/dist/wire/install.d.ts +5 -110
  90. package/node_modules/@waterplane/shared/dist/wire/install.js +0 -28
  91. package/node_modules/@waterplane/shared/dist/wire/install.js.map +1 -1
  92. package/node_modules/@waterplane/shared/dist/wire/messages/clienthost.d.ts +1 -25
  93. package/node_modules/@waterplane/shared/dist/wire/messages/clientsession.d.ts +15 -0
  94. package/node_modules/@waterplane/shared/dist/wire/messages/hosttools.d.ts +0 -10
  95. package/node_modules/@waterplane/shared/dist/wire/notify.d.ts +13 -1
  96. package/node_modules/@waterplane/shared/dist/wire/notify.js +9 -2
  97. package/node_modules/@waterplane/shared/dist/wire/notify.js.map +1 -1
  98. package/node_modules/@waterplane/shared/dist/wire/repo.js +1 -1
  99. package/node_modules/@waterplane/shared/dist/wire/repo.js.map +1 -1
  100. package/node_modules/@waterplane/shared/dist/wire/sent.d.ts +8 -1
  101. package/node_modules/@waterplane/shared/dist/wire/session/info.d.ts +29 -3
  102. package/node_modules/@waterplane/shared/dist/wire/session/launch.d.ts +44 -3
  103. package/node_modules/@waterplane/shared/dist/wire/session.d.ts +1 -1
  104. package/node_modules/@waterplane/shared/dist/wire/telemetry.d.ts +7 -0
  105. package/node_modules/@waterplane/shared/dist/wire/work.d.ts +4 -2
  106. package/node_modules/@waterplane/shared/dist/wire/work.js.map +1 -1
  107. package/node_modules/@waterplane/shared/dist/working.d.ts +30 -0
  108. package/node_modules/@waterplane/shared/dist/working.js +135 -13
  109. package/node_modules/@waterplane/shared/dist/working.js.map +1 -1
  110. package/node_modules/@waterplane/shared/dist/yamlfront.d.ts +13 -0
  111. package/node_modules/@waterplane/shared/dist/yamlfront.js +119 -0
  112. package/node_modules/@waterplane/shared/dist/yamlfront.js.map +1 -0
  113. package/npm-shrinkwrap.json +2 -2
  114. package/package.json +1 -1
  115. package/packages/extensions/android-apps/waterplane-plugin.json +11 -0
  116. package/packages/host/dist/agentbuild.d.ts +48 -0
  117. package/packages/host/dist/agentbuild.js +105 -0
  118. package/packages/host/dist/agentbuild.js.map +1 -0
  119. package/packages/host/dist/agents.d.ts +2 -0
  120. package/packages/host/dist/agents.js +6 -1
  121. package/packages/host/dist/agents.js.map +1 -1
  122. package/packages/host/dist/androidenv.d.ts +10 -0
  123. package/packages/host/dist/androidenv.js +34 -2
  124. package/packages/host/dist/androidenv.js.map +1 -1
  125. package/packages/host/dist/apkcheck.d.ts +1 -1
  126. package/packages/host/dist/apkcheck.js +5 -5
  127. package/packages/host/dist/apkcheck.js.map +1 -1
  128. package/packages/host/dist/appready.d.ts +1 -1
  129. package/packages/host/dist/artifacts.js +6 -2
  130. package/packages/host/dist/artifacts.js.map +1 -1
  131. package/packages/host/dist/assess/hassrun.js +4 -1
  132. package/packages/host/dist/assess/hassrun.js.map +1 -1
  133. package/packages/host/dist/backends/claude-local.d.ts +34 -3
  134. package/packages/host/dist/backends/claude-local.js +86 -15
  135. package/packages/host/dist/backends/claude-local.js.map +1 -1
  136. package/packages/host/dist/backends/claude-sources.js +13 -7
  137. package/packages/host/dist/backends/claude-sources.js.map +1 -1
  138. package/packages/host/dist/backends/index.d.ts +7 -0
  139. package/packages/host/dist/backends/index.js +12 -1
  140. package/packages/host/dist/backends/index.js.map +1 -1
  141. package/packages/host/dist/builds.d.ts +1 -0
  142. package/packages/host/dist/builds.js +3 -1
  143. package/packages/host/dist/builds.js.map +1 -1
  144. package/packages/host/dist/clifixtures.d.ts +3 -0
  145. package/packages/host/dist/clifixtures.js +9 -1
  146. package/packages/host/dist/clifixtures.js.map +1 -1
  147. package/packages/host/dist/compliance.js +34 -1
  148. package/packages/host/dist/compliance.js.map +1 -1
  149. package/packages/host/dist/composer.d.ts +22 -0
  150. package/packages/host/dist/composer.js +23 -0
  151. package/packages/host/dist/composer.js.map +1 -1
  152. package/packages/host/dist/context.js +15 -5
  153. package/packages/host/dist/context.js.map +1 -1
  154. package/packages/host/dist/deliver/deliverreturn.d.ts +24 -0
  155. package/packages/host/dist/deliver/deliverreturn.js +37 -0
  156. package/packages/host/dist/deliver/deliverreturn.js.map +1 -1
  157. package/packages/host/dist/deliver/deliverrun.js +11 -11
  158. package/packages/host/dist/deliver/deliverrun.js.map +1 -1
  159. package/packages/host/dist/deliver/deliverscreen.js +4 -10
  160. package/packages/host/dist/deliver/deliverscreen.js.map +1 -1
  161. package/packages/host/dist/doctorclaude.d.ts +5 -1
  162. package/packages/host/dist/doctorclaude.js +7 -2
  163. package/packages/host/dist/doctorclaude.js.map +1 -1
  164. package/packages/host/dist/extensions/android-apps/host/index.d.mts +9 -0
  165. package/packages/host/dist/extensions/android-apps/host/index.mjs +59 -0
  166. package/packages/host/dist/extensions/android-apps/host/index.mjs.map +1 -0
  167. package/packages/host/dist/extensions/android-apps/host/installlog.d.mts +49 -0
  168. package/packages/host/dist/extensions/android-apps/host/installlog.mjs +196 -0
  169. package/packages/host/dist/extensions/android-apps/host/installlog.mjs.map +1 -0
  170. package/packages/host/dist/extensions/android-apps/host/readiness.d.mts +9 -0
  171. package/packages/host/dist/extensions/android-apps/host/readiness.mjs +5 -0
  172. package/packages/host/dist/extensions/android-apps/host/readiness.mjs.map +1 -0
  173. package/packages/host/dist/extensions/android-apps/shared/wire.d.mts +287 -0
  174. package/{node_modules/@waterplane/shared/dist/installlog.js → packages/host/dist/extensions/android-apps/shared/wire.mjs} +74 -1
  175. package/packages/host/dist/extensions/android-apps/shared/wire.mjs.map +1 -0
  176. package/packages/host/dist/headlessauth.d.ts +24 -0
  177. package/packages/host/dist/headlessauth.js +63 -0
  178. package/packages/host/dist/headlessauth.js.map +1 -0
  179. package/packages/host/dist/host.js +21 -2
  180. package/packages/host/dist/host.js.map +1 -1
  181. package/packages/host/dist/intents/contract.d.ts +6 -0
  182. package/packages/host/dist/intents/contract.js.map +1 -1
  183. package/packages/host/dist/intents/watch.d.ts +2 -0
  184. package/packages/host/dist/intents/watch.js +8 -0
  185. package/packages/host/dist/intents/watch.js.map +1 -1
  186. package/packages/host/dist/limitretry.d.ts +22 -3
  187. package/packages/host/dist/limitretry.js +20 -0
  188. package/packages/host/dist/limitretry.js.map +1 -1
  189. package/packages/host/dist/login.d.ts +1 -0
  190. package/packages/host/dist/login.js +17 -0
  191. package/packages/host/dist/login.js.map +1 -1
  192. package/packages/host/dist/main.js +5 -16
  193. package/packages/host/dist/main.js.map +1 -1
  194. package/packages/host/dist/naming.js +6 -0
  195. package/packages/host/dist/naming.js.map +1 -1
  196. package/packages/host/dist/netlog.d.ts +9 -0
  197. package/packages/host/dist/netlog.js +32 -3
  198. package/packages/host/dist/netlog.js.map +1 -1
  199. package/packages/host/dist/plugins/pluginapi.js +5 -0
  200. package/packages/host/dist/plugins/pluginapi.js.map +1 -1
  201. package/packages/host/dist/plugins/pluginauto.d.ts +21 -0
  202. package/packages/host/dist/plugins/pluginauto.js +67 -0
  203. package/packages/host/dist/plugins/pluginauto.js.map +1 -0
  204. package/packages/host/dist/plugins/pluginregistry.d.ts +50 -1
  205. package/packages/host/dist/plugins/pluginregistry.js +129 -7
  206. package/packages/host/dist/plugins/pluginregistry.js.map +1 -1
  207. package/packages/host/dist/question.js +10 -1
  208. package/packages/host/dist/question.js.map +1 -1
  209. package/packages/host/dist/recover/authgate.d.ts +174 -0
  210. package/packages/host/dist/recover/authgate.js +317 -0
  211. package/packages/host/dist/recover/authgate.js.map +1 -0
  212. package/packages/host/dist/recover/blockpush.d.ts +89 -0
  213. package/packages/host/dist/recover/blockpush.js +119 -0
  214. package/packages/host/dist/recover/blockpush.js.map +1 -0
  215. package/packages/host/dist/recover/giveuplatch.d.ts +42 -0
  216. package/packages/host/dist/recover/giveuplatch.js +48 -0
  217. package/packages/host/dist/recover/giveuplatch.js.map +1 -0
  218. package/packages/host/dist/recover/recoverwrite.d.ts +174 -0
  219. package/packages/host/dist/recover/recoverwrite.js +137 -0
  220. package/packages/host/dist/recover/recoverwrite.js.map +1 -0
  221. package/packages/host/dist/recover/wavegate.d.ts +145 -0
  222. package/packages/host/dist/recover/wavegate.js +277 -0
  223. package/packages/host/dist/recover/wavegate.js.map +1 -0
  224. package/packages/host/dist/repohealth.d.ts +8 -2
  225. package/packages/host/dist/repohealth.js +16 -6
  226. package/packages/host/dist/repohealth.js.map +1 -1
  227. package/packages/host/dist/repos.d.ts +13 -0
  228. package/packages/host/dist/repos.js +50 -0
  229. package/packages/host/dist/repos.js.map +1 -1
  230. package/packages/host/dist/reposkill.js +1 -1
  231. package/packages/host/dist/reposkill.js.map +1 -1
  232. package/packages/host/dist/reposkilltext.js +56 -10
  233. package/packages/host/dist/reposkilltext.js.map +1 -1
  234. package/packages/host/dist/review.js +7 -2
  235. package/packages/host/dist/review.js.map +1 -1
  236. package/packages/host/dist/routes/apihost.js +22 -10
  237. package/packages/host/dist/routes/apihost.js.map +1 -1
  238. package/packages/host/dist/routes/apirepowork.js +4 -1
  239. package/packages/host/dist/routes/apirepowork.js.map +1 -1
  240. package/packages/host/dist/routes/apisystem.js +10 -0
  241. package/packages/host/dist/routes/apisystem.js.map +1 -1
  242. package/packages/host/dist/routes/apitable.d.ts +4 -7
  243. package/packages/host/dist/routes/apitable.js.map +1 -1
  244. package/packages/host/dist/routes/session.js +14 -0
  245. package/packages/host/dist/routes/session.js.map +1 -1
  246. package/packages/host/dist/routes/system.js +0 -37
  247. package/packages/host/dist/routes/system.js.map +1 -1
  248. package/packages/host/dist/routes/types.d.ts +0 -3
  249. package/packages/host/dist/scaffold.d.ts +13 -0
  250. package/packages/host/dist/scaffold.js +31 -0
  251. package/packages/host/dist/scaffold.js.map +1 -1
  252. package/packages/host/dist/server/ctxseal.d.ts +1 -1
  253. package/packages/host/dist/server/ctxseal.js +1 -1
  254. package/packages/host/dist/server/ctxseal.js.map +1 -1
  255. package/packages/host/dist/server/http.js +0 -2
  256. package/packages/host/dist/server/http.js.map +1 -1
  257. package/packages/host/dist/server/intentDeps.js +7 -1
  258. package/packages/host/dist/server/intentDeps.js.map +1 -1
  259. package/packages/host/dist/server/plugins.d.ts +21 -0
  260. package/packages/host/dist/server/plugins.js +28 -0
  261. package/packages/host/dist/server/plugins.js.map +1 -0
  262. package/packages/host/dist/server/sessionEvents.js +21 -47
  263. package/packages/host/dist/server/sessionEvents.js.map +1 -1
  264. package/packages/host/dist/server/shutdown.js +2 -4
  265. package/packages/host/dist/server/shutdown.js.map +1 -1
  266. package/packages/host/dist/sessions/agentpoll.js +18 -5
  267. package/packages/host/dist/sessions/agentpoll.js.map +1 -1
  268. package/packages/host/dist/sessions/apiretry.d.ts +110 -8
  269. package/packages/host/dist/sessions/apiretry.js +349 -72
  270. package/packages/host/dist/sessions/apiretry.js.map +1 -1
  271. package/packages/host/dist/sessions/boxread.js +9 -3
  272. package/packages/host/dist/sessions/boxread.js.map +1 -1
  273. package/packages/host/dist/sessions/core.d.ts +43 -6
  274. package/packages/host/dist/sessions/drive.js +6 -1
  275. package/packages/host/dist/sessions/drive.js.map +1 -1
  276. package/packages/host/dist/sessions/endsession.js +1 -0
  277. package/packages/host/dist/sessions/endsession.js.map +1 -1
  278. package/packages/host/dist/sessions/knobs.d.ts +12 -0
  279. package/packages/host/dist/sessions/knobs.js +12 -0
  280. package/packages/host/dist/sessions/knobs.js.map +1 -1
  281. package/packages/host/dist/sessions/loopwatch.d.ts +2 -0
  282. package/packages/host/dist/sessions/loopwatch.js +73 -0
  283. package/packages/host/dist/sessions/loopwatch.js.map +1 -0
  284. package/packages/host/dist/sessions/resume.d.ts +25 -36
  285. package/packages/host/dist/sessions/resume.js +97 -188
  286. package/packages/host/dist/sessions/resume.js.map +1 -1
  287. package/packages/host/dist/sessions/signinwait.d.ts +44 -0
  288. package/packages/host/dist/sessions/signinwait.js +286 -0
  289. package/packages/host/dist/sessions/signinwait.js.map +1 -0
  290. package/packages/host/dist/sessions/tmux.js +5 -0
  291. package/packages/host/dist/sessions/tmux.js.map +1 -1
  292. package/packages/host/dist/sessions/turn.js +36 -4
  293. package/packages/host/dist/sessions/turn.js.map +1 -1
  294. package/packages/host/dist/sessions/wall.d.ts +8 -5
  295. package/packages/host/dist/sessions/wall.js +112 -66
  296. package/packages/host/dist/sessions/wall.js.map +1 -1
  297. package/packages/host/dist/sessions.d.ts +6 -0
  298. package/packages/host/dist/sessions.js +14 -7
  299. package/packages/host/dist/sessions.js.map +1 -1
  300. package/packages/host/dist/sidecar/sidecarname.d.ts +3 -0
  301. package/packages/host/dist/sidecar/sidecarname.js +4 -0
  302. package/packages/host/dist/sidecar/sidecarname.js.map +1 -1
  303. package/packages/host/dist/toolloop.d.ts +30 -0
  304. package/packages/host/dist/toolloop.js +117 -0
  305. package/packages/host/dist/toolloop.js.map +1 -0
  306. package/packages/host/dist/usage.d.ts +12 -2
  307. package/packages/host/dist/usage.js +35 -3
  308. package/packages/host/dist/usage.js.map +1 -1
  309. package/packages/web/dist/assets/demo-DkCtg-SJ.js +26 -0
  310. package/packages/web/dist/assets/icons-B48F-4nA.js +1 -0
  311. package/packages/web/dist/assets/index-CpdyS6Xe.css +1 -0
  312. package/packages/web/dist/assets/index-EYc28CfH.js +170 -0
  313. package/packages/web/dist/assets/shared-DjRRLGfw.js +50 -0
  314. package/packages/web/dist/assets/sheets-ByWNPa9p.js +248 -0
  315. package/packages/web/dist/build-id.txt +1 -1
  316. package/packages/web/dist/buildstamp.json +1 -1
  317. package/packages/web/dist/index.html +6 -6
  318. package/packages/web/dist/sw.js +2 -2
  319. package/release.json +6 -3
  320. package/tools/repohealth/lang/typescript-resolve.mjs +4 -2
  321. package/tools/repohealth.mjs +35 -6
  322. package/node_modules/@waterplane/shared/dist/installlog.d.ts +0 -137
  323. package/node_modules/@waterplane/shared/dist/installlog.js.map +0 -1
  324. package/packages/host/dist/installlog.d.ts +0 -25
  325. package/packages/host/dist/installlog.js +0 -137
  326. package/packages/host/dist/installlog.js.map +0 -1
  327. package/packages/web/dist/assets/demo-DsZGy-MC.js +0 -24
  328. package/packages/web/dist/assets/icons-eqlvjswV.js +0 -1
  329. package/packages/web/dist/assets/index-GHwJuQb3.js +0 -169
  330. package/packages/web/dist/assets/index-VzDSZwwH.css +0 -1
  331. package/packages/web/dist/assets/shared-BWk5jXWb.js +0 -49
  332. package/packages/web/dist/assets/sheets-Dj-0m0DB.js +0 -232
@@ -79,9 +79,10 @@ export interface SessionLimit {
79
79
  nextAttemptAt: number | null;
80
80
  /** Continue attempts sent since this block started. */
81
81
  attempts: number;
82
- /** The block is a WEEKLY limit — its banner prints a bare time with no date,
83
- * so the reset lands days off; auto-continue attempts promptly instead of
84
- * parking on the unreliable parsed reset (an upgraded plan continues now). */
82
+ /** The block is a WEEKLY limit. Read off the screen its notice prints a bare
83
+ * time with no date, so `resetAt` is that time's next occurrence — the
84
+ * EARLIEST it can lift, possibly days early; auto-continue tries there and,
85
+ * still blocked, again at the same time each following day. */
85
86
  weekly: boolean;
86
87
  /**
87
88
  * The wall is a SPEND wall (API-key / cloud account out of credit, or a spend
@@ -118,6 +119,40 @@ export interface SessionLimit {
118
119
  resuming: boolean;
119
120
  /** True when the user pushed this session to the front of the resume queue. */
120
121
  first: boolean;
122
+ /**
123
+ * Why the host's continue is HELD rather than typed, as a sentence: today only
124
+ * `LIMIT_HELD_DRAFT` — a person's words sit in the desk's composer, and typing
125
+ * `continue` + Return there would send their draft with it. Set while parked on
126
+ * that; cleared on the next attempt, another blocker, or the block clearing.
127
+ * `nextAttemptAt` is then only the next LOOK, never a promise of a try, so a
128
+ * reader says this instead of a countdown. Absent/null = not held (an older
129
+ * host never sends it). Additive (2026-11-02).
130
+ */
131
+ held?: string | null;
132
+ }
133
+ /**
134
+ * A session whose turn stopped on a sign-out, waiting in its account's sign-in
135
+ * episode (host `recover/authgate.ts`). After a sign-in the host ASKS — it never
136
+ * types a `continue` until the person taps (owner, 2026-11-02).
137
+ */
138
+ export interface SessionSignInWait {
139
+ /** Epoch ms the sign-out stopped this session's turn. */
140
+ since: number;
141
+ /** Epoch ms the host confirmed the account is signed in again (`claude auth
142
+ * status` after a sign-out was seen, a sign-in link that finished, or another
143
+ * session's served turn). Absent = still signed out as far as the host knows. */
144
+ signedInAt?: number;
145
+ /** The person tapped continue and this session is in line behind the first
146
+ * one, which goes alone (`signin.continue`). */
147
+ queued?: boolean;
148
+ /** The host's `continue` for this session is typed and its verdict owed. */
149
+ continuing?: boolean;
150
+ /** The host CANNOT TELL whether the account signed in again: `claude auth
151
+ * status` keeps reading "in" while this episode never read "out" (a stale
152
+ * local credential, or the sign-in done elsewhere), so no confirmation will
153
+ * come. The phone offers continue — "continue if you have signed in". Only
154
+ * while `signedInAt` is absent. Additive (2026-11-02). */
155
+ unsure?: boolean;
121
156
  }
122
157
  /**
123
158
  * The host retrying a turn the CLI GAVE UP on a transient API error — a DNS or
@@ -146,6 +181,12 @@ export interface SessionNetRetry {
146
181
  at: number;
147
182
  /** For `gaveup` (or a `waiting` that is parked): the host's sentence why. */
148
183
  why?: string;
184
+ /** This `waiting` is HELD: another session's retry is the open question on this
185
+ * desktop (`recover/wavegate.ts`) and nothing is typed here until it gets
186
+ * through. The holder's session id (the probe in flight when nobody holds yet).
187
+ * The field is the fact; `why` carries the same sentence for an older phone.
188
+ * Absent = not held. */
189
+ heldBy?: string | null;
149
190
  /** This `waiting`/`sent` is a STALL PROBE: the ladder ran out and the host
150
191
  * is trying once more on the slow cadence. The work waiting on the session
151
192
  * is still stalled meanwhile (`netRetryStalls`). Absent = the ladder. */
@@ -7,7 +7,7 @@
7
7
  * live next to the union that happens to send it.
8
8
  */
9
9
  export type { PromptOption, StandingRule, DetectedPrompt } from "./session/promptbox.js";
10
- export type { SendView, Effort, PermissionMode, LaunchOpts, ExternalSession, LimitResumeMode, SessionLimit, SessionNetRetry, SessionLogin, ShellLink, SessionAgent, SessionAsk, SessionShell, SessionShellDetail } from "./session/launch.js";
10
+ export type { SendView, Effort, PermissionMode, LaunchOpts, ExternalSession, LimitResumeMode, SessionLimit, SessionNetRetry, SessionSignInWait, SessionLogin, ShellLink, SessionAgent, SessionAsk, SessionShell, SessionShellDetail } from "./session/launch.js";
11
11
  export type { SessionInfo, FollowUp, FollowUpBy } from "./session/info.js";
12
12
  export type { NewImage, RecentSession, ArchivedConversation, ArchiveListing, Bookmark, ClosedSession, ClosedBy, SessionOriginKind, SessionOrigin, HistoryEntry, SessionSearchScope, SessionSearchMatch, SessionSearchResult } from "./session/archive.js";
13
13
  export type { OpenDelivery } from "./session/delivery.js";
@@ -86,6 +86,13 @@ export interface UsageInfo {
86
86
  weeklyResetAt: number | null;
87
87
  /** Epoch ms of the scrape. */
88
88
  checkedAt: number;
89
+ /**
90
+ * Present when this account has NO 5-hour window: `/usage` has printed the
91
+ * week and no "Current session" row since this instant (`sessionWindowGoneSince`,
92
+ * `sessionwindow.ts`). Only ever set beside `sessionPct: null`. Absent = it has
93
+ * one, or nobody can say — never read a bare null as "none".
94
+ */
95
+ sessionGoneSince?: number;
89
96
  /**
90
97
  * True when this reading was not probed by THIS process — it was re-offered
91
98
  * at boot out of `usagelog.ts`, because the daemon restarting is not a fact
@@ -274,14 +274,16 @@ export interface BacklogItem {
274
274
  * "limited" is deliberately NOT "error": the reviewer never ran, so nothing was
275
275
  * judged. Reported as an error it reads as a broken install (and as a claim
276
276
  * about the work), when the true fact is a quota that lifts by itself.
277
+ * "signedOut" is the same class: the reviewer never ran because the CLI is
278
+ * signed out; one sign-in clears it, and a re-run is the person's tap.
277
279
  */
278
- export type BacklogCheckStatus = "checking" | "done" | "partial" | "questions" | "not_done" | "error" | "limited";
280
+ export type BacklogCheckStatus = "checking" | "done" | "partial" | "questions" | "not_done" | "error" | "limited" | "signedOut";
279
281
  /**
280
282
  * Verdict of a deep outcome validation (CLI self-reports structured JSON).
281
283
  * "validating" = in flight; achieved/likely/unlikely/unclear grade how well the
282
284
  * user's expected outcome appears to be met.
283
285
  */
284
- export type BacklogValidateStatus = "validating" | "achieved" | "likely" | "unlikely" | "unclear" | "error" | "limited";
286
+ export type BacklogValidateStatus = "validating" | "achieved" | "likely" | "unlikely" | "unclear" | "error" | "limited" | "signedOut";
285
287
  /** A proposed next step from validation: a short button label + the full instruction to send. */
286
288
  export interface BacklogNextStep {
287
289
  /** Short label shown on the tappable option button. */
@@ -1 +1 @@
1
- {"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/wire/work.ts"],"names":[],"mappings":"AAAA,qGAAqG;AA4nBrG,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAC3B,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;CAChB,CAAC;AAuDF;;;;GAIG;AACH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/wire/work.ts"],"names":[],"mappings":"AAAA,qGAAqG;AA8nBrG,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAC3B,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;CAChB,CAAC;AAuDF;;;;GAIG;AACH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC"}
@@ -27,6 +27,36 @@
27
27
  * ellipsis, and a parenthetical carrying a duration or a token count — which is
28
28
  * what the line has been in every version, hint or no hint.
29
29
  */
30
+ /**
31
+ * ANSI escapes removed, exactly as replacing every match of the regex
32
+ * `/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b[PX^_].*?\x1b\\|\x1b\][^\x07]*\x07/g` with ""
33
+ * did, but as a scan. That regex was quadratic on PTY bytes (CodeQL
34
+ * `js/polynomial-redos`): every unterminated `ESC P` / `ESC ]` re-scanned to the
35
+ * end of its line or of the tail. Same removals: a CSI as before (sticky); a
36
+ * DCS/SOS/PM/APC runs to the FIRST `ESC \` after it unless a line terminator
37
+ * (what `.` will not cross) comes first; an OSC runs to the first BEL. The next
38
+ * ST / BEL / line end is looked up once and reused while it still lies ahead,
39
+ * so the whole scan is linear.
40
+ */
41
+ export declare function stripAnsi(s: string): string;
42
+ /** The phrase the spinner cycles: always a gerund, always ellipsed. Taken as the
43
+ * LAST such word on the line because a partial TUI redraw leaves junk in front
44
+ * of it ("✽Bloviating…", "│ ✻ Vibing…").
45
+ *
46
+ * Every match of `/([A-Za-z][A-Za-z'-]*ing)\s*(?:…|\.\.\.)/g`, group 1 only — as
47
+ * a scan, because that regex re-read a long word from each of its letters
48
+ * (CodeQL `js/polynomial-redos`). With `objects`, every match of the object
49
+ * form below. */
50
+ export declare function gerundPhrases(s: string, objects?: boolean): string[];
51
+ /**
52
+ * The stats shape: what `/(?:^|\s)\d+(?:\.\d+)?\s*[smh](?:\s+\d+\s*[sm])*\s+·\s+[↓↑]\s*[\d.,]+\s*[km]?\s+tokens?\s*$/i`
53
+ * answered, without its quadratic retry from every whitespace (CodeQL
54
+ * `js/polynomial-redos`). Two facts make it a split: the `·` it matched is the
55
+ * line's LAST one (nothing after it may hold another), and the `(?:\s+\d+\s*[sm])*`
56
+ * run never decided anything — its last item alone, after whitespace, is already
57
+ * a first item — so one duration before the `·` is the same test.
58
+ */
59
+ export declare function trayStats(line: string): boolean;
30
60
  export interface WorkingLine {
31
61
  /** "Clauding…" — the TUI's own word for what it is doing. */
32
62
  phrase: string;
@@ -27,8 +27,59 @@
27
27
  * ellipsis, and a parenthetical carrying a duration or a token count — which is
28
28
  * what the line has been in every version, hint or no hint.
29
29
  */
30
- /** ANSI escapes, so a scraped line is text and not styling. */
31
- const ANSI = /\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b[PX^_].*?\x1b\\|\x1b\][^\x07]*\x07/g;
30
+ /** ANSI escapes, so a scraped line is text and not styling (`stripAnsi`). */
31
+ const CSI = /\x1b\[[0-9;?]*[ -/]*[@-~]/y;
32
+ const LINE_END = /[\n\r\u2028\u2029]/g;
33
+ /**
34
+ * ANSI escapes removed, exactly as replacing every match of the regex
35
+ * `/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b[PX^_].*?\x1b\\|\x1b\][^\x07]*\x07/g` with ""
36
+ * did, but as a scan. That regex was quadratic on PTY bytes (CodeQL
37
+ * `js/polynomial-redos`): every unterminated `ESC P` / `ESC ]` re-scanned to the
38
+ * end of its line or of the tail. Same removals: a CSI as before (sticky); a
39
+ * DCS/SOS/PM/APC runs to the FIRST `ESC \` after it unless a line terminator
40
+ * (what `.` will not cross) comes first; an OSC runs to the first BEL. The next
41
+ * ST / BEL / line end is looked up once and reused while it still lies ahead,
42
+ * so the whole scan is linear.
43
+ */
44
+ export function stripAnsi(s) {
45
+ let out = "";
46
+ let from = 0;
47
+ // Next index at/after the point last looked up; -1 = none ahead; -2 = not looked up yet.
48
+ let st = -2;
49
+ let bel = -2;
50
+ let eol = -2;
51
+ const ahead = (cached, at, find) => cached === -1 || cached >= at ? cached : find(at);
52
+ for (let i = s.indexOf("\x1b"); i >= 0; i = s.indexOf("\x1b", i)) {
53
+ const c = s[i + 1];
54
+ let end = -1;
55
+ if (c === "[") {
56
+ CSI.lastIndex = i;
57
+ if (CSI.test(s))
58
+ end = CSI.lastIndex;
59
+ }
60
+ else if (c === "P" || c === "X" || c === "^" || c === "_") {
61
+ st = ahead(st, i + 2, (at) => s.indexOf("\x1b\\", at));
62
+ eol = ahead(eol, i + 2, (at) => {
63
+ LINE_END.lastIndex = at;
64
+ return LINE_END.exec(s)?.index ?? -1;
65
+ });
66
+ if (st >= 0 && (eol < 0 || eol > st))
67
+ end = st + 2;
68
+ }
69
+ else if (c === "]") {
70
+ bel = ahead(bel, i + 2, (at) => s.indexOf("\x07", at));
71
+ if (bel >= 0)
72
+ end = bel + 1;
73
+ }
74
+ if (end < 0) {
75
+ i++;
76
+ continue;
77
+ }
78
+ out += s.slice(from, i);
79
+ from = i = end;
80
+ }
81
+ return from === 0 ? s : out + s.slice(from);
82
+ }
32
83
  /** "17s", "9m 20s", "450ms" — the elapsed field of the parenthetical. */
33
84
  const DUR_RE = /^(?:\d+(?:\.\d+)?\s*(?:ms|s|m|h)\s*)+$/i;
34
85
  /** Terminal affordances. The reader is not a terminal and has its own key bar,
@@ -36,8 +87,64 @@ const DUR_RE = /^(?:\d+(?:\.\d+)?\s*(?:ms|s|m|h)\s*)+$/i;
36
87
  const HINT_RE = /\b(?:esc|ctrl\+|shift\+|tab)\b/i;
37
88
  /** The phrase the spinner cycles: always a gerund, always ellipsed. Taken as the
38
89
  * LAST such word on the line because a partial TUI redraw leaves junk in front
39
- * of it ("✽Bloviating…", "│ ✻ Vibing…"). */
40
- const PHRASE_RE = /([A-Za-z][A-Za-z'-]*ing)\s*(?:…|\.\.\.)/g;
90
+ * of it ("✽Bloviating…", "│ ✻ Vibing…").
91
+ *
92
+ * Every match of `/([A-Za-z][A-Za-z'-]*ing)\s*(?:…|\.\.\.)/g`, group 1 only — as
93
+ * a scan, because that regex re-read a long word from each of its letters
94
+ * (CodeQL `js/polynomial-redos`). With `objects`, every match of the object
95
+ * form below. */
96
+ export function gerundPhrases(s, objects = false) {
97
+ const out = [];
98
+ const isWord = (c) => c !== undefined && /[A-Za-z'-]/.test(c);
99
+ const isLetter = (c) => c !== undefined && /[A-Za-z]/.test(c);
100
+ const isSpace = (c) => c !== undefined && /\s/.test(c);
101
+ const wordEnd = (at) => { while (isWord(s[at]))
102
+ at++; return at; };
103
+ /** Index just past `\s*(?:…|\.\.\.)` at `at`, or -1. */
104
+ const ellipsis = (at) => {
105
+ while (isSpace(s[at]))
106
+ at++;
107
+ return s[at] === "…" ? at + 1 : s.startsWith("...", at) ? at + 3 : -1;
108
+ };
109
+ let i = 0;
110
+ while (i < s.length) {
111
+ if (!isWord(s[i])) {
112
+ i++;
113
+ continue;
114
+ }
115
+ // A run of word characters: a match can only start at its first letter and
116
+ // its gerund can only end where the run does — what follows is never a word
117
+ // character.
118
+ const end = wordEnd(i);
119
+ let start = i;
120
+ while (start < end && !isLetter(s[start]))
121
+ start++;
122
+ let next = -1;
123
+ let to = end;
124
+ if (end - start >= 4 && s.endsWith("ing", end)) {
125
+ if (!objects)
126
+ next = ellipsis(end);
127
+ else {
128
+ for (let n = 0; n < 3 && next < 0; n++) {
129
+ let k = to;
130
+ while (isSpace(s[k]))
131
+ k++;
132
+ if (k === to || !isLetter(s[k]))
133
+ break;
134
+ to = wordEnd(k);
135
+ next = ellipsis(to);
136
+ }
137
+ }
138
+ }
139
+ if (next < 0) {
140
+ i = end;
141
+ continue;
142
+ }
143
+ out.push(s.slice(start, to));
144
+ i = next;
145
+ }
146
+ return out;
147
+ }
41
148
  /**
42
149
  * The same shape with an OBJECT between the gerund and the ellipsis —
43
150
  * "Compacting conversation… (35s)", which is what `/compact` prints for however
@@ -49,8 +156,10 @@ const PHRASE_RE = /([A-Za-z][A-Za-z'-]*ing)\s*(?:…|\.\.\.)/g;
49
156
  * inherited CL…" would read as "working on: saving is off" — which is this app
50
157
  * inventing an activity, the failure `workingLine`'s doc names. A measured
51
158
  * parenthetical is what a spinner has and a truncated warning does not.
159
+ *
160
+ * Read by `gerundPhrases(s, true)`: every match of
161
+ * `/([A-Za-z][A-Za-z'-]*ing(?:\s+[A-Za-z][A-Za-z'-]*){1,3})\s*(?:…|\.\.\.)/g`.
52
162
  */
53
- const PHRASE_OBJ_RE = /([A-Za-z][A-Za-z'-]*ing(?:\s+[A-Za-z][A-Za-z'-]*){1,3})\s*(?:…|\.\.\.)/g;
54
163
  /**
55
164
  * **The other measured thing, and for the first half-minute it is the ONLY one.**
56
165
  *
@@ -96,7 +205,20 @@ const PROGRESS_RE = /^[▰▱▬█▓░▒⣿⠿\s]*[▰▱▬█▓░▒⣿
96
205
  * tokens") — the spinner always wraps its stats in parentheses.
97
206
  */
98
207
  const TRAY_ROW_RE = /^\s*[◯◉○●◎⏺]\s+[A-Za-z][\w:-]*\s{2,}\S/;
99
- const TRAY_STATS_RE = /(?:^|\s)\d+(?:\.\d+)?\s*[smh](?:\s+\d+\s*[sm])*\s+·\s+[↓↑]\s*[\d.,]+\s*[km]?\s+tokens?\s*$/i;
208
+ /**
209
+ * The stats shape: what `/(?:^|\s)\d+(?:\.\d+)?\s*[smh](?:\s+\d+\s*[sm])*\s+·\s+[↓↑]\s*[\d.,]+\s*[km]?\s+tokens?\s*$/i`
210
+ * answered, without its quadratic retry from every whitespace (CodeQL
211
+ * `js/polynomial-redos`). Two facts make it a split: the `·` it matched is the
212
+ * line's LAST one (nothing after it may hold another), and the `(?:\s+\d+\s*[sm])*`
213
+ * run never decided anything — its last item alone, after whitespace, is already
214
+ * a first item — so one duration before the `·` is the same test.
215
+ */
216
+ export function trayStats(line) {
217
+ const dot = line.lastIndexOf("·");
218
+ return dot >= 0
219
+ && /(?:^|\s)\d+(?:\.\d+)?\s*[smh]\s+$/i.test(line.slice(0, dot))
220
+ && /^\s+[↓↑]\s*[\d.,]+(?:\s*[km])?\s+tokens?\s*$/i.test(line.slice(dot + 1));
221
+ }
100
222
  /**
101
223
  * The CLI's working line, recovered from recent PTY bytes.
102
224
  *
@@ -111,12 +233,12 @@ const TRAY_STATS_RE = /(?:^|\s)\d+(?:\.\d+)?\s*[smh](?:\s+\d+\s*[sm])*\s+·\s+[
111
233
  export function workingLine(tail) {
112
234
  if (!tail)
113
235
  return null;
114
- const lines = tail.replace(ANSI, "").split(/[\r\n]+/);
236
+ const lines = stripAnsi(tail).split(/[\r\n]+/);
115
237
  const clean = (raw) => (raw ?? "").replace(/[│┃|╭╮╰╯─]/g, " ").replace(/\s+/g, " ").trim();
116
238
  let weak = null;
117
239
  for (let i = lines.length - 1; i >= 0; i--) {
118
240
  // A background agent's tray row is the AGENT working, not the turn.
119
- if (TRAY_ROW_RE.test(lines[i] ?? "") || TRAY_STATS_RE.test(lines[i] ?? ""))
241
+ if (TRAY_ROW_RE.test(lines[i] ?? "") || trayStats(lines[i] ?? ""))
120
242
  continue;
121
243
  const line = clean(lines[i]);
122
244
  if (!line)
@@ -148,18 +270,18 @@ export function workingLine(tail) {
148
270
  const pct = PROGRESS_RE.exec(clean(lines[i + 1]))?.[1] ?? PROGRESS_RE.exec(line.slice(line.search(/[▰▱▬█▓░▒⣿⠿]/) < 0 ? line.length : line.search(/[▰▱▬█▓░▒⣿⠿]/)))?.[1] ?? null;
149
271
  if (pct)
150
272
  extra.push(`${pct}%`);
151
- const phrases = [...head.matchAll(PHRASE_RE)];
273
+ const phrases = gerundPhrases(head);
152
274
  // The gerund-with-an-object form is read ONLY off a line that also carries
153
275
  // something MEASURED — a parenthetical with a duration or a token count, or
154
- // the progress row above. See `PHRASE_OBJ_RE` for why it is never read on
276
+ // the progress row above. See the object form's doc for why it is never read on
155
277
  // its own. It is how `/compact` announces itself, and `/compact` fires no
156
278
  // hook at all, so this line is the only thing that says the CLI is busy for
157
279
  // the minutes it runs.
158
- const objs = phrases.length || !(elapsed || tokens || pct) ? [] : [...head.matchAll(PHRASE_OBJ_RE)];
280
+ const objs = phrases.length || !(elapsed || tokens || pct) ? [] : gerundPhrases(head, true);
159
281
  const hit = phrases[phrases.length - 1] ?? objs[objs.length - 1];
160
282
  if (!hit)
161
283
  continue;
162
- const phrase = `${hit[1]}…`;
284
+ const phrase = `${hit}…`;
163
285
  if (!elapsed && !tokens && !pct) {
164
286
  // A gerund with nothing measured behind it — the first repaint of a turn,
165
287
  // or a redraw that split the line. Worth showing if nothing better turns
@@ -203,6 +325,6 @@ const SCROLL_FOOTER = /\bto scroll\b/i;
203
325
  export function scrollPanelOpen(tail) {
204
326
  if (!tail)
205
327
  return false;
206
- return SCROLL_FOOTER.test(tail.replace(ANSI, "").slice(-PANEL_WINDOW));
328
+ return SCROLL_FOOTER.test(stripAnsi(tail).slice(-PANEL_WINDOW));
207
329
  }
208
330
  //# sourceMappingURL=working.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"working.js","sourceRoot":"","sources":["../src/working.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"working.js","sourceRoot":"","sources":["../src/working.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * A top-level `key: value` line as `[key, value]`, the value untrimmed; null when the line is not
3
+ * one. Answers what `/^(KEY)[ \t]*:(?:[ \t]+(.*))?[ \t]*$/` did (its value only ever read trimmed),
4
+ * but that regex was quadratic on a long tab run ending in a line terminator (CodeQL
5
+ * `js/polynomial-redos`). Same refusals: something other than a space or tab right after the `:`,
6
+ * and any character `.` would not cross — so a CRLF line still is not a key line.
7
+ */
8
+ export declare function keyLine(line: string): [string, string] | null;
9
+ /**
10
+ * A short sentence naming the first frontmatter key whose value is not strict YAML, and why;
11
+ * null when the file has no frontmatter or nothing in it trips these rules.
12
+ */
13
+ export declare function frontmatterYamlProblem(text: string): string | null;
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Whether a file's frontmatter is STRICT YAML — the half of a skill another agent may refuse.
3
+ *
4
+ * Claude Code reads a SKILL.md's `description:` leniently, so an unquoted value containing `: `
5
+ * loads fine there. GitHub Copilot CLI (measured on 1.0.98) parses the same block as strict YAML,
6
+ * reads that `: ` as a second mapping key, and SKIPS the skill: `copilot skill list` printed
7
+ * "mapping values are not allowed in this context" for 18 of this repo's 24 skills, and an agent
8
+ * told to load one got "Skill not found". Nobody noticed, because the agent the repo was written
9
+ * for never complained.
10
+ *
11
+ * Deliberately not a YAML parser: it judges only the top-level `key: value` lines (and the
12
+ * indented lines continuing a plain value), by the handful of rules that decide whether a PLAIN
13
+ * scalar is legal. Quoted, block (`|`/`>`) and flow (`[`/`{`) values are accepted as written,
14
+ * except a quote that never closes on its own line. Null means "nothing found", never "valid".
15
+ */
16
+ import { frontmatterLines } from "./contextweight.js";
17
+ /** A top-level key, bare (`name`) or quoted, up to and including its `:`. */
18
+ const KEY_HEAD = /^([A-Za-z0-9_][\w.-]*|"[^"]*"|'[^']*')[ \t]*:/;
19
+ /**
20
+ * A top-level `key: value` line as `[key, value]`, the value untrimmed; null when the line is not
21
+ * one. Answers what `/^(KEY)[ \t]*:(?:[ \t]+(.*))?[ \t]*$/` did (its value only ever read trimmed),
22
+ * but that regex was quadratic on a long tab run ending in a line terminator (CodeQL
23
+ * `js/polynomial-redos`). Same refusals: something other than a space or tab right after the `:`,
24
+ * and any character `.` would not cross — so a CRLF line still is not a key line.
25
+ */
26
+ export function keyLine(line) {
27
+ const m = KEY_HEAD.exec(line);
28
+ if (!m)
29
+ return null;
30
+ const rest = line.slice(m[0].length);
31
+ if (rest && rest[0] !== " " && rest[0] !== "\t")
32
+ return null;
33
+ if (/[\n\r\u2028\u2029]/.test(rest))
34
+ return null;
35
+ return [m[1], rest];
36
+ }
37
+ /** Characters that may not START a plain YAML scalar. */
38
+ const INDICATOR = /^[-?:,\]}#&*!%@`]/;
39
+ /** Index just past the closing quote of a quoted scalar starting at 0, or -1 when it never closes. */
40
+ function closeQuote(s) {
41
+ const q = s[0];
42
+ for (let i = 1; i < s.length; i++) {
43
+ if (q === '"' && s[i] === "\\") {
44
+ i++;
45
+ continue;
46
+ }
47
+ if (s[i] !== q)
48
+ continue;
49
+ if (q === "'" && s[i + 1] === "'") {
50
+ i++;
51
+ continue;
52
+ } // '' is an escaped ' in single quotes
53
+ return i + 1;
54
+ }
55
+ return -1;
56
+ }
57
+ /** Why a PLAIN (unquoted) value is not strict YAML, or null. */
58
+ function plainProblem(v) {
59
+ if (/: /.test(v) || v.endsWith(":"))
60
+ return `is unquoted and contains ": ", which strict YAML reads as a second key`;
61
+ if (/[ \t]#/.test(v))
62
+ return `is unquoted and contains " #", which strict YAML reads as the start of a comment`;
63
+ return null;
64
+ }
65
+ /**
66
+ * A short sentence naming the first frontmatter key whose value is not strict YAML, and why;
67
+ * null when the file has no frontmatter or nothing in it trips these rules.
68
+ */
69
+ export function frontmatterYamlProblem(text) {
70
+ const lines = frontmatterLines(text);
71
+ if (!lines)
72
+ return null;
73
+ let key = null;
74
+ let plain = false;
75
+ for (const line of lines) {
76
+ if (!line.trim() || /^[ \t]*#/.test(line))
77
+ continue;
78
+ if (/^[ \t]/.test(line)) {
79
+ // A continuation of the previous key's value: a plain one keeps the plain-scalar rules.
80
+ if (key && plain) {
81
+ const why = plainProblem(line.trim());
82
+ if (why)
83
+ return `The \`${key}\` value continues onto a line that ${why.replace(/^is unquoted and /, "")}.`;
84
+ }
85
+ continue;
86
+ }
87
+ const m = keyLine(line);
88
+ if (!m) {
89
+ key = null;
90
+ plain = false;
91
+ continue;
92
+ }
93
+ key = m[0].replace(/^["']|["']$/g, "");
94
+ const v = m[1].trim();
95
+ plain = false;
96
+ if (!v)
97
+ continue;
98
+ const c = v[0];
99
+ if (c === '"' || c === "'") {
100
+ const end = closeQuote(v);
101
+ if (end < 0)
102
+ return `The \`${key}\` value opens a ${c === '"' ? "double" : "single"}-quoted string that does not close on that line.`;
103
+ const after = v.slice(end).trim();
104
+ if (after && !after.startsWith("#"))
105
+ return `The \`${key}\` value has text after its closing quote.`;
106
+ continue;
107
+ }
108
+ if (c === "|" || c === ">" || c === "[" || c === "{")
109
+ continue;
110
+ plain = true;
111
+ if (INDICATOR.test(v))
112
+ return `The \`${key}\` value is unquoted and starts with "${c}", which strict YAML reserves.`;
113
+ const why = plainProblem(v);
114
+ if (why)
115
+ return `The \`${key}\` value ${why}.`;
116
+ }
117
+ return null;
118
+ }
119
+ //# sourceMappingURL=yamlfront.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yamlfront.js","sourceRoot":"","sources":["../src/yamlfront.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "waterplane",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "waterplane",
9
- "version": "0.1.14",
9
+ "version": "0.1.16",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@xterm/headless": "5.5.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waterplane",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "type": "module",
5
5
  "description": "waterplane — phone-native remote control for Claude Code on your PC",
6
6
  "license": "MIT",
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "android-apps",
3
+ "name": "Android apps",
4
+ "version": "0.1.0",
5
+ "apiVersion": "2.5",
6
+ "description": "Your repos' Android apps on this phone: build, download and install each one, and the history of what installed itself where. On by itself when a repo here builds an Android app.",
7
+ "host": "host/index.mts",
8
+ "web": "web/index.ts",
9
+ "optional": true,
10
+ "autoOn": "androidRepo"
11
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * `GET /api/agent/builds?dir=` and `POST /api/agent/builds/run` — an agent runs one of its repo's BUILD BUTTONS,
3
+ * exactly as a tap on the phone would (`BuildManager.run`): same entry, same parameter rules, same refusals.
4
+ *
5
+ * Why it exists: only a button run is collected into `.claude/outbox/` (`artifacts.ts`), recorded and picked up by
6
+ * the auto-download rule — an APK the agent built with `./gradlew` in its own shell stays in `build/` and never
7
+ * reaches the phone (owner, 2026-11-01: "build it and put it on my phone" had no answer short of "tap the button").
8
+ * It grants nothing new: the agent can already run the command itself; this only routes it through the one path
9
+ * whose output reaches a person.
10
+ *
11
+ * Same caller gate as every agent route (`agentCallerRefusal`: loopback, not proxied, not a browser). `key` is
12
+ * required and makes the run once-only (`agent-build-<key>` is the intent id; a retry answers the same run).
13
+ * An entry that is not in the repo's `builds.json` is refused — an agent cannot run a command through this route,
14
+ * only a button the person can see.
15
+ */
16
+ import type { IncomingMessage, ServerResponse } from "node:http";
17
+ import type { BuildConfig, BuildRun } from "@waterplane/shared";
18
+ export interface AgentBuildDeps {
19
+ builds: {
20
+ list(repoDir: string): BuildConfig[];
21
+ run(repoDir: string, buildId: string, given?: Record<string, string>, opts?: {
22
+ origin?: string;
23
+ id?: string;
24
+ }): BuildRun | {
25
+ error: string;
26
+ };
27
+ };
28
+ /** The containment gate on a client-named directory (`wsops.ts`); null = refuse. */
29
+ containRepoDir(dir: unknown): Promise<string | null>;
30
+ /** A repo id (from `/api/repos`) → its worktree, or null. */
31
+ repoDir(id: string): Promise<string | null>;
32
+ json(res: ServerResponse, data: unknown, status?: number): void;
33
+ readJson(req: IncomingMessage): Promise<any>;
34
+ }
35
+ /** The entry as an agent needs it: what to pass, nothing the phone's form state holds. */
36
+ export declare function agentBuildEntry(b: BuildConfig): {
37
+ id: string;
38
+ name: string;
39
+ cmd: string;
40
+ dir?: string;
41
+ params?: {
42
+ id: string;
43
+ options?: string[];
44
+ default?: string;
45
+ }[];
46
+ };
47
+ /** `true` when the request was this route's (answered, or refused). */
48
+ export declare function handleAgentBuilds(req: IncomingMessage, res: ServerResponse, path: string, url: URL, d: AgentBuildDeps): Promise<boolean>;