kontexta-mcp 2.0.2
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/LICENSE +191 -0
- package/README.md +60 -0
- package/dist/agent-rules/rules-block.md +164 -0
- package/dist/index.js +334555 -0
- package/dist/migrations/001-initial.sql +72 -0
- package/dist/migrations/002-remote-git.sql +2 -0
- package/dist/migrations/003-source-path-index.sql +2 -0
- package/dist/migrations/004-journaling.sql +44 -0
- package/dist/migrations/005-auth.sql +7 -0
- package/package.json +77 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
-- Initial database schema for Kontexta
|
|
2
|
+
|
|
3
|
+
-- Projects table
|
|
4
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
5
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
6
|
+
name TEXT NOT NULL UNIQUE,
|
|
7
|
+
slug TEXT NOT NULL UNIQUE,
|
|
8
|
+
description TEXT,
|
|
9
|
+
path TEXT,
|
|
10
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
-- Files table
|
|
14
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
15
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
16
|
+
path TEXT NOT NULL UNIQUE,
|
|
17
|
+
title TEXT NOT NULL,
|
|
18
|
+
project_id INTEGER,
|
|
19
|
+
storage_type TEXT NOT NULL CHECK(storage_type IN ('local', 'reference', 'backup')),
|
|
20
|
+
source_path TEXT,
|
|
21
|
+
content_hash TEXT,
|
|
22
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
23
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
24
|
+
FOREIGN KEY (project_id) REFERENCES projects(id)
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
-- Tags table
|
|
28
|
+
CREATE TABLE IF NOT EXISTS tags (
|
|
29
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
30
|
+
name TEXT NOT NULL UNIQUE,
|
|
31
|
+
color TEXT
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
-- File-Tag junction table
|
|
35
|
+
CREATE TABLE IF NOT EXISTS file_tags (
|
|
36
|
+
file_id INTEGER NOT NULL,
|
|
37
|
+
tag_id INTEGER NOT NULL,
|
|
38
|
+
PRIMARY KEY (file_id, tag_id),
|
|
39
|
+
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE,
|
|
40
|
+
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
-- Favorites table
|
|
44
|
+
CREATE TABLE IF NOT EXISTS favorites (
|
|
45
|
+
file_id INTEGER PRIMARY KEY,
|
|
46
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
47
|
+
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
-- Users table
|
|
51
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
52
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
53
|
+
name TEXT NOT NULL,
|
|
54
|
+
email TEXT,
|
|
55
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
-- Insert default user
|
|
59
|
+
INSERT OR IGNORE INTO users (id, name, email)
|
|
60
|
+
VALUES (1, 'Default User', NULL);
|
|
61
|
+
|
|
62
|
+
-- FTS5 virtual table for full-text search
|
|
63
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS fts_index USING fts5(
|
|
64
|
+
title,
|
|
65
|
+
content,
|
|
66
|
+
tokenize='porter unicode61'
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
-- Indexes for performance
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_files_project ON files(project_id);
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_files_storage_type ON files(storage_type);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_files_path ON files(path);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
-- Journaling & indexing — Phase 1 tables.
|
|
2
|
+
-- See docs/superpowers/specs/2026-05-12-journaling-and-indexing-design.md §4.5
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS journal_meta (
|
|
5
|
+
file_id INTEGER PRIMARY KEY REFERENCES files(id) ON DELETE CASCADE,
|
|
6
|
+
project_id INTEGER NOT NULL REFERENCES projects(id),
|
|
7
|
+
task_slug TEXT NOT NULL,
|
|
8
|
+
status_latest TEXT,
|
|
9
|
+
started_at TEXT NOT NULL,
|
|
10
|
+
last_active_at TEXT NOT NULL,
|
|
11
|
+
touched_files TEXT NOT NULL DEFAULT '[]',
|
|
12
|
+
raw_sources TEXT NOT NULL DEFAULT '[]'
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE INDEX IF NOT EXISTS idx_journal_project_active
|
|
16
|
+
ON journal_meta(project_id, last_active_at DESC);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_journal_project_status
|
|
18
|
+
ON journal_meta(project_id, status_latest);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_journal_task_slug
|
|
20
|
+
ON journal_meta(project_id, task_slug);
|
|
21
|
+
|
|
22
|
+
CREATE TABLE IF NOT EXISTS journal_touches (
|
|
23
|
+
file_id INTEGER NOT NULL REFERENCES journal_meta(file_id) ON DELETE CASCADE,
|
|
24
|
+
touched_path TEXT NOT NULL,
|
|
25
|
+
PRIMARY KEY (file_id, touched_path)
|
|
26
|
+
);
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_journal_touches_path ON journal_touches(touched_path);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS journal_git_refs (
|
|
30
|
+
file_id INTEGER NOT NULL REFERENCES journal_meta(file_id) ON DELETE CASCADE,
|
|
31
|
+
ref_type TEXT NOT NULL,
|
|
32
|
+
ref_value TEXT NOT NULL,
|
|
33
|
+
PRIMARY KEY (file_id, ref_type, ref_value)
|
|
34
|
+
);
|
|
35
|
+
CREATE INDEX IF NOT EXISTS idx_journal_git_value ON journal_git_refs(ref_type, ref_value);
|
|
36
|
+
|
|
37
|
+
-- Per-project high-water mark for distillation. Single row per project_slug.
|
|
38
|
+
-- Stored in DB (not just on disk) so SQL queries can report status without filesystem walk.
|
|
39
|
+
CREATE TABLE IF NOT EXISTS journal_high_water (
|
|
40
|
+
project_slug TEXT PRIMARY KEY,
|
|
41
|
+
last_event_ts TEXT NOT NULL,
|
|
42
|
+
last_distilled_at TEXT NOT NULL,
|
|
43
|
+
events_processed INTEGER NOT NULL DEFAULT 0
|
|
44
|
+
);
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kontexta-mcp",
|
|
3
|
+
"version": "2.0.2",
|
|
4
|
+
"description": "The local Brain and Hands for AI coding agents (MCP Server)",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"mcp-server",
|
|
8
|
+
"model-context-protocol",
|
|
9
|
+
"kontexta",
|
|
10
|
+
"context-engine",
|
|
11
|
+
"knowledge-base",
|
|
12
|
+
"agentic",
|
|
13
|
+
"claude",
|
|
14
|
+
"cursor",
|
|
15
|
+
"rag"
|
|
16
|
+
],
|
|
17
|
+
"homepage": "https://github.com/safiyu/kontexta#readme",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/safiyu/kontexta/issues"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/safiyu/kontexta.git",
|
|
24
|
+
"directory": "apps/mcp"
|
|
25
|
+
},
|
|
26
|
+
"license": "Apache-2.0",
|
|
27
|
+
"author": "safiyu",
|
|
28
|
+
"private": false,
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"type": "module",
|
|
33
|
+
"main": "dist/index.js",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": "./dist/index.js",
|
|
36
|
+
"./hands/loader": "./dist/hands/loader.js",
|
|
37
|
+
"./hands/sanitizer": "./dist/hands/sanitizer.js",
|
|
38
|
+
"./hands/types": "./dist/hands/types.js"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=20"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist",
|
|
45
|
+
"README.md",
|
|
46
|
+
"LICENSE"
|
|
47
|
+
],
|
|
48
|
+
"bin": {
|
|
49
|
+
"kontexta-mcp": "dist/index.js",
|
|
50
|
+
"kxta": "dist/index.js"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsc",
|
|
54
|
+
"build:npm": "tsup",
|
|
55
|
+
"dev": "tsc --watch",
|
|
56
|
+
"start": "node dist/index.js",
|
|
57
|
+
"smoke": "node test-tools.mjs",
|
|
58
|
+
"gen:manifest": "node scripts/generate-manifest.js",
|
|
59
|
+
"test": "node test-tools.mjs",
|
|
60
|
+
"prepublishOnly": "pnpm run build:npm"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
64
|
+
"better-sqlite3": "^11.7.0",
|
|
65
|
+
"chokidar": "^4.0.0",
|
|
66
|
+
"kxta-core": "workspace:*",
|
|
67
|
+
"re2": "^1.21.4",
|
|
68
|
+
"simple-git": "^3.27.0",
|
|
69
|
+
"zod": "^3.24.0"
|
|
70
|
+
},
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"@types/node": "^22.0.0",
|
|
73
|
+
"tsup": "^8.3.0",
|
|
74
|
+
"typescript": "^5.7.0"
|
|
75
|
+
},
|
|
76
|
+
"rulesVersion": "2.0.0"
|
|
77
|
+
}
|