@bike4mind/cli 0.2.49-fix-telemetry-alert-debug.21031 → 0.2.49-fix-cli-stream-resilience-v2.21034
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/{chunk-4ZO5RNWO.js → chunk-23TGZ6N5.js} +59 -21
- package/dist/{chunk-F6IY547T.js → chunk-2JIF5XRA.js} +1 -1
- package/dist/{chunk-5SZI2XFM.js → chunk-IIZOOF6Y.js} +6 -6
- package/dist/{chunk-WKPO5JDF.js → chunk-IQ7YLDB3.js} +1 -1
- package/dist/{chunk-M7QGYBN7.js → chunk-QVLM2SPH.js} +55 -22
- package/dist/{chunk-OFKZXY6L.js → chunk-ZRPYKOGY.js} +1 -1
- package/dist/commands/doctorCommand.js +1 -1
- package/dist/commands/headlessCommand.js +5 -5
- package/dist/commands/updateCommand.js +1 -1
- package/dist/{create-6Z46TX3C.js → create-HESERR22.js} +2 -2
- package/dist/index.js +14 -11
- package/dist/{mementoService-XAAA3Q54.js → mementoService-SN66CF7P.js} +2 -2
- package/dist/{src-FDPAPWTO.js → src-T2NKBHHO.js} +1 -1
- package/dist/{subtractCredits-7SHS6DXL.js → subtractCredits-TW7H7B6I.js} +2 -2
- package/package.json +6 -6
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getOpenWeatherKey,
|
|
5
5
|
getSerperKey,
|
|
6
6
|
getWolframAlphaKey
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2JIF5XRA.js";
|
|
8
8
|
import {
|
|
9
9
|
BFLImageService,
|
|
10
10
|
BaseStorage,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
OpenAIBackend,
|
|
17
17
|
OpenAIImageService,
|
|
18
18
|
XAIImageService
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-QVLM2SPH.js";
|
|
20
20
|
import {
|
|
21
21
|
Logger
|
|
22
22
|
} from "./chunk-PFBYGCOW.js";
|
|
@@ -14017,40 +14017,25 @@ var AnomalyAlertService = class _AnomalyAlertService {
|
|
|
14017
14017
|
* Check if an alert should be sent and send it if appropriate
|
|
14018
14018
|
*/
|
|
14019
14019
|
async checkAndAlert(telemetry) {
|
|
14020
|
-
console.log("[AnomalyAlert] DEBUG: checkAndAlert called", {
|
|
14021
|
-
enabled: this.config.enabled,
|
|
14022
|
-
isSlackConfigured: this.isSlackConfigured()
|
|
14023
|
-
});
|
|
14024
14020
|
if (!this.config.enabled || !this.isSlackConfigured()) {
|
|
14025
|
-
console.log("[AnomalyAlert] DEBUG: Early return - not enabled or Slack not configured");
|
|
14026
14021
|
return false;
|
|
14027
14022
|
}
|
|
14028
14023
|
const { anomalies } = telemetry;
|
|
14029
14024
|
const threshold = this.config.alertThreshold ?? ALERT_THRESHOLDS.warning;
|
|
14030
|
-
console.log("[AnomalyAlert] DEBUG: Threshold check", {
|
|
14031
|
-
anomalyScore: anomalies.anomalyScore,
|
|
14032
|
-
threshold
|
|
14033
|
-
});
|
|
14034
14025
|
if (anomalies.anomalyScore < threshold) {
|
|
14035
|
-
console.log("[AnomalyAlert] DEBUG: Score below threshold");
|
|
14036
14026
|
return false;
|
|
14037
14027
|
}
|
|
14038
|
-
console.log("[AnomalyAlert] DEBUG: Checking deduplication", { dedupKey: anomalies.dedupKey });
|
|
14039
14028
|
const isDup = await this.checkDeduplication(anomalies.dedupKey);
|
|
14040
|
-
console.log("[AnomalyAlert] DEBUG: Dedup result", { isDup });
|
|
14041
14029
|
if (isDup) {
|
|
14042
14030
|
this.logger.info(`\u{1F4CA} [AnomalyAlert] Suppressed duplicate alert: ${anomalies.dedupKey}`);
|
|
14043
14031
|
return false;
|
|
14044
14032
|
}
|
|
14045
14033
|
try {
|
|
14046
|
-
console.log("[AnomalyAlert] DEBUG: Sending Slack alert");
|
|
14047
14034
|
const message = this.formatSlackMessage(telemetry);
|
|
14048
14035
|
await this.sendSlackAlert(message);
|
|
14049
14036
|
this.logger.info(`\u{1F4CA} [AnomalyAlert] Alert sent for ${anomalies.primaryAnomaly} (score: ${anomalies.anomalyScore})`);
|
|
14050
|
-
console.log("[AnomalyAlert] DEBUG: Alert sent successfully");
|
|
14051
14037
|
return true;
|
|
14052
14038
|
} catch (error) {
|
|
14053
|
-
console.log("[AnomalyAlert] DEBUG: Failed to send alert", { error: String(error) });
|
|
14054
14039
|
this.logger.error(`\u{1F4CA} [AnomalyAlert] Failed to send alert:`, error);
|
|
14055
14040
|
return false;
|
|
14056
14041
|
}
|
|
@@ -16157,17 +16142,48 @@ function extractUsageInfo(parsed) {
|
|
|
16157
16142
|
usdCost: parsed.credits?.usdCost
|
|
16158
16143
|
};
|
|
16159
16144
|
}
|
|
16160
|
-
var ServerLlmBackend = class {
|
|
16145
|
+
var ServerLlmBackend = class _ServerLlmBackend {
|
|
16161
16146
|
constructor(options) {
|
|
16162
16147
|
this.completionsEndpoint = "/api/ai/v1/completions";
|
|
16163
16148
|
this.apiClient = options.apiClient;
|
|
16164
16149
|
this.currentModel = options.model;
|
|
16165
16150
|
}
|
|
16151
|
+
static {
|
|
16152
|
+
/** Max retries for transient stream failures (e.g. missing [DONE]) */
|
|
16153
|
+
this.MAX_STREAM_RETRIES = 2;
|
|
16154
|
+
}
|
|
16166
16155
|
/**
|
|
16167
16156
|
* Make authenticated LLM completion request via server
|
|
16168
|
-
* Parses SSE stream and invokes callback for each event
|
|
16157
|
+
* Parses SSE stream and invokes callback for each event.
|
|
16158
|
+
* Automatically retries on transient stream failures (e.g. stream ending prematurely).
|
|
16169
16159
|
*/
|
|
16170
16160
|
async complete(model, messages, options, callback) {
|
|
16161
|
+
let lastError;
|
|
16162
|
+
for (let attempt = 0; attempt <= _ServerLlmBackend.MAX_STREAM_RETRIES; attempt++) {
|
|
16163
|
+
if (attempt > 0) {
|
|
16164
|
+
logger.warn(
|
|
16165
|
+
`[ServerLlmBackend] Retrying stream (attempt ${attempt + 1}/${_ServerLlmBackend.MAX_STREAM_RETRIES + 1})...`
|
|
16166
|
+
);
|
|
16167
|
+
}
|
|
16168
|
+
try {
|
|
16169
|
+
await this.completeOnce(model, messages, options, callback);
|
|
16170
|
+
return;
|
|
16171
|
+
} catch (error) {
|
|
16172
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
16173
|
+
const isTransientStreamError = lastError.message.includes("Stream ended prematurely");
|
|
16174
|
+
const isAborted = options.abortSignal?.aborted;
|
|
16175
|
+
if (!isTransientStreamError || isAborted) {
|
|
16176
|
+
throw lastError;
|
|
16177
|
+
}
|
|
16178
|
+
logger.warn(`[ServerLlmBackend] Transient stream failure: ${lastError.message}`);
|
|
16179
|
+
}
|
|
16180
|
+
}
|
|
16181
|
+
throw lastError ?? new Error("Stream failed after all retry attempts");
|
|
16182
|
+
}
|
|
16183
|
+
/**
|
|
16184
|
+
* Single attempt at completing a streaming request.
|
|
16185
|
+
*/
|
|
16186
|
+
async completeOnce(model, messages, options, callback) {
|
|
16171
16187
|
logger.debug(`[ServerLlmBackend] Starting complete() with model: ${model}`);
|
|
16172
16188
|
if (options.abortSignal?.aborted) {
|
|
16173
16189
|
logger.debug("[ServerLlmBackend] Request aborted before start");
|
|
@@ -16368,8 +16384,30 @@ var ServerLlmBackend = class {
|
|
|
16368
16384
|
});
|
|
16369
16385
|
response.data.on("end", () => {
|
|
16370
16386
|
if (!receivedDone) {
|
|
16371
|
-
|
|
16372
|
-
|
|
16387
|
+
const hasAccumulatedData = accumulatedText.trim().length > 0 || toolsUsed.length > 0;
|
|
16388
|
+
logger.warn(
|
|
16389
|
+
`[ServerLlmBackend] Stream ended without [DONE] signal. Accumulated text: ${accumulatedText.length} chars, tools: ${toolsUsed.length}`
|
|
16390
|
+
);
|
|
16391
|
+
if (hasAccumulatedData) {
|
|
16392
|
+
const cleanedText = stripThinkingBlocks(accumulatedText);
|
|
16393
|
+
streamLogger.streamComplete(accumulatedText);
|
|
16394
|
+
if (toolsUsed.length > 0) {
|
|
16395
|
+
const info = {
|
|
16396
|
+
toolsUsed,
|
|
16397
|
+
thinking: thinkingBlocks.length > 0 ? thinkingBlocks : void 0,
|
|
16398
|
+
...lastUsageInfo
|
|
16399
|
+
};
|
|
16400
|
+
callback([cleanedText], info).then(() => resolve3(), reject);
|
|
16401
|
+
} else if (cleanedText) {
|
|
16402
|
+
callback([cleanedText], lastUsageInfo).then(() => resolve3(), reject);
|
|
16403
|
+
} else {
|
|
16404
|
+
resolve3();
|
|
16405
|
+
}
|
|
16406
|
+
} else {
|
|
16407
|
+
reject(
|
|
16408
|
+
new Error("Stream ended prematurely without receiving any data. The server may be experiencing issues.")
|
|
16409
|
+
);
|
|
16410
|
+
}
|
|
16373
16411
|
} else {
|
|
16374
16412
|
logger.debug("[ServerLlmBackend] Stream ended, [DONE] handler will resolve");
|
|
16375
16413
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// package.json
|
|
4
4
|
var package_default = {
|
|
5
5
|
name: "@bike4mind/cli",
|
|
6
|
-
version: "0.2.49-fix-
|
|
6
|
+
version: "0.2.49-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
7
7
|
type: "module",
|
|
8
8
|
description: "Interactive CLI tool for Bike4Mind with ReAct agents",
|
|
9
9
|
license: "UNLICENSED",
|
|
@@ -118,10 +118,10 @@ var package_default = {
|
|
|
118
118
|
},
|
|
119
119
|
devDependencies: {
|
|
120
120
|
"@bike4mind/agents": "0.1.0",
|
|
121
|
-
"@bike4mind/common": "2.67.1-fix-
|
|
122
|
-
"@bike4mind/mcp": "1.33.11-fix-
|
|
123
|
-
"@bike4mind/services": "2.63.1-fix-
|
|
124
|
-
"@bike4mind/utils": "2.15.4-fix-
|
|
121
|
+
"@bike4mind/common": "2.67.1-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
122
|
+
"@bike4mind/mcp": "1.33.11-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
123
|
+
"@bike4mind/services": "2.63.1-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
124
|
+
"@bike4mind/utils": "2.15.4-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
125
125
|
"@types/better-sqlite3": "^7.6.13",
|
|
126
126
|
"@types/diff": "^5.0.9",
|
|
127
127
|
"@types/jsonwebtoken": "^9.0.4",
|
|
@@ -140,7 +140,7 @@ var package_default = {
|
|
|
140
140
|
optionalDependencies: {
|
|
141
141
|
"@vscode/ripgrep": "^1.17.0"
|
|
142
142
|
},
|
|
143
|
-
gitHead: "
|
|
143
|
+
gitHead: "97b5949c30c0a41a50fbfec604371ebff4c029a2"
|
|
144
144
|
};
|
|
145
145
|
|
|
146
146
|
// src/utils/updateChecker.ts
|
|
@@ -6578,6 +6578,54 @@ var GeminiBackend = class {
|
|
|
6578
6578
|
// ../../b4m-core/packages/utils/dist/src/llm/ollamaBackend.js
|
|
6579
6579
|
import { Ollama } from "ollama";
|
|
6580
6580
|
import { Agent as Agent2 } from "undici";
|
|
6581
|
+
|
|
6582
|
+
// ../../b4m-core/packages/utils/dist/src/llm/messageFormatConverter.js
|
|
6583
|
+
function hasToolCalls(msg) {
|
|
6584
|
+
return msg.role === "assistant" && "tool_calls" in msg;
|
|
6585
|
+
}
|
|
6586
|
+
function convertMessageToOpenAIFormat(msg) {
|
|
6587
|
+
if (hasToolCalls(msg)) {
|
|
6588
|
+
return [{ role: "assistant", content: null, tool_calls: msg.tool_calls }];
|
|
6589
|
+
}
|
|
6590
|
+
if (msg.role === "assistant" && Array.isArray(msg.content)) {
|
|
6591
|
+
const contentBlocks = msg.content;
|
|
6592
|
+
const toolUseBlocks = contentBlocks.filter((b) => b.type === "tool_use");
|
|
6593
|
+
if (toolUseBlocks.length > 0) {
|
|
6594
|
+
const textParts = contentBlocks.filter((b) => b.type === "text").map((b) => b.text).filter(Boolean);
|
|
6595
|
+
return [
|
|
6596
|
+
{
|
|
6597
|
+
role: "assistant",
|
|
6598
|
+
content: textParts.length > 0 ? textParts.join("\n") : null,
|
|
6599
|
+
tool_calls: toolUseBlocks.map((b) => ({
|
|
6600
|
+
id: b.id,
|
|
6601
|
+
type: "function",
|
|
6602
|
+
function: {
|
|
6603
|
+
name: b.name,
|
|
6604
|
+
arguments: typeof b.input === "string" ? b.input : JSON.stringify(b.input)
|
|
6605
|
+
}
|
|
6606
|
+
}))
|
|
6607
|
+
}
|
|
6608
|
+
];
|
|
6609
|
+
}
|
|
6610
|
+
}
|
|
6611
|
+
if (msg.role === "user" && Array.isArray(msg.content)) {
|
|
6612
|
+
const contentBlocks = msg.content;
|
|
6613
|
+
const toolResultBlocks = contentBlocks.filter((b) => b.type === "tool_result");
|
|
6614
|
+
if (toolResultBlocks.length > 0) {
|
|
6615
|
+
return toolResultBlocks.map((b) => ({
|
|
6616
|
+
role: "tool",
|
|
6617
|
+
content: typeof b.content === "string" ? b.content : JSON.stringify(b.content),
|
|
6618
|
+
tool_call_id: b.tool_use_id
|
|
6619
|
+
}));
|
|
6620
|
+
}
|
|
6621
|
+
}
|
|
6622
|
+
return [msg];
|
|
6623
|
+
}
|
|
6624
|
+
function convertMessagesToOpenAIFormat(messages) {
|
|
6625
|
+
return messages.flatMap(convertMessageToOpenAIFormat);
|
|
6626
|
+
}
|
|
6627
|
+
|
|
6628
|
+
// ../../b4m-core/packages/utils/dist/src/llm/ollamaBackend.js
|
|
6581
6629
|
var OllamaBackend = class {
|
|
6582
6630
|
_host;
|
|
6583
6631
|
_api;
|
|
@@ -6741,9 +6789,12 @@ var OllamaBackend = class {
|
|
|
6741
6789
|
/**
|
|
6742
6790
|
* Map IMessage[] to Ollama's Message[], preserving tool_calls for multi-turn
|
|
6743
6791
|
* tool conversations (added by pushToolMessages).
|
|
6792
|
+
* First converts B4M standard format (tool_use/tool_result) to OpenAI-compatible
|
|
6793
|
+
* format since Ollama uses the same tool_calls/role:tool convention.
|
|
6744
6794
|
*/
|
|
6745
6795
|
buildMessages(messages) {
|
|
6746
|
-
|
|
6796
|
+
const converted = convertMessagesToOpenAIFormat(messages);
|
|
6797
|
+
return converted.map((msg) => {
|
|
6747
6798
|
const raw = msg;
|
|
6748
6799
|
const mapped = {
|
|
6749
6800
|
role: msg.role,
|
|
@@ -7837,16 +7888,8 @@ Only when someone asks, remember that you are specifically the ${model} model.`;
|
|
|
7837
7888
|
role: "system",
|
|
7838
7889
|
content: systemContent
|
|
7839
7890
|
};
|
|
7840
|
-
const
|
|
7841
|
-
|
|
7842
|
-
return {
|
|
7843
|
-
...msg,
|
|
7844
|
-
content: null,
|
|
7845
|
-
tool_calls: msg.tool_calls
|
|
7846
|
-
};
|
|
7847
|
-
}
|
|
7848
|
-
return msg;
|
|
7849
|
-
});
|
|
7891
|
+
const convertedMessages = convertMessagesToOpenAIFormat(filteredMessages);
|
|
7892
|
+
const formattedMessages = convertedMessages;
|
|
7850
7893
|
return isO1Model ? formattedMessages : [systemMessage, ...formattedMessages];
|
|
7851
7894
|
}
|
|
7852
7895
|
pushToolMessages(messages, tool, result, _thinkingBlocks) {
|
|
@@ -8369,17 +8412,7 @@ var XAIBackend = class {
|
|
|
8369
8412
|
}
|
|
8370
8413
|
}
|
|
8371
8414
|
formatMessages(messages) {
|
|
8372
|
-
|
|
8373
|
-
if (msg.role === "assistant" && msg.tool_calls) {
|
|
8374
|
-
return {
|
|
8375
|
-
...msg,
|
|
8376
|
-
content: null,
|
|
8377
|
-
tool_calls: msg.tool_calls
|
|
8378
|
-
};
|
|
8379
|
-
}
|
|
8380
|
-
return msg;
|
|
8381
|
-
});
|
|
8382
|
-
return formattedMessages;
|
|
8415
|
+
return convertMessagesToOpenAIFormat(messages);
|
|
8383
8416
|
}
|
|
8384
8417
|
formatTools(tools = []) {
|
|
8385
8418
|
return tools.map((tool) => ({
|
|
@@ -36,13 +36,13 @@ import {
|
|
|
36
36
|
isReadOnlyTool,
|
|
37
37
|
loadContextFiles,
|
|
38
38
|
setWebSocketToolExecutor
|
|
39
|
-
} from "../chunk-
|
|
39
|
+
} from "../chunk-23TGZ6N5.js";
|
|
40
40
|
import "../chunk-BDQBOLYG.js";
|
|
41
|
-
import "../chunk-
|
|
41
|
+
import "../chunk-2JIF5XRA.js";
|
|
42
42
|
import "../chunk-GQGOWACU.js";
|
|
43
|
-
import "../chunk-
|
|
44
|
-
import "../chunk-
|
|
45
|
-
import "../chunk-
|
|
43
|
+
import "../chunk-ZRPYKOGY.js";
|
|
44
|
+
import "../chunk-IQ7YLDB3.js";
|
|
45
|
+
import "../chunk-QVLM2SPH.js";
|
|
46
46
|
import "../chunk-PFBYGCOW.js";
|
|
47
47
|
import "../chunk-BPFEGDC7.js";
|
|
48
48
|
import {
|
package/dist/index.js
CHANGED
|
@@ -46,15 +46,15 @@ import {
|
|
|
46
46
|
setWebSocketToolExecutor,
|
|
47
47
|
substituteArguments,
|
|
48
48
|
warmFileCache
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-23TGZ6N5.js";
|
|
50
50
|
import "./chunk-BDQBOLYG.js";
|
|
51
|
-
import "./chunk-
|
|
51
|
+
import "./chunk-2JIF5XRA.js";
|
|
52
52
|
import "./chunk-GQGOWACU.js";
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-ZRPYKOGY.js";
|
|
54
|
+
import "./chunk-IQ7YLDB3.js";
|
|
55
55
|
import {
|
|
56
56
|
OllamaBackend
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-QVLM2SPH.js";
|
|
58
58
|
import "./chunk-PFBYGCOW.js";
|
|
59
59
|
import "./chunk-BPFEGDC7.js";
|
|
60
60
|
import {
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
import {
|
|
65
65
|
checkForUpdate,
|
|
66
66
|
package_default
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-IIZOOF6Y.js";
|
|
68
68
|
import {
|
|
69
69
|
selectActiveBackgroundAgents,
|
|
70
70
|
useCliStore
|
|
@@ -2940,11 +2940,10 @@ function CliApp() {
|
|
|
2940
2940
|
throw new Error("No websocketUrl or wsCompletionUrl in server config");
|
|
2941
2941
|
}
|
|
2942
2942
|
} catch (wsError) {
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
);
|
|
2943
|
+
logger.info("\u26A0\uFE0F WebSocket unavailable, using SSE fallback");
|
|
2944
|
+
logger.debug(`[WebSocket] Fallback reason: ${wsError instanceof Error ? wsError.message : String(wsError)}`);
|
|
2946
2945
|
if (wsError instanceof Error && wsError.stack) {
|
|
2947
|
-
|
|
2946
|
+
logger.debug(`[WebSocket] Stack: ${wsError.stack}`);
|
|
2948
2947
|
}
|
|
2949
2948
|
wsManager = null;
|
|
2950
2949
|
setWebSocketToolExecutor(null);
|
|
@@ -3728,7 +3727,11 @@ Pull a model: ollama pull qwen3.5`
|
|
|
3728
3727
|
return;
|
|
3729
3728
|
}
|
|
3730
3729
|
}
|
|
3731
|
-
|
|
3730
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
3731
|
+
console.error(`
|
|
3732
|
+
\u274C ${errorMessage}
|
|
3733
|
+
`);
|
|
3734
|
+
logger.debug(`Full error details: ${error instanceof Error ? error.stack || error.message : String(error)}`);
|
|
3732
3735
|
} finally {
|
|
3733
3736
|
setState((prev) => ({ ...prev, abortController: null }));
|
|
3734
3737
|
useCliStore.getState().setIsThinking(false);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bike4mind/cli",
|
|
3
|
-
"version": "0.2.49-fix-
|
|
3
|
+
"version": "0.2.49-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Interactive CLI tool for Bike4Mind with ReAct agents",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -115,10 +115,10 @@
|
|
|
115
115
|
},
|
|
116
116
|
"devDependencies": {
|
|
117
117
|
"@bike4mind/agents": "0.1.0",
|
|
118
|
-
"@bike4mind/common": "2.67.1-fix-
|
|
119
|
-
"@bike4mind/mcp": "1.33.11-fix-
|
|
120
|
-
"@bike4mind/services": "2.63.1-fix-
|
|
121
|
-
"@bike4mind/utils": "2.15.4-fix-
|
|
118
|
+
"@bike4mind/common": "2.67.1-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
119
|
+
"@bike4mind/mcp": "1.33.11-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
120
|
+
"@bike4mind/services": "2.63.1-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
121
|
+
"@bike4mind/utils": "2.15.4-fix-cli-stream-resilience-v2.21034+97b5949c3",
|
|
122
122
|
"@types/better-sqlite3": "^7.6.13",
|
|
123
123
|
"@types/diff": "^5.0.9",
|
|
124
124
|
"@types/jsonwebtoken": "^9.0.4",
|
|
@@ -137,5 +137,5 @@
|
|
|
137
137
|
"optionalDependencies": {
|
|
138
138
|
"@vscode/ripgrep": "^1.17.0"
|
|
139
139
|
},
|
|
140
|
-
"gitHead": "
|
|
140
|
+
"gitHead": "97b5949c30c0a41a50fbfec604371ebff4c029a2"
|
|
141
141
|
}
|