context-mode 2.0.0-next.5 → 2.0.0-next.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.
@@ -25,9 +25,11 @@ var REPLACE_TRIGGER_BYTES = 4096;
25
25
  var REPLACE_RETURN_BYTES = 96;
26
26
  var SHAPE_RETURN_BYTES = 256;
27
27
  var REPLACE_CHUNK_BYTES = 48;
28
- function REPLACE_HANDLE_LINE(intent, handle, bytes4, prefix = "") {
29
- return prefix + "ctx_search({queries:[" + JSON.stringify(intent) + "], source:" + JSON.stringify(handle) + "}) searches the whole output (" + bytes4 + " B).";
28
+ function REPLACE_HANDLE_LINE(intent, handle, bytes4, prefix = "", asked = "") {
29
+ const queries = asked === "" ? [intent] : [intent, asked];
30
+ return prefix + "ctx_search({queries:[" + queries.map((q) => JSON.stringify(q)).join(",") + "], source:" + JSON.stringify(handle) + "}) searches the whole output (" + bytes4 + " B).";
30
31
  }
32
+ var HANDLE_PROMPT_WORDS = 3;
31
33
  var MAX_CHUNK_BYTES = 4096;
32
34
  var SEARCH_PAGE_SIZE = 20;
33
35
  var SNIPPET_MAX_BYTES = 800;
@@ -328,7 +330,7 @@ var DECISION_OPTION_KEY = "option";
328
330
  var DECISION_LABEL_JOIN = " | ";
329
331
  var RELEASE_REPO_URL = "https://github.com/mksglu/context-mode.git";
330
332
  var RELEASE_BRANCH = "release";
331
- var BUNDLE_SHA = true ? "0bf5734278463ea178b282436a39ba81347dadab" : void 0;
333
+ var BUNDLE_SHA = true ? "f61b6973877b47851ac5938c46fee1399946289e" : void 0;
332
334
  var DOCTOR_CHECK_ORDER = Object.freeze(["D1", "D2", "D3", "D4", "D5", "D5b", "D6", "D7", "D8", "D9", "D10"]);
333
335
  var DOCTOR_LABEL = Object.freeze({
334
336
  D1: "version",
@@ -566,6 +568,7 @@ var V1_HOOKS_DIR_NAME = "hooks";
566
568
  var SETTINGS_FILE = "settings.json";
567
569
  var CLAUDE_USER_CONFIG_FILE = ".claude.json";
568
570
  var HOOKS_JSON_FILE = "hooks.json";
571
+ var CODEX_HOME_ENV = "CODEX_HOME";
569
572
  var CONFIG_TOML_FILE = "config.toml";
570
573
  var CONFIG_JSON_FILE = "config.json";
571
574
  var ZCODE_CLI_DIR = "cli";
@@ -632,8 +635,12 @@ var JSON_INDENT_UNIT = " ";
632
635
  var MCP_COMMAND_FIELD = "command";
633
636
  var MCP_ARGS_FIELD = "args";
634
637
  var ZCODE_MCP_FEATURE_KEY = Object.freeze(["features", "mcp"]);
638
+ var CODEX_OMIT_TOOLS_FROM_FIELD = "omit_tools_from";
639
+ var CODEX_OMIT_DEFERRED = Object.freeze(["deferred"]);
640
+ var CODEX_APPROVAL_MODE_FIELD = "default_tools_approval_mode";
641
+ var CODEX_APPROVAL_APPROVE = "approve";
635
642
  var OWN_MCP_ENTRY = Object.freeze({
636
- codex: { file: [".codex", "config.toml"], key: ["mcp_servers", SERVER_KEY] },
643
+ codex: { file: [".codex", "config.toml"], key: ["mcp_servers", SERVER_KEY], fields: { [CODEX_OMIT_TOOLS_FROM_FIELD]: CODEX_OMIT_DEFERRED, [CODEX_APPROVAL_MODE_FIELD]: CODEX_APPROVAL_APPROVE } },
637
644
  vscode: { file: [".vscode", "mcp.json"], key: ["servers", SERVER_KEY] },
638
645
  kiro: { file: [".kiro", "settings", "mcp.json"], key: ["mcpServers", SERVER_KEY] },
639
646
  zcode: {
@@ -1096,9 +1103,62 @@ function readResult4(resp) {
1096
1103
  const isError = typeof resp === "object" && resp !== null && resp.is_error === true;
1097
1104
  return { isError, bytes: Buffer.byteLength(text), text };
1098
1105
  }
1106
+ var CAMEL_EVENTS = {
1107
+ sessionStart: "SessionStart",
1108
+ userPromptSubmitted: "UserPromptSubmit",
1109
+ preToolUse: "PreToolUse",
1110
+ postToolUse: "PostToolUse",
1111
+ preCompact: "PreCompact"
1112
+ };
1113
+ var EVENT_BY_KEY2 = [
1114
+ ["toolResult", "postToolUse"],
1115
+ ["toolName", "preToolUse"],
1116
+ ["prompt", "userPromptSubmitted"],
1117
+ ["source", "sessionStart"],
1118
+ ["trigger", "preCompact"]
1119
+ ];
1120
+ var SESSION_SOURCES = { new: "startup", startup: "startup", resume: "resume" };
1121
+ var RESULT_SUCCESS2 = "success";
1122
+ function isRecord2(v) {
1123
+ return typeof v === "object" && v !== null && !Array.isArray(v);
1124
+ }
1125
+ function readArgs2(v) {
1126
+ if (isRecord2(v)) return v;
1127
+ if (typeof v !== "string") return {};
1128
+ try {
1129
+ const parsed = JSON.parse(v);
1130
+ return isRecord2(parsed) ? parsed : {};
1131
+ } catch {
1132
+ return {};
1133
+ }
1134
+ }
1135
+ function readCamelResult(v) {
1136
+ const r = isRecord2(v) ? v : {};
1137
+ const text = typeof r.textResultForLlm === "string" ? r.textResultForLlm : "";
1138
+ return { isError: typeof r.resultType === "string" && r.resultType !== RESULT_SUCCESS2, bytes: Buffer.byteLength(text), text };
1139
+ }
1140
+ function decodeCamel(p, name) {
1141
+ const event = typeof name === "string" ? CAMEL_EVENTS[name] ?? VSCODE_EVENTS.find((e) => e === name) : void 0;
1142
+ if (event === void 0) throw new Error("vscode: unknown hook event " + String(name));
1143
+ const ev = { event, agent: "vscode", sessionId: String(p.sessionId ?? ""), cwd: String(p.cwd ?? "") };
1144
+ if (event === "SessionStart" && typeof p.source === "string" && SESSION_SOURCES[p.source] !== void 0) ev.source = SESSION_SOURCES[p.source];
1145
+ if (event === "UserPromptSubmit" && typeof p.prompt === "string") ev.prompt = p.prompt;
1146
+ if (event === "PreToolUse" || event === "PostToolUse") {
1147
+ const toolName = String(p.toolName ?? "");
1148
+ ev.tool = { name: toolName, canonicalName: canonicalName4(toolName), input: readArgs2(p.toolArgs) };
1149
+ }
1150
+ if (event === "PostToolUse") ev.result = readCamelResult(p.toolResult);
1151
+ return ev;
1152
+ }
1099
1153
  function decode6(raw) {
1100
1154
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error("vscode: hook payload is not a JSON object");
1101
1155
  const p = raw;
1156
+ if (p.hookEventName !== void 0) return decodeCamel(p, p.hookEventName);
1157
+ if (p.hook_event_name === void 0) {
1158
+ const byKey = EVENT_BY_KEY2.find(([key]) => Object.hasOwn(p, key))?.[1];
1159
+ if (byKey === void 0) throw new Error("vscode: missing required field hook_event_name");
1160
+ return decodeCamel(p, byKey);
1161
+ }
1102
1162
  const event = VSCODE_EVENTS.find((e) => e === p.hook_event_name);
1103
1163
  if (event === void 0) throw new Error("vscode: unknown hook event " + String(p.hook_event_name));
1104
1164
  const ev = { event, agent: "vscode", sessionId: String(p.session_id ?? ""), cwd: String(p.cwd ?? "") };
@@ -1106,7 +1166,7 @@ function decode6(raw) {
1106
1166
  if (event === "UserPromptSubmit" && typeof p.prompt === "string") ev.prompt = p.prompt;
1107
1167
  if (event === "PreToolUse" || event === "PostToolUse") {
1108
1168
  const name = String(p.tool_name ?? "");
1109
- const input = typeof p.tool_input === "object" && p.tool_input !== null && !Array.isArray(p.tool_input) ? p.tool_input : {};
1169
+ const input = isRecord2(p.tool_input) ? p.tool_input : {};
1110
1170
  ev.tool = { name, canonicalName: canonicalName4(name), input };
1111
1171
  }
1112
1172
  if (event === "PostToolUse") ev.result = readResult4(p.tool_response);
@@ -1125,12 +1185,14 @@ var KIRO_EVENTS = {
1125
1185
  PromptSubmit: "UserPromptSubmit",
1126
1186
  userPromptSubmit: "UserPromptSubmit",
1127
1187
  PreToolUse: "PreToolUse",
1128
- PostToolUse: "PostToolUse"
1188
+ preToolUse: "PreToolUse",
1189
+ PostToolUse: "PostToolUse",
1190
+ postToolUse: "PostToolUse"
1129
1191
  };
1130
1192
  var PROMPT_ENV = "USER_PROMPT";
1131
1193
  var MCP_PREFIX3 = "mcp_";
1132
- var SHELL_TOOL_NAME2 = "execute_bash";
1133
- var NATIVE_TO_CANONICAL5 = { [SHELL_TOOL_NAME2]: "Bash" };
1194
+ var SHELL_TOOL_NAMES = Object.freeze(["execute_bash", "execute_pwsh", "shell"]);
1195
+ var NATIVE_TO_CANONICAL5 = Object.fromEntries(SHELL_TOOL_NAMES.map((n) => [n, "Bash"]));
1134
1196
  var MCP_SEP3 = "_";
1135
1197
  var KIRO_SOURCES = { startup: "startup", resume: "resume", clear: "clear", compact: "compact" };
1136
1198
  function canonicalName5(name) {
@@ -1271,8 +1333,8 @@ var OPENCODE_EVENTS = {
1271
1333
  compaction: "PreCompact",
1272
1334
  "step-finish": "Usage"
1273
1335
  };
1274
- var SHELL_TOOL_NAME3 = "bash";
1275
- var NATIVE_TO_CANONICAL7 = { webfetch: "WebFetch", [SHELL_TOOL_NAME3]: "Bash" };
1336
+ var SHELL_TOOL_NAME2 = "bash";
1337
+ var NATIVE_TO_CANONICAL7 = { webfetch: "WebFetch", [SHELL_TOOL_NAME2]: "Bash" };
1276
1338
  function toCanonicalTool(name) {
1277
1339
  if (name.startsWith(OWN_WIRE_PREFIX)) return name.slice(OWN_WIRE_PREFIX.length);
1278
1340
  return Object.prototype.hasOwnProperty.call(NATIVE_TO_CANONICAL7, name) ? NATIVE_TO_CANONICAL7[name] : name;
@@ -1392,8 +1454,8 @@ var ADAPTERS = Object.freeze([
1392
1454
  hookTimeoutMs: HOOK_TIMEOUT_MS,
1393
1455
  denyChannel: "deny-reason",
1394
1456
  hookChannel: { kind: "package", path: "hooks/qwen.json" },
1395
- skillChannel: { kind: "home-dir", path: ".qwen/skills" },
1396
- // ADR-0020
1457
+ skillChannel: { kind: "package", path: "skills" },
1458
+ // ADR-0020, D-HQ-SKILLS-3: qwen loads <extension>/skills, shared with gemini
1397
1459
  decode: decode4,
1398
1460
  encode: encode4
1399
1461
  },
@@ -1429,8 +1491,8 @@ var ADAPTERS = Object.freeze([
1429
1491
  hookTimeoutMs: HOOK_TIMEOUT_MS,
1430
1492
  denyChannel: "deny-reason",
1431
1493
  hookChannel: { kind: "home-file", path: ".copilot/hooks/context-mode-vscode.json" },
1432
- skillChannel: { kind: "home-dir", path: ".copilot/skills" },
1433
- // ADR-0020
1494
+ skillChannel: { kind: "home-dir", path: ".agents/skills" },
1495
+ // ADR-0020, D-HQ-COPILOT-NAMES-3: Copilot CLI owns ~/.copilot/skills
1434
1496
  decode: decode6,
1435
1497
  encode: encode6
1436
1498
  },
@@ -1439,9 +1501,9 @@ var ADAPTERS = Object.freeze([
1439
1501
  installMode: "mcp-entry",
1440
1502
  projectSource: "arg:--agent+cwd",
1441
1503
  toolNamePrefix: TOOL_NAME_PREFIX7,
1442
- nativeTools: { shell: [SHELL_TOOL_NAME2] },
1504
+ nativeTools: { shell: [...SHELL_TOOL_NAMES] },
1443
1505
  execReadOnlyHint: false,
1444
- // D-HF-KIRO-SHELL-1
1506
+ // D-HF-KIRO-SHELL-1, D-N7-KIRO-1
1445
1507
  eventMap: { SessionStart: "SessionStart", UserPromptSubmit: "UserPromptSubmit", PreToolUse: "PreToolUse", PostToolUse: "PostToolUse" },
1446
1508
  compactDelivery: "none",
1447
1509
  compactSummary: "none",
@@ -1454,7 +1516,7 @@ var ADAPTERS = Object.freeze([
1454
1516
  encode: encode7
1455
1517
  },
1456
1518
  {
1457
- // toolNamePrefix and nativeTools unverified until T-ZC (DECISIONS-r9 R3, R4: Claude names).
1519
+ // toolNamePrefix is the documented ZCode name mcp__<server>__<tool> (D-N7-ZCODE-NAMES-1); nativeTools are Claude names.
1458
1520
  id: "zcode",
1459
1521
  installMode: "hooks+mcp",
1460
1522
  projectSource: "spawn-cwd",
@@ -1496,7 +1558,7 @@ var ADAPTERS = Object.freeze([
1496
1558
  installMode: "in-process",
1497
1559
  projectSource: "spawn-cwd",
1498
1560
  toolNamePrefix: TOOL_NAME_PREFIX10,
1499
- nativeTools: { shell: [SHELL_TOOL_NAME3] },
1561
+ nativeTools: { shell: [SHELL_TOOL_NAME2] },
1500
1562
  execReadOnlyHint: false,
1501
1563
  // D-HF-OPENCODE-SHELL-1
1502
1564
  // Usage: step-finish cost row (DEVIATIONS D-M5-arch-2).
@@ -1518,6 +1580,10 @@ var REPLACE_ROWS = /* @__PURE__ */ new Set(["claude-code", "gemini", "copilot-cl
1518
1580
  function hasReplace(row5) {
1519
1581
  return REPLACE_ROWS.has(row5.id);
1520
1582
  }
1583
+ var DUMP_REPLACE_ROWS = /* @__PURE__ */ new Set(["claude-code", "copilot-cli", "pi"]);
1584
+ function dumpRunsThenReplaces(row5) {
1585
+ return DUMP_REPLACE_ROWS.has(row5.id) && hasReplace(row5);
1586
+ }
1521
1587
  var RECALL_ROWS = /* @__PURE__ */ new Set(["claude-code", "codex", "gemini", "qwen", "copilot-cli", "vscode", "zcode"]);
1522
1588
  function hasRecall(row5) {
1523
1589
  return RECALL_ROWS.has(row5.id);
@@ -2480,6 +2546,10 @@ function homeDirOf(env) {
2480
2546
  if (profile !== void 0 && profile !== "") return profile;
2481
2547
  return null;
2482
2548
  }
2549
+ function codexDirOf(env, home) {
2550
+ const dir = env[CODEX_HOME_ENV];
2551
+ return dir !== void 0 && dir !== "" ? dir : join(home, ...AGENT_HOME_DIR.codex);
2552
+ }
2483
2553
  function homeOf(env) {
2484
2554
  const home = homeDirOf(env);
2485
2555
  if (home !== null) return home;
@@ -3136,7 +3206,7 @@ function read(ev, row5, input) {
3136
3206
  return ALLOW;
3137
3207
  }
3138
3208
  function shellDump(cmds, cwd, row5) {
3139
- if (row5.nativeTools.read !== void 0 && row5.nativeTools.read.length > 0 && hasReplace(row5)) return null;
3209
+ if (row5.nativeTools.read !== void 0 && row5.nativeTools.read.length > 0 && dumpRunsThenReplaces(row5)) return null;
3140
3210
  if (cmds.length !== 1) return null;
3141
3211
  const c = cmds[0];
3142
3212
  if (c.redirectsToFile || c.endsInBoundedSink) return null;
@@ -6057,16 +6127,23 @@ var TYPO_MIN_LEN = 5;
6057
6127
  var TYPO_MAX_DIST = 2;
6058
6128
  function typoTerms(db, words) {
6059
6129
  const has2 = stmt(db.raw, "SELECT 1 AS x FROM chunks_vocab WHERE term = ?");
6060
- const near = stmt(db.raw, "SELECT term, doc FROM chunks_vocab WHERE length(term) BETWEEN ? AND ?");
6130
+ const near = stmt(db.raw, "SELECT term, doc, length(term) AS n FROM chunks_vocab WHERE length(term) BETWEEN ? AND ?");
6131
+ const stems = queryStems(words.join(" "));
6132
+ const miss = stems.map((stem) => has2.get(stem) === void 0 && [...stem].length >= TYPO_MIN_LEN);
6133
+ if (!miss.includes(true)) return null;
6134
+ const lens = stems.filter((_, i) => miss[i]).map((stem) => stem.length);
6135
+ const rows = near.all(Math.min(...lens) - TYPO_MAX_DIST, Math.max(...lens) + TYPO_MAX_DIST);
6061
6136
  let changed = false;
6062
6137
  const out = [];
6063
- for (const stem of queryStems(words.join(" "))) {
6064
- if (has2.get(stem) !== void 0 || [...stem].length < TYPO_MIN_LEN) {
6138
+ stems.forEach((stem, i) => {
6139
+ if (!miss[i]) {
6065
6140
  out.push(stem);
6066
- continue;
6141
+ return;
6067
6142
  }
6068
6143
  let best = null;
6069
- for (const r of near.all(stem.length - TYPO_MAX_DIST, stem.length + TYPO_MAX_DIST)) {
6144
+ for (const r of rows) {
6145
+ const n = Number(r.n);
6146
+ if (n < stem.length - TYPO_MAX_DIST || n > stem.length + TYPO_MAX_DIST) continue;
6070
6147
  const d = editDistance(stem, r.term, TYPO_MAX_DIST);
6071
6148
  if (d > TYPO_MAX_DIST) continue;
6072
6149
  if (best === null || d < best.d || d === best.d && (r.doc > best.doc || r.doc === best.doc && r.term < best.term)) {
@@ -6077,7 +6154,7 @@ function typoTerms(db, words) {
6077
6154
  out.push(best.term);
6078
6155
  changed = true;
6079
6156
  }
6080
- }
6157
+ });
6081
6158
  return changed ? out.map((t) => `"${t.replaceAll('"', '""')}"*`) : null;
6082
6159
  }
6083
6160
  function ftsQuery(db, q, scope, ctx, sessionId, limit, offset, source) {
@@ -7258,6 +7335,19 @@ function appendDetached(project, sessionId, row5) {
7258
7335
  void write(project, row5);
7259
7336
  }
7260
7337
 
7338
+ // src/core/hooks/handle-query.ts
7339
+ function askedWords(intent, prompt, text) {
7340
+ const want = new Set(wordTokens(prompt.toLowerCase()));
7341
+ for (const w of wordTokens(intent.toLowerCase())) want.delete(w);
7342
+ if (want.size === 0) return "";
7343
+ const counts = /* @__PURE__ */ new Map();
7344
+ for (const w of wordTokens(text.toLowerCase())) {
7345
+ if (want.has(w)) counts.set(w, (counts.get(w) ?? 0) + 1);
7346
+ }
7347
+ const picked = [...counts.entries()].sort((a, b) => a[1] - b[1] || (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0)).slice(0, HANDLE_PROMPT_WORDS).map((e) => e[0]);
7348
+ return picked.join(" ");
7349
+ }
7350
+
7261
7351
  // src/core/hooks/decision.ts
7262
7352
  function isObject2(v) {
7263
7353
  return typeof v === "object" && v !== null && !Array.isArray(v);
@@ -7668,7 +7758,7 @@ async function postToolUse(ev, row5, project, env) {
7668
7758
  const handle = sourceHandle(sourceId);
7669
7759
  const prompt = await lastPrompt(project, ev.sessionId);
7670
7760
  const rankQuery = prompt.trim() === "" ? void 0 : intent + " " + prompt;
7671
- const handleLine = REPLACE_HANDLE_LINE(intent, handle, result.bytes, row5.toolNamePrefix);
7761
+ const handleLine = REPLACE_HANDLE_LINE(intent, handle, result.bytes, row5.toolNamePrefix, askedWords(intent, prompt, text));
7672
7762
  const budget = replaceBudget(handleLine, moreLine2(intent, label));
7673
7763
  const digest = shapeDigest(text, rankQuery ?? intent, SHAPE_RETURN_BYTES);
7674
7764
  if (digest !== null) return { kind: "replace", output: replaceOutput(digest, handleLine) };
@@ -20420,6 +20510,7 @@ function ownHooks(block, shape, timeoutKey, native, agent) {
20420
20510
  var validTimeout = (v) => typeof v === "number" && Number.isFinite(v) && v > 0;
20421
20511
  function mcpFile(row5, home, env) {
20422
20512
  const spec = OWN_MCP_ENTRY[row5.id];
20513
+ if (row5.id === "codex") return join10(codexDirOf(env, home), CONFIG_TOML_FILE);
20423
20514
  if (spec !== void 0) return join10(home, ...spec.file);
20424
20515
  if (row5.id === "opencode") return join10(home, ...AGENT_HOME_DIR.opencode, OPENCODE_BASE_CONFIG_FILE);
20425
20516
  if (row5.id === "pi") {
@@ -20447,9 +20538,10 @@ function hookParts(row5, home, env, worktree) {
20447
20538
  let block;
20448
20539
  try {
20449
20540
  const root = spec.root === "plugin" ? resolvePluginRoot(row5, env) : spec.root === "home" ? home : worktree;
20450
- block = hostConfigValueAt(readParsed(row5.id, join10(root, ...spec.file)).value, spec.key);
20541
+ const file2 = row5.id === "codex" ? join10(codexDirOf(env, home), HOOKS_JSON_FILE) : join10(root, ...spec.file);
20542
+ block = hostConfigValueAt(readParsed(row5.id, file2).value, spec.key);
20451
20543
  if (row5.id === "codex") {
20452
- const config2 = readParsed(row5.id, join10(home, ...AGENT_HOME_DIR.codex, CONFIG_TOML_FILE)).value;
20544
+ const config2 = readParsed(row5.id, join10(codexDirOf(env, home), CONFIG_TOML_FILE)).value;
20453
20545
  if (hostConfigValueAt(config2, CODEX_FEATURES_HOOKS_KEY) === false) return [PART_HOOKS];
20454
20546
  }
20455
20547
  } catch {
@@ -20894,8 +20986,8 @@ async function hookRow(ctx, adapter, host) {
20894
20986
  bundleDir: host.bundleDir,
20895
20987
  env: buildChildEnv(host.env),
20896
20988
  signal: ctx.signal,
20897
- codexConfigDir: join12(needHome(host.env), ...AGENT_HOME_DIR.codex),
20898
- // same Codex dir D3 reads
20989
+ codexConfigDir: codexDirOf(host.env, needHome(host.env)),
20990
+ // same Codex dir D3 reads (D-N6-CODEX-HOME-2)
20899
20991
  db
20900
20992
  });
20901
20993
  } finally {
package/package.json CHANGED
@@ -7,9 +7,11 @@
7
7
  },
8
8
  "files": [
9
9
  ".claude-plugin",
10
+ ".codex-plugin",
10
11
  "SHA256SUMS",
11
12
  "claude-code",
12
13
  "cli.mjs",
14
+ "codex",
13
15
  "copilot",
14
16
  "fixtures",
15
17
  "gemini-extension.json",
@@ -23,6 +25,7 @@
23
25
  "server.mjs",
24
26
  "skills"
25
27
  ],
28
+ "main": "./opencode/plugin.js",
26
29
  "name": "context-mode",
27
30
  "pi": {
28
31
  "extensions": [
@@ -37,5 +40,5 @@
37
40
  "url": "git+https://github.com/mksglu/context-mode.git"
38
41
  },
39
42
  "type": "module",
40
- "version": "2.0.0-next.5"
43
+ "version": "2.0.0-next.7"
41
44
  }