Skip to content

PointBot chat surface + Notifier port + finish Firecrawl/LLM infra wiring - #2

Merged
jckail merged 2 commits into
masterfrom
cursor/point-bot-surface-and-infra
Jul 9, 2026
Merged

PointBot chat surface + Notifier port + finish Firecrawl/LLM infra wiring#2
jckail merged 2 commits into
masterfrom
cursor/point-bot-surface-and-infra

Conversation

@jckail

@jckail jckail commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Summary

Continues incorporating the pointup roadmap's unfinished work into point_bot. (The full pointup PR #1 code was already imported in #1 — verified: 188/188 files present. These are the roadmap 🔜 items that were never built.)

Two on-brand additions plus the infra finish:

1. Notifier port (core) + chat digests

  • New Notifier port alongside Mailer, with SlackWebhookNotifier, DiscordWebhookNotifier, ConsoleNotifier, and a failure-isolating CompositeNotifier (fetch-based, injectable for tests).
  • The worker digest job now also posts a compact digest to Slack/Discord when webhooks are configured — email path unchanged.

2. PointBot chat surface (apps/bot)

The repo is literally point_bot; this brings the bot back on the modern core.

  • Slack slash-command HTTP server calling @pointup/core use cases: portfolio, expiring, value, ask <question>, help (unrecognized text → assistant).
  • Pure, unit-tested core: command router + formatters + Slack signature verify (HMAC v0, 5-min replay window) + body parse. Transport is a thin shell that acks within Slack's 3s window and defers slow LLM replies via response_url.
  • Reuses the web assistant selection (Bedrock → OpenAI → heuristic). Self-hosted (BOT_DEFAULT_USER_ID) or multi-user identity mapping.
  • Dockerfile.bot, docker-compose bot profile, and docs/bot.md.

3. Finish the infra wiring (handoff's remaining not-done item)

  • Web task: optional Firecrawl + OpenAI-compatible LLM API-key Secrets Manager placeholders, gated by -c enableFirecrawl / -c enableOpenAiLlm; LLM_MODEL / LLM_BASE_URL / FIRECRAWL_BASE_URL from context; secret ARNs surfaced as stack outputs.
  • Digest task: optional SLACK_WEBHOOK_URL / DISCORD_WEBHOOK_URL from context.
  • CI now also builds the bot bundle.

Verification

  • 86 unit tests pass (74 core incl. 6 new Notifier tests + 12 new bot tests).
  • Typecheck clean across all workspaces and infra/.
  • eslint clean; bot esbuild bundle builds.
  • cdk synth clean (env-agnostic, matching CI) for both the default and full opt-in flag set; opt-in resources (Bedrock IAM, Firecrawl/OpenAI secrets, Slack env) confirmed present in the synthesized template.

Not included (natural follow-ups)

  • Provisioning the bot as a public HTTPS Fargate service in infra/ (needs ALB + ACM cert so Slack can reach it) — the app, image, and local compose service are ready.
  • Discord inbound interactions (ed25519); Discord is supported as an outbound digest channel today.
  • Real provider integrations behind TravelProviderGateway (Phase 3), and Phase 1/2 feature slices (multi-currency valuations, bulk membership edits) remain on the roadmap.

🤖 Generated with Claude Code

jckail and others added 2 commits July 8, 2026 23:14
… wiring

Continues incorporating the pointup roadmap's unfinished 🔜 work into point_bot.
The full pointup PR #1 code was already imported; these are the next items.

Notifier port (core):
- New `Notifier` port + `SlackWebhookNotifier` / `DiscordWebhookNotifier` /
  `ConsoleNotifier` / `CompositeNotifier` (fetch-based, injectable for tests).
- Worker digest job now also posts a compact digest to Slack/Discord when
  webhooks are configured, alongside email (renderDigestChat).

PointBot chat surface (new apps/bot workspace):
- Slack slash-command HTTP server consuming @pointup/core use cases:
  `portfolio`, `expiring`, `value`, `ask <question>`, `help`.
- Pure command router + formatters + Slack signature/parse (HMAC v0, 5-min
  replay window), all unit-tested; transport is a thin shell that defers slow
  LLM replies via response_url. Reuses the web assistant selection (Bedrock/
  OpenAI/heuristic). Self-hosted (BOT_DEFAULT_USER_ID) or multi-user mapping.
- Dockerfile.bot, docker-compose `bot` profile, docs/bot.md.

Infra wiring (finishes the handoff's not-done item):
- Web task: optional Firecrawl + OpenAI-compatible LLM API-key Secrets (gated
  by `-c enableFirecrawl` / `-c enableOpenAiLlm`), plus LLM_MODEL/LLM_BASE_URL/
  FIRECRAWL_BASE_URL from context; secret ARNs surfaced as outputs.
- Digest task: optional SLACK_WEBHOOK_URL / DISCORD_WEBHOOK_URL from context.
- CI builds the bot bundle.

Verification: 86 unit tests pass (74 core + 12 bot); all workspaces + infra
typecheck; eslint clean; bot bundle builds; cdk synth clean (default + opt-in,
opt-in resources verified in template).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 9, 2026

Copy link
Copy Markdown

Bugbot is not enabled for this team, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@jckail
jckail merged commit 9908ecd into master Jul 9, 2026
2 checks passed
@jckail
jckail deleted the cursor/point-bot-surface-and-infra branch July 9, 2026 06:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant