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.
- sase_telegram-0.1.0/.github/workflows/ci.yml +55 -0
- sase_telegram-0.1.0/.github/workflows/pr-title.yml +31 -0
- sase_telegram-0.1.0/.github/workflows/publish.yml +86 -0
- sase_telegram-0.1.0/.gitignore +59 -0
- sase_telegram-0.1.0/.release-please-manifest.json +1 -0
- sase_telegram-0.1.0/.sase_beads/beads.db +0 -0
- sase_telegram-0.1.0/.sase_beads/config.json +5 -0
- sase_telegram-0.1.0/.sase_beads/issues.jsonl +0 -0
- sase_telegram-0.1.0/AGENTS.md +32 -0
- sase_telegram-0.1.0/CHANGELOG.md +140 -0
- sase_telegram-0.1.0/CLAUDE.md +1 -0
- sase_telegram-0.1.0/Justfile +32 -0
- sase_telegram-0.1.0/PKG-INFO +217 -0
- sase_telegram-0.1.0/README.md +199 -0
- sase_telegram-0.1.0/docs/architecture.md +72 -0
- sase_telegram-0.1.0/docs/inbound.md +135 -0
- sase_telegram-0.1.0/docs/outbound.md +71 -0
- sase_telegram-0.1.0/plans/artifact_passing.md +0 -0
- sase_telegram-0.1.0/pyproject.toml +71 -0
- sase_telegram-0.1.0/release-please-config.json +15 -0
- sase_telegram-0.1.0/sase.yml +1 -0
- sase_telegram-0.1.0/src/sase_telegram/__init__.py +1 -0
- sase_telegram-0.1.0/src/sase_telegram/bead_format.py +290 -0
- sase_telegram-0.1.0/src/sase_telegram/callback_data.py +47 -0
- sase_telegram-0.1.0/src/sase_telegram/credentials.py +33 -0
- sase_telegram-0.1.0/src/sase_telegram/formatting.py +612 -0
- sase_telegram-0.1.0/src/sase_telegram/inbound.py +629 -0
- sase_telegram-0.1.0/src/sase_telegram/outbound.py +106 -0
- sase_telegram-0.1.0/src/sase_telegram/pdf_convert.py +24 -0
- sase_telegram-0.1.0/src/sase_telegram/pdf_style.css +37 -0
- sase_telegram-0.1.0/src/sase_telegram/pending_actions.py +80 -0
- sase_telegram-0.1.0/src/sase_telegram/rate_limit.py +82 -0
- sase_telegram-0.1.0/src/sase_telegram/scripts/__init__.py +18 -0
- sase_telegram-0.1.0/src/sase_telegram/scripts/sase_tg_inbound.py +2398 -0
- sase_telegram-0.1.0/src/sase_telegram/scripts/sase_tg_outbound.py +504 -0
- sase_telegram-0.1.0/src/sase_telegram/telegram_client.py +257 -0
- sase_telegram-0.1.0/tests/__init__.py +0 -0
- sase_telegram-0.1.0/tests/test_bead_format.py +225 -0
- sase_telegram-0.1.0/tests/test_callback_data.py +45 -0
- sase_telegram-0.1.0/tests/test_credentials.py +64 -0
- sase_telegram-0.1.0/tests/test_formatting.py +807 -0
- sase_telegram-0.1.0/tests/test_inbound.py +3392 -0
- sase_telegram-0.1.0/tests/test_integration.py +866 -0
- sase_telegram-0.1.0/tests/test_outbound.py +562 -0
- sase_telegram-0.1.0/tests/test_pdf_convert.py +55 -0
- sase_telegram-0.1.0/tests/test_pending_actions.py +61 -0
- sase_telegram-0.1.0/tests/test_rate_limit.py +49 -0
- sase_telegram-0.1.0/tests/test_telegram_client.py +265 -0
- 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
|
|
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
|