@a1hvdy/cc-openclaw 0.25.5 → 0.25.7
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/src/channels/telegram/injector.js +0 -71
- package/dist/src/channels/telegram/injector.js.map +1 -1
- package/dist/src/channels/telegram-mirror/inbound-handler.js +133 -7
- package/dist/src/channels/telegram-mirror/inbound-handler.js.map +1 -1
- package/dist/src/lib/perf/resident-cli-pool.d.ts +39 -0
- package/dist/src/lib/perf/resident-cli-pool.js +60 -0
- package/dist/src/lib/perf/resident-cli-pool.js.map +1 -0
- package/package.json +1 -1
- package/dist/src/patches/sysprompt-strip.spec.d.ts +0 -33
- package/dist/src/patches/sysprompt-strip.spec.js +0 -53
- package/dist/src/patches/sysprompt-strip.spec.js.map +0 -1
|
@@ -30,8 +30,6 @@ export const MAX_STORE_SIZE = 100;
|
|
|
30
30
|
const metadataStore = new Map();
|
|
31
31
|
// ── Idempotency Guard ─────────────────────────────────────────────────────
|
|
32
32
|
import { defaultRegisterGuard } from '../../lib/register-guard.js';
|
|
33
|
-
import { emitSpeculativeThinking } from './speculative-bubble.js';
|
|
34
|
-
import { notifyTyping } from '../../lib/perf/typing-prefetch.js';
|
|
35
33
|
// ── Helpers ───────────────────────────────────────────────────────────────
|
|
36
34
|
function isEnabled() {
|
|
37
35
|
return process.env[ENV_FLAG] === 'true';
|
|
@@ -125,75 +123,6 @@ export function register(api) {
|
|
|
125
123
|
// Non-claiming — let the message proceed to cc-handler or model
|
|
126
124
|
return undefined;
|
|
127
125
|
});
|
|
128
|
-
// ── v0.24.0 default-path perf hooks: M9 spec-bubble + M2 first-arrival ──
|
|
129
|
-
//
|
|
130
|
-
// Second, independent before_dispatch registration. Deliberately NOT gated
|
|
131
|
-
// on UX_BRIDGE_ALL_SESSIONS — this handler is responsible for perf wins
|
|
132
|
-
// that should fire on every non-/cc Telegram message regardless of the
|
|
133
|
-
// UX bridge flag. Flag-gated individually via:
|
|
134
|
-
// - CC_OPENCLAW_PERF_TYPING_PREFETCH (M2 first-arrival prefetch)
|
|
135
|
-
// - CC_OPENCLAW_PERF_SPEC_BUBBLE (M9 speculative "Thinking…" bubble)
|
|
136
|
-
// Slash-prefixed messages (/cc, slash skills) are skipped to avoid
|
|
137
|
-
// double-bubble with cc-handler's claim path.
|
|
138
|
-
api.on('before_dispatch', async (...args) => {
|
|
139
|
-
try {
|
|
140
|
-
const event = args[0];
|
|
141
|
-
const ctx = args[1];
|
|
142
|
-
if (event.channel !== 'telegram')
|
|
143
|
-
return undefined;
|
|
144
|
-
const content = (typeof event.content === 'string'
|
|
145
|
-
? (event.content)
|
|
146
|
-
: '').trim();
|
|
147
|
-
if (content.startsWith('/'))
|
|
148
|
-
return undefined;
|
|
149
|
-
const sessionKey = ctx.sessionKey;
|
|
150
|
-
if (!sessionKey)
|
|
151
|
-
return undefined;
|
|
152
|
-
const { chatId, threadId } = parseConversationId(ctx.conversationId ?? '');
|
|
153
|
-
if (!chatId)
|
|
154
|
-
return undefined;
|
|
155
|
-
// M2 — first-arrival prefetch. The helper has its own 4s cooldown
|
|
156
|
-
// (typing-prefetch.ts:WARMUP_COOLDOWN_MS) so calling per-message is safe;
|
|
157
|
-
// duplicate calls within the cooldown are no-ops.
|
|
158
|
-
if (process.env.CC_OPENCLAW_PERF_TYPING_PREFETCH === '1') {
|
|
159
|
-
try {
|
|
160
|
-
notifyTyping(chatId);
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
// notifyTyping is sync + best-effort; never fail dispatch
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
// M9 — speculative bubble. The helper has its own getPerfSpecBubbleEnabled()
|
|
167
|
-
// check, so the outer env gate here is belt-and-braces. We persist the
|
|
168
|
-
// returned message_id under sk:${sessionKey} so a future live-card
|
|
169
|
-
// adoption pass (deferred to v0.25.0) can edit the same Telegram message
|
|
170
|
-
// in place instead of sending a fresh ack.
|
|
171
|
-
if (process.env.CC_OPENCLAW_PERF_SPEC_BUBBLE === '1') {
|
|
172
|
-
void emitSpeculativeThinking({ chatId, threadId })
|
|
173
|
-
.then((msgId) => {
|
|
174
|
-
if (msgId == null)
|
|
175
|
-
return;
|
|
176
|
-
const UX_META = Symbol.for('telegram-ux-bridge:metadata');
|
|
177
|
-
const store = globalThis[UX_META];
|
|
178
|
-
if (store instanceof Map) {
|
|
179
|
-
const existing = store.get(`sk:${sessionKey}`) ?? {};
|
|
180
|
-
store.set(`sk:${sessionKey}`, {
|
|
181
|
-
...existing,
|
|
182
|
-
speculativeAckMessageId: msgId,
|
|
183
|
-
storedAt: Date.now(),
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
})
|
|
187
|
-
.catch(() => {
|
|
188
|
-
// best-effort; never fail dispatch on a bubble error
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
catch {
|
|
193
|
-
// any error in perf hooks must never claim/break dispatch
|
|
194
|
-
}
|
|
195
|
-
return undefined;
|
|
196
|
-
});
|
|
197
126
|
// ── before_tool_call: inject metadata into claude_session_send ────────
|
|
198
127
|
//
|
|
199
128
|
// When Savvy (GPT) decides to delegate and calls claude_session_send,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../../../src/channels/telegram/injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAyCH,6EAA6E;AAE7E,MAAM,UAAU,GAAG,iCAAiC,CAAC;AACrD,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,6EAA6E;AAE7E,iCAAiC;AACjC,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE1D,6EAA6E;AAE7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../../../src/channels/telegram/injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,8 @@ import { dispatchCommand, parseSlash, COMMAND_HANDLERS } from './commands.js';
|
|
|
26
26
|
import { sendTg, editTg } from '../../lib/telegram-bot-api.js';
|
|
27
27
|
import { CallbackMap } from './callback-mapping.js';
|
|
28
28
|
import { ComposeBuffer } from './compose-buffer.js';
|
|
29
|
+
import { TurnStateMachine } from './state-machine.js';
|
|
30
|
+
import { renderTurn } from './card-renderer.js';
|
|
29
31
|
const PLUGIN_TAG = '[cc-openclaw/telegram-mirror/inbound]';
|
|
30
32
|
/**
|
|
31
33
|
* Parse Telegram chat id out of a session key. Session keys look like
|
|
@@ -115,23 +117,34 @@ async function forwardAction(action, threadId, logger) {
|
|
|
115
117
|
* 2026-05-19): `dispatched /new` logged TWICE per single inbound /new
|
|
116
118
|
* because two listeners both fired. v0.25.5 dedupes.
|
|
117
119
|
*/
|
|
118
|
-
|
|
120
|
+
// v0.25.7 — per-api subscription dedup (WeakSet keyed on the api object).
|
|
121
|
+
// v0.25.5 used a module-scope `_subscribed = false` boolean which dead-
|
|
122
|
+
// lettered the subscription when OpenClaw 2026.5.x called register(api)
|
|
123
|
+
// with a second distinct api object — the gateway's actual dispatch path
|
|
124
|
+
// uses that second binding, so the mirror went structurally dark on home.
|
|
125
|
+
// WeakSet keying restores api-scope dedup per the prior-art pattern in
|
|
126
|
+
// `src/lib/register-guard.ts` (memory `2026-05-06-cc-openclaw-hooks-dead-
|
|
127
|
+
// registry.md`). See PRPs/v0.25.7-subscription-binding-fix.md ADR-001.
|
|
128
|
+
let _subscribedApis = new WeakSet();
|
|
119
129
|
const _states = new Set();
|
|
120
130
|
/** Test-only — reset module-level subscription state. */
|
|
121
131
|
export function _resetSubscriptionForTests() {
|
|
122
|
-
|
|
132
|
+
_subscribedApis = new WeakSet();
|
|
123
133
|
_states.clear();
|
|
124
134
|
}
|
|
125
135
|
export function registerInboundHandler(api, state = createHandlerState()) {
|
|
126
136
|
const logger = (api.logger ?? console);
|
|
127
137
|
_states.add(state);
|
|
128
|
-
if (
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
process.
|
|
138
|
+
if (_subscribedApis.has(api)) {
|
|
139
|
+
// This exact api object has been wired up already (rare — happens
|
|
140
|
+
// when register() is called twice with the same binding in a single
|
|
141
|
+
// process). Skip the api.on calls to prevent stacked listeners.
|
|
142
|
+
// A DIFFERENT api object falls through and gets its own subscriptions,
|
|
143
|
+
// which is what v0.25.5 broke and v0.25.7 restores.
|
|
144
|
+
process.stderr.write(`${PLUGIN_TAG} skip-resubscribe (api already in WeakSet — new api binding produces fresh subscription).\n`);
|
|
132
145
|
return state;
|
|
133
146
|
}
|
|
134
|
-
|
|
147
|
+
_subscribedApis.add(api);
|
|
135
148
|
api.on('before_dispatch', async (...args) => {
|
|
136
149
|
const event = args[0];
|
|
137
150
|
if (!event)
|
|
@@ -186,6 +199,119 @@ export function registerInboundHandler(api, state = createHandlerState()) {
|
|
|
186
199
|
process.stderr.write(`${dispatchLog}\n`);
|
|
187
200
|
return { handled: true };
|
|
188
201
|
});
|
|
202
|
+
// v0.25.6 — TURN RENDER PIPELINE. The M2 building blocks (TurnStateMachine,
|
|
203
|
+
// renderTurn) finally wire to live events here. On a non-slash inbound,
|
|
204
|
+
// we send a "▶ Working" card immediately so the user sees the agent
|
|
205
|
+
// received their message. As tool events fire, we edit the card. On
|
|
206
|
+
// reply_dispatch / finalize, we mark the card "✓ Done".
|
|
207
|
+
//
|
|
208
|
+
// Tool event shapes vary across gateway versions — we dump each shape
|
|
209
|
+
// ONCE on first arrival to stderr, so v0.25.7 can fix extraction with
|
|
210
|
+
// ground-truth data.
|
|
211
|
+
const cardState = new Map();
|
|
212
|
+
const shapeDumped = new Set();
|
|
213
|
+
function dumpShapeOnce(eventName, event) {
|
|
214
|
+
if (shapeDumped.has(eventName))
|
|
215
|
+
return;
|
|
216
|
+
shapeDumped.add(eventName);
|
|
217
|
+
try {
|
|
218
|
+
const dump = JSON.stringify(event, (_k, v) => (typeof v === 'function' ? '[Function]' : v));
|
|
219
|
+
process.stderr.write(`[cc-openclaw/telegram-mirror/turn] ${eventName} SHAPE (once): ${dump.slice(0, 1500)}\n`);
|
|
220
|
+
}
|
|
221
|
+
catch (err) {
|
|
222
|
+
process.stderr.write(`[cc-openclaw/telegram-mirror/turn] ${eventName} shape-dump failed: ${err.message}\n`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Re-subscribe before_dispatch to send a "▶ Working" card for non-slash
|
|
226
|
+
// inbound. Distinct handler from the slash dispatcher above to keep the
|
|
227
|
+
// two responsibilities independent.
|
|
228
|
+
api.on('before_dispatch', async (...args) => {
|
|
229
|
+
const event = args[0];
|
|
230
|
+
if (!event || event.channel !== 'telegram')
|
|
231
|
+
return undefined;
|
|
232
|
+
if (event.raw?.callback_query)
|
|
233
|
+
return undefined;
|
|
234
|
+
const text = (typeof event.content === 'string' ? event.content : undefined) ??
|
|
235
|
+
event.raw?.message?.text;
|
|
236
|
+
if (typeof text !== 'string')
|
|
237
|
+
return undefined;
|
|
238
|
+
// Skip if it's a known mirror slash — those are handled by the
|
|
239
|
+
// dispatcher above and shouldn't get a working card.
|
|
240
|
+
const parsed = parseSlash(text);
|
|
241
|
+
if (parsed && MIRROR_COMMANDS.has(parsed.cmd))
|
|
242
|
+
return undefined;
|
|
243
|
+
const fromKey = chatIdFromSessionKey(event.sessionKey);
|
|
244
|
+
let chatId = fromKey.chatId || (event.senderId !== undefined ? String(event.senderId) : '');
|
|
245
|
+
if (!chatId)
|
|
246
|
+
return undefined;
|
|
247
|
+
const threadId = fromKey.threadId !== undefined ? fromKey.threadId : event.raw?.message?.message_thread_id;
|
|
248
|
+
// Start a fresh turn for this chat. Replaces any prior turn state.
|
|
249
|
+
const sm = new TurnStateMachine();
|
|
250
|
+
sm.start(chatId);
|
|
251
|
+
try {
|
|
252
|
+
const res = await sendTg(chatId, renderTurn(sm.getTurn(chatId)), threadId !== undefined ? String(threadId) : undefined);
|
|
253
|
+
const msgId = res?.result?.message_id;
|
|
254
|
+
if (typeof msgId === 'number') {
|
|
255
|
+
cardState.set(chatId, { messageId: msgId, sm });
|
|
256
|
+
process.stderr.write(`[cc-openclaw/telegram-mirror/turn] working card sent: chat=${chatId} msg=${msgId} text=${JSON.stringify(text.slice(0, 60))}\n`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
process.stderr.write(`[cc-openclaw/telegram-mirror/turn] working card send failed: ${err.message}\n`);
|
|
261
|
+
}
|
|
262
|
+
// Never claim — let the model handle the user message normally.
|
|
263
|
+
return undefined;
|
|
264
|
+
});
|
|
265
|
+
// Tool-call events — dump shapes once + best-effort apply to state machine.
|
|
266
|
+
api.on('before_tool_call', async (...args) => {
|
|
267
|
+
const event = args[0];
|
|
268
|
+
dumpShapeOnce('before_tool_call', event);
|
|
269
|
+
return undefined;
|
|
270
|
+
});
|
|
271
|
+
api.on('after_tool_call', async (...args) => {
|
|
272
|
+
const event = args[0];
|
|
273
|
+
dumpShapeOnce('after_tool_call', event);
|
|
274
|
+
return undefined;
|
|
275
|
+
});
|
|
276
|
+
api.on('before_agent_finalize', async (...args) => {
|
|
277
|
+
const event = args[0];
|
|
278
|
+
dumpShapeOnce('before_agent_finalize', event);
|
|
279
|
+
return undefined;
|
|
280
|
+
});
|
|
281
|
+
// reply_dispatch — finalize the working card by editing it to "✓ Done".
|
|
282
|
+
api.on('reply_dispatch', async (...args) => {
|
|
283
|
+
const event = args[0];
|
|
284
|
+
dumpShapeOnce('reply_dispatch', event);
|
|
285
|
+
// Try to extract chatId from the event. Fall back to a best-effort
|
|
286
|
+
// search across the cardState. On real gateway data, we'll know the
|
|
287
|
+
// exact field after the shape dump.
|
|
288
|
+
const ev = event;
|
|
289
|
+
const chatCandidate = ev?.sessionKey ??
|
|
290
|
+
(ev?.senderId !== undefined ? String(ev?.senderId) : undefined);
|
|
291
|
+
let chatId;
|
|
292
|
+
if (chatCandidate) {
|
|
293
|
+
const fromKey = chatIdFromSessionKey(chatCandidate);
|
|
294
|
+
chatId = fromKey.chatId || chatCandidate;
|
|
295
|
+
}
|
|
296
|
+
// If no chatId in event, finalize ALL active cards (rare; should
|
|
297
|
+
// only happen until we know the right field name).
|
|
298
|
+
const targets = chatId ? [chatId] : Array.from(cardState.keys());
|
|
299
|
+
for (const target of targets) {
|
|
300
|
+
const card = cardState.get(target);
|
|
301
|
+
if (!card)
|
|
302
|
+
continue;
|
|
303
|
+
card.sm.end(target);
|
|
304
|
+
try {
|
|
305
|
+
await editTg(target, card.messageId, renderTurn(card.sm.getTurn(target)));
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
process.stderr.write(`[cc-openclaw/telegram-mirror/turn] finalize edit failed: ${err.message}\n`);
|
|
309
|
+
}
|
|
310
|
+
cardState.delete(target);
|
|
311
|
+
}
|
|
312
|
+
return undefined;
|
|
313
|
+
});
|
|
314
|
+
process.stderr.write(`${PLUGIN_TAG} turn-render pipeline armed (before_tool_call, after_tool_call, before_agent_finalize, reply_dispatch).\n`);
|
|
189
315
|
logger.info(`${PLUGIN_TAG} subscribed to before_dispatch — ${MIRROR_COMMANDS.size} commands armed.`);
|
|
190
316
|
// v0.25.2 — extra stderr breadcrumb so even if logger.info is swallowed
|
|
191
317
|
// by the gateway's debug-tap wrapping, we still get proof of subscription.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-handler.js","sourceRoot":"","sources":["../../../../src/channels/telegram-mirror/inbound-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inbound-handler.js","sourceRoot":"","sources":["../../../../src/channels/telegram-mirror/inbound-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,UAAU,GAAG,uCAAuC,CAAC;AAwC3D;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,UAA8B;IAI1D,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,kDAAkD;IAClD,8DAA8D;IAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;IACxD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,GAAG,GAA0C,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxB,CAAC;AAqBD,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,WAAW,EAAE,IAAI,WAAW,EAAE;QAC9B,aAAa,EAAE,IAAI,aAAa,EAAE;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAE/D;;;;;;;GAOG;AACH,KAAK,UAAU,aAAa,CAC1B,MAAsB,EACtB,QAA4B,EAC5B,MAAqB;IAErB,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAClC,MAAM,MAAM,CACV,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EACtB,MAAM,CAAC,IAAI,EACX,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EACrD,MAAM,CAAC,YAAY,CACpB,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACtC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QACD,wDAAwD;QACxD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,iBAAiB,MAAM,CAAC,IAAI,2CAA2C,CAAC,CAAC;IACpG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;GAcG;AACH,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AACxE,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,0EAA0E;AAC1E,uEAAuE;AACvE,IAAI,eAAe,GAAoB,IAAI,OAAO,EAAU,CAAC;AAC7D,MAAM,OAAO,GAAsB,IAAI,GAAG,EAAE,CAAC;AAE7C,yDAAyD;AACzD,MAAM,UAAU,0BAA0B;IACxC,eAAe,GAAG,IAAI,OAAO,EAAU,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,GAAsB,EACtB,QAAsB,kBAAkB,EAAE;IAE1C,MAAM,MAAM,GAAkB,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAkB,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEnB,IAAI,eAAe,CAAC,GAAG,CAAC,GAAwB,CAAC,EAAE,CAAC;QAClD,kEAAkE;QAClE,oEAAoE;QACpE,gEAAgE;QAChE,uEAAuE;QACvE,oDAAoD;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,UAAU,6FAA6F,CAC3G,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,eAAe,CAAC,GAAG,CAAC,GAAwB,CAAC,CAAC;IAE9C,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,IAAe,EAAgC,EAAE;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAA8B,CAAC;QACnD,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC;QACnD,IAAI,KAAK,CAAC,GAAG,EAAE,cAAc;YAAE,OAAO,SAAS,CAAC;QAEhD,oEAAoE;QACpE,wEAAwE;QACxE,MAAM,IAAI,GACR,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oEAAoE,CACrE,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,oEAAoE;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oEAAoE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAC1G,CAAC;QAEF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0DAA0D,MAAM,CAAC,GAAG,kBAAkB,CACvF,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,+DAA+D;QAC/D,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5B,IAAI,QAAQ,GAAuB,OAAO,CAAC,QAAQ,CAAC;QACpD,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1G,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8EAA8E,KAAK,CAAC,UAAU,IAAI,GAAG,cAAc,KAAK,CAAC,QAAQ,IAAI,GAAG,KAAK,CAC9I,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS;YAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,CAAC;QAE7E,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE;YACrC,MAAM;YACN,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,UAAU,gBAAgB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,MAAM,aAAa,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACzK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,wEAAwE;IACxE,oEAAoE;IACpE,oEAAoE;IACpE,wDAAwD;IACxD,EAAE;IACF,sEAAsE;IACtE,sEAAsE;IACtE,qBAAqB;IACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuD,CAAC;IACjF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,SAAS,aAAa,CAAC,SAAiB,EAAE,KAAc;QACtD,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,SAAS,kBAAkB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CACzF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,SAAS,uBAAwB,GAAa,CAAC,OAAO,IAAI,CACjG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,oCAAoC;IACpC,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,IAAe,EAAgC,EAAE;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAA8B,CAAC;QACnD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC;QAC7D,IAAI,KAAK,CAAC,GAAG,EAAE,cAAc;YAAE,OAAO,SAAS,CAAC;QAEhD,MAAM,IAAI,GACR,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAE/C,+DAA+D;QAC/D,qDAAqD;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAEhE,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,CAAC;QAE5F,mEAAmE;QACnE,MAAM,EAAE,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAClC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,MAAM,EACN,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC,EAC/B,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CACtD,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;YACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8DAA8D,MAAM,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAChI,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gEAAiE,GAAa,CAAC,OAAO,IAAI,CAC3F,CAAC;QACJ,CAAC;QACD,gEAAgE;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,GAAG,IAAe,EAAsB,EAAE;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,IAAe,EAAsB,EAAE;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,aAAa,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,EAAE,CAAC,uBAAuB,EAAE,KAAK,EAAE,GAAG,IAAe,EAAsB,EAAE;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,aAAa,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,IAAe,EAAsB,EAAE;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACvC,mEAAmE;QACnE,oEAAoE;QACpE,oCAAoC;QACpC,MAAM,EAAE,GAAG,KAA4C,CAAC;QACxD,MAAM,aAAa,GAChB,EAAE,EAAE,UAAiC;YACtC,CAAC,EAAE,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,MAA0B,CAAC;QAC/B,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;YACpD,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;QAC3C,CAAC;QACD,iEAAiE;QACjE,mDAAmD;QACnD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;YAC7E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4DAA6D,GAAa,CAAC,OAAO,IAAI,CACvF,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,UAAU,2GAA2G,CACzH,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,oCAAoC,eAAe,CAAC,IAAI,kBAAkB,CAAC,CAAC;IACrG,wEAAwE;IACxE,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,UAAU,oCAAoC,eAAe,CAAC,IAAI,oBAAoB,CAC1F,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M1 (perf overhaul idea #1) — resident-CLI pool per chat_id.
|
|
3
|
+
*
|
|
4
|
+
* Tracks per-chat persistent `claude` child handles. The actual spawn,
|
|
5
|
+
* stdin framing, and process supervision belong to session-manager —
|
|
6
|
+
* this module owns the (chatId → handle) map, the acquire/release
|
|
7
|
+
* lifecycle, and the idle-eviction watchdog.
|
|
8
|
+
*
|
|
9
|
+
* Flag: CC_OPENCLAW_PERF_RESIDENT_CLI (default OFF, medium risk —
|
|
10
|
+
* lifecycle/leak management requires watchdog).
|
|
11
|
+
*
|
|
12
|
+
* Eviction: handles idle longer than IDLE_TIMEOUT_MS are released. Cap
|
|
13
|
+
* at MAX_POOL_SIZE prevents unbounded growth on multi-chat workloads.
|
|
14
|
+
*/
|
|
15
|
+
export declare const IDLE_TIMEOUT_MS: number;
|
|
16
|
+
export declare const MAX_POOL_SIZE = 32;
|
|
17
|
+
export interface ResidentCliHandle {
|
|
18
|
+
/** Opaque per-process identifier; session-manager owns the actual subprocess. */
|
|
19
|
+
pid: number;
|
|
20
|
+
chatId: string;
|
|
21
|
+
spawnedAt: number;
|
|
22
|
+
lastUsedAt: number;
|
|
23
|
+
}
|
|
24
|
+
export interface AcquireResult {
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
handle: ResidentCliHandle | null;
|
|
27
|
+
reason: 'flag_off' | 'cached' | 'evicted_stale' | 'pool_full' | 'no_factory';
|
|
28
|
+
}
|
|
29
|
+
/** Register the actual spawn callback. Called by session-manager bootstrap. */
|
|
30
|
+
export declare function setHandleFactory(fn: ((chatId: string) => ResidentCliHandle | null) | null): void;
|
|
31
|
+
/**
|
|
32
|
+
* Acquire (or create) the resident handle for chatId. Evicts stale handles
|
|
33
|
+
* before serving new ones so the eviction work is amortized across acquires.
|
|
34
|
+
*/
|
|
35
|
+
export declare function acquireResidentCli(chatId: string, now?: number): AcquireResult;
|
|
36
|
+
/** Release the handle (does not kill the subprocess; just marks idle). */
|
|
37
|
+
export declare function releaseResidentCli(chatId: string): boolean;
|
|
38
|
+
export declare function getPoolSize(): number;
|
|
39
|
+
export declare function _resetResidentCliPoolForTests(): void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M1 (perf overhaul idea #1) — resident-CLI pool per chat_id.
|
|
3
|
+
*
|
|
4
|
+
* Tracks per-chat persistent `claude` child handles. The actual spawn,
|
|
5
|
+
* stdin framing, and process supervision belong to session-manager —
|
|
6
|
+
* this module owns the (chatId → handle) map, the acquire/release
|
|
7
|
+
* lifecycle, and the idle-eviction watchdog.
|
|
8
|
+
*
|
|
9
|
+
* Flag: CC_OPENCLAW_PERF_RESIDENT_CLI (default OFF, medium risk —
|
|
10
|
+
* lifecycle/leak management requires watchdog).
|
|
11
|
+
*
|
|
12
|
+
* Eviction: handles idle longer than IDLE_TIMEOUT_MS are released. Cap
|
|
13
|
+
* at MAX_POOL_SIZE prevents unbounded growth on multi-chat workloads.
|
|
14
|
+
*/
|
|
15
|
+
import { getPerfResidentCliEnabled } from '../config.js';
|
|
16
|
+
export const IDLE_TIMEOUT_MS = 5 * 60_000;
|
|
17
|
+
export const MAX_POOL_SIZE = 32;
|
|
18
|
+
const pool = new Map();
|
|
19
|
+
let handleFactory = null;
|
|
20
|
+
/** Register the actual spawn callback. Called by session-manager bootstrap. */
|
|
21
|
+
export function setHandleFactory(fn) {
|
|
22
|
+
handleFactory = fn;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Acquire (or create) the resident handle for chatId. Evicts stale handles
|
|
26
|
+
* before serving new ones so the eviction work is amortized across acquires.
|
|
27
|
+
*/
|
|
28
|
+
export function acquireResidentCli(chatId, now = Date.now()) {
|
|
29
|
+
if (!getPerfResidentCliEnabled())
|
|
30
|
+
return { enabled: false, handle: null, reason: 'flag_off' };
|
|
31
|
+
if (!chatId)
|
|
32
|
+
return { enabled: true, handle: null, reason: 'no_factory' };
|
|
33
|
+
// Evict stale handles first.
|
|
34
|
+
for (const [k, v] of pool) {
|
|
35
|
+
if (now - v.lastUsedAt > IDLE_TIMEOUT_MS)
|
|
36
|
+
pool.delete(k);
|
|
37
|
+
}
|
|
38
|
+
const existing = pool.get(chatId);
|
|
39
|
+
if (existing) {
|
|
40
|
+
existing.lastUsedAt = now;
|
|
41
|
+
return { enabled: true, handle: existing, reason: 'cached' };
|
|
42
|
+
}
|
|
43
|
+
if (pool.size >= MAX_POOL_SIZE) {
|
|
44
|
+
return { enabled: true, handle: null, reason: 'pool_full' };
|
|
45
|
+
}
|
|
46
|
+
if (!handleFactory)
|
|
47
|
+
return { enabled: true, handle: null, reason: 'no_factory' };
|
|
48
|
+
const handle = handleFactory(chatId);
|
|
49
|
+
if (!handle)
|
|
50
|
+
return { enabled: true, handle: null, reason: 'no_factory' };
|
|
51
|
+
pool.set(chatId, handle);
|
|
52
|
+
return { enabled: true, handle, reason: 'cached' };
|
|
53
|
+
}
|
|
54
|
+
/** Release the handle (does not kill the subprocess; just marks idle). */
|
|
55
|
+
export function releaseResidentCli(chatId) {
|
|
56
|
+
return pool.delete(chatId);
|
|
57
|
+
}
|
|
58
|
+
export function getPoolSize() { return pool.size; }
|
|
59
|
+
export function _resetResidentCliPoolForTests() { pool.clear(); handleFactory = null; }
|
|
60
|
+
//# sourceMappingURL=resident-cli-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resident-cli-pool.js","sourceRoot":"","sources":["../../../../src/lib/perf/resident-cli-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAUhC,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6B,CAAC;AAQlD,IAAI,aAAa,GAA0D,IAAI,CAAC;AAEhF,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,EAAyD;IACxF,aAAa,GAAG,EAAE,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACzE,IAAI,CAAC,yBAAyB,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC9F,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC1E,6BAA6B;IAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,GAAG,GAAG,CAAC,CAAC,UAAU,GAAG,eAAe;YAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,aAAa;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACjF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC1E,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACrD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,MAAM,UAAU,6BAA6B,KAAW,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PatchSpec: sysprompt-strip
|
|
3
|
-
*
|
|
4
|
-
* Establishes the file convention for Phase E#3. NOT REGISTERED with any
|
|
5
|
-
* PatchManifest yet — this is the documented template that real PatchSpec
|
|
6
|
-
* files mirror as the cwd-patch.ts decomposition proceeds.
|
|
7
|
-
*
|
|
8
|
-
* Pattern for Phase E#3:
|
|
9
|
-
* 1. One file per logical patch under `src/patches/<id>.spec.ts`.
|
|
10
|
-
* 2. File <200 LOC (INITIAL.md §NF2).
|
|
11
|
-
* 3. Exports a single `PatchSpec` instance as a named export.
|
|
12
|
-
* 4. `resolve()` owns its upstream symbol lookup — no global target arg.
|
|
13
|
-
* 5. `expectedShape` is sync, returns boolean; checks signature/props.
|
|
14
|
-
* 6. `expectedBehavior` is async; runs a tiny invocation; <100ms.
|
|
15
|
-
* 7. `install` + `uninstall` are paired and round-trip-safe.
|
|
16
|
-
* 8. A companion `tests/patches/<id>.test.ts` proves shape + mutation necessity.
|
|
17
|
-
*
|
|
18
|
-
* Functional source for sysprompt-strip lives at `src/lib/sysprompt-strip.ts`
|
|
19
|
-
* (pure function, reused as-is per INITIAL.md §Reuse). The wrapper that
|
|
20
|
-
* registers it as a Claude Code prototype patch lives at
|
|
21
|
-
* `src/session-bootstrap/sysprompt-strip.ts`. Phase E#3 converts that wrapper
|
|
22
|
-
* into the structured PatchSpec form below.
|
|
23
|
-
*/
|
|
24
|
-
import type { PatchSpec } from '../lifecycle/patch-manifest.js';
|
|
25
|
-
/**
|
|
26
|
-
* Placeholder target shape. Phase E#3 narrows this to the actual
|
|
27
|
-
* SessionManager.prototype.startSession (or equivalent upstream symbol).
|
|
28
|
-
*/
|
|
29
|
-
interface SyspromptStripTarget {
|
|
30
|
-
readonly __placeholder: true;
|
|
31
|
-
}
|
|
32
|
-
export declare const syspromptStripSpec: PatchSpec<SyspromptStripTarget>;
|
|
33
|
-
export {};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PatchSpec: sysprompt-strip
|
|
3
|
-
*
|
|
4
|
-
* Establishes the file convention for Phase E#3. NOT REGISTERED with any
|
|
5
|
-
* PatchManifest yet — this is the documented template that real PatchSpec
|
|
6
|
-
* files mirror as the cwd-patch.ts decomposition proceeds.
|
|
7
|
-
*
|
|
8
|
-
* Pattern for Phase E#3:
|
|
9
|
-
* 1. One file per logical patch under `src/patches/<id>.spec.ts`.
|
|
10
|
-
* 2. File <200 LOC (INITIAL.md §NF2).
|
|
11
|
-
* 3. Exports a single `PatchSpec` instance as a named export.
|
|
12
|
-
* 4. `resolve()` owns its upstream symbol lookup — no global target arg.
|
|
13
|
-
* 5. `expectedShape` is sync, returns boolean; checks signature/props.
|
|
14
|
-
* 6. `expectedBehavior` is async; runs a tiny invocation; <100ms.
|
|
15
|
-
* 7. `install` + `uninstall` are paired and round-trip-safe.
|
|
16
|
-
* 8. A companion `tests/patches/<id>.test.ts` proves shape + mutation necessity.
|
|
17
|
-
*
|
|
18
|
-
* Functional source for sysprompt-strip lives at `src/lib/sysprompt-strip.ts`
|
|
19
|
-
* (pure function, reused as-is per INITIAL.md §Reuse). The wrapper that
|
|
20
|
-
* registers it as a Claude Code prototype patch lives at
|
|
21
|
-
* `src/session-bootstrap/sysprompt-strip.ts`. Phase E#3 converts that wrapper
|
|
22
|
-
* into the structured PatchSpec form below.
|
|
23
|
-
*/
|
|
24
|
-
export const syspromptStripSpec = {
|
|
25
|
-
id: 'sysprompt-strip',
|
|
26
|
-
targetModule: 'claude-code/dist/session/SessionManager',
|
|
27
|
-
targetSymbol: 'SessionManager.prototype.startSession',
|
|
28
|
-
resolve() {
|
|
29
|
-
// Phase E#3 — replace with:
|
|
30
|
-
// const upstream = require('claude-code');
|
|
31
|
-
// return upstream.SessionManager.prototype;
|
|
32
|
-
return { __placeholder: true };
|
|
33
|
-
},
|
|
34
|
-
expectedShape(_target) {
|
|
35
|
-
// Phase E#3 — verify SessionManager.prototype.startSession exists
|
|
36
|
-
// as a function with the expected arity.
|
|
37
|
-
return true;
|
|
38
|
-
},
|
|
39
|
-
async expectedBehavior(_target) {
|
|
40
|
-
// Phase E#3 — call a stub startSession with a known sysprompt and
|
|
41
|
-
// verify the stripped output round-trips through `stripSysprompt()`
|
|
42
|
-
// at `src/lib/sysprompt-strip.ts`.
|
|
43
|
-
return true;
|
|
44
|
-
},
|
|
45
|
-
install(_target) {
|
|
46
|
-
// Phase E#3 — replace with the prototype-patch closure currently in
|
|
47
|
-
// `src/session-bootstrap/sysprompt-strip.ts`.
|
|
48
|
-
},
|
|
49
|
-
uninstall(_target) {
|
|
50
|
-
// Phase E#3 — restore the original SessionManager.prototype.startSession.
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=sysprompt-strip.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sysprompt-strip.spec.js","sourceRoot":"","sources":["../../../src/patches/sysprompt-strip.spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAYH,MAAM,CAAC,MAAM,kBAAkB,GAAoC;IACjE,EAAE,EAAE,iBAAiB;IACrB,YAAY,EAAE,yCAAyC;IACvD,YAAY,EAAE,uCAAuC;IAErD,OAAO;QACL,4BAA4B;QAC5B,6CAA6C;QAC7C,8CAA8C;QAC9C,OAAO,EAAE,aAAa,EAAE,IAAI,EAA0B,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,OAA6B;QACzC,kEAAkE;QAClE,yCAAyC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAA6B;QAClD,kEAAkE;QAClE,oEAAoE;QACpE,mCAAmC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAA6B;QACnC,oEAAoE;QACpE,8CAA8C;IAChD,CAAC;IAED,SAAS,CAAC,OAA6B;QACrC,0EAA0E;IAC5E,CAAC;CACF,CAAC"}
|