coding-agent-telegram 2026.3.26__tar.gz → 2026.3.27__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 (60) hide show
  1. coding_agent_telegram-2026.3.27/.github/workflows/pull-request-checks.yml +45 -0
  2. coding_agent_telegram-2026.3.27/.github/workflows/python-publish.yml +95 -0
  3. coding_agent_telegram-2026.3.27/.github/workflows/testpypi-publish.yml +84 -0
  4. coding_agent_telegram-2026.3.27/.gitignore +14 -0
  5. coding_agent_telegram-2026.3.27/.gitkeep +0 -0
  6. {coding_agent_telegram-2026.3.26/src/coding_agent_telegram.egg-info → coding_agent_telegram-2026.3.27}/PKG-INFO +32 -12
  7. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/README.md +30 -10
  8. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/pyproject.toml +8 -3
  9. coding_agent_telegram-2026.3.27/src/coding_agent_telegram/__init__.py +1 -0
  10. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/agent_runner.py +198 -41
  11. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/bot.py +27 -2
  12. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/cli.py +7 -5
  13. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/config.py +24 -3
  14. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/diff_utils.py +38 -3
  15. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/git_utils.py +24 -0
  16. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/resources/.env.example +13 -3
  17. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/resources/sensitive_path_globs.txt +1 -0
  18. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt +0 -3
  19. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/resources/snapshot_excluded_dir_names.txt +2 -0
  20. coding_agent_telegram-2026.3.27/src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt +2 -0
  21. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/router/base.py +145 -6
  22. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/router/git_commands.py +45 -6
  23. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/router/message_commands.py +10 -1
  24. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/router/project_commands.py +95 -47
  25. coding_agent_telegram-2026.3.27/src/coding_agent_telegram/router/session_commands.py +494 -0
  26. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/session_runtime.py +15 -3
  27. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/session_store.py +18 -0
  28. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/telegram_sender.py +90 -25
  29. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27/src/coding_agent_telegram.egg-info}/PKG-INFO +32 -12
  30. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram.egg-info/SOURCES.txt +8 -0
  31. coding_agent_telegram-2026.3.27/startup.sh +169 -0
  32. coding_agent_telegram-2026.3.27/tests/conftest.py +4 -0
  33. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_agent_runner.py +127 -15
  34. coding_agent_telegram-2026.3.27/tests/test_bot.py +19 -0
  35. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_command_router.py +595 -22
  36. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_config.py +49 -0
  37. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_diff_chunking.py +54 -13
  38. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_filters.py +1 -0
  39. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_git_utils.py +60 -0
  40. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_session_store.py +24 -0
  41. coding_agent_telegram-2026.3.27/tests/test_telegram_sender.py +91 -0
  42. coding_agent_telegram-2026.3.26/src/coding_agent_telegram/__init__.py +0 -4
  43. coding_agent_telegram-2026.3.26/src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt +0 -4
  44. coding_agent_telegram-2026.3.26/src/coding_agent_telegram/router/session_commands.py +0 -197
  45. coding_agent_telegram-2026.3.26/tests/test_telegram_sender.py +0 -43
  46. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/LICENSE +0 -0
  47. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/setup.cfg +0 -0
  48. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/setup.py +0 -0
  49. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/__main__.py +0 -0
  50. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/command_router.py +0 -0
  51. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/filters.py +0 -0
  52. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/logging_utils.py +0 -0
  53. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram/router/__init__.py +0 -0
  54. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram.egg-info/dependency_links.txt +0 -0
  55. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram.egg-info/entry_points.txt +0 -0
  56. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram.egg-info/requires.txt +0 -0
  57. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/src/coding_agent_telegram.egg-info/top_level.txt +0 -0
  58. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_agent_runner_stall.py +0 -0
  59. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_project_validation.py +0 -0
  60. {coding_agent_telegram-2026.3.26 → coding_agent_telegram-2026.3.27}/tests/test_session_runtime_diff_merge.py +0 -0
@@ -0,0 +1,45 @@
1
+ name: Pull Request Checks
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ jobs:
10
+ test-and-build:
11
+ runs-on: ubuntu-latest
12
+ env:
13
+ SETUPTOOLS_SCM_PRETEND_VERSION_FOR_CODING_AGENT_TELEGRAM: 0.0.dev0
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.x"
23
+
24
+ - name: Install test and build dependencies
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ python -m pip install pytest build twine setuptools-scm
28
+ python -m pip install -e .
29
+
30
+ - name: Run tests
31
+ run: pytest
32
+
33
+ - name: Build release distributions
34
+ run: python -m build
35
+
36
+ - name: Validate package metadata
37
+ run: python -m twine check dist/*
38
+
39
+ - name: Smoke test built wheel
40
+ run: |
41
+ python -m venv .smoke-test-venv
42
+ source .smoke-test-venv/bin/activate
43
+ python -m pip install --upgrade pip
44
+ python -m pip install --no-deps dist/*.whl
45
+ python -c "import coding_agent_telegram"
@@ -0,0 +1,95 @@
1
+ # This workflow will upload a Python Package to PyPI when a release is created
2
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Upload Python Package
10
+
11
+ on:
12
+ release:
13
+ types: [published]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ release-build:
20
+ runs-on: ubuntu-latest
21
+
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ with:
25
+ fetch-depth: 0
26
+
27
+ - uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.x"
30
+
31
+ - name: Verify PyPI version
32
+ run: |
33
+ python -m pip install setuptools-scm
34
+ VERSION="$(python -m setuptools_scm)"
35
+ echo "Derived version: $VERSION"
36
+ if [[ "$VERSION" == *".dev"* ]]; then
37
+ echo "PyPI publishing does not allow .dev versions." >&2
38
+ exit 1
39
+ fi
40
+
41
+ - name: Run tests
42
+ run: |
43
+ python -m pip install pytest
44
+ python -m pip install -e .
45
+ pytest
46
+
47
+ - name: Build release distributions
48
+ run: |
49
+ python -m pip install build
50
+ python -m build
51
+
52
+ - name: Smoke test built wheel
53
+ run: |
54
+ python -m venv .smoke-test-venv
55
+ source .smoke-test-venv/bin/activate
56
+ python -m pip install --upgrade pip
57
+ python -m pip install --no-deps dist/*.whl
58
+ python -c "import coding_agent_telegram"
59
+
60
+ - name: Upload distributions
61
+ uses: actions/upload-artifact@v4
62
+ with:
63
+ name: release-dists
64
+ path: dist/
65
+
66
+ pypi-publish:
67
+ runs-on: ubuntu-latest
68
+ needs:
69
+ - release-build
70
+ permissions:
71
+ # IMPORTANT: this permission is mandatory for trusted publishing
72
+ id-token: write
73
+
74
+ # Dedicated environments with protections for publishing are strongly recommended.
75
+ # For more information, see: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules
76
+ environment:
77
+ name: pypi
78
+ # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status:
79
+ # url: https://pypi.org/p/YOURPROJECT
80
+ #
81
+ # ALTERNATIVE: if your GitHub Release name is the PyPI project version string
82
+ # ALTERNATIVE: exactly, uncomment the following line instead:
83
+ # url: https://pypi.org/project/YOURPROJECT/${{ github.event.release.name }}
84
+
85
+ steps:
86
+ - name: Retrieve release distributions
87
+ uses: actions/download-artifact@v4
88
+ with:
89
+ name: release-dists
90
+ path: dist/
91
+
92
+ - name: Publish release distributions to PyPI
93
+ uses: pypa/gh-action-pypi-publish@release/v1
94
+ with:
95
+ packages-dir: dist/
@@ -0,0 +1,84 @@
1
+ # This workflow will upload a Python package to TestPyPI for dev tags.
2
+
3
+ name: Upload Python Package to TestPyPI
4
+
5
+ on:
6
+ workflow_dispatch:
7
+ push:
8
+ tags:
9
+ - "v*.dev*"
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ release-build:
16
+ runs-on: ubuntu-latest
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - uses: actions/setup-python@v5
24
+ with:
25
+ python-version: "3.x"
26
+
27
+ - name: Verify TestPyPI version
28
+ run: |
29
+ python -m pip install setuptools-scm
30
+ VERSION="$(python -m setuptools_scm)"
31
+ echo "Derived version: $VERSION"
32
+ if [[ "$VERSION" != *".dev"* ]]; then
33
+ echo "TestPyPI publishing requires a .dev version." >&2
34
+ exit 1
35
+ fi
36
+
37
+ - name: Run tests
38
+ run: |
39
+ python -m pip install pytest
40
+ python -m pip install -e .
41
+ pytest
42
+
43
+ - name: Build release distributions
44
+ run: |
45
+ python -m pip install build
46
+ python -m build
47
+
48
+ - name: Smoke test built wheel
49
+ run: |
50
+ python -m venv .smoke-test-venv
51
+ source .smoke-test-venv/bin/activate
52
+ python -m pip install --upgrade pip
53
+ python -m pip install --no-deps dist/*.whl
54
+ python -c "import coding_agent_telegram"
55
+
56
+ - name: Upload distributions
57
+ uses: actions/upload-artifact@v4
58
+ with:
59
+ name: release-dists
60
+ path: dist/
61
+
62
+ testpypi-publish:
63
+ runs-on: ubuntu-latest
64
+ needs:
65
+ - release-build
66
+ permissions:
67
+ id-token: write
68
+ environment:
69
+ name: testpypi
70
+ # OPTIONAL: uncomment and update to include your TestPyPI project URL in the deployment status:
71
+ # url: https://test.pypi.org/project/coding-agent-telegram/
72
+
73
+ steps:
74
+ - name: Retrieve release distributions
75
+ uses: actions/download-artifact@v4
76
+ with:
77
+ name: release-dists
78
+ path: dist/
79
+
80
+ - name: Publish release distributions to TestPyPI
81
+ uses: pypa/gh-action-pypi-publish@release/v1
82
+ with:
83
+ repository-url: https://test.pypi.org/legacy/
84
+ packages-dir: dist/
@@ -0,0 +1,14 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .pytest_cache/
4
+ .venv*/
5
+ .env_*
6
+ .env.*
7
+ state.json
8
+ state.json.lock
9
+ state.json.tmp
10
+ state.json.bak
11
+ *.egg-info/
12
+ logs/
13
+ .codex
14
+ .copilot
File without changes
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coding-agent-telegram
3
- Version: 2026.3.26
3
+ Version: 2026.3.27
4
4
  Summary: Telegram bot bridge for local coding agents (Codex/Copilot CLI)
5
- Author: Codex
5
+ Author: DCHA
6
6
  License: MIT
7
7
  Requires-Python: >=3.9
8
8
  Description-Content-Type: text/markdown
@@ -89,15 +89,16 @@ cd coding-agent-telegram
89
89
 
90
90
  What `startup.sh` does:
91
91
 
92
- - creates `.env` from `src/coding_agent_telegram/resources/.env.example` if missing
92
+ - creates `.env_coding_agent_telegram` from `src/coding_agent_telegram/resources/.env.example` if missing
93
+ - falls back to legacy `.env` if it already exists
93
94
  - creates the state files if missing
94
95
  - creates `.venv` if missing
95
96
  - installs the package into the virtual environment
96
97
  - starts the Telegram bot server
97
98
 
98
- #### 3. Update `.env`
99
+ #### 3. Update The Env File
99
100
 
100
- On first run, update the required fields in `.env`:
101
+ On first run, update the required fields in `.env_coding_agent_telegram`:
101
102
 
102
103
  - `WORKSPACE_ROOT`
103
104
  - `TELEGRAM_BOT_TOKENS`
@@ -118,9 +119,10 @@ coding-agent-telegram
118
119
 
119
120
  What happens on first run:
120
121
 
121
- - the command creates `.env` in your current working directory if missing
122
+ - the command creates `.env_coding_agent_telegram` in your current working directory if missing
123
+ - if legacy `.env` already exists, it reuses that instead
122
124
  - it tells you which required fields to update
123
- - after updating `.env`, run `coding-agent-telegram` again
125
+ - after updating the env file, run `coding-agent-telegram` again
124
126
 
125
127
  Recommended flow:
126
128
 
@@ -131,7 +133,7 @@ pip install coding-agent-telegram
131
133
  coding-agent-telegram
132
134
  ```
133
135
 
134
- Then update `.env` and run:
136
+ Then update `.env_coding_agent_telegram` and run:
135
137
 
136
138
  ```bash
137
139
  coding-agent-telegram
@@ -157,7 +159,7 @@ If an unsupported message type is sent, the bot replies with a short error inste
157
159
 
158
160
  ## ⚙️ Environment Variables
159
161
 
160
- These are the main fields in `.env`.
162
+ These are the main fields in the resolved env file, which defaults to `.env_coding_agent_telegram` and falls back to legacy `.env`.
161
163
 
162
164
  ### Required
163
165
 
@@ -282,7 +284,7 @@ GitHub documents these Copilot CLI approval controls here:
282
284
  - `ENABLE_SENSITIVE_DIFF_FILTER`
283
285
  Hide diffs for sensitive paths.
284
286
 
285
- ### Example `.env` Snippet
287
+ ### Example Env Snippet
286
288
 
287
289
  ```env
288
290
  WORKSPACE_ROOT=~/git
@@ -376,7 +378,6 @@ _During each agent run, the bot also takes a lightweight before/after project sn
376
378
 
377
379
  - the app walks the project directory before and after the run
378
380
  - for normal text files, the app prefers the per-run snapshot diff rather than a git-head diff
379
- - `hidden files` and `hidden directories` are skipped by the snapshot walker by default, git-head diff will be used instead
380
381
  - common dependency, cache, and runtime directories are also skipped
381
382
  - binary files and files larger than `SNAPSHOT_TEXT_FILE_MAX_BYTES` are not loaded as text
382
383
  - for huge projects, this extra scan can add noticeable I/O and memory overhead
@@ -389,7 +390,18 @@ Snapshot exclusion rules live in package resource files:
389
390
  - `src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt`
390
391
  - `src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt`
391
392
 
392
- If you want the snapshot diff to include hidden files or hidden directories, remove the `.*` rule from the relevant snapshot exclusion file and restart the bot.
393
+ You can override those defaults in the env file without editing the installed package:
394
+
395
+ - `SNAPSHOT_INCLUDE_PATH_GLOBS`
396
+ Force-include matching paths in diffs.
397
+ Example: `.github/*,.profile.test,.profile.prod`
398
+
399
+ - `SNAPSHOT_EXCLUDE_PATH_GLOBS`
400
+ Add extra diff exclusions on top of the packaged defaults.
401
+ Example: `.*,personal/*,sensitive*.txt`
402
+ Note: `.*` matches hidden paths, including files inside hidden directories.
403
+
404
+ If both include and exclude rules match, the include rule wins.
393
405
 
394
406
  ## 🌿 Branch Workflow
395
407
 
@@ -454,6 +466,14 @@ Typical logged events:
454
466
  - `pyproject.toml`
455
467
  Packaging and dependency configuration
456
468
 
469
+ ## 📦 Release Versioning
470
+
471
+ Package versions are derived from Git tags.
472
+
473
+ - TestPyPI/testing: `v2026.3.26.dev1`
474
+ - PyPI prerelease: `v2026.3.26rc1`
475
+ - PyPI stable: `v2026.3.26`
476
+
457
477
  ## 🛠️ Typical Local Flow
458
478
 
459
479
  ```bash
@@ -75,15 +75,16 @@ cd coding-agent-telegram
75
75
 
76
76
  What `startup.sh` does:
77
77
 
78
- - creates `.env` from `src/coding_agent_telegram/resources/.env.example` if missing
78
+ - creates `.env_coding_agent_telegram` from `src/coding_agent_telegram/resources/.env.example` if missing
79
+ - falls back to legacy `.env` if it already exists
79
80
  - creates the state files if missing
80
81
  - creates `.venv` if missing
81
82
  - installs the package into the virtual environment
82
83
  - starts the Telegram bot server
83
84
 
84
- #### 3. Update `.env`
85
+ #### 3. Update The Env File
85
86
 
86
- On first run, update the required fields in `.env`:
87
+ On first run, update the required fields in `.env_coding_agent_telegram`:
87
88
 
88
89
  - `WORKSPACE_ROOT`
89
90
  - `TELEGRAM_BOT_TOKENS`
@@ -104,9 +105,10 @@ coding-agent-telegram
104
105
 
105
106
  What happens on first run:
106
107
 
107
- - the command creates `.env` in your current working directory if missing
108
+ - the command creates `.env_coding_agent_telegram` in your current working directory if missing
109
+ - if legacy `.env` already exists, it reuses that instead
108
110
  - it tells you which required fields to update
109
- - after updating `.env`, run `coding-agent-telegram` again
111
+ - after updating the env file, run `coding-agent-telegram` again
110
112
 
111
113
  Recommended flow:
112
114
 
@@ -117,7 +119,7 @@ pip install coding-agent-telegram
117
119
  coding-agent-telegram
118
120
  ```
119
121
 
120
- Then update `.env` and run:
122
+ Then update `.env_coding_agent_telegram` and run:
121
123
 
122
124
  ```bash
123
125
  coding-agent-telegram
@@ -143,7 +145,7 @@ If an unsupported message type is sent, the bot replies with a short error inste
143
145
 
144
146
  ## ⚙️ Environment Variables
145
147
 
146
- These are the main fields in `.env`.
148
+ These are the main fields in the resolved env file, which defaults to `.env_coding_agent_telegram` and falls back to legacy `.env`.
147
149
 
148
150
  ### Required
149
151
 
@@ -268,7 +270,7 @@ GitHub documents these Copilot CLI approval controls here:
268
270
  - `ENABLE_SENSITIVE_DIFF_FILTER`
269
271
  Hide diffs for sensitive paths.
270
272
 
271
- ### Example `.env` Snippet
273
+ ### Example Env Snippet
272
274
 
273
275
  ```env
274
276
  WORKSPACE_ROOT=~/git
@@ -362,7 +364,6 @@ _During each agent run, the bot also takes a lightweight before/after project sn
362
364
 
363
365
  - the app walks the project directory before and after the run
364
366
  - for normal text files, the app prefers the per-run snapshot diff rather than a git-head diff
365
- - `hidden files` and `hidden directories` are skipped by the snapshot walker by default, git-head diff will be used instead
366
367
  - common dependency, cache, and runtime directories are also skipped
367
368
  - binary files and files larger than `SNAPSHOT_TEXT_FILE_MAX_BYTES` are not loaded as text
368
369
  - for huge projects, this extra scan can add noticeable I/O and memory overhead
@@ -375,7 +376,18 @@ Snapshot exclusion rules live in package resource files:
375
376
  - `src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt`
376
377
  - `src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt`
377
378
 
378
- If you want the snapshot diff to include hidden files or hidden directories, remove the `.*` rule from the relevant snapshot exclusion file and restart the bot.
379
+ You can override those defaults in the env file without editing the installed package:
380
+
381
+ - `SNAPSHOT_INCLUDE_PATH_GLOBS`
382
+ Force-include matching paths in diffs.
383
+ Example: `.github/*,.profile.test,.profile.prod`
384
+
385
+ - `SNAPSHOT_EXCLUDE_PATH_GLOBS`
386
+ Add extra diff exclusions on top of the packaged defaults.
387
+ Example: `.*,personal/*,sensitive*.txt`
388
+ Note: `.*` matches hidden paths, including files inside hidden directories.
389
+
390
+ If both include and exclude rules match, the include rule wins.
379
391
 
380
392
  ## 🌿 Branch Workflow
381
393
 
@@ -440,6 +452,14 @@ Typical logged events:
440
452
  - `pyproject.toml`
441
453
  Packaging and dependency configuration
442
454
 
455
+ ## 📦 Release Versioning
456
+
457
+ Package versions are derived from Git tags.
458
+
459
+ - TestPyPI/testing: `v2026.3.26.dev1`
460
+ - PyPI prerelease: `v2026.3.26rc1`
461
+ - PyPI stable: `v2026.3.26`
462
+
443
463
  ## 🛠️ Typical Local Flow
444
464
 
445
465
  ```bash
@@ -1,15 +1,15 @@
1
1
  [build-system]
2
- requires = ["setuptools>=68", "wheel"]
2
+ requires = ["setuptools>=68", "setuptools-scm>=8", "wheel"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "coding-agent-telegram"
7
- version = "2026.03.26"
7
+ dynamic = ["version"]
8
8
  description = "Telegram bot bridge for local coding agents (Codex/Copilot CLI)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
11
11
  license = { text = "MIT" }
12
- authors = [{ name = "Codex" }]
12
+ authors = [{ name = "DCHA" }]
13
13
  dependencies = [
14
14
  "python-telegram-bot>=21.0,<22.0",
15
15
  "python-dotenv>=1.0.0,<2.0.0",
@@ -34,6 +34,11 @@ coding_agent_telegram = [
34
34
  [tool.setuptools.packages.find]
35
35
  where = ["src"]
36
36
 
37
+ [tool.setuptools_scm]
38
+ version_scheme = "no-guess-dev"
39
+ local_scheme = "no-local-version"
40
+ tag_regex = "^v(?P<version>.*)$"
41
+
37
42
  [tool.pytest.ini_options]
38
43
  testpaths = ["tests"]
39
44
  addopts = "-q"
@@ -0,0 +1 @@
1
+ """coding_agent_telegram package."""