docspec 0.2.0 → 0.3.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 (80) hide show
  1. package/README.md +64 -142
  2. package/dist/__tests__/changed.test.d.ts +2 -0
  3. package/dist/__tests__/changed.test.d.ts.map +1 -0
  4. package/dist/__tests__/changed.test.js +98 -0
  5. package/dist/__tests__/changed.test.js.map +1 -0
  6. package/dist/__tests__/cli.test.js +34 -142
  7. package/dist/__tests__/cli.test.js.map +1 -1
  8. package/dist/__tests__/create.test.d.ts +2 -0
  9. package/dist/__tests__/create.test.d.ts.map +1 -0
  10. package/dist/__tests__/create.test.js +122 -0
  11. package/dist/__tests__/create.test.js.map +1 -0
  12. package/dist/__tests__/generate.test.d.ts +2 -0
  13. package/dist/__tests__/generate.test.d.ts.map +1 -0
  14. package/dist/__tests__/generate.test.js +113 -0
  15. package/dist/__tests__/generate.test.js.map +1 -0
  16. package/dist/__tests__/generator.test.js +26 -22
  17. package/dist/__tests__/generator.test.js.map +1 -1
  18. package/dist/__tests__/path-utils.test.d.ts +2 -0
  19. package/dist/__tests__/path-utils.test.d.ts.map +1 -0
  20. package/dist/__tests__/path-utils.test.js +49 -0
  21. package/dist/__tests__/path-utils.test.js.map +1 -0
  22. package/dist/__tests__/template.test.d.ts +2 -0
  23. package/dist/__tests__/template.test.d.ts.map +1 -0
  24. package/dist/__tests__/template.test.js +95 -0
  25. package/dist/__tests__/template.test.js.map +1 -0
  26. package/dist/changed.d.ts +25 -0
  27. package/dist/changed.d.ts.map +1 -0
  28. package/dist/changed.js +210 -0
  29. package/dist/changed.js.map +1 -0
  30. package/dist/cli.js +89 -72
  31. package/dist/cli.js.map +1 -1
  32. package/dist/constants.d.ts +2 -0
  33. package/dist/constants.d.ts.map +1 -1
  34. package/dist/constants.js +118 -15
  35. package/dist/constants.js.map +1 -1
  36. package/dist/create.d.ts +12 -0
  37. package/dist/create.d.ts.map +1 -0
  38. package/dist/create.js +93 -0
  39. package/dist/create.js.map +1 -0
  40. package/dist/docspec-changed.d.ts +25 -0
  41. package/dist/docspec-changed.d.ts.map +1 -0
  42. package/dist/docspec-changed.js +210 -0
  43. package/dist/docspec-changed.js.map +1 -0
  44. package/dist/docspec-generate.d.ts +22 -0
  45. package/dist/docspec-generate.d.ts.map +1 -0
  46. package/dist/docspec-generate.js +171 -0
  47. package/dist/docspec-generate.js.map +1 -0
  48. package/dist/format-parser.d.ts +2 -1
  49. package/dist/format-parser.d.ts.map +1 -1
  50. package/dist/format-parser.js +45 -15
  51. package/dist/format-parser.js.map +1 -1
  52. package/dist/generate.d.ts +26 -0
  53. package/dist/generate.d.ts.map +1 -0
  54. package/dist/generate.js +175 -0
  55. package/dist/generate.js.map +1 -0
  56. package/dist/generator.d.ts +4 -3
  57. package/dist/generator.d.ts.map +1 -1
  58. package/dist/generator.js +35 -12
  59. package/dist/generator.js.map +1 -1
  60. package/dist/index.d.ts +8 -4
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +16 -7
  63. package/dist/index.js.map +1 -1
  64. package/dist/logger.d.ts +40 -0
  65. package/dist/logger.d.ts.map +1 -0
  66. package/dist/logger.js +74 -0
  67. package/dist/logger.js.map +1 -0
  68. package/dist/path-utils.d.ts +17 -0
  69. package/dist/path-utils.d.ts.map +1 -0
  70. package/dist/path-utils.js +76 -0
  71. package/dist/path-utils.js.map +1 -0
  72. package/dist/template.d.ts +20 -0
  73. package/dist/template.d.ts.map +1 -0
  74. package/dist/template.js +151 -0
  75. package/dist/template.js.map +1 -0
  76. package/dist/validator.d.ts.map +1 -1
  77. package/dist/validator.js +34 -1
  78. package/dist/validator.js.map +1 -1
  79. package/package.json +1 -1
  80. package/README.docspec.md +0 -180
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAgDA,gDA0BC;AA1ED,mDAAmF;AAEnF,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,iCAAiB,GAAE,CAAC;QACvC,YAAY,GAAG,IAAA,+BAAe,EAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YACjG,yDAAyD,CAC1D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACU,QAAA,iBAAiB,GAAG,CAAC,GAAG,EAAE;IACrC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAsB,CAAC;AAC/D,CAAC,CAAC,EAAE,CAAC;AAEL;;GAEG;AACU,QAAA,mBAAmB,GAA2B,CAAC,GAAG,EAAE;IAC/D,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAClD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC,EAAE,CAAC;AAEL;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,cAAsB;IACvD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,sCAAsC;IACtC,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;IAE/E,uCAAuC;IACvC,IAAI,wBAAwB,GAAG,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7B,gDAAgD;QAChD,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;QAC9F,wBAAwB,GAAG,4BAA4B,YAAY,MAAM,CAAC;IAC5E,CAAC;IAED,6CAA6C;IAC7C,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,6BAA6B,EAAE,wBAAwB,CAAC,CAAC;IAErF,oBAAoB;IACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC/C,OAAO,MAAM,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,mCAAmC;IACnC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAE3D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Generate a new docspec file. Accepts either a markdown path (e.g. README.md, docs/deploy.md)
3
+ * or a docspec path under .docspec/ (e.g. .docspec/README.docspec.md).
4
+ * Writes to .docspec/ using the convention: markdown P.md -> .docspec/P.docspec.md
5
+ */
6
+ export declare function generateDocspec(inputPath: string): Promise<void>;
7
+ /**
8
+ * Generate docspec content as a string (for library use)
9
+ * @param targetFilePath Path to the target markdown file (e.g., "README.md")
10
+ */
11
+ export declare function generateDocspecContent(targetFilePath: string): string;
12
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAErE"}
package/dist/create.js ADDED
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateDocspec = generateDocspec;
37
+ exports.generateDocspecContent = generateDocspecContent;
38
+ /**
39
+ * Creates docspec files from the template (file generation).
40
+ * For the "docspec generate" command and prompt building, see generate.ts.
41
+ */
42
+ const constants_1 = require("./constants");
43
+ const fs = __importStar(require("fs/promises"));
44
+ const path = __importStar(require("path"));
45
+ const logger_1 = require("./logger");
46
+ const path_utils_1 = require("./path-utils");
47
+ /**
48
+ * Resolve input path to docspec path and markdown path.
49
+ * Accepts either a markdown path (e.g. README.md, docs/deploy.md) or a docspec path under .docspec/.
50
+ */
51
+ function resolveInput(inputPath) {
52
+ const normalized = path.normalize(inputPath).replace(/\\/g, "/");
53
+ if ((0, path_utils_1.isDocspecPath)(normalized)) {
54
+ return {
55
+ docspecPath: normalized,
56
+ markdownPath: (0, path_utils_1.docspecToMarkdownPath)(normalized),
57
+ };
58
+ }
59
+ // Treat as markdown path (e.g. README.md or docs/deploy.md)
60
+ const mdPath = normalized.endsWith(".md") ? normalized : normalized + ".md";
61
+ return {
62
+ docspecPath: (0, path_utils_1.markdownToDocspecPath)(mdPath),
63
+ markdownPath: mdPath,
64
+ };
65
+ }
66
+ /**
67
+ * Generate a new docspec file. Accepts either a markdown path (e.g. README.md, docs/deploy.md)
68
+ * or a docspec path under .docspec/ (e.g. .docspec/README.docspec.md).
69
+ * Writes to .docspec/ using the convention: markdown P.md -> .docspec/P.docspec.md
70
+ */
71
+ async function generateDocspec(inputPath) {
72
+ logger_1.logger.debug(`Generating docspec for: ${inputPath}`);
73
+ const { docspecPath, markdownPath } = resolveInput(inputPath);
74
+ logger_1.logger.debug(`Docspec file: ${docspecPath}, target markdown: ${markdownPath}`);
75
+ const content = (0, constants_1.getDocspecTemplate)(markdownPath);
76
+ logger_1.logger.debug(`Generated template with ${content.length} characters`);
77
+ const dir = path.dirname(docspecPath);
78
+ if (dir !== ".") {
79
+ logger_1.logger.debug(`Creating directory: ${dir}`);
80
+ await fs.mkdir(dir, { recursive: true });
81
+ }
82
+ logger_1.logger.debug(`Writing file: ${docspecPath}`);
83
+ await fs.writeFile(docspecPath, content, "utf-8");
84
+ logger_1.logger.debug(`File written successfully: ${docspecPath}`);
85
+ }
86
+ /**
87
+ * Generate docspec content as a string (for library use)
88
+ * @param targetFilePath Path to the target markdown file (e.g., "README.md")
89
+ */
90
+ function generateDocspecContent(targetFilePath) {
91
+ return (0, constants_1.getDocspecTemplate)(targetFilePath);
92
+ }
93
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,0CAiBC;AAMD,wDAEC;AAnED;;;GAGG;AACH,2CAAiD;AACjD,gDAAkC;AAClC,2CAA6B;AAC7B,qCAAkC;AAClC,6CAIsB;AAEtB;;;GAGG;AACH,SAAS,YAAY,CAAC,SAAiB;IAIrC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjE,IAAI,IAAA,0BAAa,EAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,IAAA,kCAAqB,EAAC,UAAU,CAAC;SAChD,CAAC;IACJ,CAAC;IACD,4DAA4D;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5E,OAAO;QACL,WAAW,EAAE,IAAA,kCAAqB,EAAC,MAAM,CAAC;QAC1C,YAAY,EAAE,MAAM;KACrB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,eAAM,CAAC,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9D,eAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,sBAAsB,YAAY,EAAE,CAAC,CAAC;IAE/E,MAAM,OAAO,GAAG,IAAA,8BAAkB,EAAC,YAAY,CAAC,CAAC;IACjD,eAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;IAErE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,eAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,eAAM,CAAC,KAAK,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,cAAsB;IAC3D,OAAO,IAAA,8BAAkB,EAAC,cAAc,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface DocspecChangedOptions {
2
+ /** List of changed file paths (repo-relative). If not set, base and merge must be set. */
3
+ changedFiles?: string[];
4
+ /** Base SHA for git diff (e.g. PR base). */
5
+ base?: string;
6
+ /** Merge SHA for git diff (e.g. PR merge commit). */
7
+ merge?: string;
8
+ /** Max number of docspecs to include. */
9
+ maxDocspecs?: number;
10
+ /** Max characters of diff to include. */
11
+ maxDiffChars?: number;
12
+ /** Repo root (default process.cwd()). */
13
+ repoRoot?: string;
14
+ }
15
+ /**
16
+ * Build the docspec-changed prompt and return it as a string.
17
+ * If options.outputPath is set, writes the prompt to that file.
18
+ */
19
+ export declare function buildDocspecChangedPrompt(options: DocspecChangedOptions & {
20
+ outputPath?: string;
21
+ }): Promise<{
22
+ prompt: string;
23
+ outputPath: string | null;
24
+ }>;
25
+ //# sourceMappingURL=docspec-changed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docspec-changed.d.ts","sourceRoot":"","sources":["../src/docspec-changed.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,qBAAqB;IACpC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiHD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,qBAAqB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAmGxD"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildDocspecChangedPrompt = buildDocspecChangedPrompt;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const fsSync = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const child_process_1 = require("child_process");
41
+ const path_utils_1 = require("./path-utils");
42
+ const DEFAULT_MAX_DOCSPECS = 10;
43
+ const DEFAULT_MAX_DIFF_CHARS = 120000;
44
+ /**
45
+ * List changed files via git diff --name-only base...merge
46
+ */
47
+ function listChangedFiles(base, merge, repoRoot) {
48
+ const out = (0, child_process_1.execSync)(`git diff --name-only ${base}...${merge}`, {
49
+ encoding: "utf-8",
50
+ cwd: repoRoot,
51
+ }).trim();
52
+ return out ? out.split("\n").map((line) => line.trim()).filter(Boolean) : [];
53
+ }
54
+ /**
55
+ * Get diff text via git diff base...merge, truncated if needed.
56
+ */
57
+ function getDiffText(base, merge, repoRoot, maxChars) {
58
+ let diff;
59
+ try {
60
+ diff = (0, child_process_1.execSync)(`git diff ${base}...${merge}`, { encoding: "utf-8", cwd: repoRoot });
61
+ }
62
+ catch {
63
+ return "";
64
+ }
65
+ if (diff.length > maxChars) {
66
+ diff = diff.slice(0, maxChars) + "\n\n[DIFF TRUNCATED]\n";
67
+ }
68
+ return diff;
69
+ }
70
+ /**
71
+ * Find all docspec paths under .docspec/ in the repo.
72
+ */
73
+ async function findAllDocspecPaths(docspecDir) {
74
+ const files = [];
75
+ try {
76
+ const entries = await fs.readdir(docspecDir, { withFileTypes: true });
77
+ for (const entry of entries) {
78
+ const full = path.join(docspecDir, entry.name);
79
+ if (entry.isDirectory()) {
80
+ files.push(...(await findAllDocspecPaths(full)));
81
+ }
82
+ else if (entry.isFile() && entry.name.endsWith(".docspec.md")) {
83
+ files.push(full);
84
+ }
85
+ }
86
+ }
87
+ catch (e) {
88
+ if (e.code !== "ENOENT")
89
+ throw e;
90
+ }
91
+ return files;
92
+ }
93
+ /**
94
+ * Find candidate docspec files to process given changed files.
95
+ * Strategy:
96
+ * 1) Changed files that are under .docspec/ and end with .docspec.md are included.
97
+ * 2) For each other changed file, walk up from its directory to repo root; at each level,
98
+ * include docspecs whose target markdown lives in that directory.
99
+ */
100
+ function findCandidateDocspecs(repoRoot, docspecPaths, changedFiles, maxDocspecs) {
101
+ const normalizedRoot = path.normalize(repoRoot).replace(/\\/g, "/");
102
+ const candidates = [];
103
+ const seen = new Set();
104
+ const add = (p) => {
105
+ const norm = path.normalize(p).replace(/\\/g, "/");
106
+ if (!seen.has(norm)) {
107
+ seen.add(norm);
108
+ candidates.push(p);
109
+ }
110
+ };
111
+ // 1) Directly changed docspecs (under .docspec/)
112
+ for (const f of changedFiles) {
113
+ const normalized = path.normalize(f).replace(/\\/g, "/");
114
+ if ((0, path_utils_1.isDocspecPath)(normalized) || (normalized.startsWith(".docspec/") && normalized.endsWith(".docspec.md"))) {
115
+ const full = path.join(repoRoot, f);
116
+ add(full);
117
+ }
118
+ }
119
+ // 2) For each changed file, walk up directory and include docspecs whose target markdown is in that directory
120
+ for (const f of changedFiles) {
121
+ const normalized = path.normalize(f).replace(/\\/g, "/");
122
+ if (normalized.startsWith(".docspec/"))
123
+ continue; // already handled
124
+ const fullPath = path.join(repoRoot, f);
125
+ let dir = path.dirname(fullPath);
126
+ while (true) {
127
+ const relDir = path.relative(repoRoot, dir).replace(/\\/g, "/") || ".";
128
+ for (const { docspecPath, targetMdPath } of docspecPaths) {
129
+ const targetDir = path.dirname(targetMdPath).replace(/\\/g, "/") || ".";
130
+ if (targetDir === relDir) {
131
+ add(docspecPath);
132
+ }
133
+ }
134
+ const parent = path.dirname(dir);
135
+ if (parent === dir || path.relative(repoRoot, parent).startsWith(".."))
136
+ break;
137
+ dir = parent;
138
+ }
139
+ // Include if the changed file is the target markdown
140
+ for (const { docspecPath, targetMdPath } of docspecPaths) {
141
+ if (path.normalize(f).replace(/\\/g, "/") === path.normalize(targetMdPath).replace(/\\/g, "/")) {
142
+ add(docspecPath);
143
+ }
144
+ }
145
+ }
146
+ return candidates.slice(0, maxDocspecs);
147
+ }
148
+ /**
149
+ * Build the docspec-changed prompt and return it as a string.
150
+ * If options.outputPath is set, writes the prompt to that file.
151
+ */
152
+ async function buildDocspecChangedPrompt(options) {
153
+ const repoRoot = path.resolve(options.repoRoot ?? process.cwd());
154
+ const docspecDir = path.join(repoRoot, ".docspec");
155
+ let changedFiles = options.changedFiles ?? [];
156
+ let diffText = "";
157
+ if (changedFiles.length === 0 && options.base && options.merge) {
158
+ changedFiles = listChangedFiles(options.base, options.merge, repoRoot);
159
+ diffText = getDiffText(options.base, options.merge, repoRoot, options.maxDiffChars ?? DEFAULT_MAX_DIFF_CHARS);
160
+ }
161
+ else if (options.changedFiles && options.changedFiles.length > 0 && options.base && options.merge) {
162
+ diffText = getDiffText(options.base, options.merge, repoRoot, options.maxDiffChars ?? DEFAULT_MAX_DIFF_CHARS);
163
+ }
164
+ const allDocspecPaths = await findAllDocspecPaths(docspecDir);
165
+ const docspecWithTargets = allDocspecPaths
166
+ .map((p) => {
167
+ const rel = path.relative(repoRoot, p).replace(/\\/g, "/");
168
+ const targetMd = (0, path_utils_1.docspecToMarkdownPath)(rel);
169
+ return { docspecPath: p, targetMdPath: targetMd };
170
+ })
171
+ .filter(({ docspecPath }) => fsSync.existsSync(docspecPath));
172
+ const candidates = findCandidateDocspecs(repoRoot, docspecWithTargets, changedFiles, options.maxDocspecs ?? DEFAULT_MAX_DOCSPECS);
173
+ const parts = [
174
+ "Merged PR diff (context):",
175
+ "<diff>",
176
+ diffText || "(no diff available)",
177
+ "</diff>",
178
+ "",
179
+ "The following docspec files were discovered based on the PR changes. For each docspec, check if its target markdown file needs to be updated based on the code changes:",
180
+ "",
181
+ ];
182
+ let added = 0;
183
+ for (const docspecPath of candidates) {
184
+ const relDocspec = path.relative(repoRoot, docspecPath).replace(/\\/g, "/");
185
+ const targetMdPath = (0, path_utils_1.docspecToMarkdownPath)(relDocspec);
186
+ const targetFull = path.join(repoRoot, targetMdPath);
187
+ try {
188
+ await fs.access(targetFull);
189
+ }
190
+ catch {
191
+ continue;
192
+ }
193
+ const docspecContent = await fs.readFile(docspecPath, "utf-8");
194
+ const mdContent = await fs.readFile(targetFull, "utf-8");
195
+ parts.push(`## Docspec: ${relDocspec}`, `Target markdown: ${targetMdPath}`, "", "<docspec>", docspecContent, "</docspec>", "", "<markdown>", mdContent, "</markdown>", "");
196
+ added++;
197
+ }
198
+ if (added === 0) {
199
+ return { prompt: "", outputPath: null };
200
+ }
201
+ parts.push("Task:", "1. Explore the repository using your available tools to understand the codebase context", "2. Understand how the code changes in the diff relate to each docspec's requirements", "3. For each markdown file listed above, check if it already satisfies its docspec given the code changes", "4. Only update markdown files if changes are actually necessary to satisfy their docspecs - avoid making unnecessary changes", "5. Use the Edit tool to modify markdown files directly if changes are needed", "6. Do not provide any text output - files are modified directly using tools");
202
+ const prompt = parts.join("\n");
203
+ const outPath = options.outputPath ? path.resolve(repoRoot, options.outputPath) : null;
204
+ if (outPath && prompt) {
205
+ await fs.mkdir(path.dirname(outPath), { recursive: true });
206
+ await fs.writeFile(outPath, prompt, "utf-8");
207
+ }
208
+ return { prompt, outputPath: outPath };
209
+ }
210
+ //# sourceMappingURL=docspec-changed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docspec-changed.js","sourceRoot":"","sources":["../src/docspec-changed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface DocspecGenerateOptions {
2
+ /** Path to the markdown file (repo-relative, e.g. README.md or docs/deploy.md). */
3
+ markdownPath: string;
4
+ /** If true, overwrite existing docspec. If false and docspec exists, throws. */
5
+ overwrite?: boolean;
6
+ /** Repo root (default process.cwd()). */
7
+ repoRoot?: string;
8
+ }
9
+ /**
10
+ * Generate the docspec file (if missing or overwrite), then build plan and implementation prompts.
11
+ * Returns combined prompt (implementation prompt with {{PLAN}} placeholder) and optional paths to write.
12
+ */
13
+ export declare function buildDocspecGeneratePrompts(options: DocspecGenerateOptions & {
14
+ outputPromptPath?: string;
15
+ outputPlanPath?: string;
16
+ }): Promise<{
17
+ planPrompt: string;
18
+ implPrompt: string;
19
+ outputPromptPath?: string;
20
+ outputPlanPath?: string;
21
+ }>;
22
+ //# sourceMappingURL=docspec-generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docspec-generate.d.ts","sourceRoot":"","sources":["../src/docspec-generate.ts"],"names":[],"mappings":"AAqFA,MAAM,WAAW,sBAAsB;IACrC,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,sBAAsB,GAAG;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0DzG"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildDocspecGeneratePrompts = buildDocspecGeneratePrompts;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const path = __importStar(require("path"));
39
+ const generator_1 = require("./generator");
40
+ const path_utils_1 = require("./path-utils");
41
+ const PLAN_TEMPLATE = `You are analyzing a markdown file and its docspec to discover missing or irrelevant information. Do not ask questions - create the plan directly.
42
+
43
+ <markdown path="{{md_path}}">
44
+ {{md_text}}
45
+ </markdown>
46
+
47
+ <docspec path="{{docspec_path}}">
48
+ {{docspec_text}}
49
+ </docspec>
50
+
51
+ Task: Focus on INFORMATION DISCOVERY. Use all of your available tools to explore the repository and understand what actually exists, then analyze both files and create a plan that identifies:
52
+
53
+ 1. **Missing information in the docspec**: What important details about the markdown file are not captured in sections 1-5?
54
+ - What does the markdown actually contain that isn't mentioned in the docspec?
55
+ - What should trigger updates that isn't currently listed?
56
+ - What structure/guidelines are missing?
57
+
58
+ 2. **Irrelevant or incorrect information in the docspec**: What's in the docspec that doesn't match reality?
59
+ - Does the docspec describe things that aren't actually in the markdown?
60
+ - Are there update triggers that don't make sense?
61
+ - Are there structure requirements that don't match the actual document?
62
+
63
+ 3. **Missing information in the markdown**: What should be documented but isn't?
64
+ - Are there important details missing?
65
+ - Are there sections that should exist but don't?
66
+
67
+ IMPORTANT: The docspec structure must be preserved:
68
+ - Keep the header format: \`# DOCSPEC: [filename]\`
69
+ - Keep the one-line description
70
+ - Keep the \`## AGENT INSTRUCTIONS\` section exactly as-is
71
+ - Keep section headers: \`## 1. Document Purpose\`, \`## 2. Update Triggers\`, etc.
72
+ - ONLY update the CONTENT within sections 1-5, not the headers or structure
73
+
74
+ Output your plan in a clear, structured format focusing on information gaps and corrections.
75
+ `;
76
+ const IMPL_TEMPLATE = `Based on this information discovery plan:
77
+ <plan>
78
+ {{PLAN}}
79
+ </plan>
80
+
81
+ You need to update two files:
82
+ 1. {{md_path}} - the markdown file
83
+ 2. {{docspec_path}} - the docspec file
84
+
85
+ CRITICAL CONSTRAINTS FOR DOCSPEC FILE - YOU MUST PRESERVE THE EXACT STRUCTURE:
86
+
87
+ 1. Read the existing {{docspec_path}} file FIRST using the Read tool
88
+ 2. PRESERVE EXACTLY:
89
+ - The exact header format (e.g. \`# DOCSPEC: Readme\` or \`# DOCSPEC: [README.md](/README.md)\`) - keep it EXACTLY as written
90
+ - The exact one-line description format (e.g. \`> A specification that ...\`) - keep it EXACTLY as written
91
+ - The \`## AGENT INSTRUCTIONS\` section if it exists - keep it EXACTLY as-is, do not modify
92
+ - The EXACT section header names and numbers (e.g. \`## 1. Document Purpose\` or \`## 2. Update Triggers\`) - keep them EXACTLY as written
93
+ - The order of sections - do not reorder them
94
+
95
+ 3. ONLY update the CONTENT within sections 1-5 (the text below each section header)
96
+ - Do NOT change section header text, numbers, or names
97
+ - Do NOT change the format of headers
98
+ - Do NOT modify title, description, or AGENT INSTRUCTIONS
99
+
100
+ Task:
101
+ 1. Read {{docspec_path}} and note its EXACT structure
102
+ 2. Read {{md_path}}
103
+ 3. Explore the repository and discover information about:
104
+ - What the codebase actually contains
105
+ - What files exist that relate to the markdown
106
+ - What the actual structure and content of the markdown is
107
+ 4. For {{docspec_path}}: Update ONLY the content text within sections 1-5. Preserve ALL structure, headers, format, and separators exactly as they were.
108
+ 5. For {{md_path}}: Add any missing information identified in the plan
109
+ 6. Make changes directly to the files
110
+ `;
111
+ function substitute(template, vars) {
112
+ let out = template;
113
+ for (const [key, value] of Object.entries(vars)) {
114
+ out = out.replace(new RegExp(`\\{\\{${key}\\}\\}`, "g"), value);
115
+ }
116
+ return out;
117
+ }
118
+ /**
119
+ * Generate the docspec file (if missing or overwrite), then build plan and implementation prompts.
120
+ * Returns combined prompt (implementation prompt with {{PLAN}} placeholder) and optional paths to write.
121
+ */
122
+ async function buildDocspecGeneratePrompts(options) {
123
+ const repoRoot = path.resolve(options.repoRoot ?? process.cwd());
124
+ const mdPath = path.normalize(options.markdownPath).replace(/\\/g, "/");
125
+ const mdFull = path.join(repoRoot, mdPath);
126
+ const docspecPath = (0, path_utils_1.markdownToDocspecPath)(mdPath);
127
+ const docspecFull = path.join(repoRoot, docspecPath);
128
+ try {
129
+ await fs.access(mdFull);
130
+ }
131
+ catch {
132
+ throw new Error(`Markdown file not found: ${mdFull}`);
133
+ }
134
+ const docspecExists = await fs.access(docspecFull).then(() => true).catch(() => false);
135
+ if (docspecExists && !options.overwrite) {
136
+ throw new Error(`Docspec file already exists: ${docspecPath}. To overwrite, set overwrite to true.`);
137
+ }
138
+ await (0, generator_1.generateDocspec)(mdPath);
139
+ const mdText = await fs.readFile(mdFull, "utf-8");
140
+ const docspecText = await fs.readFile(docspecFull, "utf-8");
141
+ const vars = {
142
+ md_path: mdPath,
143
+ md_text: mdText,
144
+ docspec_path: docspecPath,
145
+ docspec_text: docspecText,
146
+ "{{PLAN}}": "{{PLAN}}",
147
+ };
148
+ const planPrompt = substitute(PLAN_TEMPLATE, vars);
149
+ const implPrompt = substitute(IMPL_TEMPLATE, vars);
150
+ const outPrompt = options.outputPromptPath
151
+ ? path.resolve(repoRoot, options.outputPromptPath)
152
+ : undefined;
153
+ const outPlan = options.outputPlanPath
154
+ ? path.resolve(repoRoot, options.outputPlanPath)
155
+ : undefined;
156
+ if (outPrompt) {
157
+ await fs.mkdir(path.dirname(outPrompt), { recursive: true });
158
+ await fs.writeFile(outPrompt, implPrompt, "utf-8");
159
+ }
160
+ if (outPlan) {
161
+ await fs.mkdir(path.dirname(outPlan), { recursive: true });
162
+ await fs.writeFile(outPlan, planPrompt, "utf-8");
163
+ }
164
+ return {
165
+ planPrompt,
166
+ implPrompt,
167
+ outputPromptPath: outPrompt,
168
+ outputPlanPath: outPlan,
169
+ };
170
+ }
171
+ //# sourceMappingURL=docspec-generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docspec-generate.js","sourceRoot":"","sources":["../src/docspec-generate.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,8 @@ export declare function parseFormatFile(formatFilePath: string): ParsedFormat;
17
17
  */
18
18
  export declare function parseFormatContent(content: string): ParsedFormat;
19
19
  /**
20
- * Get the path to the format file
20
+ * Get the path to the format file. Uses .docspec/docspec.md in cwd.
21
+ * If it doesn't exist, seeds it from the bundled docspec-format.md and returns the new path.
21
22
  */
22
23
  export declare function getFormatFilePath(): string;
23
24
  //# sourceMappingURL=format-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-parser.d.ts","sourceRoot":"","sources":["../src/format-parser.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,CAGpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA2HhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAkB1C"}
1
+ {"version":3,"file":"format-parser.d.ts","sourceRoot":"","sources":["../src/format-parser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,CAKpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAyIhE;AAyBD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAS1C"}