@aigentdocs/core 0.1.0 → 0.1.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.
@@ -0,0 +1,23 @@
1
+ import { type State } from "./index.js";
2
+ /** One section of the roadmap's Kanban board, e.g. "[In Progress]". */
3
+ export interface BoardSection {
4
+ name: string;
5
+ items: string[];
6
+ }
7
+ /** Parse the Task Board sections of a roadmap document. */
8
+ export declare function parseTaskBoard(content: string): BoardSection[];
9
+ export interface UpdateModuleStateResult {
10
+ module: string;
11
+ state: State;
12
+ /** Files actually modified, relative to the repo root. */
13
+ updated: string[];
14
+ /** Reminders the caller (an agent) must still handle by hand. */
15
+ reminders: string[];
16
+ }
17
+ /**
18
+ * Update a domain module's state in the two machine-owned places —
19
+ * project_status.yaml (the authoritative record) and the module's
20
+ * frontmatter — keeping them in sync, as the Anti-Drift Protocol requires.
21
+ * The Kanban board is prose and stays the caller's responsibility.
22
+ */
23
+ export declare function updateModuleState(repoRoot: string, moduleName: string, state: State): Promise<UpdateModuleStateResult>;
@@ -0,0 +1,77 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { STATES } from "./index.js";
4
+ import { extractFrontmatter, setYamlKey } from "./frontmatter.js";
5
+ import { loadProject } from "./project.js";
6
+ /** Parse the Task Board sections of a roadmap document. */
7
+ export function parseTaskBoard(content) {
8
+ const sections = [];
9
+ let current;
10
+ let inFence = false;
11
+ for (const line of content.split(/\r?\n/)) {
12
+ if (/^\s*```/.test(line)) {
13
+ inFence = !inFence;
14
+ continue;
15
+ }
16
+ if (inFence) {
17
+ continue;
18
+ }
19
+ const heading = /^###\s+(\[.+?\])\s*$/.exec(line);
20
+ if (heading) {
21
+ current = { name: heading[1] ?? "", items: [] };
22
+ sections.push(current);
23
+ continue;
24
+ }
25
+ if (/^##\s/.test(line)) {
26
+ current = undefined; // left the board area
27
+ continue;
28
+ }
29
+ const item = /^\s*[-*]\s+(.+)$/.exec(line);
30
+ if (item && current !== undefined) {
31
+ current.items.push(item[1] ?? "");
32
+ }
33
+ }
34
+ return sections;
35
+ }
36
+ /**
37
+ * Update a domain module's state in the two machine-owned places —
38
+ * project_status.yaml (the authoritative record) and the module's
39
+ * frontmatter — keeping them in sync, as the Anti-Drift Protocol requires.
40
+ * The Kanban board is prose and stays the caller's responsibility.
41
+ */
42
+ export async function updateModuleState(repoRoot, moduleName, state) {
43
+ if (!STATES.includes(state)) {
44
+ throw new Error(`invalid state '${state}' (allowed: ${STATES.join(" | ")})`);
45
+ }
46
+ const model = await loadProject(repoRoot);
47
+ const moduleDoc = model.documents.find((doc) => doc.frontmatter?.["type"] === "domain_module" &&
48
+ (doc.frontmatter?.["module_name"] === moduleName || path.posix.basename(doc.relPath, ".md") === moduleName));
49
+ if (moduleDoc === undefined) {
50
+ throw new Error(`no domain module named '${moduleName}' found under docs/project/01_product/domain_modules/`);
51
+ }
52
+ const updated = [];
53
+ const reminders = ["Move the corresponding item on the roadmap.md board yourself — it is prose, not machine-owned."];
54
+ // 1. Frontmatter (a view).
55
+ const fm = extractFrontmatter(moduleDoc.content);
56
+ if (fm.data === undefined) {
57
+ throw new Error(`'${moduleDoc.relPath}' has no parseable frontmatter`);
58
+ }
59
+ const newContent = moduleDoc.content.replace(/^(---\r?\n[\s\S]*?^state:)[^\n]*$/m, `$1 ${state}`);
60
+ if (newContent === moduleDoc.content && fm.data["state"] !== state) {
61
+ throw new Error(`could not locate the 'state:' line in '${moduleDoc.relPath}' frontmatter`);
62
+ }
63
+ await writeFile(path.join(repoRoot, moduleDoc.relPath), newContent);
64
+ updated.push(moduleDoc.relPath);
65
+ // 2. project_status.yaml (the authority), comment-preserving.
66
+ if (model.projectStatus !== undefined && model.projectStatus.parseError === undefined) {
67
+ const statusPath = path.join(repoRoot, model.projectStatus.relPath);
68
+ const text = await readFile(statusPath, "utf8");
69
+ await writeFile(statusPath, setYamlKey(text, ["modules", moduleName, "state"], state));
70
+ updated.push(model.projectStatus.relPath);
71
+ }
72
+ else {
73
+ reminders.push("project_status.yaml is absent (Lite profile?) or unparseable — only the frontmatter was updated.");
74
+ }
75
+ return { module: moduleName, state, updated, reminders };
76
+ }
77
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/board.ts"],"names":[],"mappings":"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"}
@@ -13,4 +13,9 @@ export interface FrontmatterResult {
13
13
  }
14
14
  /** Parse a full YAML document. Throws on invalid YAML (caller decides severity). */
15
15
  export declare function parseYaml(text: string): unknown;
16
+ /**
17
+ * Set a value at a key path inside a YAML document, preserving the
18
+ * document's comments and formatting. Throws on invalid YAML.
19
+ */
20
+ export declare function setYamlKey(text: string, path: Array<string | number>, value: unknown): string;
16
21
  export declare function extractFrontmatter(markdown: string): FrontmatterResult;
@@ -1,9 +1,21 @@
1
- import { parse } from "yaml";
1
+ import { parse, parseDocument } from "yaml";
2
2
  const FENCE = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;
3
3
  /** Parse a full YAML document. Throws on invalid YAML (caller decides severity). */
4
4
  export function parseYaml(text) {
5
5
  return parse(text);
6
6
  }
7
+ /**
8
+ * Set a value at a key path inside a YAML document, preserving the
9
+ * document's comments and formatting. Throws on invalid YAML.
10
+ */
11
+ export function setYamlKey(text, path, value) {
12
+ const doc = parseDocument(text);
13
+ if (doc.errors.length > 0) {
14
+ throw new Error(doc.errors[0]?.message ?? "invalid YAML");
15
+ }
16
+ doc.setIn(path, value);
17
+ return doc.toString();
18
+ }
7
19
  export function extractFrontmatter(markdown) {
8
20
  const match = FENCE.exec(markdown);
9
21
  if (!match) {
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAgB7B,MAAM,KAAK,GAAG,wCAAwC,CAAC;AAEvD,oFAAoF;AACpF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAiC,EAAE,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAgB5C,MAAM,KAAK,GAAG,wCAAwC,CAAC;AAEvD,oFAAoF;AACpF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,IAA4B,EAAE,KAAc;IACnF,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC;IAC5D,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAiC,EAAE,CAAC;AAClE,CAAC"}
@@ -28,10 +28,11 @@ export declare const CORRECTION_STATUSES: readonly ["proposed", "approved", "app
28
28
  export type CorrectionStatus = (typeof CORRECTION_STATUSES)[number];
29
29
  /** Frontmatter fields required on every content document of the standard. */
30
30
  export declare const REQUIRED_COMMON_FIELDS: readonly ["type", "version", "last_updated"];
31
- export { extractFrontmatter, parseYaml, type FrontmatterResult } from "./frontmatter.js";
31
+ export { extractFrontmatter, parseYaml, setYamlKey, type FrontmatterResult } from "./frontmatter.js";
32
32
  export { lintMarkdown, lintProject, type LintProjectResult } from "./lint.js";
33
33
  export { loadProject, type ProjectDocument, type ProjectModel, type YamlArtifact } from "./project.js";
34
34
  export { checkConsistency } from "./consistency.js";
35
35
  export { initProject, type InitProfile, type InitResult } from "./scaffold.js";
36
36
  export { adaptProject, ADAPTER_TARGETS, GENERATION_MARKER, type AdaptResult, type AdapterTarget } from "./adapt.js";
37
37
  export { compareVersions, updateStandard, type ChangelogEntry, type UpdateResult } from "./update.js";
38
+ export { parseTaskBoard, updateModuleState, type BoardSection, type UpdateModuleStateResult } from "./board.js";
package/dist/src/index.js CHANGED
@@ -12,11 +12,12 @@ export const ADR_STATUSES = ["proposed", "accepted", "rejected", "superseded"];
12
12
  export const CORRECTION_STATUSES = ["proposed", "approved", "applied", "rejected"];
13
13
  /** Frontmatter fields required on every content document of the standard. */
14
14
  export const REQUIRED_COMMON_FIELDS = ["type", "version", "last_updated"];
15
- export { extractFrontmatter, parseYaml } from "./frontmatter.js";
15
+ export { extractFrontmatter, parseYaml, setYamlKey } from "./frontmatter.js";
16
16
  export { lintMarkdown, lintProject } from "./lint.js";
17
17
  export { loadProject } from "./project.js";
18
18
  export { checkConsistency } from "./consistency.js";
19
19
  export { initProject } from "./scaffold.js";
20
20
  export { adaptProject, ADAPTER_TARGETS, GENERATION_MARKER } from "./adapt.js";
21
21
  export { compareVersions, updateStandard } from "./update.js";
22
+ export { parseTaskBoard, updateModuleState } from "./board.js";
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAU,CAAC;AAG1E,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAGxF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAG5F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAU,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAA0B,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,WAAW,EAA0B,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,WAAW,EAA8D,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAqC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAwC,MAAM,YAAY,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,cAAc,EAA0C,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAU,CAAC;AAG1E,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAGxF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAG5F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAU,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,WAAW,EAA0B,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,WAAW,EAA8D,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAqC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAwC,MAAM,YAAY,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,cAAc,EAA0C,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAmD,MAAM,YAAY,CAAC"}
@@ -7,10 +7,11 @@
7
7
  * packaged standard declares the available one. The entries between the
8
8
  * two ARE the migration notes.
9
9
  *
10
- * README.md is the adopter's customization point (title, conventions), so
11
- * a customized README is preserved and the incoming one is written next to
12
- * it as README.md.new for manual merging. An uncustomized README (still
13
- * carrying the generic title) is simply replaced.
10
+ * docs/standard/ is the standard itself nothing project-specific lives
11
+ * there (project identity and conventions live in the repository root:
12
+ * its own README and AGENTS.md, which this command never touches). So the
13
+ * update simply replaces docs/standard/ wholesale; there is nothing to
14
+ * merge.
14
15
  */
15
16
  export interface ChangelogEntry {
16
17
  version: string;
@@ -25,8 +26,6 @@ export interface UpdateResult {
25
26
  to: string;
26
27
  /** Changelog entries newer than `from` — the migration notes. */
27
28
  notes: ChangelogEntry[];
28
- /** True when README.md was preserved and README.md.new needs a manual merge. */
29
- readmeNeedsMerge: boolean;
30
29
  }
31
30
  /** Compare dotted numeric versions ("1.4.3" vs "1.4"): -1 | 0 | 1. */
32
31
  export declare function compareVersions(a: string, b: string): number;
@@ -1,7 +1,6 @@
1
- import { access, cp, readFile, rm, writeFile } from "node:fs/promises";
1
+ import { access, cp, readFile, rm } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { parseYaml } from "./frontmatter.js";
4
- const GENERIC_README_TITLE = "# Documentation Standard for AI-Augmented Software Engineering";
5
4
  /** Compare dotted numeric versions ("1.4.3" vs "1.4"): -1 | 0 | 1. */
6
5
  export function compareVersions(a, b) {
7
6
  const pa = a.split(".").map(Number);
@@ -30,7 +29,7 @@ export async function updateStandard(targetDir, packagedStandardDir, options = {
30
29
  const from = (await readChangelog(installedDir))[0]?.version ?? "0.0.0";
31
30
  const packaged = await readChangelog(packagedStandardDir);
32
31
  const to = packaged[0]?.version ?? "0.0.0";
33
- const base = { status: "up-to-date", from, to, notes: [], readmeNeedsMerge: false };
32
+ const base = { status: "up-to-date", from, to, notes: [] };
34
33
  const cmp = compareVersions(from, to);
35
34
  if (cmp === 0) {
36
35
  return base;
@@ -42,19 +41,9 @@ export async function updateStandard(targetDir, packagedStandardDir, options = {
42
41
  if (options.check === true) {
43
42
  return { ...base, status: "would-update", notes };
44
43
  }
45
- const theirReadme = await readFile(path.join(installedDir, "README.md"), "utf8").catch(() => undefined);
44
+ // docs/standard/ carries nothing project-specific replace it wholesale.
46
45
  await rm(installedDir, { recursive: true, force: true });
47
46
  await cp(packagedStandardDir, installedDir, { recursive: true });
48
- let readmeNeedsMerge = false;
49
- const customized = theirReadme !== undefined && !theirReadme.startsWith(GENERIC_README_TITLE);
50
- if (customized) {
51
- const incoming = await readFile(path.join(installedDir, "README.md"), "utf8");
52
- if (incoming !== theirReadme) {
53
- await writeFile(path.join(installedDir, "README.md"), theirReadme);
54
- await writeFile(path.join(installedDir, "README.md.new"), incoming);
55
- readmeNeedsMerge = true;
56
- }
57
- }
58
- return { ...base, status: "updated", notes, readmeNeedsMerge };
47
+ return { ...base, status: "updated", notes };
59
48
  }
60
49
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aigentdocs/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Shared domain model and validation logic for the AIGentDocs tooling (frontmatter parsing, deterministic lint rules, scaffolding, adapters, standard updates).",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/rodrigo-amc/AIGentDocs#readme",
@@ -9,7 +9,12 @@
9
9
  "url": "git+https://github.com/rodrigo-amc/AIGentDocs.git",
10
10
  "directory": "packages/core"
11
11
  },
12
- "keywords": ["documentation", "docs-as-code", "ai-agents", "lint"],
12
+ "keywords": [
13
+ "documentation",
14
+ "docs-as-code",
15
+ "ai-agents",
16
+ "lint"
17
+ ],
13
18
  "type": "module",
14
19
  "main": "dist/src/index.js",
15
20
  "types": "dist/src/index.d.ts",