letopis 1.4.1 → 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 (113) hide show
  1. package/AGENT-CHEATSHEET.md +329 -278
  2. package/CHANGELOG.md +558 -1
  3. package/README.md +606 -1037
  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 -175
  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 +33 -10
  12. package/dist/chain.d.ts +19 -41
  13. package/dist/chain.js +169 -201
  14. package/dist/cli.js +51 -88
  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 -71
  21. package/dist/index.js +245 -130
  22. package/dist/internal.d.ts +12 -0
  23. package/dist/internal.js +5 -0
  24. package/dist/jsonschema.js +18 -17
  25. package/dist/load.d.ts +20 -12
  26. package/dist/load.js +225 -186
  27. package/dist/mcp.d.ts +5 -7
  28. package/dist/mcp.js +171 -215
  29. package/dist/messages/access.d.ts +90 -0
  30. package/dist/messages/access.js +113 -0
  31. package/dist/messages/api.d.ts +171 -0
  32. package/dist/messages/api.js +215 -0
  33. package/dist/messages/boot.d.ts +201 -0
  34. package/dist/messages/boot.js +256 -0
  35. package/dist/messages/codes.d.ts +172 -0
  36. package/dist/messages/codes.js +173 -0
  37. package/dist/messages/index.d.ts +95 -0
  38. package/dist/messages/index.js +118 -0
  39. package/dist/messages/mcp.d.ts +306 -0
  40. package/dist/messages/mcp.js +387 -0
  41. package/dist/messages/model.d.ts +233 -0
  42. package/dist/messages/model.js +283 -0
  43. package/dist/messages/query.d.ts +131 -0
  44. package/dist/messages/query.js +158 -0
  45. package/dist/messages/sql-access.d.ts +70 -0
  46. package/dist/messages/sql-access.js +87 -0
  47. package/dist/messages/sql-core.d.ts +150 -0
  48. package/dist/messages/sql-core.js +181 -0
  49. package/dist/messages/sql-time.d.ts +71 -0
  50. package/dist/messages/sql-time.js +88 -0
  51. package/dist/messages/sql-write.d.ts +246 -0
  52. package/dist/messages/sql-write.js +270 -0
  53. package/dist/messages/time.d.ts +23 -0
  54. package/dist/messages/time.js +29 -0
  55. package/dist/messages/types.d.ts +27 -0
  56. package/dist/messages/types.js +5 -0
  57. package/dist/messages/write.d.ts +405 -0
  58. package/dist/messages/write.js +509 -0
  59. package/dist/model.d.ts +73 -60
  60. package/dist/model.js +26 -29
  61. package/dist/ops.d.ts +35 -0
  62. package/dist/ops.js +101 -0
  63. package/dist/pglite.d.ts +0 -9
  64. package/dist/pglite.js +3 -1
  65. package/dist/registry.d.ts +3 -19
  66. package/dist/registry.js +3 -16
  67. package/dist/signals.d.ts +5 -9
  68. package/dist/signals.js +5 -9
  69. package/dist/sql.d.ts +13 -6
  70. package/dist/sql.js +176 -83
  71. package/dist/sync.d.ts +9 -3
  72. package/dist/sync.js +51 -21
  73. package/dist/tx.d.ts +26 -1
  74. package/dist/tx.js +44 -14
  75. package/dist/typed.d.ts +240 -45
  76. package/dist/types.d.ts +23 -91
  77. package/dist/types.js +12 -14
  78. package/dist/up.d.ts +53 -32
  79. package/dist/up.js +184 -73
  80. package/dist/uuid.js +5 -5
  81. package/dist/validate.d.ts +13 -1
  82. package/dist/validate.js +61 -29
  83. package/dist/watch.d.ts +11 -10
  84. package/dist/watch.js +33 -70
  85. package/dist/write.d.ts +9 -16
  86. package/dist/write.js +118 -187
  87. package/llms.txt +22 -25
  88. package/package.json +8 -11
  89. package/sql/10-core.sql +7 -50
  90. package/sql/15-errors.sql +64 -10
  91. package/sql/20-context.sql +7 -6
  92. package/sql/30-validate.sql +35 -27
  93. package/sql/40-class.sql +20 -114
  94. package/sql/50-acl.sql +8 -13
  95. package/sql/60-write.sql +220 -667
  96. package/sql/70-read.sql +20 -16
  97. package/sql/80-auth.sql +24 -27
  98. package/sql/90-time.sql +70 -859
  99. package/sql/95-seed.system.sql +7 -14
  100. package/sql/99-revision.sql +2 -1
  101. package/sql/README.md +32 -24
  102. package/sql/migrate/README.md +14 -0
  103. package/AGENT-CHEATSHEET.en.md +0 -485
  104. package/MIGRATION.md +0 -190
  105. package/README.en.md +0 -2859
  106. package/dist/import.d.ts +0 -185
  107. package/dist/import.js +0 -820
  108. package/dist/project.d.ts +0 -350
  109. package/dist/project.js +0 -1224
  110. package/sql/75-history.sql +0 -358
  111. package/sql/88-derived.sql +0 -1235
  112. package/sql/migrate/0006-changed-paths.sql +0 -3
  113. package/sql/migrate/0007-secret-account-fk.sql +0 -12
package/dist/import.d.ts DELETED
@@ -1,185 +0,0 @@
1
- /**
2
- * Импорт из letopis 0.21 (план, этап 7, п. 1): `letopis import --from <строка 0.21> --from-schema v1.x`.
3
- *
4
- * Читает таблицы 0.21 (Schema, Entity, Account, Credential, Resource, Rule) из её собственной базы —
5
- * PostgreSQL 17 с TimescaleDB или обычный дамп таблиц — и пишет в установку 1.0:
6
- * - Schema → строки Class арендатора System (их видят все арендаторы): правила fastest-validator →
7
- * JSON Schema, концы — роли по имени класса цели, союз всех конкретных потомков класса —
8
- * полиморфный конец этого класса; корни без своих полей и концов (Entity, link) опускаются;
9
- * description, appearance, order → meta; ссылка на класс в данных, не объявленная концом, —
10
- * необязательный конец (в отчёте);
11
- * - Entity → загрузчиком в режиме истории (existing: 'skip', агент «letopis import»): версии по
12
- * порядку, надгробия — op delete, следующая за ним версия — create; id классов с ключом — v5 от
13
- * ключа (§2.3), без ключа — v5 от старого id ($ext); данные System — в арендатора --tenant;
14
- * - Account → строки Account (id — v5 от старого; System → System), Credential → secret (хэши scrypt
15
- * и ключей как есть, OTP — нет), Resource и Rule → строки Resource и rule в System.
16
- * До первой записи импорт проверяет всё, что его остановит: два объекта с одним id 1.0 (нарушение
17
- * ключа — опция keyless), ключ, менявшийся между версиями, ключ со ссылкой на отсутствующий объект.
18
- * Висячие ссылки живых строк останавливает загрузчик (target_not_found) — отчёт называет строки 0.21.
19
- * Шаги (классы, аккаунты, креды, права, данные арендатора) — отдельные транзакции; повтор дописывает
20
- * недостающее и дублей не создаёт.
21
- */
22
- import postgres from 'postgres';
23
- import { type JsonSchema } from './jsonschema.js';
24
- type Raw = Record<string, unknown>;
25
- type Sql = postgres.Sql<Record<string, unknown>>;
26
- export interface ImportOptions {
27
- /** Строка подключения к базе 0.21 (или готовый пул). */
28
- from: string | Sql;
29
- /** Схема 0.21: v1.<имя>. */
30
- fromSchema: string;
31
- /** Партиция 0.21 (по умолчанию entity). */
32
- partition?: string;
33
- /** Администраторская строка подключения к установке 1.0. */
34
- dsn: string;
35
- /** Схема 1.0: v2.<имя>. */
36
- schema: string;
37
- /** Роль-владелец схемы 1.0 (по умолчанию letopis_owner). */
38
- owner?: string;
39
- /** Имя арендатора для данных аккаунта System (полигоны 0.21 записаны от его имени). */
40
- tenant?: string;
41
- /** Классы, которые импортируются без ключа: старый id — внешний ключ (объявленное расхождение). */
42
- keyless?: string[];
43
- /** Переименования классов: имена, занятые методами 1.0 и системными классами (иначе — имя + «_»). */
44
- rename?: Record<string, string>;
45
- /** Существующим объектам — новая версия из последней версии 0.21, если содержимое отличается. */
46
- update?: boolean;
47
- /** Порции загрузчика (§2.6, п. 8). */
48
- commitEvery?: number;
49
- /**
50
- * Первая заливка (план 1.1, §2.3): весь импорт — одной транзакцией в пустую схему, индексы и триггеры —
51
- * после загрузки; несовместимо с update и commitEvery. Строки, уже лежащие в схеме (системный сид:
52
- * ресурсы, правила), пропускаются, как без флага.
53
- */
54
- initial?: boolean;
55
- /** Без сообщений в консоль. */
56
- quiet?: boolean;
57
- }
58
- /** Непереведённое правило или иное расхождение описания класса. */
59
- export interface ImportNote {
60
- class: string;
61
- field?: string;
62
- note: string;
63
- }
64
- export interface ClassCount {
65
- objects: number;
66
- versions: number;
67
- live: number;
68
- }
69
- export interface ImportReport {
70
- classes: {
71
- created: string[];
72
- existing: string[];
73
- omitted: string[];
74
- renamed: Record<string, string>;
75
- keyless: string[];
76
- };
77
- /** Правила fastest-validator и концы, перенесённые не один к одному. */
78
- notes: ImportNote[];
79
- /** Число объектов, версий и живых строк по классам: в 0.21 и в 1.0 после импорта. */
80
- source: Record<string, ClassCount>;
81
- target: Record<string, ClassCount>;
82
- tenants: {
83
- old: string;
84
- id: string;
85
- name: string;
86
- }[];
87
- accounts: {
88
- loaded: number;
89
- skipped: number;
90
- };
91
- credentials: {
92
- imported: number;
93
- skipped: number;
94
- otp: number;
95
- conflicts: {
96
- account: string;
97
- kind: string;
98
- ident: string;
99
- }[];
100
- };
101
- resources: {
102
- loaded: number;
103
- skipped: number;
104
- };
105
- rules: {
106
- loaded: number;
107
- skipped: number;
108
- };
109
- objects: {
110
- loaded: number;
111
- skipped: number;
112
- updated: number;
113
- };
114
- /** Поля data живых строк, в которых лежат uuid, совпадающие со старыми id (импорт их не переписывает). */
115
- uuidFields: Record<string, number>;
116
- /** Отброшенные поля данных, имя которых начинается с $ (метасхема 1.0 их не принимает). */
117
- droppedFields: Record<string, number>;
118
- /** Строк, у которых владелец не найден среди аккаунтов (владелец — арендатор). */
119
- ownerLost: number;
120
- verify: {
121
- ok: boolean;
122
- issues: number;
123
- anchor: string;
124
- };
125
- ms: number;
126
- }
127
- /** Строка ошибки импорта: класс и id 0.21 и, для ошибок загрузчика, версия. */
128
- export interface ImportIssue {
129
- code: string;
130
- message: string;
131
- class: string;
132
- id: string;
133
- rev?: number;
134
- }
135
- interface Conv {
136
- s: JsonSchema;
137
- optional: boolean;
138
- dflt: boolean;
139
- }
140
- declare function conv(rule: unknown, cls: string, path: string, notes: ImportNote[]): Conv;
141
- interface SchemaRow {
142
- id: string;
143
- alias: string;
144
- category: 'HUB' | 'LINK';
145
- ancestor: string | null;
146
- attributes: Raw;
147
- links: unknown[];
148
- meta: Raw;
149
- order: number;
150
- ancestors: string[];
151
- }
152
- /** Часть ключа 1.0: роль конца (классы 0.21) или поле данных. */
153
- type KeyPart = {
154
- end: string;
155
- classes: string[];
156
- } | {
157
- field: string;
158
- };
159
- /** Класс 1.0 после перевода: описание и правила id для данных. */
160
- interface Cls {
161
- old: string;
162
- name: string;
163
- desc: Raw;
164
- /** Роль по классу цели 0.21 (конкретный класс → роль). */
165
- roleOf: Map<string, string>;
166
- /** Собственный ключ (undefined — наследуется). */
167
- ownKey?: KeyPart[];
168
- /** Поля на $ — отбрасываются из данных. */
169
- dropped: string[];
170
- history: boolean;
171
- }
172
- interface Built {
173
- classes: Map<string, Cls>;
174
- omitted: string[];
175
- renamed: Record<string, string>;
176
- keyless: string[];
177
- notes: ImportNote[];
178
- /** Эффективный ключ класса (собственный или унаследованный; [] — без ключа). */
179
- keyOf(old: string): KeyPart[];
180
- /** Конкретные (не абстрактные) классы, принимаемые концом из классов 0.21 (с потомками). */
181
- family(old: string): string[];
182
- }
183
- declare function buildClasses(rows: SchemaRow[], observed: Map<string, Set<string>>, opts: ImportOptions): Built;
184
- export declare function import021(opts: ImportOptions): Promise<ImportReport>;
185
- export { buildClasses as _buildClasses, conv as _convRule };