oasis_test_v2 2.2.127 → 2.2.128

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.
Files changed (2) hide show
  1. package/dist/index.js +106 -29
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1720,6 +1720,22 @@ function formatOverlapCandidate(c5, timeZone) {
1720
1720
  bits.push(`\u4EA7\u51FA ${c5.artifactCount} \u4E2A`);
1721
1721
  return ` ${bits.join(" ")}`;
1722
1722
  }
1723
+ function formatOverlapForExpert(r5, timeZone) {
1724
+ const all2 = [...r5.active, ...r5.done];
1725
+ if (all2.length === 0) return "";
1726
+ return [
1727
+ "---",
1728
+ "## \u76F8\u8FD1\u7684\u4E8B\u9879\uFF08\u7CFB\u7EDF\u7C97\u7B5B\uFF0C\u672A\u786E\u8BA4\uFF09",
1729
+ "",
1730
+ "\u7CFB\u7EDF\u7C97\u7B5B\u5230\u4EE5\u4E0B\u76F8\u8FD1\u7684\u4E8B\u9879\uFF08\u672A\u786E\u8BA4\uFF09\u3002**\u5F00\u5DE5\u524D**\u5148\u7528 id \u9010\u6761\u67E5\u8BE6\u60C5\uFF1A`oasis todo show <\u5F85\u529Eid>` / `oasis workorder <\u5DE5\u5355id>` / `oasis delegate --status <\u59D4\u6D3Eid>`\uFF08\u522B\u4EBA\u5BF9\u8BDD\u91CC\u6D3E\u7684\u4E5F\u80FD\u8BFB\u6458\u8981\uFF09\u3002",
1731
+ "",
1732
+ ...all2.map((c5) => formatOverlapCandidate(c5, timeZone)),
1733
+ "",
1734
+ "- \u6709\u73B0\u6210\u7ED3\u679C\u80FD\u76F4\u63A5\u7528\uFF0C\u6216\u80FD\u5728\u5B83\u57FA\u7840\u4E0A\u6539 \u2192 \u7528\u5B83\uFF0C\u4EA4\u56DE\u65F6\u5199\u660E\u7528\u4E86\u54EA\u6761\uFF08id\uFF09\u3002",
1735
+ "- \u786E\u5B9E\u662F\u540C\u4E00\u4EF6\u4E8B\uFF08\u522B\u4EBA\u6B63\u5728\u505A\uFF0C\u6216\u5DF2\u7ECF\u505A\u5B8C\u3001\u7167\u505A\u5C31\u662F\u91CD\u590D\uFF09\u2192 **\u5148\u522B\u505A**\uFF0C\u76F4\u63A5\u4EA4\u56DE\uFF1A\u8BF4\u660E\u662F\u54EA\u6761\uFF08id\uFF09\u3001\u4E3A\u4EC0\u4E48\u5224\u65AD\u662F\u91CD\u590D\u3001\u5EFA\u8BAE\u600E\u4E48\u5904\u7406\uFF08\u5408\u5E76 / \u590D\u7528 / \u4ECD\u8981\u91CD\u505A\uFF09\uFF0C\u7531\u6D3E\u6D3B\u65B9\u8F6C\u544A\u7528\u6237\u51B3\u5B9A\u3002",
1736
+ "- \u90FD\u4E0D\u76F8\u5173 \u2192 \u7167\u5E38\u5E72\u6D3B\uFF0C\u4EA4\u56DE\u65F6\u4E0D\u7528\u63D0\u3002"
1737
+ ].join("\n");
1738
+ }
1723
1739
  function formatOverlapLines(r5, timeZone) {
1724
1740
  const all2 = [...r5.active, ...r5.done];
1725
1741
  if (all2.length === 0) return [];
@@ -210633,7 +210649,7 @@ async function seedChildRoundRows(chatStore, childSessionId, round, prompt2, now
210633
210649
  createdAt: now
210634
210650
  });
210635
210651
  }
210636
- var import_node_crypto42, DelegationError, DIGEST_CHARS, PENDING_QUEUE_OWNER, DISPATCH_LEASE_MS, CONSECUTIVE_FAIL_LIMIT, roundTurnKey, roundTurnId, DelegationService;
210652
+ var import_node_crypto42, DelegationError, DELEGATION_OVERLAP_TIMEOUT_MS, DIGEST_CHARS, PENDING_QUEUE_OWNER, DISPATCH_LEASE_MS, CONSECUTIVE_FAIL_LIMIT, roundTurnKey, roundTurnId, DelegationService;
210637
210653
  var init_service3 = __esm({
210638
210654
  "../server/src/domains/delegations/service.ts"() {
210639
210655
  "use strict";
@@ -210654,6 +210670,7 @@ var init_service3 = __esm({
210654
210670
  this.name = "DelegationError";
210655
210671
  }
210656
210672
  };
210673
+ DELEGATION_OVERLAP_TIMEOUT_MS = 3e3;
210657
210674
  DIGEST_CHARS = 200;
210658
210675
  PENDING_QUEUE_OWNER = "delegation-dispatch";
210659
210676
  DISPATCH_LEASE_MS = 10 * 60 * 1e3;
@@ -211019,7 +211036,11 @@ var init_service3 = __esm({
211019
211036
  `\u8FD9\u6761\u4F1A\u8BDD\u91CC\u53EB\u300C${desiredLabel}\u300D\u7684\u59D4\u6D3E\u592A\u591A\u4E86\uFF0C\u6362\u4E00\u4E2A --as \u77ED\u540D\u518D\u6D3E\u3002`
211020
211037
  );
211021
211038
  }
211022
- await this.materializeChild({ record: record10, chatStore, parent, expert, task: input.task, companyId, now });
211039
+ const overlap = inserted ? await this.overlapForExpert(input.task, record10, caller, companyId) : void 0;
211040
+ const expertTask = overlap ? `${input.task}
211041
+
211042
+ ${overlap.block}` : input.task;
211043
+ await this.materializeChild({ record: record10, chatStore, parent, expert, task: expertTask, companyId, now });
211023
211044
  await store.appendTouch({
211024
211045
  delegationId: record10.id,
211025
211046
  messageId: parentMessageId,
@@ -211035,9 +211056,41 @@ var init_service3 = __esm({
211035
211056
  );
211036
211057
  const turns = await this.resolveTurns(companyId);
211037
211058
  const claimed = await this.claim(store, record10.id, now, Boolean(turns));
211038
- if (claimed) this.track(this.dispatchExpert(claimed, input.task, companyId, snapshot, turns, { inbound }));
211059
+ if (claimed) this.track(this.dispatchExpert(claimed, expertTask, companyId, snapshot, turns, { inbound }));
211039
211060
  if (inserted) this.options.metrics?.recordCreated();
211040
- return { record: record10, created: inserted };
211061
+ return { record: record10, created: inserted, ...overlap ? { overlap: { count: overlap.count, lines: overlap.lines } } : {} };
211062
+ }
211063
+ /**
211064
+ * 派活之前那一次比对(ADR 0640 D-C9)。返回要拼进任务书末尾的那一段与条数;没候选、没接比对、出错、超时都回 undefined——
211065
+ * **绝不挡住派活**。超时那一枝不等比对自己结束(它在后台跑完也只是多记一条比对事件)。
211066
+ */
211067
+ async overlapForExpert(task, record10, caller, companyId) {
211068
+ if (!this.options.overlapForTask) return void 0;
211069
+ const timeoutMs = this.options.overlapTimeoutMs ?? DELEGATION_OVERLAP_TIMEOUT_MS;
211070
+ let timer;
211071
+ try {
211072
+ const r5 = await Promise.race([
211073
+ this.options.overlapForTask({
211074
+ ...companyId ? { companyId } : {},
211075
+ actor: caller.actor,
211076
+ parentSessionId: record10.parentSessionId,
211077
+ delegationId: record10.id,
211078
+ task
211079
+ }),
211080
+ new Promise((resolve13) => {
211081
+ timer = setTimeout(() => resolve13(void 0), timeoutMs);
211082
+ })
211083
+ ]);
211084
+ if (!r5?.enabled) return void 0;
211085
+ const block = formatOverlapForExpert(r5, r5.timeZone);
211086
+ if (!block) return void 0;
211087
+ return { block, count: r5.active.length + r5.done.length, lines: formatOverlapLines(r5, r5.timeZone).filter((l3) => l3.startsWith(" ")) };
211088
+ } catch (error3) {
211089
+ console.warn(`[delegation] \u6D3E\u6D3B\u524D\u7684\u9632\u91CD\u53E0\u6BD4\u5BF9\u5931\u8D25\uFF0C\u8FD9\u6B21\u4E0D\u9644\u5019\u9009\u3001\u7167\u5E38\u6D3E\u6D3B\uFF08${record10.id}\uFF09: ${String(error3)}`);
211090
+ return void 0;
211091
+ } finally {
211092
+ if (timer) clearTimeout(timer);
211093
+ }
211041
211094
  }
211042
211095
  /**
211043
211096
  * 把子会话与它的两条起始消息**补齐到该有的样子**——可以重复调用,缺什么补什么。
@@ -212073,14 +212126,16 @@ function delegationRoutes(service) {
212073
212126
  const body2 = { to, task, ...as ? { as } : {}, ...files?.length ? { files } : {} };
212074
212127
  const invocationId = trustedDelegationInvocationId(body2, req.auth.dispatch);
212075
212128
  try {
212076
- const { record: record10, created } = await service.create(body2, callerOf(req, invocationId));
212129
+ const { record: record10, created, overlap } = await service.create(body2, callerOf(req, invocationId));
212077
212130
  const payload2 = {
212078
212131
  delegationId: record10.id,
212079
212132
  childSessionId: record10.childSessionId,
212080
212133
  // **实际生效**的 label(撞名后服务端加了后缀)。协调者引用时用这个返回值,
212081
212134
  // 不用它自己传进去的那个——引用错了会静默指到另一条委派上(§6.2.8)。
212082
212135
  label: record10.label ?? "",
212083
- ...files?.length ? { attachedFiles: files } : {}
212136
+ ...files?.length ? { attachedFiles: files } : {},
212137
+ // 派活之前比出来、已附进专家任务书的相近事项(ADR 0640 D-C9)。派活方只据此说一句「附了 N 条」。
212138
+ ...overlap ? { overlapAttached: overlap.count, overlap: overlap.lines } : {}
212084
212139
  };
212085
212140
  return { status: created ? 202 : 200, body: payload2 };
212086
212141
  } catch (error3) {
@@ -213340,6 +213395,14 @@ var init_github_app_timing = __esm({
213340
213395
  });
213341
213396
 
213342
213397
  // ../server/src/manifest-text.ts
213398
+ function decodeUtf8Text(bytes2) {
213399
+ if (bytes2.includes(0)) return null;
213400
+ try {
213401
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes2);
213402
+ } catch {
213403
+ return null;
213404
+ }
213405
+ }
213343
213406
  async function renderManifestText(blobs, manifestRef) {
213344
213407
  const CAP = 256 * 1024;
213345
213408
  let entries;
@@ -213349,13 +213412,11 @@ async function renderManifestText(blobs, manifestRef) {
213349
213412
  return `\u591A\u6587\u4EF6\uFF08\u88C5\u7BB1\u5355 ${manifestRef.slice(0, 12)}\u2026\uFF09\u2014\u2014 \u8BFB\u53D6\u5931\u8D25\uFF1A${e5 instanceof Error ? e5.message : String(e5)}`;
213350
213413
  }
213351
213414
  if (entries.length === 0) return "\uFF08\u7A7A\u4EA4\u4ED8\u7269\uFF09";
213352
- const dec2 = new TextDecoder();
213353
213415
  const single = entries.length === 1;
213354
213416
  const parts = [];
213355
213417
  let total = 0;
213356
213418
  for (const e5 of entries) {
213357
- const isText = !e5.bytes.includes(0);
213358
- let body2 = isText ? dec2.decode(e5.bytes) : `\uFF08\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C${e5.bytes.length} \u5B57\u8282\uFF09`;
213419
+ let body2 = decodeUtf8Text(e5.bytes) ?? `\uFF08\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C${e5.bytes.length} \u5B57\u8282\uFF09`;
213359
213420
  if (total + body2.length > CAP) body2 = body2.slice(0, Math.max(0, CAP - total)) + "\n\u2026\uFF08\u5DF2\u622A\u65AD\uFF09";
213360
213421
  total += body2.length;
213361
213422
  parts.push(single ? body2 : `===== ${e5.path} =====
@@ -214873,12 +214934,11 @@ async function runView(kernel, oplog, engineStore, blobs, name, artifactId, para
214873
214934
  if (path50 !== null) {
214874
214935
  const e5 = entries.find((x2) => x2.path === path50);
214875
214936
  if (!e5) throw new Error(`\u6587\u4EF6\u4E0D\u5B58\u5728: ${path50}\uFF08\u8BE5\u7248\u672C\u6709\uFF1A${entries.map((x2) => x2.path).join("\u3001")}\uFF09`);
214876
- const isText = !e5.bytes.includes(0);
214877
- return { kind: "file", path: path50, bytes: e5.bytes.length, text: isText ? dec2.decode(e5.bytes) : null, at: at2 };
214937
+ return { kind: "file", path: path50, bytes: e5.bytes.length, text: decodeUtf8Text(e5.bytes), at: at2 };
214878
214938
  }
214879
214939
  return {
214880
214940
  kind: "manifest",
214881
- files: entries.map((e5) => ({ path: e5.path, bytes: e5.bytes.length, binary: e5.bytes.includes(0) })),
214941
+ files: entries.map((e5) => ({ path: e5.path, bytes: e5.bytes.length, binary: decodeUtf8Text(e5.bytes) === null })),
214882
214942
  at: at2
214883
214943
  };
214884
214944
  }
@@ -215026,6 +215086,7 @@ async function startOasisServer(opts) {
215026
215086
  resolveChatTurns: async (companyId) => (opts.resolveChatTurns ? await opts.resolveChatTurns(companyId) : void 0) ?? opts.chatTurns,
215027
215087
  ...opts.delegationProbeRuntime ? { probeRuntime: opts.delegationProbeRuntime } : {},
215028
215088
  ...opts.delegationProbeAllocation ? { probeAllocation: opts.delegationProbeAllocation } : {},
215089
+ ...opts.delegationOverlap ? { overlapForTask: opts.delegationOverlap } : {},
215029
215090
  ...opts.chatDelegationEnabled ? { enabled: opts.chatDelegationEnabled } : {},
215030
215091
  ...opts.delegationWorkdir ? { workdir: opts.delegationWorkdir } : {},
215031
215092
  ...opts.delegationMetrics ? { metrics: opts.delegationMetrics } : {}
@@ -256729,11 +256790,14 @@ var init_units = __esm({
256729
256790
  });
256730
256791
  }
256731
256792
  }
256732
- if (u.kind === "work") facts.push(...await this.upstreamFacts(u.work, field));
256793
+ if (u.kind === "work") facts.push(...await this.upstreamFacts(u.work, field, opts.full === true));
256733
256794
  return facts;
256734
256795
  }
256735
- /** 单元时间窗里上游(输入节点、brief)收到的 issue、出的新版本。 */
256736
- async upstreamFacts(w2, field) {
256796
+ /**
256797
+ * 单元时间窗里上游(输入节点、brief)收到的 issue、出的新版本。
256798
+ * `full`:issue 摘要给原文全文——摘要里的截断标记指向的就是 `--full`,不能在 `--full` 下仍给同一截断(旧版 CLI 只打摘要,也靠这一行取全文)。
256799
+ */
256800
+ async upstreamFacts(w2, field, full) {
256737
256801
  const out = [];
256738
256802
  const from = w2.startedAt ?? w2.createdAt;
256739
256803
  const to = w2.endedAt ?? w2.deadAt ?? new Date(this.nowMs).toISOString();
@@ -256752,7 +256816,7 @@ var init_units = __esm({
256752
256816
  kind: "upstream-issue",
256753
256817
  at: i5.createdAt,
256754
256818
  runId: null,
256755
- summary: `\u6267\u884C\u671F\u95F4\u4E0A\u6E38\u8282\u70B9 ${i5.aboutNodeId} \u6536\u5230 ${i5.kind}\uFF1A${head}${more}`,
256819
+ summary: `\u6267\u884C\u671F\u95F4\u4E0A\u6E38\u8282\u70B9 ${i5.aboutNodeId} \u6536\u5230 ${i5.kind}\uFF1A${full ? i5.body : `${head}${more}`}`,
256756
256820
  detail: { issueId: i5.id, kind: i5.kind, aboutNodeId: i5.aboutNodeId, author: i5.authorActorId, resolved: i5.resolvedAt != null, body: b6 }
256757
256821
  });
256758
256822
  }
@@ -326731,6 +326795,7 @@ __export(src_exports2, {
326731
326795
  DEFAULT_SIMPLE_QUERY_MAX_CHARS: () => DEFAULT_SIMPLE_QUERY_MAX_CHARS,
326732
326796
  DEFAULT_TERMINAL_MAX_AGE_MS: () => DEFAULT_TERMINAL_MAX_AGE_MS,
326733
326797
  DEFAULT_TIME_ZONE_ENV: () => DEFAULT_TIME_ZONE_ENV,
326798
+ DELEGATION_OVERLAP_TIMEOUT_MS: () => DELEGATION_OVERLAP_TIMEOUT_MS,
326734
326799
  DELIVERY_REPAIR_BATCH: () => DELIVERY_REPAIR_BATCH,
326735
326800
  DENY_ALL_TRACE_READ: () => DENY_ALL_TRACE_READ,
326736
326801
  DISPATCH_DROP_BACKOFF_MS: () => DISPATCH_DROP_BACKOFF_MS,
@@ -330334,7 +330399,8 @@ var OverlapService = class {
330334
330399
  ...input.subjectId?.trim() ? { subjectId: input.subjectId.trim() } : {},
330335
330400
  ...input.chatSessionId?.trim() ? { chatSessionId: input.chatSessionId.trim() } : {},
330336
330401
  candidates: picked.map((c5) => ({ kind: c5.kind, phase: c5.phase, id: overlapCandidateId(c5), score: c5.score })),
330337
- minScore
330402
+ minScore,
330403
+ deliveredTo: input.deliveredTo ?? "caller"
330338
330404
  };
330339
330405
  try {
330340
330406
  await (await this.deps.events(companyId)).append(event);
@@ -331039,15 +331105,16 @@ var PostgresOverlapEventStore = class _PostgresOverlapEventStore {
331039
331105
  candidates jsonb NOT NULL,
331040
331106
  min_score double precision NOT NULL
331041
331107
  )`);
331108
+ await pool.query(`ALTER TABLE ${store.s}.overlap_events ADD COLUMN IF NOT EXISTS delivered_to text`);
331042
331109
  await pool.query(`CREATE INDEX IF NOT EXISTS overlap_events_at_idx ON ${store.s}.overlap_events (at DESC)`);
331043
331110
  });
331044
331111
  return store;
331045
331112
  }
331046
331113
  async append(e5) {
331047
331114
  await this.pool.query(
331048
- `INSERT INTO ${this.s}.overlap_events (id,at,principal_actor_id,actor_id,action,subject_id,chat_session_id,candidates,min_score)
331049
- VALUES ($1,$2,$3,$4,$5,$6,$7,$8::jsonb,$9) ON CONFLICT (id) DO NOTHING`,
331050
- [e5.id, e5.at, e5.principalActorId, e5.actorId, e5.action, e5.subjectId ?? null, e5.chatSessionId ?? null, JSON.stringify(e5.candidates), e5.minScore]
331115
+ `INSERT INTO ${this.s}.overlap_events (id,at,principal_actor_id,actor_id,action,subject_id,chat_session_id,candidates,min_score,delivered_to)
331116
+ VALUES ($1,$2,$3,$4,$5,$6,$7,$8::jsonb,$9,$10) ON CONFLICT (id) DO NOTHING`,
331117
+ [e5.id, e5.at, e5.principalActorId, e5.actorId, e5.action, e5.subjectId ?? null, e5.chatSessionId ?? null, JSON.stringify(e5.candidates), e5.minScore, e5.deliveredTo ?? null]
331051
331118
  );
331052
331119
  }
331053
331120
  async listRecent(limit) {
@@ -331061,7 +331128,8 @@ var PostgresOverlapEventStore = class _PostgresOverlapEventStore {
331061
331128
  ...row.subject_id ? { subjectId: row.subject_id } : {},
331062
331129
  ...row.chat_session_id ? { chatSessionId: row.chat_session_id } : {},
331063
331130
  candidates: row.candidates,
331064
- minScore: Number(row.min_score)
331131
+ minScore: Number(row.min_score),
331132
+ deliveredTo: row.delivered_to === "expert" ? "expert" : "caller"
331065
331133
  }));
331066
331134
  }
331067
331135
  };
@@ -335604,6 +335672,17 @@ async function startServe(opts) {
335604
335672
  * 用 `tryAllocate`(不抛、不消耗重试次数):这里只是问「挑不挑得出来」,真正的分配在
335605
335673
  * 那一轮派发时再跑一次——两次之间机器状态可能变,以派发那一次为准。
335606
335674
  */
335675
+ // 防重叠比对(ADR 0640 D-C9):委派在派活之前比一次(代表派活那段对话的真人),候选附进专家任务书;比对事件标「附给专家」。
335676
+ delegationOverlap: async ({ companyId, actor, parentSessionId, delegationId, task }) => {
335677
+ const cid = companyId ?? defaultCompanyId;
335678
+ return overlapRuntime.service.check(cid, await overlapRuntime.resolveCaller(actor, cid), {
335679
+ action: "delegate",
335680
+ text: task,
335681
+ subjectId: delegationId,
335682
+ chatSessionId: parentSessionId,
335683
+ deliveredTo: "expert"
335684
+ });
335685
+ },
335607
335686
  delegationProbeAllocation: async ({ actorId, actorName, companyId }) => {
335608
335687
  const result = await runtimeAllocatorFor(companyId ?? defaultCompanyId).tryAllocate({
335609
335688
  actorId,
@@ -342826,7 +342905,7 @@ var COMMAND_DECLS = {
342826
342905
  delegate: {
342827
342906
  group: "\u59D4\u6D3E\u4E13\u5BB6",
342828
342907
  usage: 'oasis delegate --to <role|actorId> --task "<\u4EFB\u52A1\u4E66>" [--as <\u77ED\u540D>] [--file <\u8DEF\u5F84>]... [--json true]\n oasis delegate --follow-up <\u5F15\u7528> --text "<...>" [--file <\u8DEF\u5F84>]...\n oasis delegate --status <\u5F15\u7528|\u59D4\u6D3Eid> [--json true]\n oasis delegate --list [--all] [--json true]',
342829
- description: "\u628A\u4E00\u4EF6\u4E8B\u4EA4\u7ED9\u7EC4\u7EC7\u91CC\u5BF9\u53E3\u7684\u4E13\u5BB6\u53BB\u505A\uFF08\u5F02\u6B65\uFF09\u3002\u547D\u4EE4\u7ACB\u5373\u8FD4\u56DE\uFF0C\u4E13\u5BB6\u5E72\u5B8C\u4E86\u7ED3\u679C\u81EA\u5DF1\u56DE\u5230\u8FD9\u6761\u5BF9\u8BDD\u2014\u2014**\u4E0D\u8981\u5728\u8FD9\u91CC\u7B49**\u3002\u6210\u529F\u540E\u5982\u679C\u672C\u516C\u53F8\u6709\u4EBA\u5728\u505A\u6216\u505A\u8FC7\u76F8\u8FD1\u7684\u4E8B\uFF0C\u8F93\u51FA\u672B\u5C3E\u4F1A\u591A\u4E00\u6BB5\u300C\u76F8\u8FD1\u7684\u4E8B\u9879\uFF08\u7CFB\u7EDF\u7C97\u7B5B\uFF0C\u672A\u786E\u8BA4\uFF0C\u8BF7\u7528 id \u67E5\u8BE6\u60C5\u540E\u5224\u65AD\uFF09\u300D\uFF08--json \u65F6\u5728 overlap \u5B57\u6BB5\u91CC\uFF0C\u540C\u6837\u51E0\u884C\uFF09\uFF0C\u6BCF\u6761\u5E26 id\uFF1A\u7528 id \u9010\u6761\u67E5\u8BE6\u60C5\uFF08\u5F85\u529E oasis todo show\u3001\u5DE5\u5355 oasis workorder\u3001\u59D4\u6D3E oasis delegate --status\uFF09\uFF0C\u5224\u65AD\u662F\u4E0D\u662F\u540C\u4E00\u4EF6\u4E8B\uFF1B\u786E\u5B9E\u76F8\u5173\u624D\u544A\u8BC9\u7528\u6237\uFF0C\u4E0D\u76F8\u5173\u4E00\u4E2A\u5B57\u90FD\u4E0D\u63D0\uFF1B\u5728\u505A\u7684\u5EFA\u8BAE\u7528\u6237\u5148\u95EE\u95EE\u5BF9\u65B9\uFF0C\u770B\u5408\u5E76\u8FD8\u662F\u5206\u5DE5\uFF1B\u505A\u5B8C\u7684\u628A\u7ED3\u679C\u7ED9\u7528\u6237\uFF0C\u95EE\u80FD\u4E0D\u80FD\u76F4\u63A5\u7528\uFF1B\u4E0D\u66FF\u7528\u6237\u505C\u6389\u8FD9\u6B21\u59D4\u6D3E\u3001\u5408\u5E76\u3001\u53D6\u6D88\u6216\u6539\u6D3E\u3002\u6CA1\u6709\u8FD9\u4E00\u6BB5\u5C31\u662F\u6CA1\u6BD4\u51FA\u6765\uFF0C\u6BD4\u5BF9\u51FA\u4E86\u95EE\u9898\u4E5F\u53EA\u662F\u6CA1\u6709\u8FD9\u4E00\u6BB5\uFF0C\u547D\u4EE4\u7167\u6837\u7B97\u6210\u529F\u3002",
342908
+ description: "\u628A\u4E00\u4EF6\u4E8B\u4EA4\u7ED9\u7EC4\u7EC7\u91CC\u5BF9\u53E3\u7684\u4E13\u5BB6\u53BB\u505A\uFF08\u5F02\u6B65\uFF09\u3002\u547D\u4EE4\u7ACB\u5373\u8FD4\u56DE\uFF0C\u4E13\u5BB6\u5E72\u5B8C\u4E86\u7ED3\u679C\u81EA\u5DF1\u56DE\u5230\u8FD9\u6761\u5BF9\u8BDD\u2014\u2014**\u4E0D\u8981\u5728\u8FD9\u91CC\u7B49**\u3002\u6D3E\u6D3B\u4E4B\u524D\u7CFB\u7EDF\u4F1A\u62FF\u4EFB\u52A1\u4E66\u6BD4\u4E00\u4E0B\u672C\u516C\u53F8\u6709\u6CA1\u6709\u4EBA\u5728\u505A\u6216\u505A\u8FC7\u76F8\u8FD1\u7684\u4E8B\uFF0C\u6709\u7684\u8BDD\u9644\u5728\u4E13\u5BB6\u4EFB\u52A1\u4E66\u672B\u5C3E\u3001\u7531\u4E13\u5BB6\u5F00\u5DE5\u524D\u6838\u5BF9\uFF08\u8F93\u51FA\u91CC\u591A\u4E00\u884C\u300C\u5DF2\u628A N \u6761\u76F8\u8FD1\u4E8B\u9879\u9644\u7ED9\u4E13\u5BB6\u300D\uFF0C--json \u5728 overlapAttached / overlap \u5B57\u6BB5\uFF09\uFF1B\u4F60\u4E0D\u7528\u53BB\u67E5\uFF0C\u7167\u5E38\u6536\u5C3E\u3002",
342830
342909
  flags: [
342831
342910
  { name: "to", desc: "\u6D3E\u7ED9\u8C01\uFF1A\u5C97\u4F4D\u540D\u6216 actorId\uFF08\u5C97\u4F4D 0 \u4EBA\u5728\u5C97 / \u7ED1\u5B9A\u4E0D\u53EF\u7528\u4F1A\u5F53\u573A\u62A5\u9519\uFF0C\u90A3\u65F6\u81EA\u5DF1\u505A\uFF09" },
342832
342911
  { name: "task", desc: "\u4EFB\u52A1\u4E66\u5168\u6587\u2014\u2014\u4E13\u5BB6**\u552F\u4E00**\u7684\u4E0A\u4E0B\u6587\u6765\u6E90\uFF0C\u5199\u5168\uFF1B\u4E0D\u8BBE\u957F\u5EA6\u4E0A\u9650\u3001\u4E0D\u622A\u65AD" },
@@ -346038,7 +346117,7 @@ async function waitForCommandAuthorization(base, headers, draftId, fallback2) {
346038
346117
  }
346039
346118
  }
346040
346119
  }
346041
- var CLI_VERSION = "2.2.127" ? "2.2.127" : "dev";
346120
+ var CLI_VERSION = "2.2.128" ? "2.2.128" : "dev";
346042
346121
  function apiHeaders(token2, company) {
346043
346122
  const headers = {
346044
346123
  authorization: `Bearer ${token2}`,
@@ -346844,17 +346923,15 @@ ${round.text}`);
346844
346923
  { to, task, ...flags.get("as") ? { as: flags.get("as") } : {}, ...fileArgs.length ? { files: fileArgs } : {} }
346845
346924
  );
346846
346925
  if (asJson2) {
346847
- const overlap2 = await overlapLines("delegate", task, started.delegationId);
346848
- println(JSON.stringify({ ...started, ...overlap2.length ? { overlap: overlap2 } : {} }, null, 2));
346926
+ println(JSON.stringify(started, null, 2));
346849
346927
  break;
346850
346928
  }
346851
346929
  println(`\u5DF2\u4EA4\u7ED9 ${to} \u53BB\u505A\uFF08\u5F02\u6B65\uFF0C\u4E0D\u7528\u7B49\uFF09\u3002`);
346852
346930
  println(` \u77ED\u540D\uFF08--follow-up \u7528\u8FD9\u4E2A\uFF09\uFF1A${started.label}`);
346853
346931
  println(` delegationId\uFF1A${started.delegationId}`);
346854
346932
  if (started.attachedFiles?.length) println(` \u5E26\u8FC7\u53BB\u7684\u6587\u4EF6\uFF1A${started.attachedFiles.join("\u3001")}`);
346855
- const overlap = await overlapLines("delegate", task, started.delegationId);
346856
- for (const line2 of overlap) println(line2);
346857
- println(overlap.length ? "\u7ED3\u679C\u5E72\u5B8C\u4E86\u4F1A\u81EA\u5DF1\u56DE\u5230\u8FD9\u6761\u5BF9\u8BDD\u3002\u6536\u5C3E\u524D\u5148\u6309\u4E0A\u9762\u300C\u76F8\u8FD1\u7684\u4E8B\u9879\u300D\u9010\u6761\u67E5\u5B8C\uFF08\u786E\u5B9E\u76F8\u5173\u624D\u987A\u5E26\u544A\u8BC9\u7528\u6237\uFF09\uFF0C\u7136\u540E\u8FD9\u4E00\u8F6E\u5C31\u6536\u5C3E\u2014\u2014\u4E0D\u7528\u7B49\u4E13\u5BB6\u3002" : "\u7ED3\u679C\u5E72\u5B8C\u4E86\u4F1A\u81EA\u5DF1\u56DE\u5230\u8FD9\u6761\u5BF9\u8BDD\u3002\u8FD9\u4E00\u8F6E\u5148\u6536\u5C3E\u2014\u2014\u53EF\u4EE5\u987A\u624B\u8DDF\u7528\u6237\u8BF4\u4E00\u53E5\u4F60\u628A\u8FD9\u4EF6\u4E8B\u6D3E\u51FA\u53BB\u4E86\u3002");
346933
+ if (started.overlapAttached) println(` \u5DF2\u628A ${started.overlapAttached} \u6761\u76F8\u8FD1\u4E8B\u9879\u9644\u7ED9\u4E13\u5BB6\uFF0C\u4E13\u5BB6\u5F00\u5DE5\u524D\u4F1A\u6838\u5BF9\u3002`);
346934
+ println("\u7ED3\u679C\u5E72\u5B8C\u4E86\u4F1A\u81EA\u5DF1\u56DE\u5230\u8FD9\u6761\u5BF9\u8BDD\u3002\u8FD9\u4E00\u8F6E\u5148\u6536\u5C3E\u2014\u2014\u53EF\u4EE5\u987A\u624B\u8DDF\u7528\u6237\u8BF4\u4E00\u53E5\u4F60\u628A\u8FD9\u4EF6\u4E8B\u6D3E\u51FA\u53BB\u4E86\u3002");
346858
346935
  break;
346859
346936
  }
346860
346937
  case "kb": {
@@ -350352,7 +350429,7 @@ function shimScript() {
350352
350429
  }
350353
350430
 
350354
350431
  // src/index.ts
350355
- var PKG_VERSION = true ? "2.2.127" : "dev";
350432
+ var PKG_VERSION = true ? "2.2.128" : "dev";
350356
350433
  var LOCAL_BIN = localBin();
350357
350434
  var NPM_PREFIX = npmPrefix();
350358
350435
  var INSTANCE = DEFAULT_INSTANCE;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oasis_test_v2",
3
- "version": "2.2.127",
3
+ "version": "2.2.128",
4
4
  "description": "Oasis node daemon + CLI — background daemon, auto-start, full server CLI",
5
5
  "bin": {
6
6
  "oasis": "./dist/index.js"
@@ -26,6 +26,6 @@
26
26
  "node": ">=20"
27
27
  },
28
28
  "oasisRelease": {
29
- "sourceHead": "62b2156dcd16b8d497b4439183a6a7ca32fd2fac"
29
+ "sourceHead": "04f9ff49b5d972690f1ff184c248f9683de3e8b1"
30
30
  }
31
31
  }