@happyvertical/smrt-languages 0.46.0 → 0.47.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.
- package/AGENTS.md +27 -0
- package/dist/chunks/{language-registry-CFy0NLWX.js → language-registry-BUnsVanY.js} +20 -3
- package/dist/chunks/language-registry-BUnsVanY.js.map +1 -0
- package/dist/chunks/{translation-job-BwjpZvfT.js → translation-job-C4YLXz8M.js} +2 -2
- package/dist/chunks/{translation-job-BwjpZvfT.js.map → translation-job-C4YLXz8M.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/jobs.js +1 -1
- package/dist/manifest.json +176 -164
- package/dist/smrt-knowledge.json +272 -247
- package/package.json +13 -13
- package/dist/chunks/language-registry-CFy0NLWX.js.map +0 -1
package/dist/smrt-knowledge.json
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"sensitiveFieldsExcluded": true,
|
|
4
4
|
"generatedAt": "1970-01-01T00:00:00.000Z",
|
|
5
5
|
"packageName": "@happyvertical/smrt-languages",
|
|
6
|
-
"packageVersion": "0.
|
|
6
|
+
"packageVersion": "0.47.1",
|
|
7
7
|
"sourceManifestPath": "dist/manifest.json",
|
|
8
8
|
"agentDocPath": "AGENTS.md",
|
|
9
9
|
"sourceHashes": {
|
|
10
|
-
"manifest": "
|
|
11
|
-
"packageJson": "
|
|
12
|
-
"agents": "
|
|
10
|
+
"manifest": "5c26e710ef9abd4467b3b4876bbfd354861b67bf40054b8c8c2e9c63d7942846",
|
|
11
|
+
"packageJson": "711f9c161aaaa6a054aee0c25161ba13ea6de1e71335978cfedcf55b5c3cda9b",
|
|
12
|
+
"agents": "01ffc8428512e53dd3c5d2ffbc21f1ae700b7599f8409ca03d9c045a7cae755c"
|
|
13
13
|
},
|
|
14
14
|
"exports": [
|
|
15
15
|
".",
|
|
@@ -76,6 +76,186 @@
|
|
|
76
76
|
}
|
|
77
77
|
],
|
|
78
78
|
"surfaces": [],
|
|
79
|
+
"withheldSurfaces": [
|
|
80
|
+
{
|
|
81
|
+
"kind": "api",
|
|
82
|
+
"operation": "execute",
|
|
83
|
+
"code": "not-included",
|
|
84
|
+
"reason": "not listed in api.include",
|
|
85
|
+
"objectName": "@happyvertical/smrt-languages:LanguageTranslationTask"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"relationshipFeatures": [
|
|
89
|
+
"uuidColumns"
|
|
90
|
+
],
|
|
91
|
+
"tags": [],
|
|
92
|
+
"risks": []
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "LanguageOverrideCollection",
|
|
96
|
+
"qualifiedName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
97
|
+
"collection": "languageoverrides",
|
|
98
|
+
"tableName": "_smrt_language_overrides",
|
|
99
|
+
"packageName": "@happyvertical/smrt-languages",
|
|
100
|
+
"extends": "SmrtCollection",
|
|
101
|
+
"fields": [],
|
|
102
|
+
"relationships": [],
|
|
103
|
+
"methods": [
|
|
104
|
+
"getAppOverride",
|
|
105
|
+
"getResolutionLayers",
|
|
106
|
+
"getTenantOverride",
|
|
107
|
+
"listTenantOverrides",
|
|
108
|
+
"listUnreviewedAutoTranslations"
|
|
109
|
+
],
|
|
110
|
+
"methodSignatures": [
|
|
111
|
+
{
|
|
112
|
+
"name": "getAppOverride",
|
|
113
|
+
"async": true,
|
|
114
|
+
"params": [
|
|
115
|
+
"key: string",
|
|
116
|
+
"locale: string"
|
|
117
|
+
],
|
|
118
|
+
"returns": "Promise<LanguageOverride | null>"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "getResolutionLayers",
|
|
122
|
+
"async": true,
|
|
123
|
+
"params": [
|
|
124
|
+
"key: string",
|
|
125
|
+
"locale: string",
|
|
126
|
+
"tenantId?: string | null"
|
|
127
|
+
],
|
|
128
|
+
"returns": "Promise<object>"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"name": "getTenantOverride",
|
|
132
|
+
"async": true,
|
|
133
|
+
"params": [
|
|
134
|
+
"key: string",
|
|
135
|
+
"locale: string",
|
|
136
|
+
"tenantId: string"
|
|
137
|
+
],
|
|
138
|
+
"returns": "Promise<LanguageOverride | null>"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "listTenantOverrides",
|
|
142
|
+
"async": true,
|
|
143
|
+
"params": [
|
|
144
|
+
"tenantId: string"
|
|
145
|
+
],
|
|
146
|
+
"returns": "Promise<LanguageOverride[]>"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"name": "listUnreviewedAutoTranslations",
|
|
150
|
+
"async": true,
|
|
151
|
+
"params": [
|
|
152
|
+
"options?: object"
|
|
153
|
+
],
|
|
154
|
+
"returns": "Promise<LanguageOverride[]>"
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
"surfaces": [
|
|
158
|
+
{
|
|
159
|
+
"kind": "api",
|
|
160
|
+
"name": "languageoverrides.getAppOverride",
|
|
161
|
+
"operation": "getAppOverride",
|
|
162
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
163
|
+
"path": "/languageoverrides/getAppOverride",
|
|
164
|
+
"method": "POST"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"kind": "api",
|
|
168
|
+
"name": "languageoverrides.getTenantOverride",
|
|
169
|
+
"operation": "getTenantOverride",
|
|
170
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
171
|
+
"path": "/languageoverrides/getTenantOverride",
|
|
172
|
+
"method": "POST"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"kind": "api",
|
|
176
|
+
"name": "languageoverrides.getResolutionLayers",
|
|
177
|
+
"operation": "getResolutionLayers",
|
|
178
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
179
|
+
"path": "/languageoverrides/getResolutionLayers",
|
|
180
|
+
"method": "POST"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"kind": "api",
|
|
184
|
+
"name": "languageoverrides.listTenantOverrides",
|
|
185
|
+
"operation": "listTenantOverrides",
|
|
186
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
187
|
+
"path": "/languageoverrides/listTenantOverrides",
|
|
188
|
+
"method": "POST"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"kind": "api",
|
|
192
|
+
"name": "languageoverrides.listUnreviewedAutoTranslations",
|
|
193
|
+
"operation": "listUnreviewedAutoTranslations",
|
|
194
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
195
|
+
"path": "/languageoverrides/listUnreviewedAutoTranslations",
|
|
196
|
+
"method": "POST"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"kind": "cli",
|
|
200
|
+
"name": "languageoverridecollection_getAppOverride",
|
|
201
|
+
"operation": "getAppOverride",
|
|
202
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"kind": "cli",
|
|
206
|
+
"name": "languageoverridecollection_getTenantOverride",
|
|
207
|
+
"operation": "getTenantOverride",
|
|
208
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"kind": "cli",
|
|
212
|
+
"name": "languageoverridecollection_getResolutionLayers",
|
|
213
|
+
"operation": "getResolutionLayers",
|
|
214
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"kind": "cli",
|
|
218
|
+
"name": "languageoverridecollection_listTenantOverrides",
|
|
219
|
+
"operation": "listTenantOverrides",
|
|
220
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"kind": "cli",
|
|
224
|
+
"name": "languageoverridecollection_listUnreviewedAutoTranslations",
|
|
225
|
+
"operation": "listUnreviewedAutoTranslations",
|
|
226
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"kind": "mcp",
|
|
230
|
+
"name": "languageoverridecollection_getappoverride",
|
|
231
|
+
"operation": "getAppOverride",
|
|
232
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"kind": "mcp",
|
|
236
|
+
"name": "languageoverridecollection_gettenantoverride",
|
|
237
|
+
"operation": "getTenantOverride",
|
|
238
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"kind": "mcp",
|
|
242
|
+
"name": "languageoverridecollection_getresolutionlayers",
|
|
243
|
+
"operation": "getResolutionLayers",
|
|
244
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"kind": "mcp",
|
|
248
|
+
"name": "languageoverridecollection_listtenantoverrides",
|
|
249
|
+
"operation": "listTenantOverrides",
|
|
250
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"kind": "mcp",
|
|
254
|
+
"name": "languageoverridecollection_listunreviewedautotranslations",
|
|
255
|
+
"operation": "listUnreviewedAutoTranslations",
|
|
256
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
257
|
+
}
|
|
258
|
+
],
|
|
79
259
|
"relationshipFeatures": [
|
|
80
260
|
"uuidColumns"
|
|
81
261
|
],
|
|
@@ -161,7 +341,7 @@
|
|
|
161
341
|
"params": [
|
|
162
342
|
"reviewerId: string"
|
|
163
343
|
],
|
|
164
|
-
"returns": "Promise"
|
|
344
|
+
"returns": "Promise<this>"
|
|
165
345
|
},
|
|
166
346
|
{
|
|
167
347
|
"name": "delete",
|
|
@@ -171,7 +351,7 @@
|
|
|
171
351
|
{
|
|
172
352
|
"name": "save",
|
|
173
353
|
"async": true,
|
|
174
|
-
"returns": "Promise"
|
|
354
|
+
"returns": "Promise<this>"
|
|
175
355
|
}
|
|
176
356
|
],
|
|
177
357
|
"conflictColumns": [
|
|
@@ -257,175 +437,20 @@
|
|
|
257
437
|
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
258
438
|
}
|
|
259
439
|
],
|
|
260
|
-
"
|
|
261
|
-
"uuidColumns"
|
|
262
|
-
],
|
|
263
|
-
"tags": [],
|
|
264
|
-
"risks": []
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
"name": "LanguageOverrideCollection",
|
|
268
|
-
"qualifiedName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
269
|
-
"collection": "languageoverrides",
|
|
270
|
-
"tableName": "_smrt_language_overrides",
|
|
271
|
-
"packageName": "@happyvertical/smrt-languages",
|
|
272
|
-
"extends": "SmrtCollection",
|
|
273
|
-
"fields": [],
|
|
274
|
-
"relationships": [],
|
|
275
|
-
"methods": [
|
|
276
|
-
"getAppOverride",
|
|
277
|
-
"getResolutionLayers",
|
|
278
|
-
"getTenantOverride",
|
|
279
|
-
"listTenantOverrides",
|
|
280
|
-
"listUnreviewedAutoTranslations"
|
|
281
|
-
],
|
|
282
|
-
"methodSignatures": [
|
|
283
|
-
{
|
|
284
|
-
"name": "getAppOverride",
|
|
285
|
-
"async": true,
|
|
286
|
-
"params": [
|
|
287
|
-
"key: string",
|
|
288
|
-
"locale: string"
|
|
289
|
-
],
|
|
290
|
-
"returns": "Promise<LanguageOverride | null>"
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
"name": "getResolutionLayers",
|
|
294
|
-
"async": true,
|
|
295
|
-
"params": [
|
|
296
|
-
"key: string",
|
|
297
|
-
"locale: string",
|
|
298
|
-
"tenantId?: string | null"
|
|
299
|
-
],
|
|
300
|
-
"returns": "Promise<object>"
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
"name": "getTenantOverride",
|
|
304
|
-
"async": true,
|
|
305
|
-
"params": [
|
|
306
|
-
"key: string",
|
|
307
|
-
"locale: string",
|
|
308
|
-
"tenantId: string"
|
|
309
|
-
],
|
|
310
|
-
"returns": "Promise<LanguageOverride | null>"
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
"name": "listTenantOverrides",
|
|
314
|
-
"async": true,
|
|
315
|
-
"params": [
|
|
316
|
-
"tenantId: string"
|
|
317
|
-
],
|
|
318
|
-
"returns": "Promise<LanguageOverride[]>"
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
"name": "listUnreviewedAutoTranslations",
|
|
322
|
-
"async": true,
|
|
323
|
-
"params": [
|
|
324
|
-
"options?: object"
|
|
325
|
-
],
|
|
326
|
-
"returns": "Promise<LanguageOverride[]>"
|
|
327
|
-
}
|
|
328
|
-
],
|
|
329
|
-
"surfaces": [
|
|
330
|
-
{
|
|
331
|
-
"kind": "api",
|
|
332
|
-
"name": "languageoverrides.getAppOverride",
|
|
333
|
-
"operation": "getAppOverride",
|
|
334
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
335
|
-
"path": "/languageoverrides/getAppOverride",
|
|
336
|
-
"method": "POST"
|
|
337
|
-
},
|
|
338
|
-
{
|
|
339
|
-
"kind": "api",
|
|
340
|
-
"name": "languageoverrides.getTenantOverride",
|
|
341
|
-
"operation": "getTenantOverride",
|
|
342
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
343
|
-
"path": "/languageoverrides/getTenantOverride",
|
|
344
|
-
"method": "POST"
|
|
345
|
-
},
|
|
440
|
+
"withheldSurfaces": [
|
|
346
441
|
{
|
|
347
442
|
"kind": "api",
|
|
348
|
-
"
|
|
349
|
-
"
|
|
350
|
-
"
|
|
351
|
-
"
|
|
352
|
-
"method": "POST"
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
"kind": "api",
|
|
356
|
-
"name": "languageoverrides.listTenantOverrides",
|
|
357
|
-
"operation": "listTenantOverrides",
|
|
358
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection",
|
|
359
|
-
"path": "/languageoverrides/listTenantOverrides",
|
|
360
|
-
"method": "POST"
|
|
443
|
+
"operation": "approve",
|
|
444
|
+
"code": "not-included",
|
|
445
|
+
"reason": "not listed in api.include",
|
|
446
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
361
447
|
},
|
|
362
448
|
{
|
|
363
449
|
"kind": "api",
|
|
364
|
-
"
|
|
365
|
-
"
|
|
366
|
-
"
|
|
367
|
-
"
|
|
368
|
-
"method": "POST"
|
|
369
|
-
},
|
|
370
|
-
{
|
|
371
|
-
"kind": "cli",
|
|
372
|
-
"name": "languageoverridecollection_getAppOverride",
|
|
373
|
-
"operation": "getAppOverride",
|
|
374
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
375
|
-
},
|
|
376
|
-
{
|
|
377
|
-
"kind": "cli",
|
|
378
|
-
"name": "languageoverridecollection_getTenantOverride",
|
|
379
|
-
"operation": "getTenantOverride",
|
|
380
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
381
|
-
},
|
|
382
|
-
{
|
|
383
|
-
"kind": "cli",
|
|
384
|
-
"name": "languageoverridecollection_getResolutionLayers",
|
|
385
|
-
"operation": "getResolutionLayers",
|
|
386
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
387
|
-
},
|
|
388
|
-
{
|
|
389
|
-
"kind": "cli",
|
|
390
|
-
"name": "languageoverridecollection_listTenantOverrides",
|
|
391
|
-
"operation": "listTenantOverrides",
|
|
392
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
393
|
-
},
|
|
394
|
-
{
|
|
395
|
-
"kind": "cli",
|
|
396
|
-
"name": "languageoverridecollection_listUnreviewedAutoTranslations",
|
|
397
|
-
"operation": "listUnreviewedAutoTranslations",
|
|
398
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
399
|
-
},
|
|
400
|
-
{
|
|
401
|
-
"kind": "mcp",
|
|
402
|
-
"name": "languageoverridecollection_getappoverride",
|
|
403
|
-
"operation": "getAppOverride",
|
|
404
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
405
|
-
},
|
|
406
|
-
{
|
|
407
|
-
"kind": "mcp",
|
|
408
|
-
"name": "languageoverridecollection_gettenantoverride",
|
|
409
|
-
"operation": "getTenantOverride",
|
|
410
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
411
|
-
},
|
|
412
|
-
{
|
|
413
|
-
"kind": "mcp",
|
|
414
|
-
"name": "languageoverridecollection_getresolutionlayers",
|
|
415
|
-
"operation": "getResolutionLayers",
|
|
416
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
417
|
-
},
|
|
418
|
-
{
|
|
419
|
-
"kind": "mcp",
|
|
420
|
-
"name": "languageoverridecollection_listtenantoverrides",
|
|
421
|
-
"operation": "listTenantOverrides",
|
|
422
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
"kind": "mcp",
|
|
426
|
-
"name": "languageoverridecollection_listunreviewedautotranslations",
|
|
427
|
-
"operation": "listUnreviewedAutoTranslations",
|
|
428
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
450
|
+
"operation": "save",
|
|
451
|
+
"code": "lifecycle-method",
|
|
452
|
+
"reason": "`save` is a framework lifecycle method, not a distinct operation",
|
|
453
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
429
454
|
}
|
|
430
455
|
],
|
|
431
456
|
"relationshipFeatures": [
|
|
@@ -436,82 +461,6 @@
|
|
|
436
461
|
}
|
|
437
462
|
],
|
|
438
463
|
"surfaces": [
|
|
439
|
-
{
|
|
440
|
-
"kind": "api",
|
|
441
|
-
"name": "languageoverrides.list",
|
|
442
|
-
"operation": "list",
|
|
443
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
444
|
-
"path": "/languageoverrides",
|
|
445
|
-
"method": "GET"
|
|
446
|
-
},
|
|
447
|
-
{
|
|
448
|
-
"kind": "api",
|
|
449
|
-
"name": "languageoverrides.get",
|
|
450
|
-
"operation": "get",
|
|
451
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
452
|
-
"path": "/languageoverrides/[id]",
|
|
453
|
-
"method": "GET"
|
|
454
|
-
},
|
|
455
|
-
{
|
|
456
|
-
"kind": "api",
|
|
457
|
-
"name": "languageoverrides.create",
|
|
458
|
-
"operation": "create",
|
|
459
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
460
|
-
"path": "/languageoverrides",
|
|
461
|
-
"method": "POST"
|
|
462
|
-
},
|
|
463
|
-
{
|
|
464
|
-
"kind": "api",
|
|
465
|
-
"name": "languageoverrides.update",
|
|
466
|
-
"operation": "update",
|
|
467
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
468
|
-
"path": "/languageoverrides/[id]",
|
|
469
|
-
"method": "PATCH"
|
|
470
|
-
},
|
|
471
|
-
{
|
|
472
|
-
"kind": "api",
|
|
473
|
-
"name": "languageoverrides.delete",
|
|
474
|
-
"operation": "delete",
|
|
475
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
476
|
-
"path": "/languageoverrides/[id]",
|
|
477
|
-
"method": "DELETE"
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
"kind": "cli",
|
|
481
|
-
"name": "languageoverride_list",
|
|
482
|
-
"operation": "list",
|
|
483
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
484
|
-
},
|
|
485
|
-
{
|
|
486
|
-
"kind": "cli",
|
|
487
|
-
"name": "languageoverride_get",
|
|
488
|
-
"operation": "get",
|
|
489
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
490
|
-
},
|
|
491
|
-
{
|
|
492
|
-
"kind": "cli",
|
|
493
|
-
"name": "languageoverride_create",
|
|
494
|
-
"operation": "create",
|
|
495
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
496
|
-
},
|
|
497
|
-
{
|
|
498
|
-
"kind": "cli",
|
|
499
|
-
"name": "languageoverride_update",
|
|
500
|
-
"operation": "update",
|
|
501
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
502
|
-
},
|
|
503
|
-
{
|
|
504
|
-
"kind": "cli",
|
|
505
|
-
"name": "languageoverride_delete",
|
|
506
|
-
"operation": "delete",
|
|
507
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
508
|
-
},
|
|
509
|
-
{
|
|
510
|
-
"kind": "cli",
|
|
511
|
-
"name": "languageoverride_approve",
|
|
512
|
-
"operation": "approve",
|
|
513
|
-
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
514
|
-
},
|
|
515
464
|
{
|
|
516
465
|
"kind": "api",
|
|
517
466
|
"name": "languageoverrides.getAppOverride",
|
|
@@ -611,6 +560,82 @@
|
|
|
611
560
|
"name": "languageoverridecollection_listunreviewedautotranslations",
|
|
612
561
|
"operation": "listUnreviewedAutoTranslations",
|
|
613
562
|
"objectName": "@happyvertical/smrt-languages:LanguageOverrideCollection"
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"kind": "api",
|
|
566
|
+
"name": "languageoverrides.list",
|
|
567
|
+
"operation": "list",
|
|
568
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
569
|
+
"path": "/languageoverrides",
|
|
570
|
+
"method": "GET"
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"kind": "api",
|
|
574
|
+
"name": "languageoverrides.get",
|
|
575
|
+
"operation": "get",
|
|
576
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
577
|
+
"path": "/languageoverrides/[id]",
|
|
578
|
+
"method": "GET"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"kind": "api",
|
|
582
|
+
"name": "languageoverrides.create",
|
|
583
|
+
"operation": "create",
|
|
584
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
585
|
+
"path": "/languageoverrides",
|
|
586
|
+
"method": "POST"
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"kind": "api",
|
|
590
|
+
"name": "languageoverrides.update",
|
|
591
|
+
"operation": "update",
|
|
592
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
593
|
+
"path": "/languageoverrides/[id]",
|
|
594
|
+
"method": "PATCH"
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
"kind": "api",
|
|
598
|
+
"name": "languageoverrides.delete",
|
|
599
|
+
"operation": "delete",
|
|
600
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride",
|
|
601
|
+
"path": "/languageoverrides/[id]",
|
|
602
|
+
"method": "DELETE"
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"kind": "cli",
|
|
606
|
+
"name": "languageoverride_list",
|
|
607
|
+
"operation": "list",
|
|
608
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"kind": "cli",
|
|
612
|
+
"name": "languageoverride_get",
|
|
613
|
+
"operation": "get",
|
|
614
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
"kind": "cli",
|
|
618
|
+
"name": "languageoverride_create",
|
|
619
|
+
"operation": "create",
|
|
620
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
"kind": "cli",
|
|
624
|
+
"name": "languageoverride_update",
|
|
625
|
+
"operation": "update",
|
|
626
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"kind": "cli",
|
|
630
|
+
"name": "languageoverride_delete",
|
|
631
|
+
"operation": "delete",
|
|
632
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
"kind": "cli",
|
|
636
|
+
"name": "languageoverride_approve",
|
|
637
|
+
"operation": "approve",
|
|
638
|
+
"objectName": "@happyvertical/smrt-languages:LanguageOverride"
|
|
614
639
|
}
|
|
615
640
|
],
|
|
616
641
|
"prompts": [
|
|
@@ -626,5 +651,5 @@
|
|
|
626
651
|
"polymorphicAssociations": 0,
|
|
627
652
|
"uuidColumns": 3
|
|
628
653
|
},
|
|
629
|
-
"agentDoc": "# languages\n\nSMRT language string registry with file/config + tenant overrides and AI-driven\nauto-translation for missing locales.\n\n## Core pieces\n\n- `defineLanguageString({ key, locale, template })` registers a code default in\n a global process registry. Same shape as `definePrompt` but keyed by\n `(key, locale)` rather than `key` alone.\n- `resolveLanguageString(key, options)` walks the 5-layer chain (code → file\n config → app override → tenant override → runtime override) and falls back\n through the locale chain (`fr-CA` → `fr` → default) before giving up.\n- `LanguageOverride` stores app-level and tenant-level overrides in\n `_smrt_language_overrides`. `auto_generated`, `source_hash`, `ai_model`,\n `reviewed_at`, `reviewed_by` fields support the AI auto-translation pipeline\n and admin review queue.\n- `enqueueTranslationJob({ key, targetLocale })` writes a `LanguageTranslationTask`\n job into the `languages` queue with a deterministic dedup ID so concurrent\n resolver misses collapse into one job.\n\n## Locale-miss flow\n\nWhen `resolveLanguageString` cannot find an exact `(key, locale, tenantId)`:\n\n1. Walk the locale fallback chain (`buildLocaleFallbackChain`).\n2. Return the first hit — same call returns immediately with\n `source: 'fallback'`.\n3. Fire-and-forget `enqueueTranslationJob` for the missing target, scoped to\n the current tenant for glossary purposes. App-level translations are\n reusable across tenants, so the resulting `LanguageOverride` row is written\n with `tenantId: null`.\n4. Subsequent requests hit the new app-level row and resolve at the requested\n locale.\n\nThe translation job:\n\n- Honors the `smrt-languages.auto_translate` feature flag (kill switch).\n- Skips locales outside `supportedLocales` when configured.\n- Skips when `LanguageOverride` already exists with a matching `source_hash`\n (re-translation is hash-gated, never time-based).\n- Never overwrites a row with `auto_generated: false` — human edits win\n permanently.\n- Pulls the tenant's existing overrides and renders them as a glossary so\n auto-translations match tenant voice.\n\n## Conventions\n\n- Keys are namespaced by package: `users.role.member`, `commerce.invoice.dueText`.\n- Locales follow BCP-47 (`en`, `fr-CA`, `pt-BR`) and are normalized to\n lowercase-language / uppercase-region on persistence.\n- The translation prompt itself is registered with `smrt-prompts` under\n `smrt-languages.translation` so ops can tune wording without redeploying.\n- `context` column on `_smrt_language_overrides` is set to `tenantId` or\n `'__app__'` so the `(key, locale, context)` upsert key remains unique even\n with nullable `tenantId`.\n\n## Public API surface\n\n```typescript\nimport {\n defineLanguageString,\n resolveLanguageString,\n LanguageOverride,\n LanguageOverrideCollection,\n clearLanguageCache,\n} from '@happyvertical/smrt-languages';\n\ndefineLanguageString({\n key: 'users.role.member',\n locale: 'en',\n template: 'Member',\n});\n\nconst text = await resolveLanguageString('users.role.member', {\n db,\n tenantId: 'tenant-a',\n locale: 'es',\n vars: { name: 'Will' },\n});\n```\n"
|
|
654
|
+
"agentDoc": "# languages\n\nSMRT language string registry with file/config + tenant overrides and AI-driven\nauto-translation for missing locales.\n\n## Core pieces\n\n- `defineLanguageString({ key, locale, template })` registers a code default in\n a global process registry. Same shape as `definePrompt` but keyed by\n `(key, locale)` rather than `key` alone.\n- `resolveLanguageString(key, options)` walks the 5-layer chain (code → file\n config → app override → tenant override → runtime override) and falls back\n through the locale chain (`fr-CA` → `fr` → default) before giving up.\n- `LanguageOverride` stores app-level and tenant-level overrides in\n `_smrt_language_overrides`. `auto_generated`, `source_hash`, `ai_model`,\n `reviewed_at`, `reviewed_by` fields support the AI auto-translation pipeline\n and admin review queue.\n- `enqueueTranslationJob({ key, targetLocale })` writes a `LanguageTranslationTask`\n job into the `languages` queue with a deterministic dedup ID so concurrent\n resolver misses collapse into one job.\n\n## Locale-miss flow\n\nWhen `resolveLanguageString` cannot find an exact `(key, locale, tenantId)`:\n\n1. Walk the locale fallback chain (`buildLocaleFallbackChain`).\n2. Return the first hit — same call returns immediately with\n `source: 'fallback'`.\n3. Fire-and-forget `enqueueTranslationJob` for the missing target, scoped to\n the current tenant for glossary purposes. App-level translations are\n reusable across tenants, so the resulting `LanguageOverride` row is written\n with `tenantId: null`.\n4. Subsequent requests hit the new app-level row and resolve at the requested\n locale.\n\nThe translation job:\n\n- Honors the `smrt-languages.auto_translate` feature flag (kill switch).\n- Skips locales outside `supportedLocales` when configured.\n- Skips when `LanguageOverride` already exists with a matching `source_hash`\n (re-translation is hash-gated, never time-based).\n- Never overwrites a row with `auto_generated: false` — human edits win\n permanently.\n- Pulls the tenant's existing overrides and renders them as a glossary so\n auto-translations match tenant voice.\n\n## Conventions\n\n- Keys are namespaced by package: `users.role.member`, `commerce.invoice.dueText`.\n- Locales follow BCP-47 (`en`, `fr-CA`, `pt-BR`) and are normalized to\n lowercase-language / uppercase-region on persistence.\n- The translation prompt itself is registered with `smrt-prompts` under\n `smrt-languages.translation` so ops can tune wording without redeploying.\n- `context` column on `_smrt_language_overrides` is set to `tenantId` or\n `'__app__'` so the `(key, locale, context)` upsert key remains unique even\n with nullable `tenantId`.\n\n## Caching\n\n`resolveLanguageString()` results are cached per `(db, key, locale, tenantId)`\nwith a TTL, invalidated on `LanguageOverride.save()` / `.delete()` (both\nidentities when one changes) and by the translation job. An app-level write\n(`tenantId = null`) clears every tenant's entry for that `(key, locale)`. Use\n`clearLanguageCache()` in tests.\n\n**A monotonic per-`(db, key, locale)` invalidation generation guards the cache\nwrite.** A resolution captures `getLanguageCacheGeneration(key, locale, db)`\nbefore its asynchronous layer loads and hands it back to `setCachedLanguage()`;\na concurrent write bumps the generation and the in-flight resolution is then\nrefused the cache write instead of repopulating the entry it just invalidated\nwith the pre-write value. Without it, a read that raced a write served the\npre-write value for the full 30s TTL, and a raced `delete()` resurrected the\ndeleted override. The generation includes `locale` — unlike `smrt-playbooks`\nand `smrt-prompts`, which have no locale dimension — because every layer a\ncached entry is built from is read at exactly the locale it is cached under:\nthe fallback chain (`fr-CA` → `fr` → `en`) resolves each locale independently\nand an attempt that resolves nothing caches nothing, so a fallback hit is never\nstored under the requested locale. It deliberately excludes `tenantId`, because\nan app-level row is inherited by every tenant. `clearLanguageCache()` raises a\nsingle floor (`clearedThrough`) rather than resetting or per-entry bumping: a\n`(key, locale)` that has never been invalidated has no map entry and reads as\ngeneration 0, so a per-entry bump cannot reach it and a resolution that started\nbefore the clear would write its pre-clear value back.\n\n## Public API surface\n\n```typescript\nimport {\n defineLanguageString,\n resolveLanguageString,\n LanguageOverride,\n LanguageOverrideCollection,\n clearLanguageCache,\n} from '@happyvertical/smrt-languages';\n\ndefineLanguageString({\n key: 'users.role.member',\n locale: 'en',\n template: 'Member',\n});\n\nconst text = await resolveLanguageString('users.role.member', {\n db,\n tenantId: 'tenant-a',\n locale: 'es',\n vars: { name: 'Will' },\n});\n```\n"
|
|
630
655
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-languages",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.1",
|
|
4
4
|
"description": "Code-first language strings with config + tenant overrides and AI auto-translation for SMRT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -27,23 +27,23 @@
|
|
|
27
27
|
"./manifest.json": "./dist/manifest.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@happyvertical/ai": "^0.89.
|
|
31
|
-
"@happyvertical/logger": "^0.89.
|
|
32
|
-
"@happyvertical/
|
|
33
|
-
"@happyvertical/smrt-
|
|
34
|
-
"@happyvertical/smrt-
|
|
35
|
-
"@happyvertical/smrt-jobs": "0.
|
|
36
|
-
"@happyvertical/smrt-
|
|
37
|
-
"@happyvertical/smrt-
|
|
38
|
-
"@happyvertical/
|
|
30
|
+
"@happyvertical/ai": "^0.89.6",
|
|
31
|
+
"@happyvertical/logger": "^0.89.6",
|
|
32
|
+
"@happyvertical/smrt-config": "0.47.1",
|
|
33
|
+
"@happyvertical/smrt-core": "0.47.1",
|
|
34
|
+
"@happyvertical/smrt-features": "0.47.1",
|
|
35
|
+
"@happyvertical/smrt-jobs": "0.47.1",
|
|
36
|
+
"@happyvertical/smrt-prompts": "0.47.1",
|
|
37
|
+
"@happyvertical/smrt-tenancy": "0.47.1",
|
|
38
|
+
"@happyvertical/sql": "^0.89.6"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
+
"@happyvertical/smrt-cli": "0.47.1",
|
|
42
|
+
"@happyvertical/smrt-vitest": "0.47.1",
|
|
41
43
|
"@types/node": "24.13.2",
|
|
42
44
|
"typescript": "5.9.3",
|
|
43
45
|
"vite": "8.1.4",
|
|
44
|
-
"vitest": "4.1.10"
|
|
45
|
-
"@happyvertical/smrt-vitest": "0.46.0",
|
|
46
|
-
"@happyvertical/smrt-cli": "0.46.0"
|
|
46
|
+
"vitest": "4.1.10"
|
|
47
47
|
},
|
|
48
48
|
"keywords": [
|
|
49
49
|
"smrt",
|