@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.
- package/README.md +233 -40
- package/assets/hooks-handlers/codex-session-end.sh +4 -69
- package/assets/hooks-handlers/cursor-session-start.sh +19 -1
- package/assets/hooks-handlers/lib/capture-cleanup-cli.js +1473 -0
- package/assets/hooks-handlers/lib/capture-notices.js +438 -0
- package/assets/hooks-handlers/lib/capture-state.js +2173 -0
- package/assets/hooks-handlers/lib/capture-status-cli.js +86 -0
- package/assets/hooks-handlers/lib/capture.js +2782 -403
- package/assets/hooks-handlers/lib/checkpoint-timer.js +485 -81
- package/assets/hooks-handlers/lib/journal-bridge.js +218 -0
- package/assets/hooks-handlers/lib/kiro-handler.js +760 -0
- package/assets/hooks-handlers/lib/opencode-handler.js +620 -0
- package/assets/hooks-handlers/lib/opencode-normalizer.js +145 -0
- package/assets/hooks-handlers/lib/terminal-handoff.js +427 -0
- package/assets/hooks-handlers/session-end.sh +3 -34
- package/assets/opencode-plugin/meko.js +213 -0
- package/assets/scripts/meko-statusline.sh +123 -16
- package/assets/skills/meko-mcp-tools/SKILL.md +116 -126
- package/assets/skills/meko-mcp-tools/references/_sections.md +3 -3
- package/assets/skills/meko-mcp-tools/references/tools-agent-id-conventions.md +25 -18
- package/assets/skills/meko-mcp-tools/references/tools-cookbook.md +99 -24
- package/assets/skills/meko-mcp-tools/references/tools-datapack-workflow.md +1 -1
- package/assets/skills/meko-mcp-tools/references/tools-known-limitations.md +53 -6
- package/assets/skills/meko-mcp-tools/references/tools-memory-vs-conversation.md +25 -79
- package/assets/skills/meko-mcp-tools/references/tools-overview.md +37 -26
- package/assets/skills/meko-mcp-tools/references/tools-rag-workflow.md +14 -8
- package/assets/skills/meko-mcp-tools/references/tools-troubleshooting.md +66 -1
- package/assets/skills/meko-mcp-tools/references/tools-user-id-conventions.md +7 -40
- package/assets/skills/meko-mcp-tools-desktop/SKILL.md +56 -20
- package/assets/skills/meko-mcp-tools-desktop/desktop/README.md +1 -1
- package/assets/skills/meko-mcp-tools-desktop/references/_sections.md +1 -1
- package/assets/skills/meko-mcp-tools-desktop/references/tools-agent-id-conventions.md +15 -8
- package/assets/skills/meko-mcp-tools-desktop/references/tools-cookbook.md +99 -36
- package/assets/skills/meko-mcp-tools-desktop/references/tools-known-limitations.md +22 -5
- package/assets/skills/meko-mcp-tools-desktop/references/tools-memory-vs-conversation.md +18 -14
- package/assets/skills/meko-mcp-tools-desktop/references/tools-overview.md +39 -28
- package/assets/skills/meko-mcp-tools-desktop/references/tools-rag-workflow.md +14 -8
- package/assets/skills/meko-mcp-tools-desktop/references/tools-troubleshooting.md +67 -1
- package/assets/skills/meko-select-datapack-desktop/SKILL.md +4 -4
- package/assets/skills/meko-select-datapack-desktop/references/cookbook.md +8 -8
- package/assets/skills/meko-select-datapack-desktop/references/role-display-future.md +7 -5
- package/assets/skills/meko-select-datapack-desktop/references/troubleshooting.md +4 -4
- package/bin/create-meko-setup.mjs +113 -12
- package/lib/capture-cleanup.mjs +63 -0
- package/lib/capture-status.mjs +67 -0
- package/lib/clients/aliases.mjs +5 -0
- package/lib/clients/claude-code.mjs +1 -0
- package/lib/clients/claude-desktop.mjs +120 -5
- package/lib/clients/codex.mjs +85 -37
- package/lib/clients/common.mjs +7 -0
- package/lib/clients/index.mjs +4 -0
- package/lib/clients/kiro.mjs +705 -0
- package/lib/clients/opencode.mjs +532 -0
- package/lib/config.mjs +158 -1
- package/lib/installer.mjs +18 -1
- package/lib/migrate/adapters/claude-code.mjs +11 -2
- package/lib/migrate/adapters/codex.mjs +497 -0
- package/lib/migrate/adapters/memory-md.mjs +27 -8
- package/lib/migrate/adapters/opencode.mjs +148 -0
- package/lib/migrate/claude-parser.mjs +153 -9
- package/lib/migrate/id.mjs +217 -10
- package/lib/migrate/mcp-client.mjs +25 -1
- package/lib/migrate/opencode-normalizer.mjs +132 -0
- package/lib/migrate/orchestrator.mjs +299 -56
- package/lib/migrate/progress.mjs +239 -5
- package/lib/migrate/registry.mjs +72 -0
- package/lib/migrate.mjs +100 -10
- package/lib/prompt.mjs +16 -1
- package/package.json +4 -4
- 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
|
|
7
|
-
# immediately
|
|
8
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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
|