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.
Files changed (43) hide show
  1. sase_github-0.2.5/.release-please-manifest.json +3 -0
  2. {sase_github-0.2.4 → sase_github-0.2.5}/CHANGELOG.md +7 -0
  3. {sase_github-0.2.4 → sase_github-0.2.5}/CLAUDE.md +1 -0
  4. {sase_github-0.2.4 → sase_github-0.2.5}/PKG-INFO +1 -1
  5. {sase_github-0.2.4 → sase_github-0.2.5}/README.md +4 -0
  6. {sase_github-0.2.4 → sase_github-0.2.5}/docs/architecture.md +5 -0
  7. {sase_github-0.2.4 → sase_github-0.2.5}/pyproject.toml +4 -1
  8. sase_github-0.2.5/src/sase_github/task_types.py +46 -0
  9. sase_github-0.2.5/tests/test_task_types.py +45 -0
  10. sase_github-0.2.4/.release-please-manifest.json +0 -3
  11. {sase_github-0.2.4 → sase_github-0.2.5}/.github/workflows/ci.yml +0 -0
  12. {sase_github-0.2.4 → sase_github-0.2.5}/.github/workflows/pr-title.yml +0 -0
  13. {sase_github-0.2.4 → sase_github-0.2.5}/.github/workflows/publish.yml +0 -0
  14. {sase_github-0.2.4 → sase_github-0.2.5}/.sase_beads/beads.db +0 -0
  15. {sase_github-0.2.4 → sase_github-0.2.5}/.sase_beads/config.json +0 -0
  16. {sase_github-0.2.4 → sase_github-0.2.5}/.sase_beads/issues.jsonl +0 -0
  17. {sase_github-0.2.4 → sase_github-0.2.5}/Justfile +0 -0
  18. {sase_github-0.2.4 → sase_github-0.2.5}/LICENSE +0 -0
  19. {sase_github-0.2.4 → sase_github-0.2.5}/docs/configuration.md +0 -0
  20. {sase_github-0.2.4 → sase_github-0.2.5}/docs/xprompts.md +0 -0
  21. {sase_github-0.2.4 → sase_github-0.2.5}/release-please-config.json +0 -0
  22. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/__init__.py +0 -0
  23. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/config.py +0 -0
  24. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/default_config.yml +0 -0
  25. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/errors.py +0 -0
  26. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/plugin.py +0 -0
  27. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/scripts/__init__.py +0 -0
  28. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/scripts/gh_setup.py +0 -0
  29. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/scripts/new_pr_desc_get_context.py +0 -0
  30. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/workspace_plugin.py +0 -0
  31. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/gh.yml +0 -0
  32. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/new_pr_desc.yml +0 -0
  33. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/pr_diff.yml +0 -0
  34. {sase_github-0.2.4 → sase_github-0.2.5}/src/sase_github/xprompts/prdd.yml +0 -0
  35. {sase_github-0.2.4 → sase_github-0.2.5}/tests/__init__.py +0 -0
  36. {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_ci_install_contract.py +0 -0
  37. {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_config.py +0 -0
  38. {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_github_issues.py +0 -0
  39. {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_github_plugin.py +0 -0
  40. {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_github_pull_requests.py +0 -0
  41. {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_submit_with_recorded_pr.py +0 -0
  42. {sase_github-0.2.4 → sase_github-0.2.5}/tests/test_workspace_plugin.py +0 -0
  43. {sase_github-0.2.4 → sase_github-0.2.5}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.2.5"
3
+ }
@@ -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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sase-github
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: GitHub VCS plugin for sase
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -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.4"
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
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.2.4"
3
- }
File without changes
File without changes
File without changes