Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
64c54ec
feat: rename GoClaw → ArgoClaw (backend) / ARGO (frontend)
Mar 22, 2026
45c4395
security: fix 10 AppSec audit findings (3 HIGH, 7 MEDIUM)
Mar 22, 2026
34015ad
Merge pull request #1 from vellus-ai/security/appsec-audit-fixes
MiltonSilvaJr Mar 22, 2026
cbc8c53
feat(auth): PCI DSS password validation + JWT tokens + migration
Mar 22, 2026
15042c7
feat(auth): HTTP handlers, user store, JWT middleware
Mar 22, 2026
1fdd0eb
Merge pull request #2 from vellus-ai/feat/auth-pci-dss
MiltonSilvaJr Mar 22, 2026
0223f64
feat(tenancy): enterprise multi-tenancy with tenant isolation + white…
Mar 22, 2026
4ff0043
Merge pull request #3 from vellus-ai/feat/multi-tenancy
MiltonSilvaJr Mar 22, 2026
87ccbd6
feat: white-label branding + i18n 8 locales + ARGO presets
Mar 22, 2026
4b0e4a4
Merge pull request #4 from vellus-ai/feat/whitelabel-i18n-presets
MiltonSilvaJr Mar 22, 2026
4a197b8
merge(upstream): 5 GoClaw community PRs + CHANGELOG (#5)
MiltonSilvaJr Mar 23, 2026
8396d31
ci: GitHub Actions workflow to monitor GoClaw upstream PRs (#6)
MiltonSilvaJr Mar 23, 2026
2ee059f
ci: add email notification to upstream PR monitor (#7)
MiltonSilvaJr Mar 23, 2026
d845c6f
feat(security): PR #316 MCP isolation + env blocklist + TDD/PBT (#8)
MiltonSilvaJr Mar 23, 2026
e4e2be5
feat(providers): PR #343 Anthropic OAuth + configurable system prompt…
MiltonSilvaJr Mar 23, 2026
5cc3afc
fix(telegram): PR #202 mention preservation + bot routing + PBT (#10)
MiltonSilvaJr Mar 23, 2026
faaa07c
docs: update CHANGELOG with PRs #8,#9,#10 (TDD/PBT verified)
Mar 23, 2026
1fbf16a
fix: PRs #182 + #346 — nil pointer SSE fix + Zalo QR restart + TDD/PB…
MiltonSilvaJr Mar 23, 2026
761161c
docs: CHANGELOG — all conflict PRs resolved (#11)
Mar 23, 2026
34183dc
fix: resolve duplicate migration 000027, fix upstream import paths an…
Mar 24, 2026
c54a6d9
fix(security): enforce tenant_id filtering in all store queries
Mar 24, 2026
a2ab34d
fix(security): add input validation to branding handler
Mar 24, 2026
9f46eb4
Merge pull request #12 from vellus-ai/fix/migration-duplicate-027
MiltonSilvaJr Mar 24, 2026
8e97029
Merge pull request #13 from vellus-ai/fix/appsec-tenant-isolation
MiltonSilvaJr Mar 24, 2026
09aaeca
Merge pull request #14 from vellus-ai/fix/appsec-branding-validation
MiltonSilvaJr Mar 24, 2026
56d94dd
ci: add GitHub Actions workflow to build and push Docker image
Mar 24, 2026
4151f55
Merge pull request #15 from vellus-ai/ci/docker-build-push
MiltonSilvaJr Mar 24, 2026
d92b290
fix: resolve CI build errors in auth test and provider dialog
Mar 25, 2026
cde2ac8
fix: use store.WithTenantID in tenant middleware test
Mar 25, 2026
a177282
Merge pull request #17 from vellus-ai/claude/fix/ci-build-errors
MiltonSilvaJr Mar 25, 2026
5343f0c
fix: close http auth fail-open
Mar 25, 2026
7b9e2b9
Merge pull request #16 from vellus-ai/codex/argoclaw-close-http-fail-…
MiltonSilvaJr Mar 25, 2026
b8a952a
docs: rebrand GoClaw → ArgoClaw + documentação trilíngue (pt-BR, en, es)
Mar 25, 2026
13dea14
fix(docs): corrigir acentuação pt-BR, referências upstream e env vars
Mar 25, 2026
7bdc7c9
Merge pull request #18 from vellus-ai/claude/docs/argoclaw-i18n
MiltonSilvaJr Mar 25, 2026
bf0acbb
ci: remove Docker Hub login and Discord notification from release wor…
Mar 25, 2026
b3a911b
Merge pull request #19 from vellus-ai/claude/fix/release-workflow
MiltonSilvaJr Mar 25, 2026
f324628
test: E2E tenant isolation test suite (#20)
MiltonSilvaJr Mar 25, 2026
903fb0b
fix(store): add tenant isolation to SessionStore/CronStore/SkillStore…
MiltonSilvaJr Mar 26, 2026
63f3dbc
fix(security): add tenant_id isolation to Sessions, Cron, and Skills …
MiltonSilvaJr Mar 26, 2026
40d86c6
feat: --non-interactive onboard + OpenTelemetry GenAI instrumentation…
MiltonSilvaJr Mar 26, 2026
0b2b9a0
ci: add Google Artifact Registry to docker-publish (#24)
MiltonSilvaJr Mar 27, 2026
402d322
feat: embed Web UI dashboard in gateway binary
MiltonSilvaJr Mar 27, 2026
2efc594
ci: add webui variant + rebuild-webui-hardened workflow (issue #33)
MiltonSilvaJr Mar 30, 2026
b93d594
fix(ci): add token_format: access_token to WIF auth step
MiltonSilvaJr Mar 30, 2026
72f504a
fix(store): add SeedOnboardProvider with ON CONFLICT DO NOTHING for o…
MiltonSilvaJr Mar 31, 2026
77aab20
feat(auth): wire email/password auth to gateway server (#30)
MiltonSilvaJr Mar 31, 2026
33759a1
feat(plugins): Fase 0 — Plugin Host infrastructure (#31)
MiltonSilvaJr Apr 3, 2026
ae99a44
feat(providers): add Vertex AI as LLM provider with OAuth2/Workload I…
MiltonSilvaJr Apr 3, 2026
3736b76
fix(security): harden auth endpoints + add Vertex AI provider (#33)
MiltonSilvaJr Apr 4, 2026
8b78e95
fix(security): race condition in rate limiter + tenant test schema (#34)
MiltonSilvaJr Apr 4, 2026
5edd04c
fix(plugins): resolve route conflict between data proxy and plugin ma…
MiltonSilvaJr Apr 4, 2026
804aa92
fix(telemetry): strip http:// schema from gRPC OTel endpoint (#37)
MiltonSilvaJr Apr 4, 2026
5ae1357
feat(auth): email/password login UI + AppSec hardening (#38)
MiltonSilvaJr Apr 4, 2026
7ebcb51
feat(auth): wire JWT auto-refresh + i18n login for 5 ARGO languages (…
MiltonSilvaJr Apr 6, 2026
9d6b7cf
feat(tools): 8 onboarding tools for Imediato chat-first setup (#26)
MiltonSilvaJr Apr 6, 2026
a8f36b7
feat(webui): add ARGO favicon to dashboard (#40)
MiltonSilvaJr Apr 6, 2026
17dd879
feat: implement Onboarding Phase 2 — chat-first setup + forced passwo…
Apr 6, 2026
a71badd
fix: resolve 4 code review blockers on change-password
Apr 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ tmp/
.claude/
.vscode/
.idea/
ui/
ui/web/node_modules/
ui/web/dist/
plans/
skills-store/
12 changes: 6 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# GoClaw environment variables.
# ArgoClaw environment variables.
# Copy to .env and fill in values. For Docker Compose, do NOT use 'export' prefix.
#
# Auto-generated by prepare-env.sh: GOCLAW_GATEWAY_TOKEN, GOCLAW_ENCRYPTION_KEY.
# Auto-generated by prepare-env.sh: ARGOCLAW_GATEWAY_TOKEN, ARGOCLAW_ENCRYPTION_KEY.
# LLM provider API keys: configure via the web dashboard setup wizard.

# --- Gateway (required) ---
GOCLAW_GATEWAY_TOKEN=
GOCLAW_ENCRYPTION_KEY=
ARGOCLAW_GATEWAY_TOKEN=
ARGOCLAW_ENCRYPTION_KEY=

# --- Database (only for non-Docker deployments) ---
# Docker Compose auto-builds this from POSTGRES_USER/PASSWORD/DB.
# GOCLAW_POSTGRES_DSN=postgres://user:pass@host:5432/dbname?sslmode=disable
# ARGOCLAW_POSTGRES_DSN=postgres://user:pass@host:5432/dbname?sslmode=disable

# --- Debug ---
# GOCLAW_TRACE_VERBOSE=1
# ARGOCLAW_TRACE_VERBOSE=1
70 changes: 70 additions & 0 deletions .github/workflows/ci-tenant-isolation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: CI - Tenant Isolation E2E

on:
pull_request:
paths:
- 'internal/store/**'
- 'internal/http/**'
- 'internal/auth/**'
- 'internal/gateway/**'
- 'migrations/**'
- 'tests/tenant_isolation/**'
push:
branches: [main]
paths:
- 'internal/store/**'
- 'internal/http/**'
- 'internal/auth/**'
- 'internal/gateway/**'
- 'migrations/**'
- 'tests/tenant_isolation/**'

jobs:
tenant-isolation-e2e:
name: Tenant Isolation E2E Tests
runs-on: ubuntu-latest

services:
postgres:
image: pgvector/pgvector:pg18
env:
POSTGRES_USER: argoclaw_test
POSTGRES_PASSWORD: argoclaw_test_password
POSTGRES_DB: argoclaw_test
ports:
- 5432:5432
options: >-
--health-cmd="pg_isready -U argoclaw_test"
--health-interval=5s
--health-timeout=5s
--health-retries=10

steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

- name: Run DB Migrations
env:
POSTGRES_DSN: postgres://argoclaw_test:argoclaw_test_password@localhost:5432/argoclaw_test?sslmode=disable
run: |
go install -tags postgres github.com/golang-migrate/migrate/v4/cmd/migrate@latest
migrate -path migrations -database "$POSTGRES_DSN" up

- name: Run Tenant Isolation Tests (Store Layer)
env:
TEST_POSTGRES_DSN: postgres://argoclaw_test:argoclaw_test_password@localhost:5432/argoclaw_test?sslmode=disable
TEST_JWT_SECRET: ci-jwt-secret-for-tenant-isolation-tests-32b!
run: |
go test -v -race -count=1 -timeout 120s ./tests/tenant_isolation/...

- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v4
with:
name: tenant-isolation-results
path: tests/tenant_isolation/
retention-days: 7
53 changes: 53 additions & 0 deletions .github/workflows/docker-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Build & Push Docker Image

on:
push:
branches: [main]
workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME: vellus-ai/argoclaw

jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,prefix=
type=raw,value=latest,enable={{is_default_branch}}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
VERSION=${{ github.sha }}
ENABLE_PYTHON=true
cache-from: type=gha
cache-to: type=gha,mode=max
54 changes: 53 additions & 1 deletion .github/workflows/docker-publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ on:

env:
GHCR_IMAGE: ghcr.io/${{ github.repository }}
DOCKERHUB_IMAGE: digitop/goclaw
DOCKERHUB_IMAGE: digitop/argoclaw
GAR_IMAGE: us-central1-docker.pkg.dev/vellus-ai-agent-platform/argoclaw/argoclaw

permissions:
contents: read
packages: write
id-token: write # Workload Identity Federation para GAR

jobs:
build-and-push:
Expand All @@ -22,6 +24,7 @@ jobs:
# ── Runtime variants ──
- variant: latest
suffix: ""
enable_web_ui: "false"
enable_otel: "false"
enable_tsnet: "false"
enable_redis: "false"
Expand All @@ -30,6 +33,7 @@ jobs:
enable_full_skills: "false"
- variant: node
suffix: "-node"
enable_web_ui: "false"
enable_otel: "false"
enable_tsnet: "false"
enable_redis: "false"
Expand All @@ -38,6 +42,7 @@ jobs:
enable_full_skills: "false"
- variant: python
suffix: "-python"
enable_web_ui: "false"
enable_otel: "false"
enable_tsnet: "false"
enable_redis: "false"
Expand All @@ -46,15 +51,29 @@ jobs:
enable_full_skills: "false"
- variant: full
suffix: "-full"
enable_web_ui: "false"
enable_otel: "false"
enable_tsnet: "false"
enable_redis: "false"
enable_node: "true"
enable_python: "true"
enable_full_skills: "true"
# ── Web UI variant (React SPA embedded in binary) ──
# Issue #33: combines security patches (appsec-tenant-isolation, appsec-branding-validation)
# with the embedded React SPA. Built from main HEAD which already includes both.
- variant: webui
suffix: "-webui"
enable_web_ui: "true"
enable_otel: "false"
enable_tsnet: "false"
enable_redis: "false"
enable_node: "false"
enable_python: "false"
enable_full_skills: "false"
# ── Build-tag variants ──
- variant: otel
suffix: "-otel"
enable_web_ui: "false"
enable_otel: "true"
enable_tsnet: "false"
enable_redis: "false"
Expand All @@ -63,6 +82,7 @@ jobs:
enable_full_skills: "false"
- variant: tsnet
suffix: "-tsnet"
enable_web_ui: "false"
enable_otel: "false"
enable_tsnet: "true"
enable_redis: "false"
Expand All @@ -71,6 +91,7 @@ jobs:
enable_full_skills: "false"
- variant: redis
suffix: "-redis"
enable_web_ui: "false"
enable_otel: "false"
enable_tsnet: "false"
enable_redis: "true"
Expand Down Expand Up @@ -101,13 +122,28 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Authenticate to Google Cloud
id: gcp-auth
uses: google-github-actions/auth@v2
with:
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

- name: Log in to Google Artifact Registry
uses: docker/login-action@v3
with:
registry: us-central1-docker.pkg.dev
username: oauth2accesstoken
password: ${{ steps.gcp-auth.outputs.access_token }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.GHCR_IMAGE }}
${{ env.DOCKERHUB_IMAGE }}
${{ env.GAR_IMAGE }}
tags: |
type=semver,pattern={{version}},suffix=${{ matrix.suffix }}
type=semver,pattern={{major}}.{{minor}},suffix=${{ matrix.suffix }}
Expand All @@ -123,6 +159,7 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
ENABLE_WEB_UI=${{ matrix.enable_web_ui || 'false' }}
ENABLE_OTEL=${{ matrix.enable_otel }}
ENABLE_TSNET=${{ matrix.enable_tsnet }}
ENABLE_REDIS=${{ matrix.enable_redis }}
Expand Down Expand Up @@ -159,13 +196,28 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Authenticate to Google Cloud
id: gcp-auth
uses: google-github-actions/auth@v2
with:
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

- name: Log in to Google Artifact Registry
uses: docker/login-action@v3
with:
registry: us-central1-docker.pkg.dev
username: oauth2accesstoken
password: ${{ steps.gcp-auth.outputs.access_token }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.GHCR_IMAGE }}-web
${{ env.DOCKERHUB_IMAGE }}-web
${{ env.GAR_IMAGE }}-web
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
Expand Down
Loading