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.
- alissa/tools/github/orcloop/__init__.py +15 -0
- alissa/tools/github/orcloop/__main__.py +45 -0
- alissa/tools/github/orcloop/version +1 -0
- alissa/tools/github/orcloop/version.py +46 -0
- alissa_tools_github_orcloop-0.1.0.dist-info/METADATA +62 -0
- alissa_tools_github_orcloop-0.1.0.dist-info/RECORD +9 -0
- alissa_tools_github_orcloop-0.1.0.dist-info/WHEEL +5 -0
- alissa_tools_github_orcloop-0.1.0.dist-info/entry_points.txt +2 -0
- alissa_tools_github_orcloop-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -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 @@
|
|
|
1
|
+
alissa
|