@openephemeris/mcp-server 3.1.0 → 3.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.
Files changed (58) hide show
  1. package/README.md +51 -22
  2. package/config/dev-allowlist.json +1262 -1318
  3. package/dist/index.js +0 -0
  4. package/dist/scripts/dev-allowlist.d.ts +1 -0
  5. package/dist/scripts/dev-allowlist.js +287 -0
  6. package/dist/scripts/pack-audit.d.ts +1 -0
  7. package/dist/scripts/pack-audit.js +45 -0
  8. package/dist/scripts/schema-packs.d.ts +1 -0
  9. package/dist/scripts/schema-packs.js +150 -0
  10. package/dist/scripts/smoke-dev-profile.d.ts +1 -0
  11. package/dist/scripts/smoke-dev-profile.js +25 -0
  12. package/dist/scripts/sync-readme.d.ts +1 -0
  13. package/dist/scripts/sync-readme.js +141 -0
  14. package/dist/scripts/test-client.d.ts +1 -0
  15. package/dist/scripts/test-client.js +69 -0
  16. package/dist/scripts/test-sse-client.d.ts +1 -0
  17. package/dist/scripts/test-sse-client.js +221 -0
  18. package/dist/src/auth/credentials.d.ts +65 -0
  19. package/dist/src/auth/credentials.js +200 -0
  20. package/dist/src/auth/device-auth.d.ts +56 -0
  21. package/dist/src/auth/device-auth.js +147 -0
  22. package/dist/src/backend/client.d.ts +61 -0
  23. package/dist/src/backend/client.js +335 -0
  24. package/dist/src/index.d.ts +2 -0
  25. package/dist/src/index.js +98 -0
  26. package/dist/src/schema-packs/llm.d.ts +105 -0
  27. package/dist/src/schema-packs/llm.js +429 -0
  28. package/dist/src/server-sse.d.ts +1 -0
  29. package/dist/src/server-sse.js +264 -0
  30. package/dist/src/tools/auth.d.ts +1 -0
  31. package/dist/src/tools/auth.js +202 -0
  32. package/dist/src/tools/dev.d.ts +1 -0
  33. package/dist/src/tools/dev.js +195 -0
  34. package/dist/src/tools/index.d.ts +33 -0
  35. package/dist/src/tools/index.js +56 -0
  36. package/dist/src/tools/specialized/eclipse.d.ts +1 -0
  37. package/dist/src/tools/specialized/eclipse.js +53 -0
  38. package/dist/src/tools/specialized/electional.d.ts +1 -0
  39. package/dist/src/tools/specialized/electional.js +80 -0
  40. package/dist/src/tools/specialized/human_design.d.ts +1 -0
  41. package/dist/src/tools/specialized/human_design.js +54 -0
  42. package/dist/src/tools/specialized/moon.d.ts +1 -0
  43. package/dist/src/tools/specialized/moon.js +51 -0
  44. package/dist/src/tools/specialized/natal.d.ts +1 -0
  45. package/dist/src/tools/specialized/natal.js +80 -0
  46. package/dist/src/tools/specialized/relocation.d.ts +1 -0
  47. package/dist/src/tools/specialized/relocation.js +76 -0
  48. package/dist/src/tools/specialized/synastry.d.ts +1 -0
  49. package/dist/src/tools/specialized/synastry.js +73 -0
  50. package/dist/src/tools/specialized/transits.d.ts +1 -0
  51. package/dist/src/tools/specialized/transits.js +87 -0
  52. package/dist/test/allowlist-and-tools.test.d.ts +1 -0
  53. package/dist/test/allowlist-and-tools.test.js +96 -0
  54. package/dist/test/backend-client.test.d.ts +1 -0
  55. package/dist/test/backend-client.test.js +284 -0
  56. package/dist/test/credentials.test.d.ts +1 -0
  57. package/dist/test/credentials.test.js +143 -0
  58. package/package.json +27 -18
@@ -0,0 +1,105 @@
1
+ import { z } from "zod";
2
+ export declare const LLM_V2_POINTS_SCHEMA: readonly ["id", "kind", "src", "lon", "lat", "spd", "rx", "sg", "deg", "hs", "dec", "oob", "ed", "ed_sc", "ad_sc", "on_cusp"];
3
+ export declare const LLM_V2_ASPECTS_SCHEMA: readonly ["a_i", "b_i", "t", "orb", "orb_pct", "app", "str"];
4
+ export declare const LLM_V2_DICT: {
5
+ readonly sign_id: readonly ["ari", "tau", "gem", "can", "leo", "vir", "lib", "sco", "sag", "cap", "aqu", "pis"];
6
+ readonly aspect_id: readonly ["con", "opp", "tri", "sqr", "sex"];
7
+ readonly aspect_angle: readonly [0, 180, 120, 90, 60];
8
+ readonly kind_id: readonly ["planet", "angle", "node", "lilith", "asteroid", "other"];
9
+ };
10
+ export declare const LlmV2PayloadSchema: z.ZodObject<{
11
+ output_mode: z.ZodOptional<z.ZodLiteral<"llm">>;
12
+ schema_version: z.ZodOptional<z.ZodLiteral<"llm">>;
13
+ chart: z.ZodObject<{
14
+ chart_type: z.ZodEnum<{
15
+ natal: "natal";
16
+ synastry: "synastry";
17
+ }>;
18
+ subject: z.ZodOptional<z.ZodObject<{
19
+ datetime: z.ZodOptional<z.ZodNullable<z.ZodString>>;
20
+ jd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
21
+ lat: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
22
+ lon: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
23
+ }, z.core.$strict>>;
24
+ }, z.core.$strict>;
25
+ rules: z.ZodOptional<z.ZodObject<{
26
+ zodiac_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
27
+ house_system: z.ZodOptional<z.ZodNullable<z.ZodString>>;
28
+ coordinate_system: z.ZodOptional<z.ZodNullable<z.ZodString>>;
29
+ node_source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ lon_range: z.ZodLiteral<"0_360">;
31
+ aspect_set: z.ZodLiteral<"major_default">;
32
+ orb_profile: z.ZodOptional<z.ZodNullable<z.ZodString>>;
33
+ strength_basis: z.ZodLiteral<"engine">;
34
+ point_order_id: z.ZodLiteral<"astro_point_order_v1">;
35
+ core_set_id: z.ZodLiteral<"core_interp_set_v1">;
36
+ }, z.core.$strict>>;
37
+ reliability: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
38
+ provenance: z.ZodOptional<z.ZodObject<{
39
+ engine: z.ZodString;
40
+ ephemeris_source: z.ZodString;
41
+ ephemeris_version: z.ZodString;
42
+ validation_profile: z.ZodOptional<z.ZodNullable<z.ZodString>>;
43
+ precision_level: z.ZodOptional<z.ZodNullable<z.ZodString>>;
44
+ checksum: z.ZodOptional<z.ZodNullable<z.ZodString>>;
45
+ }, z.core.$strict>>;
46
+ dict: z.ZodObject<{
47
+ sign_id: z.ZodTuple<any, null>;
48
+ aspect_id: z.ZodTuple<any, null>;
49
+ aspect_angle: z.ZodTuple<any, null>;
50
+ kind_id: z.ZodTuple<any, null>;
51
+ }, z.core.$strict>;
52
+ present: z.ZodObject<{
53
+ point_count: z.ZodNumber;
54
+ kinds: z.ZodRecord<z.ZodString, z.ZodNumber>;
55
+ }, z.core.$strict>;
56
+ points_schema: z.ZodTuple<any, null>;
57
+ points: z.ZodArray<z.ZodTuple<[z.ZodString, z.ZodEnum<{
58
+ [x: string]: any;
59
+ }>, z.ZodNumber, z.ZodNumber, z.ZodNullable<z.ZodNumber>, z.ZodNullable<z.ZodNumber>, z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNullable<z.ZodNumber>, z.ZodNullable<z.ZodNumber>, z.ZodNumber, z.ZodEnum<{
60
+ none: "none";
61
+ dom: "dom";
62
+ ex: "ex";
63
+ det: "det";
64
+ fall: "fall";
65
+ }>, z.ZodNullable<z.ZodNumber>, z.ZodNullable<z.ZodNumber>, z.ZodNumber], null>>;
66
+ angles: z.ZodOptional<z.ZodObject<{
67
+ asc: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
68
+ mc: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
69
+ dsc: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
70
+ ic: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
71
+ }, z.core.$strict>>;
72
+ houses: z.ZodOptional<z.ZodObject<{
73
+ system: z.ZodOptional<z.ZodNullable<z.ZodString>>;
74
+ cusps: z.ZodArray<z.ZodNumber>;
75
+ }, z.core.$strict>>;
76
+ aspects_schema: z.ZodTuple<any, null>;
77
+ aspects: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
78
+ patterns: z.ZodOptional<z.ZodObject<{
79
+ stellium: z.ZodArray<z.ZodUnknown>;
80
+ t_square: z.ZodArray<z.ZodUnknown>;
81
+ grand_trine: z.ZodArray<z.ZodUnknown>;
82
+ kite: z.ZodArray<z.ZodUnknown>;
83
+ yod: z.ZodArray<z.ZodUnknown>;
84
+ grand_cross: z.ZodArray<z.ZodUnknown>;
85
+ }, z.core.$strict>>;
86
+ extras: z.ZodOptional<z.ZodObject<{
87
+ fixed_star_conjunctions: z.ZodArray<z.ZodUnknown>;
88
+ lots: z.ZodArray<z.ZodUnknown>;
89
+ }, z.core.$strict>>;
90
+ counts: z.ZodObject<{
91
+ point_count: z.ZodNumber;
92
+ aspect_count: z.ZodNumber;
93
+ aspect_count_unfiltered: z.ZodOptional<z.ZodNumber>;
94
+ midpoint_count: z.ZodOptional<z.ZodNumber>;
95
+ declination_aspect_count: z.ZodOptional<z.ZodNumber>;
96
+ stellium_count: z.ZodOptional<z.ZodNumber>;
97
+ }, z.core.$strict>;
98
+ analysis: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
99
+ human_design: z.ZodOptional<z.ZodObject<{
100
+ gates_schema: z.ZodArray<z.ZodString>;
101
+ gates: z.ZodArray<z.ZodArray<z.ZodAny>>;
102
+ }, z.core.$strict>>;
103
+ }, z.core.$strict>;
104
+ export type LlmV2Payload = z.infer<typeof LlmV2PayloadSchema>;
105
+ export declare const llmV2JsonSchema: Record<string, unknown>;
@@ -0,0 +1,429 @@
1
+ import { z } from "zod";
2
+ export const LLM_V2_POINTS_SCHEMA = [
3
+ "id",
4
+ "kind",
5
+ "src",
6
+ "lon",
7
+ "lat",
8
+ "spd",
9
+ "rx",
10
+ "sg",
11
+ "deg",
12
+ "hs",
13
+ "dec",
14
+ "oob",
15
+ "ed",
16
+ "ed_sc",
17
+ "ad_sc",
18
+ "on_cusp",
19
+ ];
20
+ export const LLM_V2_ASPECTS_SCHEMA = ["a_i", "b_i", "t", "orb", "orb_pct", "app", "str"];
21
+ export const LLM_V2_DICT = {
22
+ sign_id: ["ari", "tau", "gem", "can", "leo", "vir", "lib", "sco", "sag", "cap", "aqu", "pis"],
23
+ aspect_id: ["con", "opp", "tri", "sqr", "sex"],
24
+ aspect_angle: [0, 180, 120, 90, 60],
25
+ kind_id: ["planet", "angle", "node", "lilith", "asteroid", "other"],
26
+ };
27
+ const PointsSchemaZ = z.tuple(LLM_V2_POINTS_SCHEMA.map((v) => z.literal(v)));
28
+ const AspectsSchemaZ = z.tuple(LLM_V2_ASPECTS_SCHEMA.map((v) => z.literal(v)));
29
+ const PointKindZ = z.enum(LLM_V2_DICT.kind_id);
30
+ const EdZ = z.enum(["none", "dom", "ex", "det", "fall"]);
31
+ const PointRowZ = z.tuple([
32
+ z.string(), // id
33
+ PointKindZ, // kind
34
+ z.number().int(), // src (single-frame currently 0)
35
+ z.number(), // lon
36
+ z.number().nullable(), // lat
37
+ z.number().nullable(), // spd
38
+ z.number().int(), // rx
39
+ z.number().int(), // sg
40
+ z.number(), // deg
41
+ z.number().nullable(), // hs
42
+ z.number().nullable(), // dec
43
+ z.number().int(), // oob
44
+ EdZ, // ed
45
+ z.number().nullable(), // ed_sc
46
+ z.number().nullable(), // ad_sc
47
+ z.number().int(), // on_cusp
48
+ ]);
49
+ const AspectRowZ = z.tuple([
50
+ z.number().int(), // a_i
51
+ z.number().int(), // b_i
52
+ z.number().int(), // t
53
+ z.number(), // orb
54
+ z.number(), // orb_pct
55
+ z.number().int(), // app
56
+ z.number(), // str
57
+ ]);
58
+ const ChartSubjectZ = z
59
+ .object({
60
+ datetime: z.string().nullable().optional(),
61
+ jd: z.number().nullable().optional(),
62
+ lat: z.number().nullable().optional(),
63
+ lon: z.number().nullable().optional(),
64
+ })
65
+ .strict();
66
+ const ChartZ = z
67
+ .object({
68
+ chart_type: z.enum(["natal", "synastry"]),
69
+ // Natal-style payloads include subject; synastry-style table payloads omit it.
70
+ subject: ChartSubjectZ.optional(),
71
+ })
72
+ .strict();
73
+ const RulesZ = z
74
+ .object({
75
+ zodiac_type: z.string().nullable().optional(),
76
+ house_system: z.string().nullable().optional(),
77
+ coordinate_system: z.string().nullable().optional(),
78
+ node_source: z.string().nullable().optional(),
79
+ lon_range: z.literal("0_360"),
80
+ aspect_set: z.literal("major_default"),
81
+ orb_profile: z.string().nullable().optional(),
82
+ strength_basis: z.literal("engine"),
83
+ point_order_id: z.literal("astro_point_order_v1"),
84
+ core_set_id: z.literal("core_interp_set_v1"),
85
+ })
86
+ .strict();
87
+ const ProvenanceZ = z
88
+ .object({
89
+ engine: z.string(),
90
+ ephemeris_source: z.string(),
91
+ ephemeris_version: z.string(),
92
+ validation_profile: z.string().nullable().optional(),
93
+ precision_level: z.string().nullable().optional(),
94
+ checksum: z.string().nullable().optional(),
95
+ })
96
+ .strict();
97
+ const DictZ = z
98
+ .object({
99
+ sign_id: z.tuple(LLM_V2_DICT.sign_id.map((v) => z.literal(v))),
100
+ aspect_id: z.tuple(LLM_V2_DICT.aspect_id.map((v) => z.literal(v))),
101
+ aspect_angle: z.tuple(LLM_V2_DICT.aspect_angle.map((v) => z.literal(v))),
102
+ kind_id: z.tuple(LLM_V2_DICT.kind_id.map((v) => z.literal(v))),
103
+ })
104
+ .strict();
105
+ const PresentZ = z
106
+ .object({
107
+ point_count: z.number().int(),
108
+ kinds: z.record(z.string(), z.number().int()),
109
+ })
110
+ .strict();
111
+ const AnglesZ = z
112
+ .object({
113
+ asc: z.number().nullable().optional(),
114
+ mc: z.number().nullable().optional(),
115
+ dsc: z.number().nullable().optional(),
116
+ ic: z.number().nullable().optional(),
117
+ })
118
+ .strict();
119
+ const HousesZ = z
120
+ .object({
121
+ system: z.string().nullable().optional(),
122
+ cusps: z.array(z.number()),
123
+ })
124
+ .strict();
125
+ const PatternsZ = z
126
+ .object({
127
+ stellium: z.array(z.unknown()),
128
+ t_square: z.array(z.unknown()),
129
+ grand_trine: z.array(z.unknown()),
130
+ kite: z.array(z.unknown()),
131
+ yod: z.array(z.unknown()),
132
+ grand_cross: z.array(z.unknown()),
133
+ })
134
+ .strict();
135
+ const ExtrasZ = z
136
+ .object({
137
+ fixed_star_conjunctions: z.array(z.unknown()),
138
+ lots: z.array(z.unknown()),
139
+ })
140
+ .strict();
141
+ const CountsZ = z
142
+ .object({
143
+ point_count: z.number().int(),
144
+ aspect_count: z.number().int(),
145
+ // Natal-style payloads include these; synastry-style may omit.
146
+ aspect_count_unfiltered: z.number().int().optional(),
147
+ midpoint_count: z.number().int().optional(),
148
+ declination_aspect_count: z.number().int().optional(),
149
+ stellium_count: z.number().int().optional(),
150
+ })
151
+ .strict();
152
+ const HumanDesignZ = z
153
+ .object({
154
+ gates_schema: z.array(z.string()),
155
+ gates: z.array(z.array(z.any())),
156
+ })
157
+ .strict();
158
+ export const LlmV2PayloadSchema = z
159
+ .object({
160
+ // Some fixtures include this (envelope-like), but backend projector may omit it.
161
+ output_mode: z.literal("llm").optional(),
162
+ // Backend keeps schema versioning internal; allow older fixtures to include it.
163
+ schema_version: z.literal("llm").optional(),
164
+ chart: ChartZ,
165
+ // Natal-style payloads include these blocks; synastry-style may omit.
166
+ rules: RulesZ.optional(),
167
+ reliability: z.record(z.string(), z.unknown()).optional(),
168
+ provenance: ProvenanceZ.optional(),
169
+ dict: DictZ,
170
+ present: PresentZ,
171
+ points_schema: PointsSchemaZ,
172
+ points: z.array(PointRowZ),
173
+ angles: AnglesZ.optional(),
174
+ houses: HousesZ.optional(),
175
+ aspects_schema: AspectsSchemaZ,
176
+ aspects: z.array(AspectRowZ),
177
+ patterns: PatternsZ.optional(),
178
+ extras: ExtrasZ.optional(),
179
+ counts: CountsZ,
180
+ // Optional enrichment blocks added by some endpoints.
181
+ analysis: z.record(z.string(), z.unknown()).optional(),
182
+ human_design: HumanDesignZ.optional(),
183
+ })
184
+ .strict()
185
+ .superRefine((value, ctx) => {
186
+ const expectedPointsLen = LLM_V2_POINTS_SCHEMA.length;
187
+ for (let i = 0; i < Math.min(value.points.length, 200); i++) {
188
+ const row = value.points[i];
189
+ if (row.length !== expectedPointsLen) {
190
+ ctx.addIssue({
191
+ code: z.ZodIssueCode.custom,
192
+ path: ["points", i],
193
+ message: `points[${i}] row length ${row.length} != ${expectedPointsLen}`,
194
+ });
195
+ }
196
+ }
197
+ const expectedAspectsLen = LLM_V2_ASPECTS_SCHEMA.length;
198
+ for (let i = 0; i < Math.min(value.aspects.length, 2000); i++) {
199
+ const row = value.aspects[i];
200
+ if (row.length !== expectedAspectsLen) {
201
+ ctx.addIssue({
202
+ code: z.ZodIssueCode.custom,
203
+ path: ["aspects", i],
204
+ message: `aspects[${i}] row length ${row.length} != ${expectedAspectsLen}`,
205
+ });
206
+ }
207
+ }
208
+ });
209
+ // A JSON Schema companion for downstream consumers.
210
+ // (We intentionally keep this small and explicit rather than depending on a zod->jsonschema lib.)
211
+ export const llmV2JsonSchema = {
212
+ $schema: "https://json-schema.org/draft/2020-12/schema",
213
+ title: "Open Ephemeris LLM Projection (format=llm)",
214
+ type: "object",
215
+ additionalProperties: false,
216
+ required: ["chart", "dict", "present", "points_schema", "points", "aspects_schema", "aspects", "counts"],
217
+ properties: {
218
+ output_mode: { type: "string", enum: ["llm"] },
219
+ schema_version: { type: "string", enum: ["llm"] },
220
+ chart: {
221
+ type: "object",
222
+ additionalProperties: false,
223
+ required: ["chart_type"],
224
+ properties: {
225
+ chart_type: { type: "string", enum: ["natal", "synastry"] },
226
+ subject: {
227
+ type: "object",
228
+ additionalProperties: false,
229
+ properties: {
230
+ datetime: { anyOf: [{ type: "string" }, { type: "null" }] },
231
+ jd: { anyOf: [{ type: "number" }, { type: "null" }] },
232
+ lat: { anyOf: [{ type: "number" }, { type: "null" }] },
233
+ lon: { anyOf: [{ type: "number" }, { type: "null" }] },
234
+ },
235
+ },
236
+ },
237
+ },
238
+ rules: {
239
+ type: "object",
240
+ additionalProperties: false,
241
+ required: [
242
+ "lon_range",
243
+ "aspect_set",
244
+ "strength_basis",
245
+ "point_order_id",
246
+ "core_set_id",
247
+ ],
248
+ properties: {
249
+ zodiac_type: { anyOf: [{ type: "string" }, { type: "null" }] },
250
+ house_system: { anyOf: [{ type: "string" }, { type: "null" }] },
251
+ coordinate_system: { anyOf: [{ type: "string" }, { type: "null" }] },
252
+ node_source: { anyOf: [{ type: "string" }, { type: "null" }] },
253
+ lon_range: { type: "string", enum: ["0_360"] },
254
+ aspect_set: { type: "string", enum: ["major_default"] },
255
+ orb_profile: { anyOf: [{ type: "string" }, { type: "null" }] },
256
+ strength_basis: { type: "string", enum: ["engine"] },
257
+ point_order_id: { type: "string", enum: ["astro_point_order_v1"] },
258
+ core_set_id: { type: "string", enum: ["core_interp_set_v1"] },
259
+ },
260
+ },
261
+ reliability: { type: "object" },
262
+ provenance: {
263
+ type: "object",
264
+ additionalProperties: false,
265
+ required: ["engine", "ephemeris_source", "ephemeris_version"],
266
+ properties: {
267
+ engine: { type: "string" },
268
+ ephemeris_source: { type: "string" },
269
+ ephemeris_version: { type: "string" },
270
+ validation_profile: { anyOf: [{ type: "string" }, { type: "null" }] },
271
+ precision_level: { anyOf: [{ type: "string" }, { type: "null" }] },
272
+ checksum: { anyOf: [{ type: "string" }, { type: "null" }] },
273
+ },
274
+ },
275
+ dict: {
276
+ type: "object",
277
+ additionalProperties: false,
278
+ required: ["sign_id", "aspect_id", "aspect_angle", "kind_id"],
279
+ properties: {
280
+ sign_id: {
281
+ type: "array",
282
+ items: { type: "string" },
283
+ const: LLM_V2_DICT.sign_id,
284
+ },
285
+ aspect_id: {
286
+ type: "array",
287
+ items: { type: "string" },
288
+ const: LLM_V2_DICT.aspect_id,
289
+ },
290
+ aspect_angle: {
291
+ type: "array",
292
+ items: { type: "number" },
293
+ const: LLM_V2_DICT.aspect_angle,
294
+ },
295
+ kind_id: {
296
+ type: "array",
297
+ items: { type: "string" },
298
+ const: LLM_V2_DICT.kind_id,
299
+ },
300
+ },
301
+ },
302
+ present: {
303
+ type: "object",
304
+ additionalProperties: false,
305
+ required: ["point_count", "kinds"],
306
+ properties: {
307
+ point_count: { type: "integer" },
308
+ kinds: { type: "object", additionalProperties: { type: "integer" } },
309
+ },
310
+ },
311
+ points_schema: {
312
+ type: "array",
313
+ items: { type: "string" },
314
+ const: LLM_V2_POINTS_SCHEMA,
315
+ },
316
+ points: {
317
+ type: "array",
318
+ items: {
319
+ type: "array",
320
+ minItems: LLM_V2_POINTS_SCHEMA.length,
321
+ maxItems: LLM_V2_POINTS_SCHEMA.length,
322
+ prefixItems: [
323
+ { type: "string" },
324
+ { type: "string" },
325
+ { type: "integer" },
326
+ { type: "number" },
327
+ { anyOf: [{ type: "number" }, { type: "null" }] },
328
+ { anyOf: [{ type: "number" }, { type: "null" }] },
329
+ { type: "integer" },
330
+ { type: "integer" },
331
+ { type: "number" },
332
+ { anyOf: [{ type: "number" }, { type: "null" }] },
333
+ { anyOf: [{ type: "number" }, { type: "null" }] },
334
+ { type: "integer" },
335
+ { type: "string" },
336
+ { anyOf: [{ type: "number" }, { type: "null" }] },
337
+ { anyOf: [{ type: "number" }, { type: "null" }] },
338
+ { type: "integer" },
339
+ ],
340
+ },
341
+ },
342
+ angles: {
343
+ type: "object",
344
+ additionalProperties: false,
345
+ properties: {
346
+ asc: { anyOf: [{ type: "number" }, { type: "null" }] },
347
+ mc: { anyOf: [{ type: "number" }, { type: "null" }] },
348
+ dsc: { anyOf: [{ type: "number" }, { type: "null" }] },
349
+ ic: { anyOf: [{ type: "number" }, { type: "null" }] },
350
+ },
351
+ },
352
+ houses: {
353
+ type: "object",
354
+ additionalProperties: false,
355
+ required: ["cusps"],
356
+ properties: {
357
+ system: { anyOf: [{ type: "string" }, { type: "null" }] },
358
+ cusps: { type: "array", items: { type: "number" } },
359
+ },
360
+ },
361
+ aspects_schema: {
362
+ type: "array",
363
+ items: { type: "string" },
364
+ const: LLM_V2_ASPECTS_SCHEMA,
365
+ },
366
+ aspects: {
367
+ type: "array",
368
+ items: {
369
+ type: "array",
370
+ minItems: LLM_V2_ASPECTS_SCHEMA.length,
371
+ maxItems: LLM_V2_ASPECTS_SCHEMA.length,
372
+ prefixItems: [
373
+ { type: "integer" },
374
+ { type: "integer" },
375
+ { type: "integer" },
376
+ { type: "number" },
377
+ { type: "number" },
378
+ { type: "integer" },
379
+ { type: "number" },
380
+ ],
381
+ },
382
+ },
383
+ patterns: {
384
+ type: "object",
385
+ additionalProperties: false,
386
+ required: ["stellium", "t_square", "grand_trine", "kite", "yod", "grand_cross"],
387
+ properties: {
388
+ stellium: { type: "array" },
389
+ t_square: { type: "array" },
390
+ grand_trine: { type: "array" },
391
+ kite: { type: "array" },
392
+ yod: { type: "array" },
393
+ grand_cross: { type: "array" },
394
+ },
395
+ },
396
+ extras: {
397
+ type: "object",
398
+ additionalProperties: false,
399
+ required: ["fixed_star_conjunctions", "lots"],
400
+ properties: {
401
+ fixed_star_conjunctions: { type: "array" },
402
+ lots: { type: "array" },
403
+ },
404
+ },
405
+ counts: {
406
+ type: "object",
407
+ additionalProperties: false,
408
+ required: ["point_count", "aspect_count"],
409
+ properties: {
410
+ point_count: { type: "integer" },
411
+ aspect_count: { type: "integer" },
412
+ aspect_count_unfiltered: { type: "integer" },
413
+ midpoint_count: { type: "integer" },
414
+ declination_aspect_count: { type: "integer" },
415
+ stellium_count: { type: "integer" },
416
+ },
417
+ },
418
+ analysis: { type: "object" },
419
+ human_design: {
420
+ type: "object",
421
+ additionalProperties: false,
422
+ required: ["gates_schema", "gates"],
423
+ properties: {
424
+ gates_schema: { type: "array", items: { type: "string" } },
425
+ gates: { type: "array", items: { type: "array" } },
426
+ },
427
+ },
428
+ },
429
+ };
@@ -0,0 +1 @@
1
+ export {};