basemode-loom 0.1.1__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 (37) hide show
  1. basemode_loom-0.1.1/.gitignore +11 -0
  2. basemode_loom-0.1.1/Makefile +22 -0
  3. basemode_loom-0.1.1/PKG-INFO +7 -0
  4. basemode_loom-0.1.1/README.md +18 -0
  5. basemode_loom-0.1.1/pyproject.toml +59 -0
  6. basemode_loom-0.1.1/src/basemode_loom/__init__.py +24 -0
  7. basemode_loom-0.1.1/src/basemode_loom/cli.py +990 -0
  8. basemode_loom-0.1.1/src/basemode_loom/display.py +326 -0
  9. basemode_loom-0.1.1/src/basemode_loom/loom_formats.py +239 -0
  10. basemode_loom-0.1.1/src/basemode_loom/naming.py +80 -0
  11. basemode_loom-0.1.1/src/basemode_loom/session.py +494 -0
  12. basemode_loom-0.1.1/src/basemode_loom/stats.py +343 -0
  13. basemode_loom-0.1.1/src/basemode_loom/store.py +506 -0
  14. basemode_loom-0.1.1/src/basemode_loom/tui/__init__.py +0 -0
  15. basemode_loom-0.1.1/src/basemode_loom/tui/app.py +21 -0
  16. basemode_loom-0.1.1/src/basemode_loom/tui/app.tcss +125 -0
  17. basemode_loom-0.1.1/src/basemode_loom/tui/screens/__init__.py +0 -0
  18. basemode_loom-0.1.1/src/basemode_loom/tui/screens/confirm.py +36 -0
  19. basemode_loom-0.1.1/src/basemode_loom/tui/screens/int_input.py +35 -0
  20. basemode_loom-0.1.1/src/basemode_loom/tui/screens/loom.py +288 -0
  21. basemode_loom-0.1.1/src/basemode_loom/tui/screens/model_picker.py +57 -0
  22. basemode_loom-0.1.1/src/basemode_loom/tui/screens/stats.py +99 -0
  23. basemode_loom-0.1.1/src/basemode_loom/tui/screens/tree_picker.py +93 -0
  24. basemode_loom-0.1.1/src/basemode_loom/tui/widgets/__init__.py +0 -0
  25. basemode_loom-0.1.1/src/basemode_loom/tui/widgets/loom_view.py +88 -0
  26. basemode_loom-0.1.1/src/basemode_loom/tui/widgets/stream_view.py +78 -0
  27. basemode_loom-0.1.1/src/basemode_loom/tui/widgets/tree_picker.py +146 -0
  28. basemode_loom-0.1.1/tests/test_cli.py +220 -0
  29. basemode_loom-0.1.1/tests/test_display.py +407 -0
  30. basemode_loom-0.1.1/tests/test_loom_formats.py +150 -0
  31. basemode_loom-0.1.1/tests/test_naming.py +70 -0
  32. basemode_loom-0.1.1/tests/test_session.py +494 -0
  33. basemode_loom-0.1.1/tests/test_stats.py +123 -0
  34. basemode_loom-0.1.1/tests/test_store.py +242 -0
  35. basemode_loom-0.1.1/tests/test_tree_picker.py +451 -0
  36. basemode_loom-0.1.1/tests/test_tui.py +561 -0
  37. basemode_loom-0.1.1/uv.lock +2166 -0
@@ -0,0 +1,11 @@
1
+ .env
2
+ __pycache__/
3
+ *.py[cod]
4
+ .venv/
5
+ dist/
6
+ .coverage
7
+ htmlcov/
8
+ .pytest_cache/
9
+ .ruff_cache/
10
+ *.egg-info/
11
+
@@ -0,0 +1,22 @@
1
+ .PHONY: publish test test-core test-integration lint lint-core
2
+
3
+ publish:
4
+ rm -rf dist/
5
+ uv build
6
+ @export $$(grep UV_PUBLISH_TOKEN .env | xargs) && uv publish
7
+
8
+ test:
9
+ uv run pytest tests
10
+
11
+ test-core:
12
+ uv run pytest tests
13
+
14
+ test-integration:
15
+ uv run pytest -m integration
16
+
17
+ lint:
18
+ uv run ruff check src tests
19
+ uv run ruff format --check src tests
20
+
21
+ lint-core:
22
+ uv run ruff check src tests && uv run ruff format --check src tests
@@ -0,0 +1,7 @@
1
+ Metadata-Version: 2.4
2
+ Name: basemode-loom
3
+ Version: 0.1.1
4
+ Summary: Persistent branching exploration for basemode continuations
5
+ Requires-Python: >=3.11
6
+ Requires-Dist: basemode>=0.1.2
7
+ Requires-Dist: textual>=0.85.0
@@ -0,0 +1,18 @@
1
+ # basemode-loom
2
+
3
+ Persistent branching exploration for `basemode` continuations.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install basemode-loom
9
+ ```
10
+
11
+ `basemode-loom` depends on `basemode` from PyPI as a normal package dependency.
12
+
13
+ ## CLI
14
+
15
+ ```bash
16
+ basemode-loom --help
17
+ ```
18
+
@@ -0,0 +1,59 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "basemode-loom"
7
+ version = "0.1.1"
8
+ description = "Persistent branching exploration for basemode continuations"
9
+ requires-python = ">=3.11"
10
+ dependencies = [
11
+ "basemode>=0.1.2",
12
+ "textual>=0.85.0",
13
+ ]
14
+
15
+ [project.scripts]
16
+ basemode-loom = "basemode_loom.cli:app"
17
+
18
+ [dependency-groups]
19
+ dev = [
20
+ "pytest>=8.0.0",
21
+ "pytest-asyncio>=0.23.0",
22
+ "pytest-cov>=5.0.0",
23
+ "ruff>=0.5.0",
24
+ ]
25
+
26
+ [tool.hatch.build.targets.wheel]
27
+ packages = ["src/basemode_loom"]
28
+
29
+ [tool.ruff]
30
+ line-length = 88
31
+ src = ["src"]
32
+ target-version = "py311"
33
+
34
+ [tool.ruff.lint]
35
+ select = ["E", "F", "I", "UP", "B", "RUF"]
36
+ ignore = ["E501"]
37
+
38
+ [tool.ruff.lint.isort]
39
+ known-first-party = ["basemode_loom"]
40
+
41
+ [tool.ruff.lint.per-file-ignores]
42
+ "tests/*" = ["E741", "RUF059"]
43
+
44
+ [tool.pytest.ini_options]
45
+ asyncio_mode = "auto"
46
+ addopts = "--cov=src/basemode_loom --cov-report=term-missing"
47
+ testpaths = ["tests"]
48
+
49
+ [tool.coverage.run]
50
+ source = ["src/basemode_loom"]
51
+ omit = ["*/tests/*"]
52
+
53
+ [tool.coverage.report]
54
+ exclude_lines = [
55
+ "pragma: no cover",
56
+ "def __repr__",
57
+ "raise NotImplementedError",
58
+ "if TYPE_CHECKING:",
59
+ ]
@@ -0,0 +1,24 @@
1
+ """Persistent branching exploration for basemode."""
2
+
3
+ __all__ = [
4
+ "GenerationStore",
5
+ "LoomSession",
6
+ "Node",
7
+ "default_db_path",
8
+ ]
9
+
10
+
11
+ def __getattr__(name: str):
12
+ if name in {"GenerationStore", "Node", "default_db_path"}:
13
+ from .store import GenerationStore, Node, default_db_path
14
+
15
+ return {
16
+ "GenerationStore": GenerationStore,
17
+ "Node": Node,
18
+ "default_db_path": default_db_path,
19
+ }[name]
20
+ if name == "LoomSession":
21
+ from .session import LoomSession
22
+
23
+ return LoomSession
24
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")