@wrenautomation/knowledge 0.59.1 → 0.60.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/README.md +6 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lint.js +9 -0
- package/dist/lint.js.map +1 -1
- package/dist/records.d.ts +40 -1
- package/dist/records.js +30 -7
- package/dist/records.js.map +1 -1
- package/dist/source-id.d.ts +6 -0
- package/dist/source-id.js +68 -0
- package/dist/source-id.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ cd my-notes && git init && knowledge init --owner ana
|
|
|
11
11
|
|
|
12
12
|
## Records
|
|
13
13
|
|
|
14
|
-
One file each. The folder says the type: `sources/`, `findings/`, `verdicts/`, `rules/<topic>/`, `guides/`.
|
|
14
|
+
One file each. The folder says the type: `sources/`, `findings/`, `patterns/`, `verdicts/`, `rules/<topic>/`, `guides/`.
|
|
15
15
|
|
|
16
16
|
```md
|
|
17
17
|
---
|
|
@@ -36,12 +36,15 @@ Put the name in line one.
|
|
|
36
36
|
|---|---|
|
|
37
37
|
| source | `kind` (site, page, video, reel, post, person, tool, doc, paper, feed, repo, list, other), `url`, `handle`, `priority` 1-9, `media` {sha256, type} |
|
|
38
38
|
| finding | `source` (a source's id), `quote` (the source's words; none for a paraphrase), `page`, `at` (0:16, p. 4), `run` |
|
|
39
|
+
| pattern | `sites` (distinct sites across its findings), `run`. What several findings say together; `cites` the findings |
|
|
39
40
|
| verdict | `from` (vireo, orrery, owner, other), `ref` (hero:3), `score` |
|
|
40
41
|
| rule | `topic`, `order` |
|
|
41
42
|
| guide | `topic`, `description`. A procedure (an SOP) as one doc; its body cites `[2]` or `[2 0:16]`, the 2nd id in `cites` |
|
|
42
43
|
|
|
43
44
|
Every record: `id`, `title`, `status` (live, retired), `version`, `by`, `why`, `cites`, `tags`, `created`,
|
|
44
|
-
`updated`. Other keys are kept. A
|
|
45
|
+
`updated`. Other keys are kept. A source's id comes from `sourceId(url)`: the platform's own id where there is one
|
|
46
|
+
(`youtube-<v>`, `instagram-<code>`, `reddit-<post>`, `hn-<item>`, `x-<status>`, `arxiv-<id>`), else
|
|
47
|
+
`web-<host and path>`; `urlKey` says when two URLs are one page. A file whose name starts with `_` is not a record (a site's folder page).
|
|
45
48
|
|
|
46
49
|
## Writes
|
|
47
50
|
|
|
@@ -57,7 +60,7 @@ knowledge apply --by agent-7 --why "…" < changes.json # [{"op":"add|edit|re
|
|
|
57
60
|
- One command = one commit. The whole tree is linted first; a fault in a record it touches refuses the
|
|
58
61
|
change and writes nothing. A failed commit puts every file back.
|
|
59
62
|
- The lint: unique ids, a file at the path its type and id call for, every cite in the repo, a finding's
|
|
60
|
-
source is a source, a guide's `[n]` is in its cites, a rule cites its evidence (only the owner in `knowledge.json` may write one with
|
|
63
|
+
source is a source, a pattern cites findings (or patterns) only, a guide's `[n]` is in its cites, a rule cites its evidence (only the owner in `knowledge.json` may write one with
|
|
61
64
|
none). A live record that cites a retired one is a warning.
|
|
62
65
|
- `--push`, or `"push": true` in `knowledge.json`, pushes after the commit. A rejected push fetches, merges,
|
|
63
66
|
lints the merge (two clean branches can still break a cite) and tries again; a bad merge is undone.
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
package/dist/lint.js
CHANGED
|
@@ -39,6 +39,15 @@ export function lint(tree, owner) {
|
|
|
39
39
|
if (s && s.type !== "source")
|
|
40
40
|
e("error", `source ${fm.source} is a ${s.type}, not a source`);
|
|
41
41
|
}
|
|
42
|
+
if (fm.type === "pattern") {
|
|
43
|
+
if (!fm.cites.length)
|
|
44
|
+
e("error", "a pattern cites the findings it rests on");
|
|
45
|
+
for (const to of fm.cites) {
|
|
46
|
+
const t = byId.get(to)?.doc.fm;
|
|
47
|
+
if (t && t.type !== "finding" && t.type !== "pattern")
|
|
48
|
+
e("error", `cites ${to}, a ${t.type}: a pattern rests on findings`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
42
51
|
if (fm.type === "guide")
|
|
43
52
|
for (const m of l.doc.body.matchAll(CITE_NUMBER)) {
|
|
44
53
|
const n = Number(m[1]);
|
package/dist/lint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
package/dist/records.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
export declare const TYPES: readonly ["source", "finding", "verdict", "rule", "guide"];
|
|
2
|
+
export declare const TYPES: readonly ["source", "finding", "pattern", "verdict", "rule", "guide"];
|
|
3
3
|
export type RecordType = (typeof TYPES)[number];
|
|
4
4
|
export declare const DIRS: Record<RecordType, string>;
|
|
5
5
|
export declare const Id: z.ZodString;
|
|
@@ -63,6 +63,24 @@ export declare const Finding: z.ZodObject<{
|
|
|
63
63
|
created: z.ZodPreprocess<z.ZodString, unknown>;
|
|
64
64
|
updated: z.ZodPreprocess<z.ZodString, unknown>;
|
|
65
65
|
}, z.core.$loose>;
|
|
66
|
+
export declare const Pattern: z.ZodObject<{
|
|
67
|
+
type: z.ZodLiteral<"pattern">;
|
|
68
|
+
sites: z.ZodOptional<z.ZodNumber>;
|
|
69
|
+
run: z.ZodOptional<z.ZodString>;
|
|
70
|
+
id: z.ZodString;
|
|
71
|
+
title: z.ZodString;
|
|
72
|
+
status: z.ZodEnum<{
|
|
73
|
+
live: "live";
|
|
74
|
+
retired: "retired";
|
|
75
|
+
}>;
|
|
76
|
+
version: z.ZodNumber;
|
|
77
|
+
by: z.ZodString;
|
|
78
|
+
why: z.ZodString;
|
|
79
|
+
cites: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
80
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
81
|
+
created: z.ZodPreprocess<z.ZodString, unknown>;
|
|
82
|
+
updated: z.ZodPreprocess<z.ZodString, unknown>;
|
|
83
|
+
}, z.core.$loose>;
|
|
66
84
|
export declare const Verdict: z.ZodObject<{
|
|
67
85
|
type: z.ZodLiteral<"verdict">;
|
|
68
86
|
from: z.ZodEnum<{
|
|
@@ -180,6 +198,23 @@ export declare const Frontmatter: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
180
198
|
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
181
199
|
created: z.ZodPreprocess<z.ZodString, unknown>;
|
|
182
200
|
updated: z.ZodPreprocess<z.ZodString, unknown>;
|
|
201
|
+
}, z.core.$loose>, z.ZodObject<{
|
|
202
|
+
type: z.ZodLiteral<"pattern">;
|
|
203
|
+
sites: z.ZodOptional<z.ZodNumber>;
|
|
204
|
+
run: z.ZodOptional<z.ZodString>;
|
|
205
|
+
id: z.ZodString;
|
|
206
|
+
title: z.ZodString;
|
|
207
|
+
status: z.ZodEnum<{
|
|
208
|
+
live: "live";
|
|
209
|
+
retired: "retired";
|
|
210
|
+
}>;
|
|
211
|
+
version: z.ZodNumber;
|
|
212
|
+
by: z.ZodString;
|
|
213
|
+
why: z.ZodString;
|
|
214
|
+
cites: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
215
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
216
|
+
created: z.ZodPreprocess<z.ZodString, unknown>;
|
|
217
|
+
updated: z.ZodPreprocess<z.ZodString, unknown>;
|
|
183
218
|
}, z.core.$loose>, z.ZodObject<{
|
|
184
219
|
type: z.ZodLiteral<"verdict">;
|
|
185
220
|
from: z.ZodEnum<{
|
|
@@ -251,6 +286,10 @@ export declare function pathOf(fm: Pick<Frontmatter, "type" | "id"> & {
|
|
|
251
286
|
export declare const CITE_NUMBER: RegExp;
|
|
252
287
|
/** The ids a record leans on: its cites, and a finding's source. */
|
|
253
288
|
export declare function edgesOf(fm: Frontmatter): string[];
|
|
289
|
+
/** A title as an id's head: lower case, dashes, at most `max` characters. */
|
|
290
|
+
export declare function slugOf(title: string, max?: number): string;
|
|
291
|
+
/** Slug + a tail: random for a new record, or the writer's own stable id (a ledger id) so a rerun lands on the same file. */
|
|
292
|
+
export declare function idOf(title: string, tail: string): string;
|
|
254
293
|
export declare function newId(title: string): string;
|
|
255
294
|
export type Parsed = {
|
|
256
295
|
ok: true;
|
package/dist/records.js
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
import { randomBytes } from "node:crypto";
|
|
6
6
|
import matter from "gray-matter";
|
|
7
7
|
import { z } from "zod";
|
|
8
|
-
export const TYPES = ["source", "finding", "verdict", "rule", "guide"];
|
|
8
|
+
export const TYPES = ["source", "finding", "pattern", "verdict", "rule", "guide"];
|
|
9
9
|
export const DIRS = {
|
|
10
10
|
source: "sources",
|
|
11
11
|
finding: "findings",
|
|
12
|
+
pattern: "patterns",
|
|
12
13
|
verdict: "verdicts",
|
|
13
14
|
rule: "rules",
|
|
14
15
|
guide: "guides",
|
|
@@ -69,6 +70,14 @@ export const Finding = z.looseObject({
|
|
|
69
70
|
at: Text.optional(),
|
|
70
71
|
run: z.string().optional(),
|
|
71
72
|
});
|
|
73
|
+
// what several findings say together; cites = the findings (or patterns) it rests on
|
|
74
|
+
export const Pattern = z.looseObject({
|
|
75
|
+
...base,
|
|
76
|
+
type: z.literal("pattern"),
|
|
77
|
+
// distinct sites across the cited findings, counted by the writer
|
|
78
|
+
sites: z.number().int().positive().optional(),
|
|
79
|
+
run: z.string().optional(),
|
|
80
|
+
});
|
|
72
81
|
export const Verdict = z.looseObject({
|
|
73
82
|
...base,
|
|
74
83
|
type: z.literal("verdict"),
|
|
@@ -92,7 +101,14 @@ export const Guide = z.looseObject({
|
|
|
92
101
|
// one line: what the guide is for (a skill's description)
|
|
93
102
|
description: z.string().optional(),
|
|
94
103
|
});
|
|
95
|
-
export const Frontmatter = z.discriminatedUnion("type", [
|
|
104
|
+
export const Frontmatter = z.discriminatedUnion("type", [
|
|
105
|
+
Source,
|
|
106
|
+
Finding,
|
|
107
|
+
Pattern,
|
|
108
|
+
Verdict,
|
|
109
|
+
Rule,
|
|
110
|
+
Guide,
|
|
111
|
+
]);
|
|
96
112
|
/** Where a record lives in the repo. A rule sits under its topic. */
|
|
97
113
|
export function pathOf(fm) {
|
|
98
114
|
const dir = DIRS[fm.type];
|
|
@@ -104,18 +120,25 @@ export const CITE_NUMBER = /\[(\d+)((?: (?:\d{1,2}:\d{2}(?::\d{2})?(?:, \d{1,2}:
|
|
|
104
120
|
export function edgesOf(fm) {
|
|
105
121
|
return [...new Set(fm.type === "finding" ? [...fm.cites, fm.source] : fm.cites)];
|
|
106
122
|
}
|
|
107
|
-
|
|
108
|
-
export function
|
|
109
|
-
|
|
123
|
+
/** A title as an id's head: lower case, dashes, at most `max` characters. */
|
|
124
|
+
export function slugOf(title, max = 40) {
|
|
125
|
+
return title
|
|
110
126
|
.toLowerCase()
|
|
111
127
|
.normalize("NFKD")
|
|
112
128
|
.replace(/[^a-z0-9]+/g, "-")
|
|
113
129
|
.replace(/^-+|-+$/g, "")
|
|
114
|
-
.slice(0,
|
|
130
|
+
.slice(0, max)
|
|
115
131
|
.replace(/-+$/, "");
|
|
116
|
-
|
|
132
|
+
}
|
|
133
|
+
/** Slug + a tail: random for a new record, or the writer's own stable id (a ledger id) so a rerun lands on the same file. */
|
|
134
|
+
export function idOf(title, tail) {
|
|
135
|
+
const slug = slugOf(title);
|
|
117
136
|
return slug ? `${slug}-${tail}` : tail;
|
|
118
137
|
}
|
|
138
|
+
const B32 = "0123456789abcdefghjkmnpqrstvwxyz";
|
|
139
|
+
export function newId(title) {
|
|
140
|
+
return idOf(title, [...randomBytes(6)].map((b) => B32[b % 32]).join(""));
|
|
141
|
+
}
|
|
119
142
|
export function parse(text) {
|
|
120
143
|
let m;
|
|
121
144
|
try {
|
package/dist/records.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.js","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Lower-case host without www., m. and the like. */
|
|
2
|
+
export declare const hostKey: (u: URL) => string;
|
|
3
|
+
/** The id a source at this URL gets. Not a URL: `web-` and its slug. */
|
|
4
|
+
export declare function sourceId(url: string): string;
|
|
5
|
+
/** A URL as two writers would agree on it: no hash, no trailing slash, host as `hostKey`. */
|
|
6
|
+
export declare function urlKey(url: string): string;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A source's natural id from its URL: the platform's own id where it has one (`youtube-<v>`,
|
|
3
|
+
* `instagram-<code>`), else `web-<host and path>`. One function for every writer, so one URL is one
|
|
4
|
+
* source record whoever reads it first.
|
|
5
|
+
*/
|
|
6
|
+
import { slugOf } from "./records.js";
|
|
7
|
+
const HOST_PREFIX = /^(www|m|mobile|old|new|music)\./;
|
|
8
|
+
/** Lower-case host without www., m. and the like. */
|
|
9
|
+
export const hostKey = (u) => u.hostname.toLowerCase().replace(HOST_PREFIX, "");
|
|
10
|
+
function platformId(u) {
|
|
11
|
+
const host = hostKey(u);
|
|
12
|
+
const path = u.pathname;
|
|
13
|
+
const at = (re) => path.match(re)?.[1] ?? null;
|
|
14
|
+
const tag = (prefix, id) => (id ? `${prefix}-${id}` : null);
|
|
15
|
+
switch (host) {
|
|
16
|
+
case "youtube.com":
|
|
17
|
+
return tag("youtube", u.searchParams.get("v")?.match(/^[A-Za-z0-9_-]{11}$/)?.[0] ??
|
|
18
|
+
at(/^\/(?:shorts|live|embed)\/([A-Za-z0-9_-]{11})/));
|
|
19
|
+
case "youtu.be":
|
|
20
|
+
return tag("youtube", at(/^\/([A-Za-z0-9_-]{11})/));
|
|
21
|
+
case "instagram.com":
|
|
22
|
+
return tag("instagram", at(/\/(?:reels?|p|tv)\/([A-Za-z0-9_-]+)/));
|
|
23
|
+
case "tiktok.com":
|
|
24
|
+
return tag("tiktok", at(/\/(?:video|photo)\/(\d+)/));
|
|
25
|
+
case "x.com":
|
|
26
|
+
case "twitter.com":
|
|
27
|
+
return tag("x", at(/\/status(?:es)?\/(\d+)/));
|
|
28
|
+
case "reddit.com":
|
|
29
|
+
return tag("reddit", at(/\/comments\/([a-z0-9]+)/i)?.toLowerCase() ?? null);
|
|
30
|
+
case "news.ycombinator.com":
|
|
31
|
+
return tag("hn", u.searchParams.get("id")?.match(/^\d+$/)?.[0] ?? null);
|
|
32
|
+
case "linkedin.com":
|
|
33
|
+
return tag("linkedin", `${path}${u.search}`.match(/(?:activity|ugcPost|share)[:-](\d{15,})/)?.[1] ?? null);
|
|
34
|
+
case "arxiv.org":
|
|
35
|
+
return tag("arxiv", at(/^\/(?:abs|pdf|html)\/(\d{4}\.\d{4,5})/));
|
|
36
|
+
case "github.com": {
|
|
37
|
+
const m = path.match(/^\/([A-Za-z0-9-]+)\/([A-Za-z0-9._-]+)/);
|
|
38
|
+
return m ? `github-${slugOf(`${m[1]}-${m[2]?.replace(/\.git$/, "")}`, 100)}` : null;
|
|
39
|
+
}
|
|
40
|
+
default:
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** The id a source at this URL gets. Not a URL: `web-` and its slug. */
|
|
45
|
+
export function sourceId(url) {
|
|
46
|
+
let u;
|
|
47
|
+
try {
|
|
48
|
+
u = new URL(url);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return `web-${slugOf(url, 80) || "page"}`;
|
|
52
|
+
}
|
|
53
|
+
return platformId(u) ?? `web-${slugOf(`${hostKey(u)}${u.pathname}`, 80) || "page"}`;
|
|
54
|
+
}
|
|
55
|
+
/** A URL as two writers would agree on it: no hash, no trailing slash, host as `hostKey`. */
|
|
56
|
+
export function urlKey(url) {
|
|
57
|
+
try {
|
|
58
|
+
const u = new URL(url);
|
|
59
|
+
const id = platformId(u);
|
|
60
|
+
if (id)
|
|
61
|
+
return id;
|
|
62
|
+
return `${hostKey(u)}${u.pathname.replace(/\/+$/, "")}${u.search}`;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return url;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=source-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-id.js","sourceRoot":"","sources":["../src/source-id.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrenautomation/knowledge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.1",
|
|
4
4
|
"description": "Knowledge as files: sources, findings, verdicts and rules as markdown records in a git repo, each linked to its evidence. One commit is one transaction; a lint guards every write; a Postgres (or PGlite) index built from the commits answers queries, backlinks and stale marks.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|