rowboat-api

module
v0.0.0-...-f911ff3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2026 License: Apache-2.0

README

rowboat-api

The Rowboat desktop backend. Replaces the closed hosted backend (https://api.x.rowboatlabs.com) that the Electron desktop (apps/x) calls. It owns billing/credits, the LLM gateway, vendor proxies (voice, search), the Google OAuth broker, and the managed connector handshake.

See RFC 010 for the service-plane design, RFC 011 for auth boundaries, and RFC 012 for the connector broker protocol.

A note on the podinfo bootstrap

The plan calls for cloning stefanprodan/podinfo and stripping it. The end-of-bootstrap sanity check the plan defines is "zero references to stefanprodan/podinfo in any non-attribution file" — i.e. the scaffolding is meant to end up fully ours regardless. Rather than clone ~100 demo files and delete most of them, this service ships a clean, equivalent scaffold that satisfies every bullet of the plan's end-of-bootstrap state:

  • compiles via go build ./..., passes go vet ./... and golangci-lint run
  • boots via go run ./cmd/server and answers /healthz + /readyz with 200s
  • emits one OTel span per request and structured JSON logs to stdout
  • multi-stage distroless Dockerfile, Makefile, graceful shutdown, Prometheus metrics on a separate port — the operational scaffolding podinfo is prized for
  • zero stefanprodan/podinfo references anywhere

This is the faithful realization of the plan's intent (a production-grade Go microservice skeleton) without carrying podinfo's demo surface.

Layout

cmd/server/        main.go + wire.go (composition root)
internal/
  appconfig/       env-driven Config (single config surface)
  openapidoc/      post-entoas OpenAPI enrichment for the mounted runtime API
  telemetry/       zap logging + OTel tracing
  server/          chi router, middleware chain, health probes, graceful shutdown
  version/         build-time version stamping (ldflags)
  ...              feature packages land per-milestone (config, billing, llm, …)
ent/               ent schemas → generated type-safe client (see ent/README)
charts/            Helm values live at repo-root charts/rowboat-api/

Run locally

make run                       # go run ./cmd/server
# or
make build && ./bin/rowboat-api

curl localhost:8080/healthz    # {"status":"ok"}
curl localhost:8080/readyz     # {"status":"ready"}
open http://localhost:8080/docs # Scalar API reference
curl localhost:8080/openapi.json
curl localhost:9090/metrics    # prometheus

All configuration has dev defaults; see internal/appconfig/config.go for the full env-var surface and .env.example for a starting point.

Local end-to-end with the desktop

Sign-in uses real WorkOS AuthKit, brokered by rowboat-api (WorkOS is a confidential client, so the code→token exchange runs server-side; no Ory Hydra — see AUTH.md). Vendor keys are read from the gitignored root .env, which docker compose auto-loads — no manual sourcing.

docker-compose.rowboat-api.yml brings up Postgres, Redis, Temporal, the API, and the Temporal worker. Assistant chat is a workflow on that worker. Without both, POST /v1/agent-sessions returns 503 temporal_unavailable and the composer never replies.

Chat calls live OpenRouter (https://openrouter.ai/api/v1). Put OPENROUTER_API_KEY in the root .env and leave OPENROUTER_BASE_URL unset. devstack is not on that path. Set ROWBOAT_COMPOSE_MOCK_LLM=1 only for an offline plumbing check; devstack then answers every turn with Hello from the mock LLM.

ACTIONS_ENABLED is on, matching the kind chart, so Agent approvals lists a real queue. No Act-seam URL is configured, so approving a proposal cannot execute it externally.

# root .env holds WORKOS_API_KEY, OPENROUTER_API_KEY, OPENAI_API_KEY,
# GOOGLE_CLIENT_ID, and GOOGLE_CLIENT_SECRET
docker compose -f docker-compose.rowboat-api.yml up --build -d
cd apps/x && API_URL=http://localhost:18080 npm run dev   # point the desktop at the local api

Then click “Sign in to Rowboat” in the desktop sidebar: the desktop asks rowboat-api for the WorkOS authorize URL, opens it in the browser (the real AuthKit login), and on callback hands the code to rowboat-api’s /v1/auth/workos/exchange, which completes the exchange server-side with the API key and returns tokens. rowboat-api verifies the returned WorkOS token on every call (TOKEN_ISSUER=https://api.workos.com, WorkOS JWKS). No tokens are injected.

Google OAuth. Compose maps GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET from the root .env onto GOOGLE_OAUTH_CLIENT_ID / GOOGLE_OAUTH_CLIENT_SECRET and leaves the token URL unset, so refresh uses https://oauth2.googleapis.com/token. The redirect URI registered on the Google client must be http://localhost:18080/oauth/google/callback.

Host ports: API 18080, gRPC 18081, API metrics 19090, worker metrics 19091, Temporal 7233, devstack 8090, Postgres 5433.

Local kind cluster with the Helm chart

Use this when you want to validate the Kubernetes deployment path locally. It deploys the real charts/rowboat-api chart into kind with local Postgres, Redis, and the devstack OIDC/WorkOS/LLM mocks:

scripts/rowboat-api-kind.sh up
scripts/rowboat-api-kind.sh desktop

The desktop runs with API_URL=http://localhost:18080. See docs/LOCAL_KIND_ROWBOAT_API.md for the full workflow and smoke-test coverage.

The Scalar API reference is available at http://localhost:18080/docs, backed by the embedded OpenAPI document at http://localhost:18080/openapi.json.

Fly.io deployment

Fly.io is supported as an alternative production target with one public API Machine in US East (iad) and one in US West (sjc). The default topology keeps the East API warm, lets the West API stop while idle, and runs one worker and one scheduler in the primary region. See docs/fly-io.md for provisioning, secrets, deployment, cost, and rollback guidance.

Public SDK contract

api/openapi.json is the public contract for generated REST SDKs. Ent schemas feed the OpenAPI components, cmd/openapi-enrich replaces the path surface with the mounted runtime API, and the TypeScript SDK in packages/rowboat-api-client-ts is generated from the resulting document.

Regenerate the SDK after changing public routes, request/response schemas, or OpenAPI enrichment:

make sdk-generate

Ports

Port Purpose
8080 Public HTTP + SSE (the desktop talks here)
8081 gRPC (reserved for entproto services)
9090 Prometheus /metrics

Make targets

Target Does
make build static binary → bin/rowboat-api
make run run from source
make test go test ./... -race
make vet / lint go vet / golangci-lint
make generate full codegen pipeline (ent → proto → gqlgen → SDK)
make sdk-generate TypeScript SDK from api/openapi.json
make install-tools protoc-gen-go / -go-grpc / -entgrpc plugins
make migrate-dump name=… write schema DDL to migrations/
make docker-build multi-stage image

ent codegen extensions

The ent layer enables the full extension toolchain (make generate reproduces all of it):

Extension What it produces Surfaced as
privacy / intercept tenant-scoping + query metrics enforced in internal/db
entcache query cache (LRU L1 + Redis L2), opt-in db.DB.Cached (used by /v1/me)
enthistory *_history tables on User/Subscription/OAuth/MCP/LLMUsage client.*History, auto-written on writes
entoas + openapidoc OpenAPI 3 spec for the mounted runtime API with ent schemas as components api/openapi.json
entgql Relay GraphQL schema + resolvers POST /graphql (admin, internal-secret)
entproto protobuf + gRPC UserService gRPC on :8081 (ent/proto/entpb)

CreditLedger (append-only) and OAuthPending (TTL'd) are intentionally excluded from history. History tables and sensitive token columns are excluded from the GraphQL/gRPC surfaces.

Milestone status

All plan milestones implemented (config, identity, LLM gateway, voice/exa, Google OAuth, managed connectors) plus the full ent extension toolchain. See the repo task list / commit history for details.

Directories

Path Synopsis
Package apispec embeds the generated OpenAPI document served by rowboat-api.
Package apispec embeds the generated OpenAPI document served by rowboat-api.
cmd
broker-key-rotation-check command
Command broker-key-rotation-check enforces direct-replica JWKS convergence before activating or retiring a connector resource-token signing key.
Command broker-key-rotation-check enforces direct-replica JWKS convergence before activating or retiring a connector resource-token signing key.
connector-reencrypt command
Command connector-reencrypt inventories, re-encrypts, and retirement-gates every connector credential payload protected by DB_ENCRYPTION_KEY.
Command connector-reencrypt inventories, re-encrypts, and retirement-gates every connector credential payload protected by DB_ENCRYPTION_KEY.
dev-product-mcp command
dev-product-mcp is a deliberately small RFC 012 product resource server.
dev-product-mcp is a deliberately small RFC 012 product resource server.
devstack command
Command devstack is a DEV-ONLY support service for local end-to-end testing.
Command devstack is a DEV-ONLY support service for local end-to-end testing.
migrate command
Command migrate manages Rowboat's database schema.
Command migrate manages Rowboat's database schema.
openapi-enrich command
Command openapi-enrich rewrites an OpenAPI JSON file with rowboat-api runtime documentation metadata.
Command openapi-enrich rewrites an OpenAPI JSON file with rowboat-api runtime documentation metadata.
relationship-projector command
Command relationship-projector provides audited recovery operations for the durable relationship projection outbox.
Command relationship-projector provides audited recovery operations for the durable relationship projection outbox.
scheduler command
Command scheduler runs the API-owned background-task scheduler (RFC 001): it evaluates cron/window triggers for executionTarget=api tasks inside the Oppulence API deployment so scheduled cloud runs fire while the desktop is offline.
Command scheduler runs the API-owned background-task scheduler (RFC 001): it evaluates cron/window triggers for executionTarget=api tasks inside the Oppulence API deployment so scheduled cloud runs fire while the desktop is offline.
server command
Command server is the rowboat-api entrypoint.
Command server is the rowboat-api entrypoint.
tfa-release-check command
Command tfa-release-check validates RFC 038's release evidence register and fails closed when a requested rollout stage still has unsigned gates.
Command tfa-release-check validates RFC 038's release evidence register and fails closed when a requested rollout stage still has unsigned gates.
worker command
Command worker runs the Temporal worker for API-native background tasks.
Command worker runs the Temporal worker for API-native background tasks.
ent
Package ent is the generated, type-safe data-access client.
Package ent is the generated, type-safe data-access client.
proto/entpb
Code generated by protoc-gen-entgrpc.
Code generated by protoc-gen-entgrpc.
schema
Package schema defines the ent schemas — entities, fields, edges and indexes — from which the typed client in the parent ent package is generated.
Package schema defines the ent schemas — entities, fields, edges and indexes — from which the typed client in the parent ent package is generated.
schema/mixin
Package mixin holds reusable ent field sets shared across schemas.
Package mixin holds reusable ent field sets shared across schemas.
schema/optimistic
Package optimistic defines Rowboat's Ent annotation for compare-and-swap aggregates.
Package optimistic defines Rowboat's Ent annotation for compare-and-swap aggregates.
schema/tenant
Package tenant defines Rowboat-specific Ent schema annotations.
Package tenant defines Rowboat-specific Ent schema annotations.
integration
rfc012/faultproxy command
Command faultproxy is an RFC 012 acceptance-only Redis TCP fault proxy.
Command faultproxy is an RFC 012 acceptance-only Redis TCP fault proxy.
internal
account
Package account serves DELETE /v1/me: self-serve account deletion.
Package account serves DELETE /v1/me: self-serve account deletion.
actionmetrics
Package actionmetrics holds the Prometheus series for the closed-loop action broker (RFC 023 Observability).
Package actionmetrics holds the Prometheus series for the closed-loop action broker (RFC 023 Observability).
actions
Package actions implements the RFC 023 closed-loop action broker: the propose → approve → execute → watch machinery and the single-use, scoped, params-bound approval token that stands between the agent runtime and any money-moving product action.
Package actions implements the RFC 023 closed-loop action broker: the propose → approve → execute → watch machinery and the single-use, scoped, params-bound approval token that stands between the agent runtime and any money-moving product action.
agentchannels
Package agentchannels adapts inbound platform messages (RFC 027 channels) into durable agent sessions, funneling every message through the one canonical creation path (internal/agentsessions.Starter.CreateOrContinue) so a channel conversation threads to a single session.
Package agentchannels adapts inbound platform messages (RFC 027 channels) into durable agent sessions, funneling every message through the one canonical creation path (internal/agentsessions.Starter.CreateOrContinue) so a channel conversation threads to a single session.
agentgitops
Package agentgitops reconciles a declared repository of agent YAMLs to the desired state (RFC 028 P4): it diffs declared agents against the persisted managed_by=gitops definitions, repairs drift, and records agent_sync_state — mirroring internal/backgroundtaskschedule's reconciler (RFC 005).
Package agentgitops reconciles a declared repository of agent YAMLs to the desired state (RFC 028 P4): it diffs declared agents against the persisted managed_by=gitops definitions, repairs drift, and records agent_sync_state — mirroring internal/backgroundtaskschedule's reconciler (RFC 005).
agentregistry
Package agentregistry is the durable agent runtime's two-layer definition store (RFC 027):
Package agentregistry is the durable agent runtime's two-layer definition store (RFC 027):
agents
Package agents serves the durable agent runtime HTTP surface (RFC 027): AgentDefinition CRUD and the agent-session lifecycle (create / submit turn / stream / events / approve / cancel) under /v1/*.
Package agents serves the durable agent runtime HTTP surface (RFC 027): AgentDefinition CRUD and the agent-session lifecycle (create / submit turn / stream / events / approve / cancel) under /v1/*.
agentsessions
Package agentsessions owns the single canonical way a durable agent session is created and driven (RFC 027) — the analogue of internal/backgroundtaskruns.
Package agentsessions owns the single canonical way a durable agent session is created and driven (RFC 027) — the analogue of internal/backgroundtaskruns.
agentspec
Package agentspec is the versioned declarative authoring format for agents (RFC 028): the `apiVersion: agent.rowboat.dev/v1, kind: Agent` document, a strict YAML→JSON decoder, and the compile step that lowers a document into a neutral canonical form.
Package agentspec is the versioned declarative authoring format for agents (RFC 028): the `apiVersion: agent.rowboat.dev/v1, kind: Agent` document, a strict YAML→JSON decoder, and the compile step that lowers a document into a neutral canonical form.
agentstream
Package agentstream is the durable agent runtime's streaming layer (RFC 027): a Redis pub/sub fan-out for low-latency live deltas plus an NDJSON SSE handler that tails the AgentSessionEvent projection (the source of truth) and the bus together, backfilling missed events by seq and deduping by seq.
Package agentstream is the durable agent runtime's streaming layer (RFC 027): a Redis pub/sub fan-out for low-latency live deltas plus an NDJSON SSE handler that tails the AgentSessionEvent projection (the source of truth) and the bus together, backfilling missed events by seq and deduping by seq.
agenttoken
Package agenttoken mints and verifies the durable agent runtime's short-lived signed tokens (RFC 027 / RFC 012): per-invocation money-moving approval tokens (carrying the MFA step-up assertion) and session continuation tokens.
Package agenttoken mints and verifies the durable agent runtime's short-lived signed tokens (RFC 027 / RFC 012): per-invocation money-moving approval tokens (carrying the MFA step-up assertion) and session continuation tokens.
agentworkflow
Package agentworkflow is the durable, multi-tenant agent runtime (RFC 027): a Temporal/Go analogue of eve.
Package agentworkflow is the durable, multi-tenant agent runtime (RFC 027): a Temporal/Go analogue of eve.
appconfig
Package appconfig loads process configuration from the environment.
Package appconfig loads process configuration from the environment.
auth
Package auth holds request-scoped identity: the context helpers that carry the authenticated user (and the internal-caller flag) through a request, the JWT-verification middleware, and the WorkOS user upsert.
Package auth holds request-scoped identity: the context helpers that carry the authenticated user (and the internal-caller flag) through a request, the JWT-verification middleware, and the WorkOS user upsert.
authmetrics
Package authmetrics holds the Prometheus series for the identity and authorization plane (RFC 011).
Package authmetrics holds the Prometheus series for the identity and authorization plane (RFC 011).
backgroundscheduler
Package backgroundscheduler evaluates cron/window triggers for executionTarget=api background tasks inside the Oppulence API deployment, so scheduled cloud runs fire while the desktop is offline.
Package backgroundscheduler evaluates cron/window triggers for executionTarget=api background tasks inside the Oppulence API deployment, so scheduled cloud runs fire while the desktop is offline.
backgroundtaskmetrics
Package backgroundtaskmetrics holds Prometheus series for API-native background task (cloud) runs.
Package backgroundtaskmetrics holds Prometheus series for API-native background task (cloud) runs.
backgroundtaskruns
Package backgroundtaskruns owns the single canonical way an executor=api background-task run is created.
Package backgroundtaskruns owns the single canonical way an executor=api background-task run is created.
backgroundtaskruntime
Package backgroundtaskruntime is the cloud-safe agent runtime for API background tasks (RFC 004): an LLM-backed, tool-scoped, limit-bounded execution loop that the Temporal worker's ExecuteAPITask activity delegates to.
Package backgroundtaskruntime is the cloud-safe agent runtime for API background tasks (RFC 004): an LLM-backed, tool-scoped, limit-bounded execution loop that the Temporal worker's ExecuteAPITask activity delegates to.
backgroundtasks
Package backgroundtasks serves the cloud control plane mirror for desktop background tasks.
Package backgroundtasks serves the cloud control plane mirror for desktop background tasks.
backgroundtaskschedule
Package backgroundtaskschedule owns the Temporal Schedule lifecycle for exact-cron api-target tasks (RFC 005).
Package backgroundtaskschedule owns the Temporal Schedule lifecycle for exact-cron api-target tasks (RFC 005).
backgroundtaskworkflow
Package backgroundtaskworkflow contains the Temporal workflow used for API-native background task executions.
Package backgroundtaskworkflow contains the Temporal workflow used for API-native background task executions.
billing
Package billing serves GET /v1/me, returning the user's plan, status and credit usage in the shape the desktop expects.
Package billing serves GET /v1/me, returning the user's plan, status and credit usage in the shape the desktop expects.
cloudevents
Package cloudevents implements RFC 003: cloud event ingestion and event-triggered cloud runs.
Package cloudevents implements RFC 003: cloud event ingestion and event-triggered cloud runs.
communicationsync
Package communicationsync projects Gmail and Google Calendar incremental feeds into the communication-intelligence metadata store.
Package communicationsync projects Gmail and Google Calendar incremental feeds into the communication-intelligence metadata store.
composioapi
Package composioapi provides the server-held, user-scoped Composio client.
Package composioapi provides the server-held, user-scoped Composio client.
config
Package config serves GET /v1/config — the public bootstrap document the desktop fetches before sign-in.
Package config serves GET /v1/config — the public bootstrap document the desktop fetches before sign-in.
connectorcreds
Package connectorcreds resolves a user's connector credential (the decrypted OAuth token) for durable-agent tools that act on the user's behalf (RFC 012).
Package connectorcreds resolves a user's connector credential (the decrypted OAuth token) for durable-agent tools that act on the user's behalf (RFC 012).
connectormetrics
Package connectormetrics contains bounded-cardinality broker metrics.
Package connectormetrics contains bounded-cardinality broker metrics.
connectors
Package connectors implements the connector registry and the OAuth brokering endpoints (/v1/connectors, /v1/connections/*) plus the Ory pre-consent webhook and the internal force-disconnect endpoint.
Package connectors implements the connector registry and the OAuth brokering endpoints (/v1/connectors, /v1/connections/*) plus the Ory pre-consent webhook and the internal force-disconnect endpoint.
console
Package console owns authenticated, durable console preferences and user-authored workspace artifacts.
Package console owns authenticated, durable console preferences and user-authored workspace artifacts.
credits
Package credits holds credit-accounting math shared by the billing handler and the quota gate.
Package credits holds credit-accounting math shared by the billing handler and the quota gate.
crypto
Package crypto provides application-layer AES-256-GCM sealing for columns that must be encrypted at rest (OAuth refresh tokens, parked payloads, vendor API keys).
Package crypto provides application-layer AES-256-GCM sealing for columns that must be encrypted at rest (OAuth refresh tokens, parked payloads, vendor API keys).
crypto/reseal
Package reseal inventories and re-encrypts connector credentials during DB_ENCRYPTION_KEY rotation.
Package reseal inventories and re-encrypts connector credentials during DB_ENCRYPTION_KEY rotation.
db
Package db opens the ent client over Postgres (pgx) in production or a pure-Go SQLite database for local dev / tests, and installs the client-level hooks and interceptors that enforce audit logging, append-only ledgers, and per-user tenant isolation.
Package db opens the ent client over Postgres (pgx) in production or a pure-Go SQLite database for local dev / tests, and installs the client-level hooks and interceptors that enforce audit logging, append-only ledgers, and per-user tenant isolation.
docs
Package docs serves the rowboat-api OpenAPI document and API reference UI.
Package docs serves the rowboat-api OpenAPI document and API reference UI.
email
Package email is the transactional email boundary.
Package email is the transactional email boundary.
embeddings
Package embeddings is a thin client for computing text embeddings against an OpenAI-compatible endpoint.
Package embeddings is a thin client for computing text embeddings against an OpenAI-compatible endpoint.
entities
Package entities implements the org-scoped RFC 022 entity spine API.
Package entities implements the org-scoped RFC 022 entity spine API.
entitymetrics
Package entitymetrics holds bounded-cardinality RFC 022 entity-spine metrics.
Package entitymetrics holds bounded-cardinality RFC 022 entity-spine metrics.
faculties
Package faculties is the HTTP client for the Oppulence portfolio faculties (RFC 008): Conduit (the evidence plane) and Eigen (the foresight engine).
Package faculties is the HTTP client for the Oppulence portfolio faculties (RFC 008): Conduit (the evidence plane) and Eigen (the foresight engine).
feedback
Package feedback serves POST /v1/feedback: it relays a signed-in user's message into Plain (plain.com) as a support thread (upsertCustomer + createThread).
Package feedback serves POST /v1/feedback: it relays a signed-in user's message into Plain (plain.com) as a support thread (upsertCustomer + createThread).
google
Package google brokers the Google OAuth handoff.
Package google brokers the Google OAuth handoff.
googleapi
Package googleapi is the shared client for server-side Google API calls made with a user's connected-account credentials: OAuth token exchange from the sealed refresh token, plus the narrow Gmail/Calendar/Drive read calls the cloud runtime's connector tools and the watch manager need.
Package googleapi is the shared client for server-side Google API calls made with a user's connected-account credentials: OAuth token exchange from the sealed refresh token, plus the narrow Gmail/Calendar/Drive read calls the cloud runtime's connector tools and the watch manager need.
googlechannel
Package googlechannel encodes account identity in Google Calendar and Drive watch IDs using only characters accepted by Google's channel API.
Package googlechannel encodes account identity in Google Calendar and Drive watch IDs using only characters accepted by Google's channel API.
googlewatch
Package googlewatch keeps Google push subscriptions alive (RFC 003): for every connected Google account it registers — and renews before expiry — the Gmail users.watch, Calendar events channel, and Drive changes channel that make Google deliver pushes to /v1/webhooks/google.
Package googlewatch keeps Google push subscriptions alive (RFC 003): for every connected Google account it registers — and renews before expiry — the Gmail users.watch, Calendar events channel, and Drive changes channel that make Google deliver pushes to /v1/webhooks/google.
gqlapi
Package gqlapi is the GraphQL server: gqlgen-generated execution + resolvers that delegate to the ent client, over the entgql-generated ent.graphql schema.
Package gqlapi is the GraphQL server: gqlgen-generated execution + resolvers that delegate to the ent client, over the entgql-generated ent.graphql schema.
gqlid
Package gqlid provides gqlgen marshalers for the uuid.UUID-backed GraphQL ID and UUID scalars.
Package gqlid provides gqlgen marshalers for the uuid.UUID-backed GraphQL ID and UUID scalars.
httpx
Package httpx holds small HTTP response helpers shared by every handler: RFC 9457 problem details, JSON writers, bounded body readers, and idempotency-key helpers.
Package httpx holds small HTTP response helpers shared by every handler: RFC 9457 problem details, JSON writers, bounded body readers, and idempotency-key helpers.
hubspotapi
Package hubspotapi provides the server-held, user-scoped HubSpot CRM client.
Package hubspotapi provides the server-held, user-scoped HubSpot CRM client.
llm
Package llm is the OpenAI-compatible LLM gateway: it gates on credits, forwards to OpenRouter, streams responses back, settles the credit reservation against actual token usage, and records an LLMUsage row per call.
Package llm is the OpenAI-compatible LLM gateway: it gates on credits, forwards to OpenRouter, streams responses back, settles the credit reservation against actual token usage, and records an LLMUsage row per call.
minutes
Package minutes meters a user's free cloud meeting-transcription minutes per UTC month (RFC 009 §16, Appendix O).
Package minutes meters a user's free cloud meeting-transcription minutes per UTC month (RFC 009 §16, Appendix O).
openapidoc
Package openapidoc enriches the ent-generated OpenAPI base document with runtime routes, examples, response contracts, and security metadata.
Package openapidoc enriches the ent-generated OpenAPI base document with runtime routes, examples, response contracts, and security metadata.
outbound
Package outbound centralizes policy for calls to external vendors.
Package outbound centralizes policy for calls to external vendors.
parallel
Package parallel is a client for the Parallel Web Task API (RFC 039).
Package parallel is a client for the Parallel Web Task API (RFC 039).
pricing
Package pricing maps usage to credits.
Package pricing maps usage to credits.
proxyutil
Package proxyutil holds small helpers shared by the vendor-proxy handlers (voice and search).
Package proxyutil holds small helpers shared by the vendor-proxy handlers (voice and search).
qualityguard
Package qualityguard checks Rowboat-specific architecture invariants that general-purpose Go linters cannot infer.
Package qualityguard checks Rowboat-specific architecture invariants that general-purpose Go linters cannot infer.
quota
Package quota enforces credit limits with a reserve → settle/refund pattern.
Package quota enforces credit limits with a reserve → settle/refund pattern.
ratelimit
Package ratelimit provides per-user, per-route-group rate limiting backed by a Redis fixed-window counter (production) or an in-memory counter (dev/test).
Package ratelimit provides per-user, per-route-group rate limiting backed by a Redis fixed-window counter (production) or an in-memory counter (dev/test).
retention
Package retention removes synced source content.
Package retention removes synced source content.
revenue
Package revenue implements the Rowboat side of RFC 030 (Revenue Memory and Outbound Governance): the relationship/action domain, the action-queue lifecycle with its hard invariants, and the client for the OutboundConsole preflight facade.
Package revenue implements the Rowboat side of RFC 030 (Revenue Memory and Outbound Governance): the relationship/action domain, the action-queue lifecycle with its hard invariants, and the client for the OutboundConsole preflight facade.
revenuemetrics
Package revenuemetrics holds the Prometheus series for the revenue memory and outbound governance plane (RFC 030 Observability).
Package revenuemetrics holds the Prometheus series for the revenue memory and outbound governance plane (RFC 030 Observability).
search
Package search serves POST /v1/search/exa: a credit-gated pass-through proxy to Exa Search using the server-held x-api-key.
Package search serves POST /v1/search/exa: a credit-gated pass-through proxy to Exa Search using the server-held x-api-key.
secrets
Package secrets is the vendor-key store.
Package secrets is the vendor-key store.
securitytxt
Package securitytxt serves RFC 9116 security.txt.
Package securitytxt serves RFC 9116 security.txt.
server
Package server owns the HTTP lifecycle: the chi router + middleware chain, the public listener, the separate metrics listener, health probes, and graceful shutdown.
Package server owns the HTTP lifecycle: the chi router + middleware chain, the public listener, the separate metrics listener, health probes, and graceful shutdown.
slack
Package slack brokers the Slack workspace connect flow (OAuth v2).
Package slack brokers the Slack workspace connect flow (OAuth v2).
slackclient
Package slackclient is the minimal outbound Slack Web API client used by the durable agent runtime: it posts agent replies back into the originating Slack thread (RFC 027 channels — the CloudTag round-trip) and reads a thread's messages for Slack-native tools.
Package slackclient is the minimal outbound Slack Web API client used by the durable agent runtime: it posts agent replies back into the originating Slack thread (RFC 027 channels — the CloudTag round-trip) and reads a thread's messages for Slack-native tools.
slacktoken
Package slacktoken resolves sealed Slack bot credentials for runtime use.
Package slacktoken resolves sealed Slack bot credentials for runtime use.
telemetry
Package telemetry wires structured logging (zap) and tracing (OpenTelemetry).
Package telemetry wires structured logging (zap) and tracing (OpenTelemetry).
transcription
Package transcription serves the per-user transcription quota the desktop reads to decide whether meetings stay on cloud or fall back to on-device (RFC 009 §16, Appendix O.6/O.8).
Package transcription serves the per-user transcription quota the desktop reads to decide whether meetings stay on cloud or fall back to on-device (RFC 009 §16, Appendix O.6/O.8).
version
Package version holds build-time version metadata, stamped via -ldflags.
Package version holds build-time version metadata, stamped via -ldflags.
viewer
Package viewer carries the minimum request identity needed by persistence policies.
Package viewer carries the minimum request identity needed by persistence policies.
voice
Package voice serves POST /v1/voice/text-to-speech/{voiceId}: a credit-gated proxy to ElevenLabs using the server-held xi-api-key.
Package voice serves POST /v1/voice/text-to-speech/{voiceId}: a credit-gated proxy to ElevenLabs using the server-held xi-api-key.
voicecloud
Package voicecloud serves the Oppulence Voice control plane, opaque sync relay, and explicit capture-artifact ingestion boundary.
Package voicecloud serves the Oppulence Voice control plane, opaque sync relay, and explicit capture-artifact ingestion boundary.
websearch
Package websearch is a minimal web-search client for the durable-agent web.search tool.
Package websearch is a minimal web-search client for the durable-agent web.search tool.
workosauth
Package workosauth brokers the desktop's sign-in against WorkOS AuthKit.
Package workosauth brokers the desktop's sign-in against WorkOS AuthKit.
tools
rowboatlint command
Command rowboatlint runs Rowboat-specific static analyzers.
Command rowboatlint runs Rowboat-specific static analyzers.
rowboatlint/analyzers/directhttp
Package directhttp rejects unbounded net/http convenience clients.
Package directhttp rejects unbounded net/http convenience clients.
rowboatlint/analyzers/forbiddenlog
Package forbiddenlog detects sensitive data being attached to structured logs.
Package forbiddenlog detects sensitive data being attached to structured logs.
rowboatlint/analyzers/temporal
Package temporal detects nondeterministic side effects in Temporal workflow functions.
Package temporal detects nondeterministic side effects in Temporal workflow functions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL