alissa-tools-github-orcloop 0.1.0__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.
@@ -0,0 +1,15 @@
1
+ """orcloop — the orchestrator daemon of the Alissa GitHub daemon family.
2
+
3
+ Where devloop watches `alissa:develop`-labeled issues and reviewloop reacts to
4
+ review requests, orcloop sits one level up: it walks the **Alissa task graph**,
5
+ releases tasks marked ready as `alissa:develop` issues, and closes the loop when
6
+ the resulting PR merges. It is the mechanical driver that turns committed work in
7
+ Alissa into GitHub issues the develop/review daemons can pick up.
8
+
9
+ This is the **O0 scaffold**: the distribution skeleton, repo tooling, and CLI
10
+ stub only — no daemon logic. The moving parts (config surface, Alissa/GitHub
11
+ clients, the decision loop, the Docker image) land across O1–O5; see the repo
12
+ README's lane map. The reserved runtime env prefix is `ALISSA_ORC_*`.
13
+ """
14
+
15
+ __all__: list[str] = []
@@ -0,0 +1,45 @@
1
+ """CLI entry point: alissa-orcloop (or python -m alissa.tools.github.orcloop).
2
+
3
+ O0 scaffold stub. The real daemon — task-graph walk, issue release, and the
4
+ merge close-loop — arrives in O1–O5 (see the repo README's lane map). For now
5
+ this parser only knows `--version` and prints the daemon's role, so the
6
+ distribution, entry point, and version wiring can be exercised end to end
7
+ before any logic exists. The reserved runtime env prefix is `ALISSA_ORC_*`.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import argparse
13
+
14
+ from .version import version
15
+
16
+ ROLE = (
17
+ "alissa-orcloop — the orchestrator daemon (O0 scaffold).\n"
18
+ "Role in the four-daemon pipeline: walk the Alissa task graph, release "
19
+ "tasks marked ready as alissa:develop issues, and close the loop when the "
20
+ "resulting PR merges. Daemon logic lands in O1-O5; this is the scaffold "
21
+ "stub."
22
+ )
23
+
24
+
25
+ def build_parser() -> argparse.ArgumentParser:
26
+ p = argparse.ArgumentParser(
27
+ prog="alissa-orcloop",
28
+ description="Orchestrate the Alissa task graph into alissa:develop "
29
+ "issues and close the loop on merge — the orchestrator daemon of the "
30
+ "Alissa GitHub daemon family. (O0 scaffold: --version only.)",
31
+ )
32
+ p.add_argument(
33
+ "--version", action="version", version=f"%(prog)s {version.value}"
34
+ )
35
+ return p
36
+
37
+
38
+ def main(argv: "list[str] | None" = None) -> int:
39
+ build_parser().parse_args(argv)
40
+ print(ROLE)
41
+ return 0
42
+
43
+
44
+ if __name__ == "__main__":
45
+ raise SystemExit(main())
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,46 @@
1
+ import os
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass(frozen=True, slots=True)
6
+ class Version:
7
+ name: str
8
+ value: str
9
+
10
+ def components(self, as_int: bool = False) -> list:
11
+ return [int(val) if as_int else val for val in self.value.split(".")]
12
+
13
+ @property
14
+ def major(self) -> int:
15
+ component, *_ = self.components(as_int=True)
16
+ return component
17
+
18
+ @property
19
+ def minor(self) -> int:
20
+ _, component, *_ = self.components(as_int=True)
21
+ return component
22
+
23
+ @property
24
+ def patch(self) -> int:
25
+ *_, component = self.components(as_int=True)
26
+ return component
27
+
28
+ @classmethod
29
+ def from_path(cls, dirpath: str, name: str):
30
+ for file in os.listdir(dirpath):
31
+ if file.lower().endswith("version"):
32
+ filepath = os.path.join(dirpath, file)
33
+ break
34
+ else:
35
+ raise ValueError("Version file not found for package name: " + name)
36
+
37
+ with open(filepath, "r") as version_file:
38
+ version_value = version_file.readline().strip()
39
+ return cls(name=name, value=version_value)
40
+
41
+
42
+ try:
43
+ version = Version.from_path(name="alissa-tools-github-orcloop", dirpath=os.path.dirname(__file__))
44
+ except Exception:
45
+ print("Version file not found for package name: alissa-tools-github-orcloop, using 0.0.0")
46
+ version = Version(name="alissa-tools-github-orcloop", value="0.0.0")
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: alissa-tools-github-orcloop
3
+ Version: 0.1.0
4
+ Summary: ALISSA-TOOLS-GITHUB-ORCLOOP
5
+ Home-page: https://alissa.app
6
+ Author: Fahera
7
+ Author-email: support@alissa.app
8
+ Requires-Python: >=3.11
9
+ Description-Content-Type: text/markdown
10
+ Dynamic: author
11
+ Dynamic: author-email
12
+ Dynamic: description
13
+ Dynamic: description-content-type
14
+ Dynamic: home-page
15
+ Dynamic: requires-python
16
+ Dynamic: summary
17
+
18
+ # alissa-tools-github-orcloop
19
+
20
+ The `alissa.tools.github.orcloop` module: the **orchestrator** daemon of the
21
+ Alissa GitHub daemon family. It walks the Alissa task graph, releases tasks
22
+ marked ready as `alissa:develop` issues, and closes the loop when the resulting
23
+ PR merges — sitting one level above
24
+ [`alissa-tools-github-devloop`](https://github.com/fahera-mx/alissa-github-develop-daemon)
25
+ (which turns those issues into developer sessions) and
26
+ [`alissa-tools-github-reviewloop`](https://github.com/fahera-mx/alissa-github-review-daemon)
27
+ (which reacts to the review requests those developers fire).
28
+
29
+ This distribution ships **only** that module. Everything above it —
30
+ `alissa`, `alissa.tools`, `alissa.tools.github` — is a
31
+ [PEP 420](https://peps.python.org/pep-0420/) namespace package with no
32
+ `__init__.py`, so other distributions in other repositories can contribute
33
+ their own packages under the same namespace:
34
+
35
+ ```
36
+ alissa/ ← namespace (no __init__.py)
37
+ └── tools/ ← namespace
38
+ └── github/ ← namespace
39
+ ├── orcloop/ __init__.py ← THIS distribution
40
+ ├── devloop/ __init__.py ← ships from alissa-github-develop-daemon
41
+ └── reviewloop/ __init__.py ← ships from alissa-github-review-daemon
42
+ ```
43
+
44
+ The rule: a distribution owns a leaf package and declares only that subtree
45
+ (`find_namespace_packages(include=[PACKAGE, f"{PACKAGE}.*"])`). Adding an
46
+ `__init__.py` at any namespace level would claim it for one distribution and
47
+ shadow the others.
48
+
49
+ ## Status — O0 scaffold
50
+
51
+ This is the **O0 scaffold** only: the distribution skeleton, repo tooling, and
52
+ a CLI stub (`alissa-orcloop --version`). No daemon logic yet — config surface,
53
+ Alissa/GitHub clients, the decision loop, and the Docker image land across
54
+ O1–O5 (see the repo [README](../README.md) lane map). The reserved runtime env
55
+ prefix is `ALISSA_ORC_*`.
56
+
57
+ ## Install
58
+
59
+ ```sh
60
+ pip install -e ./alissa-tools-github-orcloop
61
+ alissa-orcloop --version
62
+ ```
@@ -0,0 +1,9 @@
1
+ alissa/tools/github/orcloop/__init__.py,sha256=-qMxex2s1FfOB8wVxPVU4STEu5dUOF0NBt1MaMHgJuI,801
2
+ alissa/tools/github/orcloop/__main__.py,sha256=OS1PoppI65DWgL8ypgcYG2JgOXNiSqne0EdG-_iO0hI,1511
3
+ alissa/tools/github/orcloop/version,sha256=6d2FB_S_DG9CRY5BrqgzrQvT9hJycjNe7pv01YVB7Wc,6
4
+ alissa/tools/github/orcloop/version.py,sha256=Z2v-AJyJRQLyk2_cpboLzvbNruATyw5FZd64FYUBS1I,1418
5
+ alissa_tools_github_orcloop-0.1.0.dist-info/METADATA,sha256=oyLFLEtQuP7O2jKCltpXJK54bXSqIr4NVfj1VZveVxc,2486
6
+ alissa_tools_github_orcloop-0.1.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
7
+ alissa_tools_github_orcloop-0.1.0.dist-info/entry_points.txt,sha256=Zf_eu8vtkOsNG1yeMgNWc-Sp4vfsMmoCOM8_WHoeGpk,77
8
+ alissa_tools_github_orcloop-0.1.0.dist-info/top_level.txt,sha256=DodjDg-l-TWQnlxG-Vuc3G5sB4O7cWGQwe6XrVx3u-A,7
9
+ alissa_tools_github_orcloop-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ alissa-orcloop = alissa.tools.github.orcloop.__main__:main