@cleocode/core 2026.9.23 → 2026.9.24

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 (651) hide show
  1. package/dist/admin/import-tasks.d.ts.map +1 -1
  2. package/dist/admin/import-tasks.js +35 -6
  3. package/dist/admin/import-tasks.js.map +1 -1
  4. package/dist/admin/import.d.ts.map +1 -1
  5. package/dist/admin/import.js +25 -6
  6. package/dist/admin/import.js.map +1 -1
  7. package/dist/build-provenance.json +2 -2
  8. package/dist/cloud/http.d.ts +8 -0
  9. package/dist/cloud/http.d.ts.map +1 -1
  10. package/dist/cloud/http.js +8 -1
  11. package/dist/cloud/http.js.map +1 -1
  12. package/dist/cloud/index.d.ts +6 -1
  13. package/dist/cloud/index.d.ts.map +1 -1
  14. package/dist/cloud/index.js +6 -1
  15. package/dist/cloud/index.js.map +1 -1
  16. package/dist/cloud/nexus-auth.d.ts +169 -0
  17. package/dist/cloud/nexus-auth.d.ts.map +1 -0
  18. package/dist/cloud/nexus-auth.js +372 -0
  19. package/dist/cloud/nexus-auth.js.map +1 -0
  20. package/dist/cloud/nexus-credentials.d.ts +188 -0
  21. package/dist/cloud/nexus-credentials.d.ts.map +1 -0
  22. package/dist/cloud/nexus-credentials.js +323 -0
  23. package/dist/cloud/nexus-credentials.js.map +1 -0
  24. package/dist/cloud/nexus-link.d.ts +85 -0
  25. package/dist/cloud/nexus-link.d.ts.map +1 -0
  26. package/dist/cloud/nexus-link.js +226 -0
  27. package/dist/cloud/nexus-link.js.map +1 -0
  28. package/dist/cloud/presence.d.ts +88 -0
  29. package/dist/cloud/presence.d.ts.map +1 -0
  30. package/dist/cloud/presence.js +137 -0
  31. package/dist/cloud/presence.js.map +1 -0
  32. package/dist/cloud/projects.d.ts +3 -1
  33. package/dist/cloud/projects.d.ts.map +1 -1
  34. package/dist/cloud/projects.js +4 -2
  35. package/dist/cloud/projects.js.map +1 -1
  36. package/dist/crypto/credentials.d.ts +14 -4
  37. package/dist/crypto/credentials.d.ts.map +1 -1
  38. package/dist/crypto/credentials.js +15 -1
  39. package/dist/crypto/credentials.js.map +1 -1
  40. package/dist/decide/bench/dataset.d.ts +125 -0
  41. package/dist/decide/bench/dataset.d.ts.map +1 -0
  42. package/dist/decide/bench/dataset.js +457 -0
  43. package/dist/decide/bench/dataset.js.map +1 -0
  44. package/dist/decide/bench/index.d.ts +23 -0
  45. package/dist/decide/bench/index.d.ts.map +1 -0
  46. package/dist/decide/bench/index.js +23 -0
  47. package/dist/decide/bench/index.js.map +1 -0
  48. package/dist/decide/bench/metrics.d.ts +55 -0
  49. package/dist/decide/bench/metrics.d.ts.map +1 -0
  50. package/dist/decide/bench/metrics.js +100 -0
  51. package/dist/decide/bench/metrics.js.map +1 -0
  52. package/dist/decide/bench/operation.d.ts +119 -0
  53. package/dist/decide/bench/operation.d.ts.map +1 -0
  54. package/dist/decide/bench/operation.js +171 -0
  55. package/dist/decide/bench/operation.js.map +1 -0
  56. package/dist/decide/bench/profiles.d.ts +74 -0
  57. package/dist/decide/bench/profiles.d.ts.map +1 -0
  58. package/dist/decide/bench/profiles.js +131 -0
  59. package/dist/decide/bench/profiles.js.map +1 -0
  60. package/dist/decide/bench/questions.d.ts +40 -0
  61. package/dist/decide/bench/questions.d.ts.map +1 -0
  62. package/dist/decide/bench/questions.js +107 -0
  63. package/dist/decide/bench/questions.js.map +1 -0
  64. package/dist/decide/bench/report.d.ts +21 -0
  65. package/dist/decide/bench/report.d.ts.map +1 -0
  66. package/dist/decide/bench/report.js +120 -0
  67. package/dist/decide/bench/report.js.map +1 -0
  68. package/dist/decide/bench/runner.d.ts +203 -0
  69. package/dist/decide/bench/runner.d.ts.map +1 -0
  70. package/dist/decide/bench/runner.js +335 -0
  71. package/dist/decide/bench/runner.js.map +1 -0
  72. package/dist/decide/bench/source.d.ts +21 -0
  73. package/dist/decide/bench/source.d.ts.map +1 -0
  74. package/dist/decide/bench/source.js +67 -0
  75. package/dist/decide/bench/source.js.map +1 -0
  76. package/dist/decide/bench/spot-check.d.ts +117 -0
  77. package/dist/decide/bench/spot-check.d.ts.map +1 -0
  78. package/dist/decide/bench/spot-check.js +221 -0
  79. package/dist/decide/bench/spot-check.js.map +1 -0
  80. package/dist/decide/bench/stats.d.ts +57 -0
  81. package/dist/decide/bench/stats.d.ts.map +1 -0
  82. package/dist/decide/bench/stats.js +82 -0
  83. package/dist/decide/bench/stats.js.map +1 -0
  84. package/dist/decide/bench/types.d.ts +216 -0
  85. package/dist/decide/bench/types.d.ts.map +1 -0
  86. package/dist/decide/bench/types.js +104 -0
  87. package/dist/decide/bench/types.js.map +1 -0
  88. package/dist/decide/client.d.ts +35 -1
  89. package/dist/decide/client.d.ts.map +1 -1
  90. package/dist/decide/client.js +124 -30
  91. package/dist/decide/client.js.map +1 -1
  92. package/dist/decide/credentials.d.ts +177 -17
  93. package/dist/decide/credentials.d.ts.map +1 -1
  94. package/dist/decide/credentials.js +505 -41
  95. package/dist/decide/credentials.js.map +1 -1
  96. package/dist/decide/index.d.ts +8 -8
  97. package/dist/decide/index.d.ts.map +1 -1
  98. package/dist/decide/index.js +8 -8
  99. package/dist/decide/index.js.map +1 -1
  100. package/dist/decide/jev-wire.d.ts +25 -19
  101. package/dist/decide/jev-wire.d.ts.map +1 -1
  102. package/dist/decide/jev-wire.js +56 -31
  103. package/dist/decide/jev-wire.js.map +1 -1
  104. package/dist/decide/operations.d.ts +63 -12
  105. package/dist/decide/operations.d.ts.map +1 -1
  106. package/dist/decide/operations.js +116 -58
  107. package/dist/decide/operations.js.map +1 -1
  108. package/dist/decide/provider-state.d.ts +85 -12
  109. package/dist/decide/provider-state.d.ts.map +1 -1
  110. package/dist/decide/provider-state.js +154 -21
  111. package/dist/decide/provider-state.js.map +1 -1
  112. package/dist/decide/provider.d.ts +5 -0
  113. package/dist/decide/provider.d.ts.map +1 -1
  114. package/dist/decide/provider.js.map +1 -1
  115. package/dist/decide/providers.d.ts +15 -2
  116. package/dist/decide/providers.d.ts.map +1 -1
  117. package/dist/decide/providers.js +22 -6
  118. package/dist/decide/providers.js.map +1 -1
  119. package/dist/decide/sites/registry.d.ts +22 -0
  120. package/dist/decide/sites/registry.d.ts.map +1 -1
  121. package/dist/decide/sites/registry.js +23 -0
  122. package/dist/decide/sites/registry.js.map +1 -1
  123. package/dist/decide/wizard.d.ts +12 -4
  124. package/dist/decide/wizard.d.ts.map +1 -1
  125. package/dist/decide/wizard.js +79 -26
  126. package/dist/decide/wizard.js.map +1 -1
  127. package/dist/dispatch/mvi-projection.d.ts +15 -2
  128. package/dist/dispatch/mvi-projection.d.ts.map +1 -1
  129. package/dist/dispatch/mvi-projection.js +73 -12
  130. package/dist/dispatch/mvi-projection.js.map +1 -1
  131. package/dist/docs/adr-allocator.d.ts +2 -2
  132. package/dist/docs/adr-allocator.d.ts.map +1 -1
  133. package/dist/docs/adr-allocator.js +17 -4
  134. package/dist/docs/adr-allocator.js.map +1 -1
  135. package/dist/docs/blob-consolidation.js +1 -1
  136. package/dist/docs/blob-consolidation.js.map +1 -1
  137. package/dist/docs/display-alias.d.ts +1 -1
  138. package/dist/docs/display-alias.d.ts.map +1 -1
  139. package/dist/docs/display-alias.js +7 -4
  140. package/dist/docs/display-alias.js.map +1 -1
  141. package/dist/docs/docs-inconsistency-detector.js +1 -1
  142. package/dist/docs/docs-inconsistency-detector.js.map +1 -1
  143. package/dist/docs/docs-update.d.ts.map +1 -1
  144. package/dist/docs/docs-update.js +6 -1
  145. package/dist/docs/docs-update.js.map +1 -1
  146. package/dist/docs/export-document.js +2928 -1053
  147. package/dist/docs/export-document.js.map +3 -3
  148. package/dist/docs/numbering.js +1 -1
  149. package/dist/docs/numbering.js.map +1 -1
  150. package/dist/docs/supersede.d.ts.map +1 -1
  151. package/dist/docs/supersede.js +6 -3
  152. package/dist/docs/supersede.js.map +1 -1
  153. package/dist/docs/version-ssot.js +1 -1
  154. package/dist/docs/version-ssot.js.map +1 -1
  155. package/dist/doctor/db-substrate.d.ts.map +1 -1
  156. package/dist/doctor/db-substrate.js +39 -24
  157. package/dist/doctor/db-substrate.js.map +1 -1
  158. package/dist/doctor/knowledge-summary.d.ts +10 -3
  159. package/dist/doctor/knowledge-summary.d.ts.map +1 -1
  160. package/dist/doctor/knowledge-summary.js +10 -3
  161. package/dist/doctor/knowledge-summary.js.map +1 -1
  162. package/dist/doctor/project-identity.d.ts +128 -37
  163. package/dist/doctor/project-identity.d.ts.map +1 -1
  164. package/dist/doctor/project-identity.js +476 -63
  165. package/dist/doctor/project-identity.js.map +1 -1
  166. package/dist/doctor/twin-collapse.d.ts +52 -2
  167. package/dist/doctor/twin-collapse.d.ts.map +1 -1
  168. package/dist/doctor/twin-collapse.js +108 -4
  169. package/dist/doctor/twin-collapse.js.map +1 -1
  170. package/dist/error-catalog.js +2 -2
  171. package/dist/error-catalog.js.map +1 -1
  172. package/dist/error-registry.js +1 -1
  173. package/dist/error-registry.js.map +1 -1
  174. package/dist/gateway-client/generated/types.gen.d.ts +22 -2
  175. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
  176. package/dist/index.d.ts +1 -1
  177. package/dist/index.d.ts.map +1 -1
  178. package/dist/index.js +1 -1
  179. package/dist/index.js.map +1 -1
  180. package/dist/init.d.ts.map +1 -1
  181. package/dist/init.js +20 -11
  182. package/dist/init.js.map +1 -1
  183. package/dist/inject/index.d.ts.map +1 -1
  184. package/dist/inject/index.js +2 -3
  185. package/dist/inject/index.js.map +1 -1
  186. package/dist/internal.d.ts +5 -4
  187. package/dist/internal.d.ts.map +1 -1
  188. package/dist/internal.js +6 -4
  189. package/dist/internal.js.map +1 -1
  190. package/dist/llm/credential-remove-entry.d.ts +59 -0
  191. package/dist/llm/credential-remove-entry.d.ts.map +1 -0
  192. package/dist/llm/credential-remove-entry.js +101 -0
  193. package/dist/llm/credential-remove-entry.js.map +1 -0
  194. package/dist/llm/oauth/device-code.d.ts +26 -6
  195. package/dist/llm/oauth/device-code.d.ts.map +1 -1
  196. package/dist/llm/oauth/device-code.js +44 -12
  197. package/dist/llm/oauth/device-code.js.map +1 -1
  198. package/dist/llm/plugin-facade.js +3017 -1142
  199. package/dist/llm/plugin-facade.js.map +3 -3
  200. package/dist/memory/attention.d.ts.map +1 -1
  201. package/dist/memory/attention.js +5 -3
  202. package/dist/memory/attention.js.map +1 -1
  203. package/dist/memory/decisions.d.ts +48 -3
  204. package/dist/memory/decisions.d.ts.map +1 -1
  205. package/dist/memory/decisions.js +98 -14
  206. package/dist/memory/decisions.js.map +1 -1
  207. package/dist/memory/learnings.d.ts +6 -6
  208. package/dist/memory/patterns.d.ts +4 -4
  209. package/dist/migration/manual/T10165-backfill-adr-index.d.ts.map +1 -1
  210. package/dist/migration/manual/T10165-backfill-adr-index.js +5 -1
  211. package/dist/migration/manual/T10165-backfill-adr-index.js.map +1 -1
  212. package/dist/nexus/fleet-status.d.ts +83 -0
  213. package/dist/nexus/fleet-status.d.ts.map +1 -0
  214. package/dist/nexus/fleet-status.js +414 -0
  215. package/dist/nexus/fleet-status.js.map +1 -0
  216. package/dist/nexus/git-state.d.ts +15 -0
  217. package/dist/nexus/git-state.d.ts.map +1 -1
  218. package/dist/nexus/git-state.js +67 -2
  219. package/dist/nexus/git-state.js.map +1 -1
  220. package/dist/nexus/identity.d.ts.map +1 -1
  221. package/dist/nexus/identity.js +4 -0
  222. package/dist/nexus/identity.js.map +1 -1
  223. package/dist/nexus/index.d.ts +4 -1
  224. package/dist/nexus/index.d.ts.map +1 -1
  225. package/dist/nexus/index.js +7 -1
  226. package/dist/nexus/index.js.map +1 -1
  227. package/dist/nexus/migrate-json-to-sqlite.d.ts +3 -2
  228. package/dist/nexus/migrate-json-to-sqlite.d.ts.map +1 -1
  229. package/dist/nexus/migrate-json-to-sqlite.js +9 -17
  230. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -1
  231. package/dist/nexus/ops.d.ts +1 -0
  232. package/dist/nexus/ops.d.ts.map +1 -1
  233. package/dist/nexus/project-activity.d.ts +104 -0
  234. package/dist/nexus/project-activity.d.ts.map +1 -0
  235. package/dist/nexus/project-activity.js +150 -0
  236. package/dist/nexus/project-activity.js.map +1 -0
  237. package/dist/nexus/query.d.ts +2 -2
  238. package/dist/nexus/query.d.ts.map +1 -1
  239. package/dist/nexus/query.js +4 -19
  240. package/dist/nexus/query.js.map +1 -1
  241. package/dist/nexus/registry-errors.d.ts +61 -0
  242. package/dist/nexus/registry-errors.d.ts.map +1 -0
  243. package/dist/nexus/registry-errors.js +85 -0
  244. package/dist/nexus/registry-errors.js.map +1 -0
  245. package/dist/nexus/registry.d.ts +30 -5
  246. package/dist/nexus/registry.d.ts.map +1 -1
  247. package/dist/nexus/registry.js +115 -70
  248. package/dist/nexus/registry.js.map +1 -1
  249. package/dist/orchestrate/pivot.d.ts +4 -0
  250. package/dist/orchestrate/pivot.d.ts.map +1 -1
  251. package/dist/orchestrate/pivot.js +75 -12
  252. package/dist/orchestrate/pivot.js.map +1 -1
  253. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  254. package/dist/orchestrate/query-ops.js +29 -27
  255. package/dist/orchestrate/query-ops.js.map +1 -1
  256. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  257. package/dist/orchestrate/spawn-ops.js +29 -3
  258. package/dist/orchestrate/spawn-ops.js.map +1 -1
  259. package/dist/orchestration/bootstrap.d.ts.map +1 -1
  260. package/dist/orchestration/bootstrap.js +20 -14
  261. package/dist/orchestration/bootstrap.js.map +1 -1
  262. package/dist/orchestration/index.d.ts +15 -1
  263. package/dist/orchestration/index.d.ts.map +1 -1
  264. package/dist/orchestration/index.js +25 -6
  265. package/dist/orchestration/index.js.map +1 -1
  266. package/dist/orchestration/lead-rollup.d.ts +7 -1
  267. package/dist/orchestration/lead-rollup.d.ts.map +1 -1
  268. package/dist/orchestration/lead-rollup.js +6 -3
  269. package/dist/orchestration/lead-rollup.js.map +1 -1
  270. package/dist/orchestration/spawn-prompt.js +1 -1
  271. package/dist/orchestration/spawn-prompt.js.map +1 -1
  272. package/dist/orchestration/waves.d.ts +21 -10
  273. package/dist/orchestration/waves.d.ts.map +1 -1
  274. package/dist/orchestration/waves.js +38 -35
  275. package/dist/orchestration/waves.js.map +1 -1
  276. package/dist/paths.d.ts +9 -2
  277. package/dist/paths.d.ts.map +1 -1
  278. package/dist/paths.js +30 -13
  279. package/dist/paths.js.map +1 -1
  280. package/dist/phases/index.d.ts +1 -1
  281. package/dist/phases/index.d.ts.map +1 -1
  282. package/dist/phases/index.js +3 -4
  283. package/dist/phases/index.js.map +1 -1
  284. package/dist/project-info.d.ts +40 -3
  285. package/dist/project-info.d.ts.map +1 -1
  286. package/dist/project-info.js +74 -6
  287. package/dist/project-info.js.map +1 -1
  288. package/dist/project-lifecycle.d.ts +28 -7
  289. package/dist/project-lifecycle.d.ts.map +1 -1
  290. package/dist/project-lifecycle.js +114 -47
  291. package/dist/project-lifecycle.js.map +1 -1
  292. package/dist/project-scope.d.ts +70 -3
  293. package/dist/project-scope.d.ts.map +1 -1
  294. package/dist/project-scope.js +154 -15
  295. package/dist/project-scope.js.map +1 -1
  296. package/dist/release/open.d.ts +12 -2
  297. package/dist/release/open.d.ts.map +1 -1
  298. package/dist/release/open.js +32 -3
  299. package/dist/release/open.js.map +1 -1
  300. package/dist/release/preflight-skip.d.ts +73 -0
  301. package/dist/release/preflight-skip.d.ts.map +1 -0
  302. package/dist/release/preflight-skip.js +254 -0
  303. package/dist/release/preflight-skip.js.map +1 -0
  304. package/dist/render/decide/index.d.ts +51 -0
  305. package/dist/render/decide/index.d.ts.map +1 -0
  306. package/dist/render/decide/index.js +289 -0
  307. package/dist/render/decide/index.js.map +1 -0
  308. package/dist/render/index.d.ts +1 -0
  309. package/dist/render/index.d.ts.map +1 -1
  310. package/dist/render/index.js +1 -0
  311. package/dist/render/index.js.map +1 -1
  312. package/dist/render/nexus/graph/index.d.ts +5 -0
  313. package/dist/render/nexus/graph/index.d.ts.map +1 -1
  314. package/dist/render/nexus/graph/index.js +53 -0
  315. package/dist/render/nexus/graph/index.js.map +1 -1
  316. package/dist/scaffold/ensure-config.d.ts +14 -6
  317. package/dist/scaffold/ensure-config.d.ts.map +1 -1
  318. package/dist/scaffold/ensure-config.js +39 -17
  319. package/dist/scaffold/ensure-config.js.map +1 -1
  320. package/dist/scaffold/project-identity.d.ts +115 -23
  321. package/dist/scaffold/project-identity.d.ts.map +1 -1
  322. package/dist/scaffold/project-identity.js +196 -44
  323. package/dist/scaffold/project-identity.js.map +1 -1
  324. package/dist/selfimprove/fix-gen.js +3027 -1152
  325. package/dist/selfimprove/fix-gen.js.map +3 -3
  326. package/dist/sentient/cross-project-hygiene.d.ts +12 -6
  327. package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
  328. package/dist/sentient/cross-project-hygiene.js +15 -10
  329. package/dist/sentient/cross-project-hygiene.js.map +1 -1
  330. package/dist/session/engine-ops.d.ts +13 -4
  331. package/dist/session/engine-ops.d.ts.map +1 -1
  332. package/dist/session/engine-ops.js +38 -45
  333. package/dist/session/engine-ops.js.map +1 -1
  334. package/dist/sessions/briefing.d.ts +7 -3
  335. package/dist/sessions/briefing.d.ts.map +1 -1
  336. package/dist/sessions/briefing.js +10 -10
  337. package/dist/sessions/briefing.js.map +1 -1
  338. package/dist/sessions/drift-watchdog.d.ts.map +1 -1
  339. package/dist/sessions/drift-watchdog.js +11 -19
  340. package/dist/sessions/drift-watchdog.js.map +1 -1
  341. package/dist/sessions/focus-state-store.d.ts +103 -26
  342. package/dist/sessions/focus-state-store.d.ts.map +1 -1
  343. package/dist/sessions/focus-state-store.js +166 -37
  344. package/dist/sessions/focus-state-store.js.map +1 -1
  345. package/dist/sessions/handoff.d.ts.map +1 -1
  346. package/dist/sessions/handoff.js +9 -18
  347. package/dist/sessions/handoff.js.map +1 -1
  348. package/dist/sessions/index.d.ts +4 -2
  349. package/dist/sessions/index.d.ts.map +1 -1
  350. package/dist/sessions/index.js +35 -6
  351. package/dist/sessions/index.js.map +1 -1
  352. package/dist/sessions/session-drift.d.ts.map +1 -1
  353. package/dist/sessions/session-drift.js +4 -2
  354. package/dist/sessions/session-drift.js.map +1 -1
  355. package/dist/sessions/session-view.d.ts +8 -1
  356. package/dist/sessions/session-view.d.ts.map +1 -1
  357. package/dist/sessions/session-view.js +9 -2
  358. package/dist/sessions/session-view.js.map +1 -1
  359. package/dist/setup/config-json-merge.d.ts.map +1 -1
  360. package/dist/setup/config-json-merge.js +1 -0
  361. package/dist/setup/config-json-merge.js.map +1 -1
  362. package/dist/setup/index.d.ts +4 -2
  363. package/dist/setup/index.d.ts.map +1 -1
  364. package/dist/setup/index.js +6 -2
  365. package/dist/setup/index.js.map +1 -1
  366. package/dist/setup/sections/nexus-account.d.ts +32 -0
  367. package/dist/setup/sections/nexus-account.d.ts.map +1 -0
  368. package/dist/setup/sections/nexus-account.js +64 -0
  369. package/dist/setup/sections/nexus-account.js.map +1 -0
  370. package/dist/setup/wizard.d.ts +1 -1
  371. package/dist/setup/wizard.d.ts.map +1 -1
  372. package/dist/setup/wizard.js.map +1 -1
  373. package/dist/skills/orchestrator/startup.d.ts.map +1 -1
  374. package/dist/skills/orchestrator/startup.js +18 -31
  375. package/dist/skills/orchestrator/startup.js.map +1 -1
  376. package/dist/snapshot/index.d.ts.map +1 -1
  377. package/dist/snapshot/index.js +60 -53
  378. package/dist/snapshot/index.js.map +1 -1
  379. package/dist/spawn/agent-identity.d.ts +33 -1
  380. package/dist/spawn/agent-identity.d.ts.map +1 -1
  381. package/dist/spawn/agent-identity.js +53 -1
  382. package/dist/spawn/agent-identity.js.map +1 -1
  383. package/dist/spawn/index.d.ts +1 -1
  384. package/dist/spawn/index.d.ts.map +1 -1
  385. package/dist/spawn/index.js +1 -1
  386. package/dist/spawn/index.js.map +1 -1
  387. package/dist/stats/index.d.ts.map +1 -1
  388. package/dist/stats/index.js +3 -4
  389. package/dist/stats/index.js.map +1 -1
  390. package/dist/status/index.d.ts +12 -3
  391. package/dist/status/index.d.ts.map +1 -1
  392. package/dist/status/index.js +47 -5
  393. package/dist/status/index.js.map +1 -1
  394. package/dist/store/attachment-repair.d.ts.map +1 -1
  395. package/dist/store/attachment-repair.js +42 -3
  396. package/dist/store/attachment-repair.js.map +1 -1
  397. package/dist/store/attachment-store.d.ts.map +1 -1
  398. package/dist/store/attachment-store.js +30 -46
  399. package/dist/store/attachment-store.js.map +1 -1
  400. package/dist/store/backup-recover-brain.d.ts +4 -0
  401. package/dist/store/backup-recover-brain.d.ts.map +1 -1
  402. package/dist/store/backup-recover-brain.js +2 -0
  403. package/dist/store/backup-recover-brain.js.map +1 -1
  404. package/dist/store/backup-recover.d.ts +9 -0
  405. package/dist/store/backup-recover.d.ts.map +1 -1
  406. package/dist/store/backup-recover.js +28 -1
  407. package/dist/store/backup-recover.js.map +1 -1
  408. package/dist/store/backup-sidecar.d.ts +30 -0
  409. package/dist/store/backup-sidecar.d.ts.map +1 -1
  410. package/dist/store/backup-sidecar.js +90 -2
  411. package/dist/store/backup-sidecar.js.map +1 -1
  412. package/dist/store/blob-keep.d.ts +135 -0
  413. package/dist/store/blob-keep.d.ts.map +1 -0
  414. package/dist/store/blob-keep.js +283 -0
  415. package/dist/store/blob-keep.js.map +1 -0
  416. package/dist/store/converters.d.ts.map +1 -1
  417. package/dist/store/converters.js +11 -0
  418. package/dist/store/converters.js.map +1 -1
  419. package/dist/store/credential-transfer.d.ts +37 -5
  420. package/dist/store/credential-transfer.d.ts.map +1 -1
  421. package/dist/store/credential-transfer.js +73 -18
  422. package/dist/store/credential-transfer.js.map +1 -1
  423. package/dist/store/data-accessor.d.ts +1 -1
  424. package/dist/store/data-accessor.d.ts.map +1 -1
  425. package/dist/store/data-accessor.js.map +1 -1
  426. package/dist/store/db-helpers.d.ts +18 -0
  427. package/dist/store/db-helpers.d.ts.map +1 -1
  428. package/dist/store/db-helpers.js +46 -0
  429. package/dist/store/db-helpers.js.map +1 -1
  430. package/dist/store/exodus/on-open.d.ts.map +1 -1
  431. package/dist/store/exodus/on-open.js +35 -0
  432. package/dist/store/exodus/on-open.js.map +1 -1
  433. package/dist/store/exodus/runtime-targets.d.ts +3 -3
  434. package/dist/store/exodus/runtime-targets.js +3 -3
  435. package/dist/store/import-remap.d.ts +12 -1
  436. package/dist/store/import-remap.d.ts.map +1 -1
  437. package/dist/store/import-remap.js +14 -0
  438. package/dist/store/import-remap.js.map +1 -1
  439. package/dist/store/legacy-tasks-lineage.d.ts +3 -1
  440. package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
  441. package/dist/store/legacy-tasks-lineage.js +3 -1
  442. package/dist/store/legacy-tasks-lineage.js.map +1 -1
  443. package/dist/store/memory-accessor.js +1 -1
  444. package/dist/store/memory-accessor.js.map +1 -1
  445. package/dist/store/migration-manager.d.ts +61 -0
  446. package/dist/store/migration-manager.d.ts.map +1 -1
  447. package/dist/store/migration-manager.js +102 -4
  448. package/dist/store/migration-manager.js.map +1 -1
  449. package/dist/store/nexus-validation-schemas.d.ts +64 -0
  450. package/dist/store/nexus-validation-schemas.d.ts.map +1 -1
  451. package/dist/store/portable-bundle-import.d.ts +8 -0
  452. package/dist/store/portable-bundle-import.d.ts.map +1 -1
  453. package/dist/store/portable-bundle-import.js +10 -0
  454. package/dist/store/portable-bundle-import.js.map +1 -1
  455. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  456. package/dist/store/portable-bundle-scan.js +1 -0
  457. package/dist/store/portable-bundle-scan.js.map +1 -1
  458. package/dist/store/portable-bundle.d.ts.map +1 -1
  459. package/dist/store/portable-bundle.js +15 -14
  460. package/dist/store/portable-bundle.js.map +1 -1
  461. package/dist/store/pre-repair-snapshot.d.ts +4 -1
  462. package/dist/store/pre-repair-snapshot.d.ts.map +1 -1
  463. package/dist/store/pre-repair-snapshot.js +5 -1
  464. package/dist/store/pre-repair-snapshot.js.map +1 -1
  465. package/dist/store/regenerators.d.ts +4 -2
  466. package/dist/store/regenerators.d.ts.map +1 -1
  467. package/dist/store/regenerators.js +7 -3
  468. package/dist/store/regenerators.js.map +1 -1
  469. package/dist/store/repair-malformed-dbs.d.ts +4 -0
  470. package/dist/store/repair-malformed-dbs.d.ts.map +1 -1
  471. package/dist/store/repair-malformed-dbs.js +3 -0
  472. package/dist/store/repair-malformed-dbs.js.map +1 -1
  473. package/dist/store/safety-data-accessor.d.ts +8 -3
  474. package/dist/store/safety-data-accessor.d.ts.map +1 -1
  475. package/dist/store/safety-data-accessor.js +11 -4
  476. package/dist/store/safety-data-accessor.js.map +1 -1
  477. package/dist/store/schema/cleo-global/nexus.d.ts +48 -0
  478. package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
  479. package/dist/store/schema/cleo-global/nexus.js +17 -0
  480. package/dist/store/schema/cleo-global/nexus.js.map +1 -1
  481. package/dist/store/schema/cleo-project/docs.d.ts +16 -0
  482. package/dist/store/schema/cleo-project/docs.d.ts.map +1 -1
  483. package/dist/store/schema/cleo-project/docs.js +10 -0
  484. package/dist/store/schema/cleo-project/docs.js.map +1 -1
  485. package/dist/store/schema/cleo-project/tasks-core.d.ts +80 -0
  486. package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
  487. package/dist/store/schema/cleo-project/tasks-core.js +25 -1
  488. package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
  489. package/dist/store/schema/cleo-shared/brain.d.ts +1 -1
  490. package/dist/store/schema/memory-schema.d.ts +1 -1
  491. package/dist/store/schema/nexus-schema.d.ts +48 -0
  492. package/dist/store/schema/nexus-schema.d.ts.map +1 -1
  493. package/dist/store/schema/nexus-schema.js +28 -7
  494. package/dist/store/schema/nexus-schema.js.map +1 -1
  495. package/dist/store/session-store.d.ts +65 -0
  496. package/dist/store/session-store.d.ts.map +1 -1
  497. package/dist/store/session-store.js +108 -7
  498. package/dist/store/session-store.js.map +1 -1
  499. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  500. package/dist/store/sqlite-data-accessor.js +245 -47
  501. package/dist/store/sqlite-data-accessor.js.map +1 -1
  502. package/dist/store/sqlite.d.ts +15 -3
  503. package/dist/store/sqlite.d.ts.map +1 -1
  504. package/dist/store/sqlite.js +52 -20
  505. package/dist/store/sqlite.js.map +1 -1
  506. package/dist/store/store-write-guard.d.ts +9 -3
  507. package/dist/store/store-write-guard.d.ts.map +1 -1
  508. package/dist/store/store-write-guard.js +25 -4
  509. package/dist/store/store-write-guard.js.map +1 -1
  510. package/dist/store/table-classification.d.ts +1 -1
  511. package/dist/store/table-classification.d.ts.map +1 -1
  512. package/dist/store/table-classification.js +34 -8
  513. package/dist/store/table-classification.js.map +1 -1
  514. package/dist/store/task-claim.d.ts +144 -0
  515. package/dist/store/task-claim.d.ts.map +1 -0
  516. package/dist/store/task-claim.js +195 -0
  517. package/dist/store/task-claim.js.map +1 -0
  518. package/dist/store/task-version.d.ts +43 -5
  519. package/dist/store/task-version.d.ts.map +1 -1
  520. package/dist/store/task-version.js +113 -17
  521. package/dist/store/task-version.js.map +1 -1
  522. package/dist/store/tasks-schema.d.ts +2 -0
  523. package/dist/store/tasks-schema.d.ts.map +1 -1
  524. package/dist/store/tasks-schema.js +1 -0
  525. package/dist/store/tasks-schema.js.map +1 -1
  526. package/dist/store/tasks-sqlite.js +1 -1
  527. package/dist/store/tasks-sqlite.js.map +1 -1
  528. package/dist/store/twin-collapse.d.ts +339 -22
  529. package/dist/store/twin-collapse.d.ts.map +1 -1
  530. package/dist/store/twin-collapse.js +1323 -48
  531. package/dist/store/twin-collapse.js.map +1 -1
  532. package/dist/store/umbrella-data-accessor.d.ts +8 -3
  533. package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
  534. package/dist/store/umbrella-data-accessor.js +10 -4
  535. package/dist/store/umbrella-data-accessor.js.map +1 -1
  536. package/dist/store/validation-schemas.d.ts +161 -1
  537. package/dist/store/validation-schemas.d.ts.map +1 -1
  538. package/dist/store/with-retry.d.ts +36 -0
  539. package/dist/store/with-retry.d.ts.map +1 -1
  540. package/dist/store/with-retry.js +51 -0
  541. package/dist/store/with-retry.js.map +1 -1
  542. package/dist/store/worktree-build-guard.d.ts +13 -4
  543. package/dist/store/worktree-build-guard.d.ts.map +1 -1
  544. package/dist/store/worktree-build-guard.js +21 -10
  545. package/dist/store/worktree-build-guard.js.map +1 -1
  546. package/dist/store/worktree-isolation-guard.d.ts +121 -10
  547. package/dist/store/worktree-isolation-guard.d.ts.map +1 -1
  548. package/dist/store/worktree-isolation-guard.js +155 -34
  549. package/dist/store/worktree-isolation-guard.js.map +1 -1
  550. package/dist/system/backup.d.ts +7 -0
  551. package/dist/system/backup.d.ts.map +1 -1
  552. package/dist/system/backup.js +5 -0
  553. package/dist/system/backup.js.map +1 -1
  554. package/dist/system/health.d.ts.map +1 -1
  555. package/dist/system/health.js +3 -1
  556. package/dist/system/health.js.map +1 -1
  557. package/dist/system/inject-generate.d.ts.map +1 -1
  558. package/dist/system/inject-generate.js +23 -10
  559. package/dist/system/inject-generate.js.map +1 -1
  560. package/dist/system/project-health.d.ts +8 -0
  561. package/dist/system/project-health.d.ts.map +1 -1
  562. package/dist/system/project-health.js +13 -5
  563. package/dist/system/project-health.js.map +1 -1
  564. package/dist/task-tools/index.d.ts +1 -1
  565. package/dist/task-tools/index.d.ts.map +1 -1
  566. package/dist/task-tools/index.js +1 -1
  567. package/dist/task-tools/index.js.map +1 -1
  568. package/dist/task-tools/score-task-priority.d.ts +38 -0
  569. package/dist/task-tools/score-task-priority.d.ts.map +1 -1
  570. package/dist/task-tools/score-task-priority.js +51 -0
  571. package/dist/task-tools/score-task-priority.js.map +1 -1
  572. package/dist/task-work/claims.d.ts +215 -0
  573. package/dist/task-work/claims.d.ts.map +1 -0
  574. package/dist/task-work/claims.js +272 -0
  575. package/dist/task-work/claims.js.map +1 -0
  576. package/dist/task-work/index.d.ts +47 -3
  577. package/dist/task-work/index.d.ts.map +1 -1
  578. package/dist/task-work/index.js +74 -41
  579. package/dist/task-work/index.js.map +1 -1
  580. package/dist/tasks/add.d.ts.map +1 -1
  581. package/dist/tasks/add.js +3 -2
  582. package/dist/tasks/add.js.map +1 -1
  583. package/dist/tasks/analyze.d.ts.map +1 -1
  584. package/dist/tasks/analyze.js +3 -4
  585. package/dist/tasks/analyze.js.map +1 -1
  586. package/dist/tasks/change-set.d.ts +5 -0
  587. package/dist/tasks/change-set.d.ts.map +1 -1
  588. package/dist/tasks/change-set.js +59 -3
  589. package/dist/tasks/change-set.js.map +1 -1
  590. package/dist/tasks/complete.d.ts +16 -0
  591. package/dist/tasks/complete.d.ts.map +1 -1
  592. package/dist/tasks/complete.js +27 -7
  593. package/dist/tasks/complete.js.map +1 -1
  594. package/dist/tasks/component-pr.d.ts +162 -1
  595. package/dist/tasks/component-pr.d.ts.map +1 -1
  596. package/dist/tasks/component-pr.js +560 -59
  597. package/dist/tasks/component-pr.js.map +1 -1
  598. package/dist/tasks/done-record.d.ts +14 -1
  599. package/dist/tasks/done-record.d.ts.map +1 -1
  600. package/dist/tasks/done-record.js +37 -0
  601. package/dist/tasks/done-record.js.map +1 -1
  602. package/dist/tasks/duplicate-detector.d.ts +20 -1
  603. package/dist/tasks/duplicate-detector.d.ts.map +1 -1
  604. package/dist/tasks/duplicate-detector.js +10 -2
  605. package/dist/tasks/duplicate-detector.js.map +1 -1
  606. package/dist/tasks/engine-wrap-ops.d.ts +19 -10
  607. package/dist/tasks/engine-wrap-ops.d.ts.map +1 -1
  608. package/dist/tasks/engine-wrap-ops.js +38 -10
  609. package/dist/tasks/engine-wrap-ops.js.map +1 -1
  610. package/dist/tasks/graph-ops.d.ts +9 -2
  611. package/dist/tasks/graph-ops.d.ts.map +1 -1
  612. package/dist/tasks/graph-ops.js +24 -32
  613. package/dist/tasks/graph-ops.js.map +1 -1
  614. package/dist/tasks/plan.d.ts.map +1 -1
  615. package/dist/tasks/plan.js +16 -60
  616. package/dist/tasks/plan.js.map +1 -1
  617. package/dist/tasks/task-context.d.ts.map +1 -1
  618. package/dist/tasks/task-context.js +13 -0
  619. package/dist/tasks/task-context.js.map +1 -1
  620. package/dist/tasks/task-import.d.ts.map +1 -1
  621. package/dist/tasks/task-import.js +21 -12
  622. package/dist/tasks/task-import.js.map +1 -1
  623. package/dist/tasks/task-next.d.ts +25 -2
  624. package/dist/tasks/task-next.d.ts.map +1 -1
  625. package/dist/tasks/task-next.js +32 -13
  626. package/dist/tasks/task-next.js.map +1 -1
  627. package/dist/tasks/update.d.ts.map +1 -1
  628. package/dist/tasks/update.js +7 -5
  629. package/dist/tasks/update.js.map +1 -1
  630. package/dist/upgrade.d.ts +1 -1
  631. package/dist/upgrade.d.ts.map +1 -1
  632. package/dist/upgrade.js +48 -9
  633. package/dist/upgrade.js.map +1 -1
  634. package/dist/validation/doctor/checks.d.ts +20 -6
  635. package/dist/validation/doctor/checks.d.ts.map +1 -1
  636. package/dist/validation/doctor/checks.js +51 -8
  637. package/dist/validation/doctor/checks.js.map +1 -1
  638. package/dist/validation/validate-ops.d.ts.map +1 -1
  639. package/dist/validation/validate-ops.js +2 -3
  640. package/dist/validation/validate-ops.js.map +1 -1
  641. package/migrations/drizzle-cleo-global/20260929010000_t12512-registry-probed-opened/migration.sql +35 -0
  642. package/migrations/drizzle-cleo-global/20260929020000_t12721-git-state-head-committed-at/migration.sql +25 -0
  643. package/migrations/drizzle-cleo-project/20260929000000_t12535-docs-attachments-union-shape/migration.sql +21 -0
  644. package/migrations/drizzle-cleo-project/20260929120000_t12502-task-claim-leases/migration.sql +77 -0
  645. package/migrations/drizzle-cleo-project/20260929130000_t12736-claim-lease-iso-repair/migration.sql +37 -0
  646. package/package.json +23 -13
  647. package/schemas/project-info.schema.json +10 -4
  648. package/templates/CLEO-INJECTION.md +1 -1
  649. package/templates/CLEO-REFERENCE.md +3 -3
  650. package/templates/cleo-gitignore +11 -0
  651. package/templates/workflows/release-prepare.yml.tmpl +156 -10
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Replica presence mapper (T12721): one fleet-view location → the path-free
3
+ * `ReplicaPresence` the cleo-nexus cloud accepts at
4
+ * `PUT /v1/projects/:projectId/replicas/:replicaId/presence`.
5
+ *
6
+ * Pure: no I/O, no clock. Everything the contract marks **device-local, never
7
+ * mirrored** — path, hostname, remote name and URL, upstream ref, HEAD and
8
+ * upstream commit shas, probe error text — is read only to derive a boolean,
9
+ * a count or an enum, and never copied. `branch` is copied only when the
10
+ * caller opts in.
11
+ *
12
+ * @task T12721
13
+ * @epic T12496
14
+ */
15
+ import { type NexusFleetDevice, type NexusFleetGitSummary, type NexusFleetLocation } from '@cleocode/contracts';
16
+ import type { ReplicaPresence } from '@cleocode/contracts/cloud';
17
+ /** The `git` block of a {@link ReplicaPresence}. */
18
+ export type ReplicaPresenceGit = NonNullable<ReplicaPresence['git']>;
19
+ /** The remote tracking state a presence reports. */
20
+ export type ReplicaRemoteState = ReplicaPresenceGit['remote'];
21
+ /** Server-side length limits of `ReplicaPresence` string fields. */
22
+ export declare const REPLICA_PRESENCE_LIMITS: {
23
+ /** `git.branch` maximum length. */
24
+ readonly branchMax: 200;
25
+ /** `cliVersion` maximum length. */
26
+ readonly cliVersionMax: 40;
27
+ };
28
+ /** `cliVersion` sent when the device never reported its CLEO version. */
29
+ export declare const UNKNOWN_CLI_VERSION = "unknown";
30
+ /** Options for {@link toReplicaPresence}. */
31
+ export interface ToReplicaPresenceOptions {
32
+ /** Include the checked-out branch (truncated to 200). Default `false`: branch names can be sensitive. */
33
+ includeBranch?: boolean;
34
+ /** Presence schema version. Default {@link NEXUS_FLEET_SCHEMA_VERSION}. */
35
+ schemaVersion?: number;
36
+ }
37
+ /**
38
+ * Remote tracking state of one probe row, as the presence enum.
39
+ *
40
+ * - a real probe failure (path missing or unreadable, not a repo, git error or
41
+ * timeout) → `unknown`. `E_FETCH_FAILED` is NOT one: an offline `--fetch`
42
+ * still recorded valid local ahead/behind as of the LAST fetch, so it maps
43
+ * exactly like a probe that never fetched;
44
+ * - no upstream → `no-upstream`;
45
+ * - an upstream whose tracking ref is gone (`remote.headSha` null — e.g. the
46
+ * branch was deleted remotely and pruned) or whose ahead/behind git did not
47
+ * report → `unknown`, never a defaulted `in-sync`;
48
+ * - never fetched (`fetchedAt` null) → `unknown`;
49
+ * - otherwise from ahead/behind as of the last fetch: both → `diverged`,
50
+ * ahead only → `ahead`, behind only → `behind`, neither → `in-sync`.
51
+ *
52
+ * @param git - Recorded git summary of the location.
53
+ * @returns The presence remote state.
54
+ * @example
55
+ * ```ts
56
+ * replicaRemoteState(summary); // 'behind'
57
+ * ```
58
+ */
59
+ export declare function replicaRemoteState(git: NexusFleetGitSummary): ReplicaRemoteState;
60
+ /**
61
+ * Map one fleet-view location on one device to the cloud `ReplicaPresence`.
62
+ *
63
+ * - `observedAt` is the probe instant (`git.probedAt`); an unprobed location
64
+ * has no `git` block and reports when it was last encountered (`lastSeen`).
65
+ * - `cliVersion` is `device.cleoVersion` truncated to 40, or `unknown`.
66
+ * - `git.dirty` is `(dirtyCount ?? 0) + (untrackedCount ?? 0) > 0`;
67
+ * `ahead`/`behind` default to 0; `remote` is {@link replicaRemoteState};
68
+ * `lastCommitAt` is `headCommittedAt` when known; `branch` only with
69
+ * `includeBranch`, truncated to 200.
70
+ *
71
+ * The replica id is not part of the body: it is the `:replicaId` path
72
+ * segment (`location.replicaId`), and a caller must not send presence while
73
+ * it is `null`.
74
+ *
75
+ * @param location - The location, from `nexus.projects.fleet`.
76
+ * @param device - The device holding it (same `deviceId`).
77
+ * @param opts - Branch opt-in and schema version.
78
+ * @returns A path-free presence body.
79
+ * @throws Error when `device.deviceId` differs from `location.deviceId`, or
80
+ * when the observation instant (`git.probedAt`, else `lastSeen`) is not a
81
+ * parseable timestamp — a raw string is never sent as `observedAt`.
82
+ * @example
83
+ * ```ts
84
+ * const body = toReplicaPresence(loc, device, { includeBranch: false });
85
+ * ```
86
+ */
87
+ export declare function toReplicaPresence(location: NexusFleetLocation, device: NexusFleetDevice, opts?: ToReplicaPresenceOptions): ReplicaPresence;
88
+ //# sourceMappingURL=presence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/cloud/presence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,oDAAoD;AACpD,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAErE,oDAAoD;AACpD,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAE9D,oEAAoE;AACpE,eAAO,MAAM,uBAAuB;IAClC,mCAAmC;;IAEnC,mCAAmC;;CAE3B,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,yGAAyG;IACzG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,oBAAoB,GAAG,kBAAkB,CAUhF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE,wBAA6B,GAClC,eAAe,CAqCjB"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Replica presence mapper (T12721): one fleet-view location → the path-free
3
+ * `ReplicaPresence` the cleo-nexus cloud accepts at
4
+ * `PUT /v1/projects/:projectId/replicas/:replicaId/presence`.
5
+ *
6
+ * Pure: no I/O, no clock. Everything the contract marks **device-local, never
7
+ * mirrored** — path, hostname, remote name and URL, upstream ref, HEAD and
8
+ * upstream commit shas, probe error text — is read only to derive a boolean,
9
+ * a count or an enum, and never copied. `branch` is copied only when the
10
+ * caller opts in.
11
+ *
12
+ * @task T12721
13
+ * @epic T12496
14
+ */
15
+ import { NEXUS_FLEET_SCHEMA_VERSION, } from '@cleocode/contracts';
16
+ /** Server-side length limits of `ReplicaPresence` string fields. */
17
+ export const REPLICA_PRESENCE_LIMITS = {
18
+ /** `git.branch` maximum length. */
19
+ branchMax: 200,
20
+ /** `cliVersion` maximum length. */
21
+ cliVersionMax: 40,
22
+ };
23
+ /** `cliVersion` sent when the device never reported its CLEO version. */
24
+ export const UNKNOWN_CLI_VERSION = 'unknown';
25
+ /**
26
+ * Remote tracking state of one probe row, as the presence enum.
27
+ *
28
+ * - a real probe failure (path missing or unreadable, not a repo, git error or
29
+ * timeout) → `unknown`. `E_FETCH_FAILED` is NOT one: an offline `--fetch`
30
+ * still recorded valid local ahead/behind as of the LAST fetch, so it maps
31
+ * exactly like a probe that never fetched;
32
+ * - no upstream → `no-upstream`;
33
+ * - an upstream whose tracking ref is gone (`remote.headSha` null — e.g. the
34
+ * branch was deleted remotely and pruned) or whose ahead/behind git did not
35
+ * report → `unknown`, never a defaulted `in-sync`;
36
+ * - never fetched (`fetchedAt` null) → `unknown`;
37
+ * - otherwise from ahead/behind as of the last fetch: both → `diverged`,
38
+ * ahead only → `ahead`, behind only → `behind`, neither → `in-sync`.
39
+ *
40
+ * @param git - Recorded git summary of the location.
41
+ * @returns The presence remote state.
42
+ * @example
43
+ * ```ts
44
+ * replicaRemoteState(summary); // 'behind'
45
+ * ```
46
+ */
47
+ export function replicaRemoteState(git) {
48
+ if (git.probeErrorCode !== null && git.probeErrorCode !== 'E_FETCH_FAILED')
49
+ return 'unknown';
50
+ const { upstream, ahead, behind, headSha, fetchedAt } = git.remote;
51
+ if (upstream === null)
52
+ return 'no-upstream';
53
+ if (ahead === null || behind === null || headSha === null)
54
+ return 'unknown';
55
+ if (fetchedAt === null)
56
+ return 'unknown';
57
+ if (ahead > 0 && behind > 0)
58
+ return 'diverged';
59
+ if (ahead > 0)
60
+ return 'ahead';
61
+ if (behind > 0)
62
+ return 'behind';
63
+ return 'in-sync';
64
+ }
65
+ /**
66
+ * Map one fleet-view location on one device to the cloud `ReplicaPresence`.
67
+ *
68
+ * - `observedAt` is the probe instant (`git.probedAt`); an unprobed location
69
+ * has no `git` block and reports when it was last encountered (`lastSeen`).
70
+ * - `cliVersion` is `device.cleoVersion` truncated to 40, or `unknown`.
71
+ * - `git.dirty` is `(dirtyCount ?? 0) + (untrackedCount ?? 0) > 0`;
72
+ * `ahead`/`behind` default to 0; `remote` is {@link replicaRemoteState};
73
+ * `lastCommitAt` is `headCommittedAt` when known; `branch` only with
74
+ * `includeBranch`, truncated to 200.
75
+ *
76
+ * The replica id is not part of the body: it is the `:replicaId` path
77
+ * segment (`location.replicaId`), and a caller must not send presence while
78
+ * it is `null`.
79
+ *
80
+ * @param location - The location, from `nexus.projects.fleet`.
81
+ * @param device - The device holding it (same `deviceId`).
82
+ * @param opts - Branch opt-in and schema version.
83
+ * @returns A path-free presence body.
84
+ * @throws Error when `device.deviceId` differs from `location.deviceId`, or
85
+ * when the observation instant (`git.probedAt`, else `lastSeen`) is not a
86
+ * parseable timestamp — a raw string is never sent as `observedAt`.
87
+ * @example
88
+ * ```ts
89
+ * const body = toReplicaPresence(loc, device, { includeBranch: false });
90
+ * ```
91
+ */
92
+ export function toReplicaPresence(location, device, opts = {}) {
93
+ if (device.deviceId !== location.deviceId) {
94
+ throw new Error(`toReplicaPresence: device ${device.deviceId} does not hold this location (device ${location.deviceId})`);
95
+ }
96
+ const observedRaw = location.git?.probedAt ?? location.lastSeen;
97
+ const observedAt = toUtcIso(observedRaw);
98
+ if (observedAt === undefined) {
99
+ throw new Error(`toReplicaPresence: observation instant ${JSON.stringify(observedRaw)} is not a valid ISO 8601 timestamp`);
100
+ }
101
+ const presence = {
102
+ cliVersion: truncate(device.cleoVersion ?? UNKNOWN_CLI_VERSION, REPLICA_PRESENCE_LIMITS.cliVersionMax),
103
+ schemaVersion: opts.schemaVersion ?? NEXUS_FLEET_SCHEMA_VERSION,
104
+ observedAt,
105
+ };
106
+ const git = location.git;
107
+ if (git === null)
108
+ return presence;
109
+ const block = {
110
+ dirty: (git.dirtyCount ?? 0) + (git.untrackedCount ?? 0) > 0,
111
+ ahead: git.remote.ahead ?? 0,
112
+ behind: git.remote.behind ?? 0,
113
+ remote: replicaRemoteState(git),
114
+ };
115
+ if (opts.includeBranch === true && git.branch !== null) {
116
+ block.branch = truncate(git.branch, REPLICA_PRESENCE_LIMITS.branchMax);
117
+ }
118
+ const lastCommitAt = git.headCommittedAt === null ? undefined : toUtcIso(git.headCommittedAt);
119
+ if (lastCommitAt !== undefined)
120
+ block.lastCommitAt = lastCommitAt;
121
+ presence.git = block;
122
+ return presence;
123
+ }
124
+ /** Truncate to `max` UTF-16 units without splitting a surrogate pair. */
125
+ function truncate(value, max) {
126
+ if (value.length <= max)
127
+ return value;
128
+ const cut = value.slice(0, max);
129
+ const last = cut.charCodeAt(cut.length - 1);
130
+ return last >= 0xd800 && last <= 0xdbff ? cut.slice(0, -1) : cut;
131
+ }
132
+ /** An instant as ISO 8601 UTC (`Z`), or `undefined` when unparsable. */
133
+ function toUtcIso(value) {
134
+ const ms = Date.parse(value);
135
+ return Number.isNaN(ms) ? undefined : new Date(ms).toISOString();
136
+ }
137
+ //# sourceMappingURL=presence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence.js","sourceRoot":"","sources":["../../src/cloud/presence.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,12 @@ import type { Http } from './http.js';
4
4
  * Register a project, or update its metadata when it is already registered. Organizations own
5
5
  * projects (ADR-095): pass `organizationId` to register into one the caller belongs to, or omit it
6
6
  * for the caller's personal organization. Re-registering into a different organization is refused
7
- * with `E_CONFLICT`. The server records no filesystem path.
7
+ * with `E_CONFLICT`. The server records no filesystem path. `created` is `true` on 201 (new
8
+ * registration) and `false` on 200 (the id was already registered; its label is updated).
8
9
  */
9
10
  export declare function registerProject(http: Http, req: RegisterProjectRequest): Promise<{
10
11
  project: Project;
11
12
  streamId: StreamId;
13
+ created: boolean;
12
14
  }>;
13
15
  //# sourceMappingURL=projects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/cloud/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAE3B,KAAK,QAAQ,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAEnD"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/cloud/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAE3B,KAAK,QAAQ,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAQrE"}
@@ -3,9 +3,11 @@ import { RegisterProjectResult, } from '@cleocode/contracts/cloud';
3
3
  * Register a project, or update its metadata when it is already registered. Organizations own
4
4
  * projects (ADR-095): pass `organizationId` to register into one the caller belongs to, or omit it
5
5
  * for the caller's personal organization. Re-registering into a different organization is refused
6
- * with `E_CONFLICT`. The server records no filesystem path.
6
+ * with `E_CONFLICT`. The server records no filesystem path. `created` is `true` on 201 (new
7
+ * registration) and `false` on 200 (the id was already registered; its label is updated).
7
8
  */
8
9
  export async function registerProject(http, req) {
9
- return http.request('POST', '/v1/projects', RegisterProjectResult, req);
10
+ const { data, status } = await http.requestWithStatus('POST', '/v1/projects', RegisterProjectResult, req);
11
+ return { ...data, created: status === 201 };
10
12
  }
11
13
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/cloud/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,qBAAqB,GAEtB,MAAM,2BAA2B,CAAC;AAGnC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,GAA2B;IAE3B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/cloud/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,qBAAqB,GAEtB,MAAM,2BAA2B,CAAC;AAGnC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,GAA2B;IAE3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACnD,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,GAAG,CACJ,CAAC;IACF,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AAC9C,CAAC"}
@@ -75,11 +75,20 @@ export type ProjectCredentialKdf = 'project-id' | 'legacy-path';
75
75
  */
76
76
  export interface ProjectSecretContext extends CredentialKeyOptions {
77
77
  /**
78
- * Stable project identity — the `projectId` of `.cleo/project-info.json`
79
- * (or its tracked successor). Travels with the project directory, so a
80
- * moved or renamed checkout derives the same key.
78
+ * Stable project identity — the declared id (`.cleo/project.json`, the
79
+ * legacy `.cleo/project-id`, else the `project-info.json` cache). Travels
80
+ * with the project directory, so a moved or renamed checkout derives the
81
+ * same key.
81
82
  */
82
83
  readonly projectId: string;
84
+ /**
85
+ * Ids this project was keyed by before (T12716): the `project-info.json`
86
+ * cache when it disagrees with the tracked id, and its
87
+ * `previousProjectIds` receipts. A project-id ciphertext sealed under one
88
+ * of them is opened and re-wrapped under {@link ProjectSecretContext.projectId},
89
+ * so re-keying a project never strands its credentials.
90
+ */
91
+ readonly previousProjectIds?: readonly string[];
83
92
  /**
84
93
  * Candidate project paths for ciphertexts still under the legacy path KDF
85
94
  * (typically the current root plus the path the registry last recorded).
@@ -123,7 +132,8 @@ export declare function encryptProjectSecret(plaintext: string, projectId: strin
123
132
  /**
124
133
  * Decrypt a project-scoped secret, migrating legacy ciphertexts on the way.
125
134
  *
126
- * - Version `0x02` ciphertexts open with the project-identity key.
135
+ * - Version `0x02` ciphertexts open with the project-identity key; one sealed
136
+ * under a `previousProjectIds` entry is opened and re-wrapped (T12716).
127
137
  * - Version `0x01` (legacy, path-bound) ciphertexts are tried against each of
128
138
  * `legacyProjectPaths`; the first that authenticates wins and the secret is
129
139
  * re-encrypted under the project-identity KDF and returned as `rewrapped`
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/crypto/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAqBH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAuID;;;;GAIG;AACH,eAAO,MAAM,sCAAsC,IAAO,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,qCAAqC,IAAO,CAAC;AAK1D;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,aAAa,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AA2BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAyClC;AAyCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/crypto/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAqBH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAuID;;;;GAIG;AACH,eAAO,MAAM,sCAAsC,IAAO,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,qCAAqC,IAAO,CAAC;AAK1D;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,aAAa,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AA2BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAqDlC;AAyCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -232,7 +232,8 @@ export async function encryptProjectSecret(plaintext, projectId, options = {}) {
232
232
  /**
233
233
  * Decrypt a project-scoped secret, migrating legacy ciphertexts on the way.
234
234
  *
235
- * - Version `0x02` ciphertexts open with the project-identity key.
235
+ * - Version `0x02` ciphertexts open with the project-identity key; one sealed
236
+ * under a `previousProjectIds` entry is opened and re-wrapped (T12716).
236
237
  * - Version `0x01` (legacy, path-bound) ciphertexts are tried against each of
237
238
  * `legacyProjectPaths`; the first that authenticates wins and the secret is
238
239
  * re-encrypted under the project-identity KDF and returned as `rewrapped`
@@ -250,6 +251,19 @@ export async function decryptProjectSecret(ciphertext, context) {
250
251
  if (parts.version === PROJECT_CIPHERTEXT_VERSION_PROJECT_ID) {
251
252
  const plaintext = openWithKey(parts, await deriveProjectIdKey(context.projectId, context.cleoHome));
252
253
  if (plaintext === null) {
254
+ // T12716: sealed under an id the project was re-keyed away from.
255
+ for (const previous of new Set(context.previousProjectIds ?? [])) {
256
+ if (previous.length === 0 || previous === context.projectId)
257
+ continue;
258
+ const opened = openWithKey(parts, await deriveProjectIdKey(previous, context.cleoHome));
259
+ if (opened !== null) {
260
+ return {
261
+ plaintext: opened,
262
+ kdf: 'project-id',
263
+ rewrapped: await encryptProjectSecret(opened, context.projectId, context),
264
+ };
265
+ }
266
+ }
253
267
  throw new Error(`Cannot decrypt project credential for project ${context.projectId}: ` +
254
268
  'the machine key differs from the one that encrypted it (another device, or a ' +
255
269
  'regenerated machine-key), or the data is corrupted.');
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/crypto/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/crypto/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Build the System One benchmark dataset from CLEO's own history (T12495).
3
+ *
4
+ * The control group is CLEO dogfooded: every row is a question a decision
5
+ * site really asks, labelled from what the project's records already say.
6
+ *
7
+ * - `duplicateDetection` — task pairs. Positives: a `duplicates` relation, a
8
+ * task cancelled with a reason that calls it a duplicate of a named task,
9
+ * or a note that records a duplicate of a named task. Negatives: pairs of
10
+ * tasks under the same parent with no relation between them.
11
+ * - `observationType` — observations whose stored type can only have come
12
+ * from a caller: it is one of the offered options and differs from BOTH
13
+ * the keyword default the writer applies today and the substring default
14
+ * it applied before T12494. A type that agrees with a keyword default may
15
+ * have been defaulted, so it is not used as a label.
16
+ * - `decisionContradiction` — decision pairs. Positives: a supersedes edge
17
+ * (newer → older). Negatives: random pairs with no supersedes edge between
18
+ * them. The newer decision's declared `supersedes` is never sent.
19
+ *
20
+ * Pair rows whose text gives the label away (one side names the other's id,
21
+ * or says "duplicate of T123" / "supersedes D12") are dropped
22
+ * ({@link leaksBenchLabel}).
23
+ *
24
+ * Every text field is redacted with the memory redaction patterns System One
25
+ * uses (`redactContent`) and clipped before it is stored, so the dataset file
26
+ * never holds a secret the provider would not have been sent anyway.
27
+ *
28
+ * Pure: the store is read through a {@link BenchSource}; randomness is seeded.
29
+ *
30
+ * @task T12495
31
+ * @epic T12486
32
+ */
33
+ import { type BenchRow, type BenchSite, type BenchSource } from './types.js';
34
+ /** Characters kept per text field in the dataset (the site builders clip further). */
35
+ export declare const BENCH_TEXT_MAX_CHARS = 1000;
36
+ /** Default cap on rows per site. */
37
+ export declare const DEFAULT_BENCH_MAX_ROWS_PER_SITE = 400;
38
+ /** Default negatives sampled per positive. */
39
+ export declare const DEFAULT_BENCH_NEGATIVES_PER_POSITIVE = 1;
40
+ /** Negatives sampled even when a site has few or no positives. */
41
+ export declare const MIN_BENCH_NEGATIVES = 10;
42
+ /** Options for {@link buildBenchDataset}. */
43
+ export interface BuildBenchDatasetOptions {
44
+ /** Sites to build. Default: all of {@link BENCH_SITES}. */
45
+ readonly sites?: readonly BenchSite[];
46
+ /** PRNG seed. Default {@link DEFAULT_BENCH_SEED}. */
47
+ readonly seed?: number;
48
+ /** Row cap per site. Default {@link DEFAULT_BENCH_MAX_ROWS_PER_SITE}. */
49
+ readonly maxRowsPerSite?: number;
50
+ /** Negatives per positive. Default {@link DEFAULT_BENCH_NEGATIVES_PER_POSITIVE}. */
51
+ readonly negativesPerPositive?: number;
52
+ /** Redaction. Default: the memory redaction patterns (`redactContent`). */
53
+ readonly redact?: (text: string) => string;
54
+ }
55
+ /** Row counts of a dataset, per site and label. */
56
+ export interface BenchDatasetSizes {
57
+ /** Total rows. */
58
+ readonly total: number;
59
+ /** Rows marked owner-verified. */
60
+ readonly ownerVerified: number;
61
+ /** Site → label → rows. */
62
+ readonly bySite: Readonly<Record<string, Readonly<Record<string, number>>>>;
63
+ }
64
+ /**
65
+ * The type the pre-T12494 writer assigned when the caller gave none: the
66
+ * first keyword group with a SUBSTRING match, else `discovery`.
67
+ *
68
+ * @param text - Observation narrative.
69
+ * @returns The legacy default type.
70
+ */
71
+ export declare function legacyKeywordObservationType(text: string): string;
72
+ /**
73
+ * Whether a pair row's text gives its label away: either side names the
74
+ * other's id, or says "duplicate of T123" / "supersedes D12". Such rows are
75
+ * dropped, so a provider is never scored on reading the answer off the text.
76
+ *
77
+ * @param row - A dataset row.
78
+ * @returns True when the text leaks the label.
79
+ */
80
+ export declare function leaksBenchLabel(row: BenchRow): boolean;
81
+ /**
82
+ * Build the labelled dataset from a store.
83
+ *
84
+ * @param source - Store port (the accessors in production, records in tests).
85
+ * @param opts - Sites, seed, caps and redaction.
86
+ * @returns Rows, grouped by site in {@link BENCH_SITES} order.
87
+ */
88
+ export declare function buildBenchDataset(source: BenchSource, opts?: BuildBenchDatasetOptions): Promise<BenchRow[]>;
89
+ /**
90
+ * Count rows per site and label.
91
+ *
92
+ * @param rows - Dataset rows.
93
+ * @returns The sizes.
94
+ */
95
+ export declare function benchDatasetSizes(rows: readonly BenchRow[]): BenchDatasetSizes;
96
+ /**
97
+ * Serialise rows as JSONL (one row per line, trailing newline).
98
+ *
99
+ * @param rows - Dataset rows.
100
+ * @returns The JSONL text.
101
+ */
102
+ export declare function serializeBenchDataset(rows: readonly BenchRow[]): string;
103
+ /**
104
+ * Parse and validate JSONL rows.
105
+ *
106
+ * @param text - JSONL text.
107
+ * @returns The rows.
108
+ * @throws Error naming the first invalid line.
109
+ */
110
+ export declare function parseBenchDataset(text: string): BenchRow[];
111
+ /**
112
+ * Write rows to a JSONL file.
113
+ *
114
+ * @param path - Target file.
115
+ * @param rows - Dataset rows.
116
+ */
117
+ export declare function writeBenchDataset(path: string, rows: readonly BenchRow[]): Promise<void>;
118
+ /**
119
+ * Read rows from a JSONL file.
120
+ *
121
+ * @param path - Source file.
122
+ * @returns The rows.
123
+ */
124
+ export declare function readBenchDataset(path: string): Promise<BenchRow[]>;
125
+ //# sourceMappingURL=dataset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../../src/decide/bench/dataset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAUH,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,WAAW,EAGjB,MAAM,YAAY,CAAC;AAEpB,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,oCAAoC;AACpC,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD,8CAA8C;AAC9C,eAAO,MAAM,oCAAoC,IAAI,CAAC;AAEtD,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,oFAAoF;IACpF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C;AAED,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,kBAAkB;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7E;AAcD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjE;AAcD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAatD;AA2SD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsBrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,iBAAiB,CAY9E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAEvE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAe1D;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9F;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAExE"}