@silverbackbase/root 0.4.2 → 0.4.4
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/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +17 -10
- package/dist/auth.js.map +1 -1
- package/dist/core/db.d.ts +6 -5
- package/dist/core/db.d.ts.map +1 -1
- package/dist/core/db.js +81 -53
- package/dist/core/db.js.map +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/knowledge.d.ts +6 -4
- package/dist/core/knowledge.d.ts.map +1 -1
- package/dist/core/knowledge.js +18 -10
- package/dist/core/knowledge.js.map +1 -1
- package/dist/core/types.d.ts +2 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/hook.d.ts +0 -5
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +16 -9
- package/dist/hook.js.map +1 -1
- package/dist/init.js +12 -1
- package/dist/init.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +72 -37
- package/dist/mcp.js.map +1 -1
- package/package.json +6 -4
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AA4C9C,eAAO,MAAM,WAAW,EAAE,iBAUzB,CAAC"}
|
package/dist/auth.js
CHANGED
|
@@ -2,31 +2,37 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
const VALIDATE_URL = process.env.SILVERBACKBASE_URL
|
|
3
3
|
? `${process.env.SILVERBACKBASE_URL}/api/tokens/validate`
|
|
4
4
|
: null;
|
|
5
|
-
const
|
|
5
|
+
const VALIDATE_SECRET = process.env.ROOT_VALIDATE_SECRET ?? process.env.TRAIL_VALIDATE_SECRET ?? "";
|
|
6
6
|
const cache = new Map();
|
|
7
7
|
async function validateToken(token) {
|
|
8
8
|
// Cloud mode: validate against silverbackbase.com
|
|
9
9
|
if (VALIDATE_URL) {
|
|
10
10
|
const hash = createHash("sha256").update(token).digest("hex");
|
|
11
11
|
const cached = cache.get(hash);
|
|
12
|
-
if (cached && cached.expires > Date.now())
|
|
13
|
-
return cached.valid;
|
|
12
|
+
if (cached && cached.expires > Date.now()) {
|
|
13
|
+
return { valid: cached.valid, workspaceId: cached.workspaceId };
|
|
14
|
+
}
|
|
14
15
|
try {
|
|
15
16
|
const res = await fetch(VALIDATE_URL, {
|
|
16
17
|
method: "POST",
|
|
17
|
-
headers: { "Content-Type": "application/json", "x-
|
|
18
|
+
headers: { "Content-Type": "application/json", "x-trail-secret": VALIDATE_SECRET },
|
|
18
19
|
body: JSON.stringify({ hash }),
|
|
19
20
|
});
|
|
20
21
|
const data = (await res.json());
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
const entry = {
|
|
23
|
+
valid: data.valid,
|
|
24
|
+
workspaceId: data.workspaceId ?? null,
|
|
25
|
+
expires: Date.now() + 60_000,
|
|
26
|
+
};
|
|
27
|
+
cache.set(hash, entry);
|
|
28
|
+
return { valid: entry.valid, workspaceId: entry.workspaceId };
|
|
23
29
|
}
|
|
24
30
|
catch {
|
|
25
|
-
return false;
|
|
31
|
+
return { valid: false, workspaceId: null };
|
|
26
32
|
}
|
|
27
33
|
}
|
|
28
|
-
// Self-host / dev: no
|
|
29
|
-
return true;
|
|
34
|
+
// Self-host / dev: no workspace isolation
|
|
35
|
+
return { valid: true, workspaceId: null };
|
|
30
36
|
}
|
|
31
37
|
export const requireAuth = async (c, next) => {
|
|
32
38
|
const auth = c.req.header("authorization");
|
|
@@ -34,9 +40,10 @@ export const requireAuth = async (c, next) => {
|
|
|
34
40
|
return c.json({ error: "Unauthorized — provide Authorization: Bearer <token>" }, 401);
|
|
35
41
|
}
|
|
36
42
|
const token = auth.slice(7).trim();
|
|
37
|
-
const valid = await validateToken(token);
|
|
43
|
+
const { valid, workspaceId } = await validateToken(token);
|
|
38
44
|
if (!valid)
|
|
39
45
|
return c.json({ error: "Invalid or revoked token" }, 401);
|
|
46
|
+
c.set("workspaceId", workspaceId);
|
|
40
47
|
await next();
|
|
41
48
|
};
|
|
42
49
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB;IACjD,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,sBAAsB;IACzD,CAAC,CAAC,IAAI,CAAC;AAET,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/core/db.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { KnowledgeCategory,
|
|
1
|
+
import type { KnowledgeCategory, ProjectRow } from "./types.js";
|
|
2
2
|
export interface KnowledgeRow {
|
|
3
3
|
id: string;
|
|
4
4
|
accountId: string;
|
|
@@ -8,10 +8,11 @@ export interface KnowledgeRow {
|
|
|
8
8
|
updatedAt: Date;
|
|
9
9
|
}
|
|
10
10
|
export interface KnowledgeDB {
|
|
11
|
-
createProject(id: string, name: string, url: string): Promise<
|
|
12
|
-
listProjects(): Promise<
|
|
13
|
-
getProject(id: string): Promise<
|
|
14
|
-
deleteProject(id: string): Promise<{
|
|
11
|
+
createProject(id: string, name: string, url: string, workspaceId: string | null): Promise<ProjectRow>;
|
|
12
|
+
listProjects(workspaceId: string | null): Promise<ProjectRow[]>;
|
|
13
|
+
getProject(id: string, workspaceId: string | null): Promise<ProjectRow | undefined>;
|
|
14
|
+
deleteProject(id: string, workspaceId: string | null): Promise<{
|
|
15
|
+
deleted: boolean;
|
|
15
16
|
items_removed: number;
|
|
16
17
|
}>;
|
|
17
18
|
getAll(accountId: string): Promise<KnowledgeRow[]>;
|
package/dist/core/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAE1B,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IACpF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE5G,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IACxG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACnE;AA4OD,eAAO,MAAM,EAAE,EAAE,WAES,CAAC"}
|
package/dist/core/db.js
CHANGED
|
@@ -2,10 +2,11 @@ import { DatabaseSync } from "node:sqlite";
|
|
|
2
2
|
import postgres from "postgres";
|
|
3
3
|
const CREATE_TABLE_SQL = `
|
|
4
4
|
CREATE TABLE IF NOT EXISTS clients (
|
|
5
|
-
id
|
|
6
|
-
name
|
|
7
|
-
url
|
|
8
|
-
|
|
5
|
+
id TEXT PRIMARY KEY,
|
|
6
|
+
name TEXT NOT NULL,
|
|
7
|
+
url TEXT NOT NULL,
|
|
8
|
+
workspace_id TEXT,
|
|
9
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
|
|
9
10
|
);
|
|
10
11
|
CREATE TABLE IF NOT EXISTS knowledge_items (
|
|
11
12
|
id TEXT PRIMARY KEY,
|
|
@@ -20,10 +21,11 @@ const CREATE_TABLE_SQL = `
|
|
|
20
21
|
`;
|
|
21
22
|
const CREATE_TABLE_PG = `
|
|
22
23
|
CREATE TABLE IF NOT EXISTS clients (
|
|
23
|
-
id
|
|
24
|
-
name
|
|
25
|
-
url
|
|
26
|
-
|
|
24
|
+
id TEXT PRIMARY KEY,
|
|
25
|
+
name TEXT NOT NULL,
|
|
26
|
+
url TEXT NOT NULL,
|
|
27
|
+
workspace_id TEXT,
|
|
28
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
27
29
|
);
|
|
28
30
|
CREATE TABLE IF NOT EXISTS knowledge_items (
|
|
29
31
|
id TEXT PRIMARY KEY,
|
|
@@ -46,11 +48,12 @@ function parseSqliteRow(row) {
|
|
|
46
48
|
updatedAt: new Date(row.updated_at),
|
|
47
49
|
};
|
|
48
50
|
}
|
|
49
|
-
function
|
|
51
|
+
function parseSqliteProject(row) {
|
|
50
52
|
return {
|
|
51
53
|
id: row.id,
|
|
52
54
|
name: row.name,
|
|
53
55
|
url: row.url,
|
|
56
|
+
workspaceId: row.workspace_id ?? null,
|
|
54
57
|
createdAt: new Date(row.created_at),
|
|
55
58
|
};
|
|
56
59
|
}
|
|
@@ -59,57 +62,66 @@ function createSQLiteDB(dbPath) {
|
|
|
59
62
|
sqlite.exec("PRAGMA journal_mode = WAL;");
|
|
60
63
|
sqlite.exec("PRAGMA foreign_keys = ON;");
|
|
61
64
|
sqlite.exec(CREATE_TABLE_SQL);
|
|
65
|
+
// migration for existing DBs without workspace_id
|
|
66
|
+
try {
|
|
67
|
+
sqlite.exec("ALTER TABLE clients ADD COLUMN workspace_id TEXT");
|
|
68
|
+
}
|
|
69
|
+
catch { }
|
|
62
70
|
return {
|
|
63
|
-
async createProject(id, name, url) {
|
|
71
|
+
async createProject(id, name, url, workspaceId) {
|
|
64
72
|
const now = new Date().toISOString();
|
|
65
|
-
sqlite.prepare("INSERT INTO clients (id, name, url, created_at) VALUES (?, ?, ?, ?)").run(id, name, url, now);
|
|
66
|
-
return { id, name, url, createdAt: new Date(now) };
|
|
67
|
-
},
|
|
68
|
-
async listProjects() {
|
|
73
|
+
sqlite.prepare("INSERT INTO clients (id, name, url, workspace_id, created_at) VALUES (?, ?, ?, ?, ?)").run(id, name, url, workspaceId ?? null, now);
|
|
74
|
+
return { id, name, url, workspaceId: workspaceId ?? null, createdAt: new Date(now) };
|
|
75
|
+
},
|
|
76
|
+
async listProjects(workspaceId) {
|
|
77
|
+
if (workspaceId) {
|
|
78
|
+
const rows = sqlite.prepare("SELECT * FROM clients WHERE workspace_id = ? ORDER BY created_at DESC").all(workspaceId);
|
|
79
|
+
return rows.map(parseSqliteProject);
|
|
80
|
+
}
|
|
69
81
|
const rows = sqlite.prepare("SELECT * FROM clients ORDER BY created_at DESC").all();
|
|
70
|
-
return rows.map(
|
|
71
|
-
},
|
|
72
|
-
async getProject(id) {
|
|
73
|
-
const row =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
82
|
+
return rows.map(parseSqliteProject);
|
|
83
|
+
},
|
|
84
|
+
async getProject(id, workspaceId) {
|
|
85
|
+
const row = workspaceId
|
|
86
|
+
? sqlite.prepare("SELECT * FROM clients WHERE id = ? AND workspace_id = ?").get(id, workspaceId)
|
|
87
|
+
: sqlite.prepare("SELECT * FROM clients WHERE id = ?").get(id);
|
|
88
|
+
return row ? parseSqliteProject(row) : undefined;
|
|
89
|
+
},
|
|
90
|
+
async deleteProject(id, workspaceId) {
|
|
91
|
+
const project = workspaceId
|
|
92
|
+
? sqlite.prepare("SELECT id FROM clients WHERE id = ? AND workspace_id = ?").get(id, workspaceId)
|
|
93
|
+
: sqlite.prepare("SELECT id FROM clients WHERE id = ?").get(id);
|
|
94
|
+
if (!project)
|
|
95
|
+
return { deleted: false, items_removed: 0 };
|
|
77
96
|
const count = sqlite.prepare("SELECT COUNT(*) as n FROM knowledge_items WHERE account_id = ?").get(id).n;
|
|
78
97
|
sqlite.prepare("DELETE FROM knowledge_items WHERE account_id = ?").run(id);
|
|
79
98
|
sqlite.prepare("DELETE FROM clients WHERE id = ?").run(id);
|
|
80
|
-
return { items_removed: count };
|
|
99
|
+
return { deleted: true, items_removed: count };
|
|
81
100
|
},
|
|
82
101
|
async getAll(accountId) {
|
|
83
|
-
|
|
84
|
-
return stmt.all(accountId).map(parseSqliteRow);
|
|
102
|
+
return sqlite.prepare("SELECT * FROM knowledge_items WHERE account_id = ?").all(accountId).map(parseSqliteRow);
|
|
85
103
|
},
|
|
86
104
|
async getByCategory(accountId, category) {
|
|
87
|
-
|
|
88
|
-
return stmt.all(accountId, category).map(parseSqliteRow);
|
|
105
|
+
return sqlite.prepare("SELECT * FROM knowledge_items WHERE account_id = ? AND category = ?").all(accountId, category).map(parseSqliteRow);
|
|
89
106
|
},
|
|
90
107
|
async insert(id, accountId, category, data) {
|
|
91
108
|
const now = new Date().toISOString();
|
|
92
|
-
|
|
93
|
-
stmt.run(id, accountId, category, JSON.stringify(data), now, now);
|
|
109
|
+
sqlite.prepare("INSERT INTO knowledge_items (id, account_id, category, data, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)").run(id, accountId, category, JSON.stringify(data), now, now);
|
|
94
110
|
},
|
|
95
111
|
async update(id, accountId, data) {
|
|
96
|
-
const
|
|
97
|
-
const existing = getStmt.get(id, accountId);
|
|
112
|
+
const existing = sqlite.prepare("SELECT * FROM knowledge_items WHERE id = ? AND account_id = ?").get(id, accountId);
|
|
98
113
|
if (!existing)
|
|
99
114
|
return undefined;
|
|
100
115
|
const merged = { ...JSON.parse(existing.data), ...data };
|
|
101
116
|
const now = new Date().toISOString();
|
|
102
|
-
|
|
103
|
-
stmt.run(JSON.stringify(merged), now, id, accountId);
|
|
117
|
+
sqlite.prepare("UPDATE knowledge_items SET data = ?, updated_at = ? WHERE id = ? AND account_id = ?").run(JSON.stringify(merged), now, id, accountId);
|
|
104
118
|
return parseSqliteRow({ ...existing, data: JSON.stringify(merged), updated_at: now });
|
|
105
119
|
},
|
|
106
120
|
async remove(id, accountId) {
|
|
107
|
-
|
|
108
|
-
stmt.run(id, accountId);
|
|
121
|
+
sqlite.prepare("DELETE FROM knowledge_items WHERE id = ? AND account_id = ?").run(id, accountId);
|
|
109
122
|
},
|
|
110
123
|
async search(accountId, query) {
|
|
111
|
-
|
|
112
|
-
return stmt.all(accountId, `%${query}%`).map(parseSqliteRow);
|
|
124
|
+
return sqlite.prepare("SELECT * FROM knowledge_items WHERE account_id = ? AND data LIKE ?").all(accountId, `%${query}%`).map(parseSqliteRow);
|
|
113
125
|
},
|
|
114
126
|
};
|
|
115
127
|
}
|
|
@@ -120,6 +132,10 @@ function createPostgresDB(url) {
|
|
|
120
132
|
if (initialized)
|
|
121
133
|
return;
|
|
122
134
|
await sql.unsafe(CREATE_TABLE_PG);
|
|
135
|
+
try {
|
|
136
|
+
await sql `ALTER TABLE clients ADD COLUMN IF NOT EXISTS workspace_id TEXT`;
|
|
137
|
+
}
|
|
138
|
+
catch { }
|
|
123
139
|
initialized = true;
|
|
124
140
|
}
|
|
125
141
|
function parseRow(row) {
|
|
@@ -132,30 +148,45 @@ function createPostgresDB(url) {
|
|
|
132
148
|
updatedAt: new Date(row.updated_at),
|
|
133
149
|
};
|
|
134
150
|
}
|
|
151
|
+
function parseProject(row) {
|
|
152
|
+
return {
|
|
153
|
+
id: row.id,
|
|
154
|
+
name: row.name,
|
|
155
|
+
url: row.url,
|
|
156
|
+
workspaceId: row.workspace_id ?? null,
|
|
157
|
+
createdAt: new Date(row.created_at),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
135
160
|
return {
|
|
136
|
-
async createProject(id, name, url) {
|
|
161
|
+
async createProject(id, name, url, workspaceId) {
|
|
162
|
+
await ensureInit();
|
|
137
163
|
const now = new Date();
|
|
138
|
-
await sql `INSERT INTO clients (id, name, url, created_at) VALUES (${id}, ${name}, ${url}, ${now})`;
|
|
139
|
-
return { id, name, url, createdAt: now };
|
|
164
|
+
await sql `INSERT INTO clients (id, name, url, workspace_id, created_at) VALUES (${id}, ${name}, ${url}, ${workspaceId ?? null}, ${now})`;
|
|
165
|
+
return { id, name, url, workspaceId: workspaceId ?? null, createdAt: now };
|
|
140
166
|
},
|
|
141
|
-
async listProjects() {
|
|
167
|
+
async listProjects(workspaceId) {
|
|
142
168
|
await ensureInit();
|
|
143
|
-
const rows =
|
|
144
|
-
|
|
169
|
+
const rows = workspaceId
|
|
170
|
+
? await sql `SELECT * FROM clients WHERE workspace_id = ${workspaceId} ORDER BY created_at DESC`
|
|
171
|
+
: await sql `SELECT * FROM clients ORDER BY created_at DESC`;
|
|
172
|
+
return rows.map((r) => parseProject(r));
|
|
145
173
|
},
|
|
146
|
-
async getProject(id) {
|
|
174
|
+
async getProject(id, workspaceId) {
|
|
147
175
|
await ensureInit();
|
|
148
|
-
const [row] =
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return
|
|
176
|
+
const [row] = workspaceId
|
|
177
|
+
? await sql `SELECT * FROM clients WHERE id = ${id} AND workspace_id = ${workspaceId}`
|
|
178
|
+
: await sql `SELECT * FROM clients WHERE id = ${id}`;
|
|
179
|
+
return row ? parseProject(row) : undefined;
|
|
152
180
|
},
|
|
153
|
-
async deleteProject(id) {
|
|
181
|
+
async deleteProject(id, workspaceId) {
|
|
154
182
|
await ensureInit();
|
|
183
|
+
const project = await this.getProject(id, workspaceId);
|
|
184
|
+
if (!project)
|
|
185
|
+
return { deleted: false, items_removed: 0 };
|
|
155
186
|
const [{ n }] = await sql `SELECT COUNT(*)::int as n FROM knowledge_items WHERE account_id = ${id}`;
|
|
156
187
|
await sql `DELETE FROM knowledge_items WHERE account_id = ${id}`;
|
|
157
188
|
await sql `DELETE FROM clients WHERE id = ${id}`;
|
|
158
|
-
return { items_removed: n };
|
|
189
|
+
return { deleted: true, items_removed: n };
|
|
159
190
|
},
|
|
160
191
|
async getAll(accountId) {
|
|
161
192
|
await ensureInit();
|
|
@@ -170,10 +201,7 @@ function createPostgresDB(url) {
|
|
|
170
201
|
async insert(id, accountId, category, data) {
|
|
171
202
|
await ensureInit();
|
|
172
203
|
const now = new Date();
|
|
173
|
-
await sql `
|
|
174
|
-
INSERT INTO knowledge_items (id, account_id, category, data, created_at, updated_at)
|
|
175
|
-
VALUES (${id}, ${accountId}, ${category}, ${JSON.stringify(data)}, ${now}, ${now})
|
|
176
|
-
`;
|
|
204
|
+
await sql `INSERT INTO knowledge_items (id, account_id, category, data, created_at, updated_at) VALUES (${id}, ${accountId}, ${category}, ${JSON.stringify(data)}, ${now}, ${now})`;
|
|
177
205
|
},
|
|
178
206
|
async update(id, accountId, data) {
|
|
179
207
|
await ensureInit();
|
package/dist/core/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,QAAQ,MAAM,UAAU,CAAC;AA2BhC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { getContext, getCategory, createItem, updateItem, deleteItem, searchKnowledge, createProject, listProjects, deleteProject } from "./knowledge.js";
|
|
1
|
+
export { getContext, getCategory, createItem, updateItem, deleteItem, searchKnowledge, createProject, listProjects, deleteProject, assertProjectAccess, getProject } from "./knowledge.js";
|
|
2
2
|
export { onboardFromUrl } from "./onboard.js";
|
|
3
3
|
export { refreshKnowledge } from "./refresh.js";
|
|
4
|
-
export type { KnowledgeCategory, KnowledgeItem, BusinessContext, OnboardResult, RefreshDiff,
|
|
4
|
+
export type { KnowledgeCategory, KnowledgeItem, BusinessContext, OnboardResult, RefreshDiff, ProjectRow } from "./types.js";
|
|
5
5
|
export { CATEGORIES } from "./types.js";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3L,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { getContext, getCategory, createItem, updateItem, deleteItem, searchKnowledge, createProject, listProjects, deleteProject } from "./knowledge.js";
|
|
1
|
+
export { getContext, getCategory, createItem, updateItem, deleteItem, searchKnowledge, createProject, listProjects, deleteProject, assertProjectAccess, getProject } from "./knowledge.js";
|
|
2
2
|
export { onboardFromUrl } from "./onboard.js";
|
|
3
3
|
export { refreshKnowledge } from "./refresh.js";
|
|
4
4
|
export { CATEGORIES } from "./types.js";
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3L,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/core/knowledge.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { KnowledgeCategory, BusinessContext,
|
|
2
|
-
export declare function createProject(name: string, url: string): Promise<
|
|
3
|
-
export declare function listProjects(): Promise<
|
|
4
|
-
export declare function deleteProject(
|
|
1
|
+
import type { KnowledgeCategory, BusinessContext, ProjectRow } from "./types.js";
|
|
2
|
+
export declare function createProject(name: string, url: string, workspaceId: string | null): Promise<ProjectRow>;
|
|
3
|
+
export declare function listProjects(workspaceId: string | null): Promise<ProjectRow[]>;
|
|
4
|
+
export declare function deleteProject(projectId: string, workspaceId: string | null): Promise<{
|
|
5
5
|
deleted: boolean;
|
|
6
6
|
items_removed: number;
|
|
7
7
|
}>;
|
|
8
|
+
export declare function assertProjectAccess(projectId: string, workspaceId: string | null): Promise<void>;
|
|
9
|
+
export declare function getProject(projectId: string, workspaceId: string | null): Promise<ProjectRow | undefined>;
|
|
8
10
|
export declare function getContext(accountId: string): Promise<BusinessContext>;
|
|
9
11
|
export declare function getCategory(accountId: string, category: KnowledgeCategory): Promise<{
|
|
10
12
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/core/knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/core/knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAG9G;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAEpF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAEvI;AAID,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAItG;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAE/G;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsC5E;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB;;KAG/E;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;GAK9B;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;GAK9B;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;GAG7D;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;KAGrE"}
|
package/dist/core/knowledge.js
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
import { nanoid } from "nanoid";
|
|
2
2
|
import { db } from "./db.js";
|
|
3
|
-
export async function createProject(name, url) {
|
|
3
|
+
export async function createProject(name, url, workspaceId) {
|
|
4
4
|
const id = nanoid();
|
|
5
|
-
return db.createProject(id, name, url);
|
|
5
|
+
return db.createProject(id, name, url, workspaceId);
|
|
6
6
|
}
|
|
7
|
-
export async function listProjects() {
|
|
8
|
-
return db.listProjects();
|
|
7
|
+
export async function listProjects(workspaceId) {
|
|
8
|
+
return db.listProjects(workspaceId);
|
|
9
9
|
}
|
|
10
|
-
export async function deleteProject(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
export async function deleteProject(projectId, workspaceId) {
|
|
11
|
+
return db.deleteProject(projectId, workspaceId);
|
|
12
|
+
}
|
|
13
|
+
// Throws if the project doesn't exist or doesn't belong to this workspace.
|
|
14
|
+
// In self-hosted mode (workspaceId = null), access is always granted.
|
|
15
|
+
export async function assertProjectAccess(projectId, workspaceId) {
|
|
16
|
+
if (!workspaceId)
|
|
17
|
+
return;
|
|
18
|
+
const project = await db.getProject(projectId, workspaceId);
|
|
19
|
+
if (!project)
|
|
20
|
+
throw new Error(`Project not found or access denied: ${projectId}`);
|
|
21
|
+
}
|
|
22
|
+
export async function getProject(projectId, workspaceId) {
|
|
23
|
+
return db.getProject(projectId, workspaceId);
|
|
16
24
|
}
|
|
17
25
|
export async function getContext(accountId) {
|
|
18
26
|
const items = await db.getAll(accountId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/core/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,GAAW;
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/core/knowledge.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface ProjectRow {
|
|
2
2
|
id: string;
|
|
3
3
|
name: string;
|
|
4
4
|
url: string;
|
|
5
|
+
workspaceId: string | null;
|
|
5
6
|
createdAt: Date;
|
|
6
7
|
}
|
|
7
8
|
export declare const CATEGORIES: readonly ["offer", "persona", "objection", "differentiator", "competitor", "geo", "pricing", "faq", "profile"];
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,gHAUb,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB"}
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO;IACP,SAAS;IACT,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,KAAK;IACL,SAAS;IACT,KAAK;IACL,SAAS;CACD,CAAC"}
|
package/dist/hook.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Root — UserPromptSubmit hook
|
|
4
|
-
* Detects content/SEO/prospection intent and reminds the agent to call root_get_context first.
|
|
5
|
-
* Installed at ~/.silverbackbase/root-context-hook.mjs by root-init.
|
|
6
|
-
*/
|
|
7
2
|
export {};
|
|
8
3
|
//# sourceMappingURL=hook.d.ts.map
|
package/dist/hook.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":""}
|
package/dist/hook.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* Installed at ~/.silverbackbase/root-context-hook.mjs by root-init.
|
|
6
|
-
*/
|
|
2
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
7
5
|
const CONTENT_KEYWORDS = [
|
|
8
6
|
// French
|
|
9
7
|
"rédige", "écris", "génère", "crée", "article", "blog", "email",
|
|
@@ -19,9 +17,19 @@ process.stdin.on("end", () => {
|
|
|
19
17
|
try {
|
|
20
18
|
const payload = JSON.parse(raw);
|
|
21
19
|
const prompt = (payload.prompt ?? "").toLowerCase();
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
if (CONTENT_KEYWORDS.some(kw => prompt.includes(kw))) {
|
|
21
|
+
let msg = "[Root] Appelle root_get_context() avant de générer, puis annonce ce qui est chargé à l'utilisateur.";
|
|
22
|
+
try {
|
|
23
|
+
const statsPath = join(homedir(), ".silverbackbase", "root-stats.json");
|
|
24
|
+
if (existsSync(statsPath)) {
|
|
25
|
+
const stats = JSON.parse(readFileSync(statsPath, "utf-8"));
|
|
26
|
+
if (stats.summary) {
|
|
27
|
+
msg = `[Root] Contexte disponible : ${stats.summary}. Appelle root_get_context() d'abord, puis annonce le résumé à l'utilisateur avant de générer.`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch { }
|
|
32
|
+
process.stdout.write(msg + "\n");
|
|
25
33
|
}
|
|
26
34
|
}
|
|
27
35
|
catch {
|
|
@@ -29,5 +37,4 @@ process.stdin.on("end", () => {
|
|
|
29
37
|
}
|
|
30
38
|
process.exit(0);
|
|
31
39
|
});
|
|
32
|
-
export {};
|
|
33
40
|
//# sourceMappingURL=hook.js.map
|
package/dist/hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,gBAAgB,GAAG;IACvB,SAAS;IACT,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO;IAC/D,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;IACpE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK;IAClD,UAAU;IACV,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW;IAC3D,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa;CACzD,CAAC;AAEF,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;QACvD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrD,IAAI,GAAG,GAAG,qGAAqG,CAAC;YAChH,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;gBACxE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAyB,CAAC;oBACnF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAClB,GAAG,GAAG,gCAAgC,KAAK,CAAC,OAAO,gGAAgG,CAAC;oBACtJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/init.js
CHANGED
|
@@ -27,6 +27,9 @@ function upsert(configPath) {
|
|
|
27
27
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
28
28
|
}
|
|
29
29
|
const HOOK_SCRIPT = `#!/usr/bin/env node
|
|
30
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
31
|
+
import { homedir } from "node:os";
|
|
32
|
+
import { join } from "node:path";
|
|
30
33
|
// Root — UserPromptSubmit hook (installed by root-init, do not edit manually)
|
|
31
34
|
const KEYWORDS = [
|
|
32
35
|
"rédige","écris","génère","crée","article","blog","email","prospection",
|
|
@@ -40,7 +43,15 @@ process.stdin.on("end", () => {
|
|
|
40
43
|
const p = JSON.parse(raw);
|
|
41
44
|
const prompt = (p.prompt ?? "").toLowerCase();
|
|
42
45
|
if (KEYWORDS.some(kw => prompt.includes(kw))) {
|
|
43
|
-
|
|
46
|
+
let msg = "[Root] Appelle root_get_context() avant de générer, puis annonce ce qui est chargé à l'utilisateur.";
|
|
47
|
+
try {
|
|
48
|
+
const sp = join(homedir(), ".silverbackbase", "root-stats.json");
|
|
49
|
+
if (existsSync(sp)) {
|
|
50
|
+
const st = JSON.parse(readFileSync(sp, "utf-8"));
|
|
51
|
+
if (st.summary) msg = "[Root] Contexte disponible : " + st.summary + ". Appelle root_get_context() d'abord, puis annonce le résumé à l'utilisateur avant de générer.";
|
|
52
|
+
}
|
|
53
|
+
} catch {}
|
|
54
|
+
process.stdout.write(msg + "\\n");
|
|
44
55
|
}
|
|
45
56
|
} catch {}
|
|
46
57
|
process.exit(0);
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzC,MAAM,KAAK,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC;AAEvB,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAE3D,MAAM,QAAQ,GAAG,OAAO;IACtB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,gCAAgC,EAAE,UAAU,CAAC,EAAE;IAChF,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,CAAC;AAEvF,SAAS,MAAM,CAAC,UAAkB;IAChC,IAAI,MAAM,GAA4B,EAAE,CAAC;IACzC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,OAAO,GAAI,MAAM,CAAC,UAAsC,IAAI,EAAE,CAAC;IACrE,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;IACxB,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;IAC5B,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
3
|
import { buildServer } from "../mcp.js";
|
|
4
|
-
const server = buildServer();
|
|
4
|
+
const server = buildServer(null);
|
|
5
5
|
const transport = new StdioServerTransport();
|
|
6
6
|
await server.connect(transport);
|
|
7
7
|
//# sourceMappingURL=server.js.map
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,MAAM,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/mcp.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { Context } from "hono";
|
|
3
|
-
export declare function buildServer(): McpServer;
|
|
3
|
+
export declare function buildServer(workspaceId: string | null): McpServer;
|
|
4
4
|
export declare function createMcpHandler(): (c: Context) => Promise<Response>;
|
|
5
5
|
//# sourceMappingURL=mcp.d.ts.map
|
package/dist/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAwBpC,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CA4JjE;AAED,wBAAgB,gBAAgB,KAChB,GAAG,OAAO,uBAOzB"}
|
package/dist/mcp.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import {
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { writeFileSync, mkdirSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { getContext, getCategory, getProject, createItem, updateItem, deleteItem, searchKnowledge, createProject, listProjects, deleteProject, assertProjectAccess, } from "./core/knowledge.js";
|
|
5
8
|
import { onboardFromUrl } from "./core/onboard.js";
|
|
6
9
|
import { refreshKnowledge } from "./core/refresh.js";
|
|
7
10
|
const CATEGORY_ENUM = z.enum([
|
|
@@ -12,45 +15,64 @@ const PROJECT_ID_PARAM = z.string().optional().describe("Project ID. If omitted,
|
|
|
12
15
|
function resolveProjectId(projectId) {
|
|
13
16
|
return projectId ?? process.env.ROOT_ACCOUNT_ID ?? "default";
|
|
14
17
|
}
|
|
15
|
-
export function buildServer() {
|
|
16
|
-
const server = new McpServer({ name: "root", version: "0.4.
|
|
17
|
-
// ──
|
|
18
|
+
export function buildServer(workspaceId) {
|
|
19
|
+
const server = new McpServer({ name: "root", version: "0.4.4" });
|
|
20
|
+
// ── PROJECT MANAGEMENT ─────────────────────────────────────────────────────
|
|
18
21
|
server.registerTool("root_create_project", {
|
|
19
|
-
description: "Create a new
|
|
22
|
+
description: "Create a new project and automatically onboard its website. Scrapes the URL, extracts business knowledge (offers, personas, competitors, geo zones…) and stores it under a new isolated project ID. Returns the project object and the full onboarding summary.",
|
|
20
23
|
inputSchema: {
|
|
21
|
-
name: z.string().describe("
|
|
24
|
+
name: z.string().describe("Project name (e.g. 'Mon business', 'Agence Dupont', 'Projet X')"),
|
|
22
25
|
url: z.string().describe("Website URL to onboard (e.g. 'https://dupont.fr')"),
|
|
23
26
|
},
|
|
24
27
|
}, async ({ name, url }) => {
|
|
25
|
-
const
|
|
26
|
-
const onboarding = await onboardFromUrl(
|
|
27
|
-
return { content: [{ type: "text", text: JSON.stringify({
|
|
28
|
+
const project = await createProject(name, url, workspaceId);
|
|
29
|
+
const onboarding = await onboardFromUrl(project.id, url);
|
|
30
|
+
return { content: [{ type: "text", text: JSON.stringify({ project, onboarding }) }] };
|
|
28
31
|
});
|
|
29
32
|
server.registerTool("root_list_projects", {
|
|
30
|
-
description: "List all
|
|
33
|
+
description: "List all projects accessible in this workspace — name, URL, project ID, and creation date.",
|
|
31
34
|
inputSchema: {},
|
|
32
35
|
}, async () => {
|
|
33
|
-
const
|
|
34
|
-
return { content: [{ type: "text", text: JSON.stringify({ count:
|
|
36
|
+
const projects = await listProjects(workspaceId);
|
|
37
|
+
return { content: [{ type: "text", text: JSON.stringify({ count: projects.length, projects }) }] };
|
|
35
38
|
});
|
|
36
39
|
server.registerTool("root_delete_project", {
|
|
37
|
-
description: "Delete
|
|
40
|
+
description: "Delete a project and all its associated knowledge items.",
|
|
38
41
|
inputSchema: {
|
|
39
|
-
project_id: z.string().describe("The
|
|
42
|
+
project_id: z.string().describe("The project ID to delete"),
|
|
40
43
|
},
|
|
41
44
|
}, async ({ project_id }) => {
|
|
42
|
-
const result = await deleteProject(project_id);
|
|
45
|
+
const result = await deleteProject(project_id, workspaceId);
|
|
43
46
|
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
44
47
|
});
|
|
45
48
|
// ── KNOWLEDGE TOOLS ────────────────────────────────────────────────────────
|
|
46
49
|
server.registerTool("root_get_context", {
|
|
47
|
-
description: "Returns complete business knowledge for a
|
|
48
|
-
inputSchema: {
|
|
49
|
-
project_id: PROJECT_ID_PARAM,
|
|
50
|
-
},
|
|
50
|
+
description: "Returns complete business knowledge for a project — offers, personas, objections, differentiators, competitors, geo zones, pricing, and FAQs. ALWAYS call this tool FIRST before generating any content, SEO article, email, or prospection material. After calling, immediately tell the user: 'Root : [value of _root_summary from the response]' before proceeding.",
|
|
51
|
+
inputSchema: { project_id: PROJECT_ID_PARAM },
|
|
51
52
|
}, async ({ project_id }) => {
|
|
52
|
-
const
|
|
53
|
-
|
|
53
|
+
const pid = resolveProjectId(project_id);
|
|
54
|
+
await assertProjectAccess(pid, workspaceId);
|
|
55
|
+
const [context, project] = await Promise.all([getContext(pid), getProject(pid, workspaceId)]);
|
|
56
|
+
const counts = [];
|
|
57
|
+
if (context.offers.length)
|
|
58
|
+
counts.push(`${context.offers.length} offre${context.offers.length > 1 ? "s" : ""}`);
|
|
59
|
+
if (context.personas.length)
|
|
60
|
+
counts.push(`${context.personas.length} persona${context.personas.length > 1 ? "s" : ""}`);
|
|
61
|
+
if (context.competitors.length)
|
|
62
|
+
counts.push(`${context.competitors.length} concurrent${context.competitors.length > 1 ? "s" : ""}`);
|
|
63
|
+
if (context.faqs.length)
|
|
64
|
+
counts.push(`${context.faqs.length} FAQ${context.faqs.length > 1 ? "s" : ""}`);
|
|
65
|
+
const projectName = project?.name ?? pid;
|
|
66
|
+
const summary = counts.length ? `${projectName} — ${counts.join(", ")}` : projectName;
|
|
67
|
+
if (!workspaceId) {
|
|
68
|
+
try {
|
|
69
|
+
const sbbDir = join(homedir(), ".silverbackbase");
|
|
70
|
+
mkdirSync(sbbDir, { recursive: true });
|
|
71
|
+
writeFileSync(join(sbbDir, "root-stats.json"), JSON.stringify({ summary, updatedAt: new Date().toISOString() }));
|
|
72
|
+
}
|
|
73
|
+
catch { }
|
|
74
|
+
}
|
|
75
|
+
return { content: [{ type: "text", text: JSON.stringify({ _root_summary: summary, ...context }) }] };
|
|
54
76
|
});
|
|
55
77
|
server.registerTool("root_get_category", {
|
|
56
78
|
description: "Returns a specific category of business knowledge. Use when you need only one type of data (e.g. just personas for a prospection email, just objections for a sales script).",
|
|
@@ -59,38 +81,46 @@ export function buildServer() {
|
|
|
59
81
|
category: CATEGORY_ENUM.describe("The knowledge category to retrieve"),
|
|
60
82
|
},
|
|
61
83
|
}, async ({ project_id, category }) => {
|
|
62
|
-
const
|
|
84
|
+
const pid = resolveProjectId(project_id);
|
|
85
|
+
await assertProjectAccess(pid, workspaceId);
|
|
86
|
+
const items = await getCategory(pid, category);
|
|
63
87
|
return { content: [{ type: "text", text: JSON.stringify({ category, count: items.length, items }) }] };
|
|
64
88
|
});
|
|
65
89
|
server.registerTool("root_search", {
|
|
66
|
-
description: "Search across all business knowledge with a text query.
|
|
90
|
+
description: "Search across all business knowledge with a text query.",
|
|
67
91
|
inputSchema: {
|
|
68
92
|
project_id: PROJECT_ID_PARAM,
|
|
69
93
|
query: z.string().describe("Search query"),
|
|
70
94
|
},
|
|
71
95
|
}, async ({ project_id, query }) => {
|
|
72
|
-
const
|
|
96
|
+
const pid = resolveProjectId(project_id);
|
|
97
|
+
await assertProjectAccess(pid, workspaceId);
|
|
98
|
+
const results = await searchKnowledge(pid, query);
|
|
73
99
|
return { content: [{ type: "text", text: JSON.stringify({ query, count: results.length, results }) }] };
|
|
74
100
|
});
|
|
75
101
|
server.registerTool("root_onboard_from_url", {
|
|
76
|
-
description: "Onboard a
|
|
102
|
+
description: "Onboard a project by scraping a website URL. Extracts offers, personas, differentiators, geo zones, pricing, FAQs, and analyzes local competitors. Use root_create_project instead if the project doesn't exist yet.",
|
|
77
103
|
inputSchema: {
|
|
78
104
|
project_id: PROJECT_ID_PARAM,
|
|
79
|
-
url: z.string().describe("The
|
|
105
|
+
url: z.string().describe("The website URL to scrape (e.g. https://example.fr)"),
|
|
80
106
|
},
|
|
81
107
|
}, async ({ project_id, url }) => {
|
|
82
|
-
const
|
|
108
|
+
const pid = resolveProjectId(project_id);
|
|
109
|
+
await assertProjectAccess(pid, workspaceId);
|
|
110
|
+
const result = await onboardFromUrl(pid, url);
|
|
83
111
|
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
84
112
|
});
|
|
85
113
|
server.registerTool("root_create_item", {
|
|
86
|
-
description: "Add a new knowledge item to a category.
|
|
114
|
+
description: "Add a new knowledge item to a category.",
|
|
87
115
|
inputSchema: {
|
|
88
116
|
project_id: PROJECT_ID_PARAM,
|
|
89
117
|
category: CATEGORY_ENUM.describe("Knowledge category"),
|
|
90
118
|
data: z.record(z.unknown()).describe("The item data as a JSON object"),
|
|
91
119
|
},
|
|
92
120
|
}, async ({ project_id, category, data }) => {
|
|
93
|
-
const
|
|
121
|
+
const pid = resolveProjectId(project_id);
|
|
122
|
+
await assertProjectAccess(pid, workspaceId);
|
|
123
|
+
const item = await createItem(pid, category, data);
|
|
94
124
|
return { content: [{ type: "text", text: JSON.stringify({ success: true, item }) }] };
|
|
95
125
|
});
|
|
96
126
|
server.registerTool("root_update_item", {
|
|
@@ -101,7 +131,9 @@ export function buildServer() {
|
|
|
101
131
|
data: z.record(z.unknown()).describe("Fields to update (merged with existing data)"),
|
|
102
132
|
},
|
|
103
133
|
}, async ({ project_id, id, data }) => {
|
|
104
|
-
const
|
|
134
|
+
const pid = resolveProjectId(project_id);
|
|
135
|
+
await assertProjectAccess(pid, workspaceId);
|
|
136
|
+
const item = await updateItem(pid, id, data);
|
|
105
137
|
return { content: [{ type: "text", text: JSON.stringify({ success: true, item }) }] };
|
|
106
138
|
});
|
|
107
139
|
server.registerTool("root_delete_item", {
|
|
@@ -111,24 +143,27 @@ export function buildServer() {
|
|
|
111
143
|
id: z.string().describe("The item ID to delete"),
|
|
112
144
|
},
|
|
113
145
|
}, async ({ project_id, id }) => {
|
|
114
|
-
const
|
|
146
|
+
const pid = resolveProjectId(project_id);
|
|
147
|
+
await assertProjectAccess(pid, workspaceId);
|
|
148
|
+
const result = await deleteItem(pid, id);
|
|
115
149
|
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
116
150
|
});
|
|
117
151
|
server.registerTool("root_refresh", {
|
|
118
|
-
description: "Refresh market intelligence for a
|
|
119
|
-
inputSchema: {
|
|
120
|
-
project_id: PROJECT_ID_PARAM,
|
|
121
|
-
},
|
|
152
|
+
description: "Refresh market intelligence for a project. Re-queries DataForSEO SERP for the configured geo zones and sector, detects new and lost competitors. Returns a structured diff.",
|
|
153
|
+
inputSchema: { project_id: PROJECT_ID_PARAM },
|
|
122
154
|
}, async ({ project_id }) => {
|
|
123
|
-
const
|
|
155
|
+
const pid = resolveProjectId(project_id);
|
|
156
|
+
await assertProjectAccess(pid, workspaceId);
|
|
157
|
+
const diff = await refreshKnowledge(pid);
|
|
124
158
|
return { content: [{ type: "text", text: JSON.stringify(diff) }] };
|
|
125
159
|
});
|
|
126
160
|
return server;
|
|
127
161
|
}
|
|
128
162
|
export function createMcpHandler() {
|
|
129
163
|
return async (c) => {
|
|
164
|
+
const workspaceId = c.get("workspaceId") ?? null;
|
|
130
165
|
const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: undefined });
|
|
131
|
-
const server = buildServer();
|
|
166
|
+
const server = buildServer(workspaceId);
|
|
132
167
|
await server.connect(transport);
|
|
133
168
|
return transport.handleRequest(c.req.raw);
|
|
134
169
|
};
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,wCAAwC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silverbackbase/root",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Business knowledge primitive for AI agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"root":
|
|
9
|
-
"root-mcp":
|
|
8
|
+
"root": "./dist/server.js",
|
|
9
|
+
"root-mcp": "./dist/mcp/server.js",
|
|
10
10
|
"root-init": "./dist/init.js"
|
|
11
11
|
},
|
|
12
12
|
"main": "./dist/core/index.js",
|
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
"types": "./dist/core/index.d.ts"
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
|
-
"files": [
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
21
23
|
"scripts": {
|
|
22
24
|
"build": "tsc -p tsconfig.json && node scripts/fix-shebangs.mjs",
|
|
23
25
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|