@jingyi0605/codingns 0.3.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/bin/codingns.mjs +913 -1
- package/dist/public/assets/AdaptiveButlerPage-B153lk5H.css +1 -0
- package/dist/public/assets/AdaptiveButlerPage-R-XZw7pd.js +3 -0
- package/dist/public/assets/App-DUAg5urj.css +1 -0
- package/dist/public/assets/App-DkvE5EyM.js +30 -0
- package/dist/public/assets/BootstrapPage-Vu5oEJ8z.js +1 -0
- package/dist/public/assets/ConversationPage-Cjpg6g0J.js +2 -0
- package/dist/public/assets/DesktopDetachPreviewPage-BgeEqbc5.js +1 -0
- package/dist/public/assets/DesktopWindowPage-1WelvxdH.js +2 -0
- package/dist/public/assets/FileContextPanel-D_ghXJuW.js +1 -0
- package/dist/public/assets/GitSidebar-D9f9Jxwr.js +6 -0
- package/dist/public/assets/MobileCreateSessionSheet-DLq5qPkx.js +1 -0
- package/dist/public/assets/MobileSheet-DLg-gX1t.js +1 -0
- package/dist/public/assets/MobileTopHeaderFrame-DArgZI7L.js +1 -0
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-0ywJKfBQ.js +1 -0
- package/dist/public/assets/ServerSettingsModal-izoYMx9U.js +1 -0
- package/dist/public/assets/SessionIndexPage-C5aG8FIv.js +1 -0
- package/dist/public/assets/SettingsPage-HJIC-P-4.js +1 -0
- package/dist/public/assets/TerminalManagerPanel-DpyUTo9k.js +1 -0
- package/dist/public/assets/{TerminalPage-D00S4KM6.js → TerminalPage-CtKXIU0h.js} +19 -19
- package/dist/public/assets/TerminalRuntimeFallbackModal-CRhOQOsT.js +1 -0
- package/dist/public/assets/ToolFilesPage-DcYPsS-e.js +1 -0
- package/dist/public/assets/ToolGitPage-CsPl89ty.js +1 -0
- package/dist/public/assets/ToolProcessesPage-D0dvR8xK.js +1 -0
- package/dist/public/assets/ToolsHomePage-4fP-KRiv.js +1 -0
- package/dist/public/assets/WorkbenchLandingPage-kvlfyxRo.js +1 -0
- package/dist/public/assets/WorkbenchLayout-ByFw4eeu.js +3 -0
- package/dist/public/assets/WorkbenchModal-Ctob14VR.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-BUITtdAg.css +1 -0
- package/dist/public/assets/WorkbenchShellRoute-Kw7JEZI3.js +1 -0
- package/dist/public/assets/WorkspaceDebugDetailPage-Com5kEXJ.js +1 -0
- package/dist/public/assets/WorkspaceDetailPage-D0Lrx4Uz.js +1 -0
- package/dist/public/assets/WorkspaceHomePage-wR8d3aP9.js +1 -0
- package/dist/public/assets/butler-records-events-DgWCG364.js +1 -0
- package/dist/public/assets/default-session-permission-mode-CcGwR4Kk.js +1 -0
- package/dist/public/assets/event-DvH9tcej.js +1 -0
- package/dist/public/assets/file-tree-icon-UFVoVzhM.js +31 -0
- package/dist/public/assets/index-Byp9hJ0c.js +42 -0
- package/dist/public/assets/index-_52jxu4a.css +1 -0
- package/dist/public/assets/preferences-service-KIYeE2gk.js +1 -0
- package/dist/public/assets/session-runtime-machine-0KNSSPp5.js +17 -0
- package/dist/public/assets/styles-BWPBZvze.css +1 -0
- package/dist/public/assets/styles-CSUx5LGe.js +1 -0
- package/dist/public/assets/terminal-runtime-meta-AWXJpN4r.js +1 -0
- package/dist/public/assets/useRegisteredDebugTemplates-DBDRdptr.js +1 -0
- package/dist/public/assets/window-BWqRixxq.js +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/middlewares/auth-guard.d.ts +4 -0
- package/dist/server/middlewares/auth-guard.js +42 -4
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +234 -0
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js +365 -0
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +262 -2
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +737 -3
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/auth/auth-controller.d.ts +11 -1
- package/dist/server/modules/auth/auth-controller.js +61 -2
- package/dist/server/modules/auth/auth-controller.js.map +1 -1
- package/dist/server/modules/auth/auth-device-display-name.d.ts +10 -0
- package/dist/server/modules/auth/auth-device-display-name.js +190 -0
- package/dist/server/modules/auth/auth-device-display-name.js.map +1 -0
- package/dist/server/modules/auth/auth-service.d.ts +80 -5
- package/dist/server/modules/auth/auth-service.js +333 -23
- package/dist/server/modules/auth/auth-service.js.map +1 -1
- package/dist/server/modules/butler/assistant-automation-service.d.ts +112 -0
- package/dist/server/modules/butler/assistant-automation-service.js +832 -0
- package/dist/server/modules/butler/assistant-automation-service.js.map +1 -0
- package/dist/server/modules/butler/assistant-automation-trigger.d.ts +94 -0
- package/dist/server/modules/butler/assistant-automation-trigger.js +400 -0
- package/dist/server/modules/butler/assistant-automation-trigger.js.map +1 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.d.ts +32 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js +93 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js.map +1 -0
- package/dist/server/modules/butler/assistant-sandbox-service.d.ts +69 -0
- package/dist/server/modules/butler/assistant-sandbox-service.js +399 -0
- package/dist/server/modules/butler/assistant-sandbox-service.js.map +1 -0
- package/dist/server/modules/butler/butler-action-context-service.d.ts +4 -1
- package/dist/server/modules/butler/butler-action-context-service.js +8 -2
- package/dist/server/modules/butler/butler-action-context-service.js.map +1 -1
- package/dist/server/modules/butler/butler-auth-service.js +7 -2
- package/dist/server/modules/butler/butler-auth-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +11 -1
- package/dist/server/modules/butler/butler-control-session-service.js +173 -40
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-timer-scheduler.d.ts +32 -0
- package/dist/server/modules/butler/butler-control-timer-scheduler.js +93 -0
- package/dist/server/modules/butler/butler-control-timer-scheduler.js.map +1 -0
- package/dist/server/modules/butler/butler-control-timer-service.d.ts +42 -0
- package/dist/server/modules/butler/butler-control-timer-service.js +132 -0
- package/dist/server/modules/butler/butler-control-timer-service.js.map +1 -0
- package/dist/server/modules/butler/butler-controller.d.ts +42 -2
- package/dist/server/modules/butler/butler-controller.js +79 -12
- package/dist/server/modules/butler/butler-controller.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.d.ts +2 -1
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js +27 -25
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-service.d.ts +41 -5
- package/dist/server/modules/butler/butler-follow-up-service.js +568 -371
- package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.d.ts +4 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.js +18 -4
- package/dist/server/modules/butler/butler-inbox-analysis-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-service.js +1 -0
- package/dist/server/modules/butler/butler-inbox-service.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.js +2 -5
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/butler/butler-project-service.d.ts +3 -1
- package/dist/server/modules/butler/butler-project-service.js +7 -1
- package/dist/server/modules/butler/butler-project-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.d.ts +5 -1
- package/dist/server/modules/butler/butler-session-service.js +26 -1
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-summary-service.js +2 -1
- package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
- package/dist/server/modules/butler/butler-workspace-context.d.ts +4 -1
- package/dist/server/modules/butler/butler-workspace-context.js +204 -58
- package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
- package/dist/server/modules/butler/patrol-execution-service.js +2 -1
- package/dist/server/modules/butler/patrol-execution-service.js.map +1 -1
- package/dist/server/modules/butler/provider-adapter-registry.d.ts +3 -0
- package/dist/server/modules/butler/provider-adapter-registry.js +18 -1
- package/dist/server/modules/butler/provider-adapter-registry.js.map +1 -1
- package/dist/server/modules/butler/verification-run-service.d.ts +9 -2
- package/dist/server/modules/butler/verification-run-service.js +188 -34
- package/dist/server/modules/butler/verification-run-service.js.map +1 -1
- package/dist/server/modules/debug-target/debug-target-controller.js +1 -1
- package/dist/server/modules/debug-target/debug-target-controller.js.map +1 -1
- package/dist/server/modules/debug-target/debug-target-service.d.ts +7 -2
- package/dist/server/modules/debug-target/debug-target-service.js +563 -100
- package/dist/server/modules/debug-target/debug-target-service.js.map +1 -1
- package/dist/server/modules/git/git-command-helper-client.d.ts +1 -0
- package/dist/server/modules/git/git-command-helper-client.js +19 -26
- package/dist/server/modules/git/git-command-helper-client.js.map +1 -1
- package/dist/server/modules/git/git-command-runner.js +19 -1
- package/dist/server/modules/git/git-command-runner.js.map +1 -1
- package/dist/server/modules/preferences/profile-service.d.ts +3 -1
- package/dist/server/modules/preferences/profile-service.js +74 -3
- package/dist/server/modules/preferences/profile-service.js.map +1 -1
- package/dist/server/modules/provider/provider-controller.d.ts +1 -1
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +5 -3
- package/dist/server/modules/provider/provider-discovery-helper-client.js +129 -43
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +44 -0
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js +83 -3
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.d.ts +10 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.js +48 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.js.map +1 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.d.ts +48 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js +11 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js.map +1 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.d.ts +74 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js +302 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.d.ts +33 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.js +57 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.d.ts +9 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.js +25 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.d.ts +18 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js +230 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.d.ts +41 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js +443 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.d.ts +111 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +771 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js +23 -1
- 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 +2 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +78 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +84 -2
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/provider-session-delete-cli.d.ts +15 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js +148 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js.map +1 -0
- package/dist/server/modules/sessions/session-controller.d.ts +4 -1
- package/dist/server/modules/sessions/session-controller.js +4 -0
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +24 -1
- package/dist/server/modules/sessions/session-history-service.js +401 -42
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-router-service.d.ts +25 -0
- package/dist/server/modules/sessions/session-live-runtime-router-service.js +42 -0
- package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -0
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +6 -0
- package/dist/server/modules/sessions/session-live-runtime-service.js +130 -28
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-attachment-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-message-attachment-service.js +22 -0
- package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-origin-utils.d.ts +12 -0
- package/dist/server/modules/sessions/session-message-origin-utils.js +45 -0
- package/dist/server/modules/sessions/session-message-origin-utils.js.map +1 -0
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-permission-request-service.js +367 -5
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +32 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-usage-guard-service.d.ts +37 -0
- package/dist/server/modules/sessions/session-provider-usage-guard-service.js +179 -0
- package/dist/server/modules/sessions/session-provider-usage-guard-service.js.map +1 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.d.ts +17 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.js +465 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.js.map +1 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.d.ts +8 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.js +26 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.js.map +1 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.d.ts +9 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.js +55 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.js.map +1 -0
- package/dist/server/modules/skills/builtin-skill-service.js +1 -6
- package/dist/server/modules/skills/builtin-skill-service.js.map +1 -1
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +19 -12
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +9 -3
- package/dist/server/modules/skills/skill-controller.d.ts +2 -2
- package/dist/server/modules/skills/skill-controller.js +9 -1
- package/dist/server/modules/skills/skill-controller.js.map +1 -1
- package/dist/server/modules/skills/skill-manager-service.d.ts +26 -1
- package/dist/server/modules/skills/skill-manager-service.js +346 -90
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/skills/skill-name-policy.d.ts +2 -0
- package/dist/server/modules/skills/skill-name-policy.js +10 -0
- package/dist/server/modules/skills/skill-name-policy.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-service.d.ts +2 -0
- package/dist/server/modules/tailscale/tailscale-service.js +21 -8
- package/dist/server/modules/tailscale/tailscale-service.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-client.d.ts +5 -2
- package/dist/server/modules/tasks/task-helper-client.js +118 -38
- package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process.js +94 -3
- package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +6 -0
- package/dist/server/modules/tasks/task-types.js +7 -1
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/modules/terminal/command-template-service.d.ts +9 -0
- package/dist/server/modules/terminal/command-template-service.js +87 -5
- package/dist/server/modules/terminal/command-template-service.js.map +1 -1
- package/dist/server/modules/terminal/template-reverse-proxy-service.js +71 -3
- package/dist/server/modules/terminal/template-reverse-proxy-service.js.map +1 -1
- package/dist/server/modules/terminal/terminal-controller.d.ts +3 -0
- package/dist/server/modules/terminal/terminal-controller.js +41 -0
- package/dist/server/modules/terminal/terminal-controller.js.map +1 -1
- package/dist/server/modules/workbench/workbench-service.d.ts +3 -0
- package/dist/server/modules/workbench/workbench-service.js +4 -3
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workbench/workspace-file-watcher.d.ts +14 -6
- package/dist/server/modules/workbench/workspace-file-watcher.js +267 -57
- package/dist/server/modules/workbench/workspace-file-watcher.js.map +1 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +2 -0
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +32 -3
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
- package/dist/server/modules/worktree/worktree-manager.d.ts +9 -1
- package/dist/server/modules/worktree/worktree-manager.js +9 -1
- package/dist/server/modules/worktree/worktree-manager.js.map +1 -1
- package/dist/server/routes/assistant.js +49 -0
- package/dist/server/routes/assistant.js.map +1 -1
- package/dist/server/routes/auth.js +4 -0
- package/dist/server/routes/auth.js.map +1 -1
- package/dist/server/routes/butler.js +5 -0
- package/dist/server/routes/butler.js.map +1 -1
- package/dist/server/routes/sessions.js +1 -0
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/routes/system.d.ts +2 -1
- package/dist/server/routes/system.js +13 -1
- package/dist/server/routes/system.js.map +1 -1
- package/dist/server/server/create-server.d.ts +18 -0
- package/dist/server/server/create-server.js +113 -20
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/utils/tokens.d.ts +3 -1
- package/dist/server/shared/utils/tokens.js +9 -2
- package/dist/server/shared/utils/tokens.js.map +1 -1
- package/dist/server/storage/repositories/assistant-automation-run-repository.d.ts +12 -0
- package/dist/server/storage/repositories/assistant-automation-run-repository.js +139 -0
- package/dist/server/storage/repositories/assistant-automation-run-repository.js.map +1 -0
- package/dist/server/storage/repositories/assistant-automation-task-repository.d.ts +17 -0
- package/dist/server/storage/repositories/assistant-automation-task-repository.js +179 -0
- package/dist/server/storage/repositories/assistant-automation-task-repository.js.map +1 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.d.ts +18 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js +191 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-device-repository.d.ts +22 -0
- package/dist/server/storage/repositories/auth-device-repository.js +97 -0
- package/dist/server/storage/repositories/auth-device-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-device-session-repository.d.ts +17 -0
- package/dist/server/storage/repositories/auth-device-session-repository.js +82 -0
- package/dist/server/storage/repositories/auth-device-session-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-login-event-repository.d.ts +9 -0
- package/dist/server/storage/repositories/auth-login-event-repository.js +53 -0
- package/dist/server/storage/repositories/auth-login-event-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-token-repository.d.ts +4 -0
- package/dist/server/storage/repositories/auth-token-repository.js +58 -5
- package/dist/server/storage/repositories/auth-token-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-control-session-repository.js +27 -3
- package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-control-timer-repository.d.ts +15 -0
- package/dist/server/storage/repositories/butler-control-timer-repository.js +157 -0
- package/dist/server/storage/repositories/butler-control-timer-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js +21 -3
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js.map +1 -1
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.d.ts +8 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.js +52 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.js.map +1 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.d.ts +10 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.js +153 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.js.map +1 -0
- package/dist/server/storage/repositories/instance-tailscale-repository.js +6 -3
- package/dist/server/storage/repositories/instance-tailscale-repository.js.map +1 -1
- package/dist/server/storage/repositories/managed-skill-repository.d.ts +2 -1
- package/dist/server/storage/repositories/managed-skill-repository.js +14 -4
- package/dist/server/storage/repositories/managed-skill-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-message-attachment-repository.d.ts +2 -0
- package/dist/server/storage/repositories/session-message-attachment-repository.js +24 -0
- package/dist/server/storage/repositories/session-message-attachment-repository.js.map +1 -1
- package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
- package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +534 -2
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +228 -4
- package/dist/server/types/domain.d.ts +170 -2
- package/dist/server/ws/workbench-ws-hub.d.ts +14 -8
- package/dist/server/ws/workbench-ws-hub.js +369 -209
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/dist/server/ws/ws-auth-guard.js +1 -4
- package/dist/server/ws/ws-auth-guard.js.map +1 -1
- package/dist/server/ws/ws-server.d.ts +1 -1
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js +80 -0
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +122 -4
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +17 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +437 -51
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +7 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +240 -27
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +108 -2
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +101 -8
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +4 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +44 -0
- 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 +5 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +153 -60
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/services.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/services.js +24 -8
- package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +6 -0
- package/package.json +1 -1
- package/scripts/postinstall.mjs +0 -33
- package/dist/public/assets/index-BlOinYqR.js +0 -122
- package/dist/public/assets/index-Dg_7g6lA.css +0 -1
package/bin/codingns.mjs
CHANGED
|
@@ -7,6 +7,15 @@ import { fileURLToPath } from "node:url";
|
|
|
7
7
|
|
|
8
8
|
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
9
9
|
const distRoot = path.join(packageRoot, "dist");
|
|
10
|
+
const ASSISTANT_REQUEST_SOURCE_HEADER = "X-CodingNS-Assistant-Source";
|
|
11
|
+
const ASSISTANT_CLI_REQUEST_SOURCE = "assistant-cli";
|
|
12
|
+
const PROVIDER_SESSION_DELETE_PROVIDERS = new Set([
|
|
13
|
+
"claude-code",
|
|
14
|
+
"codex",
|
|
15
|
+
"opencode",
|
|
16
|
+
"gemini",
|
|
17
|
+
"kimi"
|
|
18
|
+
]);
|
|
10
19
|
|
|
11
20
|
const [command, ...argv] = process.argv.slice(2);
|
|
12
21
|
|
|
@@ -21,6 +30,9 @@ switch (command) {
|
|
|
21
30
|
case "assistant":
|
|
22
31
|
await runAssistantCommand(argv);
|
|
23
32
|
break;
|
|
33
|
+
case "provider-sessions":
|
|
34
|
+
await runProviderSessionsCommand(argv);
|
|
35
|
+
break;
|
|
24
36
|
case "skills":
|
|
25
37
|
await runSkillsCommand(argv);
|
|
26
38
|
break;
|
|
@@ -139,6 +151,32 @@ async function runAssistantCommand(argv) {
|
|
|
139
151
|
}));
|
|
140
152
|
return;
|
|
141
153
|
}
|
|
154
|
+
case "sessions:start": {
|
|
155
|
+
await printAssistantResponse(await requestAssistant({
|
|
156
|
+
method: "POST",
|
|
157
|
+
path: "/api/assistant/sessions/start",
|
|
158
|
+
argv: rest,
|
|
159
|
+
supportedOptions: [
|
|
160
|
+
"project",
|
|
161
|
+
"workspace",
|
|
162
|
+
"sandbox",
|
|
163
|
+
"message",
|
|
164
|
+
"provider",
|
|
165
|
+
"model",
|
|
166
|
+
"reasoning-level",
|
|
167
|
+
"permission-mode"
|
|
168
|
+
],
|
|
169
|
+
helpTopic: "sessions.start"
|
|
170
|
+
}, (options) => ({
|
|
171
|
+
...resolveAssistantSessionStartTarget(options.values),
|
|
172
|
+
content: requireOptionValue(options.values.message, "message"),
|
|
173
|
+
providerId: readOptionalTrimmedValue(options.values.provider),
|
|
174
|
+
model: readOptionalTrimmedValue(options.values.model),
|
|
175
|
+
reasoningLevel: readOptionalTrimmedValue(options.values["reasoning-level"]),
|
|
176
|
+
permissionMode: readOptionalTrimmedValue(options.values["permission-mode"])
|
|
177
|
+
})));
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
142
180
|
case "sessions:get": {
|
|
143
181
|
const [sessionId, ...tail] = rest;
|
|
144
182
|
await printAssistantResponse(await requestAssistant({
|
|
@@ -174,6 +212,16 @@ async function runAssistantCommand(argv) {
|
|
|
174
212
|
}));
|
|
175
213
|
return;
|
|
176
214
|
}
|
|
215
|
+
case "sessions:delete": {
|
|
216
|
+
const [sessionId, ...tail] = rest;
|
|
217
|
+
await printAssistantResponse(await requestAssistant({
|
|
218
|
+
method: "DELETE",
|
|
219
|
+
path: `/api/assistant/sessions/${requirePositional(sessionId, "sessionId")}`,
|
|
220
|
+
argv: tail,
|
|
221
|
+
helpTopic: "sessions.delete"
|
|
222
|
+
}));
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
177
225
|
case "sessions:send": {
|
|
178
226
|
const [sessionId, ...tail] = rest;
|
|
179
227
|
await printAssistantResponse(await requestAssistant({
|
|
@@ -207,6 +255,341 @@ async function runAssistantCommand(argv) {
|
|
|
207
255
|
})));
|
|
208
256
|
return;
|
|
209
257
|
}
|
|
258
|
+
case "automations:list":
|
|
259
|
+
await printAssistantResponse(await requestAssistant({
|
|
260
|
+
method: "GET",
|
|
261
|
+
path: "/api/assistant/automations",
|
|
262
|
+
argv: rest,
|
|
263
|
+
supportedOptions: ["status", "control-session-id"],
|
|
264
|
+
helpTopic: "automations.list"
|
|
265
|
+
}, (options) => ({
|
|
266
|
+
status: readOptionalTrimmedValue(options.values.status),
|
|
267
|
+
controlSessionId: readOptionalTrimmedValue(options.values["control-session-id"])
|
|
268
|
+
})));
|
|
269
|
+
return;
|
|
270
|
+
case "automations:get": {
|
|
271
|
+
const [automationId, ...tail] = rest;
|
|
272
|
+
await printAssistantResponse(await requestAssistant({
|
|
273
|
+
method: "GET",
|
|
274
|
+
path: `/api/assistant/automations/${requirePositional(automationId, "automationId")}`,
|
|
275
|
+
argv: tail,
|
|
276
|
+
helpTopic: "automations.get"
|
|
277
|
+
}));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
case "automations:create":
|
|
281
|
+
await printAssistantResponse(await requestAssistant({
|
|
282
|
+
method: "POST",
|
|
283
|
+
path: "/api/assistant/automations",
|
|
284
|
+
argv: rest,
|
|
285
|
+
supportedOptions: [
|
|
286
|
+
"message",
|
|
287
|
+
"trigger",
|
|
288
|
+
"title",
|
|
289
|
+
"due-at",
|
|
290
|
+
"after-seconds",
|
|
291
|
+
"every-seconds",
|
|
292
|
+
"every-minutes",
|
|
293
|
+
"every-hours",
|
|
294
|
+
"stop-at",
|
|
295
|
+
"cron-minute",
|
|
296
|
+
"cron-hour",
|
|
297
|
+
"cron-day-of-week",
|
|
298
|
+
"condition-kind",
|
|
299
|
+
"repository-url",
|
|
300
|
+
"poll-interval-seconds",
|
|
301
|
+
"expires-at",
|
|
302
|
+
"max-checks",
|
|
303
|
+
"condition-session-id",
|
|
304
|
+
"control-session-id",
|
|
305
|
+
"project-id",
|
|
306
|
+
"session-id"
|
|
307
|
+
],
|
|
308
|
+
supportedFlags: ["include-trigger-context"],
|
|
309
|
+
repeatableOptions: ["cron-day-of-week"],
|
|
310
|
+
helpTopic: "automations.create"
|
|
311
|
+
}, (options) => ({
|
|
312
|
+
content: requireOptionValue(options.values.message, "message"),
|
|
313
|
+
triggerType: readOptionalTrimmedValue(options.values.trigger),
|
|
314
|
+
title: readOptionalTrimmedValue(options.values.title),
|
|
315
|
+
dueAt: readOptionalTrimmedValue(options.values["due-at"]),
|
|
316
|
+
afterSeconds: readOptionalTrimmedValue(options.values["after-seconds"]),
|
|
317
|
+
everySeconds: readOptionalTrimmedValue(options.values["every-seconds"]),
|
|
318
|
+
everyMinutes: readOptionalTrimmedValue(options.values["every-minutes"]),
|
|
319
|
+
everyHours: readOptionalTrimmedValue(options.values["every-hours"]),
|
|
320
|
+
stopAt: readOptionalTrimmedValue(options.values["stop-at"]),
|
|
321
|
+
cronMinute: readOptionalTrimmedValue(options.values["cron-minute"]),
|
|
322
|
+
cronHour: readOptionalTrimmedValue(options.values["cron-hour"]),
|
|
323
|
+
cronDaysOfWeek: readMultiOptionValues(options.values["cron-day-of-week"]),
|
|
324
|
+
conditionKind: readOptionalTrimmedValue(options.values["condition-kind"]),
|
|
325
|
+
repositoryUrl: readOptionalTrimmedValue(options.values["repository-url"]),
|
|
326
|
+
pollIntervalSeconds: readOptionalTrimmedValue(options.values["poll-interval-seconds"]),
|
|
327
|
+
expiresAt: readOptionalTrimmedValue(options.values["expires-at"]),
|
|
328
|
+
maxChecks: readOptionalTrimmedValue(options.values["max-checks"]),
|
|
329
|
+
conditionSessionId: readOptionalTrimmedValue(options.values["condition-session-id"]),
|
|
330
|
+
includeTriggerContext: options.flags["include-trigger-context"] === true,
|
|
331
|
+
controlSessionId: readOptionalTrimmedValue(options.values["control-session-id"]),
|
|
332
|
+
projectId: readOptionalTrimmedValue(options.values["project-id"]),
|
|
333
|
+
targetSessionId: readOptionalTrimmedValue(options.values["session-id"])
|
|
334
|
+
})));
|
|
335
|
+
return;
|
|
336
|
+
case "automations:cancel": {
|
|
337
|
+
const [automationId, ...tail] = rest;
|
|
338
|
+
await printAssistantResponse(await requestAssistant({
|
|
339
|
+
method: "POST",
|
|
340
|
+
path: `/api/assistant/automations/${requirePositional(automationId, "automationId")}/cancel`,
|
|
341
|
+
argv: tail,
|
|
342
|
+
helpTopic: "automations.cancel"
|
|
343
|
+
}));
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
case "automations:runs": {
|
|
347
|
+
const [automationId, ...tail] = rest;
|
|
348
|
+
await printAssistantResponse(await requestAssistant({
|
|
349
|
+
method: "GET",
|
|
350
|
+
path: `/api/assistant/automations/${requirePositional(automationId, "automationId")}/runs`,
|
|
351
|
+
argv: tail,
|
|
352
|
+
helpTopic: "automations.runs"
|
|
353
|
+
}));
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
case "sandboxes:list":
|
|
357
|
+
await printAssistantResponse(await requestAssistant({
|
|
358
|
+
method: "GET",
|
|
359
|
+
path: "/api/assistant/sandboxes",
|
|
360
|
+
argv: rest,
|
|
361
|
+
supportedOptions: ["status"],
|
|
362
|
+
helpTopic: "sandboxes.list"
|
|
363
|
+
}, (options) => ({
|
|
364
|
+
status: readOptionalTrimmedValue(options.values.status)
|
|
365
|
+
})));
|
|
366
|
+
return;
|
|
367
|
+
case "sandboxes:create":
|
|
368
|
+
await printAssistantResponse(await requestAssistant({
|
|
369
|
+
method: "POST",
|
|
370
|
+
path: "/api/assistant/sandboxes",
|
|
371
|
+
argv: rest,
|
|
372
|
+
supportedOptions: [
|
|
373
|
+
"title",
|
|
374
|
+
"description",
|
|
375
|
+
"purpose",
|
|
376
|
+
"expires-at",
|
|
377
|
+
"source-kind",
|
|
378
|
+
"repository-url",
|
|
379
|
+
"directory-name",
|
|
380
|
+
"auth-mode",
|
|
381
|
+
"username",
|
|
382
|
+
"password",
|
|
383
|
+
"auth-token"
|
|
384
|
+
],
|
|
385
|
+
helpTopic: "sandboxes.create"
|
|
386
|
+
}, (options) => ({
|
|
387
|
+
title: readOptionalTrimmedValue(options.values.title),
|
|
388
|
+
description: readOptionalTrimmedValue(options.values.description),
|
|
389
|
+
purpose: readOptionalTrimmedValue(options.values.purpose),
|
|
390
|
+
expiresAt: readOptionalTrimmedValue(options.values["expires-at"]),
|
|
391
|
+
sourceKind: readOptionalTrimmedValue(options.values["source-kind"]),
|
|
392
|
+
repositoryUrl: readOptionalTrimmedValue(options.values["repository-url"]),
|
|
393
|
+
directoryName: readOptionalTrimmedValue(options.values["directory-name"]),
|
|
394
|
+
auth: buildWorkspaceCloneAuth(options.values)
|
|
395
|
+
})));
|
|
396
|
+
return;
|
|
397
|
+
case "sandboxes:promote": {
|
|
398
|
+
const [sandboxId, ...tail] = rest;
|
|
399
|
+
await printAssistantResponse(await requestAssistant({
|
|
400
|
+
method: "POST",
|
|
401
|
+
path: `/api/assistant/sandboxes/${requirePositional(sandboxId, "sandboxId")}/promote`,
|
|
402
|
+
argv: tail,
|
|
403
|
+
supportedOptions: ["mode", "project-name", "provider"],
|
|
404
|
+
helpTopic: "sandboxes.promote"
|
|
405
|
+
}, (options) => ({
|
|
406
|
+
mode: readOptionalTrimmedValue(options.values.mode),
|
|
407
|
+
projectName: readOptionalTrimmedValue(options.values["project-name"]),
|
|
408
|
+
defaultProvider: readOptionalTrimmedValue(options.values.provider)
|
|
409
|
+
})));
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
case "sandboxes:expire": {
|
|
413
|
+
const [sandboxId, ...tail] = rest;
|
|
414
|
+
await printAssistantResponse(await requestAssistant({
|
|
415
|
+
method: "POST",
|
|
416
|
+
path: `/api/assistant/sandboxes/${requirePositional(sandboxId, "sandboxId")}/expire`,
|
|
417
|
+
argv: tail,
|
|
418
|
+
helpTopic: "sandboxes.expire"
|
|
419
|
+
}));
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
case "sandboxes:remove": {
|
|
423
|
+
const [sandboxId, ...tail] = rest;
|
|
424
|
+
await printAssistantResponse(await requestAssistant({
|
|
425
|
+
method: "DELETE",
|
|
426
|
+
path: `/api/assistant/sandboxes/${requirePositional(sandboxId, "sandboxId")}`,
|
|
427
|
+
argv: tail,
|
|
428
|
+
helpTopic: "sandboxes.remove"
|
|
429
|
+
}));
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
case "timers:list":
|
|
433
|
+
await printAssistantResponse(await requestAssistant({
|
|
434
|
+
method: "GET",
|
|
435
|
+
path: "/api/assistant/timers",
|
|
436
|
+
argv: rest,
|
|
437
|
+
supportedOptions: ["status", "control-session-id"],
|
|
438
|
+
helpTopic: "timers.list"
|
|
439
|
+
}, (options) => ({
|
|
440
|
+
status: readOptionalTrimmedValue(options.values.status),
|
|
441
|
+
controlSessionId: readOptionalTrimmedValue(options.values["control-session-id"])
|
|
442
|
+
})));
|
|
443
|
+
return;
|
|
444
|
+
case "timers:get": {
|
|
445
|
+
const [timerId, ...tail] = rest;
|
|
446
|
+
await printAssistantResponse(await requestAssistant({
|
|
447
|
+
method: "GET",
|
|
448
|
+
path: `/api/assistant/timers/${requirePositional(timerId, "timerId")}`,
|
|
449
|
+
argv: tail,
|
|
450
|
+
helpTopic: "timers.get"
|
|
451
|
+
}));
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
case "timers:create":
|
|
455
|
+
await printAssistantResponse(await requestAssistant({
|
|
456
|
+
method: "POST",
|
|
457
|
+
path: "/api/assistant/timers",
|
|
458
|
+
argv: rest,
|
|
459
|
+
supportedOptions: [
|
|
460
|
+
"message",
|
|
461
|
+
"title",
|
|
462
|
+
"due-at",
|
|
463
|
+
"after-seconds",
|
|
464
|
+
"control-session-id",
|
|
465
|
+
"project-id",
|
|
466
|
+
"session-id"
|
|
467
|
+
],
|
|
468
|
+
helpTopic: "timers.create"
|
|
469
|
+
}, (options) => ({
|
|
470
|
+
content: requireOptionValue(options.values.message, "message"),
|
|
471
|
+
title: readOptionalTrimmedValue(options.values.title),
|
|
472
|
+
dueAt: readOptionalTrimmedValue(options.values["due-at"]),
|
|
473
|
+
afterSeconds: readOptionalTrimmedValue(options.values["after-seconds"]),
|
|
474
|
+
controlSessionId: readOptionalTrimmedValue(options.values["control-session-id"]),
|
|
475
|
+
projectId: readOptionalTrimmedValue(options.values["project-id"]),
|
|
476
|
+
targetSessionId: readOptionalTrimmedValue(options.values["session-id"])
|
|
477
|
+
})));
|
|
478
|
+
return;
|
|
479
|
+
case "timers:cancel": {
|
|
480
|
+
const [timerId, ...tail] = rest;
|
|
481
|
+
await printAssistantResponse(await requestAssistant({
|
|
482
|
+
method: "POST",
|
|
483
|
+
path: `/api/assistant/timers/${requirePositional(timerId, "timerId")}/cancel`,
|
|
484
|
+
argv: tail,
|
|
485
|
+
helpTopic: "timers.cancel"
|
|
486
|
+
}));
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
case "follow-ups:list":
|
|
490
|
+
await printAssistantResponse(await requestAssistant({
|
|
491
|
+
method: "GET",
|
|
492
|
+
path: "/api/assistant/follow-ups",
|
|
493
|
+
argv: rest,
|
|
494
|
+
supportedOptions: ["status", "project-id", "session-id", "limit"],
|
|
495
|
+
helpTopic: "follow-ups.list"
|
|
496
|
+
}, (options) => ({
|
|
497
|
+
status: readOptionalTrimmedValue(options.values.status),
|
|
498
|
+
projectId: readOptionalTrimmedValue(options.values["project-id"]),
|
|
499
|
+
sessionId: readOptionalTrimmedValue(options.values["session-id"]),
|
|
500
|
+
limit: readOptionalTrimmedValue(options.values.limit)
|
|
501
|
+
})));
|
|
502
|
+
return;
|
|
503
|
+
case "follow-ups:get": {
|
|
504
|
+
const [taskId, ...tail] = rest;
|
|
505
|
+
await printAssistantResponse(await requestAssistant({
|
|
506
|
+
method: "GET",
|
|
507
|
+
path: `/api/assistant/follow-ups/${requirePositional(taskId, "taskId")}`,
|
|
508
|
+
argv: tail,
|
|
509
|
+
helpTopic: "follow-ups.get"
|
|
510
|
+
}));
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
case "follow-ups:create":
|
|
514
|
+
await printAssistantResponse(await requestAssistant({
|
|
515
|
+
method: "POST",
|
|
516
|
+
path: "/api/assistant/follow-ups",
|
|
517
|
+
argv: rest,
|
|
518
|
+
supportedOptions: [
|
|
519
|
+
"project-id",
|
|
520
|
+
"butler-session-id",
|
|
521
|
+
"provider",
|
|
522
|
+
"objective",
|
|
523
|
+
"completion-criteria",
|
|
524
|
+
"max-auto-continue-count",
|
|
525
|
+
"check-interval-seconds"
|
|
526
|
+
],
|
|
527
|
+
helpTopic: "follow-ups.create"
|
|
528
|
+
}, (options) => ({
|
|
529
|
+
projectId: requireOptionValue(options.values["project-id"], "project-id"),
|
|
530
|
+
butlerSessionId: requireOptionValue(options.values["butler-session-id"], "butler-session-id"),
|
|
531
|
+
providerId: readOptionalTrimmedValue(options.values.provider),
|
|
532
|
+
objective: requireOptionValue(options.values.objective, "objective"),
|
|
533
|
+
completionCriteria: readOptionalTrimmedValue(options.values["completion-criteria"]),
|
|
534
|
+
maxAutoContinueCount: readOptionalTrimmedValue(options.values["max-auto-continue-count"]),
|
|
535
|
+
checkIntervalSeconds: readOptionalTrimmedValue(options.values["check-interval-seconds"])
|
|
536
|
+
})));
|
|
537
|
+
return;
|
|
538
|
+
case "follow-ups:continue": {
|
|
539
|
+
const [taskId, ...tail] = rest;
|
|
540
|
+
await printAssistantResponse(await requestAssistant({
|
|
541
|
+
method: "POST",
|
|
542
|
+
path: `/api/assistant/follow-ups/${requirePositional(taskId, "taskId")}/continue`,
|
|
543
|
+
argv: tail,
|
|
544
|
+
supportedOptions: ["summary", "continue-prompt"],
|
|
545
|
+
helpTopic: "follow-ups.continue"
|
|
546
|
+
}, (options) => ({
|
|
547
|
+
summary: requireOptionValue(options.values.summary, "summary"),
|
|
548
|
+
continuePrompt: requireOptionValue(options.values["continue-prompt"], "continue-prompt")
|
|
549
|
+
})));
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
case "follow-ups:waiting-user": {
|
|
553
|
+
const [taskId, ...tail] = rest;
|
|
554
|
+
await printAssistantResponse(await requestAssistant({
|
|
555
|
+
method: "POST",
|
|
556
|
+
path: `/api/assistant/follow-ups/${requirePositional(taskId, "taskId")}/waiting-user`,
|
|
557
|
+
argv: tail,
|
|
558
|
+
supportedOptions: ["summary", "waiting-reason"],
|
|
559
|
+
helpTopic: "follow-ups.waiting-user"
|
|
560
|
+
}, (options) => ({
|
|
561
|
+
summary: requireOptionValue(options.values.summary, "summary"),
|
|
562
|
+
waitingReason: requireOptionValue(options.values["waiting-reason"], "waiting-reason")
|
|
563
|
+
})));
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
case "follow-ups:complete": {
|
|
567
|
+
const [taskId, ...tail] = rest;
|
|
568
|
+
await printAssistantResponse(await requestAssistant({
|
|
569
|
+
method: "POST",
|
|
570
|
+
path: `/api/assistant/follow-ups/${requirePositional(taskId, "taskId")}/complete`,
|
|
571
|
+
argv: tail,
|
|
572
|
+
supportedOptions: ["summary"],
|
|
573
|
+
helpTopic: "follow-ups.complete"
|
|
574
|
+
}, (options) => ({
|
|
575
|
+
summary: requireOptionValue(options.values.summary, "summary")
|
|
576
|
+
})));
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
case "follow-ups:fail": {
|
|
580
|
+
const [taskId, ...tail] = rest;
|
|
581
|
+
await printAssistantResponse(await requestAssistant({
|
|
582
|
+
method: "POST",
|
|
583
|
+
path: `/api/assistant/follow-ups/${requirePositional(taskId, "taskId")}/fail`,
|
|
584
|
+
argv: tail,
|
|
585
|
+
supportedOptions: ["summary", "reason"],
|
|
586
|
+
helpTopic: "follow-ups.fail"
|
|
587
|
+
}, (options) => ({
|
|
588
|
+
summary: requireOptionValue(options.values.summary, "summary"),
|
|
589
|
+
reason: readOptionalTrimmedValue(options.values.reason)
|
|
590
|
+
})));
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
210
593
|
case "terminals:list":
|
|
211
594
|
await printAssistantResponse(await requestAssistant({
|
|
212
595
|
method: "GET",
|
|
@@ -627,6 +1010,116 @@ async function runSkillsCommand(argv) {
|
|
|
627
1010
|
}
|
|
628
1011
|
}
|
|
629
1012
|
|
|
1013
|
+
async function runProviderSessionsCommand(argv) {
|
|
1014
|
+
const [action, ...rest] = argv;
|
|
1015
|
+
|
|
1016
|
+
if (!action || isHelpToken(action)) {
|
|
1017
|
+
printProviderSessionsHelpTopic(buildProviderSessionsHelpTopic(rest[0]), 0);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
if (rest.length > 0 && isHelpToken(rest[0])) {
|
|
1021
|
+
printProviderSessionsHelpTopic(buildProviderSessionsHelpTopic(action), 0);
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
switch (action) {
|
|
1025
|
+
case "delete": {
|
|
1026
|
+
const options = parseArgs(rest, {
|
|
1027
|
+
supportedOptions: ["provider", "provider-session-id", "raw-store-ref"]
|
|
1028
|
+
});
|
|
1029
|
+
|
|
1030
|
+
if (options.help) {
|
|
1031
|
+
printProviderSessionsHelpTopic("provider-sessions.delete", 0);
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
if (options.errors.length > 0) {
|
|
1035
|
+
for (const error of options.errors) {
|
|
1036
|
+
console.error(`[codingns] ${error}`);
|
|
1037
|
+
}
|
|
1038
|
+
printProviderSessionsHelpTopic("provider-sessions.delete", 1);
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
const provider = requireOptionValue(options.values.provider, "provider");
|
|
1042
|
+
const providerSessionId = requireOptionValue(
|
|
1043
|
+
options.values["provider-session-id"],
|
|
1044
|
+
"provider-session-id"
|
|
1045
|
+
);
|
|
1046
|
+
const rawStoreRef = requireOptionValue(options.values["raw-store-ref"], "raw-store-ref");
|
|
1047
|
+
|
|
1048
|
+
if (!PROVIDER_SESSION_DELETE_PROVIDERS.has(provider)) {
|
|
1049
|
+
fail(
|
|
1050
|
+
`provider-sessions delete 仅支持 ${[...PROVIDER_SESSION_DELETE_PROVIDERS].join(", ")}`
|
|
1051
|
+
);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
const { SessionSyncService, ProviderRegistry } = await import("@codingns/session-sync-core");
|
|
1055
|
+
const {
|
|
1056
|
+
ClaudeCodeAdapter,
|
|
1057
|
+
CodexAdapter,
|
|
1058
|
+
GeminiAdapter,
|
|
1059
|
+
KimiAdapter,
|
|
1060
|
+
OpenCodeAdapter
|
|
1061
|
+
} = await import("@codingns/session-sync-core");
|
|
1062
|
+
const homeDir = os.homedir();
|
|
1063
|
+
const registry = new ProviderRegistry([
|
|
1064
|
+
new ClaudeCodeAdapter({
|
|
1065
|
+
homeDir: readStringOption(
|
|
1066
|
+
process.env.CODINGNS_CLAUDE_CODE_HOME,
|
|
1067
|
+
path.join(homeDir, ".claude")
|
|
1068
|
+
)
|
|
1069
|
+
}),
|
|
1070
|
+
new CodexAdapter({
|
|
1071
|
+
homeDir: readStringOption(
|
|
1072
|
+
process.env.CODINGNS_CODEX_HOME,
|
|
1073
|
+
path.join(homeDir, ".codex")
|
|
1074
|
+
)
|
|
1075
|
+
}),
|
|
1076
|
+
new GeminiAdapter({
|
|
1077
|
+
homeDir: readStringOption(
|
|
1078
|
+
process.env.CODINGNS_GEMINI_HOME,
|
|
1079
|
+
path.join(homeDir, ".gemini")
|
|
1080
|
+
),
|
|
1081
|
+
commandPath: readStringOption(process.env.CODINGNS_GEMINI_COMMAND, "gemini")
|
|
1082
|
+
}),
|
|
1083
|
+
new KimiAdapter({
|
|
1084
|
+
homeDir: readStringOption(
|
|
1085
|
+
process.env.CODINGNS_KIMI_HOME,
|
|
1086
|
+
path.join(homeDir, ".kimi")
|
|
1087
|
+
),
|
|
1088
|
+
defaultModel: readOptionalTrimmedValue(process.env.CODINGNS_KIMI_DEFAULT_MODEL)
|
|
1089
|
+
}),
|
|
1090
|
+
new OpenCodeAdapter({
|
|
1091
|
+
baseUrl: readOptionalTrimmedValue(process.env.CODINGNS_OPENCODE_BASE_URL) ?? undefined,
|
|
1092
|
+
dataDir:
|
|
1093
|
+
readOptionalTrimmedValue(process.env.CODINGNS_OPENCODE_DATA_DIR) ?? undefined,
|
|
1094
|
+
dbPath:
|
|
1095
|
+
readOptionalTrimmedValue(process.env.CODINGNS_OPENCODE_DB_PATH) ?? undefined
|
|
1096
|
+
})
|
|
1097
|
+
]);
|
|
1098
|
+
const sessionSyncService = new SessionSyncService(registry);
|
|
1099
|
+
|
|
1100
|
+
try {
|
|
1101
|
+
await sessionSyncService.deleteSession(provider, providerSessionId, rawStoreRef);
|
|
1102
|
+
} catch (error) {
|
|
1103
|
+
console.error(
|
|
1104
|
+
JSON.stringify(normalizeProviderSessionDeleteFailure(error), null, 2)
|
|
1105
|
+
);
|
|
1106
|
+
process.exit(1);
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
await printAssistantResponse({
|
|
1110
|
+
ok: true,
|
|
1111
|
+
provider,
|
|
1112
|
+
providerSessionId,
|
|
1113
|
+
rawStoreRef
|
|
1114
|
+
});
|
|
1115
|
+
return;
|
|
1116
|
+
}
|
|
1117
|
+
default:
|
|
1118
|
+
console.error(`[codingns] 不支持的 provider-sessions 子命令:${action}`);
|
|
1119
|
+
printProviderSessionsHelpTopic("provider-sessions", 1);
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
|
|
630
1123
|
async function requestAssistant(command, buildPayload) {
|
|
631
1124
|
const options = parseArgs(command.argv, {
|
|
632
1125
|
supportedOptions: [
|
|
@@ -670,6 +1163,7 @@ async function requestAssistant(command, buildPayload) {
|
|
|
670
1163
|
method: command.method,
|
|
671
1164
|
headers: {
|
|
672
1165
|
Authorization: `Bearer ${accessToken}`,
|
|
1166
|
+
[ASSISTANT_REQUEST_SOURCE_HEADER]: ASSISTANT_CLI_REQUEST_SOURCE,
|
|
673
1167
|
...(usesJsonBody ? { "Content-Type": "application/json" } : {})
|
|
674
1168
|
},
|
|
675
1169
|
body: usesJsonBody ? JSON.stringify(payload ?? {}) : undefined
|
|
@@ -1154,6 +1648,7 @@ codingns 用法:
|
|
|
1154
1648
|
|
|
1155
1649
|
codingns start [--host 0.0.0.0] [--port 3002] [--data-dir ~/.codingns] [--demo]
|
|
1156
1650
|
codingns assistant <group> <action> [options]
|
|
1651
|
+
codingns provider-sessions <action> [options]
|
|
1157
1652
|
codingns skills <action> [options]
|
|
1158
1653
|
|
|
1159
1654
|
说明:
|
|
@@ -1173,6 +1668,7 @@ assistant 例子:
|
|
|
1173
1668
|
codingns assistant debug-targets launch-plan <targetId> --port-request role=backend,cwd=apps/api,port=44001 --token <token>
|
|
1174
1669
|
codingns assistant worktrees tree --root-workspace-id <id> --token <token>
|
|
1175
1670
|
codingns assistant sessions send <sessionId> --message "继续修复类型错误" --token <token>
|
|
1671
|
+
codingns assistant follow-ups continue <taskId> --summary "目标还没完成" --continue-prompt "继续补齐剩余实现" --token <token>
|
|
1176
1672
|
codingns assistant terminals send <terminalId> --input "npm test\\n" --token <token>
|
|
1177
1673
|
codingns assistant terminals close <terminalId> --token <token>
|
|
1178
1674
|
|
|
@@ -1181,6 +1677,10 @@ skills 例子:
|
|
|
1181
1677
|
codingns skills overview --token <token>
|
|
1182
1678
|
codingns skills add --source ./my-skill --target codex --token <token>
|
|
1183
1679
|
codingns skills sync <skillId> --target gemini --token <token>
|
|
1680
|
+
|
|
1681
|
+
provider-sessions 例子:
|
|
1682
|
+
|
|
1683
|
+
codingns provider-sessions delete --provider codex --provider-session-id <id> --raw-store-ref <ref>
|
|
1184
1684
|
`.trim();
|
|
1185
1685
|
|
|
1186
1686
|
if (exitCode === 0) {
|
|
@@ -1216,6 +1716,18 @@ function printSkillsHelpTopic(topic, exitCode) {
|
|
|
1216
1716
|
process.exit(exitCode);
|
|
1217
1717
|
}
|
|
1218
1718
|
|
|
1719
|
+
function printProviderSessionsHelpTopic(topic, exitCode) {
|
|
1720
|
+
const output = getProviderSessionsHelpText(topic);
|
|
1721
|
+
|
|
1722
|
+
if (exitCode === 0) {
|
|
1723
|
+
console.log(output);
|
|
1724
|
+
} else {
|
|
1725
|
+
console.error(output);
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1728
|
+
process.exit(exitCode);
|
|
1729
|
+
}
|
|
1730
|
+
|
|
1219
1731
|
function getAssistantHelpText(topic) {
|
|
1220
1732
|
switch (topic) {
|
|
1221
1733
|
case "capabilities":
|
|
@@ -1376,14 +1888,17 @@ codingns assistant sessions
|
|
|
1376
1888
|
|
|
1377
1889
|
可用动作:
|
|
1378
1890
|
list 列出指定项目下的会话
|
|
1891
|
+
start 按 project/workspace/sandbox 目标新建真实会话
|
|
1379
1892
|
get 读取会话详情
|
|
1380
1893
|
messages 读取消息窗口
|
|
1381
1894
|
runtime 读取运行态
|
|
1895
|
+
delete 删除真实会话
|
|
1382
1896
|
send 向真实项目会话发送消息
|
|
1383
1897
|
fork 从会话或消息点 fork 新会话
|
|
1384
1898
|
|
|
1385
1899
|
示例:
|
|
1386
1900
|
codingns assistant sessions list --project <projectId> --token <token>
|
|
1901
|
+
codingns assistant sessions start --project <projectId> --message "继续处理这个问题" --token <token>
|
|
1387
1902
|
codingns assistant sessions send <sessionId> --message "继续修复" --token <token>
|
|
1388
1903
|
`.trim();
|
|
1389
1904
|
case "sessions.list":
|
|
@@ -1395,6 +1910,16 @@ codingns assistant sessions list
|
|
|
1395
1910
|
|
|
1396
1911
|
用法:
|
|
1397
1912
|
codingns assistant sessions list --project <projectId> --token <token>
|
|
1913
|
+
`.trim();
|
|
1914
|
+
case "sessions.start":
|
|
1915
|
+
return `
|
|
1916
|
+
codingns assistant sessions start
|
|
1917
|
+
|
|
1918
|
+
用途:
|
|
1919
|
+
在指定 project/workspace/sandbox 目标下新建真实会话;如果不显式传 provider/model,会默认继承当前助手控制会话的配置。
|
|
1920
|
+
|
|
1921
|
+
用法:
|
|
1922
|
+
codingns assistant sessions start (--project <projectId> | --workspace <workspaceId> | --sandbox <sandboxId>) --message "..." [--provider <provider>] [--model <model>] [--reasoning-level <level>] [--permission-mode <mode>] --token <token>
|
|
1398
1923
|
`.trim();
|
|
1399
1924
|
case "sessions.get":
|
|
1400
1925
|
return `
|
|
@@ -1435,6 +1960,16 @@ codingns assistant sessions send
|
|
|
1435
1960
|
|
|
1436
1961
|
用法:
|
|
1437
1962
|
codingns assistant sessions send <sessionId> --message "..." [--client-request-id <id>] [--model <model>] [--reasoning-level <level>] [--permission-mode <mode>] --token <token>
|
|
1963
|
+
`.trim();
|
|
1964
|
+
case "sessions.delete":
|
|
1965
|
+
return `
|
|
1966
|
+
codingns assistant sessions delete
|
|
1967
|
+
|
|
1968
|
+
用途:
|
|
1969
|
+
删除指定真实会话;这会同时清理助手侧关联记录和工作区索引。
|
|
1970
|
+
|
|
1971
|
+
用法:
|
|
1972
|
+
codingns assistant sessions delete <sessionId> --token <token>
|
|
1438
1973
|
`.trim();
|
|
1439
1974
|
case "sessions.fork":
|
|
1440
1975
|
return `
|
|
@@ -1445,6 +1980,280 @@ codingns assistant sessions fork
|
|
|
1445
1980
|
|
|
1446
1981
|
用法:
|
|
1447
1982
|
codingns assistant sessions fork <sessionId> [--source-type session|message] [--message-id <id>] [--strategy auto|native-only|reconstruct-only] [--target-provider <provider>] --token <token>
|
|
1983
|
+
`.trim();
|
|
1984
|
+
case "sandboxes":
|
|
1985
|
+
return `
|
|
1986
|
+
codingns assistant sandboxes
|
|
1987
|
+
|
|
1988
|
+
可用动作:
|
|
1989
|
+
list 列出当前助手沙箱
|
|
1990
|
+
create 创建新的临时沙箱工作区
|
|
1991
|
+
promote 把沙箱保留为 pinned,或晋升成正式项目
|
|
1992
|
+
expire 标记沙箱过期
|
|
1993
|
+
remove 清理沙箱
|
|
1994
|
+
|
|
1995
|
+
示例:
|
|
1996
|
+
codingns assistant sandboxes list --status active --token <token>
|
|
1997
|
+
codingns assistant sandboxes create --title "CodingNS 临时沙箱" --source-kind clone --repository-url <url> --token <token>
|
|
1998
|
+
`.trim();
|
|
1999
|
+
case "sandboxes.list":
|
|
2000
|
+
return `
|
|
2001
|
+
codingns assistant sandboxes list
|
|
2002
|
+
|
|
2003
|
+
用途:
|
|
2004
|
+
列出当前用户可见的助手沙箱。
|
|
2005
|
+
|
|
2006
|
+
用法:
|
|
2007
|
+
codingns assistant sandboxes list [--status active|archived|expired|deleted] --token <token>
|
|
2008
|
+
`.trim();
|
|
2009
|
+
case "sandboxes.create":
|
|
2010
|
+
return `
|
|
2011
|
+
codingns assistant sandboxes create
|
|
2012
|
+
|
|
2013
|
+
用途:
|
|
2014
|
+
创建新的临时沙箱工作区;默认空白沙箱,也可以直接 clone 仓库。
|
|
2015
|
+
|
|
2016
|
+
用法:
|
|
2017
|
+
codingns assistant sandboxes create [--title <title>] [--description <text>] [--purpose <text>] [--expires-at <isoTime>] [--source-kind blank|clone] [--repository-url <url>] [--directory-name <name>] [--auth-mode none|basic|token] [--username <name>] [--password <password>] [--auth-token <token>] --token <token>
|
|
2018
|
+
`.trim();
|
|
2019
|
+
case "sandboxes.promote":
|
|
2020
|
+
return `
|
|
2021
|
+
codingns assistant sandboxes promote
|
|
2022
|
+
|
|
2023
|
+
用途:
|
|
2024
|
+
把沙箱保留为 pinned,或者直接晋升成正式项目。
|
|
2025
|
+
|
|
2026
|
+
用法:
|
|
2027
|
+
codingns assistant sandboxes promote <sandboxId> [--mode pin|project] [--project-name <name>] [--provider <provider>] --token <token>
|
|
2028
|
+
`.trim();
|
|
2029
|
+
case "sandboxes.expire":
|
|
2030
|
+
return `
|
|
2031
|
+
codingns assistant sandboxes expire
|
|
2032
|
+
|
|
2033
|
+
用途:
|
|
2034
|
+
把指定沙箱标记为过期,后续不能再拿它启动会话。
|
|
2035
|
+
|
|
2036
|
+
用法:
|
|
2037
|
+
codingns assistant sandboxes expire <sandboxId> --token <token>
|
|
2038
|
+
`.trim();
|
|
2039
|
+
case "sandboxes.remove":
|
|
2040
|
+
return `
|
|
2041
|
+
codingns assistant sandboxes remove
|
|
2042
|
+
|
|
2043
|
+
用途:
|
|
2044
|
+
删除指定沙箱并尝试清理对应工作区入口。
|
|
2045
|
+
|
|
2046
|
+
用法:
|
|
2047
|
+
codingns assistant sandboxes remove <sandboxId> --token <token>
|
|
2048
|
+
`.trim();
|
|
2049
|
+
case "automations":
|
|
2050
|
+
return `
|
|
2051
|
+
codingns assistant automations
|
|
2052
|
+
|
|
2053
|
+
可用动作:
|
|
2054
|
+
list 列出正式自动化任务
|
|
2055
|
+
get 读取单个自动化详情
|
|
2056
|
+
create 创建正式自动化任务
|
|
2057
|
+
cancel 取消自动化任务
|
|
2058
|
+
runs 查看自动化执行记录
|
|
2059
|
+
|
|
2060
|
+
示例:
|
|
2061
|
+
codingns assistant automations create --after-seconds 3600 --message "1 小时后检查 codingns 新 tag" --session-id <sessionId> --project-id <projectId> --token <token>
|
|
2062
|
+
codingns assistant automations create --trigger interval --every-hours 1 --message "每小时检查一次" --token <token>
|
|
2063
|
+
codingns assistant automations create --trigger cron --cron-minute 30 --cron-hour 9 --cron-day-of-week 1 --cron-day-of-week 2 --message "工作日早上检查" --token <token>
|
|
2064
|
+
codingns assistant automations create --trigger condition --condition-kind git.remote_tag_changed --repository-url <url> --poll-interval-seconds 3600 --message "发现新 tag 后通知我" --include-trigger-context --token <token>
|
|
2065
|
+
codingns assistant automations list --status active --token <token>
|
|
2066
|
+
`.trim();
|
|
2067
|
+
case "automations.list":
|
|
2068
|
+
return `
|
|
2069
|
+
codingns assistant automations list
|
|
2070
|
+
|
|
2071
|
+
用途:
|
|
2072
|
+
查看当前助手控制会话下的正式自动化任务。
|
|
2073
|
+
|
|
2074
|
+
用法:
|
|
2075
|
+
codingns assistant automations list [--status active|completed|cancelled|failed] [--control-session-id <id>] --token <token>
|
|
2076
|
+
`.trim();
|
|
2077
|
+
case "automations.get":
|
|
2078
|
+
return `
|
|
2079
|
+
codingns assistant automations get
|
|
2080
|
+
|
|
2081
|
+
用途:
|
|
2082
|
+
读取单个自动化任务详情。
|
|
2083
|
+
|
|
2084
|
+
用法:
|
|
2085
|
+
codingns assistant automations get <automationId> --token <token>
|
|
2086
|
+
`.trim();
|
|
2087
|
+
case "automations.create":
|
|
2088
|
+
return `
|
|
2089
|
+
codingns assistant automations create
|
|
2090
|
+
|
|
2091
|
+
用途:
|
|
2092
|
+
创建正式自动化;支持 once / interval / cron / condition 四种触发器。
|
|
2093
|
+
|
|
2094
|
+
用法:
|
|
2095
|
+
codingns assistant automations create --message "..." [--trigger once|interval|cron|condition] [--title <title>] [--due-at <isoTime> | --after-seconds <seconds>] [--every-seconds <n> | --every-minutes <n> | --every-hours <n>] [--stop-at <isoTime>] [--cron-minute <0-59>] [--cron-hour <0-23>] [--cron-day-of-week <0-6>] [--condition-kind git.remote_tag_changed|session.runtime_idle] [--repository-url <url>] [--condition-session-id <sessionId>] [--poll-interval-seconds <n>] [--expires-at <isoTime>] [--max-checks <n>] [--include-trigger-context] [--control-session-id <id>] [--project-id <projectId>] [--session-id <sessionId>] --token <token>
|
|
2096
|
+
`.trim();
|
|
2097
|
+
case "automations.cancel":
|
|
2098
|
+
return `
|
|
2099
|
+
codingns assistant automations cancel
|
|
2100
|
+
|
|
2101
|
+
用途:
|
|
2102
|
+
取消一个尚未执行的自动化任务。
|
|
2103
|
+
|
|
2104
|
+
用法:
|
|
2105
|
+
codingns assistant automations cancel <automationId> --token <token>
|
|
2106
|
+
`.trim();
|
|
2107
|
+
case "automations.runs":
|
|
2108
|
+
return `
|
|
2109
|
+
codingns assistant automations runs
|
|
2110
|
+
|
|
2111
|
+
用途:
|
|
2112
|
+
查看某个自动化任务的执行记录。
|
|
2113
|
+
|
|
2114
|
+
用法:
|
|
2115
|
+
codingns assistant automations runs <automationId> --token <token>
|
|
2116
|
+
`.trim();
|
|
2117
|
+
case "timers":
|
|
2118
|
+
return `
|
|
2119
|
+
codingns assistant timers
|
|
2120
|
+
|
|
2121
|
+
可用动作:
|
|
2122
|
+
list 列出当前助手会话相关的计时器
|
|
2123
|
+
get 读取单个计时器详情
|
|
2124
|
+
create 创建到点后继续助手会话的计时器
|
|
2125
|
+
cancel 取消计时器
|
|
2126
|
+
|
|
2127
|
+
示例:
|
|
2128
|
+
codingns assistant timers create --after-seconds 300 --message "5 分钟后检查真实会话最新回复" --session-id <sessionId> --project-id <projectId> --token <token>
|
|
2129
|
+
codingns assistant timers list --status active --token <token>
|
|
2130
|
+
`.trim();
|
|
2131
|
+
case "timers.list":
|
|
2132
|
+
return `
|
|
2133
|
+
codingns assistant timers list
|
|
2134
|
+
|
|
2135
|
+
用途:
|
|
2136
|
+
查看当前助手会话下仍在等待、已完成或已失败的计时器。
|
|
2137
|
+
|
|
2138
|
+
用法:
|
|
2139
|
+
codingns assistant timers list [--status active|completed|cancelled|failed] [--control-session-id <id>] --token <token>
|
|
2140
|
+
`.trim();
|
|
2141
|
+
case "timers.get":
|
|
2142
|
+
return `
|
|
2143
|
+
codingns assistant timers get
|
|
2144
|
+
|
|
2145
|
+
用途:
|
|
2146
|
+
读取单个计时器详情,包括计划触发时间和最后错误。
|
|
2147
|
+
|
|
2148
|
+
用法:
|
|
2149
|
+
codingns assistant timers get <timerId> --token <token>
|
|
2150
|
+
`.trim();
|
|
2151
|
+
case "timers.create":
|
|
2152
|
+
return `
|
|
2153
|
+
codingns assistant timers create
|
|
2154
|
+
|
|
2155
|
+
用途:
|
|
2156
|
+
创建一个一次性计时器;到期后系统会自动向同一个助手控制会话发送消息,继续工作。
|
|
2157
|
+
|
|
2158
|
+
用法:
|
|
2159
|
+
codingns assistant timers create --message "..." [--title <title>] [--due-at <isoTime> | --after-seconds <seconds>] [--control-session-id <id>] [--project-id <projectId>] [--session-id <sessionId>] --token <token>
|
|
2160
|
+
`.trim();
|
|
2161
|
+
case "timers.cancel":
|
|
2162
|
+
return `
|
|
2163
|
+
codingns assistant timers cancel
|
|
2164
|
+
|
|
2165
|
+
用途:
|
|
2166
|
+
取消一个尚未触发的计时器。
|
|
2167
|
+
|
|
2168
|
+
用法:
|
|
2169
|
+
codingns assistant timers cancel <timerId> --token <token>
|
|
2170
|
+
`.trim();
|
|
2171
|
+
case "follow-ups":
|
|
2172
|
+
return `
|
|
2173
|
+
codingns assistant follow-ups
|
|
2174
|
+
|
|
2175
|
+
可用动作:
|
|
2176
|
+
list 列出跟进任务
|
|
2177
|
+
get 读取单个跟进任务
|
|
2178
|
+
create 创建新的跟进任务
|
|
2179
|
+
continue 回写继续推进结论
|
|
2180
|
+
waiting-user 回写等待用户结论
|
|
2181
|
+
complete 回写已完成结论
|
|
2182
|
+
fail 回写失败结论
|
|
2183
|
+
|
|
2184
|
+
示例:
|
|
2185
|
+
codingns assistant follow-ups list --status active --token <token>
|
|
2186
|
+
codingns assistant follow-ups continue <taskId> --summary "目标还没做完" --continue-prompt "继续补齐剩余实现" --token <token>
|
|
2187
|
+
`.trim();
|
|
2188
|
+
case "follow-ups.list":
|
|
2189
|
+
return `
|
|
2190
|
+
codingns assistant follow-ups list
|
|
2191
|
+
|
|
2192
|
+
用途:
|
|
2193
|
+
查看当前用户可见的会话跟进任务。
|
|
2194
|
+
|
|
2195
|
+
用法:
|
|
2196
|
+
codingns assistant follow-ups list [--status active|waiting_user|completed|failed|cancelled] [--project-id <projectId>] [--session-id <sessionId>] [--limit <n>] --token <token>
|
|
2197
|
+
`.trim();
|
|
2198
|
+
case "follow-ups.get":
|
|
2199
|
+
return `
|
|
2200
|
+
codingns assistant follow-ups get
|
|
2201
|
+
|
|
2202
|
+
用途:
|
|
2203
|
+
读取单个跟进任务详情和历史轮次。
|
|
2204
|
+
|
|
2205
|
+
用法:
|
|
2206
|
+
codingns assistant follow-ups get <taskId> --token <token>
|
|
2207
|
+
`.trim();
|
|
2208
|
+
case "follow-ups.create":
|
|
2209
|
+
return `
|
|
2210
|
+
codingns assistant follow-ups create
|
|
2211
|
+
|
|
2212
|
+
用途:
|
|
2213
|
+
为指定 Butler 会话创建新的跟进任务。
|
|
2214
|
+
|
|
2215
|
+
用法:
|
|
2216
|
+
codingns assistant follow-ups create --project-id <projectId> --butler-session-id <butlerSessionId> --objective "..." [--provider codex|claude-code] [--completion-criteria "..."] [--max-auto-continue-count <n>] [--check-interval-seconds <n>] --token <token>
|
|
2217
|
+
`.trim();
|
|
2218
|
+
case "follow-ups.continue":
|
|
2219
|
+
return `
|
|
2220
|
+
codingns assistant follow-ups continue
|
|
2221
|
+
|
|
2222
|
+
用途:
|
|
2223
|
+
回写“继续推进”结论,并安排下一轮自动跟进。
|
|
2224
|
+
|
|
2225
|
+
用法:
|
|
2226
|
+
codingns assistant follow-ups continue <taskId> --summary "..." --continue-prompt "..." --token <token>
|
|
2227
|
+
`.trim();
|
|
2228
|
+
case "follow-ups.waiting-user":
|
|
2229
|
+
return `
|
|
2230
|
+
codingns assistant follow-ups waiting-user
|
|
2231
|
+
|
|
2232
|
+
用途:
|
|
2233
|
+
回写“需要等待用户”结论,并写明必须等待的原因。
|
|
2234
|
+
|
|
2235
|
+
用法:
|
|
2236
|
+
codingns assistant follow-ups waiting-user <taskId> --summary "..." --waiting-reason "..." --token <token>
|
|
2237
|
+
`.trim();
|
|
2238
|
+
case "follow-ups.complete":
|
|
2239
|
+
return `
|
|
2240
|
+
codingns assistant follow-ups complete
|
|
2241
|
+
|
|
2242
|
+
用途:
|
|
2243
|
+
回写“任务已完成”结论,并结束当前跟进。
|
|
2244
|
+
|
|
2245
|
+
用法:
|
|
2246
|
+
codingns assistant follow-ups complete <taskId> --summary "..." --token <token>
|
|
2247
|
+
`.trim();
|
|
2248
|
+
case "follow-ups.fail":
|
|
2249
|
+
return `
|
|
2250
|
+
codingns assistant follow-ups fail
|
|
2251
|
+
|
|
2252
|
+
用途:
|
|
2253
|
+
回写“任务失败”结论,并记录失败原因。
|
|
2254
|
+
|
|
2255
|
+
用法:
|
|
2256
|
+
codingns assistant follow-ups fail <taskId> --summary "..." [--reason "..."] --token <token>
|
|
1448
2257
|
`.trim();
|
|
1449
2258
|
case "terminals":
|
|
1450
2259
|
return `
|
|
@@ -1687,10 +2496,11 @@ codingns assistant worktrees cleanup
|
|
|
1687
2496
|
return `
|
|
1688
2497
|
codingns assistant 用法:
|
|
1689
2498
|
|
|
1690
|
-
codingns assistant help [capabilities|projects|sessions|terminals|debug-targets|debug-runtimes|workspaces|worktrees] [action]
|
|
2499
|
+
codingns assistant help [capabilities|projects|sessions|sandboxes|automations|timers|follow-ups|terminals|debug-targets|debug-runtimes|workspaces|worktrees] [action]
|
|
1691
2500
|
codingns assistant capabilities list [--base-url http://127.0.0.1:3002] --token <token>
|
|
1692
2501
|
codingns assistant projects list [--workspace-id <id>] [--status active|paused|archived] [--risk-level low|medium|high] --token <token>
|
|
1693
2502
|
codingns assistant projects get <projectId> [--base-url ...] --token <token>
|
|
2503
|
+
codingns assistant follow-ups continue <taskId> --summary "..." --continue-prompt "..." --token <token>
|
|
1694
2504
|
codingns assistant debug-targets compatibility-matrix [--base-url ...] --token <token>
|
|
1695
2505
|
codingns assistant debug-targets analyze --workspace-id <id> --root-path <path> [--command-hint <command>] [--command-hint <command>] [--base-url ...] --token <token>
|
|
1696
2506
|
codingns assistant debug-targets framework-analysis <targetId> [--base-url ...] --token <token>
|
|
@@ -1710,11 +2520,27 @@ codingns assistant 用法:
|
|
|
1710
2520
|
codingns assistant workspaces nav-state <workspaceId> [--collapsed true|false] [--background-color #RRGGBB|none] [--base-url ...] --token <token>
|
|
1711
2521
|
codingns assistant workspaces remove <workspaceId> [--base-url ...] --token <token>
|
|
1712
2522
|
codingns assistant sessions list --project <projectId> [--base-url ...] --token <token>
|
|
2523
|
+
codingns assistant sessions start (--project <projectId> | --workspace <workspaceId> | --sandbox <sandboxId>) --message "..." [--provider <provider>] [--model <model>] [--reasoning-level <level>] [--permission-mode <mode>] --token <token>
|
|
1713
2524
|
codingns assistant sessions get <sessionId> [--base-url ...] --token <token>
|
|
1714
2525
|
codingns assistant sessions messages <sessionId> [--cursor <cursor>] [--limit 40] [--direction forward|backward] --token <token>
|
|
1715
2526
|
codingns assistant sessions runtime <sessionId> [--base-url ...] --token <token>
|
|
2527
|
+
codingns assistant sessions delete <sessionId> [--base-url ...] --token <token>
|
|
1716
2528
|
codingns assistant sessions send <sessionId> --message "..." [--client-request-id <id>] [--model <model>] [--reasoning-level <level>] [--permission-mode <mode>] --token <token>
|
|
1717
2529
|
codingns assistant sessions fork <sessionId> [--source-type session|message] [--message-id <id>] [--strategy auto|native-only|reconstruct-only] [--target-provider <provider>] --token <token>
|
|
2530
|
+
codingns assistant sandboxes list [--status active|archived|expired|deleted] [--base-url ...] --token <token>
|
|
2531
|
+
codingns assistant sandboxes create [--title <title>] [--description <text>] [--purpose <text>] [--expires-at <isoTime>] [--source-kind blank|clone] [--repository-url <url>] [--directory-name <name>] [--auth-mode none|basic|token] [--username <name>] [--password <password>] [--auth-token <token>] [--base-url ...] --token <token>
|
|
2532
|
+
codingns assistant sandboxes promote <sandboxId> [--mode pin|project] [--project-name <name>] [--provider <provider>] [--base-url ...] --token <token>
|
|
2533
|
+
codingns assistant sandboxes expire <sandboxId> [--base-url ...] --token <token>
|
|
2534
|
+
codingns assistant sandboxes remove <sandboxId> [--base-url ...] --token <token>
|
|
2535
|
+
codingns assistant automations list [--status active|completed|cancelled|failed] [--control-session-id <id>] --token <token>
|
|
2536
|
+
codingns assistant automations get <automationId> [--base-url ...] --token <token>
|
|
2537
|
+
codingns assistant automations create --message "..." [--trigger once|interval|cron|condition] [--title <title>] [--due-at <isoTime> | --after-seconds <seconds>] [--every-seconds <n> | --every-minutes <n> | --every-hours <n>] [--stop-at <isoTime>] [--cron-minute <0-59>] [--cron-hour <0-23>] [--cron-day-of-week <0-6>] [--condition-kind git.remote_tag_changed|session.runtime_idle] [--repository-url <url>] [--condition-session-id <sessionId>] [--poll-interval-seconds <n>] [--expires-at <isoTime>] [--max-checks <n>] [--include-trigger-context] [--control-session-id <id>] [--project-id <projectId>] [--session-id <sessionId>] --token <token>
|
|
2538
|
+
codingns assistant automations cancel <automationId> [--base-url ...] --token <token>
|
|
2539
|
+
codingns assistant automations runs <automationId> [--base-url ...] --token <token>
|
|
2540
|
+
codingns assistant timers list [--status active|completed|cancelled|failed] [--control-session-id <id>] --token <token>
|
|
2541
|
+
codingns assistant timers get <timerId> [--base-url ...] --token <token>
|
|
2542
|
+
codingns assistant timers create --message "..." [--title <title>] [--due-at <isoTime> | --after-seconds <seconds>] [--control-session-id <id>] [--project-id <projectId>] [--session-id <sessionId>] --token <token>
|
|
2543
|
+
codingns assistant timers cancel <timerId> [--base-url ...] --token <token>
|
|
1718
2544
|
codingns assistant terminals list [--workspace-id <id> | --project-id <id>] --token <token>
|
|
1719
2545
|
codingns assistant terminals history <terminalId> [--before-seq <n>] [--limit 20] --token <token>
|
|
1720
2546
|
codingns assistant terminals send <terminalId> --input "npm test\\n" --token <token>
|
|
@@ -1734,6 +2560,39 @@ codingns assistant 用法:
|
|
|
1734
2560
|
}
|
|
1735
2561
|
}
|
|
1736
2562
|
|
|
2563
|
+
function getProviderSessionsHelpText(topic) {
|
|
2564
|
+
switch (topic) {
|
|
2565
|
+
case "provider-sessions.delete":
|
|
2566
|
+
return `
|
|
2567
|
+
codingns provider-sessions delete
|
|
2568
|
+
|
|
2569
|
+
用途:
|
|
2570
|
+
直接删除底层 provider 会话,不经过项目会话索引。适合给 Host 或脚本层做真实删除调用。
|
|
2571
|
+
|
|
2572
|
+
用法:
|
|
2573
|
+
codingns provider-sessions delete --provider <claude-code|codex|opencode|gemini|kimi> --provider-session-id <id> --raw-store-ref <ref>
|
|
2574
|
+
`.trim();
|
|
2575
|
+
default:
|
|
2576
|
+
return `
|
|
2577
|
+
codingns provider-sessions 用法:
|
|
2578
|
+
|
|
2579
|
+
codingns provider-sessions delete --provider <claude-code|codex|opencode|gemini|kimi> --provider-session-id <id> --raw-store-ref <ref>
|
|
2580
|
+
|
|
2581
|
+
环境变量:
|
|
2582
|
+
|
|
2583
|
+
CODINGNS_CLAUDE_CODE_HOME Claude Code 数据目录,默认 ~/.claude
|
|
2584
|
+
CODINGNS_CODEX_HOME Codex 数据目录,默认 ~/.codex
|
|
2585
|
+
CODINGNS_GEMINI_HOME Gemini 数据目录,默认 ~/.gemini
|
|
2586
|
+
CODINGNS_GEMINI_COMMAND Gemini CLI 路径,默认 gemini
|
|
2587
|
+
CODINGNS_KIMI_HOME Kimi 数据目录,默认 ~/.kimi
|
|
2588
|
+
CODINGNS_KIMI_DEFAULT_MODEL Kimi 默认模型,可选
|
|
2589
|
+
CODINGNS_OPENCODE_BASE_URL OpenCode server 地址,可选
|
|
2590
|
+
CODINGNS_OPENCODE_DATA_DIR OpenCode 数据目录,可选
|
|
2591
|
+
CODINGNS_OPENCODE_DB_PATH OpenCode sqlite 路径,可选
|
|
2592
|
+
`.trim();
|
|
2593
|
+
}
|
|
2594
|
+
}
|
|
2595
|
+
|
|
1737
2596
|
function getSkillsHelpText(topic) {
|
|
1738
2597
|
switch (topic) {
|
|
1739
2598
|
case "skills.overview":
|
|
@@ -1806,6 +2665,23 @@ function buildAssistantHelpTopic(action, rest) {
|
|
|
1806
2665
|
return `${action}.${rest[0]}`;
|
|
1807
2666
|
}
|
|
1808
2667
|
|
|
2668
|
+
function resolveAssistantSessionStartTarget(values) {
|
|
2669
|
+
const projectId = readOptionalTrimmedValue(values.project);
|
|
2670
|
+
const workspaceId = readOptionalTrimmedValue(values.workspace);
|
|
2671
|
+
const sandboxId = readOptionalTrimmedValue(values.sandbox);
|
|
2672
|
+
const targets = [
|
|
2673
|
+
projectId ? { projectId } : null,
|
|
2674
|
+
workspaceId ? { workspaceId } : null,
|
|
2675
|
+
sandboxId ? { sandboxId } : null
|
|
2676
|
+
].filter((item) => item !== null);
|
|
2677
|
+
|
|
2678
|
+
if (targets.length !== 1) {
|
|
2679
|
+
fail("sessions start 必须且只能提供 --project、--workspace、--sandbox 其中一个");
|
|
2680
|
+
}
|
|
2681
|
+
|
|
2682
|
+
return targets[0];
|
|
2683
|
+
}
|
|
2684
|
+
|
|
1809
2685
|
function buildWorkspaceCloneAuth(values) {
|
|
1810
2686
|
const authMode = readOptionalTrimmedValue(values["auth-mode"]);
|
|
1811
2687
|
|
|
@@ -1936,10 +2812,46 @@ function buildSkillsHelpTopic(action) {
|
|
|
1936
2812
|
return `skills.${action}`;
|
|
1937
2813
|
}
|
|
1938
2814
|
|
|
2815
|
+
function buildProviderSessionsHelpTopic(action) {
|
|
2816
|
+
if (!action || action === "--help" || action === "-h") {
|
|
2817
|
+
return "provider-sessions";
|
|
2818
|
+
}
|
|
2819
|
+
|
|
2820
|
+
return `provider-sessions.${action}`;
|
|
2821
|
+
}
|
|
2822
|
+
|
|
1939
2823
|
function isHelpToken(value) {
|
|
1940
2824
|
return value === "help" || value === "--help" || value === "-h";
|
|
1941
2825
|
}
|
|
1942
2826
|
|
|
2827
|
+
function normalizeProviderSessionDeleteFailure(error) {
|
|
2828
|
+
const errorCode =
|
|
2829
|
+
error instanceof Error && typeof error.message === "string" && error.message.trim().length > 0
|
|
2830
|
+
? error.message.trim()
|
|
2831
|
+
: "PROVIDER_DELETE_FAILED";
|
|
2832
|
+
|
|
2833
|
+
return {
|
|
2834
|
+
ok: false,
|
|
2835
|
+
errorCode,
|
|
2836
|
+
detail: describeProviderSessionDeleteFailure(errorCode)
|
|
2837
|
+
};
|
|
2838
|
+
}
|
|
2839
|
+
|
|
2840
|
+
function describeProviderSessionDeleteFailure(errorCode) {
|
|
2841
|
+
switch (errorCode) {
|
|
2842
|
+
case "PROVIDER_DELETE_NOT_SUPPORTED":
|
|
2843
|
+
return "当前 provider 还没有接入 CLI 删除能力";
|
|
2844
|
+
case "PROVIDER_SESSION_NOT_FOUND":
|
|
2845
|
+
return "provider 会话不存在或已经被删除";
|
|
2846
|
+
case "PROVIDER_SESSION_ID_REQUIRED":
|
|
2847
|
+
return "providerSessionId 不能为空";
|
|
2848
|
+
case "PROVIDER_NOT_SUPPORTED":
|
|
2849
|
+
return "当前 provider 不受支持";
|
|
2850
|
+
default:
|
|
2851
|
+
return errorCode;
|
|
2852
|
+
}
|
|
2853
|
+
}
|
|
2854
|
+
|
|
1943
2855
|
function fail(message) {
|
|
1944
2856
|
console.error(`[codingns] ${message}`);
|
|
1945
2857
|
process.exit(1);
|