@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.
- package/bin/codingns.mjs +240 -2
- package/dist/public/assets/AdaptiveButlerPage-CfsUVZKl.js +3 -0
- package/dist/public/assets/{App-BZvapsi8.js → App-B9HcTkMT.js} +3 -3
- package/dist/public/assets/{BootstrapPage-gHSoa4JN.js → BootstrapPage-BgLdZEKQ.js} +1 -1
- package/dist/public/assets/ConversationPage-Cj8go7L0.js +4 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-4eMRxiBW.js → DesktopDetachPreviewPage-YCBnyC58.js} +1 -1
- package/dist/public/assets/DesktopWindowPage-CrvndE23.js +2 -0
- package/dist/public/assets/FileContextPanel-CdC7GGw5.js +1 -0
- package/dist/public/assets/GitSidebar-z2SBinQh.js +6 -0
- package/dist/public/assets/MobileCreateSessionSheet-Cb2HM-y3.js +1 -0
- package/dist/public/assets/{MobileTopHeaderFrame-Bwv8Ovm_.js → MobileTopHeaderFrame-etF2HKlm.js} +1 -1
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-CuGJ31kb.js +1 -0
- package/dist/public/assets/{RelayConnectEntryPage-D_4YL-YH.js → RelayConnectEntryPage-BB6DbGtP.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-CMSm3BZU.js → ServerSettingsModal-Bl1sacZg.js} +1 -1
- package/dist/public/assets/SessionIndexPage-NbF9gJnp.js +1 -0
- package/dist/public/assets/SettingsPage-DGsmQpLv.js +1 -0
- package/dist/public/assets/TerminalManagerPanel-BOm8Hi_v.js +1 -0
- package/dist/public/assets/{TerminalPage-DaooFaJ4.js → TerminalPage-B5JNFU6w.js} +19 -19
- package/dist/public/assets/TerminalRuntimeFallbackModal-CM3LRKOJ.js +1 -0
- package/dist/public/assets/{ToolFilesPage-CGxBvYG0.js → ToolFilesPage-GSqKQsj_.js} +1 -1
- package/dist/public/assets/ToolGitPage-BVFWMMQp.js +1 -0
- package/dist/public/assets/ToolProcessesPage-DZ456fYz.js +1 -0
- package/dist/public/assets/ToolsHomePage-DsJp0y8A.js +1 -0
- package/dist/public/assets/WorkbenchLandingPage-DyPei0e-.js +1 -0
- package/dist/public/assets/WorkbenchLayout-DlbgBT3n.js +4 -0
- package/dist/public/assets/WorkbenchModal-LNfB69qx.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-BsxumYx5.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-DhQo_0vu.css +1 -0
- package/dist/public/assets/WorkspaceDebugDetailPage-CaXj5zVI.js +1 -0
- package/dist/public/assets/WorkspaceDetailPage-DOexuuaw.js +1 -0
- package/dist/public/assets/WorkspaceHomePage-DkCHNjKD.js +1 -0
- package/dist/public/assets/{client-runtime-manager-BZpL17fc.js → client-runtime-manager-6OoYHXGd.js} +1 -1
- package/dist/public/assets/{file-tree-icon-Db5LXC8h.js → file-tree-icon-9pt1OStn.js} +1 -1
- package/dist/public/assets/index-BwlbvwaA.css +1 -0
- package/dist/public/assets/index-DSw-TkQL.js +42 -0
- package/dist/public/assets/legna-code-6TqgZ4Ls.png +0 -0
- package/dist/public/assets/{login-direct-candidate-resolver-1mxe_Oh8.js → login-direct-candidate-resolver-CLlYtBRq.js} +1 -1
- package/dist/public/assets/model-switch-api-C-l8-E1S.js +1 -0
- package/dist/public/assets/{preferences-service-DWnzl5a0.js → preferences-service-BCcfYP_d.js} +1 -1
- package/dist/public/assets/{relay-entry-C5_Iay0I.js → relay-entry-BmLkMKuq.js} +1 -1
- package/dist/public/assets/session-runtime-machine-DgtvREca.js +21 -0
- package/dist/public/assets/{terminal-runtime-meta-cdtWVfCm.js → terminal-runtime-meta-0h-75uRy.js} +1 -1
- package/dist/public/assets/useRegisteredDebugTemplates-rBVmAqh3.js +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.d.ts +2 -0
- package/dist/server/config/env.js +7 -0
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +4 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +12 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +4 -1
- package/dist/server/modules/butler/butler-control-session-service.js +17 -1
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.d.ts +3 -1
- package/dist/server/modules/butler/butler-profile-service.js +16 -4
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/model-switch/cc-switch-adapter.d.ts +7 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js +17 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js.map +1 -1
- package/dist/server/modules/opencli/opencli-bridge-skill-service.d.ts +12 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js +124 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-catalog-service.d.ts +50 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js +345 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-controller.d.ts +13 -0
- package/dist/server/modules/opencli/opencli-controller.js +30 -0
- package/dist/server/modules/opencli/opencli-controller.js.map +1 -0
- package/dist/server/modules/opencli/opencli-health-service.d.ts +28 -0
- package/dist/server/modules/opencli/opencli-health-service.js +106 -0
- package/dist/server/modules/opencli/opencli-health-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-install-discovery.d.ts +23 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js +130 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -0
- package/dist/server/modules/opencli/opencli-management-service.d.ts +59 -0
- package/dist/server/modules/opencli/opencli-management-service.js +152 -0
- package/dist/server/modules/opencli/opencli-management-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js +214 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.d.ts +3 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js +11 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js +104 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js +110 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js.map +1 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js +66 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js.map +1 -0
- package/dist/server/modules/parallel-sessions/parallel-session-controller.d.ts +4 -0
- package/dist/server/modules/parallel-sessions/parallel-session-controller.js +7 -0
- package/dist/server/modules/parallel-sessions/parallel-session-controller.js.map +1 -1
- package/dist/server/modules/parallel-sessions/parallel-session-group-service.d.ts +6 -1
- package/dist/server/modules/parallel-sessions/parallel-session-group-service.js +36 -2
- package/dist/server/modules/parallel-sessions/parallel-session-group-service.js.map +1 -1
- package/dist/server/modules/provider/opencode-model-options.d.ts +1 -0
- package/dist/server/modules/provider/opencode-model-options.js +54 -12
- package/dist/server/modules/provider/opencode-model-options.js.map +1 -1
- package/dist/server/modules/provider/provider-catalog-service.d.ts +46 -0
- package/dist/server/modules/provider/provider-catalog-service.js +249 -0
- package/dist/server/modules/provider/provider-catalog-service.js.map +1 -0
- package/dist/server/modules/provider/provider-controller.d.ts +20 -2
- package/dist/server/modules/provider/provider-controller.js +65 -5
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-disabled.d.ts +8 -0
- package/dist/server/modules/provider/provider-disabled.js +45 -0
- package/dist/server/modules/provider/provider-disabled.js.map +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +3 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +4 -4
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.d.ts +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js +17 -9
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
- package/dist/server/modules/sessions/claude-compatible-provider-registry.d.ts +16 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js +91 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js.map +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.d.ts +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js +14 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +1 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +10 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/provider-session-delete-cli.js +2 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.d.ts +7 -0
- package/dist/server/modules/sessions/session-controller.js +22 -0
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +18 -2
- package/dist/server/modules/sessions/session-history-service.js +330 -29
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-router-service.js +9 -4
- package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +22 -5
- package/dist/server/modules/sessions/session-live-runtime-service.js +350 -122
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-attachment-service.js +2 -2
- package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +5 -2
- package/dist/server/modules/sessions/session-permission-request-service.js +26 -27
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-config-service.d.ts +82 -0
- package/dist/server/modules/sessions/session-provider-config-service.js +925 -0
- package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.d.ts +2 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js +42 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/skills/skill-manager-service.d.ts +5 -0
- package/dist/server/modules/skills/skill-manager-service.js +26 -0
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +1 -0
- package/dist/server/modules/tasks/task-helper-process-handlers.js +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
- package/dist/server/routes/opencli.d.ts +3 -0
- package/dist/server/routes/opencli.js +7 -0
- package/dist/server/routes/opencli.js.map +1 -0
- package/dist/server/routes/providers.js +4 -2
- package/dist/server/routes/providers.js.map +1 -1
- package/dist/server/server/create-server.d.ts +8 -0
- package/dist/server/server/create-server.js +48 -12
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.d.ts +9 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js +85 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-provider-repository.d.ts +8 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js +88 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.d.ts +11 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js +127 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js.map +1 -0
- package/dist/server/storage/repositories/provider-control-repository.d.ts +9 -0
- package/dist/server/storage/repositories/provider-control-repository.js +51 -0
- package/dist/server/storage/repositories/provider-control-repository.js.map +1 -0
- package/dist/server/storage/repositories/session-binding-repository.js +44 -5
- package/dist/server/storage/repositories/session-binding-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-index-repository.js +6 -0
- package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +72 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +71 -0
- package/dist/server/types/domain.d.ts +56 -0
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +5 -2
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +40 -8
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/index.d.ts +2 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js +2 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +10 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +110 -35
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.d.ts +11 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +105 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +131 -39
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.d.ts +9 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js +17 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.d.ts +8 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +19 -6
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +13 -8
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +103 -51
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +2 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +41 -21
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +32 -8
- package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +15 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +16 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +167 -10
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +2 -0
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.js +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/AdaptiveButlerPage-uFwDdN-F.js +0 -3
- package/dist/public/assets/ConversationPage-z3sXtKZ7.js +0 -4
- package/dist/public/assets/DesktopWindowPage-CZcoGApB.js +0 -2
- package/dist/public/assets/FileContextPanel-C3qex8bb.js +0 -1
- package/dist/public/assets/GitSidebar-BK6H16XU.js +0 -6
- package/dist/public/assets/MobileCreateSessionSheet-BYfbvK8o.js +0 -1
- package/dist/public/assets/MobileSheet-Ckug8hTb.js +0 -1
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-RqWrBdn2.js +0 -1
- package/dist/public/assets/SessionIndexPage-DuK10DL5.js +0 -1
- package/dist/public/assets/SettingsPage-fyD-xaHL.js +0 -1
- package/dist/public/assets/TerminalManagerPanel-CCLr1Ypk.js +0 -1
- package/dist/public/assets/TerminalRuntimeFallbackModal-aUzjEBwP.js +0 -1
- package/dist/public/assets/ToolGitPage-C264yjS9.js +0 -1
- package/dist/public/assets/ToolProcessesPage-BOP4A1cb.js +0 -1
- package/dist/public/assets/ToolsHomePage-CQxGiKQA.js +0 -1
- package/dist/public/assets/WorkbenchLandingPage-CvAY68ca.js +0 -1
- package/dist/public/assets/WorkbenchLayout-DGm8Tc5M.js +0 -3
- package/dist/public/assets/WorkbenchModal-0tPIIhca.js +0 -1
- package/dist/public/assets/WorkbenchShellRoute-BF0nHWOk.css +0 -1
- package/dist/public/assets/WorkbenchShellRoute-DBBOsJo9.js +0 -1
- package/dist/public/assets/WorkspaceDebugDetailPage-CDerFYd2.js +0 -1
- package/dist/public/assets/WorkspaceDetailPage-BlJc1CHE.js +0 -1
- package/dist/public/assets/WorkspaceHomePage-BUsKJ3lv.js +0 -1
- package/dist/public/assets/default-session-permission-mode-DT4SGiwp.js +0 -1
- package/dist/public/assets/index-BZLcEHW3.js +0 -42
- package/dist/public/assets/index-BbspQPC2.css +0 -1
- package/dist/public/assets/session-runtime-machine-DdLeDqQr.js +0 -17
- 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";
|