botmux 2.75.0 → 2.76.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.
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +19 -5
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/dashboard-endpoint.d.ts +64 -0
- package/dist/cli/dashboard-endpoint.d.ts.map +1 -0
- package/dist/cli/dashboard-endpoint.js +116 -0
- package/dist/cli/dashboard-endpoint.js.map +1 -0
- package/dist/cli/pm2-command.d.ts +6 -0
- package/dist/cli/pm2-command.d.ts.map +1 -0
- package/dist/cli/pm2-command.js +7 -0
- package/dist/cli/pm2-command.js.map +1 -0
- package/dist/cli/stdin-encoding.d.ts +3 -0
- package/dist/cli/stdin-encoding.d.ts.map +1 -0
- package/dist/cli/stdin-encoding.js +19 -0
- package/dist/cli/stdin-encoding.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +51 -50
- package/dist/cli.js.map +1 -1
- package/dist/core/maintenance.d.ts +18 -0
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +56 -4
- package/dist/core/maintenance.js.map +1 -1
- package/dist/dashboard/auth.d.ts +21 -2
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +33 -6
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/hd2d-assets.d.ts +20 -0
- package/dist/dashboard/hd2d-assets.d.ts.map +1 -0
- package/dist/dashboard/hd2d-assets.js +216 -0
- package/dist/dashboard/hd2d-assets.js.map +1 -0
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +3 -0
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/office.d.ts +2 -0
- package/dist/dashboard/web/office.d.ts.map +1 -0
- package/dist/dashboard/web/office.js +140 -0
- package/dist/dashboard/web/office.js.map +1 -0
- package/dist/dashboard-web/app.js +327 -299
- package/dist/dashboard-web/game/index.apple-touch-icon.png +0 -0
- package/dist/dashboard-web/game/index.audio.position.worklet.js +66 -0
- package/dist/dashboard-web/game/index.audio.worklet.js +213 -0
- package/dist/dashboard-web/game/index.html +224 -0
- package/dist/dashboard-web/game/index.icon.png +0 -0
- package/dist/dashboard-web/game/index.js +909 -0
- package/dist/dashboard-web/game/index.png +0 -0
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard.js +87 -11
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +5 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +2 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.js +2 -2
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.js +2 -2
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +66 -6
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/reply-mode-command.d.ts.map +1 -1
- package/dist/im/lark/reply-mode-command.js +4 -1
- package/dist/im/lark/reply-mode-command.js.map +1 -1
- package/dist/services/bridge-rotation-policy.d.ts +40 -0
- package/dist/services/bridge-rotation-policy.d.ts.map +1 -1
- package/dist/services/bridge-rotation-policy.js +38 -0
- package/dist/services/bridge-rotation-policy.js.map +1 -1
- package/dist/services/chat-reply-mode-store.d.ts +1 -1
- package/dist/services/chat-reply-mode-store.d.ts.map +1 -1
- package/dist/services/chat-reply-mode-store.js +8 -9
- package/dist/services/chat-reply-mode-store.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +17 -3
- package/dist/skills/definitions.js.map +1 -1
- package/dist/worker.js +23 -3
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +14 -14
- package/package.json +2 -2
|
@@ -136,4 +136,44 @@ export type FingerprintSwitchDecision = {
|
|
|
136
136
|
* `findSubstring` and `findExact` to exercise every branch.
|
|
137
137
|
*/
|
|
138
138
|
export declare function decideFingerprintSwitch(input: FingerprintSwitchInput): FingerprintSwitchDecision;
|
|
139
|
+
export interface AbsentBaselineHealInput {
|
|
140
|
+
/** Whether the bridge has already completed baseline (gate already open). */
|
|
141
|
+
baselineDone: boolean;
|
|
142
|
+
/** Whether a `bridgeJsonlPath` is currently pinned. */
|
|
143
|
+
hasJsonlPath: boolean;
|
|
144
|
+
/** Whether that pinned path currently exists on disk. */
|
|
145
|
+
jsonlFileExists: boolean;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Decide whether a pending Lark turn arriving against a not-yet-baselined
|
|
149
|
+
* bridge should SELF-HEAL by arming fresh-empty readiness, instead of being
|
|
150
|
+
* dropped with "baseline not ready".
|
|
151
|
+
*
|
|
152
|
+
* Background: in `baseline-existing` (resume / restart-restore) mode the
|
|
153
|
+
* worker pins `bridgeJsonlPath` to `<sessionId>.jsonl` and waits for that
|
|
154
|
+
* file to appear before baselining. If Claude wrote its transcript under a
|
|
155
|
+
* DIFFERENT sessionId than the one we guessed — `--session-id` not honoured,
|
|
156
|
+
* a stale resume id, or an /adopt sid persisted as the botmux sid — the
|
|
157
|
+
* guessed file never appears, `baselineDone` stays false forever, and every
|
|
158
|
+
* turn is dropped ("baseline not ready"). The bridge is then permanently
|
|
159
|
+
* stuck on a path that does not exist (the user-reported "message went into
|
|
160
|
+
* the PTY but final_output was never attributed" symptom). The pid-state
|
|
161
|
+
* resolver that would normally correct this needs a live CLI pid, which is
|
|
162
|
+
* often missing on restart-restore — so the only recovery path that still
|
|
163
|
+
* works is the exact-content fingerprint scan, and IT is starved because no
|
|
164
|
+
* turn is ever marked.
|
|
165
|
+
*
|
|
166
|
+
* An ABSENT file has no prior history to absorb, so it is safe to declare
|
|
167
|
+
* fresh-empty readiness (offset 0, baseline done) here: the pending turn
|
|
168
|
+
* then gets marked, which arms the per-tick exact-content fingerprint
|
|
169
|
+
* recovery (`decideFingerprintSwitch`) to discover the jsonl Claude actually
|
|
170
|
+
* appended this message to and switch the bridge onto it — no dependence on
|
|
171
|
+
* Claude's internal pid-state / tasks files, so it is Claude-version-robust.
|
|
172
|
+
*
|
|
173
|
+
* Returns true ONLY when baseline isn't done, a path is pinned, and that
|
|
174
|
+
* path is absent. When the file EXISTS (the genuine slow-resume-with-history
|
|
175
|
+
* case), this returns false so normal lazy-baseline runs instead and prior
|
|
176
|
+
* turns are absorbed rather than re-emitted.
|
|
177
|
+
*/
|
|
178
|
+
export declare function shouldHealAbsentBaseline(input: AbsentBaselineHealInput): boolean;
|
|
139
179
|
//# sourceMappingURL=bridge-rotation-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-rotation-policy.d.ts","sourceRoot":"","sources":["../../src/services/bridge-rotation-policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAGT;AAID,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C;;0DAEsD;IACtD,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,2BAA2B;IAC1C;0CACsC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB;;;oDAGgD;IAChD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,wBAAwB,GAC9B,2BAA2B,CAQ7B;AAID;;;2EAG2E;AAC3E,eAAO,MAAM,sBAAsB,QAAoE,CAAC;AAExG;;qEAEqE;AACrE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;mEAE+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC;8EAC0E;IAC1E,aAAa,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7E;;8CAE0C;IAC1C,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC;CACrE;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,GAAG,mBAAmB,CAAA;CAAE,GACvF;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7E;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,yBAAyB,CAoB3B"}
|
|
1
|
+
{"version":3,"file":"bridge-rotation-policy.d.ts","sourceRoot":"","sources":["../../src/services/bridge-rotation-policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAGT;AAID,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C;;0DAEsD;IACtD,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,2BAA2B;IAC1C;0CACsC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB;;;oDAGgD;IAChD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,wBAAwB,GAC9B,2BAA2B,CAQ7B;AAID;;;2EAG2E;AAC3E,eAAO,MAAM,sBAAsB,QAAoE,CAAC;AAExG;;qEAEqE;AACrE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;mEAE+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC;8EAC0E;IAC1E,aAAa,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7E;;8CAE0C;IAC1C,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC;CACrE;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,GAAG,mBAAmB,CAAA;CAAE,GACvF;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7E;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,yBAAyB,CAoB3B;AAID,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,YAAY,EAAE,OAAO,CAAC;IACtB,uDAAuD;IACvD,YAAY,EAAE,OAAO,CAAC;IACtB,yDAAyD;IACzD,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAIhF"}
|
|
@@ -122,4 +122,42 @@ export function decideFingerprintSwitch(input) {
|
|
|
122
122
|
}
|
|
123
123
|
return { action: 'switch', path: exact[0], reason: 'unknown-sid-exact' };
|
|
124
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Decide whether a pending Lark turn arriving against a not-yet-baselined
|
|
127
|
+
* bridge should SELF-HEAL by arming fresh-empty readiness, instead of being
|
|
128
|
+
* dropped with "baseline not ready".
|
|
129
|
+
*
|
|
130
|
+
* Background: in `baseline-existing` (resume / restart-restore) mode the
|
|
131
|
+
* worker pins `bridgeJsonlPath` to `<sessionId>.jsonl` and waits for that
|
|
132
|
+
* file to appear before baselining. If Claude wrote its transcript under a
|
|
133
|
+
* DIFFERENT sessionId than the one we guessed — `--session-id` not honoured,
|
|
134
|
+
* a stale resume id, or an /adopt sid persisted as the botmux sid — the
|
|
135
|
+
* guessed file never appears, `baselineDone` stays false forever, and every
|
|
136
|
+
* turn is dropped ("baseline not ready"). The bridge is then permanently
|
|
137
|
+
* stuck on a path that does not exist (the user-reported "message went into
|
|
138
|
+
* the PTY but final_output was never attributed" symptom). The pid-state
|
|
139
|
+
* resolver that would normally correct this needs a live CLI pid, which is
|
|
140
|
+
* often missing on restart-restore — so the only recovery path that still
|
|
141
|
+
* works is the exact-content fingerprint scan, and IT is starved because no
|
|
142
|
+
* turn is ever marked.
|
|
143
|
+
*
|
|
144
|
+
* An ABSENT file has no prior history to absorb, so it is safe to declare
|
|
145
|
+
* fresh-empty readiness (offset 0, baseline done) here: the pending turn
|
|
146
|
+
* then gets marked, which arms the per-tick exact-content fingerprint
|
|
147
|
+
* recovery (`decideFingerprintSwitch`) to discover the jsonl Claude actually
|
|
148
|
+
* appended this message to and switch the bridge onto it — no dependence on
|
|
149
|
+
* Claude's internal pid-state / tasks files, so it is Claude-version-robust.
|
|
150
|
+
*
|
|
151
|
+
* Returns true ONLY when baseline isn't done, a path is pinned, and that
|
|
152
|
+
* path is absent. When the file EXISTS (the genuine slow-resume-with-history
|
|
153
|
+
* case), this returns false so normal lazy-baseline runs instead and prior
|
|
154
|
+
* turns are absorbed rather than re-emitted.
|
|
155
|
+
*/
|
|
156
|
+
export function shouldHealAbsentBaseline(input) {
|
|
157
|
+
if (input.baselineDone)
|
|
158
|
+
return false;
|
|
159
|
+
if (!input.hasJsonlPath)
|
|
160
|
+
return false;
|
|
161
|
+
return !input.jsonlFileExists;
|
|
162
|
+
}
|
|
125
163
|
//# sourceMappingURL=bridge-rotation-policy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-rotation-policy.js","sourceRoot":"","sources":["../../src/services/bridge-rotation-policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAA0B,EAC1B,QAAiB;IAEjB,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,SAAS,KAAK,aAAa,CAAC;AACrC,CAAC;AA4BD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA+B;IAE/B,IAAI,KAAK,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,oBAAoB,KAAK,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAChE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,8EAA8E;AAE9E;;;2EAG2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,iEAAiE,CAAC;AAExG;;qEAEqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAyBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAA6B;IAE7B,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IACH,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACpF,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;AAC3E,CAAC"}
|
|
1
|
+
{"version":3,"file":"bridge-rotation-policy.js","sourceRoot":"","sources":["../../src/services/bridge-rotation-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { type ChatReplyMode } from '../bot-registry.js';
|
|
|
2
2
|
export type { ChatReplyMode } from '../bot-registry.js';
|
|
3
3
|
export declare function normalizeChatReplyMode(raw: string | undefined): ChatReplyMode | undefined;
|
|
4
4
|
/** Short command-word label for status / confirmation messages. */
|
|
5
|
-
export declare function replyModeLabel(mode: ChatReplyMode): 'chat' | 'topic' | '
|
|
5
|
+
export declare function replyModeLabel(mode: ChatReplyMode): 'chat' | 'topic' | 'new-topic';
|
|
6
6
|
export type GroupMentionMode = 'always' | 'topic' | 'never';
|
|
7
7
|
/**
|
|
8
8
|
* Per-bot (bot-global) @-requirement policy for regular groups, default 'always'.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-reply-mode-store.d.ts","sourceRoot":"","sources":["../../src/services/chat-reply-mode-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-reply-mode-store.d.ts","sourceRoot":"","sources":["../../src/services/chat-reply-mode-store.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGhE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAOzF;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAElF;AAWD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAO3E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAMpG;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B5E"}
|
|
@@ -4,12 +4,11 @@
|
|
|
4
4
|
* Three modes (tri-state) — unifies #116 + #131 into one knob so a chat resolves
|
|
5
5
|
* to EXACTLY ONE mode and the two thread-reply mechanisms can never compete:
|
|
6
6
|
* • chat — flat chat-scope replies in the group (default).
|
|
7
|
-
* •
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* •
|
|
11
|
-
*
|
|
12
|
-
* into the trigger message's thread (#131).
|
|
7
|
+
* • topic/shared — 话题展示但复用同一个 session: reuse the bot's existing
|
|
8
|
+
* chat-scope session/worker/cwd, but route this turn's reply
|
|
9
|
+
* into the trigger message's thread (#131).
|
|
10
|
+
* • new-topic — explicit fork mode: each top-level @mention opens a fresh
|
|
11
|
+
* thread-scope session under the trigger (its own worker/cwd/context).
|
|
13
12
|
*
|
|
14
13
|
* Resolution: per-chat override (`chatReplyModes[chatId]`) wins; otherwise fall
|
|
15
14
|
* back to the per-bot default (`regularGroupReplyMode`, default 'chat'). The
|
|
@@ -25,15 +24,15 @@ export function normalizeChatReplyMode(raw) {
|
|
|
25
24
|
return undefined;
|
|
26
25
|
if (v === 'chat')
|
|
27
26
|
return 'chat';
|
|
28
|
-
if (v === '
|
|
27
|
+
if (v === 'new-topic' || v === 'newtopic' || v === 'thread')
|
|
29
28
|
return 'new-topic';
|
|
30
|
-
if (v === 'shared' || v === 'share' || v === 'alias' || v === 'topic-alias' || v === 'topic_alias')
|
|
29
|
+
if (v === 'topic' || v === 'shared' || v === 'share' || v === 'alias' || v === 'topic-alias' || v === 'topic_alias')
|
|
31
30
|
return 'shared';
|
|
32
31
|
return undefined;
|
|
33
32
|
}
|
|
34
33
|
/** Short command-word label for status / confirmation messages. */
|
|
35
34
|
export function replyModeLabel(mode) {
|
|
36
|
-
return mode === '
|
|
35
|
+
return mode === 'shared' ? 'topic' : mode === 'new-topic' ? 'new-topic' : 'chat';
|
|
37
36
|
}
|
|
38
37
|
/** Per-bot default regular-group mode (`regularGroupReplyMode`, default 'chat'). */
|
|
39
38
|
function regularGroupDefaultMode(larkAppId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-reply-mode-store.js","sourceRoot":"","sources":["../../src/services/chat-reply-mode-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chat-reply-mode-store.js","sourceRoot":"","sources":["../../src/services/chat-reply-mode-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAy5BD,eAAO,MAAM,SAAS,wjJAiErB,CAAC;AAoGF,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,eAAO,MAAM,cAAc,EAAE,QAAQ,EAUpC,CAAC;AAEF;;qCAEqC;AACrC,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAKvC,CAAC"}
|
|
@@ -254,13 +254,13 @@ botmux send --attention=blocked --mention-back "缺 TOS 上传密钥,拿不到
|
|
|
254
254
|
|
|
255
255
|
### 纯文本(最常见)
|
|
256
256
|
|
|
257
|
-
|
|
257
|
+
多行内容不要写成 \`botmux send "第一行\\n第二行"\`,否则用户会在飞书里看到字面量 \`\\n\`。在 Unix shell 里可用 heredoc;在 Windows/PowerShell 里发送包含中文或 emoji 的多行内容时,必须先写 UTF-8 文件,再用 \`--content-file\`,不要把中文直接通过 here-string、\`echo\` 或管道送进 stdin。
|
|
258
258
|
|
|
259
259
|
\`\`\`bash
|
|
260
260
|
# 直接传参
|
|
261
261
|
botmux send "分析完成,核心问题是 X"
|
|
262
262
|
|
|
263
|
-
# heredoc
|
|
263
|
+
# Unix shell: heredoc
|
|
264
264
|
botmux send <<'EOF'
|
|
265
265
|
## 分析报告
|
|
266
266
|
|
|
@@ -274,9 +274,23 @@ EOF
|
|
|
274
274
|
echo "构建成功 ✅" | botmux send
|
|
275
275
|
\`\`\`
|
|
276
276
|
|
|
277
|
+
\`\`\`powershell
|
|
278
|
+
# Windows PowerShell: 中文/emoji 多行内容
|
|
279
|
+
$msg = Join-Path $env:TEMP "botmux-message.md"
|
|
280
|
+
@'
|
|
281
|
+
## 分析报告
|
|
282
|
+
|
|
283
|
+
1. 发现问题 A
|
|
284
|
+
2. 建议方案 B
|
|
285
|
+
|
|
286
|
+
需要你确认后我再动手。
|
|
287
|
+
'@ | Set-Content -LiteralPath $msg -Encoding utf8
|
|
288
|
+
botmux send --content-file $msg
|
|
289
|
+
\`\`\`
|
|
290
|
+
|
|
277
291
|
> ⚠️ **重要:single-quoted heredoc \`<<'EOF'\` 内反引号直接写真反引号,不要加反斜杠转义。**
|
|
278
292
|
> 原因:单引号 heredoc 已经禁用所有特殊字符解释(\`$\`、反斜杠、反引号一律按字面量处理)。再加反斜杠反而会把"反斜杠+反引号"作为字面字符混进 markdown,让 markdown-it 按 CommonMark 的 backslash-escape 处理——结果卡片里三反引号变成可见字符、代码块整段废掉。
|
|
279
|
-
> 自检:写完 bash 命令后扫一眼,如果 EOF 块内**任何反引号前面带反斜杠**,删掉那个反斜杠。
|
|
293
|
+
> 自检:写完 bash 命令后扫一眼,如果 EOF 块内**任何反引号前面带反斜杠**,删掉那个反斜杠。Windows/PowerShell 需要中文或 emoji 时优先用上面的 \`--content-file\` 写法。
|
|
280
294
|
|
|
281
295
|
### 可用的 markdown 语法(自动走卡片)
|
|
282
296
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FtB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DrB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC;AAEF,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"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"}
|
package/dist/worker.js
CHANGED
|
@@ -22,7 +22,7 @@ import { shouldSuppressBridgeEmit } from './services/bridge-fallback-gate.js';
|
|
|
22
22
|
import { shouldWriteNow } from './utils/input-gate.js';
|
|
23
23
|
import { ReadyGate, shouldArmReadyGate } from './utils/ready-gate.js';
|
|
24
24
|
import { InflightInputTracker } from './core/inflight-input-tracker.js';
|
|
25
|
-
import { shouldRunQuietRotation, evaluatePidResolverPullback, decideFingerprintSwitch, sessionIdFromJsonlPath, SESSION_ID_FILENAME_RE, } from './services/bridge-rotation-policy.js';
|
|
25
|
+
import { shouldRunQuietRotation, evaluatePidResolverPullback, decideFingerprintSwitch, shouldHealAbsentBaseline, sessionIdFromJsonlPath, SESSION_ID_FILENAME_RE, } from './services/bridge-rotation-policy.js';
|
|
26
26
|
import { CodexBridgeQueue } from './services/codex-bridge-queue.js';
|
|
27
27
|
import { drainCodexRollout, findCodexRolloutBySessionId, findCodexRolloutByPid, splitCodexEventsByCutoff, extractLastCodexTurn } from './services/codex-transcript.js';
|
|
28
28
|
import { findTraexRolloutBySessionId, findTraexRolloutByPid } from './services/traex-transcript.js';
|
|
@@ -1416,8 +1416,28 @@ function bridgeMarkPendingTurn(messageText, preferredTurnId) {
|
|
|
1416
1416
|
if (!bridgeJsonlPath)
|
|
1417
1417
|
return undefined;
|
|
1418
1418
|
if (!bridgeBaselineDone) {
|
|
1419
|
-
|
|
1420
|
-
|
|
1419
|
+
// Self-heal a stuck baseline: the guessed transcript path never
|
|
1420
|
+
// materialised (Claude wrote under a different sessionId, a stale resume
|
|
1421
|
+
// id, or an /adopt sid persisted as the botmux sid). An absent file has
|
|
1422
|
+
// no history to absorb, so arm fresh-empty readiness so THIS turn gets
|
|
1423
|
+
// marked — the mark arms the per-tick exact-content fingerprint recovery,
|
|
1424
|
+
// which finds the jsonl Claude actually wrote this message to and switches
|
|
1425
|
+
// the bridge onto it (no dependence on Claude-internal pid files, so
|
|
1426
|
+
// version-robust). See shouldHealAbsentBaseline for the full rationale.
|
|
1427
|
+
if (shouldHealAbsentBaseline({
|
|
1428
|
+
baselineDone: bridgeBaselineDone,
|
|
1429
|
+
hasJsonlPath: !!bridgeJsonlPath,
|
|
1430
|
+
jsonlFileExists: existsSyncSafe(bridgeJsonlPath),
|
|
1431
|
+
})) {
|
|
1432
|
+
bridgeOffset = 0;
|
|
1433
|
+
bridgePendingTail = '';
|
|
1434
|
+
bridgeBaselineDone = true;
|
|
1435
|
+
log(`Bridge baseline self-healed: guessed transcript ${bridgeJsonlPath} absent; fresh-empty readiness armed for fingerprint recovery`);
|
|
1436
|
+
}
|
|
1437
|
+
else {
|
|
1438
|
+
log('Bridge baseline not ready — this turn will not have transcript-driven final_output');
|
|
1439
|
+
return undefined;
|
|
1440
|
+
}
|
|
1421
1441
|
}
|
|
1422
1442
|
const fingerprint = makeFingerprint(messageText);
|
|
1423
1443
|
// Full normalised content powers the unknown-sid recovery path. When a
|