@ansvar/rwandan-law-mcp 1.0.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/LICENSE +110 -0
- package/README.md +83 -0
- package/dist/__tests__/contract/golden.test.d.ts +9 -0
- package/dist/__tests__/contract/golden.test.d.ts.map +1 -0
- package/dist/__tests__/contract/golden.test.js +76 -0
- package/dist/__tests__/contract/golden.test.js.map +1 -0
- package/dist/api/health.d.ts +3 -0
- package/dist/api/health.d.ts.map +1 -0
- package/dist/api/health.js +101 -0
- package/dist/api/health.js.map +1 -0
- package/dist/api/mcp.d.ts +3 -0
- package/dist/api/mcp.d.ts.map +1 -0
- package/dist/api/mcp.js +119 -0
- package/dist/api/mcp.js.map +1 -0
- package/dist/scripts/build-db.d.ts +11 -0
- package/dist/scripts/build-db.d.ts.map +1 -0
- package/dist/scripts/build-db.js +375 -0
- package/dist/scripts/build-db.js.map +1 -0
- package/dist/scripts/drift-detect.d.ts +9 -0
- package/dist/scripts/drift-detect.d.ts.map +1 -0
- package/dist/scripts/drift-detect.js +62 -0
- package/dist/scripts/drift-detect.js.map +1 -0
- package/dist/scripts/ingest.d.ts +10 -0
- package/dist/scripts/ingest.d.ts.map +1 -0
- package/dist/scripts/ingest.js +333 -0
- package/dist/scripts/ingest.js.map +1 -0
- package/dist/scripts/lib/fetcher.d.ts +26 -0
- package/dist/scripts/lib/fetcher.d.ts.map +1 -0
- package/dist/scripts/lib/fetcher.js +102 -0
- package/dist/scripts/lib/fetcher.js.map +1 -0
- package/dist/scripts/lib/parser.d.ts +60 -0
- package/dist/scripts/lib/parser.d.ts.map +1 -0
- package/dist/scripts/lib/parser.js +560 -0
- package/dist/scripts/lib/parser.js.map +1 -0
- package/dist/scripts/lib/pdf.d.ts +7 -0
- package/dist/scripts/lib/pdf.d.ts.map +1 -0
- package/dist/scripts/lib/pdf.js +124 -0
- package/dist/scripts/lib/pdf.js.map +1 -0
- package/dist/src/capabilities.d.ts +16 -0
- package/dist/src/capabilities.d.ts.map +1 -0
- package/dist/src/capabilities.js +43 -0
- package/dist/src/capabilities.js.map +1 -0
- package/dist/src/constants.d.ts +7 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +7 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +80 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/tools/about.d.ts +45 -0
- package/dist/src/tools/about.d.ts.map +1 -0
- package/dist/src/tools/about.js +54 -0
- package/dist/src/tools/about.js.map +1 -0
- package/dist/src/tools/build-legal-stance.d.ts +21 -0
- package/dist/src/tools/build-legal-stance.d.ts.map +1 -0
- package/dist/src/tools/build-legal-stance.js +46 -0
- package/dist/src/tools/build-legal-stance.js.map +1 -0
- package/dist/src/tools/check-currency.d.ts +20 -0
- package/dist/src/tools/check-currency.d.ts.map +1 -0
- package/dist/src/tools/check-currency.js +41 -0
- package/dist/src/tools/check-currency.js.map +1 -0
- package/dist/src/tools/format-citation.d.ts +14 -0
- package/dist/src/tools/format-citation.d.ts.map +1 -0
- package/dist/src/tools/format-citation.js +28 -0
- package/dist/src/tools/format-citation.js.map +1 -0
- package/dist/src/tools/get-eu-basis.d.ts +21 -0
- package/dist/src/tools/get-eu-basis.d.ts.map +1 -0
- package/dist/src/tools/get-eu-basis.js +52 -0
- package/dist/src/tools/get-eu-basis.js.map +1 -0
- package/dist/src/tools/get-provision-eu-basis.d.ts +20 -0
- package/dist/src/tools/get-provision-eu-basis.d.ts.map +1 -0
- package/dist/src/tools/get-provision-eu-basis.js +45 -0
- package/dist/src/tools/get-provision-eu-basis.js.map +1 -0
- package/dist/src/tools/get-provision.d.ts +24 -0
- package/dist/src/tools/get-provision.d.ts.map +1 -0
- package/dist/src/tools/get-provision.js +80 -0
- package/dist/src/tools/get-provision.js.map +1 -0
- package/dist/src/tools/get-rwandan-implementations.d.ts +21 -0
- package/dist/src/tools/get-rwandan-implementations.d.ts.map +1 -0
- package/dist/src/tools/get-rwandan-implementations.js +42 -0
- package/dist/src/tools/get-rwandan-implementations.js.map +1 -0
- package/dist/src/tools/list-sources.d.ts +25 -0
- package/dist/src/tools/list-sources.d.ts.map +1 -0
- package/dist/src/tools/list-sources.js +41 -0
- package/dist/src/tools/list-sources.js.map +1 -0
- package/dist/src/tools/registry.d.ts +13 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +365 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/search-eu-implementations.d.ts +24 -0
- package/dist/src/tools/search-eu-implementations.d.ts.map +1 -0
- package/dist/src/tools/search-eu-implementations.js +58 -0
- package/dist/src/tools/search-eu-implementations.js.map +1 -0
- package/dist/src/tools/search-legislation.d.ts +24 -0
- package/dist/src/tools/search-legislation.d.ts.map +1 -0
- package/dist/src/tools/search-legislation.js +54 -0
- package/dist/src/tools/search-legislation.js.map +1 -0
- package/dist/src/tools/validate-citation.d.ts +20 -0
- package/dist/src/tools/validate-citation.d.ts.map +1 -0
- package/dist/src/tools/validate-citation.js +107 -0
- package/dist/src/tools/validate-citation.js.map +1 -0
- package/dist/src/tools/validate-eu-compliance.d.ts +20 -0
- package/dist/src/tools/validate-eu-compliance.d.ts.map +1 -0
- package/dist/src/tools/validate-eu-compliance.js +98 -0
- package/dist/src/tools/validate-eu-compliance.js.map +1 -0
- package/dist/src/utils/as-of-date.d.ts +9 -0
- package/dist/src/utils/as-of-date.d.ts.map +1 -0
- package/dist/src/utils/as-of-date.js +25 -0
- package/dist/src/utils/as-of-date.js.map +1 -0
- package/dist/src/utils/fts-query.d.ts +19 -0
- package/dist/src/utils/fts-query.d.ts.map +1 -0
- package/dist/src/utils/fts-query.js +47 -0
- package/dist/src/utils/fts-query.js.map +1 -0
- package/dist/src/utils/metadata.d.ts +16 -0
- package/dist/src/utils/metadata.d.ts.map +1 -0
- package/dist/src/utils/metadata.js +22 -0
- package/dist/src/utils/metadata.js.map +1 -0
- package/dist/src/utils/statute-id.d.ts +18 -0
- package/dist/src/utils/statute-id.d.ts.map +1 -0
- package/dist/src/utils/statute-id.js +34 -0
- package/dist/src/utils/statute-id.js.map +1 -0
- package/package.json +74 -0
- package/server.json +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-citation.js","sourceRoot":"","sources":["../../../src/tools/format-citation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA0B;IAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtC,gDAAgD;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC7F,yDAAyD;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAEzG,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAE7D,IAAI,SAAiB,CAAC;IACtB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACvE,MAAM;QACR,KAAK,UAAU;YACb,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,MAAM;QACR,KAAK,MAAM,CAAC;QACZ;YACE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACzD,MAAM;IACV,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_eu_basis — Get EU legal basis for an Rwandan statute.
|
|
3
|
+
*/
|
|
4
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
5
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
6
|
+
export interface GetEUBasisInput {
|
|
7
|
+
document_id: string;
|
|
8
|
+
include_articles?: boolean;
|
|
9
|
+
reference_types?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface EUBasisResult {
|
|
12
|
+
eu_document_id: string;
|
|
13
|
+
eu_document_type: string;
|
|
14
|
+
eu_document_title: string | null;
|
|
15
|
+
reference_type: string;
|
|
16
|
+
reference_count: number;
|
|
17
|
+
implementation_status: string | null;
|
|
18
|
+
articles?: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare function getEUBasis(db: InstanceType<typeof Database>, input: GetEUBasisInput): Promise<ToolResponse<EUBasisResult[]>>;
|
|
21
|
+
//# sourceMappingURL=get-eu-basis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-eu-basis.d.ts","sourceRoot":"","sources":["../../../src/tools/get-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAqDxC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_eu_basis — Get EU legal basis for an Rwandan statute.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveDocumentId } from '../utils/statute-id.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
export async function getEUBasis(db, input) {
|
|
7
|
+
const resolvedId = resolveDocumentId(db, input.document_id);
|
|
8
|
+
if (!resolvedId) {
|
|
9
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
10
|
+
}
|
|
11
|
+
// Check if EU reference tables exist
|
|
12
|
+
try {
|
|
13
|
+
db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return {
|
|
17
|
+
results: [],
|
|
18
|
+
_metadata: {
|
|
19
|
+
...generateResponseMetadata(db),
|
|
20
|
+
...{ note: 'EU references not available in this database tier' },
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
let sql = `
|
|
25
|
+
SELECT
|
|
26
|
+
er.eu_document_id,
|
|
27
|
+
ed.type as eu_document_type,
|
|
28
|
+
COALESCE(ed.title, ed.short_name) as eu_document_title,
|
|
29
|
+
er.reference_type,
|
|
30
|
+
COUNT(*) as reference_count,
|
|
31
|
+
MAX(er.implementation_status) as implementation_status
|
|
32
|
+
FROM eu_references er
|
|
33
|
+
LEFT JOIN eu_documents ed ON ed.id = er.eu_document_id
|
|
34
|
+
WHERE er.document_id = ?
|
|
35
|
+
`;
|
|
36
|
+
const params = [resolvedId];
|
|
37
|
+
if (input.reference_types && input.reference_types.length > 0) {
|
|
38
|
+
const placeholders = input.reference_types.map(() => '?').join(', ');
|
|
39
|
+
sql += ` AND er.reference_type IN (${placeholders})`;
|
|
40
|
+
params.push(...input.reference_types);
|
|
41
|
+
}
|
|
42
|
+
sql += ' GROUP BY er.eu_document_id, er.reference_type ORDER BY reference_count DESC';
|
|
43
|
+
const rows = db.prepare(sql).all(...params);
|
|
44
|
+
if (input.include_articles) {
|
|
45
|
+
for (const row of rows) {
|
|
46
|
+
const articles = db.prepare('SELECT DISTINCT eu_article FROM eu_references WHERE document_id = ? AND eu_document_id = ? AND eu_article IS NOT NULL').all(resolvedId, row.eu_document_id);
|
|
47
|
+
row.articles = articles.map(a => a.eu_article);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return { results: rows, _metadata: generateResponseMetadata(db) };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=get-eu-basis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-eu-basis.js","sourceRoot":"","sources":["../../../src/tools/get-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAkBnF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAiC,EACjC,KAAsB;IAEtB,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAC/B,GAAG,EAAE,IAAI,EAAE,mDAAmD,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,GAAG;;;;;;;;;;;GAWT,CAAC;IACF,MAAM,MAAM,GAAa,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,GAAG,IAAI,8BAA8B,YAAY,GAAG,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,IAAI,8EAA8E,CAAC;IAEtF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAoB,CAAC;IAE/D,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,uHAAuH,CACxH,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,cAAc,CAA6B,CAAC;YAClE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision_eu_basis — Get EU legal basis for a specific provision.
|
|
3
|
+
*/
|
|
4
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
5
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
6
|
+
export interface GetProvisionEUBasisInput {
|
|
7
|
+
document_id: string;
|
|
8
|
+
provision_ref: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ProvisionEUBasisResult {
|
|
11
|
+
eu_document_id: string;
|
|
12
|
+
eu_document_type: string;
|
|
13
|
+
eu_document_title: string | null;
|
|
14
|
+
eu_article: string | null;
|
|
15
|
+
reference_type: string;
|
|
16
|
+
reference_context: string | null;
|
|
17
|
+
full_citation: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare function getProvisionEUBasis(db: InstanceType<typeof Database>, input: GetProvisionEUBasisInput): Promise<ToolResponse<ProvisionEUBasisResult[]>>;
|
|
20
|
+
//# sourceMappingURL=get-provision-eu-basis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision-eu-basis.d.ts","sourceRoot":"","sources":["../../../src/tools/get-provision-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC,CA4CjD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision_eu_basis — Get EU legal basis for a specific provision.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveDocumentId } from '../utils/statute-id.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
export async function getProvisionEUBasis(db, input) {
|
|
7
|
+
const resolvedId = resolveDocumentId(db, input.document_id);
|
|
8
|
+
if (!resolvedId) {
|
|
9
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return {
|
|
16
|
+
results: [],
|
|
17
|
+
_metadata: {
|
|
18
|
+
...generateResponseMetadata(db),
|
|
19
|
+
...{ note: 'EU references not available in this database tier' },
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Find the provision
|
|
24
|
+
const ref = input.provision_ref.trim();
|
|
25
|
+
const provision = db.prepare("SELECT id FROM legal_provisions WHERE document_id = ? AND (provision_ref = ? OR provision_ref = ? OR section = ?)").get(resolvedId, ref, `s${ref}`, ref);
|
|
26
|
+
if (!provision) {
|
|
27
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
28
|
+
}
|
|
29
|
+
const rows = db.prepare(`
|
|
30
|
+
SELECT
|
|
31
|
+
er.eu_document_id,
|
|
32
|
+
ed.type as eu_document_type,
|
|
33
|
+
COALESCE(ed.title, ed.short_name) as eu_document_title,
|
|
34
|
+
er.eu_article,
|
|
35
|
+
er.reference_type,
|
|
36
|
+
er.reference_context,
|
|
37
|
+
er.full_citation
|
|
38
|
+
FROM eu_references er
|
|
39
|
+
LEFT JOIN eu_documents ed ON ed.id = er.eu_document_id
|
|
40
|
+
WHERE er.provision_id = ?
|
|
41
|
+
ORDER BY er.reference_type, er.eu_document_id
|
|
42
|
+
`).all(provision.id);
|
|
43
|
+
return { results: rows, _metadata: generateResponseMetadata(db) };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=get-provision-eu-basis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision-eu-basis.js","sourceRoot":"","sources":["../../../src/tools/get-provision-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAiBnF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAiC,EACjC,KAA+B;IAE/B,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAC/B,GAAG,EAAE,IAAI,EAAE,mDAAmD,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,mHAAmH,CACpH,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,CAA+B,CAAC;IAErE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;GAavB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAA6B,CAAC;IAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision — Retrieve specific provision(s) from an Rwandan statute.
|
|
3
|
+
*/
|
|
4
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
5
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
6
|
+
export interface GetProvisionInput {
|
|
7
|
+
document_id: string;
|
|
8
|
+
section?: string;
|
|
9
|
+
provision_ref?: string;
|
|
10
|
+
as_of_date?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ProvisionResult {
|
|
13
|
+
document_id: string;
|
|
14
|
+
document_title: string;
|
|
15
|
+
provision_ref: string;
|
|
16
|
+
chapter: string | null;
|
|
17
|
+
section: string;
|
|
18
|
+
title: string | null;
|
|
19
|
+
content: string;
|
|
20
|
+
section_number?: string;
|
|
21
|
+
url?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function getProvision(db: InstanceType<typeof Database>, input: GetProvisionInput): Promise<ToolResponse<ProvisionResult[]>>;
|
|
24
|
+
//# sourceMappingURL=get-provision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision.d.ts","sourceRoot":"","sources":["../../../src/tools/get-provision.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CA+F1C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision — Retrieve specific provision(s) from an Rwandan statute.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveDocumentId } from '../utils/statute-id.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
export async function getProvision(db, input) {
|
|
7
|
+
const resolvedId = resolveDocumentId(db, input.document_id);
|
|
8
|
+
if (!resolvedId) {
|
|
9
|
+
return {
|
|
10
|
+
results: [],
|
|
11
|
+
_metadata: {
|
|
12
|
+
...generateResponseMetadata(db),
|
|
13
|
+
...{ note: `No document found matching "${input.document_id}"` },
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const docRow = db.prepare('SELECT id, title, url FROM legal_documents WHERE id = ?').get(resolvedId);
|
|
18
|
+
if (!docRow) {
|
|
19
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
20
|
+
}
|
|
21
|
+
// Specific provision lookup
|
|
22
|
+
const ref = input.provision_ref ?? input.section;
|
|
23
|
+
if (ref) {
|
|
24
|
+
const refTrimmed = ref.trim();
|
|
25
|
+
// Try direct provision_ref match
|
|
26
|
+
let provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, refTrimmed);
|
|
27
|
+
// Try with "s" prefix (e.g., "1" -> "s1")
|
|
28
|
+
if (!provision) {
|
|
29
|
+
provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, `s${refTrimmed}`);
|
|
30
|
+
}
|
|
31
|
+
// Try section column match
|
|
32
|
+
if (!provision) {
|
|
33
|
+
provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND section = ?').get(resolvedId, refTrimmed);
|
|
34
|
+
}
|
|
35
|
+
// Try LIKE match for flexible input
|
|
36
|
+
if (!provision) {
|
|
37
|
+
provision = db.prepare("SELECT * FROM legal_provisions WHERE document_id = ? AND (provision_ref LIKE ? OR section LIKE ?)").get(resolvedId, `%${refTrimmed}%`, `%${refTrimmed}%`);
|
|
38
|
+
}
|
|
39
|
+
if (provision) {
|
|
40
|
+
return {
|
|
41
|
+
results: [{
|
|
42
|
+
document_id: resolvedId,
|
|
43
|
+
document_title: docRow.title,
|
|
44
|
+
provision_ref: String(provision.provision_ref),
|
|
45
|
+
chapter: provision.chapter,
|
|
46
|
+
section: String(provision.section),
|
|
47
|
+
title: provision.title,
|
|
48
|
+
content: String(provision.content),
|
|
49
|
+
section_number: String(provision.provision_ref).replace(/^s/, ''),
|
|
50
|
+
url: docRow.url ?? undefined,
|
|
51
|
+
}],
|
|
52
|
+
_metadata: generateResponseMetadata(db),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
results: [],
|
|
57
|
+
_metadata: {
|
|
58
|
+
...generateResponseMetadata(db),
|
|
59
|
+
...{ note: `Provision "${ref}" not found in document "${resolvedId}"` },
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Return all provisions for the document
|
|
64
|
+
const provisions = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? ORDER BY id').all(resolvedId);
|
|
65
|
+
return {
|
|
66
|
+
results: provisions.map(p => ({
|
|
67
|
+
document_id: resolvedId,
|
|
68
|
+
document_title: docRow.title,
|
|
69
|
+
provision_ref: String(p.provision_ref),
|
|
70
|
+
chapter: p.chapter,
|
|
71
|
+
section: String(p.section),
|
|
72
|
+
title: p.title,
|
|
73
|
+
content: String(p.content),
|
|
74
|
+
section_number: String(p.provision_ref).replace(/^s/, ''),
|
|
75
|
+
url: docRow.url ?? undefined,
|
|
76
|
+
})),
|
|
77
|
+
_metadata: generateResponseMetadata(db),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=get-provision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision.js","sourceRoot":"","sources":["../../../src/tools/get-provision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_rwandan_implementations — Find Rwandan statutes that reference a specific EU directive/regulation.
|
|
3
|
+
*/
|
|
4
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
5
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
6
|
+
export interface GetRwandanImplementationsInput {
|
|
7
|
+
eu_document_id: string;
|
|
8
|
+
primary_only?: boolean;
|
|
9
|
+
in_force_only?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface RwandanImplementationResult {
|
|
12
|
+
document_id: string;
|
|
13
|
+
document_title: string;
|
|
14
|
+
status: string;
|
|
15
|
+
reference_type: string;
|
|
16
|
+
implementation_status: string | null;
|
|
17
|
+
is_primary: boolean;
|
|
18
|
+
reference_count: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function getRwandanImplementations(db: InstanceType<typeof Database>, input: GetRwandanImplementationsInput): Promise<ToolResponse<RwandanImplementationResult[]>>;
|
|
21
|
+
//# sourceMappingURL=get-rwandan-implementations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-rwandan-implementations.d.ts","sourceRoot":"","sources":["../../../src/tools/get-rwandan-implementations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAwCtD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_rwandan_implementations — Find Rwandan statutes that reference a specific EU directive/regulation.
|
|
3
|
+
*/
|
|
4
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
5
|
+
export async function getRwandanImplementations(db, input) {
|
|
6
|
+
try {
|
|
7
|
+
db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return {
|
|
11
|
+
results: [],
|
|
12
|
+
_metadata: {
|
|
13
|
+
...generateResponseMetadata(db),
|
|
14
|
+
...{ note: 'EU references not available in this database tier' },
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
let sql = `
|
|
19
|
+
SELECT
|
|
20
|
+
ld.id as document_id,
|
|
21
|
+
ld.title as document_title,
|
|
22
|
+
ld.status,
|
|
23
|
+
er.reference_type,
|
|
24
|
+
MAX(er.implementation_status) as implementation_status,
|
|
25
|
+
MAX(er.is_primary_implementation) as is_primary,
|
|
26
|
+
COUNT(*) as reference_count
|
|
27
|
+
FROM eu_references er
|
|
28
|
+
JOIN legal_documents ld ON ld.id = er.document_id
|
|
29
|
+
WHERE er.eu_document_id = ?
|
|
30
|
+
`;
|
|
31
|
+
const params = [input.eu_document_id];
|
|
32
|
+
if (input.primary_only) {
|
|
33
|
+
sql += ' AND er.is_primary_implementation = 1';
|
|
34
|
+
}
|
|
35
|
+
if (input.in_force_only) {
|
|
36
|
+
sql += " AND ld.status = 'in_force'";
|
|
37
|
+
}
|
|
38
|
+
sql += ' GROUP BY ld.id, er.reference_type ORDER BY is_primary DESC, reference_count DESC';
|
|
39
|
+
const rows = db.prepare(sql).all(...params);
|
|
40
|
+
return { results: rows, _metadata: generateResponseMetadata(db) };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=get-rwandan-implementations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-rwandan-implementations.js","sourceRoot":"","sources":["../../../src/tools/get-rwandan-implementations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAkBnF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAAiC,EACjC,KAAqC;IAErC,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAC/B,GAAG,EAAE,IAAI,EAAE,mDAAmD,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,GAAG;;;;;;;;;;;;GAYT,CAAC;IACF,MAAM,MAAM,GAAwB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE3D,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,GAAG,IAAI,uCAAuC,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,GAAG,IAAI,6BAA6B,CAAC;IACvC,CAAC;IAED,GAAG,IAAI,mFAAmF,CAAC;IAE3F,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAkC,CAAC;IAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_sources — Return provenance metadata for all data sources.
|
|
3
|
+
*/
|
|
4
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
5
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
6
|
+
export interface SourceInfo {
|
|
7
|
+
name: string;
|
|
8
|
+
authority: string;
|
|
9
|
+
url: string;
|
|
10
|
+
license: string;
|
|
11
|
+
coverage: string;
|
|
12
|
+
languages: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface ListSourcesResult {
|
|
15
|
+
sources: SourceInfo[];
|
|
16
|
+
database: {
|
|
17
|
+
tier: string;
|
|
18
|
+
schema_version: string;
|
|
19
|
+
built_at?: string;
|
|
20
|
+
document_count: number;
|
|
21
|
+
provision_count: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function listSources(db: InstanceType<typeof Database>): Promise<ToolResponse<ListSourcesResult>>;
|
|
25
|
+
//# sourceMappingURL=list-sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sources.d.ts","sourceRoot":"","sources":["../../../src/tools/list-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAWD,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CA2B1C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_sources — Return provenance metadata for all data sources.
|
|
3
|
+
*/
|
|
4
|
+
import { readDbMetadata } from '../capabilities.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
function safeCount(db, sql) {
|
|
7
|
+
try {
|
|
8
|
+
const row = db.prepare(sql).get();
|
|
9
|
+
return row ? Number(row.count) : 0;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function listSources(db) {
|
|
16
|
+
const meta = readDbMetadata(db);
|
|
17
|
+
return {
|
|
18
|
+
results: {
|
|
19
|
+
sources: [
|
|
20
|
+
{
|
|
21
|
+
name: 'RwandaLII Legislation Portal',
|
|
22
|
+
authority: 'RwandaLII / Laws.Africa',
|
|
23
|
+
url: 'https://rwandalii.org/legislation/',
|
|
24
|
+
license: 'RwandaLII Terms of Use',
|
|
25
|
+
coverage: 'Full Rwanda law catalog (`nature=Law`) with article-level extraction from ' +
|
|
26
|
+
'AKN HTML and PDF-backed law pages',
|
|
27
|
+
languages: ['en', 'rw', 'fr'],
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
database: {
|
|
31
|
+
tier: meta.tier,
|
|
32
|
+
schema_version: meta.schema_version,
|
|
33
|
+
built_at: meta.built_at,
|
|
34
|
+
document_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_documents'),
|
|
35
|
+
provision_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_provisions'),
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
_metadata: generateResponseMetadata(db),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=list-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sources.js","sourceRoot":"","sources":["../../../src/tools/list-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAsBnF,SAAS,SAAS,CAAC,EAAiC,EAAE,GAAW;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAmC,CAAC;QACnE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAiC;IAEjC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAEhC,OAAO;QACL,OAAO,EAAE;YACP,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,8BAA8B;oBACpC,SAAS,EAAE,yBAAyB;oBACpC,GAAG,EAAE,oCAAoC;oBACzC,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EACN,4EAA4E;wBAC5E,mCAAmC;oBACrC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;iBAC9B;aACF;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,cAAc,EAAE,SAAS,CAAC,EAAE,EAAE,+CAA+C,CAAC;gBAC9E,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,gDAAgD,CAAC;aACjF;SACF;QACD,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registry for Rwandan Law MCP Server.
|
|
3
|
+
* Shared between stdio (index.ts) and HTTP (api/mcp.ts) entry points.
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
6
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
8
|
+
import { type AboutContext } from './about.js';
|
|
9
|
+
export type { AboutContext } from './about.js';
|
|
10
|
+
export declare const TOOLS: Tool[];
|
|
11
|
+
export declare function buildTools(db?: InstanceType<typeof Database>, context?: AboutContext): Tool[];
|
|
12
|
+
export declare function registerTools(server: Server, db: InstanceType<typeof Database>, context?: AboutContext): void;
|
|
13
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAGL,IAAI,EACL,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAc/C,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqB/C,eAAO,MAAM,KAAK,EAAE,IAAI,EA2PvB,CAAC;AAEF,wBAAgB,UAAU,CACxB,EAAE,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EAClC,OAAO,CAAC,EAAE,YAAY,GACrB,IAAI,EAAE,CAiBR;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,OAAO,CAAC,EAAE,YAAY,GACrB,IAAI,CA8EN"}
|