wicked-crew 0.16.11 → 0.16.13

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 (341) hide show
  1. package/README.md +28 -8
  2. package/dist/api/artifact-outline.d.ts +64 -0
  3. package/dist/api/artifact-outline.d.ts.map +1 -0
  4. package/dist/api/artifact-outline.js +254 -0
  5. package/dist/api/artifact-outline.js.map +1 -0
  6. package/dist/api/beneath.d.ts +76 -0
  7. package/dist/api/beneath.d.ts.map +1 -0
  8. package/dist/api/beneath.js +214 -0
  9. package/dist/api/beneath.js.map +1 -0
  10. package/dist/api/capture.d.ts +2 -2
  11. package/dist/api/chat-citations.d.ts +25 -1
  12. package/dist/api/chat-citations.d.ts.map +1 -1
  13. package/dist/api/chat-citations.js +186 -61
  14. package/dist/api/chat-citations.js.map +1 -1
  15. package/dist/api/chat-context.d.ts +236 -0
  16. package/dist/api/chat-context.d.ts.map +1 -0
  17. package/dist/api/chat-context.js +808 -0
  18. package/dist/api/chat-context.js.map +1 -0
  19. package/dist/api/chat-history.d.ts +20 -0
  20. package/dist/api/chat-history.d.ts.map +1 -1
  21. package/dist/api/chat-history.js +46 -1
  22. package/dist/api/chat-history.js.map +1 -1
  23. package/dist/api/chat-proposals.d.ts +534 -0
  24. package/dist/api/chat-proposals.d.ts.map +1 -0
  25. package/dist/api/chat-proposals.js +1562 -0
  26. package/dist/api/chat-proposals.js.map +1 -0
  27. package/dist/api/chat-scope.d.ts +41 -0
  28. package/dist/api/chat-scope.d.ts.map +1 -1
  29. package/dist/api/chat-scope.js +87 -15
  30. package/dist/api/chat-scope.js.map +1 -1
  31. package/dist/api/chat-transcripts.d.ts +27 -2
  32. package/dist/api/chat-transcripts.d.ts.map +1 -1
  33. package/dist/api/chat-transcripts.js +105 -4
  34. package/dist/api/chat-transcripts.js.map +1 -1
  35. package/dist/api/diagnostics.d.ts +15 -0
  36. package/dist/api/diagnostics.d.ts.map +1 -1
  37. package/dist/api/diagnostics.js +56 -0
  38. package/dist/api/diagnostics.js.map +1 -1
  39. package/dist/api/elicitation-cache.d.ts +13 -0
  40. package/dist/api/elicitation-cache.d.ts.map +1 -1
  41. package/dist/api/elicitation-cache.js +12 -0
  42. package/dist/api/elicitation-cache.js.map +1 -1
  43. package/dist/api/eval-sample.d.ts +12 -12
  44. package/dist/api/frame-guard.d.ts +62 -0
  45. package/dist/api/frame-guard.d.ts.map +1 -0
  46. package/dist/api/frame-guard.js +97 -0
  47. package/dist/api/frame-guard.js.map +1 -0
  48. package/dist/api/governance-steering.d.ts +4 -4
  49. package/dist/api/multiscope.d.ts +3 -0
  50. package/dist/api/multiscope.d.ts.map +1 -1
  51. package/dist/api/multiscope.js +13 -0
  52. package/dist/api/multiscope.js.map +1 -1
  53. package/dist/api/needs.d.ts +6 -0
  54. package/dist/api/needs.d.ts.map +1 -1
  55. package/dist/api/needs.js +31 -4
  56. package/dist/api/needs.js.map +1 -1
  57. package/dist/api/product.d.ts.map +1 -1
  58. package/dist/api/product.js +13 -2
  59. package/dist/api/product.js.map +1 -1
  60. package/dist/api/project-aggregates.d.ts +6 -6
  61. package/dist/api/project-aggregates.d.ts.map +1 -1
  62. package/dist/api/project-aggregates.js +16 -24
  63. package/dist/api/project-aggregates.js.map +1 -1
  64. package/dist/api/requirements.d.ts +261 -6
  65. package/dist/api/requirements.d.ts.map +1 -1
  66. package/dist/api/requirements.js +344 -64
  67. package/dist/api/requirements.js.map +1 -1
  68. package/dist/api/routes.d.ts +156 -4
  69. package/dist/api/routes.d.ts.map +1 -1
  70. package/dist/api/routes.js +851 -78
  71. package/dist/api/routes.js.map +1 -1
  72. package/dist/api/run-brief.d.ts +78 -0
  73. package/dist/api/run-brief.d.ts.map +1 -0
  74. package/dist/api/run-brief.js +318 -0
  75. package/dist/api/run-brief.js.map +1 -0
  76. package/dist/api/run-files.d.ts.map +1 -1
  77. package/dist/api/run-files.js +5 -1
  78. package/dist/api/run-files.js.map +1 -1
  79. package/dist/api/run-timing-index.d.ts +27 -0
  80. package/dist/api/run-timing-index.d.ts.map +1 -1
  81. package/dist/api/run-timing-index.js +65 -0
  82. package/dist/api/run-timing-index.js.map +1 -1
  83. package/dist/api/seat-images.d.ts +102 -0
  84. package/dist/api/seat-images.d.ts.map +1 -0
  85. package/dist/api/seat-images.js +333 -0
  86. package/dist/api/seat-images.js.map +1 -0
  87. package/dist/api/server.d.ts +3 -0
  88. package/dist/api/server.d.ts.map +1 -1
  89. package/dist/api/server.js +265 -2
  90. package/dist/api/server.js.map +1 -1
  91. package/dist/api/steering-landing.d.ts +48 -1
  92. package/dist/api/steering-landing.d.ts.map +1 -1
  93. package/dist/api/steering-landing.js +116 -42
  94. package/dist/api/steering-landing.js.map +1 -1
  95. package/dist/api/system-snapshot.d.ts +51 -2
  96. package/dist/api/system-snapshot.d.ts.map +1 -1
  97. package/dist/api/system-snapshot.js +151 -15
  98. package/dist/api/system-snapshot.js.map +1 -1
  99. package/dist/api/testing.d.ts +4 -4
  100. package/dist/api/testing.js +2 -2
  101. package/dist/api/testing.js.map +1 -1
  102. package/dist/apps/spec.d.ts +3009 -0
  103. package/dist/apps/spec.d.ts.map +1 -0
  104. package/dist/apps/spec.js +870 -0
  105. package/dist/apps/spec.js.map +1 -0
  106. package/dist/campaigns/routes.js +1 -1
  107. package/dist/campaigns/routes.js.map +1 -1
  108. package/dist/cli/index.js +3 -3
  109. package/dist/cli/index.js.map +1 -1
  110. package/dist/core/adapter.d.ts +12 -0
  111. package/dist/core/adapter.d.ts.map +1 -1
  112. package/dist/core/adapter.js +36 -1
  113. package/dist/core/adapter.js.map +1 -1
  114. package/dist/core/deliver-text.d.ts.map +1 -1
  115. package/dist/core/deliver-text.js +22 -10
  116. package/dist/core/deliver-text.js.map +1 -1
  117. package/dist/core/estate-mcp-client.d.ts +7 -1
  118. package/dist/core/estate-mcp-client.d.ts.map +1 -1
  119. package/dist/core/estate-mcp-client.js +10 -2
  120. package/dist/core/estate-mcp-client.js.map +1 -1
  121. package/dist/core/exec.d.ts +12 -0
  122. package/dist/core/exec.d.ts.map +1 -1
  123. package/dist/core/exec.js +23 -0
  124. package/dist/core/exec.js.map +1 -1
  125. package/dist/core/reassign-refusal.d.ts.map +1 -1
  126. package/dist/core/reassign-refusal.js +23 -3
  127. package/dist/core/reassign-refusal.js.map +1 -1
  128. package/dist/core/repoPaths.d.ts +32 -7
  129. package/dist/core/repoPaths.d.ts.map +1 -1
  130. package/dist/core/repoPaths.js +56 -9
  131. package/dist/core/repoPaths.js.map +1 -1
  132. package/dist/core/requirements-graph-setting.d.ts +32 -0
  133. package/dist/core/requirements-graph-setting.d.ts.map +1 -0
  134. package/dist/core/requirements-graph-setting.js +84 -0
  135. package/dist/core/requirements-graph-setting.js.map +1 -0
  136. package/dist/core/run-boot-resume.d.ts +4 -1
  137. package/dist/core/run-boot-resume.d.ts.map +1 -1
  138. package/dist/core/run-boot-resume.js +6 -1
  139. package/dist/core/run-boot-resume.js.map +1 -1
  140. package/dist/core/run-identity.d.ts.map +1 -1
  141. package/dist/core/run-identity.js +6 -0
  142. package/dist/core/run-identity.js.map +1 -1
  143. package/dist/core/types.d.ts +14 -0
  144. package/dist/core/types.d.ts.map +1 -1
  145. package/dist/core/types.js.map +1 -1
  146. package/dist/decisions/chat-recorder.d.ts +14 -3
  147. package/dist/decisions/chat-recorder.d.ts.map +1 -1
  148. package/dist/decisions/chat-recorder.js +54 -9
  149. package/dist/decisions/chat-recorder.js.map +1 -1
  150. package/dist/editors/csp.d.ts +24 -4
  151. package/dist/editors/csp.d.ts.map +1 -1
  152. package/dist/editors/csp.js +35 -8
  153. package/dist/editors/csp.js.map +1 -1
  154. package/dist/editors/registry.d.ts +46 -21
  155. package/dist/editors/registry.d.ts.map +1 -1
  156. package/dist/editors/registry.js +13 -2
  157. package/dist/editors/registry.js.map +1 -1
  158. package/dist/editors/routes.d.ts +4 -1
  159. package/dist/editors/routes.d.ts.map +1 -1
  160. package/dist/editors/routes.js +30 -3
  161. package/dist/editors/routes.js.map +1 -1
  162. package/dist/editors/visuals.d.ts +51 -0
  163. package/dist/editors/visuals.d.ts.map +1 -0
  164. package/dist/editors/visuals.js +164 -0
  165. package/dist/editors/visuals.js.map +1 -0
  166. package/dist/editors/webrtc-guard.d.ts +94 -0
  167. package/dist/editors/webrtc-guard.d.ts.map +1 -0
  168. package/dist/editors/webrtc-guard.js +506 -0
  169. package/dist/editors/webrtc-guard.js.map +1 -0
  170. package/dist/inspect/reading.d.ts +110 -0
  171. package/dist/inspect/reading.d.ts.map +1 -0
  172. package/dist/inspect/reading.js +325 -0
  173. package/dist/inspect/reading.js.map +1 -0
  174. package/dist/inspect/routes.d.ts +14 -0
  175. package/dist/inspect/routes.d.ts.map +1 -0
  176. package/dist/inspect/routes.js +44 -0
  177. package/dist/inspect/routes.js.map +1 -0
  178. package/dist/inspect/service.d.ts +161 -0
  179. package/dist/inspect/service.d.ts.map +1 -0
  180. package/dist/inspect/service.js +466 -0
  181. package/dist/inspect/service.js.map +1 -0
  182. package/dist/interactive/bridge-pool.d.ts +11 -2
  183. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  184. package/dist/interactive/bridge-pool.js +10 -1
  185. package/dist/interactive/bridge-pool.js.map +1 -1
  186. package/dist/interactive/doc-binding.d.ts +156 -0
  187. package/dist/interactive/doc-binding.d.ts.map +1 -0
  188. package/dist/interactive/doc-binding.js +277 -0
  189. package/dist/interactive/doc-binding.js.map +1 -0
  190. package/dist/interactive/doc-delete-routes.d.ts +3 -0
  191. package/dist/interactive/doc-delete-routes.d.ts.map +1 -1
  192. package/dist/interactive/doc-delete-routes.js +4 -0
  193. package/dist/interactive/doc-delete-routes.js.map +1 -1
  194. package/dist/interactive/draft-events.d.ts +89 -3
  195. package/dist/interactive/draft-events.d.ts.map +1 -1
  196. package/dist/interactive/draft-events.js +441 -30
  197. package/dist/interactive/draft-events.js.map +1 -1
  198. package/dist/interactive/draft-skill.d.ts +7 -0
  199. package/dist/interactive/draft-skill.d.ts.map +1 -1
  200. package/dist/interactive/draft-skill.js +10 -3
  201. package/dist/interactive/draft-skill.js.map +1 -1
  202. package/dist/interactive/edit-events.d.ts +2 -0
  203. package/dist/interactive/edit-events.d.ts.map +1 -1
  204. package/dist/interactive/edit-events.js +11 -0
  205. package/dist/interactive/edit-events.js.map +1 -1
  206. package/dist/interactive/proposal-create.d.ts +143 -0
  207. package/dist/interactive/proposal-create.d.ts.map +1 -0
  208. package/dist/interactive/proposal-create.js +318 -0
  209. package/dist/interactive/proposal-create.js.map +1 -0
  210. package/dist/interactive/proxy-routes.d.ts +60 -3
  211. package/dist/interactive/proxy-routes.d.ts.map +1 -1
  212. package/dist/interactive/proxy-routes.js +217 -3
  213. package/dist/interactive/proxy-routes.js.map +1 -1
  214. package/dist/interactive/source-packet.d.ts +126 -0
  215. package/dist/interactive/source-packet.d.ts.map +1 -0
  216. package/dist/interactive/source-packet.js +482 -0
  217. package/dist/interactive/source-packet.js.map +1 -0
  218. package/dist/learnings/estate.d.ts +16 -0
  219. package/dist/learnings/estate.d.ts.map +1 -0
  220. package/dist/learnings/estate.js +68 -0
  221. package/dist/learnings/estate.js.map +1 -0
  222. package/dist/learnings/extract.d.ts +56 -0
  223. package/dist/learnings/extract.d.ts.map +1 -0
  224. package/dist/learnings/extract.js +252 -0
  225. package/dist/learnings/extract.js.map +1 -0
  226. package/dist/learnings/recall.d.ts +43 -0
  227. package/dist/learnings/recall.d.ts.map +1 -0
  228. package/dist/learnings/recall.js +104 -0
  229. package/dist/learnings/recall.js.map +1 -0
  230. package/dist/learnings/service.d.ts +183 -0
  231. package/dist/learnings/service.d.ts.map +1 -0
  232. package/dist/learnings/service.js +571 -0
  233. package/dist/learnings/service.js.map +1 -0
  234. package/dist/mcp/ask-server.d.ts.map +1 -1
  235. package/dist/mcp/ask-server.js +37 -4
  236. package/dist/mcp/ask-server.js.map +1 -1
  237. package/dist/mcp/broker.d.ts +12 -1
  238. package/dist/mcp/broker.d.ts.map +1 -1
  239. package/dist/mcp/broker.js +24 -5
  240. package/dist/mcp/broker.js.map +1 -1
  241. package/dist/mcp/invoke.d.ts +26 -2
  242. package/dist/mcp/invoke.d.ts.map +1 -1
  243. package/dist/mcp/invoke.js +51 -5
  244. package/dist/mcp/invoke.js.map +1 -1
  245. package/dist/persona/routes.d.ts +92 -0
  246. package/dist/persona/routes.d.ts.map +1 -0
  247. package/dist/persona/routes.js +69 -0
  248. package/dist/persona/routes.js.map +1 -0
  249. package/dist/persona/store.d.ts +104 -0
  250. package/dist/persona/store.d.ts.map +1 -0
  251. package/dist/persona/store.js +176 -0
  252. package/dist/persona/store.js.map +1 -0
  253. package/dist/persona/voice.d.ts +4 -0
  254. package/dist/persona/voice.d.ts.map +1 -0
  255. package/dist/persona/voice.js +58 -0
  256. package/dist/persona/voice.js.map +1 -0
  257. package/dist/projects/routes.d.ts +2 -2
  258. package/dist/setup/known.d.ts +56 -0
  259. package/dist/setup/known.d.ts.map +1 -0
  260. package/dist/setup/known.js +159 -0
  261. package/dist/setup/known.js.map +1 -0
  262. package/dist/setup/routes.d.ts +13 -0
  263. package/dist/setup/routes.d.ts.map +1 -0
  264. package/dist/setup/routes.js +20 -0
  265. package/dist/setup/routes.js.map +1 -0
  266. package/dist/standing-orders/history.d.ts +2 -0
  267. package/dist/standing-orders/history.d.ts.map +1 -1
  268. package/dist/standing-orders/history.js +1 -0
  269. package/dist/standing-orders/history.js.map +1 -1
  270. package/dist/studio/assets/WickedSans-Regular-fb698rcD.woff2 +0 -0
  271. package/dist/studio/assets/WickedSans-SemiBold-CD53n1AC.woff2 +0 -0
  272. package/dist/studio/assets/WickedScript-Regular-CY5juO6I.woff2 +0 -0
  273. package/dist/studio/assets/WickedSerif-Regular-mdPEjaVZ.woff2 +0 -0
  274. package/dist/studio/assets/index-BUZ_-Syk.css +32 -0
  275. package/dist/studio/assets/index-u4O_7N-b.js +986 -0
  276. package/dist/studio/editors/wicked-deck/editor.json +6 -1
  277. package/dist/studio/editors/wicked-deck/icon.svg +1 -0
  278. package/dist/studio/editors/wicked-deck/index.html +1 -1
  279. package/dist/studio/editors/wicked-doc/editor.json +6 -1
  280. package/dist/studio/editors/wicked-doc/icon.svg +1 -0
  281. package/dist/studio/editors/wicked-doc/index.html +1 -1
  282. package/dist/studio/editors/wicked-insights/editor.json +6 -1
  283. package/dist/studio/editors/wicked-insights/icon.svg +1 -0
  284. package/dist/studio/editors/wicked-insights/index.html +1 -1
  285. package/dist/studio/editors/wicked-page/editor.json +6 -1
  286. package/dist/studio/editors/wicked-page/icon.svg +1 -0
  287. package/dist/studio/editors/wicked-page/index.html +1 -1
  288. package/dist/studio/editors/wicked-video/editor.json +6 -1
  289. package/dist/studio/editors/wicked-video/icon.svg +1 -0
  290. package/dist/studio/editors/wicked-video/index.html +1 -1
  291. package/dist/studio/index.html +2 -2
  292. package/dist/studio/testid-inventory.json +5155 -2707
  293. package/dist/voice/dashboard.d.ts +376 -0
  294. package/dist/voice/dashboard.d.ts.map +1 -0
  295. package/dist/voice/dashboard.js +92 -0
  296. package/dist/voice/dashboard.js.map +1 -0
  297. package/dist/voice/inject-input.d.ts +51 -0
  298. package/dist/voice/inject-input.d.ts.map +1 -0
  299. package/dist/voice/inject-input.js +126 -0
  300. package/dist/voice/inject-input.js.map +1 -0
  301. package/dist/voice/routes.d.ts +41 -0
  302. package/dist/voice/routes.d.ts.map +1 -0
  303. package/dist/voice/routes.js +116 -0
  304. package/dist/voice/routes.js.map +1 -0
  305. package/dist/voice/service.d.ts +177 -0
  306. package/dist/voice/service.d.ts.map +1 -0
  307. package/dist/voice/service.js +400 -0
  308. package/dist/voice/service.js.map +1 -0
  309. package/dist/workflow-catalog/build.d.ts +35 -0
  310. package/dist/workflow-catalog/build.d.ts.map +1 -0
  311. package/dist/workflow-catalog/build.js +229 -0
  312. package/dist/workflow-catalog/build.js.map +1 -0
  313. package/dist/workflow-catalog/catalog-data.d.ts +36 -0
  314. package/dist/workflow-catalog/catalog-data.d.ts.map +1 -0
  315. package/dist/workflow-catalog/catalog-data.js +430 -0
  316. package/dist/workflow-catalog/catalog-data.js.map +1 -0
  317. package/dist/working-doc/event-lines.d.ts +76 -0
  318. package/dist/working-doc/event-lines.d.ts.map +1 -0
  319. package/dist/working-doc/event-lines.js +247 -0
  320. package/dist/working-doc/event-lines.js.map +1 -0
  321. package/dist/working-doc/routes.d.ts +1 -1
  322. package/dist/working-doc/routes.d.ts.map +1 -1
  323. package/dist/working-doc/routes.js +2 -1
  324. package/dist/working-doc/routes.js.map +1 -1
  325. package/dist/working-doc/sections.d.ts +3 -1
  326. package/dist/working-doc/sections.d.ts.map +1 -1
  327. package/dist/working-doc/sections.js +4 -2
  328. package/dist/working-doc/sections.js.map +1 -1
  329. package/dist/working-doc/service.d.ts +66 -1
  330. package/dist/working-doc/service.d.ts.map +1 -1
  331. package/dist/working-doc/service.js +298 -22
  332. package/dist/working-doc/service.js.map +1 -1
  333. package/dist/working-doc/store.d.ts +8 -2
  334. package/dist/working-doc/store.d.ts.map +1 -1
  335. package/dist/working-doc/store.js.map +1 -1
  336. package/endpoint-manifest.json +205 -2
  337. package/package.json +5 -4
  338. package/workflows/distill-learnings.json +27 -0
  339. package/workflows/inspect-unit.json +27 -0
  340. package/dist/studio/assets/index-B-f_VEL2.css +0 -32
  341. package/dist/studio/assets/index-DhkxIK-0.js +0 -845
@@ -0,0 +1,506 @@
1
+ /**
2
+ * No WebRTC in an editor frame.
3
+ *
4
+ * An editor bundle's policy says `connect-src 'none'` (`csp.ts`), which stops fetch, XHR, WebSocket, EventSource and
5
+ * beacons, but no browser applies `connect-src` to WebRTC. A script in the frame could open an `RTCPeerConnection` with
6
+ * a STUN or TURN server of its choosing, and ICE then sends UDP there (Chromium ignores `webrtc 'block'`). A third-party
7
+ * editor could carry what it reads out of the artifact that way.
8
+ *
9
+ * So crew puts {@link WEBRTC_PRELUDE} at the start of every inline script of every bundle it serves (after the
10
+ * script's hashbang and its directive prologue: those are inert, and moving them would turn strict mode off; a
11
+ * directive ended by automatic semicolon insertion is kept too, with crew's own `;` before the prelude). The
12
+ * prelude defines each WebRTC global as a non-writable, non-configurable `undefined` before any of the editor's own
13
+ * statements run. It has no `try`: if it cannot do that it throws, and the rest of that script never runs. It names no
14
+ * global a script can shadow and calls nothing a script can define first. A module's own `function window(){}` is
15
+ * bound before its first statement runs, so the prelude checks that `window` really is the window. It takes `Object`
16
+ * from an object literal, and its failure path throws a string (not `new TypeError`, which a hoisted declaration
17
+ * could replace).
18
+ *
19
+ * For a third-party editor, the bundle's `script-src` is then exactly the hashes {@link guardBundle} returns, with no
20
+ * `'unsafe-inline'`. A new JavaScript realm could otherwise bring the constructors back: a `srcdoc` child, a
21
+ * `javascript:` URL, or a `blob:`/`data:` document the frame navigates itself to. Every one of those documents inherits
22
+ * the bundle's policy, so the only scripts that can run in them are copies of crew's prefixed scripts, and the prelude
23
+ * runs first there too. `javascript:` URLs, inline event handlers and new script text are refused.
24
+ *
25
+ * The scanner below finds inline scripts the way an HTML parser does, closely enough for real bundles. For a
26
+ * third-party bundle its accuracy is not what keeps the guard sound: every hash crew issues is of text that crew itself
27
+ * built with the prelude first (after an inert prologue). A script the scanner misreads gets a hash the browser doesn't
28
+ * compute, so it doesn't run. The editor breaks visibly, and nothing runs without the prelude. A first-party bundle
29
+ * keeps `'unsafe-inline'` (it is studio's own code), so there the prelude is only where the scanner finds a script.
30
+ *
31
+ * Every script gains the prelude and a hash in one response header, so a third-party bundle may hold at most
32
+ * {@link MAX_INLINE_SCRIPTS} inline scripts; past that crew refuses to serve it, with the reason.
33
+ */
34
+ import { createHash } from 'node:crypto';
35
+ /** The WebRTC globals Chromium, Firefox and Safari expose, by name. The prelude also takes any other `RTC*`/`webkitRTC*`
36
+ * global the browser has, so a new interface is covered without a crew release. */
37
+ export const WEBRTC_GLOBALS = [
38
+ 'RTCPeerConnection',
39
+ 'webkitRTCPeerConnection',
40
+ 'mozRTCPeerConnection',
41
+ 'RTCDataChannel',
42
+ 'RTCIceTransport',
43
+ 'RTCDtlsTransport',
44
+ 'RTCSctpTransport',
45
+ 'RTCRtpSender',
46
+ 'RTCRtpReceiver',
47
+ 'RTCRtpTransceiver',
48
+ 'RTCIceCandidate',
49
+ 'RTCSessionDescription',
50
+ 'RTCCertificate',
51
+ ];
52
+ /** The prelude's one failure message (thrown as a string: see the module comment). */
53
+ export const WEBRTC_PRELUDE_REFUSAL = 'WebRTC is not available in an editor frame';
54
+ /**
55
+ * The prelude: one line of ES5, ending in a newline so the editor's own first line stays its own statement. It holds no
56
+ * `<` at all, so it can never end, open or escape the `<script>` it sits in. `w` must be the window itself (a module's
57
+ * hoisted `function window(){}` is a function, a `var window` is undefined, a `let`/`class` is not yet initialized).
58
+ * It takes the listed names always, and any other `RTC*`/`webkitRTC*`/`mozRTC*` global the browser defines (an
59
+ * interface object is configurable; a script's own `var RTCConfig` is not, and is left alone).
60
+ */
61
+ export const WEBRTC_PRELUDE = '(function(w,o){if(typeof w!=="object"||w===null||w.window!==w)throw ' + JSON.stringify(WEBRTC_PRELUDE_REFUSAL) + ';var n=' +
62
+ JSON.stringify(WEBRTC_GLOBALS) +
63
+ ',k=o.getOwnPropertyNames(w),i,d;for(i=0;i!==k.length;i++)if(/^(webkit|moz)?RTC/.test(k[i])&&(d=o.getOwnPropertyDescriptor(w,k[i]))&&d.configurable)n.push(k[i]);' +
64
+ 'for(i=0;i!==n.length;i++){o.defineProperty(w,n[i],{value:void 0,writable:false,configurable:false});' +
65
+ 'if(w[n[i]]!==void 0)throw ' + JSON.stringify(WEBRTC_PRELUDE_REFUSAL) + '}})(window,({}).constructor);\n';
66
+ /** The most inline scripts a third-party bundle may hold: each gains the prelude and is one hash in the policy header. */
67
+ export const MAX_INLINE_SCRIPTS = 200;
68
+ const LINE_END = /[\n\r\u2028\u2029]/;
69
+ const SPACE = /\s/;
70
+ const IDENTIFIER_PART = /[\w$\\\u0080-\uFFFF]/; // `\` too: an identifier may be written with escapes
71
+ /**
72
+ * Whether a directive with no `;` ends before `text[i]` by automatic semicolon insertion: a line ended after it, and
73
+ * what follows cannot continue the expression (end of text, a statement-starting word other than `in`/`instanceof`, a
74
+ * number, a string, a block, a unary `!` or `~`, or `++`/`--`, which may not follow a line end). Any binary operator,
75
+ * bracket, dot or template continues it, so it does not count.
76
+ */
77
+ function endsByAsi(text, i) {
78
+ if (i >= text.length)
79
+ return true;
80
+ const c = text[i];
81
+ if (c === '"' || c === "'" || c === '{' || c === '~' || /[0-9]/.test(c))
82
+ return true;
83
+ if (c === '!')
84
+ return text[i + 1] !== '=';
85
+ // `.5` is a number, and `\u0074op` an identifier written with an escape (an escaped `in` is no keyword).
86
+ if (c === '.')
87
+ return /[0-9]/.test(text[i + 1] ?? '');
88
+ if (c === '\\')
89
+ return true;
90
+ if (c === '+' || c === '-')
91
+ return text[i + 1] === c;
92
+ if (!IDENTIFIER_PART.test(c))
93
+ return false;
94
+ let j = i;
95
+ while (j < text.length && IDENTIFIER_PART.test(text[j]) && !SPACE.test(text[j]))
96
+ j++; // NBSP, LS... end a name
97
+ const word = text.slice(i, j);
98
+ return word !== 'in' && word !== 'instanceof';
99
+ }
100
+ /**
101
+ * Where the prelude goes in a script's text, read the way a JavaScript lexer reads it: past a hashbang line and a
102
+ * directive prologue (string-literal statements, each ended by its own `;` or by automatic semicolon insertion), with
103
+ * whitespace and comments between. No regular expression does this: a backtracking pattern can be made to end a
104
+ * comment early or late. Here a block comment ends at its first `*\/` and a line comment at the end of its line, exactly
105
+ * as in JavaScript, so nothing before the place found is code. `semicolon` says the last directive ended by insertion,
106
+ * so the prelude must be written after a `;` of its own.
107
+ */
108
+ export function prologueEnd(text) {
109
+ const n = text.length;
110
+ let i = 0;
111
+ let at = 0;
112
+ let afterHashbang = false;
113
+ let semicolon = false;
114
+ if (text.startsWith('#!')) {
115
+ while (i < n && !LINE_END.test(text[i]))
116
+ i++;
117
+ at = i;
118
+ afterHashbang = true;
119
+ }
120
+ let crossed = false;
121
+ // At the start of a line (only whitespace and comments since the last line end): where a classic script's `-->`
122
+ // opens a line comment.
123
+ let lineStart = true;
124
+ // HTML-like comments (`<!--`, a line-leading `-->`) are comments only in a classic script. In a module, after an
125
+ // operand, `<!--x` is `< !--x`: code. So they are taken only before the first directive, where in a module they can
126
+ // only be a syntax error (nothing runs) and in a classic script they are comments. This must not depend on whether
127
+ // the script is classic or a module: a hash does not bind the type, so the same prefixed text can be run as either
128
+ // (a classic script copied into a child as a module), and what stands before the prelude must be inert under both.
129
+ let beforeDirectives = true;
130
+ /** Past whitespace and whole comments (noting a line end); false at a block comment that never closes. */
131
+ const skip = () => {
132
+ for (;;) {
133
+ while (i < n && SPACE.test(text[i])) {
134
+ if (LINE_END.test(text[i])) {
135
+ crossed = true;
136
+ lineStart = true;
137
+ }
138
+ i++;
139
+ }
140
+ if (beforeDirectives && lineStart && text.startsWith('-->', i)) {
141
+ while (i < n && !LINE_END.test(text[i]))
142
+ i++;
143
+ continue;
144
+ }
145
+ if (text.startsWith('/*', i)) {
146
+ const close = text.indexOf('*/', i + 2);
147
+ if (close < 0)
148
+ return false;
149
+ if (LINE_END.test(text.slice(i, close))) {
150
+ crossed = true;
151
+ lineStart = true;
152
+ }
153
+ i = close + 2;
154
+ }
155
+ else if (text.startsWith('//', i) || (beforeDirectives && text.startsWith('<!--', i))) {
156
+ // `<!--` opens a comment to the end of its line in a classic script (it is a syntax error in a module).
157
+ while (i < n && !LINE_END.test(text[i]))
158
+ i++;
159
+ }
160
+ else {
161
+ return true;
162
+ }
163
+ }
164
+ };
165
+ while (skip()) {
166
+ const quote = text[i];
167
+ if (quote !== '"' && quote !== "'")
168
+ break;
169
+ beforeDirectives = false;
170
+ let j = i + 1;
171
+ let closed = false;
172
+ while (j < n) {
173
+ const c = text[j];
174
+ if (c === '\\') {
175
+ j += 2;
176
+ continue;
177
+ }
178
+ if (c === quote) {
179
+ closed = true;
180
+ j += 1;
181
+ break;
182
+ }
183
+ if (c === '\n' || c === '\r')
184
+ break;
185
+ j += 1;
186
+ }
187
+ if (!closed)
188
+ break;
189
+ lineStart = false;
190
+ const end = j;
191
+ i = j;
192
+ crossed = false;
193
+ if (!skip())
194
+ break;
195
+ if (text[i] === ';') {
196
+ i += 1;
197
+ lineStart = false;
198
+ at = i;
199
+ semicolon = false;
200
+ }
201
+ else if (text.startsWith('<!--', i)) {
202
+ // A comment in a classic script, code in a module (`"a" < !--x`): end the directive here with crew's own `;`
203
+ // and stop, so the prelude stands before this text either way (a module then fails on it; a classic script keeps
204
+ // its strict mode).
205
+ at = end;
206
+ semicolon = true;
207
+ afterHashbang = false;
208
+ break;
209
+ }
210
+ else if ((crossed || i >= n) && endsByAsi(text, i)) {
211
+ at = end;
212
+ semicolon = true;
213
+ }
214
+ else {
215
+ break;
216
+ }
217
+ afterHashbang = false;
218
+ }
219
+ return { at, afterHashbang, semicolon };
220
+ }
221
+ /** `text` with the prelude before its first statement (see {@link prologueEnd}): after a `;` of its own when the last
222
+ * directive ended by insertion, and on its own line after a lone hashbang. */
223
+ export function withPrelude(text) {
224
+ const { at, afterHashbang, semicolon } = prologueEnd(text);
225
+ return text.slice(0, at) + (semicolon ? ';' : '') + (afterHashbang ? '\n' : '') + WEBRTC_PRELUDE + text.slice(at);
226
+ }
227
+ /** The essences HTML runs as a classic script (HTML "JavaScript MIME type essence match"). */
228
+ const JS_TYPES = new Set([
229
+ 'application/ecmascript', 'application/javascript', 'application/x-ecmascript', 'application/x-javascript',
230
+ 'text/ecmascript', 'text/javascript', 'text/javascript1.0', 'text/javascript1.1', 'text/javascript1.2',
231
+ 'text/javascript1.3', 'text/javascript1.4', 'text/javascript1.5', 'text/jscript', 'text/livescript',
232
+ 'text/x-ecmascript', 'text/x-javascript',
233
+ ]);
234
+ /** Elements whose content is text up to their own end tag (scripting is on in the frame, so `noscript` is one). */
235
+ const RAW_TEXT = new Set(['style', 'xmp', 'iframe', 'noembed', 'noframes', 'noscript', 'textarea', 'title']);
236
+ const WS = /[\t\n\f\r ]/;
237
+ const TAG_END = /[\t\n\f\r />]/;
238
+ const NAMED_REFS = { amp: '&', lt: '<', gt: '>', quot: '"', apos: "'", sol: '/', period: '.', plus: '+', lowbar: '_', colon: ':', semi: ';', comma: ',', Tab: '\t', NewLine: '\n' };
239
+ /** An attribute value as the parser hands it on: numeric character references, and the named ones a script type can
240
+ * use. One it does not know stays as written, so the script reads as a data block and is refused, never run unguarded. */
241
+ export function decodeAttribute(v) {
242
+ return v
243
+ .replace(/&#(?:[xX]([0-9a-fA-F]+)|([0-9]+));?/g, (_m, hex, dec) => {
244
+ const cp = hex !== undefined ? parseInt(hex, 16) : parseInt(dec, 10);
245
+ return cp > 0 && cp <= 0x10ffff && !(cp >= 0xd800 && cp <= 0xdfff) ? String.fromCodePoint(cp) : '\uFFFD';
246
+ })
247
+ .replace(/&([A-Za-z]+);/g, (m, name) => NAMED_REFS[name] ?? m);
248
+ }
249
+ /** Whether `<script …>` with these attributes runs its text as a classic or module script (HTML "prepare the script
250
+ * element"); a `src` makes it external (`href` or `xlink:href` for an SVG script), and an unknown type makes it a
251
+ * data block. */
252
+ function runsInline(attrs, svg) {
253
+ if (svg ? attrs.has('href') || attrs.has('xlink:href') : attrs.has('src'))
254
+ return false;
255
+ const language = svg ? undefined : attrs.get('language'); // `language` is HTML's legacy fallback, not SVG's
256
+ const raw = attrs.has('type') ? attrs.get('type') : language !== undefined && language !== '' ? `text/${language}` : '';
257
+ if (raw === '')
258
+ return true;
259
+ // A JavaScript MIME type is matched with surrounding whitespace stripped; `module` exactly as written (Chromium).
260
+ if (raw.toLowerCase() === 'module')
261
+ return true;
262
+ return JS_TYPES.has(raw.replace(/^[\t\n\f\r ]+|[\t\n\f\r ]+$/g, '').toLowerCase());
263
+ }
264
+ /**
265
+ * The inline scripts of `html` (already newline-normalized), in document order. A tokenizer cut down to what decides
266
+ * where a script's text is: comments, doctypes and bogus comments, quoted attribute values, raw-text elements, and
267
+ * the script-data escape states (`<!--`, `<script`, `-->` inside a script).
268
+ */
269
+ export function inlineScripts(html) {
270
+ const s = html;
271
+ const n = s.length;
272
+ const out = [];
273
+ const at = (p, word) => s.slice(p, p + word.length).toLowerCase() === word;
274
+ const delimited = (p) => p < n && TAG_END.test(s[p]);
275
+ /** Attributes from `p` (just after the tag name) to the tag's `>`; `end` is past the `>`, or -1 at end of file. */
276
+ const attributes = (p) => {
277
+ const attrs = new Map();
278
+ let j = p;
279
+ while (j < n) {
280
+ const from = j;
281
+ while (j < n && (WS.test(s[j]) || s[j] === '/'))
282
+ j++;
283
+ if (j >= n)
284
+ break;
285
+ // Self-closing is a `/` between attributes right before `>`, never the last character of an unquoted value.
286
+ if (s[j] === '>')
287
+ return { end: j + 1, attrs, selfClosing: j > from && s[j - 1] === '/' };
288
+ let k = j + 1; // a name may start with `=`
289
+ while (k < n && !TAG_END.test(s[k]) && s[k] !== '=')
290
+ k++;
291
+ const name = s.slice(j, k).toLowerCase();
292
+ let m = k;
293
+ while (m < n && WS.test(s[m]))
294
+ m++;
295
+ let value = '';
296
+ if (s[m] === '=') {
297
+ m++;
298
+ while (m < n && WS.test(s[m]))
299
+ m++;
300
+ const q = s[m];
301
+ if (q === '"' || q === "'") {
302
+ const close = s.indexOf(q, m + 1);
303
+ if (close < 0)
304
+ return { end: -1, attrs, selfClosing: false };
305
+ value = s.slice(m + 1, close);
306
+ j = close + 1;
307
+ }
308
+ else {
309
+ let e = m;
310
+ while (e < n && !WS.test(s[e]) && s[e] !== '>')
311
+ e++;
312
+ value = s.slice(m, e);
313
+ j = e;
314
+ }
315
+ }
316
+ else {
317
+ j = m;
318
+ }
319
+ if (!attrs.has(name))
320
+ attrs.set(name, decodeAttribute(value));
321
+ }
322
+ return { end: -1, attrs, selfClosing: false };
323
+ };
324
+ /** Where a script's text ends (the `<` of its end tag, or end of file), from `p` just after its start tag. */
325
+ // The next `-->`, `--!>` from where the scan is: found once and kept while it is still ahead, so a long run of `<`
326
+ // after an open `<!--` costs one search, not one per `<` (the scan stays linear in the bundle's size).
327
+ const ahead = { close: -2, bang: -2 };
328
+ const nextFrom = (key, needle, from) => {
329
+ if (ahead[key] === -2 || (ahead[key] !== -1 && ahead[key] < from))
330
+ ahead[key] = s.indexOf(needle, from);
331
+ return ahead[key];
332
+ };
333
+ const scriptTextEnd = (p) => {
334
+ let state = 'data';
335
+ let i = p;
336
+ while (i < n) {
337
+ if (state === 'data') {
338
+ const lt = s.indexOf('<', i);
339
+ if (lt < 0)
340
+ return n;
341
+ if (at(lt, '</script') && delimited(lt + 8))
342
+ return lt;
343
+ if (at(lt, '<!--')) {
344
+ state = 'escaped';
345
+ i = lt + 2;
346
+ continue;
347
+ } // `<!-->` closes again at once
348
+ i = lt + 1;
349
+ continue;
350
+ }
351
+ const lt = s.indexOf('<', i);
352
+ const close = nextFrom('close', '-->', i);
353
+ if (close >= 0 && (lt < 0 || close < lt)) {
354
+ state = 'data';
355
+ i = close + 3;
356
+ continue;
357
+ }
358
+ if (lt < 0)
359
+ return n;
360
+ if (at(lt, '</script') && delimited(lt + 8)) {
361
+ if (state === 'escaped')
362
+ return lt;
363
+ state = 'escaped';
364
+ i = lt + 8;
365
+ continue;
366
+ }
367
+ if (state === 'escaped' && at(lt, '<script') && delimited(lt + 7)) {
368
+ state = 'double';
369
+ i = lt + 7;
370
+ continue;
371
+ }
372
+ i = lt + 1;
373
+ }
374
+ return n;
375
+ };
376
+ // Inside <svg> or <math> (foreign content) `style`, `title` and the like are ordinary elements, not raw text, and a
377
+ // self-closing `<script/>` is empty.
378
+ let foreign = 0;
379
+ let i = 0;
380
+ while (i < n) {
381
+ const lt = s.indexOf('<', i);
382
+ if (lt < 0)
383
+ break;
384
+ const c = s[lt + 1] ?? '';
385
+ if (at(lt, '<!--')) {
386
+ if (s[lt + 4] === '>') {
387
+ i = lt + 5;
388
+ continue;
389
+ }
390
+ if (s.startsWith('->', lt + 4)) {
391
+ i = lt + 6;
392
+ continue;
393
+ }
394
+ const a = nextFrom('close', '-->', lt + 4);
395
+ const b = nextFrom('bang', '--!>', lt + 4);
396
+ const end = a < 0 ? (b < 0 ? -1 : b + 4) : b < 0 || a < b ? a + 3 : b + 4;
397
+ if (end < 0)
398
+ break;
399
+ i = end;
400
+ continue;
401
+ }
402
+ if (c === '!' || c === '?') {
403
+ const end = s.indexOf('>', lt + 2);
404
+ if (end < 0)
405
+ break;
406
+ i = end + 1;
407
+ continue;
408
+ }
409
+ if (c === '/') {
410
+ if (!/[A-Za-z]/.test(s[lt + 2] ?? '')) {
411
+ const end = s.indexOf('>', lt + 2); // `</>` is nothing; `</ x>` a bogus comment
412
+ if (end < 0)
413
+ break;
414
+ i = end + 1;
415
+ continue;
416
+ }
417
+ let k = lt + 2;
418
+ while (k < n && !TAG_END.test(s[k]))
419
+ k++;
420
+ const closing = s.slice(lt + 2, k).toLowerCase();
421
+ if (foreign > 0 && (closing === 'svg' || closing === 'math'))
422
+ foreign--;
423
+ const { end } = attributes(k);
424
+ if (end < 0)
425
+ break;
426
+ i = end;
427
+ continue;
428
+ }
429
+ if (!/[A-Za-z]/.test(c)) {
430
+ i = lt + 1;
431
+ continue;
432
+ }
433
+ let k = lt + 1;
434
+ while (k < n && !TAG_END.test(s[k]))
435
+ k++;
436
+ const name = s.slice(lt + 1, k).toLowerCase();
437
+ const { end, attrs, selfClosing } = attributes(k);
438
+ if (end < 0)
439
+ break; // end of file inside a tag: the parser drops it
440
+ if ((name === 'svg' || name === 'math') && !selfClosing) {
441
+ foreign++;
442
+ i = end;
443
+ continue;
444
+ }
445
+ if (name === 'script' && foreign > 0 && selfClosing) {
446
+ i = end;
447
+ continue;
448
+ }
449
+ if (name === 'script') {
450
+ const textEnd = scriptTextEnd(end);
451
+ out.push({ start: end, end: textEnd, runs: runsInline(attrs, foreign > 0) });
452
+ if (textEnd >= n)
453
+ break;
454
+ const after = attributes(textEnd + 8);
455
+ if (after.end < 0)
456
+ break;
457
+ i = after.end;
458
+ continue;
459
+ }
460
+ if (RAW_TEXT.has(name) && foreign === 0) {
461
+ let j = end;
462
+ for (;;) {
463
+ const close = s.indexOf('</', j);
464
+ if (close < 0) {
465
+ j = n;
466
+ break;
467
+ }
468
+ if (at(close + 2, name) && delimited(close + 2 + name.length)) {
469
+ j = close;
470
+ break;
471
+ }
472
+ j = close + 2;
473
+ }
474
+ i = j;
475
+ continue;
476
+ }
477
+ if (name === 'plaintext')
478
+ break;
479
+ i = end;
480
+ }
481
+ return out;
482
+ }
483
+ /**
484
+ * The bundle as crew serves it: the prelude first in every inline script that runs, and those scripts' hashes.
485
+ * Newlines are normalized first (the HTML parser turns CRLF and CR into LF before anything else, so the DOM is the same
486
+ * and a script's text is what crew hashes). A NUL in a script's text reaches the parser as U+FFFD, so crew writes it so.
487
+ */
488
+ export function guardBundle(bytes, maxScripts = Number.POSITIVE_INFINITY) {
489
+ const html = bytes.toString('utf8').replace(/\r\n?/g, '\n');
490
+ const scripts = inlineScripts(html).filter((x) => x.runs);
491
+ // Counted before anything is built: each script gains the prelude, so many small ones would multiply the body.
492
+ if (scripts.length > maxScripts)
493
+ return { body: Buffer.alloc(0), scriptHashes: [], tooMany: scripts.length };
494
+ const parts = [];
495
+ const scriptHashes = [];
496
+ let last = 0;
497
+ for (const script of scripts) {
498
+ const text = withPrelude(html.slice(script.start, script.end).replace(/\0/g, '\uFFFD'));
499
+ parts.push(html.slice(last, script.start), text);
500
+ last = script.end;
501
+ scriptHashes.push(createHash('sha256').update(text, 'utf8').digest('base64'));
502
+ }
503
+ parts.push(html.slice(last));
504
+ return { body: Buffer.from(parts.join(''), 'utf8'), scriptHashes };
505
+ }
506
+ //# sourceMappingURL=webrtc-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webrtc-guard.js","sourceRoot":"","sources":["../../src/editors/webrtc-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * CREW'S OWN READING of a working step (operator 2026-10-30: "if it's been running long you can have an agent analyze
3
+ * right there, to make sure no tokens are wasted and no problems are occurring"). Pure and deterministic: the unit's
4
+ * newest attempt, read off its recorded frames, and nothing else.
5
+ *
6
+ * What it reads (the run's own log, `GET /runs/:id/events`):
7
+ * - `toolActivity` (core#1207): each tool call, started and finished, with its target; a `working` frame is a quiet
8
+ * seat's heartbeat and is not a call;
9
+ * - `powerActivity`: power mode's edits and commits, read off git;
10
+ * - `unitOutputDelta`: what the seat said;
11
+ * - `usageProgress` (live) and `cliUsage` (at the attempt's end): its tokens.
12
+ *
13
+ * What it says, in this order (the first that holds):
14
+ * - **stuck**: a call open for {@link STUCK_OPEN_CALL_MS} (a hung process), or nothing at all for
15
+ * {@link STUCK_QUIET_MS} (no call, no words, no tokens);
16
+ * - **looping**: the same call (tool + target) {@link LOOP_SAME_CALL} times, the same failing command
17
+ * {@link LOOP_FAILING_RERUN} times, or the same file edited {@link LOOP_SAME_FILE_EDITS} times; with the evidence;
18
+ * - **wasteful**: {@link WASTE_TOKENS} tokens or more since its last new words or edit, at least
19
+ * {@link WASTE_MIN_MS} ago;
20
+ * - else **progressing**.
21
+ *
22
+ * The seat that checks on a step (service.ts) gets this reading and the step's recent frames; this reading stands on
23
+ * its own when no such seat can answer.
24
+ */
25
+ export type InspectVerdict = 'progressing' | 'looping' | 'stuck' | 'wasteful';
26
+ export type InspectAction = 'let_run' | 'steer' | 'stop';
27
+ /** A call open this long is a hung process. */
28
+ export declare const STUCK_OPEN_CALL_MS: number;
29
+ /** Nothing at all this long (no call, no words, no tokens): stuck. */
30
+ export declare const STUCK_QUIET_MS: number;
31
+ /** The same call (tool + target) this many times: a loop. */
32
+ export declare const LOOP_SAME_CALL = 4;
33
+ /** The same command failing this many times: a loop. */
34
+ export declare const LOOP_FAILING_RERUN = 3;
35
+ /** The same file edited this many times: a loop. */
36
+ export declare const LOOP_SAME_FILE_EDITS = 6;
37
+ /** Tokens spent since the last new words or edit that read as waste... */
38
+ export declare const WASTE_TOKENS = 400000;
39
+ /** A usage total sent this soon after an output still belongs to the turn that made it (the engine sends at most one
40
+ * per 3 s, after the message that carried the output). */
41
+ export declare const USAGE_SETTLE_MS = 5000;
42
+ /** ...when that last new output is at least this old. */
43
+ export declare const WASTE_MIN_MS: number;
44
+ type Frame = Record<string, unknown>;
45
+ export interface ReadingCall {
46
+ tool: string;
47
+ kind: string;
48
+ target: string | null;
49
+ at: number | null;
50
+ ok: boolean | null;
51
+ durationMs: number | null;
52
+ open: boolean;
53
+ }
54
+ export interface ReadingUsage {
55
+ inputTokens: number;
56
+ outputTokens: number;
57
+ costUsd: number | null;
58
+ /** `live` (a `usageProgress` total while it works) or `final` (the attempt's `cliUsage`). */
59
+ source: 'live' | 'final';
60
+ }
61
+ export interface UnitReading {
62
+ ord: number;
63
+ attempt: number;
64
+ /** When the attempt was dispatched (unix ms), null when the log has no dispatch for it. */
65
+ startedAt: number | null;
66
+ elapsedMs: number | null;
67
+ calls: number;
68
+ openCalls: Array<{
69
+ tool: string;
70
+ target: string | null;
71
+ forMs: number;
72
+ }>;
73
+ /** `read 4 · search 2 · run 3 · test 1 · edit 2`. */
74
+ byKind: Record<string, number>;
75
+ /** Files edited or written, with how often. */
76
+ edits: Array<{
77
+ path: string;
78
+ count: number;
79
+ }>;
80
+ /** Words said: deltas and characters. */
81
+ said: {
82
+ deltas: number;
83
+ chars: number;
84
+ lastAt: number | null;
85
+ newest: string | null;
86
+ };
87
+ usage: ReadingUsage | null;
88
+ /** The newest frame of any kind but a heartbeat (unix ms). */
89
+ lastSignAt: number | null;
90
+ verdict: InspectVerdict;
91
+ /** One line per piece of evidence, in plain words ("Ran `npm test` 5 times, 4 failed"). */
92
+ evidence: string[];
93
+ /** What it is doing now, in one line ("Running `npm test -- jpy`", "Edited src/a.ts"). */
94
+ doing: string | null;
95
+ action: InspectAction;
96
+ /** The note crew would suggest sending the seat (`action: steer`), else null. */
97
+ note: string | null;
98
+ }
99
+ /** The frames of the unit's newest attempt: from its last `unitDispatched`, this ord only. */
100
+ export declare function attemptFrames(events: readonly Frame[], ord: number): {
101
+ frames: Frame[];
102
+ attempt: number;
103
+ startedAt: number | null;
104
+ };
105
+ /** Crew's reading of the unit's newest attempt at `now`. */
106
+ export declare function readUnit(events: readonly Frame[] | null | undefined, ord: number, now: number): UnitReading;
107
+ /** The step's recent frames for the checking seat, compact and bounded: one line each, newest last. */
108
+ export declare function timeline(events: readonly Frame[] | null | undefined, ord: number, max?: number): string[];
109
+ export {};
110
+ //# sourceMappingURL=reading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reading.d.ts","sourceRoot":"","sources":["../../src/inspect/reading.ts"],"names":[],"mappings":"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"}