@xgjktech/xg_cwork_im 1.17.22 → 1.17.24

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 (57) hide show
  1. package/README.md +4 -2
  2. package/dist/src/account-connection.d.ts.map +1 -1
  3. package/dist/src/account-connection.js +5 -4
  4. package/dist/src/account-connection.js.map +1 -1
  5. package/dist/src/agent-context-types.d.ts +85 -10
  6. package/dist/src/agent-context-types.d.ts.map +1 -1
  7. package/dist/src/agent-context-types.js +50 -7
  8. package/dist/src/agent-context-types.js.map +1 -1
  9. package/dist/src/agent-context-types.test.js +55 -2
  10. package/dist/src/agent-context-types.test.js.map +1 -1
  11. package/dist/src/build-project-prompt.d.ts.map +1 -1
  12. package/dist/src/build-project-prompt.js +53 -17
  13. package/dist/src/build-project-prompt.js.map +1 -1
  14. package/dist/src/build-project-prompt.test.d.ts +2 -0
  15. package/dist/src/build-project-prompt.test.d.ts.map +1 -0
  16. package/dist/src/build-project-prompt.test.js +100 -0
  17. package/dist/src/build-project-prompt.test.js.map +1 -0
  18. package/dist/src/channel-config.d.ts +60 -0
  19. package/dist/src/channel-config.d.ts.map +1 -1
  20. package/dist/src/channel-config.js +6 -0
  21. package/dist/src/channel-config.js.map +1 -1
  22. package/dist/src/dispatch-mentioned-reply.d.ts +3 -0
  23. package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
  24. package/dist/src/dispatch-mentioned-reply.js +36 -3
  25. package/dist/src/dispatch-mentioned-reply.js.map +1 -1
  26. package/dist/src/gateway-session-queue.d.ts +3 -0
  27. package/dist/src/gateway-session-queue.d.ts.map +1 -1
  28. package/dist/src/gateway-session-queue.js +1 -0
  29. package/dist/src/gateway-session-queue.js.map +1 -1
  30. package/dist/src/inbound-input-media.js +1 -1
  31. package/dist/src/inbound-input-media.js.map +1 -1
  32. package/dist/src/nas-volumes.d.ts +43 -0
  33. package/dist/src/nas-volumes.d.ts.map +1 -0
  34. package/dist/src/nas-volumes.js +237 -0
  35. package/dist/src/nas-volumes.js.map +1 -0
  36. package/dist/src/nas-volumes.test.d.ts +2 -0
  37. package/dist/src/nas-volumes.test.d.ts.map +1 -0
  38. package/dist/src/nas-volumes.test.js +151 -0
  39. package/dist/src/nas-volumes.test.js.map +1 -0
  40. package/dist/src/single-chat-no-reply-fallback.d.ts +14 -0
  41. package/dist/src/single-chat-no-reply-fallback.d.ts.map +1 -0
  42. package/dist/src/single-chat-no-reply-fallback.js +20 -0
  43. package/dist/src/single-chat-no-reply-fallback.js.map +1 -0
  44. package/dist/src/subagent-progress-hooks.d.ts +11 -0
  45. package/dist/src/subagent-progress-hooks.d.ts.map +1 -0
  46. package/dist/src/subagent-progress-hooks.js +41 -0
  47. package/dist/src/subagent-progress-hooks.js.map +1 -0
  48. package/dist/src/types.d.ts +11 -2
  49. package/dist/src/types.d.ts.map +1 -1
  50. package/dist/src/types.js.map +1 -1
  51. package/dist/src/user-facing-errors.d.ts +1 -0
  52. package/dist/src/user-facing-errors.d.ts.map +1 -1
  53. package/dist/src/user-facing-errors.js +7 -0
  54. package/dist/src/user-facing-errors.js.map +1 -1
  55. package/dist/src/user-facing-errors.test.js +8 -1
  56. package/dist/src/user-facing-errors.test.js.map +1 -1
  57. package/package.json +2 -2
@@ -7,6 +7,7 @@ import type { ImStreamClient } from "./connection.js";
7
7
  import type { BotIdentity, WsMessageParams, XgImConfig } from "./types.js";
8
8
  import type { AutoRouteResult } from "./auto-model-router.js";
9
9
  import type { InboundTrigger } from "./inbound-terminal-state.js";
10
+ import type { NasVolume } from "./agent-context-types.js";
10
11
  export interface PendingDispatch {
11
12
  route: {
12
13
  sessionKey: string;
@@ -16,6 +17,8 @@ export interface PendingDispatch {
16
17
  params: WsMessageParams;
17
18
  currentIdentity: BotIdentity;
18
19
  agentWorkspaceDir?: string;
20
+ /** 本会话 NAS 挂载声明;同一 sessionKey 下必须保持不变。 */
21
+ nasVolumes?: NasVolume[];
19
22
  /** 本条消息单轮模型(OpenClaw replyOptions.modelOverride) */
20
23
  modelOverride?: string;
21
24
  /** 本条消息单轮推理等级(OpenClaw replyOptions.thinkingLevelOverride;用户显式 /think 时不设) */
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-session-queue.d.ts","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,WAAW,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gDAAgD;IAChD,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,YAAY;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAC/C,cAAc,EAAE,MAAM,UAAU,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,GAAG,CAAC;IACR,WAAW,EAAE,MAAM,cAAc,CAAC;CACrC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CA6GhG"}
1
+ {"version":3,"file":"gateway-session-queue.d.ts","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,WAAW,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gDAAgD;IAChD,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,YAAY;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAC/C,cAAc,EAAE,MAAM,UAAU,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,GAAG,CAAC;IACR,WAAW,EAAE,MAAM,cAAc,CAAC;CACrC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CA8GhG"}
@@ -57,6 +57,7 @@ export function createRunWithSessionQueue(options) {
57
57
  currentIdentity: pending.currentIdentity,
58
58
  streamClient,
59
59
  agentWorkspaceDir: pending.agentWorkspaceDir,
60
+ nasVolumes: pending.nasVolumes,
60
61
  modelOverride: pending.modelOverride,
61
62
  thinkingLevelOverride: pending.thinkingLevelOverride,
62
63
  autoRouteMeta: pending.autoRouteMeta,
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-session-queue.js","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-session-queue.js","sourceRoot":"","sources":["../../src/gateway-session-queue.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ export function hasInboundUrlDownloads(fileItems) {
42
42
  */
43
43
  export function resolveInboundInputHostLayout(args) {
44
44
  const { cfg, agentId, agentContext, workspaceHostRoot, log } = args;
45
- if (agentContext) {
45
+ if (agentContext?.localRoot) {
46
46
  try {
47
47
  if (agentContext.localRoot.kind === "workspace_relative") {
48
48
  const host = workspaceHostRoot?.trim() ||
@@ -1 +1 @@
1
- {"version":3,"file":"inbound-input-media.js","sourceRoot":"","sources":["../../src/inbound-input-media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAGlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EACH,0BAA0B,EAC1B,+BAA+B,EAC/B,qBAAqB,EACrB,4BAA4B,EAC5B,mCAAmC,GACtC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG5F,sCAAsC;AACtC,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAE/C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAE7D,SAAS,qBAAqB,CAAC,EAAU;IACrC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACpB,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACvB,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACzC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IAC1C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAAsB;IACzD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AASD;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAM7C;IACG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEpE,IAAI,YAAY,EAAE,CAAC;QACf,IAAI,CAAC;YACD,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACvD,MAAM,IAAI,GACN,iBAAiB,EAAE,IAAI,EAAE;oBACzB,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG,wBAAwB,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC1E,OAAO;oBACH,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC;oBAC5D,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC3C,CAAC;YACN,CAAC;YACD,MAAM,UAAU,GAAG,wBAAwB,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/E,OAAO;gBACH,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC;gBAC5D,aAAa,EAAE,SAAS;aAC3B,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,EAAE,IAAI,EAAE,CAAC,8DAA8D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvF,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACD,MAAM,aAAa,GAAG,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/E,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;SAC7C,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,GAAG,EAAE,IAAI,EAAE,CAAC,6DAA6D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAUhD;IACG,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,GAC7F,IAAI,CAAC;IAET,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAEzD,IAAI,MAAM,GAAG,6BAA6B,CAAC;QACvC,GAAG;QACH,OAAO;QACP,YAAY;QACZ,iBAAiB;QACjB,GAAG;KACN,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,IAAI,YAAY,EAAE,CAAC;YACf,GAAG,EAAE,IAAI,EAAE,CAAC,0FAA0F,CAAC,CAAC;YACxG,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,YAAY,GAAG,mCAAmC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,GAAG;gBACL,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9E,aAAa,EAAE,YAAY;aAC9B,CAAC;YACF,GAAG,EAAE,IAAI,EAAE,CACP,mFAAmF,CACtF,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,GAAG,EAAE,IAAI,EAAE,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,+BAA+B,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAE/C,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAC/C,MAAM,QAAQ,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,wBAAwB,IAAI,mBAAmB,CAAC;IACzE,qEAAqE;IACrE,kDAAkD;IAClD,uEAAuE;IACvE,MAAM,aAAa,GAAG,MAAM,CAAC,6BAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEzE,GAAG,EAAE,IAAI,EAAE,CACP,wCAAwC,SAAS,CAAC,MAAM,iBAAiB,YAAY,kBAAkB,aAAa,IAAI,QAAQ,iBAAiB,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,SAAS,kBAAkB,aAAa,IAAI,QAAQ,EAAE,CAC/O,CAAC;IAEF,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACb,CAAC;QAED,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,GAAG,EAAE,IAAI,EAAE,CACP,qFAAqF,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,UAAU,IAAI,CAAC,MAAM,IAAI,QAAQ,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CACrL,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACb,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAE1C,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YACpE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEjC,IAAI,QAAgB,CAAA;YACpB,IAAI,qBAA2C,CAAA;YAE/C,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;gBACjD,IAAI,CAAC;oBACD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;oBAC3D,MAAM,MAAM,GAAG,aAAa,EAAE,IAAI,EAAE,CAAA;oBACpC,IAAI,MAAM,EAAE,CAAC;wBACT,QAAQ,GAAG,4BAA4B,CAAC;4BACpC,aAAa,EAAE,MAAM;4BACrB,OAAO,EAAE,UAAU;4BACnB,KAAK,EAAE,SAAS;4BAChB,iBAAiB,EAAE,aAAa;4BAChC,GAAG;yBACN,CAAC,CAAA;oBACN,CAAC;yBAAM,CAAC;wBACJ,QAAQ,GAAG,4BAA4B,CAAC;4BACpC,aAAa,EAAE,YAAY;4BAC3B,OAAO,EAAE,UAAU;4BACnB,KAAK,EAAE,iBAAiB;4BACxB,GAAG;yBACN,CAAC,CAAA;oBACN,CAAC;oBACD,qBAAqB,GAAG,SAAS,CAAA;oBACjC,GAAG,EAAE,IAAI,EAAE,CACP,8CAA8C,SAAS,MAAM,UAAU,UAAU,SAAS,CAAC,MAAM,EAAE,CACtG,CAAA;gBACL,CAAC;gBAAC,OAAO,UAAmB,EAAE,CAAC;oBAC3B,GAAG,EAAE,IAAI,EAAE,CACP,6EAA6E,MAAM,CAAC,UAAU,CAAC,EAAE,CACpG,CAAA;oBACD,MAAM,MAAM,GAAG,aAAa,EAAE,IAAI,EAAE,CAAA;oBACpC,IAAI,MAAM,EAAE,CAAC;wBACT,QAAQ,GAAG,4BAA4B,CAAC;4BACpC,aAAa,EAAE,MAAM;4BACrB,OAAO;4BACP,KAAK,EAAE,SAAS;4BAChB,iBAAiB,EAAE,aAAa;4BAChC,GAAG;yBACN,CAAC,CAAA;oBACN,CAAC;yBAAM,CAAC;wBACJ,QAAQ,GAAG,4BAA4B,CAAC;4BACpC,aAAa,EAAE,YAAY;4BAC3B,OAAO;4BACP,KAAK,EAAE,iBAAiB;4BACxB,GAAG;yBACN,CAAC,CAAA;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,MAAM,GAAG,aAAa,EAAE,IAAI,EAAE,CAAA;gBACpC,IAAI,MAAM,EAAE,CAAC;oBACT,QAAQ,GAAG,4BAA4B,CAAC;wBACpC,aAAa,EAAE,MAAM;wBACrB,OAAO;wBACP,KAAK,EAAE,SAAS;wBAChB,iBAAiB,EAAE,aAAa;wBAChC,GAAG;qBACN,CAAC,CAAA;gBACN,CAAC;qBAAM,CAAC;oBACJ,QAAQ,GAAG,4BAA4B,CAAC;wBACpC,aAAa,EAAE,YAAY;wBAC3B,OAAO;wBACP,KAAK,EAAE,iBAAiB;wBACxB,GAAG;qBACN,CAAC,CAAA;gBACN,CAAC;YACL,CAAC;YAED,GAAG,EAAE,IAAI,EAAE,CACP,kCAAkC,SAAS,UAAU,MAAM,CAAC,MAAM,QAAQ,OAAO,gBAAgB,QAAQ,YAAY,YAAY,CAAC,QAAQ,CAAC,UAAU,SAAS,kBAAkB,aAAa,IAAI,QAAQ,kBAAkB,aAAa,EAAE,IAAI,EAAE,IAAI,QAAQ,qBAAqB,qBAAqB,EAAE,MAAM,IAAI,CAAC,EAAE,CACxT,CAAC;YACF,MAAM,UAAU,GAAc;gBAC1B,GAAG,IAAI;gBACP,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,MAAM,CAAC,MAAM;gBACnB,IAAI,EAAE,SAAS;aAClB,CAAA;YACD,IAAI,qBAAqB,EAAE,CAAC;gBACvB,UAAiD,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;YACpG,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,GAAG,EAAE,IAAI,EAAE,CACP,uFAAuF,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAChI,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"inbound-input-media.js","sourceRoot":"","sources":["../../src/inbound-input-media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 会话级 NAS 目录声明:路径规范化、安全校验、幂等指纹与 OpenClaw sandbox bind 注入。
3
+ */
4
+ import type { OpenClawConfig } from "openclaw/plugin-sdk";
5
+ import type { NasVolume } from "./agent-context-types.js";
6
+ import type { XgImConfig } from "./types.js";
7
+ export interface NormalizedNasVolume {
8
+ /** 已解析软链接后的宿主机真实目录。 */
9
+ realDir: string;
10
+ /** 相对 Agent workspace 的 POSIX 路径。 */
11
+ dockerDir: string;
12
+ /** 容器内绝对路径。 */
13
+ sandboxDir: string;
14
+ mode: "ro" | "rw";
15
+ }
16
+ /** 将 IM 的 dockerDir 规范为不带 /workspace 前缀的 workspace 相对路径。 */
17
+ export declare function normalizeNasDockerDir(raw: string): string;
18
+ export declare function nasVolumeSandboxDir(dockerDir: string): string;
19
+ /** Prompt 使用的轻量规范化;真实路径与白名单在 dispatch 前再次校验。 */
20
+ export declare function normalizeNasVolumesForPrompt(volumes: NasVolume[] | undefined): Array<{
21
+ dockerDir: string;
22
+ sandboxDir: string;
23
+ mode: "ro" | "rw";
24
+ }>;
25
+ export declare function validateAndNormalizeNasVolumes(volumes: NasVolume[], config: XgImConfig): NormalizedNasVolume[];
26
+ export declare function nasVolumeSpecHash(volumes: NormalizedNasVolume[]): string;
27
+ /**
28
+ * 将本会话期望的 NAS mounts 注入本轮 cfg。重复传入相同声明是幂等的;同一 session 改绑则拒绝。
29
+ */
30
+ export declare function resolveNasVolumeDispatchConfig(args: {
31
+ cfg: OpenClawConfig;
32
+ config: XgImConfig;
33
+ agentId: string;
34
+ sessionKey: string;
35
+ volumes?: NasVolume[];
36
+ }): {
37
+ cfg: OpenClawConfig;
38
+ specHash?: string;
39
+ reused: boolean;
40
+ };
41
+ /** 测试与 Gateway 停止时使用。 */
42
+ export declare function clearSessionNasVolumeStates(): void;
43
+ //# sourceMappingURL=nas-volumes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nas-volumes.d.ts","sourceRoot":"","sources":["../../src/nas-volumes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,WAAW,mBAAmB;IAChC,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACrB;AAeD,4DAA4D;AAC5D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBzD;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,gDAAgD;AAChD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,KAAK,CAAC;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACrB,CAAC,CAMD;AAwGD,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,SAAS,EAAE,EACpB,MAAM,EAAE,UAAU,GACnB,mBAAmB,EAAE,CAcvB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAKxE;AAwDD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACjD,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACzB,GAAG;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CA8B9D;AAED,yBAAyB;AACzB,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * 会话级 NAS 目录声明:路径规范化、安全校验、幂等指纹与 OpenClaw sandbox bind 注入。
3
+ */
4
+ import { createHash } from "node:crypto";
5
+ import { existsSync, mkdirSync, realpathSync, statSync } from "node:fs";
6
+ import path from "node:path";
7
+ const SANDBOX_WORKSPACE_ROOT = "/workspace";
8
+ const sessionVolumeStates = new Map();
9
+ function isInsideOrEqual(root, target) {
10
+ const relative = path.relative(root, target);
11
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
12
+ }
13
+ /** 将 IM 的 dockerDir 规范为不带 /workspace 前缀的 workspace 相对路径。 */
14
+ export function normalizeNasDockerDir(raw) {
15
+ let value = raw.trim().replace(/\\/g, "/");
16
+ if (value === "/workspace" || value === "/workspace/") {
17
+ throw new Error("nasVolumes.dockerDir 不能指向 workspace 根目录");
18
+ }
19
+ if (value.startsWith("/workspace/"))
20
+ value = value.slice("/workspace/".length);
21
+ while (value.startsWith("./"))
22
+ value = value.slice(2);
23
+ while (value.startsWith("/"))
24
+ value = value.slice(1);
25
+ value = value.replace(/\/+$/, "");
26
+ if (!value)
27
+ throw new Error("nasVolumes.dockerDir 不能为空");
28
+ const parts = value.split("/");
29
+ for (const part of parts) {
30
+ if (!part || part === "." || part === "..") {
31
+ throw new Error(`nasVolumes.dockerDir 含非法路径段: ${raw}`);
32
+ }
33
+ if (/[\0-\x1f:*?"<>|]/.test(part)) {
34
+ throw new Error(`nasVolumes.dockerDir 含非法字符: ${raw}`);
35
+ }
36
+ }
37
+ return parts.join("/");
38
+ }
39
+ export function nasVolumeSandboxDir(dockerDir) {
40
+ return `${SANDBOX_WORKSPACE_ROOT}/${normalizeNasDockerDir(dockerDir)}`;
41
+ }
42
+ /** Prompt 使用的轻量规范化;真实路径与白名单在 dispatch 前再次校验。 */
43
+ export function normalizeNasVolumesForPrompt(volumes) {
44
+ if (!volumes?.length)
45
+ return [];
46
+ return volumes.map((volume) => {
47
+ const dockerDir = normalizeNasDockerDir(volume.dockerDir);
48
+ return { dockerDir, sandboxDir: nasVolumeSandboxDir(dockerDir), mode: volume.mode };
49
+ });
50
+ }
51
+ function normalizeAllowedRoots(config) {
52
+ const mappings = config.nasVolumeRootMappings ?? [];
53
+ if (mappings.length === 0) {
54
+ throw new Error("NAS_VOLUME_ROOTS_NOT_CONFIGURED: channels.xg_cwork_im.nasVolumeRootMappings 未配置");
55
+ }
56
+ return mappings.map((mapping) => {
57
+ const logicalRoot = normalizeLogicalRoot(mapping.logicalRoot);
58
+ const hostRoot = mapping.hostRoot.trim();
59
+ if (!path.isAbsolute(hostRoot)) {
60
+ throw new Error(`NAS_VOLUME_ROOT_INVALID: hostRoot 必须是宿主机绝对路径: ${hostRoot}`);
61
+ }
62
+ const configuredRoot = path.resolve(hostRoot);
63
+ const realRoot = realpathSync(configuredRoot);
64
+ if (!statSync(realRoot).isDirectory()) {
65
+ throw new Error(`NAS_VOLUME_ROOT_INVALID: hostRoot 不是目录: ${hostRoot}`);
66
+ }
67
+ return { logicalRoot, configuredRoot, realRoot };
68
+ }).sort((left, right) => right.logicalRoot.length - left.logicalRoot.length);
69
+ }
70
+ function normalizeLogicalRoot(raw) {
71
+ const value = raw.trim().replace(/\\/g, "/");
72
+ if (!value.startsWith("/")) {
73
+ throw new Error(`NAS_VOLUME_ROOT_INVALID: logicalRoot 必须是绝对逻辑路径: ${raw}`);
74
+ }
75
+ const normalized = path.posix.normalize(value).replace(/\/+$/, "") || "/";
76
+ if (normalized === "/") {
77
+ throw new Error("NAS_VOLUME_ROOT_INVALID: logicalRoot 不能是根目录 /");
78
+ }
79
+ return normalized;
80
+ }
81
+ function nearestExistingAncestor(target) {
82
+ let current = target;
83
+ while (!existsSync(current)) {
84
+ const parent = path.dirname(current);
85
+ if (parent === current)
86
+ break;
87
+ current = parent;
88
+ }
89
+ return current;
90
+ }
91
+ /**
92
+ * 业务目录允许按需创建,但创建前后都必须确认路径仍位于已存在的白名单根内。
93
+ */
94
+ function ensureNasSourceDirectory(rawDir, allowedRoots) {
95
+ const logicalDir = path.posix.normalize(rawDir.trim().replace(/\\/g, "/"));
96
+ if (!logicalDir.startsWith("/")) {
97
+ throw new Error(`NAS_VOLUME_SOURCE_INVALID: realDir 必须是绝对逻辑路径: ${rawDir}`);
98
+ }
99
+ const allowed = allowedRoots.find((root) => logicalDir !== root.logicalRoot && logicalDir.startsWith(`${root.logicalRoot}/`));
100
+ if (!allowed) {
101
+ throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 未匹配允许的 logicalRoot: ${rawDir}`);
102
+ }
103
+ const target = path.resolve(allowed.configuredRoot, ...path.posix.relative(allowed.logicalRoot, logicalDir).split("/"));
104
+ if (!isInsideOrEqual(allowed.configuredRoot, target) || target === allowed.configuredRoot) {
105
+ throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 越出映射根目录: ${rawDir}`);
106
+ }
107
+ if (!existsSync(target)) {
108
+ const existingAncestor = realpathSync(nearestExistingAncestor(target));
109
+ if (!isInsideOrEqual(allowed.realRoot, existingAncestor)) {
110
+ throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 的父目录越出允许根: ${rawDir}`);
111
+ }
112
+ mkdirSync(target, { recursive: true });
113
+ }
114
+ const realDir = realpathSync(target);
115
+ if (realDir === allowed.realRoot || !isInsideOrEqual(allowed.realRoot, realDir)) {
116
+ throw new Error(`NAS_VOLUME_SOURCE_FORBIDDEN: realDir 不在允许根的业务子目录内: ${rawDir}`);
117
+ }
118
+ if (!statSync(realDir).isDirectory()) {
119
+ throw new Error(`NAS_VOLUME_SOURCE_INVALID: realDir 不是目录: ${rawDir}`);
120
+ }
121
+ return realDir;
122
+ }
123
+ function assertNonOverlappingTargets(volumes) {
124
+ for (let i = 0; i < volumes.length; i += 1) {
125
+ for (let j = i + 1; j < volumes.length; j += 1) {
126
+ const left = volumes[i].dockerDir;
127
+ const right = volumes[j].dockerDir;
128
+ if (left === right || left.startsWith(`${right}/`) || right.startsWith(`${left}/`)) {
129
+ throw new Error(`NAS_VOLUME_TARGET_CONFLICT: dockerDir 不能重复或嵌套: ${left}, ${right}`);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ export function validateAndNormalizeNasVolumes(volumes, config) {
135
+ const allowedRoots = normalizeAllowedRoots(config);
136
+ const normalized = volumes.map((volume) => {
137
+ const realDir = ensureNasSourceDirectory(volume.realDir.trim(), allowedRoots);
138
+ const dockerDir = normalizeNasDockerDir(volume.dockerDir);
139
+ return {
140
+ realDir,
141
+ dockerDir,
142
+ sandboxDir: nasVolumeSandboxDir(dockerDir),
143
+ mode: volume.mode,
144
+ };
145
+ });
146
+ assertNonOverlappingTargets(normalized);
147
+ return normalized;
148
+ }
149
+ export function nasVolumeSpecHash(volumes) {
150
+ const stable = [...volumes]
151
+ .sort((left, right) => left.dockerDir.localeCompare(right.dockerDir))
152
+ .map(({ realDir, dockerDir, mode }) => ({ realDir, dockerDir, mode }));
153
+ return createHash("sha256").update(JSON.stringify(stable)).digest("hex");
154
+ }
155
+ function effectiveSandboxScope(cfg, agentId) {
156
+ const agents = cfg.agents;
157
+ const defaults = agents?.defaults;
158
+ const defaultSandbox = defaults?.sandbox;
159
+ const list = Array.isArray(agents?.list) ? agents.list : [];
160
+ const agent = list.find((entry) => entry.id === agentId);
161
+ const agentSandbox = agent?.sandbox;
162
+ return agentSandbox?.scope ?? defaultSandbox?.scope;
163
+ }
164
+ function injectDockerBinds(cfg, agentId, binds) {
165
+ const cfgRecord = cfg;
166
+ const agents = cfgRecord.agents ?? {};
167
+ const list = Array.isArray(agents.list) ? agents.list : [];
168
+ const agentIndex = list.findIndex((entry) => entry.id === agentId);
169
+ const patchSandbox = (holder) => {
170
+ const sandbox = holder.sandbox ?? {};
171
+ const docker = sandbox.docker ?? {};
172
+ const existingBinds = Array.isArray(docker.binds)
173
+ ? docker.binds.filter((entry) => typeof entry === "string")
174
+ : [];
175
+ return {
176
+ ...holder,
177
+ sandbox: {
178
+ ...sandbox,
179
+ docker: {
180
+ ...docker,
181
+ binds: [...new Set([...existingBinds, ...binds])],
182
+ // OpenClaw 默认禁止 workspace 子路径和 workspace 外来源;本插件已在上方执行真实路径白名单校验。
183
+ dangerouslyAllowExternalBindSources: true,
184
+ dangerouslyAllowReservedContainerTargets: true,
185
+ },
186
+ },
187
+ };
188
+ };
189
+ if (agentIndex >= 0) {
190
+ const nextList = [...list];
191
+ nextList[agentIndex] = patchSandbox(list[agentIndex]);
192
+ return { ...cfgRecord, agents: { ...agents, list: nextList } };
193
+ }
194
+ const defaults = agents.defaults ?? {};
195
+ return {
196
+ ...cfgRecord,
197
+ agents: { ...agents, defaults: patchSandbox(defaults) },
198
+ };
199
+ }
200
+ /**
201
+ * 将本会话期望的 NAS mounts 注入本轮 cfg。重复传入相同声明是幂等的;同一 session 改绑则拒绝。
202
+ */
203
+ export function resolveNasVolumeDispatchConfig(args) {
204
+ const stateKey = `${args.agentId}\0${args.sessionKey}`;
205
+ const prior = sessionVolumeStates.get(stateKey);
206
+ let normalized;
207
+ let specHash;
208
+ if (args.volumes?.length) {
209
+ normalized = validateAndNormalizeNasVolumes(args.volumes, args.config);
210
+ specHash = nasVolumeSpecHash(normalized);
211
+ if (prior && prior.specHash !== specHash) {
212
+ throw new Error("NAS_VOLUME_SESSION_CONFLICT: 当前会话已绑定另一组 NAS 目录,请创建新会话");
213
+ }
214
+ }
215
+ else if (prior) {
216
+ normalized = prior.volumes;
217
+ specHash = prior.specHash;
218
+ }
219
+ else {
220
+ return { cfg: args.cfg, reused: false };
221
+ }
222
+ if (effectiveSandboxScope(args.cfg, args.agentId) !== "session") {
223
+ throw new Error("NAS_VOLUME_SANDBOX_SCOPE_INVALID: NAS 挂载要求 sandbox.scope=session");
224
+ }
225
+ sessionVolumeStates.set(stateKey, { specHash, volumes: normalized, lastSeenAt: Date.now() });
226
+ const binds = normalized.map((volume) => `${volume.realDir}:${volume.sandboxDir}:${volume.mode}`);
227
+ return {
228
+ cfg: injectDockerBinds(args.cfg, args.agentId, binds),
229
+ specHash,
230
+ reused: prior?.specHash === specHash,
231
+ };
232
+ }
233
+ /** 测试与 Gateway 停止时使用。 */
234
+ export function clearSessionNasVolumeStates() {
235
+ sessionVolumeStates.clear();
236
+ }
237
+ //# sourceMappingURL=nas-volumes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nas-volumes.js","sourceRoot":"","sources":["../../src/nas-volumes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=nas-volumes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nas-volumes.test.d.ts","sourceRoot":"","sources":["../../src/nas-volumes.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,151 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtemp, mkdir, rm, stat } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { afterEach, describe, it } from "node:test";
6
+ import { clearSessionNasVolumeStates, normalizeNasDockerDir, resolveNasVolumeDispatchConfig, } from "./nas-volumes.js";
7
+ const tempDirs = [];
8
+ afterEach(async () => {
9
+ clearSessionNasVolumeStates();
10
+ await Promise.all(tempDirs.splice(0).map((dir) => rm(dir, { recursive: true, force: true })));
11
+ });
12
+ async function fixture() {
13
+ const root = await mkdtemp(path.join(os.tmpdir(), "xg-nas-volumes-"));
14
+ tempDirs.push(root);
15
+ const caseA = path.join(root, "case-a");
16
+ const caseB = path.join(root, "case-b");
17
+ await mkdir(caseA);
18
+ await mkdir(caseB);
19
+ return { root, caseA, caseB };
20
+ }
21
+ function openClawCfg() {
22
+ return {
23
+ agents: {
24
+ defaults: {
25
+ sandbox: { scope: "session", docker: { binds: ["/static:/static:ro"] } },
26
+ },
27
+ },
28
+ };
29
+ }
30
+ function mappingConfig(hostRoot) {
31
+ return {
32
+ baseUrl: "https://im.example.test",
33
+ nasVolumeRootMappings: [{ logicalRoot: "/data/touqian", hostRoot }],
34
+ };
35
+ }
36
+ describe("nasVolumes", () => {
37
+ it("normalizes workspace-relative dockerDir", () => {
38
+ assert.equal(normalizeNasDockerDir("/workspace/touqian/2026/08/a/"), "touqian/2026/08/a");
39
+ assert.throws(() => normalizeNasDockerDir("../secret"), /非法路径段/);
40
+ });
41
+ it("returns the original OpenClaw config when nasVolumes is absent", () => {
42
+ const cfg = openClawCfg();
43
+ const result = resolveNasVolumeDispatchConfig({
44
+ cfg,
45
+ config: { baseUrl: "https://im.example.test" },
46
+ agentId: "main",
47
+ sessionKey: "agent:main:xg_cwork_im:legacy-group",
48
+ });
49
+ assert.strictEqual(result.cfg, cfg);
50
+ assert.equal(result.specHash, undefined);
51
+ });
52
+ it("injects binds and reuses the same session spec", async () => {
53
+ const { root } = await fixture();
54
+ const config = mappingConfig(root);
55
+ const args = {
56
+ cfg: openClawCfg(),
57
+ config,
58
+ agentId: "main",
59
+ sessionKey: "agent:main:xg_cwork_im:group-1",
60
+ volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case-a", mode: "ro" }],
61
+ };
62
+ const first = resolveNasVolumeDispatchConfig(args);
63
+ const second = resolveNasVolumeDispatchConfig(args);
64
+ assert.equal(first.reused, false);
65
+ assert.equal(second.reused, true);
66
+ assert.equal(first.specHash, second.specHash);
67
+ const agents = first.cfg.agents;
68
+ const docker = agents.defaults.sandbox.docker;
69
+ assert.ok(docker.binds.includes("/static:/static:ro"));
70
+ assert.ok(docker.binds.some((bind) => bind.endsWith(":/workspace/touqian/case-a:ro")));
71
+ assert.equal(docker.dangerouslyAllowExternalBindSources, true);
72
+ assert.equal(docker.dangerouslyAllowReservedContainerTargets, true);
73
+ });
74
+ it("creates a missing business source directory below an allowed root", async () => {
75
+ const { root } = await fixture();
76
+ const missing = path.join(root, "CP202205250005", "sequences", "0001", "input");
77
+ const result = resolveNasVolumeDispatchConfig({
78
+ cfg: openClawCfg(),
79
+ config: {
80
+ baseUrl: "https://im.example.test",
81
+ nasVolumeRootMappings: [
82
+ { logicalRoot: "/data/touqian", hostRoot: root },
83
+ ],
84
+ },
85
+ agentId: "main",
86
+ sessionKey: "agent:main:xg_cwork_im:group-create",
87
+ volumes: [
88
+ {
89
+ realDir: "/data/touqian/CP202205250005/sequences/0001/input",
90
+ dockerDir: "touqian/case/input",
91
+ mode: "rw",
92
+ },
93
+ ],
94
+ });
95
+ assert.equal((await stat(missing)).isDirectory(), true);
96
+ const docker = result.cfg.agents.defaults.sandbox.docker;
97
+ assert.ok(docker.binds.some((bind) => bind.endsWith(":/workspace/touqian/case/input:rw")));
98
+ });
99
+ it("never creates a missing directory outside the allowed root", async () => {
100
+ const { root } = await fixture();
101
+ const outside = path.join(root, "outside", "must-not-exist");
102
+ assert.throws(() => resolveNasVolumeDispatchConfig({
103
+ cfg: openClawCfg(),
104
+ config: mappingConfig(root),
105
+ agentId: "main",
106
+ sessionKey: "agent:main:xg_cwork_im:group-outside",
107
+ volumes: [{ realDir: "/data/other/must-not-exist", dockerDir: "touqian/outside", mode: "rw" }],
108
+ }), /NAS_VOLUME_SOURCE_FORBIDDEN/);
109
+ await assert.rejects(stat(outside), /ENOENT/);
110
+ });
111
+ it("rejects changing NAS directories in the same session", async () => {
112
+ const { root } = await fixture();
113
+ const config = mappingConfig(root);
114
+ const common = {
115
+ cfg: openClawCfg(),
116
+ config,
117
+ agentId: "main",
118
+ sessionKey: "agent:main:xg_cwork_im:group-1",
119
+ };
120
+ resolveNasVolumeDispatchConfig({
121
+ ...common,
122
+ volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case", mode: "ro" }],
123
+ });
124
+ assert.throws(() => resolveNasVolumeDispatchConfig({
125
+ ...common,
126
+ volumes: [{ realDir: "/data/touqian/case-b", dockerDir: "touqian/case", mode: "ro" }],
127
+ }), /NAS_VOLUME_SESSION_CONFLICT/);
128
+ });
129
+ it("requires root mappings and rejects overlapping targets", async () => {
130
+ const { root } = await fixture();
131
+ const common = {
132
+ cfg: openClawCfg(),
133
+ agentId: "main",
134
+ sessionKey: "agent:main:xg_cwork_im:group-2",
135
+ };
136
+ assert.throws(() => resolveNasVolumeDispatchConfig({
137
+ ...common,
138
+ config: { baseUrl: "https://im.example.test" },
139
+ volumes: [{ realDir: "/data/touqian/case-a", dockerDir: "touqian/case", mode: "ro" }],
140
+ }), /NAS_VOLUME_ROOTS_NOT_CONFIGURED/);
141
+ assert.throws(() => resolveNasVolumeDispatchConfig({
142
+ ...common,
143
+ config: mappingConfig(root),
144
+ volumes: [
145
+ { realDir: "/data/touqian/case-a", dockerDir: "touqian/case", mode: "ro" },
146
+ { realDir: "/data/touqian/case-b", dockerDir: "touqian/case/output", mode: "rw" },
147
+ ],
148
+ }), /NAS_VOLUME_TARGET_CONFLICT/);
149
+ });
150
+ });
151
+ //# sourceMappingURL=nas-volumes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nas-volumes.test.js","sourceRoot":"","sources":["../../src/nas-volumes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 单聊轮次结束但未向 IM 发出正文时的兜底话术(如模型输出 NO_REPLY、deliver 未被调用)。
3
+ */
4
+ import type { WsMessageParams } from "./types.js";
5
+ export declare function shouldSendSingleChatNoReplyFallback(args: {
6
+ params: WsMessageParams;
7
+ hasFirstReply: boolean;
8
+ deliverCallCount: number;
9
+ dispatchError?: unknown;
10
+ lastDeliverError?: unknown;
11
+ }): boolean;
12
+ /** 单聊静默轮次兜底:简短告知并引导重试。 */
13
+ export declare function buildSingleChatNoReplyFallbackText(): string;
14
+ //# sourceMappingURL=single-chat-no-reply-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single-chat-no-reply-fallback.d.ts","sourceRoot":"","sources":["../../src/single-chat-no-reply-fallback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACtD,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAMV;AAED,0BAA0B;AAC1B,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 单聊轮次结束但未向 IM 发出正文时的兜底话术(如模型输出 NO_REPLY、deliver 未被调用)。
3
+ */
4
+ import { isImSingleChat } from "./inbound-chat-type.js";
5
+ export function shouldSendSingleChatNoReplyFallback(args) {
6
+ if (args.hasFirstReply)
7
+ return false;
8
+ if (args.dispatchError !== undefined || args.lastDeliverError !== undefined)
9
+ return false;
10
+ if (!isImSingleChat(args.params))
11
+ return false;
12
+ if (args.deliverCallCount > 0)
13
+ return false;
14
+ return true;
15
+ }
16
+ /** 单聊静默轮次兜底:简短告知并引导重试。 */
17
+ export function buildSingleChatNoReplyFallbackText() {
18
+ return "消息已收到,但这一轮没有生成回复。请换个说法或把需求说具体一些后再试。";
19
+ }
20
+ //# sourceMappingURL=single-chat-no-reply-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single-chat-no-reply-fallback.js","sourceRoot":"","sources":["../../src/single-chat-no-reply-fallback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,UAAU,mCAAmC,CAAC,IAMnD;IACG,IAAI,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,kCAAkC;IAC9C,OAAO,qCAAqC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
2
+ import type { ImStreamClient } from "./connection.js";
3
+ interface SubagentWsTarget {
4
+ streamClient: ImStreamClient;
5
+ groupId: string;
6
+ replyToMsgId: string;
7
+ }
8
+ export declare function registerSubagentProgressHooks(api: OpenClawPluginApi): void;
9
+ export declare function setSubagentWsTarget(childSessionKey: string, target: SubagentWsTarget): void;
10
+ export {};
11
+ //# sourceMappingURL=subagent-progress-hooks.d.ts.map