blacksmith-organization-system 1.1.0 → 1.2.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 (37) hide show
  1. package/README.md +11 -0
  2. package/dist/bridges/git.d.ts +1 -0
  3. package/dist/bridges/git.js +10 -0
  4. package/dist/bridges/git.js.map +1 -1
  5. package/dist/main.d.ts +5 -1
  6. package/dist/main.js +16 -2
  7. package/dist/main.js.map +1 -1
  8. package/dist/models/_index.d.ts +2 -0
  9. package/dist/models/_index.js +2 -0
  10. package/dist/models/_index.js.map +1 -1
  11. package/dist/models/authors/entry.d.ts +20 -0
  12. package/dist/models/authors/entry.js +73 -0
  13. package/dist/models/authors/entry.js.map +1 -0
  14. package/dist/models/authors/file.d.ts +9 -0
  15. package/dist/models/authors/file.js +19 -0
  16. package/dist/models/authors/file.js.map +1 -0
  17. package/dist/procedures/_index.d.ts +1 -0
  18. package/dist/procedures/_index.js +1 -0
  19. package/dist/procedures/_index.js.map +1 -1
  20. package/dist/procedures/crediting/_index.d.ts +4 -0
  21. package/dist/procedures/crediting/_index.js +9 -0
  22. package/dist/procedures/crediting/_index.js.map +1 -0
  23. package/dist/procedures/crediting/context.d.ts +17 -0
  24. package/dist/procedures/crediting/context.js +4 -0
  25. package/dist/procedures/crediting/context.js.map +1 -0
  26. package/dist/procedures/crediting/steps.d.ts +4 -0
  27. package/dist/procedures/crediting/steps.js +51 -0
  28. package/dist/procedures/crediting/steps.js.map +1 -0
  29. package/dist/tools/_index.js +9 -1
  30. package/dist/tools/_index.js.map +1 -1
  31. package/dist/tools/project.d.ts +1 -0
  32. package/dist/tools/project.js +18 -0
  33. package/dist/tools/project.js.map +1 -0
  34. package/dist/views/project.d.ts +2 -0
  35. package/dist/views/project.js +11 -0
  36. package/dist/views/project.js.map +1 -0
  37. package/package.json +1 -1
package/README.md CHANGED
@@ -9,6 +9,17 @@
9
9
  ▄█ ░█░ ▄█ ░█░ ██▄ █░▀░█
10
10
  ```
11
11
  > ###### [Sett Sarverott](https://github.com/Sarverott) @ 2019-2026
12
+
13
+ [![release](https://img.shields.io/github/actions/workflow/status/Sarverott/blacksmith-organization-system/loop-master-release-and-publish.yml?branch=master&label=release)](https://github.com/Sarverott/blacksmith-organization-system/actions/workflows/loop-master-release-and-publish.yml?query=branch%3Amaster)
14
+ [![revision](https://img.shields.io/github/actions/workflow/status/Sarverott/blacksmith-organization-system/loop-revision-bump-checks-pull-request.yml?branch=revision&label=revision)](https://github.com/Sarverott/blacksmith-organization-system/actions/workflows/loop-revision-bump-checks-pull-request.yml?query=branch%3Arevision)
15
+ [![checks](https://img.shields.io/github/actions/workflow/status/Sarverott/blacksmith-organization-system/checks-on-push-changed-parts.yml?branch=development&label=checks)](https://github.com/Sarverott/blacksmith-organization-system/actions/workflows/checks-on-push-changed-parts.yml?query=branch%3Adevelopment)
16
+ [![GitHub release](https://img.shields.io/github/v/release/Sarverott/blacksmith-organization-system?include_prereleases&label=GitHub%20release)](https://github.com/Sarverott/blacksmith-organization-system/releases)
17
+ [![npm@next](https://img.shields.io/npm/v/blacksmith-organization-system/next?label=npm%40next)](https://www.npmjs.com/package/blacksmith-organization-system?activeTab=versions)
18
+ [![node](https://img.shields.io/node/v/blacksmith-organization-system/next)](https://nodejs.org/)
19
+ [![docs](https://readthedocs.org/projects/blacksmith-organization-system/badge/?version=latest)](https://blacksmith-organization-system.readthedocs.io/)
20
+ [![wiki](https://img.shields.io/badge/wiki-GitHub-blue)](https://github.com/Sarverott/blacksmith-organization-system/wiki)
21
+ [![license](https://img.shields.io/github/license/Sarverott/blacksmith-organization-system)](https://github.com/Sarverott/blacksmith-organization-system/blob/master/LICENSE)
22
+
12
23
  ---
13
24
 
14
25
  # The core of the Blacksmith Organization System
@@ -5,4 +5,5 @@ export declare class Git {
5
5
  constructor(host: Host, cwd: string);
6
6
  git(args: string[]): string;
7
7
  tagExists(tag: string): boolean;
8
+ identities(): string[];
8
9
  }
@@ -16,5 +16,15 @@ export class Git {
16
16
  tagExists(tag) {
17
17
  return this.git(["tag", "--list", tag]) === tag;
18
18
  }
19
+ // everyone in the history of HEAD, oldest first: author, committer and each
20
+ // Co-authored-by trailer, as "Name <email>" lines (repeated; the caller dedupes)
21
+ identities() {
22
+ const format = "%an <%ae>%n%cn <%ce>%n%(trailers:key=Co-authored-by,valueonly,separator=%x0A)";
23
+ const { status, stdout } = this.host.run("git", ["log", "--reverse", `--format=${format}`], { cwd: this.cwd });
24
+ // a repository without commits has nobody yet
25
+ if (status !== 0)
26
+ return [];
27
+ return stdout.split("\n").filter((line) => line.trim());
28
+ }
19
29
  }
20
30
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/bridges/git.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG;IACL,IAAI,CAAO;IACpB,kCAAkC;IACzB,GAAG,CAAS;IAErB,YAAY,IAAU,EAAE,GAAW;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAc;QAChB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,8DAA8D;IAC9D,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IAClD,CAAC;CACF"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/bridges/git.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG;IACL,IAAI,CAAO;IACpB,kCAAkC;IACzB,GAAG,CAAS;IAErB,YAAY,IAAU,EAAE,GAAW;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAc;QAChB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,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,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,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/G,8CAA8C;QAC9C,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;CACF"}
package/dist/main.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Host } from "./core/host.ts";
2
2
  import type { LoopEvent } from "./core/version.ts";
3
3
  import { type Loop, type Project, type Settings, type VersioningData, Workshop } from "./models/_index.ts";
4
- import { type BootstrapContext, type BumpOutcome, type FlowOutcome, type VersionContext, type WorkshopEvent, type WorkshopReport } from "./procedures/_index.ts";
4
+ import { type BootstrapContext, type BumpOutcome, type CreditOutcome, type FlowOutcome, type VersionContext, type WorkshopEvent, type WorkshopReport } from "./procedures/_index.ts";
5
5
  export type BOSOptions = {
6
6
  workshop?: string;
7
7
  };
@@ -39,6 +39,10 @@ export declare class BOS {
39
39
  dir?: string;
40
40
  dryRun?: boolean;
41
41
  }): Promise<BumpOutcome>;
42
+ authors({ dir, dryRun }?: {
43
+ dir?: string;
44
+ dryRun?: boolean;
45
+ }): Promise<CreditOutcome>;
42
46
  propose(branch: string, { dir, dryRun }?: {
43
47
  dir?: string;
44
48
  dryRun?: boolean;
package/dist/main.js CHANGED
@@ -5,8 +5,8 @@
5
5
  import { Git } from "./bridges/git.js";
6
6
  import { GitHub } from "./bridges/github.js";
7
7
  import { createContext } from "./core/context.js";
8
- import { loopOfSettings, projectAround, settingsOf, versioningOf, Workshop, } from "./models/_index.js";
9
- import { automerging, bootstrapping, bumping, emptyReport, inspecting, proposing, unbumped, undecided, versioning, watching, } from "./procedures/_index.js";
8
+ import { authorsFile, loopOfSettings, projectAround, settingsOf, versioningOf, Workshop, } from "./models/_index.js";
9
+ import { automerging, bootstrapping, bumping, crediting, emptyReport, inspecting, proposing, unbumped, uncredited, undecided, versioning, watching, } from "./procedures/_index.js";
10
10
  export class BOS {
11
11
  host;
12
12
  options;
@@ -64,6 +64,20 @@ export class BOS {
64
64
  };
65
65
  return (await bumping.run(context)).outcome;
66
66
  }
67
+ // name everyone of the project's commits in its .github/AUTHORS
68
+ async authors({ dir, dryRun = false } = {}) {
69
+ const { project } = this.loop(dir);
70
+ const file = authorsFile(project.path);
71
+ const context = {
72
+ ...createContext(this.host, { dryRun }),
73
+ file,
74
+ git: new Git(this.host, project.path),
75
+ lines: [],
76
+ identities: [],
77
+ outcome: uncredited(file),
78
+ };
79
+ return (await crediting.run(context)).outcome;
80
+ }
67
81
  // open the pull request of a branch's forward step on GitHub
68
82
  async propose(branch, { dir, dryRun = false } = {}) {
69
83
  const { project, loop } = this.loop(dir);
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export { Archive } from "./archive/class.ts";
2
+ export { type AuthorEntry, type AuthorKind, completed, entryOf, formatEntry, type Identity, kindOf, names, parseEntry, parseIdentity, } from "./authors/entry.ts";
3
+ export { type AuthorsLine, authorsFile, authorsText, readAuthors } from "./authors/file.ts";
2
4
  export { Craftbook, Scrapnotes } from "./craftbook/class.ts";
3
5
  export { Devarmory } from "./devarmory/class.ts";
4
6
  export { DEVLOG_FILES, Devlog, type Phase } from "./devlog/class.ts";
@@ -1,5 +1,7 @@
1
1
  // Every model of the workshop, one directory each (glossary as classes).
2
2
  export { Archive } from "./archive/class.js";
3
+ export { completed, entryOf, formatEntry, kindOf, names, parseEntry, parseIdentity, } from "./authors/entry.js";
4
+ export { authorsFile, authorsText, readAuthors } from "./authors/file.js";
3
5
  export { Craftbook, Scrapnotes } from "./craftbook/class.js";
4
6
  export { Devarmory } from "./devarmory/class.js";
5
7
  export { DEVLOG_FILES, Devlog } from "./devlog/class.js";
@@ -1 +1 @@
1
- {"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/models/_index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAiB,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAsB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAa,kBAAkB,EAA0C,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAAiB,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EAEpB,cAAc,EAEd,OAAO,EACP,gBAAgB,EAChB,YAAY,GACb,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/models/_index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAGL,SAAS,EACT,OAAO,EACP,WAAW,EAEX,MAAM,EACN,KAAK,EACL,UAAU,EACV,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAoB,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAiB,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAsB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAa,kBAAkB,EAA0C,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAAiB,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EAEpB,cAAc,EAEd,OAAO,EACP,gBAAgB,EAChB,YAAY,GACb,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type AuthorEntry = {
2
+ nickname: string | null;
3
+ identity: string | null;
4
+ email: string | null;
5
+ url: string | null;
6
+ signs: string[];
7
+ };
8
+ export type AuthorKind = "full" | "verified" | "mentioned";
9
+ export type Identity = {
10
+ name: string;
11
+ email: string;
12
+ };
13
+ export declare function parseEntry(line: string): AuthorEntry | null;
14
+ export declare function formatEntry(entry: AuthorEntry): string;
15
+ export declare function kindOf(entry: AuthorEntry): AuthorKind;
16
+ export declare function names(entry: AuthorEntry, { name, email }: Identity): boolean;
17
+ export declare function nicknameOf(name: string): string;
18
+ export declare function entryOf({ name, email }: Identity): AuthorEntry;
19
+ export declare function completed(entry: AuthorEntry, { name, email }: Identity): AuthorEntry | null;
20
+ export declare function parseIdentity(text: string): Identity | null;
@@ -0,0 +1,73 @@
1
+ const TOKEN = /"([^"]*)"|<([^>]*)>|\(([^)]*)\)|\[([^\]]*)\]|(\S+)/g;
2
+ // null for a blank line or a # comment
3
+ export function parseEntry(line) {
4
+ const text = line.trim();
5
+ if (!text || text.startsWith("#"))
6
+ return null;
7
+ const entry = { nickname: null, identity: null, email: null, url: null, signs: [] };
8
+ for (const [, identity, email, url, sign, bare] of text.matchAll(TOKEN)) {
9
+ if (identity !== undefined)
10
+ entry.identity ??= identity;
11
+ else if (email !== undefined)
12
+ entry.email ??= email;
13
+ else if (url !== undefined)
14
+ entry.url ??= url;
15
+ else if (sign !== undefined)
16
+ entry.signs.push(sign);
17
+ else if (bare !== undefined)
18
+ entry.nickname ??= bare;
19
+ }
20
+ return entry;
21
+ }
22
+ export function formatEntry(entry) {
23
+ return [
24
+ entry.nickname,
25
+ entry.identity === null ? null : `"${entry.identity}"`,
26
+ entry.email === null ? null : `<${entry.email}>`,
27
+ entry.url === null ? null : `(${entry.url})`,
28
+ ...entry.signs.map((sign) => `[${sign}]`),
29
+ ]
30
+ .filter((field) => field !== null)
31
+ .join("\t");
32
+ }
33
+ export function kindOf(entry) {
34
+ if (!entry.nickname || !entry.email)
35
+ return "mentioned";
36
+ return entry.identity && entry.url ? "full" : "verified";
37
+ }
38
+ const same = (a, b) => a !== null && a.toLowerCase() === b.toLowerCase();
39
+ // does the entry name this identity (glossary: the matching is assumed)
40
+ export function names(entry, { name, email }) {
41
+ if (email && same(entry.email, email))
42
+ return true;
43
+ if (!name)
44
+ return false;
45
+ if (same(entry.nickname, name) || same(entry.identity, name))
46
+ return true;
47
+ return Boolean(entry.identity?.toLowerCase().startsWith(`${name.toLowerCase()} `));
48
+ }
49
+ export function nicknameOf(name) {
50
+ return name.trim().replace(/\s+/g, "-");
51
+ }
52
+ // a new entry for an identity no entry names: verified, or mentioned when half is missing
53
+ export function entryOf({ name, email }) {
54
+ return { nickname: name ? nicknameOf(name) : null, identity: null, email: email || null, url: null, signs: [] };
55
+ }
56
+ // what an identity adds to a mentioned entry; null when nothing
57
+ export function completed(entry, { name, email }) {
58
+ if (kindOf(entry) !== "mentioned")
59
+ return null;
60
+ const nickname = entry.nickname ?? (name ? nicknameOf(name) : null);
61
+ const mail = entry.email ?? (email || null);
62
+ if (nickname === entry.nickname && mail === entry.email)
63
+ return null;
64
+ return { ...entry, nickname, email: mail };
65
+ }
66
+ // "Name <email>", as git trailers write it
67
+ export function parseIdentity(text) {
68
+ const match = text.trim().match(/^(.*?)\s*<([^>]*)>$/);
69
+ if (match)
70
+ return { name: (match[1] ?? "").trim(), email: (match[2] ?? "").trim() };
71
+ return text.trim() ? { name: text.trim(), email: "" } : null;
72
+ }
73
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/models/authors/entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Host } from "../../core/host.ts";
2
+ import { type AuthorEntry } from "./entry.ts";
3
+ export type AuthorsLine = {
4
+ text: string;
5
+ entry: AuthorEntry | null;
6
+ };
7
+ export declare function authorsFile(projectPath: string): string;
8
+ export declare function readAuthors(host: Host, file: string): AuthorsLine[];
9
+ export declare function authorsText(lines: AuthorsLine[]): string;
@@ -0,0 +1,19 @@
1
+ import { join } from "../../core/paths.js";
2
+ import { parseEntry } from "./entry.js";
3
+ export function authorsFile(projectPath) {
4
+ return join(projectPath, ".github", "AUTHORS");
5
+ }
6
+ // a missing file has no lines
7
+ export function readAuthors(host, file) {
8
+ const text = host.readText(file);
9
+ if (text === null)
10
+ return [];
11
+ const lines = text.split("\n");
12
+ if (lines.at(-1) === "")
13
+ lines.pop();
14
+ return lines.map((line) => ({ text: line, entry: parseEntry(line) }));
15
+ }
16
+ export function authorsText(lines) {
17
+ return lines.length ? `${lines.map((line) => line.text).join("\n")}\n` : "";
18
+ }
19
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/models/authors/file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAI1D,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,IAAY;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAoB;IAC9C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export { type AutomergeContext, automerging } from "./automerging/_index.ts";
2
2
  export { type BootstrapContext, bootstrapping } from "./bootstrapping/_index.ts";
3
3
  export { type BumpContext, type BumpOutcome, bumping, unbumped } from "./bumping/_index.ts";
4
+ export { type CreditContext, type CreditOutcome, crediting, uncredited } from "./crediting/_index.ts";
4
5
  export { emptyReport, type Finding, type InspectContext, inspecting, type ScopeReport, type WorkshopReport, } from "./inspecting/_index.ts";
5
6
  export { type FlowOutcome, type ProposeContext, proposing, undecided } from "./proposing/_index.ts";
6
7
  export { type VersionContext, versioning } from "./versioning/_index.ts";
@@ -3,6 +3,7 @@
3
3
  export { automerging } from "./automerging/_index.js";
4
4
  export { bootstrapping } from "./bootstrapping/_index.js";
5
5
  export { bumping, unbumped } from "./bumping/_index.js";
6
+ export { crediting, uncredited } from "./crediting/_index.js";
6
7
  export { emptyReport, inspecting, } from "./inspecting/_index.js";
7
8
  export { proposing, undecided } from "./proposing/_index.js";
8
9
  export { versioning } from "./versioning/_index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/procedures/_index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,wEAAwE;AAExE,OAAO,EAAyB,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAyB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAsC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EACL,WAAW,EAGX,UAAU,GAGX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAyC,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAuB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAyC,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/procedures/_index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,wEAAwE;AAExE,OAAO,EAAyB,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAyB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAsC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAA0C,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACtG,OAAO,EACL,WAAW,EAGX,UAAU,GAGX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAyC,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAuB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAyC,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Procedure } from "../../core/procedure.ts";
2
+ import type { CreditContext } from "./context.ts";
3
+ export { type CreditContext, type CreditOutcome, uncredited } from "./context.ts";
4
+ export declare const crediting: Procedure<CreditContext>;
@@ -0,0 +1,9 @@
1
+ import { Procedure } from "../../core/procedure.js";
2
+ import { match, read, write } from "./steps.js";
3
+ export { uncredited } from "./context.js";
4
+ export const crediting = new Procedure("crediting", [
5
+ { name: "read", run: read },
6
+ { name: "match", run: match },
7
+ { name: "write", run: write },
8
+ ]);
9
+ //# sourceMappingURL=_index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_index.js","sourceRoot":"","sources":["../../../src/procedures/crediting/_index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAA0C,UAAU,EAAE,MAAM,cAAc,CAAC;AAElF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAgB,WAAW,EAAE;IACjE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC3B,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;IAC7B,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;CAC9B,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Git } from "../../bridges/git.ts";
2
+ import type { Context } from "../../core/context.ts";
3
+ import type { AuthorsLine, Identity } from "../../models/_index.ts";
4
+ export type CreditOutcome = {
5
+ action: "none" | "would-write" | "written";
6
+ file: string;
7
+ added: string[];
8
+ updated: string[];
9
+ };
10
+ export type CreditContext = Context & {
11
+ file: string;
12
+ git: Git;
13
+ lines: AuthorsLine[];
14
+ identities: Identity[];
15
+ outcome: CreditOutcome;
16
+ };
17
+ export declare function uncredited(file: string): CreditOutcome;
@@ -0,0 +1,4 @@
1
+ export function uncredited(file) {
2
+ return { action: "none", file, added: [], updated: [] };
3
+ }
4
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/procedures/crediting/context.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CreditContext } from "./context.ts";
2
+ export declare function read(context: CreditContext): void;
3
+ export declare function match(context: CreditContext): void;
4
+ export declare function write(context: CreditContext): void;
@@ -0,0 +1,51 @@
1
+ import { dirname } from "../../core/paths.js";
2
+ import { authorsText, completed, entryOf, formatEntry, names, parseIdentity, readAuthors, } from "../../models/_index.js";
3
+ const keyOf = ({ name, email }) => `${name.toLowerCase()} <${email.toLowerCase()}>`;
4
+ export function read(context) {
5
+ context.lines = readAuthors(context.host, context.file);
6
+ const seen = new Set();
7
+ for (const line of context.git.identities()) {
8
+ const identity = parseIdentity(line);
9
+ if (!identity || seen.has(keyOf(identity)))
10
+ continue;
11
+ seen.add(keyOf(identity));
12
+ context.identities.push(identity);
13
+ }
14
+ }
15
+ export function match(context) {
16
+ const { lines, outcome } = context;
17
+ for (const identity of context.identities) {
18
+ const at = lines.findIndex((line) => line.entry && names(line.entry, identity));
19
+ if (at === -1) {
20
+ const entry = entryOf(identity);
21
+ const text = formatEntry(entry);
22
+ lines.push({ text, entry });
23
+ outcome.added.push(text);
24
+ continue;
25
+ }
26
+ const entry = lines[at]?.entry;
27
+ const better = completed(entry, identity);
28
+ if (!better)
29
+ continue;
30
+ // a mentioned entry, completed: updated and moved to the bottom
31
+ const text = formatEntry(better);
32
+ lines.splice(at, 1);
33
+ lines.push({ text, entry: better });
34
+ outcome.updated.push(text);
35
+ }
36
+ context.changes.push(...outcome.updated.map((text) => `updated: ${text}`));
37
+ context.changes.push(...outcome.added.map((text) => `added: ${text}`));
38
+ }
39
+ export function write(context) {
40
+ const { outcome } = context;
41
+ if (!outcome.added.length && !outcome.updated.length)
42
+ return;
43
+ if (context.dryRun) {
44
+ outcome.action = "would-write";
45
+ return;
46
+ }
47
+ context.host.mkdir(dirname(context.file));
48
+ context.host.writeText(context.file, authorsText(context.lines));
49
+ outcome.action = "written";
50
+ }
51
+ //# sourceMappingURL=steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../../src/procedures/crediting/steps.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,17 @@
1
1
  import { devlogTools } from "./devlog.js";
2
2
  import { flowTools } from "./flow.js";
3
+ import { projectTools } from "./project.js";
3
4
  import { scopeTools } from "./scope.js";
4
5
  import { versionTools } from "./version.js";
5
6
  import { workshopTools } from "./workshop.js";
6
- export const TOOLS = [...workshopTools, ...scopeTools, ...devlogTools, ...flowTools, ...versionTools];
7
+ export const TOOLS = [
8
+ ...workshopTools,
9
+ ...scopeTools,
10
+ ...devlogTools,
11
+ ...flowTools,
12
+ ...projectTools,
13
+ ...versionTools,
14
+ ];
7
15
  export function findTool(model, name) {
8
16
  const entry = TOOLS.find((t) => t.model === model && t.name === name);
9
17
  if (entry)
@@ -1 +1 @@
1
- {"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/tools/_index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAW,CAAC,GAAG,aAAa,EAAE,GAAG,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,CAAC,CAAC;AAE9G,MAAM,UAAU,QAAQ,CAAC,KAAyB,EAAE,IAAwB;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtE,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,IAAI,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjF,CAAC"}
1
+ {"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/tools/_index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B,GAAG,aAAa;IAChB,GAAG,UAAU;IACb,GAAG,WAAW;IACd,GAAG,SAAS;IACZ,GAAG,YAAY;IACf,GAAG,YAAY;CAChB,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,KAAyB,EAAE,IAAwB;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtE,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,IAAI,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const projectTools: import("../core/tool.ts").Tool[];
@@ -0,0 +1,18 @@
1
+ // bos project <tool>: the project around the current directory
2
+ import { tool } from "../core/tool.js";
3
+ import { authorsText } from "../views/project.js";
4
+ export const projectTools = [
5
+ tool({
6
+ model: "project",
7
+ name: "authors",
8
+ info: "name every entity of the commits (people, agents, bots) in .github/AUTHORS; new ones appended",
9
+ readOnly: false,
10
+ args: [
11
+ { name: "dir", type: "string", info: "a path inside the project (default: current directory)" },
12
+ { name: "dryRun", type: "boolean", info: "only say what would be written" },
13
+ ],
14
+ run: (bos, input) => bos.authors({ dir: input.dir, dryRun: Boolean(input.dryRun) }),
15
+ render: authorsText,
16
+ }),
17
+ ];
18
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,CAAC;QACH,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,+FAA+F;QACrG,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE;YACJ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wDAAwD,EAAE;YAC/F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,gCAAgC,EAAE;SAC5E;QACD,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAyB,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzG,MAAM,EAAE,WAAW;KACpB,CAAC;CACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CreditOutcome } from "../procedures/_index.ts";
2
+ export declare function authorsText(outcome: CreditOutcome): string;
@@ -0,0 +1,11 @@
1
+ export function authorsText(outcome) {
2
+ if (outcome.action === "none")
3
+ return `${outcome.file}: everyone is named`;
4
+ const verb = outcome.action === "written" ? "" : "would be ";
5
+ return [
6
+ `${outcome.file}: ${outcome.added.length} ${verb}added, ${outcome.updated.length} ${verb}updated`,
7
+ ...outcome.updated.map((text) => ` ~ ${text}`),
8
+ ...outcome.added.map((text) => ` + ${text}`),
9
+ ].join("\n");
10
+ }
11
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/views/project.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,GAAG,OAAO,CAAC,IAAI,qBAAqB,CAAC;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7D,OAAO;QACL,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,UAAU,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,SAAS;QACjG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/C,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;KAC9C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blacksmith-organization-system",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Blacksmith Organization System (BOS) core: the workshop as code - build its base, listen to its changes, inspect it as one coherent environment",
5
5
  "keywords": [
6
6
  "bos",