donna 0.2.0__py3-none-any.whl → 0.2.2__py3-none-any.whl

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 (70) hide show
  1. donna/artifacts/intro.md +39 -0
  2. donna/artifacts/research/specs/report.md +163 -0
  3. donna/artifacts/research/work/research.md +198 -0
  4. donna/artifacts/rfc/specs/request_for_change.md +270 -0
  5. donna/artifacts/rfc/work/create.md +120 -0
  6. donna/artifacts/rfc/work/do.md +109 -0
  7. donna/artifacts/rfc/work/plan.md +68 -0
  8. donna/artifacts/usage/artifacts.md +55 -12
  9. donna/artifacts/usage/cli.md +114 -39
  10. donna/artifacts/usage/worlds.md +8 -2
  11. donna/cli/__main__.py +1 -1
  12. donna/cli/commands/artifacts.py +104 -17
  13. donna/cli/commands/sessions.py +8 -8
  14. donna/cli/commands/workspaces.py +42 -0
  15. donna/cli/errors.py +18 -0
  16. donna/cli/types.py +16 -9
  17. donna/cli/utils.py +2 -2
  18. donna/core/errors.py +1 -11
  19. donna/core/result.py +5 -8
  20. donna/core/utils.py +0 -3
  21. donna/lib/__init__.py +4 -0
  22. donna/lib/sources.py +1 -1
  23. donna/lib/worlds.py +2 -2
  24. donna/machine/action_requests.py +0 -5
  25. donna/machine/artifacts.py +8 -6
  26. donna/machine/primitives.py +5 -5
  27. donna/machine/sessions.py +13 -5
  28. donna/machine/state.py +4 -4
  29. donna/machine/tasks.py +4 -18
  30. donna/machine/templates.py +4 -2
  31. donna/primitives/artifacts/specification.py +13 -2
  32. donna/primitives/artifacts/workflow.py +11 -2
  33. donna/primitives/directives/list.py +86 -0
  34. donna/primitives/directives/view.py +52 -11
  35. donna/primitives/operations/finish_workflow.py +13 -2
  36. donna/primitives/operations/output.py +87 -0
  37. donna/primitives/operations/request_action.py +3 -9
  38. donna/primitives/operations/run_script.py +2 -2
  39. donna/protocol/utils.py +22 -0
  40. donna/workspaces/artifacts.py +238 -0
  41. donna/{world → workspaces}/artifacts_discovery.py +1 -1
  42. donna/{world → workspaces}/config.py +18 -11
  43. donna/{world → workspaces}/errors.py +55 -45
  44. donna/workspaces/initialization.py +78 -0
  45. donna/{world → workspaces}/markdown.py +21 -26
  46. donna/{world → workspaces}/sources/base.py +2 -2
  47. donna/{world → workspaces}/sources/markdown.py +8 -7
  48. donna/{world → workspaces}/templates.py +4 -4
  49. donna/workspaces/tmp.py +51 -0
  50. donna/{world → workspaces}/worlds/base.py +6 -3
  51. donna/{world → workspaces}/worlds/filesystem.py +30 -10
  52. donna/{world → workspaces}/worlds/python.py +12 -9
  53. donna-0.2.2.dist-info/METADATA +463 -0
  54. donna-0.2.2.dist-info/RECORD +92 -0
  55. {donna-0.2.0.dist-info → donna-0.2.2.dist-info}/WHEEL +1 -1
  56. donna/artifacts/work/do_it.md +0 -142
  57. donna/artifacts/work/do_it_fast.md +0 -98
  58. donna/artifacts/work/planning.md +0 -245
  59. donna/cli/commands/projects.py +0 -49
  60. donna/world/artifacts.py +0 -122
  61. donna/world/initialization.py +0 -42
  62. donna/world/tmp.py +0 -33
  63. donna/world/worlds/__init__.py +0 -0
  64. donna-0.2.0.dist-info/METADATA +0 -44
  65. donna-0.2.0.dist-info/RECORD +0 -85
  66. /donna/{artifacts/work → workspaces}/__init__.py +0 -0
  67. /donna/{world → workspaces}/sources/__init__.py +0 -0
  68. /donna/{world → workspaces/worlds}/__init__.py +0 -0
  69. {donna-0.2.0.dist-info → donna-0.2.2.dist-info}/entry_points.txt +0 -0
  70. {donna-0.2.0.dist-info → donna-0.2.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,42 +0,0 @@
1
- import tomllib
2
-
3
- from donna.core import errors as core_errors
4
- from donna.core import utils
5
- from donna.core.result import Err, Ok, Result, unwrap_to_error
6
- from donna.world import config
7
- from donna.world import errors as world_errors
8
-
9
-
10
- @unwrap_to_error
11
- def initialize_environment() -> Result[None, core_errors.ErrorsList]:
12
- """Initialize the environment for the application.
13
-
14
- This function MUST be called before any other operations.
15
- """
16
- project_dir = utils.discover_project_dir(config.DONNA_DIR_NAME).unwrap()
17
-
18
- config.project_dir.set(project_dir)
19
-
20
- config_dir = project_dir / config.DONNA_DIR_NAME
21
-
22
- config.config_dir.set(config_dir)
23
-
24
- config_path = config_dir / config.DONNA_CONFIG_NAME
25
-
26
- if not config_path.exists():
27
- config.config.set(config.Config())
28
- return Ok(None)
29
-
30
- try:
31
- data = tomllib.loads(config_path.read_text())
32
- except tomllib.TOMLDecodeError as e:
33
- return Err([world_errors.ConfigParseFailed(config_path=config_path, details=str(e))])
34
-
35
- try:
36
- loaded_config = config.Config.model_validate(data)
37
- except Exception as e:
38
- return Err([world_errors.ConfigValidationFailed(config_path=config_path, details=str(e))])
39
-
40
- config.config.set(loaded_config)
41
-
42
- return Ok(None)
donna/world/tmp.py DELETED
@@ -1,33 +0,0 @@
1
- import pathlib
2
- import shutil
3
- import time
4
-
5
- from donna.cli.types import FullArtifactIdArgument
6
- from donna.world.config import config, config_dir
7
-
8
-
9
- def dir() -> pathlib.Path:
10
- cfg = config()
11
- tmp_path = cfg.tmp_dir
12
-
13
- if not cfg.tmp_dir.is_absolute():
14
- tmp_path = config_dir() / tmp_path
15
-
16
- tmp_path.mkdir(parents=True, exist_ok=True)
17
-
18
- return tmp_path
19
-
20
-
21
- def file_for_artifact(artifact_id: FullArtifactIdArgument, extention: str) -> pathlib.Path:
22
- directory = dir()
23
-
24
- directory.mkdir(parents=True, exist_ok=True)
25
-
26
- normalized_extension = extention.lstrip(".")
27
- artifact_file_name = f"{str(artifact_id).replace('/', '.')}.{int(time.time() * 1000)}.{normalized_extension}"
28
-
29
- return directory / artifact_file_name
30
-
31
-
32
- def clear() -> None:
33
- shutil.rmtree(dir())
File without changes
@@ -1,44 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: donna
3
- Version: 0.2.0
4
- Summary: A deterministic workflow and state orchestration engine for LLM agents.
5
- License-Expression: BSD-3-Clause
6
- License-File: LICENSE
7
- Keywords: ai,agent,cli,llm,workflow
8
- Author: Aliaksei Yaletski
9
- Author-email: a.eletsky@gmail.com
10
- Requires-Python: >=3.12,<4.0
11
- Classifier: Development Status :: 3 - Alpha
12
- Classifier: Environment :: Console
13
- Classifier: Intended Audience :: Developers
14
- Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.12
16
- Classifier: Programming Language :: Python :: 3 :: Only
17
- Classifier: Topic :: Software Development :: Build Tools
18
- Classifier: Topic :: Utilities
19
- Requires-Dist: jinja2 (>=3.1,<3.2)
20
- Requires-Dist: markdown-it-py (>=4.0,<4.1)
21
- Requires-Dist: mdformat (>=1.0.0,<1.1.0)
22
- Requires-Dist: pydantic (>=2.12,<2.13)
23
- Requires-Dist: typer (>=0.20,<0.21)
24
- Project-URL: Homepage, https://github.com/Tiendil/donna
25
- Project-URL: Issues, https://github.com/Tiendil/donna/issues
26
- Project-URL: Repository, https://github.com/Tiendil/donna
27
- Description-Content-Type: text/markdown
28
-
29
- # State Machines for your AI Agents
30
-
31
- `Donna` is a CLI tool that helps manage the work of AI agents like Codex.
32
-
33
- It is designed to to invert control flow: instead of agents deciding what to do next, the `donna` tells agents what to do next by following predefined workflows.
34
-
35
- The core idea is that most of high-level workflows are more algorithmic than it may seem at first glance. For example, it may be difficult to fix a particular type issue in the codebase, but the overall process of polishing the codebase is quite linear:
36
-
37
- 1. Ensure all tests pass.
38
- 2. Ensure the code is formatted correctly.
39
- 3. Ensure there are no linting errors.
40
- 4. Go to the step 1 if you changed something in the process.
41
- 5. Finish.
42
-
43
- We may need coding agents on the each step of the process, but there no reason for agents to manage the whole grooming loop by themselves — it take longer time, spends tokens and may lead to confusion of agents.
44
-
@@ -1,85 +0,0 @@
1
- donna/__init__.py,sha256=lEC7l3wDCBiC5gw56XkAeBW1XJA52pck7SFR1_CUals,41
2
- donna/artifacts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- donna/artifacts/usage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- donna/artifacts/usage/artifacts.md,sha256=slHrJRmFYiXxOQnPWHY5bb3LOa1VLmRnWS6FvKFWlHs,11241
5
- donna/artifacts/usage/cli.md,sha256=GzWaGK-QB_Bg3A1czVzIPmWLcR7565hBW4gEkQHAtZo,6753
6
- donna/artifacts/usage/worlds.md,sha256=EBMGLg6ae_Paiaeas5CyCaOqs13xXu9tp6IQASyIdYs,1848
7
- donna/artifacts/work/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- donna/artifacts/work/do_it.md,sha256=bCYeF45vET83qPdh4m5n4QH8wSUjdsbcSZzsHKZ_Amo,5594
9
- donna/artifacts/work/do_it_fast.md,sha256=2TSAvrUlNC7PUCU1F1YNiu3KtTiBLO501XdxVarru3s,3594
10
- donna/artifacts/work/planning.md,sha256=C2kbUopoGdWM7CHmTTCP0Sbetff8zYkMqOFXuNbjdRE,14375
11
- donna/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- donna/cli/__main__.py,sha256=sKI9NNX2pKkuxmyzgMvULCtNOBHQYW1BGPhxOK4ZPvI,222
13
- donna/cli/application.py,sha256=rIEseTvPZgX4tZ23fTX49LF0XLfyzTO8gtpA8G80MTI,466
14
- donna/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- donna/cli/commands/artifacts.py,sha256=E_84OwE08Cb59P_qFavpe0HdvuhhCCDJryb28EaGwH8,3609
16
- donna/cli/commands/projects.py,sha256=bu257fUnV-RhYJUw_lUNW9w17XS2AFbf2PP5bqr4hiY,1198
17
- donna/cli/commands/sessions.py,sha256=eTu65EBB2kve43WoGnK4oNsTGXz2Pas8t1fwurKPkec,2122
18
- donna/cli/types.py,sha256=YsBPGPSV6h1f8dNvnQmWefnW2s_ARRwG75_u2DXSm-8,3546
19
- donna/cli/utils.py,sha256=kQm-bYDQu-xLZJXT59F6w3HlPjAiYs9EIpK9aacxz_E,1421
20
- donna/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- donna/core/entities.py,sha256=Y3udcI1ykWDI_yPqCX6JTuDmF81BxO0PnnJzzD5uMoM,753
22
- donna/core/errors.py,sha256=k6Dx4tNids64mupnpnkMF2dEVkfMF5Bm04Rx2fjWQYM,3771
23
- donna/core/result.py,sha256=nlugpkq0bdeOT626dnwLfF7fTvidKvTmjiMwKAiX-BA,2392
24
- donna/core/utils.py,sha256=BViEifQWxZ8ju2427VKk1P_xk4fVVOHTAdJIv-7Oyyk,1276
25
- donna/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- donna/domain/errors.py,sha256=jewM3wYUCGLwNb8tvHkJ35-Y59ezJKgWy7pr_Utk7iA,1253
27
- donna/domain/ids.py,sha256=CMEBRj6i2vjVi74TtUcjLTALn3MqKsEbs-Iv463mjVg,14678
28
- donna/lib/__init__.py,sha256=4g2r8dSat9yxkmKPpX8f-ANbTp6HDNXM5K_L2c_Ihb4,834
29
- donna/lib/sources.py,sha256=96RMyWBFL0Y6MxORtl7E4fE-dDECH0CYPcAA_v33UB8,177
30
- donna/lib/worlds.py,sha256=5uepMT4aJJYwz2vqVQ9vcymjygaUKnBn_V4lBizmvH0,276
31
- donna/machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- donna/machine/action_requests.py,sha256=Tdp0Q64lCZLjrzOsLbxFaZ1fJNVKBRXmc8-HmBuhZ7w,1377
33
- donna/machine/artifacts.py,sha256=_Gwsu5lasnFF0GuWXMFUL-3FOZiyX9GcAzVXgZr-3o8,6603
34
- donna/machine/changes.py,sha256=TlgMA70u0ffRvwKVBwXEgEk1bp4m9w9MsVxtishX9Sw,2463
35
- donna/machine/errors.py,sha256=45EPNC12rRT2pdgd2b9HMXCP0aon4sxo9DdUfxXeMnQ,4956
36
- donna/machine/operations.py,sha256=CHXPy8hDYNqE5woVMj_lu2p4wgl7fqRxO0Dz0v1t4zI,761
37
- donna/machine/primitives.py,sha256=DuCecXLwIsYOD3fzFp5ZQ08b1_K4Xlol6SDvM09X2ms,3267
38
- donna/machine/sessions.py,sha256=eA_SV8zDtjKg3vA6wmbT7P14RK68TA2XbFAZMLYuyXc,6880
39
- donna/machine/state.py,sha256=E5ckioJ8K5Mv_IvJyNf7O15tW10hSYf6oA79x3WiZKU,8101
40
- donna/machine/tasks.py,sha256=10hPk325VR5Ii6vytqeNRq9rgGCEM8SGoqrvgz1lQSA,2826
41
- donna/machine/templates.py,sha256=wB6s41fTaHD-GuL3zPn1JTID5scfpUgVzBiuFfyYUtU,2474
42
- donna/primitives/__init__.py,sha256=CfJhz3TLdFxYbqCXioWVAIKGQ2tAMwXwL_Fg3A68Dqo,53
43
- donna/primitives/artifacts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- donna/primitives/artifacts/specification.py,sha256=3mzZLIMwKhDJ-GxJ0X0vW1Xh-PqFXwg9EDy_jooS8eI,461
45
- donna/primitives/artifacts/workflow.py,sha256=7YlJ7ohpeWnuGhnoRqlFTZGq-54STLL_BDTYYGWz4sc,7684
46
- donna/primitives/directives/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- donna/primitives/directives/goto.py,sha256=uJdMJe3leJPSl_0PU4jd2AbHFJsJkf-x6rKhn4hKZd8,1679
48
- donna/primitives/directives/task_variable.py,sha256=KvxY8ZOKFh6alkBhgDvkWzIJBfRNP4oYKRJ0SgHzO_g,2959
49
- donna/primitives/directives/view.py,sha256=BiTZULx1ZC0z4V_Z6EaG3bYLcFna-nV_akaVXAvxJRo,1558
50
- donna/primitives/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- donna/primitives/operations/finish_workflow.py,sha256=qRSjemF2o2Lim-GGrnjBjouxPMzDS9M-QEw_Weg0Zu0,1494
52
- donna/primitives/operations/request_action.py,sha256=cwNZl5Av1ko3DU4fcO62xCFJqvIUmm7ff_BvTaGmAhA,3041
53
- donna/primitives/operations/run_script.py,sha256=Pl6llF9_Ck-WXn_4-cVfxY9K2WyrbEoOfQJGSxA__Xs,9338
54
- donna/protocol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- donna/protocol/cell_shortcuts.py,sha256=dZVCzoaPu09IYEA5g5gYPhR-q8MpgmehcYti1z9BBuI,385
56
- donna/protocol/cells.py,sha256=jQCM-l31Kt7gEBXgvb7Ph5Fstbz9lf0lEUbH0bgNlWg,1348
57
- donna/protocol/errors.py,sha256=u54fxMtJMWL8cbOLWU0acrmxV7Q8uHnyT1NFw959SMI,486
58
- donna/protocol/formatters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- donna/protocol/formatters/automation.py,sha256=I_I-b8bixuXBlKqn2ryHDKSdRJy77FzDATJi-jhEPWI,928
60
- donna/protocol/formatters/base.py,sha256=PGrAgxiEtZKyg1wPePQMt5syOr6IpC4ydh5rMElaojE,405
61
- donna/protocol/formatters/human.py,sha256=WvoZVYlD4H3MftDkpEEP_RtyZnzJhUWKNecKgm3FoXg,1168
62
- donna/protocol/formatters/llm.py,sha256=z_2djZFaVVHjLYFMneUrYp5sA-EvtPuHUDzGKV1ogu4,1266
63
- donna/protocol/modes.py,sha256=vFDjciPdPy26XlLBGrgAn1kAVW7EJAHrccGcJrK7vUo,960
64
- donna/protocol/nodes.py,sha256=aP5IVOouZe6akSdfzPpfcGuZLbxkEieTE6j6SuVuTUU,1974
65
- donna/world/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- donna/world/artifacts.py,sha256=qCACfo6ZNX1UypM2bHIiYRnMNDjh-PVJY4IumEpCB0c,4316
67
- donna/world/artifacts_discovery.py,sha256=8-IYannZodL65paQxXjk_sJ_cATXXe9252FF-OAVqpo,2798
68
- donna/world/config.py,sha256=XS4r1Y3TKmKJZGLqywGDa8U3uyG-ZeHWKZTp9G4v4yw,6355
69
- donna/world/errors.py,sha256=fGB89o2qRNu8ojU71SJvsc432x4C3P31Kn4k1i7PYWc,7799
70
- donna/world/initialization.py,sha256=AfA79qVoa7iJo16ut0NonHe54oh_yaOiurps3ftjldg,1268
71
- donna/world/markdown.py,sha256=4KDEG0B4P2G6dKO1S8eNLY_XLKiw4d8aLoP_HEmEvm0,7250
72
- donna/world/sources/__init__.py,sha256=IRwKWnqQKh1ase742jhdadBcS4E9Hxr6j_l9Li6wwfw,70
73
- donna/world/sources/base.py,sha256=P5O2O1A7_GWqJvVVTwjg_fCH0TYIWUJpAjacB0LZBqk,2010
74
- donna/world/sources/markdown.py,sha256=sQ7Tgk0-xbPF0h7o77epq58wa5zt9lkGzT9EpXvMcFo,9669
75
- donna/world/templates.py,sha256=bcrDvZBBRfDdXYmh1jevzDBVDT-2hmMRdGkd0xx2RVQ,6054
76
- donna/world/tmp.py,sha256=oKXMt3WDn10hYlYxwuSHC7ZpD7sDjl06RqNdfJ58ZAc,791
77
- donna/world/worlds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- donna/world/worlds/base.py,sha256=3SZp44lzmYmve1XiXyUX5oD6NWSvrXqg7aar0dO7lsM,2465
79
- donna/world/worlds/filesystem.py,sha256=W18pSCJQAkeP5gn_FkIU-FIorrXTfMipUGc1FjbqfOo,6648
80
- donna/world/worlds/python.py,sha256=R9BOZJJT9MomNzTM0L19SO43DAwQY_R-QL9JtrcjPtc,7035
81
- donna-0.2.0.dist-info/METADATA,sha256=4N8NZmx4hgJCowL7fT7ODPH7Xr8imdKiPGaXgxlpPXE,2012
82
- donna-0.2.0.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
83
- donna-0.2.0.dist-info/entry_points.txt,sha256=r2W_yOzauooYCu312OQwCycIN1UjVnO5paPpS2EDZqo,48
84
- donna-0.2.0.dist-info/licenses/LICENSE,sha256=KiF6_RVxH0MLeHZZtc8ag497X-c6oPmk-0OOf9qQDDk,1504
85
- donna-0.2.0.dist-info/RECORD,,
File without changes
File without changes
File without changes