agmh 0.2.0__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 (62) hide show
  1. agmh-0.2.0/.github/ISSUE_TEMPLATE/bug_report.yml +66 -0
  2. agmh-0.2.0/.github/ISSUE_TEMPLATE/config.yml +9 -0
  3. agmh-0.2.0/.github/ISSUE_TEMPLATE/feature_request.yml +41 -0
  4. agmh-0.2.0/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  5. agmh-0.2.0/.github/dependabot.yml +13 -0
  6. agmh-0.2.0/.github/workflows/ci.yml +76 -0
  7. agmh-0.2.0/.github/workflows/publish-pypi.yml +63 -0
  8. agmh-0.2.0/.github/workflows/publish-testpypi.yml +66 -0
  9. agmh-0.2.0/.github/workflows/release-please.yml +65 -0
  10. agmh-0.2.0/.release-please-manifest.json +3 -0
  11. agmh-0.2.0/CHANGELOG.md +46 -0
  12. agmh-0.2.0/CODE_OF_CONDUCT.md +18 -0
  13. agmh-0.2.0/CONTRIBUTING.md +55 -0
  14. agmh-0.2.0/LICENSE +24 -0
  15. agmh-0.2.0/MAINTAINERS.md +22 -0
  16. agmh-0.2.0/MANIFEST.in +17 -0
  17. agmh-0.2.0/PKG-INFO +1575 -0
  18. agmh-0.2.0/README.md +1544 -0
  19. agmh-0.2.0/RELEASING.md +93 -0
  20. agmh-0.2.0/SECURITY.md +54 -0
  21. agmh-0.2.0/SUPPORT.md +26 -0
  22. agmh-0.2.0/config.example.toml +126 -0
  23. agmh-0.2.0/destinations.example.txt +6 -0
  24. agmh-0.2.0/pyproject.toml +49 -0
  25. agmh-0.2.0/release-please-config.json +18 -0
  26. agmh-0.2.0/setup.cfg +4 -0
  27. agmh-0.2.0/sources.example.txt +9 -0
  28. agmh-0.2.0/src/agmh.egg-info/PKG-INFO +1575 -0
  29. agmh-0.2.0/src/agmh.egg-info/SOURCES.txt +60 -0
  30. agmh-0.2.0/src/agmh.egg-info/dependency_links.txt +1 -0
  31. agmh-0.2.0/src/agmh.egg-info/entry_points.txt +2 -0
  32. agmh-0.2.0/src/agmh.egg-info/requires.txt +7 -0
  33. agmh-0.2.0/src/agmh.egg-info/top_level.txt +1 -0
  34. agmh-0.2.0/src/anti_gh_ms_hysteria/__init__.py +4 -0
  35. agmh-0.2.0/src/anti_gh_ms_hysteria/__main__.py +6 -0
  36. agmh-0.2.0/src/anti_gh_ms_hysteria/cli.py +413 -0
  37. agmh-0.2.0/src/anti_gh_ms_hysteria/config.py +521 -0
  38. agmh-0.2.0/src/anti_gh_ms_hysteria/destinations/__init__.py +27 -0
  39. agmh-0.2.0/src/anti_gh_ms_hysteria/destinations/base.py +102 -0
  40. agmh-0.2.0/src/anti_gh_ms_hysteria/destinations/bitbucket.py +66 -0
  41. agmh-0.2.0/src/anti_gh_ms_hysteria/destinations/forgejo.py +80 -0
  42. agmh-0.2.0/src/anti_gh_ms_hysteria/destinations/github.py +76 -0
  43. agmh-0.2.0/src/anti_gh_ms_hysteria/destinations/gitlab.py +96 -0
  44. agmh-0.2.0/src/anti_gh_ms_hysteria/destinations/sourcehut.py +98 -0
  45. agmh-0.2.0/src/anti_gh_ms_hysteria/git_ops.py +310 -0
  46. agmh-0.2.0/src/anti_gh_ms_hysteria/http.py +251 -0
  47. agmh-0.2.0/src/anti_gh_ms_hysteria/models.py +187 -0
  48. agmh-0.2.0/src/anti_gh_ms_hysteria/notifications.py +325 -0
  49. agmh-0.2.0/src/anti_gh_ms_hysteria/py.typed +1 -0
  50. agmh-0.2.0/src/anti_gh_ms_hysteria/runner.py +771 -0
  51. agmh-0.2.0/src/anti_gh_ms_hysteria/sources/__init__.py +68 -0
  52. agmh-0.2.0/src/anti_gh_ms_hysteria/sources/base.py +50 -0
  53. agmh-0.2.0/src/anti_gh_ms_hysteria/sources/bitbucket.py +80 -0
  54. agmh-0.2.0/src/anti_gh_ms_hysteria/sources/forgejo.py +101 -0
  55. agmh-0.2.0/src/anti_gh_ms_hysteria/sources/github.py +107 -0
  56. agmh-0.2.0/src/anti_gh_ms_hysteria/sources/gitlab.py +94 -0
  57. agmh-0.2.0/src/anti_gh_ms_hysteria/sources/sourcehut.py +108 -0
  58. agmh-0.2.0/src/anti_gh_ms_hysteria/state.py +69 -0
  59. agmh-0.2.0/src/anti_gh_ms_hysteria/tokens.py +65 -0
  60. agmh-0.2.0/src/anti_gh_ms_hysteria/ui.py +68 -0
  61. agmh-0.2.0/src/anti_gh_ms_hysteria/utils.py +128 -0
  62. agmh-0.2.0/tests/test_config_and_utils.py +1112 -0
@@ -0,0 +1,66 @@
1
+ name: Bug report
2
+ description: Report a reproducible AGMH bug.
3
+ title: "[Bug]: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: textarea
7
+ id: summary
8
+ attributes:
9
+ label: Summary
10
+ description: What went wrong?
11
+ validations:
12
+ required: true
13
+ - type: input
14
+ id: version
15
+ attributes:
16
+ label: AGMH version or commit
17
+ placeholder: "0.1.0 or commit SHA"
18
+ validations:
19
+ required: true
20
+ - type: input
21
+ id: python
22
+ attributes:
23
+ label: Python version
24
+ placeholder: "python --version"
25
+ validations:
26
+ required: true
27
+ - type: input
28
+ id: os
29
+ attributes:
30
+ label: Operating system
31
+ placeholder: "Ubuntu 24.04, Debian 12, Windows 11, etc."
32
+ validations:
33
+ required: true
34
+ - type: textarea
35
+ id: command
36
+ attributes:
37
+ label: Command
38
+ description: Paste the command you ran.
39
+ render: shell
40
+ validations:
41
+ required: true
42
+ - type: textarea
43
+ id: config
44
+ attributes:
45
+ label: Sanitized config
46
+ description: Remove tokens, webhook URLs, private repository names, and credentialized URLs.
47
+ render: toml
48
+ - type: textarea
49
+ id: logs
50
+ attributes:
51
+ label: Sanitized logs or traceback
52
+ description: Remove secrets before posting.
53
+ render: text
54
+ - type: textarea
55
+ id: expected
56
+ attributes:
57
+ label: Expected behavior
58
+ validations:
59
+ required: true
60
+ - type: textarea
61
+ id: actual
62
+ attributes:
63
+ label: Actual behavior
64
+ validations:
65
+ required: true
66
+
@@ -0,0 +1,9 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Security report
4
+ url: mailto:root@haltman.io
5
+ about: Do not open public security issues. Email root@haltman.io.
6
+ - name: Repository
7
+ url: https://github.com/haltman-io/agmh
8
+ about: Main AGMH repository.
9
+
@@ -0,0 +1,41 @@
1
+ name: Feature request
2
+ description: Suggest a focused AGMH improvement.
3
+ title: "[Feature]: "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: textarea
7
+ id: problem
8
+ attributes:
9
+ label: Problem
10
+ description: What workflow is hard or missing?
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: proposal
15
+ attributes:
16
+ label: Proposal
17
+ description: What should AGMH do?
18
+ validations:
19
+ required: true
20
+ - type: textarea
21
+ id: alternatives
22
+ attributes:
23
+ label: Alternatives considered
24
+ - type: dropdown
25
+ id: area
26
+ attributes:
27
+ label: Area
28
+ options:
29
+ - sources
30
+ - destinations
31
+ - local mirror
32
+ - remote mirror
33
+ - watching
34
+ - notifications
35
+ - packaging
36
+ - documentation
37
+ - type: textarea
38
+ id: notes
39
+ attributes:
40
+ label: Additional context
41
+
@@ -0,0 +1,22 @@
1
+ ## Summary
2
+
3
+ -
4
+
5
+ ## Validation
6
+
7
+ - [ ] `python -m compileall -q src tests`
8
+ - [ ] `PYTHONPATH=src python -m unittest discover -s tests -v`
9
+ - [ ] `python -m pip install -e . --dry-run --no-deps`
10
+
11
+ ## Checklist
12
+
13
+ - [ ] User-facing behavior is documented.
14
+ - [ ] Secrets are not logged or exposed.
15
+ - [ ] Source/destination terminology remains consistent.
16
+ - [ ] `CHANGELOG.md` is updated when behavior changes.
17
+
18
+ ## Security
19
+
20
+ Do not include private vulnerability details in this pull request. Follow
21
+ `SECURITY.md` instead.
22
+
@@ -0,0 +1,13 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+ - package-ecosystem: github-actions
9
+ directory: /
10
+ schedule:
11
+ interval: weekly
12
+ open-pull-requests-limit: 5
13
+
@@ -0,0 +1,76 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: ci-${{ github.workflow }}-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ tests:
18
+ name: Python ${{ matrix.python-version }}
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
24
+ steps:
25
+ - name: Checkout
26
+ uses: actions/checkout@v4
27
+
28
+ - name: Set up Python
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: ${{ matrix.python-version }}
32
+ cache: pip
33
+
34
+ - name: Install package
35
+ run: |
36
+ python -m pip install -U pip
37
+ python -m pip install -e ".[tui,dev]"
38
+
39
+ - name: Compile
40
+ run: python -m compileall -q src tests
41
+
42
+ - name: Test
43
+ run: python -m unittest discover -s tests -v
44
+
45
+ package:
46
+ name: Package
47
+ runs-on: ubuntu-latest
48
+ needs: tests
49
+ steps:
50
+ - name: Checkout
51
+ uses: actions/checkout@v4
52
+
53
+ - name: Set up Python
54
+ uses: actions/setup-python@v5
55
+ with:
56
+ python-version: "3.14"
57
+ cache: pip
58
+
59
+ - name: Install build tooling
60
+ run: |
61
+ python -m pip install -U pip
62
+ python -m pip install ".[dev]"
63
+
64
+ - name: Build distributions
65
+ run: python -m build
66
+
67
+ - name: Check distributions
68
+ run: python -m twine check --strict dist/*
69
+
70
+ - name: Upload distributions
71
+ uses: actions/upload-artifact@v4
72
+ with:
73
+ name: python-distributions
74
+ path: dist/
75
+ if-no-files-found: error
76
+
@@ -0,0 +1,63 @@
1
+ name: Publish PyPI Manually
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ concurrency:
10
+ group: publish-pypi-${{ github.ref }}
11
+ cancel-in-progress: false
12
+
13
+ jobs:
14
+ build:
15
+ name: Build distributions
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Set up Python
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: "3.14"
25
+ cache: pip
26
+
27
+ - name: Install build tooling
28
+ run: |
29
+ python -m pip install -U pip
30
+ python -m pip install ".[dev]"
31
+
32
+ - name: Build distributions
33
+ run: python -m build
34
+
35
+ - name: Check distributions
36
+ run: python -m twine check --strict dist/*
37
+
38
+ - name: Upload distributions
39
+ uses: actions/upload-artifact@v4
40
+ with:
41
+ name: python-distributions
42
+ path: dist/
43
+ if-no-files-found: error
44
+
45
+ publish:
46
+ name: Publish to PyPI
47
+ runs-on: ubuntu-latest
48
+ needs: build
49
+ environment:
50
+ name: pypi
51
+ url: https://pypi.org/project/agmh/
52
+ permissions:
53
+ contents: read
54
+ id-token: write
55
+ steps:
56
+ - name: Download distributions
57
+ uses: actions/download-artifact@v4
58
+ with:
59
+ name: python-distributions
60
+ path: dist/
61
+
62
+ - name: Publish distributions to PyPI
63
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,66 @@
1
+ name: Publish TestPyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ concurrency:
10
+ group: publish-testpypi-${{ github.ref }}
11
+ cancel-in-progress: false
12
+
13
+ jobs:
14
+ build:
15
+ name: Build distributions
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Set up Python
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: "3.14"
25
+ cache: pip
26
+
27
+ - name: Install build tooling
28
+ run: |
29
+ python -m pip install -U pip
30
+ python -m pip install ".[dev]"
31
+
32
+ - name: Build distributions
33
+ run: python -m build
34
+
35
+ - name: Check distributions
36
+ run: python -m twine check --strict dist/*
37
+
38
+ - name: Upload distributions
39
+ uses: actions/upload-artifact@v4
40
+ with:
41
+ name: python-distributions
42
+ path: dist/
43
+ if-no-files-found: error
44
+
45
+ publish:
46
+ name: Publish to TestPyPI
47
+ runs-on: ubuntu-latest
48
+ needs: build
49
+ environment:
50
+ name: testpypi
51
+ url: https://test.pypi.org/project/agmh/
52
+ permissions:
53
+ contents: read
54
+ id-token: write
55
+ steps:
56
+ - name: Download distributions
57
+ uses: actions/download-artifact@v4
58
+ with:
59
+ name: python-distributions
60
+ path: dist/
61
+
62
+ - name: Publish distributions to TestPyPI
63
+ uses: pypa/gh-action-pypi-publish@release/v1
64
+ with:
65
+ repository-url: https://test.pypi.org/legacy/
66
+
@@ -0,0 +1,65 @@
1
+ name: Release Please
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+
7
+ permissions:
8
+ contents: write
9
+ pull-requests: write
10
+ issues: write
11
+
12
+ concurrency:
13
+ group: release-please-${{ github.ref }}
14
+ cancel-in-progress: false
15
+
16
+ jobs:
17
+ release-please:
18
+ runs-on: ubuntu-latest
19
+ outputs:
20
+ release_created: ${{ steps.release.outputs.release_created }}
21
+ tag_name: ${{ steps.release.outputs.tag_name }}
22
+ steps:
23
+ - name: Create or update release PR
24
+ id: release
25
+ uses: googleapis/release-please-action@v4
26
+ with:
27
+ config-file: release-please-config.json
28
+ manifest-file: .release-please-manifest.json
29
+
30
+ publish-pypi:
31
+ name: Publish to PyPI
32
+ runs-on: ubuntu-latest
33
+ needs: release-please
34
+ if: ${{ needs.release-please.outputs.release_created == 'true' }}
35
+ environment:
36
+ name: pypi
37
+ url: https://pypi.org/project/agmh/
38
+ permissions:
39
+ contents: read
40
+ id-token: write
41
+ steps:
42
+ - name: Checkout release tag
43
+ uses: actions/checkout@v4
44
+ with:
45
+ ref: ${{ needs.release-please.outputs.tag_name }}
46
+
47
+ - name: Set up Python
48
+ uses: actions/setup-python@v5
49
+ with:
50
+ python-version: "3.14"
51
+ cache: pip
52
+
53
+ - name: Install build tooling
54
+ run: |
55
+ python -m pip install -U pip
56
+ python -m pip install ".[dev]"
57
+
58
+ - name: Build distributions
59
+ run: python -m build
60
+
61
+ - name: Check distributions
62
+ run: python -m twine check --strict dist/*
63
+
64
+ - name: Publish distributions to PyPI
65
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.2.0"
3
+ }
@@ -0,0 +1,46 @@
1
+ # Changelog
2
+
3
+ All notable project changes should be documented in this file.
4
+
5
+ This project uses human-readable release notes grouped by version. Dates use
6
+ `YYYY-MM-DD`.
7
+
8
+ ## [0.2.0](https://github.com/haltman-io/agmh/compare/v0.1.0...v0.2.0) (2026-06-13)
9
+
10
+
11
+ ### Features
12
+
13
+ * add notification system with webhooks for events ([174db38](https://github.com/haltman-io/agmh/commit/174db38ae36085ec69bf55d5e6ddc59a7faa259c))
14
+ * enhance project structure with CI workflows, release automation, and packaging improvements ([dceb257](https://github.com/haltman-io/agmh/commit/dceb2573c32944a04ef2af54ee14cfeb772ceb34))
15
+ * enhance project structure with CI workflows, release automation… ([19e3806](https://github.com/haltman-io/agmh/commit/19e3806bb27dce7c99b8769ecb2c899c48bd9746))
16
+ * update project metadata, add templates, and enhance documentation ([5ecef83](https://github.com/haltman-io/agmh/commit/5ecef83d860032a08cf809337ae267b883e76b8b))
17
+
18
+ ## [Unreleased]
19
+
20
+ ### Added
21
+
22
+ - Security reporting policy.
23
+ - Contribution and support guidelines.
24
+ - Project maintenance files and GitHub issue/PR templates.
25
+ - PyPI/TestPyPI publishing workflows using Trusted Publishing.
26
+ - Release Please configuration for automated version bumps, changelog updates,
27
+ Git tags, and GitHub Releases.
28
+ - CI workflow for Python tests and distribution checks.
29
+
30
+ ### Changed
31
+
32
+ - Package metadata now identifies `extencil <extencil@segfault.net>` as author
33
+ and maintainer.
34
+
35
+ ## [0.1.0] - 2026-06-13
36
+
37
+ ### Added
38
+
39
+ - Initial AGMH CLI package.
40
+ - Repository discovery from GitHub, GitLab, Forgejo/Codeberg, Bitbucket, and
41
+ SourceHut sources.
42
+ - Local mirror, remote mirror, full mirror, and watching workflows.
43
+ - Destination support for GitHub, GitLab, Forgejo/Codeberg, Bitbucket, and
44
+ SourceHut.
45
+ - Optional marker commits before remote mirrors.
46
+ - Optional webhook notifications for generic endpoints, Discord, and Telegram.
@@ -0,0 +1,18 @@
1
+ # Code Of Conduct
2
+
3
+ AGMH is a direct, security-oriented project. Keep collaboration technical,
4
+ specific, and useful.
5
+
6
+ Expected behavior:
7
+
8
+ - Stay focused on the work.
9
+ - Be precise when reporting bugs or reviewing code.
10
+ - Assume reports may involve stressful incidents and handle them seriously.
11
+ - Do not post secrets, private repository data, or personal information.
12
+ - Do not harass, threaten, spam, or derail maintainers or contributors.
13
+
14
+ Unacceptable behavior may result in closed issues, removed comments, blocked
15
+ accounts, or private handling by maintainers.
16
+
17
+ For private conduct or abuse reports, contact `root@haltman.io`.
18
+
@@ -0,0 +1,55 @@
1
+ # Contributing
2
+
3
+ AGMH accepts focused changes that keep the tool reliable, scriptable, and easy
4
+ to audit.
5
+
6
+ ## Development Setup
7
+
8
+ ```bash
9
+ python -m venv .venv
10
+ . .venv/bin/activate
11
+ python -m pip install -U pip
12
+ python -m pip install -e ".[tui,dev]"
13
+ ```
14
+
15
+ On Windows PowerShell:
16
+
17
+ ```powershell
18
+ python -m venv .venv
19
+ .\.venv\Scripts\Activate.ps1
20
+ python -m pip install -U pip
21
+ python -m pip install -e ".[tui,dev]"
22
+ ```
23
+
24
+ ## Local Checks
25
+
26
+ Run these before sending changes:
27
+
28
+ ```bash
29
+ python -m compileall -q src tests
30
+ PYTHONPATH=src python -m unittest discover -s tests -v
31
+ python -m build
32
+ python -m twine check --strict dist/*
33
+ python -m pip install -e . --dry-run --no-deps
34
+ ```
35
+
36
+ ## Change Guidelines
37
+
38
+ - Keep source/destination terminology precise.
39
+ - Do not reintroduce legacy `aghm` names.
40
+ - Do not log secrets, tokens, webhook URLs, or credentialized Git URLs.
41
+ - Prefer small, reviewable changes.
42
+ - Add focused tests for behavior changes.
43
+ - Update `README.md`, `config.example.toml`, and `CHANGELOG.md` when user-facing
44
+ behavior changes.
45
+ - Use Conventional Commit messages so Release Please can generate releases and
46
+ changelog entries.
47
+
48
+ ## Security Issues
49
+
50
+ Do not report security issues through public issues or pull requests. Follow
51
+ `SECURITY.md`.
52
+
53
+ ## Releases
54
+
55
+ See `RELEASING.md`.
agmh-0.2.0/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <https://unlicense.org>
@@ -0,0 +1,22 @@
1
+ # Maintainers
2
+
3
+ ## Current Maintainer
4
+
5
+ - extencil <extencil@segfault.net>
6
+
7
+ ## Repository
8
+
9
+ - https://github.com/haltman-io/agmh
10
+
11
+ ## Security Contact
12
+
13
+ - root@haltman.io
14
+
15
+ ## Maintenance Notes
16
+
17
+ - Keep package metadata aligned with `pyproject.toml`.
18
+ - Keep generated examples aligned with `config.example.toml`.
19
+ - Keep security-sensitive changes covered by tests.
20
+ - Keep release notes in `CHANGELOG.md`.
21
+ - Keep `RELEASING.md` and GitHub Actions publishing workflows aligned with PyPI
22
+ Trusted Publishing settings.
agmh-0.2.0/MANIFEST.in ADDED
@@ -0,0 +1,17 @@
1
+ include README.md
2
+ include LICENSE
3
+ include CHANGELOG.md
4
+ include SECURITY.md
5
+ include CONTRIBUTING.md
6
+ include SUPPORT.md
7
+ include CODE_OF_CONDUCT.md
8
+ include MAINTAINERS.md
9
+ include RELEASING.md
10
+ include config.example.toml
11
+ include sources.example.txt
12
+ include destinations.example.txt
13
+ include .release-please-manifest.json
14
+ include release-please-config.json
15
+ recursive-include .github *.md *.yml
16
+ recursive-include src *.typed
17
+ recursive-include tests *.py