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,466 @@
1
+ /**
2
+ * "IS THIS GOING WELL?" — the in-flight check on a working step (operator 2026-10-30: "if it's been running long you
3
+ * can have an agent analyze right there, to make sure no tokens are wasted and no problems are occurring").
4
+ *
5
+ * A person asks (`POST /runs/:id/units/:ord/inspect`, human operator only, audited). Crew reads the step's newest
6
+ * attempt off the run's own log ({@link readUnit}: what it called, edited, said and spent) and hands that reading and
7
+ * the step's recent frames to ONE seat that is not the step's own: an `inspect-unit` run, one turn, no repository,
8
+ * read-only (a neutral phase that executes no code: the engine's read-only write posture), its reply one JSON object.
9
+ * The seat words the verdict (progressing, looping, stuck, wasteful), what the step is doing and how far along it
10
+ * is, the evidence, and one recommended action (let it run, steer with a note, stop).
11
+ *
12
+ * It never steers, stops or edits anything: nothing here calls the source run. The person chooses what to do with
13
+ * the answer, through the ordinary routes. Its own cost is bounded: a wall-clock limit and a token/cost budget,
14
+ * past either of which crew stops the check run and answers with its own reading, saying why. Every answer says
15
+ * whose it is and what it cost.
16
+ *
17
+ * The answer is a record (`<dir>/<runId>.json`, newest first) and a `/ws` frame `unitInspection`.
18
+ */
19
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from 'node:fs';
20
+ import { homedir } from 'node:os';
21
+ import { join } from 'node:path';
22
+ import { fileURLToPath } from 'node:url';
23
+ import { readUnit, timeline } from './reading.js';
24
+ export const INSPECT_WORKFLOW = 'inspect-unit';
25
+ export const INSPECT_WORKFLOW_FILE = fileURLToPath(new URL('../../workflows/inspect-unit.json', import.meta.url));
26
+ /** How long a check may take before crew answers with its own reading. */
27
+ export const INSPECT_TIMEOUT_MS = 4 * 60_000;
28
+ /** The check's own budget: past either, crew stops it and answers with its own reading. */
29
+ export const INSPECT_MAX_COST_USD = 0.25;
30
+ export const INSPECT_MAX_TOKENS = 400_000;
31
+ /** Seats in the order a check prefers them (the step's own seat is never asked). */
32
+ export const INSPECT_SEAT_ORDER = ['claude', 'codex', 'pi', 'copilot'];
33
+ /** Records kept per run. */
34
+ const KEEP = 20;
35
+ export class InspectError extends Error {
36
+ status;
37
+ code;
38
+ constructor(status, code, message) {
39
+ super(message);
40
+ this.status = status;
41
+ this.code = code;
42
+ }
43
+ }
44
+ const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
45
+ const seatCli = (key) => key.split('#')[0] ?? key;
46
+ const VERDICTS = new Set(['progressing', 'looping', 'stuck', 'wasteful']);
47
+ const ACTIONS = new Set(['let_run', 'steer', 'stop']);
48
+ const END_EVENTS = new Set(['sessionCompleted', 'sessionFailed', 'runCancelled', 'sessionCancelled']);
49
+ /** The step the run is working on now, or null (the engine's cursor on a unit that has not finished). */
50
+ export function workingOrd(view) {
51
+ if (view.session.status !== 'executing')
52
+ return null;
53
+ const ordered = [...view.units].sort((a, b) => a.ord - b.ord);
54
+ const cursor = ordered[view.session.unit_ix ?? -1];
55
+ if (cursor === undefined || cursor.status === 'done' || cursor.status === 'rejected')
56
+ return null;
57
+ return cursor.ord;
58
+ }
59
+ /** The seat that checks: signed in, eligible, never the step's own CLI; in {@link INSPECT_SEAT_ORDER}. */
60
+ export function pickInspectSeat(roster, workerSeat) {
61
+ const worker = workerSeat !== null ? seatCli(workerSeat) : null;
62
+ const ok = roster.filter((s) => {
63
+ if (!isRecord(s) || typeof s['key'] !== 'string')
64
+ return false;
65
+ if (worker !== null && (seatCli(s['key']) === worker || (typeof s['cli'] === 'string' && seatCli(s['cli']) === worker)))
66
+ return false;
67
+ if (s['council_eligible'] === false || s['signed_in'] === false)
68
+ return false;
69
+ const health = s['health'];
70
+ return !(isRecord(health) && typeof health['status'] === 'string' && health['status'] !== 'active');
71
+ });
72
+ const rank = (s) => {
73
+ const i = INSPECT_SEAT_ORDER.indexOf(seatCli(String(s['key'])));
74
+ return i === -1 ? INSPECT_SEAT_ORDER.length : i;
75
+ };
76
+ return [...ok].sort((a, b) => rank(a) - rank(b))[0] ?? null;
77
+ }
78
+ /** The checking seat's answer: the last JSON object in its reply that names a verdict, checked field by field. */
79
+ export function parseInspectReply(text) {
80
+ if (text === null)
81
+ return null;
82
+ for (const raw of jsonObjects(text).reverse()) {
83
+ let v;
84
+ try {
85
+ v = JSON.parse(raw);
86
+ }
87
+ catch {
88
+ continue;
89
+ }
90
+ if (!isRecord(v) || typeof v['verdict'] !== 'string' || !VERDICTS.has(v['verdict']))
91
+ continue;
92
+ const s = (k, max) => (typeof v[k] === 'string' && v[k].trim() !== '' ? v[k].trim().slice(0, max) : null);
93
+ // A malformed action (or a steer with no note) is not an answer: crew's own reading stands (xreview on #1233).
94
+ if (typeof v['action'] !== 'string' || !ACTIONS.has(v['action']))
95
+ return null;
96
+ const action = v['action'];
97
+ const note = action === 'steer' ? s('note', 600) : null;
98
+ if (action === 'steer' && note === null)
99
+ return null;
100
+ return {
101
+ verdict: v['verdict'],
102
+ doing: s('doing', 240),
103
+ progress: s('progress', 240),
104
+ evidence: Array.isArray(v['evidence']) ? v['evidence'].filter((e) => typeof e === 'string' && e.trim() !== '').map((e) => e.trim().slice(0, 240)).slice(0, 5) : [],
105
+ action,
106
+ note,
107
+ };
108
+ }
109
+ return null;
110
+ }
111
+ /** Every balanced `{…}` in `text` that parses as JSON, in order of where it ends: each `{` is tried as a start, so
112
+ * prose with a stray brace before the answer does not hide it (xreview on #1233). */
113
+ function jsonObjects(text) {
114
+ const out = [];
115
+ for (let start = text.indexOf('{'); start !== -1; start = text.indexOf('{', start + 1)) {
116
+ let depth = 0;
117
+ let inStr = false;
118
+ let esc = false;
119
+ for (let i = start; i < text.length; i += 1) {
120
+ const ch = text[i];
121
+ if (inStr) {
122
+ if (esc)
123
+ esc = false;
124
+ else if (ch === '\\')
125
+ esc = true;
126
+ else if (ch === '"')
127
+ inStr = false;
128
+ continue;
129
+ }
130
+ if (ch === '"')
131
+ inStr = true;
132
+ else if (ch === '{')
133
+ depth += 1;
134
+ else if (ch === '}') {
135
+ depth -= 1;
136
+ if (depth === 0) {
137
+ const raw = text.slice(start, i + 1);
138
+ try {
139
+ JSON.parse(raw);
140
+ out.push({ end: i, raw });
141
+ }
142
+ catch {
143
+ /* not JSON */
144
+ }
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ }
150
+ return out.sort((a, b) => a.end - b.end).map((o) => o.raw);
151
+ }
152
+ /** The check run's brief: the reading and the recent frames, inline (the seat needs no tool to read them). */
153
+ export function inspectBrief(view, ord, reading, frames) {
154
+ const unit = view.units.find((u) => u.ord === ord);
155
+ const title = String(view.session.title ?? view.session.problem?.split('\n')[0] ?? view.session.id).slice(0, 160);
156
+ const digest = {
157
+ job: title,
158
+ step: { ord, seat: unit?.assigned_cli ?? null, description: (unit?.description ?? '').slice(0, 400) },
159
+ elapsed_s: reading.elapsedMs !== null ? Math.round(reading.elapsedMs / 1000) : null,
160
+ calls: reading.calls,
161
+ open_calls: reading.openCalls.map((o) => ({ tool: o.tool, target: o.target, for_s: Math.round(o.forMs / 1000) })),
162
+ by_kind: reading.byKind,
163
+ edits: reading.edits.slice(0, 15),
164
+ said: { messages: reading.said.deltas, chars: reading.said.chars, newest: reading.said.newest },
165
+ usage: reading.usage,
166
+ crew_reading: { verdict: reading.verdict, evidence: reading.evidence },
167
+ };
168
+ let recent = frames.join('\n');
169
+ if (recent.length > 6000)
170
+ recent = `…\n${recent.slice(-6000)}`;
171
+ return [
172
+ `Check on step ${ord} of the job "${title}": is it going well? You only read: you change nothing and run nothing.`,
173
+ '',
174
+ 'Its record so far (crew read it off the run\'s log):',
175
+ JSON.stringify(digest),
176
+ '',
177
+ 'Its recent activity, oldest first (+seconds since the step started):',
178
+ recent === '' ? '(none recorded)' : recent,
179
+ ].join('\n');
180
+ }
181
+ /** The in-flight checks of one daemon. */
182
+ /** The in-flight checks of one daemon. */
183
+ export class InspectService {
184
+ deps;
185
+ now;
186
+ /** Check run id → the record it answers. Kept until the record's answer is saved (`finalizing` meanwhile). */
187
+ pending = new Map();
188
+ /** A start in flight per step: a second ask for the same step joins it (xreview on #1233). */
189
+ starting = new Map();
190
+ constructor(deps) {
191
+ this.deps = deps;
192
+ this.now = deps.now ?? Date.now;
193
+ }
194
+ file(runId) {
195
+ return join(this.deps.dir, `${encodeURIComponent(runId)}.json`);
196
+ }
197
+ /** The run's records, newest first. */
198
+ list(runId) {
199
+ const f = this.file(runId);
200
+ if (!existsSync(f))
201
+ return [];
202
+ try {
203
+ const v = JSON.parse(readFileSync(f, 'utf8'));
204
+ return Array.isArray(v) ? v : [];
205
+ }
206
+ catch {
207
+ return [];
208
+ }
209
+ }
210
+ save(rec) {
211
+ mkdirSync(this.deps.dir, { recursive: true });
212
+ const rest = this.list(rec.runId).filter((r) => r.id !== rec.id);
213
+ const f = this.file(rec.runId);
214
+ writeFileSync(`${f}.tmp`, JSON.stringify([rec, ...rest].slice(0, KEEP)), 'utf8');
215
+ renameSync(`${f}.tmp`, f);
216
+ this.deps.broadcast({ type: 'unitInspection', session: rec.runId, ord: rec.ord, inspection: rec });
217
+ }
218
+ /** A record still `checking` that no check of this daemon owns (it restarted mid-check) ends with crew's reading. */
219
+ settle(runId) {
220
+ for (const r of this.list(runId)) {
221
+ if (r.state === 'checking' && (r.checkRunId === null || !this.pending.has(r.checkRunId))) {
222
+ this.finishWithReading(r, 'Studio\'s service restarted during the check, so this is crew\'s own reading from when it was asked.');
223
+ }
224
+ }
225
+ return this.list(runId);
226
+ }
227
+ /**
228
+ * At boot, before anything resumes: every check a restart interrupted is stopped (its run cancelled, so it can
229
+ * never spend past its bound unwatched; xreview on #1233) and answered with crew's reading. Never throws.
230
+ */
231
+ async recover() {
232
+ let names = [];
233
+ try {
234
+ names = existsSync(this.deps.dir) ? readdirSync(this.deps.dir).filter((n) => n.endsWith('.json')) : [];
235
+ }
236
+ catch {
237
+ return;
238
+ }
239
+ for (const name of names) {
240
+ const runId = decodeURIComponent(name.slice(0, -'.json'.length));
241
+ for (const r of this.list(runId)) {
242
+ if (r.state !== 'checking' || (r.checkRunId !== null && this.pending.has(r.checkRunId)))
243
+ continue;
244
+ if (r.checkRunId !== null) {
245
+ try {
246
+ await this.deps.adapter.cancelRun(r.checkRunId);
247
+ }
248
+ catch {
249
+ /* already ended */
250
+ }
251
+ }
252
+ this.finishWithReading(r, 'Studio\'s service restarted during the check, so crew stopped it; this is crew\'s own reading from when it was asked.');
253
+ }
254
+ }
255
+ }
256
+ /** Start a check on step `ord` of `runId` for `requestedBy`. Answers at once with the record (`state: checking`). */
257
+ start(runId, ord, requestedBy) {
258
+ const k = `${runId}:${ord}`;
259
+ const open = this.starting.get(k);
260
+ if (open !== undefined)
261
+ return open;
262
+ const p = this.startOnce(runId, ord, requestedBy).finally(() => this.starting.delete(k));
263
+ this.starting.set(k, p);
264
+ return p;
265
+ }
266
+ async startOnce(runId, ord, requestedBy) {
267
+ this.settle(runId);
268
+ const already = this.list(runId).find((r) => r.ord === ord && r.state === 'checking');
269
+ if (already !== undefined)
270
+ return already;
271
+ const view = (await this.deps.adapter.sessionsDetail()).find((v) => v.session.id === runId);
272
+ if (view === undefined)
273
+ throw new InspectError(404, 'not_found', 'Run not found');
274
+ const unit = view.units.find((u) => u.ord === ord);
275
+ if (unit === undefined)
276
+ throw new InspectError(404, 'not_found', `Step ${ord} not found in run ${runId}`);
277
+ if (workingOrd(view) !== ord) {
278
+ throw new InspectError(409, 'not_working', `Step ${ord} is not working now, so there is nothing to check.`);
279
+ }
280
+ const now = this.now();
281
+ const events = ((await this.deps.adapter.runEvents(runId)) ?? []);
282
+ const reading = readUnit(events, ord, now);
283
+ const workerSeat = unit.assigned_cli ?? null;
284
+ const rec = {
285
+ id: this.deps.newId(), runId, ord, attempt: reading.attempt, state: 'checking', requestedBy, requestedAt: now,
286
+ finishedAt: null, workerSeat, seat: null, checkRunId: null, source: null, why: null, verdict: null, doing: null,
287
+ progress: null, evidence: [], action: null, note: null, reading, cost: null,
288
+ };
289
+ let seat = null;
290
+ try {
291
+ seat = pickInspectSeat(await this.deps.adapter.seatsForWorkflow(INSPECT_WORKFLOW), workerSeat);
292
+ }
293
+ catch (err) {
294
+ this.deps.log(`[inspect] ${runId}#${ord}: no roster (${err instanceof Error ? err.message : String(err)})`);
295
+ }
296
+ if (seat === null) {
297
+ this.finishWithReading(rec, 'No signed-in seat other than the step\'s own could check it, so this is crew\'s own reading of its record.');
298
+ return rec;
299
+ }
300
+ rec.seat = String(seat['key']);
301
+ // Armed BEFORE the launch, under the id the run will have (xreview on #1233): a frame of the check run that
302
+ // arrives while the launch is still answering is this record's, and its clock runs from the ask.
303
+ const checkRunId = this.deps.newId();
304
+ rec.checkRunId = checkRunId;
305
+ const timer = setTimeout(() => void this.expire(checkRunId), this.deps.timeoutMs ?? INSPECT_TIMEOUT_MS);
306
+ timer.unref?.();
307
+ this.pending.set(checkRunId, { runId, id: rec.id, timer, finalizing: false });
308
+ this.save(rec);
309
+ const input = {
310
+ problem: inspectBrief(view, ord, reading, timeline(events, ord)),
311
+ sessionId: checkRunId,
312
+ clisJson: JSON.stringify([seat]),
313
+ workflow: INSPECT_WORKFLOW,
314
+ };
315
+ try {
316
+ const launched = await this.deps.adapter.launchRun(input);
317
+ if (launched !== checkRunId)
318
+ this.deps.log(`[inspect] ${runId}#${ord}: the engine named the check run ${launched}, not ${checkRunId}`);
319
+ }
320
+ catch (err) {
321
+ const p = this.pending.get(checkRunId);
322
+ if (p !== undefined && !p.finalizing) {
323
+ this.pending.delete(checkRunId);
324
+ if (p.timer !== null)
325
+ clearTimeout(p.timer);
326
+ const cur = this.recordOf(runId, rec.id) ?? rec;
327
+ cur.checkRunId = null;
328
+ if (cur.state === 'checking')
329
+ this.finishWithReading(cur, `The check could not start on ${rec.seat} (${err instanceof Error ? err.message : String(err)}), so this is crew's own reading.`);
330
+ }
331
+ return this.recordOf(runId, rec.id) ?? rec;
332
+ }
333
+ this.deps.launched?.(checkRunId, runId);
334
+ this.deps.log(`[inspect] ${runId}#${ord} → ${INSPECT_WORKFLOW} ${checkRunId} on ${rec.seat}`);
335
+ return this.recordOf(runId, rec.id) ?? rec;
336
+ }
337
+ finishWithReading(rec, why) {
338
+ const r = rec.reading;
339
+ Object.assign(rec, {
340
+ state: 'done', finishedAt: this.now(), source: 'crew', why, verdict: r.verdict, doing: r.doing, progress: null,
341
+ evidence: r.evidence, action: r.action, note: r.note,
342
+ });
343
+ this.save(rec);
344
+ }
345
+ recordOf(runId, id) {
346
+ return this.list(runId).find((r) => r.id === id) ?? null;
347
+ }
348
+ /** Take the check over for its ending: `null` when another path already ends it. It stays owned (so `settle` never
349
+ * reads it as orphaned) until {@link release}. */
350
+ claim(checkRunId) {
351
+ const p = this.pending.get(checkRunId);
352
+ if (p === undefined || p.finalizing)
353
+ return null;
354
+ p.finalizing = true;
355
+ if (p.timer !== null)
356
+ clearTimeout(p.timer);
357
+ return { runId: p.runId, id: p.id };
358
+ }
359
+ release(checkRunId) {
360
+ this.pending.delete(checkRunId);
361
+ }
362
+ /** Stop the check run (crew's own run, never the step's) and answer with crew's reading. */
363
+ async stopCheck(checkRunId, why) {
364
+ const p = this.claim(checkRunId);
365
+ if (p === null)
366
+ return;
367
+ try {
368
+ try {
369
+ await this.deps.adapter.cancelRun(checkRunId);
370
+ }
371
+ catch (err) {
372
+ this.deps.log(`[inspect] could not stop check run ${checkRunId}: ${err instanceof Error ? err.message : String(err)}`);
373
+ }
374
+ const rec = this.recordOf(p.runId, p.id);
375
+ if (rec !== null && rec.state === 'checking')
376
+ this.finishWithReading(rec, why);
377
+ }
378
+ finally {
379
+ this.release(checkRunId);
380
+ }
381
+ }
382
+ expire(checkRunId) {
383
+ const mins = Math.round((this.deps.timeoutMs ?? INSPECT_TIMEOUT_MS) / 60_000);
384
+ return this.stopCheck(checkRunId, `The check took longer than ${mins} min, so crew stopped it; this is crew's own reading.`);
385
+ }
386
+ /** Every `/ws` frame: the check run's usage (its budget) and end. */
387
+ onEvent(event) {
388
+ const session = event['session'];
389
+ if (typeof session !== 'string')
390
+ return;
391
+ const p = this.pending.get(session);
392
+ if (p === undefined)
393
+ return;
394
+ const type = event['type'];
395
+ if (type === 'usageProgress' || type === 'cliUsage') {
396
+ const rec = this.recordOf(p.runId, p.id);
397
+ if (rec === null || rec.state !== 'checking')
398
+ return;
399
+ const i = typeof event['inputTokens'] === 'number' ? event['inputTokens'] : 0;
400
+ const o = typeof event['outputTokens'] === 'number' ? event['outputTokens'] : 0;
401
+ const c = typeof event['costUsd'] === 'number' ? event['costUsd'] : null;
402
+ rec.cost = { inputTokens: i, outputTokens: o, costUsd: c };
403
+ this.save(rec);
404
+ if (p.finalizing)
405
+ return;
406
+ const maxUsd = this.deps.maxCostUsd ?? INSPECT_MAX_COST_USD;
407
+ const maxTok = this.deps.maxTokens ?? INSPECT_MAX_TOKENS;
408
+ if ((c !== null && c > maxUsd) || i + o > maxTok) {
409
+ void this.stopCheck(session, `The check reached its budget (${c !== null && c > maxUsd ? `$${maxUsd.toFixed(2)}` : `${Math.round(maxTok / 1000)}k tokens`}), so crew stopped it; this is crew's own reading.`);
410
+ }
411
+ return;
412
+ }
413
+ if (type === 'awaitingHuman') {
414
+ void this.stopCheck(session, 'The check stopped to ask a question, which it may not; this is crew\'s own reading.');
415
+ return;
416
+ }
417
+ if (typeof type === 'string' && END_EVENTS.has(type))
418
+ void this.finish(session, type);
419
+ }
420
+ async finish(checkRunId, how) {
421
+ const p = this.claim(checkRunId);
422
+ if (p === null)
423
+ return;
424
+ try {
425
+ let reply = null;
426
+ try {
427
+ reply = await this.deps.replyOf(checkRunId);
428
+ }
429
+ catch (err) {
430
+ this.deps.log(`[inspect] reading check run ${checkRunId}: ${err instanceof Error ? err.message : String(err)}`);
431
+ }
432
+ // Read the record AFTER the await: a usage frame may have moved its cost meanwhile.
433
+ const rec = this.recordOf(p.runId, p.id);
434
+ if (rec === null || rec.state !== 'checking')
435
+ return;
436
+ const answer = how === 'sessionCompleted' ? parseInspectReply(reply) : null;
437
+ if (answer === null) {
438
+ this.finishWithReading(rec, how === 'sessionCompleted'
439
+ ? `${rec.seat ?? 'The seat'}'s answer could not be read, so this is crew's own reading.`
440
+ : `The check on ${rec.seat ?? 'its seat'} did not finish, so this is crew's own reading.`);
441
+ return;
442
+ }
443
+ Object.assign(rec, { ...answer, state: 'done', finishedAt: this.now(), source: 'seat', why: null });
444
+ this.save(rec);
445
+ }
446
+ finally {
447
+ this.release(checkRunId);
448
+ }
449
+ }
450
+ }
451
+ /**
452
+ * Where the records live: `WICKED_CREW_INSPECTIONS_DIR`, else `~/.wicked/inspections` — beside run learnings, NOT in the
453
+ * daemon state home: core refuses every launch whose state home holds a top-level entry its fence registry
454
+ * (tests/fixtures/state-home-subtrees.json, embedded in core) does not classify, so a new entry there needs a core
455
+ * release first. Records are keyed by run id (unique), so two daemons sharing the directory never collide.
456
+ */
457
+ export function defaultInspectionsDir(env = process.env) {
458
+ return env['WICKED_CREW_INSPECTIONS_DIR'] ?? join(homedir(), '.wicked', 'inspections');
459
+ }
460
+ /** The `inspect-unit` workflow def (data), as registered with the engine. */
461
+ export function loadInspectWorkflow(file = INSPECT_WORKFLOW_FILE) {
462
+ const def = JSON.parse(readFileSync(file, 'utf8'));
463
+ delete def['$comment'];
464
+ return def;
465
+ }
466
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/inspect/service.ts"],"names":[],"mappings":"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"}
@@ -94,11 +94,20 @@ export declare const LINEAGE_MAX_HOPS = 16;
94
94
  * (`PUT /d/:doc/api/theme/source`) in 0.14.0, which was tagged but never published; 0.14.1 is the first
95
95
  * build with both. A caret on 0.x pins the minor, so `^0.12.0` spawned 0.12.x, which has neither route.
96
96
  */
97
- export declare const INTERACTIVE_DEFAULT_RANGE = "^0.14.1";
97
+ /**
98
+ * 0.15.0 (wicked-interactive#323, slice I1): a `draft.completed` with `expect_head` lands only on that
99
+ * head (a moved head lands nothing and emits `draft.conflict`), and every landed version records
100
+ * `kind` + `run_id`. A chat-made document's draft (A3) sends `expect_head`; a 0.14.x bridge ignores it
101
+ * and lands on whatever the head is, over a person's edit. The caret pins the minor, so `^0.14.1` never
102
+ * spawned 0.15.0: the floor follows. As with every floor that adds no env key, a 0.14.x bridge that is
103
+ * adopted (a sidecar that names it, a matching env) keeps serving until it restarts; the previous
104
+ * daemon's shutdown reaps the bridges it spawned, so a normal upgrade starts a 0.15.x one.
105
+ */
106
+ export declare const INTERACTIVE_DEFAULT_RANGE = "^0.15.0";
98
107
  /** The env override of the RANGE (not the package). */
99
108
  export declare const INTERACTIVE_SPEC_ENV = "WICKED_INTERACTIVE_SPEC";
100
109
  /** The default spec — what the daemon spawns with no override. */
101
- export declare const INTERACTIVE_SPEC = "wicked-interactive@^0.14.1";
110
+ export declare const INTERACTIVE_SPEC = "wicked-interactive@^0.15.0";
102
111
  /** A semver RANGE this daemon will resolve: one comparator, or a space-separated intersection of
103
112
  * them (`>=0.9.1 <1.0.0`). Tags (`latest`), `x`-ranges, `||` unions, paths and `pkg@range` spellings
104
113
  * are refused — the override names a floor within the package, nothing else. */
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-pool.d.ts","sourceRoot":"","sources":["../../src/interactive/bridge-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-pool.d.ts","sourceRoot":"","sources":["../../src/interactive/bridge-pool.ts"],"names":[],"mappings":"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"}
@@ -167,7 +167,16 @@ const INTERACTIVE_PACKAGE = 'wicked-interactive';
167
167
  * (`PUT /d/:doc/api/theme/source`) in 0.14.0, which was tagged but never published; 0.14.1 is the first
168
168
  * build with both. A caret on 0.x pins the minor, so `^0.12.0` spawned 0.12.x, which has neither route.
169
169
  */
170
- export const INTERACTIVE_DEFAULT_RANGE = '^0.14.1';
170
+ /**
171
+ * 0.15.0 (wicked-interactive#323, slice I1): a `draft.completed` with `expect_head` lands only on that
172
+ * head (a moved head lands nothing and emits `draft.conflict`), and every landed version records
173
+ * `kind` + `run_id`. A chat-made document's draft (A3) sends `expect_head`; a 0.14.x bridge ignores it
174
+ * and lands on whatever the head is, over a person's edit. The caret pins the minor, so `^0.14.1` never
175
+ * spawned 0.15.0: the floor follows. As with every floor that adds no env key, a 0.14.x bridge that is
176
+ * adopted (a sidecar that names it, a matching env) keeps serving until it restarts; the previous
177
+ * daemon's shutdown reaps the bridges it spawned, so a normal upgrade starts a 0.15.x one.
178
+ */
179
+ export const INTERACTIVE_DEFAULT_RANGE = '^0.15.0';
171
180
  /** The env override of the RANGE (not the package). */
172
181
  export const INTERACTIVE_SPEC_ENV = 'WICKED_INTERACTIVE_SPEC';
173
182
  /** The default spec — what the daemon spawns with no override. */