katalyst-taxonomy-tui 2.0.1a4__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.
- katalyst_taxonomy_tui-2.0.1a4/.gitignore +123 -0
- katalyst_taxonomy_tui-2.0.1a4/PKG-INFO +12 -0
- katalyst_taxonomy_tui-2.0.1a4/pyproject.toml +36 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/__init__.py +22 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/__main__.py +73 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/app.py +637 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/defaults.py +347 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/forms.py +926 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/identity.py +44 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/init_wizard.py +129 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/modals.py +291 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/py.typed +0 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/renderers.py +128 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/services.py +600 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/tree_builder.py +242 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/tree_nodes.py +37 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/tui.css +265 -0
- katalyst_taxonomy_tui-2.0.1a4/src/katalyst_taxonomy_tui/viewmodels.py +41 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
# Not a Python build directory: Bard's SPA keeps shared helpers (utils.ts, download.ts) in
|
|
19
|
+
# src/lib, and ignoring it left a fresh clone unable to build or test the SPA.
|
|
20
|
+
!plugins/bard/web/src/lib/
|
|
21
|
+
lib64/
|
|
22
|
+
parts/
|
|
23
|
+
sdist/
|
|
24
|
+
var/
|
|
25
|
+
wheels/
|
|
26
|
+
*.egg-info/
|
|
27
|
+
.installed.cfg
|
|
28
|
+
*.egg
|
|
29
|
+
|
|
30
|
+
# PyInstaller
|
|
31
|
+
*.manifest
|
|
32
|
+
*.spec
|
|
33
|
+
|
|
34
|
+
# Installer logs
|
|
35
|
+
pip-log.txt
|
|
36
|
+
pip-delete-this-directory.txt
|
|
37
|
+
|
|
38
|
+
# Unit test / coverage reports
|
|
39
|
+
htmlcov/
|
|
40
|
+
.tox/
|
|
41
|
+
.nox/
|
|
42
|
+
.coverage
|
|
43
|
+
.coverage.*
|
|
44
|
+
.cache
|
|
45
|
+
nosetests.xml
|
|
46
|
+
coverage.xml
|
|
47
|
+
*.cover
|
|
48
|
+
*.py,cover
|
|
49
|
+
.hypothesis/
|
|
50
|
+
.pytest_cache/
|
|
51
|
+
|
|
52
|
+
# Translations
|
|
53
|
+
*.mo
|
|
54
|
+
*.pot
|
|
55
|
+
|
|
56
|
+
# Environments
|
|
57
|
+
.env
|
|
58
|
+
.venv
|
|
59
|
+
env/
|
|
60
|
+
venv/
|
|
61
|
+
ENV/
|
|
62
|
+
env.bak/
|
|
63
|
+
venv.bak/
|
|
64
|
+
|
|
65
|
+
# Spyder project settings
|
|
66
|
+
.spyderproject
|
|
67
|
+
.spyproject
|
|
68
|
+
|
|
69
|
+
# Rope project settings
|
|
70
|
+
.ropeproject
|
|
71
|
+
|
|
72
|
+
# mkdocs documentation
|
|
73
|
+
/site
|
|
74
|
+
|
|
75
|
+
# mypy / pyright
|
|
76
|
+
.mypy_cache/
|
|
77
|
+
.dmypy.json
|
|
78
|
+
dmypy.json
|
|
79
|
+
.pyright/
|
|
80
|
+
|
|
81
|
+
# Ruff
|
|
82
|
+
.ruff_cache/
|
|
83
|
+
|
|
84
|
+
# IDE
|
|
85
|
+
.idea/
|
|
86
|
+
.vscode/
|
|
87
|
+
*.swp
|
|
88
|
+
*.swo
|
|
89
|
+
*~
|
|
90
|
+
|
|
91
|
+
# OS
|
|
92
|
+
.DS_Store
|
|
93
|
+
Thumbs.db
|
|
94
|
+
|
|
95
|
+
# Local configuration
|
|
96
|
+
*.local
|
|
97
|
+
|
|
98
|
+
# Browser/Playwright state files
|
|
99
|
+
browser-state-*.json
|
|
100
|
+
|
|
101
|
+
# Agent harness scratch (run exhaust, never the design bundle)
|
|
102
|
+
.opencode/sessions/
|
|
103
|
+
.opencode/analysis/
|
|
104
|
+
.opencode/package-lock.json
|
|
105
|
+
|
|
106
|
+
# Build artifacts
|
|
107
|
+
site/
|
|
108
|
+
stack-tests/cucumber-report/
|
|
109
|
+
stack-tests/test-results/
|
|
110
|
+
|
|
111
|
+
# Generated artifacts (rebuild with `just generate-schemas`)
|
|
112
|
+
taxonomy/src/katalyst_taxonomy/engine/generated/
|
|
113
|
+
.worktrees/
|
|
114
|
+
.plan-74-75-76-77.md
|
|
115
|
+
.HANDOFF-scaffolding-wiring.md
|
|
116
|
+
.HANDOFF-2-cicd-migration.md
|
|
117
|
+
.HANDOFF-action-execution-fixes.md
|
|
118
|
+
.HANDOFF-bdd-coverage.md
|
|
119
|
+
.HANDOFF-*.md
|
|
120
|
+
docs/superpowers/
|
|
121
|
+
|
|
122
|
+
# Node dependencies — installed, never committed
|
|
123
|
+
node_modules/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: katalyst-taxonomy-tui
|
|
3
|
+
Version: 2.0.1a4
|
|
4
|
+
Summary: Terminal UI for katalyst-taxonomy
|
|
5
|
+
Author: eSimplicity
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: katalyst-engine<6,>=5
|
|
9
|
+
Requires-Dist: katalyst-taxonomy<6,>=5
|
|
10
|
+
Requires-Dist: loguru>=0.7
|
|
11
|
+
Requires-Dist: rich>=13.0
|
|
12
|
+
Requires-Dist: textual>=0.89
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "katalyst-taxonomy-tui"
|
|
3
|
+
version = "2.0.1a4"
|
|
4
|
+
description = "Terminal UI for katalyst-taxonomy"
|
|
5
|
+
license = { text = "Proprietary" }
|
|
6
|
+
requires-python = ">=3.12"
|
|
7
|
+
authors = [
|
|
8
|
+
{ name = "eSimplicity" }
|
|
9
|
+
]
|
|
10
|
+
dependencies = [
|
|
11
|
+
"katalyst-taxonomy>=5,<6",
|
|
12
|
+
"katalyst-engine>=5,<6",
|
|
13
|
+
"textual>=0.89",
|
|
14
|
+
"rich>=13.0",
|
|
15
|
+
"loguru>=0.7",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
[project.scripts]
|
|
19
|
+
katalyst-tui = "katalyst_taxonomy_tui.__main__:main"
|
|
20
|
+
|
|
21
|
+
[build-system]
|
|
22
|
+
requires = ["hatchling"]
|
|
23
|
+
build-backend = "hatchling.build"
|
|
24
|
+
|
|
25
|
+
[tool.hatch.build.targets.wheel]
|
|
26
|
+
packages = ["src/katalyst_taxonomy_tui"]
|
|
27
|
+
|
|
28
|
+
[tool.hatch.build.targets.wheel.sources]
|
|
29
|
+
"src" = ""
|
|
30
|
+
|
|
31
|
+
[tool.hatch.build]
|
|
32
|
+
include = [
|
|
33
|
+
"src/katalyst_taxonomy_tui/**/*.py",
|
|
34
|
+
"src/katalyst_taxonomy_tui/**/*.css",
|
|
35
|
+
"src/katalyst_taxonomy_tui/py.typed",
|
|
36
|
+
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Textual TUI package for the Katalyst taxonomy toolkit."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from .app import run
|
|
9
|
+
|
|
10
|
+
__all__ = ["run"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# Lazy re-export (PEP 562): importing this package must NOT eagerly pull in the
|
|
14
|
+
# optional 'tui' extra (textual). The always-installed `katalyst-tui` console
|
|
15
|
+
# script imports through here; eager imports broke graceful degradation on a
|
|
16
|
+
# plain install (GH #65).
|
|
17
|
+
def __getattr__(name: str) -> object:
|
|
18
|
+
if name == "run":
|
|
19
|
+
from .app import run
|
|
20
|
+
|
|
21
|
+
return run
|
|
22
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""Console entrypoint for the taxonomy Textual UI.
|
|
2
|
+
|
|
3
|
+
Takes no repository path: the TUI opens on the effective configuration — every backend
|
|
4
|
+
the active profile reads — and every repository is a filesystem backend declared in the
|
|
5
|
+
user config file. A development (editable) install refuses to fall back to the default
|
|
6
|
+
home: see :mod:`katalyst_taxonomy.adapters.filesystem.development`.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
import sys
|
|
13
|
+
|
|
14
|
+
#: The distribution this entry point is installed from.
|
|
15
|
+
DISTRIBUTION = "katalyst-taxonomy-tui"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def activate_plugins() -> None:
|
|
19
|
+
"""Give plugins a host in the TUI (#219, part 1).
|
|
20
|
+
|
|
21
|
+
Parity with the CLI, MCP and REST hosts. The TUI builds its own event bus
|
|
22
|
+
inside ``app.run``, which this entry point cannot reach, so plugins get a
|
|
23
|
+
dedicated bus here — none of the five built-ins subscribe to events, and a
|
|
24
|
+
plugin that needs the TUI's bus should be reached through the app rather than
|
|
25
|
+
the entry point.
|
|
26
|
+
|
|
27
|
+
A plugin that raises during ``register()`` stops the TUI from starting, with
|
|
28
|
+
the plugin named, rather than launching a UI that is quietly missing a feature.
|
|
29
|
+
"""
|
|
30
|
+
from katalyst_taxonomy.adapters.filesystem.config import FilesystemConfigAdapter
|
|
31
|
+
from katalyst_taxonomy.plugins.startup import activate_plugins_for
|
|
32
|
+
from katalyst_taxonomy.services.source_providers import ensure_source_providers
|
|
33
|
+
|
|
34
|
+
# The bundles and plugins config.yaml declares with a source, as the CLI and servers do.
|
|
35
|
+
ensure_source_providers(True)
|
|
36
|
+
activate_plugins_for(FilesystemConfigAdapter())
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def main() -> None:
|
|
40
|
+
parser = argparse.ArgumentParser(
|
|
41
|
+
description=(
|
|
42
|
+
"Run the katalyst taxonomy Textual UI on the effective configuration "
|
|
43
|
+
"(<user config home>/config.yaml)."
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
parser.parse_args()
|
|
47
|
+
|
|
48
|
+
from katalyst_taxonomy.adapters.filesystem.development import development_home_refusal
|
|
49
|
+
from katalyst_taxonomy.domain.homes import HomeError
|
|
50
|
+
|
|
51
|
+
try:
|
|
52
|
+
refusal = development_home_refusal(DISTRIBUTION)
|
|
53
|
+
except HomeError as exc:
|
|
54
|
+
parser.error(str(exc))
|
|
55
|
+
if refusal is not None:
|
|
56
|
+
parser.error(refusal)
|
|
57
|
+
|
|
58
|
+
try:
|
|
59
|
+
from .app import run
|
|
60
|
+
except ModuleNotFoundError as exc: # pragma: no cover - exercised in clean-install smoke test
|
|
61
|
+
sys.stderr.write(
|
|
62
|
+
"katalyst-tui requires the 'tui' extra. Install it with:\n"
|
|
63
|
+
" pip install 'katalyst-taxonomy-cli[tui]'\n"
|
|
64
|
+
f"(missing dependency: {exc.name})\n"
|
|
65
|
+
)
|
|
66
|
+
raise SystemExit(1) from exc
|
|
67
|
+
|
|
68
|
+
activate_plugins()
|
|
69
|
+
run()
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
if __name__ == "__main__":
|
|
73
|
+
main()
|