@the-cascade-protocol/cli 0.2.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.
Files changed (165) hide show
  1. package/.dockerignore +7 -0
  2. package/.eslintrc.json +23 -0
  3. package/.prettierrc +7 -0
  4. package/DOCKER.md +36 -0
  5. package/Dockerfile +18 -0
  6. package/README.md +69 -0
  7. package/dist/commands/capabilities.d.ts +9 -0
  8. package/dist/commands/capabilities.d.ts.map +1 -0
  9. package/dist/commands/capabilities.js +194 -0
  10. package/dist/commands/capabilities.js.map +1 -0
  11. package/dist/commands/conformance.d.ts +15 -0
  12. package/dist/commands/conformance.d.ts.map +1 -0
  13. package/dist/commands/conformance.js +348 -0
  14. package/dist/commands/conformance.js.map +1 -0
  15. package/dist/commands/convert.d.ts +21 -0
  16. package/dist/commands/convert.d.ts.map +1 -0
  17. package/dist/commands/convert.js +134 -0
  18. package/dist/commands/convert.js.map +1 -0
  19. package/dist/commands/pod/export.d.ts +8 -0
  20. package/dist/commands/pod/export.d.ts.map +1 -0
  21. package/dist/commands/pod/export.js +72 -0
  22. package/dist/commands/pod/export.js.map +1 -0
  23. package/dist/commands/pod/helpers.d.ts +79 -0
  24. package/dist/commands/pod/helpers.d.ts.map +1 -0
  25. package/dist/commands/pod/helpers.js +369 -0
  26. package/dist/commands/pod/helpers.js.map +1 -0
  27. package/dist/commands/pod/index.d.ts +20 -0
  28. package/dist/commands/pod/index.d.ts.map +1 -0
  29. package/dist/commands/pod/index.js +29 -0
  30. package/dist/commands/pod/index.js.map +1 -0
  31. package/dist/commands/pod/info.d.ts +9 -0
  32. package/dist/commands/pod/info.d.ts.map +1 -0
  33. package/dist/commands/pod/info.js +196 -0
  34. package/dist/commands/pod/info.js.map +1 -0
  35. package/dist/commands/pod/init.d.ts +9 -0
  36. package/dist/commands/pod/init.d.ts.map +1 -0
  37. package/dist/commands/pod/init.js +251 -0
  38. package/dist/commands/pod/init.js.map +1 -0
  39. package/dist/commands/pod/query.d.ts +9 -0
  40. package/dist/commands/pod/query.d.ts.map +1 -0
  41. package/dist/commands/pod/query.js +169 -0
  42. package/dist/commands/pod/query.js.map +1 -0
  43. package/dist/commands/pod 2.js +1017 -0
  44. package/dist/commands/pod.d.ts +28 -0
  45. package/dist/commands/pod.d.ts 2.map +1 -0
  46. package/dist/commands/pod.d.ts.map +1 -0
  47. package/dist/commands/pod.js +1031 -0
  48. package/dist/commands/pod.js 2.map +1 -0
  49. package/dist/commands/pod.js.map +1 -0
  50. package/dist/commands/serve.d.ts +33 -0
  51. package/dist/commands/serve.d.ts.map +1 -0
  52. package/dist/commands/serve.js +74 -0
  53. package/dist/commands/serve.js.map +1 -0
  54. package/dist/commands/validate.d.ts +18 -0
  55. package/dist/commands/validate.d.ts.map +1 -0
  56. package/dist/commands/validate.js +275 -0
  57. package/dist/commands/validate.js.map +1 -0
  58. package/dist/index.d.ts +19 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +49 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/lib/fhir-converter/cascade-to-fhir.d.ts +17 -0
  63. package/dist/lib/fhir-converter/cascade-to-fhir.d.ts.map +1 -0
  64. package/dist/lib/fhir-converter/cascade-to-fhir.js +358 -0
  65. package/dist/lib/fhir-converter/cascade-to-fhir.js.map +1 -0
  66. package/dist/lib/fhir-converter/converters-clinical.d.ts +29 -0
  67. package/dist/lib/fhir-converter/converters-clinical.d.ts.map +1 -0
  68. package/dist/lib/fhir-converter/converters-clinical.js +391 -0
  69. package/dist/lib/fhir-converter/converters-clinical.js.map +1 -0
  70. package/dist/lib/fhir-converter/converters-demographics.d.ts +20 -0
  71. package/dist/lib/fhir-converter/converters-demographics.d.ts.map +1 -0
  72. package/dist/lib/fhir-converter/converters-demographics.js +242 -0
  73. package/dist/lib/fhir-converter/converters-demographics.js.map +1 -0
  74. package/dist/lib/fhir-converter/fhir-to-cascade.d.ts +17 -0
  75. package/dist/lib/fhir-converter/fhir-to-cascade.d.ts.map +1 -0
  76. package/dist/lib/fhir-converter/fhir-to-cascade.js +63 -0
  77. package/dist/lib/fhir-converter/fhir-to-cascade.js.map +1 -0
  78. package/dist/lib/fhir-converter/index.d.ts +36 -0
  79. package/dist/lib/fhir-converter/index.d.ts.map +1 -0
  80. package/dist/lib/fhir-converter/index.js +187 -0
  81. package/dist/lib/fhir-converter/index.js.map +1 -0
  82. package/dist/lib/fhir-converter/types.d.ts +77 -0
  83. package/dist/lib/fhir-converter/types.d.ts.map +1 -0
  84. package/dist/lib/fhir-converter/types.js +236 -0
  85. package/dist/lib/fhir-converter/types.js.map +1 -0
  86. package/dist/lib/fhir-converter.d.ts +62 -0
  87. package/dist/lib/fhir-converter.d.ts.map +1 -0
  88. package/dist/lib/fhir-converter.js +1474 -0
  89. package/dist/lib/fhir-converter.js.map +1 -0
  90. package/dist/lib/mcp/audit.d.ts +24 -0
  91. package/dist/lib/mcp/audit.d.ts.map +1 -0
  92. package/dist/lib/mcp/audit.js +85 -0
  93. package/dist/lib/mcp/audit.js.map +1 -0
  94. package/dist/lib/mcp/server.d.ts +38 -0
  95. package/dist/lib/mcp/server.d.ts.map +1 -0
  96. package/dist/lib/mcp/server.js +172 -0
  97. package/dist/lib/mcp/server.js.map +1 -0
  98. package/dist/lib/mcp/tools.d.ts +47 -0
  99. package/dist/lib/mcp/tools.d.ts.map +1 -0
  100. package/dist/lib/mcp/tools.js +547 -0
  101. package/dist/lib/mcp/tools.js.map +1 -0
  102. package/dist/lib/output.d.ts +26 -0
  103. package/dist/lib/output.d.ts.map +1 -0
  104. package/dist/lib/output.js +64 -0
  105. package/dist/lib/output.js.map +1 -0
  106. package/dist/lib/shacl-validator.d.ts +53 -0
  107. package/dist/lib/shacl-validator.d.ts.map +1 -0
  108. package/dist/lib/shacl-validator.js +245 -0
  109. package/dist/lib/shacl-validator.js.map +1 -0
  110. package/dist/lib/turtle-parser.d.ts +64 -0
  111. package/dist/lib/turtle-parser.d.ts.map +1 -0
  112. package/dist/lib/turtle-parser.js +236 -0
  113. package/dist/lib/turtle-parser.js.map +1 -0
  114. package/dist/shapes/checkup.shapes.ttl +1459 -0
  115. package/dist/shapes/clinical.shapes.ttl +1350 -0
  116. package/dist/shapes/clinical.ttl +1369 -0
  117. package/dist/shapes/core.shapes.ttl +450 -0
  118. package/dist/shapes/core.ttl +603 -0
  119. package/dist/shapes/coverage.shapes.ttl +214 -0
  120. package/dist/shapes/coverage.ttl +182 -0
  121. package/dist/shapes/health.shapes.ttl +697 -0
  122. package/dist/shapes/health.ttl +859 -0
  123. package/dist/shapes/pots.shapes.ttl +481 -0
  124. package/package.json +54 -0
  125. package/src/commands/capabilities.ts +235 -0
  126. package/src/commands/conformance.ts +447 -0
  127. package/src/commands/convert.ts +164 -0
  128. package/src/commands/pod/export.ts +85 -0
  129. package/src/commands/pod/helpers.ts +449 -0
  130. package/src/commands/pod/index.ts +32 -0
  131. package/src/commands/pod/info.ts +239 -0
  132. package/src/commands/pod/init.ts +273 -0
  133. package/src/commands/pod/query.ts +224 -0
  134. package/src/commands/serve.ts +92 -0
  135. package/src/commands/validate.ts +303 -0
  136. package/src/index.ts +58 -0
  137. package/src/lib/fhir-converter/cascade-to-fhir.ts +369 -0
  138. package/src/lib/fhir-converter/converters-clinical.ts +446 -0
  139. package/src/lib/fhir-converter/converters-demographics.ts +270 -0
  140. package/src/lib/fhir-converter/fhir-to-cascade.ts +82 -0
  141. package/src/lib/fhir-converter/index.ts +215 -0
  142. package/src/lib/fhir-converter/types.ts +318 -0
  143. package/src/lib/mcp/audit.ts +107 -0
  144. package/src/lib/mcp/server.ts +192 -0
  145. package/src/lib/mcp/tools.ts +668 -0
  146. package/src/lib/output.ts +76 -0
  147. package/src/lib/shacl-validator.ts +314 -0
  148. package/src/lib/turtle-parser.ts +277 -0
  149. package/src/shapes/checkup.shapes.ttl +1459 -0
  150. package/src/shapes/clinical.shapes.ttl +1350 -0
  151. package/src/shapes/clinical.ttl +1369 -0
  152. package/src/shapes/core.shapes.ttl +450 -0
  153. package/src/shapes/core.ttl +603 -0
  154. package/src/shapes/coverage.shapes.ttl +214 -0
  155. package/src/shapes/coverage.ttl +182 -0
  156. package/src/shapes/health.shapes.ttl +697 -0
  157. package/src/shapes/health.ttl +859 -0
  158. package/src/shapes/pots.shapes.ttl +481 -0
  159. package/test-fixtures/fhir-bundle-example.json +216 -0
  160. package/test-fixtures/fhir-medication-example.json +18 -0
  161. package/tests/cli.test.ts +126 -0
  162. package/tests/fhir-converter.test.ts +874 -0
  163. package/tests/mcp-server.test.ts +396 -0
  164. package/tests/pod.test.ts +400 -0
  165. package/tsconfig.json +24 -0
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Turtle parsing utilities.
3
+ *
4
+ * Wraps the n3 library to provide Cascade-specific Turtle parsing
5
+ * with support for Cascade Protocol namespaces.
6
+ */
7
+ import { Parser, Store, DataFactory } from 'n3';
8
+ import * as fs from 'fs/promises';
9
+ const { namedNode } = DataFactory;
10
+ /** Well-known RDF predicates */
11
+ const RDF_TYPE_IRI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
12
+ /** Known Cascade Protocol namespace prefixes */
13
+ export const CASCADE_NAMESPACES = {
14
+ core: 'https://ns.cascadeprotocol.org/core/v1#',
15
+ cascade: 'https://ns.cascadeprotocol.org/core/v1#',
16
+ health: 'https://ns.cascadeprotocol.org/health/v1#',
17
+ clinical: 'https://ns.cascadeprotocol.org/clinical/v1#',
18
+ pots: 'https://ns.cascadeprotocol.org/pots/v1#',
19
+ checkup: 'https://ns.cascadeprotocol.org/checkup/v1#',
20
+ coverage: 'https://ns.cascadeprotocol.org/coverage/v1#',
21
+ };
22
+ /** Well-known non-Cascade namespaces for IRI shortening */
23
+ const WELL_KNOWN_NAMESPACES = {
24
+ foaf: 'http://xmlns.com/foaf/0.1/',
25
+ solid: 'http://www.w3.org/ns/solid/terms#',
26
+ ldp: 'http://www.w3.org/ns/ldp#',
27
+ dct: 'http://purl.org/dc/terms/',
28
+ dcterms: 'http://purl.org/dc/terms/',
29
+ prov: 'http://www.w3.org/ns/prov#',
30
+ rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
31
+ xsd: 'http://www.w3.org/2001/XMLSchema#',
32
+ fhir: 'http://hl7.org/fhir/',
33
+ rxnorm: 'http://www.nlm.nih.gov/research/umls/rxnorm/',
34
+ sct: 'http://snomed.info/sct/',
35
+ loinc: 'http://loinc.org/rdf#',
36
+ icd10: 'http://hl7.org/fhir/sid/icd-10-cm/',
37
+ cvx: 'http://hl7.org/fhir/sid/cvx/',
38
+ };
39
+ /**
40
+ * Parse a Turtle string into quads and a Store.
41
+ */
42
+ export function parseTurtle(input, baseIRI) {
43
+ const parser = new Parser({ baseIRI: baseIRI ?? '' });
44
+ const store = new Store();
45
+ const prefixes = {};
46
+ const errors = [];
47
+ let quads;
48
+ try {
49
+ quads = parser.parse(input, null, (prefix, prefixNode) => {
50
+ prefixes[prefix] = prefixNode.value;
51
+ });
52
+ store.addQuads(quads);
53
+ }
54
+ catch (e) {
55
+ const msg = e instanceof Error ? e.message : String(e);
56
+ return {
57
+ success: false,
58
+ quads: [],
59
+ store,
60
+ quadCount: 0,
61
+ prefixes,
62
+ errors: [msg],
63
+ subjects: [],
64
+ };
65
+ }
66
+ // Extract subjects with their types
67
+ const subjects = extractSubjectsWithTypes(store);
68
+ return {
69
+ success: true,
70
+ quads,
71
+ store,
72
+ quadCount: quads.length,
73
+ prefixes,
74
+ errors,
75
+ subjects,
76
+ };
77
+ }
78
+ /**
79
+ * Extract all subjects with their rdf:type values from a store.
80
+ */
81
+ function extractSubjectsWithTypes(store) {
82
+ const subjectMap = new Map();
83
+ const typeQuads = store.getQuads(null, namedNode(RDF_TYPE_IRI), null, null);
84
+ for (const quad of typeQuads) {
85
+ const subjectUri = quad.subject.value;
86
+ const typeUri = quad.object.value;
87
+ if (!subjectMap.has(subjectUri)) {
88
+ subjectMap.set(subjectUri, []);
89
+ }
90
+ subjectMap.get(subjectUri).push(typeUri);
91
+ }
92
+ return Array.from(subjectMap.entries()).map(([uri, types]) => ({ uri, types }));
93
+ }
94
+ /**
95
+ * Detect which Cascade Protocol vocabularies are used in a parsed Turtle file
96
+ * based on prefixes and type URIs.
97
+ */
98
+ export function detectVocabularies(result) {
99
+ const vocabs = new Set();
100
+ // Check prefix declarations
101
+ for (const [, iri] of Object.entries(result.prefixes)) {
102
+ for (const [name, ns] of Object.entries(CASCADE_NAMESPACES)) {
103
+ if (iri === ns || iri.startsWith(ns.replace(/#$/, ''))) {
104
+ vocabs.add(name);
105
+ }
106
+ }
107
+ }
108
+ // Check type URIs
109
+ for (const subject of result.subjects) {
110
+ for (const typeUri of subject.types) {
111
+ for (const [name, ns] of Object.entries(CASCADE_NAMESPACES)) {
112
+ if (typeUri.startsWith(ns)) {
113
+ vocabs.add(name);
114
+ }
115
+ }
116
+ }
117
+ }
118
+ // Also scan all quads for namespace usage (predicates, objects)
119
+ for (const quad of result.quads) {
120
+ const values = [quad.predicate.value, quad.object.value];
121
+ for (const val of values) {
122
+ for (const [name, ns] of Object.entries(CASCADE_NAMESPACES)) {
123
+ if (val.startsWith(ns)) {
124
+ vocabs.add(name);
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return Array.from(vocabs);
130
+ }
131
+ /**
132
+ * Parse a Turtle file from disk.
133
+ */
134
+ export async function parseTurtleFile(filePath) {
135
+ try {
136
+ const content = await fs.readFile(filePath, 'utf-8');
137
+ return parseTurtle(content, `file://${filePath}`);
138
+ }
139
+ catch (err) {
140
+ const message = err instanceof Error ? err.message : String(err);
141
+ return {
142
+ success: false,
143
+ quads: [],
144
+ store: new Store(),
145
+ quadCount: 0,
146
+ prefixes: {},
147
+ errors: [`Failed to read file ${filePath}: ${message}`],
148
+ subjects: [],
149
+ };
150
+ }
151
+ }
152
+ /**
153
+ * Return all subject URIs that have rdf:type matching the given type IRI.
154
+ */
155
+ export function getSubjectsByType(store, rdfType) {
156
+ const subjects = store.getSubjects(namedNode(RDF_TYPE_IRI), namedNode(rdfType), null);
157
+ return subjects.map((s) => s.value);
158
+ }
159
+ /**
160
+ * Return all predicate-value pairs for a given subject.
161
+ * Returns a map of predicate IRI -> array of object values.
162
+ */
163
+ export function getProperties(store, subject) {
164
+ const result = {};
165
+ const quads = store.getQuads(subject, null, null, null);
166
+ for (const quad of quads) {
167
+ const predicate = quad.predicate.value;
168
+ if (!result[predicate]) {
169
+ result[predicate] = [];
170
+ }
171
+ result[predicate].push(quad.object.value);
172
+ }
173
+ return result;
174
+ }
175
+ /**
176
+ * Count subjects of a given rdf:type.
177
+ */
178
+ export function countSubjectsByType(store, rdfType) {
179
+ return store.countQuads(null, namedNode(RDF_TYPE_IRI), namedNode(rdfType), null);
180
+ }
181
+ /**
182
+ * Get all unique rdf:type values in the store.
183
+ */
184
+ export function getAllTypes(store) {
185
+ const objects = store.getObjects(null, namedNode(RDF_TYPE_IRI), null);
186
+ const types = new Set();
187
+ for (const obj of objects) {
188
+ types.add(obj.value);
189
+ }
190
+ return Array.from(types);
191
+ }
192
+ /**
193
+ * Shorten a full IRI using known Cascade namespace prefixes.
194
+ * Returns the prefixed form (e.g., "health:MedicationRecord") or the full IRI if no match.
195
+ */
196
+ export function shortenIRI(iri, prefixes) {
197
+ const allPrefixes = {
198
+ ...CASCADE_NAMESPACES,
199
+ ...WELL_KNOWN_NAMESPACES,
200
+ ...(prefixes ?? {}),
201
+ };
202
+ for (const [prefix, namespace] of Object.entries(allPrefixes)) {
203
+ if (iri.startsWith(namespace)) {
204
+ return `${prefix}:${iri.slice(namespace.length)}`;
205
+ }
206
+ }
207
+ return iri;
208
+ }
209
+ /**
210
+ * Extract a human-readable label for a record from its properties.
211
+ * Tries common name predicates in order of preference.
212
+ */
213
+ export function extractLabel(props) {
214
+ const namePredicates = [
215
+ CASCADE_NAMESPACES.health + 'medicationName',
216
+ CASCADE_NAMESPACES.health + 'conditionName',
217
+ CASCADE_NAMESPACES.health + 'allergen',
218
+ CASCADE_NAMESPACES.clinical + 'supplementName',
219
+ CASCADE_NAMESPACES.clinical + 'vaccineName',
220
+ CASCADE_NAMESPACES.health + 'vaccineName',
221
+ CASCADE_NAMESPACES.health + 'testName',
222
+ CASCADE_NAMESPACES.health + 'labTestName',
223
+ CASCADE_NAMESPACES.clinical + 'planName',
224
+ CASCADE_NAMESPACES.cascade + 'planName',
225
+ 'http://xmlns.com/foaf/0.1/name',
226
+ 'http://xmlns.com/foaf/0.1/givenName',
227
+ 'http://purl.org/dc/terms/title',
228
+ ];
229
+ for (const pred of namePredicates) {
230
+ if (props[pred]?.[0]) {
231
+ return props[pred][0];
232
+ }
233
+ }
234
+ return undefined;
235
+ }
236
+ //# sourceMappingURL=turtle-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turtle-parser.js","sourceRoot":"","sources":["../../src/lib/turtle-parser.ts"],"names":[],"mappings":"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"}