@jingyi0605/codingns 0.6.0 → 0.6.5

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 (253) hide show
  1. package/bin/codingns.mjs +240 -2
  2. package/dist/public/assets/AdaptiveButlerPage-CfsUVZKl.js +3 -0
  3. package/dist/public/assets/{App-BZvapsi8.js → App-B9HcTkMT.js} +3 -3
  4. package/dist/public/assets/{BootstrapPage-gHSoa4JN.js → BootstrapPage-BgLdZEKQ.js} +1 -1
  5. package/dist/public/assets/ConversationPage-Cj8go7L0.js +4 -0
  6. package/dist/public/assets/{DesktopDetachPreviewPage-4eMRxiBW.js → DesktopDetachPreviewPage-YCBnyC58.js} +1 -1
  7. package/dist/public/assets/DesktopWindowPage-CrvndE23.js +2 -0
  8. package/dist/public/assets/FileContextPanel-CdC7GGw5.js +1 -0
  9. package/dist/public/assets/GitSidebar-z2SBinQh.js +6 -0
  10. package/dist/public/assets/MobileCreateSessionSheet-Cb2HM-y3.js +1 -0
  11. package/dist/public/assets/{MobileTopHeaderFrame-Bwv8Ovm_.js → MobileTopHeaderFrame-etF2HKlm.js} +1 -1
  12. package/dist/public/assets/MobileWorkspaceSwitcherHeader-CuGJ31kb.js +1 -0
  13. package/dist/public/assets/{RelayConnectEntryPage-D_4YL-YH.js → RelayConnectEntryPage-BB6DbGtP.js} +1 -1
  14. package/dist/public/assets/{ServerSettingsModal-CMSm3BZU.js → ServerSettingsModal-Bl1sacZg.js} +1 -1
  15. package/dist/public/assets/SessionIndexPage-NbF9gJnp.js +1 -0
  16. package/dist/public/assets/SettingsPage-DGsmQpLv.js +1 -0
  17. package/dist/public/assets/TerminalManagerPanel-BOm8Hi_v.js +1 -0
  18. package/dist/public/assets/{TerminalPage-DaooFaJ4.js → TerminalPage-B5JNFU6w.js} +19 -19
  19. package/dist/public/assets/TerminalRuntimeFallbackModal-CM3LRKOJ.js +1 -0
  20. package/dist/public/assets/{ToolFilesPage-CGxBvYG0.js → ToolFilesPage-GSqKQsj_.js} +1 -1
  21. package/dist/public/assets/ToolGitPage-BVFWMMQp.js +1 -0
  22. package/dist/public/assets/ToolProcessesPage-DZ456fYz.js +1 -0
  23. package/dist/public/assets/ToolsHomePage-DsJp0y8A.js +1 -0
  24. package/dist/public/assets/WorkbenchLandingPage-DyPei0e-.js +1 -0
  25. package/dist/public/assets/WorkbenchLayout-DlbgBT3n.js +4 -0
  26. package/dist/public/assets/WorkbenchModal-LNfB69qx.js +1 -0
  27. package/dist/public/assets/WorkbenchShellRoute-BsxumYx5.js +1 -0
  28. package/dist/public/assets/WorkbenchShellRoute-DhQo_0vu.css +1 -0
  29. package/dist/public/assets/WorkspaceDebugDetailPage-CaXj5zVI.js +1 -0
  30. package/dist/public/assets/WorkspaceDetailPage-DOexuuaw.js +1 -0
  31. package/dist/public/assets/WorkspaceHomePage-DkCHNjKD.js +1 -0
  32. package/dist/public/assets/{client-runtime-manager-BZpL17fc.js → client-runtime-manager-6OoYHXGd.js} +1 -1
  33. package/dist/public/assets/{file-tree-icon-Db5LXC8h.js → file-tree-icon-9pt1OStn.js} +1 -1
  34. package/dist/public/assets/index-BwlbvwaA.css +1 -0
  35. package/dist/public/assets/index-DSw-TkQL.js +42 -0
  36. package/dist/public/assets/legna-code-6TqgZ4Ls.png +0 -0
  37. package/dist/public/assets/{login-direct-candidate-resolver-1mxe_Oh8.js → login-direct-candidate-resolver-CLlYtBRq.js} +1 -1
  38. package/dist/public/assets/model-switch-api-C-l8-E1S.js +1 -0
  39. package/dist/public/assets/{preferences-service-DWnzl5a0.js → preferences-service-BCcfYP_d.js} +1 -1
  40. package/dist/public/assets/{relay-entry-C5_Iay0I.js → relay-entry-BmLkMKuq.js} +1 -1
  41. package/dist/public/assets/session-runtime-machine-DgtvREca.js +21 -0
  42. package/dist/public/assets/{terminal-runtime-meta-cdtWVfCm.js → terminal-runtime-meta-0h-75uRy.js} +1 -1
  43. package/dist/public/assets/useRegisteredDebugTemplates-rBVmAqh3.js +1 -0
  44. package/dist/public/index.html +2 -2
  45. package/dist/server/config/env.d.ts +2 -0
  46. package/dist/server/config/env.js +7 -0
  47. package/dist/server/config/env.js.map +1 -1
  48. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +4 -1
  49. package/dist/server/modules/assistant-capability/assistant-capability-service.js +12 -1
  50. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  51. package/dist/server/modules/butler/butler-control-session-service.d.ts +4 -1
  52. package/dist/server/modules/butler/butler-control-session-service.js +17 -1
  53. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  54. package/dist/server/modules/butler/butler-profile-service.d.ts +3 -1
  55. package/dist/server/modules/butler/butler-profile-service.js +16 -4
  56. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  57. package/dist/server/modules/model-switch/cc-switch-adapter.d.ts +7 -0
  58. package/dist/server/modules/model-switch/cc-switch-adapter.js +17 -0
  59. package/dist/server/modules/model-switch/cc-switch-adapter.js.map +1 -1
  60. package/dist/server/modules/opencli/opencli-bridge-skill-service.d.ts +12 -0
  61. package/dist/server/modules/opencli/opencli-bridge-skill-service.js +124 -0
  62. package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -0
  63. package/dist/server/modules/opencli/opencli-catalog-service.d.ts +50 -0
  64. package/dist/server/modules/opencli/opencli-catalog-service.js +345 -0
  65. package/dist/server/modules/opencli/opencli-catalog-service.js.map +1 -0
  66. package/dist/server/modules/opencli/opencli-controller.d.ts +13 -0
  67. package/dist/server/modules/opencli/opencli-controller.js +30 -0
  68. package/dist/server/modules/opencli/opencli-controller.js.map +1 -0
  69. package/dist/server/modules/opencli/opencli-health-service.d.ts +28 -0
  70. package/dist/server/modules/opencli/opencli-health-service.js +106 -0
  71. package/dist/server/modules/opencli/opencli-health-service.js.map +1 -0
  72. package/dist/server/modules/opencli/opencli-install-discovery.d.ts +23 -0
  73. package/dist/server/modules/opencli/opencli-install-discovery.js +130 -0
  74. package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -0
  75. package/dist/server/modules/opencli/opencli-management-service.d.ts +59 -0
  76. package/dist/server/modules/opencli/opencli-management-service.js +152 -0
  77. package/dist/server/modules/opencli/opencli-management-service.js.map +1 -0
  78. package/dist/server/modules/opencli/opencli-runtime-builder.d.ts +11 -0
  79. package/dist/server/modules/opencli/opencli-runtime-builder.js +214 -0
  80. package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -0
  81. package/dist/server/modules/opencli/opencli-runtime-layout.d.ts +3 -0
  82. package/dist/server/modules/opencli/opencli-runtime-layout.js +11 -0
  83. package/dist/server/modules/opencli/opencli-runtime-layout.js.map +1 -0
  84. package/dist/server/modules/opencli/opencli-runtime-profile-service.d.ts +29 -0
  85. package/dist/server/modules/opencli/opencli-runtime-profile-service.js +104 -0
  86. package/dist/server/modules/opencli/opencli-runtime-profile-service.js.map +1 -0
  87. package/dist/server/modules/opencli/opencli-runtime-resolver.d.ts +29 -0
  88. package/dist/server/modules/opencli/opencli-runtime-resolver.js +110 -0
  89. package/dist/server/modules/opencli/opencli-runtime-resolver.js.map +1 -0
  90. package/dist/server/modules/opencli/opencli-session-prompt-service.d.ts +11 -0
  91. package/dist/server/modules/opencli/opencli-session-prompt-service.js +66 -0
  92. package/dist/server/modules/opencli/opencli-session-prompt-service.js.map +1 -0
  93. package/dist/server/modules/parallel-sessions/parallel-session-controller.d.ts +4 -0
  94. package/dist/server/modules/parallel-sessions/parallel-session-controller.js +7 -0
  95. package/dist/server/modules/parallel-sessions/parallel-session-controller.js.map +1 -1
  96. package/dist/server/modules/parallel-sessions/parallel-session-group-service.d.ts +6 -1
  97. package/dist/server/modules/parallel-sessions/parallel-session-group-service.js +36 -2
  98. package/dist/server/modules/parallel-sessions/parallel-session-group-service.js.map +1 -1
  99. package/dist/server/modules/provider/opencode-model-options.d.ts +1 -0
  100. package/dist/server/modules/provider/opencode-model-options.js +54 -12
  101. package/dist/server/modules/provider/opencode-model-options.js.map +1 -1
  102. package/dist/server/modules/provider/provider-catalog-service.d.ts +46 -0
  103. package/dist/server/modules/provider/provider-catalog-service.js +249 -0
  104. package/dist/server/modules/provider/provider-catalog-service.js.map +1 -0
  105. package/dist/server/modules/provider/provider-controller.d.ts +20 -2
  106. package/dist/server/modules/provider/provider-controller.js +65 -5
  107. package/dist/server/modules/provider/provider-controller.js.map +1 -1
  108. package/dist/server/modules/provider/provider-disabled.d.ts +8 -0
  109. package/dist/server/modules/provider/provider-disabled.js +45 -0
  110. package/dist/server/modules/provider/provider-disabled.js.map +1 -0
  111. package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +3 -0
  112. package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
  113. package/dist/server/modules/provider/provider-discovery-helper-process.js +4 -4
  114. package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
  115. package/dist/server/modules/provider/provider-discovery-runtime.d.ts +1 -1
  116. package/dist/server/modules/provider/provider-discovery-runtime.js +17 -9
  117. package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
  118. package/dist/server/modules/sessions/claude-compatible-provider-registry.d.ts +16 -0
  119. package/dist/server/modules/sessions/claude-compatible-provider-registry.js +91 -0
  120. package/dist/server/modules/sessions/claude-compatible-provider-registry.js.map +1 -0
  121. package/dist/server/modules/sessions/claude-runtime-helper-client.d.ts +1 -0
  122. package/dist/server/modules/sessions/claude-runtime-helper-client.js +14 -0
  123. package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -1
  124. package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +1 -0
  125. package/dist/server/modules/sessions/codex-app-server-helper-client.js +10 -0
  126. package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
  127. package/dist/server/modules/sessions/provider-session-delete-cli.js +2 -0
  128. package/dist/server/modules/sessions/provider-session-delete-cli.js.map +1 -1
  129. package/dist/server/modules/sessions/session-controller.d.ts +7 -0
  130. package/dist/server/modules/sessions/session-controller.js +22 -0
  131. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  132. package/dist/server/modules/sessions/session-history-service.d.ts +18 -2
  133. package/dist/server/modules/sessions/session-history-service.js +330 -29
  134. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  135. package/dist/server/modules/sessions/session-live-runtime-router-service.js +9 -4
  136. package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -1
  137. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +22 -5
  138. package/dist/server/modules/sessions/session-live-runtime-service.js +350 -122
  139. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  140. package/dist/server/modules/sessions/session-message-attachment-service.js +2 -2
  141. package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
  142. package/dist/server/modules/sessions/session-permission-request-service.d.ts +5 -2
  143. package/dist/server/modules/sessions/session-permission-request-service.js +26 -27
  144. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  145. package/dist/server/modules/sessions/session-provider-config-service.d.ts +82 -0
  146. package/dist/server/modules/sessions/session-provider-config-service.js +925 -0
  147. package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -0
  148. package/dist/server/modules/sessions/session-provider-error-mapper.d.ts +2 -0
  149. package/dist/server/modules/sessions/session-provider-error-mapper.js +42 -0
  150. package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
  151. package/dist/server/modules/skills/skill-manager-service.d.ts +5 -0
  152. package/dist/server/modules/skills/skill-manager-service.js +26 -0
  153. package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
  154. package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +1 -0
  155. package/dist/server/modules/tasks/task-helper-process-handlers.js +1 -1
  156. package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
  157. package/dist/server/routes/opencli.d.ts +3 -0
  158. package/dist/server/routes/opencli.js +7 -0
  159. package/dist/server/routes/opencli.js.map +1 -0
  160. package/dist/server/routes/providers.js +4 -2
  161. package/dist/server/routes/providers.js.map +1 -1
  162. package/dist/server/server/create-server.d.ts +8 -0
  163. package/dist/server/server/create-server.js +48 -12
  164. package/dist/server/server/create-server.js.map +1 -1
  165. package/dist/server/storage/repositories/opencli-catalog-entry-repository.d.ts +9 -0
  166. package/dist/server/storage/repositories/opencli-catalog-entry-repository.js +85 -0
  167. package/dist/server/storage/repositories/opencli-catalog-entry-repository.js.map +1 -0
  168. package/dist/server/storage/repositories/opencli-provider-repository.d.ts +8 -0
  169. package/dist/server/storage/repositories/opencli-provider-repository.js +88 -0
  170. package/dist/server/storage/repositories/opencli-provider-repository.js.map +1 -0
  171. package/dist/server/storage/repositories/opencli-runtime-profile-repository.d.ts +11 -0
  172. package/dist/server/storage/repositories/opencli-runtime-profile-repository.js +127 -0
  173. package/dist/server/storage/repositories/opencli-runtime-profile-repository.js.map +1 -0
  174. package/dist/server/storage/repositories/provider-control-repository.d.ts +9 -0
  175. package/dist/server/storage/repositories/provider-control-repository.js +51 -0
  176. package/dist/server/storage/repositories/provider-control-repository.js.map +1 -0
  177. package/dist/server/storage/repositories/session-binding-repository.js +44 -5
  178. package/dist/server/storage/repositories/session-binding-repository.js.map +1 -1
  179. package/dist/server/storage/repositories/session-index-repository.js +6 -0
  180. package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
  181. package/dist/server/storage/sqlite/client.js +72 -0
  182. package/dist/server/storage/sqlite/client.js.map +1 -1
  183. package/dist/server/storage/sqlite/schema.sql +71 -0
  184. package/dist/server/types/domain.d.ts +56 -0
  185. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +5 -2
  186. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +40 -8
  187. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +1 -1
  188. package/node_modules/@codingns/session-sync-core/dist/index.d.ts +2 -0
  189. package/node_modules/@codingns/session-sync-core/dist/index.js +2 -0
  190. package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
  191. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +10 -1
  192. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +110 -35
  193. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
  194. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.d.ts +11 -0
  195. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +105 -0
  196. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -0
  197. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +131 -39
  198. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
  199. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.d.ts +9 -0
  200. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js +17 -0
  201. package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js.map +1 -0
  202. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.d.ts +8 -1
  203. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +19 -6
  204. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +1 -1
  205. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +1 -0
  206. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +13 -8
  207. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  208. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +5 -1
  209. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +103 -51
  210. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
  211. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +2 -1
  212. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +41 -21
  213. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  214. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +32 -8
  215. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -1
  216. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +15 -0
  217. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +16 -0
  218. package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -0
  219. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +167 -10
  220. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
  221. package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +2 -0
  222. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
  223. package/node_modules/@codingns/session-sync-core/dist/types.js +1 -1
  224. package/node_modules/@codingns/session-sync-core/dist/types.js.map +1 -1
  225. package/package.json +1 -1
  226. package/dist/public/assets/AdaptiveButlerPage-uFwDdN-F.js +0 -3
  227. package/dist/public/assets/ConversationPage-z3sXtKZ7.js +0 -4
  228. package/dist/public/assets/DesktopWindowPage-CZcoGApB.js +0 -2
  229. package/dist/public/assets/FileContextPanel-C3qex8bb.js +0 -1
  230. package/dist/public/assets/GitSidebar-BK6H16XU.js +0 -6
  231. package/dist/public/assets/MobileCreateSessionSheet-BYfbvK8o.js +0 -1
  232. package/dist/public/assets/MobileSheet-Ckug8hTb.js +0 -1
  233. package/dist/public/assets/MobileWorkspaceSwitcherHeader-RqWrBdn2.js +0 -1
  234. package/dist/public/assets/SessionIndexPage-DuK10DL5.js +0 -1
  235. package/dist/public/assets/SettingsPage-fyD-xaHL.js +0 -1
  236. package/dist/public/assets/TerminalManagerPanel-CCLr1Ypk.js +0 -1
  237. package/dist/public/assets/TerminalRuntimeFallbackModal-aUzjEBwP.js +0 -1
  238. package/dist/public/assets/ToolGitPage-C264yjS9.js +0 -1
  239. package/dist/public/assets/ToolProcessesPage-BOP4A1cb.js +0 -1
  240. package/dist/public/assets/ToolsHomePage-CQxGiKQA.js +0 -1
  241. package/dist/public/assets/WorkbenchLandingPage-CvAY68ca.js +0 -1
  242. package/dist/public/assets/WorkbenchLayout-DGm8Tc5M.js +0 -3
  243. package/dist/public/assets/WorkbenchModal-0tPIIhca.js +0 -1
  244. package/dist/public/assets/WorkbenchShellRoute-BF0nHWOk.css +0 -1
  245. package/dist/public/assets/WorkbenchShellRoute-DBBOsJo9.js +0 -1
  246. package/dist/public/assets/WorkspaceDebugDetailPage-CDerFYd2.js +0 -1
  247. package/dist/public/assets/WorkspaceDetailPage-BlJc1CHE.js +0 -1
  248. package/dist/public/assets/WorkspaceHomePage-BUsKJ3lv.js +0 -1
  249. package/dist/public/assets/default-session-permission-mode-DT4SGiwp.js +0 -1
  250. package/dist/public/assets/index-BZLcEHW3.js +0 -42
  251. package/dist/public/assets/index-BbspQPC2.css +0 -1
  252. package/dist/public/assets/session-runtime-machine-DdLeDqQr.js +0 -17
  253. package/dist/public/assets/useRegisteredDebugTemplates-oFAQNIqh.js +0 -1
package/bin/codingns.mjs CHANGED
@@ -11,6 +11,7 @@ const ASSISTANT_REQUEST_SOURCE_HEADER = "X-CodingNS-Assistant-Source";
11
11
  const ASSISTANT_CLI_REQUEST_SOURCE = "assistant-cli";
12
12
  const PROVIDER_SESSION_DELETE_PROVIDERS = new Set([
13
13
  "claude-code",
14
+ "legna-code",
14
15
  "codex",
15
16
  "opencode",
16
17
  "gemini",
@@ -36,6 +37,9 @@ switch (command) {
36
37
  case "skills":
37
38
  await runSkillsCommand(argv);
38
39
  break;
40
+ case "opencli":
41
+ await runOpenCliCommand(argv);
42
+ break;
39
43
  default:
40
44
  console.error(`[codingns] 不支持的命令:${command}`);
41
45
  printHelp(1);
@@ -1010,6 +1014,64 @@ async function runSkillsCommand(argv) {
1010
1014
  }
1011
1015
  }
1012
1016
 
1017
+ async function runOpenCliCommand(argv) {
1018
+ const [action, ...rest] = argv;
1019
+
1020
+ if (!action || action === "help" || action === "--help" || action === "-h") {
1021
+ printOpenCliHelpTopic(buildOpenCliHelpTopic(rest[0]), 0);
1022
+ }
1023
+
1024
+ if (rest.length > 0 && isHelpToken(rest[0])) {
1025
+ printOpenCliHelpTopic(buildOpenCliHelpTopic(action), 0);
1026
+ }
1027
+
1028
+ switch (action) {
1029
+ case "overview":
1030
+ await printAssistantResponse(await requestOpenCli({
1031
+ method: "GET",
1032
+ path: "/api/opencli/overview",
1033
+ argv: rest,
1034
+ helpTopic: "opencli.overview"
1035
+ }));
1036
+ return;
1037
+ case "catalog":
1038
+ await printAssistantResponse(await requestOpenCli({
1039
+ method: "GET",
1040
+ path: "/api/opencli/catalog",
1041
+ argv: rest,
1042
+ helpTopic: "opencli.catalog"
1043
+ }));
1044
+ return;
1045
+ case "check":
1046
+ await printAssistantResponse(await requestOpenCli({
1047
+ method: "POST",
1048
+ path: "/api/opencli/check",
1049
+ argv: rest,
1050
+ helpTopic: "opencli.check"
1051
+ }));
1052
+ return;
1053
+ case "config":
1054
+ await printAssistantResponse(await requestOpenCli({
1055
+ method: "POST",
1056
+ path: "/api/opencli/config",
1057
+ argv: rest,
1058
+ supportedOptions: ["enabled", "command-id"],
1059
+ repeatableOptions: ["command-id"],
1060
+ helpTopic: "opencli.config"
1061
+ }, (options) => ({
1062
+ enabled: parseBooleanOption(
1063
+ requireOptionValue(options.values.enabled, "enabled"),
1064
+ "enabled"
1065
+ ),
1066
+ enabledCommandIds: readMultiOptionValues(options.values["command-id"])
1067
+ })));
1068
+ return;
1069
+ default:
1070
+ console.error(`[codingns] 不支持的 opencli 子命令:${action}`);
1071
+ printOpenCliHelpTopic("opencli", 1);
1072
+ }
1073
+ }
1074
+
1013
1075
  async function runProviderSessionsCommand(argv) {
1014
1076
  const [action, ...rest] = argv;
1015
1077
 
@@ -1057,6 +1119,7 @@ async function runProviderSessionsCommand(argv) {
1057
1119
  CodexAdapter,
1058
1120
  GeminiAdapter,
1059
1121
  KimiAdapter,
1122
+ LegnaCodeAdapter,
1060
1123
  OpenCodeAdapter
1061
1124
  } = await import("@codingns/session-sync-core");
1062
1125
  const homeDir = os.homedir();
@@ -1067,6 +1130,16 @@ async function runProviderSessionsCommand(argv) {
1067
1130
  path.join(homeDir, ".claude")
1068
1131
  )
1069
1132
  }),
1133
+ new LegnaCodeAdapter({
1134
+ homeDir: readStringOption(
1135
+ process.env.CODINGNS_LEGNA_CODE_HOME,
1136
+ path.join(homeDir, ".legna")
1137
+ ),
1138
+ legacyClaudeHomeDir: readStringOption(
1139
+ process.env.CODINGNS_CLAUDE_CODE_HOME,
1140
+ path.join(homeDir, ".claude")
1141
+ )
1142
+ }),
1070
1143
  new CodexAdapter({
1071
1144
  homeDir: readStringOption(
1072
1145
  process.env.CODINGNS_CODEX_HOME,
@@ -1164,6 +1237,7 @@ async function requestAssistant(command, buildPayload) {
1164
1237
  headers: {
1165
1238
  Authorization: `Bearer ${accessToken}`,
1166
1239
  [ASSISTANT_REQUEST_SOURCE_HEADER]: ASSISTANT_CLI_REQUEST_SOURCE,
1240
+ Connection: "close",
1167
1241
  ...(usesJsonBody ? { "Content-Type": "application/json" } : {})
1168
1242
  },
1169
1243
  body: usesJsonBody ? JSON.stringify(payload ?? {}) : undefined
@@ -1238,6 +1312,7 @@ async function requestSkills(command, buildPayload) {
1238
1312
  method: command.method,
1239
1313
  headers: {
1240
1314
  Authorization: `Bearer ${accessToken}`,
1315
+ Connection: "close",
1241
1316
  ...(command.method === "POST" ? { "Content-Type": "application/json" } : {})
1242
1317
  },
1243
1318
  body: command.method === "POST" ? JSON.stringify(payload ?? {}) : undefined
@@ -1271,6 +1346,81 @@ async function requestSkills(command, buildPayload) {
1271
1346
  return responseBody ?? rawBody;
1272
1347
  }
1273
1348
 
1349
+ async function requestOpenCli(command, buildPayload) {
1350
+ const options = parseArgs(command.argv, {
1351
+ supportedOptions: [
1352
+ "base-url",
1353
+ "token",
1354
+ ...(command.supportedOptions ?? [])
1355
+ ],
1356
+ repeatableOptions: command.repeatableOptions ?? []
1357
+ });
1358
+
1359
+ if (options.help) {
1360
+ printOpenCliHelpTopic(command.helpTopic ?? "opencli", 0);
1361
+ }
1362
+
1363
+ if (options.errors.length > 0) {
1364
+ for (const error of options.errors) {
1365
+ console.error(`[codingns] ${error}`);
1366
+ }
1367
+ printOpenCliHelpTopic(command.helpTopic ?? "opencli", 1);
1368
+ }
1369
+
1370
+ const baseUrl = resolveAssistantBaseUrl(options.values["base-url"]);
1371
+ const accessToken = resolveAssistantAccessToken(options.values.token);
1372
+ const url = new URL(command.path, appendTrailingSlash(baseUrl));
1373
+ const payload = buildPayload ? buildPayload(options) : null;
1374
+
1375
+ if (command.method === "GET" && payload) {
1376
+ for (const [key, value] of Object.entries(payload)) {
1377
+ if (typeof value === "string" && value.length > 0) {
1378
+ url.searchParams.set(key, value);
1379
+ }
1380
+ }
1381
+ }
1382
+
1383
+ let response;
1384
+
1385
+ try {
1386
+ response = await fetch(url, {
1387
+ method: command.method,
1388
+ headers: {
1389
+ Authorization: `Bearer ${accessToken}`,
1390
+ Connection: "close",
1391
+ ...(command.method === "POST" ? { "Content-Type": "application/json" } : {})
1392
+ },
1393
+ body: command.method === "POST" ? JSON.stringify(payload ?? {}) : undefined
1394
+ });
1395
+ } catch (error) {
1396
+ const message = error instanceof Error ? error.message : "未知网络错误";
1397
+ console.error(JSON.stringify({
1398
+ ok: false,
1399
+ detail: `OpenCLI 管理请求失败:${message}`,
1400
+ target: url.toString()
1401
+ }, null, 2));
1402
+ process.exit(1);
1403
+ }
1404
+
1405
+ const rawBody = await response.text();
1406
+ const responseBody = tryParseJson(rawBody);
1407
+
1408
+ if (!response.ok) {
1409
+ const detail = typeof responseBody?.detail === "string"
1410
+ ? responseBody.detail
1411
+ : `HTTP ${response.status}`;
1412
+ console.error(JSON.stringify({
1413
+ ok: false,
1414
+ status: response.status,
1415
+ detail,
1416
+ body: responseBody ?? rawBody
1417
+ }, null, 2));
1418
+ process.exit(1);
1419
+ }
1420
+
1421
+ return responseBody ?? rawBody;
1422
+ }
1423
+
1274
1424
  async function printAssistantResponse(payload) {
1275
1425
  if (typeof payload === "string") {
1276
1426
  console.log(payload);
@@ -1650,6 +1800,7 @@ codingns 用法:
1650
1800
  codingns assistant <group> <action> [options]
1651
1801
  codingns provider-sessions <action> [options]
1652
1802
  codingns skills <action> [options]
1803
+ codingns opencli <action> [options]
1653
1804
 
1654
1805
  说明:
1655
1806
 
@@ -1678,6 +1829,12 @@ skills 例子:
1678
1829
  codingns skills add --source ./my-skill --target codex --token <token>
1679
1830
  codingns skills sync <skillId> --target gemini --token <token>
1680
1831
 
1832
+ opencli 例子:
1833
+
1834
+ codingns opencli overview --token <token>
1835
+ codingns opencli check --token <token>
1836
+ codingns opencli config --enabled true --command-id hackernews/top --token <token>
1837
+
1681
1838
  provider-sessions 例子:
1682
1839
 
1683
1840
  codingns provider-sessions delete --provider codex --provider-session-id <id> --raw-store-ref <ref>
@@ -1716,6 +1873,18 @@ function printSkillsHelpTopic(topic, exitCode) {
1716
1873
  process.exit(exitCode);
1717
1874
  }
1718
1875
 
1876
+ function printOpenCliHelpTopic(topic, exitCode) {
1877
+ const output = getOpenCliHelpText(topic);
1878
+
1879
+ if (exitCode === 0) {
1880
+ console.log(output);
1881
+ } else {
1882
+ console.error(output);
1883
+ }
1884
+
1885
+ process.exit(exitCode);
1886
+ }
1887
+
1719
1888
  function printProviderSessionsHelpTopic(topic, exitCode) {
1720
1889
  const output = getProviderSessionsHelpText(topic);
1721
1890
 
@@ -2560,6 +2729,66 @@ codingns assistant 用法:
2560
2729
  }
2561
2730
  }
2562
2731
 
2732
+ function getOpenCliHelpText(topic) {
2733
+ switch (topic) {
2734
+ case "opencli.overview":
2735
+ return `
2736
+ codingns opencli overview
2737
+
2738
+ 用途:
2739
+ 查看 OpenCLI provider 的当前状态、目录统计和当前生效运行时。
2740
+
2741
+ 用法:
2742
+ codingns opencli overview --token <token>
2743
+ `.trim();
2744
+ case "opencli.catalog":
2745
+ return `
2746
+ codingns opencli catalog
2747
+
2748
+ 用途:
2749
+ 查看完整 OpenCLI 目录,包括站点分组和每条命令的启用状态。
2750
+
2751
+ 用法:
2752
+ codingns opencli catalog --token <token>
2753
+ `.trim();
2754
+ case "opencli.check":
2755
+ return `
2756
+ codingns opencli check
2757
+
2758
+ 用途:
2759
+ 重新检查 OpenCLI 安装、健康状态和目录缓存。
2760
+
2761
+ 用法:
2762
+ codingns opencli check --token <token>
2763
+ `.trim();
2764
+ case "opencli.config":
2765
+ return `
2766
+ codingns opencli config
2767
+
2768
+ 用途:
2769
+ 保存 OpenCLI 总开关和启用命令列表,并触发裁剪运行时重建。
2770
+
2771
+ 用法:
2772
+ codingns opencli config --enabled true|false [--command-id <site/name>] [--command-id <site/name>] --token <token>
2773
+ `.trim();
2774
+ default:
2775
+ return `
2776
+ codingns opencli 用法:
2777
+
2778
+ codingns opencli overview --token <token>
2779
+ codingns opencli catalog --token <token>
2780
+ codingns opencli check --token <token>
2781
+ codingns opencli config --enabled true|false [--command-id <site/name>] [--command-id <site/name>] --token <token>
2782
+
2783
+ 环境变量:
2784
+
2785
+ CODINGNS_BASE_URL 默认 Host 地址,未传时默认 http://127.0.0.1:3002
2786
+ CODINGNS_ACCESS_TOKEN 默认 Bearer token
2787
+ CODINGNS_AUTH_FILE 可选认证文件,支持读取 apiBaseUrl/accessToken
2788
+ `.trim();
2789
+ }
2790
+ }
2791
+
2563
2792
  function getProviderSessionsHelpText(topic) {
2564
2793
  switch (topic) {
2565
2794
  case "provider-sessions.delete":
@@ -2570,17 +2799,18 @@ codingns provider-sessions delete
2570
2799
  直接删除底层 provider 会话,不经过项目会话索引。适合给 Host 或脚本层做真实删除调用。
2571
2800
 
2572
2801
  用法:
2573
- codingns provider-sessions delete --provider <claude-code|codex|opencode|gemini|kimi> --provider-session-id <id> --raw-store-ref <ref>
2802
+ codingns provider-sessions delete --provider <claude-code|legna-code|codex|opencode|gemini|kimi> --provider-session-id <id> --raw-store-ref <ref>
2574
2803
  `.trim();
2575
2804
  default:
2576
2805
  return `
2577
2806
  codingns provider-sessions 用法:
2578
2807
 
2579
- codingns provider-sessions delete --provider <claude-code|codex|opencode|gemini|kimi> --provider-session-id <id> --raw-store-ref <ref>
2808
+ codingns provider-sessions delete --provider <claude-code|legna-code|codex|opencode|gemini|kimi> --provider-session-id <id> --raw-store-ref <ref>
2580
2809
 
2581
2810
  环境变量:
2582
2811
 
2583
2812
  CODINGNS_CLAUDE_CODE_HOME Claude Code 数据目录,默认 ~/.claude
2813
+ CODINGNS_LEGNA_CODE_HOME Legna Code 数据目录,默认 ~/.legna
2584
2814
  CODINGNS_CODEX_HOME Codex 数据目录,默认 ~/.codex
2585
2815
  CODINGNS_GEMINI_HOME Gemini 数据目录,默认 ~/.gemini
2586
2816
  CODINGNS_GEMINI_COMMAND Gemini CLI 路径,默认 gemini
@@ -2812,6 +3042,14 @@ function buildSkillsHelpTopic(action) {
2812
3042
  return `skills.${action}`;
2813
3043
  }
2814
3044
 
3045
+ function buildOpenCliHelpTopic(action) {
3046
+ if (!action || action === "--help" || action === "-h") {
3047
+ return "opencli";
3048
+ }
3049
+
3050
+ return `opencli.${action}`;
3051
+ }
3052
+
2815
3053
  function buildProviderSessionsHelpTopic(action) {
2816
3054
  if (!action || action === "--help" || action === "-h") {
2817
3055
  return "provider-sessions";