sase-telegram 0.1.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 (49) hide show
  1. sase_telegram-0.1.0/.github/workflows/ci.yml +55 -0
  2. sase_telegram-0.1.0/.github/workflows/pr-title.yml +31 -0
  3. sase_telegram-0.1.0/.github/workflows/publish.yml +86 -0
  4. sase_telegram-0.1.0/.gitignore +59 -0
  5. sase_telegram-0.1.0/.release-please-manifest.json +1 -0
  6. sase_telegram-0.1.0/.sase_beads/beads.db +0 -0
  7. sase_telegram-0.1.0/.sase_beads/config.json +5 -0
  8. sase_telegram-0.1.0/.sase_beads/issues.jsonl +0 -0
  9. sase_telegram-0.1.0/AGENTS.md +32 -0
  10. sase_telegram-0.1.0/CHANGELOG.md +140 -0
  11. sase_telegram-0.1.0/CLAUDE.md +1 -0
  12. sase_telegram-0.1.0/Justfile +32 -0
  13. sase_telegram-0.1.0/PKG-INFO +217 -0
  14. sase_telegram-0.1.0/README.md +199 -0
  15. sase_telegram-0.1.0/docs/architecture.md +72 -0
  16. sase_telegram-0.1.0/docs/inbound.md +135 -0
  17. sase_telegram-0.1.0/docs/outbound.md +71 -0
  18. sase_telegram-0.1.0/plans/artifact_passing.md +0 -0
  19. sase_telegram-0.1.0/pyproject.toml +71 -0
  20. sase_telegram-0.1.0/release-please-config.json +15 -0
  21. sase_telegram-0.1.0/sase.yml +1 -0
  22. sase_telegram-0.1.0/src/sase_telegram/__init__.py +1 -0
  23. sase_telegram-0.1.0/src/sase_telegram/bead_format.py +290 -0
  24. sase_telegram-0.1.0/src/sase_telegram/callback_data.py +47 -0
  25. sase_telegram-0.1.0/src/sase_telegram/credentials.py +33 -0
  26. sase_telegram-0.1.0/src/sase_telegram/formatting.py +612 -0
  27. sase_telegram-0.1.0/src/sase_telegram/inbound.py +629 -0
  28. sase_telegram-0.1.0/src/sase_telegram/outbound.py +106 -0
  29. sase_telegram-0.1.0/src/sase_telegram/pdf_convert.py +24 -0
  30. sase_telegram-0.1.0/src/sase_telegram/pdf_style.css +37 -0
  31. sase_telegram-0.1.0/src/sase_telegram/pending_actions.py +80 -0
  32. sase_telegram-0.1.0/src/sase_telegram/rate_limit.py +82 -0
  33. sase_telegram-0.1.0/src/sase_telegram/scripts/__init__.py +18 -0
  34. sase_telegram-0.1.0/src/sase_telegram/scripts/sase_tg_inbound.py +2398 -0
  35. sase_telegram-0.1.0/src/sase_telegram/scripts/sase_tg_outbound.py +504 -0
  36. sase_telegram-0.1.0/src/sase_telegram/telegram_client.py +257 -0
  37. sase_telegram-0.1.0/tests/__init__.py +0 -0
  38. sase_telegram-0.1.0/tests/test_bead_format.py +225 -0
  39. sase_telegram-0.1.0/tests/test_callback_data.py +45 -0
  40. sase_telegram-0.1.0/tests/test_credentials.py +64 -0
  41. sase_telegram-0.1.0/tests/test_formatting.py +807 -0
  42. sase_telegram-0.1.0/tests/test_inbound.py +3392 -0
  43. sase_telegram-0.1.0/tests/test_integration.py +866 -0
  44. sase_telegram-0.1.0/tests/test_outbound.py +562 -0
  45. sase_telegram-0.1.0/tests/test_pdf_convert.py +55 -0
  46. sase_telegram-0.1.0/tests/test_pending_actions.py +61 -0
  47. sase_telegram-0.1.0/tests/test_rate_limit.py +49 -0
  48. sase_telegram-0.1.0/tests/test_telegram_client.py +265 -0
  49. sase_telegram-0.1.0/uv.lock +1392 -0
@@ -0,0 +1,55 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ branches: [master]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ check:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ matrix:
17
+ python-version: ["3.12", "3.13"]
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - uses: actions/checkout@v4
21
+ with:
22
+ repository: sase-org/sase
23
+ path: .sase-deps/sase
24
+ token: ${{ secrets.SASE_RELEASE_TOKEN || github.token }}
25
+ - uses: actions/checkout@v4
26
+ with:
27
+ repository: sase-org/sase-core
28
+ path: .sase-deps/sase-core
29
+ token: ${{ secrets.SASE_RELEASE_TOKEN || github.token }}
30
+ - uses: astral-sh/setup-uv@v4
31
+ with:
32
+ enable-cache: true
33
+ cache-dependency-glob: "**/pyproject.toml"
34
+ - uses: extractions/setup-just@v2
35
+ - uses: dtolnay/rust-toolchain@stable
36
+ - name: Set up Python ${{ matrix.python-version }}
37
+ run: |
38
+ uv python install ${{ matrix.python-version }}
39
+ uv venv --python ${{ matrix.python-version }} .venv
40
+ - name: Install dependencies
41
+ run: |
42
+ just install
43
+ uv pip install --python .venv/bin/python maturin
44
+ (
45
+ cd .sase-deps/sase-core/crates/sase_core_py
46
+ VIRTUAL_ENV="${GITHUB_WORKSPACE}/.venv" \
47
+ PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 \
48
+ "${GITHUB_WORKSPACE}/.venv/bin/maturin" develop --release
49
+ )
50
+ uv pip install --python .venv/bin/python --no-deps -e .sase-deps/sase
51
+ - name: Lint
52
+ if: ${{ matrix.python-version == '3.12' }}
53
+ run: just lint
54
+ - name: Run tests
55
+ run: just test
@@ -0,0 +1,31 @@
1
+ name: PR Title
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [master]
6
+ types: [opened, edited, reopened, ready_for_review, synchronize]
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ conventional-title:
13
+ name: Conventional PR title
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Validate squash-merge title
17
+ env:
18
+ PR_TITLE: ${{ github.event.pull_request.title }}
19
+ run: |
20
+ set -euo pipefail
21
+
22
+ allowed_types='feat|fix|perf|docs|ci|test|chore|refactor|build|deps'
23
+ pattern="^(${allowed_types})(\([A-Za-z0-9._/-]+\))?!?: [^[:space:]].*"
24
+
25
+ if [[ ! "${PR_TITLE}" =~ ${pattern} ]]; then
26
+ printf 'PR title must follow Conventional Commits so squash merges produce useful release metadata.\n' >&2
27
+ printf 'Allowed types: feat, fix, perf, docs, ci, test, chore, refactor, build, deps.\n' >&2
28
+ printf 'Examples: fix(release): add release workflow, feat!: remove legacy config.\n' >&2
29
+ printf 'Actual title: %s\n' "${PR_TITLE}" >&2
30
+ exit 1
31
+ fi
@@ -0,0 +1,86 @@
1
+ name: Publish
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ workflow_dispatch:
7
+ inputs:
8
+ publish_existing:
9
+ description: Publish the existing 0.1.0 release artifacts
10
+ required: true
11
+ type: boolean
12
+ default: false
13
+
14
+ jobs:
15
+ release:
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: write
19
+ issues: write
20
+ pull-requests: write
21
+ outputs:
22
+ release_created: ${{ steps.release.outputs.release_created || 'false' }}
23
+ steps:
24
+ - uses: googleapis/release-please-action@v5
25
+ if: ${{ github.event_name == 'push' }}
26
+ id: release
27
+ with:
28
+ token: ${{ secrets.SASE_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
29
+ config-file: release-please-config.json
30
+ manifest-file: .release-please-manifest.json
31
+
32
+ build:
33
+ needs: release
34
+ if: ${{ needs.release.outputs.release_created == 'true' || (github.event_name == 'workflow_dispatch' && inputs.publish_existing == true) }}
35
+ runs-on: ubuntu-latest
36
+ permissions:
37
+ contents: read
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+ - uses: astral-sh/setup-uv@v4
41
+ with:
42
+ enable-cache: true
43
+ cache-dependency-glob: "**/pyproject.toml"
44
+ - name: Set up Python
45
+ run: uv python install 3.12
46
+ - name: Build package
47
+ run: uv build
48
+ - uses: actions/upload-artifact@v4
49
+ with:
50
+ name: dist
51
+ path: dist/
52
+
53
+ install-smoke:
54
+ needs: build
55
+ runs-on: ubuntu-latest
56
+ steps:
57
+ - uses: actions/download-artifact@v4
58
+ with:
59
+ name: dist
60
+ path: dist/
61
+ - uses: astral-sh/setup-uv@v4
62
+ - name: Set up Python
63
+ run: uv python install 3.12
64
+ - name: Install built sase-telegram wheel into a fresh venv
65
+ run: |
66
+ uv venv --python 3.12 /tmp/smoke-venv
67
+ uv pip install --python /tmp/smoke-venv/bin/python dist/*.whl
68
+ - name: Smoke check
69
+ run: |
70
+ /tmp/smoke-venv/bin/python -c "import sase_telegram"
71
+ /tmp/smoke-venv/bin/sase_chop_tg_outbound --help > /dev/null
72
+ /tmp/smoke-venv/bin/sase_chop_tg_inbound --help > /dev/null
73
+
74
+ publish:
75
+ needs: [release, build, install-smoke]
76
+ if: ${{ needs.release.outputs.release_created == 'true' || (github.event_name == 'workflow_dispatch' && inputs.publish_existing == true) }}
77
+ runs-on: ubuntu-latest
78
+ environment: pypi
79
+ permissions:
80
+ id-token: write
81
+ steps:
82
+ - uses: actions/download-artifact@v4
83
+ with:
84
+ name: dist
85
+ path: dist/
86
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,59 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ build/
11
+ dist/
12
+ *.egg-info/
13
+ *.egg
14
+ wheels/
15
+
16
+ # Virtual environments
17
+ .venv/
18
+ venv/
19
+ ENV/
20
+
21
+ # Test / coverage
22
+ .tox/
23
+ .nox/
24
+ htmlcov/
25
+ .coverage
26
+ .coverage.*
27
+ coverage.xml
28
+ *.cover
29
+ *.py,cover
30
+ .pytest_cache/
31
+
32
+ # Mypy
33
+ .mypy_cache/
34
+
35
+ # Ruff
36
+ .ruff_cache/
37
+
38
+ # IDE
39
+ .vscode/
40
+ .idea/
41
+ *.swp
42
+ *.swo
43
+ *~
44
+
45
+ # OS
46
+ .DS_Store
47
+ Thumbs.db
48
+
49
+ # exploration markdown files
50
+ explore/
51
+
52
+ # Private Claude Instructions
53
+ CLAUDE.local.md
54
+
55
+ # Copied context files (from @ file references)
56
+ .sase/
57
+
58
+ # Hypothesis
59
+ .hypothesis/
@@ -0,0 +1 @@
1
+ {".":"0.1.0"}
Binary file
@@ -0,0 +1,5 @@
1
+ {
2
+ "issue_prefix": "sase-telegram",
3
+ "next_counter": 1,
4
+ "owner": "bryanbugyi34@gmail.com"
5
+ }
File without changes
@@ -0,0 +1,32 @@
1
+ # sase-telegram - Agent Instructions
2
+
3
+ ## Overview
4
+ Telegram integration chop for sase. Provides outbound notification delivery
5
+ and inbound action handling via Telegram bot API.
6
+
7
+ ## Build & Run
8
+ ```bash
9
+ just install # Install in editable mode with dev deps
10
+ just lint # ruff + mypy
11
+ just fmt # Auto-format
12
+ just test # pytest
13
+ just check # lint + test
14
+ ```
15
+
16
+ ## Architecture
17
+ - `src/sase_telegram/credentials.py` — Bot token (via `pass`), chat ID and username (env vars)
18
+ - `src/sase_telegram/telegram_client.py` — Sync wrapper with retry/backoff and message splitting
19
+ - `src/sase_telegram/formatting.py` — Notification → MarkdownV2 formatting and inline keyboards
20
+ - `src/sase_telegram/callback_data.py` — Encode/decode inline keyboard callback data
21
+ - `src/sase_telegram/inbound.py` — Pure logic for callback/text/photo processing (no API calls)
22
+ - `src/sase_telegram/outbound.py` — High-water mark tracking, exclusive lock, unsent detection
23
+ - `src/sase_telegram/pending_actions.py` — Persist pending actions to JSON (24h stale cleanup)
24
+ - `src/sase_telegram/rate_limit.py` — Sliding window rate limiter
25
+ - `src/sase_telegram/pdf_convert.py` — Markdown to PDF via pandoc (engine fallback chain)
26
+ - `src/sase_telegram/scripts/` — CLI entry points for outbound/inbound chops
27
+ - Depends on `sase>=0.1.0` and `python-telegram-bot>=21.0`
28
+
29
+ ## Code Conventions
30
+ - Absolute imports: `from sase_telegram.credentials import get_bot_token`
31
+ - Target Python 3.12+
32
+ - Follow ruff rules matching sase core
@@ -0,0 +1,140 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 (2026-06-09)
4
+
5
+
6
+ ### Features
7
+
8
+ * Add .list dot command to show all running agents ([7a5dd2e](https://github.com/sase-org/sase-telegram/commit/7a5dd2e1421488bbbf5c7d032ef999c2cb340dea))
9
+ * Add .listx dot command to show done but not dismissed agents ([14fbdf2](https://github.com/sase-org/sase-telegram/commit/14fbdf285afb178e2e873782f916650e0de31ec5))
10
+ * Add /kill slash command to terminate agents by name ([be3a95c](https://github.com/sase-org/sase-telegram/commit/be3a95cb43c26f8407d8aa7f158208b6228b4d0d))
11
+ * Add /resume slash command to list resumable agents with copy buttons ([4d152cb](https://github.com/sase-org/sase-telegram/commit/4d152cb5f50b667de5d963b5ffe714b626734504))
12
+ * Add agent descriptions to /kill and /resume inline keyboards ([e15eb5a](https://github.com/sase-org/sase-telegram/commit/e15eb5a7653ae9f4cc742187afd64288f9a245ad))
13
+ * Add agent name to plan notifications ([b501008](https://github.com/sase-org/sase-telegram/commit/b501008f7de04277960fcf2c5d135c5f67e3b4c3))
14
+ * Add agent response as spoiler text in Telegram chat file notifications ([8413b51](https://github.com/sase-org/sase-telegram/commit/8413b512790c7371d337a90e18a0e52307ab150a))
15
+ * Add callback-based Retry button for long prompts in kill confirmation ([85e9f59](https://github.com/sase-org/sase-telegram/commit/85e9f59212968b459acc2b12a9c6d263522c038a))
16
+ * Add checkbox to Telegram approve button ([9dcfdc1](https://github.com/sase-org/sase-telegram/commit/9dcfdc1310ec56150fa755f5a8273f50996f0e38))
17
+ * Add Commit button to Telegram plan approval messages ([88be5e8](https://github.com/sase-org/sase-telegram/commit/88be5e8633a6328cd9bff5f3fde54de6af7fd3dc))
18
+ * Add commit message section to telegram PDF output ([7a94f2a](https://github.com/sase-org/sase-telegram/commit/7a94f2a9c41af8865b3edc56f4afdb1c148c8d63))
19
+ * Add conditional Epic button to Telegram plan approval inline keyboard (sase-w0d2.4) ([b58a02b](https://github.com/sase-org/sase-telegram/commit/b58a02b2fd7498bc7c69a0395c2d4694e34ca88a))
20
+ * Add confirmation replies for two-step feedback/custom answer flows ([1b1402a](https://github.com/sase-org/sase-telegram/commit/1b1402a41d3590cae3c5b7d51a67eb5baa9ee344))
21
+ * Add diagnostic logging to outbound script for debugging spurious sends ([593a50f](https://github.com/sase-org/sase-telegram/commit/593a50f88f2bc1b7ef2d86957360c22606303dc1))
22
+ * Add Epic inline keyboard button for plan approval ([14c689b](https://github.com/sase-org/sase-telegram/commit/14c689b435067ce0c1f5cddb96de1f02a1386398))
23
+ * Add expandable blockquotes for long content (Bot API 7.4+) ([88f929e](https://github.com/sase-org/sase-telegram/commit/88f929e1db02bf01da3a70a564144efe741d58f9))
24
+ * Add image support. ([1ceaf47](https://github.com/sase-org/sase-telegram/commit/1ceaf470267accd40945bb574d46ffd9c8450311))
25
+ * Add inline Telegram delivery for generated image notifications ([7cfa15a](https://github.com/sase-org/sase-telegram/commit/7cfa15a56c2bd7e4fe91298987dea5dfb64f7833))
26
+ * Add Kill button to agent launch messages ([5e1e0ca](https://github.com/sase-org/sase-telegram/commit/5e1e0ca798ad84f63ad2b45bca66a5ab364af7b4))
27
+ * Add large content truncation and integration tests (Phase 5) ([9da03fb](https://github.com/sase-org/sase-telegram/commit/9da03fb86f06745741673a29fa4e3c7861d4463a))
28
+ * add legend plan approval action ([e82111a](https://github.com/sase-org/sase-telegram/commit/e82111a4f2a4b2d04460ad12d5bc812e7b7b11e5))
29
+ * Add logging and rate-limit slash command registration ([446c577](https://github.com/sase-org/sase-telegram/commit/446c57749bcdd5fd465e3f25e1a2e6a3d671e0eb))
30
+ * Add plan feedback support to Telegram integration ([2622480](https://github.com/sase-org/sase-telegram/commit/262248083fc0810e7ea7fc06d549c91d4d52aae1))
31
+ * Add Resume copy button to workflow completion Telegram messages ([ce533c1](https://github.com/sase-org/sase-telegram/commit/ce533c1c48b7ec95bf808e38cb74aa87f3a3767b))
32
+ * add Retry button to Telegram agent launch keyboard ([927a16f](https://github.com/sase-org/sase-telegram/commit/927a16fbdc4a404be2cbbb96f31ef8e96ad94901))
33
+ * add Telegram changes command ([f558c62](https://github.com/sase-org/sase-telegram/commit/f558c629c182bb68691b3b30e191108a0c8d3ddc))
34
+ * add Telegram install command ([da1193a](https://github.com/sase-org/sase-telegram/commit/da1193a4439af76668c986574acb30359a12fd14))
35
+ * Add Wait copy button to agent launch messages ([8f1b3f2](https://github.com/sase-org/sase-telegram/commit/8f1b3f20d904947dcfcb79f3aa9420914a7885d9))
36
+ * allow disabling Telegram agent launches ([e2f0c94](https://github.com/sase-org/sase-telegram/commit/e2f0c94f10e2ec1474a6d9cefbd87d8618bf1873))
37
+ * Always attach plan PDF in approval messages ([39b2550](https://github.com/sase-org/sase-telegram/commit/39b25500da3826ebb0ec5455a5d031d351b35dc0))
38
+ * Always show Epic button for plan notifications ([a35b8c1](https://github.com/sase-org/sase-telegram/commit/a35b8c1a01a1b51d2033f13c6ae053512b6a8f3e))
39
+ * Auto-name telegram-originated agents and show name in completion messages ([33351e6](https://github.com/sase-org/sase-telegram/commit/33351e6d44790884ec3b12e1780b2cb43c304e76))
40
+ * **bead:** /bead with no args shows inline-keyboard picker of open beads ([5658161](https://github.com/sase-org/sase-telegram/commit/5658161d32a79ae89460651996f43e7201a5cd52))
41
+ * **bead:** resolve project context for /bead from VCS tags / env ([f266d0f](https://github.com/sase-org/sase-telegram/commit/f266d0fe164ae4233c2001b93777ab83ce8072df))
42
+ * Better markdown formatting ([0ee3b6b](https://github.com/sase-org/sase-telegram/commit/0ee3b6b4987bc6fc89734effa703d403ac459655))
43
+ * Change Telegram commands from slash to dot prefix for easier mobile typing ([c24e97b](https://github.com/sase-org/sase-telegram/commit/c24e97bba8479704e6d48f351c5174f9f4d91dd2))
44
+ * deliver generated PDFs as Telegram attachments (sase-1j.4) ([7b0fcbd](https://github.com/sase-org/sase-telegram/commit/7b0fcbd66ff0c08a2f98daa47504570f7f1a7f2c))
45
+ * Detect research files in agent diffs and send as separate PDFs ([19c6114](https://github.com/sase-org/sase-telegram/commit/19c611499f40e9531f39512db783b4607614a0be))
46
+ * Dismiss plan buttons if user approves in TUI ([f50e079](https://github.com/sase-org/sase-telegram/commit/f50e079d0ff089783dae0730364114b0cdc3c3a0))
47
+ * Display agent prompt in workflow-complete Telegram messages ([da837fe](https://github.com/sase-org/sase-telegram/commit/da837feb4eb386d66b4a97dfb6ffdfd521df5a6a))
48
+ * Display PR URL in agent completion Telegram message ([099db0e](https://github.com/sase-org/sase-telegram/commit/099db0ef91705cd21cf4df430f6616e55b7e398d))
49
+ * Embed agent diff into response PDF instead of separate attachment ([c2e9ecb](https://github.com/sase-org/sase-telegram/commit/c2e9ecb3b6754e7d281d674af8f1706732dbdcb9))
50
+ * Filter silent notifications from Telegram outbound ([2a19416](https://github.com/sase-org/sase-telegram/commit/2a1941683af48075fe37f6e846f59251542945f1))
51
+ * group Telegram agent list by status ([7581aed](https://github.com/sase-org/sase-telegram/commit/7581aed9410c369b3e30cb9a24a518fcfb5f5b8e))
52
+ * Implement inbound Telegram message handling (Phase 4) ([f4ed511](https://github.com/sase-org/sase-telegram/commit/f4ed511528e4a3a8fbd5a661d9984489b51171a0))
53
+ * Implement outbound Telegram notification sending (Phase 3) ([ce0dfd2](https://github.com/sase-org/sase-telegram/commit/ce0dfd27ae1928f117a98892ef6f151cc41a103e))
54
+ * Improve .list dot command with HTML formatting, spacing, and prompt snippets ([3f1567c](https://github.com/sase-org/sase-telegram/commit/3f1567c9fbdbec2f91bd5f061e3c0e71f01e72da))
55
+ * Improve agent name display in Telegram notifications ([27353c7](https://github.com/sase-org/sase-telegram/commit/27353c7d0b79d1b34212ad6cb1a85b5a6530527e))
56
+ * **inbound:** add /bead slash command ([35cbfc7](https://github.com/sase-org/sase-telegram/commit/35cbfc7235174d5d4e62b3edb97a196e0e259f96))
57
+ * **inbound:** remove /listx slash command ([4ae6706](https://github.com/sase-org/sase-telegram/commit/4ae670686fa1c3d1942c7a9ba57eb51a15454c97))
58
+ * Launch sase agents from Telegram text messages ([69fcd54](https://github.com/sase-org/sase-telegram/commit/69fcd54c7f010f11c0d4f108c4e624b832a088fb))
59
+ * Make agent name stand out in Telegram launch/complete messages ([316436d](https://github.com/sase-org/sase-telegram/commit/316436d11e65f9034f5e2f0fad3ed4128a79f9de))
60
+ * Migrate telegram dot commands to slash commands ([ab6e86e](https://github.com/sase-org/sase-telegram/commit/ab6e86e9a60771b814879f3af8522dc4dace020d))
61
+ * per-conversation awaiting-feedback state for Telegram (sase-x.4) ([b4d1f9a](https://github.com/sase-org/sase-telegram/commit/b4d1f9a668d0a220d65c882484ff16aaacbe6d04))
62
+ * prefer .sase project spec extension with legacy .gp fallback (sase-33.5b) (sase-33) ([4b7d1ac](https://github.com/sase-org/sase-telegram/commit/4b7d1accc6d5daea06823a29260aba7ffffd9fac))
63
+ * Read inactive threshold from sase config ace.inactive_seconds ([540b895](https://github.com/sase-org/sase-telegram/commit/540b89547a67b7786e837a454d755b8fc409351c))
64
+ * Reconstruct backtick code markers from Telegram entities ([8ee86e7](https://github.com/sase-org/sase-telegram/commit/8ee86e748adb8a5f01db40573c484ce4a30c9b55))
65
+ * Remove spoiler message from telegram outbound notifications ([da4e0f8](https://github.com/sase-org/sase-telegram/commit/da4e0f8d260f04286c70d14d2a989f09c7fa5c01))
66
+ * rename plan run option to quest ([3422fff](https://github.com/sase-org/sase-telegram/commit/3422fff7a253849af7c0f848b2d4dfea9505107f))
67
+ * rename Telegram install command to update ([6701556](https://github.com/sase-org/sase-telegram/commit/6701556364ed6cd4ee28dcf3aa3edf89dc884265))
68
+ * rename telegram plan approval button to tale ([a3d2fa6](https://github.com/sase-org/sase-telegram/commit/a3d2fa69562235f39db40c0599f600f9b8d58bfb))
69
+ * rename Telegram resume actions to fork ([37e19c3](https://github.com/sase-org/sase-telegram/commit/37e19c3d0fc15b2d8b448a1200f2609cdc6cad88))
70
+ * Rename to sase-telegram ([8735e75](https://github.com/sase-org/sase-telegram/commit/8735e758e35951da49215b5260e1cb66d1777a77))
71
+ * render bead metadata in completion messages ([096c212](https://github.com/sase-org/sase-telegram/commit/096c212316694a648831b38d8463f5d78a22861f))
72
+ * Replace Telegram "📦 Commit" button with "🚀 Run" ([5639ff1](https://github.com/sase-org/sase-telegram/commit/5639ff1442f85974edece083d75d605ad8e455be))
73
+ * Send response-only chat file attachments in telegram notifications ([ada8b50](https://github.com/sase-org/sase-telegram/commit/ada8b50aa9ef732d6919e83d7f09c4d2108dc40e))
74
+ * Send Telegram notifications immediately when TUI is not running ([ff62832](https://github.com/sase-org/sase-telegram/commit/ff628328bec3300fd6b0bcac699f88cc9abb5e75))
75
+ * send Telegram update completion messages ([32fd6a1](https://github.com/sase-org/sase-telegram/commit/32fd6a1e5a300554c7ca04d3325956ab9cfdaf5f))
76
+ * show agent runtime in workflow completions ([81f8ed2](https://github.com/sase-org/sase-telegram/commit/81f8ed21ba2d6e52edc1c47b3dfd0d3df71e42aa))
77
+ * Show LLM provider/model label in plan review Telegram messages ([527716d](https://github.com/sase-org/sase-telegram/commit/527716d2cb6b3481b3ebb9899a9b09da378b46c3))
78
+ * Show provider/model label in Telegram agent notifications ([c668053](https://github.com/sase-org/sase-telegram/commit/c668053c5318feba3696ad26d163ebf3f23dfb1b))
79
+ * Style agent launch notification with MarkdownV2 bold header and emoji ([657b4cb](https://github.com/sase-org/sase-telegram/commit/657b4cbd2ae4524b965168e1a7a1cc0d78a4924d))
80
+ * summarize Telegram chop output (sase-36.4) ([565633f](https://github.com/sase-org/sase-telegram/commit/565633fa426e43f669f25a5c12657d570bd99b69))
81
+ * Support multi-model directive in Telegram agent launches ([e358824](https://github.com/sase-org/sase-telegram/commit/e358824d4b8e320356351bd5f2f6e06e5893a119))
82
+ * support Telegram image albums ([e6a67c6](https://github.com/sase-org/sase-telegram/commit/e6a67c6d0bfa6f208aa92ac73c46c82444eba2c7))
83
+ * trim /resume to running agents only ([8731219](https://github.com/sase-org/sase-telegram/commit/873121910c63ba720a603a7df59efd5af1989267))
84
+ * Use #resume:@<name> when agent has #pr in prompt ([f961d4b](https://github.com/sase-org/sase-telegram/commit/f961d4b54c36853c35b170794cf2ac7663cd42d3))
85
+ * Use branch name instead of project name in resume button ([43b6d08](https://github.com/sase-org/sase-telegram/commit/43b6d08886e1a4f49da92a246223240281b7a8be))
86
+ * Use unique icon for Retry button in kill confirmation ([6629ec0](https://github.com/sase-org/sase-telegram/commit/6629ec08baf6c75279d914ec6297a0c7a6e3f672))
87
+ * Use unique icons for Resume and Wait telegram buttons ([4e765ae](https://github.com/sase-org/sase-telegram/commit/4e765aeffd61f9687f4fdae8ee8c3c33b0c38268))
88
+ * Wire /xprompts command into the Telegram bot ([2654ef3](https://github.com/sase-org/sase-telegram/commit/2654ef3b428892675f937da52cec86814a5c4971))
89
+
90
+
91
+ ### Bug Fixes
92
+
93
+ * 'unknown' in /resume ([3e5eb01](https://github.com/sase-org/sase-telegram/commit/3e5eb01c44ceaae926d65be3802418a76b21351f))
94
+ * Add exclusive lock to prevent concurrent outbound runs from duplicating Telegram sends ([8d05aaf](https://github.com/sase-org/sase-telegram/commit/8d05aafe5dd0822c2bac27b8bdaf98dccc663be8))
95
+ * Advance high-water mark to last TUI activity time unconditionally ([1133933](https://github.com/sase-org/sase-telegram/commit/113393341c4b559e5971f3b634520e92282571bd))
96
+ * align changes command wording ([20095cf](https://github.com/sase-org/sase-telegram/commit/20095cf566a632012b9ebe9f82040e264121609c))
97
+ * allocate names for Telegram retry prompts ([7a9b50c](https://github.com/sase-org/sase-telegram/commit/7a9b50ca5568096aff15785dc3d51ca25c5aeea9))
98
+ * Always show Retry button on kill confirmations by falling back to raw_xprompt.md ([560d4d8](https://github.com/sase-org/sase-telegram/commit/560d4d82ccc4dc1e9ea14bf241eae38862858825))
99
+ * avoid Telegram auto-name launch race ([a5f47bd](https://github.com/sase-org/sase-telegram/commit/a5f47bdac7c2a9fdba3fc2ff009d49089b9c821c))
100
+ * confirm epic and legend Telegram plan actions ([a1a1590](https://github.com/sase-org/sase-telegram/commit/a1a15902f78c51d71e8b84cb9dd12651515f0186))
101
+ * duplicate notifications ([42c787d](https://github.com/sase-org/sase-telegram/commit/42c787d1682a73227c570fc38d5350f04b730467))
102
+ * Ensure kill confirmation message is always sent ([38dc5e9](https://github.com/sase-org/sase-telegram/commit/38dc5e90011fa1ac6566174de5760fd9403f72d7))
103
+ * Filter autonomous (approve) agents from .listx output ([1447ead](https://github.com/sase-org/sase-telegram/commit/1447eade1d2fc1d729c6855c859a81877943a6d2))
104
+ * Fix 7 test failures from stale assertions and missing attributes ([a82448d](https://github.com/sase-org/sase-telegram/commit/a82448d676946a83af060f9aa9f713f988a64f06))
105
+ * Fix expandable blockquote splitting at code block boundaries ([fc13405](https://github.com/sase-org/sase-telegram/commit/fc134056b866dccbb3f59efdcd649ae2edcd50dd))
106
+ * Fix Telegram blockquote splitting on blank lines ([ea8efe7](https://github.com/sase-org/sase-telegram/commit/ea8efe70b09c725d121a7012d926772da92de4bc))
107
+ * Handle 'Message is too long' by splitting and not retrying BadRequest ([9353f8b](https://github.com/sase-org/sase-telegram/commit/9353f8b3c98dc58c5be1754b9fd5db24276ef486))
108
+ * handle plural bead command in Telegram ([cf022f0](https://github.com/sase-org/sase-telegram/commit/cf022f0fcf723f126bca0a9528f35b5e149d2eb4))
109
+ * handle unset Telegram activity diagnostics paths ([2c34102](https://github.com/sase-org/sase-telegram/commit/2c34102c7d94fc15d26f1ac5e45fe461a04f7a2f))
110
+ * **inbound:** use launcher-returned agent name to build buttons ([265ca19](https://github.com/sase-org/sase-telegram/commit/265ca198a54e73f756ab7720c898d8184cf2874a))
111
+ * include in-progress beads in Telegram picker ([54885f6](https://github.com/sase-org/sase-telegram/commit/54885f6c03df9036ae1e88ee4a6f7dc2ae813080))
112
+ * list Telegram beads across known projects ([52d455f](https://github.com/sase-org/sase-telegram/commit/52d455f6e4cd16ce79e49a75d734f09d4600e331))
113
+ * Make PDF conversion robust with engine fallback chain ([172a8d1](https://github.com/sase-org/sase-telegram/commit/172a8d11af4634123aa23bc17acc126abf884971))
114
+ * Move Epic button to Feedback row in plan approval keyboard ([8bd8f10](https://github.com/sase-org/sase-telegram/commit/8bd8f10c1552e73b6b8e292005be2ec623cf5240))
115
+ * normalize Telegram VCS xprompt shorthand ([86fbef3](https://github.com/sase-org/sase-telegram/commit/86fbef375367256a6c57641d77d860f6d92f901c))
116
+ * Only advance high-water mark on successful Telegram sends ([5e156ee](https://github.com/sase-org/sase-telegram/commit/5e156ee2fff8e11d08330d404f233a7ce7745c94))
117
+ * preserve fenced commit messages in Telegram PDFs ([452d726](https://github.com/sase-org/sase-telegram/commit/452d72611ad27529539d90dfe64dd0529b902897))
118
+ * Prevent infinite resend loop for Telegram notifications ([8d3dcdf](https://github.com/sase-org/sase-telegram/commit/8d3dcdf7d0e451a5781ea232851442282c392ee3))
119
+ * Re-check idle state before each notification in outbound send loop ([9027b60](https://github.com/sase-org/sase-telegram/commit/9027b6028e62735e6803c6333ae334980082f08f))
120
+ * remember Telegram bead project context ([0115693](https://github.com/sase-org/sase-telegram/commit/0115693bd7e2af0d869e838d88b5940e34411339))
121
+ * Remove PID from agent launch Telegram notifications ([98565fe](https://github.com/sase-org/sase-telegram/commit/98565fe2d038588c561342d0df672fd2c17c3db3))
122
+ * rename plan run button to Approve ([f029783](https://github.com/sase-org/sase-telegram/commit/f0297835c878c51086454440630a696fc1597419))
123
+ * Rename reused loop variable to fix mypy type conflict ([65ee45c](https://github.com/sase-org/sase-telegram/commit/65ee45ce2076755e466a5f452bd343ff79cfb42a))
124
+ * rename Telegram kill retry action to redo ([afad609](https://github.com/sase-org/sase-telegram/commit/afad60947bf648bd9a115e85076a04e55b9db96c))
125
+ * Replace removed EASTERN_TZ constant with get_timezone() ([10fc31d](https://github.com/sase-org/sase-telegram/commit/10fc31d315e4130b04dd5e473a8b127020bcc289))
126
+ * Resolve paths before relative_to in plan copy button ([e0d72c9](https://github.com/sase-org/sase-telegram/commit/e0d72c9890ec05fbafd2ba4eb25cf3d0b8fdb297))
127
+ * Restore auto-name display in agent launch confirmation messages ([92240b2](https://github.com/sase-org/sase-telegram/commit/92240b28f57c1b7e4b95033ff8a3b20e64efed3c))
128
+ * Restore sase_chop_ prefix on entry point script names ([9da1227](https://github.com/sase-org/sase-telegram/commit/9da1227868db3d62e59c8ed3049f610aa11b0d5a))
129
+ * route Telegram multi-model launches through canonical pipeline ([1e1f227](https://github.com/sase-org/sase-telegram/commit/1e1f227ca3e7a27898bdd90d80f80ac954023531))
130
+ * sase axe errors due to rate limiting ([85de84c](https://github.com/sase-org/sase-telegram/commit/85de84c952e32b00c79a44f13faf693a9020a103))
131
+ * Save pending action immediately after send_message to fix race ([61bc78b](https://github.com/sase-org/sase-telegram/commit/61bc78bfb819f44a2c880f673afca9922f592a20))
132
+ * Save Telegram update offset before processing to prevent duplicate agent launches ([c60faf4](https://github.com/sase-org/sase-telegram/commit/c60faf4bb804cd186813f9c852938d1c8fb038b9))
133
+ * Skip auto-name prepend for `%r:N` Telegram prompts ([3103bb0](https://github.com/sase-org/sase-telegram/commit/3103bb0e81fe1850f3d3500325eb57baf8a5cda3))
134
+ * Skip pre-TUI-quit notifications in Telegram outbound ([bb825a8](https://github.com/sase-org/sase-telegram/commit/bb825a88e807acb341f14d2bc79f6466fa74f96d))
135
+ * Skip Retry button when prompt exceeds CopyTextButton 256-char limit ([a825247](https://github.com/sase-org/sase-telegram/commit/a825247a2c35aa696931840b559d70f01a8ed98b))
136
+ * Start attaching files ([4d202ba](https://github.com/sase-org/sase-telegram/commit/4d202ba47dc5f39049102303f92ca3da3ecc055d))
137
+ * Stop advancing HWM based on TUI activity time ([5bfa60b](https://github.com/sase-org/sase-telegram/commit/5bfa60b2e58185eb6e4b18019c935cb115cd12fc))
138
+ * Stop filtering dismissed notifications in Telegram outbound ([ca8782b](https://github.com/sase-org/sase-telegram/commit/ca8782b5c3d4724ca2c7fdf7a562d2a4e0617859))
139
+ * Update imports after list_running_agents/kill_named_agent moved to sase.agent.running ([8a61d2f](https://github.com/sase-org/sase-telegram/commit/8a61d2f0ae4150ab57044ac8033142f1a7f9a575))
140
+ * Use wait directive in launch message buttons and add Resume button ([efc8eab](https://github.com/sase-org/sase-telegram/commit/efc8eab487b2d8271d0cde09e80fc8a64c01722b))
@@ -0,0 +1 @@
1
+ @AGENTS.md
@@ -0,0 +1,32 @@
1
+ # sase-telegram task runner
2
+
3
+ venv_dir := ".venv"
4
+ venv_bin := venv_dir / "bin"
5
+
6
+ default:
7
+ @just --list
8
+
9
+ _setup:
10
+ @[ -x {{ venv_bin }}/python ] || (uv venv {{ venv_dir }} && uv pip install -e ".[dev]")
11
+
12
+ install: _setup
13
+ uv pip install -e ".[dev]"
14
+
15
+ lint: _setup
16
+ {{ venv_bin }}/ruff check src/ tests/
17
+ {{ venv_bin }}/mypy
18
+
19
+ fmt: _setup
20
+ {{ venv_bin }}/ruff format src/ tests/
21
+ {{ venv_bin }}/ruff check --fix src/ tests/
22
+
23
+ test *args: _setup
24
+ {{ venv_bin }}/pytest {{ args }}
25
+
26
+ check: lint test
27
+
28
+ clean:
29
+ rm -rf build/ dist/ *.egg-info src/*.egg-info .mypy_cache/ .ruff_cache/ .pytest_cache/
30
+
31
+ build: _setup
32
+ {{ venv_bin }}/python -m build