@silverbackbase/root 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/auth.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+ export declare const requireAuth: MiddlewareHandler;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAqC9C,eAAO,MAAM,WAAW,EAAE,iBASzB,CAAC"}
package/dist/auth.js ADDED
@@ -0,0 +1,42 @@
1
+ import { createHash } from "node:crypto";
2
+ const VALIDATE_URL = process.env.SILVERBACKBASE_URL
3
+ ? `${process.env.SILVERBACKBASE_URL}/api/tokens/validate`
4
+ : null;
5
+ const ROOT_SECRET = process.env.ROOT_VALIDATE_SECRET ?? "";
6
+ const cache = new Map();
7
+ async function validateToken(token) {
8
+ // Cloud mode: validate against silverbackbase.com
9
+ if (VALIDATE_URL) {
10
+ const hash = createHash("sha256").update(token).digest("hex");
11
+ const cached = cache.get(hash);
12
+ if (cached && cached.expires > Date.now())
13
+ return cached.valid;
14
+ try {
15
+ const res = await fetch(VALIDATE_URL, {
16
+ method: "POST",
17
+ headers: { "Content-Type": "application/json", "x-root-secret": ROOT_SECRET },
18
+ body: JSON.stringify({ hash }),
19
+ });
20
+ const data = (await res.json());
21
+ cache.set(hash, { valid: data.valid, expires: Date.now() + 60_000 });
22
+ return data.valid;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ // Self-host / dev: no auth
29
+ return true;
30
+ }
31
+ export const requireAuth = async (c, next) => {
32
+ const auth = c.req.header("authorization");
33
+ if (!auth?.startsWith("Bearer ")) {
34
+ return c.json({ error: "Unauthorized — provide Authorization: Bearer <token>" }, 401);
35
+ }
36
+ const token = auth.slice(7).trim();
37
+ const valid = await validateToken(token);
38
+ if (!valid)
39
+ return c.json({ error: "Invalid or revoked token" }, 401);
40
+ await next();
41
+ };
42
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +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,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;AAG3D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE5C,KAAK,UAAU,aAAa,CAAC,KAAa;IACxC,kDAAkD;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QAE/D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;gBACpC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAAE;gBAC7E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;aAC/B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;YACtD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAsB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sDAAsD,EAAE,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,CAAC,CAAC;IACtE,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC"}
@@ -31,7 +31,7 @@ async function extractWithLLM(content) {
31
31
  throw new Error("ANTHROPIC_API_KEY is required for onboarding");
32
32
  const anthropic = new Anthropic({ apiKey });
33
33
  const response = await anthropic.messages.create({
34
- model: "claude-sonnet-4-6",
34
+ model: "claude-haiku-4-5-20251001",
35
35
  max_tokens: 4096,
36
36
  messages: [
37
37
  {
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/core/onboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/core/onboard.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":""}
package/dist/init.js ADDED
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join, dirname } from "node:path";
5
+ const args = process.argv.slice(2);
6
+ const tokenIdx = args.indexOf("--token");
7
+ const token = tokenIdx !== -1 ? args[tokenIdx + 1] : args.find(a => a.startsWith("--token="))?.split("=")[1];
8
+ const isLocal = !token;
9
+ const ROOT_MCP_URL = "https://root.silverbackbase.com/mcp";
10
+ const mcpEntry = isLocal
11
+ ? { command: "npx", args: ["-y", "--package=@silverbackbase/root", "root-mcp"] }
12
+ : { type: "http", url: ROOT_MCP_URL, headers: { Authorization: `Bearer ${token}` } };
13
+ function upsert(configPath) {
14
+ let config = {};
15
+ if (existsSync(configPath)) {
16
+ try {
17
+ config = JSON.parse(readFileSync(configPath, "utf-8"));
18
+ }
19
+ catch { }
20
+ }
21
+ else {
22
+ mkdirSync(dirname(configPath), { recursive: true });
23
+ }
24
+ const servers = config.mcpServers ?? {};
25
+ servers.root = mcpEntry;
26
+ config.mcpServers = servers;
27
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
28
+ }
29
+ const home = homedir();
30
+ const clients = [
31
+ {
32
+ name: "Claude Code",
33
+ path: join(home, ".claude.json"),
34
+ },
35
+ {
36
+ name: "Claude Desktop",
37
+ path: process.platform === "win32"
38
+ ? join(process.env.APPDATA ?? home, "Claude", "claude_desktop_config.json")
39
+ : join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json"),
40
+ },
41
+ {
42
+ name: "Cursor",
43
+ path: join(process.cwd(), ".cursor", "mcp.json"),
44
+ },
45
+ ];
46
+ const configured = [];
47
+ for (const client of clients) {
48
+ if (existsSync(client.path)) {
49
+ upsert(client.path);
50
+ configured.push(client.name);
51
+ }
52
+ }
53
+ if (!configured.includes("Claude Code")) {
54
+ upsert(clients[0].path);
55
+ configured.push("Claude Code");
56
+ }
57
+ console.log("\n Root MCP configuré\n");
58
+ configured.forEach(name => console.log(` ✓ ${name}`));
59
+ console.log(`\n Mode : ${isLocal ? "local — SQLite, zéro config" : "cloud — root.silverbackbase.com"}`);
60
+ if (!isLocal)
61
+ console.log(` Token : ${token}`);
62
+ console.log("\n Redémarrez votre agent IA pour activer Root.\n");
63
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -1,185 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
- import { getContext, getCategory, createItem, updateItem, deleteItem, searchKnowledge, } from "../core/knowledge.js";
6
- import { onboardFromUrl } from "../core/onboard.js";
7
- const ACCOUNT_ID = process.env.ROOT_ACCOUNT_ID ?? "default";
8
- const server = new Server({ name: "root", version: "0.1.0" }, { capabilities: { tools: {} } });
9
- const tools = [
10
- {
11
- name: "root_get_context",
12
- description: "Returns complete business knowledge for this account — offers, personas, objections, differentiators, competitors, geo zones, pricing, and FAQs. ALWAYS call this tool before generating any content, SEO article, email, or prospection material.",
13
- inputSchema: { type: "object", properties: {}, required: [] },
14
- },
15
- {
16
- name: "root_get_category",
17
- 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).",
18
- inputSchema: {
19
- type: "object",
20
- properties: {
21
- category: {
22
- type: "string",
23
- enum: [
24
- "offer",
25
- "persona",
26
- "objection",
27
- "differentiator",
28
- "competitor",
29
- "geo",
30
- "pricing",
31
- "faq",
32
- "profile",
33
- ],
34
- description: "The knowledge category to retrieve",
35
- },
36
- },
37
- required: ["category"],
38
- },
39
- },
40
- {
41
- name: "root_search",
42
- description: "Search across all business knowledge with a text query. Use to find a specific objection, competitor detail, or FAQ answer.",
43
- inputSchema: {
44
- type: "object",
45
- properties: {
46
- query: { type: "string", description: "Search query" },
47
- },
48
- required: ["query"],
49
- },
50
- },
51
- {
52
- name: "root_onboard_from_url",
53
- description: "Onboard a client by scraping their website URL. Automatically extracts offers, personas, differentiators, geo zones, pricing, FAQs, and analyzes local competitors. Returns full context + gaps + followup questions for missing data.",
54
- inputSchema: {
55
- type: "object",
56
- properties: {
57
- url: {
58
- type: "string",
59
- description: "The client website URL (e.g. https://client.fr)",
60
- },
61
- },
62
- required: ["url"],
63
- },
64
- },
65
- {
66
- name: "root_create_item",
67
- description: "Add a new knowledge item to a category. Use to add an offer, persona, competitor, or any data not extracted automatically.",
68
- inputSchema: {
69
- type: "object",
70
- properties: {
71
- category: {
72
- type: "string",
73
- enum: [
74
- "offer",
75
- "persona",
76
- "objection",
77
- "differentiator",
78
- "competitor",
79
- "geo",
80
- "pricing",
81
- "faq",
82
- "profile",
83
- ],
84
- },
85
- data: {
86
- type: "object",
87
- description: "The item data as a JSON object",
88
- additionalProperties: true,
89
- },
90
- },
91
- required: ["category", "data"],
92
- },
93
- },
94
- {
95
- name: "root_update_item",
96
- description: "Update an existing knowledge item by ID.",
97
- inputSchema: {
98
- type: "object",
99
- properties: {
100
- id: { type: "string", description: "The item ID to update" },
101
- data: {
102
- type: "object",
103
- description: "Fields to update (merged with existing data)",
104
- additionalProperties: true,
105
- },
106
- },
107
- required: ["id", "data"],
108
- },
109
- },
110
- {
111
- name: "root_delete_item",
112
- description: "Delete a knowledge item by ID.",
113
- inputSchema: {
114
- type: "object",
115
- properties: {
116
- id: { type: "string", description: "The item ID to delete" },
117
- },
118
- required: ["id"],
119
- },
120
- },
121
- ];
122
- server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
123
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
124
- const { name, arguments: args } = request.params;
125
- try {
126
- switch (name) {
127
- case "root_get_context": {
128
- const context = await getContext(ACCOUNT_ID);
129
- return { content: [{ type: "text", text: JSON.stringify(context) }] };
130
- }
131
- case "root_get_category": {
132
- const { category } = args;
133
- const items = await getCategory(ACCOUNT_ID, category);
134
- return {
135
- content: [
136
- { type: "text", text: JSON.stringify({ category, count: items.length, items }) },
137
- ],
138
- };
139
- }
140
- case "root_search": {
141
- const { query } = args;
142
- const results = await searchKnowledge(ACCOUNT_ID, query);
143
- return {
144
- content: [
145
- { type: "text", text: JSON.stringify({ query, count: results.length, results }) },
146
- ],
147
- };
148
- }
149
- case "root_onboard_from_url": {
150
- const { url } = args;
151
- const result = await onboardFromUrl(ACCOUNT_ID, url);
152
- return { content: [{ type: "text", text: JSON.stringify(result) }] };
153
- }
154
- case "root_create_item": {
155
- const { category, data } = args;
156
- const item = await createItem(ACCOUNT_ID, category, data);
157
- return { content: [{ type: "text", text: JSON.stringify({ success: true, item }) }] };
158
- }
159
- case "root_update_item": {
160
- const { id, data } = args;
161
- const item = await updateItem(ACCOUNT_ID, id, data);
162
- return { content: [{ type: "text", text: JSON.stringify({ success: true, item }) }] };
163
- }
164
- case "root_delete_item": {
165
- const { id } = args;
166
- const result = await deleteItem(ACCOUNT_ID, id);
167
- return { content: [{ type: "text", text: JSON.stringify(result) }] };
168
- }
169
- default:
170
- throw new Error(`Unknown tool: ${name}`);
171
- }
172
- }
173
- catch (err) {
174
- return {
175
- content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }],
176
- isError: true,
177
- };
178
- }
179
- });
180
- async function main() {
181
- const transport = new StdioServerTransport();
182
- await server.connect(transport);
183
- }
184
- main().catch(console.error);
3
+ import { buildServer } from "../mcp.js";
4
+ const server = buildServer();
5
+ const transport = new StdioServerTransport();
6
+ await server.connect(transport);
185
7
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
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,EAAE,CAAC;AAC7B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Context } from "hono";
3
+ export declare function buildServer(): McpServer;
4
+ export declare function createMcpHandler(): (c: Context) => Promise<Response>;
5
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +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;AAapC,wBAAgB,WAAW,IAAI,SAAS,CA0EvC;AAED,wBAAgB,gBAAgB,KAChB,GAAG,OAAO,uBAMzB"}
package/dist/mcp.js ADDED
@@ -0,0 +1,88 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
3
+ import { z } from "zod";
4
+ import { getContext, getCategory, createItem, updateItem, deleteItem, searchKnowledge } from "./core/knowledge.js";
5
+ import { onboardFromUrl } from "./core/onboard.js";
6
+ const CATEGORY_ENUM = z.enum([
7
+ "offer", "persona", "objection", "differentiator",
8
+ "competitor", "geo", "pricing", "faq", "profile",
9
+ ]);
10
+ function accountId() {
11
+ return process.env.ROOT_ACCOUNT_ID ?? "default";
12
+ }
13
+ export function buildServer() {
14
+ const server = new McpServer({ name: "root", version: "0.2.0" });
15
+ server.registerTool("root_get_context", {
16
+ description: "Returns complete business knowledge for this account — offers, personas, objections, differentiators, competitors, geo zones, pricing, and FAQs. ALWAYS call this tool before generating any content, SEO article, email, or prospection material.",
17
+ inputSchema: {},
18
+ }, async () => {
19
+ const context = await getContext(accountId());
20
+ return { content: [{ type: "text", text: JSON.stringify(context) }] };
21
+ });
22
+ server.registerTool("root_get_category", {
23
+ 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).",
24
+ inputSchema: {
25
+ category: CATEGORY_ENUM.describe("The knowledge category to retrieve"),
26
+ },
27
+ }, async ({ category }) => {
28
+ const items = await getCategory(accountId(), category);
29
+ return { content: [{ type: "text", text: JSON.stringify({ category, count: items.length, items }) }] };
30
+ });
31
+ server.registerTool("root_search", {
32
+ description: "Search across all business knowledge with a text query. Use to find a specific objection, competitor detail, or FAQ answer.",
33
+ inputSchema: {
34
+ query: z.string().describe("Search query"),
35
+ },
36
+ }, async ({ query }) => {
37
+ const results = await searchKnowledge(accountId(), query);
38
+ return { content: [{ type: "text", text: JSON.stringify({ query, count: results.length, results }) }] };
39
+ });
40
+ server.registerTool("root_onboard_from_url", {
41
+ description: "Onboard a client by scraping their website URL. Automatically extracts offers, personas, differentiators, geo zones, pricing, FAQs, and analyzes local competitors. Returns full context + gaps + followup questions for missing data.",
42
+ inputSchema: {
43
+ url: z.string().describe("The client website URL (e.g. https://client.fr)"),
44
+ },
45
+ }, async ({ url }) => {
46
+ const result = await onboardFromUrl(accountId(), url);
47
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
48
+ });
49
+ server.registerTool("root_create_item", {
50
+ description: "Add a new knowledge item to a category. Use to add an offer, persona, competitor, or any data not extracted automatically.",
51
+ inputSchema: {
52
+ category: CATEGORY_ENUM.describe("Knowledge category"),
53
+ data: z.record(z.unknown()).describe("The item data as a JSON object"),
54
+ },
55
+ }, async ({ category, data }) => {
56
+ const item = await createItem(accountId(), category, data);
57
+ return { content: [{ type: "text", text: JSON.stringify({ success: true, item }) }] };
58
+ });
59
+ server.registerTool("root_update_item", {
60
+ description: "Update an existing knowledge item by ID.",
61
+ inputSchema: {
62
+ id: z.string().describe("The item ID to update"),
63
+ data: z.record(z.unknown()).describe("Fields to update (merged with existing data)"),
64
+ },
65
+ }, async ({ id, data }) => {
66
+ const item = await updateItem(accountId(), id, data);
67
+ return { content: [{ type: "text", text: JSON.stringify({ success: true, item }) }] };
68
+ });
69
+ server.registerTool("root_delete_item", {
70
+ description: "Delete a knowledge item by ID.",
71
+ inputSchema: {
72
+ id: z.string().describe("The item ID to delete"),
73
+ },
74
+ }, async ({ id }) => {
75
+ const result = await deleteItem(accountId(), id);
76
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
77
+ });
78
+ return server;
79
+ }
80
+ export function createMcpHandler() {
81
+ return async (c) => {
82
+ const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: undefined });
83
+ const server = buildServer();
84
+ await server.connect(transport);
85
+ return transport.handleRequest(c.req.raw);
86
+ };
87
+ }
88
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
package/dist/server.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { serve } from "@hono/node-server";
3
+ import { Hono } from "hono";
4
+ import { cors } from "hono/cors";
5
+ import { requireAuth } from "./auth.js";
6
+ import { createMcpHandler } from "./mcp.js";
7
+ const port = parseInt(process.env.PORT ?? "3000");
8
+ const app = new Hono();
9
+ app.use("*", cors({ origin: "*", allowMethods: ["GET", "POST", "OPTIONS"] }));
10
+ app.get("/health", (c) => c.json({ status: "ok", service: "root", version: "0.2.0" }));
11
+ app.all("/mcp", requireAuth, createMcpHandler());
12
+ serve({ fetch: app.fetch, port }, () => {
13
+ const base = process.env.ROOT_URL ?? `http://localhost:${port}`;
14
+ console.log(`Root server running on port ${port}`);
15
+ console.log(` MCP → ${base}/mcp`);
16
+ });
17
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AAElD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AAEvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9E,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACvF,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEjD,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,oBAAoB,IAAI,EAAE,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "@silverbackbase/root",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Business knowledge primitive for AI agents",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
8
- "root-mcp": "./dist/mcp/server.js"
8
+ "root": "./dist/server.js",
9
+ "root-mcp": "./dist/mcp/server.js",
10
+ "root-init": "./dist/init.js"
9
11
  },
10
12
  "main": "./dist/core/index.js",
11
13
  "types": "./dist/core/index.d.ts",
@@ -22,8 +24,10 @@
22
24
  },
23
25
  "dependencies": {
24
26
  "@anthropic-ai/sdk": "^0.40.0",
27
+ "@hono/node-server": "^1.12.0",
25
28
  "@mendable/firecrawl-js": "^1.0.0",
26
29
  "@modelcontextprotocol/sdk": "^1.29.0",
30
+ "hono": "^4.3.0",
27
31
  "nanoid": "^5.0.0",
28
32
  "postgres": "^3.4.0",
29
33
  "zod": "^3.23.0"