@love-moon/conductor-cli 0.17.1 → 0.17.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @love-moon/conductor-cli
2
2
 
3
+ ## 0.17.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 0a9488e: Add Kimi website text conversations with persistent login, multi-turn context,
8
+ reply progress, new chats and browser diagnostics. Expose the provider through
9
+ ai-sdk's chat-web backend and the web-kimi Conductor configuration alias.
10
+
11
+ Explicit unknown chat-web providers now fail with a clear error instead of
12
+ silently opening ChatGPT. The existing kimi CLI backend is unchanged.
13
+
14
+ - b16c1ae: Allow a shared daemon to run the AI side of a Global AI Backend task while code
15
+ stays on one of the user's own daemons. Advertise
16
+ `shared_ai_global_backend_v1` and forward the task id on remote exec, file, and
17
+ MCP requests so the backend can authorize only that task's remote binding.
18
+
19
+ Keep remote grants tied to active tasks: shared credentials cannot mint remote
20
+ bindings, renew them through restarts or persistent rounds, or reactivate ended
21
+ tasks through status updates. Check shared AI compatibility when restarting or
22
+ starting later rounds of an existing remote task too.
23
+
24
+ - Updated dependencies [b124565]
25
+ - Updated dependencies [0a9488e]
26
+ - @love-moon/ai-sdk@0.17.2
27
+ - @love-moon/conductor-sdk@0.17.2
28
+
3
29
  ## 0.17.1
4
30
 
5
31
  ### Patch Changes
@@ -55,13 +55,19 @@ const DEFAULT_CLIs = {
55
55
  // chat-web is the runtime backend (an in-process Chromium driver, not a CLI
56
56
  // binary). It has multiple sub-providers selected via --model. Each user-
57
57
  // facing alias below resolves to the chat-web runtime; advertising the bare
58
- // `chat-web` backend would be ambiguous, so we emit two explicit aliases.
58
+ // `chat-web` backend would be ambiguous, so we emit explicit aliases.
59
59
  "web-chatgpt": {
60
60
  command: "chat-web",
61
61
  execArgs: "--model chatgpt",
62
62
  description: "Chat web (ChatGPT) via @love-moon/chat-web",
63
63
  runtimeBackend: "chat-web"
64
64
  },
65
+ "web-kimi": {
66
+ command: "chat-web",
67
+ execArgs: "--model kimi",
68
+ description: "Chat web (Kimi) via @love-moon/chat-web",
69
+ runtimeBackend: "chat-web"
70
+ },
65
71
  "web-gemini": {
66
72
  command: "chat-web",
67
73
  execArgs: "--model gemini",
@@ -137,10 +143,10 @@ function buildConfigEntryLines(cli, info, { commented = false } = {}) {
137
143
  lines.push(`${commentPrefix}opencode runs via ai-sdk server mode with permission=allow`);
138
144
  }
139
145
  if (cli === "web-chatgpt") {
140
- // web-chatgpt / web-gemini both resolve to the chat-web runtime backend
146
+ // web-chatgpt / web-gemini / web-kimi resolve to the chat-web runtime backend
141
147
  // (an in-process Chromium driver via @love-moon/chat-web). The command
142
148
  // line is not executed; CLI parses --model from it.
143
- lines.push(`${commentPrefix}web-chatgpt / web-gemini drive a real Chromium browser via @love-moon/chat-web`);
149
+ lines.push(`${commentPrefix}web-chatgpt / web-gemini / web-kimi drive a real Chromium browser via @love-moon/chat-web`);
144
150
  }
145
151
 
146
152
  lines.push(`${entryPrefix}${cli}: ${fullCommand}`);
@@ -940,10 +940,10 @@ async function main() {
940
940
  env: process.env,
941
941
  });
942
942
 
943
- // chat-web tasks drive a real Chromium browser that holds a per-profile
944
- // singleton lock for as long as the task lives. A task that never ends
945
- // pins that browser indefinitely (and blocks other chats for the same
946
- // provider), so we cap its active lifetime and auto-stop it when exceeded.
943
+ // chat-web tasks retain a tab in the shared profile browser while alive.
944
+ // New runtimes schedule turns across tasks; older runtimes exclusively
945
+ // own the profile. Cap task lifetime so abandoned sessions release their
946
+ // browser resources in either runtime.
947
947
  // The conversation itself is preserved (it lives in the provider account
948
948
  // and the persisted profile; closing the browser does not delete it).
949
949
  const runtimeBackendToken = String(sessionCommandLine || "")
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@love-moon/conductor-cli",
3
- "version": "0.17.1",
4
- "gitCommitId": "e3dbbad",
3
+ "version": "0.17.2",
4
+ "gitCommitId": "1671ee1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/lovemoon-ai/conductor.git"
@@ -24,8 +24,8 @@
24
24
  "test": "node --test test/*.test.js"
25
25
  },
26
26
  "dependencies": {
27
- "@love-moon/ai-sdk": "0.17.1",
28
- "@love-moon/conductor-sdk": "0.17.1",
27
+ "@love-moon/ai-sdk": "0.17.2",
28
+ "@love-moon/conductor-sdk": "0.17.2",
29
29
  "@github/copilot-sdk": "^0.3.0",
30
30
  "chrome-launcher": "^1.2.1",
31
31
  "chrome-remote-interface": "^0.33.0",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "optionalDependencies": {
40
40
  "@roamhq/wrtc": "^0.10.0",
41
- "@love-moon/chat-web": "0.17.1"
41
+ "@love-moon/chat-web": "0.17.2"
42
42
  },
43
43
  "pnpm": {
44
44
  "onlyBuiltDependencies": [
package/src/daemon.js CHANGED
@@ -3928,6 +3928,9 @@ export function startDaemon(config = {}, deps = {}) {
3928
3928
  // another daemon over `conductor remote` and binds the remote_* MCP tools
3929
3929
  // to a remoteWorkspace as well as a remoteWorktree.
3930
3930
  "global_backend_v1",
3931
+ // A shared AI also sends CONDUCTOR_TASK_ID on every remote request so the
3932
+ // backend can grant only that task's A → B remote permission.
3933
+ "shared_ai_global_backend_v1",
3931
3934
  "backend_session_list",
3932
3935
  CUSTOM_COMMANDS_CAPABILITY,
3933
3936
  UPDATE_DAEMON_CAPABILITY,
@@ -62,7 +62,11 @@ export function loadCliConfig(configFile, env = process.env) {
62
62
  }
63
63
 
64
64
  function authHeaders(config) {
65
- return { Authorization: `Bearer ${config.agentToken}` };
65
+ const taskId = process.env.CONDUCTOR_TASK_ID?.trim();
66
+ return {
67
+ Authorization: `Bearer ${config.agentToken}`,
68
+ ...(taskId ? { "X-Conductor-Task-Id": taskId } : {}),
69
+ };
66
70
  }
67
71
 
68
72
  async function toApiError(response) {
@@ -19,6 +19,7 @@ export const REMOTE_WORKTREE_ENV = "CONDUCTOR_REMOTE_WORKTREE";
19
19
  const FORWARDED_ENV = [
20
20
  "CONDUCTOR_AGENT_TOKEN",
21
21
  "CONDUCTOR_BACKEND_URL",
22
+ "CONDUCTOR_TASK_ID",
22
23
  "CONDUCTOR_CONFIG",
23
24
  "CONDUCTOR_HOME",
24
25
  "CONDUCTOR_REMOTE_CHUNK_BYTES",
@@ -19,9 +19,9 @@ const BUILT_IN_RUNTIME_BACKEND_SET = new Set(BUILT_IN_RUNTIME_BACKENDS);
19
19
  //
20
20
  // chat-web is intentionally NOT here even though it's also command-optional
21
21
  // (it drives a Chromium browser, not a CLI). The reason: chat-web has
22
- // configurable sub-providers (chatgpt / gemini / deepseek) selected via
22
+ // configurable sub-providers (chatgpt / gemini / kimi) selected via
23
23
  // `--model`, and surfacing a bare `chat-web` backend alongside user
24
- // aliases like `web-chatgpt` / `web-gemini` is just confusing — the alias
24
+ // aliases like `web-chatgpt` / `web-gemini` / `web-kimi` is just confusing — the alias
25
25
  // IS the sub-provider choice. Users who want chat-web must declare an
26
26
  // explicit allow_cli_list entry (which is also where `--model` lives).
27
27
  const COMMAND_OPTIONAL_BUILT_IN_RUNTIME_BACKENDS = ["copilot", "dsh"];