@ftai/dsh-plugin-acn 0.1.0 → 0.1.1

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 (64) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/README.md +31 -4
  3. package/README_EN.md +31 -4
  4. package/docs/architecture.md +1 -0
  5. package/docs/assets/acn-claim-reuse.png +0 -0
  6. package/docs/config.md +19 -9
  7. package/docs/development.md +4 -4
  8. package/docs/dsh-compat.md +2 -2
  9. package/docs/user_guide.md +3 -1
  10. package/lib/{activities-LRoCwpzw.js → activities-B8U-iW4-.js} +84 -4
  11. package/lib/{checkpoint-Bmt8q2vB.js → checkpoint-CPFPOxBM.js} +2 -2
  12. package/lib/{checkpoint-RgcdqifN.js → checkpoint-c7aI4D-X.js} +1 -1
  13. package/lib/client.js +220 -223
  14. package/lib/{deliver-BuYQaPRW.js → deliver-C-dmhkfm.js} +1 -1
  15. package/lib/{delivery-status-D5m3178s.js → delivery-status-M7-Rwoyj.js} +4 -2
  16. package/lib/{dream-agent-DBszTHXY.js → dream-agent-BVqxbKFc.js} +3 -3
  17. package/lib/dream.js +3 -3
  18. package/lib/{effects-DJ4Xa7Tx.js → effects-DX1iy6FM.js} +2 -2
  19. package/lib/{evidence-store-DLFvSuNa.js → evidence-store-DW7kj20i.js} +1 -1
  20. package/lib/{formation-replay-CEOy5FkI.js → formation-replay-Bf4TSBiz.js} +1 -1
  21. package/lib/formation.js +5 -5
  22. package/lib/history-DPMHX3ZE.js +214 -0
  23. package/lib/inbox.js +2 -2
  24. package/lib/index.js +43 -47
  25. package/lib/{paths-CDYV5UH9.js → paths-B7NI9Ano.js} +6 -3
  26. package/lib/plugins/commands.js +3 -3
  27. package/lib/plugins/dream.js +4 -4
  28. package/lib/plugins/formation.js +3 -3
  29. package/lib/plugins/inbox.js +3 -3
  30. package/lib/plugins/knowledge.js +21 -23
  31. package/lib/plugins/prompt.js +1 -1
  32. package/lib/plugins/tools.js +1 -1
  33. package/lib/{prepare-DwHZudbA.js → prepare-CGXwBEcu.js} +2 -2
  34. package/lib/{scheduler-MaUEbXr3.js → scheduler-BfJSY1eq.js} +1 -1
  35. package/lib/{service-C_i3BzdP.js → service-BPwaZzFF.js} +3 -3
  36. package/lib/{service-B7AI5jds.js → service-BQaszW_v.js} +1 -1
  37. package/lib/{service-BcHV5mc7.js → service-BhniAHLo.js} +5 -5
  38. package/lib/{service-CNjqHCBR.js → service-C2lXoygJ.js} +4 -4
  39. package/lib/session-binding-zCSuizHs.js +342 -0
  40. package/lib/store.js +1 -1
  41. package/lib/{structured-lyQCK-Zk.js → structured-C9byFuzm.js} +1 -0
  42. package/lib/team.js +1 -1
  43. package/lib/types/activities.d.ts +2 -0
  44. package/lib/types/client/ActivityCard.d.ts +14 -0
  45. package/lib/types/client/ActivityDetails.d.ts +1 -1
  46. package/lib/types/client/SourceSessionLink.d.ts +2 -1
  47. package/lib/types/client/TeamSettingsPage.d.ts +0 -2
  48. package/lib/types/client/interaction-styles.d.ts +1 -1
  49. package/lib/types/client/locales.d.ts +1 -1
  50. package/lib/types/config.d.ts +1 -12
  51. package/lib/types/configuration.d.ts +0 -24
  52. package/lib/types/credentials.d.ts +0 -6
  53. package/lib/types/dsh-adapter/session-binding.d.ts +1 -1
  54. package/lib/types/interaction.d.ts +6 -15
  55. package/lib/types/store/delivery-status.d.ts +1 -0
  56. package/lib/types/store/history.d.ts +65 -0
  57. package/lib/types/store/library-directory.d.ts +4 -0
  58. package/lib/types/store/paths.d.ts +1 -1
  59. package/lib/upload.js +2 -2
  60. package/lib/{team-credentials-C9xHrPIi.js → upstreams-DEi-56tD.js} +164 -248
  61. package/lib/{worker-BBTYP2RE.js → worker-HMGzJFWd.js} +1 -1
  62. package/package.json +1 -1
  63. package/lib/presentation-BlLjgDjP.js +0 -47
  64. package/lib/session-binding-BQrOGhZI.js +0 -151
package/lib/client.js CHANGED
@@ -13781,7 +13781,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13781
13781
  const AgentIdSchema = string$1().regex(/^[a-z0-9_-]+$/).brand();
13782
13782
  const ClaimIdSchema = string$1().regex(/^claim_[0-9a-f]{8}$/).brand();
13783
13783
  const TraceIdSchema = string$1().regex(/^trace_[0-9a-f]{8}$/).brand();
13784
- string$1().regex(/^dispute_[0-9a-f]{8}$/).brand();
13784
+ const DisputeIdSchema = string$1().regex(/^dispute_[0-9a-f]{8}$/).brand();
13785
13785
  const PolicyIdSchema = string$1().regex(/^policy_[0-9a-f]{8}$/).brand();
13786
13786
  string$1().regex(/^inbox_[0-9a-f]{8}$/).brand();
13787
13787
  string$1().regex(/^(resolution|arbitration)_[0-9a-f]{8}$/).brand();
@@ -13815,24 +13815,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13815
13815
  routerEndpoint: endpoint.default(""),
13816
13816
  maintainerEndpoint: endpoint.default(""),
13817
13817
  keyEnv: string$1().regex(/^(?:[A-Za-z_][A-Za-z0-9_]*)?$/).default(""),
13818
- timeoutMs: positive().default(15e3),
13819
- legacyStorage: _enum([
13820
- "base",
13821
- "personal",
13822
- "connection"
13823
- ]).optional(),
13824
- legacyKey: string$1().regex(/^[a-zA-Z0-9_-]{1,80}$/).optional()
13818
+ timeoutMs: positive().default(15e3)
13825
13819
  }).superRefine((value, ctx) => {
13826
13820
  if (Boolean(value.routerEndpoint) !== Boolean(value.maintainerEndpoint)) ctx.addIssue({
13827
13821
  code: "custom",
13828
13822
  path: ["routerEndpoint"],
13829
13823
  message: "Configure both team endpoints or neither."
13830
13824
  });
13831
- if (value.legacyStorage === "connection" !== (value.legacyKey !== void 0)) ctx.addIssue({
13832
- code: "custom",
13833
- path: ["legacyStorage"],
13834
- message: "Invalid legacy storage mapping."
13835
- });
13836
13825
  });
13837
13826
  const ConnectionSchema = strictObject({
13838
13827
  id: string$1().regex(/^[a-zA-Z0-9_-]{1,80}$/).refine((id) => !["personal", "legacy"].includes(id)),
@@ -13962,23 +13951,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13962
13951
  function upstreamsOf(config) {
13963
13952
  if (config.upstreams !== void 0) return config.upstreams;
13964
13953
  const items = {};
13965
- if (config.agentId !== "") {
13966
- items["personal"] = UpstreamSchema.parse({
13967
- name: "个人知识",
13968
- agentId: config.agentId,
13969
- legacyStorage: config.team.routerEndpoint ? "personal" : "base"
13970
- });
13971
- if (config.team.routerEndpoint) items["legacy"] = UpstreamSchema.parse({
13972
- name: "原有团队",
13973
- agentId: config.agentId,
13974
- enabled: config.legacyEnabled,
13975
- routerEndpoint: config.team.routerEndpoint,
13976
- maintainerEndpoint: config.team.maintainerEndpoint,
13977
- keyEnv: config.team.keyEnv,
13978
- timeoutMs: config.team.timeoutMs,
13979
- legacyStorage: "base"
13980
- });
13981
- }
13954
+ if (config.agentId !== "") items["personal"] = UpstreamSchema.parse({
13955
+ name: config.team.routerEndpoint ? "团队" : "个人知识",
13956
+ agentId: config.agentId,
13957
+ enabled: config.legacyEnabled,
13958
+ routerEndpoint: config.team.routerEndpoint,
13959
+ maintainerEndpoint: config.team.maintainerEndpoint,
13960
+ keyEnv: config.team.keyEnv,
13961
+ timeoutMs: config.team.timeoutMs
13962
+ });
13982
13963
  for (const connection of config.connections) {
13983
13964
  const { id, ...value } = connection;
13984
13965
  let key = id.toLowerCase();
@@ -13988,11 +13969,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13988
13969
  "logs",
13989
13970
  "tmp"
13990
13971
  ].includes(key)) key = `${key}_copy`;
13991
- items[key] = UpstreamSchema.parse({
13992
- ...value,
13993
- legacyStorage: "connection",
13994
- legacyKey: id
13995
- });
13972
+ items[key] = UpstreamSchema.parse(value);
13996
13973
  }
13997
13974
  return items;
13998
13975
  }
@@ -14309,6 +14286,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14309
14286
  claimIds: array(ClaimIdSchema),
14310
14287
  reason: string$1()
14311
14288
  })).optional(),
14289
+ entityIds: array(union([
14290
+ ClaimIdSchema,
14291
+ DisputeIdSchema,
14292
+ TraceIdSchema
14293
+ ])).optional(),
14312
14294
  entityId: string$1().optional(),
14313
14295
  retryable: boolean$1().optional(),
14314
14296
  acknowledged: boolean$1().optional(),
@@ -14333,7 +14315,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14333
14315
  pendingClaims: number$1(),
14334
14316
  pendingDisputes: number$1()
14335
14317
  });
14336
- const ReferenceIdSchema = union([ClaimIdSchema, TraceIdSchema]);
14318
+ const ReferenceIdSchema = union([
14319
+ ClaimIdSchema,
14320
+ DisputeIdSchema,
14321
+ TraceIdSchema
14322
+ ]);
14337
14323
  const KnowledgeReferenceSchema = object({
14338
14324
  key: string$1(),
14339
14325
  id: ReferenceIdSchema,
@@ -14892,6 +14878,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14892
14878
  routerEndpoint: c("Router 地址:以 http:// 或 https:// 开头,不含用户名、密码、查询参数或片段;两项团队地址需同时填写或留空。", "Router URL: use http:// or https:// without username, password, query or fragment; set both team URLs or leave both empty."),
14893
14879
  maintainerEndpoint: c("Maintainer 地址:以 http:// 或 https:// 开头,不含用户名、密码、查询参数或片段;两项团队地址需同时填写或留空。", "Maintainer URL: use http:// or https:// without username, password, query or fragment; set both team URLs or leave both empty."),
14894
14880
  home: c("知识目录:请填写非空的本机目录路径。", "Knowledge directory: enter a nonempty host directory path."),
14881
+ libraryIndex: c("知识目录:无法读取有效的工作配置索引,请选择包含 settings.json 和 upstreams 的账号目录。原配置未改动。", "Knowledge directory: the configuration index could not be read. Select the account directory containing settings.json and upstreams. The previous configuration is retained."),
14895
14882
  upstream: c("默认工作配置:请选择已启用的配置。", "Default work configuration: choose an enabled configuration.")
14896
14883
  }[field] ?? `${c("请检查配置字段", "Check configuration field")}: ${path || c("工作配置", "Work configuration")}`;
14897
14884
  }
@@ -15493,10 +15480,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15493
15480
  keyEnv: editor.removeSecret || !editor.team && editor.credentialIdentity !== editor.value.agentId ? "" : editor.team && editor.secret !== "" ? reference : editor.value.keyEnv.trim()
15494
15481
  });
15495
15482
  let key = editor.key.trim() || editor.value.agentId;
15496
- if (!editor.existing && editor.key.trim() === "") {
15497
- let suffix = 2;
15498
- while (profiles[key] !== void 0) key = `${editor.value.agentId}-${suffix++}`;
15499
- }
15483
+ if (!editor.existing && editor.key.trim() === "") key = crypto.randomUUID();
15500
15484
  if (!parsed.success) {
15501
15485
  feedback([...new Set(parsed.error.issues.map((issue) => configurationFieldError(String(issue.path[0] ?? ""), c)))].join("\n"), true);
15502
15486
  return;
@@ -15920,7 +15904,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15920
15904
  style: inputStyle,
15921
15905
  disabled: disabled || editor.existing,
15922
15906
  value: editor.key,
15923
- placeholder: editor.value.agentId || "coding",
15907
+ placeholder: c("留空自动生成", "Leave empty to generate"),
15924
15908
  onChange: (event) => {
15925
15909
  setEditor({
15926
15910
  ...editor,
@@ -15929,7 +15913,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15929
15913
  }
15930
15914
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
15931
15915
  style: muted,
15932
- children: c("新建时留空将按 Agent ID 生成。创建后固定,显示名称仍可修改。", "Generated from the Agent ID when empty. The key is fixed after creation; the display name can be changed.")
15916
+ children: c("留空将自动生成独立标识。创建后固定,显示名称仍可修改。", "An independent key is generated when empty. It is fixed after creation; the display name can be changed.")
15933
15917
  })]
15934
15918
  })]
15935
15919
  }),
@@ -16174,7 +16158,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16174
16158
  }),
16175
16159
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
16176
16160
  style: muted,
16177
- children: c("所有工作配置的知识根目录。修改后使用新目录,原数据保留。", "Knowledge root for all configurations. Changing it selects a new directory and retains original data.")
16161
+ children: c("所有工作配置的知识根目录。选择已有账号目录时,会加载其中的工作配置并继续使用原知识;原目录保留。", "Knowledge root for all configurations. Selecting an existing account directory loads its configurations and continues using its knowledge; the original directory is retained.")
16178
16162
  }),
16179
16163
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16180
16164
  className: "acn-actions",
@@ -16236,69 +16220,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16236
16220
  });
16237
16221
  }
16238
16222
  //#endregion
16239
- //#region src/client/SourceSessionLink.tsx
16240
- function SourceSessionLink({ source, api, c, open }) {
16241
- const [checking, setChecking] = (0, react.useState)(false);
16242
- const [error, setError] = (0, react.useState)("");
16243
- const controller = (0, react.useRef)();
16244
- (0, react.useEffect)(() => () => {
16245
- controller.current?.abort();
16246
- }, []);
16247
- const label = source.title || source.id;
16248
- async function navigate() {
16249
- const current = new AbortController();
16250
- controller.current = current;
16251
- setChecking(true);
16252
- setError("");
16253
- try {
16254
- const result = await api.interact({
16255
- action: "source_session",
16256
- sessionId: source.id
16257
- }, current.signal);
16258
- if (!current.signal.aborted) if (result.ok && result.sourceSession?.available) open?.(source.id);
16259
- else setError(c("来源会话不可用。", "Source session unavailable."));
16260
- } catch {
16261
- if (!current.signal.aborted) setError(c("无法打开来源会话。", "Could not open the source session."));
16262
- } finally {
16263
- if (!current.signal.aborted) setChecking(false);
16264
- }
16265
- }
16266
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16267
- className: "acn-source-link",
16268
- children: [source.available && open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
16269
- className: "acn-text-button",
16270
- title: source.id,
16271
- disabled: checking,
16272
- onClick: () => {
16273
- navigate();
16274
- },
16275
- children: label
16276
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16277
- className: "acn-help",
16278
- children: [label, source.available ? "" : c("(不可用)", " (unavailable)")]
16279
- }), error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16280
- role: "alert",
16281
- className: "acn-help",
16282
- children: error
16283
- })]
16284
- });
16285
- }
16286
- function KnowledgeSources({ sources, api, c, open }) {
16287
- if (!sources?.length) return null;
16288
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16289
- className: "acn-source-sessions",
16290
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16291
- className: "acn-help",
16292
- children: c("来源会话", "Source sessions")
16293
- }), sources.map((source) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SourceSessionLink, {
16294
- source,
16295
- api,
16296
- c,
16297
- open
16298
- }, source.id))]
16299
- });
16300
- }
16301
- //#endregion
16302
16223
  //#region src/client/ActivityDetails.tsx
16303
16224
  function activityKind(kind, c) {
16304
16225
  return {
@@ -16306,23 +16227,27 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16306
16227
  finalize: c("会话收尾", "Session finalization"),
16307
16228
  inbox: c("团队收件", "Team Inbox"),
16308
16229
  dream: c("Dream 整理", "Dream"),
16309
- delivery: c("团队投递", "Team delivery")
16230
+ delivery: c("团队投递", "Team delivery"),
16231
+ history: c("历史知识处理", "Historical knowledge processing")
16310
16232
  }[kind] ?? kind;
16311
16233
  }
16312
16234
  function activityState(item, c) {
16235
+ if (item.state === "succeeded" && item.kind === "delivery") return c("已确认上传", "Upload confirmed");
16313
16236
  if (item.state === "succeeded" && item.incompleteCandidates?.length) return c("部分完成,有未完成项", "Partially completed; unfinished items");
16314
16237
  if (item.state === "succeeded" && item.budgetLimited) return c("已按额度收尾", "Closed at the request budget");
16315
16238
  if (item.state === "succeeded" && item.warnings?.length) return c("本地完成,有警告", "Locally completed with warnings");
16316
16239
  return {
16317
16240
  queued: c("等待处理", "Queued"),
16318
16241
  running: c("正在处理", "Running"),
16319
- succeeded: c("本地处理完成", "Locally completed"),
16242
+ succeeded: item.kind ? c("已应用到本地", "Applied locally") : c("已完成", "Completed"),
16320
16243
  failed: c("处理失败", "Failed"),
16321
16244
  paused: c("已暂停", "Paused"),
16245
+ cancelled: c("已取消", "Cancelled"),
16322
16246
  rejected: c("团队拒绝,未投递", "Rejected; not delivered")
16323
16247
  }[item.state] ?? item.state;
16324
16248
  }
16325
16249
  function activitySummary(item, c) {
16250
+ if (item.kind === "delivery" && item.state === "succeeded") return c("此版本已收到团队投递确认。", "This version was acknowledged by the team.");
16326
16251
  if (c("中文", "English") === "中文") return item.summary;
16327
16252
  if (item.summaryInfo !== void 0) return displayMessage(item.summary, c, item.summaryInfo);
16328
16253
  const labels = {
@@ -16341,29 +16266,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16341
16266
  if (/^[^\u0080-\uFFFF]*$/u.test(item.summary)) return item.summary;
16342
16267
  return item.state === "queued" || item.state === "running" || item.state === "failed" ? "No completed result yet." : "Local processing completed. Review any warnings and unfinished items below.";
16343
16268
  }
16344
- function ActivityDetails({ item, runtimeKey, busy, c, api, showSummary = true, action, openSource, openClaim, openComponents }) {
16269
+ function ActivityDetails({ item, runtimeKey, busy, c, showSummary = true, action, openClaim, openComponents }) {
16345
16270
  const phaseCounts = item.phase && item.state !== "succeeded" ? Object.entries(item.counts ?? {}).filter(([key]) => ["modelSteps", "wrapUpSteps"].includes(key)) : [];
16346
16271
  const handlerInactive = item.errorInfo?.code === "task.handler_inactive";
16347
16272
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16348
16273
  className: "acn-activity-detail",
16349
16274
  children: [
16350
- item.phase && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", { children: [
16351
- c("运行阶段", "Phase"),
16352
- ": ",
16353
- {
16354
- exploration: c("探索与整理", "Exploration"),
16355
- wrap_up: c("收尾", "Closing"),
16356
- finished: c("已结束", "Finished")
16357
- }[item.phase]
16358
- ] }),
16359
- phaseCounts.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16360
- className: "acn-counts",
16361
- children: phaseCounts.map(([key, value]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
16362
- key === "modelSteps" ? c("探索请求", "Exploration requests") : c("收尾请求", "Closing requests"),
16363
- ": ",
16364
- value
16365
- ] }, key))
16366
- }),
16367
16275
  showSummary && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: activitySummary(item, c) }),
16368
16276
  showSummary && item.error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
16369
16277
  role: "alert",
@@ -16392,49 +16300,52 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16392
16300
  children: id
16393
16301
  }, id))
16394
16302
  ] }, group.groupId)),
16395
- item.reportPath && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
16396
- style: muted,
16397
- children: [
16398
- c("Dream 报告", "Dream report"),
16399
- ": ",
16400
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
16401
- style: {
16402
- overflowWrap: "anywhere",
16403
- userSelect: "text"
16404
- },
16405
- children: item.reportPath
16406
- })
16407
- ]
16408
- }),
16409
- item.entityId?.startsWith("claim_") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
16410
- onClick: (event) => {
16411
- event.currentTarget.focus({ preventScroll: true });
16412
- openClaim(item.entityId ?? "", c("团队投递", "Team delivery"));
16413
- },
16414
- children: c("查看当前知识", "View current claim")
16415
- }),
16416
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
16417
- style: muted,
16418
- children: [item.entityId ?? item.id, (item.kind !== "delivery" || item.attempts > 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
16419
- " · ",
16420
- c("尝试次数", "Attempts"),
16421
- ": ",
16422
- item.attempts
16423
- ] })]
16424
- }),
16425
- item.sessionId && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16426
- className: "acn-source-sessions",
16427
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16428
- className: "acn-help",
16429
- children: c("来源会话", "Source session")
16430
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SourceSessionLink, {
16431
- source: item.source ?? {
16432
- id: item.sessionId,
16433
- available: true
16434
- },
16435
- api,
16436
- c,
16437
- open: openSource
16303
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
16304
+ className: "acn-execution",
16305
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", { children: c("执行详情", "Execution details") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16306
+ className: "acn-execution-body",
16307
+ children: [
16308
+ item.phase && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", { children: [
16309
+ c("运行阶段", "Phase"),
16310
+ ": ",
16311
+ {
16312
+ exploration: c("探索与整理", "Exploration"),
16313
+ wrap_up: c("收尾", "Closing"),
16314
+ finished: c("已结束", "Finished")
16315
+ }[item.phase]
16316
+ ] }),
16317
+ phaseCounts.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16318
+ className: "acn-counts",
16319
+ children: phaseCounts.map(([key, value]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
16320
+ key === "modelSteps" ? c("探索请求", "Exploration requests") : c("收尾请求", "Closing requests"),
16321
+ ": ",
16322
+ value
16323
+ ] }, key))
16324
+ }),
16325
+ item.reportPath && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
16326
+ style: muted,
16327
+ children: [
16328
+ c("Dream 报告", "Dream report"),
16329
+ ": ",
16330
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
16331
+ style: {
16332
+ overflowWrap: "anywhere",
16333
+ userSelect: "text"
16334
+ },
16335
+ children: item.reportPath
16336
+ })
16337
+ ]
16338
+ }),
16339
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
16340
+ style: muted,
16341
+ children: [item.entityId ?? item.id, (item.kind !== "delivery" || item.attempts > 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
16342
+ " · ",
16343
+ c("尝试次数", "Attempts"),
16344
+ ": ",
16345
+ item.attempts
16346
+ ] })]
16347
+ })
16348
+ ]
16438
16349
  })]
16439
16350
  }),
16440
16351
  handlerInactive && openComponents && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
@@ -16442,7 +16353,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16442
16353
  onClick: openComponents,
16443
16354
  children: c("前往插件管理", "Open plugin manager")
16444
16355
  }) }),
16445
- item.kind !== "delivery" && (item.state === "failed" || item.state === "paused") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
16356
+ item.kind !== "delivery" && item.retryable !== false && (item.state === "failed" || item.state === "paused") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
16446
16357
  disabled: busy || handlerInactive,
16447
16358
  onClick: () => {
16448
16359
  action({
@@ -16491,6 +16402,69 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16491
16402
  });
16492
16403
  }
16493
16404
  //#endregion
16405
+ //#region src/client/SourceSessionLink.tsx
16406
+ function SourceSessionLink({ source, api, c, open, label: customLabel }) {
16407
+ const [checking, setChecking] = (0, react.useState)(false);
16408
+ const [error, setError] = (0, react.useState)("");
16409
+ const controller = (0, react.useRef)();
16410
+ (0, react.useEffect)(() => () => {
16411
+ controller.current?.abort();
16412
+ }, []);
16413
+ const label = customLabel || source.title || source.id;
16414
+ async function navigate() {
16415
+ const current = new AbortController();
16416
+ controller.current = current;
16417
+ setChecking(true);
16418
+ setError("");
16419
+ try {
16420
+ const result = await api.interact({
16421
+ action: "source_session",
16422
+ sessionId: source.id
16423
+ }, current.signal);
16424
+ if (!current.signal.aborted) if (result.ok && result.sourceSession?.available) open?.(source.id);
16425
+ else setError(c("来源会话不可用。", "Source session unavailable."));
16426
+ } catch {
16427
+ if (!current.signal.aborted) setError(c("无法打开来源会话。", "Could not open the source session."));
16428
+ } finally {
16429
+ if (!current.signal.aborted) setChecking(false);
16430
+ }
16431
+ }
16432
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16433
+ className: "acn-source-link",
16434
+ children: [source.available && open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
16435
+ className: "acn-text-button",
16436
+ title: source.id,
16437
+ disabled: checking,
16438
+ onClick: () => {
16439
+ navigate();
16440
+ },
16441
+ children: label
16442
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16443
+ className: "acn-help",
16444
+ children: [label, source.available ? "" : c("(不可用)", " (unavailable)")]
16445
+ }), error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16446
+ role: "alert",
16447
+ className: "acn-help",
16448
+ children: error
16449
+ })]
16450
+ });
16451
+ }
16452
+ function KnowledgeSources({ sources, api, c, open }) {
16453
+ if (!sources?.length) return null;
16454
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16455
+ className: "acn-source-sessions",
16456
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16457
+ className: "acn-help",
16458
+ children: c("来源会话", "Source sessions")
16459
+ }), sources.map((source) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SourceSessionLink, {
16460
+ source,
16461
+ api,
16462
+ c,
16463
+ open
16464
+ }, source.id))]
16465
+ });
16466
+ }
16467
+ //#endregion
16494
16468
  //#region src/client/knowledge-labels.ts
16495
16469
  const statuses = {
16496
16470
  active: "活跃",
@@ -16552,6 +16526,68 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16552
16526
  };
16553
16527
  }
16554
16528
  //#endregion
16529
+ //#region src/client/ActivityCard.tsx
16530
+ function ActivityCard(props) {
16531
+ const { item, c, api, openSource, openClaim } = props;
16532
+ const ids = [.../* @__PURE__ */ new Set([...item.entityIds ?? [], ...item.entityId ? [item.entityId] : []])].filter((id) => /^(claim|dispute|trace)_[0-9a-f]{8}$/.test(id));
16533
+ const summary = item.error ? displayMessage(item.error, c, item.errorInfo) : activitySummary(item, c);
16534
+ const source = item.source;
16535
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
16536
+ className: "acn-activity-card",
16537
+ "aria-label": `${item.kind} · ${activityState(item, c)}`,
16538
+ children: [
16539
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16540
+ className: "acn-activity-title",
16541
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: activityKind(item.kind, c) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16542
+ className: "acn-badge",
16543
+ "data-tone": ["failed", "rejected"].includes(item.state) ? "danger" : item.requiresAttention ? "warning" : item.state === "succeeded" ? "positive" : "neutral",
16544
+ children: activityState(item, c)
16545
+ })]
16546
+ }), item.updatedAt > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("time", {
16547
+ className: "acn-time",
16548
+ children: knowledgeDate(item.updatedAt)
16549
+ })] }),
16550
+ item.sessionId && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
16551
+ className: "acn-activity-source",
16552
+ children: [
16553
+ c("来源会话", "Source session"),
16554
+ ": ",
16555
+ source?.title || (source?.available ? item.sessionId : c("不可用", "Unavailable"))
16556
+ ]
16557
+ }),
16558
+ summary && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
16559
+ className: "acn-activity-outcome",
16560
+ role: item.error ? "alert" : void 0,
16561
+ children: summary
16562
+ }),
16563
+ ids.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16564
+ className: "acn-activity-links",
16565
+ children: ids.map((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
16566
+ className: "acn-text-button",
16567
+ onClick: () => {
16568
+ openClaim(id, activityKind(item.kind, c));
16569
+ },
16570
+ children: id
16571
+ }, id))
16572
+ }),
16573
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ActivityDetails, {
16574
+ ...props,
16575
+ showSummary: false
16576
+ }),
16577
+ source?.available && openSource && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16578
+ className: "acn-activity-source-action",
16579
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SourceSessionLink, {
16580
+ source,
16581
+ api,
16582
+ c,
16583
+ open: openSource,
16584
+ label: c("查看来源会话", "View source session")
16585
+ })
16586
+ })
16587
+ ]
16588
+ });
16589
+ }
16590
+ //#endregion
16555
16591
  //#region src/client/KnowledgeDetail.tsx
16556
16592
  function KnowledgeDetail({ text, c, openClaim }) {
16557
16593
  let values;
@@ -16745,7 +16781,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16745
16781
  const [sourceOnly, setSourceOnly] = (0, react.useState)("");
16746
16782
  const [attention, setAttention] = (0, react.useState)(false);
16747
16783
  const [expandedKnowledge, setExpandedKnowledge] = (0, react.useState)();
16748
- const [expandedActivities, setExpandedActivities] = (0, react.useState)(() => /* @__PURE__ */ new Set());
16749
16784
  const [references, setReferences] = (0, react.useState)([]);
16750
16785
  const reference = references.at(-1);
16751
16786
  const openClaim = (id, from) => {
@@ -16924,7 +16959,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16924
16959
  setData(void 0);
16925
16960
  setReferences([]);
16926
16961
  setExpandedKnowledge(void 0);
16927
- setExpandedActivities(/* @__PURE__ */ new Set());
16928
16962
  clearActivity();
16929
16963
  },
16930
16964
  children: choices.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
@@ -17274,56 +17308,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17274
17308
  className: "acn-empty",
17275
17309
  children: filteredActivity ? c("当前筛选下没有处理活动。", "No activity matches these filters.") : c("暂无处理活动。", "No activity.")
17276
17310
  }),
17277
- activities.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
17278
- className: "acn-entity acn-activity",
17279
- open: expandedActivities.has(item.id),
17280
- onToggle: (event) => {
17281
- const open = event.currentTarget.open;
17282
- setExpandedActivities((previous) => {
17283
- if (previous.has(item.id) === open) return previous;
17284
- const next = new Set(previous);
17285
- if (open) next.add(item.id);
17286
- else next.delete(item.id);
17287
- return next;
17288
- });
17311
+ activities.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ActivityCard, {
17312
+ api,
17313
+ item,
17314
+ runtimeKey: key,
17315
+ busy: busy || acting,
17316
+ c,
17317
+ action: (request) => {
17318
+ action(request);
17289
17319
  },
17290
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", {
17291
- "aria-label": `${item.kind} · ${activityState(item, c)}`,
17292
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
17293
- className: "acn-entity-main",
17294
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
17295
- className: "acn-entity-title",
17296
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: activityKind(item.kind, c) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
17297
- className: "acn-badge",
17298
- "data-tone": ["failed", "rejected"].includes(item.state) ? "danger" : item.requiresAttention ? "warning" : item.state === "succeeded" ? "positive" : "neutral",
17299
- children: activityState(item, c)
17300
- })]
17301
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
17302
- className: "acn-entity-preview",
17303
- role: item.error ? "alert" : void 0,
17304
- children: item.error ? displayMessage(item.error, c, item.errorInfo) : activitySummary(item, c)
17305
- })]
17306
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("time", {
17307
- className: "acn-time",
17308
- children: knowledgeDate(item.updatedAt)
17309
- })]
17310
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
17311
- className: "acn-entity-detail",
17312
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ActivityDetails, {
17313
- api,
17314
- item,
17315
- runtimeKey: key,
17316
- busy: busy || acting,
17317
- c,
17318
- showSummary: false,
17319
- action: (request) => {
17320
- action(request);
17321
- },
17322
- openSource,
17323
- openClaim,
17324
- openComponents
17325
- })
17326
- })]
17320
+ openSource,
17321
+ openClaim,
17322
+ openComponents
17327
17323
  }, item.id)),
17328
17324
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
17329
17325
  className: "acn-pagination",
@@ -18044,6 +18040,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18044
18040
  .acn-entity-detail{padding:10px 10px 20px}.acn-detail-fields{display:grid;gap:18px}.acn-detail-fields dt{font-size:12px;line-height:19px;color:var(--dsw-alias-label-secondary,GrayText);margin-bottom:5px}.acn-detail-fields dd{font-size:13px;line-height:1.7;white-space:pre-wrap;overflow-wrap:anywhere}.acn-inline-links{display:flex;gap:5px;flex-wrap:wrap}.acn-detail-meta{margin-top:20px;font-size:12px}.acn-detail-meta summary{cursor:pointer;color:var(--dsw-alias-label-secondary,GrayText);line-height:24px}.acn-detail-meta .acn-detail-fields{margin-top:12px;gap:10px}.acn-counts{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--dsw-alias-label-secondary,GrayText);margin:8px 0 18px}.acn-counts span{white-space:nowrap}.acn-empty{padding:30px 12px;text-align:center;color:var(--dsw-alias-label-secondary,GrayText);font-size:13px}.acn-pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:18px}.acn-pagination small{color:var(--dsw-alias-label-secondary,GrayText);font-size:11px}.acn-activity-summary{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
18045
18041
  .acn-knowledge-shell{width:100%;min-width:0;max-width:960px;margin:0 auto}.acn-knowledge-shell>.acn-backbar{margin-bottom:12px!important}.acn-knowledge-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:18px}.acn-knowledge-header>.acn-page-heading,.acn-knowledge-header>.acn-filterbar{margin:0;max-width:100%}.acn-knowledge-header h2{font-size:20px;line-height:28px;margin:0}.acn-knowledge-header select{max-width:100%}.acn-kind-tabs .acn-tab[aria-selected=true]{background:var(--dsw-alias-interactive-bg-hover,#8882)}.acn-back-link:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,Highlight);outline-offset:3px;border-radius:4px}
18046
18042
  .acn-reference-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.acn-reference-actions .acn-back-link{scroll-margin-top:64px}.acn-modal-body .acn-reference-actions .acn-back-link{scroll-margin-top:12px}.acn-reference h3{font-size:15px;line-height:22px;margin:16px 0 12px;overflow-wrap:anywhere}.acn-reference>p{overflow-wrap:anywhere}.acn-activity[open] .acn-entity-preview{-webkit-line-clamp:unset}.acn-activity-detail{display:flex;align-items:flex-start;flex-direction:column;gap:10px}.acn-activity-detail>p{margin:0!important;max-width:100%;overflow-wrap:anywhere}.acn-activity-detail .acn-counts{margin:0}.acn-activity-detail .acn-source-sessions{margin-top:4px}
18043
+ .acn-activity-card{padding:16px 8px;border-bottom:1px solid var(--dsw-alias-border-l1,#8883);display:flex;flex-direction:column;gap:7px;min-width:0}.acn-activity-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.acn-activity-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;font-size:13px;line-height:20px}.acn-activity-title strong{font-weight:550}.acn-activity-card .acn-activity-source{font-size:12px;line-height:19px;color:var(--dsw-alias-label-secondary,GrayText);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acn-activity-outcome{font-size:12px;line-height:20px!important;overflow-wrap:anywhere}.acn-activity-links{display:flex;flex-wrap:wrap;gap:2px 14px}.acn-activity-links .acn-btn{min-height:24px;padding:0;max-width:100%;overflow-wrap:anywhere;justify-content:flex-start;font-family:ui-monospace,monospace}.acn-execution{font-size:12px;width:100%;min-width:0}.acn-execution>summary{cursor:pointer;color:var(--dsw-alias-label-secondary,GrayText);width:fit-content;line-height:24px;border-radius:4px}.acn-execution>summary:focus-visible{outline:2px solid var(--acn-accent);outline-offset:2px}.acn-execution-body{display:flex;flex-direction:column;gap:8px;padding:10px 0 3px;font-size:12px;line-height:20px;overflow-wrap:anywhere}.acn-execution-body .acn-counts{margin:0}.acn-activity-source-action{display:flex}.acn-activity-source-action .acn-btn{min-height:28px}.acn-activity-card .acn-activity-detail{gap:8px}
18047
18044
  .acn-modal-backdrop{position:fixed;inset:0;z-index:10002;background:#0005;display:grid;place-items:center;padding:clamp(8px,2vw,20px);box-sizing:border-box}
18048
18045
  .acn-modal{width:min(920px,100%);max-height:min(84dvh,800px);display:flex;flex-direction:column;overflow:hidden}.acn-modal-header{display:flex;align-items:center;justify-content:space-between;padding:18px 24px 14px;gap:12px}.acn-modal-header h2{font-size:16px;font-weight:600;line-height:1.5;margin:0}
18049
18046
  .acn-modal-body{overflow:auto;overscroll-behavior:contain;min-width:0;padding:0 24px 22px}.acn-command-result{font:inherit;font-size:12px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0 0}
@@ -18111,7 +18108,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18111
18108
  agentSoloHint: "In solo mode, choose any fixed name, such as personal, using lowercase letters, numbers, underscores or hyphens. It identifies local knowledge storage: projects and sessions using this configuration share the same knowledge. It does not change with the project; keep it stable after setup.",
18112
18109
  agentTeamHint: "Use a stable, unique ID for each team member, matching the identity authorized by your team services. Only lowercase letters, numbers, underscores or hyphens are allowed. This ID identifies the owner of shared knowledge.",
18113
18110
  home: "Knowledge directory",
18114
- homeHint: "An absolute path or ~/ path on the DSH host. Data is stored under agents/<agentId>/. This is separate from the project workspace.",
18111
+ homeHint: "An absolute path or ~/ path on the DSH host. Each work configuration has an isolated directory under upstreams/. This is separate from the project workspace.",
18115
18112
  switchHint: "Changing the ID or directory switches to that storage location. Existing data stays in place; it is not migrated. Finish the current turn before saving. After changing identity or directory, old sessions and historical forks are blocked; start a new session.",
18116
18113
  model: "ACN background model",
18117
18114
  modelHint: "Used for Recap, Finalize, Inbox and Dream. The chat model is selected separately in DSH.",
@@ -18160,7 +18157,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18160
18157
  agentSoloHint: "个人模式下可自取任意固定名称,如 personal,使用小写字母、数字、下划线或连字符即可。它用于区分本地知识存储:同一配置下的不同项目和会话共用这份知识,不会按项目自动更换 ID,设定后建议保持不变。",
18161
18158
  agentTeamHint: "团队模式下,每个成员须使用稳定且唯一的 ID,并与团队服务授权的身份一致。仅使用小写字母、数字、下划线或连字符;此 ID 用于标识共享知识的归属。",
18162
18159
  home: "知识目录",
18163
- homeHint: "填写 DSH 主机上的绝对路径或 ~/ 路径。数据保存在 agents/<agentId>/ 下,与项目工作区分开。",
18160
+ homeHint: "填写 DSH 主机上的绝对路径或 ~/ 路径。各工作配置的知识保存在 upstreams/ 下的独立目录中,与项目工作区分开。",
18164
18161
  switchHint: "修改身份或目录会切换到对应存储位置,原有数据保留在原处,不会自动迁移。请先结束当前轮次。切换后旧会话及历史派生会话会被阻止,请新建会话。",
18165
18162
  model: "ACN 后台模型",
18166
18163
  modelHint: "用于 Recap、Finalize、Inbox 和 Dream。聊天模型仍在 DSH 中单独选择。",
@@ -4,7 +4,7 @@ import { S as LockTimeoutError, n as withFileLock, t as acquireFileLease } from
4
4
  import { l as sameClaim, r as KnowledgeBusy, s as ensureKnowledgeReady } from "./alignment-CwH0nBf-.js";
5
5
  import { i as ClaimStore, r as reportedClaimSetKey, t as ReportedSetStore } from "./reported-sets-DdEKdeVb.js";
6
6
  import { a as disputeVersion, i as RejectedDisputeStore, o as consolidationReady, r as UploadStore, s as relatedIds } from "./uploads-BCA2p92b.js";
7
- import { t as DeliveryStatusStore } from "./delivery-status-D5m3178s.js";
7
+ import { t as DeliveryStatusStore } from "./delivery-status-M7-Rwoyj.js";
8
8
  import { t as TeamError } from "./errors-pPumDOGD.js";
9
9
  //#region src/upload/deliver.ts
10
10
  var UploadDelivery = class {