@yugabytedb/meko-mcp 2.1.0 → 2.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.
Files changed (70) hide show
  1. package/README.md +233 -40
  2. package/assets/hooks-handlers/codex-session-end.sh +4 -69
  3. package/assets/hooks-handlers/cursor-session-start.sh +19 -1
  4. package/assets/hooks-handlers/lib/capture-cleanup-cli.js +1473 -0
  5. package/assets/hooks-handlers/lib/capture-notices.js +438 -0
  6. package/assets/hooks-handlers/lib/capture-state.js +2173 -0
  7. package/assets/hooks-handlers/lib/capture-status-cli.js +86 -0
  8. package/assets/hooks-handlers/lib/capture.js +2782 -403
  9. package/assets/hooks-handlers/lib/checkpoint-timer.js +485 -81
  10. package/assets/hooks-handlers/lib/journal-bridge.js +218 -0
  11. package/assets/hooks-handlers/lib/kiro-handler.js +760 -0
  12. package/assets/hooks-handlers/lib/opencode-handler.js +620 -0
  13. package/assets/hooks-handlers/lib/opencode-normalizer.js +145 -0
  14. package/assets/hooks-handlers/lib/terminal-handoff.js +427 -0
  15. package/assets/hooks-handlers/session-end.sh +3 -34
  16. package/assets/opencode-plugin/meko.js +213 -0
  17. package/assets/scripts/meko-statusline.sh +123 -16
  18. package/assets/skills/meko-mcp-tools/SKILL.md +116 -126
  19. package/assets/skills/meko-mcp-tools/references/_sections.md +3 -3
  20. package/assets/skills/meko-mcp-tools/references/tools-agent-id-conventions.md +25 -18
  21. package/assets/skills/meko-mcp-tools/references/tools-cookbook.md +99 -24
  22. package/assets/skills/meko-mcp-tools/references/tools-datapack-workflow.md +1 -1
  23. package/assets/skills/meko-mcp-tools/references/tools-known-limitations.md +53 -6
  24. package/assets/skills/meko-mcp-tools/references/tools-memory-vs-conversation.md +25 -79
  25. package/assets/skills/meko-mcp-tools/references/tools-overview.md +37 -26
  26. package/assets/skills/meko-mcp-tools/references/tools-rag-workflow.md +14 -8
  27. package/assets/skills/meko-mcp-tools/references/tools-troubleshooting.md +66 -1
  28. package/assets/skills/meko-mcp-tools/references/tools-user-id-conventions.md +7 -40
  29. package/assets/skills/meko-mcp-tools-desktop/SKILL.md +56 -20
  30. package/assets/skills/meko-mcp-tools-desktop/desktop/README.md +1 -1
  31. package/assets/skills/meko-mcp-tools-desktop/references/_sections.md +1 -1
  32. package/assets/skills/meko-mcp-tools-desktop/references/tools-agent-id-conventions.md +15 -8
  33. package/assets/skills/meko-mcp-tools-desktop/references/tools-cookbook.md +99 -36
  34. package/assets/skills/meko-mcp-tools-desktop/references/tools-known-limitations.md +22 -5
  35. package/assets/skills/meko-mcp-tools-desktop/references/tools-memory-vs-conversation.md +18 -14
  36. package/assets/skills/meko-mcp-tools-desktop/references/tools-overview.md +39 -28
  37. package/assets/skills/meko-mcp-tools-desktop/references/tools-rag-workflow.md +14 -8
  38. package/assets/skills/meko-mcp-tools-desktop/references/tools-troubleshooting.md +67 -1
  39. package/assets/skills/meko-select-datapack-desktop/SKILL.md +4 -4
  40. package/assets/skills/meko-select-datapack-desktop/references/cookbook.md +8 -8
  41. package/assets/skills/meko-select-datapack-desktop/references/role-display-future.md +7 -5
  42. package/assets/skills/meko-select-datapack-desktop/references/troubleshooting.md +4 -4
  43. package/bin/create-meko-setup.mjs +113 -12
  44. package/lib/capture-cleanup.mjs +63 -0
  45. package/lib/capture-status.mjs +67 -0
  46. package/lib/clients/aliases.mjs +5 -0
  47. package/lib/clients/claude-code.mjs +1 -0
  48. package/lib/clients/claude-desktop.mjs +120 -5
  49. package/lib/clients/codex.mjs +85 -37
  50. package/lib/clients/common.mjs +7 -0
  51. package/lib/clients/index.mjs +4 -0
  52. package/lib/clients/kiro.mjs +705 -0
  53. package/lib/clients/opencode.mjs +532 -0
  54. package/lib/config.mjs +158 -1
  55. package/lib/installer.mjs +18 -1
  56. package/lib/migrate/adapters/claude-code.mjs +11 -2
  57. package/lib/migrate/adapters/codex.mjs +497 -0
  58. package/lib/migrate/adapters/memory-md.mjs +27 -8
  59. package/lib/migrate/adapters/opencode.mjs +148 -0
  60. package/lib/migrate/claude-parser.mjs +153 -9
  61. package/lib/migrate/id.mjs +217 -10
  62. package/lib/migrate/mcp-client.mjs +25 -1
  63. package/lib/migrate/opencode-normalizer.mjs +132 -0
  64. package/lib/migrate/orchestrator.mjs +299 -56
  65. package/lib/migrate/progress.mjs +239 -5
  66. package/lib/migrate/registry.mjs +72 -0
  67. package/lib/migrate.mjs +100 -10
  68. package/lib/prompt.mjs +16 -1
  69. package/package.json +4 -4
  70. package/scripts/bundle-assets.mjs +4 -0
@@ -3,76 +3,11 @@
3
3
  # Codex SessionEnd hook.
4
4
  #
5
5
  # Codex caps SessionEnd hooks at three seconds. The foreground invocation
6
- # therefore persists the hook input, starts a detached worker, and exits
7
- # immediately. The worker reuses the shared capture.js implementation and
8
- # removes the persisted input when capture finishes.
6
+ # therefore enqueues via the shared terminal-handoff worker and exits
7
+ # immediately with `{}`. The worker drains lifecycle=closing and may retry
8
+ # until MEKO_WORKER_MAX_AGE_SECONDS, leaving the outbox pending afterward.
9
9
 
10
10
  set -u
11
11
 
12
12
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
13
- CAPTURE_SCRIPT="$SCRIPT_DIR/lib/capture.js"
14
- STATE_DIR="${MEKO_WATERMARK_DIR:-$HOME/.claude/meko-capture}"
15
- JOB_DIR="$STATE_DIR/session-end-jobs"
16
- LOG_FILE="$STATE_DIR/session-end.log"
17
-
18
- run_worker() {
19
- JOB_FILE="${1:-}"
20
- if [ -z "$JOB_FILE" ] || [ ! -f "$JOB_FILE" ]; then
21
- printf '[meko-capture] Codex SessionEnd worker received no readable job file\n' >&2
22
- return 1
23
- fi
24
-
25
- trap 'rm -f "$JOB_FILE"' EXIT HUP INT TERM
26
- node "$CAPTURE_SCRIPT" session-end <"$JOB_FILE"
27
- }
28
-
29
- if [ "${1:-}" = "--worker" ]; then
30
- run_worker "${2:-}"
31
- exit $?
32
- fi
33
-
34
- # Hook input can contain local paths and session metadata. Keep the spool
35
- # directory and files private to the current user.
36
- umask 077
37
- mkdir -p "$JOB_DIR"
38
- JOB_FILE="$(mktemp "$JOB_DIR/session-end.XXXXXX")" || {
39
- printf '[meko-capture] Codex SessionEnd could not create a job file\n' >&2
40
- printf '{}'
41
- exit 0
42
- }
43
-
44
- if ! cat >"$JOB_FILE"; then
45
- rm -f "$JOB_FILE"
46
- printf '[meko-capture] Codex SessionEnd could not persist hook input\n' >&2
47
- printf '{}'
48
- exit 0
49
- fi
50
-
51
- # Stop the periodic timer before handing final capture to the worker. This is
52
- # deliberately best-effort: a missing or stale PID must not block SessionEnd.
53
- TRANSCRIPT_PATH="$(node - "$JOB_FILE" <<'NODE' 2>/dev/null
54
- const fs = require("fs");
55
- const d = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
56
- const p = d.transcript_path || (d.hookSpecificInput || {}).transcript_path || "";
57
- process.stdout.write(p);
58
- NODE
59
- )"
60
-
61
- if [ -n "$TRANSCRIPT_PATH" ]; then
62
- SESSION_ID="$(basename "$TRANSCRIPT_PATH" .jsonl)"
63
- PID_FILE="$STATE_DIR/${SESSION_ID}.timer.pid"
64
- if [ -f "$PID_FILE" ]; then
65
- kill "$(cat "$PID_FILE")" 2>/dev/null || true
66
- rm -f "$PID_FILE"
67
- fi
68
- fi
69
-
70
- # Redirect every inherited descriptor before returning to Codex. nohup keeps
71
- # the worker alive after the hook shell exits; disown is available in bash but
72
- # remains best-effort for non-interactive shells.
73
- nohup bash "$0" --worker "$JOB_FILE" \
74
- </dev/null >>"$LOG_FILE" 2>&1 &
75
- WORKER_PID=$!
76
- disown "$WORKER_PID" 2>/dev/null || true
77
-
78
- printf '{}'
13
+ exec node "$SCRIPT_DIR/lib/terminal-handoff.js" enqueue
@@ -2,6 +2,8 @@
2
2
 
3
3
  # Cursor native SessionStart hook. Cursor only documents context injection from
4
4
  # SessionStart, so this wrapper returns the Meko context synchronously.
5
+ # Also spawns the checkpoint/recovery daemon (same as Claude/Codex) so Cursor
6
+ # sessions get live checkpoints and participate in self-draining recovery.
5
7
 
6
8
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
7
9
 
@@ -39,4 +41,20 @@ load_cursor_hook_env() {
39
41
  }
40
42
 
41
43
  load_cursor_hook_env
42
- MEKO_HOOK_CLIENT=cursor node "$SCRIPT_DIR/lib/capture.js" session-start
44
+
45
+ HOOK_INPUT="$(cat)"
46
+ TRANSCRIPT_PATH="$(printf '%s' "$HOOK_INPUT" | node -e '
47
+ const d = JSON.parse(require("fs").readFileSync(0,"utf-8"));
48
+ const p = d.transcript_path || (d.hookSpecificInput||{}).transcript_path || "";
49
+ process.stdout.write(p);
50
+ ' 2>/dev/null)"
51
+
52
+ if [ -n "$TRANSCRIPT_PATH" ]; then
53
+ MEKO_LOG_DIR="${MEKO_WATERMARK_DIR:-$HOME/.claude/meko-capture}"
54
+ mkdir -p "$MEKO_LOG_DIR"
55
+ nohup node "$SCRIPT_DIR/lib/checkpoint-timer.js" "$TRANSCRIPT_PATH" \
56
+ </dev/null >/dev/null 2>>"$MEKO_LOG_DIR/timer.log" &
57
+ disown 2>/dev/null || true
58
+ fi
59
+
60
+ printf '%s' "$HOOK_INPUT" | MEKO_HOOK_CLIENT=cursor node "$SCRIPT_DIR/lib/capture.js" session-start