@danielblomma/cortex-mcp 0.4.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 +203 -0
- package/bin/cortex.mjs +621 -0
- package/docs/MCP_MARKETPLACE.md +160 -0
- package/package.json +42 -0
- package/scaffold/.context/config.yaml +21 -0
- package/scaffold/.context/ontology.cypher +63 -0
- package/scaffold/.context/rules.yaml +25 -0
- package/scaffold/.githooks/_cortex-update-runner.sh +58 -0
- package/scaffold/.githooks/post-checkout +22 -0
- package/scaffold/.githooks/post-merge +14 -0
- package/scaffold/docs/architecture.md +22 -0
- package/scaffold/mcp/package-lock.json +2623 -0
- package/scaffold/mcp/package.json +29 -0
- package/scaffold/mcp/src/embed.ts +416 -0
- package/scaffold/mcp/src/embeddings.ts +192 -0
- package/scaffold/mcp/src/graph.ts +666 -0
- package/scaffold/mcp/src/loadGraph.ts +597 -0
- package/scaffold/mcp/src/paths.ts +33 -0
- package/scaffold/mcp/src/search.ts +412 -0
- package/scaffold/mcp/src/server.ts +98 -0
- package/scaffold/mcp/src/types.ts +109 -0
- package/scaffold/mcp/tests/server.test.mjs +60 -0
- package/scaffold/mcp/tsconfig.json +13 -0
- package/scaffold/scripts/bootstrap.sh +57 -0
- package/scaffold/scripts/capture-note.sh +55 -0
- package/scaffold/scripts/context.sh +109 -0
- package/scaffold/scripts/embed.sh +15 -0
- package/scaffold/scripts/ingest.mjs +1118 -0
- package/scaffold/scripts/ingest.sh +20 -0
- package/scaffold/scripts/install-git-hooks.sh +21 -0
- package/scaffold/scripts/load-kuzu.sh +6 -0
- package/scaffold/scripts/load-ryu.sh +18 -0
- package/scaffold/scripts/parsers/javascript.mjs +390 -0
- package/scaffold/scripts/parsers/package-lock.json +51 -0
- package/scaffold/scripts/parsers/package.json +17 -0
- package/scaffold/scripts/plan-state-engine.cjs +310 -0
- package/scaffold/scripts/plan-state.sh +71 -0
- package/scaffold/scripts/refresh.sh +9 -0
- package/scaffold/scripts/status.sh +282 -0
- package/scaffold/scripts/update-context.sh +18 -0
- package/scaffold/scripts/watch.sh +374 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
+
MCP_DIR="$REPO_ROOT/mcp"
|
|
6
|
+
TOTAL_STEPS=5
|
|
7
|
+
STEP_INDEX=0
|
|
8
|
+
|
|
9
|
+
print_logo() {
|
|
10
|
+
cat <<'EOF'
|
|
11
|
+
CCC OOO RRRR TTTTT EEEEE X X
|
|
12
|
+
C C O O R R T E X X
|
|
13
|
+
C O O RRRR T EEEE X
|
|
14
|
+
C C O O R R T E X X
|
|
15
|
+
CCC OOO R R T EEEEE X X
|
|
16
|
+
EOF
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
step() {
|
|
20
|
+
STEP_INDEX=$((STEP_INDEX + 1))
|
|
21
|
+
echo ""
|
|
22
|
+
echo "[cortex][$STEP_INDEX/$TOTAL_STEPS] $1"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
info() {
|
|
26
|
+
echo "[cortex] $1"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
print_logo
|
|
30
|
+
info "bootstrap start"
|
|
31
|
+
info "repo: $REPO_ROOT"
|
|
32
|
+
info "pipeline: deps -> ingest -> embeddings -> graph -> status"
|
|
33
|
+
|
|
34
|
+
mkdir -p "$MCP_DIR/.npm-cache"
|
|
35
|
+
|
|
36
|
+
step "Installing MCP dependencies"
|
|
37
|
+
info "note: upstream RyuGraph dependencies may print deprecation warnings during install"
|
|
38
|
+
NPM_CONFIG_CACHE="$MCP_DIR/.npm-cache" npm --prefix "$MCP_DIR" install --no-fund --no-update-notifier --loglevel=warn
|
|
39
|
+
NPM_CONFIG_CACHE="$REPO_ROOT/scripts/parsers/.npm-cache" npm --prefix "$REPO_ROOT/scripts/parsers" install --no-fund --no-update-notifier --loglevel=warn
|
|
40
|
+
|
|
41
|
+
step "Indexing repository context"
|
|
42
|
+
"$REPO_ROOT/scripts/ingest.sh"
|
|
43
|
+
|
|
44
|
+
step "Generating semantic embeddings"
|
|
45
|
+
if ! "$REPO_ROOT/scripts/embed.sh"; then
|
|
46
|
+
info "warning: embedding generation failed; continuing with lexical search fallback"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
step "Loading RyuGraph"
|
|
50
|
+
"$REPO_ROOT/scripts/load-ryu.sh"
|
|
51
|
+
|
|
52
|
+
step "Reading context status"
|
|
53
|
+
"$REPO_ROOT/scripts/status.sh"
|
|
54
|
+
|
|
55
|
+
echo ""
|
|
56
|
+
info "bootstrap complete"
|
|
57
|
+
info "next: run ./scripts/context.sh update while coding"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
+
NOTES_DIR="$REPO_ROOT/.context/notes"
|
|
6
|
+
DECISIONS_DIR="$REPO_ROOT/.context/decisions"
|
|
7
|
+
|
|
8
|
+
TITLE="${1:-}"
|
|
9
|
+
if [[ -z "$TITLE" ]]; then
|
|
10
|
+
echo "Usage: ./scripts/context.sh note <title> [text]"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
shift || true
|
|
14
|
+
|
|
15
|
+
BODY="${*:-}"
|
|
16
|
+
if [[ -z "$BODY" && ! -t 0 ]]; then
|
|
17
|
+
BODY="$(cat)"
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
mkdir -p "$NOTES_DIR" "$DECISIONS_DIR"
|
|
21
|
+
|
|
22
|
+
DATE_UTC="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
|
|
23
|
+
DATE_PREFIX="$(date -u +"%Y-%m-%d")"
|
|
24
|
+
SLUG="$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-+//; s/-+$//; s/-+/-/g')"
|
|
25
|
+
if [[ -z "$SLUG" ]]; then
|
|
26
|
+
SLUG="note"
|
|
27
|
+
fi
|
|
28
|
+
FILE_PATH="$NOTES_DIR/${DATE_PREFIX}-${SLUG}.md"
|
|
29
|
+
|
|
30
|
+
if [[ -f "$FILE_PATH" ]]; then
|
|
31
|
+
FILE_PATH="$NOTES_DIR/${DATE_PREFIX}-${SLUG}-$(date -u +"%H%M%S").md"
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
{
|
|
35
|
+
echo "---"
|
|
36
|
+
echo "title: \"$TITLE\""
|
|
37
|
+
echo "created_at: \"$DATE_UTC\""
|
|
38
|
+
echo "kind: \"team-note\""
|
|
39
|
+
echo "source_of_truth: false"
|
|
40
|
+
echo "trust_level: 60"
|
|
41
|
+
echo "status: active"
|
|
42
|
+
echo "---"
|
|
43
|
+
echo
|
|
44
|
+
if [[ -n "$BODY" ]]; then
|
|
45
|
+
echo "$BODY"
|
|
46
|
+
else
|
|
47
|
+
echo "_Skriv ner bakgrund, beslut, edge-cases och länkar här._"
|
|
48
|
+
fi
|
|
49
|
+
echo
|
|
50
|
+
echo "## Follow-up"
|
|
51
|
+
echo "- [ ] Convert to ADR in .context/decisions/ if this becomes a long-term rule."
|
|
52
|
+
} > "$FILE_PATH"
|
|
53
|
+
|
|
54
|
+
echo "[note] wrote $FILE_PATH"
|
|
55
|
+
echo "[note] run: ./scripts/context.sh update"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
|
|
6
|
+
print_help() {
|
|
7
|
+
cat <<'EOF'
|
|
8
|
+
Usage: ./scripts/context.sh <command> [options]
|
|
9
|
+
|
|
10
|
+
Commands:
|
|
11
|
+
bootstrap Install deps + full ingest + graph load
|
|
12
|
+
ingest [--changed] [--verbose] Index docs/code/design context into .context
|
|
13
|
+
embed [--changed] Generate semantic embeddings for indexed entities
|
|
14
|
+
update Ingest changed files + rebuild graph
|
|
15
|
+
watch [start|stop|status|run|once] [--interval <sec>] [--debounce <sec>] [--mode <auto|event|poll>]
|
|
16
|
+
Continuous background update loop
|
|
17
|
+
refresh [--changed] [--verbose] Alias for ingest
|
|
18
|
+
graph-load [--no-reset] Build RyuGraph DB from indexed context
|
|
19
|
+
note <title> [text] Save tacit knowledge note into .context/notes
|
|
20
|
+
plan [show|reset] Show or reset automatic plan/progress state
|
|
21
|
+
todo [text|list|done <id>|reopen <id>|remove <id>]
|
|
22
|
+
Manage TODOs in automatic plan state
|
|
23
|
+
status Show latest ingest summary
|
|
24
|
+
help Show this message
|
|
25
|
+
EOF
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
COMMAND="${1:-help}"
|
|
29
|
+
if [[ $# -gt 0 ]]; then
|
|
30
|
+
shift
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
TRACK_EVENT=""
|
|
34
|
+
|
|
35
|
+
case "$COMMAND" in
|
|
36
|
+
bootstrap)
|
|
37
|
+
"$SCRIPT_DIR/bootstrap.sh" "$@"
|
|
38
|
+
TRACK_EVENT="bootstrap"
|
|
39
|
+
;;
|
|
40
|
+
ingest)
|
|
41
|
+
"$SCRIPT_DIR/ingest.sh" "$@"
|
|
42
|
+
TRACK_EVENT="ingest"
|
|
43
|
+
;;
|
|
44
|
+
embed)
|
|
45
|
+
"$SCRIPT_DIR/embed.sh" "$@"
|
|
46
|
+
TRACK_EVENT="embed"
|
|
47
|
+
;;
|
|
48
|
+
update)
|
|
49
|
+
"$SCRIPT_DIR/update-context.sh" "$@"
|
|
50
|
+
TRACK_EVENT="update"
|
|
51
|
+
;;
|
|
52
|
+
watch)
|
|
53
|
+
"$SCRIPT_DIR/watch.sh" "$@"
|
|
54
|
+
;;
|
|
55
|
+
refresh)
|
|
56
|
+
"$SCRIPT_DIR/refresh.sh" "$@"
|
|
57
|
+
TRACK_EVENT="refresh"
|
|
58
|
+
;;
|
|
59
|
+
graph-load)
|
|
60
|
+
"$SCRIPT_DIR/load-ryu.sh" "$@"
|
|
61
|
+
TRACK_EVENT="graph-load"
|
|
62
|
+
;;
|
|
63
|
+
note)
|
|
64
|
+
"$SCRIPT_DIR/capture-note.sh" "$@"
|
|
65
|
+
TRACK_EVENT="note"
|
|
66
|
+
;;
|
|
67
|
+
plan)
|
|
68
|
+
PLAN_SUBCOMMAND="${1:-show}"
|
|
69
|
+
if [[ $# -gt 0 ]]; then
|
|
70
|
+
shift
|
|
71
|
+
fi
|
|
72
|
+
"$SCRIPT_DIR/plan-state.sh" "$PLAN_SUBCOMMAND" "$@"
|
|
73
|
+
;;
|
|
74
|
+
todo)
|
|
75
|
+
if [[ $# -eq 0 ]]; then
|
|
76
|
+
"$SCRIPT_DIR/plan-state.sh" todo list
|
|
77
|
+
else
|
|
78
|
+
case "$1" in
|
|
79
|
+
list|done|reopen|remove)
|
|
80
|
+
TODO_SUBCOMMAND="$1"
|
|
81
|
+
shift
|
|
82
|
+
"$SCRIPT_DIR/plan-state.sh" todo "$TODO_SUBCOMMAND" "$@"
|
|
83
|
+
;;
|
|
84
|
+
*)
|
|
85
|
+
"$SCRIPT_DIR/plan-state.sh" todo add "$*"
|
|
86
|
+
;;
|
|
87
|
+
esac
|
|
88
|
+
fi
|
|
89
|
+
TRACK_EVENT="todo"
|
|
90
|
+
;;
|
|
91
|
+
status)
|
|
92
|
+
"$SCRIPT_DIR/status.sh"
|
|
93
|
+
TRACK_EVENT="status"
|
|
94
|
+
;;
|
|
95
|
+
help|--help|-h)
|
|
96
|
+
print_help
|
|
97
|
+
;;
|
|
98
|
+
*)
|
|
99
|
+
echo "Unknown command: $COMMAND"
|
|
100
|
+
print_help
|
|
101
|
+
exit 1
|
|
102
|
+
;;
|
|
103
|
+
esac
|
|
104
|
+
|
|
105
|
+
if [[ -n "$TRACK_EVENT" ]]; then
|
|
106
|
+
if ! "$SCRIPT_DIR/plan-state.sh" event "$TRACK_EVENT" >/dev/null 2>&1; then
|
|
107
|
+
echo "[plan] warning: failed to update plan state"
|
|
108
|
+
fi
|
|
109
|
+
fi
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
+
MCP_DIR="$REPO_ROOT/mcp"
|
|
6
|
+
|
|
7
|
+
if ! command -v npm >/dev/null 2>&1; then
|
|
8
|
+
echo "[embed] npm is required but not found on PATH"
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
mkdir -p "$MCP_DIR/.npm-cache"
|
|
13
|
+
|
|
14
|
+
echo "[embed] generating embeddings via mcp/embed"
|
|
15
|
+
NPM_CONFIG_CACHE="$MCP_DIR/.npm-cache" npm --prefix "$MCP_DIR" run embed --silent -- "$@"
|