diff --git a/README.md b/README.md index 390bf46..dcf0c49 100644 --- a/README.md +++ b/README.md @@ -381,7 +381,7 @@ Every `TAI_*` knob above that behaves like a setting (model, backends, keys, voi ## Debug logging -`./tai.py --debug` records every interesting action twice: one line per event to `~/.tai/debug.log` (wiped on each root start, appended by child processes marked with `TAI_CHILD`), and one row per event in the vault `logs` table. `--debug stdout` / `--debug stderr` move the stream; `--debug-format json` switches lines from sentences to JSON (`TAI_DEBUG` / `TAI_DEBUG_FORMAT` do the same from env). Every event carries profile, bot, telegram chat id, a per-boot run id, and fixed meta: LLM completions trap backend, model, milliseconds, tokens in/out/total, and the system/user/assistant texts; tool calls trap name, redacted args, milliseconds, and outcome; turns, approvals, vault writes, scheduler fires, served MCP requests, CAP turns, and telegram updates each log once at their layer. Secret values never reach a log (names only, values redacted, secret-shaped tool args masked). The table is indexed on every filter column plus FTS, sealed at rest, and pruned to the newest 20,000 rows. Full rules and the event registry: [logging.md](logging.md). +`./tai.py --debug` records every interesting action twice: one line per event to `~/.tai/debug.log` (wiped on each root start, appended by child processes marked with `TAI_CHILD`), and one row per event in the vault `logs` table. `--debug stdout` / `--debug stderr` move the stream; `--debug-format json` switches lines from sentences to JSON (`TAI_DEBUG` / `TAI_DEBUG_FORMAT` do the same from env). Every event carries profile, bot, telegram chat id, a per-boot run id, and fixed meta: LLM completions trap backend, model, milliseconds, tokens in/out/total, the system/user/assistant texts, and the tool census (schemas actually sent, split into MCP/core/lazy, plus the name list, so laziness is checkable per call); tool calls trap name, redacted args, milliseconds, and outcome; turns, approvals, vault writes, scheduler fires, served MCP requests, CAP turns, and telegram updates each log once at their layer. Secret values never reach a log (names only, values redacted, secret-shaped tool args masked). The table is indexed on every filter column plus FTS, sealed at rest, and pruned to the newest 20,000 rows. Full rules and the event registry: [logging.md](logging.md). ## Telegram diff --git a/tai.py b/tai.py index 53464b6..cd3c00e 100755 --- a/tai.py +++ b/tai.py @@ -105,7 +105,7 @@ def _fromisoformat(text): return parsed.replace(tzinfo=tzinfo) raise ValueError("invalid datetime, use ISO like 2026-10-08T09:00") -VERSION = "1.44.1" +VERSION = "1.44.2" WORKER_STEPS = 12 CREATE_SKILL_STEPS = 40 FORK_MAX_DEPTH = 2