bbb-mcp-server 0.1.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 +112 -0
- package/dist/api.d.ts +9 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +276 -0
- package/dist/api.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +38 -0
- package/dist/config.js.map +1 -0
- package/dist/db/index.d.ts +6 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +31 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +9 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +205 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/handlers/artifact.d.ts +30 -0
- package/dist/handlers/artifact.d.ts.map +1 -0
- package/dist/handlers/artifact.js +80 -0
- package/dist/handlers/artifact.js.map +1 -0
- package/dist/handlers/context.d.ts +28 -0
- package/dist/handlers/context.d.ts.map +1 -0
- package/dist/handlers/context.js +247 -0
- package/dist/handlers/context.js.map +1 -0
- package/dist/handlers/memory.d.ts +42 -0
- package/dist/handlers/memory.d.ts.map +1 -0
- package/dist/handlers/memory.js +97 -0
- package/dist/handlers/memory.js.map +1 -0
- package/dist/handlers/project.d.ts +22 -0
- package/dist/handlers/project.d.ts.map +1 -0
- package/dist/handlers/project.js +139 -0
- package/dist/handlers/project.js.map +1 -0
- package/dist/handlers/session.d.ts +25 -0
- package/dist/handlers/session.d.ts.map +1 -0
- package/dist/handlers/session.js +155 -0
- package/dist/handlers/session.js.map +1 -0
- package/dist/handlers/task.d.ts +41 -0
- package/dist/handlers/task.d.ts.map +1 -0
- package/dist/handlers/task.js +76 -0
- package/dist/handlers/task.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +307 -0
- package/dist/server.js.map +1 -0
- package/dist/utils/hash.d.ts +2 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +5 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/schemas.d.ts +6 -0
- package/dist/utils/schemas.d.ts.map +1 -0
- package/dist/utils/schemas.js +88 -0
- package/dist/utils/schemas.js.map +1 -0
- package/dist/utils/templates.d.ts +25 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +138 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tokens.d.ts +6 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +8 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/handlers/task.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { loadConfig, ensureDirectories } from "./config.js";
|
|
4
|
+
import { getDb, closeAll } from "./db/index.js";
|
|
5
|
+
import { createServer } from "./server.js";
|
|
6
|
+
function parseArgs() {
|
|
7
|
+
const args = process.argv.slice(2);
|
|
8
|
+
const projectIdx = args.indexOf("--project");
|
|
9
|
+
if (projectIdx !== -1 && args[projectIdx + 1]) {
|
|
10
|
+
return { project: args[projectIdx + 1] };
|
|
11
|
+
}
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
async function main() {
|
|
15
|
+
const args = parseArgs();
|
|
16
|
+
const config = loadConfig(args.project);
|
|
17
|
+
ensureDirectories(config);
|
|
18
|
+
const db = getDb(config.project, config.storagePath);
|
|
19
|
+
// Ensure project record exists, and resolve slug → UUID
|
|
20
|
+
let projectRow = db
|
|
21
|
+
.prepare(`SELECT id FROM projects WHERE slug = ?`)
|
|
22
|
+
.get(config.project);
|
|
23
|
+
if (!projectRow) {
|
|
24
|
+
const { randomUUID } = await import("node:crypto");
|
|
25
|
+
const id = randomUUID();
|
|
26
|
+
db.prepare(`INSERT INTO projects (id, name, slug) VALUES (?, ?, ?)`).run(id, config.project, config.project);
|
|
27
|
+
projectRow = { id };
|
|
28
|
+
}
|
|
29
|
+
const projectId = projectRow.id;
|
|
30
|
+
const server = createServer(db, projectId, config.snapshotsPath);
|
|
31
|
+
const transport = new StdioServerTransport();
|
|
32
|
+
// Graceful shutdown
|
|
33
|
+
const shutdown = () => {
|
|
34
|
+
closeAll();
|
|
35
|
+
process.exit(0);
|
|
36
|
+
};
|
|
37
|
+
process.on("SIGINT", shutdown);
|
|
38
|
+
process.on("SIGTERM", shutdown);
|
|
39
|
+
await server.connect(transport);
|
|
40
|
+
}
|
|
41
|
+
main().catch((err) => {
|
|
42
|
+
console.error("Fatal error:", err);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAErD,wDAAwD;IACxD,IAAI,UAAU,GAAG,EAAE;SAChB,OAAO,CAAC,wCAAwC,CAAC;SACjD,GAAG,CAAC,MAAM,CAAC,OAAO,CAA+B,CAAC;IAErD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,EAAE,CAAC,OAAO,CACR,wDAAwD,CACzD,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,UAAU,GAAG,EAAE,EAAE,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,oBAAoB;IACpB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAgB3C,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,SAAS,CA6ZX"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { memoryPut, memoryQuery, memoryList, memoryUpdate, memoryDelete } from "./handlers/memory.js";
|
|
4
|
+
import { artifactUpsert, artifactGet, artifactList } from "./handlers/artifact.js";
|
|
5
|
+
import { taskCreate, taskUpdate, taskGetDag } from "./handlers/task.js";
|
|
6
|
+
import { contextAssemble, searchMemories } from "./handlers/context.js";
|
|
7
|
+
import { projectInit, projectIngest } from "./handlers/project.js";
|
|
8
|
+
import { sessionSnapshot, sessionRehydrate } from "./handlers/session.js";
|
|
9
|
+
function textResult(text) {
|
|
10
|
+
return { content: [{ type: "text", text }] };
|
|
11
|
+
}
|
|
12
|
+
function errorResult(message) {
|
|
13
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
14
|
+
}
|
|
15
|
+
export function createServer(db, projectId, snapshotsPath) {
|
|
16
|
+
const server = new McpServer({
|
|
17
|
+
name: "bbb-mcp-server",
|
|
18
|
+
version: "0.1.0",
|
|
19
|
+
});
|
|
20
|
+
// --- Memory Tools ---
|
|
21
|
+
server.tool("memory_store", "Store a new memory in the BBB knowledge base", {
|
|
22
|
+
category: z.enum(["decision", "constraint", "convention", "architecture", "lessons-learned", "history"]).describe("Memory category"),
|
|
23
|
+
title: z.string().describe("Short title for the memory"),
|
|
24
|
+
content: z.string().describe("Full content of the memory"),
|
|
25
|
+
tags: z.array(z.string()).optional().describe("Tags for filtering"),
|
|
26
|
+
source: z.string().optional().describe("Source of this memory (e.g., 'chat', 'code-review')"),
|
|
27
|
+
source_ref: z.string().optional().describe("Reference to source (e.g., PR URL)"),
|
|
28
|
+
confidence: z.number().min(0).max(1).optional().describe("Confidence score 0-1"),
|
|
29
|
+
}, async (params) => {
|
|
30
|
+
try {
|
|
31
|
+
const result = memoryPut(db, projectId, params);
|
|
32
|
+
return textResult(`Memory stored: ${result.id} (${params.category})\nVersion: ${result.version}`);
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return errorResult(e.message);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
server.tool("memory_query", "Query memories by full-text search with optional category/tag filtering", {
|
|
39
|
+
query: z.string().describe("Search query (full-text search)"),
|
|
40
|
+
category: z.string().optional().describe("Filter by category"),
|
|
41
|
+
tags: z.array(z.string()).optional().describe("Filter by tags"),
|
|
42
|
+
limit: z.number().optional().describe("Max results (default 10)"),
|
|
43
|
+
}, async (params) => {
|
|
44
|
+
try {
|
|
45
|
+
const results = memoryQuery(db, projectId, params);
|
|
46
|
+
if (!Array.isArray(results) || results.length === 0) {
|
|
47
|
+
return textResult("No memories found matching query.");
|
|
48
|
+
}
|
|
49
|
+
const lines = results.map((m) => `- **${m.title}** (${m.category}) [${JSON.parse(m.tags || "[]").join(", ")}]\n ${m.content.slice(0, 200)}`);
|
|
50
|
+
return textResult(`Found ${results.length} memories:\n\n${lines.join("\n\n")}`);
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
return errorResult(e.message);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
server.tool("memory_list", "List memories with optional category/tag filters and pagination", {
|
|
57
|
+
category: z.string().optional().describe("Filter by category"),
|
|
58
|
+
tags: z.array(z.string()).optional().describe("Filter by tags"),
|
|
59
|
+
limit: z.number().optional().describe("Page size (default 50)"),
|
|
60
|
+
offset: z.number().optional().describe("Offset for pagination"),
|
|
61
|
+
}, async (params) => {
|
|
62
|
+
try {
|
|
63
|
+
const results = memoryList(db, projectId, params);
|
|
64
|
+
if (results.length === 0) {
|
|
65
|
+
return textResult("No memories found.");
|
|
66
|
+
}
|
|
67
|
+
const lines = results.map((m) => `- **${m.title}** (${m.category}) [v${m.version}]`);
|
|
68
|
+
return textResult(`Memories (${results.length}):\n\n${lines.join("\n")}`);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
return errorResult(e.message);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
server.tool("memory_update", "Update an existing memory, creating a new version and superseding the old one", {
|
|
75
|
+
memory_id: z.string().describe("ID of the memory to update"),
|
|
76
|
+
title: z.string().optional().describe("New title"),
|
|
77
|
+
content: z.string().optional().describe("New content"),
|
|
78
|
+
tags: z.array(z.string()).optional().describe("New tags"),
|
|
79
|
+
category: z.string().optional().describe("New category"),
|
|
80
|
+
}, async (params) => {
|
|
81
|
+
try {
|
|
82
|
+
const result = memoryUpdate(db, projectId, params);
|
|
83
|
+
return textResult(`Memory updated: ${result.id} (v${result.version}, supersedes ${result.supersedes})`);
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
return errorResult(e.message);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
server.tool("memory_delete", "Delete a memory by ID", {
|
|
90
|
+
memory_id: z.string().describe("ID of the memory to delete"),
|
|
91
|
+
}, async (params) => {
|
|
92
|
+
try {
|
|
93
|
+
const result = memoryDelete(db, projectId, params.memory_id);
|
|
94
|
+
return textResult(`Memory deleted: ${result.deleted}`);
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
return errorResult(e.message);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// --- Artifact Tools ---
|
|
101
|
+
server.tool("artifact_store", "Store or update a structured artifact (ADR, PRD, API contract, etc.)", {
|
|
102
|
+
type: z.enum(["prd", "user_story", "ux_spec", "component_spec", "api_contract", "test_plan", "test_result", "release_notes", "runbook", "adr", "design_doc", "other"]).describe("Artifact type"),
|
|
103
|
+
title: z.string().describe("Artifact title"),
|
|
104
|
+
content: z.string().optional().describe("Markdown content"),
|
|
105
|
+
artifact_id: z.string().optional().describe("Existing artifact ID for updates"),
|
|
106
|
+
schema_id: z.string().optional().describe("Schema for validation"),
|
|
107
|
+
payload: z.record(z.unknown()).optional().describe("Structured data payload"),
|
|
108
|
+
tags: z.array(z.string()).optional().describe("Tags"),
|
|
109
|
+
source_refs: z.array(z.string()).optional().describe("Source references"),
|
|
110
|
+
parent_id: z.string().optional().describe("Parent artifact ID"),
|
|
111
|
+
}, async (params) => {
|
|
112
|
+
try {
|
|
113
|
+
const result = artifactUpsert(db, projectId, params);
|
|
114
|
+
return textResult(`Artifact ${result.action}: ${result.id} (${params.type})\nTitle: ${params.title}\nVersion: ${result.version}`);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
return errorResult(e.message);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
server.tool("artifact_get", "Retrieve an artifact by ID, or search by type and title", {
|
|
121
|
+
artifact_id: z.string().optional().describe("Artifact ID"),
|
|
122
|
+
type: z.string().optional().describe("Filter by type"),
|
|
123
|
+
title_search: z.string().optional().describe("Search by title substring"),
|
|
124
|
+
}, async (params) => {
|
|
125
|
+
try {
|
|
126
|
+
const result = artifactGet(db, projectId, params);
|
|
127
|
+
if (!result) {
|
|
128
|
+
return textResult("Artifact not found.");
|
|
129
|
+
}
|
|
130
|
+
if (Array.isArray(result)) {
|
|
131
|
+
if (result.length === 0)
|
|
132
|
+
return textResult("No artifacts found.");
|
|
133
|
+
const lines = result.map((a) => `- **${a.title}** (${a.type}) [v${a.version}]`);
|
|
134
|
+
return textResult(`Artifacts (${result.length}):\n\n${lines.join("\n")}`);
|
|
135
|
+
}
|
|
136
|
+
const a = result;
|
|
137
|
+
return textResult(`# ${a.title}\n\n**Type:** ${a.type}\n**Version:** ${a.version}\n**Created:** ${a.created_at}\n\n${a.content ?? "(no content)"}`);
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
return errorResult(e.message);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
server.tool("artifact_list", "List artifacts with optional type/schema/tag filtering and pagination", {
|
|
144
|
+
type: z.string().optional().describe("Filter by type"),
|
|
145
|
+
schema_id: z.string().optional().describe("Filter by schema ID"),
|
|
146
|
+
tags: z.array(z.string()).optional().describe("Filter by tags"),
|
|
147
|
+
limit: z.number().optional().describe("Page size (default 50)"),
|
|
148
|
+
offset: z.number().optional().describe("Offset for pagination"),
|
|
149
|
+
}, async (params) => {
|
|
150
|
+
try {
|
|
151
|
+
const results = artifactList(db, projectId, params);
|
|
152
|
+
if (results.length === 0) {
|
|
153
|
+
return textResult("No artifacts found.");
|
|
154
|
+
}
|
|
155
|
+
const lines = results.map((a) => `- **${a.title}** (${a.type}) [v${a.version}]`);
|
|
156
|
+
return textResult(`Artifacts (${results.length}):\n\n${lines.join("\n")}`);
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
return errorResult(e.message);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// --- Task Tools ---
|
|
163
|
+
server.tool("task_create", "Create a new task with optional dependencies and acceptance criteria", {
|
|
164
|
+
title: z.string().describe("Task title"),
|
|
165
|
+
description: z.string().optional().describe("Task description"),
|
|
166
|
+
status: z.enum(["pending", "in-progress", "done", "blocked"]).optional().describe("Initial status"),
|
|
167
|
+
owner_role: z.string().optional().describe("Owner role (e.g., 'frontend', 'backend')"),
|
|
168
|
+
acceptance_criteria: z.array(z.string()).optional().describe("Acceptance criteria"),
|
|
169
|
+
linked_artifacts: z.array(z.string()).optional().describe("Linked artifact IDs"),
|
|
170
|
+
dependencies: z.array(z.string()).optional().describe("Dependency task IDs"),
|
|
171
|
+
}, async (params) => {
|
|
172
|
+
try {
|
|
173
|
+
const result = taskCreate(db, projectId, params);
|
|
174
|
+
return textResult(`Task created: ${result.id}\nStatus: ${result.status}`);
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
return errorResult(e.message);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
server.tool("task_update", "Update a task's status, linked artifacts, or other fields", {
|
|
181
|
+
task_id: z.string().describe("Task ID to update"),
|
|
182
|
+
title: z.string().optional(),
|
|
183
|
+
description: z.string().optional(),
|
|
184
|
+
status: z.enum(["pending", "in-progress", "done", "blocked"]).optional(),
|
|
185
|
+
owner_role: z.string().optional(),
|
|
186
|
+
acceptance_criteria: z.array(z.string()).optional(),
|
|
187
|
+
linked_artifacts: z.array(z.string()).optional(),
|
|
188
|
+
dependencies: z.array(z.string()).optional(),
|
|
189
|
+
}, async (params) => {
|
|
190
|
+
try {
|
|
191
|
+
const result = taskUpdate(db, projectId, params);
|
|
192
|
+
return textResult(`Task ${result.id}: ${result.updated ? "updated" : "no changes"}`);
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
return errorResult(e.message);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
server.tool("task_get_dag", "Get all tasks as a dependency graph, with optional status filtering", {
|
|
199
|
+
status: z.string().optional().describe("Filter by status"),
|
|
200
|
+
}, async (params) => {
|
|
201
|
+
try {
|
|
202
|
+
const tasks = taskGetDag(db, projectId, params);
|
|
203
|
+
if (tasks.length === 0) {
|
|
204
|
+
return textResult("No tasks found.");
|
|
205
|
+
}
|
|
206
|
+
const lines = tasks.map((t) => {
|
|
207
|
+
const deps = t.dependencies.length > 0
|
|
208
|
+
? ` (depends on: ${t.dependencies.join(", ")})`
|
|
209
|
+
: "";
|
|
210
|
+
return `- [${t.status}] **${t.title}**${deps}`;
|
|
211
|
+
});
|
|
212
|
+
return textResult(`Tasks (${tasks.length}):\n\n${lines.join("\n")}`);
|
|
213
|
+
}
|
|
214
|
+
catch (e) {
|
|
215
|
+
return errorResult(e.message);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
// --- Context Tools ---
|
|
219
|
+
server.tool("context_assemble", "Assemble relevant context for a development task using smart retrieval pipeline", {
|
|
220
|
+
task: z.string().describe("Description of the task you're working on"),
|
|
221
|
+
max_tokens: z.number().optional().describe("Max tokens for context block (default 80000)"),
|
|
222
|
+
categories: z.array(z.string()).optional().describe("Filter by memory categories"),
|
|
223
|
+
}, async (params) => {
|
|
224
|
+
try {
|
|
225
|
+
const result = contextAssemble(db, projectId, params);
|
|
226
|
+
return textResult(result.context);
|
|
227
|
+
}
|
|
228
|
+
catch (e) {
|
|
229
|
+
return errorResult(e.message);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
server.tool("search_memories", "Full-text search across all memories with category and tag filtering", {
|
|
233
|
+
query: z.string().describe("Search query"),
|
|
234
|
+
category: z.string().optional().describe("Filter by category"),
|
|
235
|
+
tags: z.array(z.string()).optional().describe("Filter by tags"),
|
|
236
|
+
limit: z.number().optional().describe("Max results (default 20)"),
|
|
237
|
+
}, async (params) => {
|
|
238
|
+
try {
|
|
239
|
+
const results = searchMemories(db, projectId, params);
|
|
240
|
+
if (results.length === 0) {
|
|
241
|
+
return textResult("No memories found matching query.");
|
|
242
|
+
}
|
|
243
|
+
const lines = results.map((r) => `- **${r.title}** (${r.category}) [score: ${r.score.toFixed(2)}]\n ${r.content.slice(0, 200)}`);
|
|
244
|
+
return textResult(`Search results (${results.length}):\n\n${lines.join("\n\n")}`);
|
|
245
|
+
}
|
|
246
|
+
catch (e) {
|
|
247
|
+
return errorResult(e.message);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
// --- Project Tools ---
|
|
251
|
+
server.tool("project_init", "Initialize BBB for a new project, creating the database and running migrations", {
|
|
252
|
+
name: z.string().describe("Project name"),
|
|
253
|
+
description: z.string().optional().describe("Project description"),
|
|
254
|
+
}, async (params) => {
|
|
255
|
+
try {
|
|
256
|
+
const slug = params.name
|
|
257
|
+
.toLowerCase()
|
|
258
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
259
|
+
.replace(/^-|-$/g, "");
|
|
260
|
+
const result = projectInit(db, { ...params, slug });
|
|
261
|
+
return textResult(`Project '${params.name}' ${result.status === "created" ? "initialized" : "already exists"}.\n\nSlug: ${result.slug}\nID: ${result.id}\nReady to store memories and artifacts.`);
|
|
262
|
+
}
|
|
263
|
+
catch (e) {
|
|
264
|
+
return errorResult(e.message);
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
server.tool("ingest_codebase", "Auto-ingest project context from a repository directory", {
|
|
268
|
+
path: z.string().describe("Path to scan (e.g., './src')"),
|
|
269
|
+
file_types: z.array(z.string()).optional().describe("File extensions to include (e.g., ['.ts', '.tsx'])"),
|
|
270
|
+
exclude: z.array(z.string()).optional().describe("Patterns to exclude (e.g., ['node_modules', 'dist'])"),
|
|
271
|
+
}, async (params) => {
|
|
272
|
+
try {
|
|
273
|
+
const result = projectIngest(db, projectId, params);
|
|
274
|
+
return textResult(`Ingestion complete:\n\nFiles scanned: ${result.files_scanned}\nFiles indexed: ${result.files_indexed}\nFiles skipped: ${result.files_skipped}\nChunks created: ${result.chunks_created}\nTotal tokens: ${result.total_tokens}`);
|
|
275
|
+
}
|
|
276
|
+
catch (e) {
|
|
277
|
+
return errorResult(e.message);
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
// --- Session Tools ---
|
|
281
|
+
server.tool("session_snapshot", "Capture current session state (memories, artifacts, config) for later rehydration", {
|
|
282
|
+
label: z.string().describe("Human-readable snapshot label"),
|
|
283
|
+
include_env: z.boolean().optional().describe("Include BBB_* environment variables (default true)"),
|
|
284
|
+
}, async (params) => {
|
|
285
|
+
try {
|
|
286
|
+
const result = sessionSnapshot(db, projectId, snapshotsPath, params);
|
|
287
|
+
return textResult(`Snapshot created: ${result.id}\n\nLabel: ${result.label}\nMemories: ${result.memories_count}\nArtifacts: ${result.artifacts_count}\nEnv vars: ${result.env_vars_count}\nSize: ${result.size_mb} MB\n\nPath: ${result.path}`);
|
|
288
|
+
}
|
|
289
|
+
catch (e) {
|
|
290
|
+
return errorResult(e.message);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
server.tool("session_rehydrate", "Restore a session snapshot into the current environment with tool-specific config generation", {
|
|
294
|
+
snapshot_id: z.string().describe("Snapshot ID to restore"),
|
|
295
|
+
target_tool: z.enum(["claude-desktop", "claude-code", "cursor", "vscode", "generic"]).describe("Target tool for config generation"),
|
|
296
|
+
}, async (params) => {
|
|
297
|
+
try {
|
|
298
|
+
const result = sessionRehydrate(db, projectId, snapshotsPath, params);
|
|
299
|
+
return textResult(`Session rehydrated from: ${result.label}\n\n${result.config_content}\n\nMemories restored: ${result.memories_restored}\nArtifacts restored: ${result.artifacts_restored}\nEnv vars restored: ${result.env_vars_restored}`);
|
|
300
|
+
}
|
|
301
|
+
catch (e) {
|
|
302
|
+
return errorResult(e.message);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
return server;
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,EAAqB,EACrB,SAAiB,EACjB,aAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,uBAAuB;IAEvB,MAAM,CAAC,IAAI,CACT,cAAc,EACd,8CAA8C,EAC9C;QACE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACpI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC1D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAChF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACjF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,UAAU,CAAC,kBAAkB,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,yEAAyE,EACzE;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAClE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,OAAO,UAAU,CAAC,mCAAmC,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAA0B,EAAE,EAAE,CAC7B,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,IAAe,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC,OAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACtI,CAAC;YACF,OAAO,UAAU,CAAC,SAAS,OAAO,CAAC,MAAM,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,iEAAiE,EACjE;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC/D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAChE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,UAAU,CAAC,oBAAoB,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO,GAAG,CACrD,CAAC;YACF,OAAO,UAAU,CAAC,aAAa,OAAO,CAAC,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,+EAA+E,EAC/E;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QACtD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KACzD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,UAAU,CACf,mBAAmB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,UAAU,GAAG,CACrF,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,uBAAuB,EACvB;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KAC7D,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7D,OAAO,UAAU,CAAC,mBAAmB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yBAAyB;IAEzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,sEAAsE,EACtE;QACE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;QAChM,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC/E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC7E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAChE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,UAAU,CACf,YAAY,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,OAAO,EAAE,CAC/G,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,yDAAyD,EACzD;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC1D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAC1E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;gBAClE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CACtB,CAAC,CAA0B,EAAE,EAAE,CAC7B,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,GAAG,CACjD,CAAC;gBACF,OAAO,UAAU,CAAC,cAAc,MAAM,CAAC,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,MAAM,CAAC,GAAG,MAAiC,CAAC;YAC5C,OAAO,UAAU,CACf,KAAK,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,OAAO,IAAI,cAAc,EAAE,CACjI,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,uEAAuE,EACvE;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC/D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAChE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,GAAG,CACtD,CAAC;YACF,OAAO,UAAU,CAAC,cAAc,OAAO,CAAC,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,qBAAqB;IAErB,MAAM,CAAC,IAAI,CACT,aAAa,EACb,sEAAsE,EACtE;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC/D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACnG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACtF,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACnF,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChF,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAC7E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,UAAU,CAAC,iBAAiB,MAAM,CAAC,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2DAA2D,EAC3D;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;QACxE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACnD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAChD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC7C,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,UAAU,CACf,QAAQ,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAClE,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,qEAAqE,EACrE;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC3D,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5B,MAAM,IAAI,GACR,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAC/C,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,OAAO,UAAU,CAAC,UAAU,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,wBAAwB;IAExB,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,iFAAiF,EACjF;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QAC1F,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACnF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,sEAAsE,EACtE;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAClE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,UAAU,CAAC,mCAAmC,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,QAAQ,aAAa,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,OAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC9G,CAAC;YACF,OAAO,UAAU,CAAC,mBAAmB,OAAO,CAAC,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,wBAAwB;IAExB,MAAM,CAAC,IAAI,CACT,cAAc,EACd,gFAAgF,EAChF;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACnE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;iBACrB,WAAW,EAAE;iBACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;iBAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,OAAO,UAAU,CACf,YAAY,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,cAAc,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,EAAE,0CAA0C,CAChL,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,yDAAyD,EACzD;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACzD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QACzG,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;KACzG,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,UAAU,CACf,yCAAyC,MAAM,CAAC,aAAa,oBAAoB,MAAM,CAAC,aAAa,oBAAoB,MAAM,CAAC,aAAa,qBAAqB,MAAM,CAAC,cAAc,mBAAmB,MAAM,CAAC,YAAY,EAAE,CAChO,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,wBAAwB;IAExB,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,mFAAmF,EACnF;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC3D,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KACnG,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACrE,OAAO,UAAU,CACf,qBAAqB,MAAM,CAAC,EAAE,cAAc,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,cAAc,gBAAgB,MAAM,CAAC,eAAe,eAAe,MAAM,CAAC,cAAc,WAAW,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,IAAI,EAAE,CAC7N,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,8FAA8F,EAC9F;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC1D,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KACpI,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,UAAU,CACf,4BAA4B,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,cAAc,0BAA0B,MAAM,CAAC,iBAAiB,yBAAyB,MAAM,CAAC,kBAAkB,wBAAwB,MAAM,CAAC,iBAAiB,EAAE,CAC3N,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAgE3C,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GACrB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCvC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import AjvModule from "ajv";
|
|
2
|
+
const Ajv = AjvModule.default ?? AjvModule;
|
|
3
|
+
const ajv = new Ajv({ allErrors: true });
|
|
4
|
+
const builtInSchemas = {
|
|
5
|
+
adr: {
|
|
6
|
+
type: "object",
|
|
7
|
+
required: ["status", "context", "decision"],
|
|
8
|
+
properties: {
|
|
9
|
+
status: {
|
|
10
|
+
type: "string",
|
|
11
|
+
enum: ["proposed", "accepted", "deprecated", "superseded"],
|
|
12
|
+
},
|
|
13
|
+
context: { type: "string" },
|
|
14
|
+
decision: { type: "string" },
|
|
15
|
+
},
|
|
16
|
+
additionalProperties: true,
|
|
17
|
+
},
|
|
18
|
+
prd: {
|
|
19
|
+
type: "object",
|
|
20
|
+
required: ["problem_statement", "goals"],
|
|
21
|
+
properties: {
|
|
22
|
+
problem_statement: { type: "string" },
|
|
23
|
+
goals: { type: "array", items: { type: "string" }, minItems: 1 },
|
|
24
|
+
},
|
|
25
|
+
additionalProperties: true,
|
|
26
|
+
},
|
|
27
|
+
api_contract: {
|
|
28
|
+
type: "object",
|
|
29
|
+
required: ["endpoints"],
|
|
30
|
+
properties: {
|
|
31
|
+
endpoints: {
|
|
32
|
+
type: "array",
|
|
33
|
+
minItems: 1,
|
|
34
|
+
items: {
|
|
35
|
+
type: "object",
|
|
36
|
+
required: ["method", "path"],
|
|
37
|
+
properties: {
|
|
38
|
+
method: { type: "string" },
|
|
39
|
+
path: { type: "string" },
|
|
40
|
+
},
|
|
41
|
+
additionalProperties: true,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
additionalProperties: true,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
const compiledCache = new Map();
|
|
49
|
+
function getBuiltInValidator(schemaId) {
|
|
50
|
+
const schema = builtInSchemas[schemaId];
|
|
51
|
+
if (!schema)
|
|
52
|
+
return undefined;
|
|
53
|
+
let validate = compiledCache.get(schemaId);
|
|
54
|
+
if (!validate) {
|
|
55
|
+
validate = ajv.compile(schema);
|
|
56
|
+
compiledCache.set(schemaId, validate);
|
|
57
|
+
}
|
|
58
|
+
return validate;
|
|
59
|
+
}
|
|
60
|
+
export function validatePayload(schemaId, payload, db) {
|
|
61
|
+
// Try built-in schema first
|
|
62
|
+
const builtIn = getBuiltInValidator(schemaId);
|
|
63
|
+
if (builtIn) {
|
|
64
|
+
const valid = builtIn(payload);
|
|
65
|
+
if (valid)
|
|
66
|
+
return { valid: true };
|
|
67
|
+
const errors = builtIn.errors?.map((e) => `${e.instancePath || "/"} ${e.message}`);
|
|
68
|
+
return { valid: false, errors };
|
|
69
|
+
}
|
|
70
|
+
// Fall back to custom schema from DB
|
|
71
|
+
if (db) {
|
|
72
|
+
const row = db
|
|
73
|
+
.prepare(`SELECT json_schema FROM artifact_schemas WHERE id = ?`)
|
|
74
|
+
.get(schemaId);
|
|
75
|
+
if (row) {
|
|
76
|
+
const schema = JSON.parse(row.json_schema);
|
|
77
|
+
const validate = ajv.compile(schema);
|
|
78
|
+
const valid = validate(payload);
|
|
79
|
+
if (valid)
|
|
80
|
+
return { valid: true };
|
|
81
|
+
const errors = validate.errors?.map((e) => `${e.instancePath || "/"} ${e.message}`);
|
|
82
|
+
return { valid: false, errors };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Unknown schema — permissive
|
|
86
|
+
return { valid: true };
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface TemplateData {
|
|
2
|
+
project: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
snapshotId: string;
|
|
5
|
+
snapshotLabel: string;
|
|
6
|
+
date: string;
|
|
7
|
+
memories: Array<{
|
|
8
|
+
category: string;
|
|
9
|
+
title: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}>;
|
|
12
|
+
artifacts: Array<{
|
|
13
|
+
type: string;
|
|
14
|
+
title: string;
|
|
15
|
+
content: string;
|
|
16
|
+
}>;
|
|
17
|
+
env: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
export declare function generateClaudeCode(data: TemplateData): string;
|
|
20
|
+
export declare function generateCursorRules(data: TemplateData): string;
|
|
21
|
+
export declare function generateClaudeDesktopConfig(data: TemplateData): string;
|
|
22
|
+
export declare function generateVSCodeSettings(data: TemplateData): string;
|
|
23
|
+
export declare function generateGenericConfig(data: TemplateData): string;
|
|
24
|
+
export declare function generateConfig(targetTool: string, data: TemplateData): string;
|
|
25
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAWD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAqC7D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA0B9D;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAkBtE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAkBjE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAgBhE;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,GACjB,MAAM,CAcR"}
|