sase-github 0.2.4__tar.gz → 0.2.5__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.
- sase_github-0.2.5/.release-please-manifest.json +3 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/CHANGELOG.md +7 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/CLAUDE.md +1 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/PKG-INFO +1 -1
- {sase_github-0.2.4 → sase_github-0.2.5}/README.md +4 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/docs/architecture.md +5 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/pyproject.toml +4 -1
- sase_github-0.2.5/src/sase_github/task_types.py +46 -0
- sase_github-0.2.5/tests/test_task_types.py +45 -0
- sase_github-0.2.4/.release-please-manifest.json +0 -3
- {sase_github-0.2.4 → sase_github-0.2.5}/.github/workflows/ci.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/.github/workflows/pr-title.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/.github/workflows/publish.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/.sase_beads/beads.db +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/.sase_beads/config.json +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/.sase_beads/issues.jsonl +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/Justfile +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/LICENSE +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/docs/configuration.md +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/docs/xprompts.md +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/release-please-config.json +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/__init__.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/config.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/default_config.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/errors.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/plugin.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/scripts/__init__.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/scripts/gh_setup.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/scripts/new_pr_desc_get_context.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/workspace_plugin.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/gh.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/new_pr_desc.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/pr_diff.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/prdd.yml +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/__init__.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_ci_install_contract.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_config.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_github_issues.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_github_plugin.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_github_pull_requests.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_submit_with_recorded_pr.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_workspace_plugin.py +0 -0
- {sase_github-0.2.4 → sase_github-0.2.5}/uv.lock +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.5](https://github.com/sase-org/sase-github/compare/v0.2.4...v0.2.5) (2026-08-18)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* register agent-uncreatable github task type ([a68b879](https://github.com/sase-org/sase-github/commit/a68b879ba9a8a0ca5dc6f253a0c66563f9a90d4b))
|
|
9
|
+
|
|
3
10
|
## [0.2.4](https://github.com/sase-org/sase-github/compare/v0.2.3...v0.2.4) (2026-08-11)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -15,6 +15,7 @@ just check # lint + test
|
|
|
15
15
|
|
|
16
16
|
## Architecture
|
|
17
17
|
- `src/sase_github/plugin.py` — GitHubPlugin class (extends `sase.vcs_provider.plugins._git_common.GitCommon`)
|
|
18
|
+
- `src/sase_github/task_types.py` — agent-uncreatable `github` task type via `sase_task_types`
|
|
18
19
|
- `src/sase_github/xprompts/` — GitHub workflow YAML files discovered via `sase_xprompts` entry point
|
|
19
20
|
- Depends on `sase>=0.1.3` for base classes, hookspec, and script modules
|
|
20
21
|
|
|
@@ -76,6 +76,10 @@ Requires `sase>=0.11.0` as a dependency. For GitHub Enterprise Server or self-ho
|
|
|
76
76
|
- **`get_github_orgs()`** — Reads `github_orgs` from sase config to determine SSH vs HTTPS clone URLs for
|
|
77
77
|
organizations/users with push access, and to seed local `#gh:` owner completion
|
|
78
78
|
|
|
79
|
+
### Task type
|
|
80
|
+
|
|
81
|
+
- **`github`** — Agent-uncreatable task type registered through the `sase_task_types` entry point. Beads of this type are created by SASE's external issue mirror, not by agents.
|
|
82
|
+
|
|
79
83
|
### XPrompts
|
|
80
84
|
|
|
81
85
|
| XPrompt | Description |
|
|
@@ -14,6 +14,11 @@ Registered in `pyproject.toml`:
|
|
|
14
14
|
| `sase_workspace:github` | `GitHubWorkspacePlugin` | Workspace orchestration (ref resolution, submission, mail prep) |
|
|
15
15
|
| `sase_xprompts:sase_github` | — | Makes `#gh`, `#new_pr_desc`, `#prdd` xprompts discoverable |
|
|
16
16
|
| `sase_config:sase_github` | — | Contributes `default_config.yml` to the sase config chain |
|
|
17
|
+
| `sase_task_types:github` | `GITHUB_TASK_TYPES` | Agent-uncreatable `github` task type for mirrored issues |
|
|
18
|
+
|
|
19
|
+
### GitHub task type (`task_types.py`)
|
|
20
|
+
|
|
21
|
+
Registers one `sase_task_types` spec: `task_type: github`, `agent_creatable: false`, no extra fields. Agents never create this type. SASE's external issue mirror stamps it on new mirrored task beads. This is not an `IssueType`; mirrored issues stay `task` beads with an `external_ref`.
|
|
17
22
|
|
|
18
23
|
### GitHubPlugin (`plugin.py`)
|
|
19
24
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sase-github"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.5"
|
|
8
8
|
description = "GitHub VCS plugin for sase"
|
|
9
9
|
requires-python = ">=3.12"
|
|
10
10
|
license = "MIT"
|
|
@@ -32,6 +32,9 @@ sase_github = "sase_github"
|
|
|
32
32
|
[project.entry-points."sase_xprompts"]
|
|
33
33
|
sase_github = "sase_github"
|
|
34
34
|
|
|
35
|
+
[project.entry-points."sase_task_types"]
|
|
36
|
+
github = "sase_github.task_types:GITHUB_TASK_TYPES"
|
|
37
|
+
|
|
35
38
|
[tool.hatch.build.targets.wheel]
|
|
36
39
|
packages = ["src/sase_github"]
|
|
37
40
|
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Declarative ``github`` task-type spec for the sase-github plugin.
|
|
2
|
+
|
|
3
|
+
Mirrored GitHub issues are already ``task`` beads created by sase's external
|
|
4
|
+
issue mirror. This spec stamps that origin as an agent-uncreatable catalog
|
|
5
|
+
member; it does not add an ``IssueType.GITHUB``.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from collections.abc import Mapping
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from sase.task_types import hookimpl
|
|
14
|
+
|
|
15
|
+
_TASK_TYPE_SPEC_SCHEMA_VERSION = 1
|
|
16
|
+
|
|
17
|
+
GITHUB_TASK_TYPE = "github"
|
|
18
|
+
|
|
19
|
+
GITHUB_TASK_TYPE_SPEC: Mapping[str, Any] = {
|
|
20
|
+
"schema_version": _TASK_TYPE_SPEC_SCHEMA_VERSION,
|
|
21
|
+
"task_type": GITHUB_TASK_TYPE,
|
|
22
|
+
"label": "GitHub",
|
|
23
|
+
"summary": (
|
|
24
|
+
"A GitHub issue mirrored into a task bead; agents never create this type."
|
|
25
|
+
),
|
|
26
|
+
"when_to_use": (
|
|
27
|
+
"Agents never create this type. Beads of it are created by the "
|
|
28
|
+
"external issue mirror when it covers a GitHub issue. Do not file "
|
|
29
|
+
"one from `sase bead create` or `/sase_new_task`."
|
|
30
|
+
),
|
|
31
|
+
"glyph": "⑂",
|
|
32
|
+
"accent_color": "#B2B2B2",
|
|
33
|
+
"agent_creatable": False,
|
|
34
|
+
"fields": [],
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class _GitHubTaskTypes:
|
|
39
|
+
"""Pluggy hookimpl exposing the ``github`` task-type spec."""
|
|
40
|
+
|
|
41
|
+
@hookimpl
|
|
42
|
+
def task_type_specs(self) -> tuple[Mapping[str, Any], ...]:
|
|
43
|
+
return (GITHUB_TASK_TYPE_SPEC,)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
GITHUB_TASK_TYPES = _GitHubTaskTypes()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Tests for the agent-uncreatable ``github`` task type."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from sase_github.task_types import (
|
|
6
|
+
GITHUB_TASK_TYPE,
|
|
7
|
+
GITHUB_TASK_TYPE_SPEC,
|
|
8
|
+
GITHUB_TASK_TYPES,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_github_task_type_spec_is_agent_uncreatable_with_no_fields() -> None:
|
|
15
|
+
spec = GITHUB_TASK_TYPE_SPEC
|
|
16
|
+
assert spec["task_type"] == GITHUB_TASK_TYPE
|
|
17
|
+
assert spec["label"] == "GitHub"
|
|
18
|
+
assert spec["agent_creatable"] is False
|
|
19
|
+
assert spec["fields"] == []
|
|
20
|
+
assert spec["glyph"] == "⑂"
|
|
21
|
+
assert spec["accent_color"] == "#B2B2B2"
|
|
22
|
+
assert "\n" not in spec["summary"]
|
|
23
|
+
assert len(spec["summary"]) <= 120
|
|
24
|
+
assert len(spec["when_to_use"]) <= 400
|
|
25
|
+
when_to_use = spec["when_to_use"].casefold()
|
|
26
|
+
assert "agents never create this type" in when_to_use
|
|
27
|
+
assert "external issue mirror" in when_to_use
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_github_task_type_hook_returns_the_spec() -> None:
|
|
31
|
+
assert GITHUB_TASK_TYPES.task_type_specs() == (GITHUB_TASK_TYPE_SPEC,)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_github_task_type_spec_validates() -> None:
|
|
35
|
+
from sase.task_types import validate_task_type_spec
|
|
36
|
+
|
|
37
|
+
digest = validate_task_type_spec(dict(GITHUB_TASK_TYPE_SPEC))
|
|
38
|
+
assert len(digest) == 64
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_sase_task_types_entry_point_is_registered() -> None:
|
|
42
|
+
pyproject = (ROOT / "pyproject.toml").read_text()
|
|
43
|
+
assert '[project.entry-points."sase_task_types"]' in pyproject
|
|
44
|
+
assert "github = " in pyproject
|
|
45
|
+
assert "sase_github.task_types:GITHUB_TASK_TYPES" in pyproject
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|