botmux 3.12.1 → 3.13.0

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 (123) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/bot-registry.d.ts +7 -0
  3. package/dist/bot-registry.d.ts.map +1 -1
  4. package/dist/bot-registry.js +46 -13
  5. package/dist/bot-registry.js.map +1 -1
  6. package/dist/core/config-dir.d.ts +167 -0
  7. package/dist/core/config-dir.d.ts.map +1 -0
  8. package/dist/core/config-dir.js +152 -0
  9. package/dist/core/config-dir.js.map +1 -0
  10. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  11. package/dist/core/dashboard-ipc-server.js +48 -0
  12. package/dist/core/dashboard-ipc-server.js.map +1 -1
  13. package/dist/core/per-bot-env.d.ts.map +1 -1
  14. package/dist/core/per-bot-env.js +9 -0
  15. package/dist/core/per-bot-env.js.map +1 -1
  16. package/dist/core/session-discovery.d.ts.map +1 -1
  17. package/dist/core/session-discovery.js +19 -2
  18. package/dist/core/session-discovery.js.map +1 -1
  19. package/dist/core/session-manager.d.ts.map +1 -1
  20. package/dist/core/session-manager.js +44 -3
  21. package/dist/core/session-manager.js.map +1 -1
  22. package/dist/core/trigger-session.d.ts.map +1 -1
  23. package/dist/core/trigger-session.js +499 -63
  24. package/dist/core/trigger-session.js.map +1 -1
  25. package/dist/core/types.d.ts +26 -4
  26. package/dist/core/types.d.ts.map +1 -1
  27. package/dist/core/types.js.map +1 -1
  28. package/dist/core/worker-pool.d.ts +64 -0
  29. package/dist/core/worker-pool.d.ts.map +1 -1
  30. package/dist/core/worker-pool.js +301 -10
  31. package/dist/core/worker-pool.js.map +1 -1
  32. package/dist/daemon.d.ts.map +1 -1
  33. package/dist/daemon.js +13 -6
  34. package/dist/daemon.js.map +1 -1
  35. package/dist/dashboard/auth.d.ts +8 -0
  36. package/dist/dashboard/auth.d.ts.map +1 -1
  37. package/dist/dashboard/auth.js +16 -11
  38. package/dist/dashboard/auth.js.map +1 -1
  39. package/dist/dashboard/web/bot-multi-select.d.ts +33 -0
  40. package/dist/dashboard/web/bot-multi-select.d.ts.map +1 -0
  41. package/dist/dashboard/web/bot-multi-select.js +34 -0
  42. package/dist/dashboard/web/bot-multi-select.js.map +1 -0
  43. package/dist/dashboard/web/groups-page.d.ts +13 -0
  44. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  45. package/dist/dashboard/web/groups-page.js +25 -7
  46. package/dist/dashboard/web/groups-page.js.map +1 -1
  47. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  48. package/dist/dashboard/web/i18n.js +8 -4
  49. package/dist/dashboard/web/i18n.js.map +1 -1
  50. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  51. package/dist/dashboard/web/sessions-page.js +15 -23
  52. package/dist/dashboard/web/sessions-page.js.map +1 -1
  53. package/dist/dashboard/web/sessions.d.ts +13 -0
  54. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  55. package/dist/dashboard/web/sessions.js +25 -0
  56. package/dist/dashboard/web/sessions.js.map +1 -1
  57. package/dist/dashboard-web/app.js +1 -1
  58. package/dist/dashboard-web/chunks/{bot-defaults-page-HL655CNR.js → bot-defaults-page-NQJFJ45Z.js} +1 -1
  59. package/dist/dashboard-web/chunks/{chunk-BFUTTYVK.js → chunk-5QJB24I2.js} +1 -1
  60. package/dist/dashboard-web/chunks/{chunk-ELL53D62.js → chunk-6JTZJRQJ.js} +2 -2
  61. package/dist/dashboard-web/chunks/{chunk-5ZL7NLR5.js → chunk-CU4SUKK3.js} +1 -1
  62. package/dist/dashboard-web/chunks/{chunk-5PAYQ3KT.js → chunk-KEEYQ3WF.js} +1 -1
  63. package/dist/dashboard-web/chunks/chunk-WLIVBPJC.js +1 -0
  64. package/dist/dashboard-web/chunks/{connectors-page-3QQACF23.js → connectors-page-HADHZXXZ.js} +1 -1
  65. package/dist/dashboard-web/chunks/groups-page-5TYF46RS.js +8 -0
  66. package/dist/dashboard-web/chunks/{insights-page-ZZ3JEJ6L.js → insights-page-EVGGJI5L.js} +1 -1
  67. package/dist/dashboard-web/chunks/{monitor-room-ROJ5GZ4N.js → monitor-room-HRGR2ENP.js} +1 -1
  68. package/dist/dashboard-web/chunks/{monitoring-page-IATV7KJF.js → monitoring-page-LBU7TTTW.js} +1 -1
  69. package/dist/dashboard-web/chunks/{office-page-TYO5OIIT.js → office-page-DF6RRBMN.js} +1 -1
  70. package/dist/dashboard-web/chunks/{overview-page-VJUULZF2.js → overview-page-ZB6QH2EX.js} +1 -1
  71. package/dist/dashboard-web/chunks/{roles-page-7RJJKZGK.js → roles-page-ZBZGHIIF.js} +1 -1
  72. package/dist/dashboard-web/chunks/{schedules-page-JTEJ5IXW.js → schedules-page-NQVQC3QY.js} +1 -1
  73. package/dist/dashboard-web/chunks/sessions-page-DXBCDWCS.js +8 -0
  74. package/dist/dashboard-web/chunks/{settings-page-7CTTFBRS.js → settings-page-E7NN4NVQ.js} +1 -1
  75. package/dist/dashboard-web/chunks/{skills-page-57NZECJ3.js → skills-page-2QAVB2SA.js} +1 -1
  76. package/dist/dashboard-web/chunks/{team-federation-page-6YYIMJG3.js → team-federation-page-VGWL53AE.js} +1 -1
  77. package/dist/dashboard-web/chunks/{v3-page-ZGKBSBK3.js → v3-page-AY35LKCX.js} +1 -1
  78. package/dist/dashboard-web/chunks/{whiteboards-page-AACJF6DB.js → whiteboards-page-BNWUU4KG.js} +1 -1
  79. package/dist/dashboard-web/style.css +61 -53
  80. package/dist/features/codex-notifier/internal-turn.d.ts +1 -2
  81. package/dist/features/codex-notifier/internal-turn.d.ts.map +1 -1
  82. package/dist/features/codex-notifier/internal-turn.js +1 -13
  83. package/dist/features/codex-notifier/internal-turn.js.map +1 -1
  84. package/dist/i18n/en.js +2 -2
  85. package/dist/i18n/en.js.map +1 -1
  86. package/dist/i18n/zh.js +2 -2
  87. package/dist/i18n/zh.js.map +1 -1
  88. package/dist/platform/secure-host-file.d.ts +63 -0
  89. package/dist/platform/secure-host-file.d.ts.map +1 -1
  90. package/dist/platform/secure-host-file.js +90 -25
  91. package/dist/platform/secure-host-file.js.map +1 -1
  92. package/dist/services/async-trigger-store.d.ts +24 -4
  93. package/dist/services/async-trigger-store.d.ts.map +1 -1
  94. package/dist/services/async-trigger-store.js +81 -19
  95. package/dist/services/async-trigger-store.js.map +1 -1
  96. package/dist/services/codex-session-meta.d.ts +4 -0
  97. package/dist/services/codex-session-meta.d.ts.map +1 -0
  98. package/dist/services/codex-session-meta.js +15 -0
  99. package/dist/services/codex-session-meta.js.map +1 -0
  100. package/dist/services/idempotency-store.d.ts +18 -3
  101. package/dist/services/idempotency-store.d.ts.map +1 -1
  102. package/dist/services/idempotency-store.js +30 -12
  103. package/dist/services/idempotency-store.js.map +1 -1
  104. package/dist/services/traex-transcript.d.ts +7 -5
  105. package/dist/services/traex-transcript.d.ts.map +1 -1
  106. package/dist/services/traex-transcript.js +139 -33
  107. package/dist/services/traex-transcript.js.map +1 -1
  108. package/dist/services/trigger-types.d.ts +14 -1
  109. package/dist/services/trigger-types.d.ts.map +1 -1
  110. package/dist/services/trigger-types.js +35 -0
  111. package/dist/services/trigger-types.js.map +1 -1
  112. package/dist/types.d.ts +2 -0
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/utils/child-env.d.ts +1 -1
  115. package/dist/utils/child-env.d.ts.map +1 -1
  116. package/dist/utils/child-env.js +18 -0
  117. package/dist/utils/child-env.js.map +1 -1
  118. package/dist/worker.js +35 -2
  119. package/dist/worker.js.map +1 -1
  120. package/package.json +1 -1
  121. package/dist/dashboard-web/chunks/chunk-6ALR252E.js +0 -1
  122. package/dist/dashboard-web/chunks/groups-page-SDZMJ7UV.js +0 -8
  123. package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"async-trigger-store.js","sourceRoot":"","sources":["../../src/services/async-trigger-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async-trigger-store.js","sourceRoot":"","sources":["../../src/services/async-trigger-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** `session_meta.source` is the protocol-level origin. Internal/subagent
2
+ * sessions are runtime helpers rather than the user's visible top-level task. */
3
+ export declare function isInternalCodexSessionMeta(meta: unknown): boolean;
4
+ //# sourceMappingURL=codex-session-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-session-meta.d.ts","sourceRoot":"","sources":["../../src/services/codex-session-meta.ts"],"names":[],"mappings":"AAAA;iFACiF;AACjF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAQjE"}
@@ -0,0 +1,15 @@
1
+ /** `session_meta.source` is the protocol-level origin. Internal/subagent
2
+ * sessions are runtime helpers rather than the user's visible top-level task. */
3
+ export function isInternalCodexSessionMeta(meta) {
4
+ if (!meta || typeof meta !== 'object' || Array.isArray(meta))
5
+ return false;
6
+ const payload = meta;
7
+ if (typeof payload.thread_source === 'string' && payload.thread_source !== 'user')
8
+ return true;
9
+ const source = payload.source;
10
+ if (!source || typeof source !== 'object' || Array.isArray(source))
11
+ return false;
12
+ const sourceRecord = source;
13
+ return sourceRecord.internal !== undefined || sourceRecord.subagent !== undefined;
14
+ }
15
+ //# sourceMappingURL=codex-session-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-session-meta.js","sourceRoot":"","sources":["../../src/services/codex-session-meta.ts"],"names":[],"mappings":"AAAA;iFACiF;AACjF,MAAM,UAAU,0BAA0B,CAAC,IAAa;IACtD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,MAAM,OAAO,GAAG,IAA+B,CAAC;IAChD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACjF,MAAM,YAAY,GAAG,MAAiC,CAAC;IACvD,OAAO,YAAY,CAAC,QAAQ,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAC;AACpF,CAAC"}
@@ -1,4 +1,14 @@
1
1
  export type IdempotencyState = 'reserved' | 'attempting';
2
+ /** Which dispatch seam a lease governs. `fresh` = a fresh async-virtual session
3
+ * (one lease → one throwaway session, #776). `turn` = a follow-up turn on an
4
+ * EXISTING, potentially long-lived SHARED session (#71). The kind is an
5
+ * UNFORGEABLE domain separator baked into the on-disk key derivation, NOT a
6
+ * user-supplied string: a caller cannot craft a `fresh` key that collides with
7
+ * a `turn` lease (or vice-versa) because the kind participates in the file hash.
8
+ * Reconcile also reads it to avoid fresh-only teardown (closeSession) on a turn
9
+ * lease whose session is shared and must survive. Absent on disk = legacy
10
+ * pre-#71 record → treated as `fresh` (the only kind that existed then). */
11
+ export type IdempotencyKind = 'fresh' | 'turn';
2
12
  export interface IdempotencyRecord {
3
13
  ownerLarkAppId: string;
4
14
  sessionId: string;
@@ -9,6 +19,9 @@ export interface IdempotencyRecord {
9
19
  state: IdempotencyState;
10
20
  createdAt: number;
11
21
  updatedAt: number;
22
+ /** Dispatch seam this lease governs (see IdempotencyKind). Omitted on legacy
23
+ * pre-#71 records → read as 'fresh'. */
24
+ kind?: IdempotencyKind;
12
25
  }
13
26
  export type ClaimResult = {
14
27
  kind: 'won';
@@ -24,7 +37,7 @@ export declare class IdempotencyConflictError extends Error {
24
37
  /** Non-locking read for the pre-check in trigger-session (a fast reject before
25
38
  * creating a session). Owner mismatch → undefined. Corrupt → THROWS. The
26
39
  * authoritative decision is always re-taken under the lock in claim/takeover. */
27
- export declare function lookup(ownerLarkAppId: string, key: string): IdempotencyRecord | undefined;
40
+ export declare function lookup(ownerLarkAppId: string, key: string, kind?: IdempotencyKind): IdempotencyRecord | undefined;
28
41
  /**
29
42
  * Claim (owner, key) for a fresh `reserved` lease, or return the existing one —
30
43
  * all inside the per-key lock (read → decide → durable write is atomic wrt other
@@ -38,6 +51,7 @@ export declare function claim(input: {
38
51
  ownerBootId: string;
39
52
  key: string;
40
53
  now: number;
54
+ kind?: IdempotencyKind;
41
55
  }): ClaimResult;
42
56
  /**
43
57
  * Take over an OLDER-boot `reserved` lease with a fresh reserved lease (new
@@ -61,13 +75,14 @@ export declare function takeover(input: {
61
75
  requestHash: string;
62
76
  ownerBootId: string;
63
77
  now: number;
78
+ kind?: IdempotencyKind;
64
79
  }): ClaimResult;
65
80
  /** CAS a record to a new state under the lock. Verifies full identity + revision
66
81
  * before writing (rejects a stale/foreign writer). Returns the written record. */
67
82
  export declare function transition(ownerLarkAppId: string, key: string, from: IdempotencyRecord, patch: {
68
83
  state: IdempotencyState;
69
84
  now: number;
70
- }): IdempotencyRecord;
85
+ }, kind?: IdempotencyKind): IdempotencyRecord;
71
86
  /** Compare-and-remove: delete the lease ONLY if it still matches `expect`
72
87
  * (identity + revision + state) under the lock. Used to release a `reserved`
73
88
  * lease we created but abandoned before dispatch. Returns a discriminated
@@ -77,7 +92,7 @@ export declare function transition(ownerLarkAppId: string, key: string, from: Id
77
92
  * delete) instead of swallowing both (finding #1). A lock-internal re-read
78
93
  * corruption or an ambiguous unlink error (EIO/EROFS/…) THROWS — the caller
79
94
  * must be able to trust that `removed` means the lease is truly released. */
80
- export declare function compareAndRemove(ownerLarkAppId: string, key: string, expect: IdempotencyRecord): RemoveByPathResult;
95
+ export declare function compareAndRemove(ownerLarkAppId: string, key: string, expect: IdempotencyRecord, kind?: IdempotencyKind): RemoveByPathResult;
81
96
  /** Enumerate the leases owned by a SINGLE bot (boot reconcile is owner-scoped).
82
97
  * Reads only `idempotency/<sha256(owner)>/` — a foreign bot's corrupt lease
83
98
  * lives under a different subdir and is never even opened here, so it can't
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency-store.d.ts","sourceRoot":"","sources":["../../src/services/idempotency-store.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEpD,qBAAa,wBAAyB,SAAQ,KAAK;aACrB,QAAQ,EAAE,iBAAiB;gBAA3B,QAAQ,EAAE,iBAAiB;CAIxD;AA2ED;;kFAEkF;AAClF,wBAAgB,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAKzF;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAC3B,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAC7D,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CACpE,GAAG,WAAW,CAiBd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAC9B,cAAc,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAC/D,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAC7F,GAAG,WAAW,CAmCd;AAED;mFACmF;AACnF,wBAAgB,UAAU,CACxB,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAC5D,KAAK,EAAE;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC9C,iBAAiB,CAYnB;AAWD;;;;;;;;8EAQ8E;AAC9E,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,CAEnH;AAED;;;;;;8DAM8D;AAC9D,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAkBpD;AAED;;;;;;;;;;;;2CAY2C;AAC3C,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3E;;;;;;;;;;;;;;;;qDAgBqD;AACrD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,CAahG"}
1
+ {"version":3,"file":"idempotency-store.d.ts","sourceRoot":"","sources":["../../src/services/idempotency-store.ts"],"names":[],"mappings":"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"}
@@ -56,10 +56,23 @@ function ownerDir(ownerLarkAppId) {
56
56
  const ownerHash = createHash('sha256').update(ownerLarkAppId).digest('hex');
57
57
  return join(baseDir(), ownerHash);
58
58
  }
59
- /** Filename = <ownerDir>/sha256(owner \0 key).json. The NUL-separated key digest
60
- * keeps the same collision-free filename; the owner subdir gives partitioning. */
61
- function fileFor(ownerLarkAppId, key) {
62
- const digest = createHash('sha256').update(ownerLarkAppId).update('\0').update(key).digest('hex');
59
+ /** Filename = <ownerDir>/sha256(owner \0 [kind \0] key).json. The kind participates
60
+ * in the digest as an UNFORGEABLE domain separator: a `fresh` key and a `turn`
61
+ * key with the same string land on DIFFERENT files, so a caller cannot forge a
62
+ * fresh `idempotencyKey` that collides with a `turn:` lease (codex #818 P1). The
63
+ * NUL separators keep the digest collision-free.
64
+ *
65
+ * BACKWARD COMPAT: `fresh` reproduces the EXACT pre-#71 digest `sha256(owner \0
66
+ * key)` (no kind segment at all), so leases written by older builds keep their
67
+ * path across upgrade. Only the new `turn` kind inserts a `kind \0` segment. A
68
+ * user-supplied fresh key can't reach the turn keyspace because it never gets
69
+ * the `turn\0` prefix injected here — the kind is a trusted call-site argument,
70
+ * not derived from the key string. */
71
+ function fileFor(ownerLarkAppId, key, kind = 'fresh') {
72
+ const h = createHash('sha256').update(ownerLarkAppId).update('\0');
73
+ if (kind !== 'fresh')
74
+ h.update(kind).update('\0');
75
+ const digest = h.update(key).digest('hex');
63
76
  return join(ownerDir(ownerLarkAppId), `${digest}.json`);
64
77
  }
65
78
  function ensureDirFor(fp) {
@@ -109,8 +122,8 @@ function sameIdentity(a, b) {
109
122
  /** Non-locking read for the pre-check in trigger-session (a fast reject before
110
123
  * creating a session). Owner mismatch → undefined. Corrupt → THROWS. The
111
124
  * authoritative decision is always re-taken under the lock in claim/takeover. */
112
- export function lookup(ownerLarkAppId, key) {
113
- const rec = readRecord(fileFor(ownerLarkAppId, key));
125
+ export function lookup(ownerLarkAppId, key, kind = 'fresh') {
126
+ const rec = readRecord(fileFor(ownerLarkAppId, key, kind));
114
127
  if (!rec)
115
128
  return undefined;
116
129
  if (rec.ownerLarkAppId !== ownerLarkAppId)
@@ -123,7 +136,8 @@ export function lookup(ownerLarkAppId, key) {
123
136
  * daemons/boots). Throws on corrupt/IO (fail-closed) and on payload conflict.
124
137
  */
125
138
  export function claim(input) {
126
- const fp = fileFor(input.ownerLarkAppId, input.key);
139
+ const kind = input.kind ?? 'fresh';
140
+ const fp = fileFor(input.ownerLarkAppId, input.key, kind);
127
141
  return withKeyLock(fp, () => {
128
142
  const existing = readRecord(fp);
129
143
  if (existing) {
@@ -137,6 +151,7 @@ export function claim(input) {
137
151
  ownerLarkAppId: input.ownerLarkAppId, sessionId: input.sessionId, triggerId: input.triggerId,
138
152
  requestHash: input.requestHash, ownerBootId: input.ownerBootId,
139
153
  revision: 1, state: 'reserved', createdAt: input.now, updatedAt: input.now,
154
+ ...(kind !== 'fresh' ? { kind } : {}),
140
155
  };
141
156
  writeRecord(fp, rec);
142
157
  return { kind: 'won', record: rec };
@@ -156,7 +171,8 @@ export function claim(input) {
156
171
  * - present, different payload → conflict.
157
172
  */
158
173
  export function takeover(input) {
159
- const fp = fileFor(input.ownerLarkAppId, input.key);
174
+ const kind = input.kind ?? 'fresh';
175
+ const fp = fileFor(input.ownerLarkAppId, input.key, kind);
160
176
  return withKeyLock(fp, () => {
161
177
  const current = readRecord(fp);
162
178
  if (!current) {
@@ -164,6 +180,7 @@ export function takeover(input) {
164
180
  ownerLarkAppId: input.ownerLarkAppId, sessionId: input.sessionId, triggerId: input.triggerId,
165
181
  requestHash: input.requestHash, ownerBootId: input.ownerBootId,
166
182
  revision: 1, state: 'reserved', createdAt: input.now, updatedAt: input.now,
183
+ ...(kind !== 'fresh' ? { kind } : {}),
167
184
  };
168
185
  writeRecord(fp, rec);
169
186
  return { kind: 'won', record: rec };
@@ -187,6 +204,7 @@ export function takeover(input) {
187
204
  ownerLarkAppId: input.ownerLarkAppId, sessionId: input.sessionId, triggerId: input.triggerId,
188
205
  requestHash: input.requestHash, ownerBootId: input.ownerBootId,
189
206
  revision: current.revision + 1, state: 'reserved', createdAt: current.createdAt, updatedAt: input.now,
207
+ ...(kind !== 'fresh' ? { kind } : {}),
190
208
  };
191
209
  writeRecord(fp, rec);
192
210
  return { kind: 'won', record: rec };
@@ -194,8 +212,8 @@ export function takeover(input) {
194
212
  }
195
213
  /** CAS a record to a new state under the lock. Verifies full identity + revision
196
214
  * before writing (rejects a stale/foreign writer). Returns the written record. */
197
- export function transition(ownerLarkAppId, key, from, patch) {
198
- const fp = fileFor(ownerLarkAppId, key);
215
+ export function transition(ownerLarkAppId, key, from, patch, kind = 'fresh') {
216
+ const fp = fileFor(ownerLarkAppId, key, kind);
199
217
  return withKeyLock(fp, () => {
200
218
  const current = readRecord(fp);
201
219
  if (!current)
@@ -230,8 +248,8 @@ function strictUnlink(fp) {
230
248
  * delete) instead of swallowing both (finding #1). A lock-internal re-read
231
249
  * corruption or an ambiguous unlink error (EIO/EROFS/…) THROWS — the caller
232
250
  * must be able to trust that `removed` means the lease is truly released. */
233
- export function compareAndRemove(ownerLarkAppId, key, expect) {
234
- return compareAndRemoveByPath(fileFor(ownerLarkAppId, key), expect);
251
+ export function compareAndRemove(ownerLarkAppId, key, expect, kind = 'fresh') {
252
+ return compareAndRemoveByPath(fileFor(ownerLarkAppId, key, kind), expect);
235
253
  }
236
254
  /** Enumerate the leases owned by a SINGLE bot (boot reconcile is owner-scoped).
237
255
  * Reads only `idempotency/<sha256(owner)>/` — a foreign bot's corrupt lease
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency-store.js","sourceRoot":"","sources":["../../src/services/idempotency-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idempotency-store.js","sourceRoot":"","sources":["../../src/services/idempotency-store.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ export declare function drainTraexRollout(path: string, fromOffset: number): Tra
33
33
  * cannot surface a half-written model — matching drainTraexRollout. */
34
34
  export declare function readLatestTraexRuntime(path: string): TraexRuntimeSnapshot;
35
35
  /** Authoritative submit confirmation used by the adapter. Only a complete
36
- * role=user rollout record appended after `fromOffset` can match. */
36
+ * event_msg/user_message record appended after `fromOffset` can match. */
37
37
  export declare function traexRolloutHasUserInputSince(path: string, fromOffset: number, expectedText: string): boolean;
38
38
  export interface TraexHistoryMatch {
39
39
  found: boolean;
@@ -52,10 +52,12 @@ export declare function traexHistoryMatchDelta(path: string, fromByte: number, e
52
52
  /** Current byte size of history.jsonl (0 when absent), captured before a paste
53
53
  * so the confirmation scan only considers lines this submit appends. */
54
54
  export declare function traexHistorySize(path: string): number;
55
- /** Find the rollout file an externally-running TRAE process has open.
56
- * Same /proc/<pid>/fd strategy as findCodexRolloutByPid, but with a
57
- * TRAE-specific path matcher so we never bind to a sibling Codex pane. */
58
- export declare function findTraexRolloutByPid(pid: number): {
55
+ /** Find the visible top-level rollout an externally-running TRAE process owns.
56
+ * TRAE can keep the parent rollout and internal guardian/subagent rollouts open
57
+ * in the same process. Internal rollouts are never adoptable. When a current
58
+ * top-level session is supplied it remains preferred unless a newer top-level
59
+ * user rollout proves a real in-process `/new` rotation. */
60
+ export declare function findTraexRolloutByPid(pid: number, preferredSessionId?: string): {
59
61
  path: string;
60
62
  cliSessionId: string;
61
63
  } | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"traex-transcript.d.ts","sourceRoot":"","sources":["../../src/services/traex-transcript.ts"],"names":[],"mappings":"AA6BA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAEtB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,wBAAwB,IAAI,wBAAwB,EAAE,CAAC;AAChE,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,CAAC;AACxD,YAAY,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;AAErD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAuDD;;;;;6EAK6E;AAC7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAmFpF;AAED;;;;;;;;;;;uEAWuE;AACvE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAgEzE;AAMD;qEACqE;AACrE,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAKT;AAeD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;oEAGoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;AAQlF;;;yEAGyE;AACzE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,qBAAqB,GAChC,iBAAiB,CA2BnB;AAED;yEACyE;AACzE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AA+CD;;2EAE2E;AAC3E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAQrG;AAED;;;;;;gCAMgC;AAChC,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAS7E;AAED;;;;;;wEAMwE;AACxE,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,GACrC,OAAO,CAGT;AAGD;;yCAEyC;AACzC,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBpF"}
1
+ {"version":3,"file":"traex-transcript.d.ts","sourceRoot":"","sources":["../../src/services/traex-transcript.ts"],"names":[],"mappings":"AA+BA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAEtB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,wBAAwB,IAAI,wBAAwB,EAAE,CAAC;AAChE,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,CAAC;AACxD,YAAY,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;AAErD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA0DD;;;;;6EAK6E;AAC7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAmFpF;AAED;;;;;;;;;;;uEAWuE;AACvE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAgEzE;AAMD;0EAC0E;AAC1E,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAKT;AAeD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;oEAGoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;AAQlF;;;yEAGyE;AACzE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,qBAAqB,GAChC,iBAAiB,CA2BnB;AAED;yEACyE;AACzE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAkKD;;;;6DAI6D;AAC7D,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,kBAAkB,CAAC,EAAE,MAAM,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAKpD;AAED;;;;;;gCAMgC;AAChC,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAQ7E;AAED;;;;;;wEAMwE;AACxE,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,GACrC,OAAO,CAGT;AAGD;;yCAEyC;AACzC,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBpF"}
@@ -3,7 +3,9 @@
3
3
  *
4
4
  * TRAE is a Codex-family CLI, but its terminal event is NOT byte-identical to
5
5
  * upstream Codex:
6
- * - user input is a response_item role=user message, like Codex;
6
+ * - genuine user input is confirmed by event_msg `user_message`; TRAE also
7
+ * writes internal runtime injections as response_item role=user messages,
8
+ * so those records alone are not user-attribution evidence;
7
9
  * - assistant response_item messages have no `phase` and are emitted many
8
10
  * times during tool use, so none of them is a safe turn boundary;
9
11
  * - event_msg `task_complete` is the durable end-of-turn marker and carries
@@ -20,29 +22,19 @@ import { execSync } from 'node:child_process';
20
22
  import { platform } from 'node:os';
21
23
  import { join } from 'node:path';
22
24
  import { splitCodexEventsByCutoff, extractLastCodexTurn, codexSessionIdFromRolloutPath, } from './codex-transcript.js';
25
+ import { isInternalCodexSessionMeta } from './codex-session-meta.js';
23
26
  import { baselineJsonlCursor } from './jsonl-cursor.js';
24
27
  import { traeSessionsRoot } from './traex-paths.js';
25
28
  export { splitCodexEventsByCutoff as splitTraexEventsByCutoff };
26
29
  export { extractLastCodexTurn as extractLastTraexTurn };
27
30
  const IS_LINUX = platform() === 'linux';
31
+ const TRAEX_SESSION_META_SCAN_MAX_BYTES = 4 * 1024 * 1024;
32
+ const traexRolloutMetaCache = new Map();
28
33
  /** Upper bound on how far back readLatestTraexRuntime scans for the newest
29
34
  * model/effort. The newest turn_context sits near the tail, so this is only a
30
35
  * pathological-file guard (cf. #740): never synchronously parse a multi-GB
31
36
  * rollout on attach just to surface advisory runtime identity. */
32
37
  const TRAEX_RUNTIME_SCAN_MAX_BYTES = 4 * 1024 * 1024;
33
- function joinInputText(content) {
34
- if (!Array.isArray(content))
35
- return '';
36
- const parts = [];
37
- for (const block of content) {
38
- if (block && typeof block === 'object' && block.type === 'input_text') {
39
- const text = block.text;
40
- if (typeof text === 'string')
41
- parts.push(text);
42
- }
43
- }
44
- return parts.join('');
45
- }
46
38
  function eventTimestampMs(value) {
47
39
  const parsed = typeof value === 'string' ? Date.parse(value) : NaN;
48
40
  return Number.isFinite(parsed) ? parsed : Date.now();
@@ -138,10 +130,10 @@ export function drainTraexRollout(path, fromOffset) {
138
130
  timestampMs: eventTimestampMs(obj.timestamp),
139
131
  ...(sourceSessionId ? { sourceSessionId } : {}),
140
132
  };
141
- if (obj.type === 'response_item'
142
- && payload.type === 'message'
143
- && payload.role === 'user') {
144
- const userText = joinInputText(payload.content);
133
+ if (obj.type === 'event_msg'
134
+ && payload.type === 'user_message'
135
+ && typeof payload.message === 'string') {
136
+ const userText = payload.message;
145
137
  if (userText)
146
138
  events.push({ ...base, kind: 'user', text: userText });
147
139
  continue;
@@ -282,7 +274,7 @@ function normaliseInputText(text) {
282
274
  return text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
283
275
  }
284
276
  /** Authoritative submit confirmation used by the adapter. Only a complete
285
- * role=user rollout record appended after `fromOffset` can match. */
277
+ * event_msg/user_message record appended after `fromOffset` can match. */
286
278
  export function traexRolloutHasUserInputSince(path, fromOffset, expectedText) {
287
279
  const expected = normaliseInputText(expectedText);
288
280
  return drainTraexRollout(path, fromOffset).events.some(event => event.kind === 'user' && normaliseInputText(event.text) === expected);
@@ -374,6 +366,124 @@ function matchTraexRolloutPath(target) {
374
366
  return undefined;
375
367
  return { path: target, cliSessionId: sid };
376
368
  }
369
+ function traexRolloutMeta(path) {
370
+ const cached = traexRolloutMetaCache.get(path);
371
+ if (cached)
372
+ return cached;
373
+ let size;
374
+ try {
375
+ size = statSync(path).size;
376
+ }
377
+ catch {
378
+ return { kind: 'empty' };
379
+ }
380
+ if (size <= 0)
381
+ return { kind: 'empty' };
382
+ const length = Math.min(size, TRAEX_SESSION_META_SCAN_MAX_BYTES);
383
+ const buffer = Buffer.alloc(length);
384
+ let bytesRead = 0;
385
+ let fd;
386
+ try {
387
+ fd = openSync(path, 'r');
388
+ bytesRead = readSync(fd, buffer, 0, length, 0);
389
+ }
390
+ catch {
391
+ return { kind: 'pending' };
392
+ }
393
+ finally {
394
+ if (fd !== undefined)
395
+ closeSync(fd);
396
+ }
397
+ const content = buffer.subarray(0, bytesRead);
398
+ const newline = content.indexOf(0x0a);
399
+ if (newline < 0)
400
+ return { kind: 'pending' };
401
+ let entry;
402
+ try {
403
+ entry = JSON.parse(content.subarray(0, newline).toString('utf8'));
404
+ }
405
+ catch {
406
+ return { kind: 'pending' };
407
+ }
408
+ if (entry?.type !== 'session_meta' || !entry.payload || typeof entry.payload !== 'object') {
409
+ const result = { kind: 'legacy' };
410
+ traexRolloutMetaCache.set(path, result);
411
+ return result;
412
+ }
413
+ const payload = entry.payload;
414
+ const threadSource = payload.thread_source;
415
+ let kind = 'legacy';
416
+ if (isInternalCodexSessionMeta(payload)) {
417
+ kind = 'internal';
418
+ }
419
+ else if (threadSource === 'user') {
420
+ kind = 'user';
421
+ }
422
+ const rawTimestamp = typeof payload.timestamp === 'string'
423
+ ? payload.timestamp
424
+ : typeof entry.timestamp === 'string'
425
+ ? entry.timestamp
426
+ : undefined;
427
+ const parsedTimestamp = rawTimestamp ? Date.parse(rawTimestamp) : NaN;
428
+ const result = {
429
+ kind,
430
+ ...(Number.isFinite(parsedTimestamp) ? { startedAtMs: parsedTimestamp } : {}),
431
+ };
432
+ if (traexRolloutMetaCache.size >= 512) {
433
+ const oldest = traexRolloutMetaCache.keys().next().value;
434
+ if (oldest)
435
+ traexRolloutMetaCache.delete(oldest);
436
+ }
437
+ traexRolloutMetaCache.set(path, result);
438
+ return result;
439
+ }
440
+ function traexRolloutRefs(targets) {
441
+ const refs = new Map();
442
+ for (const target of targets) {
443
+ const hit = matchTraexRolloutPath(target);
444
+ if (!hit || refs.has(hit.path))
445
+ continue;
446
+ refs.set(hit.path, { ...hit, ...traexRolloutMeta(hit.path) });
447
+ }
448
+ return [...refs.values()];
449
+ }
450
+ function newestTraexRollout(refs) {
451
+ const timestamped = refs.filter((ref) => ref.startedAtMs !== undefined);
452
+ if (timestamped.length === 0)
453
+ return undefined;
454
+ const maxStartedAt = Math.max(...timestamped.map(ref => ref.startedAtMs));
455
+ const newest = timestamped.filter(ref => ref.startedAtMs === maxStartedAt);
456
+ return newest.length === 1 ? newest[0] : undefined;
457
+ }
458
+ function selectableTraexRollouts(refs) {
459
+ const userRefs = refs.filter(ref => ref.kind === 'user');
460
+ if (userRefs.length > 0)
461
+ return userRefs;
462
+ const legacyRefs = refs.filter(ref => ref.kind === 'legacy');
463
+ if (legacyRefs.length > 0)
464
+ return legacyRefs;
465
+ return [];
466
+ }
467
+ function selectTraexRollout(refs, preferredSessionId) {
468
+ const candidates = selectableTraexRollouts(refs);
469
+ if (candidates.length === 0)
470
+ return undefined;
471
+ const preferred = preferredSessionId
472
+ ? candidates.find(ref => ref.cliSessionId.toLowerCase() === preferredSessionId.toLowerCase())
473
+ : undefined;
474
+ const newest = newestTraexRollout(candidates);
475
+ if (preferred) {
476
+ if (newest?.startedAtMs !== undefined
477
+ && preferred.startedAtMs !== undefined
478
+ && newest.startedAtMs > preferred.startedAtMs) {
479
+ return newest;
480
+ }
481
+ return preferred;
482
+ }
483
+ if (candidates.length === 1)
484
+ return candidates[0];
485
+ return newest;
486
+ }
377
487
  /** Enumerate the file paths a pid holds open (Linux /proc, else lsof). Shared
378
488
  * by findTraexRolloutByPid (single) and findTraexRolloutSetByPid (ownership
379
489
  * set) so both derive from one source. Returns undefined when enumeration is
@@ -417,19 +527,17 @@ function traexProcessOpenTargets(pid) {
417
527
  }
418
528
  return targets;
419
529
  }
420
- /** Find the rollout file an externally-running TRAE process has open.
421
- * Same /proc/<pid>/fd strategy as findCodexRolloutByPid, but with a
422
- * TRAE-specific path matcher so we never bind to a sibling Codex pane. */
423
- export function findTraexRolloutByPid(pid) {
530
+ /** Find the visible top-level rollout an externally-running TRAE process owns.
531
+ * TRAE can keep the parent rollout and internal guardian/subagent rollouts open
532
+ * in the same process. Internal rollouts are never adoptable. When a current
533
+ * top-level session is supplied it remains preferred unless a newer top-level
534
+ * user rollout proves a real in-process `/new` rotation. */
535
+ export function findTraexRolloutByPid(pid, preferredSessionId) {
424
536
  const targets = traexProcessOpenTargets(pid);
425
537
  if (!targets)
426
538
  return undefined;
427
- for (const target of targets) {
428
- const hit = matchTraexRolloutPath(target);
429
- if (hit)
430
- return hit;
431
- }
432
- return undefined;
539
+ const selected = selectTraexRollout(traexRolloutRefs(targets), preferredSessionId);
540
+ return selected ? { path: selected.path, cliSessionId: selected.cliSessionId } : undefined;
433
541
  }
434
542
  /** Lowercased set of TRAE session ids whose rollout the pid holds open. The
435
543
  * ownership gate for a shared-history.jsonl submit match: only a sid this pid
@@ -443,10 +551,8 @@ export function findTraexRolloutSetByPid(pid) {
443
551
  if (!targets)
444
552
  return undefined;
445
553
  const set = new Set();
446
- for (const target of targets) {
447
- const hit = matchTraexRolloutPath(target);
448
- if (hit)
449
- set.add(hit.cliSessionId.toLowerCase());
554
+ for (const ref of selectableTraexRollouts(traexRolloutRefs(targets))) {
555
+ set.add(ref.cliSessionId.toLowerCase());
450
556
  }
451
557
  return set;
452
558
  }