@xgjktech/xg_cwork_im 1.17.47 → 1.17.49

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 (44) hide show
  1. package/README.md +489 -489
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +19 -11
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/build-project-prompt.test.js +18 -18
  6. package/dist/src/cron-appkey-binding-store.d.ts.map +1 -1
  7. package/dist/src/cron-appkey-binding-store.js +28 -10
  8. package/dist/src/cron-appkey-binding-store.js.map +1 -1
  9. package/dist/src/cron-appkey-binding-store.test.js +69 -1
  10. package/dist/src/cron-appkey-binding-store.test.js.map +1 -1
  11. package/dist/src/gateway-session-queue.d.ts +3 -0
  12. package/dist/src/gateway-session-queue.d.ts.map +1 -1
  13. package/dist/src/gateway-session-queue.js +1 -0
  14. package/dist/src/gateway-session-queue.js.map +1 -1
  15. package/dist/src/plugin-dispose.d.ts +8 -7
  16. package/dist/src/plugin-dispose.d.ts.map +1 -1
  17. package/dist/src/plugin-dispose.js +11 -10
  18. package/dist/src/plugin-dispose.js.map +1 -1
  19. package/dist/src/process-shared-store.d.ts +7 -8
  20. package/dist/src/process-shared-store.d.ts.map +1 -1
  21. package/dist/src/process-shared-store.js +12 -7
  22. package/dist/src/process-shared-store.js.map +1 -1
  23. package/dist/src/process-shared-store.test.js +31 -23
  24. package/dist/src/process-shared-store.test.js.map +1 -1
  25. package/dist/src/register-exec-env-hook.d.ts.map +1 -1
  26. package/dist/src/register-exec-env-hook.js +174 -33
  27. package/dist/src/register-exec-env-hook.js.map +1 -1
  28. package/dist/src/register-exec-env-hook.test.js +32 -0
  29. package/dist/src/register-exec-env-hook.test.js.map +1 -1
  30. package/dist/src/session-env-store.d.ts +4 -2
  31. package/dist/src/session-env-store.d.ts.map +1 -1
  32. package/dist/src/session-env-store.js +7 -3
  33. package/dist/src/session-env-store.js.map +1 -1
  34. package/dist/src/session-env-store.test.js +3 -1
  35. package/dist/src/session-env-store.test.js.map +1 -1
  36. package/dist/src/single-chat-no-reply-fallback.d.ts +14 -0
  37. package/dist/src/single-chat-no-reply-fallback.d.ts.map +1 -0
  38. package/dist/src/single-chat-no-reply-fallback.js +20 -0
  39. package/dist/src/single-chat-no-reply-fallback.js.map +1 -0
  40. package/dist/src/subagent-progress-hooks.d.ts +11 -0
  41. package/dist/src/subagent-progress-hooks.d.ts.map +1 -0
  42. package/dist/src/subagent-progress-hooks.js +41 -0
  43. package/dist/src/subagent-progress-hooks.js.map +1 -0
  44. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"process-shared-store.d.ts","sourceRoot":"","sources":["../../src/process-shared-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,kBAAkB;IAC/B,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB;qDACiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAiBD,uCAAuC;AACvC,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,oBAAoB;AACpB,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,4BAA4B;AAC5B,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,sBAAsB;AACtB,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,SAAS,CAE7D;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAMrE;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAEzD;AAED,6BAA6B;AAC7B,wBAAgB,iCAAiC,IAAI,IAAI,CAKxD"}
1
+ {"version":3,"file":"process-shared-store.d.ts","sourceRoot":"","sources":["../../src/process-shared-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,kBAAkB;IAC/B,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,yCAAyC;IACzC,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAkBD,uCAAuC;AACvC,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,oBAAoB;AACpB,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,4BAA4B;AAC5B,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4DAA4D;AAC5D,wBAAgB,uBAAuB,IAAI,OAAO,CAKjD;AAED,0DAA0D;AAC1D,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,sBAAsB;AACtB,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,SAAS,CAE7D;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAMrE;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAEzD;AAED,6BAA6B;AAC7B,wBAAgB,iCAAiC,IAAI,IAAI,CAKxD"}
@@ -22,6 +22,7 @@ function ensureStore() {
22
22
  registerSeq: 0,
23
23
  runtime: undefined,
24
24
  namespace: {},
25
+ fullTeardownDone: false,
25
26
  };
26
27
  g[STORE_KEY] = created;
27
28
  return created;
@@ -46,13 +47,17 @@ export function nextRegisterSeq() {
46
47
  export function currentRegisterSeq() {
47
48
  return ensureStore().registerSeq;
48
49
  }
49
- /**
50
- * 判断 cleanup 时是否已被更新的 register 接管:
51
- * 只要本次 register 之后出现过任何一次更新的 register(新模块 re-import 或旧模块被
52
- * 其它 registry 复用重注册均会推进 registerSeq)→ 视为接管,保留跨代存活连接。
53
- */
54
- export function isTakeover(myRegisterSeq) {
55
- return ensureStore().registerSeq > myRegisterSeq;
50
+ /** 全量 teardown(gateway_stop)幂等闸门:首次调用返回 true,其后返回 false。 */
51
+ export function requestFullTeardownOnce() {
52
+ const store = ensureStore();
53
+ if (store.fullTeardownDone)
54
+ return false;
55
+ store.fullTeardownDone = true;
56
+ return true;
57
+ }
58
+ /** 出现新的 register() 时复位 teardown 闸门(允许下次停机再次 teardown)。 */
59
+ export function resetFullTeardownGate() {
60
+ ensureStore().fullTeardownDone = false;
56
61
  }
57
62
  /** register() 时写入最新 runtime(连接派发按需现取)。 */
58
63
  export function setSharedRuntime(rt) {
@@ -1 +1 @@
1
- {"version":3,"file":"process-shared-store.js","sourceRoot":"","sources":["../../src/process-shared-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAczD,SAAS,WAAW;IAChB,MAAM,CAAC,GAAG,UAA0C,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,SAAS,CAAuB,CAAC;IAC9C,CAAC;IACD,MAAM,OAAO,GAAuB;QAChC,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,EAAE;KAChB,CAAC;IACF,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,eAAe;IAC3B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,EAAE,CAAC,WAAW,CAAC;AACrC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,eAAe;IAC3B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,EAAE,CAAC,WAAW,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,aAAqB;IAC5C,OAAO,WAAW,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC;AACrD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,gBAAgB,CAAC,EAAW;IACxC,WAAW,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,gBAAgB;IAC5B,OAAO,WAAW,EAAE,CAAC,OAAwB,CAAC;AAClD,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAI,GAAW,EAAE,OAAgB;IAC9D,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,SAAS,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1B,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,CAAM,CAAC;AACxB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAO,GAAW;IAC1C,OAAO,iBAAiB,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAQ,CAAC,CAAC;AAClE,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,iCAAiC;IAC7C,MAAM,CAAC,GAAG,UAA0C,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"process-shared-store.js","sourceRoot":"","sources":["../../src/process-shared-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAezD,SAAS,WAAW;IAChB,MAAM,CAAC,GAAG,UAA0C,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,SAAS,CAAuB,CAAC;IAC9C,CAAC;IACD,MAAM,OAAO,GAAuB;QAChC,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,KAAK;KAC1B,CAAC;IACF,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,eAAe;IAC3B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,EAAE,CAAC,WAAW,CAAC;AACrC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,eAAe;IAC3B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,EAAE,CAAC,WAAW,CAAC;AACrC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,uBAAuB;IACnC,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACzC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,qBAAqB;IACjC,WAAW,EAAE,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC3C,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,gBAAgB,CAAC,EAAW;IACxC,WAAW,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,gBAAgB;IAC5B,OAAO,WAAW,EAAE,CAAC,OAAwB,CAAC;AAClD,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAI,GAAW,EAAE,OAAgB;IAC9D,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,SAAS,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1B,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,CAAM,CAAC;AACxB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAO,GAAW;IAC1C,OAAO,iBAAiB,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAQ,CAAC,CAAC;AAClE,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,iCAAiC;IAC7C,MAAM,CAAC,GAAG,UAA0C,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;AACL,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { beforeEach, describe, it } from "node:test";
3
- import { __resetProcessSharedStoreForTests, currentModuleEpoch, currentRegisterSeq, getOrCreateShared, isTakeover, nextModuleEpoch, nextRegisterSeq, } from "./process-shared-store.js";
3
+ import { __resetProcessSharedStoreForTests, currentModuleEpoch, currentRegisterSeq, getOrCreateShared, getSharedMap, nextModuleEpoch, nextRegisterSeq, requestFullTeardownOnce, resetFullTeardownGate, } from "./process-shared-store.js";
4
4
  beforeEach(() => {
5
5
  __resetProcessSharedStoreForTests();
6
6
  });
7
7
  describe("process-shared-store: module epoch / register seq", () => {
8
- it("moduleEpoch and registerSeq are monotonic per claim", () => {
8
+ it("moduleEpoch and registerSeq are monotonic per claim (observability only)", () => {
9
9
  assert.equal(nextModuleEpoch(), 1);
10
10
  assert.equal(nextModuleEpoch(), 2);
11
11
  assert.equal(currentModuleEpoch(), 2);
@@ -13,6 +13,13 @@ describe("process-shared-store: module epoch / register seq", () => {
13
13
  assert.equal(nextRegisterSeq(), 2);
14
14
  assert.equal(currentRegisterSeq(), 2);
15
15
  });
16
+ it("registerSeq is NOT used to decide teardown (must never gate stopAll on 'no later register')", () => {
17
+ // Registry 代际交替可能在批量 register 的尾端触发 cleanup,而无更晚 register;
18
+ // 该情形绝不能导出「全量 teardown」结论。这里验证 registerSeq 仅单调计数。
19
+ const last = nextRegisterSeq();
20
+ nextRegisterSeq();
21
+ assert.ok(currentRegisterSeq() > last);
22
+ });
16
23
  });
17
24
  describe("process-shared-store: cross-module singleton via getOrCreateShared", () => {
18
25
  it("getOrCreateShared returns the same instance for the same key", () => {
@@ -20,33 +27,34 @@ describe("process-shared-store: cross-module singleton via getOrCreateShared", (
20
27
  const b = getOrCreateShared("x", () => new Map());
21
28
  assert.equal(a, b);
22
29
  });
30
+ it("getSharedMap returns the same map for the same key (old/new module read/write one copy)", () => {
31
+ const a = getSharedMap("shared-map");
32
+ const b = getSharedMap("shared-map");
33
+ assert.equal(a, b);
34
+ a.set("k", 1);
35
+ assert.equal(b.get("k"), 1);
36
+ });
23
37
  it("distinct keys produce distinct instances", () => {
24
38
  const a = getOrCreateShared("k1", () => new Map());
25
39
  const b = getOrCreateShared("k2", () => new Map());
26
40
  assert.notEqual(a, b);
27
41
  });
28
42
  });
29
- describe("process-shared-store: takeover semantics for reload cleanup", () => {
30
- it("no later register not takeover (full dispose)", () => {
31
- const my = nextRegisterSeq();
32
- assert.equal(currentRegisterSeq(), my);
33
- assert.equal(isTakeover(my), false);
34
- });
35
- it("a later register (module re-import / reuse) takeover", () => {
36
- const oldGen = nextRegisterSeq();
37
- assert.equal(isTakeover(oldGen), false);
38
- const newGen = nextRegisterSeq();
39
- assert.ok(newGen > oldGen);
40
- assert.equal(isTakeover(oldGen), true);
41
- assert.equal(isTakeover(newGen), false);
42
- });
43
- it("takeover is monotonic along a reload chain", () => {
44
- const g0 = nextRegisterSeq();
45
- const g1 = nextRegisterSeq();
46
- const g2 = nextRegisterSeq();
47
- assert.equal(isTakeover(g0), true);
48
- assert.equal(isTakeover(g1), true);
49
- assert.equal(isTakeover(g2), false);
43
+ describe("process-shared-store: full teardown once-gate (gateway_stop)", () => {
44
+ it("requestFullTeardownOnce returns true only once until reset", () => {
45
+ assert.equal(requestFullTeardownOnce(), true);
46
+ assert.equal(requestFullTeardownOnce(), false);
47
+ assert.equal(requestFullTeardownOnce(), false);
48
+ });
49
+ it("a new register resets the gate so a later stop can teardown again", () => {
50
+ assert.equal(requestFullTeardownOnce(), true);
51
+ resetFullTeardownGate();
52
+ assert.equal(requestFullTeardownOnce(), true);
53
+ });
54
+ it("repeated gateway_stop handlers (one per register) collapse to a single teardown", () => {
55
+ const handlers = [requestFullTeardownOnce, requestFullTeardownOnce, requestFullTeardownOnce];
56
+ const results = handlers.map((h) => h());
57
+ assert.deepEqual(results, [true, false, false]);
50
58
  });
51
59
  });
52
60
  //# sourceMappingURL=process-shared-store.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-shared-store.test.js","sourceRoot":"","sources":["../../src/process-shared-store.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-shared-store.test.js","sourceRoot":"","sources":["../../src/process-shared-store.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-exec-env-hook.d.ts","sourceRoot":"","sources":["../../src/register-exec-env-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAKnF,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAM/E,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKxE;AAwBD,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM9E;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAa9F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAiDhE;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAqE1E"}
1
+ {"version":3,"file":"register-exec-env-hook.d.ts","sourceRoot":"","sources":["../../src/register-exec-env-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAUnF,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAyI/E,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKxE;AA0CD,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkB9E;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAkB9F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAgDhE;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAqE1E"}
@@ -8,13 +8,116 @@
8
8
  * event.params.env(优先级低于 resolve_exec_env 的 pluginEnv,但本插件
9
9
  * 不注册 resolve_exec_env,因此 params.env 即最终生效值)。不碰 process.env。
10
10
  */
11
+ import { createHash } from "node:crypto";
11
12
  import { getXgImConfig } from "./channel-config.js";
12
- import { getSessionUserContext, isRecord, resolveEnvForSession } from "./session-env-store.js";
13
+ import { getLinkedParentSessionKey, getSessionEnv, getSessionUserContext, isRecord, } from "./session-env-store.js";
13
14
  import { bindCronAppKey as persistCronBinding, getCronAppKeyBinding as readCronBinding } from "./cron-appkey-binding-store.js";
14
15
  export const XG_OPENAPI_BASE_URL = "XG_OPENAPI_BASE_URL";
15
- // OpenClaw job ids are UUID-like, but some released versions emit an
16
- // 11-character final segment. Keep the shape strict while accepting both.
16
+ // UUID matching is retained only as a fallback for unstructured CLI text.
17
+ // Structured result fields accept any non-empty job id.
17
18
  const CRON_JOB_ID_PATTERN = /\b[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{8,16}\b/i;
19
+ const APPKEY_MAX_PARENT_DEPTH = 8;
20
+ function parseAgentIdFromSessionKey(sessionKey) {
21
+ if (!sessionKey?.startsWith("agent:"))
22
+ return undefined;
23
+ const rest = sessionKey.slice("agent:".length);
24
+ const end = rest.indexOf(":");
25
+ return (end > 0 ? rest.slice(0, end) : rest).trim() || undefined;
26
+ }
27
+ function appKeyFingerprint(appKey) {
28
+ if (!appKey)
29
+ return undefined;
30
+ return createHash("sha256").update(appKey).digest("hex").slice(0, 12);
31
+ }
32
+ function validAppKey(value) {
33
+ return typeof value === "string" && value.trim().length > 0 && value.length <= 256 && !/[\0\r\n]/.test(value);
34
+ }
35
+ function parentAgentMatches(parentSessionKey, agentId) {
36
+ if (!agentId)
37
+ return true;
38
+ const parentAgentId = parseAgentIdFromSessionKey(parentSessionKey);
39
+ // An opaque/legacy parent key is not evidence of a cross-agent link.
40
+ // Reject only when both sides are known and explicitly different.
41
+ return !parentAgentId || parentAgentId === agentId;
42
+ }
43
+ /**
44
+ * Resolve the AppKey from the current Session and OpenClaw's persisted parent
45
+ * metadata. The in-memory child link is only a compatibility fallback for
46
+ * older hosts/tests; authentication never depends on subagent_spawned.
47
+ */
48
+ function resolveAppKeyForSession(api, sessionKey, agentIdHint) {
49
+ if (!sessionKey)
50
+ return { source: "none", reason: "SESSION_KEY_MISSING" };
51
+ const agentId = agentIdHint?.trim() || parseAgentIdFromSessionKey(sessionKey);
52
+ const sessionAgentId = parseAgentIdFromSessionKey(sessionKey);
53
+ if (agentIdHint && sessionAgentId && sessionAgentId !== agentIdHint.trim()) {
54
+ return { source: "none", sessionKey, agentId, reason: "SESSION_AGENT_MISMATCH" };
55
+ }
56
+ const getEntry = (key) => {
57
+ try {
58
+ const runtime = api.runtime;
59
+ const sessionApi = runtime.agent?.session;
60
+ if (!sessionApi?.getSessionEntry)
61
+ return undefined;
62
+ const cfg = api.runtime.config.current();
63
+ const storePath = sessionApi.resolveStorePath?.(cfg.session?.store, agentId ? { agentId } : undefined);
64
+ return sessionApi.getSessionEntry({ sessionKey: key, ...(agentId ? { agentId } : {}), ...(storePath ? { storePath } : {}) });
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ };
70
+ let currentKey = sessionKey;
71
+ const visited = new Set();
72
+ let sawEntryRead = false;
73
+ let cronLineageSeen = false;
74
+ for (let depth = 0; depth <= APPKEY_MAX_PARENT_DEPTH && currentKey; depth += 1) {
75
+ if (visited.has(currentKey)) {
76
+ return { source: "none", sessionKey, agentId, reason: "PARENT_CHAIN_CYCLE" };
77
+ }
78
+ visited.add(currentKey);
79
+ const cron = parseCronSessionKey(currentKey);
80
+ if (cron) {
81
+ if (!agentId || cron.agentId === agentId) {
82
+ cronLineageSeen = true;
83
+ const binding = readCronBinding(cron.agentId, cron.jobId);
84
+ if (binding?.appKey && validAppKey(binding.appKey)) {
85
+ return {
86
+ appKey: binding.appKey,
87
+ source: "cron",
88
+ sessionKey,
89
+ agentId: cron.agentId,
90
+ jobId: cron.jobId,
91
+ parentSessionKey: depth > 0 ? currentKey : undefined,
92
+ };
93
+ }
94
+ }
95
+ }
96
+ // Once a Cron Session is in the lineage, never fall through to an
97
+ // ordinary IM parent, which could carry a stale user AppKey.
98
+ if (!cronLineageSeen) {
99
+ const ownEnv = getSessionEnv(currentKey);
100
+ const ownAppKey = ownEnv?.XG_OPENAPI_APP_KEY;
101
+ if (validAppKey(ownAppKey)) {
102
+ return { appKey: ownAppKey, source: depth === 0 ? "own" : "parent", sessionKey, agentId, parentSessionKey: depth > 0 ? currentKey : undefined };
103
+ }
104
+ }
105
+ const entry = getEntry(currentKey);
106
+ if (entry)
107
+ sawEntryRead = true;
108
+ const metadataParent = entry?.parentSessionKey || entry?.spawnedBy;
109
+ const fallbackParent = getLinkedParentSessionKey(currentKey);
110
+ const parentKey = metadataParent || fallbackParent;
111
+ if (!parentKey) {
112
+ return { source: "none", sessionKey, agentId, reason: sawEntryRead ? "AUTH_CONTEXT_MISSING" : "SESSION_ENTRY_MISSING" };
113
+ }
114
+ if (!parentAgentMatches(parentKey, agentId)) {
115
+ return { source: "none", sessionKey, agentId, parentSessionKey: parentKey, reason: "PARENT_AGENT_MISMATCH" };
116
+ }
117
+ currentKey = parentKey;
118
+ }
119
+ return { source: "none", sessionKey, agentId, reason: "PARENT_CHAIN_LIMIT" };
120
+ }
18
121
  /** Return true only for the supported CLI/API forms that create a Cron job. */
19
122
  export function isCronCreateCommand(command) {
20
123
  if (!command)
@@ -23,6 +126,27 @@ export function isCronCreateCommand(command) {
23
126
  return /\bopenclaw(?:\.cmd)?\s+cron\s+(?:add|create)\b/.test(normalized) ||
24
127
  /\bopenclaw(?:\.cmd)?\s+gateway\s+call\s+cron\.create\b/.test(normalized);
25
128
  }
129
+ function isUsableCronJobId(value) {
130
+ return typeof value === "string" && value.trim().length > 0 && value.length <= 256 && !/[\0\r\n]/.test(value);
131
+ }
132
+ function collectStructuredCronJobIds(value, out = [], seen = new Set()) {
133
+ if (value == null || seen.has(value) || typeof value !== "object")
134
+ return out;
135
+ seen.add(value);
136
+ if (Array.isArray(value)) {
137
+ for (const item of value)
138
+ collectStructuredCronJobIds(item, out, seen);
139
+ }
140
+ else {
141
+ for (const [key, item] of Object.entries(value)) {
142
+ if ((key === "id" || key === "jobId") && isUsableCronJobId(item))
143
+ out.push(item.trim());
144
+ else
145
+ collectStructuredCronJobIds(item, out, seen);
146
+ }
147
+ }
148
+ return out;
149
+ }
26
150
  function collectText(value, out = [], seen = new Set()) {
27
151
  if (value == null || seen.has(value))
28
152
  return out;
@@ -52,7 +176,21 @@ function collectText(value, out = [], seen = new Set()) {
52
176
  }
53
177
  /** Extract the authoritative UUID printed by `openclaw cron add --json`. */
54
178
  export function extractCronJobIdFromResult(result) {
179
+ // Prefer authoritative structured fields and accept non-UUID ids.
180
+ const structured = collectStructuredCronJobIds(result);
181
+ if (structured.length > 0)
182
+ return structured[0];
55
183
  for (const text of collectText(result)) {
184
+ // CLI adapters commonly wrap JSON in a text field.
185
+ try {
186
+ const parsed = JSON.parse(text);
187
+ const parsedId = collectStructuredCronJobIds(parsed)[0];
188
+ if (parsedId)
189
+ return parsedId;
190
+ }
191
+ catch {
192
+ // Fall through to the UUID-only text fallback below.
193
+ }
56
194
  const match = text.match(CRON_JOB_ID_PATTERN);
57
195
  if (match)
58
196
  return match[0];
@@ -69,9 +207,15 @@ export function parseCronSessionKey(sessionKey) {
69
207
  return undefined;
70
208
  const agentId = sessionKey.slice("agent:".length, markerIndex);
71
209
  const rest = sessionKey.slice(markerIndex + marker.length);
210
+ if (!agentId || !rest)
211
+ return undefined;
72
212
  const runMarker = ":run:";
73
213
  const runIndex = rest.indexOf(runMarker);
74
- if (!agentId || runIndex <= 0 || runIndex + runMarker.length >= rest.length)
214
+ if (runIndex < 0) {
215
+ // Isolated Cron sessions are stable per job and have no run segment.
216
+ return { agentId, jobId: rest, runId: "" };
217
+ }
218
+ if (runIndex <= 0 || runIndex + runMarker.length >= rest.length)
75
219
  return undefined;
76
220
  const jobId = rest.slice(0, runIndex);
77
221
  const runId = rest.slice(runIndex + runMarker.length);
@@ -92,37 +236,34 @@ export function registerExecEnvHook(api) {
92
236
  api.on("before_tool_call", (event, ctx) => {
93
237
  if (event.toolName !== "exec")
94
238
  return;
95
- const cron = parseCronSessionKey(ctx.sessionKey);
96
- const cronBinding = cron ? readCronBinding(cron.agentId, cron.jobId) : undefined;
97
- const env = cron
98
- ? {}
99
- : { ...resolveEnvForSession(ctx.sessionKey) };
100
- if (cronBinding)
101
- env.XG_OPENAPI_APP_KEY = cronBinding.appKey;
239
+ let resolution;
240
+ try {
241
+ resolution = resolveAppKeyForSession(api, ctx.sessionKey, ctx.agentId);
242
+ }
243
+ catch (err) {
244
+ resolution = { source: "none", sessionKey: ctx.sessionKey, agentId: ctx.agentId, reason: `RESOLVE_ERROR:${String(err)}` };
245
+ }
102
246
  const baseUrl = resolveBaseUrl();
103
- if (baseUrl) {
104
- env[XG_OPENAPI_BASE_URL] = baseUrl;
105
- }
106
- const existing = isRecord(event.params.env) ? event.params.env : {};
107
- if (cron && !cronBinding) {
108
- const hadAppKey = Object.prototype.hasOwnProperty.call(existing, "XG_OPENAPI_APP_KEY");
109
- const sanitizedExisting = { ...existing };
110
- delete sanitizedExisting.XG_OPENAPI_APP_KEY;
111
- if (!hadAppKey && Object.keys(sanitizedExisting).length === 0 && !baseUrl)
112
- return;
113
- return {
114
- params: {
115
- ...event.params,
116
- env: { ...sanitizedExisting, ...(baseUrl ? { [XG_OPENAPI_BASE_URL]: baseUrl } : {}) },
117
- },
118
- };
119
- }
120
- if (Object.keys(env).length === 0)
247
+ const existing = isRecord(event.params.env) ? { ...event.params.env } : {};
248
+ const hadAppKey = Object.prototype.hasOwnProperty.call(existing, "XG_OPENAPI_APP_KEY");
249
+ delete existing.XG_OPENAPI_APP_KEY;
250
+ if (resolution.appKey)
251
+ existing.XG_OPENAPI_APP_KEY = resolution.appKey;
252
+ if (baseUrl)
253
+ existing[XG_OPENAPI_BASE_URL] = baseUrl;
254
+ const changed = hadAppKey || Boolean(resolution.appKey) || Boolean(baseUrl);
255
+ const source = resolution.source;
256
+ const fp = appKeyFingerprint(resolution.appKey);
257
+ console.debug(`[xg_cwork_im] [appkey-resolve] event=appkey-resolve sessionKey=${ctx.sessionKey ?? "(none)"} ` +
258
+ `parentSessionKey=${resolution.parentSessionKey ?? "(none)"} source=${source} ` +
259
+ `agentId=${resolution.agentId ?? ctx.agentId ?? "(none)"} jobId=${resolution.jobId ?? "(none)"} ` +
260
+ `bindingFound=${Boolean(resolution.appKey)} appKeyFingerprint=${fp ?? "(none)"} reason=${resolution.reason ?? "(none)"}`);
261
+ if (!changed)
121
262
  return;
122
263
  return {
123
264
  params: {
124
265
  ...event.params,
125
- env: { ...existing, ...env },
266
+ env: existing,
126
267
  },
127
268
  };
128
269
  }, { priority: 0 });
@@ -134,8 +275,8 @@ export function registerCronAppKeyBindingHook(api) {
134
275
  console.warn(`[xg_cwork_im] [cron-binding] missing jobId/sessionKey; binding skipped`);
135
276
  return;
136
277
  }
137
- const sessionEnv = resolveEnvForSession(sessionKey);
138
- const appKey = sessionEnv.XG_OPENAPI_APP_KEY;
278
+ const resolved = resolveAppKeyForSession(api, sessionKey, agentIdHint);
279
+ const appKey = resolved.appKey;
139
280
  if (!appKey) {
140
281
  console.warn(`[xg_cwork_im] [cron-binding] no appKey in creator session; jobId=${jobId}`);
141
282
  return;
@@ -145,7 +286,7 @@ export function registerCronAppKeyBindingHook(api) {
145
286
  console.warn(`[xg_cwork_im] [cron-binding] agent mismatch; sessionAgent=${sessionAgent} agentId=${agentIdHint} jobId=${jobId}`);
146
287
  return;
147
288
  }
148
- const agentId = agentIdHint ?? sessionAgent;
289
+ const agentId = agentIdHint?.trim() || resolved.agentId || sessionAgent;
149
290
  if (!agentId) {
150
291
  console.warn(`[xg_cwork_im] [cron-binding] missing agentId; jobId=${jobId}`);
151
292
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"register-exec-env-hook.js","sourceRoot":"","sources":["../../src/register-exec-env-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-exec-env-hook.js","sourceRoot":"","sources":["../../src/register-exec-env-hook.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,12 @@ function captureApi(cfg) {
15
15
  },
16
16
  }),
17
17
  },
18
+ agent: {
19
+ session: {
20
+ getSessionEntry: ({ sessionKey }) => cfg?.entries?.[sessionKey],
21
+ resolveStorePath: () => "test-session-store",
22
+ },
23
+ },
18
24
  },
19
25
  on: (_name, handler) => {
20
26
  registeredHandler = handler;
@@ -94,5 +100,31 @@ describe("register-exec-env-hook", () => {
94
100
  const resultParams = result.params;
95
101
  assert.deepEqual(resultParams.env, { [XG_OPENAPI_APP_KEY]: "key-a" });
96
102
  });
103
+ it("使用 OpenClaw Session 元数据解析父链,不依赖 subagent_spawned", () => {
104
+ registerExecEnvHook(captureApi({
105
+ entries: {
106
+ "agent:agent-a:child": { spawnedBy: "agent:agent-a:parent" },
107
+ "agent:agent-a:parent": { parentSessionKey: "agent:agent-a:root" },
108
+ },
109
+ }));
110
+ setSessionEnvEntry("agent:agent-a:root", XG_OPENAPI_APP_KEY, "parent-key");
111
+ const result = registeredHandler({ toolName: "exec", params: { command: "echo hi" } }, { sessionKey: "agent:agent-a:child" });
112
+ assert.deepEqual(result.params.env, { [XG_OPENAPI_APP_KEY]: "parent-key" });
113
+ });
114
+ it("无绑定时删除普通 Session 的 AI AppKey,但不阻断 exec", () => {
115
+ registerExecEnvHook(captureApi());
116
+ const result = registeredHandler({ toolName: "exec", params: { command: "echo hi", env: { XG_OPENAPI_APP_KEY: "ai-wrong", KEEP: "1" } } }, { sessionKey: "agent:agent-a:main" });
117
+ assert.deepEqual(result.params.env, { KEEP: "1" });
118
+ });
119
+ it("父 Session 属于其他 agent 时不注入 AppKey", () => {
120
+ registerExecEnvHook(captureApi({
121
+ entries: {
122
+ "agent:agent-a:child": { spawnedBy: "agent:agent-b:parent" },
123
+ },
124
+ }));
125
+ setSessionEnvEntry("agent:agent-b:parent", XG_OPENAPI_APP_KEY, "other-agent-key");
126
+ const result = registeredHandler({ toolName: "exec", params: { env: { XG_OPENAPI_APP_KEY: "ai-wrong" } } }, { sessionKey: "agent:agent-a:child", agentId: "agent-a" });
127
+ assert.deepEqual(result.params.env, {});
128
+ });
97
129
  });
98
130
  //# sourceMappingURL=register-exec-env-hook.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-exec-env-hook.test.js","sourceRoot":"","sources":["../../src/register-exec-env-hook.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-exec-env-hook.test.js","sourceRoot":"","sources":["../../src/register-exec-env-hook.test.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  * 会话级环境变量存储:按 sessionKey 保存每个会话的 exec 环境变量,
3
3
  * 供 before_tool_call 向 exec 子进程注入(多用户并发安全,不碰 process.env)。
4
4
  *
5
- * 语义:同一群内多人先后触发时按「最后触发者」覆盖写入;subagent 通过
6
- * linkChildSession 沿父子链反查父会话的 env。
5
+ * 语义:同一群内消息按当前会话写入;subagent 的权威父链由 OpenClaw
6
+ * Session 元数据提供,linkChildSession 仅保留作运行时兼容/性能回退。
7
7
  *
8
8
  * 持久化:仅持久化会话级 env(当前为 XG_OPENAPI_APP_KEY)。写入后防抖落盘到
9
9
  * stateDir/xgjktech/session-env.json,openclaw 重启后恢复;subagent 父子链是
@@ -33,6 +33,8 @@ export declare function clearSessionEnv(sessionKey: string): void;
33
33
  export declare function removeSessionEnvKey(sessionKey: string, key: string): void;
34
34
  /** 登记 subagent 子会话到父会话的关联,供 exec env 父子链反查。 */
35
35
  export declare function linkChildSession(childSessionKey: string, parentSessionKey: string): void;
36
+ /** 读取运行时登记的 child -> parent 关系;仅作为宿主父链不可用时的兼容回退。 */
37
+ export declare function getLinkedParentSessionKey(sessionKey: string | undefined): string | undefined;
36
38
  /** Record the last IM sender for optional Cron binding audit metadata. */
37
39
  export declare function setSessionUserContext(sessionKey: string, userId?: string, userName?: string): void;
38
40
  export declare function getSessionUserContext(sessionKey: string | undefined): {
@@ -1 +1 @@
1
- {"version":3,"file":"session-env-store.d.ts","sourceRoot":"","sources":["../../src/session-env-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAsDvD,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQtF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AA+GD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQhE;AAED,2BAA2B;AAC3B,wBAAgB,0BAA0B,IAAI,IAAI,CASjD;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASnF;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,SAAS,GAC1B,IAAI,CAqBN;AAED,2BAA2B;AAC3B,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAMpF;AAED,yBAAyB;AACzB,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAOxD;AAED,uBAAuB;AACvB,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAIxF;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAGlG;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAExH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc3F;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAkB7C"}
1
+ {"version":3,"file":"session-env-store.d.ts","sourceRoot":"","sources":["../../src/session-env-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAsDvD,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQtF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AA+GD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQhE;AAED,2BAA2B;AAC3B,wBAAgB,0BAA0B,IAAI,IAAI,CASjD;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASnF;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,SAAS,GAC1B,IAAI,CAqBN;AAED,2BAA2B;AAC3B,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAMpF;AAED,yBAAyB;AACzB,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAOxD;AAED,uBAAuB;AACvB,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAIxF;AAED,oDAAoD;AACpD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE5F;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAGlG;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAExH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc3F;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAkB7C"}
@@ -2,8 +2,8 @@
2
2
  * 会话级环境变量存储:按 sessionKey 保存每个会话的 exec 环境变量,
3
3
  * 供 before_tool_call 向 exec 子进程注入(多用户并发安全,不碰 process.env)。
4
4
  *
5
- * 语义:同一群内多人先后触发时按「最后触发者」覆盖写入;subagent 通过
6
- * linkChildSession 沿父子链反查父会话的 env。
5
+ * 语义:同一群内消息按当前会话写入;subagent 的权威父链由 OpenClaw
6
+ * Session 元数据提供,linkChildSession 仅保留作运行时兼容/性能回退。
7
7
  *
8
8
  * 持久化:仅持久化会话级 env(当前为 XG_OPENAPI_APP_KEY)。写入后防抖落盘到
9
9
  * stateDir/xgjktech/session-env.json,openclaw 重启后恢复;subagent 父子链是
@@ -42,7 +42,7 @@ function isValidEnvKey(key) {
42
42
  function isUsableEnvValue(value) {
43
43
  if (value.length === 0 || value.length > MAX_ENV_VALUE_LENGTH)
44
44
  return false;
45
- if (value.includes("\0"))
45
+ if (/[\0\r\n]/.test(value))
46
46
  return false;
47
47
  return true;
48
48
  }
@@ -264,6 +264,10 @@ export function linkChildSession(childSessionKey, parentSessionKey) {
264
264
  sessionChildLinks.set(childSessionKey, parentSessionKey);
265
265
  scheduleCleanup(childSessionKey);
266
266
  }
267
+ /** 读取运行时登记的 child -> parent 关系;仅作为宿主父链不可用时的兼容回退。 */
268
+ export function getLinkedParentSessionKey(sessionKey) {
269
+ return sessionKey ? sessionChildLinks.get(sessionKey) : undefined;
270
+ }
267
271
  /** Record the last IM sender for optional Cron binding audit metadata. */
268
272
  export function setSessionUserContext(sessionKey, userId, userName) {
269
273
  if (!sessionKey || (!userId && !userName))