letopis 1.4.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/AGENT-CHEATSHEET.md +329 -281
  2. package/CHANGELOG.md +418 -0
  3. package/README.md +572 -1053
  4. package/dist/acl.d.ts +78 -1
  5. package/dist/acl.js +264 -13
  6. package/dist/admin.d.ts +10 -141
  7. package/dist/admin.js +24 -184
  8. package/dist/auth.d.ts +2 -2
  9. package/dist/auth.js +5 -15
  10. package/dist/cache.d.ts +8 -1
  11. package/dist/cache.js +30 -8
  12. package/dist/chain.d.ts +18 -41
  13. package/dist/chain.js +165 -203
  14. package/dist/cli.js +45 -90
  15. package/dist/demo/booking.d.ts +352 -36
  16. package/dist/describe.d.ts +47 -0
  17. package/dist/describe.js +195 -0
  18. package/dist/errors.d.ts +59 -13
  19. package/dist/errors.js +190 -29
  20. package/dist/index.d.ts +52 -70
  21. package/dist/index.js +189 -122
  22. package/dist/internal.d.ts +5 -0
  23. package/dist/jsonschema.js +18 -17
  24. package/dist/load.d.ts +20 -12
  25. package/dist/load.js +207 -181
  26. package/dist/mcp.d.ts +5 -7
  27. package/dist/mcp.js +168 -214
  28. package/dist/messages/access.d.ts +90 -0
  29. package/dist/messages/access.js +113 -0
  30. package/dist/messages/api.d.ts +171 -0
  31. package/dist/messages/api.js +215 -0
  32. package/dist/messages/boot.d.ts +201 -0
  33. package/dist/messages/boot.js +256 -0
  34. package/dist/messages/codes.d.ts +172 -0
  35. package/dist/messages/codes.js +173 -0
  36. package/dist/messages/index.d.ts +95 -0
  37. package/dist/messages/index.js +118 -0
  38. package/dist/messages/mcp.d.ts +306 -0
  39. package/dist/messages/mcp.js +387 -0
  40. package/dist/messages/model.d.ts +233 -0
  41. package/dist/messages/model.js +283 -0
  42. package/dist/messages/query.d.ts +131 -0
  43. package/dist/messages/query.js +158 -0
  44. package/dist/messages/sql-access.d.ts +70 -0
  45. package/dist/messages/sql-access.js +87 -0
  46. package/dist/messages/sql-core.d.ts +150 -0
  47. package/dist/messages/sql-core.js +181 -0
  48. package/dist/messages/sql-time.d.ts +71 -0
  49. package/dist/messages/sql-time.js +88 -0
  50. package/dist/messages/sql-write.d.ts +246 -0
  51. package/dist/messages/sql-write.js +270 -0
  52. package/dist/messages/time.d.ts +23 -0
  53. package/dist/messages/time.js +29 -0
  54. package/dist/messages/types.d.ts +27 -0
  55. package/dist/messages/types.js +5 -0
  56. package/dist/messages/write.d.ts +405 -0
  57. package/dist/messages/write.js +509 -0
  58. package/dist/model.d.ts +73 -60
  59. package/dist/model.js +20 -29
  60. package/dist/ops.d.ts +35 -0
  61. package/dist/ops.js +101 -0
  62. package/dist/pglite.d.ts +0 -9
  63. package/dist/pglite.js +3 -1
  64. package/dist/registry.d.ts +3 -19
  65. package/dist/registry.js +3 -16
  66. package/dist/signals.d.ts +1 -5
  67. package/dist/signals.js +1 -5
  68. package/dist/sql.d.ts +7 -1
  69. package/dist/sql.js +101 -85
  70. package/dist/sync.d.ts +9 -3
  71. package/dist/sync.js +40 -17
  72. package/dist/tx.d.ts +11 -1
  73. package/dist/tx.js +32 -11
  74. package/dist/typed.d.ts +240 -45
  75. package/dist/types.d.ts +15 -90
  76. package/dist/types.js +12 -14
  77. package/dist/up.d.ts +53 -32
  78. package/dist/up.js +180 -74
  79. package/dist/uuid.js +5 -5
  80. package/dist/validate.d.ts +13 -1
  81. package/dist/validate.js +61 -29
  82. package/dist/watch.d.ts +5 -16
  83. package/dist/watch.js +23 -77
  84. package/dist/write.d.ts +9 -16
  85. package/dist/write.js +102 -185
  86. package/llms.txt +22 -25
  87. package/package.json +2 -9
  88. package/sql/10-core.sql +7 -50
  89. package/sql/15-errors.sql +64 -10
  90. package/sql/20-context.sql +7 -6
  91. package/sql/30-validate.sql +35 -27
  92. package/sql/40-class.sql +20 -114
  93. package/sql/50-acl.sql +8 -13
  94. package/sql/60-write.sql +220 -676
  95. package/sql/70-read.sql +11 -13
  96. package/sql/80-auth.sql +23 -27
  97. package/sql/90-time.sql +77 -944
  98. package/sql/95-seed.system.sql +7 -14
  99. package/sql/99-revision.sql +2 -1
  100. package/sql/README.md +32 -24
  101. package/sql/migrate/README.md +14 -0
  102. package/AGENT-CHEATSHEET.en.md +0 -488
  103. package/MIGRATION.md +0 -190
  104. package/README.en.md +0 -2910
  105. package/dist/import.d.ts +0 -185
  106. package/dist/import.js +0 -820
  107. package/dist/project.d.ts +0 -359
  108. package/dist/project.js +0 -1258
  109. package/sql/75-history.sql +0 -436
  110. package/sql/88-derived.sql +0 -1236
  111. package/sql/migrate/0006-changed-paths.sql +0 -3
  112. package/sql/migrate/0007-secret-account-fk.sql +0 -12
@@ -0,0 +1,233 @@
1
+ export declare const model: {
2
+ 'model.end_no_targets': {
3
+ code: "invalid_class";
4
+ ru: string;
5
+ };
6
+ 'model.class_name_invalid': {
7
+ code: "invalid_class";
8
+ ru: string;
9
+ };
10
+ 'model.hub_name_reserved': {
11
+ code: "invalid_class";
12
+ ru: string;
13
+ hint: string;
14
+ };
15
+ 'model.field_name_dollar': {
16
+ code: "invalid_class";
17
+ ru: string;
18
+ };
19
+ 'model.end_name_invalid': {
20
+ code: "invalid_class";
21
+ ru: string;
22
+ };
23
+ 'model.key_field_type': {
24
+ code: "invalid_class";
25
+ ru: string;
26
+ };
27
+ 'model.key_end_type': {
28
+ code: "invalid_class";
29
+ ru: string;
30
+ };
31
+ 'model.key_unknown_name': {
32
+ code: "invalid_class";
33
+ ru: string;
34
+ };
35
+ 'model.unset_required_end': {
36
+ code: "invalid_class";
37
+ ru: string;
38
+ };
39
+ 'model.schema_default_where': {
40
+ code: "invalid_class";
41
+ ru: string;
42
+ };
43
+ 'model.schema_ref_unsupported': {
44
+ code: "invalid_class";
45
+ ru: string;
46
+ };
47
+ 'model.schema_recursive': {
48
+ code: "invalid_class";
49
+ ru: string;
50
+ };
51
+ 'model.schema_def_not_found': {
52
+ code: "invalid_class";
53
+ ru: string;
54
+ };
55
+ 'model.schema_node_not_object': {
56
+ code: "invalid_class";
57
+ ru: string;
58
+ };
59
+ 'model.schema_keyword_unsupported': {
60
+ code: "invalid_class";
61
+ ru: string;
62
+ };
63
+ 'model.schema_format_unsupported': {
64
+ code: "invalid_class";
65
+ ru: string;
66
+ };
67
+ 'model.schema_field_dollar': {
68
+ code: "invalid_class";
69
+ ru: string;
70
+ };
71
+ 'model.pattern_trailing_backslash': {
72
+ code: "invalid_class";
73
+ ru: string;
74
+ };
75
+ 'model.pattern_escape_in_set': {
76
+ code: "invalid_class";
77
+ ru: string;
78
+ };
79
+ 'model.pattern_word_boundary': {
80
+ code: "invalid_class";
81
+ ru: string;
82
+ };
83
+ 'model.pattern_unicode_property': {
84
+ code: "invalid_class";
85
+ ru: string;
86
+ };
87
+ 'model.pattern_backreference': {
88
+ code: "invalid_class";
89
+ ru: string;
90
+ };
91
+ 'model.pattern_named_group': {
92
+ code: "invalid_class";
93
+ ru: string;
94
+ };
95
+ 'model.validator_node_not_object': {
96
+ code: "invalid_class";
97
+ ru: string;
98
+ };
99
+ 'model.validator_keyword_unsupported': {
100
+ code: "invalid_class";
101
+ ru: string;
102
+ };
103
+ 'model.validator_unknown_type': {
104
+ code: "invalid_class";
105
+ ru: string;
106
+ };
107
+ 'model.validator_enum_objects_in_any_of': {
108
+ code: "invalid_class";
109
+ ru: string;
110
+ };
111
+ 'model.validator_bad_pattern': {
112
+ code: "invalid_class";
113
+ ru: string;
114
+ };
115
+ 'model.validator_format_unsupported': {
116
+ code: "invalid_class";
117
+ ru: string;
118
+ };
119
+ 'model.validator_format_in_any_of': {
120
+ code: "invalid_class";
121
+ ru: string;
122
+ };
123
+ 'model.validator_string_length_in_any_of': {
124
+ code: "invalid_class";
125
+ ru: string;
126
+ };
127
+ 'model.validator_unique_items_in_any_of': {
128
+ code: "invalid_class";
129
+ ru: string;
130
+ };
131
+ 'model.validator_min_properties_in_any_of': {
132
+ code: "invalid_class";
133
+ ru: string;
134
+ };
135
+ 'model.issue_enum': {
136
+ code: "invalid_data";
137
+ ru: string;
138
+ };
139
+ 'model.issue_date': {
140
+ code: "invalid_data";
141
+ ru: string;
142
+ };
143
+ 'model.issue_string_length': {
144
+ code: "invalid_data";
145
+ ru: string;
146
+ };
147
+ 'model.issue_unique_items': {
148
+ code: "invalid_data";
149
+ ru: string;
150
+ };
151
+ 'model.issue_property_count': {
152
+ code: "invalid_data";
153
+ ru: string;
154
+ };
155
+ 'model.issue_rule': {
156
+ code: "invalid_data";
157
+ ru: string;
158
+ };
159
+ 'model.class_not_found': {
160
+ code: "invalid_class";
161
+ ru: string;
162
+ };
163
+ 'model.sync_hub_name_reserved': {
164
+ code: "invalid_class";
165
+ ru: string;
166
+ hint: string;
167
+ };
168
+ 'model.models_cycle': {
169
+ code: "invalid_class";
170
+ ru: string;
171
+ };
172
+ 'model.types_class_name': {
173
+ code: "invalid_class";
174
+ ru: string;
175
+ };
176
+ 'model.v5_namespace_not_uuid': {
177
+ code: "invalid_data";
178
+ ru: string;
179
+ hint: string;
180
+ };
181
+ 'model.class_no_key': {
182
+ code: "no_key";
183
+ ru: string;
184
+ };
185
+ 'model.key_part_not_string': {
186
+ code: "invalid_data";
187
+ ru: string;
188
+ hint: string;
189
+ };
190
+ 'model.key_end_not_uuid': {
191
+ code: "invalid_data";
192
+ ru: string;
193
+ hint: string;
194
+ };
195
+ 'model.mcp_api_key_refused': {
196
+ code: "user_session_required";
197
+ ru: string;
198
+ hint: string;
199
+ };
200
+ 'model.mcp_token_required': {
201
+ code: "user_session_required";
202
+ ru: string;
203
+ hint: string;
204
+ };
205
+ 'model.cli_sync_dry_run': {
206
+ code: "invalid_query";
207
+ ru: string;
208
+ };
209
+ 'model.cli_sync_applied': {
210
+ code: "invalid_query";
211
+ ru: string;
212
+ };
213
+ 'model.cli_sync_list_create': {
214
+ code: "invalid_query";
215
+ ru: string;
216
+ };
217
+ 'model.cli_sync_list_update': {
218
+ code: "invalid_query";
219
+ ru: string;
220
+ };
221
+ 'model.cli_sync_list_system': {
222
+ code: "invalid_query";
223
+ ru: string;
224
+ };
225
+ 'model.cli_sync_lost': {
226
+ code: "invalid_query";
227
+ ru: string;
228
+ };
229
+ 'model.types_header': {
230
+ code: "invalid_query";
231
+ ru: string;
232
+ };
233
+ };
@@ -0,0 +1,283 @@
1
+ export const model = {
2
+ // model.ts, End: конец без классов цели — one() или many() без целей
3
+ 'model.end_no_targets': {
4
+ code: 'invalid_class',
5
+ ru: 'у конца должен быть хотя бы один класс цели',
6
+ },
7
+ // model.ts, makeModel: имя класса — не буквы, цифры и _ (до 63 знаков, не с цифры)
8
+ 'model.class_name_invalid': {
9
+ code: 'invalid_class',
10
+ ru: 'имя класса {name} недопустимо',
11
+ },
12
+ // model.ts, makeModel: имя хаба — из RESERVED_CLASS_NAMES (план 2.0, этап 4, п. 2; 7.10 №3)
13
+ 'model.hub_name_reserved': {
14
+ code: 'invalid_class',
15
+ ru: 'hub(): имя {name} занято методом цепочки или корня db — шаг с таким именем до класса не дойдёт',
16
+ hint: 'дать классу другое имя: зарезервированные имена — в README, «Справочник API → Зарезервированные имена»',
17
+ },
18
+ // model.ts, makeModel: поле модели начинается с $
19
+ 'model.field_name_dollar': {
20
+ code: 'invalid_class',
21
+ ru: '{cls}: имя поля {field} начинается с $ — так загрузчик помечает служебные ключи',
22
+ },
23
+ // model.ts, makeModel: роль конца — не буквы, цифры и _
24
+ 'model.end_name_invalid': {
25
+ code: 'invalid_class',
26
+ ru: '{cls}: имя конца {role} недопустимо',
27
+ },
28
+ // model.ts, makeModel: поле ключа — не строка или необязательное
29
+ 'model.key_field_type': {
30
+ code: 'invalid_class',
31
+ ru: '{cls}: поле ключа {field} должно быть обязательной строкой',
32
+ },
33
+ // model.ts, makeModel: конец ключа множественный или необязательный
34
+ 'model.key_end_type': {
35
+ code: 'invalid_class',
36
+ ru: '{cls}: конец ключа {end} должен быть обязательным и одиночным',
37
+ },
38
+ // model.ts, makeModel: в key — имя, которого нет ни среди полей, ни среди концов (с предками)
39
+ 'model.key_unknown_name': {
40
+ code: 'invalid_class',
41
+ ru: '{cls}: ключ ссылается на неизвестное поле или конец {name}',
42
+ },
43
+ // model.ts, makeModel: onDelete unset у обязательного конца (или у конца с min больше нуля)
44
+ 'model.unset_required_end': {
45
+ code: 'invalid_class',
46
+ ru: '{cls}: onDelete unset недопустим для обязательного конца {end}',
47
+ },
48
+ // jsonschema.ts, normalizeSchema: имя в начале текста ошибок, когда where не задан (часть текста, не ошибка)
49
+ 'model.schema_default_where': {
50
+ code: 'invalid_class',
51
+ ru: 'модель',
52
+ },
53
+ // jsonschema.ts, normalizeSchema: $ref не на определение из $defs (definitions)
54
+ 'model.schema_ref_unsupported': {
55
+ code: 'invalid_class',
56
+ ru: '{where}: ссылка {ref} не поддерживается (только #/$defs/…)',
57
+ },
58
+ // jsonschema.ts, normalizeSchema: $ref по кругу; cycle — имена определений через стрелку
59
+ 'model.schema_recursive': {
60
+ code: 'invalid_class',
61
+ ru: '{where}: рекурсивная модель через {cycle}',
62
+ },
63
+ // jsonschema.ts, normalizeSchema: $ref на определение, которого нет
64
+ 'model.schema_def_not_found': {
65
+ code: 'invalid_class',
66
+ ru: '{where}: определение {name} не найдено',
67
+ },
68
+ // jsonschema.ts, normalizeSchema: узел описания — не объект и не true; node — путь вида $.a.b
69
+ 'model.schema_node_not_object': {
70
+ code: 'invalid_class',
71
+ ru: '{where}: описание узла {node} — не объект',
72
+ },
73
+ // jsonschema.ts, normalizeSchema: ключевое слово JSON Schema вне подмножества базы
74
+ 'model.schema_keyword_unsupported': {
75
+ code: 'invalid_class',
76
+ ru: '{where}: ключевое слово {keyword} не поддерживается (узел {node})',
77
+ },
78
+ // jsonschema.ts, normalizeSchema: format не из uuid, date, date-time, email
79
+ 'model.schema_format_unsupported': {
80
+ code: 'invalid_class',
81
+ ru: '{where}: format {format} не поддерживается (узел {node})',
82
+ },
83
+ // jsonschema.ts, normalizeSchema с topLevel: поле верхнего уровня начинается с $
84
+ 'model.schema_field_dollar': {
85
+ code: 'invalid_class',
86
+ ru: '{where}: имя поля {field} начинается с $ — так загрузчик помечает служебные ключи',
87
+ },
88
+ // jsonschema.ts, translatePattern: обратная косая черта последним знаком шаблона
89
+ 'model.pattern_trailing_backslash': {
90
+ code: 'invalid_class',
91
+ ru: '{where}: шаблон {pattern} несовместим с регулярными выражениями PostgreSQL (обратная косая черта в конце шаблона)',
92
+ },
93
+ // jsonschema.ts, translatePattern: \D, \W, \S внутри [ ]; escape — сама последовательность
94
+ 'model.pattern_escape_in_set': {
95
+ code: 'invalid_class',
96
+ ru: '{where}: шаблон {pattern} несовместим с регулярными выражениями PostgreSQL ({escape} внутри набора [ ] не переводится)',
97
+ },
98
+ // jsonschema.ts, translatePattern: \b, \B; escape — сама последовательность
99
+ 'model.pattern_word_boundary': {
100
+ code: 'invalid_class',
101
+ ru: '{where}: шаблон {pattern} несовместим с регулярными выражениями PostgreSQL ({escape} в PostgreSQL значит другое)',
102
+ },
103
+ // jsonschema.ts, translatePattern: \p и \P
104
+ 'model.pattern_unicode_property': {
105
+ code: 'invalid_class',
106
+ ru: '{where}: шаблон {pattern} несовместим с регулярными выражениями PostgreSQL (\\p{…} не поддерживается)',
107
+ },
108
+ // jsonschema.ts, translatePattern: \k и \1–\9
109
+ 'model.pattern_backreference': {
110
+ code: 'invalid_class',
111
+ ru: '{where}: шаблон {pattern} несовместим с регулярными выражениями PostgreSQL (обратные ссылки не поддерживаются)',
112
+ },
113
+ // jsonschema.ts, translatePattern: именованная группа (?<имя>…)
114
+ 'model.pattern_named_group': {
115
+ code: 'invalid_class',
116
+ ru: '{where}: шаблон {pattern} несовместим с регулярными выражениями PostgreSQL (именованные группы не поддерживаются)',
117
+ },
118
+ // validate.ts, compileValidator: узел описания — не объект и не true; node — путь узла массивом JSON
119
+ 'model.validator_node_not_object': {
120
+ code: 'invalid_class',
121
+ ru: 'описание узла {node} — не объект (узел {node})',
122
+ },
123
+ // validate.ts, compileValidator: ключевое слово вне подмножества (не x-…)
124
+ 'model.validator_keyword_unsupported': {
125
+ code: 'invalid_class',
126
+ ru: 'ключевое слово {keyword} не поддерживается (узел {node})',
127
+ },
128
+ // validate.ts, compileValidator: type не из integer, number, string, boolean, object, array, null
129
+ 'model.validator_unknown_type': {
130
+ code: 'invalid_class',
131
+ ru: 'неизвестный тип в узле {node} (узел {node})',
132
+ },
133
+ // validate.ts, compileValidator: enum или const с объектами внутри ветки anyOf или oneOf
134
+ 'model.validator_enum_objects_in_any_of': {
135
+ code: 'invalid_class',
136
+ ru: 'перечисление объектов внутри anyOf не поддерживается (узел {node})',
137
+ },
138
+ // validate.ts, compileValidator: pattern неверен уже для JavaScript; pattern — шаблон в JSON
139
+ 'model.validator_bad_pattern': {
140
+ code: 'invalid_class',
141
+ ru: 'pattern {pattern} — неверное регулярное выражение (узел {node})',
142
+ },
143
+ // validate.ts, compileValidator: format не из uuid, date, date-time, email
144
+ 'model.validator_format_unsupported': {
145
+ code: 'invalid_class',
146
+ ru: 'format {format} не поддерживается (узел {node})',
147
+ },
148
+ // validate.ts, compileValidator: format date или date-time внутри ветки anyOf или oneOf
149
+ 'model.validator_format_in_any_of': {
150
+ code: 'invalid_class',
151
+ ru: 'format {format} внутри anyOf не поддерживается (узел {node})',
152
+ },
153
+ // validate.ts, compileValidator: minLength или maxLength внутри ветки anyOf или oneOf
154
+ 'model.validator_string_length_in_any_of': {
155
+ code: 'invalid_class',
156
+ ru: 'длина строки внутри anyOf не поддерживается (узел {node})',
157
+ },
158
+ // validate.ts, compileValidator: uniqueItems внутри ветки anyOf или oneOf
159
+ 'model.validator_unique_items_in_any_of': {
160
+ code: 'invalid_class',
161
+ ru: 'uniqueItems внутри anyOf не поддерживается (узел {node})',
162
+ },
163
+ // validate.ts, compileValidator: minProperties или maxProperties внутри ветки anyOf или oneOf
164
+ 'model.validator_min_properties_in_any_of': {
165
+ code: 'invalid_class',
166
+ ru: 'minProperties внутри anyOf не поддерживается (узел {node})',
167
+ },
168
+ // validate.ts, compileValidator: сообщения нарушений issues[].message — тексты не для ошибки (lmsg), те же, что у базы
169
+ 'model.issue_enum': {
170
+ code: 'invalid_data',
171
+ ru: 'значение не из перечисления',
172
+ },
173
+ 'model.issue_date': {
174
+ code: 'invalid_data',
175
+ ru: 'такой даты не бывает',
176
+ },
177
+ 'model.issue_string_length': {
178
+ code: 'invalid_data',
179
+ ru: 'длина строки вне границ',
180
+ },
181
+ 'model.issue_unique_items': {
182
+ code: 'invalid_data',
183
+ ru: 'элементы повторяются',
184
+ },
185
+ 'model.issue_property_count': {
186
+ code: 'invalid_data',
187
+ ru: 'число ключей вне границ',
188
+ },
189
+ 'model.issue_rule': {
190
+ code: 'invalid_data',
191
+ ru: 'нарушено правило {keyword}',
192
+ },
193
+ // registry.ts, Registry.resolve: класса нет в реестре сессии ни по имени, ни по алиасу
194
+ 'model.class_not_found': {
195
+ code: 'invalid_class',
196
+ ru: 'класс {name} не найден',
197
+ },
198
+ // sync.ts, syncModels: модель хаба с именем из RESERVED_CLASS_NAMES, собранная мимо hub() (план 2.0, этап 4, п. 2;
199
+ // 7.10 №3) — отказ до записи
200
+ 'model.sync_hub_name_reserved': {
201
+ code: 'invalid_class',
202
+ ru: 'syncModels: имя хаба {name} занято методом цепочки или корня db — шаг с таким именем до класса не дойдёт',
203
+ hint: 'дать классу другое имя: зарезервированные имена — в README, «Справочник API → Зарезервированные имена»',
204
+ },
205
+ // sync.ts, syncModels: родители замыкают круг; cycle — имена моделей через стрелку
206
+ 'model.models_cycle': {
207
+ code: 'invalid_class',
208
+ ru: 'syncModels: модели зависят друг от друга по кругу: {cycle} — родителя база ждёт раньше класса',
209
+ },
210
+ // sync.ts, generateTypes: имя класса (например, созданного данными) — не идентификатор TypeScript
211
+ 'model.types_class_name': {
212
+ code: 'invalid_class',
213
+ ru: 'types: имя класса {name} не годится для идентификатора TypeScript',
214
+ },
215
+ // uuid.ts, uuidv5: пространство имён (арендатор) — не uuid
216
+ 'model.v5_namespace_not_uuid': {
217
+ code: 'invalid_data',
218
+ ru: 'пространство имён v5 — не uuid: {ns}',
219
+ hint: 'пространство имён v5 — id арендатора (uuid): idOf(класс, ключ, { tenant })',
220
+ },
221
+ // uuid.ts, idOf: у класса нет ключа
222
+ 'model.class_no_key': {
223
+ code: 'no_key',
224
+ ru: 'у класса {cls} нет ключа: id выдаёт база при создании',
225
+ },
226
+ // uuid.ts, idOf: часть ключа не задана или не строка; detail.key — части ключа класса
227
+ 'model.key_part_not_string': {
228
+ code: 'invalid_data',
229
+ ru: 'idOf({cls}): часть ключа {part} должна быть строкой',
230
+ hint: 'передать каждую часть ключа строкой (части — в detail.key): у поля — его значение, у конца — id цели',
231
+ },
232
+ // uuid.ts, idOf: значение конца в ключе — не uuid
233
+ 'model.key_end_not_uuid': {
234
+ code: 'invalid_data',
235
+ ru: 'idOf({cls}): конец {end} — не uuid',
236
+ hint: 'значение конца в ключе — id цели (uuid)',
237
+ },
238
+ // cli.ts, mcp: letopis mcp с ключом сервиса (--api-key)
239
+ 'model.mcp_api_key_refused': {
240
+ code: 'user_session_required',
241
+ ru: 'letopis mcp принимает только токен сессии пользователя (--token или LETOPIS_TOKEN): ключ сервиса даёт все права auth.* и не должен лежать на машине агента',
242
+ hint: 'убрать --api-key и передать токен сессии пользователя: --token или LETOPIS_TOKEN',
243
+ },
244
+ // cli.ts, mcp: letopis mcp без токена — ни --token, ни LETOPIS_TOKEN
245
+ 'model.mcp_token_required': {
246
+ code: 'user_session_required',
247
+ ru: 'letopis mcp — нужен токен сессии пользователя: --token или LETOPIS_TOKEN',
248
+ hint: 'передать токен сессии пользователя: --token или LETOPIS_TOKEN',
249
+ },
250
+ // cli.ts, main: отчёт letopis sync (lmsg) — тексты не для ошибки, код не печатается. Итог: сухой прогон и с --apply;
251
+ // числа классов по группам
252
+ 'model.cli_sync_dry_run': {
253
+ code: 'invalid_query',
254
+ ru: 'сухой прогон: создать {created}, изменить {updated}, без изменений {unchanged}, системных {skipped}',
255
+ },
256
+ 'model.cli_sync_applied': {
257
+ code: 'invalid_query',
258
+ ru: 'применено: создать {created}, изменить {updated}, без изменений {unchanged}, системных {skipped}',
259
+ },
260
+ // строки групп; names — классы через запятую
261
+ 'model.cli_sync_list_create': {
262
+ code: 'invalid_query',
263
+ ru: 'создать: {names}',
264
+ },
265
+ 'model.cli_sync_list_update': {
266
+ code: 'invalid_query',
267
+ ru: 'изменить: {names}',
268
+ },
269
+ 'model.cli_sync_list_system': {
270
+ code: 'invalid_query',
271
+ ru: 'системные (меняет установка): {names}',
272
+ },
273
+ // правило Zod (refine, transform), которого нет в базе; kind — вид правила, path — где оно
274
+ 'model.cli_sync_lost': {
275
+ code: 'invalid_query',
276
+ ru: 'правило {kind} в {path} проверяется только в библиотеке — в базе его нет',
277
+ },
278
+ // sync.ts, generateTypes: пометка в первой строке файла типов (после «// ») — текст не для ошибки
279
+ 'model.types_header': {
280
+ code: 'invalid_query',
281
+ ru: 'Сгенерировано letopis types — не править руками.',
282
+ },
283
+ };
@@ -0,0 +1,131 @@
1
+ export declare const query: {
2
+ 'query.sort_field': {
3
+ code: "invalid_query";
4
+ ru: string;
5
+ };
6
+ 'query.unknown_field': {
7
+ code: "invalid_query";
8
+ ru: string;
9
+ hint: string;
10
+ };
11
+ 'query.no_path': {
12
+ code: "no_path";
13
+ ru: string;
14
+ };
15
+ 'query.unknown_op': {
16
+ code: "invalid_query";
17
+ ru: string;
18
+ };
19
+ 'query.tags_arg': {
20
+ code: "invalid_query";
21
+ ru: string;
22
+ };
23
+ 'query.step_op': {
24
+ code: "invalid_query";
25
+ ru: string;
26
+ };
27
+ 'query.id_list': {
28
+ code: "invalid_query";
29
+ ru: string;
30
+ };
31
+ 'query.filter_id_list': {
32
+ code: "invalid_query";
33
+ ru: string;
34
+ };
35
+ 'query.filter_id': {
36
+ code: "invalid_query";
37
+ ru: string;
38
+ };
39
+ 'query.end_value': {
40
+ code: "invalid_query";
41
+ ru: string;
42
+ };
43
+ 'query.cursor_shape': {
44
+ code: "invalid_query";
45
+ ru: string;
46
+ };
47
+ 'query.cursor_id': {
48
+ code: "invalid_query";
49
+ ru: string;
50
+ };
51
+ 'query.cursor_value': {
52
+ code: "invalid_query";
53
+ ru: string;
54
+ };
55
+ 'query.cursor_value_nullable': {
56
+ code: "invalid_query";
57
+ ru: string;
58
+ };
59
+ 'query.cursor_expect_numeric': {
60
+ code: "invalid_query";
61
+ ru: string;
62
+ };
63
+ 'query.cursor_expect_int': {
64
+ code: "invalid_query";
65
+ ru: string;
66
+ };
67
+ 'query.cursor_expect_boolean': {
68
+ code: "invalid_query";
69
+ ru: string;
70
+ };
71
+ 'query.cursor_expect_text': {
72
+ code: "invalid_query";
73
+ ru: string;
74
+ };
75
+ 'query.cursor_expect_uuid': {
76
+ code: "invalid_query";
77
+ ru: string;
78
+ };
79
+ 'query.cursor_expect_timestamptz': {
80
+ code: "invalid_query";
81
+ ru: string;
82
+ };
83
+ 'query.cursor_expect_date': {
84
+ code: "invalid_query";
85
+ ru: string;
86
+ };
87
+ 'query.cursor_expect_jsonb': {
88
+ code: "invalid_query";
89
+ ru: string;
90
+ };
91
+ 'query.cursor_rev': {
92
+ code: "invalid_query";
93
+ ru: string;
94
+ };
95
+ 'query.cursor_path': {
96
+ code: "invalid_query";
97
+ ru: string;
98
+ };
99
+ 'query.cursor_of_field': {
100
+ code: "invalid_query";
101
+ ru: string;
102
+ };
103
+ 'query.empty_chain': {
104
+ code: "invalid_query";
105
+ ru: string;
106
+ };
107
+ 'query.pivot_missing': {
108
+ code: "invalid_query";
109
+ ru: string;
110
+ };
111
+ 'query.deep_first_step': {
112
+ code: "invalid_query";
113
+ ru: string;
114
+ };
115
+ 'query.deep_hop': {
116
+ code: "invalid_query";
117
+ ru: string;
118
+ };
119
+ 'query.deep_with_deleted': {
120
+ code: "invalid_query";
121
+ ru: string;
122
+ };
123
+ 'query.after_without_sort': {
124
+ code: "invalid_query";
125
+ ru: string;
126
+ };
127
+ 'query.agg_field': {
128
+ code: "invalid_query";
129
+ ru: string;
130
+ };
131
+ };