codeplain 0.3.5__tar.gz → 0.3.6__tar.gz

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 (244) hide show
  1. codeplain-0.3.6/PKG-INFO +144 -0
  2. codeplain-0.3.6/README.md +114 -0
  3. codeplain-0.3.6/_version.py +1 -0
  4. {codeplain-0.3.5 → codeplain-0.3.6}/install/bash/examples.sh +23 -12
  5. codeplain-0.3.6/install/bash/install.sh +445 -0
  6. {codeplain-0.3.5 → codeplain-0.3.6}/install/bash/walkthrough.sh +62 -69
  7. {codeplain-0.3.5 → codeplain-0.3.6}/install/powershell/examples.ps1 +24 -14
  8. codeplain-0.3.6/install/powershell/install.ps1 +480 -0
  9. {codeplain-0.3.5 → codeplain-0.3.6}/install/powershell/walkthrough.ps1 +58 -70
  10. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code.py +6 -1
  11. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_exceptions.py +17 -0
  12. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_logger.py +7 -0
  13. {codeplain-0.3.5 → codeplain-0.3.6}/plain_file.py +63 -14
  14. {codeplain-0.3.5 → codeplain-0.3.6}/pyproject.toml +1 -1
  15. codeplain-0.3.6/tests/data/imports/import_with_functionalities.plain +7 -0
  16. codeplain-0.3.6/tests/data/imports/imports_module_with_functionalities.plain +12 -0
  17. codeplain-0.3.6/tests/data/plainfile/empty_functional_specs_section.plain +4 -0
  18. codeplain-0.3.6/tests/data/plainfile/no_functional_specs_section.plain +5 -0
  19. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_imports.py +11 -0
  20. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_plainfileparser.py +41 -3
  21. codeplain-0.3.5/.claude/settings.local.json +0 -10
  22. codeplain-0.3.5/PKG-INFO +0 -149
  23. codeplain-0.3.5/README.md +0 -119
  24. codeplain-0.3.5/_version.py +0 -1
  25. codeplain-0.3.5/install/bash/install.sh +0 -266
  26. codeplain-0.3.5/install/powershell/install.ps1 +0 -294
  27. {codeplain-0.3.5 → codeplain-0.3.6}/.claude/settings.json +0 -0
  28. {codeplain-0.3.5 → codeplain-0.3.6}/.flake8 +0 -0
  29. {codeplain-0.3.5 → codeplain-0.3.6}/.github/dependabot.yml +0 -0
  30. {codeplain-0.3.5 → codeplain-0.3.6}/.github/workflows/e2e.yml +0 -0
  31. {codeplain-0.3.5 → codeplain-0.3.6}/.github/workflows/lint-and-test.yml +0 -0
  32. {codeplain-0.3.5 → codeplain-0.3.6}/.github/workflows/nofity-slack-on-main-merge.yml +0 -0
  33. {codeplain-0.3.5 → codeplain-0.3.6}/.github/workflows/publish-install-script.yml +0 -0
  34. {codeplain-0.3.5 → codeplain-0.3.6}/.github/workflows/publish-to-pypi.yml +0 -0
  35. {codeplain-0.3.5 → codeplain-0.3.6}/.gitignore +0 -0
  36. {codeplain-0.3.5 → codeplain-0.3.6}/.vscode/launch.json +0 -0
  37. {codeplain-0.3.5 → codeplain-0.3.6}/.vscode/settings.json +0 -0
  38. {codeplain-0.3.5 → codeplain-0.3.6}/CLAUDE.md +0 -0
  39. {codeplain-0.3.5 → codeplain-0.3.6}/LICENSE +0 -0
  40. {codeplain-0.3.5 → codeplain-0.3.6}/change_detection.py +0 -0
  41. {codeplain-0.3.5 → codeplain-0.3.6}/cli_output/__init__.py +0 -0
  42. {codeplain-0.3.5 → codeplain-0.3.6}/cli_output/dry_run.py +0 -0
  43. {codeplain-0.3.5 → codeplain-0.3.6}/cli_output/render_summary.py +0 -0
  44. {codeplain-0.3.5 → codeplain-0.3.6}/cli_output/status.py +0 -0
  45. {codeplain-0.3.5 → codeplain-0.3.6}/codeplain_REST_api.py +0 -0
  46. {codeplain-0.3.5 → codeplain-0.3.6}/concept_utils.py +0 -0
  47. {codeplain-0.3.5 → codeplain-0.3.6}/config/__init__.py +0 -0
  48. {codeplain-0.3.5 → codeplain-0.3.6}/config/system_config.yaml +0 -0
  49. {codeplain-0.3.5 → codeplain-0.3.6}/diff_utils.py +0 -0
  50. {codeplain-0.3.5 → codeplain-0.3.6}/docs/generate_cli.py +0 -0
  51. {codeplain-0.3.5 → codeplain-0.3.6}/docs/plain2code_cli.md +0 -0
  52. {codeplain-0.3.5 → codeplain-0.3.6}/docs/starting_a_plain_project_from_scratch.md +0 -0
  53. {codeplain-0.3.5 → codeplain-0.3.6}/event_bus.py +0 -0
  54. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_golang/config.yaml +0 -0
  55. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_golang/harness_tests/hello_world_test.go +0 -0
  56. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_golang/hello_world_golang.plain +0 -0
  57. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_golang/run.sh +0 -0
  58. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_python/config.yaml +0 -0
  59. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_python/harness_tests/hello_world_display/test_hello_world.py +0 -0
  60. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_python/hello_world_python.plain +0 -0
  61. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_python/run.sh +0 -0
  62. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/config.yaml +0 -0
  63. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/harness_tests/hello_world_display/cypress/e2e/hello_world.cy.ts +0 -0
  64. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/harness_tests/hello_world_display/cypress/support/e2e.ts +0 -0
  65. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/harness_tests/hello_world_display/cypress.config.ts +0 -0
  66. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/harness_tests/hello_world_display/package.json +0 -0
  67. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/harness_tests/hello_world_display/tsconfig.json +0 -0
  68. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/hello_world_react.plain +0 -0
  69. {codeplain-0.3.5 → codeplain-0.3.6}/examples/example_hello_world_react/run.sh +0 -0
  70. {codeplain-0.3.5 → codeplain-0.3.6}/examples/run.sh +0 -0
  71. {codeplain-0.3.5 → codeplain-0.3.6}/file_utils.py +0 -0
  72. {codeplain-0.3.5 → codeplain-0.3.6}/git_utils.py +0 -0
  73. {codeplain-0.3.5 → codeplain-0.3.6}/memory_management.py +0 -0
  74. {codeplain-0.3.5 → codeplain-0.3.6}/module_renderer.py +0 -0
  75. {codeplain-0.3.5 → codeplain-0.3.6}/partial_rendering.py +0 -0
  76. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_arguments.py +0 -0
  77. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_console.py +0 -0
  78. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_events.py +0 -0
  79. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_nodes.py +0 -0
  80. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_read_config.py +0 -0
  81. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_state.py +0 -0
  82. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_telemetry.py +0 -0
  83. {codeplain-0.3.5 → codeplain-0.3.6}/plain2code_utils.py +0 -0
  84. {codeplain-0.3.5 → codeplain-0.3.6}/plain_modules.py +0 -0
  85. {codeplain-0.3.5 → codeplain-0.3.6}/plain_spec.py +0 -0
  86. {codeplain-0.3.5 → codeplain-0.3.6}/pytest.ini +0 -0
  87. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/__init__.py +0 -0
  88. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/analyze_specification_ambiguity.py +0 -0
  89. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/base_action.py +0 -0
  90. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/commit_conformance_tests_changes.py +0 -0
  91. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/commit_implementation_code_changes.py +0 -0
  92. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/create_dist.py +0 -0
  93. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/exit_with_error.py +0 -0
  94. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/finish_functional_requirement.py +0 -0
  95. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/fix_conformance_test.py +0 -0
  96. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/fix_unit_tests.py +0 -0
  97. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/prepare_repositories.py +0 -0
  98. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/prepare_testing_environment.py +0 -0
  99. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/refactor_code.py +0 -0
  100. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/render_conformance_tests.py +0 -0
  101. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/render_functional_requirement.py +0 -0
  102. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/run_conformance_tests.py +0 -0
  103. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/run_unit_tests.py +0 -0
  104. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/actions/summarize_conformance_tests.py +0 -0
  105. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/code_renderer.py +0 -0
  106. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/conformance_tests.py +0 -0
  107. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/implementation_code_helpers.py +0 -0
  108. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/render_context.py +0 -0
  109. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/render_types.py +0 -0
  110. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/render_utils.py +0 -0
  111. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/state_machine_config.py +0 -0
  112. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/states.py +0 -0
  113. {codeplain-0.3.5 → codeplain-0.3.6}/render_machine/triggers.py +0 -0
  114. {codeplain-0.3.5 → codeplain-0.3.6}/requirements.txt +0 -0
  115. {codeplain-0.3.5 → codeplain-0.3.6}/resources/codeplain_overview.png +0 -0
  116. {codeplain-0.3.5 → codeplain-0.3.6}/resources/plain_example.png +0 -0
  117. {codeplain-0.3.5 → codeplain-0.3.6}/standard_template_library/golang-console-app-template.plain +0 -0
  118. {codeplain-0.3.5 → codeplain-0.3.6}/standard_template_library/python-console-app-template.plain +0 -0
  119. {codeplain-0.3.5 → codeplain-0.3.6}/standard_template_library/typescript-react-app-boilerplate.plain +0 -0
  120. {codeplain-0.3.5 → codeplain-0.3.6}/standard_template_library/typescript-react-app-template.plain +0 -0
  121. {codeplain-0.3.5 → codeplain-0.3.6}/system_config.py +0 -0
  122. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_conformance_tests_cypress.ps1 +0 -0
  123. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_conformance_tests_cypress.sh +0 -0
  124. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_conformance_tests_golang.ps1 +0 -0
  125. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_conformance_tests_golang.sh +0 -0
  126. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_conformance_tests_python.ps1 +0 -0
  127. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_conformance_tests_python.sh +0 -0
  128. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_unittests_flutter.ps1 +0 -0
  129. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_unittests_golang.ps1 +0 -0
  130. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_unittests_golang.sh +0 -0
  131. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_unittests_python.ps1 +0 -0
  132. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_unittests_python.sh +0 -0
  133. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_unittests_react.ps1 +0 -0
  134. {codeplain-0.3.5 → codeplain-0.3.6}/test_scripts/run_unittests_react.sh +0 -0
  135. {codeplain-0.3.5 → codeplain-0.3.6}/tests/__init__.py +0 -0
  136. {codeplain-0.3.5 → codeplain-0.3.6}/tests/conftest.py +0 -0
  137. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/acceptance_tests_warning/main_requiring_acceptance_tests.plain +0 -0
  138. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/acceptance_tests_warning/required_with_acceptance_tests.plain +0 -0
  139. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/circular_imports_1.plain +0 -0
  140. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/circular_imports_2.plain +0 -0
  141. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/circular_imports_main.plain +0 -0
  142. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/diamond_import_1.plain +0 -0
  143. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/diamond_import_2.plain +0 -0
  144. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/diamond_import_common.plain +0 -0
  145. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/diamond_imports_main.plain +0 -0
  146. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/imports/non_existent_import.plain +0 -0
  147. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/partial_rendering/pr_code_var.plain +0 -0
  148. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/partial_rendering/pr_implement.plain +0 -0
  149. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/partial_rendering/pr_leaf.plain +0 -0
  150. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/partial_rendering/pr_middle.plain +0 -0
  151. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/partial_rendering/pr_root.plain +0 -0
  152. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/partial_rendering/pr_solo.plain +0 -0
  153. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/add_new_task_modal_specification.yaml +0 -0
  154. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/duplicate_specification_heading.plain +0 -0
  155. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/invalid_specification_order.plain +0 -0
  156. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/missing_non_functional_requirements.plain +0 -0
  157. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/plain_source_with_absolute_link.plain +0 -0
  158. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/plain_source_with_url_link.plain +0 -0
  159. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/task_list_ui_specification.yaml +0 -0
  160. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/task_manager_with_reference_links.plain +0 -0
  161. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfile/without_non_functional_requirement.plain +0 -0
  162. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_acceptance_tests.plain +0 -0
  163. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_acceptance_tests_nondefined.plain +0 -0
  164. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_defined_nondefined.plain +0 -0
  165. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_defined_nondefined_2.plain +0 -0
  166. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_definition.plain +0 -0
  167. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_noconcepts.plain +0 -0
  168. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_nonconcept.plain +0 -0
  169. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_nondefined.plain +0 -0
  170. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_redefinition.plain +0 -0
  171. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_several_concepts.plain +0 -0
  172. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/concept_validation_valid.plain +0 -0
  173. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts.plain +0 -0
  174. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_base.plain +0 -0
  175. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_example.plain +0 -0
  176. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_missing.plain +0 -0
  177. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_missing_example.plain +0 -0
  178. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_nested.plain +0 -0
  179. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_nested_example.plain +0 -0
  180. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_transitive_example.plain +0 -0
  181. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_transitive_l1.plain +0 -0
  182. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/exported_concepts_transitive_l2.plain +0 -0
  183. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/plain_file_parser_with_comments.plain +0 -0
  184. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/plain_file_with_comments_indented.plain +0 -0
  185. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/regular_plain_source.plain +0 -0
  186. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts.plain +0 -0
  187. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_defs.plain +0 -0
  188. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_example.plain +0 -0
  189. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_l1.plain +0 -0
  190. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_l2.plain +0 -0
  191. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_missing.plain +0 -0
  192. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_module.plain +0 -0
  193. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_partial.plain +0 -0
  194. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/required_concepts_partial_duplicate.plain +0 -0
  195. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/topological_sort.plain +0 -0
  196. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/plainfileparser/topological_sort_not_referenced.plain +0 -0
  197. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/circular_requires_main.plain +0 -0
  198. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/circular_requires_sub.plain +0 -0
  199. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/diamond_requires_1.plain +0 -0
  200. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/diamond_requires_2.plain +0 -0
  201. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/diamond_requires_common.plain +0 -0
  202. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/diamond_requires_main.plain +0 -0
  203. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/independent_requires_1.plain +0 -0
  204. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/independent_requires_2.plain +0 -0
  205. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/independent_requires_main.plain +0 -0
  206. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/non_existent_require.plain +0 -0
  207. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/normal_requires_1.plain +0 -0
  208. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/normal_requires_2.plain +0 -0
  209. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/normal_requires_common.plain +0 -0
  210. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/requires/normal_requires_main.plain +0 -0
  211. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/sample_base64_image.txt +0 -0
  212. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/simple.plain +0 -0
  213. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/templates/block_level_include.plain +0 -0
  214. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/templates/code_variables.plain +0 -0
  215. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/templates/header.plain +0 -0
  216. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/templates/implement.plain +0 -0
  217. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/templates/implement_2.plain +0 -0
  218. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/templates/template_include.plain +0 -0
  219. {codeplain-0.3.5 → codeplain-0.3.6}/tests/data/templates/test_hardest_problem.plain +0 -0
  220. {codeplain-0.3.5 → codeplain-0.3.6}/tests/e2e/Dockerfile +0 -0
  221. {codeplain-0.3.5 → codeplain-0.3.6}/tests/e2e/conftest.py +0 -0
  222. {codeplain-0.3.5 → codeplain-0.3.6}/tests/e2e/test_hello_world_python.py +0 -0
  223. {codeplain-0.3.5 → codeplain-0.3.6}/tests/e2e/test_hello_world_python_windows.py +0 -0
  224. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_change_detection.py +0 -0
  225. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_cli_output.py +0 -0
  226. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_file_utils.py +0 -0
  227. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_git_utils.py +0 -0
  228. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_partial_rendering.py +0 -0
  229. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_plain2code.py +0 -0
  230. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_plain_modules.py +0 -0
  231. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_plainfile.py +0 -0
  232. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_plainspec.py +0 -0
  233. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_requires.py +0 -0
  234. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_resolve_config_file.py +0 -0
  235. {codeplain-0.3.5 → codeplain-0.3.6}/tests/test_telemetry.py +0 -0
  236. {codeplain-0.3.5 → codeplain-0.3.6}/tui/__init__.py +0 -0
  237. {codeplain-0.3.5 → codeplain-0.3.6}/tui/components.py +0 -0
  238. {codeplain-0.3.5 → codeplain-0.3.6}/tui/models.py +0 -0
  239. {codeplain-0.3.5 → codeplain-0.3.6}/tui/plain2code_tui.py +0 -0
  240. {codeplain-0.3.5 → codeplain-0.3.6}/tui/plain_module_render_choice_tui.py +0 -0
  241. {codeplain-0.3.5 → codeplain-0.3.6}/tui/spinner.py +0 -0
  242. {codeplain-0.3.5 → codeplain-0.3.6}/tui/state_handlers.py +0 -0
  243. {codeplain-0.3.5 → codeplain-0.3.6}/tui/styles.css +0 -0
  244. {codeplain-0.3.5 → codeplain-0.3.6}/tui/widget_helpers.py +0 -0
@@ -0,0 +1,144 @@
1
+ Metadata-Version: 2.4
2
+ Name: codeplain
3
+ Version: 0.3.6
4
+ Summary: Transform plain language specifications into working code
5
+ License-File: LICENSE
6
+ Classifier: Environment :: Console
7
+ Classifier: Intended Audience :: Developers
8
+ Classifier: Operating System :: OS Independent
9
+ Classifier: Topic :: Software Development :: Code Generators
10
+ Requires-Python: ==3.11.*
11
+ Requires-Dist: gitpython==3.1.50
12
+ Requires-Dist: mistletoe==1.3.0
13
+ Requires-Dist: networkx==3.6.1
14
+ Requires-Dist: python-frontmatter==1.3.0
15
+ Requires-Dist: python-liquid2==0.4.0
16
+ Requires-Dist: pyyaml==6.0.3
17
+ Requires-Dist: requests==2.34.2
18
+ Requires-Dist: rich==15.0.0
19
+ Requires-Dist: sentry-sdk==2.63.0
20
+ Requires-Dist: textual>=7.5.0
21
+ Requires-Dist: tiktoken==0.13.0
22
+ Requires-Dist: transitions==0.9.3
23
+ Provides-Extra: dev
24
+ Requires-Dist: black==26.3.1; extra == 'dev'
25
+ Requires-Dist: flake8==7.3.0; extra == 'dev'
26
+ Requires-Dist: isort==5.13.2; extra == 'dev'
27
+ Requires-Dist: mypy==2.1.0; extra == 'dev'
28
+ Requires-Dist: pytest==9.1.1; extra == 'dev'
29
+ Description-Content-Type: text/markdown
30
+
31
+ # *codeplain renderer
32
+
33
+ ## What is \*codeplain?
34
+
35
+ \*codeplain platform makes coding agents better by having them write and maintain specifications instead of code. It extends coding agents with agentic skills for working at the specification layer, and with tools that convert specifications into tested and validated implementation code.
36
+
37
+ This repository is the renderer that powers that last step, turning \*\*\*plain specs into software using the *codeplain API.
38
+
39
+ The result is a software development workflow centered on specifications, which are faster and more efficient for AI to produce and easier for developers to review and maintain than raw code.
40
+
41
+ Schematic overview of the *codeplain's code rendering:
42
+
43
+ <img src="https://raw.githubusercontent.com/Codeplain-ai/plain2code_client/main/resources/codeplain_overview.png">
44
+
45
+ ## Getting started
46
+
47
+ Get started in 15 minutes.
48
+
49
+ ### 1. Install \*codeplain in the terminal
50
+
51
+ macOS and Linux:
52
+
53
+ ```bash
54
+ curl -fsSL https://codeplain.ai/install.sh | bash
55
+ ```
56
+
57
+ Windows PowerShell:
58
+
59
+ ```powershell
60
+ irm https://codeplain.ai/install.ps1 | iex
61
+ ```
62
+
63
+ **Windows users:** Please install WSL (Windows Subsystem for Linux) as this is currently the supported environment for running plain code on Windows.
64
+
65
+ Follow the installation instructions to complete setup. The installer installs the `codeplain` CLI, walks you through setting your `CODEPLAIN_API_KEY`, and offers to set up [plain-forge](#2-let-your-agent-work-in-specs-not-code) and the [plyn editor extension](#vs-code--cursor-extension) for you in the same session.
66
+
67
+ If you'd rather not run the installer, sign up at [platform.codeplain.ai](https://platform.codeplain.ai) to get your API key and export it yourself:
68
+
69
+ ```bash
70
+ export CODEPLAIN_API_KEY="your_actual_api_key_here"
71
+ ```
72
+
73
+ ### 2. Let your agent work in specs, not code
74
+
75
+ You describe what you want in plain English, an agent helps you write a spec in \*\*\*plain language, and \*codeplain renders the actual code. This is what [plain-forge](https://github.com/Codeplain-ai/plain-forge) sets up: a toolkit of skills, rules, and docs that plugs into your AI coding agent of choice — Claude Code, Codex, ForgeCode, OpenCode, or any other agent that reads from a standard skills directory — and turns a conversation into a complete `.plain` spec, then keeps maintaining it across the lifetime of the project.
76
+
77
+ If you didn't install it during step 1, run it any time:
78
+
79
+ ```bash
80
+ npx plain-forge install
81
+ ```
82
+
83
+ ### 3. Convert specs into tested and validated code
84
+
85
+ \*codeplain extends coding agents with agentic skills for working at the specification layer, and with tools that convert specifications into tested and validated implementation code.
86
+
87
+ ```bash
88
+ codeplain your-project.plain
89
+ ```
90
+
91
+ ### Try it now
92
+
93
+ You can immediately test the system with a simple "Hello World" example:
94
+
95
+ - Change to the example folder and run the example:
96
+
97
+ ```bash
98
+ cd examples/example_hello_world_python
99
+ codeplain hello_world_python.plain
100
+ ```
101
+
102
+ _Note: Rendering will take a few minutes to complete._
103
+
104
+ - The system will generate a Python application in the `build` directory. You can run it with:
105
+ ```bash
106
+ cd build
107
+ python hello_world.py
108
+ ```
109
+
110
+ ### VS Code / Cursor extension
111
+
112
+ If you're using Visual Studio Code or Cursor IDE, we also recommend installing the [plyn extension](https://marketplace.visualstudio.com/items?itemName=Codeplain.plyn) for `***plain` syntax highlighting. The installer in step 1 offers to install it automatically if it detects `code` or `cursor` on your `PATH`.
113
+
114
+ ### Community and support
115
+
116
+ Share what you're building! Join the [\*codeplain Discord](https://discord.gg/cgbynb9hFq) if you have questions, ideas, or want to share what you built.
117
+
118
+ Hit an edge case or have feedback? Reach us at [support@codeplain.ai](mailto:support@codeplain.ai).
119
+
120
+ ## Abstracting Away Code Generation Complexity with \*\*\*plain
121
+
122
+ \*\*\*plain is the language of spec-driven development — a specification language that combines the efficiency of natural language with the control and precision of code.
123
+
124
+ Structured sections for definitions, functional specs, implementation requirements, test requirements, and acceptance tests let your specs (not scattered docs or ad hoc prompts) become the source of truth for your software's behavior, abstracting away the complexity of using large language models for code generation.
125
+
126
+ Specs are plain text, so they fit into the workflows you already use — version control, pull requests, and code review.
127
+
128
+ See the [\*\*\*plain language guide](https://www.plainlang.org/docs/language-guide/) to learn the full syntax.
129
+
130
+ An example application in \*\*\*plain
131
+
132
+ <img src="resources/plain_example.png" width="70%" height="70%">
133
+
134
+ ## Additional Resources
135
+
136
+ ### Examples and Sample Projects
137
+
138
+ - See the [examples](examples) folder for sample projects in Golang, Python, React, and Flutter.
139
+ - For an example of how to implement Pong in \*\*\*plain, see the [pong](https://github.com/Codeplain-ai/plainlang-examples/tree/main/pong) example.
140
+ - For an example of how to implement a task manager in \*\*\*plain, see the [task-manager](https://github.com/Codeplain-ai/plainlang-examples/tree/main/task-manager) example.
141
+
142
+ ### Documentation
143
+
144
+ - For more details on the ***plain format, see the [***plain language specification](https://www.plainlang.org/docs/).
@@ -0,0 +1,114 @@
1
+ # *codeplain renderer
2
+
3
+ ## What is \*codeplain?
4
+
5
+ \*codeplain platform makes coding agents better by having them write and maintain specifications instead of code. It extends coding agents with agentic skills for working at the specification layer, and with tools that convert specifications into tested and validated implementation code.
6
+
7
+ This repository is the renderer that powers that last step, turning \*\*\*plain specs into software using the *codeplain API.
8
+
9
+ The result is a software development workflow centered on specifications, which are faster and more efficient for AI to produce and easier for developers to review and maintain than raw code.
10
+
11
+ Schematic overview of the *codeplain's code rendering:
12
+
13
+ <img src="https://raw.githubusercontent.com/Codeplain-ai/plain2code_client/main/resources/codeplain_overview.png">
14
+
15
+ ## Getting started
16
+
17
+ Get started in 15 minutes.
18
+
19
+ ### 1. Install \*codeplain in the terminal
20
+
21
+ macOS and Linux:
22
+
23
+ ```bash
24
+ curl -fsSL https://codeplain.ai/install.sh | bash
25
+ ```
26
+
27
+ Windows PowerShell:
28
+
29
+ ```powershell
30
+ irm https://codeplain.ai/install.ps1 | iex
31
+ ```
32
+
33
+ **Windows users:** Please install WSL (Windows Subsystem for Linux) as this is currently the supported environment for running plain code on Windows.
34
+
35
+ Follow the installation instructions to complete setup. The installer installs the `codeplain` CLI, walks you through setting your `CODEPLAIN_API_KEY`, and offers to set up [plain-forge](#2-let-your-agent-work-in-specs-not-code) and the [plyn editor extension](#vs-code--cursor-extension) for you in the same session.
36
+
37
+ If you'd rather not run the installer, sign up at [platform.codeplain.ai](https://platform.codeplain.ai) to get your API key and export it yourself:
38
+
39
+ ```bash
40
+ export CODEPLAIN_API_KEY="your_actual_api_key_here"
41
+ ```
42
+
43
+ ### 2. Let your agent work in specs, not code
44
+
45
+ You describe what you want in plain English, an agent helps you write a spec in \*\*\*plain language, and \*codeplain renders the actual code. This is what [plain-forge](https://github.com/Codeplain-ai/plain-forge) sets up: a toolkit of skills, rules, and docs that plugs into your AI coding agent of choice — Claude Code, Codex, ForgeCode, OpenCode, or any other agent that reads from a standard skills directory — and turns a conversation into a complete `.plain` spec, then keeps maintaining it across the lifetime of the project.
46
+
47
+ If you didn't install it during step 1, run it any time:
48
+
49
+ ```bash
50
+ npx plain-forge install
51
+ ```
52
+
53
+ ### 3. Convert specs into tested and validated code
54
+
55
+ \*codeplain extends coding agents with agentic skills for working at the specification layer, and with tools that convert specifications into tested and validated implementation code.
56
+
57
+ ```bash
58
+ codeplain your-project.plain
59
+ ```
60
+
61
+ ### Try it now
62
+
63
+ You can immediately test the system with a simple "Hello World" example:
64
+
65
+ - Change to the example folder and run the example:
66
+
67
+ ```bash
68
+ cd examples/example_hello_world_python
69
+ codeplain hello_world_python.plain
70
+ ```
71
+
72
+ _Note: Rendering will take a few minutes to complete._
73
+
74
+ - The system will generate a Python application in the `build` directory. You can run it with:
75
+ ```bash
76
+ cd build
77
+ python hello_world.py
78
+ ```
79
+
80
+ ### VS Code / Cursor extension
81
+
82
+ If you're using Visual Studio Code or Cursor IDE, we also recommend installing the [plyn extension](https://marketplace.visualstudio.com/items?itemName=Codeplain.plyn) for `***plain` syntax highlighting. The installer in step 1 offers to install it automatically if it detects `code` or `cursor` on your `PATH`.
83
+
84
+ ### Community and support
85
+
86
+ Share what you're building! Join the [\*codeplain Discord](https://discord.gg/cgbynb9hFq) if you have questions, ideas, or want to share what you built.
87
+
88
+ Hit an edge case or have feedback? Reach us at [support@codeplain.ai](mailto:support@codeplain.ai).
89
+
90
+ ## Abstracting Away Code Generation Complexity with \*\*\*plain
91
+
92
+ \*\*\*plain is the language of spec-driven development — a specification language that combines the efficiency of natural language with the control and precision of code.
93
+
94
+ Structured sections for definitions, functional specs, implementation requirements, test requirements, and acceptance tests let your specs (not scattered docs or ad hoc prompts) become the source of truth for your software's behavior, abstracting away the complexity of using large language models for code generation.
95
+
96
+ Specs are plain text, so they fit into the workflows you already use — version control, pull requests, and code review.
97
+
98
+ See the [\*\*\*plain language guide](https://www.plainlang.org/docs/language-guide/) to learn the full syntax.
99
+
100
+ An example application in \*\*\*plain
101
+
102
+ <img src="resources/plain_example.png" width="70%" height="70%">
103
+
104
+ ## Additional Resources
105
+
106
+ ### Examples and Sample Projects
107
+
108
+ - See the [examples](examples) folder for sample projects in Golang, Python, React, and Flutter.
109
+ - For an example of how to implement Pong in \*\*\*plain, see the [pong](https://github.com/Codeplain-ai/plainlang-examples/tree/main/pong) example.
110
+ - For an example of how to implement a task manager in \*\*\*plain, see the [task-manager](https://github.com/Codeplain-ai/plainlang-examples/tree/main/task-manager) example.
111
+
112
+ ### Documentation
113
+
114
+ - For more details on the ***plain format, see the [***plain language specification](https://www.plainlang.org/docs/).
@@ -0,0 +1 @@
1
+ __version__ = "0.3.6"
@@ -5,6 +5,7 @@ set -euo pipefail
5
5
  # Brand Colors (use exported colors if available, otherwise define them)
6
6
  YELLOW="${YELLOW:-\033[38;2;224;255;110m}"
7
7
  GREEN="${GREEN:-\033[38;2;121;252;150m}"
8
+ WHITE="${WHITE:-\033[38;2;255;255;255m}"
8
9
  RED="${RED:-\033[38;2;239;68;68m}"
9
10
  GRAY="${GRAY:-\033[38;2;128;128;128m}"
10
11
  BOLD="${BOLD:-\033[1m}"
@@ -16,9 +17,9 @@ EXAMPLES_DOWNLOAD_URL="https://github.com/Codeplain-ai/plainlang-examples/archiv
16
17
 
17
18
  # Show current directory and ask for extraction path
18
19
  CURRENT_DIR=$(pwd)
19
- echo -e " current folder: ${YELLOW}${CURRENT_DIR}${NC}"
20
+ echo -e " Current folder: ${WHITE}${CURRENT_DIR}${NC}"
20
21
  echo ""
21
- echo -e " extract examples here, or enter a different path:"
22
+ echo -e " Extract examples here, or enter a different path:"
22
23
  echo ""
23
24
  read -r -p " [Enter for current, or type path]: " EXTRACT_PATH < /dev/tty
24
25
  echo ""
@@ -35,24 +36,24 @@ SKIP_DOWNLOAD=false
35
36
 
36
37
  # Check if directory exists, create if not
37
38
  if [ ! -d "$EXTRACT_PATH" ]; then
38
- echo -e " ${GRAY}creating directory...${NC}"
39
+ echo -e " ${GRAY}Creating directory...${NC}"
39
40
  mkdir -p "$EXTRACT_PATH" 2>/dev/null
40
41
  if [ $? -ne 0 ]; then
41
- echo -e " ${RED}✗${NC} failed to create directory: ${EXTRACT_PATH}"
42
- echo -e " ${GRAY}skipping example download.${NC}"
42
+ echo -e " ${RED} Failed to create directory: ${EXTRACT_PATH}${NC}"
43
+ echo -e " ${GRAY}Skipping example download.${NC}"
43
44
  SKIP_DOWNLOAD=true
44
45
  fi
45
46
  fi
46
47
 
47
48
  if [ "$SKIP_DOWNLOAD" = false ]; then
48
- echo -e " ${GRAY}downloading examples...${NC}"
49
+ echo -e " ${GRAY}Downloading examples...${NC}"
49
50
 
50
51
  # Download the zip file
51
52
  TEMP_ZIP=$(mktemp)
52
53
  curl -L -s -o "$TEMP_ZIP" "$EXAMPLES_DOWNLOAD_URL"
53
54
 
54
55
  if [ $? -eq 0 ] && [ -s "$TEMP_ZIP" ]; then
55
- echo -e " ${GRAY}extracting to ${EXTRACT_PATH}...${NC}"
56
+ echo -e " ${GRAY}Extracting to ${EXTRACT_PATH}...${NC}"
56
57
 
57
58
  # Extract the zip file
58
59
  unzip -q -o "$TEMP_ZIP" -d "$EXTRACT_PATH" 2>/dev/null
@@ -71,22 +72,32 @@ if [ "$SKIP_DOWNLOAD" = false ]; then
71
72
  rm -f "${EXTRACTED_DIR}/.gitignore"
72
73
  fi
73
74
 
75
+ clear
74
76
  echo ""
75
- echo -e " ${GREEN}✓${NC} examples downloaded successfully!"
77
+ echo -e " ${GREEN} Examples downloaded successfully!${NC}"
76
78
  echo ""
77
- echo -e " examples are in: ${YELLOW}${EXTRACTED_DIR}${NC}"
79
+ echo -e " ${GRAY}Examples are in: ${EXTRACTED_DIR}${NC}"
80
+ echo ""
81
+ echo -e " ${WHITE}${BOLD}Try the hello, world example:${NC}"
82
+ echo ""
83
+ echo -e " ${GRAY}Example folder:${NC} ${WHITE}cd ${EXTRACTED_DIR}/hello-world/python${NC}"
84
+ echo ""
85
+ echo -e " ${GRAY}Render the example:${NC} ${WHITE}codeplain hello-world-python.plain${NC}"
86
+ echo ""
87
+ echo -e " ${GRAY}See hello-world/python/README.md for details.${NC}"
78
88
  echo ""
79
89
  else
80
- echo -e " ${RED}✗${NC} failed to extract examples."
90
+ echo -e " ${RED} Failed to extract examples.${NC}"
81
91
  fi
82
92
 
83
93
  # Clean up temp file
84
94
  rm -f "$TEMP_ZIP"
85
95
  else
86
- echo -e " ${RED}✗${NC} failed to download examples."
96
+ echo -e " ${RED} Failed to download examples.${NC}"
87
97
  rm -f "$TEMP_ZIP"
88
98
  fi
89
99
 
90
100
  echo ""
91
- read -r -p " press [Enter] to continue..." < /dev/tty
101
+ PROMPT=$(printf '%b' " Press ${WHITE}[Enter]${NC} to continue...")
102
+ read -r -p "$PROMPT" < /dev/tty
92
103
  fi