farming-code 2.2.6

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 (453) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +287 -0
  3. package/README.zh_cn.md +329 -0
  4. package/SECURITY.md +29 -0
  5. package/THIRD_PARTY_NOTICES.md +106 -0
  6. package/backend/acp/client-services.js +312 -0
  7. package/backend/acp/patch-decisions.js +137 -0
  8. package/backend/acp/permission-security.js +108 -0
  9. package/backend/acp-runtime.js +1144 -0
  10. package/backend/acp-session-state.js +448 -0
  11. package/backend/acp-transcript.js +169 -0
  12. package/backend/agent-activity.js +186 -0
  13. package/backend/agent-env.js +250 -0
  14. package/backend/agent-json-stream.js +268 -0
  15. package/backend/agent-manager.js +4259 -0
  16. package/backend/agent-memory-report.js +583 -0
  17. package/backend/agent-order.js +162 -0
  18. package/backend/agent-provider-session.js +287 -0
  19. package/backend/agent-session-history.js +888 -0
  20. package/backend/app-server-api.js +917 -0
  21. package/backend/async-cache.js +94 -0
  22. package/backend/auth.js +178 -0
  23. package/backend/claude-settings.js +121 -0
  24. package/backend/cli-agents.js +484 -0
  25. package/backend/codex-app-server-home.js +39 -0
  26. package/backend/codex-app-server-runtime.js +901 -0
  27. package/backend/codex-context-window.js +189 -0
  28. package/backend/codex-models.js +229 -0
  29. package/backend/codex-rollout-follower.js +243 -0
  30. package/backend/codex-session-history.js +553 -0
  31. package/backend/codex-transcript-sanitizer.js +103 -0
  32. package/backend/codex-transcript.js +2341 -0
  33. package/backend/command-runner-child.js +67 -0
  34. package/backend/config-manager.js +815 -0
  35. package/backend/control-api.js +151 -0
  36. package/backend/data/chinese-poetic-words.json +8223 -0
  37. package/backend/data/poetic-word-sources/china.json +49209 -0
  38. package/backend/data/poetic-word-sources/india.json +9763 -0
  39. package/backend/data/poetic-word-sources/japan.json +8455 -0
  40. package/backend/executable-discovery.js +207 -0
  41. package/backend/farming-app-cli.js +790 -0
  42. package/backend/farming-cli.js +400 -0
  43. package/backend/farming-session-store.js +373 -0
  44. package/backend/haiku-token.js +772 -0
  45. package/backend/index-html.js +49 -0
  46. package/backend/input-parts.js +54 -0
  47. package/backend/input-routing.js +24 -0
  48. package/backend/json-cli-runtime.js +161 -0
  49. package/backend/local-session-engine.js +620 -0
  50. package/backend/main-agent-skills.js +292 -0
  51. package/backend/main-page-session.js +119 -0
  52. package/backend/native-pty-host-client.js +516 -0
  53. package/backend/native-pty-host-path.js +22 -0
  54. package/backend/native-pty-host.js +816 -0
  55. package/backend/native-session-engine.js +196 -0
  56. package/backend/network.js +23 -0
  57. package/backend/npm-update-helper.js +196 -0
  58. package/backend/packaged-node-pty.js +79 -0
  59. package/backend/provider-session-id.js +47 -0
  60. package/backend/qr-share-tickets.js +100 -0
  61. package/backend/review-diff-router.js +180 -0
  62. package/backend/review-diff-service.js +1270 -0
  63. package/backend/review-session-router.js +74 -0
  64. package/backend/review-session-service.js +432 -0
  65. package/backend/review-session-store.js +144 -0
  66. package/backend/review-state-router.js +116 -0
  67. package/backend/review-state-store.js +287 -0
  68. package/backend/run-history-store.js +70 -0
  69. package/backend/server.js +2446 -0
  70. package/backend/session-engine-bridge.js +110 -0
  71. package/backend/session-engine-router.js +66 -0
  72. package/backend/session-engine.js +39 -0
  73. package/backend/shell-busy-integration.js +472 -0
  74. package/backend/slash-command-discovery.js +296 -0
  75. package/backend/storage-layout.js +101 -0
  76. package/backend/system-monitor.js +77 -0
  77. package/backend/terminal-runtime-cleanup.js +80 -0
  78. package/backend/terminal-screen-state.js +240 -0
  79. package/backend/terminal-screen-worker-pool.js +165 -0
  80. package/backend/terminal-screen-worker-thread.js +161 -0
  81. package/backend/terminal-screen-worker.js +255 -0
  82. package/backend/terminal-status.js +356 -0
  83. package/backend/theme-manager.js +145 -0
  84. package/backend/update-service.js +1183 -0
  85. package/backend/usage-forecast.js +86 -0
  86. package/backend/usage-monitor.js +1357 -0
  87. package/backend/workspace-discovery.js +311 -0
  88. package/backend/workspace-file-router.js +431 -0
  89. package/backend/workspace-file-service.js +2765 -0
  90. package/bin/farming +5 -0
  91. package/config/farming.deploy.env.example +13 -0
  92. package/config/farming.install.env.example +17 -0
  93. package/dist/assets/App-BrP-ENHg.css +1 -0
  94. package/dist/assets/App-Dza5yEDe.js +124 -0
  95. package/dist/assets/FileEditorMarkdownPreview-DRDNQ8mX.css +1 -0
  96. package/dist/assets/FileEditorMarkdownPreview-elKWc8Im.js +404 -0
  97. package/dist/assets/FileEditorPane-BQLocXOp.js +5 -0
  98. package/dist/assets/IconGlyphs-RkMAdBXF.js +1 -0
  99. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  100. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  101. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  102. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  103. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  104. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  105. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  106. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  107. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  108. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  109. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  110. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  111. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  112. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  113. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  114. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  115. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  116. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  117. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  118. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  119. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  120. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  121. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  122. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  123. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  124. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  125. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  126. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  127. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  128. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  129. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  130. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  131. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  132. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  133. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  134. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  135. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  136. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  137. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  138. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  139. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  140. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  141. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  142. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  143. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  144. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  145. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  146. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  147. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  148. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  149. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  150. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  151. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  152. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  153. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  154. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  155. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  156. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  157. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  158. package/dist/assets/ProjectFilesSection-lS1azbgj.js +12 -0
  159. package/dist/assets/ReviewPage-DgnmgU2T.js +3 -0
  160. package/dist/assets/abap-Cc5D5h5i.js +1 -0
  161. package/dist/assets/abnfDiagram-VRR7QNED-BgawzDQT.js +1 -0
  162. package/dist/assets/apex-BKopwLmx.js +1 -0
  163. package/dist/assets/api-D1lyBYIQ.js +1 -0
  164. package/dist/assets/arc-CWoVlxJw.js +1 -0
  165. package/dist/assets/architecture-TIHT7OUA-CbJBFh3w.js +1 -0
  166. package/dist/assets/architectureDiagram-ZJ3FMSHR-DUShwPg0.js +36 -0
  167. package/dist/assets/array-HeX70jSN.js +1 -0
  168. package/dist/assets/azcli-DI-C34WA.js +1 -0
  169. package/dist/assets/bat-Cbp6u42z.js +1 -0
  170. package/dist/assets/bicep-4QA1jTCM.js +2 -0
  171. package/dist/assets/blockDiagram-677ZJIJ3-CeGZviXR.js +132 -0
  172. package/dist/assets/c4Diagram-LMCZKHZV-CLhYht6S.js +10 -0
  173. package/dist/assets/cameligo-Dda_adPs.js +1 -0
  174. package/dist/assets/channel-Uw90AO0b.js +1 -0
  175. package/dist/assets/chunk-2Q5K7J3B-d5WWh8jo.js +1 -0
  176. package/dist/assets/chunk-32BRIVSS-LFYpT-Cu.js +1 -0
  177. package/dist/assets/chunk-52WLFC77-BH6jDw9J.js +10 -0
  178. package/dist/assets/chunk-5FCAYU7R-C7AmIhYv.js +1 -0
  179. package/dist/assets/chunk-5HE753X5-C8cXaouP.js +1 -0
  180. package/dist/assets/chunk-5JV3BV7I-C1PtimcA.js +1 -0
  181. package/dist/assets/chunk-5TONJI2A-_81zUME8.js +2 -0
  182. package/dist/assets/chunk-5VM5RSS4-Dlw7AXWp.js +15 -0
  183. package/dist/assets/chunk-7BUUIJ7U-ZBRhjLOh.js +1 -0
  184. package/dist/assets/chunk-BIQX33UG-CWmzxeAw.js +1 -0
  185. package/dist/assets/chunk-C7G6YPKG-B_mIUlb7.js +1 -0
  186. package/dist/assets/chunk-CQNSW5MT-CMayolwI.js +1 -0
  187. package/dist/assets/chunk-CYSBUYHQ-lSPbrL3Z.js +1 -0
  188. package/dist/assets/chunk-DECur_0Z.js +1 -0
  189. package/dist/assets/chunk-EMLP6XTP-D9-jtCnM.js +1 -0
  190. package/dist/assets/chunk-EX3LRPZG-C63hVuAJ.js +231 -0
  191. package/dist/assets/chunk-FWX5IMBZ-CboX-WF_.js +2 -0
  192. package/dist/assets/chunk-HOUHSVGY-BOgSd6Un.js +1 -0
  193. package/dist/assets/chunk-ICXQ74PX-C0K-pgZt.js +2 -0
  194. package/dist/assets/chunk-JG7HCLWE-Cib606u_.js +2 -0
  195. package/dist/assets/chunk-JWPE2WC7-DSyBRaRG.js +1 -0
  196. package/dist/assets/chunk-KEIR6QF5-CNOHik0T.js +161 -0
  197. package/dist/assets/chunk-MOJQB5TN-CVMfwN_7.js +88 -0
  198. package/dist/assets/chunk-MOZMSUNE-D6JeZqmE.js +1 -0
  199. package/dist/assets/chunk-OGEWGWER-DLT3pxyw.js +1 -0
  200. package/dist/assets/chunk-OSBZ3O6U-C0W8KSeg.js +1 -0
  201. package/dist/assets/chunk-PUDLZKDR-Cd079yIQ.js +156 -0
  202. package/dist/assets/chunk-Q4XR5HBZ-D0jHa6SO.js +70 -0
  203. package/dist/assets/chunk-QBLGF6JB-p4omp7uO.js +1 -0
  204. package/dist/assets/chunk-R7FJI6CG-CZ_p9hSr.js +1 -0
  205. package/dist/assets/chunk-RYQCIY6F-CZA9pvFX.js +1 -0
  206. package/dist/assets/chunk-U6XO7XAA-CcXKsWxp.js +2 -0
  207. package/dist/assets/chunk-V7JOEXUC-CVDtR75H.js +206 -0
  208. package/dist/assets/chunk-VAUOI2AC-B-W2_9Ot.js +1 -0
  209. package/dist/assets/chunk-VR4S4FIN-FD3kWh32.js +1 -0
  210. package/dist/assets/chunk-WYO6CB5R-C2bGaS5r.js +127 -0
  211. package/dist/assets/chunk-XXDRQBXY-BBXwjhUx.js +1 -0
  212. package/dist/assets/chunk-Y2CYZVJY-Di0sYzi1.js +1 -0
  213. package/dist/assets/chunk-YOTPTUD7-BXHmEk89.js +1 -0
  214. package/dist/assets/chunk-ZGVPDNZ5-ymgts0zo.js +62 -0
  215. package/dist/assets/chunk-ZIRB5QZD-DncwlQQc.js +32 -0
  216. package/dist/assets/classDiagram-OUVF2IWQ-DKW_dtku.js +1 -0
  217. package/dist/assets/classDiagram-v2-EOCWNBFH-C8Fi7-yv.js +1 -0
  218. package/dist/assets/clojure-CvY8A83L.js +1 -0
  219. package/dist/assets/code-dark-Cjb1QGhu.css +1 -0
  220. package/dist/assets/code-mobile-3C2Rr-CN.css +1 -0
  221. package/dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  222. package/dist/assets/coffee-4LX2Sv8A.js +1 -0
  223. package/dist/assets/core-ZlAPicox.js +3 -0
  224. package/dist/assets/cose-bilkent-JH36ORCC-BNIAz0nN.js +1 -0
  225. package/dist/assets/cpp-D4AzSV28.js +1 -0
  226. package/dist/assets/csharp-C4nWN4Yd.js +1 -0
  227. package/dist/assets/csp-CiEaaS5Z.js +1 -0
  228. package/dist/assets/css-DXxBRsbk.js +3 -0
  229. package/dist/assets/css.worker-DyDu5ynT.js +89 -0
  230. package/dist/assets/cssMode-DDWxTPm_.js +1 -0
  231. package/dist/assets/cynefin-VYW2F7L2-DgXGHlRt.js +1 -0
  232. package/dist/assets/cynefinDiagram-TSTJHNR4-CwpobXIl.js +62 -0
  233. package/dist/assets/cypher-DOMzqyFA.js +1 -0
  234. package/dist/assets/cytoscape.esm-Cl8iC3D7.js +321 -0
  235. package/dist/assets/dagre-DXlcHgr3.js +1 -0
  236. package/dist/assets/dagre-VKFMJZFB-Dkhlfjna.js +4 -0
  237. package/dist/assets/dart-BWS7MXt_.js +1 -0
  238. package/dist/assets/defaultLocale-GJwWH1Jr.js +1 -0
  239. package/dist/assets/diagram-FQU43EPY-hA8dicp6.js +3 -0
  240. package/dist/assets/diagram-G47NLZAW-BTY6JTzO.js +24 -0
  241. package/dist/assets/diagram-NH7WQ7WH-xkaHHX9M.js +24 -0
  242. package/dist/assets/diagram-OA4YK3LP-gk_fg9UU.js +30 -0
  243. package/dist/assets/diagram-WEI45ONY-BvC8xd6T.js +41 -0
  244. package/dist/assets/dist-ClAL-Tv5.js +1 -0
  245. package/dist/assets/dockerfile-Baf4U3xT.js +1 -0
  246. package/dist/assets/ebnfDiagram-CCIWWBDH-CR7RaNat.js +1 -0
  247. package/dist/assets/ecl-CT7udlkQ.js +1 -0
  248. package/dist/assets/editor-CtbFZlk0.css +1 -0
  249. package/dist/assets/editor.api2-B9h6iFPK.js +872 -0
  250. package/dist/assets/editor.worker-Dpt_xPrs.js +26 -0
  251. package/dist/assets/elixir-CIbAZw5l.js +1 -0
  252. package/dist/assets/erDiagram-Q63AITRT-_M-JFPbj.js +85 -0
  253. package/dist/assets/eventmodeling-45OFAUF4-DXYTQ2nt.js +1 -0
  254. package/dist/assets/file-icons-EFUGSSwf.js +1 -0
  255. package/dist/assets/flow9-Dqiw45WV.js +1 -0
  256. package/dist/assets/flowDiagram-23GEKE2U-DAiS5Y7G.js +1 -0
  257. package/dist/assets/freemarker2-QBsTERH-.js +3 -0
  258. package/dist/assets/fsharp-E8E2L9jU.js +1 -0
  259. package/dist/assets/ganttDiagram-NO4QXBWP-Bl8P1yf_.js +292 -0
  260. package/dist/assets/gitGraph-TEB2WS4Q-CzTBjEvV.js +1 -0
  261. package/dist/assets/gitGraphDiagram-IHSO6WYX-DoHa5ysz.js +106 -0
  262. package/dist/assets/go-CouVSN4D.js +1 -0
  263. package/dist/assets/graphlib-CbSvZcZU.js +1 -0
  264. package/dist/assets/graphql-a6h6h5-t.js +1 -0
  265. package/dist/assets/handlebars-CuoxPo5A.js +1 -0
  266. package/dist/assets/hcl-vso3e6N-.js +1 -0
  267. package/dist/assets/html-gX5PEu0Q.js +1 -0
  268. package/dist/assets/html.worker-IWNXhnIC.js +502 -0
  269. package/dist/assets/htmlMode-DIWUbUxd.js +1 -0
  270. package/dist/assets/index-BpHPeJf0.js +10 -0
  271. package/dist/assets/info-DKCQHKI2-DznP7j3s.js +1 -0
  272. package/dist/assets/infoDiagram-FWYZ7A6U-DSFcSuUs.js +2 -0
  273. package/dist/assets/ini-SwZZkotR.js +1 -0
  274. package/dist/assets/init-BPLPMQ3Y.js +1 -0
  275. package/dist/assets/ishikawaDiagram-FXEZZL3T-DdkqullI.js +70 -0
  276. package/dist/assets/java-CtRLC4_3.js +1 -0
  277. package/dist/assets/javascript-BYKGIUGs.js +1 -0
  278. package/dist/assets/journeyDiagram-5HDEW3XC-B4hRnQJr.js +139 -0
  279. package/dist/assets/json.worker-c4h5s80L.js +58 -0
  280. package/dist/assets/jsonMode-AFmQQP6u.js +7 -0
  281. package/dist/assets/jsx-runtime-BthL93pI.js +1 -0
  282. package/dist/assets/julia-CuJWFKQH.js +1 -0
  283. package/dist/assets/kanban-definition-HUTT4EX6-tm2FZB2E.js +89 -0
  284. package/dist/assets/katex-C8DPyI6s.js +257 -0
  285. package/dist/assets/kotlin-B_kBhsre.js +1 -0
  286. package/dist/assets/less-CtrHIfz3.js +2 -0
  287. package/dist/assets/lexon-yVt1pJLu.js +1 -0
  288. package/dist/assets/line-CmsjK4kn.js +1 -0
  289. package/dist/assets/linear-Dld3_ERu.js +1 -0
  290. package/dist/assets/liquid-DBIl-f0z.js +1 -0
  291. package/dist/assets/lspLanguageFeatures-DK6tqicV.js +4 -0
  292. package/dist/assets/lua-prOwgJ4U.js +1 -0
  293. package/dist/assets/m3-DhrdTQ84.js +1 -0
  294. package/dist/assets/main-DTJwH51M.css +1 -0
  295. package/dist/assets/map-LZWWoeWa.js +1 -0
  296. package/dist/assets/markdown-DoI5HwSM.js +1 -0
  297. package/dist/assets/mdx-DS-bVtZN.js +1 -0
  298. package/dist/assets/mermaid-parser.core-BQtepoLd.js +4 -0
  299. package/dist/assets/mermaid.core-C7UT_EEL.js +11 -0
  300. package/dist/assets/mindmap-definition-LN4V7U3C-DplfjGms.js +96 -0
  301. package/dist/assets/mips-Dye5jsBU.js +1 -0
  302. package/dist/assets/monaco.contribution-CyLosfZI.js +2 -0
  303. package/dist/assets/msdax-TkNOyIL8.js +1 -0
  304. package/dist/assets/mysql-CEc-RKZF.js +1 -0
  305. package/dist/assets/objective-c-CqqCsQz0.js +1 -0
  306. package/dist/assets/ordinal-BLrOss5K.js +1 -0
  307. package/dist/assets/packet-7NZHBO7P-BDEPOPha.js +1 -0
  308. package/dist/assets/pascal-DO_pj8yg.js +1 -0
  309. package/dist/assets/pascaligo-1cbdZdF3.js +1 -0
  310. package/dist/assets/path-YdFzr2W6.js +1 -0
  311. package/dist/assets/pegDiagram-2B236MQR-lu3SdkQs.js +1 -0
  312. package/dist/assets/perl-B_N3PYfC.js +1 -0
  313. package/dist/assets/pgsql-9iYk1FQ7.js +1 -0
  314. package/dist/assets/php-rO2sgoUM.js +1 -0
  315. package/dist/assets/pie-RZYD4A2V-DWIrwPJQ.js +1 -0
  316. package/dist/assets/pieDiagram-ENE6RG2P-3fHbmDf9.js +39 -0
  317. package/dist/assets/pla-Cbgv60kq.js +1 -0
  318. package/dist/assets/postiats-y6xrhy_M.js +1 -0
  319. package/dist/assets/powerquery-BaD8gWNE.js +1 -0
  320. package/dist/assets/powershell-BMhG4JVe.js +1 -0
  321. package/dist/assets/preload-helper-mJowh_hw.js +1 -0
  322. package/dist/assets/protobuf-CdOP5kN3.js +2 -0
  323. package/dist/assets/pug-Ck60hNF9.js +1 -0
  324. package/dist/assets/python-C93q3xXz.js +1 -0
  325. package/dist/assets/qoder-C9LmmOSf.svg +1 -0
  326. package/dist/assets/qoder-Cf9gl0Y5.svg +1 -0
  327. package/dist/assets/qoder-gHCinseV.svg +1 -0
  328. package/dist/assets/qrcode-DV-_rjU8.js +3 -0
  329. package/dist/assets/qsharp-BcaKFfP-.js +1 -0
  330. package/dist/assets/quadrantDiagram-ABIIQ3AL-a5qoWz-X.js +7 -0
  331. package/dist/assets/r-rFNes0iK.js +1 -0
  332. package/dist/assets/radar-I7S5WNFK-B7OaD8vp.js +1 -0
  333. package/dist/assets/railroad-3IZDKUUU-BXW2nuCA.js +1 -0
  334. package/dist/assets/railroad-abnf-AHOZXSZD-Buw9QG2r.js +1 -0
  335. package/dist/assets/railroad-ebnf-EBAXGLYW-BjSi4sWJ.js +1 -0
  336. package/dist/assets/railroad-peg-LSFZ7HO6-DN1wIVhS.js +1 -0
  337. package/dist/assets/railroadDiagram-RFXS5EU6-D2TOuXW9.js +1 -0
  338. package/dist/assets/razor-CBifNGXO.js +1 -0
  339. package/dist/assets/react-dom-gtU6X-Hj.js +1 -0
  340. package/dist/assets/redis-DkpQ3K6G.js +1 -0
  341. package/dist/assets/redshift-Di9N5TI3.js +1 -0
  342. package/dist/assets/requirementDiagram-TGXJPOKE-LQBWpUvd.js +84 -0
  343. package/dist/assets/restructuredtext-By5ZzLt6.js +1 -0
  344. package/dist/assets/review-BcnwQtJv.css +1 -0
  345. package/dist/assets/rough.esm-c4PR5shF.js +1 -0
  346. package/dist/assets/ruby-fF5zGiLp.js +1 -0
  347. package/dist/assets/rust-C5b3AYY6.js +1 -0
  348. package/dist/assets/sankeyDiagram-HTMAVEWB-B1ohYoyK.js +40 -0
  349. package/dist/assets/sb-CD07UNRs.js +1 -0
  350. package/dist/assets/scala-jtn1ip9G.js +1 -0
  351. package/dist/assets/scheme-C4vqMkn_.js +1 -0
  352. package/dist/assets/scss-I4Glxjbz.js +3 -0
  353. package/dist/assets/sequenceDiagram-DBY2YBRQ-C3vM-hMq.js +162 -0
  354. package/dist/assets/shell-DubUcuns.js +1 -0
  355. package/dist/assets/sizeCapture-X5ZJPWSS-daTB6OcF.js +1 -0
  356. package/dist/assets/solidity-CNy2KSl2.js +1 -0
  357. package/dist/assets/sophia-D9_URt84.js +1 -0
  358. package/dist/assets/sparql-DviXpm4C.js +1 -0
  359. package/dist/assets/sql-vDRbAZgK.js +1 -0
  360. package/dist/assets/src-WBW1QxJt.js +1 -0
  361. package/dist/assets/st-CnpnRqA7.js +1 -0
  362. package/dist/assets/stateDiagram-2N3HPSRC-BvFhOryI.js +1 -0
  363. package/dist/assets/stateDiagram-v2-6OUMAXLB-WMrz4PNo.js +1 -0
  364. package/dist/assets/swift-D_g8Ganz.js +1 -0
  365. package/dist/assets/swimlanes-5IMT3BWC-DKF_b-2s.js +2 -0
  366. package/dist/assets/swimlanesDiagram-G3AALYLV-BGswC9oC.js +8 -0
  367. package/dist/assets/systemverilog-OuZa5h1M.js +1 -0
  368. package/dist/assets/tcl-DBm9ucsV.js +1 -0
  369. package/dist/assets/timeline-definition-FHXFAJF6-vAs11ux_.js +120 -0
  370. package/dist/assets/tokens-BwenNn5Q.css +1 -0
  371. package/dist/assets/treeView-QDETBFTQ-BVfICaZQ.js +1 -0
  372. package/dist/assets/treemap-6X3UGDF4-oWHPqo17.js +1 -0
  373. package/dist/assets/ts.worker-BwM5Ha3L.js +67719 -0
  374. package/dist/assets/tsMode-DGZTlTj8.js +11 -0
  375. package/dist/assets/twig-BRzEqX5Y.js +1 -0
  376. package/dist/assets/typescript-KJKfYO7K.js +1 -0
  377. package/dist/assets/typespec-D4ZgGeX8.js +1 -0
  378. package/dist/assets/useWorkspaceMenuKeyboard-CneKAZUJ.js +1 -0
  379. package/dist/assets/vb-DcP4s6WS.js +1 -0
  380. package/dist/assets/vennDiagram-L72KCM5P-BybTX_9B.js +34 -0
  381. package/dist/assets/wardley-OPB4EBWU-Dg8t5y3s.js +1 -0
  382. package/dist/assets/wardleyDiagram-EHGQE667-CicUmMBR.js +78 -0
  383. package/dist/assets/wgsl-CnRJ_QUf.js +298 -0
  384. package/dist/assets/workers-BSQRIkqa.js +1 -0
  385. package/dist/assets/workspace-view-state-CTyDzk2D.js +1 -0
  386. package/dist/assets/xml-C8FAcN6j.js +1 -0
  387. package/dist/assets/xychartDiagram-FW5EYKEG-BhWDyCX-.js +7 -0
  388. package/dist/assets/yaml-BQ4NrRhG.js +1 -0
  389. package/dist/assets/zsh-CLpveKlF.svg +1 -0
  390. package/dist/assets/zsh-FxSpMPbz.svg +1 -0
  391. package/dist/farming-2/app-icon-v2-180.png +0 -0
  392. package/dist/farming-2/app-icon-v2-192.png +0 -0
  393. package/dist/farming-2/app-icon-v2-512.png +0 -0
  394. package/dist/farming-2/app-icon-v2-maskable-512.png +0 -0
  395. package/dist/farming-2/app-icon-v2-master.png +0 -0
  396. package/dist/farming-2/favicon-v2-16.png +0 -0
  397. package/dist/farming-2/favicon-v2-32.png +0 -0
  398. package/dist/farming-2/favicon-v2-48.png +0 -0
  399. package/dist/farming-2/favicon-v2-64.png +0 -0
  400. package/dist/farming-2/favicon-v2.ico +0 -0
  401. package/dist/farming-2/favicon.ico +0 -0
  402. package/dist/farming-2/github-social-preview.png +0 -0
  403. package/dist/farming-2/images/avatar-watercolor-v1-bee-garden.png +0 -0
  404. package/dist/farming-2/images/avatar-watercolor-v2.png +0 -0
  405. package/dist/farming-2/images/avatar-watercolor-v3.png +0 -0
  406. package/dist/farming-2/legacy-icons-v1/favicon.ico +1 -0
  407. package/dist/farming-2/legacy-icons-v1/logo-16.png +0 -0
  408. package/dist/farming-2/legacy-icons-v1/logo-180.png +0 -0
  409. package/dist/farming-2/legacy-icons-v1/logo-192.png +0 -0
  410. package/dist/farming-2/legacy-icons-v1/logo-32.png +0 -0
  411. package/dist/farming-2/legacy-icons-v1/logo-48.png +0 -0
  412. package/dist/farming-2/legacy-icons-v1/logo-512.png +0 -0
  413. package/dist/farming-2/legacy-icons-v1/logo-64.png +0 -0
  414. package/dist/farming-2/logo-16.png +0 -0
  415. package/dist/farming-2/logo-180.png +0 -0
  416. package/dist/farming-2/logo-192.png +0 -0
  417. package/dist/farming-2/logo-32.png +0 -0
  418. package/dist/farming-2/logo-48.png +0 -0
  419. package/dist/farming-2/logo-512.png +0 -0
  420. package/dist/farming-2/logo-64.png +0 -0
  421. package/dist/farming-2/site.webmanifest +27 -0
  422. package/dist/farming-2/style_capsules/watercolor-pastoral.json +94 -0
  423. package/dist/index.html +27 -0
  424. package/frontend/ghostty-loader.js +24 -0
  425. package/frontend/runtime-paths.js +28 -0
  426. package/frontend/session-bridge.js +82 -0
  427. package/frontend/session-modal-bridge.js +331 -0
  428. package/frontend/skin-bridge.js +25 -0
  429. package/frontend/skins/crt/app.js +6940 -0
  430. package/frontend/skins/crt/assets/branding/farming-crt-icon.svg +11 -0
  431. package/frontend/skins/crt/assets/branding/farming-crt-logo-v1.png +0 -0
  432. package/frontend/skins/crt/assets/effects/phosphor-noise.svg +11 -0
  433. package/frontend/skins/crt/assets/fonts/departure-mono/DepartureMonoNerdFontMono-Regular.otf +0 -0
  434. package/frontend/skins/crt/assets/fonts/departure-mono/LICENSE +93 -0
  435. package/frontend/skins/crt/effects.js +8 -0
  436. package/frontend/skins/crt/index.html +1712 -0
  437. package/frontend/skins/crt/styles/billing.css +1003 -0
  438. package/frontend/skins/crt/styles/effects.css +171 -0
  439. package/frontend/skins/crt/styles/history.css +215 -0
  440. package/frontend/skins/crt/styles/monochrome-green.css +509 -0
  441. package/frontend/skins/crt/styles/search.css +271 -0
  442. package/frontend/terminal-bridge.js +192 -0
  443. package/frontend/theme-loader.js +84 -0
  444. package/frontend/themes/terminal/theme.json +24 -0
  445. package/frontend/vendor/ghostty-web/LICENSE +21 -0
  446. package/frontend/vendor/ghostty-web/__vite-browser-external-2447137e.js +4 -0
  447. package/frontend/vendor/ghostty-web/ghostty-vt.wasm +0 -0
  448. package/frontend/vendor/ghostty-web/ghostty-web.js +2963 -0
  449. package/frontend/vendor/ghostty-web/ghostty-web.umd.cjs +13 -0
  450. package/frontend/vendor/ghostty-web/index.d.ts +1842 -0
  451. package/index.html +23 -0
  452. package/package.json +144 -0
  453. package/scripts/sync-ghostty-vendor.js +66 -0
@@ -0,0 +1,292 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const MANAGED_BLOCK_START = '<!-- FARMING_MAIN_AGENT_SKILLS:START -->';
5
+ const MANAGED_BLOCK_END = '<!-- FARMING_MAIN_AGENT_SKILLS:END -->';
6
+
7
+ const REMOVED_MAIN_AGENT_SKILL_IDS = [];
8
+
9
+ const MAIN_AGENT_OPERATING_GUIDE = [
10
+ {
11
+ title: 'Mission',
12
+ lines: [
13
+ 'You are the Farming Main Agent: an attention steward for the human, not a background log reader.',
14
+ 'Your value is to keep track of what other agents are doing, notice when the human should care, and compress parallel work into clear next actions.',
15
+ ],
16
+ },
17
+ {
18
+ title: 'Startup routine',
19
+ lines: [
20
+ 'On startup or resume, orient yourself with `farming list --json` and inspect `FARMING_PROJECT_WORKSPACE` / `FARMING_MAIN_WORKSPACE` before proposing work.',
21
+ 'Do not spawn child agents just because you can. Wait for a concrete user goal, or ask one short clarification if the goal is too vague to route safely.',
22
+ 'Use `farming memory report` only when recent local context would change what you do next.',
23
+ ],
24
+ },
25
+ {
26
+ title: 'Observing agents',
27
+ lines: [
28
+ 'Poll at a low frequency and look for state changes, not raw terminal chatter.',
29
+ 'Use `farming output <agent-id> --tail <n>` only for agents that are blocked, newly finished, noisy, or directly relevant to the current user question.',
30
+ 'Classify agents as running, waiting for input, blocked, failed, complete, stale, or safe to ignore; include the agent id behind each claim.',
31
+ ],
32
+ },
33
+ {
34
+ title: 'Delegating work',
35
+ lines: [
36
+ 'Spawn child agents only when parallelism clearly helps a user goal.',
37
+ 'Give each child a narrow workspace, task, success criteria, forbidden scope, and required evidence or tests.',
38
+ 'Keep the default fanout small; prefer 2-4 focused children over many overlapping agents.',
39
+ ],
40
+ },
41
+ {
42
+ title: 'Intervening',
43
+ lines: [
44
+ 'Use `farming send` to unblock or redirect a child agent with specific instructions.',
45
+ 'Do not issue destructive commands, broad rewrites, permission changes, or high-risk cleanup without summarizing the risk and getting user confirmation.',
46
+ 'Kill agents only when they are clearly done, duplicated, stuck beyond recovery, or the user asks.',
47
+ ],
48
+ },
49
+ {
50
+ title: 'Reporting to the human',
51
+ lines: [
52
+ 'Report in short status summaries: What changed, who needs attention, what is done, and what you will do next.',
53
+ 'Do not paste long logs. Quote or summarize only the evidence needed for a decision.',
54
+ 'When multiple agents disagree, deduplicate findings, rank by severity, and name the evidence gap before deciding.',
55
+ ],
56
+ },
57
+ ];
58
+
59
+ const MAIN_AGENT_SKILLS = [
60
+ {
61
+ id: 'memory-report',
62
+ name: '记忆读取总结',
63
+ trigger: '用户要求总结今日、昨日、本周做过什么,或需要先了解这台机器上各 agent 的近期工作记忆时',
64
+ summary: '只读扫描本机 Claude/Qwen/Codex 本地历史线索,按时间段生成 Farming 日报或周报。',
65
+ commands: [
66
+ 'farming memory report --period today',
67
+ 'farming memory report --period yesterday',
68
+ 'farming memory report --period week',
69
+ 'farming memory report --since <YYYY-MM-DD> --until <YYYY-MM-DD>',
70
+ ],
71
+ },
72
+ {
73
+ id: 'pest-control',
74
+ name: '牧场除虫计划',
75
+ trigger: '用户要求对某个目录、仓库或模块体系做系统性 bug 排查、除虫、深挖潜在缺陷时',
76
+ summary: [
77
+ 'Main Agent 先只读梳理目标目录结构,划分模块边界,明确模块间协议、数据流、调用关系和共享约束。',
78
+ '随后为每个模块启动一个子 Agent 深挖潜在 bug;每个子 Agent 必须聚焦自己的模块,同时检查与相邻模块协议是否破坏。',
79
+ 'Main Agent 负责汇总子 Agent 发现,去重、分级、安排可验证修复或给用户确认高风险改动。',
80
+ ].join(' '),
81
+ commands: [
82
+ 'farming spawn --workspace <repo> --task "模块:<name>。请深挖该模块潜在 bug,重点检查边界条件、错误处理、并发/状态一致性、协议违约和测试缺口;不要修改其他模块,先报告可验证发现。" -- <coding-agent-command>',
83
+ 'farming list --parent "$FARMING_AGENT_ID"',
84
+ 'farming output <agent-id> --tail 2000',
85
+ 'farming send <agent-id> "请基于已确认的模块协议继续检查交互边界,并给出最小可验证修复建议"',
86
+ 'farming kill <agent-id>',
87
+ ],
88
+ },
89
+ ];
90
+
91
+ function getMainAgentSkillsCatalog() {
92
+ return MAIN_AGENT_SKILLS.map((skill) => ({
93
+ id: skill.id,
94
+ name: skill.name,
95
+ trigger: skill.trigger,
96
+ summary: skill.summary,
97
+ commands: skill.commands,
98
+ }));
99
+ }
100
+
101
+ function renderMainAgentOperatingGuide() {
102
+ const lines = [
103
+ '# Farming Main Agent Operating Contract',
104
+ '',
105
+ ];
106
+
107
+ MAIN_AGENT_OPERATING_GUIDE.forEach((section) => {
108
+ lines.push(`## ${section.title}`);
109
+ section.lines.forEach((line) => {
110
+ lines.push(`- ${line}`);
111
+ });
112
+ lines.push('');
113
+ });
114
+
115
+ return lines.join('\n').trim();
116
+ }
117
+
118
+ function renderMainAgentSkills() {
119
+ const lines = [
120
+ '# Farming Main Agent Skills',
121
+ '',
122
+ 'You are the Farming Main Agent.',
123
+ 'Run `farming skills` any time you need to review these skills.',
124
+ 'Use these skills when the user asks for Farming-specific machine context.',
125
+ '',
126
+ ];
127
+
128
+ MAIN_AGENT_SKILLS.forEach((skill, index) => {
129
+ lines.push(`${index + 1}. ${skill.name} (${skill.id})`);
130
+ lines.push(`Trigger: ${skill.trigger}`);
131
+ lines.push(`Behavior: ${skill.summary}`);
132
+ lines.push('Commands:');
133
+ skill.commands.forEach((command) => {
134
+ lines.push(`- ${command}`);
135
+ });
136
+ lines.push('');
137
+ });
138
+
139
+ lines.push('Rules:');
140
+ lines.push('- Use `farming memory report` when you need recent context from local agent memories.');
141
+ lines.push('- Use “牧场除虫计划” when the user asks for systematic bug hunting across a directory or module tree.');
142
+ lines.push('- Before spawning child agents for pest control, map modules and module protocols first; do not send overlapping or vague tasks.');
143
+ lines.push('- Keep child agents scoped to their assigned module and require evidence, reproduction notes, or tests for each bug claim.');
144
+ lines.push('- For high-risk writes, destructive operations, or broad refactors, summarize the finding and ask the user before proceeding.');
145
+
146
+ return [
147
+ renderMainAgentOperatingGuide(),
148
+ '',
149
+ lines.join('\n'),
150
+ ].join('\n');
151
+ }
152
+
153
+ function renderCanonicalAgentsFile() {
154
+ return [
155
+ '# Farming Main Agent',
156
+ '',
157
+ 'This directory is a Farming-managed Main Agent workspace.',
158
+ '',
159
+ 'Read this file before acting. You are the Farming Main Agent, not a project-local child agent.',
160
+ 'Use the local `farming` CLI to inspect your abilities and coordinate work.',
161
+ '',
162
+ 'Useful commands:',
163
+ '- `farming skills`',
164
+ '- `farming memory report --period today`',
165
+ '- `farming memory report --period yesterday`',
166
+ '- `farming memory report --period week`',
167
+ '- `farming spawn --workspace <repo> --task "<module bug hunt task>" -- <coding-agent-command>`',
168
+ '- `farming list --parent "$FARMING_AGENT_ID"`',
169
+ '- `farming output <agent-id> --tail 2000`',
170
+ '- `farming send <agent-id> "<follow-up instruction>"`',
171
+ '- `farming kill <agent-id>`',
172
+ '',
173
+ 'Environment:',
174
+ '- `FARMING_MAIN_WORKSPACE` points at this Farming identity workspace.',
175
+ '- `FARMING_PROJECT_WORKSPACE` points at the user-selected project workspace when available.',
176
+ '- `FARMING_SKILLS_FILE` points at the detailed Farming skills file.',
177
+ '',
178
+ renderMainAgentSkills(),
179
+ ].join('\n');
180
+ }
181
+
182
+ function renderCompatibilityFile(targetName = 'AGENTS.md') {
183
+ return [
184
+ `# Farming Main Agent (${targetName})`,
185
+ '',
186
+ `This file is a compatibility entrypoint for ${targetName}.`,
187
+ 'It intentionally includes the full Farming Main Agent identity inline, because some coding CLIs read only their own memory filename and may not follow a pointer to AGENTS.md.',
188
+ '',
189
+ renderCanonicalAgentsFile(),
190
+ ].join('\n');
191
+ }
192
+
193
+ function renderCompatibilityPointerFile(targetName = 'AGENTS.md') {
194
+ return [
195
+ '# Farming Main Agent',
196
+ '',
197
+ `This is a compatibility entrypoint for ${targetName}.`,
198
+ '',
199
+ 'The canonical Farming Main Agent instructions are in `AGENTS.md`.',
200
+ 'Read `AGENTS.md`, then run `farming skills` if you need the current skill list.',
201
+ '',
202
+ ].join('\n');
203
+ }
204
+
205
+ function renderMainAgentBootstrap() {
206
+ return [
207
+ renderMainAgentSkills(),
208
+ '',
209
+ 'Bootstrap note: remember these Farming skills for future user requests.',
210
+ ].join('\n');
211
+ }
212
+
213
+ function upsertManagedBlock(existingContent, block) {
214
+ const start = existingContent.indexOf(MANAGED_BLOCK_START);
215
+ const end = existingContent.indexOf(MANAGED_BLOCK_END);
216
+
217
+ if (start !== -1 && end !== -1 && end > start) {
218
+ const before = existingContent.slice(0, start).replace(/\s+$/g, '');
219
+ const after = existingContent.slice(end + MANAGED_BLOCK_END.length).replace(/^\s+/g, '');
220
+ return [before, block.trim(), after].filter(Boolean).join('\n\n') + '\n';
221
+ }
222
+
223
+ return [existingContent.trim(), block.trim()].filter(Boolean).join('\n\n') + '\n';
224
+ }
225
+
226
+ function writeManagedSkillFile(filePath, block) {
227
+ let existing = '';
228
+ try {
229
+ existing = fs.readFileSync(filePath, 'utf8');
230
+ } catch {
231
+ existing = '';
232
+ }
233
+
234
+ fs.writeFileSync(filePath, upsertManagedBlock(existing, block));
235
+ }
236
+
237
+ function ensureMainAgentSkillFiles(farmingDir) {
238
+ if (!farmingDir) return;
239
+ fs.mkdirSync(farmingDir, { recursive: true });
240
+
241
+ const skillsText = renderMainAgentSkills() + '\n';
242
+ const skillsDir = path.join(farmingDir, 'skills');
243
+ fs.mkdirSync(skillsDir, { recursive: true });
244
+
245
+ fs.writeFileSync(path.join(farmingDir, 'FARMING_MAIN_AGENT_SKILLS.md'), skillsText);
246
+ fs.writeFileSync(path.join(farmingDir, 'AGENTS.md'), `${renderCanonicalAgentsFile()}\n`);
247
+ fs.writeFileSync(path.join(skillsDir, 'index.json'), JSON.stringify(MAIN_AGENT_SKILLS, null, 2) + '\n');
248
+ MAIN_AGENT_SKILLS.forEach((skill) => {
249
+ const lines = [
250
+ `# ${skill.name}`,
251
+ '',
252
+ `ID: ${skill.id}`,
253
+ '',
254
+ `Trigger: ${skill.trigger}`,
255
+ '',
256
+ `Behavior: ${skill.summary}`,
257
+ '',
258
+ 'Commands:',
259
+ ...skill.commands.map(command => `- ${command}`),
260
+ '',
261
+ ];
262
+ fs.writeFileSync(path.join(skillsDir, `${skill.id}.md`), lines.join('\n'));
263
+ });
264
+ REMOVED_MAIN_AGENT_SKILL_IDS.forEach((skillId) => {
265
+ fs.rmSync(path.join(skillsDir, `${skillId}.md`), { force: true });
266
+ });
267
+
268
+ // These filenames match the common project-memory files used by coding CLIs.
269
+ // They live in Farming's internal workspace, not in the user's project.
270
+ ['CLAUDE.md', 'QWEN.md'].forEach((filename) => {
271
+ writeManagedSkillFile(path.join(farmingDir, filename), [
272
+ MANAGED_BLOCK_START,
273
+ renderCompatibilityFile(filename).trim(),
274
+ MANAGED_BLOCK_END,
275
+ '',
276
+ ].join('\n'));
277
+ });
278
+ }
279
+
280
+ module.exports = {
281
+ MAIN_AGENT_SKILLS,
282
+ MAIN_AGENT_OPERATING_GUIDE,
283
+ getMainAgentSkillsCatalog,
284
+ ensureMainAgentSkillFiles,
285
+ renderCanonicalAgentsFile,
286
+ renderCompatibilityFile,
287
+ renderCompatibilityPointerFile,
288
+ renderMainAgentBootstrap,
289
+ renderMainAgentOperatingGuide,
290
+ renderMainAgentSkills,
291
+ upsertManagedBlock,
292
+ };
@@ -0,0 +1,119 @@
1
+ const path = require('path');
2
+ const { parseCommand } = require('./cli-agents');
3
+ const { isSafeProviderSessionId } = require('./provider-session-id');
4
+
5
+ const AUTO_RESUME_AGENT_SESSION_PROVIDERS = new Set(['codex', 'claude', 'opencode', 'qoder']);
6
+
7
+ function normalizeMainPageSessionProvider(provider) {
8
+ const normalized = String(provider || '').trim().toLowerCase();
9
+ return AUTO_RESUME_AGENT_SESSION_PROVIDERS.has(normalized) ? normalized : '';
10
+ }
11
+
12
+ function isSafeSessionId(sessionId) {
13
+ return isSafeProviderSessionId(sessionId);
14
+ }
15
+
16
+ function mainPageAgentSessionKey(provider, sessionId, providerHomeId = '') {
17
+ const homeId = String(providerHomeId || '').trim();
18
+ if (homeId && homeId !== 'default') return `agent-session:${provider}:home:${homeId}:${sessionId}`;
19
+ return `agent-session:${provider}:${sessionId}`;
20
+ }
21
+
22
+ function mainPageAgentSessionFromKey(key) {
23
+ const match = String(key || '').match(/^agent-session:([^:]+):(.+)$/);
24
+ if (!match) return null;
25
+
26
+ const provider = normalizeMainPageSessionProvider(match[1]);
27
+ let providerHomeId = 'default';
28
+ let sessionId = String(match[2] || '').trim();
29
+ const homeMatch = sessionId.match(/^home:([A-Za-z0-9._-]+):(.+)$/);
30
+ if (homeMatch) {
31
+ providerHomeId = homeMatch[1];
32
+ sessionId = String(homeMatch[2] || '').trim();
33
+ }
34
+ if (!provider || !isSafeSessionId(sessionId)) {
35
+ return null;
36
+ }
37
+
38
+ return providerHomeId && providerHomeId !== 'default'
39
+ ? { provider, providerHomeId, sessionId }
40
+ : { provider, sessionId };
41
+ }
42
+
43
+ function mainPageAgentSessionsToAutoResume(settings) {
44
+ const keys = Array.isArray(settings && settings.mainPageSessionKeys)
45
+ ? settings.mainPageSessionKeys
46
+ : [];
47
+ const seen = new Set();
48
+ const sessions = [];
49
+
50
+ keys.forEach((key) => {
51
+ const session = mainPageAgentSessionFromKey(key);
52
+ if (!session) return;
53
+
54
+ const dedupeKey = `${session.provider}:${session.providerHomeId || 'default'}:${session.sessionId}`;
55
+ if (seen.has(dedupeKey)) return;
56
+ seen.add(dedupeKey);
57
+ sessions.push(session);
58
+ });
59
+
60
+ return sessions;
61
+ }
62
+
63
+ function resumedAgentSource(provider, sessionId, providerHomeId = '') {
64
+ const homeId = String(providerHomeId || '').trim();
65
+ return homeId && homeId !== 'default'
66
+ ? `${provider}-history:home:${homeId}:${sessionId}`
67
+ : `${provider}-history:${sessionId}`;
68
+ }
69
+
70
+ function mainPageSessionProviderForCommand(command) {
71
+ const executable = parseCommand(command)
72
+ .find(token => token !== 'env' && !/^[A-Za-z_][A-Za-z0-9_]*=/.test(token));
73
+ const basename = path.basename(executable || '');
74
+ if (basename === 'qodercli') return 'qoder';
75
+ return normalizeMainPageSessionProvider(basename);
76
+ }
77
+
78
+ function isActiveAgent(agent) {
79
+ return agent
80
+ && agent.archived !== true
81
+ && agent.status !== 'dead'
82
+ && agent.status !== 'stopped';
83
+ }
84
+
85
+ function findActiveAgentClaimingSession(agents, provider, session) {
86
+ const normalizedProvider = normalizeMainPageSessionProvider(provider);
87
+ const sessionId = String((session && (session.id || session.sessionId)) || '').trim();
88
+ if (!normalizedProvider || !isSafeSessionId(sessionId) || !Array.isArray(agents)) return null;
89
+
90
+ const providerHomeId = String((session && session.providerHomeId) || 'default').trim() || 'default';
91
+ const sessionKey = mainPageAgentSessionKey(normalizedProvider, sessionId, providerHomeId);
92
+ const legacySessionKey = mainPageAgentSessionKey(normalizedProvider, sessionId);
93
+ const exactSource = resumedAgentSource(normalizedProvider, sessionId, providerHomeId);
94
+ const legacySource = resumedAgentSource(normalizedProvider, sessionId);
95
+
96
+ return agents.find(agent => {
97
+ if (!isActiveAgent(agent)) return false;
98
+ if (agent.providerSessionTemporary === true) return false;
99
+ if (agent.providerSessionKey === sessionKey || (providerHomeId === 'default' && agent.providerSessionKey === legacySessionKey)) return true;
100
+ if (
101
+ agent.providerSessionProvider === normalizedProvider
102
+ && agent.providerSessionId === sessionId
103
+ && (String(agent.providerHomeId || 'default').trim() || 'default') === providerHomeId
104
+ ) {
105
+ return true;
106
+ }
107
+ return agent.source === exactSource || (providerHomeId === 'default' && agent.source === legacySource);
108
+ }) || null;
109
+ }
110
+
111
+ module.exports = {
112
+ AUTO_RESUME_AGENT_SESSION_PROVIDERS,
113
+ findActiveAgentClaimingSession,
114
+ mainPageAgentSessionFromKey,
115
+ mainPageAgentSessionKey,
116
+ mainPageAgentSessionsToAutoResume,
117
+ mainPageSessionProviderForCommand,
118
+ resumedAgentSource,
119
+ };