@bike4mind/cli 3.1.0 → 3.3.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/{AgentHistoryStore-O2gKB5YG.mjs → AgentHistoryStore-CLidbOHG.mjs} +6214 -5711
- package/dist/{ConfigStore-RHqyXcSS.mjs → ConfigStore-DUATzLxB.mjs} +897 -345
- package/dist/{WorkItemsClient-cmw7WYBy.mjs → WorkItemsClient-BSoOblGp.mjs} +1 -1
- package/dist/{buildAgent-C0jmyDL4.mjs → buildAgent-DyZWK0LW.mjs} +39 -216
- package/dist/commands/acpCommand.mjs +25 -17
- package/dist/commands/apiCommand.mjs +1 -1
- package/dist/commands/doctorCommand.mjs +1 -1
- package/dist/commands/envCommand.mjs +1 -1
- package/dist/commands/headlessCommand.mjs +73 -41
- package/dist/commands/mcpCommand.mjs +3 -3
- package/dist/commands/pluginCommand.mjs +1 -1
- package/dist/commands/updateCommand.mjs +1 -1
- package/dist/{dist-B1bGf-yn.mjs → dist-DPP7UmK9.mjs} +2 -2
- package/dist/index.mjs +41 -19
- package/dist/{package-DsG8Tgvs.mjs → package-DYPVrada.mjs} +1 -1
- package/dist/{serve-CAfCQose.mjs → serve-w6v3rZiR.mjs} +2 -2
- package/package.json +11 -11
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as ConfigStore } from "../ConfigStore-
|
|
3
|
-
import { t as version } from "../package-
|
|
2
|
+
import { t as ConfigStore } from "../ConfigStore-DUATzLxB.mjs";
|
|
3
|
+
import { t as version } from "../package-DYPVrada.mjs";
|
|
4
4
|
//#region src/commands/mcpCommand.ts
|
|
5
5
|
/**
|
|
6
6
|
* External MCP commands (b4m mcp list, b4m mcp add, etc.)
|
|
@@ -70,7 +70,7 @@ async function handleMcpCommand(subcommand, argv) {
|
|
|
70
70
|
await handleDisable(config, argv.name, configStore);
|
|
71
71
|
break;
|
|
72
72
|
case "serve": {
|
|
73
|
-
const { handleMcpServeCommand } = await import("../serve-
|
|
73
|
+
const { handleMcpServeCommand } = await import("../serve-w6v3rZiR.mjs");
|
|
74
74
|
await handleMcpServeCommand({
|
|
75
75
|
http: Boolean(argv.http),
|
|
76
76
|
port: typeof argv.port === "number" ? argv.port : void 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as ConfigStore } from "../ConfigStore-
|
|
2
|
+
import { t as ConfigStore } from "../ConfigStore-DUATzLxB.mjs";
|
|
3
3
|
import { n as getDefaultPluginsDir, r as isFeatureEnabled, t as PluginStore } from "../PluginStore-DwvOJ-G3.mjs";
|
|
4
4
|
import { promises } from "fs";
|
|
5
5
|
import path from "path";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as version } from "../package-
|
|
2
|
+
import { t as version } from "../package-DYPVrada.mjs";
|
|
3
3
|
import { a as forceCheckForUpdate, c as isNpmPrefixWritable, d as shouldAttemptAutoUpdate, l as readCachedUpdate, n as REEXEC_GUARD_ENV, o as getAutoUpdatePreference, t as INSTALL_CMD, u as setAutoUpdatePreference } from "../updateChecker-CCLVVdH0.mjs";
|
|
4
4
|
import { t as checkRipgrep } from "../ripgrepCheck-BmkyTK2i.mjs";
|
|
5
5
|
import { execSync, spawnSync } from "child_process";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { t as version } from "./package-
|
|
2
|
+
import { b as logger, g as DeviceFlowClient, h as AuthenticatedApiClient, t as ConfigStore } from "./ConfigStore-DUATzLxB.mjs";
|
|
3
|
+
import { t as version } from "./package-DYPVrada.mjs";
|
|
4
4
|
import { isAxiosError } from "axios";
|
|
5
5
|
import { Readable } from "node:stream";
|
|
6
6
|
import { createParser } from "eventsource-parser";
|
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as
|
|
2
|
+
import { $ as CustomCommandStore, A as createAgentDelegateTool, B as DEFAULT_THOROUGHNESS, C as createTodoStore, D as createCoordinateTaskTool, E as parseAgentConfig, G as setWebSocketToolExecutor, H as buildSkillsPromptSection, I as ALWAYS_DENIED_FOR_AGENTS, L as DEFAULT_AGENT_MODEL, M as substituteArguments, N as PermissionManager, O as createResumeAgentTool, P as buildCliToolList, Q as RemoteSkillSource, R as DEFAULT_MAX_ITERATIONS, S as createFindDefinitionTool, T as createSkillTool, V as buildSystemPrompt, W as getProcessHooks, X as createToolSearchTool, Z as findIterationBoundary, _ as createDecisionLogTool, at as mergeCommands, b as createGetFileStructureTool, ct as searchFiles, d as createReviewGateStore, dt as COMPACTION_SUMMARY_MARKER, et as processFileReferences, f as createReviewGateTool, g as formatBlockersOutput, h as createBlockerTools, it as searchCommands, j as FallbackLlmBackend, k as createBackgroundAgentTools, lt as warmFileCache, m as createBlockerStore, nt as CheckpointStore, ot as rewireReservedNames, p as formatReviewGatesOutput, pt as MAX_PASTE_SIZE, q as getPlanModeFilePath, rt as SessionStore, s as buildSandbox, st as formatFileSize, tt as hasFileReferences, u as isConnectionDrop, v as createDecisionStore, w as createWriteTodosTool, x as createWorkItemTools, y as formatDecisionsOutput, z as DEFAULT_RETRY_CONFIG } from "./AgentHistoryStore-CLidbOHG.mjs";
|
|
3
3
|
import { a as selectLiveSubagentTokens, i as selectLiveSubagentCredits, n as selectActiveBackgroundShells, o as useCliStore, r as selectCompletedBackgroundShells, t as selectActiveBackgroundAgents } from "./store-BxmPEI3v.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { Bt as DELEGATION_PAYLOAD_SCHEMA_NAME, Gt as selfClaimedActorKindSchema, Ht as actorKindMarker, L as CREDIT_DEDUCT_TRANSACTION_TYPES, Pt as tokenEstimateMultiplier, R as ChatModels, S as isValidSessionId, Ut as actorKindSchema, Vt as actorColorIndex, Wt as delegationPayloadSchema, _ as LOCAL_DEV_URL, b as logger, bt as isEarlyStop, d as getCreditsUrl, f as getEnvironmentName, i as ToolCatalog, it as SUBQUEST_STATUS_VALUES, m as resolveApiEndpoint, n as extractCompactInstructions, p as requireApiUrl, t as ConfigStore, tt as REVIEW_GATE_STATUS_VALUES, u as ApiEndpointUnconfiguredError, x as SESSION_ID_PATTERN, y as parseApiUrl, zt as ACTOR_COLOR_SLOTS } from "./ConfigStore-DUATzLxB.mjs";
|
|
5
5
|
import { r as isFeatureEnabled, t as PluginStore } from "./PluginStore-DwvOJ-G3.mjs";
|
|
6
|
-
import { i as getTokenCounter, n as ConversationContext, r as reconstructTurnBlocks, t as WorkItemsClient } from "./WorkItemsClient-
|
|
7
|
-
import { a as
|
|
6
|
+
import { i as getTokenCounter, n as ConversationContext, r as reconstructTurnBlocks, t as WorkItemsClient } from "./WorkItemsClient-BSoOblGp.mjs";
|
|
7
|
+
import { a as NotifyingLlmBackend, i as deferredToolRegistry, n as buildSupportingStores, r as buildLlmBackend, t as buildAgent } from "./buildAgent-DyZWK0LW.mjs";
|
|
8
8
|
import { t as getShellSessionManager } from "./ShellSessionManager-6o8KZzl1-vrbPAUTq.mjs";
|
|
9
|
-
import { a as ApiClient, s as OAuthClient } from "./dist-
|
|
10
|
-
import { t as version } from "./package-
|
|
9
|
+
import { a as ApiClient, s as OAuthClient } from "./dist-DPP7UmK9.mjs";
|
|
10
|
+
import { t as version } from "./package-DYPVrada.mjs";
|
|
11
11
|
import { s as getStartupUpdateStatus } from "./updateChecker-CCLVVdH0.mjs";
|
|
12
12
|
import React, { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
|
|
13
13
|
import { Box, Static, Text, measureElement, render, useApp, useInput, usePaste, useStdout } from "ink";
|
|
@@ -1145,9 +1145,23 @@ const TOOLS_WITH_HIDDEN_ARGS$1 = /* @__PURE__ */ new Set(["edit_local_file", "ba
|
|
|
1145
1145
|
* Displays when a tool needs permission before execution.
|
|
1146
1146
|
* Waits indefinitely for user response (like Claude Code).
|
|
1147
1147
|
*/
|
|
1148
|
-
function PermissionPrompt({ toolName, toolDescription, args, preview, canBeTrusted, onResponse }) {
|
|
1148
|
+
function PermissionPrompt({ toolName, toolDescription, args, preview, canBeTrusted, kind, onResponse }) {
|
|
1149
|
+
const isSandboxEscalation = kind === "sandbox-escalation";
|
|
1149
1150
|
const hideArgs = TOOLS_WITH_HIDDEN_ARGS$1.has(toolName);
|
|
1150
|
-
const items =
|
|
1151
|
+
const items = isSandboxEscalation ? [
|
|
1152
|
+
{
|
|
1153
|
+
label: "✓ Retry once without sandbox",
|
|
1154
|
+
value: "allow-once"
|
|
1155
|
+
},
|
|
1156
|
+
{
|
|
1157
|
+
label: "✓ Allow this command unsandboxed for the session",
|
|
1158
|
+
value: "allow-session"
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
label: "✗ Deny",
|
|
1162
|
+
value: "deny"
|
|
1163
|
+
}
|
|
1164
|
+
] : canBeTrusted ? [
|
|
1151
1165
|
{
|
|
1152
1166
|
label: "✓ Allow once",
|
|
1153
1167
|
value: "allow-once"
|
|
@@ -1251,7 +1265,7 @@ function PermissionPrompt({ toolName, toolDescription, args, preview, canBeTrust
|
|
|
1251
1265
|
borderColor: "gray",
|
|
1252
1266
|
paddingX: 1,
|
|
1253
1267
|
flexDirection: "column"
|
|
1254
|
-
}, renderDiffPreview(preview))), !canBeTrusted && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, {
|
|
1268
|
+
}, renderDiffPreview(preview))), !canBeTrusted && !isSandboxEscalation && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, {
|
|
1255
1269
|
color: "red",
|
|
1256
1270
|
dimColor: true
|
|
1257
1271
|
}, "Note: This tool cannot be trusted due to its dangerous nature.")), /* @__PURE__ */ React.createElement(Box, {
|
|
@@ -2834,6 +2848,7 @@ function App({ onMessage, onBackgroundCompletion, onCommand, onBashCommand, onPe
|
|
|
2834
2848
|
args: permissionPrompt.args,
|
|
2835
2849
|
preview: permissionPrompt.preview,
|
|
2836
2850
|
canBeTrusted: permissionPrompt.canBeTrusted,
|
|
2851
|
+
kind: permissionPrompt.kind,
|
|
2837
2852
|
onResponse: (response) => onPermissionResponse(response, permissionPrompt.id)
|
|
2838
2853
|
})), userQuestionPrompt && /* @__PURE__ */ React.createElement(Box, {
|
|
2839
2854
|
key: userQuestionPrompt.id,
|
|
@@ -5768,7 +5783,7 @@ const HandoffSchema = z$1.object({
|
|
|
5768
5783
|
updatedAt: z$1.string()
|
|
5769
5784
|
});
|
|
5770
5785
|
z$1.object({
|
|
5771
|
-
|
|
5786
|
+
id: z$1.string(),
|
|
5772
5787
|
notebookId: z$1.string(),
|
|
5773
5788
|
goal: z$1.string(),
|
|
5774
5789
|
quests: z$1.array(QuestDataSchema),
|
|
@@ -8405,7 +8420,7 @@ async function runTurn(message, ctx) {
|
|
|
8405
8420
|
}
|
|
8406
8421
|
}
|
|
8407
8422
|
async function runHeldTurn(message, ctx) {
|
|
8408
|
-
const { agent, sessionStore, configStore, commandHistoryStore, customCommandStore, messageBuilder, config, availableModels, agentStore, contextContent, additionalDirectories, featureRegistry, backgroundManager, todoStore, decisionStore, blockerStore, postEditDiagnostics, workflowStores, setCommandHistory, setAbortController } = ctx;
|
|
8423
|
+
const { agent, sessionStore, configStore, commandHistoryStore, customCommandStore, messageBuilder, config, availableModels, agentStore, contextContent, additionalDirectories, featureRegistry, backgroundManager, toolCatalog, todoStore, decisionStore, blockerStore, postEditDiagnostics, workflowStores, setCommandHistory, setAbortController } = ctx;
|
|
8409
8424
|
const storeSession = useCliStore.getState().session;
|
|
8410
8425
|
if (!agent || !storeSession) {
|
|
8411
8426
|
console.error("❌ CLI failed to initialize. Try restarting b4m.\n");
|
|
@@ -8523,7 +8538,7 @@ async function runHeldTurn(message, ctx) {
|
|
|
8523
8538
|
previousMessages: previousMessages.length > 0 ? previousMessages : void 0,
|
|
8524
8539
|
signal: abortController.signal,
|
|
8525
8540
|
parallelExecution: cliConfig.preferences.enableParallelToolExecution === true,
|
|
8526
|
-
isReadOnlyTool,
|
|
8541
|
+
isReadOnlyTool: (toolName) => toolCatalog.isReadOnly(toolName),
|
|
8527
8542
|
workflowReminder,
|
|
8528
8543
|
drainFeedback: diagnostics ? (phase) => diagnostics.drain(DRAIN_BUDGET_MS[phase], abortController.signal) : void 0,
|
|
8529
8544
|
onContextLimit: createReactiveCompactionHandler(agent, activeSession)
|
|
@@ -8957,6 +8972,7 @@ function CliApp() {
|
|
|
8957
8972
|
agent: null,
|
|
8958
8973
|
mcpManager: null,
|
|
8959
8974
|
permissionManager: null,
|
|
8975
|
+
toolCatalog: new ToolCatalog(),
|
|
8960
8976
|
permissionPrompt: null,
|
|
8961
8977
|
trustLocationSelector: null,
|
|
8962
8978
|
folderTrustPrompt: null,
|
|
@@ -9214,7 +9230,7 @@ function CliApp() {
|
|
|
9214
9230
|
error: () => {},
|
|
9215
9231
|
debug: () => {}
|
|
9216
9232
|
};
|
|
9217
|
-
const permissionManager = new PermissionManager(config.trustedTools || [],
|
|
9233
|
+
const permissionManager = new PermissionManager(state.toolCatalog, config.trustedTools || [], config.tools.disabled || []);
|
|
9218
9234
|
const checkpointProjectDir = state.configStore.getProjectConfigDir() || process.cwd();
|
|
9219
9235
|
const checkpointStore = new CheckpointStore(checkpointProjectDir);
|
|
9220
9236
|
const { sandboxOrchestrator } = await buildSandbox({
|
|
@@ -9224,7 +9240,7 @@ function CliApp() {
|
|
|
9224
9240
|
checkpointStore
|
|
9225
9241
|
});
|
|
9226
9242
|
let permissionPromptCounter = 0;
|
|
9227
|
-
const promptFn = (toolName, args, preview) => {
|
|
9243
|
+
const promptFn = (toolName, args, preview, kind) => {
|
|
9228
9244
|
return new Promise((resolve) => {
|
|
9229
9245
|
getProcessHooks()?.fireNotificationPermissionPrompt(toolName);
|
|
9230
9246
|
const canBeTrusted = permissionManager.canBeTrusted(toolName);
|
|
@@ -9235,6 +9251,7 @@ function CliApp() {
|
|
|
9235
9251
|
args,
|
|
9236
9252
|
preview,
|
|
9237
9253
|
canBeTrusted,
|
|
9254
|
+
kind,
|
|
9238
9255
|
resolve
|
|
9239
9256
|
};
|
|
9240
9257
|
setState((prev) => ({
|
|
@@ -9374,9 +9391,13 @@ function CliApp() {
|
|
|
9374
9391
|
}) : null;
|
|
9375
9392
|
const workItemTools = config.preferences.enableWorkItemTools ? createWorkItemTools(new WorkItemsClient(apiClient)) : [];
|
|
9376
9393
|
const agentToolsRef = { current: null };
|
|
9377
|
-
const toolSearchTool = deferredToolRegistry.size() > 0 ? createToolSearchTool(
|
|
9378
|
-
|
|
9379
|
-
|
|
9394
|
+
const toolSearchTool = deferredToolRegistry.size() > 0 ? createToolSearchTool({
|
|
9395
|
+
registry: deferredToolRegistry,
|
|
9396
|
+
logger,
|
|
9397
|
+
toolListAccessor: () => {
|
|
9398
|
+
if (!agentToolsRef.current) throw new Error("tool_search invoked before agent context was wired");
|
|
9399
|
+
return agentToolsRef.current;
|
|
9400
|
+
}
|
|
9380
9401
|
}) : null;
|
|
9381
9402
|
const cliTools = buildCliToolList({
|
|
9382
9403
|
toolSearchTool,
|
|
@@ -9662,7 +9683,7 @@ function CliApp() {
|
|
|
9662
9683
|
previousMessages: previousMessages.length > 0 ? previousMessages : void 0,
|
|
9663
9684
|
signal: abortController.signal,
|
|
9664
9685
|
parallelExecution: cliConfig.preferences.enableParallelToolExecution === true,
|
|
9665
|
-
isReadOnlyTool,
|
|
9686
|
+
isReadOnlyTool: (toolName) => state.toolCatalog.isReadOnly(toolName),
|
|
9666
9687
|
onContextLimit: createReactiveCompactionHandler(state.agent, session)
|
|
9667
9688
|
});
|
|
9668
9689
|
} finally {
|
|
@@ -9797,6 +9818,7 @@ function CliApp() {
|
|
|
9797
9818
|
additionalDirectories: state.additionalDirectories,
|
|
9798
9819
|
featureRegistry: state.featureRegistry,
|
|
9799
9820
|
backgroundManager: state.backgroundManager,
|
|
9821
|
+
toolCatalog: state.toolCatalog,
|
|
9800
9822
|
todoStore: todoStoreRef.current,
|
|
9801
9823
|
decisionStore: decisionStoreRef.current,
|
|
9802
9824
|
blockerStore: blockerStoreRef.current,
|
|
@@ -9864,7 +9886,7 @@ function CliApp() {
|
|
|
9864
9886
|
previousMessages: previousMessages.length > 0 ? previousMessages : void 0,
|
|
9865
9887
|
signal: abortController.signal,
|
|
9866
9888
|
parallelExecution: cliConfig.preferences.enableParallelToolExecution === true,
|
|
9867
|
-
isReadOnlyTool
|
|
9889
|
+
isReadOnlyTool: (toolName) => state.toolCatalog.isReadOnly(toolName)
|
|
9868
9890
|
});
|
|
9869
9891
|
const successfulToolCalls = result.steps.filter((s) => s.type === "observation").length;
|
|
9870
9892
|
const currentSession = useCliStore.getState().session;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { a as ApiClient, i as parseRetryAfterSeconds, o as isProviderKeyFailure, r as createClient, t as B4mApiError } from "./dist-
|
|
2
|
+
import { $ as PROMPT_TEXT_MAX, B as CreateArtifactRequestSchema, D as AGENT_QUEST_MANIFEST, Dt as replacePromptVariables, E as AGENT_QUEST_ID, Et as questReplyText, F as BriefcasePromptIdSchema, Ft as ttsBase64ResponseSchema, G as ImagePromptResolutionSchema, It as ttsRequestSchema, Lt as ttsResponseTooLargeSchema, M as ArtifactTypeSchema, N as BRIEFCASE_CATALOG_QUERIES, Nt as supportedVoiceGenerationVendor, O as AGENT_QUEST_MCP_URI, U as GENERATED_IMAGE_EXTENSION_RE, V as DEFAULT_TTS_PROVIDER, W as ImageModels, b as logger, dt as buildPromptContext, ht as generatedAudioResponseSchema, p as requireApiUrl, st as VisibilitySchema, t as ConfigStore, v as NotAuthenticatedError, wt as joinReplySlots, y as parseApiUrl } from "./ConfigStore-DUATzLxB.mjs";
|
|
3
|
+
import { a as ApiClient, i as parseRetryAfterSeconds, o as isProviderKeyFailure, r as createClient, t as B4mApiError } from "./dist-DPP7UmK9.mjs";
|
|
4
4
|
import { z as z$1 } from "zod";
|
|
5
5
|
import { isAxiosError } from "axios";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bike4mind/cli",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"mcpName": "io.github.
|
|
3
|
+
"version": "3.3.0",
|
|
4
|
+
"mcpName": "io.github.Bike4Mind/bike4mind",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Interactive CLI tool for Bike4Mind with ReAct agents",
|
|
7
7
|
"license": "BUSL-1.1",
|
|
@@ -124,17 +124,17 @@
|
|
|
124
124
|
"tsx": "^4.23.0",
|
|
125
125
|
"typescript": "^5.9.3",
|
|
126
126
|
"vitest": "^4.1.11",
|
|
127
|
-
"@bike4mind/agents": "1.2.
|
|
128
|
-
"@bike4mind/client-auth": "0.2.
|
|
129
|
-
"@bike4mind/common": "
|
|
130
|
-
"@bike4mind/fab-pipeline": "2.1.
|
|
131
|
-
"@bike4mind/llm-adapters": "1.1.1",
|
|
127
|
+
"@bike4mind/agents": "1.2.8",
|
|
128
|
+
"@bike4mind/client-auth": "0.2.1",
|
|
129
|
+
"@bike4mind/common": "18.0.0",
|
|
130
|
+
"@bike4mind/fab-pipeline": "2.1.8",
|
|
132
131
|
"@bike4mind/hearth": "0.3.1",
|
|
133
|
-
"@bike4mind/
|
|
132
|
+
"@bike4mind/llm-adapters": "1.5.0",
|
|
133
|
+
"@bike4mind/mcp": "2.1.8",
|
|
134
134
|
"@bike4mind/observability": "0.2.3",
|
|
135
|
-
"@bike4mind/sdk": "1.0
|
|
136
|
-
"@bike4mind/services": "
|
|
137
|
-
"@bike4mind/utils": "
|
|
135
|
+
"@bike4mind/sdk": "1.2.0",
|
|
136
|
+
"@bike4mind/services": "19.2.0",
|
|
137
|
+
"@bike4mind/utils": "8.1.3"
|
|
138
138
|
},
|
|
139
139
|
"optionalDependencies": {
|
|
140
140
|
"@vscode/ripgrep": "^1.18.0"
|