Skip to content

Commit 5a4b611

Browse files
Introduce modules, new TUI and billing checks
1 parent d6bdfd4 commit 5a4b611

File tree

67 files changed

+4302
-622
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+4302
-622
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,11 @@ examples/**/node_harness_tests/
1414
examples/**/go_build/
1515
examples/**/python_build/
1616

17+
test_harness/**/go_plain_modules/
18+
test_harness/**/python_plain_modules/
19+
test_harness/**/node_plain_modules/
20+
21+
22+
*.log
23+
1724
.venv

codeplain_REST_api.py

Lines changed: 61 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -93,53 +93,39 @@ def post_request(self, endpoint_url, headers, payload, run_state: Optional[RunSt
9393
f"Connection error: Unable to reach the Codeplain API at {self.api_url}. Please try again or contact support."
9494
)
9595

96-
def get_plain_source_tree(self, plain_source, loaded_templates, run_state: RunState):
97-
"""
98-
Builds plain source tree from the given plain text source in Markdown format.
99-
100-
Args:
101-
plain_source (str): A string containing the plain text source to be parsed.
102-
loaded_templates (dict): A dictionary containing the loaded templates.
103-
104-
Returns:
105-
dict: A plain source tree.
106-
107-
Raises:
108-
Exception: If parsing of plain_source fails.
109-
"""
110-
endpoint_url = f"{self.api_url}/plain_source_tree"
111-
headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}
112-
113-
payload = {"plain_source": plain_source, "loaded_templates": loaded_templates}
114-
115-
return self.post_request(endpoint_url, headers, payload, run_state)
116-
11796
def render_functional_requirement(
11897
self,
119-
frid,
120-
plain_source_tree,
121-
linked_resources,
122-
existing_files_content,
98+
frid: str,
99+
plain_source_tree: dict,
100+
linked_resources: dict,
101+
existing_files_content: dict,
102+
module_name: str,
103+
required_modules: dict,
123104
run_state: RunState,
124-
):
105+
) -> dict[str, str]:
125106
"""
126107
Renders the content of a functional requirement based on the provided ID,
127-
plain source tree, and existing files' content.
108+
corresponding sections from a Plain document, and existing files' content.
128109
129110
Args:
130111
frid (str): The unique identifier for the functional requirement to be rendered.
131112
plain_source_tree (dict): A dictionary containing the plain source tree.
132-
linked_resources (dict): A dictionary where the keys represent resource names
133-
and the values are the content of those resources.
134-
existing_files_content (dict): A dictionary where the keys represent code base
135-
filenames and the values are the content of those files.
136-
113+
linked_resources (dict): A dictionary where the keys represent filenames of linked
114+
resources and the values are dictionaries containing
115+
the content of the linked resources and the sections
116+
they are linked to.
117+
existing_files_content (dict): A dictionary where the keys represent filenames
118+
and the values are the content of those files.
119+
module_name (str): The name of the module to render the functional requirement for.
120+
required_modules (dict): A dictionary where the keys represent module names
121+
and the values are lists of functionalities implemented in those modules.
122+
run_state (RunState): The current state of the rendering process.
137123
Returns:
138-
str: A string containing the rendered functional requirement, formatted
139-
appropriately based on the inputs.
124+
dict[str, str]: A dictionary where the keys are filenames and the values
125+
are the rendered code for those files.
140126
141127
Raises:
142-
ValueError: If the frid is invalid or the necessary plain source tree is not valid.
128+
ValueError: If the frid is invalid or the necessary sections cannot be found.
143129
"""
144130
endpoint_url = f"{self.api_url}/render_functional_requirement"
145131
headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}
@@ -149,6 +135,8 @@ def render_functional_requirement(
149135
"plain_source_tree": plain_source_tree,
150136
"linked_resources": linked_resources,
151137
"existing_files_content": existing_files_content,
138+
"module_name": module_name,
139+
"required_modules": required_modules,
152140
}
153141

154142
return self.post_request(endpoint_url, headers, payload, run_state)
@@ -159,6 +147,8 @@ def fix_unittests_issue(
159147
plain_source_tree,
160148
linked_resources,
161149
existing_files_content,
150+
module_name: str,
151+
required_modules,
162152
unittests_issue,
163153
run_state: RunState,
164154
):
@@ -170,6 +160,8 @@ def fix_unittests_issue(
170160
"plain_source_tree": plain_source_tree,
171161
"linked_resources": linked_resources,
172162
"existing_files_content": existing_files_content,
163+
"module_name": module_name,
164+
"required_modules": required_modules,
173165
"unittests_issue": unittests_issue,
174166
"unittest_batch_id": run_state.unittest_batch_id,
175167
}
@@ -195,6 +187,8 @@ def render_conformance_tests(
195187
plain_source_tree,
196188
linked_resources,
197189
existing_files_content,
190+
module_name: str,
191+
required_modules,
198192
conformance_tests_folder_name,
199193
conformance_tests_json,
200194
all_acceptance_tests,
@@ -209,6 +203,8 @@ def render_conformance_tests(
209203
"plain_source_tree": plain_source_tree,
210204
"linked_resources": linked_resources,
211205
"existing_files_content": existing_files_content,
206+
"module_name": module_name,
207+
"required_modules": required_modules,
212208
"conformance_tests_folder_name": conformance_tests_folder_name,
213209
"conformance_tests_json": conformance_tests_json,
214210
"all_acceptance_tests": all_acceptance_tests,
@@ -242,6 +238,9 @@ def fix_conformance_tests_issue(
242238
plain_source_tree,
243239
linked_resources,
244240
existing_files_content,
241+
module_name: str,
242+
conformance_tests_module_name: str,
243+
required_modules,
245244
code_diff,
246245
conformance_tests_files,
247246
acceptance_tests,
@@ -260,6 +259,9 @@ def fix_conformance_tests_issue(
260259
"plain_source_tree": plain_source_tree,
261260
"linked_resources": linked_resources,
262261
"existing_files_content": existing_files_content,
262+
"module_name": module_name,
263+
"conformance_tests_module_name": conformance_tests_module_name,
264+
"required_modules": required_modules,
263265
"code_diff": code_diff,
264266
"conformance_tests_files": conformance_tests_files,
265267
"conformance_tests_issue": conformance_tests_issue,
@@ -280,6 +282,8 @@ def render_acceptance_tests(
280282
linked_resources,
281283
existing_files_content,
282284
conformance_tests_files,
285+
module_name: str,
286+
required_modules,
283287
acceptance_test,
284288
run_state: RunState,
285289
):
@@ -294,6 +298,8 @@ def render_acceptance_tests(
294298
existing_files_content (dict): A dictionary where the keys represent code base
295299
filenames and the values are the content of those files.
296300
conformance_tests_files (dict): A dictionary containing conformance test files.
301+
required_modules (dict): A dictionary where the keys represent module names
302+
and the values are lists of functionalities implemented in those modules.
297303
acceptance_test (dict): A dictionary containing acceptance test information.
298304
299305
Returns:
@@ -311,6 +317,8 @@ def render_acceptance_tests(
311317
"linked_resources": linked_resources,
312318
"existing_files_content": existing_files_content,
313319
"conformance_tests_files": conformance_tests_files,
320+
"module_name": module_name,
321+
"required_modules": required_modules,
314322
"acceptance_test": acceptance_test,
315323
}
316324

@@ -322,6 +330,8 @@ def analyze_rendering(
322330
plain_source_tree,
323331
linked_resources,
324332
existing_files_content,
333+
module_name: str,
334+
required_modules,
325335
implementation_code_diff,
326336
fixed_implementation_code_diff,
327337
run_state: RunState,
@@ -334,6 +344,8 @@ def analyze_rendering(
334344
"plain_source_tree": plain_source_tree,
335345
"linked_resources": linked_resources,
336346
"existing_files_content": existing_files_content,
347+
"module_name": module_name,
348+
"required_modules": required_modules,
337349
"implementation_code_diff": implementation_code_diff,
338350
"fixed_implementation_code_diff": fixed_implementation_code_diff,
339351
}
@@ -350,12 +362,24 @@ def finish_functional_requirement(self, frid, run_state: RunState):
350362

351363
return self.post_request(endpoint_url, headers, payload, run_state)
352364

365+
def fail_functional_requirement(self, frid, run_state: RunState):
366+
endpoint_url = f"{self.api_url}/fail_functional_requirement"
367+
headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}
368+
369+
payload = {
370+
"frid": frid,
371+
}
372+
373+
return self.post_request(endpoint_url, headers, payload, run_state)
374+
353375
def summarize_finished_conformance_tests(
354376
self,
355377
frid,
356378
plain_source_tree,
357379
linked_resources,
358380
conformance_test_files_content,
381+
module_name: str,
382+
required_modules,
359383
run_state: RunState,
360384
):
361385
endpoint_url = f"{self.api_url}/summarize_finished_conformance_tests"
@@ -365,6 +389,8 @@ def summarize_finished_conformance_tests(
365389
"plain_source_tree": plain_source_tree,
366390
"linked_resources": linked_resources,
367391
"conformance_test_files_content": conformance_test_files_content,
392+
"module_name": module_name,
393+
"required_modules": required_modules,
368394
}
369395

370396
return self.post_request(endpoint_url, headers, payload, run_state)

0 commit comments

Comments
 (0)