@agimon-ai/po 0.0.0-alpha.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/LICENSE +21 -0
  2. package/README.md +755 -0
  3. package/assets/banner.png +0 -0
  4. package/assets/banner.svg +25 -0
  5. package/assets/favicon.svg +15 -0
  6. package/assets/logo-light.png +0 -0
  7. package/assets/logo-light.svg +25 -0
  8. package/assets/logo.png +0 -0
  9. package/assets/logo.svg +25 -0
  10. package/assets/mascot.png +0 -0
  11. package/assets/mascot.svg +25 -0
  12. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  13. package/dist/antigravity.cjs +5 -0
  14. package/dist/antigravity.d.mts +2 -0
  15. package/dist/antigravity.mjs +2 -0
  16. package/dist/apiContracts.cjs +11 -0
  17. package/dist/apiContracts.cjs.map +1 -0
  18. package/dist/apiContracts.d.mts +52 -0
  19. package/dist/apiContracts.d.mts.map +1 -0
  20. package/dist/apiContracts.mjs +7 -0
  21. package/dist/apiContracts.mjs.map +1 -0
  22. package/dist/baseCommand.cjs +3 -0
  23. package/dist/baseCommand.d.mts +2 -0
  24. package/dist/baseCommand.mjs +2 -0
  25. package/dist/bin/cli.cjs +24 -0
  26. package/dist/bin/cli.cjs.map +1 -0
  27. package/dist/bin/cli.d.mts +1 -0
  28. package/dist/bin/cli.mjs +25 -0
  29. package/dist/bin/cli.mjs.map +1 -0
  30. package/dist/bin/doomRunner.cjs +33 -0
  31. package/dist/bin/doomRunner.cjs.map +1 -0
  32. package/dist/bin/doomRunner.d.mts +4 -0
  33. package/dist/bin/doomRunner.d.mts.map +1 -0
  34. package/dist/bin/doomRunner.mjs +32 -0
  35. package/dist/bin/doomRunner.mjs.map +1 -0
  36. package/dist/bin/serve.cjs +30 -0
  37. package/dist/bin/serve.cjs.map +1 -0
  38. package/dist/bin/serve.d.mts +1 -0
  39. package/dist/bin/serve.mjs +31 -0
  40. package/dist/bin/serve.mjs.map +1 -0
  41. package/dist/builders/cli/extensionAssembler/index.cjs +342 -0
  42. package/dist/builders/cli/extensionAssembler/index.cjs.map +1 -0
  43. package/dist/builders/cli/extensionAssembler/index.d.mts +85 -0
  44. package/dist/builders/cli/extensionAssembler/index.d.mts.map +1 -0
  45. package/dist/builders/cli/extensionAssembler/index.mjs +335 -0
  46. package/dist/builders/cli/extensionAssembler/index.mjs.map +1 -0
  47. package/dist/catalog/index.json +430 -0
  48. package/dist/cli.cjs +28 -0
  49. package/dist/cli.d.mts +11 -0
  50. package/dist/cli.mjs +11 -0
  51. package/dist/cliApp.cjs +6 -0
  52. package/dist/cliApp.d.mts +2 -0
  53. package/dist/cliApp.mjs +2 -0
  54. package/dist/codex.cjs +8 -0
  55. package/dist/codex.d.mts +2 -0
  56. package/dist/codex.mjs +2 -0
  57. package/dist/commands.cjs +18 -0
  58. package/dist/commands.d.mts +9 -0
  59. package/dist/commands.mjs +9 -0
  60. package/dist/compatibility.cjs +27 -0
  61. package/dist/compatibility.d.mts +6 -0
  62. package/dist/compatibility.mjs +6 -0
  63. package/dist/compatibilityCommand.cjs +4 -0
  64. package/dist/compatibilityCommand.d.mts +2 -0
  65. package/dist/compatibilityCommand.mjs +2 -0
  66. package/dist/compatibilityContext.cjs +3 -0
  67. package/dist/compatibilityContext.d.mts +2 -0
  68. package/dist/compatibilityContext.mjs +2 -0
  69. package/dist/compatibilityOptions.cjs +5 -0
  70. package/dist/compatibilityOptions.d.mts +2 -0
  71. package/dist/compatibilityOptions.mjs +2 -0
  72. package/dist/config.cjs +163 -0
  73. package/dist/config.d.mts +7 -0
  74. package/dist/config.mjs +7 -0
  75. package/dist/doctorCommand.cjs +5 -0
  76. package/dist/doctorCommand.d.mts +2 -0
  77. package/dist/doctorCommand.mjs +2 -0
  78. package/dist/emitMcpCommand.cjs +4 -0
  79. package/dist/emitMcpCommand.d.mts +2 -0
  80. package/dist/emitMcpCommand.mjs +2 -0
  81. package/dist/explainCommand.cjs +5 -0
  82. package/dist/explainCommand.d.mts +2 -0
  83. package/dist/explainCommand.mjs +2 -0
  84. package/dist/extensions/server.cjs +39 -0
  85. package/dist/extensions/server.cjs.map +1 -0
  86. package/dist/extensions/server.d.mts +5 -0
  87. package/dist/extensions/server.d.mts.map +1 -0
  88. package/dist/extensions/server.mjs +34 -0
  89. package/dist/extensions/server.mjs.map +1 -0
  90. package/dist/harnessContext.cjs +5 -0
  91. package/dist/harnessContext.d.mts +2 -0
  92. package/dist/harnessContext.mjs +2 -0
  93. package/dist/harnessState.cjs +19 -0
  94. package/dist/harnessState.d.mts +2 -0
  95. package/dist/harnessState.mjs +2 -0
  96. package/dist/help.cjs +12 -0
  97. package/dist/help.d.mts +6 -0
  98. package/dist/help.mjs +6 -0
  99. package/dist/index.cjs +306 -0
  100. package/dist/index.d.mts +40 -0
  101. package/dist/index.mjs +37 -0
  102. package/dist/initCommand.cjs +4 -0
  103. package/dist/initCommand.d.mts +2 -0
  104. package/dist/initCommand.mjs +2 -0
  105. package/dist/matrixOptions.cjs +28 -0
  106. package/dist/matrixOptions.d.mts +2 -0
  107. package/dist/matrixOptions.mjs +2 -0
  108. package/dist/matrixSwitcher.cjs +11 -0
  109. package/dist/matrixSwitcher.d.mts +3 -0
  110. package/dist/matrixSwitcher.mjs +3 -0
  111. package/dist/mcpFilter.cjs +9 -0
  112. package/dist/mcpFilter.d.mts +1 -0
  113. package/dist/mcpFilter.mjs +2 -0
  114. package/dist/options.cjs +3 -0
  115. package/dist/options.d.mts +2 -0
  116. package/dist/options.mjs +2 -0
  117. package/dist/process.cjs +12 -0
  118. package/dist/process.d.mts +2 -0
  119. package/dist/process.mjs +2 -0
  120. package/dist/projectTrust.cjs +6 -0
  121. package/dist/projectTrust.d.mts +2 -0
  122. package/dist/projectTrust.mjs +2 -0
  123. package/dist/repository.cjs +5 -0
  124. package/dist/repository.d.mts +2 -0
  125. package/dist/repository.mjs +2 -0
  126. package/dist/resourceCollector.cjs +9 -0
  127. package/dist/resourceCollector.d.mts +1 -0
  128. package/dist/resourceCollector.mjs +2 -0
  129. package/dist/router.cjs +6 -0
  130. package/dist/router.d.mts +2 -0
  131. package/dist/router.mjs +2 -0
  132. package/dist/services.cjs +97 -0
  133. package/dist/services.d.mts +12 -0
  134. package/dist/services.mjs +12 -0
  135. package/dist/shared.cjs +18 -0
  136. package/dist/shared.d.mts +2 -0
  137. package/dist/shared.mjs +2 -0
  138. package/dist/src/bin/agentDirectory.cjs +27 -0
  139. package/dist/src/bin/agentDirectory.cjs.map +1 -0
  140. package/dist/src/bin/agentDirectory.mjs +26 -0
  141. package/dist/src/bin/agentDirectory.mjs.map +1 -0
  142. package/dist/src/builders/apiContractExport/index.cjs +126 -0
  143. package/dist/src/builders/apiContractExport/index.cjs.map +1 -0
  144. package/dist/src/builders/apiContractExport/index.mjs +123 -0
  145. package/dist/src/builders/apiContractExport/index.mjs.map +1 -0
  146. package/dist/src/builders/cli/entryResolution.cjs +39 -0
  147. package/dist/src/builders/cli/entryResolution.cjs.map +1 -0
  148. package/dist/src/builders/cli/entryResolution.mjs +35 -0
  149. package/dist/src/builders/cli/entryResolution.mjs.map +1 -0
  150. package/dist/src/builders/cli/harnessContext.cjs +175 -0
  151. package/dist/src/builders/cli/harnessContext.cjs.map +1 -0
  152. package/dist/src/builders/cli/harnessContext.d.mts +48 -0
  153. package/dist/src/builders/cli/harnessContext.d.mts.map +1 -0
  154. package/dist/src/builders/cli/harnessContext.mjs +167 -0
  155. package/dist/src/builders/cli/harnessContext.mjs.map +1 -0
  156. package/dist/src/builders/cli/sessionComposition.cjs +27 -0
  157. package/dist/src/builders/cli/sessionComposition.cjs.map +1 -0
  158. package/dist/src/builders/cli/sessionComposition.mjs +26 -0
  159. package/dist/src/builders/cli/sessionComposition.mjs.map +1 -0
  160. package/dist/src/builders/hooks/index.cjs +238 -0
  161. package/dist/src/builders/hooks/index.cjs.map +1 -0
  162. package/dist/src/builders/hooks/index.mjs +231 -0
  163. package/dist/src/builders/hooks/index.mjs.map +1 -0
  164. package/dist/src/builders/native/index.cjs +176 -0
  165. package/dist/src/builders/native/index.cjs.map +1 -0
  166. package/dist/src/builders/native/index.d.mts +36 -0
  167. package/dist/src/builders/native/index.d.mts.map +1 -0
  168. package/dist/src/builders/native/index.mjs +170 -0
  169. package/dist/src/builders/native/index.mjs.map +1 -0
  170. package/dist/src/builders/server/backgroundSync.cjs +333 -0
  171. package/dist/src/builders/server/backgroundSync.cjs.map +1 -0
  172. package/dist/src/builders/server/backgroundSync.mjs +320 -0
  173. package/dist/src/builders/server/backgroundSync.mjs.map +1 -0
  174. package/dist/src/builders/server/computerUseBinding.cjs +273 -0
  175. package/dist/src/builders/server/computerUseBinding.cjs.map +1 -0
  176. package/dist/src/builders/server/computerUseBinding.mjs +269 -0
  177. package/dist/src/builders/server/computerUseBinding.mjs.map +1 -0
  178. package/dist/src/builders/server/computerUseRecordings.cjs +188 -0
  179. package/dist/src/builders/server/computerUseRecordings.cjs.map +1 -0
  180. package/dist/src/builders/server/computerUseRecordings.mjs +184 -0
  181. package/dist/src/builders/server/computerUseRecordings.mjs.map +1 -0
  182. package/dist/src/builders/server/defaultWorkspace.cjs +38 -0
  183. package/dist/src/builders/server/defaultWorkspace.cjs.map +1 -0
  184. package/dist/src/builders/server/defaultWorkspace.mjs +35 -0
  185. package/dist/src/builders/server/defaultWorkspace.mjs.map +1 -0
  186. package/dist/src/builders/server/idleRestart.cjs +149 -0
  187. package/dist/src/builders/server/idleRestart.cjs.map +1 -0
  188. package/dist/src/builders/server/idleRestart.mjs +136 -0
  189. package/dist/src/builders/server/idleRestart.mjs.map +1 -0
  190. package/dist/src/builders/server/index.cjs +63 -0
  191. package/dist/src/builders/server/index.cjs.map +1 -0
  192. package/dist/src/builders/server/index.mjs +60 -0
  193. package/dist/src/builders/server/index.mjs.map +1 -0
  194. package/dist/src/builders/server/logSink.cjs +57 -0
  195. package/dist/src/builders/server/logSink.cjs.map +1 -0
  196. package/dist/src/builders/server/logSink.mjs +57 -0
  197. package/dist/src/builders/server/logSink.mjs.map +1 -0
  198. package/dist/src/builders/server/mcpApp.cjs +152 -0
  199. package/dist/src/builders/server/mcpApp.cjs.map +1 -0
  200. package/dist/src/builders/server/mcpApp.d.mts +18 -0
  201. package/dist/src/builders/server/mcpApp.d.mts.map +1 -0
  202. package/dist/src/builders/server/mcpApp.mjs +147 -0
  203. package/dist/src/builders/server/mcpApp.mjs.map +1 -0
  204. package/dist/src/builders/server/mcpAppBuild.cjs +111 -0
  205. package/dist/src/builders/server/mcpAppBuild.cjs.map +1 -0
  206. package/dist/src/builders/server/mcpAppBuild.d.mts +24 -0
  207. package/dist/src/builders/server/mcpAppBuild.d.mts.map +1 -0
  208. package/dist/src/builders/server/mcpAppBuild.mjs +105 -0
  209. package/dist/src/builders/server/mcpAppBuild.mjs.map +1 -0
  210. package/dist/src/builders/server/mcpBundle.cjs +87 -0
  211. package/dist/src/builders/server/mcpBundle.cjs.map +1 -0
  212. package/dist/src/builders/server/mcpBundle.d.mts +23 -0
  213. package/dist/src/builders/server/mcpBundle.d.mts.map +1 -0
  214. package/dist/src/builders/server/mcpBundle.mjs +84 -0
  215. package/dist/src/builders/server/mcpBundle.mjs.map +1 -0
  216. package/dist/src/builders/server/packageReloadCheck.cjs +62 -0
  217. package/dist/src/builders/server/packageReloadCheck.cjs.map +1 -0
  218. package/dist/src/builders/server/packageReloadCheck.mjs +61 -0
  219. package/dist/src/builders/server/packageReloadCheck.mjs.map +1 -0
  220. package/dist/src/builders/server/packageUrl.cjs +210 -0
  221. package/dist/src/builders/server/packageUrl.cjs.map +1 -0
  222. package/dist/src/builders/server/packageUrl.mjs +203 -0
  223. package/dist/src/builders/server/packageUrl.mjs.map +1 -0
  224. package/dist/src/builders/server/runtime.cjs +1428 -0
  225. package/dist/src/builders/server/runtime.cjs.map +1 -0
  226. package/dist/src/builders/server/runtime.mjs +1420 -0
  227. package/dist/src/builders/server/runtime.mjs.map +1 -0
  228. package/dist/src/builders/server/runtimeResources.cjs +72 -0
  229. package/dist/src/builders/server/runtimeResources.cjs.map +1 -0
  230. package/dist/src/builders/server/runtimeResources.mjs +71 -0
  231. package/dist/src/builders/server/runtimeResources.mjs.map +1 -0
  232. package/dist/src/builders/server/selectionStatus.cjs +12 -0
  233. package/dist/src/builders/server/selectionStatus.cjs.map +1 -0
  234. package/dist/src/builders/server/selectionStatus.mjs +12 -0
  235. package/dist/src/builders/server/selectionStatus.mjs.map +1 -0
  236. package/dist/src/builders/server/sessionArguments.cjs +63 -0
  237. package/dist/src/builders/server/sessionArguments.cjs.map +1 -0
  238. package/dist/src/builders/server/sessionArguments.mjs +62 -0
  239. package/dist/src/builders/server/sessionArguments.mjs.map +1 -0
  240. package/dist/src/builders/server/shutdown.cjs +16 -0
  241. package/dist/src/builders/server/shutdown.cjs.map +1 -0
  242. package/dist/src/builders/server/shutdown.mjs +16 -0
  243. package/dist/src/builders/server/shutdown.mjs.map +1 -0
  244. package/dist/src/builders/server/webTemplateDecision.cjs +34 -0
  245. package/dist/src/builders/server/webTemplateDecision.cjs.map +1 -0
  246. package/dist/src/builders/server/webTemplateDecision.mjs +32 -0
  247. package/dist/src/builders/server/webTemplateDecision.mjs.map +1 -0
  248. package/dist/src/builders/server/workspaceCheckout.cjs +31 -0
  249. package/dist/src/builders/server/workspaceCheckout.cjs.map +1 -0
  250. package/dist/src/builders/server/workspaceCheckout.mjs +29 -0
  251. package/dist/src/builders/server/workspaceCheckout.mjs.map +1 -0
  252. package/dist/src/builders/web/bundle.cjs +225 -0
  253. package/dist/src/builders/web/bundle.cjs.map +1 -0
  254. package/dist/src/builders/web/bundle.d.mts +65 -0
  255. package/dist/src/builders/web/bundle.d.mts.map +1 -0
  256. package/dist/src/builders/web/bundle.mjs +221 -0
  257. package/dist/src/builders/web/bundle.mjs.map +1 -0
  258. package/dist/src/builders/web/bundleAssetPolicy.cjs +96 -0
  259. package/dist/src/builders/web/bundleAssetPolicy.cjs.map +1 -0
  260. package/dist/src/builders/web/bundleAssetPolicy.d.mts +22 -0
  261. package/dist/src/builders/web/bundleAssetPolicy.d.mts.map +1 -0
  262. package/dist/src/builders/web/bundleAssetPolicy.mjs +95 -0
  263. package/dist/src/builders/web/bundleAssetPolicy.mjs.map +1 -0
  264. package/dist/src/builders/web/index.cjs +361 -0
  265. package/dist/src/builders/web/index.cjs.map +1 -0
  266. package/dist/src/builders/web/index.d.mts +109 -0
  267. package/dist/src/builders/web/index.d.mts.map +1 -0
  268. package/dist/src/builders/web/index.mjs +342 -0
  269. package/dist/src/builders/web/index.mjs.map +1 -0
  270. package/dist/src/builders/web/webDevRoots.cjs +27 -0
  271. package/dist/src/builders/web/webDevRoots.cjs.map +1 -0
  272. package/dist/src/builders/web/webDevRoots.d.mts +22 -0
  273. package/dist/src/builders/web/webDevRoots.d.mts.map +1 -0
  274. package/dist/src/builders/web/webDevRoots.mjs +25 -0
  275. package/dist/src/builders/web/webDevRoots.mjs.map +1 -0
  276. package/dist/src/builders/web/webPluginGenerate.cjs +188 -0
  277. package/dist/src/builders/web/webPluginGenerate.cjs.map +1 -0
  278. package/dist/src/builders/web/webPluginGenerate.d.mts +56 -0
  279. package/dist/src/builders/web/webPluginGenerate.d.mts.map +1 -0
  280. package/dist/src/builders/web/webPluginGenerate.mjs +178 -0
  281. package/dist/src/builders/web/webPluginGenerate.mjs.map +1 -0
  282. package/dist/src/builders/web/webPluginManifest.cjs +128 -0
  283. package/dist/src/builders/web/webPluginManifest.cjs.map +1 -0
  284. package/dist/src/builders/web/webPluginManifest.d.mts +64 -0
  285. package/dist/src/builders/web/webPluginManifest.d.mts.map +1 -0
  286. package/dist/src/builders/web/webPluginManifest.mjs +118 -0
  287. package/dist/src/builders/web/webPluginManifest.mjs.map +1 -0
  288. package/dist/src/builders/web/webPluginScan.cjs +57 -0
  289. package/dist/src/builders/web/webPluginScan.cjs.map +1 -0
  290. package/dist/src/builders/web/webPluginScan.d.mts +19 -0
  291. package/dist/src/builders/web/webPluginScan.d.mts.map +1 -0
  292. package/dist/src/builders/web/webPluginScan.mjs +54 -0
  293. package/dist/src/builders/web/webPluginScan.mjs.map +1 -0
  294. package/dist/src/builders/web/webPluginVite.cjs +255 -0
  295. package/dist/src/builders/web/webPluginVite.cjs.map +1 -0
  296. package/dist/src/builders/web/webPluginVite.d.mts +64 -0
  297. package/dist/src/builders/web/webPluginVite.d.mts.map +1 -0
  298. package/dist/src/builders/web/webPluginVite.mjs +242 -0
  299. package/dist/src/builders/web/webPluginVite.mjs.map +1 -0
  300. package/dist/src/cli/cliApp.cjs +187 -0
  301. package/dist/src/cli/cliApp.cjs.map +1 -0
  302. package/dist/src/cli/cliApp.d.mts +32 -0
  303. package/dist/src/cli/cliApp.d.mts.map +1 -0
  304. package/dist/src/cli/cliApp.mjs +184 -0
  305. package/dist/src/cli/cliApp.mjs.map +1 -0
  306. package/dist/src/cli/commands/api-export/index.cjs +66 -0
  307. package/dist/src/cli/commands/api-export/index.cjs.map +1 -0
  308. package/dist/src/cli/commands/api-export/index.mjs +62 -0
  309. package/dist/src/cli/commands/api-export/index.mjs.map +1 -0
  310. package/dist/src/cli/commands/baseCommand.cjs +16 -0
  311. package/dist/src/cli/commands/baseCommand.cjs.map +1 -0
  312. package/dist/src/cli/commands/baseCommand.d.mts +24 -0
  313. package/dist/src/cli/commands/baseCommand.d.mts.map +1 -0
  314. package/dist/src/cli/commands/baseCommand.mjs +16 -0
  315. package/dist/src/cli/commands/baseCommand.mjs.map +1 -0
  316. package/dist/src/cli/commands/compat/context.cjs +115 -0
  317. package/dist/src/cli/commands/compat/context.cjs.map +1 -0
  318. package/dist/src/cli/commands/compat/context.d.mts +22 -0
  319. package/dist/src/cli/commands/compat/context.d.mts.map +1 -0
  320. package/dist/src/cli/commands/compat/context.mjs +110 -0
  321. package/dist/src/cli/commands/compat/context.mjs.map +1 -0
  322. package/dist/src/cli/commands/compat/help.cjs +26 -0
  323. package/dist/src/cli/commands/compat/help.cjs.map +1 -0
  324. package/dist/src/cli/commands/compat/help.d.mts +4 -0
  325. package/dist/src/cli/commands/compat/help.d.mts.map +1 -0
  326. package/dist/src/cli/commands/compat/help.mjs +25 -0
  327. package/dist/src/cli/commands/compat/help.mjs.map +1 -0
  328. package/dist/src/cli/commands/compat/index.cjs +73 -0
  329. package/dist/src/cli/commands/compat/index.cjs.map +1 -0
  330. package/dist/src/cli/commands/compat/index.d.mts +14 -0
  331. package/dist/src/cli/commands/compat/index.d.mts.map +1 -0
  332. package/dist/src/cli/commands/compat/index.mjs +70 -0
  333. package/dist/src/cli/commands/compat/index.mjs.map +1 -0
  334. package/dist/src/cli/commands/compat/options.cjs +88 -0
  335. package/dist/src/cli/commands/compat/options.cjs.map +1 -0
  336. package/dist/src/cli/commands/compat/options.d.mts +15 -0
  337. package/dist/src/cli/commands/compat/options.d.mts.map +1 -0
  338. package/dist/src/cli/commands/compat/options.mjs +86 -0
  339. package/dist/src/cli/commands/compat/options.mjs.map +1 -0
  340. package/dist/src/cli/commands/compat/providers/antigravity.cjs +294 -0
  341. package/dist/src/cli/commands/compat/providers/antigravity.cjs.map +1 -0
  342. package/dist/src/cli/commands/compat/providers/antigravity.d.mts +9 -0
  343. package/dist/src/cli/commands/compat/providers/antigravity.d.mts.map +1 -0
  344. package/dist/src/cli/commands/compat/providers/antigravity.mjs +289 -0
  345. package/dist/src/cli/commands/compat/providers/antigravity.mjs.map +1 -0
  346. package/dist/src/cli/commands/compat/providers/codex.cjs +178 -0
  347. package/dist/src/cli/commands/compat/providers/codex.cjs.map +1 -0
  348. package/dist/src/cli/commands/compat/providers/codex.d.mts +17 -0
  349. package/dist/src/cli/commands/compat/providers/codex.d.mts.map +1 -0
  350. package/dist/src/cli/commands/compat/providers/codex.mjs +170 -0
  351. package/dist/src/cli/commands/compat/providers/codex.mjs.map +1 -0
  352. package/dist/src/cli/commands/compat/providers/index.cjs +65 -0
  353. package/dist/src/cli/commands/compat/providers/index.cjs.map +1 -0
  354. package/dist/src/cli/commands/compat/providers/index.d.mts +15 -0
  355. package/dist/src/cli/commands/compat/providers/index.d.mts.map +1 -0
  356. package/dist/src/cli/commands/compat/providers/index.mjs +45 -0
  357. package/dist/src/cli/commands/compat/providers/index.mjs.map +1 -0
  358. package/dist/src/cli/commands/compat/providers/process.cjs +172 -0
  359. package/dist/src/cli/commands/compat/providers/process.cjs.map +1 -0
  360. package/dist/src/cli/commands/compat/providers/process.d.mts +33 -0
  361. package/dist/src/cli/commands/compat/providers/process.d.mts.map +1 -0
  362. package/dist/src/cli/commands/compat/providers/process.mjs +159 -0
  363. package/dist/src/cli/commands/compat/providers/process.mjs.map +1 -0
  364. package/dist/src/cli/commands/compat/providers/shared.cjs +76 -0
  365. package/dist/src/cli/commands/compat/providers/shared.cjs.map +1 -0
  366. package/dist/src/cli/commands/compat/providers/shared.d.mts +40 -0
  367. package/dist/src/cli/commands/compat/providers/shared.d.mts.map +1 -0
  368. package/dist/src/cli/commands/compat/providers/shared.mjs +61 -0
  369. package/dist/src/cli/commands/compat/providers/shared.mjs.map +1 -0
  370. package/dist/src/cli/commands/compat/types.d.mts +31 -0
  371. package/dist/src/cli/commands/compat/types.d.mts.map +1 -0
  372. package/dist/src/cli/commands/doctor/help.cjs +19 -0
  373. package/dist/src/cli/commands/doctor/help.cjs.map +1 -0
  374. package/dist/src/cli/commands/doctor/help.d.mts +4 -0
  375. package/dist/src/cli/commands/doctor/help.d.mts.map +1 -0
  376. package/dist/src/cli/commands/doctor/help.mjs +19 -0
  377. package/dist/src/cli/commands/doctor/help.mjs.map +1 -0
  378. package/dist/src/cli/commands/doctor/index.cjs +118 -0
  379. package/dist/src/cli/commands/doctor/index.cjs.map +1 -0
  380. package/dist/src/cli/commands/doctor/index.d.mts +33 -0
  381. package/dist/src/cli/commands/doctor/index.d.mts.map +1 -0
  382. package/dist/src/cli/commands/doctor/index.mjs +113 -0
  383. package/dist/src/cli/commands/doctor/index.mjs.map +1 -0
  384. package/dist/src/cli/commands/emit-mcp/index.cjs +32 -0
  385. package/dist/src/cli/commands/emit-mcp/index.cjs.map +1 -0
  386. package/dist/src/cli/commands/emit-mcp/index.d.mts +19 -0
  387. package/dist/src/cli/commands/emit-mcp/index.d.mts.map +1 -0
  388. package/dist/src/cli/commands/emit-mcp/index.mjs +31 -0
  389. package/dist/src/cli/commands/emit-mcp/index.mjs.map +1 -0
  390. package/dist/src/cli/commands/explain/index.cjs +155 -0
  391. package/dist/src/cli/commands/explain/index.cjs.map +1 -0
  392. package/dist/src/cli/commands/explain/index.d.mts +57 -0
  393. package/dist/src/cli/commands/explain/index.d.mts.map +1 -0
  394. package/dist/src/cli/commands/explain/index.mjs +150 -0
  395. package/dist/src/cli/commands/explain/index.mjs.map +1 -0
  396. package/dist/src/cli/commands/init/constants.cjs +11 -0
  397. package/dist/src/cli/commands/init/constants.cjs.map +1 -0
  398. package/dist/src/cli/commands/init/constants.mjs +11 -0
  399. package/dist/src/cli/commands/init/constants.mjs.map +1 -0
  400. package/dist/src/cli/commands/init/help.cjs +17 -0
  401. package/dist/src/cli/commands/init/help.cjs.map +1 -0
  402. package/dist/src/cli/commands/init/help.d.mts +4 -0
  403. package/dist/src/cli/commands/init/help.d.mts.map +1 -0
  404. package/dist/src/cli/commands/init/help.mjs +17 -0
  405. package/dist/src/cli/commands/init/help.mjs.map +1 -0
  406. package/dist/src/cli/commands/init/index.cjs +67 -0
  407. package/dist/src/cli/commands/init/index.cjs.map +1 -0
  408. package/dist/src/cli/commands/init/index.d.mts +12 -0
  409. package/dist/src/cli/commands/init/index.d.mts.map +1 -0
  410. package/dist/src/cli/commands/init/index.mjs +63 -0
  411. package/dist/src/cli/commands/init/index.mjs.map +1 -0
  412. package/dist/src/cli/commands/init/presenter.cjs +140 -0
  413. package/dist/src/cli/commands/init/presenter.cjs.map +1 -0
  414. package/dist/src/cli/commands/init/presenter.d.mts +8 -0
  415. package/dist/src/cli/commands/init/presenter.d.mts.map +1 -0
  416. package/dist/src/cli/commands/init/presenter.mjs +140 -0
  417. package/dist/src/cli/commands/init/presenter.mjs.map +1 -0
  418. package/dist/src/cli/commands/sync/help.cjs +34 -0
  419. package/dist/src/cli/commands/sync/help.cjs.map +1 -0
  420. package/dist/src/cli/commands/sync/help.d.mts +4 -0
  421. package/dist/src/cli/commands/sync/help.d.mts.map +1 -0
  422. package/dist/src/cli/commands/sync/help.mjs +34 -0
  423. package/dist/src/cli/commands/sync/help.mjs.map +1 -0
  424. package/dist/src/cli/commands/sync/index.cjs +215 -0
  425. package/dist/src/cli/commands/sync/index.cjs.map +1 -0
  426. package/dist/src/cli/commands/sync/index.d.mts +20 -0
  427. package/dist/src/cli/commands/sync/index.d.mts.map +1 -0
  428. package/dist/src/cli/commands/sync/index.mjs +206 -0
  429. package/dist/src/cli/commands/sync/index.mjs.map +1 -0
  430. package/dist/src/cli/commands/sync/presenter.cjs +58 -0
  431. package/dist/src/cli/commands/sync/presenter.cjs.map +1 -0
  432. package/dist/src/cli/commands/sync/presenter.d.mts +16 -0
  433. package/dist/src/cli/commands/sync/presenter.d.mts.map +1 -0
  434. package/dist/src/cli/commands/sync/presenter.mjs +57 -0
  435. package/dist/src/cli/commands/sync/presenter.mjs.map +1 -0
  436. package/dist/src/cli/commands/sync/workflow.cjs +16 -0
  437. package/dist/src/cli/commands/sync/workflow.cjs.map +1 -0
  438. package/dist/src/cli/commands/sync/workflow.mjs +16 -0
  439. package/dist/src/cli/commands/sync/workflow.mjs.map +1 -0
  440. package/dist/src/cli/commands/web/index.cjs +88 -0
  441. package/dist/src/cli/commands/web/index.cjs.map +1 -0
  442. package/dist/src/cli/commands/web/index.mjs +85 -0
  443. package/dist/src/cli/commands/web/index.mjs.map +1 -0
  444. package/dist/src/cli/harnessOptions.cjs +70 -0
  445. package/dist/src/cli/harnessOptions.cjs.map +1 -0
  446. package/dist/src/cli/harnessOptions.d.mts +26 -0
  447. package/dist/src/cli/harnessOptions.d.mts.map +1 -0
  448. package/dist/src/cli/harnessOptions.mjs +66 -0
  449. package/dist/src/cli/harnessOptions.mjs.map +1 -0
  450. package/dist/src/cli/help.cjs +82 -0
  451. package/dist/src/cli/help.cjs.map +1 -0
  452. package/dist/src/cli/help.d.mts +10 -0
  453. package/dist/src/cli/help.d.mts.map +1 -0
  454. package/dist/src/cli/help.mjs +78 -0
  455. package/dist/src/cli/help.mjs.map +1 -0
  456. package/dist/src/cli/matrixOptions.cjs +178 -0
  457. package/dist/src/cli/matrixOptions.cjs.map +1 -0
  458. package/dist/src/cli/matrixOptions.d.mts +90 -0
  459. package/dist/src/cli/matrixOptions.d.mts.map +1 -0
  460. package/dist/src/cli/matrixOptions.mjs +151 -0
  461. package/dist/src/cli/matrixOptions.mjs.map +1 -0
  462. package/dist/src/cli/options.cjs +281 -0
  463. package/dist/src/cli/options.cjs.map +1 -0
  464. package/dist/src/cli/options.d.mts +5 -0
  465. package/dist/src/cli/options.d.mts.map +1 -0
  466. package/dist/src/cli/options.mjs +279 -0
  467. package/dist/src/cli/options.mjs.map +1 -0
  468. package/dist/src/cli/router.cjs +57 -0
  469. package/dist/src/cli/router.cjs.map +1 -0
  470. package/dist/src/cli/router.d.mts +32 -0
  471. package/dist/src/cli/router.d.mts.map +1 -0
  472. package/dist/src/cli/router.mjs +54 -0
  473. package/dist/src/cli/router.mjs.map +1 -0
  474. package/dist/src/cli/server/options.cjs +71 -0
  475. package/dist/src/cli/server/options.cjs.map +1 -0
  476. package/dist/src/cli/server/options.mjs +70 -0
  477. package/dist/src/cli/server/options.mjs.map +1 -0
  478. package/dist/src/cli/server/processGuards.cjs +83 -0
  479. package/dist/src/cli/server/processGuards.cjs.map +1 -0
  480. package/dist/src/cli/server/processGuards.mjs +79 -0
  481. package/dist/src/cli/server/processGuards.mjs.map +1 -0
  482. package/dist/src/cli/server/run.cjs +69 -0
  483. package/dist/src/cli/server/run.cjs.map +1 -0
  484. package/dist/src/cli/server/run.mjs +66 -0
  485. package/dist/src/cli/server/run.mjs.map +1 -0
  486. package/dist/src/composition/harnessState/index.cjs +48 -0
  487. package/dist/src/composition/harnessState/index.cjs.map +1 -0
  488. package/dist/src/composition/harnessState/index.d.mts +19 -0
  489. package/dist/src/composition/harnessState/index.d.mts.map +1 -0
  490. package/dist/src/composition/harnessState/index.mjs +34 -0
  491. package/dist/src/composition/harnessState/index.mjs.map +1 -0
  492. package/dist/src/composition/layerPackageInstaller/index.cjs +651 -0
  493. package/dist/src/composition/layerPackageInstaller/index.cjs.map +1 -0
  494. package/dist/src/composition/layerPackageInstaller/index.d.mts +74 -0
  495. package/dist/src/composition/layerPackageInstaller/index.d.mts.map +1 -0
  496. package/dist/src/composition/layerPackageInstaller/index.mjs +637 -0
  497. package/dist/src/composition/layerPackageInstaller/index.mjs.map +1 -0
  498. package/dist/src/composition/poHomeMigration/index.cjs +234 -0
  499. package/dist/src/composition/poHomeMigration/index.cjs.map +1 -0
  500. package/dist/src/composition/poHomeMigration/index.d.mts +12 -0
  501. package/dist/src/composition/poHomeMigration/index.d.mts.map +1 -0
  502. package/dist/src/composition/poHomeMigration/index.mjs +226 -0
  503. package/dist/src/composition/poHomeMigration/index.mjs.map +1 -0
  504. package/dist/src/composition/projectTrust/index.cjs +51 -0
  505. package/dist/src/composition/projectTrust/index.cjs.map +1 -0
  506. package/dist/src/composition/projectTrust/index.d.mts +22 -0
  507. package/dist/src/composition/projectTrust/index.d.mts.map +1 -0
  508. package/dist/src/composition/projectTrust/index.mjs +48 -0
  509. package/dist/src/composition/projectTrust/index.mjs.map +1 -0
  510. package/dist/src/composition/repository/index.cjs +68 -0
  511. package/dist/src/composition/repository/index.cjs.map +1 -0
  512. package/dist/src/composition/repository/index.d.mts +22 -0
  513. package/dist/src/composition/repository/index.d.mts.map +1 -0
  514. package/dist/src/composition/repository/index.mjs +63 -0
  515. package/dist/src/composition/repository/index.mjs.map +1 -0
  516. package/dist/src/composition/syncPrune/index.cjs +85 -0
  517. package/dist/src/composition/syncPrune/index.cjs.map +1 -0
  518. package/dist/src/composition/syncPrune/index.d.mts +33 -0
  519. package/dist/src/composition/syncPrune/index.d.mts.map +1 -0
  520. package/dist/src/composition/syncPrune/index.mjs +82 -0
  521. package/dist/src/composition/syncPrune/index.mjs.map +1 -0
  522. package/dist/src/composition/syncService/index.cjs +808 -0
  523. package/dist/src/composition/syncService/index.cjs.map +1 -0
  524. package/dist/src/composition/syncService/index.d.mts +65 -0
  525. package/dist/src/composition/syncService/index.d.mts.map +1 -0
  526. package/dist/src/composition/syncService/index.mjs +792 -0
  527. package/dist/src/composition/syncService/index.mjs.map +1 -0
  528. package/dist/src/composition/syncService/localBuilds.cjs +367 -0
  529. package/dist/src/composition/syncService/localBuilds.cjs.map +1 -0
  530. package/dist/src/composition/syncService/localBuilds.mjs +358 -0
  531. package/dist/src/composition/syncService/localBuilds.mjs.map +1 -0
  532. package/dist/src/composition/transitionLayers.cjs +17 -0
  533. package/dist/src/composition/transitionLayers.cjs.map +1 -0
  534. package/dist/src/composition/transitionLayers.d.mts +6 -0
  535. package/dist/src/composition/transitionLayers.d.mts.map +1 -0
  536. package/dist/src/composition/transitionLayers.mjs +16 -0
  537. package/dist/src/composition/transitionLayers.mjs.map +1 -0
  538. package/dist/src/composition/types/harness.d.mts +52 -0
  539. package/dist/src/composition/types/harness.d.mts.map +1 -0
  540. package/dist/src/extensions/setupDiagnostics.cjs +65 -0
  541. package/dist/src/extensions/setupDiagnostics.cjs.map +1 -0
  542. package/dist/src/extensions/setupDiagnostics.mjs +64 -0
  543. package/dist/src/extensions/setupDiagnostics.mjs.map +1 -0
  544. package/dist/utils.cjs +4 -0
  545. package/dist/utils.d.mts +2 -0
  546. package/dist/utils.mjs +2 -0
  547. package/dist/webBuilder.cjs +59 -0
  548. package/dist/webBuilder.d.mts +9 -0
  549. package/dist/webBuilder.mjs +9 -0
  550. package/docs/server/api-export.md +86 -0
  551. package/docs/server/api.md +144 -0
  552. package/docs/server/getting-started.md +114 -0
  553. package/docs/server/index.md +67 -0
  554. package/docs/server/ipc.md +97 -0
  555. package/docs/server/lifecycle.md +108 -0
  556. package/docs/server/security.md +101 -0
  557. package/llms.txt +12 -0
  558. package/package.json +295 -0
  559. package/src/prompts/po-author-extension/SKILL.md +35 -0
  560. package/src/prompts/po-author-extension/references/extension-contract.md +134 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["path","ensureLayerPackages","ensureGlobalWebBuild","ensureGlobalNativeBuild","ensureMcpAppBuild","pruneAfterSync","createWorkspaceRegistry","piAgentDirectory","rootCompositions","compositionPackageRoots","catalogPackageRoots","globalDoomConfigDirectory","fs","identifyWorkspace","readWorkspaceMarker","isLocalPackageSpecifier","crypto","poPackageRoot","webHostVersion","loadMajorModesConfigLenient","localBuildStamp","BUILD_RECORD","spawnSync","packageCatalogHash","catalogInstallSpecifiers","runtimeLayerPackageSpecifiers","buildLocalPackages","mcpPluginCandidates","duplicatePluginCopies"],"sources":["../../../../src/composition/syncService/index.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process';\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { globalDoomConfigDirectory } from '@agimon-ai/po-config/config';\nimport { isLocalPackageSpecifier, loadMajorModesConfigLenient } from '@agimon-ai/po-config/majorModes';\nimport {\n createWorkspaceRegistry,\n identifyWorkspace,\n readWorkspaceMarker,\n type WorkspaceRegistry,\n writeWorkspaceMarker,\n} from '@agimon-ai/po-core/history';\nimport { piAgentDirectory } from '@agimon-ai/po-core/piSettings';\nimport { writeFileAtomic } from '@agimon-ai/po-core/runtimeJson';\n\nimport { poPackageRoot } from '../../builders/cli/entryResolution';\nimport { rootCompositions } from '../../builders/cli/sessionComposition';\nimport { ensureGlobalNativeBuild } from '../../builders/native';\nimport { ensureMcpAppBuild } from '../../builders/server/mcpAppBuild';\nimport { mcpPluginCandidates } from '../../builders/server/mcpBundle';\nimport {\n BUILD_RECORD,\n compositionPackageRoots,\n duplicatePluginCopies,\n ensureGlobalWebBuild,\n webHostVersion,\n} from '../../builders/web';\nimport {\n catalogInstallSpecifiers,\n catalogPackageRoots,\n ensureLayerPackages,\n type LayerPackageResult,\n packageCatalogHash,\n runtimeLayerPackageSpecifiers,\n} from '../layerPackageInstaller';\nimport { pruneAfterSync, type SyncPruneInput } from '../syncPrune';\nimport { buildLocalPackages, type LocalPackage, localBuildStamp } from './localBuilds';\n\nexport { localBuildStamp } from './localBuilds';\n\n/**\n * The sync service: installs what the configuration names, ensures the global builds,\n * prunes, and reports what happened as one `SyncReport`.\n *\n * The roots are the Po home, every registered workspace whose folder exists, and the\n * repository sync runs from, which it registers. One install covers the catalogue and every\n * root's published packages. When the signature over the catalogue, each root's selection,\n * each local package's build stamp and the host identity (the po package and po-web host\n * versions) matches `current.json` and every artifact it names exists, sync returns `noop`\n * without installing or building. The pointer records that identity, so a server from another\n * Po install can tell the build is not its own.\n *\n * Only one sync runs at a time per Po home, guarded by `<po home>/build/.sync.lock`. A CLI\n * run that finds the lock held reports `busy`. A background run instead leaves\n * `.sync.rerun`, and the holder runs once more, so the background request is never lost.\n */\n\nconst BUILD_DIRECTORY = 'build';\nconst LOCK_FILE = '.sync.lock';\nconst RERUN_FILE = '.sync.rerun';\nconst POINTER_FILE = 'current.json';\nconst LAST_ATTEMPT_FILE = 'last-attempt.json';\nconst MCP_APP_FILE = 'index.html';\nconst HOOK_EMITTER = path.join('tools', 'harness', 'emit-hooks.mjs');\nconst ROOTS_LABEL = 'roots';\nconst PACKAGES_LABEL = 'packages';\nconst WEB_LABEL = 'web';\nconst NATIVE_LABEL = 'native';\nconst MCP_LABEL = 'mcp app';\nconst PRUNE_LABEL = 'prune';\nconst HOOKS_LABEL = 'hooks';\nconst LOCAL_LABEL = 'local';\nconst BYTES_PER_MEGABYTE = 1024 * 1024;\n/** A lock file younger than this that cannot be parsed is still being written by its owner. */\nconst UNREADABLE_LOCK_GRACE_MS = 10_000;\nconst NO_SUCH_PROCESS = 'ESRCH';\n/**\n * Bumped when the pointer gains a field a reader relies on, so an older pointer never matches\n * the fast-exit signature and the next sync rewrites it. 2: per-root `fingerprints`. 3: `host`.\n */\nconst SIGNATURE_FORMAT = 3;\nconst PACKAGE_MANIFEST = 'package.json';\nconst ALREADY_EXISTS = 'EEXIST';\nconst NO_SUCH_FILE = 'ENOENT';\n\nexport const SYNC_EXIT_OK = 0;\nexport const SYNC_EXIT_FAILED = 1;\n/** EX_TEMPFAIL: another sync holds the lock. */\nexport const SYNC_EXIT_BUSY = 75;\n\nexport type SyncOrigin = 'cli' | 'background';\nexport type SyncStatus = 'ok' | 'noop' | 'partial' | 'failed' | 'busy';\n\nexport interface SyncResult {\n packages: Pick<LayerPackageResult, 'installed' | 'updated' | 'unchecked'>;\n /** The global web build key, or why there is none. */\n web: { status: 'built' | 'cached'; key: string } | { status: 'skipped'; reason: string };\n /** The global native build key, or why there is none. */\n native?: { status: 'built' | 'cached'; key: string } | { status: 'skipped'; reason: string };\n /** The MCP app build keys, comma separated, when any root's packages declare MCP UI widgets. */\n mcpApp?: string;\n}\n\nexport interface SyncRootReport {\n root: string;\n status: 'ok' | 'partial' | 'failed';\n unsynced: { selector: string; reason: string; stderr?: string[] }[];\n}\n\nexport interface SyncReport {\n status: SyncStatus;\n /** Assigned once sync writes a pointer; null until then. */\n generation: number | null;\n /** Assigned once sync computes the fast-exit signature; null until then. */\n catalogueHash: string | null;\n webKey: string | null;\n mcpKeys: string[];\n roots: SyncRootReport[];\n /** External commands sync ran, such as local package builds. */\n commands: string[];\n errors: string[];\n finishedAt: string;\n}\n\n/** One progress event; the CLI renders these as text or as JSON lines. */\nexport type SyncEvent =\n | { type: 'start'; label: string; message: string }\n | { type: 'line'; label: string; message: string }\n | { type: 'done'; label: string; summary: string }\n | { type: 'result'; result: SyncResult };\n\nexport interface SyncLockHolder {\n pid: number;\n /** Unique per acquisition, so a holder can tell its lock from a later one, even under its pid. */\n token?: string;\n startedAt: string;\n origin: SyncOrigin;\n}\n\nexport interface SyncOptions {\n homeDirectory: string;\n environment: NodeJS.ProcessEnv;\n /** The Po home every global build and the lock live under. */\n globalRoot: string;\n /**\n * The repository sync runs from: registered as a workspace, synced as a root, and its hooks\n * regenerated. Undefined with `--global`, which registers nothing.\n */\n repoRoot?: string;\n origin: SyncOrigin;\n onEvent?: (event: SyncEvent) => void;\n}\n\nexport interface SyncDeps {\n install: typeof ensureLayerPackages;\n buildWeb: typeof ensureGlobalWebBuild;\n buildNative: typeof ensureGlobalNativeBuild;\n bundleMcpApp: typeof ensureMcpAppBuild;\n prune: typeof pruneAfterSync;\n /** Whether a lock holder's process still runs. */\n isAlive: (pid: number) => boolean;\n pid: number;\n now: () => Date;\n}\n\n/** `process.kill(pid, 0)` probes without signalling; only ESRCH means the process is gone. */\nexport function processIsAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n // EPERM means it runs under another user, which still holds the lock.\n return (error as NodeJS.ErrnoException).code !== NO_SUCH_PROCESS;\n }\n}\n\nconst DEFAULT_DEPS: SyncDeps = {\n install: ensureLayerPackages,\n buildWeb: ensureGlobalWebBuild,\n buildNative: ensureGlobalNativeBuild,\n bundleMcpApp: ensureMcpAppBuild,\n prune: pruneAfterSync,\n isAlive: processIsAlive,\n pid: process.pid,\n now: () => new Date(),\n};\n\nexport function syncExitCode(status: SyncStatus): number {\n if (status === 'busy') return SYNC_EXIT_BUSY;\n return status === 'ok' || status === 'noop' ? SYNC_EXIT_OK : SYNC_EXIT_FAILED;\n}\n\nexport function syncLockPath(globalRoot: string): string {\n return path.join(globalRoot, BUILD_DIRECTORY, LOCK_FILE);\n}\n\nexport function syncRerunPath(globalRoot: string): string {\n return path.join(globalRoot, BUILD_DIRECTORY, RERUN_FILE);\n}\n\nfunction pluralize(count: number, noun: string): string {\n return `${String(count)} ${noun}${count === 1 ? '' : 's'}`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction packageSummary(result: SyncResult['packages']): string {\n const parts: string[] = [];\n if (result.updated.length > 0) parts.push(`updated ${pluralize(result.updated.length, 'package')}`);\n if (result.installed.length > 0) parts.push(`installed ${pluralize(result.installed.length, 'missing package')}`);\n if (parts.length === 0) parts.push('already up to date');\n if (result.unchecked.length > 0) parts.push(`${pluralize(result.unchecked.length, 'package')} left unchecked`);\n return parts.join(', ');\n}\n\nexport function formatSyncResult(result: SyncResult): string {\n return [\n `packages: ${packageSummary(result.packages)}`,\n `web: ${result.web.status === 'skipped' ? result.web.reason : `${result.web.key} (${result.web.status})`}`,\n ...(result.native === undefined\n ? []\n : [\n `native: ${result.native.status === 'skipped' ? result.native.reason : `${result.native.key} (${result.native.status})`}`,\n ]),\n ...(result.mcpApp === undefined ? [] : [`mcp app: ${result.mcpApp}`]),\n '',\n ].join('\\n');\n}\n\nfunction workspaceRegistry(\n homeDirectory: string,\n environment: NodeJS.ProcessEnv,\n onNotice: (message: string) => void,\n): WorkspaceRegistry {\n return createWorkspaceRegistry({\n directory: path.join(piAgentDirectory(environment, homeDirectory), 'server'),\n onNotice,\n });\n}\n\ntype RootCompositions = ReturnType<typeof rootCompositions>;\n\n/**\n * Each root's compositions, resolved the way the server resolves them: a selection that does\n * not resolve yet (an unbuilt local package, say) is left out with a diagnostic instead of\n * failing the whole root, so sync and the server derive the same web, MCP and fingerprint\n * inputs. A root that cannot be composed at all maps to why.\n */\nfunction composeRoots(\n roots: readonly string[],\n homeDirectory: string,\n environment: NodeJS.ProcessEnv,\n): Map<string, RootCompositions | Error> {\n return new Map(\n roots.map((root): [string, RootCompositions | Error] => {\n try {\n return [root, rootCompositions({ root, homeDirectory, environment, tolerateUnsynced: true })];\n } catch (error) {\n return [root, error instanceof Error ? error : new Error(String(error))];\n }\n }),\n );\n}\n\n/** Each root's composition package roots; a root that cannot be composed is left out with a notice. */\nfunction packageRootsByRoot(\n composed: ReadonlyMap<string, RootCompositions | Error>,\n onNotice: (message: string) => void,\n): Map<string, string[]> {\n return new Map(\n [...composed].map(([root, compositions]) => {\n if (!(compositions instanceof Error)) return [root, compositionPackageRoots(compositions)];\n onNotice(`'${root}' is left out of the web build: ${compositions.message}`);\n return [root, []];\n }),\n );\n}\n\n/** The selectors a lenient composition left out, each once with the first diagnostic that explains it. */\nfunction skippedSelections(compositions: RootCompositions): SyncRootReport['unsynced'] {\n const skipped = new Map<string, string>();\n for (const composition of compositions)\n for (const selection of composition.selections)\n if (selection.outcome === 'missing-optional' && !selection.optional && !skipped.has(selection.selector))\n skipped.set(selection.selector, selection.diagnostic ?? 'it does not resolve');\n return [...skipped].map(([selector, reason]) => ({ selector, reason }));\n}\n\n/**\n * The plugin roots one global web build covers: every installed catalogue package, so each\n * first-party plugin has a slot whether or not a config names it yet, then each root's own\n * composition package roots. Sync builds with these and the server derives the same key.\n */\nfunction webPluginRootsOf(\n globalRoot: string,\n rootPackageRoots: ReadonlyMap<string, readonly string[]>,\n environment: NodeJS.ProcessEnv,\n): string[] {\n return [...catalogPackageRoots(globalRoot, environment), ...[...rootPackageRoots.values()].flat()];\n}\n\n/**\n * Every package root the global web build covers: the catalogue packages, the global root,\n * every workspace the server has admitted, and `targetRoot`, which the server admits when it\n * opens it. A root whose configuration cannot be read is left out with a notice, as sync\n * leaves it out of the build when it cannot compose it.\n */\nexport function globalWebPluginRoots(\n targetRoot: string,\n homeDirectory: string,\n environment: NodeJS.ProcessEnv,\n onNotice: (message: string) => void,\n): string[] {\n const globalRoot = globalDoomConfigDirectory(homeDirectory);\n const admitted = workspaceRegistry(homeDirectory, environment, onNotice)\n .list()\n .map((workspace) => workspace.root)\n .filter((root) => fs.existsSync(root));\n const roots = [...new Set([globalRoot, ...admitted, targetRoot])];\n return webPluginRootsOf(\n globalRoot,\n packageRootsByRoot(composeRoots(roots, homeDirectory, environment), onNotice),\n environment,\n );\n}\n\n/**\n * Registers the repository as a workspace the way the server admits one, so one repository\n * never gets two ids, and returns the workspace root it belongs to.\n */\nfunction registerRepository(\n registry: WorkspaceRegistry,\n repoRoot: string,\n onNotice: (message: string) => void,\n): string {\n const checkoutRoot = fs.realpathSync(repoRoot);\n const { id, root, moved } = identifyWorkspace({\n records: registry.list(),\n checkoutRoot,\n marker: readWorkspaceMarker(checkoutRoot),\n });\n const record = registry.list().find((workspace) => workspace.id === id);\n if (record === undefined || moved)\n registry.add({ id, root, ...(record?.name === undefined ? {} : { name: record.name }) });\n if (moved) onNotice(`workspace '${id}' moved to '${root}'`);\n try {\n if (readWorkspaceMarker(root) === undefined) writeWorkspaceMarker(root, id);\n } catch (error) {\n onNotice(`'${root}' id could not be recorded in its git data: ${errorMessage(error)}`);\n }\n return root;\n}\n\n/**\n * The roots this sync covers: the Po home, every registered workspace whose folder exists,\n * and the repository, registered first. Entries whose folder is gone are removed with a warning.\n */\nfunction resolveRoots(options: SyncOptions, progress: Steps): string[] {\n const notice = (message: string): void => progress.line(ROOTS_LABEL, message);\n const registry = workspaceRegistry(options.homeDirectory, options.environment, notice);\n const repository =\n options.repoRoot === undefined || path.resolve(options.repoRoot) === path.resolve(options.globalRoot)\n ? undefined\n : registerRepository(registry, options.repoRoot, notice);\n const live: string[] = [];\n for (const workspace of registry.list()) {\n if (fs.existsSync(workspace.root)) {\n live.push(workspace.root);\n continue;\n }\n notice(`warning: removed workspace '${workspace.id}': '${workspace.root}' no longer exists`);\n registry.remove(workspace.id);\n }\n return [...new Set([options.globalRoot, ...live, ...(repository === undefined ? [] : [repository])])];\n}\n\n/** The packages a root's layers name by local path, each resolved against its layer's base directory. */\nfunction localPackages(config: ReturnType<typeof loadMajorModesConfigLenient>['config']): LocalPackage[] {\n const definitions = [...(config.default ? [config.default] : []), ...Object.values(config.layers)];\n const packages = new Map<string, LocalPackage>();\n for (const definition of definitions)\n for (const configured of definition.packages ?? []) {\n const selector = typeof configured === 'string' ? configured : configured.name;\n if (!isLocalPackageSpecifier(selector)) continue;\n const directory = path.resolve(definition.baseDirectory, selector);\n if (!packages.has(directory)) packages.set(directory, { selector, directory });\n }\n return [...packages.values()];\n}\n\n/**\n * SHA-256 over every mode's composition fingerprint, or why the root cannot be composed. The\n * pointer records it per root, so a server can tell a root whose selection changed since the\n * last sync by computing it again with the environment sync ran under.\n */\nexport function rootSelectionFingerprint(root: string, homeDirectory: string, environment: NodeJS.ProcessEnv): string {\n try {\n const fingerprints = rootCompositions({ root, homeDirectory, environment, tolerateUnsynced: true }).map(\n (composition) => composition.fingerprint,\n );\n return crypto.createHash('sha256').update(fingerprints.join('\\n')).digest('hex');\n } catch (error) {\n return `unresolved:${errorMessage(error)}`;\n }\n}\n\n/** The po package version this process runs from, or why it cannot be read. */\nfunction poPackageVersion(): string {\n try {\n const manifest = JSON.parse(fs.readFileSync(path.join(poPackageRoot(), PACKAGE_MANIFEST), 'utf8')) as {\n version?: unknown;\n };\n return typeof manifest.version === 'string' ? manifest.version : 'unversioned';\n } catch (error) {\n return `unreadable:${errorMessage(error)}`;\n }\n}\n\n/**\n * The Po install a sync or a server runs from: its po package version and the po-web host\n * version it builds with. Sync records it in the pointer; a server whose identity differs\n * refuses that pointer's builds and syncs with its own install.\n */\nexport function syncHostIdentity(globalRoot: string, environment: NodeJS.ProcessEnv): string {\n return `po@${poPackageVersion()}+po-web@${webHostVersion(globalRoot, environment)}`;\n}\n\n/** The fast-exit signature: catalogue hash, each root's selection and local build stamps, host identity. */\nfunction syncSignature(options: SyncOptions, roots: readonly string[], catalogueHash: string): string {\n const { homeDirectory, environment } = options;\n const value = {\n format: SIGNATURE_FORMAT,\n catalogueHash,\n roots: roots.map((root) => ({\n root,\n selection: rootSelectionFingerprint(root, homeDirectory, environment),\n local: localPackages(loadMajorModesConfigLenient(root, homeDirectory, environment).config).map(\n ({ directory }) => [directory, localBuildStamp(directory)],\n ),\n })),\n host: syncHostIdentity(options.globalRoot, environment),\n };\n return crypto.createHash('sha256').update(JSON.stringify(value)).digest('hex');\n}\n\n/** `current.json`: the last successful report minus its transient fields, plus what fast exit needs. */\nexport interface SyncPointer {\n generation: number;\n signature: string;\n catalogueHash: string;\n webKey: string | null;\n nativeKey: string | null;\n mcpKeys: string[];\n roots: SyncRootReport[];\n commands: string[];\n /** Each root's `rootSelectionFingerprint` at the time of the sync; absent in older pointers. */\n fingerprints?: Record<string, string>;\n /** The `syncHostIdentity` of the install that wrote the pointer; absent in older pointers. */\n host?: string;\n}\n\nexport function syncPointerPath(globalRoot: string): string {\n return path.join(globalRoot, BUILD_DIRECTORY, POINTER_FILE);\n}\n\nexport function syncLastAttemptPath(globalRoot: string): string {\n return path.join(globalRoot, BUILD_DIRECTORY, LAST_ATTEMPT_FILE);\n}\n\n/** The current pointer, or undefined when sync has not written one yet or it is unreadable. */\nexport function readSyncPointer(globalRoot: string): SyncPointer | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(syncPointerPath(globalRoot), 'utf8')) as Partial<SyncPointer>;\n return typeof parsed.signature === 'string' && typeof parsed.generation === 'number'\n ? (parsed as SyncPointer)\n : undefined;\n } catch {\n // Missing or unreadable: there is nothing to fast-exit against.\n return undefined;\n }\n}\n\n/** The files whose presence proves each artifact a pointer names is complete. */\nfunction pointerArtifacts(\n globalRoot: string,\n pointer: Pick<SyncPointer, 'webKey' | 'nativeKey' | 'mcpKeys'>,\n): string[] {\n const build = path.join(globalRoot, BUILD_DIRECTORY);\n return [\n ...(pointer.webKey === null ? [] : [path.join(build, WEB_LABEL, pointer.webKey, BUILD_RECORD)]),\n ...(pointer.nativeKey === null ? [] : [path.join(build, NATIVE_LABEL, pointer.nativeKey, BUILD_RECORD)]),\n ...pointer.mcpKeys.map((key) => path.join(build, 'mcp-app', key, MCP_APP_FILE)),\n ];\n}\n\n/** The report of the last sync attempt, successful or not, or undefined when there is none. */\nexport function readSyncLastAttempt(globalRoot: string): SyncReport | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(syncLastAttemptPath(globalRoot), 'utf8')) as Partial<SyncReport>;\n return Array.isArray(parsed.roots) ? (parsed as SyncReport) : undefined;\n } catch {\n // Missing or unreadable: no attempt to report reasons from.\n return undefined;\n }\n}\n\nfunction writeJsonFile(file: string, value: unknown): void {\n writeFileAtomic(file, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\ntype LockAttempt = { acquired: true; token: string } | { acquired: false; holder: SyncLockHolder | undefined };\n\nfunction readHolder(lockPath: string): SyncLockHolder | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(lockPath, 'utf8')) as Partial<SyncLockHolder>;\n return typeof parsed.pid === 'number' ? (parsed as SyncLockHolder) : undefined;\n } catch {\n // Missing or half-written: the caller decides from the file's age.\n return undefined;\n }\n}\n\nfunction lockIsStale(lockPath: string, deps: SyncDeps): boolean {\n const holder = readHolder(lockPath);\n if (holder !== undefined) return !deps.isAlive(holder.pid);\n try {\n return deps.now().getTime() - fs.statSync(lockPath).mtimeMs > UNREADABLE_LOCK_GRACE_MS;\n } catch {\n // Gone between the failed create and this check: free to retry.\n return true;\n }\n}\n\nfunction tryCreateLock(lockPath: string, holder: SyncLockHolder): boolean {\n try {\n const descriptor = fs.openSync(lockPath, 'wx');\n try {\n fs.writeSync(descriptor, JSON.stringify(holder));\n } finally {\n fs.closeSync(descriptor);\n }\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === ALREADY_EXISTS) return false;\n throw error;\n }\n}\n\n/**\n * Takes over a lock judged stale. Removing it by path could remove a lock another taker created\n * since the check, so it is first renamed to a name only this process knows and checked again\n * there: a lock that turns out live is linked back (link never replaces), a stale one is dropped\n * before the exclusive create, which at most one taker wins.\n */\nfunction takeOverStaleLock(lockPath: string, holder: SyncLockHolder, deps: SyncDeps): boolean {\n const moved = `${lockPath}.${String(deps.pid)}.${crypto.randomUUID()}.stale`;\n try {\n fs.renameSync(lockPath, moved);\n } catch (error) {\n // Already gone: released, or moved by another taker; the create decides.\n if ((error as NodeJS.ErrnoException).code === NO_SUCH_FILE) return tryCreateLock(lockPath, holder);\n throw error;\n }\n try {\n if (!lockIsStale(moved, deps)) {\n try {\n fs.linkSync(moved, lockPath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== ALREADY_EXISTS) throw error;\n }\n return false;\n }\n } finally {\n fs.rmSync(moved, { force: true });\n }\n return tryCreateLock(lockPath, holder);\n}\n\n/** Creates the lock, taking over one whose holder is dead. Never inspects other processes beyond `kill(pid, 0)`. */\nfunction acquireLock(lockPath: string, origin: SyncOrigin, deps: SyncDeps): LockAttempt {\n fs.mkdirSync(path.dirname(lockPath), { recursive: true });\n const token = crypto.randomUUID();\n const holder: SyncLockHolder = { pid: deps.pid, token, startedAt: deps.now().toISOString(), origin };\n if (tryCreateLock(lockPath, holder)) return { acquired: true, token };\n // A racing taker that wins the takeover makes this attempt report busy, as it should.\n if (lockIsStale(lockPath, deps) && takeOverStaleLock(lockPath, holder, deps)) return { acquired: true, token };\n return { acquired: false, holder: readHolder(lockPath) };\n}\n\n/**\n * The lock as the holder with `token` sees it: undefined while the lock still names it, else\n * the busy report to stop with. A takeover that moved a live lock aside can let a third taker\n * create a new one, so a holder checks before each step whose overlap would do harm.\n */\nfunction lostLock(lockPath: string, token: string, deps: SyncDeps): SyncReport | undefined {\n const holder = readHolder(lockPath);\n if (holder?.token === token) return undefined;\n const by = holder === undefined ? 'another process' : `pid ${String(holder.pid)}`;\n return emptyReport('busy', [`po sync lost its lock to ${by}`], deps);\n}\n\nfunction releaseLock(lockPath: string, token: string): void {\n if (readHolder(lockPath)?.token === token) fs.rmSync(lockPath, { force: true });\n}\n\n/** Consumes the rerun marker; true when a background run asked for another pass. */\nfunction takeRerunRequest(rerunPath: string): boolean {\n if (!fs.existsSync(rerunPath)) return false;\n fs.rmSync(rerunPath, { force: true });\n return true;\n}\n\nfunction emptyReport(status: SyncStatus, errors: string[], deps: SyncDeps): SyncReport {\n return {\n status,\n generation: null,\n catalogueHash: null,\n webKey: null,\n mcpKeys: [],\n roots: [],\n commands: [],\n errors,\n finishedAt: deps.now().toISOString(),\n };\n}\n\n/** A step reporter over the event stream, mirroring the presenter's start/done/line. */\nfunction steps(emit: (event: SyncEvent) => void) {\n return {\n start(label: string, message: string): (summary: string) => void {\n emit({ type: 'start', label, message });\n return (summary) => emit({ type: 'done', label, summary });\n },\n line(label: string, message: string): void {\n emit({ type: 'line', label, message });\n },\n };\n}\n\ntype Steps = ReturnType<typeof steps>;\n\n/**\n * Drops old builds and unreferenced store content once installs and builds are done.\n * Never fatal: a failed prune leaves everything for the next explicit sync.\n */\nasync function pruneStep(progress: Steps, prune: SyncDeps['prune'], input: SyncPruneInput): Promise<void> {\n const done = progress.start(PRUNE_LABEL, 'dropping old builds and unused packages');\n try {\n const result = await prune(input);\n const runtime =\n 'skipped' in result.runtime\n ? result.runtime.skipped\n : `${(result.runtime.bytes / BYTES_PER_MEGABYTE).toFixed(1)} MB of packages released`;\n done(`removed ${pluralize(result.builds.length, 'old build')}, ${runtime}`);\n } catch (error) {\n done(`failed: ${errorMessage(error)}`);\n }\n}\n\n/** Regenerates the hook files the other frontends read before any harness code runs, in a root that has the emitter. */\nfunction emitFrontendHooks(root: string, progress: Steps, commands: string[]): void {\n const emitter = path.join(root, HOOK_EMITTER);\n if (!fs.existsSync(emitter)) return;\n commands.push(`${process.execPath} ${emitter} --write`);\n const result = spawnSync(process.execPath, [emitter, '--write'], { cwd: root, encoding: 'utf8' });\n if (result.status === 0) {\n progress.line(HOOKS_LABEL, `regenerated for Claude Code and Codex in '${root}'`);\n return;\n }\n progress.line(\n HOOKS_LABEL,\n `emit-hooks failed in '${root}' (${result.stderr?.trim() || `exit ${String(result.status)}`})`,\n );\n}\n\n/** A path with its symlinks resolved, or as given when it does not exist. */\nfunction realPath(file: string): string {\n try {\n return fs.realpathSync(file);\n } catch {\n // Missing: compare it as written.\n return path.resolve(file);\n }\n}\n\n/**\n * One sync pass under the lock. A failed step ends the pass with a `failed` report and leaves\n * the pointer alone; a lock that no longer names this holder (`lost`) ends it as busy.\n */\nasync function syncOnce(\n options: SyncOptions,\n deps: SyncDeps,\n emit: (event: SyncEvent) => void,\n lost: () => SyncReport | undefined,\n): Promise<SyncReport> {\n const { homeDirectory, environment, globalRoot } = options;\n const progress = steps(emit);\n const commands: string[] = [];\n const roots = resolveRoots(options, progress);\n const catalogueHash = packageCatalogHash(environment);\n const previous = readSyncPointer(globalRoot);\n if (\n previous !== undefined &&\n // Unsynced selectors are retried only when a person runs sync: with an unchanged signature a\n // background retry repeats the same failure, while something outside the signature (a package\n // manager installed since) is what a manual `po sync` is for. The pointer keeps the reasons.\n (options.origin === 'background' || previous.roots.every((root) => root.unsynced.length === 0)) &&\n previous.signature === syncSignature(options, roots, catalogueHash) &&\n pointerArtifacts(globalRoot, previous).every((file) => fs.existsSync(file))\n ) {\n progress.line(ROOTS_LABEL, `nothing changed since generation ${String(previous.generation)}`);\n return {\n ...emptyReport('noop', [], deps),\n generation: previous.generation,\n catalogueHash,\n webKey: previous.webKey,\n mcpKeys: previous.mcpKeys,\n roots: previous.roots,\n };\n }\n const unsynced = new Map<string, SyncRootReport['unsynced']>(roots.map((root) => [root, []]));\n const report = (status: 'ok' | 'failed', errors: string[], webKey: string | null, mcpKeys: string[]) => {\n const rootReports = roots.map((root): SyncRootReport => {\n const entries = unsynced.get(root) ?? [];\n return { root, status: status === 'ok' && entries.length > 0 ? 'partial' : status, unsynced: entries };\n });\n const partial = status === 'ok' && rootReports.some((root) => root.status === 'partial');\n return {\n ...emptyReport(partial ? 'partial' : status, errors, deps),\n generation: previous?.generation ?? null,\n catalogueHash,\n webKey,\n mcpKeys,\n roots: rootReports,\n commands,\n };\n };\n\n const lostBeforeInstall = lost();\n if (lostBeforeInstall !== undefined) return lostBeforeInstall;\n const packagesDone = progress.start(PACKAGES_LABEL, 'checking configured packages for updates');\n let packages: SyncResult['packages'];\n try {\n const configOf = (root: string) => loadMajorModesConfigLenient(root, homeDirectory, environment).config;\n const globalConfig = configOf(globalRoot);\n // One install covers the catalogue and every package some root does not get from its own\n // node_modules, including those the runtime already provides; the runtime manifest declares\n // exactly those, so pruning can drop anything no root needs. A name a root resolves from its\n // own node_modules stays out, so a workspace's local copy is never shadowed by, or blocked\n // on, a registry install.\n const specifiers = new Set(catalogInstallSpecifiers(environment));\n for (const root of roots) {\n const config = configOf(root);\n for (const specifier of runtimeLayerPackageSpecifiers(config, Object.keys(config.layers), root))\n specifiers.add(specifier);\n }\n packages = await deps.install({\n repoRoot: globalRoot,\n config: globalConfig,\n // Every declared layer, so a later mode switch finds its packages installed.\n layers: Object.keys(globalConfig.layers),\n environment,\n // A background run never bumps versions; only a person running sync asks for updates.\n refresh: options.origin === 'cli',\n specifiers: [...specifiers],\n exactManifest: true,\n onProgress: (message) => progress.line(PACKAGES_LABEL, message),\n });\n } catch (error) {\n packagesDone('failed');\n return report('failed', [`Installing packages failed: ${errorMessage(error)}`], null, []);\n }\n packagesDone(packageSummary(packages));\n\n const localByRoot = new Map(\n roots.map((root) => [root, localPackages(loadMajorModesConfigLenient(root, homeDirectory, environment).config)]),\n );\n const localDirectories = [...localByRoot.values()].flat().map(({ directory }) => directory);\n if (localDirectories.length > 0) {\n const localDone = progress.start(LOCAL_LABEL, 'building local packages');\n const outcomes = await buildLocalPackages({\n globalRoot,\n environment,\n directories: localDirectories,\n onCommand: (command) => commands.push(command),\n onNotice: (message) => progress.line(LOCAL_LABEL, message),\n });\n let failed = 0;\n for (const [root, packagesOfRoot] of localByRoot)\n for (const { selector, directory } of packagesOfRoot) {\n const outcome = outcomes.get(directory);\n if (outcome?.status !== 'failed') continue;\n unsynced.get(root)?.push({\n selector,\n reason: outcome.reason,\n ...(outcome.stderr === undefined ? {} : { stderr: outcome.stderr }),\n });\n }\n for (const outcome of outcomes.values()) if (outcome.status === 'failed') failed += 1;\n localDone(failed === 0 ? `${pluralize(outcomes.size, 'package')} ready` : `${String(failed)} failed`);\n }\n\n const composed = composeRoots(roots, homeDirectory, environment);\n // What a root's selection leaves out still syncs the rest of the root; each is reported once.\n for (const [root, compositions] of composed) {\n if (compositions instanceof Error) continue;\n const entries = unsynced.get(root) ?? [];\n for (const skipped of skippedSelections(compositions))\n if (!entries.some((entry) => entry.selector === skipped.selector)) entries.push(skipped);\n }\n\n const webDone = progress.start(WEB_LABEL, 'ensuring the global web build');\n let rootPackageRoots = packageRootsByRoot(composed, (message) => progress.line(WEB_LABEL, message));\n const buildWeb = (packageRoots: Map<string, string[]>) =>\n deps.buildWeb({\n poHome: globalRoot,\n pluginRoots: webPluginRootsOf(globalRoot, packageRoots, environment),\n environment,\n onNotice: (message) => progress.line(WEB_LABEL, message),\n });\n let built = await buildWeb(rootPackageRoots);\n if (built.status === 'failed') {\n // A local copy is the likeliest cause; one retry without them keeps the rest serving.\n const local = new Set(localDirectories.map(realPath));\n const withoutLocal = new Map(\n [...rootPackageRoots].map(([root, packageRoots]) => [\n root,\n packageRoots.filter((packageRoot) => !local.has(realPath(packageRoot))),\n ]),\n );\n const leftOut = [...rootPackageRoots].some(\n ([root, packageRoots]) => withoutLocal.get(root)?.length !== packageRoots.length,\n );\n const retried = leftOut ? await buildWeb(withoutLocal) : built;\n if (retried.status === 'failed') {\n webDone('failed');\n const retryReason = leftOut ? `; without local copies: ${retried.reason}` : '';\n return report('failed', [`The global web build failed: ${built.reason}${retryReason}`], null, []);\n }\n for (const [root, packagesOfRoot] of localByRoot) {\n const included = new Set((rootPackageRoots.get(root) ?? []).map(realPath));\n const entries = unsynced.get(root) ?? [];\n for (const { selector, directory } of packagesOfRoot)\n if (included.has(realPath(directory)) && !entries.some((entry) => entry.selector === selector))\n entries.push({\n selector,\n reason: `left out of the web build, which failed with it: ${built.reason}`,\n });\n }\n progress.line(WEB_LABEL, `built without local copies after: ${built.reason}`);\n rootPackageRoots = withoutLocal;\n built = retried;\n }\n const pluginRoots = webPluginRootsOf(globalRoot, rootPackageRoots, environment);\n const web: SyncResult['web'] = built.status === 'skipped' ? built : { status: built.status, key: built.build.key };\n webDone(web.status === 'skipped' ? web.reason : `${web.key} (${web.status})`);\n const webKey = web.status === 'skipped' ? null : web.key;\n\n const nativeDone = progress.start(NATIVE_LABEL, 'ensuring the global native build');\n const nativeBuilt = await deps.buildNative({\n poHome: globalRoot,\n pluginRoots,\n onNotice: (message) => progress.line(NATIVE_LABEL, message),\n });\n if (nativeBuilt.status === 'failed') {\n nativeDone('failed');\n return report('failed', [`The global native build failed: ${nativeBuilt.reason}`], webKey, []);\n }\n const native: NonNullable<SyncResult['native']> =\n nativeBuilt.status === 'skipped' ? nativeBuilt : { status: nativeBuilt.status, key: nativeBuilt.build.key };\n nativeDone(native.status === 'skipped' ? native.reason : `${native.key} (${native.status})`);\n const nativeKey = native.status === 'skipped' ? null : native.key;\n\n // One MCP app build per root; its key is a content hash, so roots with one widget set share it.\n const mcpDone = progress.start(MCP_LABEL, 'ensuring the MCP app build of each root');\n const mcpKeys: string[] = [];\n for (const [root, compositions] of composed) {\n if (compositions instanceof Error) {\n progress.line(MCP_LABEL, `'${root}' is left out of the MCP app build: ${compositions.message}`);\n continue;\n }\n try {\n const app = await deps.bundleMcpApp({ poHome: globalRoot, candidates: mcpPluginCandidates(compositions) });\n if (app !== undefined && !mcpKeys.includes(app.key)) mcpKeys.push(app.key);\n } catch (error) {\n unsynced.get(root)?.push({ selector: MCP_LABEL, reason: `the MCP app build failed: ${errorMessage(error)}` });\n }\n }\n mcpDone(mcpKeys.length === 0 ? 'no MCP UI widgets' : mcpKeys.join(', '));\n const mcpApp = mcpKeys.length === 0 ? undefined : mcpKeys.join(', ');\n\n // The pointer names only artifacts that exist; a missing one keeps the previous pointer.\n const missing = pointerArtifacts(globalRoot, { webKey, nativeKey, mcpKeys }).filter((file) => !fs.existsSync(file));\n if (missing.length > 0)\n return report('failed', [`Build artifacts are missing: ${missing.join(', ')}`], webKey, mcpKeys);\n // A root that names two copies of one plugin serves only one of them under its plugin id.\n if (built.status !== 'skipped')\n for (const [root, packageRoots] of rootPackageRoots)\n for (const [pluginId, slots] of duplicatePluginCopies(built.build, packageRoots))\n unsynced.get(root)?.push({\n selector: pluginId,\n reason: `two copies of plugin '${pluginId}' are selected (${slots.join(', ')})`,\n });\n const succeeded = report('ok', [], webKey, mcpKeys);\n const generation = (previous?.generation ?? 0) + 1;\n const pointer: SyncPointer = {\n generation,\n signature: syncSignature(options, roots, catalogueHash),\n catalogueHash,\n webKey,\n nativeKey,\n mcpKeys,\n roots: succeeded.roots,\n commands,\n fingerprints: Object.fromEntries(\n roots.map((root) => [root, rootSelectionFingerprint(root, homeDirectory, environment)]),\n ),\n host: syncHostIdentity(globalRoot, environment),\n };\n const lostBeforePointer = lost();\n if (lostBeforePointer !== undefined) return lostBeforePointer;\n writeJsonFile(syncPointerPath(globalRoot), pointer);\n\n await pruneStep(progress, deps.prune, {\n homeDirectory,\n environment,\n buildsRoot: globalRoot,\n ...(webKey === null ? {} : { webKey }),\n ...(nativeKey === null ? {} : { nativeKey }),\n ...(mcpKeys.length === 0 ? {} : { mcpAppKeys: mcpKeys }),\n });\n // The checkout itself too: a linked worktree registers under its main workspace root.\n for (const root of new Set([...roots, ...(options.repoRoot === undefined ? [] : [realPath(options.repoRoot)])]))\n emitFrontendHooks(root, progress, commands);\n emit({ type: 'result', result: { packages, web, native, ...(mcpApp === undefined ? {} : { mcpApp }) } });\n return { ...succeeded, generation };\n}\n\n/**\n * One pass whose report lands in `last-attempt.json`, so a failed background run leaves its\n * reasons. A pass that lost the lock leaves the file to the holder that took it.\n */\nasync function attempt(\n options: SyncOptions,\n deps: SyncDeps,\n emit: (event: SyncEvent) => void,\n lost: () => SyncReport | undefined,\n): Promise<SyncReport> {\n let report: SyncReport;\n try {\n report = await syncOnce(options, deps, emit, lost);\n } catch (error) {\n report = emptyReport('failed', [`po sync failed: ${errorMessage(error)}`], deps);\n }\n if (report.status === 'busy') return report;\n try {\n writeJsonFile(syncLastAttemptPath(options.globalRoot), report);\n } catch (error) {\n report = {\n ...report,\n errors: [...report.errors, `last-attempt.json could not be written: ${errorMessage(error)}`],\n };\n }\n return report;\n}\n\n/**\n * Runs sync under the Po home lock and reports the outcome.\n *\n * Busy when another live sync holds the lock; a background caller leaves a rerun marker\n * first. The holder repeats its pass while a marker is present. A marker that lands after\n * its last check but before the release is caught after the release: the holder takes the\n * lock again and runs once more, or leaves the marker to whoever took the lock first.\n */\nexport async function runSync(options: SyncOptions, overrides: Partial<SyncDeps> = {}): Promise<SyncReport> {\n const deps: SyncDeps = { ...DEFAULT_DEPS, ...overrides };\n const emit = options.onEvent ?? ((): void => {});\n const lockPath = syncLockPath(options.globalRoot);\n const rerunPath = syncRerunPath(options.globalRoot);\n let lock = acquireLock(lockPath, options.origin, deps);\n if (!lock.acquired) {\n if (options.origin === 'background') fs.writeFileSync(rerunPath, deps.now().toISOString());\n const holder = lock.holder === undefined ? 'another process' : `pid ${String(lock.holder.pid)}`;\n return emptyReport('busy', [`po sync is already running (${holder})`], deps);\n }\n for (;;) {\n const { token } = lock;\n const lost = () => lostLock(lockPath, token, deps);\n let report: SyncReport;\n try {\n // A marker left before this pass started is satisfied by this pass.\n takeRerunRequest(rerunPath);\n report = await attempt(options, deps, emit, lost);\n // A pass that lost the lock leaves the rerun marker to the holder that took it.\n while (report.status !== 'busy' && takeRerunRequest(rerunPath)) report = await attempt(options, deps, emit, lost);\n } finally {\n releaseLock(lockPath, token);\n }\n if (report.status === 'busy' || !fs.existsSync(rerunPath)) return report;\n lock = acquireLock(lockPath, options.origin, deps);\n if (!lock.acquired) return report;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { ensureGlobalNativeBuild } from "../../builders/native/index.mjs";
2
+ import { ensureMcpAppBuild } from "../../builders/server/mcpAppBuild.mjs";
3
+ import { ensureGlobalWebBuild } from "../../builders/web/index.mjs";
4
+ import { LayerPackageResult, ensureLayerPackages } from "../layerPackageInstaller/index.mjs";
5
+ import { pruneAfterSync } from "../syncPrune/index.mjs";
6
+ //#region src/composition/syncService/index.d.ts
7
+ export type SyncStatus = 'ok' | 'noop' | 'partial' | 'failed' | 'busy';
8
+ export interface SyncResult {
9
+ packages: Pick<LayerPackageResult, 'installed' | 'updated' | 'unchecked'>;
10
+ /** The global web build key, or why there is none. */
11
+ web: {
12
+ status: 'built' | 'cached';
13
+ key: string;
14
+ } | {
15
+ status: 'skipped';
16
+ reason: string;
17
+ };
18
+ /** The global native build key, or why there is none. */
19
+ native?: {
20
+ status: 'built' | 'cached';
21
+ key: string;
22
+ } | {
23
+ status: 'skipped';
24
+ reason: string;
25
+ };
26
+ /** The MCP app build keys, comma separated, when any root's packages declare MCP UI widgets. */
27
+ mcpApp?: string;
28
+ }
29
+ export interface SyncRootReport {
30
+ root: string;
31
+ status: 'ok' | 'partial' | 'failed';
32
+ unsynced: {
33
+ selector: string;
34
+ reason: string;
35
+ stderr?: string[];
36
+ }[];
37
+ }
38
+ export interface SyncReport {
39
+ status: SyncStatus;
40
+ /** Assigned once sync writes a pointer; null until then. */
41
+ generation: number | null;
42
+ /** Assigned once sync computes the fast-exit signature; null until then. */
43
+ catalogueHash: string | null;
44
+ webKey: string | null;
45
+ mcpKeys: string[];
46
+ roots: SyncRootReport[];
47
+ /** External commands sync ran, such as local package builds. */
48
+ commands: string[];
49
+ errors: string[];
50
+ finishedAt: string;
51
+ }
52
+ export interface SyncDeps {
53
+ install: typeof ensureLayerPackages;
54
+ buildWeb: typeof ensureGlobalWebBuild;
55
+ buildNative: typeof ensureGlobalNativeBuild;
56
+ bundleMcpApp: typeof ensureMcpAppBuild;
57
+ prune: typeof pruneAfterSync;
58
+ /** Whether a lock holder's process still runs. */
59
+ isAlive: (pid: number) => boolean;
60
+ pid: number;
61
+ now: () => Date;
62
+ }
63
+ export declare function formatSyncResult(result: SyncResult): string;
64
+ //#endregion
65
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/composition/syncService/index.ts"],"mappings":";;;;;;YA6FY;iBAEK;EACf,UAAU,KAAK;;EAEf;IAAO;IAA4B;;IAAkB;IAAmB;;;EAExE;IAAW;IAA4B;;IAAkB;IAAmB;;;EAE5E;;iBAGe;EACf;EACA;EACA;IAAY;IAAkB;IAAgB;;;iBAG/B;EACf,QAAQ;;EAER;;EAEA;EACA;EACA;EACA,OAAO;;EAEP;EACA;EACA;;iBAgCe;EACf,gBAAgB;EAChB,iBAAiB;EACjB,oBAAoB;EACpB,qBAAqB;EACrB,cAAc;;EAEd,UAAU;EACV;EACA,WAAW;;wBAuDG,iBAAiB,QAAQ"}