@keyou007/agent-bot 0.1.24-alpha.3 → 0.1.24-alpha.4

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.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@keyou007/agent-bot",
3
- "version": "0.1.24-alpha.3",
3
+ "version": "0.1.24-alpha.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@keyou007/agent-bot",
9
- "version": "0.1.24-alpha.3",
9
+ "version": "0.1.24-alpha.4",
10
10
  "license": "GPL-3.0-only",
11
11
  "dependencies": {
12
12
  "@agentclientprotocol/sdk": "1.2.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keyou007/agent-bot",
3
- "version": "0.1.24-alpha.3",
3
+ "version": "0.1.24-alpha.4",
4
4
  "type": "module",
5
5
  "description": "Use Codex, TraeX, and compatible coding agents from Lark/Feishu.",
6
6
  "license": "GPL-3.0-only",
@@ -110,12 +110,16 @@ These commands export only user Prompts and final answers through the latest com
110
110
 
111
111
  Feishu `/sessions [keyword]` lists and searches tasks across projects and all Providers, not just the App Server's current Provider. Switching Provider does not hide existing tasks; listing still uses paged metadata and the latest Turn summary only.
112
112
 
113
+ Feishu group renames update only the group's currently bound task title, not topic or historical tasks. Users may remove generated prefixes or use another format: recognized configured names or matching Agent prefixes yield the task title, otherwise the normalized complete group name is used. A renamed prefix does not change the task's Agent. New-group naming rules are unchanged.
114
+
113
115
  Fork creation stores source-task and branch-Turn references without synchronizing the full local Turn list. The Feishu Turn card reuses local records and loads only the summary pages needed for the requested page, not the entire history. `task turns` loads the first page if necessary and returns available local records. This does not change the Agent's inherited context. Retry listing Turns after a temporary history-read failure; unsupported summary pagination never falls back to downloading full history.
114
116
 
115
117
  If a TraeX task stops producing output, check its progress card for a pending plan-mode confirmation. `Approve Plan` / `Enter Plan Mode`, `Reject`, and `Cancel Request` require the user's explicit choice, even with automatic permissions. Preview displays the plan but cannot approve it. Cancelling a request does not itself stop the task; waiting turns still block safe restart. Never approve, stop, or force-restart merely to clear that wait. Notifications dropped by an older running version are not automatically replayed after upgrading.
116
118
 
117
119
  ## Change Settings
118
120
 
121
+ Feishu slash commands accept unique prefixes: `/mo`, `/mod`, and `/mode` open the `/model` settings card and do not accept arguments. This is model selection, not an Agent mode switch. CLI `task model [model]` keeps its documented argument behavior.
122
+
119
123
  ```powershell
120
124
  agentbot task agent [name]
121
125
  agentbot task provider [provider]
@@ -18,7 +18,6 @@ export interface RuntimeSession {
18
18
  acpSessionId: string;
19
19
  managed: ManagedAcpProcess;
20
20
  running: boolean;
21
- modes?: JsonValue;
22
21
  configOptions?: JsonValue;
23
22
  availableCommands?: JsonValue;
24
23
  onUpdate: (session: RuntimeSession, update: Record<string, JsonValue>) => void;
@@ -81,7 +80,6 @@ export class AcpSessionManager {
81
80
  acpSessionId: newSessionResult.sessionId,
82
81
  managed,
83
82
  running: false,
84
- modes: newSessionResult.modes,
85
83
  configOptions: newSessionResult.configOptions,
86
84
  onUpdate: input.onUpdate,
87
85
  onPermissionRequest: input.onPermissionRequest,
@@ -147,14 +145,6 @@ export class AcpSessionManager {
147
145
  this.processManager.stopAll();
148
146
  }
149
147
 
150
- async setMode(localSessionId: string, modeId: string): Promise<void> {
151
- const session = this.requireSession(localSessionId);
152
- await session.managed.connection.request("session/set_mode", {
153
- sessionId: session.acpSessionId,
154
- modeId,
155
- });
156
- }
157
-
158
148
  async setConfigOption(localSessionId: string, configId: string, value: string): Promise<JsonValue> {
159
149
  const session = this.requireSession(localSessionId);
160
150
  const result = await session.managed.connection.request<JsonValue>("session/set_config_option", {
@@ -242,13 +232,6 @@ export class AcpSessionManager {
242
232
  session.configOptions = update.configOptions;
243
233
  }
244
234
 
245
- if (updateType === "current_mode_update" && session.modes && isObject(session.modes)) {
246
- session.modes = {
247
- ...session.modes,
248
- currentModeId: update.modeId,
249
- };
250
- }
251
-
252
235
  if (updateType === "available_commands_update" && "availableCommands" in update) {
253
236
  session.availableCommands = update.availableCommands;
254
237
  }
@@ -63,7 +63,6 @@ export interface AcpInitializeResult {
63
63
 
64
64
  export interface AcpSessionNewResult {
65
65
  sessionId: string;
66
- modes?: JsonValue;
67
66
  configOptions?: JsonValue;
68
67
  }
69
68
 
@@ -42,8 +42,6 @@ const COMMAND_INITIALISMS: Partial<Record<CommandName, string>> = {
42
42
  nosteer: "ns",
43
43
  };
44
44
 
45
- const DISABLED_COMMAND_NAMES = new Set(["mode", "modes"]);
46
-
47
45
  export class CommandRouter {
48
46
  parse(text: string): Command {
49
47
  const trimmed = text.trim();
@@ -162,7 +160,6 @@ export class CommandRouter {
162
160
  function resolveCommandName(rawCommand: string): CommandName {
163
161
  const input = rawCommand.slice(1).toLowerCase();
164
162
  if (!input) throw unknownCommand(rawCommand);
165
- if (DISABLED_COMMAND_NAMES.has(input)) throw unknownCommand(rawCommand);
166
163
 
167
164
  const exact = COMMAND_NAMES.find((command) => command === input);
168
165
  if (exact) return exact;
@@ -62,7 +62,7 @@ const PREVIEW_LABELS = {
62
62
  statuses: {
63
63
  starting: "正在启动",
64
64
  running: "正在处理",
65
- tool_running: "正在执行工具",
65
+ tool_running: "正在处理",
66
66
  waiting_for_approval: "等待确认",
67
67
  completed: "已完成",
68
68
  cancelled: "已停止",
@@ -103,7 +103,7 @@ const PREVIEW_LABELS = {
103
103
  statuses: {
104
104
  starting: "Starting",
105
105
  running: "Processing",
106
- tool_running: "Running tool",
106
+ tool_running: "Processing",
107
107
  waiting_for_approval: "Waiting for approval",
108
108
  completed: "Completed",
109
109
  cancelled: "Stopped",
@@ -1094,8 +1094,8 @@ function renderMetadata(state: TurnViewState, language: TurnPreviewLanguage): st
1094
1094
  const elapsed = `<span>${escapeHtml(labels.elapsed)}<strong${isTerminal(state.status) ? "" : ` data-live-elapsed data-started-at="${state.startedAt}"`}>${completedAt === undefined && isTerminal(state.status) ? escapeHtml(labels.unknown) : formatDuration((completedAt ?? Date.now()) - state.startedAt)}</strong></span>`;
1095
1095
  return [
1096
1096
  elapsed,
1097
+ state.modelProvider?.trim() ? `<span title="Provider">${escapeHtml(state.modelProvider.trim())}</span>` : "",
1097
1098
  state.model?.trim() ? `<span title="${escapeAttribute(labels.model)}">${escapeHtml(state.model.trim())}</span>` : "",
1098
- state.modelProvider?.trim() ? `<span title="Provider">Provider: ${escapeHtml(state.modelProvider.trim())}</span>` : "",
1099
1099
  state.totalTokens === undefined ? "" : state.cachedInputTokens === undefined
1100
1100
  ? `<span title="${escapeAttribute(labels.turnTokens)}">${formatTokenCount(state.totalTokens)} tokens</span>`
1101
1101
  : `<span title="${escapeAttribute(labels.nonCachedTokens)}: ${formatNumber(state.totalTokens)} tokens">${escapeHtml(labels.nonCachedTokens)} ${formatTokenCount(state.totalTokens)} tokens</span>`,
@@ -6039,10 +6039,12 @@ export class ProxySessionController {
6039
6039
  const legacyTitle = legacy && record.agentName.toLowerCase() === legacy.agentName.toLowerCase()
6040
6040
  ? legacy.title
6041
6041
  : undefined;
6042
- if (isDefaultGroupNameFormat(nameFormat) && isLegacyGroupPrefixOnly(event.afterName)) return;
6043
- const title = normalizeTaskTitle(isDefaultGroupNameFormat(nameFormat)
6042
+ const defaultFormat = isDefaultGroupNameFormat(nameFormat);
6043
+ let parsedTitle = defaultFormat
6044
6044
  ? legacyTitle ?? templateTitle
6045
- : templateTitle ?? legacyTitle);
6045
+ : templateTitle ?? legacyTitle;
6046
+ if (defaultFormat && isLegacyGroupPrefixOnly(event.afterName)) parsedTitle = undefined;
6047
+ const title = normalizeTaskTitle(parsedTitle) ?? normalizeTaskTitle(event.afterName);
6046
6048
  if (!title || title === record.title) return;
6047
6049
 
6048
6050
  const loaded = await this.loadSession(record);