@synthaer/resonance 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 +19 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +40 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +44 -0
- package/dist/config.js.map +1 -0
- package/dist/contracts.d.ts +4 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -0
- package/dist/db/local.d.ts +21 -0
- package/dist/db/local.d.ts.map +1 -0
- package/dist/db/local.js +158 -0
- package/dist/db/local.js.map +1 -0
- package/dist/db-types.d.ts +14 -0
- package/dist/db-types.d.ts.map +1 -0
- package/dist/db-types.js +2 -0
- package/dist/db-types.js.map +1 -0
- package/dist/dikw-pipeline.d.ts +31 -0
- package/dist/dikw-pipeline.d.ts.map +1 -0
- package/dist/dikw-pipeline.js +130 -0
- package/dist/dikw-pipeline.js.map +1 -0
- package/dist/embedding-provider.d.ts +25 -0
- package/dist/embedding-provider.d.ts.map +1 -0
- package/dist/embedding-provider.js +62 -0
- package/dist/embedding-provider.js.map +1 -0
- package/dist/embeddings/local.d.ts +31 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +72 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/encryption.d.ts +22 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +39 -0
- package/dist/encryption.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +362 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +722 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/pki.d.ts +160 -0
- package/dist/pki.d.ts.map +1 -0
- package/dist/pki.js +502 -0
- package/dist/pki.js.map +1 -0
- package/dist/ratification.d.ts +125 -0
- package/dist/ratification.d.ts.map +1 -0
- package/dist/ratification.js +315 -0
- package/dist/ratification.js.map +1 -0
- package/dist/schema.d.ts +4 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +119 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +33 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +132 -0
- package/dist/search.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +297 -0
- package/dist/server.js.map +1 -0
- package/dist/store.d.ts +77 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +572 -0
- package/dist/store.js.map +1 -0
- package/dist/tools/cloud-gate.d.ts +72 -0
- package/dist/tools/cloud-gate.d.ts.map +1 -0
- package/dist/tools/cloud-gate.js +79 -0
- package/dist/tools/cloud-gate.js.map +1 -0
- package/dist/tools/experiences.d.ts +20 -0
- package/dist/tools/experiences.d.ts.map +1 -0
- package/dist/tools/experiences.js +135 -0
- package/dist/tools/experiences.js.map +1 -0
- package/dist/tools/knowledge.d.ts +37 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +213 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/sessions.d.ts +11 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +66 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/trust.d.ts +18 -0
- package/dist/tools/trust.d.ts.map +1 -0
- package/dist/tools/trust.js +42 -0
- package/dist/tools/trust.js.map +1 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-gate.d.ts","sourceRoot":"","sources":["../../src/tools/cloud-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,QAAA,MAAM,gBAAgB,wQAWZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACpD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAiBA;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqC9B,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud-gated tools return a structured error when called in local mode.
|
|
3
|
+
* These tools require a Synthaer cloud account.
|
|
4
|
+
*/
|
|
5
|
+
const CLOUD_ONLY_TOOLS = [
|
|
6
|
+
'ratify_knowledge',
|
|
7
|
+
'verify_ratification',
|
|
8
|
+
'get_ratification_stats',
|
|
9
|
+
'publish_cross_project_event',
|
|
10
|
+
'subscribe_cross_project_events',
|
|
11
|
+
'get_cross_project_impact',
|
|
12
|
+
'publish_topology',
|
|
13
|
+
'get_topology',
|
|
14
|
+
'process_unembedded_knowledge',
|
|
15
|
+
'get_embedding_stats',
|
|
16
|
+
];
|
|
17
|
+
export function isCloudOnlyTool(name) {
|
|
18
|
+
return CLOUD_ONLY_TOOLS.includes(name);
|
|
19
|
+
}
|
|
20
|
+
export function cloudRequiredError(toolName) {
|
|
21
|
+
return {
|
|
22
|
+
content: [
|
|
23
|
+
{
|
|
24
|
+
type: 'text',
|
|
25
|
+
text: JSON.stringify({
|
|
26
|
+
error: 'requires_cloud',
|
|
27
|
+
tool: toolName,
|
|
28
|
+
message: `This tool requires a Synthaer cloud account. ` +
|
|
29
|
+
`Set SYNTHAER_API_KEY or visit synthaer.ai/pricing.`,
|
|
30
|
+
upgrade_url: 'https://synthaer.ai/pricing',
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
isError: true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Tool definitions for cloud-only tools.
|
|
39
|
+
* These are registered so agents can discover them and get guidance on upgrade.
|
|
40
|
+
*/
|
|
41
|
+
export const CLOUD_ONLY_TOOL_DEFINITIONS = [
|
|
42
|
+
{
|
|
43
|
+
name: 'ratify_knowledge',
|
|
44
|
+
description: 'Ratify local knowledge items to the Synthaer cloud. Requires cloud account.',
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
ids: { type: 'array', items: { type: 'string' } },
|
|
49
|
+
project: { type: 'string' },
|
|
50
|
+
},
|
|
51
|
+
required: ['ids'],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'verify_ratification',
|
|
56
|
+
description: 'Verify the ratification status of knowledge items. Requires cloud account.',
|
|
57
|
+
inputSchema: {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
ids: { type: 'array', items: { type: 'string' } },
|
|
61
|
+
},
|
|
62
|
+
required: ['ids'],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'publish_cross_project_event',
|
|
67
|
+
description: 'Publish a cross-project event. Requires cloud account.',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
event: { type: 'string' },
|
|
72
|
+
project: { type: 'string' },
|
|
73
|
+
data: { type: 'object' },
|
|
74
|
+
},
|
|
75
|
+
required: ['event', 'project'],
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
//# sourceMappingURL=cloud-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-gate.js","sourceRoot":"","sources":["../../src/tools/cloud-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,gBAAgB,GAAG;IACvB,kBAAkB;IAClB,qBAAqB;IACrB,wBAAwB;IACxB,6BAA6B;IAC7B,gCAAgC;IAChC,0BAA0B;IAC1B,kBAAkB;IAClB,cAAc;IACd,8BAA8B;IAC9B,qBAAqB;CACb,CAAC;AAIX,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAIjD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,gBAAgB;oBACvB,IAAI,EAAE,QAAQ;oBACd,OAAO,EACL,+CAA+C;wBAC/C,oDAAoD;oBACtD,WAAW,EAAE,6BAA6B;iBAC3C,CAAC;aACH;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE;gBACnE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;aACrC;YACD,QAAQ,EAAE,CAAC,KAAK,CAAU;SAC3B;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,4EAA4E;QACzF,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE;aACpE;YACD,QAAQ,EAAE,CAAC,KAAK,CAAU;SAC3B;KACF;IACD;QACE,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;gBAClC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;gBACpC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;aAClC;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAU;SACxC;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PGlite } from '@electric-sql/pglite';
|
|
2
|
+
import type { EmbeddingProvider } from '../embeddings/local.js';
|
|
3
|
+
export interface StoreExperienceInput {
|
|
4
|
+
content: string;
|
|
5
|
+
kind?: number | string;
|
|
6
|
+
agentId?: string;
|
|
7
|
+
sessionId?: string;
|
|
8
|
+
project?: string;
|
|
9
|
+
tags?: string[];
|
|
10
|
+
relatedKnowledgeIds?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface RecallExperiencesInput {
|
|
13
|
+
query: string;
|
|
14
|
+
limit?: number;
|
|
15
|
+
project?: string;
|
|
16
|
+
agentId?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function handleStoreExperience(db: PGlite, embedder: EmbeddingProvider | null, input: StoreExperienceInput): Promise<Record<string, unknown>>;
|
|
19
|
+
export declare function handleRecallExperiences(db: PGlite, embedder: EmbeddingProvider | null, input: RecallExperiencesInput): Promise<Record<string, unknown>>;
|
|
20
|
+
//# sourceMappingURL=experiences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experiences.d.ts","sourceRoot":"","sources":["../../src/tools/experiences.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA4BhE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwClC;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4FlC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
function parseJsonb(value) {
|
|
3
|
+
if (typeof value === 'string')
|
|
4
|
+
return JSON.parse(value);
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
function resolveExperienceKind(value) {
|
|
8
|
+
if (typeof value === 'number' && value >= 1 && value <= 4)
|
|
9
|
+
return value;
|
|
10
|
+
if (typeof value === 'string') {
|
|
11
|
+
const map = { success: 1, failure: 2, discovery: 3, blocker: 4 };
|
|
12
|
+
return map[value.toLowerCase()] ?? 3;
|
|
13
|
+
}
|
|
14
|
+
return 3; // default: discovery
|
|
15
|
+
}
|
|
16
|
+
export async function handleStoreExperience(db, embedder, input) {
|
|
17
|
+
const id = crypto.randomUUID();
|
|
18
|
+
const now = new Date().toISOString();
|
|
19
|
+
const kind = resolveExperienceKind(input.kind);
|
|
20
|
+
let embeddingStr = null;
|
|
21
|
+
if (embedder) {
|
|
22
|
+
try {
|
|
23
|
+
const vector = await embedder.embed(input.content);
|
|
24
|
+
embeddingStr = `[${vector.join(',')}]`;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Non-fatal
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
await db.query(`INSERT INTO experiences
|
|
31
|
+
(id, agent_id, session_id, content, kind, project_id, related_knowledge_ids, tags, local_embedding, created_at)
|
|
32
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb, $8::jsonb, $9::vector, $10)`, [
|
|
33
|
+
id,
|
|
34
|
+
input.agentId ?? null,
|
|
35
|
+
input.sessionId ?? null,
|
|
36
|
+
input.content,
|
|
37
|
+
kind,
|
|
38
|
+
input.project ?? null,
|
|
39
|
+
JSON.stringify(input.relatedKnowledgeIds ?? []),
|
|
40
|
+
JSON.stringify(input.tags ?? []),
|
|
41
|
+
embeddingStr,
|
|
42
|
+
now,
|
|
43
|
+
]);
|
|
44
|
+
return {
|
|
45
|
+
id,
|
|
46
|
+
kind,
|
|
47
|
+
project: input.project ?? null,
|
|
48
|
+
agentId: input.agentId ?? null,
|
|
49
|
+
createdAt: now,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export async function handleRecallExperiences(db, embedder, input) {
|
|
53
|
+
const limit = input.limit ?? 20;
|
|
54
|
+
// Try vector search first
|
|
55
|
+
if (embedder?.ready) {
|
|
56
|
+
try {
|
|
57
|
+
const queryVector = await embedder.embed(input.query);
|
|
58
|
+
const vectorStr = `[${queryVector.join(',')}]`;
|
|
59
|
+
let sql = `
|
|
60
|
+
SELECT *, 1 - (local_embedding <=> $1::vector) as similarity
|
|
61
|
+
FROM experiences
|
|
62
|
+
WHERE local_embedding IS NOT NULL
|
|
63
|
+
`;
|
|
64
|
+
const params = [vectorStr];
|
|
65
|
+
let paramIndex = 1;
|
|
66
|
+
if (input.project) {
|
|
67
|
+
paramIndex++;
|
|
68
|
+
sql += ` AND project_id = $${paramIndex}`;
|
|
69
|
+
params.push(input.project);
|
|
70
|
+
}
|
|
71
|
+
if (input.agentId) {
|
|
72
|
+
paramIndex++;
|
|
73
|
+
sql += ` AND agent_id = $${paramIndex}`;
|
|
74
|
+
params.push(input.agentId);
|
|
75
|
+
}
|
|
76
|
+
paramIndex++;
|
|
77
|
+
sql += ` ORDER BY local_embedding <=> $1::vector LIMIT $${paramIndex}`;
|
|
78
|
+
params.push(limit);
|
|
79
|
+
const result = await db.query(sql, params);
|
|
80
|
+
return {
|
|
81
|
+
experiences: result.rows.map((row) => ({
|
|
82
|
+
id: row.id,
|
|
83
|
+
content: row.content,
|
|
84
|
+
kind: row.kind,
|
|
85
|
+
agentId: row.agent_id,
|
|
86
|
+
sessionId: row.session_id,
|
|
87
|
+
project: row.project_id,
|
|
88
|
+
tags: parseJsonb(row.tags),
|
|
89
|
+
relatedKnowledgeIds: parseJsonb(row.related_knowledge_ids),
|
|
90
|
+
similarity: row.similarity,
|
|
91
|
+
createdAt: row.created_at,
|
|
92
|
+
})),
|
|
93
|
+
total: result.rows.length,
|
|
94
|
+
method: 'vector',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Fall through to keyword search
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Fallback: ILIKE keyword search
|
|
102
|
+
let sql = `SELECT * FROM experiences WHERE content ILIKE $1`;
|
|
103
|
+
const params = [`%${input.query}%`];
|
|
104
|
+
let paramIndex = 1;
|
|
105
|
+
if (input.project) {
|
|
106
|
+
paramIndex++;
|
|
107
|
+
sql += ` AND project_id = $${paramIndex}`;
|
|
108
|
+
params.push(input.project);
|
|
109
|
+
}
|
|
110
|
+
if (input.agentId) {
|
|
111
|
+
paramIndex++;
|
|
112
|
+
sql += ` AND agent_id = $${paramIndex}`;
|
|
113
|
+
params.push(input.agentId);
|
|
114
|
+
}
|
|
115
|
+
paramIndex++;
|
|
116
|
+
sql += ` ORDER BY created_at DESC LIMIT $${paramIndex}`;
|
|
117
|
+
params.push(limit);
|
|
118
|
+
const result = await db.query(sql, params);
|
|
119
|
+
return {
|
|
120
|
+
experiences: result.rows.map((row) => ({
|
|
121
|
+
id: row.id,
|
|
122
|
+
content: row.content,
|
|
123
|
+
kind: row.kind,
|
|
124
|
+
agentId: row.agent_id,
|
|
125
|
+
sessionId: row.session_id,
|
|
126
|
+
project: row.project_id,
|
|
127
|
+
tags: parseJsonb(row.tags),
|
|
128
|
+
relatedKnowledgeIds: parseJsonb(row.related_knowledge_ids),
|
|
129
|
+
createdAt: row.created_at,
|
|
130
|
+
})),
|
|
131
|
+
total: result.rows.length,
|
|
132
|
+
method: 'keyword',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=experiences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experiences.js","sourceRoot":"","sources":["../../src/tools/experiences.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { PGlite } from '@electric-sql/pglite';
|
|
2
|
+
import type { EmbeddingProvider } from '../embeddings/local.js';
|
|
3
|
+
export interface StoreKnowledgeInput {
|
|
4
|
+
content: string;
|
|
5
|
+
kind?: number | string;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
context?: Record<string, unknown>;
|
|
8
|
+
project?: string;
|
|
9
|
+
sourceAgent?: string;
|
|
10
|
+
dikwStage?: string;
|
|
11
|
+
importance?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface RecallKnowledgeInput {
|
|
14
|
+
id: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SearchKnowledgeInput {
|
|
17
|
+
query: string;
|
|
18
|
+
limit?: number;
|
|
19
|
+
project?: string;
|
|
20
|
+
tags?: string[];
|
|
21
|
+
minStrength?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface EndorseInput {
|
|
24
|
+
id: string;
|
|
25
|
+
agent?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ChallengeInput {
|
|
28
|
+
id: string;
|
|
29
|
+
reason?: string;
|
|
30
|
+
agent?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function handleStoreKnowledge(db: PGlite, embedder: EmbeddingProvider | null, input: StoreKnowledgeInput): Promise<Record<string, unknown>>;
|
|
33
|
+
export declare function handleRecallKnowledge(db: PGlite, input: RecallKnowledgeInput): Promise<Record<string, unknown>>;
|
|
34
|
+
export declare function handleSemanticSearch(db: PGlite, embedder: EmbeddingProvider | null, input: SearchKnowledgeInput): Promise<Record<string, unknown>>;
|
|
35
|
+
export declare function handleEndorseKnowledge(db: PGlite, input: EndorseInput): Promise<Record<string, unknown>>;
|
|
36
|
+
export declare function handleChallengeKnowledge(db: PGlite, input: ChallengeInput): Promise<Record<string, unknown>>;
|
|
37
|
+
//# sourceMappingURL=knowledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA4BhE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmBD,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqClC;AAED,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkClC;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoGlC;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAuBlC;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyBlC"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
function parseJsonb(value) {
|
|
3
|
+
if (typeof value === 'string')
|
|
4
|
+
return JSON.parse(value);
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
function resolveKind(value) {
|
|
8
|
+
if (typeof value === 'number' && value >= 1 && value <= 5)
|
|
9
|
+
return value;
|
|
10
|
+
if (typeof value === 'string') {
|
|
11
|
+
const map = { fact: 1, pattern: 2, error: 3, decision: 4, principle: 5 };
|
|
12
|
+
return map[value.toLowerCase()] ?? 1;
|
|
13
|
+
}
|
|
14
|
+
return 1;
|
|
15
|
+
}
|
|
16
|
+
function resolveDikwStage(value) {
|
|
17
|
+
const valid = ['nascent', 'emerging', 'established', 'canonical'];
|
|
18
|
+
if (typeof value === 'string' && valid.includes(value.toLowerCase())) {
|
|
19
|
+
return value.toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
return 'nascent';
|
|
22
|
+
}
|
|
23
|
+
export async function handleStoreKnowledge(db, embedder, input) {
|
|
24
|
+
const id = crypto.randomUUID();
|
|
25
|
+
const now = new Date().toISOString();
|
|
26
|
+
const kind = resolveKind(input.kind);
|
|
27
|
+
const dikwStage = resolveDikwStage(input.dikwStage);
|
|
28
|
+
const tags = JSON.stringify(input.tags ?? []);
|
|
29
|
+
const context = input.context ? JSON.stringify(input.context) : null;
|
|
30
|
+
const strength = input.importance ?? 0.5;
|
|
31
|
+
// Generate embedding asynchronously — do not block the store
|
|
32
|
+
let embeddingStr = null;
|
|
33
|
+
if (embedder) {
|
|
34
|
+
try {
|
|
35
|
+
const vector = await embedder.embed(input.content);
|
|
36
|
+
embeddingStr = `[${vector.join(',')}]`;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Non-fatal: store without embedding, search falls back to ILIKE
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
await db.query(`INSERT INTO knowledge
|
|
43
|
+
(id, content, kind, dikw_stage, strength, tags, context, project_id, source_agent, local_embedding, created_at, updated_at)
|
|
44
|
+
VALUES ($1, $2, $3, $4, $5, $6::jsonb, $7::jsonb, $8, $9, $10::vector, $11, $12)`, [id, input.content, kind, dikwStage, strength, tags, context,
|
|
45
|
+
input.project ?? null, input.sourceAgent ?? null, embeddingStr, now, now]);
|
|
46
|
+
return {
|
|
47
|
+
id,
|
|
48
|
+
kind,
|
|
49
|
+
dikwStage,
|
|
50
|
+
strength,
|
|
51
|
+
tags: input.tags ?? [],
|
|
52
|
+
project: input.project ?? null,
|
|
53
|
+
createdAt: now,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export async function handleRecallKnowledge(db, input) {
|
|
57
|
+
const result = await db.query(`SELECT * FROM knowledge WHERE id = $1`, [input.id]);
|
|
58
|
+
const row = result.rows[0];
|
|
59
|
+
if (!row) {
|
|
60
|
+
return { error: 'not_found', id: input.id };
|
|
61
|
+
}
|
|
62
|
+
// Update last_accessed_at
|
|
63
|
+
await db.query(`UPDATE knowledge SET last_accessed_at = $1 WHERE id = $2`, [new Date().toISOString(), input.id]);
|
|
64
|
+
return {
|
|
65
|
+
id: row.id,
|
|
66
|
+
content: row.content,
|
|
67
|
+
kind: row.kind,
|
|
68
|
+
dikwStage: row.dikw_stage,
|
|
69
|
+
strength: row.strength,
|
|
70
|
+
tags: parseJsonb(row.tags),
|
|
71
|
+
context: row.context ? parseJsonb(row.context) : null,
|
|
72
|
+
project: row.project_id,
|
|
73
|
+
sourceAgent: row.source_agent,
|
|
74
|
+
endorsements: row.endorsements,
|
|
75
|
+
challenges: row.challenges,
|
|
76
|
+
trustScore: row.trust_score,
|
|
77
|
+
createdAt: row.created_at,
|
|
78
|
+
updatedAt: row.updated_at,
|
|
79
|
+
lastAccessedAt: row.last_accessed_at,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export async function handleSemanticSearch(db, embedder, input) {
|
|
83
|
+
const limit = input.limit ?? 20;
|
|
84
|
+
// Try vector search first if embedder is available
|
|
85
|
+
if (embedder?.ready) {
|
|
86
|
+
try {
|
|
87
|
+
const queryVector = await embedder.embed(input.query);
|
|
88
|
+
const vectorStr = `[${queryVector.join(',')}]`;
|
|
89
|
+
let sql = `
|
|
90
|
+
SELECT *, 1 - (local_embedding <=> $1::vector) as similarity
|
|
91
|
+
FROM knowledge
|
|
92
|
+
WHERE local_embedding IS NOT NULL
|
|
93
|
+
`;
|
|
94
|
+
const params = [vectorStr];
|
|
95
|
+
let paramIndex = 1;
|
|
96
|
+
if (input.project) {
|
|
97
|
+
paramIndex++;
|
|
98
|
+
sql += ` AND project_id = $${paramIndex}`;
|
|
99
|
+
params.push(input.project);
|
|
100
|
+
}
|
|
101
|
+
if (input.minStrength !== undefined) {
|
|
102
|
+
paramIndex++;
|
|
103
|
+
sql += ` AND strength >= $${paramIndex}`;
|
|
104
|
+
params.push(input.minStrength);
|
|
105
|
+
}
|
|
106
|
+
if (input.tags && input.tags.length > 0) {
|
|
107
|
+
paramIndex++;
|
|
108
|
+
sql += ` AND tags @> $${paramIndex}::jsonb`;
|
|
109
|
+
params.push(JSON.stringify(input.tags));
|
|
110
|
+
}
|
|
111
|
+
paramIndex++;
|
|
112
|
+
sql += ` ORDER BY local_embedding <=> $1::vector LIMIT $${paramIndex}`;
|
|
113
|
+
params.push(limit);
|
|
114
|
+
const result = await db.query(sql, params);
|
|
115
|
+
return {
|
|
116
|
+
results: result.rows.map((row) => ({
|
|
117
|
+
id: row.id,
|
|
118
|
+
content: row.content,
|
|
119
|
+
kind: row.kind,
|
|
120
|
+
dikwStage: row.dikw_stage,
|
|
121
|
+
strength: row.strength,
|
|
122
|
+
tags: parseJsonb(row.tags),
|
|
123
|
+
project: row.project_id,
|
|
124
|
+
similarity: row.similarity,
|
|
125
|
+
createdAt: row.created_at,
|
|
126
|
+
})),
|
|
127
|
+
total: result.rows.length,
|
|
128
|
+
method: 'vector',
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Fall through to ILIKE search
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Fallback: ILIKE keyword search
|
|
136
|
+
let sql = `SELECT * FROM knowledge WHERE content ILIKE $1`;
|
|
137
|
+
const params = [`%${input.query}%`];
|
|
138
|
+
let paramIndex = 1;
|
|
139
|
+
if (input.project) {
|
|
140
|
+
paramIndex++;
|
|
141
|
+
sql += ` AND project_id = $${paramIndex}`;
|
|
142
|
+
params.push(input.project);
|
|
143
|
+
}
|
|
144
|
+
if (input.minStrength !== undefined) {
|
|
145
|
+
paramIndex++;
|
|
146
|
+
sql += ` AND strength >= $${paramIndex}`;
|
|
147
|
+
params.push(input.minStrength);
|
|
148
|
+
}
|
|
149
|
+
if (input.tags && input.tags.length > 0) {
|
|
150
|
+
paramIndex++;
|
|
151
|
+
sql += ` AND tags @> $${paramIndex}::jsonb`;
|
|
152
|
+
params.push(JSON.stringify(input.tags));
|
|
153
|
+
}
|
|
154
|
+
paramIndex++;
|
|
155
|
+
sql += ` ORDER BY updated_at DESC LIMIT $${paramIndex}`;
|
|
156
|
+
params.push(limit);
|
|
157
|
+
const result = await db.query(sql, params);
|
|
158
|
+
return {
|
|
159
|
+
results: result.rows.map((row) => ({
|
|
160
|
+
id: row.id,
|
|
161
|
+
content: row.content,
|
|
162
|
+
kind: row.kind,
|
|
163
|
+
dikwStage: row.dikw_stage,
|
|
164
|
+
strength: row.strength,
|
|
165
|
+
tags: parseJsonb(row.tags),
|
|
166
|
+
project: row.project_id,
|
|
167
|
+
createdAt: row.created_at,
|
|
168
|
+
})),
|
|
169
|
+
total: result.rows.length,
|
|
170
|
+
method: 'keyword',
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export async function handleEndorseKnowledge(db, input) {
|
|
174
|
+
const result = await db.query(`UPDATE knowledge
|
|
175
|
+
SET endorsements = endorsements + 1,
|
|
176
|
+
trust_score = LEAST(1.0, trust_score + 0.05),
|
|
177
|
+
strength = LEAST(1.0, strength + 0.02),
|
|
178
|
+
updated_at = $2
|
|
179
|
+
WHERE id = $1
|
|
180
|
+
RETURNING endorsements, challenges`, [input.id, new Date().toISOString()]);
|
|
181
|
+
if (result.rows.length === 0) {
|
|
182
|
+
return { error: 'not_found', id: input.id };
|
|
183
|
+
}
|
|
184
|
+
const row = result.rows[0];
|
|
185
|
+
return {
|
|
186
|
+
id: input.id,
|
|
187
|
+
endorsements: row.endorsements,
|
|
188
|
+
challenges: row.challenges,
|
|
189
|
+
action: 'endorsed',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
export async function handleChallengeKnowledge(db, input) {
|
|
193
|
+
const result = await db.query(`UPDATE knowledge
|
|
194
|
+
SET challenges = challenges + 1,
|
|
195
|
+
trust_score = GREATEST(0.0, trust_score - 0.1),
|
|
196
|
+
strength = GREATEST(0.0, strength - 0.05),
|
|
197
|
+
updated_at = $2
|
|
198
|
+
WHERE id = $1
|
|
199
|
+
RETURNING endorsements, challenges, trust_score`, [input.id, new Date().toISOString()]);
|
|
200
|
+
if (result.rows.length === 0) {
|
|
201
|
+
return { error: 'not_found', id: input.id };
|
|
202
|
+
}
|
|
203
|
+
const row = result.rows[0];
|
|
204
|
+
return {
|
|
205
|
+
id: input.id,
|
|
206
|
+
endorsements: row.endorsements,
|
|
207
|
+
challenges: row.challenges,
|
|
208
|
+
trustScore: row.trust_score,
|
|
209
|
+
reason: input.reason ?? null,
|
|
210
|
+
action: 'challenged',
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PGlite } from '@electric-sql/pglite';
|
|
2
|
+
export interface SessionResumeInput {
|
|
3
|
+
agentId: string;
|
|
4
|
+
projectId: string;
|
|
5
|
+
}
|
|
6
|
+
export interface MemoryCheckpointInput {
|
|
7
|
+
sessionId: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function handleSessionResume(db: PGlite, input: SessionResumeInput): Promise<Record<string, unknown>>;
|
|
10
|
+
export declare function handleMemoryCheckpoint(db: PGlite, input: MemoryCheckpointInput): Promise<Record<string, unknown>>;
|
|
11
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAuBnD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiDlC;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6BlC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
function parseJsonb(value) {
|
|
3
|
+
if (typeof value === 'string')
|
|
4
|
+
return JSON.parse(value);
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
export async function handleSessionResume(db, input) {
|
|
8
|
+
// Look for the most recent session for this agent/project pair
|
|
9
|
+
const result = await db.query(`SELECT * FROM sessions
|
|
10
|
+
WHERE agent_id = $1 AND project_id = $2
|
|
11
|
+
ORDER BY updated_at DESC LIMIT 1`, [input.agentId, input.projectId]);
|
|
12
|
+
const existing = result.rows[0];
|
|
13
|
+
if (existing) {
|
|
14
|
+
return {
|
|
15
|
+
session: {
|
|
16
|
+
id: existing.id,
|
|
17
|
+
agentId: existing.agent_id,
|
|
18
|
+
projectId: existing.project_id,
|
|
19
|
+
checkpoint: existing.checkpoint
|
|
20
|
+
? parseJsonb(existing.checkpoint)
|
|
21
|
+
: null,
|
|
22
|
+
memory: parseJsonb(existing.memory),
|
|
23
|
+
createdAt: existing.created_at,
|
|
24
|
+
updatedAt: existing.updated_at,
|
|
25
|
+
},
|
|
26
|
+
resumed: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Create a new session
|
|
30
|
+
const id = crypto.randomUUID();
|
|
31
|
+
const now = new Date().toISOString();
|
|
32
|
+
await db.query(`INSERT INTO sessions (id, agent_id, project_id, checkpoint, memory, created_at, updated_at)
|
|
33
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7)`, [id, input.agentId, input.projectId, null, '[]', now, now]);
|
|
34
|
+
return {
|
|
35
|
+
session: {
|
|
36
|
+
id,
|
|
37
|
+
agentId: input.agentId,
|
|
38
|
+
projectId: input.projectId,
|
|
39
|
+
checkpoint: null,
|
|
40
|
+
memory: [],
|
|
41
|
+
createdAt: now,
|
|
42
|
+
updatedAt: now,
|
|
43
|
+
},
|
|
44
|
+
resumed: false,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export async function handleMemoryCheckpoint(db, input) {
|
|
48
|
+
const result = await db.query(`SELECT * FROM sessions WHERE id = $1`, [input.sessionId]);
|
|
49
|
+
const session = result.rows[0];
|
|
50
|
+
if (!session) {
|
|
51
|
+
return { error: 'not_found', sessionId: input.sessionId };
|
|
52
|
+
}
|
|
53
|
+
const memory = parseJsonb(session.memory);
|
|
54
|
+
const now = new Date().toISOString();
|
|
55
|
+
const checkpoint = {
|
|
56
|
+
memoryLength: memory.length,
|
|
57
|
+
capturedAt: now,
|
|
58
|
+
};
|
|
59
|
+
await db.query(`UPDATE sessions SET checkpoint = $1::jsonb, updated_at = $2 WHERE id = $3`, [JSON.stringify(checkpoint), now, input.sessionId]);
|
|
60
|
+
return {
|
|
61
|
+
sessionId: input.sessionId,
|
|
62
|
+
checkpoint,
|
|
63
|
+
action: 'checkpointed',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PGlite } from '@electric-sql/pglite';
|
|
2
|
+
export interface GetTrustInput {
|
|
3
|
+
id: string;
|
|
4
|
+
}
|
|
5
|
+
export interface UpdateTrustInput {
|
|
6
|
+
id: string;
|
|
7
|
+
adjustment: number;
|
|
8
|
+
reason?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get the trust score and endorsement/challenge counts for a knowledge item.
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleGetTrust(db: PGlite, input: GetTrustInput): Promise<Record<string, unknown>>;
|
|
14
|
+
/**
|
|
15
|
+
* Manually adjust the trust score for a knowledge item.
|
|
16
|
+
*/
|
|
17
|
+
export declare function handleUpdateTrust(db: PGlite, input: UpdateTrustInput): Promise<Record<string, unknown>>;
|
|
18
|
+
//# sourceMappingURL=trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../src/tools/trust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6BlC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqBlC"}
|