@adminiumjs/llm 0.1.0-rc.1

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 (126) hide show
  1. package/LICENSE +661 -0
  2. package/dist/apply/diff.d.ts +79 -0
  3. package/dist/apply/diff.d.ts.map +1 -0
  4. package/dist/apply/diff.js +459 -0
  5. package/dist/apply/diff.js.map +1 -0
  6. package/dist/apply/index.d.ts +6 -0
  7. package/dist/apply/index.d.ts.map +1 -0
  8. package/dist/apply/index.js +6 -0
  9. package/dist/apply/index.js.map +1 -0
  10. package/dist/apply/normalize.d.ts +55 -0
  11. package/dist/apply/normalize.d.ts.map +1 -0
  12. package/dist/apply/normalize.js +232 -0
  13. package/dist/apply/normalize.js.map +1 -0
  14. package/dist/apply/plan.d.ts +206 -0
  15. package/dist/apply/plan.d.ts.map +1 -0
  16. package/dist/apply/plan.js +422 -0
  17. package/dist/apply/plan.js.map +1 -0
  18. package/dist/apply/suggestion-id.d.ts +103 -0
  19. package/dist/apply/suggestion-id.d.ts.map +1 -0
  20. package/dist/apply/suggestion-id.js +121 -0
  21. package/dist/apply/suggestion-id.js.map +1 -0
  22. package/dist/crypto.d.ts +48 -0
  23. package/dist/crypto.d.ts.map +1 -0
  24. package/dist/crypto.js +35 -0
  25. package/dist/crypto.js.map +1 -0
  26. package/dist/index.d.ts +17 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +22 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/prompt/builder.d.ts +27 -0
  31. package/dist/prompt/builder.d.ts.map +1 -0
  32. package/dist/prompt/builder.js +263 -0
  33. package/dist/prompt/builder.js.map +1 -0
  34. package/dist/prompt/chunker.d.ts +89 -0
  35. package/dist/prompt/chunker.d.ts.map +1 -0
  36. package/dist/prompt/chunker.js +383 -0
  37. package/dist/prompt/chunker.js.map +1 -0
  38. package/dist/prompt/index.d.ts +14 -0
  39. package/dist/prompt/index.d.ts.map +1 -0
  40. package/dist/prompt/index.js +14 -0
  41. package/dist/prompt/index.js.map +1 -0
  42. package/dist/prompt/serializer.d.ts +138 -0
  43. package/dist/prompt/serializer.d.ts.map +1 -0
  44. package/dist/prompt/serializer.js +178 -0
  45. package/dist/prompt/serializer.js.map +1 -0
  46. package/dist/prompt/templates/v1.d.ts +41 -0
  47. package/dist/prompt/templates/v1.d.ts.map +1 -0
  48. package/dist/prompt/templates/v1.js +312 -0
  49. package/dist/prompt/templates/v1.js.map +1 -0
  50. package/dist/prompt/token-estimate.d.ts +16 -0
  51. package/dist/prompt/token-estimate.d.ts.map +1 -0
  52. package/dist/prompt/token-estimate.js +20 -0
  53. package/dist/prompt/token-estimate.js.map +1 -0
  54. package/dist/prompt/types.d.ts +134 -0
  55. package/dist/prompt/types.d.ts.map +1 -0
  56. package/dist/prompt/types.js +44 -0
  57. package/dist/prompt/types.js.map +1 -0
  58. package/dist/providers/anthropic.d.ts +3 -0
  59. package/dist/providers/anthropic.d.ts.map +1 -0
  60. package/dist/providers/anthropic.js +65 -0
  61. package/dist/providers/anthropic.js.map +1 -0
  62. package/dist/providers/factory.d.ts +3 -0
  63. package/dist/providers/factory.d.ts.map +1 -0
  64. package/dist/providers/factory.js +37 -0
  65. package/dist/providers/factory.js.map +1 -0
  66. package/dist/providers/http.d.ts +56 -0
  67. package/dist/providers/http.d.ts.map +1 -0
  68. package/dist/providers/http.js +148 -0
  69. package/dist/providers/http.js.map +1 -0
  70. package/dist/providers/index.d.ts +15 -0
  71. package/dist/providers/index.d.ts.map +1 -0
  72. package/dist/providers/index.js +15 -0
  73. package/dist/providers/index.js.map +1 -0
  74. package/dist/providers/model-catalog.d.ts +21 -0
  75. package/dist/providers/model-catalog.d.ts.map +1 -0
  76. package/dist/providers/model-catalog.js +121 -0
  77. package/dist/providers/model-catalog.js.map +1 -0
  78. package/dist/providers/ollama.d.ts +3 -0
  79. package/dist/providers/ollama.d.ts.map +1 -0
  80. package/dist/providers/ollama.js +55 -0
  81. package/dist/providers/ollama.js.map +1 -0
  82. package/dist/providers/openai-compatible.d.ts +3 -0
  83. package/dist/providers/openai-compatible.d.ts.map +1 -0
  84. package/dist/providers/openai-compatible.js +50 -0
  85. package/dist/providers/openai-compatible.js.map +1 -0
  86. package/dist/providers/openai.d.ts +18 -0
  87. package/dist/providers/openai.d.ts.map +1 -0
  88. package/dist/providers/openai.js +68 -0
  89. package/dist/providers/openai.js.map +1 -0
  90. package/dist/providers/types.d.ts +112 -0
  91. package/dist/providers/types.d.ts.map +1 -0
  92. package/dist/providers/types.js +55 -0
  93. package/dist/providers/types.js.map +1 -0
  94. package/dist/response/errors.d.ts +60 -0
  95. package/dist/response/errors.d.ts.map +1 -0
  96. package/dist/response/errors.js +101 -0
  97. package/dist/response/errors.js.map +1 -0
  98. package/dist/response/extract.d.ts +38 -0
  99. package/dist/response/extract.d.ts.map +1 -0
  100. package/dist/response/extract.js +77 -0
  101. package/dist/response/extract.js.map +1 -0
  102. package/dist/response/index.d.ts +8 -0
  103. package/dist/response/index.d.ts.map +1 -0
  104. package/dist/response/index.js +8 -0
  105. package/dist/response/index.js.map +1 -0
  106. package/dist/response/merge.d.ts +53 -0
  107. package/dist/response/merge.d.ts.map +1 -0
  108. package/dist/response/merge.js +348 -0
  109. package/dist/response/merge.js.map +1 -0
  110. package/dist/response/referential.d.ts +113 -0
  111. package/dist/response/referential.d.ts.map +1 -0
  112. package/dist/response/referential.js +556 -0
  113. package/dist/response/referential.js.map +1 -0
  114. package/dist/response/schema.d.ts +506 -0
  115. package/dist/response/schema.d.ts.map +1 -0
  116. package/dist/response/schema.js +191 -0
  117. package/dist/response/schema.js.map +1 -0
  118. package/dist/response/validate.d.ts +29 -0
  119. package/dist/response/validate.d.ts.map +1 -0
  120. package/dist/response/validate.js +167 -0
  121. package/dist/response/validate.js.map +1 -0
  122. package/dist/types.d.ts +95 -0
  123. package/dist/types.d.ts.map +1 -0
  124. package/dist/types.js +49 -0
  125. package/dist/types.js.map +1 -0
  126. package/package.json +30 -0
@@ -0,0 +1,191 @@
1
+ /**
2
+ * `LlmResponseV1` — the one response contract shared by the direct-API and BYO
3
+ * paths (06-llm-assist.md §1, §6.1). Shipped verbatim from §6.1: field names
4
+ * and shapes are load-bearing — the golden fixtures in §6.3 and every
5
+ * downstream consumer (validate.ts, normalize.ts, diff.ts) depend on them.
6
+ *
7
+ * ONE intentional adaptation to Zod 4 is marked below (`L10n`): the doc's
8
+ * `z.record(LocaleCode, …)` cannot be used literally — in Zod 3 an enum-keyed
9
+ * record was partial, but in Zod 4 it is exhaustive (every enum key required),
10
+ * which would reject a 2-locale response (§6.3). Nor may the key be a strict
11
+ * enum: §7.2 stage 5 (`LLM_LOCALE_KEYS`) is the SOLE owner of locale-key
12
+ * validation, and it must be per-item — a single stray/non-canonical key (a
13
+ * BCP-47 'en-US', an unrequested 'pt_BR') must drop only that one suggestion,
14
+ * not fail the whole run at Zod (stage 4, fatal). So the key is typed
15
+ * `z.string()`: any string key parses here, and validate.ts checks the exact
16
+ * requested-locale set contextually (Zod alone can't know the run's locale list).
17
+ *
18
+ * Version negotiation (§4.3) is appended after the verbatim schema.
19
+ */
20
+ import { z } from 'zod';
21
+ export const SCHEMA_VERSION = 'adminium.llm/v1';
22
+ export const SUPPORTED_SCHEMA_VERSIONS = [SCHEMA_VERSION];
23
+ export const LOCALES = ['en_US', 'de_DE', 'ar_EG', 'zh_CN', 'zh_TW', 'cs_CZ', 'da_DK', 'fr_FR'];
24
+ export const LocaleCode = z.enum(LOCALES);
25
+ /** Localized text: keys must be exactly the run's requested locales — enforced
26
+ * contextually in validate.ts stage 5 (Zod alone can't know the run's locale
27
+ * list). The key schema is `z.string()`, NOT `LocaleCode`: a stray or
28
+ * non-canonical locale key must be a per-item `LLM_LOCALE_KEYS` drop (stage 5),
29
+ * never a fatal `LLM_SCHEMA_INVALID` at Zod (stage 4) that discards the whole
30
+ * run. The value still enforces a non-empty string. */
31
+ export const L10n = z.record(z.string(), z.string().min(1));
32
+ export const Confidence = z.number().min(0).max(1);
33
+ export const Tone = z.enum(['pos', 'warn', 'danger', 'accent', 'muted']);
34
+ export const PiiKind = z.enum(['email', 'phone', 'name', 'address', 'gov-id', 'dob',
35
+ 'financial', 'credentials', 'health', 'ip', 'location', 'other']);
36
+ export const Masking = z.enum(['mask-email', 'mask-partial', 'last4', 'redact', 'hash', 'none']);
37
+ export const Agg = z.enum(['count', 'sum', 'avg', 'min', 'max']);
38
+ export const RelationKind = z.enum(['many-to-one', 'one-to-one', 'many-to-many-via']);
39
+ const LucideIcon = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'kebab-case lucide icon name');
40
+ const Slug = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/);
41
+ const Reason = z.string().min(1).max(200);
42
+ export const PiiSuggestion = z.object({
43
+ kind: PiiKind, masking: Masking, reason: Reason, confidence: Confidence,
44
+ });
45
+ export const ColumnSuggestion = z.object({
46
+ column: z.string().min(1),
47
+ label: L10n,
48
+ description: L10n.optional(),
49
+ pii: PiiSuggestion.nullable().default(null),
50
+ });
51
+ export const PageTemplateSuggestion = z.object({
52
+ template: z.string().min(1), // membership in LLM_ALLOWED_TEMPLATES checked referentially
53
+ rank: z.number().int().min(1),
54
+ triggers: z.array(z.string()).min(1),
55
+ reason: Reason,
56
+ confidence: Confidence,
57
+ });
58
+ export const Microcopy = z.object({
59
+ emptyState: z.object({ headline: L10n, guidance: L10n }),
60
+ pageSubtitle: L10n,
61
+ });
62
+ export const TableSuggestion = z.object({
63
+ table: z.string().min(1), // qualified "schema.table"
64
+ confidence: Confidence,
65
+ label: L10n,
66
+ description: L10n,
67
+ icon: LucideIcon,
68
+ displayColumn: z.string().nullable(),
69
+ naturalKey: z.array(z.string().min(1)).min(1).nullable(),
70
+ pageTemplates: z.array(PageTemplateSuggestion).max(3).default([]),
71
+ microcopy: Microcopy.optional(),
72
+ columns: z.array(ColumnSuggestion).default([]),
73
+ });
74
+ export const EnumSuggestion = z.object({
75
+ table: z.string().min(1),
76
+ column: z.string().min(1),
77
+ kind: z.enum(['workflow', 'category']),
78
+ order: z.array(z.string()).nullable(), // permutation-checked referentially
79
+ terminal: z.array(z.string()).optional(),
80
+ tones: z.record(z.string(), Tone),
81
+ reason: Reason,
82
+ confidence: Confidence,
83
+ });
84
+ export const ConfirmedRelation = z.object({
85
+ fromTable: z.string(), fromColumns: z.array(z.string()).min(1),
86
+ toTable: z.string(), toColumns: z.array(z.string()).min(1),
87
+ semantics: z.string().max(120),
88
+ correct: z.boolean(),
89
+ confidence: Confidence,
90
+ });
91
+ export const InferredRelation = z.object({
92
+ fromTable: z.string(), fromColumns: z.array(z.string()).min(1),
93
+ toTable: z.string(), toColumns: z.array(z.string()).min(1),
94
+ kind: RelationKind,
95
+ viaTable: z.string().optional(),
96
+ evidence: Reason,
97
+ confidence: Confidence,
98
+ });
99
+ export const NavGroupSuggestion = z.object({
100
+ id: Slug,
101
+ label: L10n,
102
+ icon: LucideIcon,
103
+ order: z.number().int().min(0),
104
+ tables: z.array(z.string()).min(1),
105
+ confidence: Confidence,
106
+ });
107
+ export const WidgetSuggestion = z.object({
108
+ widget: z.string().min(1), // membership in LLM_ALLOWED_WIDGETS checked referentially
109
+ rank: z.number().int().min(1),
110
+ span: z.union([z.literal(3), z.literal(4), z.literal(6), z.literal(8), z.literal(12)]),
111
+ table: z.string().min(1),
112
+ metricColumn: z.string().optional(),
113
+ dimensionColumn: z.string().optional(),
114
+ timeColumn: z.string().optional(),
115
+ agg: Agg.optional(),
116
+ titleEn: z.string().max(60),
117
+ reason: Reason,
118
+ confidence: Confidence,
119
+ });
120
+ export const DashboardSuggestion = z.object({
121
+ id: Slug,
122
+ domain: z.string().max(40),
123
+ label: L10n,
124
+ order: z.number().int().min(0),
125
+ tables: z.array(z.string()).min(1),
126
+ widgets: z.array(WidgetSuggestion).max(8),
127
+ });
128
+ export const LlmResponseV1 = z.object({
129
+ schema_version: z.literal(SCHEMA_VERSION),
130
+ run_id: z.string().optional(),
131
+ error: z.string().optional(), // model-declared inability; if set, all else ignored
132
+ tables: z.array(TableSuggestion).default([]),
133
+ enums: z.array(EnumSuggestion).default([]),
134
+ relations: z.object({
135
+ confirmed: z.array(ConfirmedRelation).default([]),
136
+ inferred: z.array(InferredRelation).default([]),
137
+ }).default({ confirmed: [], inferred: [] }),
138
+ navGroups: z.array(NavGroupSuggestion).max(7).default([]),
139
+ dashboards: z.array(DashboardSuggestion).max(6).default([]),
140
+ notes: z.array(z.string().max(300)).max(5).optional(),
141
+ }).strict();
142
+ // ─── Version negotiation (§4.3) ──────────────────────────────────────────────
143
+ /**
144
+ * Prompt-contract version. §4.3 colocates the authoritative constant in
145
+ * prompt/templates/v1.ts (06-T03); it is mirrored here so the response contract
146
+ * and its version negotiation are self-contained and need no cross-subdir
147
+ * import. Both must stay equal to `'adminium.prompt/v1.1'`.
148
+ *
149
+ * v1 → v1.1: the trigger-taxonomy `page-builder` row was removed from the §5.2
150
+ * user template (page-builder is `recommendable: false` and absent from
151
+ * `LLM_ALLOWED_TEMPLATES`; the taxonomy now matches the injected allowed list) —
152
+ * see prompt/templates/v1.ts. Wording-only; the response contract
153
+ * (`adminium.llm/v1`) is unchanged.
154
+ */
155
+ export const PROMPT_VERSION = 'adminium.prompt/v1.1';
156
+ /** Fatal code raised by stage 3 of the pipeline (§7.2) on an unknown contract. */
157
+ export const VERSION_MISMATCH_CODE = 'LLM_VERSION_MISMATCH';
158
+ /** Rendered verbatim in the paste UI when a response targets an unknown contract (§4.3). */
159
+ export const VERSION_MISMATCH_HINT = 'Regenerate the prompt in Studio (Settings → AI) — this response was produced for an unsupported contract version.';
160
+ /**
161
+ * Predicate: is `version` a contract version this build still validates?
162
+ *
163
+ * When v2 ships, v1 stays in {@link SUPPORTED_SCHEMA_VERSIONS} and keeps
164
+ * validating against the frozen v1 schema (§4.3) — a user may paste a response
165
+ * generated from a prompt downloaded weeks earlier. `supported` is injectable so
166
+ * that forward-compatibility (a supported-but-older version) is testable today.
167
+ */
168
+ export function isSupportedSchemaVersion(version, supported = SUPPORTED_SCHEMA_VERSIONS) {
169
+ return typeof version === 'string' && supported.includes(version);
170
+ }
171
+ /**
172
+ * Negotiate a response's declared `schema_version` (§4.3): a supported version
173
+ * (including a supported-but-older one) resolves `ok`; anything else is a fatal
174
+ * rejection carrying `LLM_VERSION_MISMATCH` and the regeneration hint.
175
+ */
176
+ export function negotiateSchemaVersion(version, supported = SUPPORTED_SCHEMA_VERSIONS) {
177
+ if (isSupportedSchemaVersion(version, supported)) {
178
+ return { ok: true, version };
179
+ }
180
+ const found = typeof version === 'string'
181
+ ? `"${version}"`
182
+ : 'a missing or non-string schema_version';
183
+ return {
184
+ ok: false,
185
+ code: VERSION_MISMATCH_CODE,
186
+ found: version,
187
+ message: `Unsupported schema_version (${found}). ${VERSION_MISMATCH_HINT}`,
188
+ hint: VERSION_MISMATCH_HINT,
189
+ };
190
+ }
191
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/response/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type LlmValidationError } from './errors.js';
2
+ import { type ReferentialContext } from './referential.js';
3
+ import { LlmResponseV1 } from './schema.js';
4
+ /**
5
+ * Everything {@link validateResponse} needs: the referential context (snapshot,
6
+ * locales, registry allow-lists) plus the stage-3 supported-version list and the
7
+ * stage-7 expected run id.
8
+ */
9
+ export interface ValidationContext extends ReferentialContext {
10
+ /** Expected run id (the ULID embedded in the prompt). Enables the §7.2 stage-7 warning. */
11
+ runId?: string;
12
+ /** Override for `SUPPORTED_SCHEMA_VERSIONS` (testable forward-compat, §4.3). */
13
+ supportedVersions?: readonly string[];
14
+ }
15
+ export interface ValidationResult {
16
+ /** The cleaned, validated response — absent iff a fatal error stopped the run. */
17
+ response?: LlmResponseV1;
18
+ /** Fatal + per-item errors, most-actionable first within each stage. */
19
+ errors: LlmValidationError[];
20
+ /** Non-blocking notices (icon fallback, run-id mismatch). */
21
+ warnings: LlmValidationError[];
22
+ }
23
+ /**
24
+ * Validate a raw model reply against the run's snapshot and registries. Runs the
25
+ * full §7.2 pipeline; returns the cleaned response plus every error/warning with
26
+ * a precise JSON path. Never throws.
27
+ */
28
+ export declare function validateResponse(rawText: string, ctx: ValidationContext): ValidationResult;
29
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/response/validate.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAkB,KAAK,kBAAkB,EAAa,MAAM,aAAa,CAAC;AACjF,OAAO,EAIL,KAAK,kBAAkB,EAGxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAA0B,MAAM,aAAa,CAAC;AAEpE;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,wEAAwE;IACxE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG,gBAAgB,CAkF1F"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * The staged validation pipeline (06-llm-assist.md §7.2).
3
+ *
4
+ * 1 extract → recover the JSON object (fences/prose stripped, truncation
5
+ * detected) — fatal
6
+ * 2 parse → `JSON.parse` — fatal
7
+ * 3 version → `schema_version` supported; model-declared `error` key
8
+ * — fatal
9
+ * 4 zod → `LlmResponseV1.safeParse`, issues mapped to paths — fatal
10
+ * 5 locale → every localized object has exactly the run's locales — per-item
11
+ * 6 referential → §7.3 cross-checks vs the snapshot + registries — per-item
12
+ * 7 run-bind → `run_id` present and ≠ ctx.runId — warning
13
+ *
14
+ * Fatal errors reject the whole run (`response` is absent). Per-item errors drop
15
+ * only the offending suggestion (and its dependents) and let the rest through —
16
+ * `response` is the cleaned result. Warnings drop nothing.
17
+ *
18
+ * Browser-safe: only Zod + type-only engine imports flow through here.
19
+ */
20
+ import { extractJsonObject } from './extract.js';
21
+ import { formatJsonPath, makeError } from './errors.js';
22
+ import { applyPrunes, createPrunes, mergePrunes, runReferentialChecks, } from './referential.js';
23
+ import { LlmResponseV1, negotiateSchemaVersion } from './schema.js';
24
+ /**
25
+ * Validate a raw model reply against the run's snapshot and registries. Runs the
26
+ * full §7.2 pipeline; returns the cleaned response plus every error/warning with
27
+ * a precise JSON path. Never throws.
28
+ */
29
+ export function validateResponse(rawText, ctx) {
30
+ const warnings = [];
31
+ // ── Stage 1 — extract ──────────────────────────────────────────────────────
32
+ const extracted = extractJsonObject(rawText);
33
+ if (!extracted.ok)
34
+ return { errors: [extracted.error], warnings };
35
+ // ── Stage 2 — parse ────────────────────────────────────────────────────────
36
+ let parsed;
37
+ try {
38
+ parsed = JSON.parse(extracted.json);
39
+ }
40
+ catch (error) {
41
+ return {
42
+ errors: [makeError('LLM_JSON_PARSE', '', `The response is not valid JSON: ${messageOf(error)}`)],
43
+ warnings,
44
+ };
45
+ }
46
+ const record = typeof parsed === 'object' && parsed !== null ? parsed : {};
47
+ // ── Stage 3 — version + model-declared error ───────────────────────────────
48
+ const negotiation = negotiateSchemaVersion(record.schema_version, ctx.supportedVersions);
49
+ if (!negotiation.ok) {
50
+ return {
51
+ errors: [
52
+ makeError('LLM_VERSION_MISMATCH', 'schema_version', negotiation.message, {
53
+ hint: negotiation.hint,
54
+ }),
55
+ ],
56
+ warnings,
57
+ };
58
+ }
59
+ if (typeof record.error === 'string' && record.error.length > 0) {
60
+ return {
61
+ errors: [
62
+ makeError('LLM_MODEL_DECLINED', 'error', `The model declined to produce enrichment: ${record.error}`),
63
+ ],
64
+ warnings,
65
+ };
66
+ }
67
+ // ── Stage 4 — Zod ──────────────────────────────────────────────────────────
68
+ const zod = LlmResponseV1.safeParse(parsed);
69
+ if (!zod.success) {
70
+ const errors = zod.error.issues.map((issue) => makeError('LLM_SCHEMA_INVALID', formatJsonPath(issue.path), issue.message));
71
+ return { errors, warnings };
72
+ }
73
+ const response = zod.data;
74
+ // ── Stage 5 — locale keys (per-item) ───────────────────────────────────────
75
+ const locale = checkLocales(response, ctx.locales);
76
+ // ── Stage 6 — referential (per-item) ───────────────────────────────────────
77
+ const referential = runReferentialChecks(response, ctx);
78
+ warnings.push(...referential.warnings);
79
+ const errors = [...locale.errors, ...referential.errors];
80
+ const cleaned = applyPrunes(response, mergePrunes(locale.prunes, referential.prunes));
81
+ // ── Stage 7 — run binding (warning) ────────────────────────────────────────
82
+ if (ctx.runId !== undefined &&
83
+ typeof cleaned.run_id === 'string' &&
84
+ cleaned.run_id !== ctx.runId) {
85
+ warnings.push(makeError('LLM_RUN_MISMATCH', 'run_id', 'This response looks like it was generated from a different prompt export.'));
86
+ }
87
+ return { response: cleaned, errors, warnings };
88
+ }
89
+ function localeKeysMatch(obj, expected) {
90
+ if (obj === undefined)
91
+ return true;
92
+ const keys = Object.keys(obj);
93
+ if (keys.length !== expected.size)
94
+ return false;
95
+ return keys.every((key) => expected.has(key));
96
+ }
97
+ function checkLocales(response, locales) {
98
+ const expected = new Set(locales);
99
+ const errors = [];
100
+ const prunes = createPrunes();
101
+ const localeMessage = (obj) => {
102
+ const found = Object.keys(obj);
103
+ return `Localized text must use exactly the requested locales [${[...expected].join(', ')}]; found [${found.join(', ')}]. The suggestion was discarded.`;
104
+ };
105
+ response.tables.forEach((table, i) => {
106
+ if (!localeKeysMatch(table.label, expected)) {
107
+ errors.push(makeError('LLM_LOCALE_KEYS', `tables[${i}].label`, localeMessage(table.label)));
108
+ prunes.tables.add(i);
109
+ return;
110
+ }
111
+ if (!localeKeysMatch(table.description, expected)) {
112
+ errors.push(makeError('LLM_LOCALE_KEYS', `tables[${i}].description`, localeMessage(table.description)));
113
+ prunes.tables.add(i);
114
+ return;
115
+ }
116
+ table.columns.forEach((column, j) => {
117
+ if (!localeKeysMatch(column.label, expected)) {
118
+ errors.push(makeError('LLM_LOCALE_KEYS', `tables[${i}].columns[${j}].label`, localeMessage(column.label)));
119
+ addColumnDrop(prunes, i, j);
120
+ return;
121
+ }
122
+ if (column.description !== undefined && !localeKeysMatch(column.description, expected)) {
123
+ errors.push(makeError('LLM_LOCALE_KEYS', `tables[${i}].columns[${j}].description`, localeMessage(column.description)));
124
+ addColumnDrop(prunes, i, j);
125
+ }
126
+ });
127
+ const microcopy = table.microcopy;
128
+ if (microcopy) {
129
+ const micro = [
130
+ [microcopy.emptyState.headline, `tables[${i}].microcopy.emptyState.headline`],
131
+ [microcopy.emptyState.guidance, `tables[${i}].microcopy.emptyState.guidance`],
132
+ [microcopy.pageSubtitle, `tables[${i}].microcopy.pageSubtitle`],
133
+ ];
134
+ for (const [obj, path] of micro) {
135
+ if (!localeKeysMatch(obj, expected)) {
136
+ errors.push(makeError('LLM_LOCALE_KEYS', path, localeMessage(obj)));
137
+ prunes.dropMicrocopy.add(i);
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ });
143
+ response.navGroups.forEach((group, i) => {
144
+ if (!localeKeysMatch(group.label, expected)) {
145
+ errors.push(makeError('LLM_LOCALE_KEYS', `navGroups[${i}].label`, localeMessage(group.label)));
146
+ prunes.navGroups.add(i);
147
+ }
148
+ });
149
+ response.dashboards.forEach((dashboard, i) => {
150
+ if (!localeKeysMatch(dashboard.label, expected)) {
151
+ errors.push(makeError('LLM_LOCALE_KEYS', `dashboards[${i}].label`, localeMessage(dashboard.label)));
152
+ prunes.dashboards.add(i);
153
+ }
154
+ });
155
+ return { errors, prunes };
156
+ }
157
+ function addColumnDrop(prunes, tableIndex, columnIndex) {
158
+ const set = prunes.columns.get(tableIndex);
159
+ if (set)
160
+ set.add(columnIndex);
161
+ else
162
+ prunes.columns.set(tableIndex, new Set([columnIndex]));
163
+ }
164
+ function messageOf(error) {
165
+ return error instanceof Error ? error.message : String(error);
166
+ }
167
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/response/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Shared `@adminium/llm` contract types (06-llm-assist.md §2, §7.1): the
3
+ * normalized `EnrichmentSet` both paths reduce to, the provider identifiers, and
4
+ * the run status machine.
5
+ *
6
+ * Browser-safe: this module imports only pure-Zod / pure-TS types. The engine
7
+ * reference is a type-only re-export (erased at build time) so no DB-driver code
8
+ * can reach `@adminium/dashboard` through here.
9
+ */
10
+ import { z } from 'zod';
11
+ import type { ConfirmedRelation, DashboardSuggestion, EnumSuggestion, InferredRelation, LocaleCode, Microcopy, NavGroupSuggestion, PiiSuggestion } from './response/schema.js';
12
+ /**
13
+ * The classified schema IR a run is built, validated and normalized against
14
+ * (05-introspection-engine.md). Re-exported here so every `@adminium/llm`
15
+ * module names the model from one place; the referential checks (§7.3) and the
16
+ * heuristic→EnrichmentSet normalizer both consume it. Type-only: no runtime edge
17
+ * to `@adminium/engine`, keeping this package browser-safe.
18
+ */
19
+ export type { DatabaseModel } from '@adminium/engine';
20
+ export declare const PROVIDER_IDS: readonly ["anthropic", "openai", "openai-compatible", "ollama", "adminium-managed"];
21
+ export declare const providerIdSchema: z.ZodEnum<{
22
+ anthropic: "anthropic";
23
+ openai: "openai";
24
+ "openai-compatible": "openai-compatible";
25
+ ollama: "ollama";
26
+ "adminium-managed": "adminium-managed";
27
+ }>;
28
+ export type ProviderId = z.infer<typeof providerIdSchema>;
29
+ /**
30
+ * `adminium_llm_runs.status` states. Transitions (§7.4):
31
+ * draft → running | awaiting_response
32
+ * running | awaiting_response → validated | failed | discarded
33
+ * validated → applied | partially_applied | discarded
34
+ * applied | partially_applied | failed | discarded → (terminal)
35
+ */
36
+ export declare const LLM_RUN_STATUSES: readonly ["draft", "running", "awaiting_response", "validated", "applied", "partially_applied", "failed", "discarded"];
37
+ export declare const llmRunStatusSchema: z.ZodEnum<{
38
+ draft: "draft";
39
+ running: "running";
40
+ awaiting_response: "awaiting_response";
41
+ validated: "validated";
42
+ applied: "applied";
43
+ partially_applied: "partially_applied";
44
+ failed: "failed";
45
+ discarded: "discarded";
46
+ }>;
47
+ export type LlmRunStatus = z.infer<typeof llmRunStatusSchema>;
48
+ /** States a run can never leave (§7.4: "Runs are immutable after `applied`"). */
49
+ export declare const TERMINAL_LLM_RUN_STATUSES: readonly ["applied", "partially_applied", "failed", "discarded"];
50
+ export declare function isTerminalRunStatus(status: LlmRunStatus): boolean;
51
+ /** One table's normalized enrichment (labels, keys, templates, micro-copy, per-column). */
52
+ export interface EnrichmentTable {
53
+ label: Partial<Record<LocaleCode, string>>;
54
+ description?: Partial<Record<LocaleCode, string>>;
55
+ icon?: string;
56
+ displayColumn?: string | null;
57
+ naturalKey?: string[] | null;
58
+ templates: {
59
+ template: string;
60
+ rank: number;
61
+ reason?: string;
62
+ confidence: number;
63
+ }[];
64
+ microcopy?: Microcopy;
65
+ columns: Record<string, {
66
+ label: Partial<Record<LocaleCode, string>>;
67
+ description?: Partial<Record<LocaleCode, string>>;
68
+ pii?: PiiSuggestion | null;
69
+ }>;
70
+ /** heuristic entries use fixed 0.5. */
71
+ confidence: number;
72
+ }
73
+ /**
74
+ * The normalized enrichment both the heuristic baseline (from `@adminium/engine`)
75
+ * and a validated `LlmResponseV1` reduce to, so they diff field-by-field (§7.1).
76
+ * `tables` is keyed by `"schema.table"`; `enums` by `"schema.table.column"`.
77
+ */
78
+ export interface EnrichmentSet {
79
+ source: 'heuristic' | 'llm';
80
+ llmRunId?: string;
81
+ tables: Record<string, EnrichmentTable>;
82
+ enums: Record<string, EnumSuggestion>;
83
+ inferredRelations: InferredRelation[];
84
+ /**
85
+ * Confirmed relations the LLM REJECTS (`correct: false`) — a declared FK it
86
+ * wants suppressed (§8.3 `relation_suppressed`). Carried so the diff can raise
87
+ * a `rejects-heuristic` row a human must confirm (§8.2, acceptance criterion
88
+ * 12); an accepted one never enters a confidence-gated bulk set. The heuristic
89
+ * baseline never populates this (it accepts every declared FK).
90
+ */
91
+ suppressedRelations: ConfirmedRelation[];
92
+ navGroups: NavGroupSuggestion[];
93
+ dashboards: DashboardSuggestion[];
94
+ }
95
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B;;;;;;GAMG;AACH,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,eAAO,MAAM,YAAY,qFAMf,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;;;;EAAuB,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI1D;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,wHASnB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;;;;;EAA2B,CAAC;AAC3D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,kEAKM,CAAC;AAE7C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAEjE;AAID,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,EAAE,MAAM,CACb,MAAM,EACN;QACE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3C,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAClD,GAAG,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;KAC5B,CACF,CAAC;IACF,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACtC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC;;;;;;OAMG;IACH,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;IACzC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC"}
package/dist/types.js ADDED
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Shared `@adminium/llm` contract types (06-llm-assist.md §2, §7.1): the
3
+ * normalized `EnrichmentSet` both paths reduce to, the provider identifiers, and
4
+ * the run status machine.
5
+ *
6
+ * Browser-safe: this module imports only pure-Zod / pure-TS types. The engine
7
+ * reference is a type-only re-export (erased at build time) so no DB-driver code
8
+ * can reach `@adminium/dashboard` through here.
9
+ */
10
+ import { z } from 'zod';
11
+ // ─── Provider identity (§3.1) ────────────────────────────────────────────────
12
+ export const PROVIDER_IDS = [
13
+ 'anthropic',
14
+ 'openai',
15
+ 'openai-compatible',
16
+ 'ollama',
17
+ 'adminium-managed',
18
+ ];
19
+ export const providerIdSchema = z.enum(PROVIDER_IDS);
20
+ // ─── Run status machine (§7.4) ───────────────────────────────────────────────
21
+ /**
22
+ * `adminium_llm_runs.status` states. Transitions (§7.4):
23
+ * draft → running | awaiting_response
24
+ * running | awaiting_response → validated | failed | discarded
25
+ * validated → applied | partially_applied | discarded
26
+ * applied | partially_applied | failed | discarded → (terminal)
27
+ */
28
+ export const LLM_RUN_STATUSES = [
29
+ 'draft',
30
+ 'running',
31
+ 'awaiting_response',
32
+ 'validated',
33
+ 'applied',
34
+ 'partially_applied',
35
+ 'failed',
36
+ 'discarded',
37
+ ];
38
+ export const llmRunStatusSchema = z.enum(LLM_RUN_STATUSES);
39
+ /** States a run can never leave (§7.4: "Runs are immutable after `applied`"). */
40
+ export const TERMINAL_LLM_RUN_STATUSES = [
41
+ 'applied',
42
+ 'partially_applied',
43
+ 'failed',
44
+ 'discarded',
45
+ ];
46
+ export function isTerminalRunStatus(status) {
47
+ return TERMINAL_LLM_RUN_STATUSES.includes(status);
48
+ }
49
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW;IACX,QAAQ;IACR,mBAAmB;IACnB,QAAQ;IACR,kBAAkB;CACV,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAGrD,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO;IACP,SAAS;IACT,mBAAmB;IACnB,WAAW;IACX,SAAS;IACT,mBAAmB;IACnB,QAAQ;IACR,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAG3D,iFAAiF;AACjF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,SAAS;IACT,mBAAmB;IACnB,QAAQ;IACR,WAAW;CAC+B,CAAC;AAE7C,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,OAAQ,yBAAqD,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@adminiumjs/llm",
3
+ "version": "0.1.0-rc.1",
4
+ "license": "AGPL-3.0-only",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/MoSofi/Adminium.git",
8
+ "directory": "packages/llm"
9
+ },
10
+ "homepage": "https://adminium.dev",
11
+ "bugs": "https://github.com/MoSofi/Adminium/issues",
12
+ "type": "module",
13
+ "description": "LLM assist: provider clients, prompt builder, BYO round-trip",
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "@adminium/engine": "npm:@adminiumjs/engine@0.1.0-rc.1",
24
+ "@adminium/widgets": "npm:@adminiumjs/widgets@0.1.0-rc.1",
25
+ "zod": "^4.4.3"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ]
30
+ }