android-watcher 1.0.1__tar.gz → 1.0.2__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 (140) hide show
  1. {android_watcher-1.0.1 → android_watcher-1.0.2}/.github/workflows/release.yml +15 -6
  2. android_watcher-1.0.2/Formula/android-watcher.rb +110 -0
  3. {android_watcher-1.0.1 → android_watcher-1.0.2}/PKG-INFO +1 -1
  4. {android_watcher-1.0.1 → android_watcher-1.0.2}/pyproject.toml +1 -1
  5. {android_watcher-1.0.1 → android_watcher-1.0.2}/uv.lock +1 -1
  6. android_watcher-1.0.1/Formula/android-watcher.rb +0 -27
  7. {android_watcher-1.0.1 → android_watcher-1.0.2}/.editorconfig +0 -0
  8. {android_watcher-1.0.1 → android_watcher-1.0.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  9. {android_watcher-1.0.1 → android_watcher-1.0.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  10. {android_watcher-1.0.1 → android_watcher-1.0.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  11. {android_watcher-1.0.1 → android_watcher-1.0.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  12. {android_watcher-1.0.1 → android_watcher-1.0.2}/.github/workflows/ci.yml +0 -0
  13. {android_watcher-1.0.1 → android_watcher-1.0.2}/.github/workflows/seed.yml +0 -0
  14. {android_watcher-1.0.1 → android_watcher-1.0.2}/.gitignore +0 -0
  15. {android_watcher-1.0.1 → android_watcher-1.0.2}/.pre-commit-config.yaml +0 -0
  16. {android_watcher-1.0.1 → android_watcher-1.0.2}/CLAUDE.md +0 -0
  17. {android_watcher-1.0.1 → android_watcher-1.0.2}/CODE_OF_CONDUCT.md +0 -0
  18. {android_watcher-1.0.1 → android_watcher-1.0.2}/CONTRIBUTING.md +0 -0
  19. {android_watcher-1.0.1 → android_watcher-1.0.2}/LICENSE +0 -0
  20. {android_watcher-1.0.1 → android_watcher-1.0.2}/README.md +0 -0
  21. {android_watcher-1.0.1 → android_watcher-1.0.2}/SECURITY.md +0 -0
  22. {android_watcher-1.0.1 → android_watcher-1.0.2}/assets/logo.svg +0 -0
  23. {android_watcher-1.0.1 → android_watcher-1.0.2}/docs/scheduling.md +0 -0
  24. {android_watcher-1.0.1 → android_watcher-1.0.2}/scripts/build_seed.py +0 -0
  25. {android_watcher-1.0.1 → android_watcher-1.0.2}/scripts/verify_catalog.py +0 -0
  26. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/__init__.py +0 -0
  27. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/catalog/__init__.py +0 -0
  28. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/catalog/catalog.toml +0 -0
  29. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/cli.py +0 -0
  30. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/config.py +0 -0
  31. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/detect/__init__.py +0 -0
  32. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/detect/_normalize.py +0 -0
  33. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/detect/android_sitemap.py +0 -0
  34. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/detect/base.py +0 -0
  35. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/detect/content.py +0 -0
  36. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/detect/feed.py +0 -0
  37. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/detect/sitemap.py +0 -0
  38. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/doctor.py +0 -0
  39. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/fetch.py +0 -0
  40. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/group.py +0 -0
  41. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/lock.py +0 -0
  42. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/models.py +0 -0
  43. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/__init__.py +0 -0
  44. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/base.py +0 -0
  45. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/desktop.py +0 -0
  46. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/email.py +0 -0
  47. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/html.py +0 -0
  48. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/render.py +0 -0
  49. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/slack.py +0 -0
  50. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/notify/telegram.py +0 -0
  51. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/rank.py +0 -0
  52. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/registry.py +0 -0
  53. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/run.py +0 -0
  54. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/schedule.py +0 -0
  55. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/seed/__init__.py +0 -0
  56. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/seed/seed.sql.gz +0 -0
  57. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/store.py +0 -0
  58. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/triage/__init__.py +0 -0
  59. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/triage/base.py +0 -0
  60. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/triage/claude_cli.py +0 -0
  61. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/triage/noop.py +0 -0
  62. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/tui/__init__.py +0 -0
  63. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/tui/app.py +0 -0
  64. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/tui/configio.py +0 -0
  65. {android_watcher-1.0.1 → android_watcher-1.0.2}/src/android_watcher/tui/screens.py +0 -0
  66. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/conftest.py +0 -0
  67. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/__init__.py +0 -0
  68. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_android_sitemap.py +0 -0
  69. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_base.py +0 -0
  70. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_confirm_shared.py +0 -0
  71. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_content.py +0 -0
  72. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_feed.py +0 -0
  73. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_normalize.py +0 -0
  74. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_registry_autoload.py +0 -0
  75. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_registry_resolution.py +0 -0
  76. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/detect/test_sitemap.py +0 -0
  77. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/claude_cli_envelope.json +0 -0
  78. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/content_after_chrome_only.html +0 -0
  79. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/content_after_real_change.html +0 -0
  80. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/content_before.html +0 -0
  81. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/content_js_shell.html +0 -0
  82. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/feed_guid_reuse.xml +0 -0
  83. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/feed_initial.xml +0 -0
  84. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/feed_updated_summary.xml +0 -0
  85. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/schedule/android-watcher.service +0 -0
  86. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/schedule/android-watcher.timer +0 -0
  87. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/schedule/launchd_daily.plist +0 -0
  88. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/sitemap_index.xml +0 -0
  89. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/sitemap_shard0.xml +0 -0
  90. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/sitemap_shard_i18n.xml +0 -0
  91. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/fixtures/sitemap_simple.xml +0 -0
  92. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/__init__.py +0 -0
  93. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/snapshots/normal_email.html +0 -0
  94. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/snapshots/normal_email.txt +0 -0
  95. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/snapshots/normal_slack.json +0 -0
  96. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/test_base.py +0 -0
  97. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/test_desktop.py +0 -0
  98. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/test_email.py +0 -0
  99. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/test_html.py +0 -0
  100. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/test_render.py +0 -0
  101. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/test_slack.py +0 -0
  102. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/notify/test_telegram.py +0 -0
  103. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/run/__init__.py +0 -0
  104. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/run/test_detect_and_persist.py +0 -0
  105. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/run/test_run_once.py +0 -0
  106. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_catalog.py +0 -0
  107. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_catalog_data.py +0 -0
  108. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_cli.py +0 -0
  109. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_cli_schedule.py +0 -0
  110. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_config.py +0 -0
  111. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_configio.py +0 -0
  112. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_configio_custom_source_roundtrip.py +0 -0
  113. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_contributing_docs.py +0 -0
  114. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_docs_scheduling.py +0 -0
  115. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_doctor.py +0 -0
  116. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_fetch.py +0 -0
  117. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_group.py +0 -0
  118. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_homebrew_formula.py +0 -0
  119. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_lock.py +0 -0
  120. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_models.py +0 -0
  121. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_packaging.py +0 -0
  122. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_rank.py +0 -0
  123. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_readme_disclosures.py +0 -0
  124. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_registry.py +0 -0
  125. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_release_workflow.py +0 -0
  126. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_schedule_crontab.py +0 -0
  127. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_schedule_install.py +0 -0
  128. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_schedule_plist.py +0 -0
  129. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_schedule_status.py +0 -0
  130. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_schedule_systemd.py +0 -0
  131. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_seed.py +0 -0
  132. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_seed_workflow.py +0 -0
  133. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_store.py +0 -0
  134. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_tui_smoke.py +0 -0
  135. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/test_verify_catalog_smoke.py +0 -0
  136. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/triage/__init__.py +0 -0
  137. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/triage/test_base.py +0 -0
  138. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/triage/test_claude_cli.py +0 -0
  139. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/triage/test_claude_cli_prompt.py +0 -0
  140. {android_watcher-1.0.1 → android_watcher-1.0.2}/tests/triage/test_noop.py +0 -0
@@ -98,11 +98,11 @@ jobs:
98
98
  - name: Set up Homebrew
99
99
  uses: Homebrew/actions/setup-homebrew@master
100
100
 
101
- # Best-effort and non-blocking: `brew update-python-resources` can fail to
102
- # resolve a same-day PyPI upload (its reproducibility cutoff predates the
103
- # publish) and requires a tap on newer Homebrew. Never let that fail the
104
- # release; regenerate the resource blocks out-of-band once PyPI indexing
105
- # settles, then commit the refreshed formula.
101
+ # Best-effort and non-blocking. `brew update-python-resources` refuses a loose
102
+ # formula file, so it is staged inside a throwaway local tap below. It can
103
+ # still fail to resolve a same-day PyPI upload, whose publish postdates
104
+ # Homebrew's reproducibility cutoff. Never let that fail the release;
105
+ # regenerate the resource blocks out-of-band when it does, then commit.
106
106
  - name: Update Homebrew formula
107
107
  continue-on-error: true
108
108
  run: |
@@ -133,7 +133,16 @@ jobs:
133
133
  open(p, "w").write(s)
134
134
  PY
135
135
  # Regenerate every pinned dependency `resource` block against this release.
136
- brew update-python-resources Formula/android-watcher.rb
136
+ # update-python-resources only operates on a formula inside a tap, so stage
137
+ # it in a throwaway local tap, regenerate there, then copy the result back.
138
+ TAP_DIR="$(brew --repository)/Library/Taps/local/homebrew-awtmp"
139
+ rm -rf "$TAP_DIR" && mkdir -p "$TAP_DIR/Formula"
140
+ git -C "$TAP_DIR" init -q
141
+ git -C "$TAP_DIR" -c user.email=ci@local -c user.name=ci commit -q --allow-empty -m init
142
+ cp Formula/android-watcher.rb "$TAP_DIR/Formula/android-watcher.rb"
143
+ brew update-python-resources local/awtmp/android-watcher
144
+ cp "$TAP_DIR/Formula/android-watcher.rb" Formula/android-watcher.rb
145
+ rm -rf "$TAP_DIR"
137
146
  git add Formula/android-watcher.rb
138
147
  git commit -m "chore: update homebrew formula for v${VERSION}"
139
148
  git push origin HEAD:main
@@ -0,0 +1,110 @@
1
+ class AndroidWatcher < Formula
2
+ include Language::Python::Virtualenv
3
+
4
+ desc "Self-hosted CLI that watches Google's Android sites and delivers AI-triaged digests"
5
+ homepage "https://github.com/krayong/android-watcher"
6
+ # url + sha256 point at the PyPI sdist for the released version. The release
7
+ # workflow rewrites both on every version bump, then regenerates the `resource`
8
+ # blocks below with `brew update-python-resources`. Do not hand-edit.
9
+ url "https://files.pythonhosted.org/packages/1b/60/9497af75a83ed1171ebcee223bf6ee934066765a16395ec2cf3c52311f0a/android_watcher-1.0.1.tar.gz"
10
+ sha256 "e7bc14ef364792caf8b88ce83b4f4934679227627a34b4423b19389c9e4346ec"
11
+ license "MIT"
12
+
13
+ depends_on "python@3.11"
14
+
15
+ # Dependency resource blocks, one hash-pinned sdist per transitive dependency.
16
+ # Regenerated by `brew update-python-resources` (or out-of-band for a same-day
17
+ # release, whose upload postdates Homebrew's reproducibility cutoff).
18
+ resource "anyio" do
19
+ url "https://files.pythonhosted.org/packages/1c/b5/001890774a9552aff22502b8da382593109ce0c95314abaebbb116567545/anyio-4.14.0.tar.gz"
20
+ sha256 "b47c1f9ccf73e67021df785332508f99379c68fa7d0684e8e3492cb1d4b23f89"
21
+ end
22
+
23
+ resource "certifi" do
24
+ url "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz"
25
+ sha256 "024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432"
26
+ end
27
+
28
+ resource "defusedxml" do
29
+ url "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz"
30
+ sha256 "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"
31
+ end
32
+
33
+ resource "h11" do
34
+ url "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz"
35
+ sha256 "4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"
36
+ end
37
+
38
+ resource "httpcore" do
39
+ url "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz"
40
+ sha256 "6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"
41
+ end
42
+
43
+ resource "httpx" do
44
+ url "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz"
45
+ sha256 "75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"
46
+ end
47
+
48
+ resource "idna" do
49
+ url "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz"
50
+ sha256 "ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"
51
+ end
52
+
53
+ resource "linkify-it-py" do
54
+ url "https://files.pythonhosted.org/packages/2e/c9/06ea13676ef354f0af6169587ae292d3e2406e212876a413bf9eece4eb23/linkify_it_py-2.1.0.tar.gz"
55
+ sha256 "43360231720999c10e9328dc3691160e27a718e280673d444c38d7d3aaa3b98b"
56
+ end
57
+
58
+ resource "markdown-it-py" do
59
+ url "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz"
60
+ sha256 "04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49"
61
+ end
62
+
63
+ resource "mdit-py-plugins" do
64
+ url "https://files.pythonhosted.org/packages/59/fc/f8d0863f8862f25602c0404d75568e89fb6b4109804645e5cdfb1be5cf56/mdit_py_plugins-0.6.1.tar.gz"
65
+ sha256 "a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0"
66
+ end
67
+
68
+ resource "mdurl" do
69
+ url "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz"
70
+ sha256 "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"
71
+ end
72
+
73
+ resource "platformdirs" do
74
+ url "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz"
75
+ sha256 "31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7"
76
+ end
77
+
78
+ resource "pygments" do
79
+ url "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz"
80
+ sha256 "6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"
81
+ end
82
+
83
+ resource "rich" do
84
+ url "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz"
85
+ sha256 "edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36"
86
+ end
87
+
88
+ resource "textual" do
89
+ url "https://files.pythonhosted.org/packages/9b/7a/c519db0aba5024f86e71e9631810bfdd6866ed2c8695bd7fa34b90e7ef59/textual-8.2.7.tar.gz"
90
+ sha256 "658f568ff81e30ed43890c3e07520390e5cf1b4763822006e060656b0a88f105"
91
+ end
92
+
93
+ resource "typing-extensions" do
94
+ url "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz"
95
+ sha256 "0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"
96
+ end
97
+
98
+ resource "uc-micro-py" do
99
+ url "https://files.pythonhosted.org/packages/78/67/9a363818028526e2d4579334460df777115bdec1bb77c08f9db88f6389f2/uc_micro_py-2.0.0.tar.gz"
100
+ sha256 "c53691e495c8db60e16ffc4861a35469b0ba0821fe409a8a7a0a71864d33a811"
101
+ end
102
+
103
+ def install
104
+ virtualenv_install_with_resources
105
+ end
106
+
107
+ test do
108
+ assert_match "android-watcher", shell_output("#{bin}/android-watcher --help")
109
+ end
110
+ end
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: android-watcher
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: Self-hosted CLI that watches Google's official Android sites and delivers AI-triaged change digests.
5
5
  Project-URL: Homepage, https://github.com/krayong/android-watcher
6
6
  Project-URL: Repository, https://github.com/krayong/android-watcher
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "android-watcher"
3
- version = "1.0.1"
3
+ version = "1.0.2"
4
4
  description = "Self-hosted CLI that watches Google's official Android sites and delivers AI-triaged change digests."
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -4,7 +4,7 @@ requires-python = ">=3.11"
4
4
 
5
5
  [[package]]
6
6
  name = "android-watcher"
7
- version = "1.0.1"
7
+ version = "1.0.2"
8
8
  source = { editable = "." }
9
9
  dependencies = [
10
10
  { name = "defusedxml" },
@@ -1,27 +0,0 @@
1
- class AndroidWatcher < Formula
2
- include Language::Python::Virtualenv
3
-
4
- desc "Self-hosted CLI that watches Google's Android sites and delivers AI-triaged digests"
5
- homepage "https://github.com/krayong/android-watcher"
6
- # url + sha256 point at the PyPI sdist for the released version. The release
7
- # workflow rewrites both on every version bump, then regenerates the `resource`
8
- # blocks below with `brew update-python-resources`. Do not hand-edit.
9
- url "https://files.pythonhosted.org/packages/31/5c/0ac31004a57aaa32b117c1d318cb5c8256adae9f95b7c874187335f47b3b/android_watcher-1.0.0.tar.gz"
10
- sha256 "0844583243b9d94ef4211c80a8be6e5b0efac44d21bdb224aa6b02a5670cc7c3"
11
- license "MIT"
12
-
13
- depends_on "python@3.11"
14
-
15
- # Dependency `resource` blocks are generated by the release workflow:
16
- # brew update-python-resources Formula/android-watcher.rb
17
- # One hash-pinned block per transitive dependency lands here. Never fabricate
18
- # a url or sha256 by hand.
19
-
20
- def install
21
- virtualenv_install_with_resources
22
- end
23
-
24
- test do
25
- assert_match "android-watcher", shell_output("#{bin}/android-watcher --help")
26
- end
27
- end
File without changes