Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
9024d46
release: merge develop into main for v0.26.0
DavidsonGomes Apr 22, 2026
566a534
release: merge develop into main for v0.27.0
DavidsonGomes Apr 22, 2026
13092e2
release: merge develop into main for v0.28.0
DavidsonGomes Apr 22, 2026
c84d615
refactor(telegram): centralize notifications in routines, remove from…
Apr 23, 2026
24af125
release: merge develop into main for v0.29.0
DavidsonGomes Apr 23, 2026
c6b635f
release: merge develop into main for v0.29.1
DavidsonGomes Apr 23, 2026
2d75828
release: merge develop into main for v0.29.2
DavidsonGomes Apr 23, 2026
23a2e44
release: merge develop into main for v0.29.3
DavidsonGomes Apr 23, 2026
86dbc3a
release: merge develop into main for v0.30.0
DavidsonGomes Apr 23, 2026
6b62b16
hotfix: merge activity parser fix into main for v0.30.0
DavidsonGomes Apr 23, 2026
e0ec879
release: merge develop into main for v0.30.1
DavidsonGomes Apr 23, 2026
cefae61
release: merge develop into main for v0.30.2
DavidsonGomes Apr 24, 2026
271f9e5
release: merge develop into main for v0.30.3
DavidsonGomes Apr 24, 2026
c6e80b3
release: merge develop into main for v0.30.4
DavidsonGomes Apr 24, 2026
56d78af
release: merge develop into main for v0.31.0
DavidsonGomes Apr 24, 2026
9d82da8
fix: merge brain-repo reconfigure-entry fix into main (v0.31.0)
DavidsonGomes Apr 24, 2026
16aae6c
release: merge develop into main for v0.32.0
DavidsonGomes Apr 24, 2026
60dc979
release: merge develop into main for v0.32.1
DavidsonGomes Apr 24, 2026
3066a50
release: merge develop into main for v0.32.2
DavidsonGomes Apr 24, 2026
277adb0
fix(telegram): remove reply() from prod-review-todoist skill
Apr 25, 2026
cab8966
fix(chat-bridge): resolve agent file from WORKSPACE_ROOT, not session…
Apr 25, 2026
fb9ebd2
release: merge develop into main for v0.32.3
DavidsonGomes Apr 25, 2026
cc27a4a
fix(telegram): eliminate duplicate notifications from inline reply() …
Apr 26, 2026
7400aa1
fix(telegram): remove all inline reply() calls from skill SKILL.md files
Apr 26, 2026
3cfeed2
feat: merge v0.33.0 upstream with TKR security hardening and failover…
jbmendonca Apr 27, 2026
19b72b3
fix: export PageSkeleton
jbmendonca Apr 27, 2026
ebc0e98
Merge tag 'v0.33.0' into tkr/v0.33.0-customized
jbmendonca Apr 27, 2026
0ff3ab0
fix(onboarding): multi-user auto-skip + 3-layer defense
jbmendonca Apr 30, 2026
5db7fa7
fix(users): add reactivation, fix delete feedback, fix username conflict
jbmendonca Apr 30, 2026
db6b721
feat(core): implement global SPEC and fix provider routing failover
jbmendonca Apr 30, 2026
a90b129
fix(dashboard): fix terminal websocket proxy routing on Werkzeug 3.1+
jbmendonca Apr 30, 2026
ffe1a7a
docs: add WEBSOCKET_PROXY_FIX.md explaining terminal stability patch
jbmendonca Apr 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .claude/skills/fin-daily-pulse/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,9 @@ workspace/finance/reports/daily/[C] YYYY-MM-DD-financial-pulse.html

Create the directory `workspace/finance/reports/daily/` if it does not exist.

## Step 8 — Confirm and notify (ONE Telegram message only)
## Step 8 — Confirm

Output the completion summary, then send **exactly one** Telegram message. Do NOT call `reply` more than once per run.
Output the completion summary in the terminal:

```
## Financial Pulse generated
Expand All @@ -171,6 +171,4 @@ Output the completion summary, then send **exactly one** Telegram message. Do NO
**Alerts:** {N} attention points
```

Call `reply` **once** with a short summary (do not send the full markdown above — send a compact version):

- Format: `[emoji] Financial Pulse [date] | MRR: R$ X,XXX | Receita: R$ X,XXX | Churn: X% | [N] alertas`
Do NOT send a Telegram message here — the caller handles notifications.
6 changes: 0 additions & 6 deletions .claude/skills/fin-monthly-close-kickoff/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,9 +182,3 @@ Create the directory `workspace/finance/reports/monthly/` if it does not exist.
**Checklist:** X/10 completed
**Finance team pending items:** {N} items
```

### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + "Monthly Close" + month's result + pending items (2-3 lines)
6 changes: 0 additions & 6 deletions .claude/skills/fin-weekly-report/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,3 @@ Create the directory `workspace/finance/reports/weekly/` if it does not exist.
**MRR total:** R$ X,XXX (Stripe: R$ X,XXX | Evo Academy: R$ X,XXX) | **Projected 30d balance:** R$ XX,XXX
**Alerts:** {N} overdue accounts | {N} pending invoices
```

### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + "Financial Weekly" + revenue vs expenses + MRR + alerts (2-3 lines)
8 changes: 0 additions & 8 deletions .claude/skills/gog-email-triage/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -354,11 +354,3 @@ See `skills/gog/_shared/references/testing.md` for complete test plan.
- If email subject/sender contains obvious credentials or secrets, redact in output

- For recurring newsletters, suggest creating a filter/rule rather than manual archiving


### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + main result (1-3 lines)
- If the routine had no updates, send anyway with "no updates"
7 changes: 3 additions & 4 deletions .claude/skills/int-github-review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ Create directory if it does not exist.

### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + main result (1-3 lines)
- If the routine had no updates, send anyway with "no updates"
Upon completion, use the Telegram reply tool to send a short summary to the user.
Format: emoji + routine name + main result (1-3 lines).
If the routine had no updates, send anyway with "no updates".
7 changes: 3 additions & 4 deletions .claude/skills/int-linear-review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ Create the directory `workspace/projects/linear-reviews/` if it does not exist.

### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + main result (1-3 lines)
- If the routine had no updates, send anyway with "no updates"
Upon completion, use the Telegram reply tool to send a short summary to the user.
Format: emoji + routine name + main result (1-3 lines).
If the routine had no updates, send anyway with "no updates".
11 changes: 6 additions & 5 deletions .claude/skills/int-sync-meetings/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,12 +186,13 @@ Without listing tasks one by one — just counts. If the user wants details, the

### Step 9 — Notify via Telegram

Send the Step 8 summary via Telegram to the user using the `/int-telegram` skill:
- Chat ID: `YOUR_CHAT_ID`
- Use `reply(chat_id="YOUR_CHAT_ID", text="...")` via MCP
- Short format: emoji + title + meeting and task count
Only send if at least one new meeting was processed (i.e., you did NOT stop at Step 2).

If there are no new meetings (stopped at Step 2), do **NOT** send any Telegram message — stay silent. Only notify when at least one new meeting was processed.
Use the Telegram reply tool with the user's chat_id and a short summary:
- Format: emoji + title + meeting count + task count
- One line only

If there are no new meetings (stopped at Step 2), do **NOT** send any Telegram message — stay completely silent.

## Notes

Expand Down
7 changes: 0 additions & 7 deletions .claude/skills/prod-dashboard/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,3 @@ Present a short summary:
**Health:** Product {status} | Community {status} | Financial {status} | Routines {status}
**Alerts:** {N} attention points
```

### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + health status of each area (1-3 lines)
- If there were no updates, send anyway with "no updates"
7 changes: 0 additions & 7 deletions .claude/skills/prod-review-todoist/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,3 @@ If the user wants to see details of what changed, they ask.
- **If unsure about the category**, use `[Operations]` as fallback
- **Execute first, report after** — no intermediate report


### Notify via Telegram

Upon completion, send **exactly ONE** Telegram message — do NOT call `reply()` more than once per run:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + main result (1-3 lines, all combined in a single message)
- If the routine had no updates, send anyway with "no updates"
8 changes: 0 additions & 8 deletions .claude/skills/prod-trends/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,3 @@ Create `memory/trends/` if it does not exist.
- **If a source has no data, skip** — do not block due to a missing report
- **Focus on action** — each insight should lead to a concrete recommendation
- **Do not alarm without evidence** — red only when the metric truly indicates risk


### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + main result (1-3 lines)
- If the routine had no updates, send anyway with "no updates"
6 changes: 0 additions & 6 deletions .claude/skills/pulse-monthly/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,3 @@ Create the directory `workspace/community/reports/monthly/` if it does not exist
**Sentiment:** {trend} | **Resolution:** {X}%
**Highlights:** {N} features, {N} bugs, {N} docs gaps
```

### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + "Community Monthly" + MAM + sentiment + highlights (2-3 lines)
8 changes: 0 additions & 8 deletions .claude/skills/pulse-weekly/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,3 @@ Report saved to workspace/community/reports/weekly/
- **Docs gap is gold** — each question without docs becomes a backlog item
- **Comparison is fundamental** — always show trend vs previous week
- **Product insights** — the most valuable section, handle with care


### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + main result (1-3 lines)
- If the routine had no updates, send anyway with "no updates"
8 changes: 0 additions & 8 deletions .claude/skills/sage-strategy-digest/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,3 @@ Present a short and direct version.
- **Opinions flagged** — when it is opinion vs data, make it clear
- **One recommendation** — do not give 10 suggestions, give 1 clear one
- **Connect the dots** — the value of the digest is crossing areas, not repeating individual reports


### Notify via Telegram

Upon completion, send a short summary via Telegram to the user:
- Use the Telegram MCP: `reply(chat_id="YOUR_CHAT_ID", text="...")`
- Format: emoji + routine name + main result (1-3 lines)
- If the routine had no updates, send anyway with "no updates"
13 changes: 0 additions & 13 deletions .claude/skills/social-analytics-report/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,16 +137,3 @@ workspace/social/reports/consolidated/[C] YYYY-MM-DD-social-analytics.html
```

Create directory if it does not exist.

### Step 9 — Telegram

Notify: `reply(chat_id="YOUR_CHAT_ID", text="...")`
Format:
```
📊 Social Analytics — {period}
👥 Total followers: {N} ({delta})
📹 YouTube: {subs} sub | {eng}% eng
📸 Instagram: {followers} fol | {eng}% eng
💼 LinkedIn: profile connected
🏆 Top: "{best content}" ({platform}, {eng}%)
```
5 changes: 0 additions & 5 deletions .claude/skills/social-youtube-report/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,3 @@ workspace/social/reports/youtube/[C] YYYY-MM-DD-youtube-{period}.html
```

Criar diretório if it does not exist.

### Step 7 — Telegram

Notify: `reply(chat_id="946857210", text="...")`
Format: emoji + canal + inscritos + delta + melhor vídeo
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ name: CI

on:
pull_request:
branches: [develop, main]
branches: [main]
paths:
- "dashboard/**"
- "tests/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/ci.yml"
push:
branches: [develop, main]
branches: [main]
paths:
- "dashboard/**"
- "tests/**"
Expand Down
23 changes: 23 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.11
hooks:
- id: ruff-check
args: [--fix, --exit-non-zero-on-fix]
- id: ruff-format

- repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.1.0
hooks:
- id: prettier
files: ^dashboard/frontend/.*\.(ts|tsx|js|jsx|json|css|md|html|yaml|yml)$

- repo: local
hooks:
- id: frontend-typecheck
name: frontend type-check
entry: npm --prefix dashboard/frontend run build
language: system
files: ^dashboard/frontend/
pass_filenames: false
always_run: true
12 changes: 7 additions & 5 deletions ADWs/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,11 +317,13 @@ def run_skill(
)
if chat_id:
prompt += (
f"\n\nAo concluir TODOS os passos acima, envie UMA única mensagem Telegram via:"
f'\nreply(chat_id="{chat_id}", text="...")'
f"\nFormato: emoji + nome da rotina + principais resultados em 2-3 linhas."
f"\nCRÍTICO: chame reply() EXATAMENTE UMA VEZ, somente aqui no final."
f" Não envie mensagens intermediárias nem de progresso."
f"\n\n---\n"
f"NOTIFICAÇÃO TELEGRAM — executar SOMENTE após concluir TODOS os passos acima.\n"
f"Use a ferramenta Telegram reply com chat_id={chat_id} e um texto compacto:\n"
f" emoji + nome da rotina + data + principais resultados em 2-3 linhas.\n"
f"REGRA ABSOLUTA: chame a ferramenta reply UMA ÚNICA VEZ, no final de tudo.\n"
f"Nunca chame reply para progresso, confirmação intermediária ou teste.\n"
f"---"
)
return run_claude(prompt, log_name or skill_name, timeout, agent=agent)

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.dashboard
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ FROM python:3.12-slim AS runtime

# System deps
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
curl git \
&& rm -rf /var/lib/apt/lists/*

# Install uv
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.swarm.dashboard
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ FROM python:3.12-slim AS runtime
# System deps: curl for healthcheck + Node.js 22 for terminal-server binary.
# We use NodeSource so the final image is clean (no build toolchain).
RUN apt-get update && apt-get install -y --no-install-recommends \
curl ca-certificates gnupg openssl \
curl ca-certificates gnupg openssl git \
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& apt-get clean \
Expand Down
Loading
Loading