@wrenautomation/knowledge 0.0.0-stage → 0.58.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.
package/dist/push.js ADDED
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Push = compare-and-swap on the remote branch. A push that loses fetches, merges, lints the merged
3
+ * commit (two clean branches can still break a cite together) and tries again. A merge that conflicts
4
+ * or fails the lint is undone and reported; the local commit stays.
5
+ */
6
+ import { git, head, tryGit } from "./git.js";
7
+ import { errors, lint } from "./lint.js";
8
+ import { loadAt, loadConfig } from "./repo.js";
9
+ export function push(root, tries = 4) {
10
+ const cfg = loadConfig(root);
11
+ const branch = git(root, ["rev-parse", "--abbrev-ref", "HEAD"]);
12
+ let merged = false;
13
+ for (let i = 1; i <= tries; i++) {
14
+ const p = tryGit(root, ["push", "-q", cfg.remote, `HEAD:refs/heads/${branch}`]);
15
+ if (p.ok)
16
+ return { pushed: true, head: head(root), merged, tries: i };
17
+ if (!/rejected|non-fast-forward|fetch first|cannot lock ref/i.test(p.out))
18
+ return { pushed: false, head: head(root), merged, tries: i, error: p.out };
19
+ git(root, ["fetch", "-q", cfg.remote, branch]);
20
+ const before = head(root);
21
+ const m = tryGit(root, ["merge", "-q", "--no-edit", "FETCH_HEAD"]);
22
+ if (!m.ok) {
23
+ tryGit(root, ["merge", "--abort"]);
24
+ return { pushed: false, head: before, merged, tries: i, error: `merge: ${m.out}` };
25
+ }
26
+ const now = head(root);
27
+ const bad = newFaults(root, cfg.owner, [before, "FETCH_HEAD"], now);
28
+ if (bad.length) {
29
+ git(root, ["reset", "-q", "--merge", before]);
30
+ return {
31
+ pushed: false,
32
+ head: before,
33
+ merged,
34
+ tries: i,
35
+ problems: bad,
36
+ error: "the merged tree fails the lint",
37
+ };
38
+ }
39
+ merged = merged || now !== before;
40
+ }
41
+ return { pushed: false, head: head(root), merged, tries, error: "the remote kept moving" };
42
+ }
43
+ /**
44
+ * The lint errors at `rev` that no base had: what a change made. A push, and a server's pre-receive
45
+ * hook (`knowledge lint --rev <new> --base <old>`), refuse on these only.
46
+ */
47
+ export function newFaults(root, owner, bases, rev) {
48
+ const key = (x) => `${x.path}|${x.msg}`;
49
+ const had = new Set(bases.flatMap((r) => errors(lint(loadAt(root, r), owner)).map(key)));
50
+ return errors(lint(loadAt(root, rev), owner)).filter((x) => !had.has(key(x)));
51
+ }
52
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,458 @@
1
+ import { type PgDatabase } from "drizzle-orm/pg-core";
2
+ import { type RecordType } from "./records.js";
3
+ import { type Broken } from "./repo.js";
4
+ export declare const metaT: import("drizzle-orm/pg-core").PgTableWithColumns<{
5
+ name: "knowledge_meta";
6
+ schema: undefined;
7
+ columns: {
8
+ repo: import("drizzle-orm/pg-core").PgColumn<{
9
+ name: "repo";
10
+ tableName: "knowledge_meta";
11
+ dataType: "string";
12
+ columnType: "PgText";
13
+ data: string;
14
+ driverParam: string;
15
+ notNull: true;
16
+ hasDefault: false;
17
+ isPrimaryKey: false;
18
+ isAutoincrement: false;
19
+ hasRuntimeDefault: false;
20
+ enumValues: [string, ...string[]];
21
+ baseColumn: never;
22
+ identity: undefined;
23
+ generated: undefined;
24
+ }, {}, {}>;
25
+ key: import("drizzle-orm/pg-core").PgColumn<{
26
+ name: "key";
27
+ tableName: "knowledge_meta";
28
+ dataType: "string";
29
+ columnType: "PgText";
30
+ data: string;
31
+ driverParam: string;
32
+ notNull: true;
33
+ hasDefault: false;
34
+ isPrimaryKey: false;
35
+ isAutoincrement: false;
36
+ hasRuntimeDefault: false;
37
+ enumValues: [string, ...string[]];
38
+ baseColumn: never;
39
+ identity: undefined;
40
+ generated: undefined;
41
+ }, {}, {}>;
42
+ value: import("drizzle-orm/pg-core").PgColumn<{
43
+ name: "value";
44
+ tableName: "knowledge_meta";
45
+ dataType: "string";
46
+ columnType: "PgText";
47
+ data: string;
48
+ driverParam: string;
49
+ notNull: true;
50
+ hasDefault: false;
51
+ isPrimaryKey: false;
52
+ isAutoincrement: false;
53
+ hasRuntimeDefault: false;
54
+ enumValues: [string, ...string[]];
55
+ baseColumn: never;
56
+ identity: undefined;
57
+ generated: undefined;
58
+ }, {}, {}>;
59
+ };
60
+ dialect: "pg";
61
+ }>;
62
+ export declare const recordsT: import("drizzle-orm/pg-core").PgTableWithColumns<{
63
+ name: "knowledge_records";
64
+ schema: undefined;
65
+ columns: {
66
+ repo: import("drizzle-orm/pg-core").PgColumn<{
67
+ name: "repo";
68
+ tableName: "knowledge_records";
69
+ dataType: "string";
70
+ columnType: "PgText";
71
+ data: string;
72
+ driverParam: string;
73
+ notNull: true;
74
+ hasDefault: false;
75
+ isPrimaryKey: false;
76
+ isAutoincrement: false;
77
+ hasRuntimeDefault: false;
78
+ enumValues: [string, ...string[]];
79
+ baseColumn: never;
80
+ identity: undefined;
81
+ generated: undefined;
82
+ }, {}, {}>;
83
+ id: import("drizzle-orm/pg-core").PgColumn<{
84
+ name: "id";
85
+ tableName: "knowledge_records";
86
+ dataType: "string";
87
+ columnType: "PgText";
88
+ data: string;
89
+ driverParam: string;
90
+ notNull: true;
91
+ hasDefault: false;
92
+ isPrimaryKey: false;
93
+ isAutoincrement: false;
94
+ hasRuntimeDefault: false;
95
+ enumValues: [string, ...string[]];
96
+ baseColumn: never;
97
+ identity: undefined;
98
+ generated: undefined;
99
+ }, {}, {}>;
100
+ type: import("drizzle-orm/pg-core").PgColumn<{
101
+ name: "type";
102
+ tableName: "knowledge_records";
103
+ dataType: "string";
104
+ columnType: "PgText";
105
+ data: string;
106
+ driverParam: string;
107
+ notNull: true;
108
+ hasDefault: false;
109
+ isPrimaryKey: false;
110
+ isAutoincrement: false;
111
+ hasRuntimeDefault: false;
112
+ enumValues: [string, ...string[]];
113
+ baseColumn: never;
114
+ identity: undefined;
115
+ generated: undefined;
116
+ }, {}, {}>;
117
+ title: import("drizzle-orm/pg-core").PgColumn<{
118
+ name: "title";
119
+ tableName: "knowledge_records";
120
+ dataType: "string";
121
+ columnType: "PgText";
122
+ data: string;
123
+ driverParam: string;
124
+ notNull: true;
125
+ hasDefault: false;
126
+ isPrimaryKey: false;
127
+ isAutoincrement: false;
128
+ hasRuntimeDefault: false;
129
+ enumValues: [string, ...string[]];
130
+ baseColumn: never;
131
+ identity: undefined;
132
+ generated: undefined;
133
+ }, {}, {}>;
134
+ status: import("drizzle-orm/pg-core").PgColumn<{
135
+ name: "status";
136
+ tableName: "knowledge_records";
137
+ dataType: "string";
138
+ columnType: "PgText";
139
+ data: string;
140
+ driverParam: string;
141
+ notNull: true;
142
+ hasDefault: false;
143
+ isPrimaryKey: false;
144
+ isAutoincrement: false;
145
+ hasRuntimeDefault: false;
146
+ enumValues: [string, ...string[]];
147
+ baseColumn: never;
148
+ identity: undefined;
149
+ generated: undefined;
150
+ }, {}, {}>;
151
+ version: import("drizzle-orm/pg-core").PgColumn<{
152
+ name: "version";
153
+ tableName: "knowledge_records";
154
+ dataType: "number";
155
+ columnType: "PgInteger";
156
+ data: number;
157
+ driverParam: string | number;
158
+ notNull: true;
159
+ hasDefault: false;
160
+ isPrimaryKey: false;
161
+ isAutoincrement: false;
162
+ hasRuntimeDefault: false;
163
+ enumValues: undefined;
164
+ baseColumn: never;
165
+ identity: undefined;
166
+ generated: undefined;
167
+ }, {}, {}>;
168
+ by: import("drizzle-orm/pg-core").PgColumn<{
169
+ name: "by";
170
+ tableName: "knowledge_records";
171
+ dataType: "string";
172
+ columnType: "PgText";
173
+ data: string;
174
+ driverParam: string;
175
+ notNull: true;
176
+ hasDefault: false;
177
+ isPrimaryKey: false;
178
+ isAutoincrement: false;
179
+ hasRuntimeDefault: false;
180
+ enumValues: [string, ...string[]];
181
+ baseColumn: never;
182
+ identity: undefined;
183
+ generated: undefined;
184
+ }, {}, {}>;
185
+ why: import("drizzle-orm/pg-core").PgColumn<{
186
+ name: "why";
187
+ tableName: "knowledge_records";
188
+ dataType: "string";
189
+ columnType: "PgText";
190
+ data: string;
191
+ driverParam: string;
192
+ notNull: true;
193
+ hasDefault: false;
194
+ isPrimaryKey: false;
195
+ isAutoincrement: false;
196
+ hasRuntimeDefault: false;
197
+ enumValues: [string, ...string[]];
198
+ baseColumn: never;
199
+ identity: undefined;
200
+ generated: undefined;
201
+ }, {}, {}>;
202
+ path: import("drizzle-orm/pg-core").PgColumn<{
203
+ name: "path";
204
+ tableName: "knowledge_records";
205
+ dataType: "string";
206
+ columnType: "PgText";
207
+ data: string;
208
+ driverParam: string;
209
+ notNull: true;
210
+ hasDefault: false;
211
+ isPrimaryKey: false;
212
+ isAutoincrement: false;
213
+ hasRuntimeDefault: false;
214
+ enumValues: [string, ...string[]];
215
+ baseColumn: never;
216
+ identity: undefined;
217
+ generated: undefined;
218
+ }, {}, {}>;
219
+ topic: import("drizzle-orm/pg-core").PgColumn<{
220
+ name: "topic";
221
+ tableName: "knowledge_records";
222
+ dataType: "string";
223
+ columnType: "PgText";
224
+ data: string;
225
+ driverParam: string;
226
+ notNull: false;
227
+ hasDefault: false;
228
+ isPrimaryKey: false;
229
+ isAutoincrement: false;
230
+ hasRuntimeDefault: false;
231
+ enumValues: [string, ...string[]];
232
+ baseColumn: never;
233
+ identity: undefined;
234
+ generated: undefined;
235
+ }, {}, {}>;
236
+ source: import("drizzle-orm/pg-core").PgColumn<{
237
+ name: "source";
238
+ tableName: "knowledge_records";
239
+ dataType: "string";
240
+ columnType: "PgText";
241
+ data: string;
242
+ driverParam: string;
243
+ notNull: false;
244
+ hasDefault: false;
245
+ isPrimaryKey: false;
246
+ isAutoincrement: false;
247
+ hasRuntimeDefault: false;
248
+ enumValues: [string, ...string[]];
249
+ baseColumn: never;
250
+ identity: undefined;
251
+ generated: undefined;
252
+ }, {}, {}>;
253
+ body: import("drizzle-orm/pg-core").PgColumn<{
254
+ name: "body";
255
+ tableName: "knowledge_records";
256
+ dataType: "string";
257
+ columnType: "PgText";
258
+ data: string;
259
+ driverParam: string;
260
+ notNull: true;
261
+ hasDefault: false;
262
+ isPrimaryKey: false;
263
+ isAutoincrement: false;
264
+ hasRuntimeDefault: false;
265
+ enumValues: [string, ...string[]];
266
+ baseColumn: never;
267
+ identity: undefined;
268
+ generated: undefined;
269
+ }, {}, {}>;
270
+ data: import("drizzle-orm/pg-core").PgColumn<{
271
+ name: "data";
272
+ tableName: "knowledge_records";
273
+ dataType: "json";
274
+ columnType: "PgJsonb";
275
+ data: unknown;
276
+ driverParam: unknown;
277
+ notNull: true;
278
+ hasDefault: false;
279
+ isPrimaryKey: false;
280
+ isAutoincrement: false;
281
+ hasRuntimeDefault: false;
282
+ enumValues: undefined;
283
+ baseColumn: never;
284
+ identity: undefined;
285
+ generated: undefined;
286
+ }, {}, {}>;
287
+ created: import("drizzle-orm/pg-core").PgColumn<{
288
+ name: "created";
289
+ tableName: "knowledge_records";
290
+ dataType: "string";
291
+ columnType: "PgText";
292
+ data: string;
293
+ driverParam: string;
294
+ notNull: true;
295
+ hasDefault: false;
296
+ isPrimaryKey: false;
297
+ isAutoincrement: false;
298
+ hasRuntimeDefault: false;
299
+ enumValues: [string, ...string[]];
300
+ baseColumn: never;
301
+ identity: undefined;
302
+ generated: undefined;
303
+ }, {}, {}>;
304
+ updated: import("drizzle-orm/pg-core").PgColumn<{
305
+ name: "updated";
306
+ tableName: "knowledge_records";
307
+ dataType: "string";
308
+ columnType: "PgText";
309
+ data: string;
310
+ driverParam: string;
311
+ notNull: true;
312
+ hasDefault: false;
313
+ isPrimaryKey: false;
314
+ isAutoincrement: false;
315
+ hasRuntimeDefault: false;
316
+ enumValues: [string, ...string[]];
317
+ baseColumn: never;
318
+ identity: undefined;
319
+ generated: undefined;
320
+ }, {}, {}>;
321
+ };
322
+ dialect: "pg";
323
+ }>;
324
+ export declare const citesT: import("drizzle-orm/pg-core").PgTableWithColumns<{
325
+ name: "knowledge_cites";
326
+ schema: undefined;
327
+ columns: {
328
+ repo: import("drizzle-orm/pg-core").PgColumn<{
329
+ name: "repo";
330
+ tableName: "knowledge_cites";
331
+ dataType: "string";
332
+ columnType: "PgText";
333
+ data: string;
334
+ driverParam: string;
335
+ notNull: true;
336
+ hasDefault: false;
337
+ isPrimaryKey: false;
338
+ isAutoincrement: false;
339
+ hasRuntimeDefault: false;
340
+ enumValues: [string, ...string[]];
341
+ baseColumn: never;
342
+ identity: undefined;
343
+ generated: undefined;
344
+ }, {}, {}>;
345
+ from: import("drizzle-orm/pg-core").PgColumn<{
346
+ name: "from";
347
+ tableName: "knowledge_cites";
348
+ dataType: "string";
349
+ columnType: "PgText";
350
+ data: string;
351
+ driverParam: string;
352
+ notNull: true;
353
+ hasDefault: false;
354
+ isPrimaryKey: false;
355
+ isAutoincrement: false;
356
+ hasRuntimeDefault: false;
357
+ enumValues: [string, ...string[]];
358
+ baseColumn: never;
359
+ identity: undefined;
360
+ generated: undefined;
361
+ }, {}, {}>;
362
+ to: import("drizzle-orm/pg-core").PgColumn<{
363
+ name: "to";
364
+ tableName: "knowledge_cites";
365
+ dataType: "string";
366
+ columnType: "PgText";
367
+ data: string;
368
+ driverParam: string;
369
+ notNull: true;
370
+ hasDefault: false;
371
+ isPrimaryKey: false;
372
+ isAutoincrement: false;
373
+ hasRuntimeDefault: false;
374
+ enumValues: [string, ...string[]];
375
+ baseColumn: never;
376
+ identity: undefined;
377
+ generated: undefined;
378
+ }, {}, {}>;
379
+ };
380
+ dialect: "pg";
381
+ }>;
382
+ export type Db = PgDatabase<any, any, any>;
383
+ export type Row = typeof recordsT.$inferSelect;
384
+ export interface Synced {
385
+ repo: string;
386
+ head: string | null;
387
+ mode: "none" | "diff" | "full";
388
+ upserted: number;
389
+ deleted: number;
390
+ broken: Broken[];
391
+ }
392
+ export declare class RecordIndex {
393
+ readonly db: Db;
394
+ private readonly close_;
395
+ private ready;
396
+ constructor(db: Db, close_?: () => Promise<void>);
397
+ close(): Promise<void>;
398
+ /** Create the tables; a schema change drops and rebuilds them. */
399
+ init(): Promise<void>;
400
+ indexedHead(repo: string): Promise<string | null>;
401
+ /** Bring `repo` up to the checkout's HEAD. `full` rebuilds it from the files. */
402
+ sync(root: string, repo: string, opts?: {
403
+ full?: boolean;
404
+ }): Promise<Synced>;
405
+ get(repo: string, id: string): Promise<{
406
+ record: {
407
+ repo: string;
408
+ id: string;
409
+ type: string;
410
+ title: string;
411
+ status: string;
412
+ version: number;
413
+ by: string;
414
+ why: string;
415
+ path: string;
416
+ topic: string | null;
417
+ source: string | null;
418
+ body: string;
419
+ data: unknown;
420
+ created: string;
421
+ updated: string;
422
+ };
423
+ cites: {
424
+ id: string;
425
+ type: string | null;
426
+ title: string | null;
427
+ status: string;
428
+ }[];
429
+ citedBy: {
430
+ id: string;
431
+ type: string | null;
432
+ title: string | null;
433
+ status: string;
434
+ }[];
435
+ } | null>;
436
+ /** other = "to": what `id` cites; "from": what cites `id`. */
437
+ private linked;
438
+ find(repo: string | null, f?: {
439
+ q?: string;
440
+ type?: RecordType;
441
+ topic?: string;
442
+ status?: string;
443
+ limit?: number;
444
+ }): Promise<Row[]>;
445
+ /** Live records whose evidence is missing, retired, or changed after them. */
446
+ stale(repo: string): Promise<{
447
+ id: string;
448
+ type: string;
449
+ title: string;
450
+ cites: string;
451
+ why: string;
452
+ }[]>;
453
+ }
454
+ /** PGlite in a folder (a checkout's own), or Postgres when a URL is given. */
455
+ export declare function openIndex(opts: {
456
+ url?: string;
457
+ dir?: string;
458
+ }): Promise<RecordIndex>;