@cleocode/core 2026.5.133 → 2026.6.0

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 (560) hide show
  1. package/binaries/README.md +49 -27
  2. package/dist/agents/{agent-registry.d.ts → agent-capacity-tracker.d.ts} +2 -2
  3. package/dist/agents/agent-capacity-tracker.d.ts.map +1 -0
  4. package/dist/agents/{agent-registry.js → agent-capacity-tracker.js} +2 -2
  5. package/dist/agents/agent-capacity-tracker.js.map +1 -0
  6. package/dist/agents/index.d.ts +1 -1
  7. package/dist/agents/index.d.ts.map +1 -1
  8. package/dist/agents/index.js +4 -2
  9. package/dist/agents/index.js.map +1 -1
  10. package/dist/agents/seed-install.d.ts +1 -1
  11. package/dist/agents/seed-install.d.ts.map +1 -1
  12. package/dist/agents/seed-install.js +42 -36
  13. package/dist/agents/seed-install.js.map +1 -1
  14. package/dist/caamp-export.d.ts +18 -0
  15. package/dist/caamp-export.d.ts.map +1 -0
  16. package/dist/caamp-export.js +18 -0
  17. package/dist/caamp-export.js.map +1 -0
  18. package/dist/conduit/local-transport.d.ts +1 -1
  19. package/dist/conduit/local-transport.d.ts.map +1 -1
  20. package/dist/conduit/local-transport.js +69 -43
  21. package/dist/conduit/local-transport.js.map +1 -1
  22. package/dist/dispatch/mutate-projection.d.ts.map +1 -1
  23. package/dist/dispatch/mutate-projection.js +11 -0
  24. package/dist/dispatch/mutate-projection.js.map +1 -1
  25. package/dist/docs/docs-read-model.d.ts +7 -0
  26. package/dist/docs/docs-read-model.d.ts.map +1 -1
  27. package/dist/docs/docs-read-model.js +5 -0
  28. package/dist/docs/docs-read-model.js.map +1 -1
  29. package/dist/docs/supersede.d.ts.map +1 -1
  30. package/dist/docs/supersede.js +12 -7
  31. package/dist/docs/supersede.js.map +1 -1
  32. package/dist/doctor/db-substrate.d.ts.map +1 -1
  33. package/dist/doctor/db-substrate.js +10 -9
  34. package/dist/doctor/db-substrate.js.map +1 -1
  35. package/dist/git-shim-export.d.ts +18 -0
  36. package/dist/git-shim-export.d.ts.map +1 -0
  37. package/dist/git-shim-export.js +18 -0
  38. package/dist/git-shim-export.js.map +1 -0
  39. package/dist/hooks/payload-schemas.d.ts +2 -2
  40. package/dist/init.d.ts.map +1 -1
  41. package/dist/init.js +39 -32
  42. package/dist/init.js.map +1 -1
  43. package/dist/internal.d.ts +11 -3
  44. package/dist/internal.d.ts.map +1 -1
  45. package/dist/internal.js +14 -5
  46. package/dist/internal.js.map +1 -1
  47. package/dist/lafs-export.d.ts +18 -0
  48. package/dist/lafs-export.d.ts.map +1 -0
  49. package/dist/lafs-export.js +18 -0
  50. package/dist/lafs-export.js.map +1 -0
  51. package/dist/lifecycle/effective-stage.js +1 -1
  52. package/dist/lifecycle/index.js +1 -1
  53. package/dist/lifecycle/index.js.map +1 -1
  54. package/dist/lifecycle/rollup.js +1 -1
  55. package/dist/llm/credential-pool.d.ts +17 -0
  56. package/dist/llm/credential-pool.d.ts.map +1 -1
  57. package/dist/llm/credential-pool.js +40 -1
  58. package/dist/llm/credential-pool.js.map +1 -1
  59. package/dist/llm/plugin-facade.d.ts.map +1 -1
  60. package/dist/llm/plugin-facade.js +11 -19
  61. package/dist/llm/plugin-facade.js.map +1 -1
  62. package/dist/llm/role-executor.d.ts +8 -0
  63. package/dist/llm/role-executor.d.ts.map +1 -1
  64. package/dist/llm/role-executor.js +96 -4
  65. package/dist/llm/role-executor.js.map +1 -1
  66. package/dist/llm/role-resolver.d.ts.map +1 -1
  67. package/dist/llm/role-resolver.js +56 -1
  68. package/dist/llm/role-resolver.js.map +1 -1
  69. package/dist/llm/transports/codex-oauth-headers.d.ts +51 -0
  70. package/dist/llm/transports/codex-oauth-headers.d.ts.map +1 -0
  71. package/dist/llm/transports/codex-oauth-headers.js +89 -0
  72. package/dist/llm/transports/codex-oauth-headers.js.map +1 -0
  73. package/dist/memory/claude-mem-migration.d.ts.map +1 -1
  74. package/dist/memory/claude-mem-migration.js +1 -3
  75. package/dist/memory/claude-mem-migration.js.map +1 -1
  76. package/dist/memory/decisions.d.ts.map +1 -1
  77. package/dist/memory/decisions.js +77 -23
  78. package/dist/memory/decisions.js.map +1 -1
  79. package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
  80. package/dist/memory/graph-memory-bridge.js +12 -6
  81. package/dist/memory/graph-memory-bridge.js.map +1 -1
  82. package/dist/memory/learnings.d.ts +2 -2
  83. package/dist/memory/nexus-plasticity.d.ts +21 -9
  84. package/dist/memory/nexus-plasticity.d.ts.map +1 -1
  85. package/dist/memory/nexus-plasticity.js +44 -22
  86. package/dist/memory/nexus-plasticity.js.map +1 -1
  87. package/dist/memory/patterns.d.ts +2 -2
  88. package/dist/memory/redaction.d.ts +19 -3
  89. package/dist/memory/redaction.d.ts.map +1 -1
  90. package/dist/memory/redaction.js +22 -94
  91. package/dist/memory/redaction.js.map +1 -1
  92. package/dist/metrics/token-service.d.ts +8 -2
  93. package/dist/metrics/token-service.d.ts.map +1 -1
  94. package/dist/metrics/token-service.js +1 -1
  95. package/dist/metrics/token-service.js.map +1 -1
  96. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  97. package/dist/nexus/analyze-orchestrator.js +6 -8
  98. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  99. package/dist/nexus/api-extractors/http-extractor.d.ts.map +1 -1
  100. package/dist/nexus/api-extractors/http-extractor.js +3 -3
  101. package/dist/nexus/api-extractors/http-extractor.js.map +1 -1
  102. package/dist/nexus/clusters.d.ts.map +1 -1
  103. package/dist/nexus/clusters.js +3 -2
  104. package/dist/nexus/clusters.js.map +1 -1
  105. package/dist/nexus/context.d.ts.map +1 -1
  106. package/dist/nexus/context.js +10 -16
  107. package/dist/nexus/context.js.map +1 -1
  108. package/dist/nexus/diff.d.ts.map +1 -1
  109. package/dist/nexus/diff.js +6 -4
  110. package/dist/nexus/diff.js.map +1 -1
  111. package/dist/nexus/export.d.ts.map +1 -1
  112. package/dist/nexus/export.js +7 -4
  113. package/dist/nexus/export.js.map +1 -1
  114. package/dist/nexus/flows.d.ts.map +1 -1
  115. package/dist/nexus/flows.js +3 -1
  116. package/dist/nexus/flows.js.map +1 -1
  117. package/dist/nexus/impact.d.ts +1 -1
  118. package/dist/nexus/impact.d.ts.map +1 -1
  119. package/dist/nexus/impact.js +31 -17
  120. package/dist/nexus/impact.js.map +1 -1
  121. package/dist/nexus/living-brain.d.ts.map +1 -1
  122. package/dist/nexus/living-brain.js +27 -15
  123. package/dist/nexus/living-brain.js.map +1 -1
  124. package/dist/nexus/nexus-bridge.d.ts.map +1 -1
  125. package/dist/nexus/nexus-bridge.js +28 -29
  126. package/dist/nexus/nexus-bridge.js.map +1 -1
  127. package/dist/nexus/plasticity-queries.d.ts +4 -2
  128. package/dist/nexus/plasticity-queries.d.ts.map +1 -1
  129. package/dist/nexus/plasticity-queries.js +27 -15
  130. package/dist/nexus/plasticity-queries.js.map +1 -1
  131. package/dist/nexus/query.d.ts.map +1 -1
  132. package/dist/nexus/query.js +6 -2
  133. package/dist/nexus/query.js.map +1 -1
  134. package/dist/nexus/registry.d.ts.map +1 -1
  135. package/dist/nexus/registry.js +65 -30
  136. package/dist/nexus/registry.js.map +1 -1
  137. package/dist/nexus/route-analysis.d.ts +3 -2
  138. package/dist/nexus/route-analysis.d.ts.map +1 -1
  139. package/dist/nexus/route-analysis.js +11 -10
  140. package/dist/nexus/route-analysis.js.map +1 -1
  141. package/dist/nexus/sigil.d.ts.map +1 -1
  142. package/dist/nexus/sigil.js +60 -13
  143. package/dist/nexus/sigil.js.map +1 -1
  144. package/dist/nexus/user-profile.d.ts +2 -1
  145. package/dist/nexus/user-profile.d.ts.map +1 -1
  146. package/dist/nexus/user-profile.js +8 -4
  147. package/dist/nexus/user-profile.js.map +1 -1
  148. package/dist/orchestrate/index.d.ts +1 -1
  149. package/dist/orchestrate/index.d.ts.map +1 -1
  150. package/dist/orchestrate/index.js +1 -1
  151. package/dist/orchestrate/index.js.map +1 -1
  152. package/dist/orchestrate/plan.d.ts +3 -3
  153. package/dist/orchestrate/plan.d.ts.map +1 -1
  154. package/dist/orchestrate/plan.js +7 -7
  155. package/dist/orchestrate/plan.js.map +1 -1
  156. package/dist/orchestrate/spawn-ops.js +2 -2
  157. package/dist/orchestrate/spawn-ops.js.map +1 -1
  158. package/dist/orchestration/classify.d.ts +2 -2
  159. package/dist/orchestration/classify.js +3 -3
  160. package/dist/orchestration/classify.js.map +1 -1
  161. package/dist/orchestration/validate-spawn.d.ts.map +1 -1
  162. package/dist/orchestration/validate-spawn.js +5 -5
  163. package/dist/orchestration/validate-spawn.js.map +1 -1
  164. package/dist/paths-export.d.ts +18 -0
  165. package/dist/paths-export.d.ts.map +1 -0
  166. package/dist/paths-export.js +18 -0
  167. package/dist/paths-export.js.map +1 -0
  168. package/dist/paths.d.ts.map +1 -1
  169. package/dist/paths.js +24 -11
  170. package/dist/paths.js.map +1 -1
  171. package/dist/playbooks/index.d.ts +1 -0
  172. package/dist/playbooks/index.d.ts.map +1 -1
  173. package/dist/playbooks/index.js +4 -0
  174. package/dist/playbooks/index.js.map +1 -1
  175. package/dist/playbooks/skill-node-executor.d.ts +155 -0
  176. package/dist/playbooks/skill-node-executor.d.ts.map +1 -0
  177. package/dist/playbooks/skill-node-executor.js +156 -0
  178. package/dist/playbooks/skill-node-executor.js.map +1 -0
  179. package/dist/repair.d.ts +3 -7
  180. package/dist/repair.d.ts.map +1 -1
  181. package/dist/repair.js +5 -43
  182. package/dist/repair.js.map +1 -1
  183. package/dist/sagas/migrate-containment.js +7 -7
  184. package/dist/sagas/migrate-containment.js.map +1 -1
  185. package/dist/scaffold/ensure-dirs.d.ts +8 -2
  186. package/dist/scaffold/ensure-dirs.d.ts.map +1 -1
  187. package/dist/scaffold/ensure-dirs.js +24 -11
  188. package/dist/scaffold/ensure-dirs.js.map +1 -1
  189. package/dist/scaffold/project-detection.d.ts +5 -1
  190. package/dist/scaffold/project-detection.d.ts.map +1 -1
  191. package/dist/scaffold/project-detection.js +9 -5
  192. package/dist/scaffold/project-detection.js.map +1 -1
  193. package/dist/sentient/hygiene-scan.js +6 -6
  194. package/dist/sentient/hygiene-scan.js.map +1 -1
  195. package/dist/sentient/proposal-dedup.js +2 -2
  196. package/dist/sentient/proposal-rate-limiter.js +1 -1
  197. package/dist/sentient/propose-tick.js +5 -5
  198. package/dist/sentient/propose-tick.js.map +1 -1
  199. package/dist/sentient/stage-drift-tick.js +3 -3
  200. package/dist/sentient/stage-drift-tick.js.map +1 -1
  201. package/dist/sequence/index.d.ts.map +1 -1
  202. package/dist/sequence/index.js +6 -2
  203. package/dist/sequence/index.js.map +1 -1
  204. package/dist/setup/sections/verification.js +2 -2
  205. package/dist/setup/sections/verification.js.map +1 -1
  206. package/dist/shutdown.d.ts +81 -0
  207. package/dist/shutdown.d.ts.map +1 -0
  208. package/dist/shutdown.js +105 -0
  209. package/dist/shutdown.js.map +1 -0
  210. package/dist/skills/index.d.ts +2 -0
  211. package/dist/skills/index.d.ts.map +1 -1
  212. package/dist/skills/index.js +1 -0
  213. package/dist/skills/index.js.map +1 -1
  214. package/dist/skills/skill-executor-adapter.d.ts +136 -0
  215. package/dist/skills/skill-executor-adapter.d.ts.map +1 -0
  216. package/dist/skills/skill-executor-adapter.js +137 -0
  217. package/dist/skills/skill-executor-adapter.js.map +1 -0
  218. package/dist/skills/usage-recorder.d.ts.map +1 -1
  219. package/dist/skills/usage-recorder.js +30 -0
  220. package/dist/skills/usage-recorder.js.map +1 -1
  221. package/dist/skills-export.d.ts +23 -0
  222. package/dist/skills-export.d.ts.map +1 -0
  223. package/dist/skills-export.js +23 -0
  224. package/dist/skills-export.js.map +1 -0
  225. package/dist/stats/index.d.ts.map +1 -1
  226. package/dist/stats/index.js +8 -3
  227. package/dist/stats/index.js.map +1 -1
  228. package/dist/store/agent-doctor.d.ts +3 -3
  229. package/dist/store/agent-doctor.d.ts.map +1 -1
  230. package/dist/store/agent-doctor.js +18 -13
  231. package/dist/store/agent-doctor.js.map +1 -1
  232. package/dist/store/agent-install.d.ts +6 -5
  233. package/dist/store/agent-install.d.ts.map +1 -1
  234. package/dist/store/agent-install.js +20 -16
  235. package/dist/store/agent-install.js.map +1 -1
  236. package/dist/store/agent-registry-accessor.d.ts +66 -28
  237. package/dist/store/agent-registry-accessor.d.ts.map +1 -1
  238. package/dist/store/agent-registry-accessor.js +248 -167
  239. package/dist/store/agent-registry-accessor.js.map +1 -1
  240. package/dist/store/agent-registry-store.d.ts +242 -0
  241. package/dist/store/agent-registry-store.d.ts.map +1 -0
  242. package/dist/store/agent-registry-store.js +501 -0
  243. package/dist/store/agent-registry-store.js.map +1 -0
  244. package/dist/store/agent-resolver.d.ts +8 -8
  245. package/dist/store/agent-resolver.d.ts.map +1 -1
  246. package/dist/store/agent-resolver.js +19 -17
  247. package/dist/store/agent-resolver.js.map +1 -1
  248. package/dist/store/backup-pack.d.ts.map +1 -1
  249. package/dist/store/backup-pack.js +24 -8
  250. package/dist/store/backup-pack.js.map +1 -1
  251. package/dist/store/conduit-sqlite.d.ts +181 -74
  252. package/dist/store/conduit-sqlite.d.ts.map +1 -1
  253. package/dist/store/conduit-sqlite.js +307 -528
  254. package/dist/store/conduit-sqlite.js.map +1 -1
  255. package/dist/store/cross-db-cleanup.d.ts +5 -5
  256. package/dist/store/cross-db-cleanup.d.ts.map +1 -1
  257. package/dist/store/cross-db-cleanup.js +12 -10
  258. package/dist/store/cross-db-cleanup.js.map +1 -1
  259. package/dist/store/data-accessor.d.ts +4 -4
  260. package/dist/store/data-accessor.js +5 -5
  261. package/dist/store/data-accessor.js.map +1 -1
  262. package/dist/store/data-safety-central.d.ts +83 -1
  263. package/dist/store/data-safety-central.d.ts.map +1 -1
  264. package/dist/store/data-safety-central.js +257 -0
  265. package/dist/store/data-safety-central.js.map +1 -1
  266. package/dist/store/db-helpers.d.ts +8 -2
  267. package/dist/store/db-helpers.d.ts.map +1 -1
  268. package/dist/store/db-helpers.js +6 -2
  269. package/dist/store/db-helpers.js.map +1 -1
  270. package/dist/store/dual-scope-db.d.ts +46 -4
  271. package/dist/store/dual-scope-db.d.ts.map +1 -1
  272. package/dist/store/dual-scope-db.js +103 -9
  273. package/dist/store/dual-scope-db.js.map +1 -1
  274. package/dist/store/exodus/__fixtures__/representative-fixture.d.ts +116 -0
  275. package/dist/store/exodus/__fixtures__/representative-fixture.d.ts.map +1 -0
  276. package/dist/store/exodus/__fixtures__/representative-fixture.js +274 -0
  277. package/dist/store/exodus/__fixtures__/representative-fixture.js.map +1 -0
  278. package/dist/store/exodus/index.d.ts +18 -0
  279. package/dist/store/exodus/index.d.ts.map +1 -0
  280. package/dist/store/exodus/index.js +18 -0
  281. package/dist/store/exodus/index.js.map +1 -0
  282. package/dist/store/exodus/migrate.d.ts +160 -0
  283. package/dist/store/exodus/migrate.d.ts.map +1 -0
  284. package/dist/store/exodus/migrate.js +1220 -0
  285. package/dist/store/exodus/migrate.js.map +1 -0
  286. package/dist/store/exodus/on-open.d.ts +189 -0
  287. package/dist/store/exodus/on-open.d.ts.map +1 -0
  288. package/dist/store/exodus/on-open.js +464 -0
  289. package/dist/store/exodus/on-open.js.map +1 -0
  290. package/dist/store/exodus/plan.d.ts +44 -0
  291. package/dist/store/exodus/plan.d.ts.map +1 -0
  292. package/dist/store/exodus/plan.js +178 -0
  293. package/dist/store/exodus/plan.js.map +1 -0
  294. package/dist/store/exodus/status.d.ts +22 -0
  295. package/dist/store/exodus/status.d.ts.map +1 -0
  296. package/dist/store/exodus/status.js +88 -0
  297. package/dist/store/exodus/status.js.map +1 -0
  298. package/dist/store/exodus/table-name-map.d.ts +173 -0
  299. package/dist/store/exodus/table-name-map.d.ts.map +1 -0
  300. package/dist/store/exodus/table-name-map.js +660 -0
  301. package/dist/store/exodus/table-name-map.js.map +1 -0
  302. package/dist/store/exodus/types.d.ts +169 -0
  303. package/dist/store/exodus/types.d.ts.map +1 -0
  304. package/dist/store/exodus/types.js +21 -0
  305. package/dist/store/exodus/types.js.map +1 -0
  306. package/dist/store/exodus/verify-migration.d.ts +72 -0
  307. package/dist/store/exodus/verify-migration.d.ts.map +1 -0
  308. package/dist/store/exodus/verify-migration.js +678 -0
  309. package/dist/store/exodus/verify-migration.js.map +1 -0
  310. package/dist/store/exodus/verify.d.ts +58 -0
  311. package/dist/store/exodus/verify.d.ts.map +1 -0
  312. package/dist/store/exodus/verify.js +74 -0
  313. package/dist/store/exodus/verify.js.map +1 -0
  314. package/dist/store/index.d.ts +2 -3
  315. package/dist/store/index.d.ts.map +1 -1
  316. package/dist/store/index.js +2 -3
  317. package/dist/store/index.js.map +1 -1
  318. package/dist/store/memory-accessor.d.ts +31 -0
  319. package/dist/store/memory-accessor.d.ts.map +1 -1
  320. package/dist/store/memory-accessor.js +38 -0
  321. package/dist/store/memory-accessor.js.map +1 -1
  322. package/dist/store/memory-sqlite.d.ts +86 -13
  323. package/dist/store/memory-sqlite.d.ts.map +1 -1
  324. package/dist/store/memory-sqlite.js +326 -528
  325. package/dist/store/memory-sqlite.js.map +1 -1
  326. package/dist/store/migrate-signaldock-to-conduit.d.ts +1 -1
  327. package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -1
  328. package/dist/store/migrate-signaldock-to-conduit.js +126 -35
  329. package/dist/store/migrate-signaldock-to-conduit.js.map +1 -1
  330. package/dist/store/migration-manager.d.ts +49 -0
  331. package/dist/store/migration-manager.d.ts.map +1 -1
  332. package/dist/store/migration-manager.js +167 -67
  333. package/dist/store/migration-manager.js.map +1 -1
  334. package/dist/store/migration-sqlite.d.ts +1 -1
  335. package/dist/store/migration-sqlite.d.ts.map +1 -1
  336. package/dist/store/migration-sqlite.js +32 -3
  337. package/dist/store/migration-sqlite.js.map +1 -1
  338. package/dist/store/nexus-sqlite.d.ts +152 -29
  339. package/dist/store/nexus-sqlite.d.ts.map +1 -1
  340. package/dist/store/nexus-sqlite.js +496 -177
  341. package/dist/store/nexus-sqlite.js.map +1 -1
  342. package/dist/store/nexus-validation-schemas.d.ts +32 -32
  343. package/dist/store/open-cleo-db.d.ts +37 -40
  344. package/dist/store/open-cleo-db.d.ts.map +1 -1
  345. package/dist/store/open-cleo-db.js +76 -153
  346. package/dist/store/open-cleo-db.js.map +1 -1
  347. package/dist/store/role-accessors-impl.d.ts +4 -4
  348. package/dist/store/role-accessors-impl.d.ts.map +1 -1
  349. package/dist/store/role-accessors-impl.js +18 -15
  350. package/dist/store/role-accessors-impl.js.map +1 -1
  351. package/dist/store/schema/{signaldock-schema.d.ts → agent-registry-schema.d.ts} +15 -5
  352. package/dist/store/schema/agent-registry-schema.d.ts.map +1 -0
  353. package/dist/store/schema/{signaldock-schema.js → agent-registry-schema.js} +15 -5
  354. package/dist/store/schema/agent-registry-schema.js.map +1 -0
  355. package/dist/store/schema/agent-schema.d.ts +1 -1
  356. package/dist/store/schema/agent-schema.js +4 -4
  357. package/dist/store/schema/agent-schema.js.map +1 -1
  358. package/dist/store/schema/attachments.d.ts +1 -1
  359. package/dist/store/schema/audit.d.ts +15 -5
  360. package/dist/store/schema/audit.d.ts.map +1 -1
  361. package/dist/store/schema/audit.js +12 -2
  362. package/dist/store/schema/audit.js.map +1 -1
  363. package/dist/store/schema/background-jobs.d.ts +1 -1
  364. package/dist/store/schema/cleo-global/{signaldock.d.ts → agent-registry.d.ts} +277 -271
  365. package/dist/store/schema/cleo-global/agent-registry.d.ts.map +1 -0
  366. package/dist/store/schema/cleo-global/{signaldock.js → agent-registry.js} +136 -125
  367. package/dist/store/schema/cleo-global/agent-registry.js.map +1 -0
  368. package/dist/store/schema/cleo-global/index.d.ts +29 -22
  369. package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
  370. package/dist/store/schema/cleo-global/index.js +29 -22
  371. package/dist/store/schema/cleo-global/index.js.map +1 -1
  372. package/dist/store/schema/cleo-global/nexus.d.ts +36 -1034
  373. package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
  374. package/dist/store/schema/cleo-global/nexus.js +32 -337
  375. package/dist/store/schema/cleo-global/nexus.js.map +1 -1
  376. package/dist/store/schema/cleo-global/skills.d.ts +16 -0
  377. package/dist/store/schema/cleo-global/skills.d.ts.map +1 -1
  378. package/dist/store/schema/cleo-global/skills.js +11 -0
  379. package/dist/store/schema/cleo-global/skills.js.map +1 -1
  380. package/dist/store/schema/{cleo-project → cleo-global}/telemetry.d.ts +33 -17
  381. package/dist/store/schema/cleo-global/telemetry.d.ts.map +1 -0
  382. package/dist/store/schema/{cleo-project → cleo-global}/telemetry.js +30 -18
  383. package/dist/store/schema/cleo-global/telemetry.js.map +1 -0
  384. package/dist/store/schema/cleo-project/audit.d.ts +8 -8
  385. package/dist/store/schema/cleo-project/audit.d.ts.map +1 -1
  386. package/dist/store/schema/cleo-project/audit.js +2 -6
  387. package/dist/store/schema/cleo-project/audit.js.map +1 -1
  388. package/dist/store/schema/cleo-project/docs.d.ts +1 -1
  389. package/dist/store/schema/cleo-project/index.d.ts +29 -12
  390. package/dist/store/schema/cleo-project/index.d.ts.map +1 -1
  391. package/dist/store/schema/cleo-project/index.js +29 -12
  392. package/dist/store/schema/cleo-project/index.js.map +1 -1
  393. package/dist/store/schema/cleo-project/lifecycle.d.ts +2 -2
  394. package/dist/store/schema/cleo-project/nexus-graph.d.ts +1067 -0
  395. package/dist/store/schema/cleo-project/nexus-graph.d.ts.map +1 -0
  396. package/dist/store/schema/cleo-project/nexus-graph.js +407 -0
  397. package/dist/store/schema/cleo-project/nexus-graph.js.map +1 -0
  398. package/dist/store/schema/cleo-project/provenance-orphans.d.ts +385 -0
  399. package/dist/store/schema/cleo-project/provenance-orphans.d.ts.map +1 -0
  400. package/dist/store/schema/cleo-project/provenance-orphans.js +142 -0
  401. package/dist/store/schema/cleo-project/provenance-orphans.js.map +1 -0
  402. package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
  403. package/dist/store/schema/cleo-project/runtime.d.ts +1 -1
  404. package/dist/store/schema/cleo-project/tasks-core-batch2.d.ts +1 -1
  405. package/dist/store/schema/cleo-project/tasks-core.d.ts +3 -3
  406. package/dist/store/schema/cleo-shared/brain.d.ts +711 -494
  407. package/dist/store/schema/cleo-shared/brain.d.ts.map +1 -1
  408. package/dist/store/schema/cleo-shared/brain.js +215 -134
  409. package/dist/store/schema/cleo-shared/brain.js.map +1 -1
  410. package/dist/store/schema/conduit-schema.d.ts +63 -51
  411. package/dist/store/schema/conduit-schema.d.ts.map +1 -1
  412. package/dist/store/schema/conduit-schema.js +23 -11
  413. package/dist/store/schema/conduit-schema.js.map +1 -1
  414. package/dist/store/schema/goal.d.ts +3 -2
  415. package/dist/store/schema/goal.d.ts.map +1 -1
  416. package/dist/store/schema/goal.js +3 -2
  417. package/dist/store/schema/goal.js.map +1 -1
  418. package/dist/store/schema/index.d.ts +1 -0
  419. package/dist/store/schema/index.d.ts.map +1 -1
  420. package/dist/store/schema/index.js +1 -0
  421. package/dist/store/schema/index.js.map +1 -1
  422. package/dist/store/schema/lifecycle.d.ts +2 -2
  423. package/dist/store/schema/memory-schema.d.ts +2 -2
  424. package/dist/store/schema/nexus-schema.d.ts +174 -115
  425. package/dist/store/schema/nexus-schema.d.ts.map +1 -1
  426. package/dist/store/schema/nexus-schema.js +175 -55
  427. package/dist/store/schema/nexus-schema.js.map +1 -1
  428. package/dist/store/schema/provenance/releases.d.ts +1 -1
  429. package/dist/store/schema/schema-utils.d.ts +78 -0
  430. package/dist/store/schema/schema-utils.d.ts.map +1 -0
  431. package/dist/store/schema/schema-utils.js +49 -0
  432. package/dist/store/schema/schema-utils.js.map +1 -0
  433. package/dist/store/schema/skills-schema.d.ts +81 -44
  434. package/dist/store/schema/skills-schema.d.ts.map +1 -1
  435. package/dist/store/schema/skills-schema.js +49 -16
  436. package/dist/store/schema/skills-schema.js.map +1 -1
  437. package/dist/store/schema/tasks.d.ts +3 -3
  438. package/dist/store/skills-db.d.ts +90 -50
  439. package/dist/store/skills-db.d.ts.map +1 -1
  440. package/dist/store/skills-db.js +132 -146
  441. package/dist/store/skills-db.js.map +1 -1
  442. package/dist/store/sqlite-backup.d.ts +2 -2
  443. package/dist/store/sqlite-backup.d.ts.map +1 -1
  444. package/dist/store/sqlite-backup.js +11 -10
  445. package/dist/store/sqlite-backup.js.map +1 -1
  446. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  447. package/dist/store/sqlite-data-accessor.js +25 -18
  448. package/dist/store/sqlite-data-accessor.js.map +1 -1
  449. package/dist/store/sqlite.d.ts +72 -12
  450. package/dist/store/sqlite.d.ts.map +1 -1
  451. package/dist/store/sqlite.js +153 -89
  452. package/dist/store/sqlite.js.map +1 -1
  453. package/dist/store/tasks-schema.d.ts +4 -0
  454. package/dist/store/tasks-schema.d.ts.map +1 -1
  455. package/dist/store/tasks-schema.js +60 -0
  456. package/dist/store/tasks-schema.js.map +1 -1
  457. package/dist/store/tasks-sqlite.d.ts +2 -2
  458. package/dist/store/tasks-sqlite.d.ts.map +1 -1
  459. package/dist/store/tasks-sqlite.js +10 -5
  460. package/dist/store/tasks-sqlite.js.map +1 -1
  461. package/dist/store/umbrella-data-accessor.d.ts +17 -6
  462. package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
  463. package/dist/store/umbrella-data-accessor.js +8 -8
  464. package/dist/store/umbrella-data-accessor.js.map +1 -1
  465. package/dist/store/validation-schemas.d.ts +241 -208
  466. package/dist/store/validation-schemas.d.ts.map +1 -1
  467. package/dist/system/health.d.ts.map +1 -1
  468. package/dist/system/health.js +11 -6
  469. package/dist/system/health.js.map +1 -1
  470. package/dist/system/project-health.d.ts.map +1 -1
  471. package/dist/system/project-health.js +58 -12
  472. package/dist/system/project-health.js.map +1 -1
  473. package/dist/tasks/add.d.ts +8 -0
  474. package/dist/tasks/add.d.ts.map +1 -1
  475. package/dist/tasks/add.js +101 -0
  476. package/dist/tasks/add.js.map +1 -1
  477. package/dist/tasks/cancelled-child-waiver-audit.d.ts +47 -0
  478. package/dist/tasks/cancelled-child-waiver-audit.d.ts.map +1 -0
  479. package/dist/tasks/cancelled-child-waiver-audit.js +34 -0
  480. package/dist/tasks/cancelled-child-waiver-audit.js.map +1 -0
  481. package/dist/tasks/complete.d.ts +22 -2
  482. package/dist/tasks/complete.d.ts.map +1 -1
  483. package/dist/tasks/complete.js +71 -6
  484. package/dist/tasks/complete.js.map +1 -1
  485. package/dist/tasks/compute-task-view.js +1 -1
  486. package/dist/tasks/session-scope.d.ts +5 -0
  487. package/dist/tasks/session-scope.d.ts.map +1 -1
  488. package/dist/tasks/session-scope.js +4 -0
  489. package/dist/tasks/session-scope.js.map +1 -1
  490. package/dist/tools/guard.d.ts +71 -1
  491. package/dist/tools/guard.d.ts.map +1 -1
  492. package/dist/tools/guard.js +73 -1
  493. package/dist/tools/guard.js.map +1 -1
  494. package/dist/tools/index.d.ts +21 -0
  495. package/dist/tools/index.d.ts.map +1 -1
  496. package/dist/tools/index.js +25 -0
  497. package/dist/tools/index.js.map +1 -1
  498. package/dist/upgrade.d.ts.map +1 -1
  499. package/dist/upgrade.js +22 -13
  500. package/dist/upgrade.js.map +1 -1
  501. package/dist/workgraph/containment.js +18 -18
  502. package/dist/workgraph/relations.js +2 -2
  503. package/dist/worktree/list.d.ts +1 -1
  504. package/dist/worktree/list.d.ts.map +1 -1
  505. package/dist/worktree/list.js +19 -21
  506. package/dist/worktree/list.js.map +1 -1
  507. package/dist/worktree-export.d.ts +18 -0
  508. package/dist/worktree-export.d.ts.map +1 -0
  509. package/dist/worktree-export.js +18 -0
  510. package/dist/worktree-export.js.map +1 -0
  511. package/migrations/drizzle-agent-registry/20260412000000_initial-global-agent-registry/migration.sql +29 -0
  512. package/migrations/drizzle-brain/20260601000001_t11522-brain-task-observations/migration.sql +28 -0
  513. package/migrations/drizzle-brain/20260601000002_t11522-inline-only-brain-tables/migration.sql +75 -0
  514. package/migrations/drizzle-cleo-global/20260531000001_t11363-consolidation-cleo-global/migration.sql +49 -144
  515. package/migrations/drizzle-cleo-global/20260531000001_t11363-consolidation-cleo-global/snapshot.json +8 -8
  516. package/migrations/drizzle-cleo-global/20260531000002_t11546-brain-usage-log/migration.sql +16 -0
  517. package/migrations/drizzle-cleo-global/20260601000001_t11544-skills-usage-project-id/migration.sql +12 -0
  518. package/migrations/drizzle-cleo-global/20260602000001_t11622-agent-registry-rename/migration.sql +80 -0
  519. package/migrations/drizzle-cleo-project/20260531000001_t11363-consolidation-cleo-project/migration.sql +26 -167
  520. package/migrations/drizzle-cleo-project/20260531000001_t11363-consolidation-cleo-project/snapshot.json +8 -8
  521. package/migrations/drizzle-cleo-project/20260531000002_t11546-brain-usage-log/migration.sql +21 -0
  522. package/migrations/drizzle-cleo-project/20260601000001_t11549-agent-credentials-brain-release-links/migration.sql +49 -0
  523. package/migrations/drizzle-cleo-project/20260601000002_t11538-project-nexus-graph/migration.sql +140 -0
  524. package/migrations/drizzle-cleo-project/20260602000002_t11649-token-usage-transport-mcp/migration.sql +146 -0
  525. package/migrations/drizzle-conduit/20260601000003_t11523-conduit-inline-schema/migration.sql +82 -0
  526. package/migrations/drizzle-nexus/20260421200001_t1165-baseline-reset/migration.sql +26 -8
  527. package/migrations/drizzle-nexus/20260601000001_t11545-nexus-relation-weights-partition/migration.sql +97 -0
  528. package/package.json +43 -11
  529. package/scripts/install-supervisor-binary.mjs +50 -201
  530. package/scripts/napi-binary-picker.mjs +267 -0
  531. package/dist/agents/agent-registry.d.ts.map +0 -1
  532. package/dist/agents/agent-registry.js.map +0 -1
  533. package/dist/store/data-safety.d.ts +0 -92
  534. package/dist/store/data-safety.d.ts.map +0 -1
  535. package/dist/store/data-safety.js +0 -274
  536. package/dist/store/data-safety.js.map +0 -1
  537. package/dist/store/schema/cleo-global/signaldock.d.ts.map +0 -1
  538. package/dist/store/schema/cleo-global/signaldock.js.map +0 -1
  539. package/dist/store/schema/cleo-project/telemetry.d.ts.map +0 -1
  540. package/dist/store/schema/cleo-project/telemetry.js.map +0 -1
  541. package/dist/store/schema/signaldock-schema.d.ts.map +0 -1
  542. package/dist/store/schema/signaldock-schema.js.map +0 -1
  543. package/dist/store/signaldock-sqlite.d.ts +0 -173
  544. package/dist/store/signaldock-sqlite.d.ts.map +0 -1
  545. package/dist/store/signaldock-sqlite.js +0 -445
  546. package/dist/store/signaldock-sqlite.js.map +0 -1
  547. package/migrations/drizzle-nexus/20260318205558_initial/migration.sql +0 -46
  548. package/migrations/drizzle-nexus/20260412000001_t529-nexus-graph-tables/migration.sql +0 -49
  549. package/migrations/drizzle-nexus/20260415000001_t622-project-registry-paths/migration.sql +0 -12
  550. package/migrations/drizzle-nexus/20260419000001_t998-nexus-plasticity/migration.sql +0 -13
  551. package/migrations/drizzle-nexus/20260423052640_t1077-add-user-profile-table/migration.sql +0 -16
  552. package/migrations/drizzle-nexus/20260423052640_t1077-add-user-profile-table/snapshot.json +0 -1531
  553. package/migrations/drizzle-nexus/20260424140538_t1148-add-sigils-table/migration.sql +0 -13
  554. package/migrations/drizzle-nexus/20260424140538_t1148-add-sigils-table/snapshot.json +0 -1652
  555. package/migrations/drizzle-nexus/20260504000001_t1839-fts5-nexus-symbols/migration.sql +0 -68
  556. package/migrations/drizzle-nexus/20260507135519_t9163-nexus-is-external/migration.sql +0 -20
  557. package/migrations/drizzle-nexus/20260507135519_t9163-nexus-is-external/snapshot.json +0 -1652
  558. package/migrations/drizzle-nexus/20260526222449_t11025-project-id-aliases/migration.sql +0 -16
  559. package/migrations/drizzle-signaldock/20260412000000_initial-global-signaldock/migration.sql +0 -209
  560. package/migrations/drizzle-signaldock/20260412000000_initial-global-signaldock/snapshot.json +0 -2060
@@ -1,229 +1,78 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Postinstall picker for the cleo-supervisor native binary
4
- * (T11340 — SG-RUNTIME-UNIFICATION R1, Distribution Pattern P2/P1).
3
+ * Postinstall picker entrypoint for CLEO-managed native binaries
4
+ * (T11340 — SG-RUNTIME-UNIFICATION R1; extended T11580 — R10-L1).
5
5
  *
6
- * Resolution + verification flow:
6
+ * Historically this script resolved ONLY the `cleo-supervisor` executable. As
7
+ * of R10-L1 (T11580) it drives the SAME picker over BOTH CLEO-managed native
8
+ * binaries — `cleo-supervisor` and `worktree-napi` — via the shared
9
+ * {@link pickBinary} module. The resolution + verification flow (P2 download +
10
+ * sha256 fail-closed + `CLEO_NAPI_BINARY_MIRROR` override + idempotent cache
11
+ * reuse + P1 bundled fallback) is identical for both; only the manifest,
12
+ * fallback path, and cache filename differ per binary.
7
13
  *
8
- * 1. Resolve the platform triple from `process.platform` + `process.arch` +
9
- * libc (gnu/musl on Linux). Supported: linux-x64-gnu, linux-arm64-gnu,
10
- * darwin-x64, darwin-arm64, win32-x64-msvc.
11
- * 2. Read the sha256 manifest CHECKED INTO this package (P2 — pinned at
12
- * publish time, never fetched). The manifest pins the GitHub Release
13
- * base URL + per-triple sha256 + filename.
14
- * 3. If the binary is already cached + sha256-valid, reuse it (idempotent).
15
- * 4. Otherwise download `<baseUrl>/<file>` (base URL overridable via
16
- * `CLEO_NAPI_BINARY_MIRROR`), verify sha256 against the manifest
17
- * (FAIL CLOSED on mismatch), write atomically (tmp-then-rename), chmod +x.
18
- * 5. P1 fallback: when the download is unavailable (offline, `--ignore-scripts`
19
- * so this never ran, or a mirror outage) AND the bundled
20
- * `binaries/fallback/cleo-supervisor` matches the host triple
21
- * (linux-x64-gnu), use it.
14
+ * The package `postinstall` invokes this once. Each binary is resolved
15
+ * independently and best-effort a failure of one never blocks the other, and
16
+ * neither ever fails `npm install` (graceful degrade; the dependent feature is
17
+ * resolved on first use).
22
18
  *
23
- * postinstall MUST NOT fail the install — a missing supervisor binary degrades
24
- * gracefully (the daemon feature is unavailable until the binary is resolved on
25
- * first use). This script therefore exits 0 even on download failure, logging a
26
- * diagnostic. The fail-closed sha256 check applies to the BYTES (a tampered
27
- * download is rejected); it does not abort `npm install`.
19
+ * Standalone binary specs:
20
+ *
21
+ * - `cleo-supervisor`: a single executable per triple, cached as
22
+ * `cleo-supervisor<ext>` and chmod +x.
23
+ * - `worktree-napi`: a napi-rs `.node` addon, cached as
24
+ * `worktree-napi.<triple>.node` (no exec bit needed — it is `require()`d).
28
25
  *
29
26
  * @task T11340
27
+ * @task T11580
30
28
  */
31
29
 
32
- import { createHash } from 'node:crypto';
33
- import {
34
- chmodSync,
35
- copyFileSync,
36
- existsSync,
37
- mkdirSync,
38
- readFileSync,
39
- renameSync,
40
- rmSync,
41
- writeFileSync,
42
- } from 'node:fs';
43
- import { homedir, platform as osPlatform } from 'node:os';
44
30
  import { dirname, join } from 'node:path';
45
31
  import { fileURLToPath } from 'node:url';
32
+ import { pickBinary } from './napi-binary-picker.mjs';
46
33
 
47
34
  const __dirname = dirname(fileURLToPath(import.meta.url));
48
35
 
49
36
  /** Package root: packages/core (scripts/ is a direct child). */
50
37
  const PKG_ROOT = join(__dirname, '..');
51
38
 
52
- /** Path to the sha256 manifest checked into the tarball (P2). */
53
- const MANIFEST_PATH = join(PKG_ROOT, 'binaries', 'cleo-supervisor-manifest.json');
54
-
55
- /** Bundled P1 fallback binary (linux-x64-gnu only). */
56
- const FALLBACK_BIN = join(PKG_ROOT, 'binaries', 'fallback', 'cleo-supervisor');
57
-
58
- /** The single triple the P1 fallback binary targets. */
59
- const FALLBACK_TRIPLE = 'linux-x64-gnu';
60
-
61
- /**
62
- * Resolve the platform triple for the current host.
63
- *
64
- * @returns {{ triple: string; ext: string } | null} Triple + binary extension,
65
- * or null if the host platform/arch is unsupported.
66
- */
67
- function resolveTriple() {
68
- const p = process.platform;
69
- const a = process.arch;
70
- if (p === 'linux' && a === 'x64') return { triple: 'linux-x64-gnu', ext: '' };
71
- if (p === 'linux' && a === 'arm64') return { triple: 'linux-arm64-gnu', ext: '' };
72
- if (p === 'darwin' && a === 'x64') return { triple: 'darwin-x64', ext: '' };
73
- if (p === 'darwin' && a === 'arm64') return { triple: 'darwin-arm64', ext: '' };
74
- if (p === 'win32' && a === 'x64') return { triple: 'win32-x64-msvc', ext: '.exe' };
75
- return null;
76
- }
39
+ /** Directory holding the checked-in manifests + bundled P1 fallbacks. */
40
+ const BINARIES_DIR = join(PKG_ROOT, 'binaries');
77
41
 
78
42
  /**
79
- * Detect whether the Linux host uses musl libc (Alpine et al.). The published
80
- * Linux binaries are gnu-only; a musl host has no matching prebuild and falls
81
- * through to the descriptive "unsupported" path.
82
- *
83
- * @returns {boolean} True when the host appears to be musl-based.
43
+ * The CLEO-managed native binaries resolved at postinstall. Each entry is a
44
+ * {@link import('./napi-binary-picker.mjs').BinarySpec}.
84
45
  */
85
- function isMuslLinux() {
86
- if (osPlatform() !== 'linux') return false;
87
- try {
88
- // The simplest robust signal available without spawning: the ldd report
89
- // embedded in process.report (Node exposes glibc/musl there on Linux).
90
- const report =
91
- typeof process.report?.getReport === 'function' ? process.report.getReport() : null;
92
- const glibc = report?.header?.glibcVersionRuntime;
93
- // glibcVersionRuntime present => glibc; absent on musl.
94
- return !glibc;
95
- } catch {
96
- return false;
97
- }
98
- }
99
-
100
- /** Compute the sha256 hex digest of a buffer. */
101
- function sha256(buf) {
102
- return createHash('sha256').update(buf).digest('hex');
103
- }
104
-
105
- /** Cache directory for the resolved binary: `<cache>/cleo/napi-bin/<version>/`. */
106
- function cacheDir(version) {
107
- // Mirror env-paths('cleo', {suffix:''}).cache without importing @cleocode/paths
108
- // (this script runs in postinstall where workspace deps may not be linked yet).
109
- const p = process.platform;
110
- if (p === 'win32') {
111
- const local = process.env.LOCALAPPDATA ?? join(homedir(), 'AppData', 'Local');
112
- return join(local, 'cleo', 'Cache', 'napi-bin', version);
113
- }
114
- if (p === 'darwin') {
115
- return join(homedir(), 'Library', 'Caches', 'cleo', 'napi-bin', version);
116
- }
117
- const xdg = process.env.XDG_CACHE_HOME;
118
- const base = xdg && xdg.startsWith('/') ? xdg : join(homedir(), '.cache');
119
- return join(base, 'cleo', 'napi-bin', version);
120
- }
121
-
122
- /** Write `buf` to `dest` atomically (tmp-then-rename) and chmod +x. */
123
- function writeBinaryAtomic(dest, buf) {
124
- mkdirSync(dirname(dest), { recursive: true });
125
- const tmp = `${dest}.${process.pid}.tmp`;
126
- writeFileSync(tmp, buf);
127
- chmodSync(tmp, 0o755);
128
- renameSync(tmp, dest);
129
- }
130
-
131
- /** Use the bundled P1 fallback if it matches the host triple. */
132
- function tryFallback(triple, dest) {
133
- if (triple !== FALLBACK_TRIPLE || !existsSync(FALLBACK_BIN)) return false;
134
- try {
135
- mkdirSync(dirname(dest), { recursive: true });
136
- const tmp = `${dest}.${process.pid}.fallback.tmp`;
137
- copyFileSync(FALLBACK_BIN, tmp);
138
- chmodSync(tmp, 0o755);
139
- renameSync(tmp, dest);
140
- console.log(`[cleo-supervisor] using bundled P1 fallback for ${triple}`);
141
- return true;
142
- } catch (err) {
143
- console.warn(`[cleo-supervisor] fallback copy failed: ${err?.message ?? err}`);
144
- return false;
145
- }
146
- }
46
+ const BINARY_SPECS = [
47
+ {
48
+ label: 'cleo-supervisor',
49
+ manifestPath: join(BINARIES_DIR, 'cleo-supervisor-manifest.json'),
50
+ fallbackPath: join(BINARIES_DIR, 'fallback', 'cleo-supervisor'),
51
+ executable: true,
52
+ cachedName: (_triple, ext) => `cleo-supervisor${ext}`,
53
+ },
54
+ {
55
+ label: 'worktree-napi',
56
+ manifestPath: join(BINARIES_DIR, 'worktree-napi-manifest.json'),
57
+ fallbackPath: join(BINARIES_DIR, 'fallback', 'worktree-napi.linux-x64-gnu.node'),
58
+ executable: false,
59
+ cachedName: (triple) => `worktree-napi.${triple}.node`,
60
+ },
61
+ ];
147
62
 
148
63
  async function main() {
149
- const resolved = resolveTriple();
150
- if (!resolved) {
151
- console.warn(
152
- `[cleo-supervisor] no prebuilt binary for ${process.platform}/${process.arch}` +
153
- (isMuslLinux() ? ' (musl libc only gnu Linux prebuilds are published)' : '') +
154
- ' — daemon features will be unavailable.',
155
- );
156
- return; // graceful: do not fail install
157
- }
158
- const { triple, ext } = resolved;
159
-
160
- if (!existsSync(MANIFEST_PATH)) {
161
- console.warn(
162
- `[cleo-supervisor] manifest missing at ${MANIFEST_PATH} — skipping binary install` +
163
- ' (development checkout or --ignore-scripts publish).',
164
- );
165
- return;
166
- }
167
-
168
- /** @type {{version:string; baseUrl:string; binaries:Record<string,{file:string; sha256:string; size:number}>}} */
169
- const manifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8'));
170
- const entry = manifest.binaries?.[triple];
171
- if (!entry) {
172
- console.warn(`[cleo-supervisor] manifest has no entry for ${triple} — skipping.`);
173
- return;
174
- }
175
-
176
- const dest = join(cacheDir(manifest.version), `cleo-supervisor${ext}`);
177
-
178
- // Idempotent: reuse a cached binary that already matches the pinned sha256.
179
- if (existsSync(dest)) {
180
- try {
181
- if (sha256(readFileSync(dest)) === entry.sha256) {
182
- console.log(`[cleo-supervisor] cached binary OK at ${dest}`);
183
- return;
184
- }
185
- } catch {
186
- // fall through to re-download
187
- }
188
- }
189
-
190
- // CLEO_NAPI_BINARY_MIRROR overrides the download base URL (corporate proxies).
191
- const mirror = process.env.CLEO_NAPI_BINARY_MIRROR?.replace(/\/+$/, '');
192
- const base = mirror ?? manifest.baseUrl;
193
- const url = `${base}/${entry.file}`;
194
-
195
- try {
196
- const res = await fetch(url);
197
- if (!res.ok) {
198
- throw new Error(`HTTP ${res.status} for ${url}`);
199
- }
200
- const buf = Buffer.from(await res.arrayBuffer());
201
- const digest = sha256(buf);
202
- if (digest !== entry.sha256) {
203
- // FAIL CLOSED on the bytes — never install a tampered binary.
204
- throw new Error(
205
- `sha256 mismatch for ${triple}: expected ${entry.sha256}, got ${digest} — refusing to install`,
206
- );
207
- }
208
- writeBinaryAtomic(dest, buf);
209
- console.log(`[cleo-supervisor] installed ${triple} -> ${dest} (sha256 verified)`);
210
- } catch (err) {
211
- console.warn(`[cleo-supervisor] download failed: ${err?.message ?? err}`);
212
- if (tryFallback(triple, dest)) return;
213
- // Clean a partial cache entry, then degrade gracefully.
214
- try {
215
- rmSync(dest, { force: true });
216
- } catch {
217
- /* ignore */
218
- }
219
- console.warn(
220
- `[cleo-supervisor] binary unavailable for ${triple}; daemon features deferred until first use.`,
221
- );
222
- }
64
+ // Resolve each binary independently — one failure must not block the other.
65
+ await Promise.all(
66
+ BINARY_SPECS.map((spec) =>
67
+ pickBinary(spec).catch((err) => {
68
+ console.warn(`[${spec.label}] picker error (non-fatal): ${err?.message ?? err}`);
69
+ }),
70
+ ),
71
+ );
223
72
  }
224
73
 
225
74
  main().catch((err) => {
226
75
  // postinstall must never break `npm install`.
227
- console.warn(`[cleo-supervisor] postinstall picker error (non-fatal): ${err?.message ?? err}`);
76
+ console.warn(`[cleo-napi] postinstall picker error (non-fatal): ${err?.message ?? err}`);
228
77
  process.exit(0);
229
78
  });
@@ -0,0 +1,267 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Shared postinstall picker for CLEO-managed native binaries
4
+ * (T11580 — R10-L1 · SG-PACKAGE-ARCH; generalizes the T11340 supervisor picker).
5
+ *
6
+ * Two binaries flow through this single picker:
7
+ *
8
+ * - `cleo-supervisor` — the standalone process supervisor executable
9
+ * (`crates/cleo-supervisor`). A single exec per triple.
10
+ * - `worktree-napi` — the napi-rs Node-API addon (`crates/worktree-napi`)
11
+ * consumed by `@cleocode/worktree`. The host-triple `.node` is cached so the
12
+ * worktree loader resolves a core-managed path instead of bundling all four
13
+ * `.node` files in the `@cleocode/worktree` tarball.
14
+ *
15
+ * Both follow Distribution Pattern P2 (primary) + P1 (fallback):
16
+ *
17
+ * 1. Resolve the platform triple from `process.platform` + `process.arch` +
18
+ * libc (gnu/musl on Linux).
19
+ * 2. Read the sha256 manifest CHECKED INTO this package (P2 — pinned at
20
+ * publish time, never fetched). The manifest pins the GitHub Release base
21
+ * URL + per-triple sha256 + filename.
22
+ * 3. If the binary is already cached + sha256-valid, reuse it (idempotent).
23
+ * 4. Otherwise download `<baseUrl>/<file>` (base URL overridable via
24
+ * `CLEO_NAPI_BINARY_MIRROR`), verify sha256 against the manifest
25
+ * (FAIL CLOSED on mismatch), write atomically (tmp-then-rename), chmod +x
26
+ * for executables.
27
+ * 5. P1 fallback: when the download is unavailable (offline, `--ignore-scripts`
28
+ * so this never ran, or a mirror outage) AND the bundled
29
+ * `binaries/fallback/<fallbackFile>` matches the host triple
30
+ * (linux-x64-gnu), use it.
31
+ *
32
+ * postinstall MUST NOT fail the install — a missing binary degrades gracefully
33
+ * (the dependent feature is resolved on first use). Callers therefore exit 0
34
+ * even on download failure, logging a diagnostic. The fail-closed sha256 check
35
+ * applies to the BYTES (a tampered download is rejected); it does not abort
36
+ * `npm install`.
37
+ *
38
+ * @task T11580
39
+ */
40
+
41
+ import { createHash } from 'node:crypto';
42
+ import {
43
+ chmodSync,
44
+ copyFileSync,
45
+ existsSync,
46
+ mkdirSync,
47
+ readFileSync,
48
+ renameSync,
49
+ rmSync,
50
+ writeFileSync,
51
+ } from 'node:fs';
52
+ import { homedir, platform as osPlatform } from 'node:os';
53
+ import { dirname, join } from 'node:path';
54
+
55
+ /** The single triple every P1 fallback binary targets. */
56
+ export const FALLBACK_TRIPLE = 'linux-x64-gnu';
57
+
58
+ /**
59
+ * Resolve the platform triple for the current host.
60
+ *
61
+ * @returns {{ triple: string; ext: string } | null} Triple + executable
62
+ * extension (`.exe` on Windows, `''` elsewhere), or null if the host
63
+ * platform/arch is unsupported. `ext` only applies to standalone
64
+ * executables; napi `.node` addons ignore it.
65
+ */
66
+ export function resolveTriple() {
67
+ const p = process.platform;
68
+ const a = process.arch;
69
+ if (p === 'linux' && a === 'x64') return { triple: 'linux-x64-gnu', ext: '' };
70
+ if (p === 'linux' && a === 'arm64') return { triple: 'linux-arm64-gnu', ext: '' };
71
+ if (p === 'darwin' && a === 'x64') return { triple: 'darwin-x64', ext: '' };
72
+ if (p === 'darwin' && a === 'arm64') return { triple: 'darwin-arm64', ext: '' };
73
+ if (p === 'win32' && a === 'x64') return { triple: 'win32-x64-msvc', ext: '.exe' };
74
+ return null;
75
+ }
76
+
77
+ /**
78
+ * Detect whether the Linux host uses musl libc (Alpine et al.). The published
79
+ * Linux binaries are gnu-only; a musl host has no matching prebuild and falls
80
+ * through to the descriptive "unsupported" path.
81
+ *
82
+ * @returns {boolean} True when the host appears to be musl-based.
83
+ */
84
+ export function isMuslLinux() {
85
+ if (osPlatform() !== 'linux') return false;
86
+ try {
87
+ // The simplest robust signal available without spawning: the ldd report
88
+ // embedded in process.report (Node exposes glibc/musl there on Linux).
89
+ const report =
90
+ typeof process.report?.getReport === 'function' ? process.report.getReport() : null;
91
+ const glibc = report?.header?.glibcVersionRuntime;
92
+ // glibcVersionRuntime present => glibc; absent on musl.
93
+ return !glibc;
94
+ } catch {
95
+ return false;
96
+ }
97
+ }
98
+
99
+ /** Compute the sha256 hex digest of a buffer. */
100
+ export function sha256(buf) {
101
+ return createHash('sha256').update(buf).digest('hex');
102
+ }
103
+
104
+ /**
105
+ * Cache directory for resolved native binaries:
106
+ * `<cache>/cleo/napi-bin/<version>/`.
107
+ *
108
+ * Mirrors `env-paths('cleo', {suffix:''}).cache` without importing
109
+ * `@cleocode/paths` (this runs in postinstall where workspace deps may not be
110
+ * linked yet).
111
+ *
112
+ * @param {string} version - The manifest version segment.
113
+ * @returns {string} Absolute cache directory path.
114
+ */
115
+ export function cacheDir(version) {
116
+ const p = process.platform;
117
+ if (p === 'win32') {
118
+ const local = process.env.LOCALAPPDATA ?? join(homedir(), 'AppData', 'Local');
119
+ return join(local, 'cleo', 'Cache', 'napi-bin', version);
120
+ }
121
+ if (p === 'darwin') {
122
+ return join(homedir(), 'Library', 'Caches', 'cleo', 'napi-bin', version);
123
+ }
124
+ const xdg = process.env.XDG_CACHE_HOME;
125
+ const base = xdg && xdg.startsWith('/') ? xdg : join(homedir(), '.cache');
126
+ return join(base, 'cleo', 'napi-bin', version);
127
+ }
128
+
129
+ /**
130
+ * Write `buf` to `dest` atomically (tmp-then-rename). Executables are chmod'd
131
+ * +x; napi `.node` addons are loaded by `require()` and need no exec bit.
132
+ *
133
+ * @param {string} dest - Destination path.
134
+ * @param {Buffer} buf - Bytes to write.
135
+ * @param {boolean} executable - Whether to chmod 0o755.
136
+ */
137
+ function writeBinaryAtomic(dest, buf, executable) {
138
+ mkdirSync(dirname(dest), { recursive: true });
139
+ const tmp = `${dest}.${process.pid}.tmp`;
140
+ writeFileSync(tmp, buf);
141
+ if (executable) chmodSync(tmp, 0o755);
142
+ renameSync(tmp, dest);
143
+ }
144
+
145
+ /**
146
+ * Copy the bundled P1 fallback into the cache if it matches the host triple.
147
+ *
148
+ * @param {object} spec - The binary spec (see {@link pickBinary}).
149
+ * @param {string} triple - The resolved host triple.
150
+ * @param {string} dest - Cache destination path.
151
+ * @returns {boolean} True when the fallback was used.
152
+ */
153
+ function tryFallback(spec, triple, dest) {
154
+ if (triple !== FALLBACK_TRIPLE || !existsSync(spec.fallbackPath)) return false;
155
+ try {
156
+ mkdirSync(dirname(dest), { recursive: true });
157
+ const tmp = `${dest}.${process.pid}.fallback.tmp`;
158
+ copyFileSync(spec.fallbackPath, tmp);
159
+ if (spec.executable) chmodSync(tmp, 0o755);
160
+ renameSync(tmp, dest);
161
+ console.log(`[${spec.label}] using bundled P1 fallback for ${triple}`);
162
+ return true;
163
+ } catch (err) {
164
+ console.warn(`[${spec.label}] fallback copy failed: ${err?.message ?? err}`);
165
+ return false;
166
+ }
167
+ }
168
+
169
+ /**
170
+ * @typedef {object} BinarySpec
171
+ * @property {string} label - Diagnostic label, e.g. `cleo-supervisor`.
172
+ * @property {string} manifestPath - Absolute path to the checked-in sha256
173
+ * manifest (P2).
174
+ * @property {string} fallbackPath - Absolute path to the bundled P1 fallback
175
+ * binary (linux-x64-gnu).
176
+ * @property {boolean} executable - Whether the resolved binary is a standalone
177
+ * executable (`true` → chmod +x) or a napi `.node` addon (`false`).
178
+ * @property {(triple: string, ext: string) => string} cachedName - The basename
179
+ * the binary is cached under in `<cache>/napi-bin/<version>/`. Supervisor uses
180
+ * `cleo-supervisor<ext>`; worktree-napi uses `worktree-napi.<triple>.node`.
181
+ */
182
+
183
+ /**
184
+ * Resolve a single CLEO-managed native binary into the shared cache following
185
+ * Distribution Pattern P2 (download + sha256) with a P1 (bundled fallback) safety
186
+ * net. Never throws to the caller for install-failure conditions — degrades
187
+ * gracefully and logs.
188
+ *
189
+ * @param {BinarySpec} spec - The per-binary distribution spec.
190
+ * @returns {Promise<void>}
191
+ */
192
+ export async function pickBinary(spec) {
193
+ const resolved = resolveTriple();
194
+ if (!resolved) {
195
+ console.warn(
196
+ `[${spec.label}] no prebuilt binary for ${process.platform}/${process.arch}` +
197
+ (isMuslLinux() ? ' (musl libc — only gnu Linux prebuilds are published)' : '') +
198
+ ' — feature unavailable until resolved on first use.',
199
+ );
200
+ return; // graceful: do not fail install
201
+ }
202
+ const { triple, ext } = resolved;
203
+
204
+ if (!existsSync(spec.manifestPath)) {
205
+ console.warn(
206
+ `[${spec.label}] manifest missing at ${spec.manifestPath} — skipping binary install` +
207
+ ' (development checkout or --ignore-scripts publish).',
208
+ );
209
+ return;
210
+ }
211
+
212
+ /** @type {{version:string; baseUrl:string; binaries:Record<string,{file:string; sha256:string; size:number}>}} */
213
+ const manifest = JSON.parse(readFileSync(spec.manifestPath, 'utf8'));
214
+ const entry = manifest.binaries?.[triple];
215
+ if (!entry) {
216
+ console.warn(`[${spec.label}] manifest has no entry for ${triple} — skipping.`);
217
+ return;
218
+ }
219
+
220
+ const dest = join(cacheDir(manifest.version), spec.cachedName(triple, ext));
221
+
222
+ // Idempotent: reuse a cached binary that already matches the pinned sha256.
223
+ if (existsSync(dest)) {
224
+ try {
225
+ if (sha256(readFileSync(dest)) === entry.sha256) {
226
+ console.log(`[${spec.label}] cached binary OK at ${dest}`);
227
+ return;
228
+ }
229
+ } catch {
230
+ // fall through to re-download
231
+ }
232
+ }
233
+
234
+ // CLEO_NAPI_BINARY_MIRROR overrides the download base URL (corporate proxies).
235
+ const mirror = process.env.CLEO_NAPI_BINARY_MIRROR?.replace(/\/+$/, '');
236
+ const base = mirror ?? manifest.baseUrl;
237
+ const url = `${base}/${entry.file}`;
238
+
239
+ try {
240
+ const res = await fetch(url);
241
+ if (!res.ok) {
242
+ throw new Error(`HTTP ${res.status} for ${url}`);
243
+ }
244
+ const buf = Buffer.from(await res.arrayBuffer());
245
+ const digest = sha256(buf);
246
+ if (digest !== entry.sha256) {
247
+ // FAIL CLOSED on the bytes — never install a tampered binary.
248
+ throw new Error(
249
+ `sha256 mismatch for ${triple}: expected ${entry.sha256}, got ${digest} — refusing to install`,
250
+ );
251
+ }
252
+ writeBinaryAtomic(dest, buf, spec.executable);
253
+ console.log(`[${spec.label}] installed ${triple} -> ${dest} (sha256 verified)`);
254
+ } catch (err) {
255
+ console.warn(`[${spec.label}] download failed: ${err?.message ?? err}`);
256
+ if (tryFallback(spec, triple, dest)) return;
257
+ // Clean a partial cache entry, then degrade gracefully.
258
+ try {
259
+ rmSync(dest, { force: true });
260
+ } catch {
261
+ /* ignore */
262
+ }
263
+ console.warn(
264
+ `[${spec.label}] binary unavailable for ${triple}; feature deferred until first use.`,
265
+ );
266
+ }
267
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../../src/agents/agent-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,yBAAyB,CAAC;AAOjC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAMrC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,mCAAmC;IACnC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,EAAE,qBAAqB,CAAC;IAC/B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;CACnD;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA+C/B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,CAAC,EAAE,SAAS,EACrB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,EAAE,CAAC,CAc1B;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkB9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAwB1B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,uBAAuB,EAChC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/agents/agent-registry.ts"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- /**
2
- * Data Safety Module - Critical protection layer for CLEO data operations.
3
- *
4
- * Implements:
5
- * - Write verification (verify data was actually persisted)
6
- * - Collision detection (prevent duplicate task IDs)
7
- * - Sequence validation (ensure sequence counter matches database)
8
- * - Auto-checkpoint integration (git commit after writes)
9
- *
10
- * @task T4739
11
- * @epic T4732
12
- */
13
- import type { Session, Task } from '@cleocode/contracts';
14
- /** Safety configuration options. */
15
- export interface SafetyConfig {
16
- /** Enable write verification (default: true) */
17
- verifyWrites: boolean;
18
- /** Enable collision detection (default: true) */
19
- detectCollisions: boolean;
20
- /** Enable sequence validation (default: true) */
21
- validateSequence: boolean;
22
- /** Enable auto-checkpoint (default: true) */
23
- autoCheckpoint: boolean;
24
- /** Throw on safety violations (default: true) */
25
- strictMode: boolean;
26
- }
27
- /** Safety violation error. */
28
- export declare class SafetyError extends Error {
29
- code: string;
30
- details?: Record<string, unknown> | undefined;
31
- constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
32
- }
33
- /**
34
- * Check if a task ID already exists (collision detection).
35
- * @throws SafetyError if task exists and strict mode is enabled
36
- */
37
- export declare function checkTaskExists(taskId: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
38
- /**
39
- * Verify a task was actually written to the database.
40
- * @throws SafetyError if verification fails
41
- */
42
- export declare function verifyTaskWrite(taskId: string, expectedData?: Partial<Task>, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
43
- /**
44
- * Validate and repair sequence if necessary.
45
- * @returns true if sequence was valid or successfully repaired
46
- */
47
- export declare function validateAndRepairSequence(cwd?: string, config?: Partial<SafetyConfig>): Promise<{
48
- valid: boolean;
49
- repaired: boolean;
50
- oldCounter?: number;
51
- newCounter?: number;
52
- }>;
53
- /**
54
- * Trigger auto-checkpoint after successful write.
55
- */
56
- export declare function triggerCheckpoint(context: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<void>;
57
- /**
58
- * Safely create a task with all safety mechanisms.
59
- * Wraps the actual createTask operation.
60
- */
61
- export declare function safeCreateTask(createFn: () => Promise<Task>, task: Task, cwd?: string, config?: Partial<SafetyConfig>): Promise<Task>;
62
- /**
63
- * Safely update a task with all safety mechanisms.
64
- */
65
- export declare function safeUpdateTask(updateFn: () => Promise<Task | null>, taskId: string, _updates: Partial<Task>, cwd?: string, config?: Partial<SafetyConfig>): Promise<Task | null>;
66
- /**
67
- * Safely delete a task with all safety mechanisms.
68
- */
69
- export declare function safeDeleteTask(deleteFn: () => Promise<boolean>, taskId: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
70
- /**
71
- * Verify session write.
72
- */
73
- export declare function verifySessionWrite(sessionId: string, cwd?: string, config?: Partial<SafetyConfig>): Promise<boolean>;
74
- /**
75
- * Safely create a session with all safety mechanisms.
76
- */
77
- export declare function safeCreateSession(createFn: () => Promise<Session>, session: Session, cwd?: string, config?: Partial<SafetyConfig>): Promise<Session>;
78
- /**
79
- * Force a checkpoint before destructive operations.
80
- * Use this before migrations, bulk updates, etc.
81
- */
82
- export declare function forceCheckpointBeforeOperation(operation: string, cwd?: string): Promise<void>;
83
- /**
84
- * Run comprehensive data integrity check.
85
- * Reports all issues found.
86
- */
87
- export declare function runDataIntegrityCheck(cwd?: string): Promise<{
88
- passed: boolean;
89
- issues: string[];
90
- repairs: string[];
91
- }>;
92
- //# sourceMappingURL=data-safety.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-safety.d.ts","sourceRoot":"","sources":["../../src/store/data-safety.ts"],"names":[],"mappings":"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"}