@popoverai/dotrequirements 0.23.0 → 0.24.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 (229) hide show
  1. package/README.md +167 -20
  2. package/dist/cli.js +121 -60
  3. package/dist/codebase-to-spec/budget.d.ts +53 -0
  4. package/dist/codebase-to-spec/budget.js +80 -0
  5. package/dist/codebase-to-spec/cache.d.ts +49 -0
  6. package/dist/codebase-to-spec/cache.js +54 -0
  7. package/dist/codebase-to-spec/claude.d.ts +69 -0
  8. package/dist/codebase-to-spec/claude.js +126 -0
  9. package/dist/codebase-to-spec/compose.d.ts +49 -0
  10. package/dist/codebase-to-spec/compose.js +124 -0
  11. package/dist/codebase-to-spec/edit-loop.d.ts +54 -0
  12. package/dist/codebase-to-spec/edit-loop.js +195 -0
  13. package/dist/codebase-to-spec/editor.d.ts +54 -0
  14. package/dist/codebase-to-spec/editor.js +74 -0
  15. package/dist/codebase-to-spec/exit-codes.d.ts +40 -0
  16. package/dist/codebase-to-spec/exit-codes.js +58 -0
  17. package/dist/codebase-to-spec/fan-out.d.ts +63 -0
  18. package/dist/codebase-to-spec/fan-out.js +215 -0
  19. package/dist/codebase-to-spec/interactive.d.ts +30 -0
  20. package/dist/codebase-to-spec/interactive.js +48 -0
  21. package/dist/codebase-to-spec/outline-review-loop.d.ts +51 -0
  22. package/dist/codebase-to-spec/outline-review-loop.js +187 -0
  23. package/dist/codebase-to-spec/pack.d.ts +51 -0
  24. package/dist/codebase-to-spec/pack.js +127 -0
  25. package/dist/codebase-to-spec/planner.d.ts +41 -0
  26. package/dist/codebase-to-spec/planner.js +76 -0
  27. package/dist/codebase-to-spec/present.d.ts +94 -0
  28. package/dist/codebase-to-spec/present.js +288 -0
  29. package/dist/codebase-to-spec/progress.d.ts +33 -0
  30. package/dist/codebase-to-spec/progress.js +28 -0
  31. package/dist/codebase-to-spec/prompts/editor.d.ts +13 -0
  32. package/dist/codebase-to-spec/prompts/editor.js +57 -0
  33. package/dist/codebase-to-spec/prompts/outline-reviewer.d.ts +12 -0
  34. package/dist/codebase-to-spec/prompts/outline-reviewer.js +87 -0
  35. package/dist/codebase-to-spec/prompts/planner-apply.d.ts +12 -0
  36. package/dist/codebase-to-spec/prompts/planner-apply.js +32 -0
  37. package/dist/codebase-to-spec/prompts/planner-initial.d.ts +11 -0
  38. package/dist/codebase-to-spec/prompts/planner-initial.js +125 -0
  39. package/dist/codebase-to-spec/prompts/planner-revise.d.ts +14 -0
  40. package/dist/codebase-to-spec/prompts/planner-revise.js +60 -0
  41. package/dist/codebase-to-spec/prompts/spec-reviewer.d.ts +16 -0
  42. package/dist/codebase-to-spec/prompts/spec-reviewer.js +96 -0
  43. package/dist/codebase-to-spec/prompts/specifier.d.ts +12 -0
  44. package/dist/codebase-to-spec/prompts/specifier.js +100 -0
  45. package/dist/codebase-to-spec/prompts/style-check.d.ts +12 -0
  46. package/dist/codebase-to-spec/prompts/style-check.js +78 -0
  47. package/dist/codebase-to-spec/schemas.d.ts +257 -0
  48. package/dist/codebase-to-spec/schemas.js +183 -0
  49. package/dist/codebase-to-spec/skill-install.d.ts +57 -0
  50. package/dist/codebase-to-spec/skill-install.js +79 -0
  51. package/dist/codebase-to-spec/slice.d.ts +49 -0
  52. package/dist/codebase-to-spec/slice.js +111 -0
  53. package/dist/codebase-to-spec/specifier.d.ts +60 -0
  54. package/dist/codebase-to-spec/specifier.js +79 -0
  55. package/dist/codebase-to-spec/style-check.d.ts +29 -0
  56. package/dist/codebase-to-spec/style-check.js +33 -0
  57. package/dist/codebase-to-spec/summary.d.ts +51 -0
  58. package/dist/codebase-to-spec/summary.js +183 -0
  59. package/dist/codebase-to-spec/validate.d.ts +46 -0
  60. package/dist/codebase-to-spec/validate.js +130 -0
  61. package/dist/commands/acceptance-test.d.ts +6 -0
  62. package/dist/commands/acceptance-test.js +212 -0
  63. package/dist/commands/ai-setup.d.ts +5 -0
  64. package/dist/commands/ai-setup.js +441 -0
  65. package/dist/commands/browsertest.js +34 -27
  66. package/dist/commands/codebase-to-spec/compose.d.ts +14 -0
  67. package/dist/commands/codebase-to-spec/compose.js +57 -0
  68. package/dist/commands/codebase-to-spec/edit-loop.d.ts +16 -0
  69. package/dist/commands/codebase-to-spec/edit-loop.js +83 -0
  70. package/dist/commands/codebase-to-spec/fan-out.d.ts +19 -0
  71. package/dist/commands/codebase-to-spec/fan-out.js +77 -0
  72. package/dist/commands/codebase-to-spec/index.d.ts +9 -0
  73. package/dist/commands/codebase-to-spec/index.js +135 -0
  74. package/dist/commands/codebase-to-spec/pack.d.ts +22 -0
  75. package/dist/commands/codebase-to-spec/pack.js +76 -0
  76. package/dist/commands/codebase-to-spec/plan-loop.d.ts +26 -0
  77. package/dist/commands/codebase-to-spec/plan-loop.js +105 -0
  78. package/dist/commands/codebase-to-spec/present.d.ts +21 -0
  79. package/dist/commands/codebase-to-spec/present.js +92 -0
  80. package/dist/commands/codebase-to-spec/run.d.ts +20 -0
  81. package/dist/commands/codebase-to-spec/run.js +85 -0
  82. package/dist/commands/codebase-to-spec/skill-install.d.ts +20 -0
  83. package/dist/commands/codebase-to-spec/skill-install.js +51 -0
  84. package/dist/commands/codebase-to-spec/specify-area.d.ts +18 -0
  85. package/dist/commands/codebase-to-spec/specify-area.js +82 -0
  86. package/dist/commands/codebase-to-spec/style-check.d.ts +15 -0
  87. package/dist/commands/codebase-to-spec/style-check.js +42 -0
  88. package/dist/commands/codebase-to-spec/validate.d.ts +18 -0
  89. package/dist/commands/codebase-to-spec/validate.js +38 -0
  90. package/dist/commands/create-requirement-document.d.ts +2 -0
  91. package/dist/commands/create-requirement-document.js +41 -0
  92. package/dist/commands/finalize.js +7 -7
  93. package/dist/commands/get.d.ts +2 -0
  94. package/dist/commands/get.js +55 -0
  95. package/dist/commands/init.js +132 -117
  96. package/dist/commands/link.js +27 -27
  97. package/dist/commands/list.d.ts +6 -0
  98. package/dist/commands/list.js +43 -0
  99. package/dist/commands/mcp-setup.js +159 -149
  100. package/dist/commands/mcp.js +1 -1
  101. package/dist/commands/prepare.js +4 -4
  102. package/dist/commands/pull.js +116 -121
  103. package/dist/commands/push.js +106 -112
  104. package/dist/commands/report.d.ts +6 -2
  105. package/dist/commands/report.js +177 -122
  106. package/dist/commands/requirements-for.d.ts +2 -0
  107. package/dist/commands/requirements-for.js +29 -0
  108. package/dist/commands/review-test.d.ts +2 -0
  109. package/dist/commands/review-test.js +75 -0
  110. package/dist/commands/search.d.ts +6 -0
  111. package/dist/commands/search.js +39 -0
  112. package/dist/commands/style-check.d.ts +7 -0
  113. package/dist/commands/style-check.js +75 -0
  114. package/dist/commands/test.js +53 -59
  115. package/dist/commands/tests-for.d.ts +2 -0
  116. package/dist/commands/tests-for.js +80 -0
  117. package/dist/commands/validate.d.ts +6 -0
  118. package/dist/commands/validate.js +72 -0
  119. package/dist/config.js +1 -1
  120. package/dist/convex.d.ts +34 -22
  121. package/dist/convex.js +38 -22
  122. package/dist/harness/cache.d.ts +1 -5
  123. package/dist/harness/cache.js +49 -59
  124. package/dist/harness/convexReporting.d.ts +1 -1
  125. package/dist/harness/convexReporting.js +9 -7
  126. package/dist/harness/coverageCache.js +3 -3
  127. package/dist/harness/finalize.js +59 -46
  128. package/dist/harness/index.d.ts +6 -7
  129. package/dist/harness/index.js +9 -10
  130. package/dist/harness/prepare.js +6 -5
  131. package/dist/harness/requirementsLoader.d.ts +2 -2
  132. package/dist/harness/requirementsLoader.js +13 -35
  133. package/dist/harness/tracking.js +18 -18
  134. package/dist/harness/types.d.ts +1 -1
  135. package/dist/mcp/convexClient.d.ts +0 -39
  136. package/dist/mcp/convexClient.js +2 -107
  137. package/dist/mcp/grep.d.ts +1 -1
  138. package/dist/mcp/grep.js +87 -42
  139. package/dist/mcp/handlers/authoring.d.ts +1 -1
  140. package/dist/mcp/handlers/authoring.js +30 -234
  141. package/dist/mcp/handlers/coverage.d.ts +1 -1
  142. package/dist/mcp/handlers/coverage.js +13 -15
  143. package/dist/mcp/handlers/debug.d.ts +2 -3
  144. package/dist/mcp/handlers/debug.js +10 -10
  145. package/dist/mcp/handlers/get.d.ts +1 -1
  146. package/dist/mcp/handlers/get.js +11 -10
  147. package/dist/mcp/handlers/index.d.ts +20 -20
  148. package/dist/mcp/handlers/index.js +10 -10
  149. package/dist/mcp/handlers/list.d.ts +4 -33
  150. package/dist/mcp/handlers/list.js +16 -38
  151. package/dist/mcp/handlers/push.d.ts +1 -1
  152. package/dist/mcp/handlers/push.js +28 -18
  153. package/dist/mcp/handlers/report.d.ts +16 -0
  154. package/dist/mcp/handlers/report.js +134 -0
  155. package/dist/mcp/handlers/review.d.ts +1 -1
  156. package/dist/mcp/handlers/review.js +40 -59
  157. package/dist/mcp/handlers/search.d.ts +1 -1
  158. package/dist/mcp/handlers/search.js +7 -9
  159. package/dist/mcp/handlers/test-mapping.d.ts +1 -1
  160. package/dist/mcp/handlers/test-mapping.js +14 -14
  161. package/dist/mcp/handlers/types.d.ts +3 -3
  162. package/dist/mcp/handlers/types.js +2 -2
  163. package/dist/mcp/index.d.ts +1 -1
  164. package/dist/mcp/index.js +147 -167
  165. package/dist/mcp/requirements.d.ts +2 -2
  166. package/dist/mcp/requirements.js +30 -30
  167. package/dist/mcp/testCodeExtractor.js +24 -26
  168. package/dist/mcp/types.d.ts +1 -1
  169. package/dist/push/core.d.ts +2 -2
  170. package/dist/push/core.js +20 -20
  171. package/dist/push/index.d.ts +1 -1
  172. package/dist/push/index.js +2 -2
  173. package/dist/requirements/cloud-ai.d.ts +57 -0
  174. package/dist/requirements/cloud-ai.js +104 -0
  175. package/dist/requirements/cloud-coverage.d.ts +41 -0
  176. package/dist/requirements/cloud-coverage.js +60 -0
  177. package/dist/requirements/coverage.d.ts +45 -0
  178. package/dist/requirements/coverage.js +114 -0
  179. package/dist/requirements/grep.d.ts +33 -0
  180. package/dist/requirements/grep.js +306 -0
  181. package/dist/requirements/index.d.ts +73 -0
  182. package/dist/requirements/index.js +174 -0
  183. package/dist/requirements/style-guide.d.ts +67 -0
  184. package/dist/requirements/style-guide.js +299 -0
  185. package/dist/requirements/testCodeExtractor.d.ts +22 -0
  186. package/dist/requirements/testCodeExtractor.js +150 -0
  187. package/dist/schema/browser.d.ts +8 -8
  188. package/dist/schema/browser.js +13 -15
  189. package/dist/schema/builder.d.ts +1 -1
  190. package/dist/schema/builder.js +13 -44
  191. package/dist/schema/conversions.d.ts +2 -2
  192. package/dist/schema/conversions.js +11 -11
  193. package/dist/schema/index.d.ts +9 -9
  194. package/dist/schema/index.js +15 -15
  195. package/dist/schema/parser-core.d.ts +1 -1
  196. package/dist/schema/parser-core.js +23 -22
  197. package/dist/schema/parser.d.ts +3 -3
  198. package/dist/schema/parser.js +27 -31
  199. package/dist/schema/resolver.d.ts +1 -1
  200. package/dist/schema/resolver.js +9 -9
  201. package/dist/schema/scenario.d.ts +1 -1
  202. package/dist/schema/scenario.js +1 -1
  203. package/dist/schema/schemas.d.ts +3 -3
  204. package/dist/schema/schemas.js +41 -28
  205. package/dist/schema/test-schema.js +27 -27
  206. package/dist/templates/context-file-section.md +3 -2
  207. package/dist/templates/example-requirements.js +1 -1
  208. package/dist/templates/example-requirements.ts +3 -1
  209. package/dist/templates/requirements-readme.js +1 -1
  210. package/dist/templates/requirements-readme.ts +1 -1
  211. package/dist/templates/skills/codebase-to-spec/SKILL.md +118 -0
  212. package/dist/utils/brand.js +3 -3
  213. package/dist/utils/browser-launch.js +4 -4
  214. package/dist/utils/context-file.d.ts +1 -1
  215. package/dist/utils/context-file.js +26 -26
  216. package/dist/utils/env.js +7 -7
  217. package/dist/utils/gitignore.js +7 -7
  218. package/dist/utils/oauth-callback-server.d.ts +1 -1
  219. package/dist/utils/oauth-callback-server.js +27 -25
  220. package/dist/utils/oauth-flow.js +32 -29
  221. package/dist/utils/project-discovery.d.ts +3 -3
  222. package/dist/utils/project-discovery.js +18 -17
  223. package/dist/utils/project-name.js +8 -8
  224. package/dist/utils/project-selector.d.ts +1 -1
  225. package/dist/utils/project-selector.js +24 -21
  226. package/dist/utils/project-settings.d.ts +1 -1
  227. package/dist/utils/project-settings.js +24 -22
  228. package/dist/utils/templates.js +6 -6
  229. package/package.json +2 -1
@@ -1,7 +1,7 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- const REQUIREMENTS_DIR = '.requirements';
4
- const SETTINGS_FILE = 'project-settings.json';
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ const REQUIREMENTS_DIR = ".requirements";
4
+ const SETTINGS_FILE = "project-settings.json";
5
5
  /**
6
6
  * Get project credentials from environment variables.
7
7
  * Used in CI/CD environments where credentials are passed via env vars
@@ -27,14 +27,16 @@ export function findProjectRoot(startDir = process.cwd()) {
27
27
  const root = path.parse(currentDir).root;
28
28
  while (currentDir !== root) {
29
29
  const requirementsDir = path.join(currentDir, REQUIREMENTS_DIR);
30
- if (fs.existsSync(requirementsDir) && fs.statSync(requirementsDir).isDirectory()) {
30
+ if (fs.existsSync(requirementsDir) &&
31
+ fs.statSync(requirementsDir).isDirectory()) {
31
32
  return currentDir;
32
33
  }
33
34
  currentDir = path.dirname(currentDir);
34
35
  }
35
36
  // Check root directory as well
36
37
  const rootRequirementsDir = path.join(root, REQUIREMENTS_DIR);
37
- if (fs.existsSync(rootRequirementsDir) && fs.statSync(rootRequirementsDir).isDirectory()) {
38
+ if (fs.existsSync(rootRequirementsDir) &&
39
+ fs.statSync(rootRequirementsDir).isDirectory()) {
38
40
  return root;
39
41
  }
40
42
  return undefined;
@@ -50,7 +52,7 @@ export function readProjectSettings(projectRoot) {
50
52
  }
51
53
  let content;
52
54
  try {
53
- content = fs.readFileSync(settingsPath, 'utf-8');
55
+ content = fs.readFileSync(settingsPath, "utf-8");
54
56
  }
55
57
  catch (err) {
56
58
  throw new Error(`Could not read project-settings.json: ${err.message}`);
@@ -62,11 +64,11 @@ export function readProjectSettings(projectRoot) {
62
64
  catch (err) {
63
65
  throw new Error(`project-settings.json is invalid: ${err.message}`);
64
66
  }
65
- if (typeof parsed !== 'object' ||
67
+ if (typeof parsed !== "object" ||
66
68
  parsed === null ||
67
- typeof parsed.projectId !== 'string' ||
68
- typeof parsed.projectSecret !== 'string') {
69
- throw new Error('project-settings.json is invalid: missing projectId or projectSecret');
69
+ typeof parsed.projectId !== "string" ||
70
+ typeof parsed.projectSecret !== "string") {
71
+ throw new Error("project-settings.json is invalid: missing projectId or projectSecret");
70
72
  }
71
73
  const record = parsed;
72
74
  const settings = {
@@ -74,28 +76,28 @@ export function readProjectSettings(projectRoot) {
74
76
  projectSecret: record.projectSecret,
75
77
  };
76
78
  // Optional fields
77
- if (typeof record.defaultURL === 'string') {
79
+ if (typeof record.defaultURL === "string") {
78
80
  settings.defaultURL = record.defaultURL;
79
81
  }
80
- if (typeof record.browserTest === 'object' && record.browserTest !== null) {
82
+ if (typeof record.browserTest === "object" && record.browserTest !== null) {
81
83
  const bt = record.browserTest;
82
84
  settings.browserTest = {};
83
- if (typeof bt.modelName === 'string') {
85
+ if (typeof bt.modelName === "string") {
84
86
  settings.browserTest.modelName = bt.modelName;
85
87
  }
86
- if (typeof bt.modelApiKey === 'string') {
88
+ if (typeof bt.modelApiKey === "string") {
87
89
  settings.browserTest.modelApiKey = bt.modelApiKey;
88
90
  }
89
- if (typeof bt.geminiApiKey === 'string') {
91
+ if (typeof bt.geminiApiKey === "string") {
90
92
  settings.browserTest.geminiApiKey = bt.geminiApiKey;
91
93
  }
92
- if (typeof bt.vercelBypassSecret === 'string') {
94
+ if (typeof bt.vercelBypassSecret === "string") {
93
95
  settings.browserTest.vercelBypassSecret = bt.vercelBypassSecret;
94
96
  }
95
- if (typeof bt.browserbaseApiKey === 'string') {
97
+ if (typeof bt.browserbaseApiKey === "string") {
96
98
  settings.browserTest.browserbaseApiKey = bt.browserbaseApiKey;
97
99
  }
98
- if (typeof bt.browserbaseProjectId === 'string') {
100
+ if (typeof bt.browserbaseProjectId === "string") {
99
101
  settings.browserTest.browserbaseProjectId = bt.browserbaseProjectId;
100
102
  }
101
103
  }
@@ -112,8 +114,8 @@ export function writeProjectSettings(projectRoot, settings) {
112
114
  if (!fs.existsSync(requirementsDir)) {
113
115
  fs.mkdirSync(requirementsDir, { recursive: true });
114
116
  }
115
- const content = JSON.stringify(settings, null, 2) + '\n';
116
- fs.writeFileSync(settingsPath, content, 'utf-8');
117
+ const content = `${JSON.stringify(settings, null, 2)}\n`;
118
+ fs.writeFileSync(settingsPath, content, "utf-8");
117
119
  }
118
120
  /**
119
121
  * Get project info including status and credentials
@@ -134,7 +136,7 @@ export function getProjectInfo(startDir = process.cwd()) {
134
136
  }
135
137
  return {
136
138
  rootPath,
137
- status: credentials ? 'cloud-connected' : 'local-only',
139
+ status: credentials ? "cloud-connected" : "local-only",
138
140
  credentials,
139
141
  };
140
142
  }
@@ -1,6 +1,6 @@
1
- import { readFileSync } from 'fs';
2
- import { join, dirname } from 'path';
3
- import { fileURLToPath } from 'url';
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
4
  /**
5
5
  * Get the templates directory path
6
6
  */
@@ -10,7 +10,7 @@ function getTemplatesDir() {
10
10
  const __filename = fileURLToPath(import.meta.url);
11
11
  const __dirname = dirname(__filename);
12
12
  // Go up from utils/ to src/ or dist/, then into templates/
13
- return join(__dirname, '..', 'templates');
13
+ return join(__dirname, "..", "templates");
14
14
  }
15
15
  /**
16
16
  * Load a template file and replace placeholders
@@ -18,10 +18,10 @@ function getTemplatesDir() {
18
18
  export function loadTemplate(templateName, replacements = {}) {
19
19
  const templatesDir = getTemplatesDir();
20
20
  const templatePath = join(templatesDir, templateName);
21
- let content = readFileSync(templatePath, 'utf-8');
21
+ let content = readFileSync(templatePath, "utf-8");
22
22
  // Replace placeholders
23
23
  for (const [key, value] of Object.entries(replacements)) {
24
- content = content.replace(new RegExp(`{{${key}}}`, 'g'), value);
24
+ content = content.replace(new RegExp(`{{${key}}}`, "g"), value);
25
25
  }
26
26
  return content;
27
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@popoverai/dotrequirements",
3
- "version": "0.23.0",
3
+ "version": "0.24.0",
4
4
  "description": "Requirements tracking CLI, test harness, and MCP server",
5
5
  "type": "module",
6
6
  "bin": {
@@ -61,6 +61,7 @@
61
61
  "glob": "^11.0.0",
62
62
  "open": "^11.0.0",
63
63
  "prompts": "^2.4.2",
64
+ "repomix": "^1.14.0",
64
65
  "uuid": "^13.0.0",
65
66
  "yaml": "^2.8.1",
66
67
  "zod": "^3.25.76",