context-mode 1.0.106 → 1.0.108

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.
Files changed (72) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.openclaw-plugin/openclaw.plugin.json +1 -1
  4. package/.openclaw-plugin/package.json +1 -1
  5. package/README.md +22 -18
  6. package/build/adapters/claude-code/index.js +26 -9
  7. package/build/adapters/copilot-base.d.ts +3 -3
  8. package/build/adapters/cursor/hooks.js +8 -0
  9. package/build/adapters/cursor/index.js +4 -1
  10. package/build/adapters/gemini-cli/hooks.d.ts +6 -1
  11. package/build/adapters/gemini-cli/hooks.js +7 -1
  12. package/build/adapters/gemini-cli/index.js +12 -0
  13. package/build/adapters/kiro/hooks.js +4 -0
  14. package/build/adapters/kiro/index.d.ts +9 -2
  15. package/build/adapters/kiro/index.js +49 -27
  16. package/build/adapters/opencode/index.js +11 -5
  17. package/build/adapters/qwen-code/index.js +18 -0
  18. package/build/adapters/vscode-copilot/hooks.d.ts +0 -4
  19. package/build/adapters/vscode-copilot/hooks.js +6 -6
  20. package/build/cli.js +93 -12
  21. package/build/openclaw/mcp-tools.d.ts +54 -0
  22. package/build/openclaw/mcp-tools.js +198 -0
  23. package/build/openclaw-plugin.d.ts +9 -0
  24. package/build/openclaw-plugin.js +132 -16
  25. package/build/opencode-plugin.d.ts +29 -4
  26. package/build/opencode-plugin.js +154 -7
  27. package/build/pi-extension.js +123 -29
  28. package/build/server.d.ts +1 -0
  29. package/build/server.js +26 -1
  30. package/build/session/analytics.js +36 -13
  31. package/build/session/extract.d.ts +1 -1
  32. package/build/session/extract.js +46 -1
  33. package/cli.bundle.mjs +133 -132
  34. package/hooks/core/platform-detect.mjs +49 -0
  35. package/hooks/core/routing.mjs +13 -1
  36. package/hooks/cursor/afteragentresponse.mjs +74 -0
  37. package/hooks/ensure-deps.mjs +28 -12
  38. package/hooks/gemini-cli/beforeagent.mjs +99 -0
  39. package/hooks/kiro/agentspawn.mjs +97 -0
  40. package/hooks/kiro/userpromptsubmit.mjs +88 -0
  41. package/hooks/posttooluse.mjs +90 -80
  42. package/hooks/precompact.mjs +56 -46
  43. package/hooks/pretooluse.mjs +161 -167
  44. package/hooks/routing-block.mjs +2 -2
  45. package/hooks/run-hook.mjs +82 -0
  46. package/hooks/session-extract.bundle.mjs +2 -2
  47. package/hooks/sessionstart.mjs +187 -153
  48. package/hooks/userpromptsubmit.mjs +69 -58
  49. package/hooks/vscode-copilot/sessionstart.mjs +13 -14
  50. package/openclaw.plugin.json +1 -1
  51. package/package.json +2 -1
  52. package/scripts/heal-better-sqlite3.mjs +108 -0
  53. package/scripts/postinstall.mjs +27 -0
  54. package/server.bundle.mjs +79 -79
  55. package/skills/UPSTREAM-CREDITS.md +51 -0
  56. package/skills/context-mode-ops/SKILL.md +147 -0
  57. package/skills/diagnose/SKILL.md +122 -0
  58. package/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
  59. package/skills/grill-me/SKILL.md +15 -0
  60. package/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  61. package/skills/grill-with-docs/CONTEXT-FORMAT.md +77 -0
  62. package/skills/grill-with-docs/SKILL.md +93 -0
  63. package/skills/improve-codebase-architecture/DEEPENING.md +37 -0
  64. package/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -0
  65. package/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
  66. package/skills/improve-codebase-architecture/SKILL.md +76 -0
  67. package/skills/tdd/SKILL.md +114 -0
  68. package/skills/tdd/deep-modules.md +33 -0
  69. package/skills/tdd/interface-design.md +31 -0
  70. package/skills/tdd/mocking.md +59 -0
  71. package/skills/tdd/refactoring.md +10 -0
  72. package/skills/tdd/tests.md +61 -0
@@ -850,14 +850,59 @@ export function resetIterationLoopState() {
850
850
  callHistory.length = 0;
851
851
  }
852
852
  // ── Public API ─────────────────────────────────────────────────────────────
853
+ /**
854
+ * Map platform-native tool names (Qwen Code, Gemini CLI, OpenCode, etc.) to the
855
+ * canonical Claude Code names this extractor branches on. Without this, Qwen's
856
+ * `run_shell_command` events would silently produce zero git/cwd/env extractions.
857
+ *
858
+ * Evidence: refs/platforms/qwen-code/packages/core/src/tools/tool-names.ts
859
+ */
860
+ const TOOL_NAME_NORMALIZE = {
861
+ // Qwen Code / Gemini CLI native names
862
+ run_shell_command: "Bash",
863
+ read_file: "Read",
864
+ read_many_files: "Read",
865
+ grep_search: "Grep",
866
+ search_file_content: "Grep",
867
+ web_fetch: "WebFetch",
868
+ write_file: "Write",
869
+ edit: "Edit",
870
+ glob: "Glob",
871
+ todo_write: "TodoWrite",
872
+ ask_user_question: "AskUserQuestion",
873
+ list_directory: "LS",
874
+ save_memory: "Memory",
875
+ skill: "Skill",
876
+ exit_plan_mode: "ExitPlanMode",
877
+ agent: "Agent",
878
+ // OpenCode native names
879
+ bash: "Bash",
880
+ view: "Read",
881
+ grep: "Grep",
882
+ fetch: "WebFetch",
883
+ // Codex CLI
884
+ shell: "Bash",
885
+ shell_command: "Bash",
886
+ exec_command: "Bash",
887
+ "container.exec": "Bash",
888
+ local_shell: "Bash",
889
+ grep_files: "Grep",
890
+ };
891
+ function normalizeHookInput(input) {
892
+ const normalized = TOOL_NAME_NORMALIZE[input.tool_name];
893
+ if (!normalized || normalized === input.tool_name)
894
+ return input;
895
+ return { ...input, tool_name: normalized };
896
+ }
853
897
  /**
854
898
  * Extract session events from a PostToolUse hook input.
855
899
  *
856
900
  * Accepts the raw hook JSON shape (snake_case keys) as received from stdin.
857
901
  * Returns an array of zero or more SessionEvents. Never throws.
858
902
  */
859
- export function extractEvents(input) {
903
+ export function extractEvents(rawInput) {
860
904
  try {
905
+ const input = normalizeHookInput(rawInput);
861
906
  const events = [];
862
907
  // File + Rule (handles Read/Edit/Write)
863
908
  events.push(...extractFileAndRule(input));