polygram 0.8.0-rc.26 → 0.8.0-rc.28
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.
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/polygram.js +12 -0
- package/scripts/doctor.js +6 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "polygram",
|
|
4
|
-
"version": "0.8.0-rc.
|
|
4
|
+
"version": "0.8.0-rc.28",
|
|
5
5
|
"description": "Telegram integration for Claude Code that preserves the OpenClaw per-chat session model. Migration target for OpenClaw users. Multi-bot, multi-chat, per-topic isolation; SQLite transcripts; inline-keyboard approvals. Bundles /polygram:status|logs|pair-code|approvals admin commands and a history skill.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"telegram",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polygram",
|
|
3
|
-
"version": "0.8.0-rc.
|
|
3
|
+
"version": "0.8.0-rc.28",
|
|
4
4
|
"description": "Telegram daemon for Claude Code that preserves the OpenClaw per-chat session model. Migration path for OpenClaw users moving to Claude Code.",
|
|
5
5
|
"main": "lib/ipc-client.js",
|
|
6
6
|
"bin": {
|
package/polygram.js
CHANGED
|
@@ -3730,6 +3730,18 @@ async function main() {
|
|
|
3730
3730
|
};
|
|
3731
3731
|
process.on('SIGINT', shutdown);
|
|
3732
3732
|
process.on('SIGTERM', shutdown);
|
|
3733
|
+
// rc.28: also catch SIGHUP. The shumabit deploy path runs polygram
|
|
3734
|
+
// inside `tmux new-session`; on `launchctl kickstart -k` the
|
|
3735
|
+
// shumabit-start launcher does `tmux kill-session -t polygram`
|
|
3736
|
+
// FIRST, then `pkill polygram --bot` 1s later. tmux kill-session
|
|
3737
|
+
// closes polygram's controlling pty → SIGHUP, not SIGTERM. Without
|
|
3738
|
+
// this listener, the shutdown drain never fires; in-flight rows
|
|
3739
|
+
// never flip to 'replay-pending'; boot-replay still picks them up
|
|
3740
|
+
// via the 'dispatched' status (3-min window), but anything that's
|
|
3741
|
+
// been mid-tool-use longer than the replayWindowMs gets silently
|
|
3742
|
+
// dropped. Surface symptom: bot stops responding after deploy on
|
|
3743
|
+
// long agent runs (the §7.4 incident).
|
|
3744
|
+
process.on('SIGHUP', shutdown);
|
|
3733
3745
|
|
|
3734
3746
|
try {
|
|
3735
3747
|
// Fresh per-boot secret, persisted 0600 for same-UID readers (cron
|
package/scripts/doctor.js
CHANGED
|
@@ -238,8 +238,13 @@ function checkPendingOutbound(db) {
|
|
|
238
238
|
function checkApprovals(db) {
|
|
239
239
|
if (!db) return;
|
|
240
240
|
try {
|
|
241
|
+
// Table is `pending_approvals` (migrations/004-approvals.sql).
|
|
242
|
+
// Pre-rc.27 this query was `FROM approvals` — a typo that caused
|
|
243
|
+
// every doctor run to silently land in the catch and emit
|
|
244
|
+
// "skipped: no such table: approvals" warnings instead of real
|
|
245
|
+
// pending counts.
|
|
241
246
|
const row = db.prepare(`
|
|
242
|
-
SELECT COUNT(*) AS n FROM
|
|
247
|
+
SELECT COUNT(*) AS n FROM pending_approvals
|
|
243
248
|
WHERE status = 'pending' AND bot_name = ?
|
|
244
249
|
`).get(botName);
|
|
245
250
|
if (row.n > 0) {
|