blacksmith-organization-system 1.5.1 → 1.7.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 (90) hide show
  1. package/dist/bos.d.ts +15 -0
  2. package/dist/bos.js +54 -0
  3. package/dist/bos.js.map +1 -1
  4. package/dist/bridges/git-integration/local-git.d.ts +1 -0
  5. package/dist/bridges/git-integration/local-git.js +7 -0
  6. package/dist/bridges/git-integration/local-git.js.map +1 -1
  7. package/dist/core/host.d.ts +2 -0
  8. package/dist/core/omnis.d.ts +40 -0
  9. package/dist/core/omnis.js +163 -0
  10. package/dist/core/omnis.js.map +1 -0
  11. package/dist/core/patterning.d.ts +19 -0
  12. package/dist/core/patterning.js +61 -0
  13. package/dist/core/patterning.js.map +1 -0
  14. package/dist/core/ruling.d.ts +34 -0
  15. package/dist/core/ruling.js +97 -0
  16. package/dist/core/ruling.js.map +1 -0
  17. package/dist/hosts/node.d.ts +2 -1
  18. package/dist/hosts/node.js +19 -1
  19. package/dist/hosts/node.js.map +1 -1
  20. package/dist/index.d.ts +3 -0
  21. package/dist/index.js +3 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/models/almanac/load.d.ts +12 -0
  24. package/dist/models/almanac/load.js +38 -0
  25. package/dist/models/almanac/load.js.map +1 -0
  26. package/dist/models/index.d.ts +1 -0
  27. package/dist/models/index.js +1 -0
  28. package/dist/models/index.js.map +1 -1
  29. package/dist/models/workshop/class.d.ts +1 -0
  30. package/dist/models/workshop/class.js +4 -0
  31. package/dist/models/workshop/class.js.map +1 -1
  32. package/dist/models/workshop/locate.js +12 -5
  33. package/dist/models/workshop/locate.js.map +1 -1
  34. package/dist/procedures/index.d.ts +3 -0
  35. package/dist/procedures/index.js +3 -0
  36. package/dist/procedures/index.js.map +1 -1
  37. package/dist/procedures/inspecting/_index.js +2 -0
  38. package/dist/procedures/inspecting/_index.js.map +1 -1
  39. package/dist/procedures/inspecting/read-omnis.d.ts +2 -0
  40. package/dist/procedures/inspecting/read-omnis.js +14 -0
  41. package/dist/procedures/inspecting/read-omnis.js.map +1 -0
  42. package/dist/procedures/inspecting/report.d.ts +6 -0
  43. package/dist/procedures/inspecting/report.js +1 -0
  44. package/dist/procedures/inspecting/report.js.map +1 -1
  45. package/dist/procedures/inspecting/rules.d.ts +1 -0
  46. package/dist/procedures/inspecting/rules.js +10 -0
  47. package/dist/procedures/inspecting/rules.js.map +1 -1
  48. package/dist/procedures/judging/_index.d.ts +4 -0
  49. package/dist/procedures/judging/_index.js +8 -0
  50. package/dist/procedures/judging/_index.js.map +1 -0
  51. package/dist/procedures/judging/context.d.ts +10 -0
  52. package/dist/procedures/judging/context.js +2 -0
  53. package/dist/procedures/judging/context.js.map +1 -0
  54. package/dist/procedures/judging/steps.d.ts +4 -0
  55. package/dist/procedures/judging/steps.js +21 -0
  56. package/dist/procedures/judging/steps.js.map +1 -0
  57. package/dist/procedures/recalling/_index.d.ts +4 -0
  58. package/dist/procedures/recalling/_index.js +8 -0
  59. package/dist/procedures/recalling/_index.js.map +1 -0
  60. package/dist/procedures/recalling/context.d.ts +10 -0
  61. package/dist/procedures/recalling/context.js +2 -0
  62. package/dist/procedures/recalling/context.js.map +1 -0
  63. package/dist/procedures/recalling/steps.d.ts +4 -0
  64. package/dist/procedures/recalling/steps.js +12 -0
  65. package/dist/procedures/recalling/steps.js.map +1 -0
  66. package/dist/procedures/sealing/_index.d.ts +5 -0
  67. package/dist/procedures/sealing/_index.js +11 -0
  68. package/dist/procedures/sealing/_index.js.map +1 -0
  69. package/dist/procedures/sealing/context.d.ts +20 -0
  70. package/dist/procedures/sealing/context.js +4 -0
  71. package/dist/procedures/sealing/context.js.map +1 -0
  72. package/dist/procedures/sealing/steps.d.ts +9 -0
  73. package/dist/procedures/sealing/steps.js +44 -0
  74. package/dist/procedures/sealing/steps.js.map +1 -0
  75. package/dist/tools/_index.js +2 -0
  76. package/dist/tools/_index.js.map +1 -1
  77. package/dist/tools/almanac.d.ts +1 -0
  78. package/dist/tools/almanac.js +56 -0
  79. package/dist/tools/almanac.js.map +1 -0
  80. package/dist/tools/project.js +28 -0
  81. package/dist/tools/project.js.map +1 -1
  82. package/dist/views/almanac.d.ts +5 -0
  83. package/dist/views/almanac.js +59 -0
  84. package/dist/views/almanac.js.map +1 -0
  85. package/dist/views/sealing.d.ts +2 -0
  86. package/dist/views/sealing.js +26 -0
  87. package/dist/views/sealing.js.map +1 -0
  88. package/package.json +4 -1
  89. package/resources/almanac/patterning/bos-core.json +90 -0
  90. package/resources/almanac/rulesets/bos-environment.json +141 -0
package/dist/bos.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { Element } from "./core/element.ts";
2
2
  import type { Host } from "./core/host.ts";
3
+ import { type Allocators } from "./core/omnis.ts";
4
+ import type { Case } from "./core/ruling.ts";
3
5
  import type { LoopEvent } from "./core/version.ts";
4
6
  import * as Models from "./models/index.ts";
5
7
  import * as Procedures from "./procedures/index.ts";
@@ -70,6 +72,19 @@ export declare class BOS {
70
72
  dir?: string;
71
73
  dryRun?: boolean;
72
74
  }): Promise<Procedures.CreditOutcome>;
75
+ omnis({ dir, seal, dryRun, allocators, }?: {
76
+ dir?: string;
77
+ seal?: boolean;
78
+ dryRun?: boolean;
79
+ allocators?: Allocators;
80
+ }): Promise<Procedures.SealOutcome>;
81
+ almanac(dir?: string): Models.Almanac;
82
+ judge(description: string | Case, { dir }?: {
83
+ dir?: string;
84
+ }): Promise<Procedures.JudgeContext>;
85
+ recall(events: string[], { dir }?: {
86
+ dir?: string;
87
+ }): Promise<Procedures.RecallContext>;
73
88
  propose(branch: string, { dir, dryRun }?: {
74
89
  dir?: string;
75
90
  dryRun?: boolean;
package/dist/bos.js CHANGED
@@ -5,6 +5,7 @@
5
5
  import { GitHub, LocalGit } from "./bridges/index.js";
6
6
  import { createContext } from "./core/context.js";
7
7
  import { Element } from "./core/element.js";
8
+ import { DEFAULT_ALLOCATORS, OMNIS_FILE } from "./core/omnis.js";
8
9
  import * as Models from "./models/index.js";
9
10
  import * as Procedures from "./procedures/index.js";
10
11
  export class BOS {
@@ -34,6 +35,9 @@ export class BOS {
34
35
  options;
35
36
  #workshop = null;
36
37
  constructor(host, options = {}) {
38
+ if (!host) {
39
+ throw new TypeError("new BOS(host): give it the machine, e.g. new BOS(new NodeHost())");
40
+ }
37
41
  this.host = host;
38
42
  this.options = options;
39
43
  }
@@ -161,6 +165,56 @@ export class BOS {
161
165
  };
162
166
  return (await Procedures.crediting.run(context)).outcome;
163
167
  }
168
+ // the project's halo (.bos/.omnis.toml) now, against the sealed one; seal: true writes it
169
+ async omnis({ dir, seal = false, dryRun = false, allocators = DEFAULT_ALLOCATORS, } = {}) {
170
+ const { project } = this.loop(dir);
171
+ const context = {
172
+ ...createContext(this.host, { dryRun }),
173
+ projectPath: project.path,
174
+ git: new LocalGit(this.host, project.path),
175
+ allocators,
176
+ seal,
177
+ sealed: null,
178
+ halo: [],
179
+ outcome: Procedures.unsealed(`${project.path}/${OMNIS_FILE}`),
180
+ };
181
+ return (await Procedures.sealing.run(context)).outcome;
182
+ }
183
+ // the almanac of the project around dir (docs/almanac/), then the universal one of the core
184
+ almanac(dir) {
185
+ return Models.almanacOf(this.host, this.#around(dir));
186
+ }
187
+ // the project around dir, or dir itself outside a repository (the universal almanac still holds)
188
+ #around(dir) {
189
+ try {
190
+ return Models.projectAround(this.host, dir).path;
191
+ }
192
+ catch {
193
+ return dir ?? this.host.cwd();
194
+ }
195
+ }
196
+ // does a case break a rule of the almanac: in words ("Cleo pushes to master"), JSON, or fields
197
+ async judge(description, { dir } = {}) {
198
+ return Procedures.judging.run({
199
+ ...createContext(this.host),
200
+ projectPath: this.#around(dir),
201
+ description,
202
+ almanac: { places: [], rulesets: [], chains: [] },
203
+ case: {},
204
+ judgement: null,
205
+ });
206
+ }
207
+ // the chains of events met before that hold these events, and what usually comes next
208
+ async recall(events, { dir } = {}) {
209
+ return Procedures.recalling.run({
210
+ ...createContext(this.host),
211
+ projectPath: this.#around(dir),
212
+ events,
213
+ almanac: { places: [], rulesets: [], chains: [] },
214
+ prediction: null,
215
+ chains: [],
216
+ });
217
+ }
164
218
  // open the pull request of a branch's forward step on GitHub
165
219
  async propose(branch, { dir, dryRun = false } = {}) {
166
220
  const { project, loop } = this.loop(dir);
package/dist/bos.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bos.js","sourceRoot":"","sources":["../src/bos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bos.js","sourceRoot":"","sources":["../src/bos.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { Git } from "./git-base.ts";
2
2
  export declare class LocalGit extends Git {
3
3
  tagExists(tag: string): boolean;
4
4
  tags(pattern: string): string[];
5
+ files(dir?: string): string[];
5
6
  mergeFile(ours: string, base: string, theirs: string): boolean;
6
7
  identities(): string[];
7
8
  }
@@ -11,6 +11,13 @@ export class LocalGit extends Git {
11
11
  tags(pattern) {
12
12
  return this.git(["tag", "--list", pattern]).split("\n").filter(Boolean);
13
13
  }
14
+ // the files below dir (relative to it) that no .gitignore leaves out: tracked ones
15
+ // and new ones (git ls-files --cached --others --exclude-standard)
16
+ files(dir = ".") {
17
+ return this.git(["ls-files", "-z", "--cached", "--others", "--exclude-standard", "--", dir])
18
+ .split("\0")
19
+ .filter(Boolean);
20
+ }
14
21
  // a three-way merge of files into ours (git merge-file); true when it has conflicts
15
22
  mergeFile(ours, base, theirs) {
16
23
  const { status, stderr } = this.host.run("git", ["merge-file", ours, base, theirs], {
@@ -1 +1 @@
1
- {"version":3,"file":"local-git.js","sourceRoot":"","sources":["../../../src/bridges/git-integration/local-git.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,0FAA0F;AAC1F,0BAA0B;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,OAAO,QAAS,SAAQ,GAAG;IAC/B,8DAA8D;IAC9D,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IAClD,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,oFAAoF;IACpF,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,MAAc;QAClD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;YAClF,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,4EAA4E;IAC5E,iFAAiF;IACjF,UAAU;QACR,MAAM,MAAM,GAAG,+EAA+E,CAAC;QAC/F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,MAAM,EAAE,CAAC,EAAE;YAC1F,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QACH,8CAA8C;QAC9C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;CACF"}
1
+ {"version":3,"file":"local-git.js","sourceRoot":"","sources":["../../../src/bridges/git-integration/local-git.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,0FAA0F;AAC1F,0BAA0B;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,OAAO,QAAS,SAAQ,GAAG;IAC/B,8DAA8D;IAC9D,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IAClD,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,mFAAmF;IACnF,mEAAmE;IACnE,KAAK,CAAC,GAAG,GAAG,GAAG;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;aACzF,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,oFAAoF;IACpF,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,MAAc;QAClD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;YAClF,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,4EAA4E;IAC5E,iFAAiF;IACjF,UAAU;QACR,MAAM,MAAM,GAAG,+EAA+E,CAAC;QAC/F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,MAAM,EAAE,CAAC,EAAE;YAC1F,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QACH,8CAA8C;QAC9C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -11,6 +11,7 @@ export type RunResult = {
11
11
  stdout: string;
12
12
  stderr: string;
13
13
  };
14
+ export type DigestAlgorithm = "sha1" | "md5" | "crc32";
14
15
  export interface Host {
15
16
  exists(path: string): boolean;
16
17
  isDirectory(path: string): boolean;
@@ -18,6 +19,7 @@ export interface Host {
18
19
  readText(path: string): string | null;
19
20
  writeText(path: string, text: string): void;
20
21
  appendText(path: string, text: string): void;
22
+ digest(path: string, algorithm: DigestAlgorithm): string | null;
21
23
  mkdir(path: string): void;
22
24
  watch(root: string, onChange: (change: Change) => void, onError: (error: Error) => void, skip?: (relative: string) => boolean): () => void;
23
25
  run(command: string, args: string[], options?: {
@@ -0,0 +1,40 @@
1
+ import type { DigestAlgorithm, Host } from "./host.ts";
2
+ export declare const OMNIS_FILE = ".bos/.omnis.toml";
3
+ export declare function a12y(word: string): string;
4
+ export declare function crc32(text: string): string;
5
+ export declare function adler32(text: string): string;
6
+ export declare function base32(text: string): string;
7
+ export declare const KEYNAME_ALLOCATORS: {
8
+ readonly crc32: (path: string) => string;
9
+ readonly adler32: (path: string) => string;
10
+ readonly a12y: (path: string) => string;
11
+ };
12
+ export type KeynameAllocator = keyof typeof KEYNAME_ALLOCATORS;
13
+ export type Allocators = {
14
+ keyname: KeynameAllocator[];
15
+ valuedata: DigestAlgorithm[];
16
+ };
17
+ export declare const DEFAULT_ALLOCATORS: Allocators;
18
+ export declare function counted(path: string): boolean;
19
+ export declare function ownFiles(host: Host, root: string, files: string[]): string[];
20
+ export type Hallow = {
21
+ key: string;
22
+ value: string;
23
+ path: string;
24
+ };
25
+ export declare function hallow(host: Host, root: string, path: string, allocators?: Allocators): Hallow | null;
26
+ export declare function omnis(host: Host, root: string, files: string[], allocators?: Allocators): Hallow[];
27
+ export declare function omnisToml(hallows: Hallow[], unixusat: number, allocators?: Allocators): string;
28
+ export type Sealed = {
29
+ unixusat: number;
30
+ allocators: Allocators;
31
+ hallows: Map<string, string>;
32
+ };
33
+ export declare function readOmnis(text: string): Sealed;
34
+ export type Drift = {
35
+ added: string[];
36
+ changed: string[];
37
+ removed: number;
38
+ };
39
+ export declare function drift(sealed: Sealed, now: Hallow[]): Drift;
40
+ export declare const unchanged: (d: Drift) => boolean;
@@ -0,0 +1,163 @@
1
+ export const OMNIS_FILE = ".bos/.omnis.toml";
2
+ // a12y, the owner's algorithm (not a numeronym like a11y): the first letter, the length and
3
+ // the last letter of any string: "authenticity" → "a12y", "ab" → "a2b", "x" → "x1x"
4
+ export function a12y(word) {
5
+ const letters = [...word];
6
+ if (!letters.length) {
7
+ return "0";
8
+ }
9
+ return `${letters[0]}${letters.length}${letters[letters.length - 1]}`;
10
+ }
11
+ const CRC_TABLE = Array.from({ length: 256 }, (_, n) => {
12
+ let c = n;
13
+ for (let k = 0; k < 8; k++) {
14
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
15
+ }
16
+ return c >>> 0;
17
+ });
18
+ const hex8 = (n) => (n >>> 0).toString(16).padStart(8, "0");
19
+ const utf8 = (text) => new TextEncoder().encode(text);
20
+ // CRC-32 (IEEE, as zip and zlib), lowercase hex
21
+ export function crc32(text) {
22
+ let c = 0xffffffff;
23
+ for (const byte of utf8(text)) {
24
+ c = (CRC_TABLE[(c ^ byte) & 0xff] ?? 0) ^ (c >>> 8);
25
+ }
26
+ return hex8(c ^ 0xffffffff);
27
+ }
28
+ // Adler-32 (as zlib), lowercase hex
29
+ export function adler32(text) {
30
+ let a = 1;
31
+ let b = 0;
32
+ for (const byte of utf8(text)) {
33
+ a = (a + byte) % 65521;
34
+ b = (b + a) % 65521;
35
+ }
36
+ return hex8((b << 16) | a);
37
+ }
38
+ // base32 (RFC 4648) without "=" padding: a bare TOML key may hold only A-Z, a-z, 0-9, _ and -
39
+ export function base32(text) {
40
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
41
+ let bits = 0;
42
+ let value = 0;
43
+ let out = "";
44
+ for (const byte of utf8(text)) {
45
+ value = (value << 8) | byte;
46
+ bits += 8;
47
+ while (bits >= 5) {
48
+ out += alphabet[(value >>> (bits - 5)) & 31];
49
+ bits -= 5;
50
+ }
51
+ }
52
+ if (bits > 0) {
53
+ out += alphabet[(value << (5 - bits)) & 31];
54
+ }
55
+ return out;
56
+ }
57
+ // the allocators of a key: each reads the file's path (relative to the model, with /)
58
+ export const KEYNAME_ALLOCATORS = {
59
+ crc32: (path) => crc32(path),
60
+ adler32: (path) => adler32(path),
61
+ a12y: (path) => a12y(path.split("/").pop() ?? path),
62
+ };
63
+ export const DEFAULT_ALLOCATORS = {
64
+ keyname: ["crc32", "a12y", "adler32"],
65
+ valuedata: ["sha1", "md5", "crc32"],
66
+ };
67
+ // does a file of this name count: it begins and ends with a letter
68
+ export function counted(path) {
69
+ const name = path.split("/").pop() ?? "";
70
+ return /^\p{L}(.*\p{L})?$/u.test(name);
71
+ }
72
+ // the files of this model only: none inside a directory that is a model of its own (it has
73
+ // its own .bos/, and its own .omnis.toml)
74
+ export function ownFiles(host, root, files) {
75
+ const boundary = new Map();
76
+ const isModel = (dir) => {
77
+ if (!boundary.has(dir)) {
78
+ boundary.set(dir, host.isDirectory(`${root}/${dir}/.bos`));
79
+ }
80
+ return boundary.get(dir) === true;
81
+ };
82
+ return files.filter((path) => {
83
+ const parts = path.split("/").slice(0, -1);
84
+ return !parts.some((_, at) => isModel(parts.slice(0, at + 1).join("/")));
85
+ });
86
+ }
87
+ // one line of [hallows] for a file (path relative to the model's root, with /); null when
88
+ // it is not a regular file
89
+ export function hallow(host, root, path, allocators = DEFAULT_ALLOCATORS) {
90
+ const digests = allocators.valuedata.map((algorithm) => host.digest(`${root}/${path}`, algorithm));
91
+ if (digests.some((digest) => digest === null)) {
92
+ return null;
93
+ }
94
+ const key = allocators.keyname.map((name) => KEYNAME_ALLOCATORS[name](path)).join("");
95
+ return { key: base32(key), value: base32(digests.join("")), path };
96
+ }
97
+ // the halo of the given files (e.g. LocalGit.files(): what no .gitignore leaves out)
98
+ export function omnis(host, root, files, allocators = DEFAULT_ALLOCATORS) {
99
+ return ownFiles(host, root, files.filter(counted))
100
+ .sort()
101
+ .map((path) => hallow(host, root, path, allocators))
102
+ .filter((entry) => entry !== null);
103
+ }
104
+ const list = (names) => `[${names.map((name) => `"${name}"`).join(", ")}]`;
105
+ // .omnis.toml's text
106
+ export function omnisToml(hallows, unixusat, allocators = DEFAULT_ALLOCATORS) {
107
+ return [
108
+ "[moriatur]",
109
+ `UNIXUSAT = ${unixusat}`,
110
+ "[allocators]",
111
+ `KEYNAME = ${list(allocators.keyname)}`,
112
+ `VALUEDATA = ${list(allocators.valuedata)}`,
113
+ "[hallows]",
114
+ ...hallows.map(({ key, value }) => `${key} = "${value}"`),
115
+ "",
116
+ ].join("\n");
117
+ }
118
+ // read back what omnisToml wrote (only that shape: sections, bare keys, strings, string lists)
119
+ export function readOmnis(text) {
120
+ const sealed = { unixusat: 0, allocators: DEFAULT_ALLOCATORS, hallows: new Map() };
121
+ const allocators = { ...DEFAULT_ALLOCATORS };
122
+ let section = "";
123
+ for (const raw of text.split("\n")) {
124
+ const line = raw.trim();
125
+ const header = /^\[(\w+)\]$/.exec(line);
126
+ if (header) {
127
+ section = header[1] ?? "";
128
+ continue;
129
+ }
130
+ const pair = /^([\w-]+)\s*=\s*(.+)$/.exec(line);
131
+ if (!pair) {
132
+ continue;
133
+ }
134
+ const [, key = "", value = ""] = pair;
135
+ const strings = [...value.matchAll(/"([^"]*)"/g)].map((match) => match[1] ?? "");
136
+ if (section === "moriatur" && key === "UNIXUSAT") {
137
+ sealed.unixusat = Number(value);
138
+ }
139
+ else if (section === "allocators" && key === "KEYNAME") {
140
+ allocators.keyname = strings;
141
+ }
142
+ else if (section === "allocators" && key === "VALUEDATA") {
143
+ allocators.valuedata = strings;
144
+ }
145
+ else if (section === "hallows") {
146
+ sealed.hallows.set(key, strings[0] ?? "");
147
+ }
148
+ }
149
+ sealed.allocators = allocators;
150
+ return sealed;
151
+ }
152
+ export function drift(sealed, now) {
153
+ const here = new Set(now.map((entry) => entry.key));
154
+ return {
155
+ added: now.filter((entry) => !sealed.hallows.has(entry.key)).map((entry) => entry.path),
156
+ changed: now
157
+ .filter((entry) => sealed.hallows.has(entry.key) && sealed.hallows.get(entry.key) !== entry.value)
158
+ .map((entry) => entry.path),
159
+ removed: [...sealed.hallows.keys()].filter((key) => !here.has(key)).length,
160
+ };
161
+ }
162
+ export const unchanged = (d) => !d.added.length && !d.changed.length && !d.removed;
163
+ //# sourceMappingURL=omnis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omnis.js","sourceRoot":"","sources":["../../src/core/omnis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type Chain = {
2
+ id: string;
3
+ events: string[];
4
+ cataclysm?: string;
5
+ solution?: string;
6
+ seen?: string[];
7
+ };
8
+ export type Patterns = Map<string, Map<string, number>>;
9
+ export declare const ORDER = 2;
10
+ export declare function learn(chains: Chain[]): Patterns;
11
+ export type Prediction = {
12
+ after: string;
13
+ next: {
14
+ event: string;
15
+ p: number;
16
+ }[];
17
+ };
18
+ export declare function predict(patterns: Patterns, events: string[]): Prediction;
19
+ export declare function recall(chains: Chain[], events: string[]): Chain[];
@@ -0,0 +1,61 @@
1
+ // Patterning of the almanac (glossary: almanac): chains of events met before, each with the
2
+ // result it came to (a cataclysm) and what solved it. Counting which event followed which
3
+ // gives the probable next events of a situation met again.
4
+ // predict(learn(chains), ["commit", "bump-version"]) → [{ event: "push:revision", p: 0.5 }…]
5
+ export const ORDER = 2;
6
+ const contextKey = (events) => events.join(" → ");
7
+ export function learn(chains) {
8
+ const patterns = new Map();
9
+ for (const { events, seen } of chains) {
10
+ // a chain seen several times weighs as much as it was seen
11
+ const weight = Math.max(1, seen?.length ?? 1);
12
+ events.forEach((next, at) => {
13
+ for (let order = 1; order <= ORDER && at - order >= 0; order++) {
14
+ const key = contextKey(events.slice(at - order, at));
15
+ const counts = patterns.get(key) ?? new Map();
16
+ counts.set(next, (counts.get(next) ?? 0) + weight);
17
+ patterns.set(key, counts);
18
+ }
19
+ });
20
+ }
21
+ return patterns;
22
+ }
23
+ // the next events after the given ones, from the longest context met before (two events,
24
+ // else the last one); nothing known: no next events
25
+ export function predict(patterns, events) {
26
+ for (let order = Math.min(ORDER, events.length); order >= 1; order--) {
27
+ const after = contextKey(events.slice(-order));
28
+ const counts = patterns.get(after);
29
+ if (!counts) {
30
+ continue;
31
+ }
32
+ const total = [...counts.values()].reduce((sum, count) => sum + count, 0);
33
+ const next = [...counts]
34
+ .map(([event, count]) => ({ event, p: count / total }))
35
+ .sort((a, b) => b.p - a.p || a.event.localeCompare(b.event));
36
+ return { after, next };
37
+ }
38
+ return { after: contextKey(events.slice(-1)), next: [] };
39
+ }
40
+ // the chains that hold the given events in this order (not necessarily next to each other),
41
+ // the ones that hold more of them first
42
+ export function recall(chains, events) {
43
+ const held = (chain) => {
44
+ let at = 0;
45
+ let count = 0;
46
+ for (const event of events) {
47
+ const found = chain.events.indexOf(event, at);
48
+ if (found !== -1) {
49
+ count++;
50
+ at = found + 1;
51
+ }
52
+ }
53
+ return count;
54
+ };
55
+ return chains
56
+ .map((chain) => ({ chain, count: held(chain) }))
57
+ .filter(({ count }) => count > 0)
58
+ .sort((a, b) => b.count - a.count)
59
+ .map(({ chain }) => chain);
60
+ }
61
+ //# sourceMappingURL=patterning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterning.js","sourceRoot":"","sources":["../../src/core/patterning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export type Verdict = "allowed" | "ask" | "violation";
2
+ export type Case = Record<string, string | string[]>;
3
+ export type Conditions = Record<string, string | string[]>;
4
+ export type Rule = {
5
+ id: string;
6
+ statement: string;
7
+ when: Conditions;
8
+ unless?: Conditions;
9
+ verdict: Verdict;
10
+ source?: string;
11
+ };
12
+ export type Ruleset = {
13
+ ruleset: string;
14
+ roles?: Record<string, string[]>;
15
+ rules: Rule[];
16
+ };
17
+ export declare function roleOf(rulesets: Ruleset[], actor: string): string | null;
18
+ export type Judgement = {
19
+ verdict: Verdict | "unknown";
20
+ case: Case;
21
+ rule: (Rule & {
22
+ ruleset: string;
23
+ }) | null;
24
+ also: (Rule & {
25
+ ruleset: string;
26
+ })[];
27
+ };
28
+ export declare function globMatches(pattern: string, value: string): boolean;
29
+ export declare function matches(conditions: Conditions, subject: Case): boolean;
30
+ export declare function applies(rule: Rule, subject: Case): boolean;
31
+ export declare function judgeCase(rulesets: Ruleset[], subject: Case): Judgement;
32
+ export type Vocabulary = Map<string, Map<string, string>>;
33
+ export declare function vocabulary(rulesets: Ruleset[]): Vocabulary;
34
+ export declare function categorize(text: string, rulesets: Ruleset[], extra?: Case): Case;
@@ -0,0 +1,97 @@
1
+ // Rulesets of the almanac (glossary: almanac): rules written for people (statement) and
2
+ // matched by code (when / unless), so a described case can be judged against them.
3
+ // judgeCase(rulesets, { role: "agent", action: "push", target: "master" }).verdict → "ask"
4
+ export function roleOf(rulesets, actor) {
5
+ for (const { roles = {} } of rulesets) {
6
+ for (const [role, names] of Object.entries(roles)) {
7
+ if (names.some((name) => globMatches(name, actor))) {
8
+ return role;
9
+ }
10
+ }
11
+ }
12
+ return null;
13
+ }
14
+ const words = (value) => value === undefined ? [] : Array.isArray(value) ? value : [value];
15
+ const literal = (text) => text.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
16
+ export function globMatches(pattern, value) {
17
+ const regex = new RegExp(`^${pattern.split("*").map(literal).join(".*")}$`, "i");
18
+ return regex.test(value);
19
+ }
20
+ // every field of the conditions matches one value of the case's same field
21
+ export function matches(conditions, subject) {
22
+ return Object.entries(conditions).every(([field, patterns]) => {
23
+ const values = words(subject[field]);
24
+ return words(patterns).some((pattern) => values.some((value) => globMatches(pattern, value)));
25
+ });
26
+ }
27
+ export function applies(rule, subject) {
28
+ return matches(rule.when, subject) && !(rule.unless && matches(rule.unless, subject));
29
+ }
30
+ // the first rule that applies decides; no rule: unknown (ask)
31
+ export function judgeCase(rulesets, subject) {
32
+ const applying = rulesets.flatMap(({ ruleset, rules }) => rules.filter((rule) => applies(rule, subject)).map((rule) => ({ ...rule, ruleset })));
33
+ const [rule = null, ...also] = applying;
34
+ return { verdict: rule?.verdict ?? "unknown", case: subject, rule, also };
35
+ }
36
+ export function vocabulary(rulesets) {
37
+ const known = new Map();
38
+ for (const { rules } of rulesets) {
39
+ for (const rule of rules) {
40
+ for (const conditions of [rule.when, rule.unless ?? {}]) {
41
+ for (const [field, patterns] of Object.entries(conditions)) {
42
+ const entries = known.get(field) ?? new Map();
43
+ for (const pattern of words(patterns)) {
44
+ entries.set(pattern.toLowerCase(), pattern);
45
+ }
46
+ known.set(field, entries);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ return known;
52
+ }
53
+ // a word of the text stands for a known one: the same, an inflection of it (push → pushes,
54
+ // pushed, pushing; publish → publishing), or a value its glob pattern covers (dev/* → dev/Cleo)
55
+ function standsFor(token, known) {
56
+ const word = token.toLowerCase();
57
+ if (known.includes("*")) {
58
+ return known.replace(/\*/g, "").length > 0 && globMatches(known, token);
59
+ }
60
+ if (word === known) {
61
+ return true;
62
+ }
63
+ const stem = known.replace(/e$/, "");
64
+ return (stem.length >= 3 && /^(s|es|ed|d|ing)$/.test(word.slice(stem.length)) && word.startsWith(stem));
65
+ }
66
+ export function categorize(text, rulesets, extra = {}) {
67
+ const tokens = text.match(/[\p{L}\p{N}_.\-/~=]+/gu) ?? [];
68
+ const subject = {};
69
+ for (const [field, known] of vocabulary(rulesets)) {
70
+ const found = new Set();
71
+ for (const token of tokens) {
72
+ for (const [lower, pattern] of known) {
73
+ if (standsFor(token, lower)) {
74
+ found.add(pattern.includes("*") ? token : pattern);
75
+ }
76
+ }
77
+ }
78
+ if (found.size) {
79
+ subject[field] = found.size === 1 ? ([...found][0] ?? "") : [...found];
80
+ }
81
+ }
82
+ // a first word with a capital, not known as anything else, is the actor ("Cleo pushes…")
83
+ const [first] = tokens;
84
+ if (!subject.actor &&
85
+ first &&
86
+ /^\p{Lu}/u.test(first) &&
87
+ !Object.values(subject).flat().includes(first)) {
88
+ subject.actor = first;
89
+ }
90
+ const actor = words(extra.actor ?? subject.actor)[0];
91
+ const role = actor ? roleOf(rulesets, actor) : null;
92
+ if (role && !subject.role) {
93
+ subject.role = role;
94
+ }
95
+ return { ...subject, ...extra };
96
+ }
97
+ //# sourceMappingURL=ruling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruling.js","sourceRoot":"","sources":["../../src/core/ruling.ts"],"names":[],"mappings":"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"}