lark-coding-assistant 0.2.3 → 0.2.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.
package/README.md CHANGED
@@ -108,6 +108,8 @@ lca start --name docs --agent claude --cwd ~/workspace/docs
108
108
 
109
109
  名称只允许字母、数字、下划线和短横线,最长 40 个字符。不指定名称时使用 `default`。
110
110
 
111
+ Session 创建和恢复采用 30 秒启动事务。本地与飞书都会等到 agent 可用后再报告成功;超过 30 秒会取消底层启动、清理临时 tmux 和状态,并返回包含失败阶段与最近终端输出的提示,不会继续在后台运行。同名 session 正在启动时会直接提示“正在启动”,不同名称可以并行启动。Resume Picker 等待用户选择不计入 30 秒,提交选择后重新开始一次 30 秒恢复事务。该限制只作用于启动链路,不影响消息、审批、Question、`status`、`tail`、`attach`、`stop` 或 daemon 管理。
112
+
111
113
  一个 PersonalAgent 私聊同一时刻只连接一个 active session。在飞书发送:
112
114
 
113
115
  ```text
package/dist/cli.js CHANGED
@@ -233,6 +233,7 @@ function runFile(file, args, options = {}) {
233
233
  {
234
234
  cwd: options.cwd,
235
235
  timeout: options.timeoutMs ?? 1e4,
236
+ signal: options.signal,
236
237
  encoding: "utf8",
237
238
  maxBuffer: 4 * 1024 * 1024
238
239
  },
@@ -914,6 +915,28 @@ function formatKnownError(error, context) {
914
915
  ` lark-coding-assistant attach ${sessionId}`,
915
916
  " lark-coding-assistant start --name <\u65B0\u540D\u79F0>"
916
917
  ];
918
+ case "SESSION_STARTING":
919
+ return [
920
+ `session\u300C${sessionId}\u300D\u6B63\u5728\u542F\u52A8\uFF0C\u8BF7\u7B49\u5F85\u5F53\u524D\u64CD\u4F5C\u5B8C\u6210\u3002`,
921
+ "",
922
+ "\u7A0D\u540E\u53EF\u67E5\u770B\u72B6\u6001\uFF1A",
923
+ ` lark-coding-assistant status ${sessionId}`
924
+ ];
925
+ case "SESSION_START_TIMEOUT": {
926
+ const excerpt = safeValue(context.terminalExcerpt, "Agent \u672A\u8F93\u51FA\u53EF\u7528\u9519\u8BEF\u4FE1\u606F\u3002");
927
+ return [
928
+ `session\u300C${sessionId}\u300D\u542F\u52A8\u8D85\u8FC7 30 \u79D2\uFF0C\u5DF2\u53D6\u6D88\u5E76\u6E05\u7406\u3002`,
929
+ "",
930
+ `Agent\uFF1A${safeValue(context.agent, "\u672A\u77E5")}`,
931
+ `\u5DE5\u4F5C\u76EE\u5F55\uFF1A${safeValue(context.cwd, "\u672A\u77E5")}`,
932
+ `\u8D85\u65F6\u9636\u6BB5\uFF1A${safeValue(context.stage, "unknown")}`,
933
+ "",
934
+ "\u6700\u8FD1\u7EC8\u7AEF\u8F93\u51FA\uFF1A",
935
+ excerpt,
936
+ "",
937
+ "\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u540C\u540D session \u91CD\u8BD5\u3002"
938
+ ];
939
+ }
917
940
  case "AGENT_SESSION_IN_USE": {
918
941
  const ownerSessionId = safeValue(context.ownerSessionId, "\u73B0\u6709 session");
919
942
  return [
@@ -1372,10 +1395,11 @@ async function runStart(options) {
1372
1395
  await ensureInitialized();
1373
1396
  await preflight(options.agent);
1374
1397
  await ensureDaemon();
1398
+ console.log(`\u6B63\u5728\u542F\u52A8 ${options.agent} session\u300C${options.name}\u300D\u2026`);
1375
1399
  const value = await daemonValue({
1376
1400
  method: "start",
1377
1401
  ...request
1378
- });
1402
+ }, 35e3);
1379
1403
  if (value.binding.mode === "reused") {
1380
1404
  console.log("\n\u5DF2\u81EA\u52A8\u6CBF\u7528\u539F\u6709\u98DE\u4E66/Lark \u79C1\u804A\u7ED1\u5B9A\u3002\n");
1381
1405
  } else if (value.binding.mode === "awaiting-owner-message") {
@@ -1575,8 +1599,8 @@ async function ensureDaemon() {
1575
1599
  function daemonEntryPath() {
1576
1600
  return fileURLToPath(new URL("./daemon-entry.js", import.meta.url));
1577
1601
  }
1578
- async function daemonValue(request) {
1579
- const response = await requestDaemon(paths.socket, request);
1602
+ async function daemonValue(request, timeoutMs) {
1603
+ const response = await requestDaemon(paths.socket, request, timeoutMs);
1580
1604
  if (!response.ok) throw daemonResultError(response);
1581
1605
  return response.value;
1582
1606
  }