@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.
Files changed (41) hide show
  1. package/README.md +203 -0
  2. package/bin/cortex.mjs +621 -0
  3. package/docs/MCP_MARKETPLACE.md +160 -0
  4. package/package.json +42 -0
  5. package/scaffold/.context/config.yaml +21 -0
  6. package/scaffold/.context/ontology.cypher +63 -0
  7. package/scaffold/.context/rules.yaml +25 -0
  8. package/scaffold/.githooks/_cortex-update-runner.sh +58 -0
  9. package/scaffold/.githooks/post-checkout +22 -0
  10. package/scaffold/.githooks/post-merge +14 -0
  11. package/scaffold/docs/architecture.md +22 -0
  12. package/scaffold/mcp/package-lock.json +2623 -0
  13. package/scaffold/mcp/package.json +29 -0
  14. package/scaffold/mcp/src/embed.ts +416 -0
  15. package/scaffold/mcp/src/embeddings.ts +192 -0
  16. package/scaffold/mcp/src/graph.ts +666 -0
  17. package/scaffold/mcp/src/loadGraph.ts +597 -0
  18. package/scaffold/mcp/src/paths.ts +33 -0
  19. package/scaffold/mcp/src/search.ts +412 -0
  20. package/scaffold/mcp/src/server.ts +98 -0
  21. package/scaffold/mcp/src/types.ts +109 -0
  22. package/scaffold/mcp/tests/server.test.mjs +60 -0
  23. package/scaffold/mcp/tsconfig.json +13 -0
  24. package/scaffold/scripts/bootstrap.sh +57 -0
  25. package/scaffold/scripts/capture-note.sh +55 -0
  26. package/scaffold/scripts/context.sh +109 -0
  27. package/scaffold/scripts/embed.sh +15 -0
  28. package/scaffold/scripts/ingest.mjs +1118 -0
  29. package/scaffold/scripts/ingest.sh +20 -0
  30. package/scaffold/scripts/install-git-hooks.sh +21 -0
  31. package/scaffold/scripts/load-kuzu.sh +6 -0
  32. package/scaffold/scripts/load-ryu.sh +18 -0
  33. package/scaffold/scripts/parsers/javascript.mjs +390 -0
  34. package/scaffold/scripts/parsers/package-lock.json +51 -0
  35. package/scaffold/scripts/parsers/package.json +17 -0
  36. package/scaffold/scripts/plan-state-engine.cjs +310 -0
  37. package/scaffold/scripts/plan-state.sh +71 -0
  38. package/scaffold/scripts/refresh.sh +9 -0
  39. package/scaffold/scripts/status.sh +282 -0
  40. package/scaffold/scripts/update-context.sh +18 -0
  41. 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 -- "$@"