@turri-dev/cli 0.1.27 → 0.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 (216) hide show
  1. package/README.md +6 -6
  2. package/dist/advisor-chat.d.ts +63 -0
  3. package/dist/advisor-chat.js +290 -0
  4. package/dist/background-skills.d.ts +53 -0
  5. package/dist/background-skills.js +121 -0
  6. package/dist/bedrock-region.d.ts +66 -0
  7. package/dist/bedrock-region.js +144 -0
  8. package/dist/btw.d.ts +1 -1
  9. package/dist/btw.js +1 -1
  10. package/dist/change-plain-cli.js +20 -13
  11. package/dist/chat-idle.d.ts +7 -0
  12. package/dist/chat-idle.js +20 -0
  13. package/dist/chats.d.ts +10 -0
  14. package/dist/chats.js +23 -0
  15. package/dist/cli-options.d.ts +1 -2
  16. package/dist/cli-options.js +2 -7
  17. package/dist/cli.js +11 -3
  18. package/dist/config-command.d.ts +14 -0
  19. package/dist/config-command.js +35 -15
  20. package/dist/config-edit.d.ts +3 -3
  21. package/dist/config-edit.js +16 -12
  22. package/dist/config.d.ts +54 -34
  23. package/dist/config.js +40 -44
  24. package/dist/conform-cli.js +12 -10
  25. package/dist/conformance-switch.d.ts +34 -0
  26. package/dist/conformance-switch.js +108 -0
  27. package/dist/cultivate-cli.js +15 -5
  28. package/dist/drift-cli.js +2 -0
  29. package/dist/extension.d.ts +15 -0
  30. package/dist/extension.js +260 -83
  31. package/dist/host-session.d.ts +26 -0
  32. package/dist/host-session.js +30 -2
  33. package/dist/host.d.ts +5 -2
  34. package/dist/host.js +7 -1
  35. package/dist/init-config.d.ts +1 -1
  36. package/dist/init-config.js +20 -11
  37. package/dist/loop-cli.d.ts +3 -3
  38. package/dist/loop-cli.js +13 -16
  39. package/dist/loop-tools.js +18 -10
  40. package/dist/model-check.d.ts +8 -3
  41. package/dist/model-check.js +13 -8
  42. package/dist/new-project.js +12 -8
  43. package/dist/{validate-cli.js → parse-cli.js} +11 -5
  44. package/dist/parse-tool.d.ts +9 -0
  45. package/dist/parse-tool.js +33 -0
  46. package/dist/pi-launch.js +1 -1
  47. package/dist/plain/check.d.ts +53 -6
  48. package/dist/plain/check.js +217 -24
  49. package/dist/plain/concepts.d.ts +8 -0
  50. package/dist/plain/concepts.js +66 -23
  51. package/dist/plain/cycles.d.ts +21 -0
  52. package/dist/plain/cycles.js +190 -0
  53. package/dist/plain/errors.d.ts +4 -0
  54. package/dist/plain/errors.js +7 -0
  55. package/dist/plain/files.d.ts +18 -1
  56. package/dist/plain/files.js +39 -2
  57. package/dist/plain/graph.d.ts +33 -4
  58. package/dist/plain/graph.js +60 -12
  59. package/dist/plain/highlight.d.ts +3 -2
  60. package/dist/plain/highlight.js +4 -3
  61. package/dist/plain/index.d.ts +8 -5
  62. package/dist/plain/index.js +8 -5
  63. package/dist/plain/liquid.js +1 -6
  64. package/dist/plain/markdown.d.ts +32 -3
  65. package/dist/plain/markdown.js +146 -24
  66. package/dist/plain/module-concepts.js +2 -2
  67. package/dist/plain/parser.d.ts +83 -28
  68. package/dist/plain/parser.js +381 -260
  69. package/dist/plain/plain.tmLanguage.json +29 -3
  70. package/dist/plain/project.d.ts +48 -0
  71. package/dist/plain/project.js +155 -0
  72. package/dist/plain/spec.d.ts +90 -28
  73. package/dist/plain/spec.js +107 -133
  74. package/dist/plain/test-plain-file.d.ts +59 -0
  75. package/dist/plain/test-plain-file.js +232 -0
  76. package/dist/regenerate/activity.d.ts +20 -9
  77. package/dist/regenerate/activity.js +11 -4
  78. package/dist/regenerate/advisor-records.d.ts +93 -0
  79. package/dist/regenerate/advisor-records.js +110 -0
  80. package/dist/regenerate/advisor-runs.d.ts +87 -0
  81. package/dist/regenerate/advisor-runs.js +327 -0
  82. package/dist/regenerate/base-folder.d.ts +68 -0
  83. package/dist/regenerate/base-folder.js +168 -0
  84. package/dist/regenerate/cases.d.ts +9 -6
  85. package/dist/regenerate/cases.js +70 -14
  86. package/dist/regenerate/change-view.d.ts +8 -3
  87. package/dist/regenerate/change-view.js +71 -22
  88. package/dist/regenerate/chunk-plan.d.ts +36 -15
  89. package/dist/regenerate/chunk-plan.js +165 -59
  90. package/dist/regenerate/conform.d.ts +3 -0
  91. package/dist/regenerate/conform.js +6 -5
  92. package/dist/regenerate/conformance-agents.d.ts +18 -39
  93. package/dist/regenerate/conformance-agents.js +60 -88
  94. package/dist/regenerate/conformance.d.ts +23 -13
  95. package/dist/regenerate/conformance.js +119 -82
  96. package/dist/regenerate/diff-view.d.ts +1 -1
  97. package/dist/regenerate/diff-view.js +20 -4
  98. package/dist/regenerate/drift.d.ts +47 -15
  99. package/dist/regenerate/drift.js +101 -30
  100. package/dist/regenerate/jobs.d.ts +2 -2
  101. package/dist/regenerate/jobs.js +1 -1
  102. package/dist/regenerate/ledger.d.ts +19 -0
  103. package/dist/regenerate/loop.d.ts +62 -43
  104. package/dist/regenerate/loop.js +472 -341
  105. package/dist/regenerate/paths.d.ts +4 -0
  106. package/dist/regenerate/paths.js +7 -1
  107. package/dist/regenerate/plain-palette.js +2 -0
  108. package/dist/regenerate/prompt.d.ts +57 -19
  109. package/dist/regenerate/prompt.js +157 -122
  110. package/dist/regenerate/records.d.ts +43 -12
  111. package/dist/regenerate/records.js +102 -88
  112. package/dist/regenerate/regenerate.js +29 -11
  113. package/dist/regenerate/regression.d.ts +4 -4
  114. package/dist/regenerate/regression.js +14 -10
  115. package/dist/regenerate/renames.d.ts +42 -0
  116. package/dist/regenerate/renames.js +185 -0
  117. package/dist/regenerate/requires.d.ts +1 -1
  118. package/dist/regenerate/requires.js +10 -3
  119. package/dist/regenerate/resources.d.ts +5 -3
  120. package/dist/regenerate/resources.js +4 -4
  121. package/dist/regenerate/scripts-being-written.d.ts +19 -0
  122. package/dist/regenerate/scripts-being-written.js +30 -0
  123. package/dist/regenerate/spec-map-view.d.ts +2 -2
  124. package/dist/regenerate/spec-map-view.js +46 -15
  125. package/dist/regenerate/spec-map.d.ts +27 -5
  126. package/dist/regenerate/spec-map.js +92 -60
  127. package/dist/regenerate/spec-steps.d.ts +48 -5
  128. package/dist/regenerate/spec-steps.js +213 -28
  129. package/dist/regenerate/state.d.ts +4 -3
  130. package/dist/regenerate/stop-report.d.ts +1 -1
  131. package/dist/regenerate/stop-report.js +10 -10
  132. package/dist/regenerate/test-advisor.d.ts +101 -0
  133. package/dist/regenerate/test-advisor.js +379 -0
  134. package/dist/regenerate/test-kinds.d.ts +71 -28
  135. package/dist/regenerate/test-kinds.js +110 -63
  136. package/dist/regenerate/test-scripts.d.ts +2 -0
  137. package/dist/regenerate/test-scripts.js +4 -0
  138. package/dist/regenerate/testing-steps.d.ts +41 -0
  139. package/dist/regenerate/testing-steps.js +110 -0
  140. package/dist/regenerate/testing.d.ts +1 -1
  141. package/dist/regenerate/testing.js +5 -4
  142. package/dist/regenerate/unit-review.d.ts +1 -1
  143. package/dist/regenerate/unit-review.js +3 -3
  144. package/dist/regenerate-cli.js +11 -12
  145. package/dist/release-agent.js +4 -0
  146. package/dist/release-cli.js +2 -0
  147. package/dist/release-tools.js +2 -0
  148. package/dist/run-report.d.ts +2 -2
  149. package/dist/run-report.js +4 -3
  150. package/dist/self-invocation.d.ts +1 -1
  151. package/dist/self-invocation.js +1 -1
  152. package/dist/sentinel.js +1 -1
  153. package/dist/setup.d.ts +10 -0
  154. package/dist/setup.js +52 -4
  155. package/dist/skill.d.ts +10 -0
  156. package/dist/skill.js +6 -0
  157. package/dist/skills.js +3 -1
  158. package/dist/spec-tools.js +21 -31
  159. package/dist/test-plain-files.d.ts +41 -0
  160. package/dist/test-plain-files.js +177 -0
  161. package/docs/README.md +3 -1
  162. package/docs/authoring-plain.md +46 -13
  163. package/docs/chats.md +3 -1
  164. package/docs/config.md +20 -15
  165. package/docs/deploy.md +1 -1
  166. package/docs/development.md +2 -1
  167. package/docs/headless.md +15 -18
  168. package/docs/hosting.md +28 -12
  169. package/docs/installation.md +1 -0
  170. package/docs/parser.md +88 -27
  171. package/docs/regenerating.md +87 -52
  172. package/docs/sentinel.md +1 -1
  173. package/docs/skills-and-gates.md +3 -1
  174. package/docs/test-advisor.md +110 -0
  175. package/docs/theming.md +1 -1
  176. package/docs/using.md +17 -15
  177. package/genome/rules/bullet-continuation.md +8 -8
  178. package/genome/rules/concise-specs-examples.md +111 -80
  179. package/genome/rules/concise-specs-integration-examples.md +56 -41
  180. package/genome/rules/concise-specs.md +17 -16
  181. package/genome/rules/definitions.md +5 -5
  182. package/genome/rules/examples/integration-embedded-testing/run_conformance_tests_java.sh +1 -1
  183. package/genome/rules/func-specs.md +69 -74
  184. package/genome/rules/impl-reqs.md +4 -4
  185. package/genome/rules/integration-embedded-testing.md +20 -20
  186. package/genome/rules/integration-embedded.md +31 -31
  187. package/genome/rules/integration-standalone.md +9 -9
  188. package/genome/rules/integrations.md +18 -18
  189. package/genome/rules/linked-resources.md +19 -16
  190. package/genome/rules/module-structure.md +21 -14
  191. package/genome/rules/project-model.md +18 -17
  192. package/genome/rules/required-concepts.md +1 -1
  193. package/genome/rules/requires-modules.md +6 -5
  194. package/genome/rules/semantic-ids.md +49 -0
  195. package/genome/rules/stdlib.md +4 -5
  196. package/genome/rules/test-plain-files.md +130 -0
  197. package/genome/rules/test-reqs.md +8 -8
  198. package/genome/rules/turri-regeneration.md +23 -8
  199. package/genome/skills/analyze-2-func-specs/SKILL.md +36 -21
  200. package/genome/skills/analyze-func-specs/SKILL.md +46 -32
  201. package/genome/skills/break-down-func-spec/SKILL.md +91 -67
  202. package/genome/skills/consolidate-concepts/SKILL.md +10 -10
  203. package/genome/skills/convert-old-syntax/SKILL.md +68 -0
  204. package/genome/skills/convert-old-syntax/references/rubric.md +11 -0
  205. package/genome/skills/debug-specs/SKILL.md +62 -56
  206. package/genome/skills/implement-conformance-testing-script/SKILL.md +19 -15
  207. package/genome/skills/implement-conformance-testing-script/assets/run_conformance_tests_java.sh +2 -2
  208. package/genome/skills/implement-conformance-testing-script/assets/run_conformance_tests_python.sh +2 -2
  209. package/genome/skills/implement-unit-testing-script/SKILL.md +14 -10
  210. package/genome/skills/refactor-module/SKILL.md +35 -35
  211. package/genome/skills/resolve-section-ownership/SKILL.md +9 -9
  212. package/genome/skills/resolve-spec-conflict/SKILL.md +35 -29
  213. package/package.json +7 -6
  214. package/dist/regenerate/choose-conformance.d.ts +0 -32
  215. package/dist/regenerate/choose-conformance.js +0 -117
  216. /package/dist/{validate-cli.d.ts → parse-cli.d.ts} +0 -0
@@ -1,5 +1,7 @@
1
1
  /** A module's code record and its tests' - `code/.turri.json`, `tests/.turri.json` (records.ts). */
2
2
  export declare const RECORD_FILE = ".turri.json";
3
+ /** What a codebase started from, when it started from a base folder (base-folder.ts): beside the code record, never code. */
4
+ export declare const BASE_RECORD_FILE = ".turri-base.json";
3
5
  /**
4
6
  * The ***plain standard library: import modules for generic pieces of software that ship with turri,
5
7
  * imported as `stdlib/backend/python-fastapi` - a reserved name (see plain/stdlib.ts).
@@ -35,6 +37,8 @@ export declare function defaultBuildDir(moduleName: string, cwd?: string): strin
35
37
  * specs at the root of their project are built where they always were.
36
38
  */
37
39
  export declare function projectDirOf(plainFile: string): string;
40
+ /** Whether a folder says it is a project: it holds a config file or `plain_modules/`. */
41
+ export declare function isProjectDir(dir: string): boolean;
38
42
  export declare function modulesRoot(cwd?: string): string;
39
43
  export declare function buildDirUnder(root: string, moduleName: string): string;
40
44
  export declare function testsDirUnder(root: string, moduleName: string): string;
@@ -3,6 +3,8 @@ import { dirname, join, resolve, sep } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  /** A module's code record and its tests' - `code/.turri.json`, `tests/.turri.json` (records.ts). */
5
5
  export const RECORD_FILE = ".turri.json";
6
+ /** What a codebase started from, when it started from a base folder (base-folder.ts): beside the code record, never code. */
7
+ export const BASE_RECORD_FILE = ".turri-base.json";
6
8
  /**
7
9
  * The ***plain standard library: import modules for generic pieces of software that ship with turri,
8
10
  * imported as `stdlib/backend/python-fastapi` - a reserved name (see plain/stdlib.ts).
@@ -44,12 +46,16 @@ export function defaultBuildDir(moduleName, cwd = process.cwd()) {
44
46
  export function projectDirOf(plainFile) {
45
47
  const start = dirname(resolve(plainFile));
46
48
  for (let dir = start;; dir = dirname(dir)) {
47
- if (existsSync(join(dir, "config.yaml")) || existsSync(join(dir, MODULES_DIR)) || hasModuleConfig(dir))
49
+ if (isProjectDir(dir))
48
50
  return dir;
49
51
  if (dirname(dir) === dir)
50
52
  return start;
51
53
  }
52
54
  }
55
+ /** Whether a folder says it is a project: it holds a config file or `plain_modules/`. */
56
+ export function isProjectDir(dir) {
57
+ return existsSync(join(dir, "config.yaml")) || existsSync(join(dir, MODULES_DIR)) || hasModuleConfig(dir);
58
+ }
53
59
  /** Whether a folder holds a config file - config.turri.yaml, a stack's config.turri.<stack>.yaml, or one in the old naming - which makes it a project too. */
54
60
  function hasModuleConfig(dir) {
55
61
  try {
@@ -14,6 +14,7 @@ const DARK = {
14
14
  module: { colour: "#f4f7f9" },
15
15
  comment: { colour: "#85a3b2", italic: true },
16
16
  bullet: { colour: "#85a3b2" },
17
+ id: { colour: "#5ce1e6", bold: true },
17
18
  },
18
19
  added: "#5ce1e6",
19
20
  removed: "#ff7fa6",
@@ -35,6 +36,7 @@ const LIGHT = {
35
36
  module: { colour: "#1e3442" },
36
37
  comment: { colour: "#3e5a6b", italic: true },
37
38
  bullet: { colour: "#3e5a6b" },
39
+ id: { colour: "#732553", bold: true },
38
40
  },
39
41
  added: "#1e3442",
40
42
  removed: "#732553",
@@ -1,22 +1,23 @@
1
1
  import { type MarshalledPlainSource, type Specifications } from "../plain/spec.ts";
2
2
  import { type LoadedResource } from "./resources.ts";
3
+ import { type TestedSpec } from "./test-kinds.ts";
3
4
  import type { JobCases } from "./drift.ts";
4
5
  import type { RequiredSpec } from "./state.ts";
5
6
  import { type SpecChange } from "./spec-steps.ts";
6
7
  /**
7
8
  * Functional specs grouped by the module they belong to - in the order the modules are built on
8
- * one another, the current module marked - and each tagged with its module and its id there. A codebase holds the
9
- * functionalities of every module it is built on, and each module numbers its own from 1, so
10
- * "functionality 1" alone is ambiguous: the first listed may be base's 1 and the next top's 3.
9
+ * one another, the current module marked - and each tagged with its module and its func-id there. A codebase holds the
10
+ * functionalities of every module it is built on, and a func-id is unique only in its module, so a func-id alone can
11
+ * be ambiguous: `base` and `app` may each have an `export`.
11
12
  * (the reference implementation's implemented functional requirements prompt section, as tags.)
12
13
  */
13
14
  export declare function functionalitiesByModule(entries: Array<{
14
15
  module: string;
15
- frid: string;
16
+ funcId: string;
16
17
  spec: string;
17
18
  }>, currentModule: string, status?: string): string;
18
- /** "functionality 3 of module `app`": a functionality, named so that no other module's can be meant. */
19
- export declare function functionalityOf(frid: string, moduleName: string): string;
19
+ /** "functional spec `app:add-task`": a functional spec, named so that no other module's can be meant. */
20
+ export declare function functionalityOf(funcId: string, moduleName: string): string;
20
21
  /**
21
22
  * How to read a ***plain specification: what each section is, and what the predefined concepts
22
23
  * mean. At the head of every prompt for an agent that builds, tests or judges from a spec - the
@@ -66,6 +67,16 @@ export declare function sectionModules(tree: MarshalledPlainSource, moduleName:
66
67
  * when they do not match the items one for one, every item is the current module's.
67
68
  */
68
69
  export declare function moduleSection(key: string, items: string[], moduleName: string, modules?: SectionModules): string | null;
70
+ /**
71
+ * The base folder a codebase started from, for its coding agents (base-folder.ts): that it did, and the files that came
72
+ * from it - code to build on, files to use, or both: the block says neither, for it may be either.
73
+ */
74
+ export declare function baseFolderBlock(base: {
75
+ folder: string;
76
+ files: string[];
77
+ } | undefined): string | null;
78
+ /** The rule for what came from the base folder, for an agent that changes the code: it stays, used where it is. */
79
+ export declare const BASE_FOLDER_RULES: string[];
69
80
  export interface SpecDiffPromptInput {
70
81
  moduleName: string;
71
82
  /** The spec change, as a diff of the .plain files. */
@@ -74,6 +85,8 @@ export interface SpecDiffPromptInput {
74
85
  changes?: SpecChange[];
75
86
  /** The module's sections and its functional specs, as they stand after the change. */
76
87
  specifications: Specifications;
88
+ /** The func-ids of its functional specs, in order. */
89
+ funcIds: string[];
77
90
  /** Functional specs of the modules this one requires, as they stand after the change. */
78
91
  required: RequiredSpec[];
79
92
  linkedResources: LoadedResource[];
@@ -84,6 +97,11 @@ export interface SpecDiffPromptInput {
84
97
  cases?: JobCases;
85
98
  /** The module each definition and req belongs to: see `sectionModules`. */
86
99
  modules?: SectionModules;
100
+ /** The base folder the codebase started from, and the files from it it has still (base-folder.ts). */
101
+ base?: {
102
+ folder: string;
103
+ files: string[];
104
+ };
87
105
  }
88
106
  /**
89
107
  * The specification a review of some work is given: laid out exactly as the coding agent had it - how to read a
@@ -94,19 +112,32 @@ export interface SpecDiffPromptInput {
94
112
  export declare function reviewedSpec(input: {
95
113
  moduleName: string;
96
114
  specifications: Specifications;
115
+ /** The func-ids of its functional specs, in order. */
116
+ funcIds: string[];
97
117
  /** Functional specs of the modules this one requires: already in the code. */
98
118
  required?: RequiredSpec[];
99
119
  /** The change, section by section. */
100
120
  change?: string;
101
121
  /** The module each definition and req belongs to: see `sectionModules`. */
102
122
  modules?: SectionModules;
123
+ /** The base folder the codebase started from, and the files from it it has still (base-folder.ts). */
124
+ base?: {
125
+ folder: string;
126
+ files: string[];
127
+ };
103
128
  }): string;
129
+ /**
130
+ * A raw diff of the .plain files without the hunks of test plain files: a coding agent never sees scenarios, which are
131
+ * the conformance tests'. A test plain file is told by its own frontmatter - `func_id:` - since its folder is the
132
+ * project's to name.
133
+ */
134
+ export declare function withoutTestPlainFiles(diff: string): string;
104
135
  /** A change in its tag: told section by section, or - when it could not be - the raw diff, with which tag each heading is. */
105
- export declare function specChangeBlock(change: string): string;
136
+ export declare function specChangeBlock(change: string, scenarios?: boolean): string;
106
137
  /**
107
138
  * A spec change as an agent reads it: section by section, what was added, what changed - before and now - and what
108
139
  * was removed. A definition taken out and put back reworded, or moved, is one change to it, not two. Every item is
109
- * named so no other module's can be meant: a functional spec by its module and number, and a definition or req of a
140
+ * named so no other module's can be meant: a functional spec by its module and func-id, and a definition or req of a
110
141
  * module below by its module; `moduleName` is the module whose codebase it is - whose own items carry no module.
111
142
  */
112
143
  export declare function describeSpecChange(changes: SpecChange[], moduleName?: string): string;
@@ -122,9 +153,11 @@ export interface ConformancePromptInput {
122
153
  /** What the job does to each functional spec (work.ts): the agent is told case by case. Not given: in general. */
123
154
  cases?: JobCases;
124
155
  moduleName: string;
125
- /** The functionality under test; for a spec change, the last there is - none before the first is written. */
126
- frid?: string;
156
+ /** The functional spec under test, by its func-id; for a spec change, the last there is - none before the first is written. */
157
+ funcId?: string;
127
158
  specifications: Specifications;
159
+ /** The func-ids of its functional specs, in order. */
160
+ funcIds: string[];
128
161
  linkedResources: LoadedResource[];
129
162
  /** File names in the build directory. */
130
163
  manifest: string[];
@@ -143,11 +176,8 @@ export interface ConformancePromptInput {
143
176
  path: string;
144
177
  content: string;
145
178
  }>;
146
- /** For a spec change: the functionalities it touches, with their acceptance tests - each implemented and labelled. */
147
- touched?: Array<{
148
- frid: string;
149
- acceptanceTests: string[];
150
- }>;
179
+ /** For a spec change: the functional specs it touches, with their scenarios - each carried out and labelled. */
180
+ touched?: TestedSpec[];
151
181
  /** Tests already in the conformance directory, from an earlier version of the spec. */
152
182
  existingTests?: string[];
153
183
  /** Functional specs of the modules this one requires, transitively. */
@@ -169,18 +199,26 @@ export interface ConformancePromptInput {
169
199
  * written from the code can only ever agree with it.
170
200
  */
171
201
  export declare function buildConformancePrompt(input: ConformancePromptInput): string;
172
- /** What a conformance test covering no functional spec yet - a definition, a req - is labelled. */
173
- export declare const CHANGE_LABEL = "conformance tests of the spec";
202
+ /**
203
+ * Functional specs' scenarios as the conformance agent carries them out: each under its label, the conformance
204
+ * scenarios and then the acceptance ones, in the tag of each kind.
205
+ */
206
+ export declare function scenariosBlock(module: string, specs: TestedSpec[]): string | null;
174
207
  export interface RegressionFixPromptInput {
175
208
  moduleName: string;
176
- /** Functionalities built so far, in order. */
177
- frids: string[];
209
+ /** The func-ids of the functional specs built so far, in order. */
210
+ funcIds: string[];
178
211
  specifications: Specifications;
179
212
  failure: string;
180
213
  /** Functional specs of the modules this one requires, transitively. */
181
214
  required?: RequiredSpec[];
182
215
  /** The module each definition and req belongs to: see `sectionModules`. */
183
216
  modules?: SectionModules;
217
+ /** The base folder the codebase started from, and the files from it it has still (base-folder.ts). */
218
+ base?: {
219
+ folder: string;
220
+ files: string[];
221
+ };
184
222
  }
185
223
  /**
186
224
  * Build the prompt for repairing a regression.