plexus-agent-config 0.0.1

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 (351) hide show
  1. package/dist/bin.d.ts +3 -0
  2. package/dist/bin.d.ts.map +1 -0
  3. package/dist/bin.js +175 -0
  4. package/dist/bin.js.map +1 -0
  5. package/node_modules/plexus-agent-config-core/dist/agents/adapters/base.d.ts +38 -0
  6. package/node_modules/plexus-agent-config-core/dist/agents/adapters/base.d.ts.map +1 -0
  7. package/node_modules/plexus-agent-config-core/dist/agents/adapters/base.js +125 -0
  8. package/node_modules/plexus-agent-config-core/dist/agents/adapters/base.js.map +1 -0
  9. package/node_modules/plexus-agent-config-core/dist/agents/adapters/codex.d.ts +9 -0
  10. package/node_modules/plexus-agent-config-core/dist/agents/adapters/codex.d.ts.map +1 -0
  11. package/node_modules/plexus-agent-config-core/dist/agents/adapters/codex.js +96 -0
  12. package/node_modules/plexus-agent-config-core/dist/agents/adapters/codex.js.map +1 -0
  13. package/node_modules/plexus-agent-config-core/dist/agents/adapters/index.d.ts +8 -0
  14. package/node_modules/plexus-agent-config-core/dist/agents/adapters/index.d.ts.map +1 -0
  15. package/node_modules/plexus-agent-config-core/dist/agents/adapters/index.js +12 -0
  16. package/node_modules/plexus-agent-config-core/dist/agents/adapters/index.js.map +1 -0
  17. package/node_modules/plexus-agent-config-core/dist/agents/adapters/json-mcp.d.ts +25 -0
  18. package/node_modules/plexus-agent-config-core/dist/agents/adapters/json-mcp.d.ts.map +1 -0
  19. package/node_modules/plexus-agent-config-core/dist/agents/adapters/json-mcp.js +182 -0
  20. package/node_modules/plexus-agent-config-core/dist/agents/adapters/json-mcp.js.map +1 -0
  21. package/node_modules/plexus-agent-config-core/dist/agents/catalog.d.ts +15 -0
  22. package/node_modules/plexus-agent-config-core/dist/agents/catalog.d.ts.map +1 -0
  23. package/node_modules/plexus-agent-config-core/dist/agents/catalog.js +153 -0
  24. package/node_modules/plexus-agent-config-core/dist/agents/catalog.js.map +1 -0
  25. package/node_modules/plexus-agent-config-core/dist/agents/detect.d.ts +14 -0
  26. package/node_modules/plexus-agent-config-core/dist/agents/detect.d.ts.map +1 -0
  27. package/node_modules/plexus-agent-config-core/dist/agents/detect.js +92 -0
  28. package/node_modules/plexus-agent-config-core/dist/agents/detect.js.map +1 -0
  29. package/node_modules/plexus-agent-config-core/dist/agents/index.d.ts +5 -0
  30. package/node_modules/plexus-agent-config-core/dist/agents/index.d.ts.map +1 -0
  31. package/node_modules/plexus-agent-config-core/dist/agents/index.js +5 -0
  32. package/node_modules/plexus-agent-config-core/dist/agents/index.js.map +1 -0
  33. package/node_modules/plexus-agent-config-core/dist/agents/inspect.d.ts +74 -0
  34. package/node_modules/plexus-agent-config-core/dist/agents/inspect.d.ts.map +1 -0
  35. package/node_modules/plexus-agent-config-core/dist/agents/inspect.js +169 -0
  36. package/node_modules/plexus-agent-config-core/dist/agents/inspect.js.map +1 -0
  37. package/node_modules/plexus-agent-config-core/dist/backup/index.d.ts +70 -0
  38. package/node_modules/plexus-agent-config-core/dist/backup/index.d.ts.map +1 -0
  39. package/node_modules/plexus-agent-config-core/dist/backup/index.js +258 -0
  40. package/node_modules/plexus-agent-config-core/dist/backup/index.js.map +1 -0
  41. package/node_modules/plexus-agent-config-core/dist/debug/index.d.ts +71 -0
  42. package/node_modules/plexus-agent-config-core/dist/debug/index.d.ts.map +1 -0
  43. package/node_modules/plexus-agent-config-core/dist/debug/index.js +263 -0
  44. package/node_modules/plexus-agent-config-core/dist/debug/index.js.map +1 -0
  45. package/node_modules/plexus-agent-config-core/dist/effective/index.d.ts +65 -0
  46. package/node_modules/plexus-agent-config-core/dist/effective/index.d.ts.map +1 -0
  47. package/node_modules/plexus-agent-config-core/dist/effective/index.js +227 -0
  48. package/node_modules/plexus-agent-config-core/dist/effective/index.js.map +1 -0
  49. package/node_modules/plexus-agent-config-core/dist/import/from-agents.d.ts +59 -0
  50. package/node_modules/plexus-agent-config-core/dist/import/from-agents.d.ts.map +1 -0
  51. package/node_modules/plexus-agent-config-core/dist/import/from-agents.js +212 -0
  52. package/node_modules/plexus-agent-config-core/dist/import/from-agents.js.map +1 -0
  53. package/node_modules/plexus-agent-config-core/dist/import/index.d.ts +26 -0
  54. package/node_modules/plexus-agent-config-core/dist/import/index.d.ts.map +1 -0
  55. package/node_modules/plexus-agent-config-core/dist/import/index.js +100 -0
  56. package/node_modules/plexus-agent-config-core/dist/import/index.js.map +1 -0
  57. package/node_modules/plexus-agent-config-core/dist/index.d.ts +12 -0
  58. package/node_modules/plexus-agent-config-core/dist/index.d.ts.map +1 -0
  59. package/node_modules/plexus-agent-config-core/dist/index.js +12 -0
  60. package/node_modules/plexus-agent-config-core/dist/index.js.map +1 -0
  61. package/node_modules/plexus-agent-config-core/dist/rules/index.d.ts +6 -0
  62. package/node_modules/plexus-agent-config-core/dist/rules/index.d.ts.map +1 -0
  63. package/node_modules/plexus-agent-config-core/dist/rules/index.js +292 -0
  64. package/node_modules/plexus-agent-config-core/dist/rules/index.js.map +1 -0
  65. package/node_modules/plexus-agent-config-core/dist/spread/index.d.ts +38 -0
  66. package/node_modules/plexus-agent-config-core/dist/spread/index.d.ts.map +1 -0
  67. package/node_modules/plexus-agent-config-core/dist/spread/index.js +190 -0
  68. package/node_modules/plexus-agent-config-core/dist/spread/index.js.map +1 -0
  69. package/node_modules/plexus-agent-config-core/dist/store/config.d.ts +5 -0
  70. package/node_modules/plexus-agent-config-core/dist/store/config.d.ts.map +1 -0
  71. package/node_modules/plexus-agent-config-core/dist/store/config.js +62 -0
  72. package/node_modules/plexus-agent-config-core/dist/store/config.js.map +1 -0
  73. package/node_modules/plexus-agent-config-core/dist/store/custom-agents.d.ts +45 -0
  74. package/node_modules/plexus-agent-config-core/dist/store/custom-agents.d.ts.map +1 -0
  75. package/node_modules/plexus-agent-config-core/dist/store/custom-agents.js +103 -0
  76. package/node_modules/plexus-agent-config-core/dist/store/custom-agents.js.map +1 -0
  77. package/node_modules/plexus-agent-config-core/dist/store/fs-utils.d.ts +16 -0
  78. package/node_modules/plexus-agent-config-core/dist/store/fs-utils.d.ts.map +1 -0
  79. package/node_modules/plexus-agent-config-core/dist/store/fs-utils.js +45 -0
  80. package/node_modules/plexus-agent-config-core/dist/store/fs-utils.js.map +1 -0
  81. package/node_modules/plexus-agent-config-core/dist/store/index.d.ts +9 -0
  82. package/node_modules/plexus-agent-config-core/dist/store/index.d.ts.map +1 -0
  83. package/node_modules/plexus-agent-config-core/dist/store/index.js +9 -0
  84. package/node_modules/plexus-agent-config-core/dist/store/index.js.map +1 -0
  85. package/node_modules/plexus-agent-config-core/dist/store/mcp.d.ts +5 -0
  86. package/node_modules/plexus-agent-config-core/dist/store/mcp.d.ts.map +1 -0
  87. package/node_modules/plexus-agent-config-core/dist/store/mcp.js +30 -0
  88. package/node_modules/plexus-agent-config-core/dist/store/mcp.js.map +1 -0
  89. package/node_modules/plexus-agent-config-core/dist/store/merge.d.ts +15 -0
  90. package/node_modules/plexus-agent-config-core/dist/store/merge.d.ts.map +1 -0
  91. package/node_modules/plexus-agent-config-core/dist/store/merge.js +28 -0
  92. package/node_modules/plexus-agent-config-core/dist/store/merge.js.map +1 -0
  93. package/node_modules/plexus-agent-config-core/dist/store/paths.d.ts +22 -0
  94. package/node_modules/plexus-agent-config-core/dist/store/paths.d.ts.map +1 -0
  95. package/node_modules/plexus-agent-config-core/dist/store/paths.js +107 -0
  96. package/node_modules/plexus-agent-config-core/dist/store/paths.js.map +1 -0
  97. package/node_modules/plexus-agent-config-core/dist/store/rules.d.ts +12 -0
  98. package/node_modules/plexus-agent-config-core/dist/store/rules.d.ts.map +1 -0
  99. package/node_modules/plexus-agent-config-core/dist/store/rules.js +32 -0
  100. package/node_modules/plexus-agent-config-core/dist/store/rules.js.map +1 -0
  101. package/node_modules/plexus-agent-config-core/dist/store/scaffolding.d.ts +11 -0
  102. package/node_modules/plexus-agent-config-core/dist/store/scaffolding.d.ts.map +1 -0
  103. package/node_modules/plexus-agent-config-core/dist/store/scaffolding.js +32 -0
  104. package/node_modules/plexus-agent-config-core/dist/store/scaffolding.js.map +1 -0
  105. package/node_modules/plexus-agent-config-core/dist/store/skills.d.ts +13 -0
  106. package/node_modules/plexus-agent-config-core/dist/store/skills.d.ts.map +1 -0
  107. package/node_modules/plexus-agent-config-core/dist/store/skills.js +84 -0
  108. package/node_modules/plexus-agent-config-core/dist/store/skills.js.map +1 -0
  109. package/node_modules/plexus-agent-config-core/dist/sync/index.d.ts +89 -0
  110. package/node_modules/plexus-agent-config-core/dist/sync/index.d.ts.map +1 -0
  111. package/node_modules/plexus-agent-config-core/dist/sync/index.js +423 -0
  112. package/node_modules/plexus-agent-config-core/dist/sync/index.js.map +1 -0
  113. package/node_modules/plexus-agent-config-core/dist/team/git.d.ts +23 -0
  114. package/node_modules/plexus-agent-config-core/dist/team/git.d.ts.map +1 -0
  115. package/node_modules/plexus-agent-config-core/dist/team/git.js +132 -0
  116. package/node_modules/plexus-agent-config-core/dist/team/git.js.map +1 -0
  117. package/node_modules/plexus-agent-config-core/dist/team/index.d.ts +2 -0
  118. package/node_modules/plexus-agent-config-core/dist/team/index.d.ts.map +1 -0
  119. package/node_modules/plexus-agent-config-core/dist/team/index.js +2 -0
  120. package/node_modules/plexus-agent-config-core/dist/team/index.js.map +1 -0
  121. package/node_modules/plexus-agent-config-core/dist/types.d.ts +142 -0
  122. package/node_modules/plexus-agent-config-core/dist/types.d.ts.map +1 -0
  123. package/node_modules/plexus-agent-config-core/dist/types.js +13 -0
  124. package/node_modules/plexus-agent-config-core/dist/types.js.map +1 -0
  125. package/node_modules/plexus-agent-config-core/package.json +29 -0
  126. package/node_modules/plexus-agent-config-web/.next/BUILD_ID +1 -0
  127. package/node_modules/plexus-agent-config-web/.next/app-path-routes-manifest.json +39 -0
  128. package/node_modules/plexus-agent-config-web/.next/build-manifest.json +20 -0
  129. package/node_modules/plexus-agent-config-web/.next/export-marker.json +6 -0
  130. package/node_modules/plexus-agent-config-web/.next/images-manifest.json +68 -0
  131. package/node_modules/plexus-agent-config-web/.next/next-minimal-server.js.nft.json +1 -0
  132. package/node_modules/plexus-agent-config-web/.next/next-server.js.nft.json +1 -0
  133. package/node_modules/plexus-agent-config-web/.next/package.json +1 -0
  134. package/node_modules/plexus-agent-config-web/.next/prerender-manifest.json +36 -0
  135. package/node_modules/plexus-agent-config-web/.next/react-loadable-manifest.json +1 -0
  136. package/node_modules/plexus-agent-config-web/.next/required-server-files.js +337 -0
  137. package/node_modules/plexus-agent-config-web/.next/required-server-files.json +337 -0
  138. package/node_modules/plexus-agent-config-web/.next/routes-manifest.json +286 -0
  139. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error/page.js +32 -0
  140. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error/page.js.nft.json +1 -0
  141. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  142. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.html +1 -0
  143. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.meta +16 -0
  144. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.rsc +14 -0
  145. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  146. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  147. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  148. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  149. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  150. package/node_modules/plexus-agent-config-web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  151. package/node_modules/plexus-agent-config-web/.next/server/app/_not-found/page.js +2 -0
  152. package/node_modules/plexus-agent-config-web/.next/server/app/_not-found/page.js.nft.json +1 -0
  153. package/node_modules/plexus-agent-config-web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  154. package/node_modules/plexus-agent-config-web/.next/server/app/about/page.js +2 -0
  155. package/node_modules/plexus-agent-config-web/.next/server/app/about/page.js.nft.json +1 -0
  156. package/node_modules/plexus-agent-config-web/.next/server/app/about/page_client-reference-manifest.js +1 -0
  157. package/node_modules/plexus-agent-config-web/.next/server/app/agents/[id]/page.js +2 -0
  158. package/node_modules/plexus-agent-config-web/.next/server/app/agents/[id]/page.js.nft.json +1 -0
  159. package/node_modules/plexus-agent-config-web/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -0
  160. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent/[id]/file/route.js +1 -0
  161. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent/[id]/file/route.js.nft.json +1 -0
  162. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent/[id]/file/route_client-reference-manifest.js +1 -0
  163. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent/[id]/route.js +1 -0
  164. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent/[id]/route.js.nft.json +1 -0
  165. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -0
  166. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent-catalog/route.js +1 -0
  167. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent-catalog/route.js.nft.json +1 -0
  168. package/node_modules/plexus-agent-config-web/.next/server/app/api/agent-catalog/route_client-reference-manifest.js +1 -0
  169. package/node_modules/plexus-agent-config-web/.next/server/app/api/agents/route.js +1 -0
  170. package/node_modules/plexus-agent-config-web/.next/server/app/api/agents/route.js.nft.json +1 -0
  171. package/node_modules/plexus-agent-config-web/.next/server/app/api/agents/route_client-reference-manifest.js +1 -0
  172. package/node_modules/plexus-agent-config-web/.next/server/app/api/backups/[id]/restore/route.js +1 -0
  173. package/node_modules/plexus-agent-config-web/.next/server/app/api/backups/[id]/restore/route.js.nft.json +1 -0
  174. package/node_modules/plexus-agent-config-web/.next/server/app/api/backups/[id]/restore/route_client-reference-manifest.js +1 -0
  175. package/node_modules/plexus-agent-config-web/.next/server/app/api/backups/route.js +1 -0
  176. package/node_modules/plexus-agent-config-web/.next/server/app/api/backups/route.js.nft.json +1 -0
  177. package/node_modules/plexus-agent-config-web/.next/server/app/api/backups/route_client-reference-manifest.js +1 -0
  178. package/node_modules/plexus-agent-config-web/.next/server/app/api/config/route.js +1 -0
  179. package/node_modules/plexus-agent-config-web/.next/server/app/api/config/route.js.nft.json +1 -0
  180. package/node_modules/plexus-agent-config-web/.next/server/app/api/config/route_client-reference-manifest.js +1 -0
  181. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/[id]/file/route.js +1 -0
  182. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/[id]/file/route.js.nft.json +1 -0
  183. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/[id]/file/route_client-reference-manifest.js +1 -0
  184. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/[id]/route.js +1 -0
  185. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/[id]/route.js.nft.json +1 -0
  186. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/[id]/route_client-reference-manifest.js +1 -0
  187. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/route.js +1 -0
  188. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/route.js.nft.json +1 -0
  189. package/node_modules/plexus-agent-config-web/.next/server/app/api/custom-agents/route_client-reference-manifest.js +1 -0
  190. package/node_modules/plexus-agent-config-web/.next/server/app/api/debug/route.js +1 -0
  191. package/node_modules/plexus-agent-config-web/.next/server/app/api/debug/route.js.nft.json +1 -0
  192. package/node_modules/plexus-agent-config-web/.next/server/app/api/debug/route_client-reference-manifest.js +1 -0
  193. package/node_modules/plexus-agent-config-web/.next/server/app/api/import/route.js +1 -0
  194. package/node_modules/plexus-agent-config-web/.next/server/app/api/import/route.js.nft.json +1 -0
  195. package/node_modules/plexus-agent-config-web/.next/server/app/api/import/route_client-reference-manifest.js +1 -0
  196. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/[id]/toggle/route.js +1 -0
  197. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/[id]/toggle/route.js.nft.json +1 -0
  198. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/[id]/toggle/route_client-reference-manifest.js +1 -0
  199. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/effective/route.js +1 -0
  200. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/effective/route.js.nft.json +1 -0
  201. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/effective/route_client-reference-manifest.js +1 -0
  202. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/route.js +1 -0
  203. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/route.js.nft.json +1 -0
  204. package/node_modules/plexus-agent-config-web/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -0
  205. package/node_modules/plexus-agent-config-web/.next/server/app/api/rules/route.js +1 -0
  206. package/node_modules/plexus-agent-config-web/.next/server/app/api/rules/route.js.nft.json +1 -0
  207. package/node_modules/plexus-agent-config-web/.next/server/app/api/rules/route_client-reference-manifest.js +1 -0
  208. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/[id]/route.js +1 -0
  209. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/[id]/route.js.nft.json +1 -0
  210. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -0
  211. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/[id]/toggle/route.js +1 -0
  212. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/[id]/toggle/route.js.nft.json +1 -0
  213. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/[id]/toggle/route_client-reference-manifest.js +1 -0
  214. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/effective/route.js +1 -0
  215. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/effective/route.js.nft.json +1 -0
  216. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/effective/route_client-reference-manifest.js +1 -0
  217. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/route.js +1 -0
  218. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/route.js.nft.json +1 -0
  219. package/node_modules/plexus-agent-config-web/.next/server/app/api/skills/route_client-reference-manifest.js +1 -0
  220. package/node_modules/plexus-agent-config-web/.next/server/app/api/spread/route.js +1 -0
  221. package/node_modules/plexus-agent-config-web/.next/server/app/api/spread/route.js.nft.json +1 -0
  222. package/node_modules/plexus-agent-config-web/.next/server/app/api/spread/route_client-reference-manifest.js +1 -0
  223. package/node_modules/plexus-agent-config-web/.next/server/app/api/sync/route.js +1 -0
  224. package/node_modules/plexus-agent-config-web/.next/server/app/api/sync/route.js.nft.json +1 -0
  225. package/node_modules/plexus-agent-config-web/.next/server/app/api/sync/route_client-reference-manifest.js +1 -0
  226. package/node_modules/plexus-agent-config-web/.next/server/app/api/team/route.js +1 -0
  227. package/node_modules/plexus-agent-config-web/.next/server/app/api/team/route.js.nft.json +1 -0
  228. package/node_modules/plexus-agent-config-web/.next/server/app/api/team/route_client-reference-manifest.js +1 -0
  229. package/node_modules/plexus-agent-config-web/.next/server/app/backups/page.js +4 -0
  230. package/node_modules/plexus-agent-config-web/.next/server/app/backups/page.js.nft.json +1 -0
  231. package/node_modules/plexus-agent-config-web/.next/server/app/backups/page_client-reference-manifest.js +1 -0
  232. package/node_modules/plexus-agent-config-web/.next/server/app/debug/page.js +2 -0
  233. package/node_modules/plexus-agent-config-web/.next/server/app/debug/page.js.nft.json +1 -0
  234. package/node_modules/plexus-agent-config-web/.next/server/app/debug/page_client-reference-manifest.js +1 -0
  235. package/node_modules/plexus-agent-config-web/.next/server/app/mcp/page.js +2 -0
  236. package/node_modules/plexus-agent-config-web/.next/server/app/mcp/page.js.nft.json +1 -0
  237. package/node_modules/plexus-agent-config-web/.next/server/app/mcp/page_client-reference-manifest.js +1 -0
  238. package/node_modules/plexus-agent-config-web/.next/server/app/mirror/page.js +2 -0
  239. package/node_modules/plexus-agent-config-web/.next/server/app/mirror/page.js.nft.json +1 -0
  240. package/node_modules/plexus-agent-config-web/.next/server/app/mirror/page_client-reference-manifest.js +1 -0
  241. package/node_modules/plexus-agent-config-web/.next/server/app/page.js +2 -0
  242. package/node_modules/plexus-agent-config-web/.next/server/app/page.js.nft.json +1 -0
  243. package/node_modules/plexus-agent-config-web/.next/server/app/page_client-reference-manifest.js +1 -0
  244. package/node_modules/plexus-agent-config-web/.next/server/app/rules/page.js +10 -0
  245. package/node_modules/plexus-agent-config-web/.next/server/app/rules/page.js.nft.json +1 -0
  246. package/node_modules/plexus-agent-config-web/.next/server/app/rules/page_client-reference-manifest.js +1 -0
  247. package/node_modules/plexus-agent-config-web/.next/server/app/settings/page.js +2 -0
  248. package/node_modules/plexus-agent-config-web/.next/server/app/settings/page.js.nft.json +1 -0
  249. package/node_modules/plexus-agent-config-web/.next/server/app/settings/page_client-reference-manifest.js +1 -0
  250. package/node_modules/plexus-agent-config-web/.next/server/app/skills/page.js +2 -0
  251. package/node_modules/plexus-agent-config-web/.next/server/app/skills/page.js.nft.json +1 -0
  252. package/node_modules/plexus-agent-config-web/.next/server/app/skills/page_client-reference-manifest.js +1 -0
  253. package/node_modules/plexus-agent-config-web/.next/server/app/spread/page.js +2 -0
  254. package/node_modules/plexus-agent-config-web/.next/server/app/spread/page.js.nft.json +1 -0
  255. package/node_modules/plexus-agent-config-web/.next/server/app/spread/page_client-reference-manifest.js +1 -0
  256. package/node_modules/plexus-agent-config-web/.next/server/app/team/page.js +2 -0
  257. package/node_modules/plexus-agent-config-web/.next/server/app/team/page.js.nft.json +1 -0
  258. package/node_modules/plexus-agent-config-web/.next/server/app/team/page_client-reference-manifest.js +1 -0
  259. package/node_modules/plexus-agent-config-web/.next/server/app-paths-manifest.json +39 -0
  260. package/node_modules/plexus-agent-config-web/.next/server/chunks/103.js +18 -0
  261. package/node_modules/plexus-agent-config-web/.next/server/chunks/174.js +1 -0
  262. package/node_modules/plexus-agent-config-web/.next/server/chunks/380.js +1 -0
  263. package/node_modules/plexus-agent-config-web/.next/server/chunks/397.js +26 -0
  264. package/node_modules/plexus-agent-config-web/.next/server/chunks/479.js +45 -0
  265. package/node_modules/plexus-agent-config-web/.next/server/chunks/620.js +1 -0
  266. package/node_modules/plexus-agent-config-web/.next/server/chunks/750.js +1 -0
  267. package/node_modules/plexus-agent-config-web/.next/server/chunks/921.js +5 -0
  268. package/node_modules/plexus-agent-config-web/.next/server/functions-config-manifest.json +4 -0
  269. package/node_modules/plexus-agent-config-web/.next/server/interception-route-rewrite-manifest.js +1 -0
  270. package/node_modules/plexus-agent-config-web/.next/server/middleware-build-manifest.js +1 -0
  271. package/node_modules/plexus-agent-config-web/.next/server/middleware-manifest.json +6 -0
  272. package/node_modules/plexus-agent-config-web/.next/server/middleware-react-loadable-manifest.js +1 -0
  273. package/node_modules/plexus-agent-config-web/.next/server/next-font-manifest.js +1 -0
  274. package/node_modules/plexus-agent-config-web/.next/server/next-font-manifest.json +1 -0
  275. package/node_modules/plexus-agent-config-web/.next/server/pages/500.html +1 -0
  276. package/node_modules/plexus-agent-config-web/.next/server/pages-manifest.json +3 -0
  277. package/node_modules/plexus-agent-config-web/.next/server/prefetch-hints.json +1 -0
  278. package/node_modules/plexus-agent-config-web/.next/server/server-reference-manifest.js +1 -0
  279. package/node_modules/plexus-agent-config-web/.next/server/server-reference-manifest.json +1 -0
  280. package/node_modules/plexus-agent-config-web/.next/server/webpack-runtime.js +1 -0
  281. package/node_modules/plexus-agent-config-web/.next/static/chunks/1968-9d19293a29f03646.js +32 -0
  282. package/node_modules/plexus-agent-config-web/.next/static/chunks/3051-5eb2f5784474c658.js +1 -0
  283. package/node_modules/plexus-agent-config-web/.next/static/chunks/3090-3702701c503793f0.js +1 -0
  284. package/node_modules/plexus-agent-config-web/.next/static/chunks/4399-7cc367307a2c52a6.js +1 -0
  285. package/node_modules/plexus-agent-config-web/.next/static/chunks/5587-933f3258279c6072.js +1 -0
  286. package/node_modules/plexus-agent-config-web/.next/static/chunks/626-7ea78ce012c8d471.js +1 -0
  287. package/node_modules/plexus-agent-config-web/.next/static/chunks/7814-1bc9d30b9724b70c.js +1 -0
  288. package/node_modules/plexus-agent-config-web/.next/static/chunks/87c73c54-64138e17754e338c.js +1 -0
  289. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/_global-error/page-fe6298e28540d3d8.js +1 -0
  290. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/_not-found/page-303a3bb713044693.js +1 -0
  291. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/about/page-64a1ee41b87ea86c.js +1 -0
  292. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/agents/[id]/page-c3c89d8ae72c75c2.js +1 -0
  293. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/agent/[id]/file/route-fe6298e28540d3d8.js +1 -0
  294. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/agent/[id]/route-fe6298e28540d3d8.js +1 -0
  295. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/agent-catalog/route-fe6298e28540d3d8.js +1 -0
  296. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/agents/route-fe6298e28540d3d8.js +1 -0
  297. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/backups/[id]/restore/route-fe6298e28540d3d8.js +1 -0
  298. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/backups/route-fe6298e28540d3d8.js +1 -0
  299. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/config/route-fe6298e28540d3d8.js +1 -0
  300. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/custom-agents/[id]/file/route-fe6298e28540d3d8.js +1 -0
  301. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/custom-agents/[id]/route-fe6298e28540d3d8.js +1 -0
  302. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/custom-agents/route-fe6298e28540d3d8.js +1 -0
  303. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/debug/route-fe6298e28540d3d8.js +1 -0
  304. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/import/route-fe6298e28540d3d8.js +1 -0
  305. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/mcp/[id]/toggle/route-fe6298e28540d3d8.js +1 -0
  306. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/mcp/effective/route-fe6298e28540d3d8.js +1 -0
  307. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/mcp/route-fe6298e28540d3d8.js +1 -0
  308. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/rules/route-fe6298e28540d3d8.js +1 -0
  309. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/skills/[id]/route-fe6298e28540d3d8.js +1 -0
  310. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/skills/[id]/toggle/route-fe6298e28540d3d8.js +1 -0
  311. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/skills/effective/route-fe6298e28540d3d8.js +1 -0
  312. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/skills/route-fe6298e28540d3d8.js +1 -0
  313. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/spread/route-fe6298e28540d3d8.js +1 -0
  314. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/sync/route-fe6298e28540d3d8.js +1 -0
  315. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/api/team/route-fe6298e28540d3d8.js +1 -0
  316. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/backups/page-6842a663db4fab47.js +3 -0
  317. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/debug/page-19e534df1d13eb98.js +1 -0
  318. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/layout-798b3b697994c5bf.js +1 -0
  319. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/mcp/page-d0d518965db961f1.js +1 -0
  320. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/mirror/page-e88f348e1a12487a.js +1 -0
  321. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/page-039dbbfad47ff659.js +1 -0
  322. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/rules/page-5bb663fc0ee9960b.js +9 -0
  323. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/settings/page-8164e1d1a8a08038.js +1 -0
  324. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/skills/page-6067058898aa6e10.js +1 -0
  325. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/spread/page-fe6298e28540d3d8.js +1 -0
  326. package/node_modules/plexus-agent-config-web/.next/static/chunks/app/team/page-edd7f54640e60e94.js +1 -0
  327. package/node_modules/plexus-agent-config-web/.next/static/chunks/framework-2c03ddc44b9f482b.js +1 -0
  328. package/node_modules/plexus-agent-config-web/.next/static/chunks/main-488dba80110e3bfb.js +5 -0
  329. package/node_modules/plexus-agent-config-web/.next/static/chunks/main-app-4c4bad3c22a66283.js +1 -0
  330. package/node_modules/plexus-agent-config-web/.next/static/chunks/next/dist/client/components/builtin/app-error-fe6298e28540d3d8.js +1 -0
  331. package/node_modules/plexus-agent-config-web/.next/static/chunks/next/dist/client/components/builtin/forbidden-fe6298e28540d3d8.js +1 -0
  332. package/node_modules/plexus-agent-config-web/.next/static/chunks/next/dist/client/components/builtin/global-error-821a044f296e83b5.js +1 -0
  333. package/node_modules/plexus-agent-config-web/.next/static/chunks/next/dist/client/components/builtin/not-found-fe6298e28540d3d8.js +1 -0
  334. package/node_modules/plexus-agent-config-web/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fe6298e28540d3d8.js +1 -0
  335. package/node_modules/plexus-agent-config-web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  336. package/node_modules/plexus-agent-config-web/.next/static/chunks/webpack-dd4b9bd51624284c.js +1 -0
  337. package/node_modules/plexus-agent-config-web/.next/static/css/eba3657411e6e6cd.css +5 -0
  338. package/node_modules/plexus-agent-config-web/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  339. package/node_modules/plexus-agent-config-web/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
  340. package/node_modules/plexus-agent-config-web/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  341. package/node_modules/plexus-agent-config-web/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  342. package/node_modules/plexus-agent-config-web/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  343. package/node_modules/plexus-agent-config-web/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  344. package/node_modules/plexus-agent-config-web/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  345. package/node_modules/plexus-agent-config-web/.next/static/mvb1RnSdmeAxbYF-SjSfa/_buildManifest.js +1 -0
  346. package/node_modules/plexus-agent-config-web/.next/static/mvb1RnSdmeAxbYF-SjSfa/_ssgManifest.js +1 -0
  347. package/node_modules/plexus-agent-config-web/next.config.mjs +17 -0
  348. package/node_modules/plexus-agent-config-web/package.json +40 -0
  349. package/node_modules/plexus-agent-config-web/public/architecture/config-sharing-map.html +887 -0
  350. package/node_modules/plexus-agent-config-web/public/favicon.svg +5 -0
  351. package/package.json +64 -0
@@ -0,0 +1,169 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { pathExists } from "../store/fs-utils.js";
4
+ import { AGENT_DISPLAY_NAMES, AGENT_PATHS, AGENT_ROOTS } from "../store/paths.js";
5
+ import { isAgentInstalled } from "./detect.js";
6
+ async function statFile(p) {
7
+ const status = { path: p, exists: false, isSymlink: false };
8
+ try {
9
+ const lst = await fs.lstat(p);
10
+ status.exists = true;
11
+ status.isSymlink = lst.isSymbolicLink();
12
+ if (status.isSymlink) {
13
+ try {
14
+ const t = await fs.readlink(p);
15
+ status.linkTarget = path.isAbsolute(t) ? t : path.resolve(path.dirname(p), t);
16
+ }
17
+ catch {
18
+ // ignore
19
+ }
20
+ }
21
+ try {
22
+ const s = await fs.stat(p); // follows symlink
23
+ status.size = s.size;
24
+ status.mtime = s.mtime.toISOString();
25
+ }
26
+ catch {
27
+ // dangling symlink
28
+ }
29
+ }
30
+ catch {
31
+ // not present
32
+ }
33
+ return status;
34
+ }
35
+ async function listSkills(skillsDir) {
36
+ if (!(await pathExists(skillsDir)))
37
+ return [];
38
+ try {
39
+ const entries = await fs.readdir(skillsDir, { withFileTypes: true });
40
+ const out = [];
41
+ for (const entry of entries) {
42
+ // Skip OS noise and Plexus's own internal backup folders.
43
+ if (entry.name.startsWith("."))
44
+ continue;
45
+ if (entry.name.includes(".plexus-backup-"))
46
+ continue;
47
+ const full = path.join(skillsDir, entry.name);
48
+ let isSymlink = false;
49
+ let linkTarget;
50
+ try {
51
+ const lst = await fs.lstat(full);
52
+ isSymlink = lst.isSymbolicLink();
53
+ if (isSymlink) {
54
+ const t = await fs.readlink(full);
55
+ linkTarget = path.isAbsolute(t) ? t : path.resolve(path.dirname(full), t);
56
+ }
57
+ }
58
+ catch {
59
+ continue;
60
+ }
61
+ // Treat as skill if dir or symlink-to-dir.
62
+ const skillMd = path.join(full, "SKILL.md");
63
+ const hasSkillMd = await pathExists(skillMd);
64
+ out.push({
65
+ id: entry.name,
66
+ path: full,
67
+ isSymlink,
68
+ linkTarget,
69
+ hasSkillMd,
70
+ });
71
+ }
72
+ return out.sort((a, b) => a.id.localeCompare(b.id));
73
+ }
74
+ catch {
75
+ return [];
76
+ }
77
+ }
78
+ export function instructionsForAgent(agentId) {
79
+ const root = AGENT_ROOTS[agentId];
80
+ switch (agentId) {
81
+ case "claude-code":
82
+ return [
83
+ {
84
+ label: "CLAUDE.md (user-level memory)",
85
+ filename: "CLAUDE.md",
86
+ abs: path.join(root, "CLAUDE.md"),
87
+ },
88
+ ];
89
+ case "cursor":
90
+ return [
91
+ {
92
+ label: "AGENTS.md (user-level)",
93
+ filename: "AGENTS.md",
94
+ abs: path.join(root, "AGENTS.md"),
95
+ },
96
+ ];
97
+ case "codex":
98
+ return [
99
+ {
100
+ label: "AGENTS.md (user-level)",
101
+ filename: "AGENTS.md",
102
+ abs: path.join(root, "AGENTS.md"),
103
+ },
104
+ ];
105
+ case "gemini-cli":
106
+ return [
107
+ {
108
+ label: "GEMINI.md (user-level)",
109
+ filename: "GEMINI.md",
110
+ abs: path.join(root, "GEMINI.md"),
111
+ },
112
+ ];
113
+ case "qwen-code":
114
+ return [
115
+ {
116
+ label: "QWEN.md (user-level)",
117
+ filename: "QWEN.md",
118
+ abs: path.join(root, "QWEN.md"),
119
+ },
120
+ ];
121
+ case "factory-droid":
122
+ return [
123
+ {
124
+ label: "AGENTS.md (user-level)",
125
+ filename: "AGENTS.md",
126
+ abs: path.join(root, "AGENTS.md"),
127
+ },
128
+ ];
129
+ }
130
+ }
131
+ export async function inspectAgent(agentId) {
132
+ const caps = AGENT_PATHS[agentId];
133
+ const root = AGENT_ROOTS[agentId];
134
+ const installed = isAgentInstalled(agentId);
135
+ const [mcpFile, skillsDir] = await Promise.all([
136
+ statFile(caps.mcpPath),
137
+ statFile(caps.skillsDir),
138
+ ]);
139
+ const skills = caps.skills ? await listSkills(caps.skillsDir) : [];
140
+ const instructionFiles = [];
141
+ for (const ins of instructionsForAgent(agentId)) {
142
+ instructionFiles.push({
143
+ label: ins.label,
144
+ filename: ins.filename,
145
+ status: await statFile(ins.abs),
146
+ });
147
+ }
148
+ return {
149
+ id: agentId,
150
+ displayName: AGENT_DISPLAY_NAMES[agentId],
151
+ rootDir: root,
152
+ installed,
153
+ mcpFile,
154
+ mcpFileMode: caps.mcpFileMode ?? "shared",
155
+ skillsDir,
156
+ skills,
157
+ instructionFiles,
158
+ };
159
+ }
160
+ /** Read a file (small text; the UI only enables editing for instruction files & SKILL.md). */
161
+ export async function readTextFile(absPath) {
162
+ return fs.readFile(absPath, "utf8");
163
+ }
164
+ /** Write a file, creating parent dir as needed. (Caller is responsible for backup if it cares.) */
165
+ export async function writeTextFile(absPath, content) {
166
+ await fs.mkdir(path.dirname(absPath), { recursive: true });
167
+ await fs.writeFile(absPath, content, "utf8");
168
+ }
169
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/agents/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { AgentId } from "../types.js";
2
+ /** Where collision backups (from placeLinkOrCopy) end up. */
3
+ export declare const COLLISION_BACKUP_ROOT: string;
4
+ /** Where one-time-quarantined `.plexus-backup-*` residue ends up. */
5
+ export declare const LEGACY_RESIDUE_ROOT: string;
6
+ /**
7
+ * Plexus snapshots every agent's native MCP config file before any sync write.
8
+ *
9
+ * Snapshots live under `~/.config/plexus/backups/<ISO-timestamp>/` so a user
10
+ * can always restore the previous state with `cp` if Plexus made a wrong
11
+ * decision. We deliberately do NOT back up skill directories: skills are
12
+ * already symlinks to the Plexus store, and doubling the disk usage on every
13
+ * toggle would be expensive and rarely useful.
14
+ */
15
+ export interface BackupEntry {
16
+ agent: AgentId;
17
+ /** Path of the snapshotted file inside the backup directory. */
18
+ backupPath: string;
19
+ /** Original path of the file we copied. */
20
+ originalPath: string;
21
+ /** Was the original a symlink? Lets restore reproduce the link. */
22
+ wasSymlink: boolean;
23
+ /** If symlink, the link target at snapshot time. */
24
+ linkTarget?: string;
25
+ }
26
+ export interface BackupSnapshot {
27
+ /** Backup directory (one per snapshot). */
28
+ dir: string;
29
+ /** ISO timestamp identifier. */
30
+ id: string;
31
+ entries: BackupEntry[];
32
+ }
33
+ export declare function snapshotAgentConfigs(opts?: {
34
+ reason?: string;
35
+ }): Promise<BackupSnapshot>;
36
+ export declare function listBackups(): Promise<BackupSnapshot[]>;
37
+ /**
38
+ * Snapshot a single file (e.g. CLAUDE.md) before edit. Stored alongside the
39
+ * regular sync snapshots so the user has one consistent recovery surface.
40
+ */
41
+ export declare function snapshotSingleFile(filePath: string, reason?: string): Promise<string | null>;
42
+ /**
43
+ * Move a colliding file/dir into the central backups area instead of leaving
44
+ * `<name>.plexus-backup-<ts>` debris in the agent's own directory.
45
+ *
46
+ * Called by adapter `placeLinkOrCopy` whenever it needs to evict a real
47
+ * file/dir before placing a symlink.
48
+ */
49
+ export declare function quarantineCollision(opts: {
50
+ agent: AgentId | "unknown";
51
+ sourcePath: string;
52
+ }): Promise<string | null>;
53
+ /**
54
+ * One-shot cleanup: scan every agent's skills dir for `.plexus-backup-*`
55
+ * residue (left by old versions of placeLinkOrCopy) and quarantine them
56
+ * into the central backups area. Idempotent.
57
+ */
58
+ export declare function cleanupLegacyResidue(): Promise<{
59
+ moved: Array<{
60
+ agent: AgentId;
61
+ from: string;
62
+ to: string;
63
+ }>;
64
+ }>;
65
+ /** Restore one snapshot by copying every backed-up file back over the original. */
66
+ export declare function restoreSnapshot(id: string): Promise<{
67
+ restored: number;
68
+ errors: string[];
69
+ }>;
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backup/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,QAAiD,CAAC;AACpF,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,QAAqD,CAAC;AAEtF;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AA2BD,wBAAsB,oBAAoB,CAAC,IAAI,CAAC,EAAE;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,cAAc,CAAC,CAmD1B;AAqBD,wBAAsB,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAuB7D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BxB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBzB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IACpD,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D,CAAC,CA4BD;AAED,mFAAmF;AACnF,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAwBD"}
@@ -0,0 +1,258 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { ensureDir, pathExists } from "../store/fs-utils.js";
5
+ import { AGENT_PATHS, ALL_AGENTS, PLEXUS_PATHS } from "../store/paths.js";
6
+ /** Where collision backups (from placeLinkOrCopy) end up. */
7
+ export const COLLISION_BACKUP_ROOT = path.join(PLEXUS_PATHS.backups, "_collisions");
8
+ /** Where one-time-quarantined `.plexus-backup-*` residue ends up. */
9
+ export const LEGACY_RESIDUE_ROOT = path.join(PLEXUS_PATHS.backups, "_legacy-residue");
10
+ const KEEP = 20;
11
+ const SNAPSHOT_ID_RE = /^\d{4}-\d{2}-\d{2}T/;
12
+ async function createSnapshotDir() {
13
+ await ensureDir(PLEXUS_PATHS.backups);
14
+ const base = new Date().toISOString().replace(/[:.]/g, "-");
15
+ for (let i = 0; i < 1000; i += 1) {
16
+ const id = i === 0 ? base : `${base}-${String(i).padStart(3, "0")}`;
17
+ const dir = path.join(PLEXUS_PATHS.backups, id);
18
+ try {
19
+ await fs.mkdir(dir, { recursive: false });
20
+ return { id, dir };
21
+ }
22
+ catch (err) {
23
+ if (err.code !== "EEXIST")
24
+ throw err;
25
+ }
26
+ }
27
+ throw new Error(`Could not allocate a unique backup directory for ${base}`);
28
+ }
29
+ function backupFileName(filePath) {
30
+ const parsed = path.parse(filePath);
31
+ const hash = crypto.createHash("sha256").update(path.resolve(filePath)).digest("hex").slice(0, 8);
32
+ return `${parsed.name}.${hash}${parsed.ext || ".bak"}`;
33
+ }
34
+ export async function snapshotAgentConfigs(opts) {
35
+ const { id, dir } = await createSnapshotDir();
36
+ if (opts?.reason) {
37
+ await fs.writeFile(path.join(dir, "_reason.txt"), opts.reason, "utf8").catch(() => { });
38
+ }
39
+ const entries = [];
40
+ for (const agentId of ALL_AGENTS) {
41
+ const caps = AGENT_PATHS[agentId];
42
+ if (!caps.mcp)
43
+ continue;
44
+ if (!(await pathExists(caps.mcpPath)))
45
+ continue;
46
+ let wasSymlink = false;
47
+ let linkTarget;
48
+ try {
49
+ const lst = await fs.lstat(caps.mcpPath);
50
+ wasSymlink = lst.isSymbolicLink();
51
+ if (wasSymlink)
52
+ linkTarget = await fs.readlink(caps.mcpPath);
53
+ }
54
+ catch {
55
+ continue;
56
+ }
57
+ const ext = path.extname(caps.mcpPath) || ".bak";
58
+ const fname = `${agentId}-mcp${ext}`;
59
+ const backupPath = path.join(dir, fname);
60
+ try {
61
+ // Always copy the resolved file content (so the backup is self-contained).
62
+ const content = await fs.readFile(caps.mcpPath);
63
+ await fs.writeFile(backupPath, content);
64
+ entries.push({
65
+ agent: agentId,
66
+ backupPath,
67
+ originalPath: caps.mcpPath,
68
+ wasSymlink,
69
+ linkTarget,
70
+ });
71
+ }
72
+ catch {
73
+ // best-effort; skip agents we can't read
74
+ }
75
+ }
76
+ // Write a manifest so a human can interpret a backup dir without grepping.
77
+ await fs.writeFile(path.join(dir, "manifest.json"), JSON.stringify({ id, createdAt: new Date().toISOString(), entries }, null, 2), "utf8");
78
+ await pruneOldBackups(KEEP);
79
+ return { dir, id, entries };
80
+ }
81
+ async function pruneOldBackups(keep) {
82
+ try {
83
+ const ents = await fs.readdir(PLEXUS_PATHS.backups, { withFileTypes: true });
84
+ const dirs = ents
85
+ .filter((e) => e.isDirectory() && SNAPSHOT_ID_RE.test(e.name))
86
+ .map((e) => e.name)
87
+ .sort()
88
+ .reverse();
89
+ for (const old of dirs.slice(keep)) {
90
+ await fs.rm(path.join(PLEXUS_PATHS.backups, old), {
91
+ recursive: true,
92
+ force: true,
93
+ });
94
+ }
95
+ }
96
+ catch {
97
+ // ignore — pruning is best-effort
98
+ }
99
+ }
100
+ export async function listBackups() {
101
+ try {
102
+ const ents = await fs.readdir(PLEXUS_PATHS.backups, { withFileTypes: true });
103
+ const dirs = ents
104
+ .filter((e) => e.isDirectory())
105
+ .map((e) => e.name)
106
+ .sort()
107
+ .reverse();
108
+ const out = [];
109
+ for (const d of dirs) {
110
+ const dir = path.join(PLEXUS_PATHS.backups, d);
111
+ try {
112
+ const raw = await fs.readFile(path.join(dir, "manifest.json"), "utf8");
113
+ const m = JSON.parse(raw);
114
+ out.push({ dir, id: m.id, entries: m.entries });
115
+ }
116
+ catch {
117
+ out.push({ dir, id: d, entries: [] });
118
+ }
119
+ }
120
+ return out;
121
+ }
122
+ catch {
123
+ return [];
124
+ }
125
+ }
126
+ /**
127
+ * Snapshot a single file (e.g. CLAUDE.md) before edit. Stored alongside the
128
+ * regular sync snapshots so the user has one consistent recovery surface.
129
+ */
130
+ export async function snapshotSingleFile(filePath, reason) {
131
+ if (!(await pathExists(filePath)))
132
+ return null;
133
+ const { id, dir } = await createSnapshotDir();
134
+ if (reason) {
135
+ await fs.writeFile(path.join(dir, "_reason.txt"), reason, "utf8").catch(() => { });
136
+ }
137
+ const fname = backupFileName(filePath);
138
+ const backupPath = path.join(dir, fname);
139
+ try {
140
+ const content = await fs.readFile(filePath);
141
+ await fs.writeFile(backupPath, content);
142
+ await fs.writeFile(path.join(dir, "manifest.json"), JSON.stringify({
143
+ id,
144
+ createdAt: new Date().toISOString(),
145
+ entries: [{ agent: null, backupPath, originalPath: filePath, wasSymlink: false }],
146
+ }, null, 2), "utf8");
147
+ await pruneOldBackups(KEEP);
148
+ return dir;
149
+ }
150
+ catch {
151
+ return null;
152
+ }
153
+ }
154
+ /**
155
+ * Move a colliding file/dir into the central backups area instead of leaving
156
+ * `<name>.plexus-backup-<ts>` debris in the agent's own directory.
157
+ *
158
+ * Called by adapter `placeLinkOrCopy` whenever it needs to evict a real
159
+ * file/dir before placing a symlink.
160
+ */
161
+ export async function quarantineCollision(opts) {
162
+ if (!(await pathExists(opts.sourcePath)))
163
+ return null;
164
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
165
+ const destDir = path.join(COLLISION_BACKUP_ROOT, ts, opts.agent);
166
+ await ensureDir(destDir);
167
+ const destPath = path.join(destDir, path.basename(opts.sourcePath));
168
+ try {
169
+ await fs.rename(opts.sourcePath, destPath);
170
+ return destPath;
171
+ }
172
+ catch {
173
+ // Cross-device or permission — fall back to copy + delete.
174
+ try {
175
+ const lst = await fs.lstat(opts.sourcePath);
176
+ if (lst.isDirectory()) {
177
+ await fs.cp(opts.sourcePath, destPath, { recursive: true });
178
+ await fs.rm(opts.sourcePath, { recursive: true, force: true });
179
+ }
180
+ else {
181
+ await fs.copyFile(opts.sourcePath, destPath);
182
+ await fs.unlink(opts.sourcePath);
183
+ }
184
+ return destPath;
185
+ }
186
+ catch {
187
+ return null;
188
+ }
189
+ }
190
+ }
191
+ /**
192
+ * One-shot cleanup: scan every agent's skills dir for `.plexus-backup-*`
193
+ * residue (left by old versions of placeLinkOrCopy) and quarantine them
194
+ * into the central backups area. Idempotent.
195
+ */
196
+ export async function cleanupLegacyResidue() {
197
+ const moved = [];
198
+ for (const agentId of ALL_AGENTS) {
199
+ const caps = AGENT_PATHS[agentId];
200
+ if (!caps.skills)
201
+ continue;
202
+ if (!(await pathExists(caps.skillsDir)))
203
+ continue;
204
+ let entries;
205
+ try {
206
+ entries = await fs.readdir(caps.skillsDir);
207
+ }
208
+ catch {
209
+ continue;
210
+ }
211
+ for (const name of entries) {
212
+ if (!name.includes(".plexus-backup-"))
213
+ continue;
214
+ const src = path.join(caps.skillsDir, name);
215
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
216
+ const destDir = path.join(LEGACY_RESIDUE_ROOT, ts, agentId);
217
+ await ensureDir(destDir);
218
+ const dest = path.join(destDir, name);
219
+ try {
220
+ await fs.rename(src, dest);
221
+ moved.push({ agent: agentId, from: src, to: dest });
222
+ }
223
+ catch {
224
+ // best effort
225
+ }
226
+ }
227
+ }
228
+ return { moved };
229
+ }
230
+ /** Restore one snapshot by copying every backed-up file back over the original. */
231
+ export async function restoreSnapshot(id) {
232
+ const snapshots = await listBackups();
233
+ const snap = snapshots.find((s) => s.id === id);
234
+ if (!snap)
235
+ return { restored: 0, errors: [`No snapshot with id ${id}`] };
236
+ const errors = [];
237
+ let restored = 0;
238
+ for (const entry of snap.entries) {
239
+ try {
240
+ // Remove existing file/symlink first to avoid writing through links.
241
+ try {
242
+ await fs.unlink(entry.originalPath);
243
+ }
244
+ catch {
245
+ // ignore
246
+ }
247
+ const content = await fs.readFile(entry.backupPath);
248
+ await ensureDir(path.dirname(entry.originalPath));
249
+ await fs.writeFile(entry.originalPath, content);
250
+ restored += 1;
251
+ }
252
+ catch (err) {
253
+ errors.push(`${entry.agent}: ${err.message}`);
254
+ }
255
+ }
256
+ return { restored, errors };
257
+ }
258
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backup/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { AgentId } from "../types.js";
2
+ /**
3
+ * "Debug snapshot" — a one-shot dump of every path Plexus cares about.
4
+ *
5
+ * Designed to be copy/pasted into a chat with a maintainer when something
6
+ * goes wrong (sync didn't take effect, symlink looks weird, file size is 0,
7
+ * etc.). It deliberately avoids reading file *contents* — only metadata —
8
+ * so secrets in `~/.claude.json` etc. never leak.
9
+ */
10
+ export interface PathStat {
11
+ /** Absolute path. */
12
+ path: string;
13
+ /** Path with `$HOME` collapsed to `~`, for readable output. */
14
+ display: string;
15
+ exists: boolean;
16
+ /** "file" | "dir" | "symlink" | "missing" */
17
+ kind: "file" | "dir" | "symlink" | "missing";
18
+ /** If symlink: the absolute target. */
19
+ linkTarget?: string;
20
+ /** If symlink: whether the target currently exists. */
21
+ linkTargetExists?: boolean;
22
+ /** Size in bytes (resolved through symlink). */
23
+ size?: number;
24
+ /** ISO mtime (resolved through symlink). */
25
+ mtime?: string;
26
+ /** For directories: number of entries (skipping dotfiles & .plexus-backup-*). */
27
+ entryCount?: number;
28
+ }
29
+ export interface DirectoryListing {
30
+ dir: PathStat;
31
+ entries: PathStat[];
32
+ }
33
+ export interface AgentDebugBlock {
34
+ id: AgentId;
35
+ displayName: string;
36
+ installed: boolean;
37
+ mcpFileMode: "exclusive" | "shared";
38
+ root: PathStat;
39
+ mcpFile: PathStat;
40
+ instructionFile: PathStat | null;
41
+ skillsDir: PathStat;
42
+ skillEntries: PathStat[];
43
+ }
44
+ export interface PlexusStoreBlock {
45
+ root: PathStat;
46
+ config: PathStat;
47
+ team: PathStat;
48
+ personal: PathStat;
49
+ cacheMcp: PathStat;
50
+ backups: PathStat;
51
+ teamMcpServers: PathStat;
52
+ personalMcpServers: PathStat;
53
+ teamSkillEntries: PathStat[];
54
+ personalSkillEntries: PathStat[];
55
+ cacheMcpEntries: PathStat[];
56
+ backupCount: number;
57
+ }
58
+ export interface DebugSnapshot {
59
+ generatedAt: string;
60
+ host: {
61
+ platform: string;
62
+ release: string;
63
+ node: string;
64
+ home: string;
65
+ };
66
+ plexus: PlexusStoreBlock;
67
+ agents: AgentDebugBlock[];
68
+ }
69
+ export declare function collectDebugSnapshot(): Promise<DebugSnapshot>;
70
+ export declare function formatDebugSnapshot(s: DebugSnapshot, version?: string): string;
71
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/debug/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;GAOG;AAEH,MAAM,WAAW,QAAQ;IACvB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7C,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,QAAQ,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC;IAClB,cAAc,EAAE,QAAQ,CAAC;IACzB,kBAAkB,EAAE,QAAQ,CAAC;IAC7B,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7B,oBAAoB,EAAE,QAAQ,EAAE,CAAC;IACjC,eAAe,EAAE,QAAQ,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AA8JD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAcnE;AAoFD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAe9E"}