context-mode 2.0.0-next.6 → 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.
@@ -330,7 +330,7 @@ var DECISION_OPTION_KEY = "option";
330
330
  var DECISION_LABEL_JOIN = " | ";
331
331
  var RELEASE_REPO_URL = "https://github.com/mksglu/context-mode.git";
332
332
  var RELEASE_BRANCH = "release";
333
- var BUNDLE_SHA = true ? "3374b3ce2faee35730f5c335678ca40b405e923c" : void 0;
333
+ var BUNDLE_SHA = true ? "f61b6973877b47851ac5938c46fee1399946289e" : void 0;
334
334
  var DOCTOR_CHECK_ORDER = Object.freeze(["D1", "D2", "D3", "D4", "D5", "D5b", "D6", "D7", "D8", "D9", "D10"]);
335
335
  var DOCTOR_LABEL = Object.freeze({
336
336
  D1: "version",
@@ -637,8 +637,10 @@ var MCP_ARGS_FIELD = "args";
637
637
  var ZCODE_MCP_FEATURE_KEY = Object.freeze(["features", "mcp"]);
638
638
  var CODEX_OMIT_TOOLS_FROM_FIELD = "omit_tools_from";
639
639
  var CODEX_OMIT_DEFERRED = Object.freeze(["deferred"]);
640
+ var CODEX_APPROVAL_MODE_FIELD = "default_tools_approval_mode";
641
+ var CODEX_APPROVAL_APPROVE = "approve";
640
642
  var OWN_MCP_ENTRY = Object.freeze({
641
- codex: { file: [".codex", "config.toml"], key: ["mcp_servers", SERVER_KEY], fields: { [CODEX_OMIT_TOOLS_FROM_FIELD]: CODEX_OMIT_DEFERRED } },
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 } },
642
644
  vscode: { file: [".vscode", "mcp.json"], key: ["servers", SERVER_KEY] },
643
645
  kiro: { file: [".kiro", "settings", "mcp.json"], key: ["mcpServers", SERVER_KEY] },
644
646
  zcode: {
@@ -1101,9 +1103,62 @@ function readResult4(resp) {
1101
1103
  const isError = typeof resp === "object" && resp !== null && resp.is_error === true;
1102
1104
  return { isError, bytes: Buffer.byteLength(text), text };
1103
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
+ }
1104
1153
  function decode6(raw) {
1105
1154
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error("vscode: hook payload is not a JSON object");
1106
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
+ }
1107
1162
  const event = VSCODE_EVENTS.find((e) => e === p.hook_event_name);
1108
1163
  if (event === void 0) throw new Error("vscode: unknown hook event " + String(p.hook_event_name));
1109
1164
  const ev = { event, agent: "vscode", sessionId: String(p.session_id ?? ""), cwd: String(p.cwd ?? "") };
@@ -1111,7 +1166,7 @@ function decode6(raw) {
1111
1166
  if (event === "UserPromptSubmit" && typeof p.prompt === "string") ev.prompt = p.prompt;
1112
1167
  if (event === "PreToolUse" || event === "PostToolUse") {
1113
1168
  const name = String(p.tool_name ?? "");
1114
- 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 : {};
1115
1170
  ev.tool = { name, canonicalName: canonicalName4(name), input };
1116
1171
  }
1117
1172
  if (event === "PostToolUse") ev.result = readResult4(p.tool_response);
@@ -1130,12 +1185,14 @@ var KIRO_EVENTS = {
1130
1185
  PromptSubmit: "UserPromptSubmit",
1131
1186
  userPromptSubmit: "UserPromptSubmit",
1132
1187
  PreToolUse: "PreToolUse",
1133
- PostToolUse: "PostToolUse"
1188
+ preToolUse: "PreToolUse",
1189
+ PostToolUse: "PostToolUse",
1190
+ postToolUse: "PostToolUse"
1134
1191
  };
1135
1192
  var PROMPT_ENV = "USER_PROMPT";
1136
1193
  var MCP_PREFIX3 = "mcp_";
1137
- var SHELL_TOOL_NAME2 = "execute_bash";
1138
- 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"]));
1139
1196
  var MCP_SEP3 = "_";
1140
1197
  var KIRO_SOURCES = { startup: "startup", resume: "resume", clear: "clear", compact: "compact" };
1141
1198
  function canonicalName5(name) {
@@ -1276,8 +1333,8 @@ var OPENCODE_EVENTS = {
1276
1333
  compaction: "PreCompact",
1277
1334
  "step-finish": "Usage"
1278
1335
  };
1279
- var SHELL_TOOL_NAME3 = "bash";
1280
- 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" };
1281
1338
  function toCanonicalTool(name) {
1282
1339
  if (name.startsWith(OWN_WIRE_PREFIX)) return name.slice(OWN_WIRE_PREFIX.length);
1283
1340
  return Object.prototype.hasOwnProperty.call(NATIVE_TO_CANONICAL7, name) ? NATIVE_TO_CANONICAL7[name] : name;
@@ -1397,8 +1454,8 @@ var ADAPTERS = Object.freeze([
1397
1454
  hookTimeoutMs: HOOK_TIMEOUT_MS,
1398
1455
  denyChannel: "deny-reason",
1399
1456
  hookChannel: { kind: "package", path: "hooks/qwen.json" },
1400
- skillChannel: { kind: "home-dir", path: ".qwen/skills" },
1401
- // ADR-0020
1457
+ skillChannel: { kind: "package", path: "skills" },
1458
+ // ADR-0020, D-HQ-SKILLS-3: qwen loads <extension>/skills, shared with gemini
1402
1459
  decode: decode4,
1403
1460
  encode: encode4
1404
1461
  },
@@ -1434,8 +1491,8 @@ var ADAPTERS = Object.freeze([
1434
1491
  hookTimeoutMs: HOOK_TIMEOUT_MS,
1435
1492
  denyChannel: "deny-reason",
1436
1493
  hookChannel: { kind: "home-file", path: ".copilot/hooks/context-mode-vscode.json" },
1437
- skillChannel: { kind: "home-dir", path: ".copilot/skills" },
1438
- // ADR-0020
1494
+ skillChannel: { kind: "home-dir", path: ".agents/skills" },
1495
+ // ADR-0020, D-HQ-COPILOT-NAMES-3: Copilot CLI owns ~/.copilot/skills
1439
1496
  decode: decode6,
1440
1497
  encode: encode6
1441
1498
  },
@@ -1444,9 +1501,9 @@ var ADAPTERS = Object.freeze([
1444
1501
  installMode: "mcp-entry",
1445
1502
  projectSource: "arg:--agent+cwd",
1446
1503
  toolNamePrefix: TOOL_NAME_PREFIX7,
1447
- nativeTools: { shell: [SHELL_TOOL_NAME2] },
1504
+ nativeTools: { shell: [...SHELL_TOOL_NAMES] },
1448
1505
  execReadOnlyHint: false,
1449
- // D-HF-KIRO-SHELL-1
1506
+ // D-HF-KIRO-SHELL-1, D-N7-KIRO-1
1450
1507
  eventMap: { SessionStart: "SessionStart", UserPromptSubmit: "UserPromptSubmit", PreToolUse: "PreToolUse", PostToolUse: "PostToolUse" },
1451
1508
  compactDelivery: "none",
1452
1509
  compactSummary: "none",
@@ -1459,7 +1516,7 @@ var ADAPTERS = Object.freeze([
1459
1516
  encode: encode7
1460
1517
  },
1461
1518
  {
1462
- // 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.
1463
1520
  id: "zcode",
1464
1521
  installMode: "hooks+mcp",
1465
1522
  projectSource: "spawn-cwd",
@@ -1501,7 +1558,7 @@ var ADAPTERS = Object.freeze([
1501
1558
  installMode: "in-process",
1502
1559
  projectSource: "spawn-cwd",
1503
1560
  toolNamePrefix: TOOL_NAME_PREFIX10,
1504
- nativeTools: { shell: [SHELL_TOOL_NAME3] },
1561
+ nativeTools: { shell: [SHELL_TOOL_NAME2] },
1505
1562
  execReadOnlyHint: false,
1506
1563
  // D-HF-OPENCODE-SHELL-1
1507
1564
  // Usage: step-finish cost row (DEVIATIONS D-M5-arch-2).
package/package.json CHANGED
@@ -40,5 +40,5 @@
40
40
  "url": "git+https://github.com/mksglu/context-mode.git"
41
41
  },
42
42
  "type": "module",
43
- "version": "2.0.0-next.6"
43
+ "version": "2.0.0-next.7"
44
44
  }
package/pi/index.js CHANGED
@@ -11476,7 +11476,7 @@ var DECISION_OPTION_KEY = "option";
11476
11476
  var DECISION_LABEL_JOIN = " | ";
11477
11477
  var RELEASE_REPO_URL = "https://github.com/mksglu/context-mode.git";
11478
11478
  var RELEASE_BRANCH = "release";
11479
- var BUNDLE_SHA = true ? "3374b3ce2faee35730f5c335678ca40b405e923c" : void 0;
11479
+ var BUNDLE_SHA = true ? "f61b6973877b47851ac5938c46fee1399946289e" : void 0;
11480
11480
  var DOCTOR_CHECK_ORDER = Object.freeze(["D1", "D2", "D3", "D4", "D5", "D5b", "D6", "D7", "D8", "D9", "D10"]);
11481
11481
  var DOCTOR_LABEL = Object.freeze({
11482
11482
  D1: "version",
@@ -11783,8 +11783,10 @@ var MCP_ARGS_FIELD = "args";
11783
11783
  var ZCODE_MCP_FEATURE_KEY = Object.freeze(["features", "mcp"]);
11784
11784
  var CODEX_OMIT_TOOLS_FROM_FIELD = "omit_tools_from";
11785
11785
  var CODEX_OMIT_DEFERRED = Object.freeze(["deferred"]);
11786
+ var CODEX_APPROVAL_MODE_FIELD = "default_tools_approval_mode";
11787
+ var CODEX_APPROVAL_APPROVE = "approve";
11786
11788
  var OWN_MCP_ENTRY = Object.freeze({
11787
- codex: { file: [".codex", "config.toml"], key: ["mcp_servers", SERVER_KEY], fields: { [CODEX_OMIT_TOOLS_FROM_FIELD]: CODEX_OMIT_DEFERRED } },
11789
+ 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 } },
11788
11790
  vscode: { file: [".vscode", "mcp.json"], key: ["servers", SERVER_KEY] },
11789
11791
  kiro: { file: [".kiro", "settings", "mcp.json"], key: ["mcpServers", SERVER_KEY] },
11790
11792
  zcode: {
@@ -12305,9 +12307,62 @@ function readResult5(resp) {
12305
12307
  const isError = typeof resp === "object" && resp !== null && resp.is_error === true;
12306
12308
  return { isError, bytes: Buffer.byteLength(text), text };
12307
12309
  }
12310
+ var CAMEL_EVENTS = {
12311
+ sessionStart: "SessionStart",
12312
+ userPromptSubmitted: "UserPromptSubmit",
12313
+ preToolUse: "PreToolUse",
12314
+ postToolUse: "PostToolUse",
12315
+ preCompact: "PreCompact"
12316
+ };
12317
+ var EVENT_BY_KEY2 = [
12318
+ ["toolResult", "postToolUse"],
12319
+ ["toolName", "preToolUse"],
12320
+ ["prompt", "userPromptSubmitted"],
12321
+ ["source", "sessionStart"],
12322
+ ["trigger", "preCompact"]
12323
+ ];
12324
+ var SESSION_SOURCES = { new: "startup", startup: "startup", resume: "resume" };
12325
+ var RESULT_SUCCESS2 = "success";
12326
+ function isRecord2(v) {
12327
+ return typeof v === "object" && v !== null && !Array.isArray(v);
12328
+ }
12329
+ function readArgs2(v) {
12330
+ if (isRecord2(v)) return v;
12331
+ if (typeof v !== "string") return {};
12332
+ try {
12333
+ const parsed = JSON.parse(v);
12334
+ return isRecord2(parsed) ? parsed : {};
12335
+ } catch {
12336
+ return {};
12337
+ }
12338
+ }
12339
+ function readCamelResult(v) {
12340
+ const r = isRecord2(v) ? v : {};
12341
+ const text = typeof r.textResultForLlm === "string" ? r.textResultForLlm : "";
12342
+ return { isError: typeof r.resultType === "string" && r.resultType !== RESULT_SUCCESS2, bytes: Buffer.byteLength(text), text };
12343
+ }
12344
+ function decodeCamel(p, name) {
12345
+ const event = typeof name === "string" ? CAMEL_EVENTS[name] ?? VSCODE_EVENTS.find((e) => e === name) : void 0;
12346
+ if (event === void 0) throw new Error("vscode: unknown hook event " + String(name));
12347
+ const ev = { event, agent: "vscode", sessionId: String(p.sessionId ?? ""), cwd: String(p.cwd ?? "") };
12348
+ if (event === "SessionStart" && typeof p.source === "string" && SESSION_SOURCES[p.source] !== void 0) ev.source = SESSION_SOURCES[p.source];
12349
+ if (event === "UserPromptSubmit" && typeof p.prompt === "string") ev.prompt = p.prompt;
12350
+ if (event === "PreToolUse" || event === "PostToolUse") {
12351
+ const toolName = String(p.toolName ?? "");
12352
+ ev.tool = { name: toolName, canonicalName: canonicalName4(toolName), input: readArgs2(p.toolArgs) };
12353
+ }
12354
+ if (event === "PostToolUse") ev.result = readCamelResult(p.toolResult);
12355
+ return ev;
12356
+ }
12308
12357
  function decode7(raw) {
12309
12358
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error("vscode: hook payload is not a JSON object");
12310
12359
  const p = raw;
12360
+ if (p.hookEventName !== void 0) return decodeCamel(p, p.hookEventName);
12361
+ if (p.hook_event_name === void 0) {
12362
+ const byKey = EVENT_BY_KEY2.find(([key]) => Object.hasOwn(p, key))?.[1];
12363
+ if (byKey === void 0) throw new Error("vscode: missing required field hook_event_name");
12364
+ return decodeCamel(p, byKey);
12365
+ }
12311
12366
  const event = VSCODE_EVENTS.find((e) => e === p.hook_event_name);
12312
12367
  if (event === void 0) throw new Error("vscode: unknown hook event " + String(p.hook_event_name));
12313
12368
  const ev = { event, agent: "vscode", sessionId: String(p.session_id ?? ""), cwd: String(p.cwd ?? "") };
@@ -12315,7 +12370,7 @@ function decode7(raw) {
12315
12370
  if (event === "UserPromptSubmit" && typeof p.prompt === "string") ev.prompt = p.prompt;
12316
12371
  if (event === "PreToolUse" || event === "PostToolUse") {
12317
12372
  const name = String(p.tool_name ?? "");
12318
- const input = typeof p.tool_input === "object" && p.tool_input !== null && !Array.isArray(p.tool_input) ? p.tool_input : {};
12373
+ const input = isRecord2(p.tool_input) ? p.tool_input : {};
12319
12374
  ev.tool = { name, canonicalName: canonicalName4(name), input };
12320
12375
  }
12321
12376
  if (event === "PostToolUse") ev.result = readResult5(p.tool_response);
@@ -12334,12 +12389,14 @@ var KIRO_EVENTS = {
12334
12389
  PromptSubmit: "UserPromptSubmit",
12335
12390
  userPromptSubmit: "UserPromptSubmit",
12336
12391
  PreToolUse: "PreToolUse",
12337
- PostToolUse: "PostToolUse"
12392
+ preToolUse: "PreToolUse",
12393
+ PostToolUse: "PostToolUse",
12394
+ postToolUse: "PostToolUse"
12338
12395
  };
12339
12396
  var PROMPT_ENV = "USER_PROMPT";
12340
12397
  var MCP_PREFIX3 = "mcp_";
12341
- var SHELL_TOOL_NAME2 = "execute_bash";
12342
- var NATIVE_TO_CANONICAL6 = { [SHELL_TOOL_NAME2]: "Bash" };
12398
+ var SHELL_TOOL_NAMES = Object.freeze(["execute_bash", "execute_pwsh", "shell"]);
12399
+ var NATIVE_TO_CANONICAL6 = Object.fromEntries(SHELL_TOOL_NAMES.map((n) => [n, "Bash"]));
12343
12400
  var MCP_SEP3 = "_";
12344
12401
  var KIRO_SOURCES = { startup: "startup", resume: "resume", clear: "clear", compact: "compact" };
12345
12402
  function canonicalName5(name) {
@@ -12422,8 +12479,8 @@ var OPENCODE_EVENTS = {
12422
12479
  compaction: "PreCompact",
12423
12480
  "step-finish": "Usage"
12424
12481
  };
12425
- var SHELL_TOOL_NAME3 = "bash";
12426
- var NATIVE_TO_CANONICAL7 = { webfetch: "WebFetch", [SHELL_TOOL_NAME3]: "Bash" };
12482
+ var SHELL_TOOL_NAME2 = "bash";
12483
+ var NATIVE_TO_CANONICAL7 = { webfetch: "WebFetch", [SHELL_TOOL_NAME2]: "Bash" };
12427
12484
  function toCanonicalTool(name) {
12428
12485
  if (name.startsWith(OWN_WIRE_PREFIX)) return name.slice(OWN_WIRE_PREFIX.length);
12429
12486
  return Object.prototype.hasOwnProperty.call(NATIVE_TO_CANONICAL7, name) ? NATIVE_TO_CANONICAL7[name] : name;
@@ -12543,8 +12600,8 @@ var ADAPTERS = Object.freeze([
12543
12600
  hookTimeoutMs: HOOK_TIMEOUT_MS,
12544
12601
  denyChannel: "deny-reason",
12545
12602
  hookChannel: { kind: "package", path: "hooks/qwen.json" },
12546
- skillChannel: { kind: "home-dir", path: ".qwen/skills" },
12547
- // ADR-0020
12603
+ skillChannel: { kind: "package", path: "skills" },
12604
+ // ADR-0020, D-HQ-SKILLS-3: qwen loads <extension>/skills, shared with gemini
12548
12605
  decode: decode5,
12549
12606
  encode: encode5
12550
12607
  },
@@ -12580,8 +12637,8 @@ var ADAPTERS = Object.freeze([
12580
12637
  hookTimeoutMs: HOOK_TIMEOUT_MS,
12581
12638
  denyChannel: "deny-reason",
12582
12639
  hookChannel: { kind: "home-file", path: ".copilot/hooks/context-mode-vscode.json" },
12583
- skillChannel: { kind: "home-dir", path: ".copilot/skills" },
12584
- // ADR-0020
12640
+ skillChannel: { kind: "home-dir", path: ".agents/skills" },
12641
+ // ADR-0020, D-HQ-COPILOT-NAMES-3: Copilot CLI owns ~/.copilot/skills
12585
12642
  decode: decode7,
12586
12643
  encode: encode7
12587
12644
  },
@@ -12590,9 +12647,9 @@ var ADAPTERS = Object.freeze([
12590
12647
  installMode: "mcp-entry",
12591
12648
  projectSource: "arg:--agent+cwd",
12592
12649
  toolNamePrefix: TOOL_NAME_PREFIX8,
12593
- nativeTools: { shell: [SHELL_TOOL_NAME2] },
12650
+ nativeTools: { shell: [...SHELL_TOOL_NAMES] },
12594
12651
  execReadOnlyHint: false,
12595
- // D-HF-KIRO-SHELL-1
12652
+ // D-HF-KIRO-SHELL-1, D-N7-KIRO-1
12596
12653
  eventMap: { SessionStart: "SessionStart", UserPromptSubmit: "UserPromptSubmit", PreToolUse: "PreToolUse", PostToolUse: "PostToolUse" },
12597
12654
  compactDelivery: "none",
12598
12655
  compactSummary: "none",
@@ -12605,7 +12662,7 @@ var ADAPTERS = Object.freeze([
12605
12662
  encode: encode8
12606
12663
  },
12607
12664
  {
12608
- // toolNamePrefix and nativeTools unverified until T-ZC (DECISIONS-r9 R3, R4: Claude names).
12665
+ // toolNamePrefix is the documented ZCode name mcp__<server>__<tool> (D-N7-ZCODE-NAMES-1); nativeTools are Claude names.
12609
12666
  id: "zcode",
12610
12667
  installMode: "hooks+mcp",
12611
12668
  projectSource: "spawn-cwd",
@@ -12647,7 +12704,7 @@ var ADAPTERS = Object.freeze([
12647
12704
  installMode: "in-process",
12648
12705
  projectSource: "spawn-cwd",
12649
12706
  toolNamePrefix: TOOL_NAME_PREFIX10,
12650
- nativeTools: { shell: [SHELL_TOOL_NAME3] },
12707
+ nativeTools: { shell: [SHELL_TOOL_NAME2] },
12651
12708
  execReadOnlyHint: false,
12652
12709
  // D-HF-OPENCODE-SHELL-1
12653
12710
  // Usage: step-finish cost row (DEVIATIONS D-M5-arch-2).
@@ -11,5 +11,5 @@
11
11
  }
12
12
  },
13
13
  "name": "context-mode",
14
- "version": "2.0.0-next.6"
14
+ "version": "2.0.0-next.7"
15
15
  }
package/run.mjs CHANGED
@@ -356,8 +356,10 @@ var OPENCODE_TOOL_PREFIX = SERVER_KEY + "_";
356
356
  var ZCODE_MCP_FEATURE_KEY = Object.freeze(["features", "mcp"]);
357
357
  var CODEX_OMIT_TOOLS_FROM_FIELD = "omit_tools_from";
358
358
  var CODEX_OMIT_DEFERRED = Object.freeze(["deferred"]);
359
+ var CODEX_APPROVAL_MODE_FIELD = "default_tools_approval_mode";
360
+ var CODEX_APPROVAL_APPROVE = "approve";
359
361
  var OWN_MCP_ENTRY = Object.freeze({
360
- codex: { file: [".codex", "config.toml"], key: ["mcp_servers", SERVER_KEY], fields: { [CODEX_OMIT_TOOLS_FROM_FIELD]: CODEX_OMIT_DEFERRED } },
362
+ 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 } },
361
363
  vscode: { file: [".vscode", "mcp.json"], key: ["servers", SERVER_KEY] },
362
364
  kiro: { file: [".kiro", "settings", "mcp.json"], key: ["mcpServers", SERVER_KEY] },
363
365
  zcode: {
@@ -748,9 +750,62 @@ function readResult4(resp) {
748
750
  const isError = typeof resp === "object" && resp !== null && resp.is_error === true;
749
751
  return { isError, bytes: Buffer.byteLength(text), text };
750
752
  }
753
+ var CAMEL_EVENTS = {
754
+ sessionStart: "SessionStart",
755
+ userPromptSubmitted: "UserPromptSubmit",
756
+ preToolUse: "PreToolUse",
757
+ postToolUse: "PostToolUse",
758
+ preCompact: "PreCompact"
759
+ };
760
+ var EVENT_BY_KEY2 = [
761
+ ["toolResult", "postToolUse"],
762
+ ["toolName", "preToolUse"],
763
+ ["prompt", "userPromptSubmitted"],
764
+ ["source", "sessionStart"],
765
+ ["trigger", "preCompact"]
766
+ ];
767
+ var SESSION_SOURCES = { new: "startup", startup: "startup", resume: "resume" };
768
+ var RESULT_SUCCESS2 = "success";
769
+ function isRecord2(v) {
770
+ return typeof v === "object" && v !== null && !Array.isArray(v);
771
+ }
772
+ function readArgs2(v) {
773
+ if (isRecord2(v)) return v;
774
+ if (typeof v !== "string") return {};
775
+ try {
776
+ const parsed = JSON.parse(v);
777
+ return isRecord2(parsed) ? parsed : {};
778
+ } catch {
779
+ return {};
780
+ }
781
+ }
782
+ function readCamelResult(v) {
783
+ const r = isRecord2(v) ? v : {};
784
+ const text = typeof r.textResultForLlm === "string" ? r.textResultForLlm : "";
785
+ return { isError: typeof r.resultType === "string" && r.resultType !== RESULT_SUCCESS2, bytes: Buffer.byteLength(text), text };
786
+ }
787
+ function decodeCamel(p, name) {
788
+ const event = typeof name === "string" ? CAMEL_EVENTS[name] ?? VSCODE_EVENTS.find((e) => e === name) : void 0;
789
+ if (event === void 0) throw new Error("vscode: unknown hook event " + String(name));
790
+ const ev = { event, agent: "vscode", sessionId: String(p.sessionId ?? ""), cwd: String(p.cwd ?? "") };
791
+ if (event === "SessionStart" && typeof p.source === "string" && SESSION_SOURCES[p.source] !== void 0) ev.source = SESSION_SOURCES[p.source];
792
+ if (event === "UserPromptSubmit" && typeof p.prompt === "string") ev.prompt = p.prompt;
793
+ if (event === "PreToolUse" || event === "PostToolUse") {
794
+ const toolName = String(p.toolName ?? "");
795
+ ev.tool = { name: toolName, canonicalName: canonicalName4(toolName), input: readArgs2(p.toolArgs) };
796
+ }
797
+ if (event === "PostToolUse") ev.result = readCamelResult(p.toolResult);
798
+ return ev;
799
+ }
751
800
  function decode6(raw) {
752
801
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error("vscode: hook payload is not a JSON object");
753
802
  const p = raw;
803
+ if (p.hookEventName !== void 0) return decodeCamel(p, p.hookEventName);
804
+ if (p.hook_event_name === void 0) {
805
+ const byKey = EVENT_BY_KEY2.find(([key]) => Object.hasOwn(p, key))?.[1];
806
+ if (byKey === void 0) throw new Error("vscode: missing required field hook_event_name");
807
+ return decodeCamel(p, byKey);
808
+ }
754
809
  const event = VSCODE_EVENTS.find((e) => e === p.hook_event_name);
755
810
  if (event === void 0) throw new Error("vscode: unknown hook event " + String(p.hook_event_name));
756
811
  const ev = { event, agent: "vscode", sessionId: String(p.session_id ?? ""), cwd: String(p.cwd ?? "") };
@@ -758,7 +813,7 @@ function decode6(raw) {
758
813
  if (event === "UserPromptSubmit" && typeof p.prompt === "string") ev.prompt = p.prompt;
759
814
  if (event === "PreToolUse" || event === "PostToolUse") {
760
815
  const name = String(p.tool_name ?? "");
761
- const input = typeof p.tool_input === "object" && p.tool_input !== null && !Array.isArray(p.tool_input) ? p.tool_input : {};
816
+ const input = isRecord2(p.tool_input) ? p.tool_input : {};
762
817
  ev.tool = { name, canonicalName: canonicalName4(name), input };
763
818
  }
764
819
  if (event === "PostToolUse") ev.result = readResult4(p.tool_response);
@@ -777,12 +832,14 @@ var KIRO_EVENTS = {
777
832
  PromptSubmit: "UserPromptSubmit",
778
833
  userPromptSubmit: "UserPromptSubmit",
779
834
  PreToolUse: "PreToolUse",
780
- PostToolUse: "PostToolUse"
835
+ preToolUse: "PreToolUse",
836
+ PostToolUse: "PostToolUse",
837
+ postToolUse: "PostToolUse"
781
838
  };
782
839
  var PROMPT_ENV = "USER_PROMPT";
783
840
  var MCP_PREFIX3 = "mcp_";
784
- var SHELL_TOOL_NAME2 = "execute_bash";
785
- var NATIVE_TO_CANONICAL5 = { [SHELL_TOOL_NAME2]: "Bash" };
841
+ var SHELL_TOOL_NAMES = Object.freeze(["execute_bash", "execute_pwsh", "shell"]);
842
+ var NATIVE_TO_CANONICAL5 = Object.fromEntries(SHELL_TOOL_NAMES.map((n) => [n, "Bash"]));
786
843
  var MCP_SEP3 = "_";
787
844
  var KIRO_SOURCES = { startup: "startup", resume: "resume", clear: "clear", compact: "compact" };
788
845
  function canonicalName5(name) {
@@ -923,8 +980,8 @@ var OPENCODE_EVENTS = {
923
980
  compaction: "PreCompact",
924
981
  "step-finish": "Usage"
925
982
  };
926
- var SHELL_TOOL_NAME3 = "bash";
927
- var NATIVE_TO_CANONICAL7 = { webfetch: "WebFetch", [SHELL_TOOL_NAME3]: "Bash" };
983
+ var SHELL_TOOL_NAME2 = "bash";
984
+ var NATIVE_TO_CANONICAL7 = { webfetch: "WebFetch", [SHELL_TOOL_NAME2]: "Bash" };
928
985
  function toCanonicalTool(name) {
929
986
  if (name.startsWith(OWN_WIRE_PREFIX)) return name.slice(OWN_WIRE_PREFIX.length);
930
987
  return Object.prototype.hasOwnProperty.call(NATIVE_TO_CANONICAL7, name) ? NATIVE_TO_CANONICAL7[name] : name;
@@ -1044,8 +1101,8 @@ var ADAPTERS = Object.freeze([
1044
1101
  hookTimeoutMs: HOOK_TIMEOUT_MS,
1045
1102
  denyChannel: "deny-reason",
1046
1103
  hookChannel: { kind: "package", path: "hooks/qwen.json" },
1047
- skillChannel: { kind: "home-dir", path: ".qwen/skills" },
1048
- // ADR-0020
1104
+ skillChannel: { kind: "package", path: "skills" },
1105
+ // ADR-0020, D-HQ-SKILLS-3: qwen loads <extension>/skills, shared with gemini
1049
1106
  decode: decode4,
1050
1107
  encode: encode4
1051
1108
  },
@@ -1081,8 +1138,8 @@ var ADAPTERS = Object.freeze([
1081
1138
  hookTimeoutMs: HOOK_TIMEOUT_MS,
1082
1139
  denyChannel: "deny-reason",
1083
1140
  hookChannel: { kind: "home-file", path: ".copilot/hooks/context-mode-vscode.json" },
1084
- skillChannel: { kind: "home-dir", path: ".copilot/skills" },
1085
- // ADR-0020
1141
+ skillChannel: { kind: "home-dir", path: ".agents/skills" },
1142
+ // ADR-0020, D-HQ-COPILOT-NAMES-3: Copilot CLI owns ~/.copilot/skills
1086
1143
  decode: decode6,
1087
1144
  encode: encode6
1088
1145
  },
@@ -1091,9 +1148,9 @@ var ADAPTERS = Object.freeze([
1091
1148
  installMode: "mcp-entry",
1092
1149
  projectSource: "arg:--agent+cwd",
1093
1150
  toolNamePrefix: TOOL_NAME_PREFIX7,
1094
- nativeTools: { shell: [SHELL_TOOL_NAME2] },
1151
+ nativeTools: { shell: [...SHELL_TOOL_NAMES] },
1095
1152
  execReadOnlyHint: false,
1096
- // D-HF-KIRO-SHELL-1
1153
+ // D-HF-KIRO-SHELL-1, D-N7-KIRO-1
1097
1154
  eventMap: { SessionStart: "SessionStart", UserPromptSubmit: "UserPromptSubmit", PreToolUse: "PreToolUse", PostToolUse: "PostToolUse" },
1098
1155
  compactDelivery: "none",
1099
1156
  compactSummary: "none",
@@ -1106,7 +1163,7 @@ var ADAPTERS = Object.freeze([
1106
1163
  encode: encode7
1107
1164
  },
1108
1165
  {
1109
- // toolNamePrefix and nativeTools unverified until T-ZC (DECISIONS-r9 R3, R4: Claude names).
1166
+ // toolNamePrefix is the documented ZCode name mcp__<server>__<tool> (D-N7-ZCODE-NAMES-1); nativeTools are Claude names.
1110
1167
  id: "zcode",
1111
1168
  installMode: "hooks+mcp",
1112
1169
  projectSource: "spawn-cwd",
@@ -1148,7 +1205,7 @@ var ADAPTERS = Object.freeze([
1148
1205
  installMode: "in-process",
1149
1206
  projectSource: "spawn-cwd",
1150
1207
  toolNamePrefix: TOOL_NAME_PREFIX10,
1151
- nativeTools: { shell: [SHELL_TOOL_NAME3] },
1208
+ nativeTools: { shell: [SHELL_TOOL_NAME2] },
1152
1209
  execReadOnlyHint: false,
1153
1210
  // D-HF-OPENCODE-SHELL-1
1154
1211
  // Usage: step-finish cost row (DEVIATIONS D-M5-arch-2).