Compare commits

..

16 commits

Author SHA1 Message Date
090b42618b Split Forgejo CI workflows and update documentation
CI/CD Improvements:
- Split monolithic botserver workflow into botserver-only and botui-only workflows
- BotServer CI: Triggers on botserver/**, botlib/** changes, builds only botserver
- BotUI CI: New workflow, triggers on botui/**, botlib/** changes, builds only botui
- Separate caches to avoid conflicts between projects
- Independent deployments and service restarts

Documentation:
- Remove WHATSAPP-CONFIG-GUIDE.md (duplicate of botbook documentation)
- Update README.md with new rule: check botbook/ before creating .md files
- Add workflow step to check existing documentation first

Submodule updates:
- botserver: Updated .forgejo/workflows/botserver.yaml (botserver-only)
- botui: Added .forgejo/workflows/botui.yaml (new botui workflow)
2026-02-05 08:45:41 -03:00
f97451482d Update botserver submodule to 64d5e2a1 2026-02-05 08:04:26 -03:00
8a2072919a Update botui submodule to fix ServeDir compilation 2026-02-05 08:01:27 -03:00
62749e9eba Add Playwright testing setup 2026-02-04 15:42:39 -03:00
52e551734a Update botserver submodule 2026-02-04 14:25:14 -03:00
00647f7edf Update botserver submodule 2026-02-04 14:10:05 -03:00
4100e53c28 Update botserver submodule 2026-02-04 14:02:01 -03:00
117ea78e39 Update all submodules: botapp, botbook, botlib, botmodels, bottemplates, bottest, botui 2026-02-04 13:54:40 -03:00
91ddf87dce Update botserver submodule 2026-02-04 13:47:02 -03:00
12b661fdc1 Update botserver submodule - Fix /api/auth/me token validation 2026-02-04 13:29:03 -03:00
3375394ca5 Update: botapp, botbook, botlib, botmodels, botserver, bottemplates, bottest, botui, and config changes 2026-02-04 13:27:32 -03:00
23fe731d30 Update botui submodule - Fix login redirect with absolute URL 2026-02-04 13:20:35 -03:00
9f46a41abf Update botui submodule - Fix login redirect to chat 2026-02-04 12:53:03 -03:00
13cea1b75c Update botui submodule - Hide voice icon, use light theme, add cursor blink 2026-02-04 09:56:33 -03:00
96076831ab Update botui submodule - Fix logged-out user menu 2026-02-04 08:57:44 -03:00
02cd170eeb Update botui submodule - Add logged-out navigation menu 2026-02-04 00:03:14 -03:00
15 changed files with 179 additions and 17 deletions

8
.gitignore vendored
View file

@ -36,3 +36,11 @@ work
Cargo.lock Cargo.lock
.kiro .kiro
config config
# Playwright
node_modules/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
/playwright/.auth/

View file

@ -1,5 +1,7 @@
RULE 0: Never call tool_call while thinking. Ex NEVER do this: Let me check if the API call succeeded:<tool_call>terminal<arg_key>command</arg_key><arg_value>tail -50 botserver.log | grep -E "LLM streaming error|error|Error|SUCCESS|200"</arg_value><arg_key>cd</arg_key><arg_value>gb</arg_value></tool_call>. First finish Thinking, then emit a explanation and tool!
# General Bots Workspace # General Bots Workspace
**Version:** 6.2.0 **Version:** 6.2.0
**Type:** Rust Workspace (Monorepo with Independent Subproject Repos) **Type:** Rust Workspace (Monorepo with Independent Subproject Repos)
@ -856,6 +858,7 @@ validate_table_name(&safe_table)?;
❌ NEVER modify Cargo.toml lints section! ❌ NEVER modify Cargo.toml lints section!
❌ NEVER use CDN links - all assets must be local ❌ NEVER use CDN links - all assets must be local
❌ NEVER use cargo clean - causes 30min rebuilds, use ./reset.sh for database issues ❌ NEVER use cargo clean - causes 30min rebuilds, use ./reset.sh for database issues
❌ NEVER create .md documentation files without checking botbook/ first - documentation belongs there
``` ```
--- ---
@ -1033,11 +1036,12 @@ Subprojects (botapp, botserver, etc.) are **not** git submodules - they are inde
## Development Workflow ## Development Workflow
1. Read this README.md (workspace-level rules) 1. Read this README.md (workspace-level rules)
2. Read `<project>/README.md` (project-specific rules) 2. **BEFORE creating any .md file, search botbook/ for existing documentation**
3. Use diagnostics tool to check warnings 3. Read `<project>/README.md` (project-specific rules)
4. Fix all warnings with full file rewrites 4. Use diagnostics tool to check warnings
5. Verify with diagnostics after each file 5. Fix all warnings with full file rewrites
6. Never suppress warnings with `#[allow()]` 6. Verify with diagnostics after each file
7. Never suppress warnings with `#[allow()]`
--- ---

2
botapp

@ -1 +1 @@
Subproject commit bdacbab1408d93d165b031a0c43b760c990c5bc7 Subproject commit b5ee6e061acf1388aef777ddcd9a2bf84bd6ed57

@ -1 +1 @@
Subproject commit 6df9f7dce536291b35661be975852077698b3980 Subproject commit 85696bb9070738f6bb865202f8c7de733f7c731a

2
botlib

@ -1 +1 @@
Subproject commit a8ed131b3beb793c630e31a7153c5d5186f932d1 Subproject commit 2765fa2ebadc91435e8d90f068b4c96dbb77329b

@ -1 +1 @@
Subproject commit 462a6dfa51b12f22e87712e613a559f66f9013cb Subproject commit 22a1954fac2f87a0a13b5e599771273172afc73a

@ -1 +1 @@
Subproject commit 39c4dba8381d4b547bed95b2dbf181bf24e78ba4 Subproject commit 30345c66e2738ebe73d896841e54f655999e3630

@ -1 +1 @@
Subproject commit 9170b3747488fdd1f3360efff7a55315a9aa66ba Subproject commit dd3d8c74dd58a1cc6d6b18d22108819519aaf9c3

@ -1 +1 @@
Subproject commit 51458e391df2a47f5ccbcf10ec45edeeb9cf5902 Subproject commit 74e761de0dd5105885acf00183223a702a8436df

2
botui

@ -1 +1 @@
Subproject commit 34d55825bcfb0fa2ac0b023d6fc01d941a6e547c Subproject commit e0504f37030ffd8c4a33188df8daf5b83edc52e9

View file

@ -1,7 +1,7 @@
{ {
"base_url": "http://localhost:8300", "base_url": "http://localhost:8300",
"default_org": { "default_org": {
"id": "358177047652073486", "id": "358572039839154190",
"name": "default", "name": "default",
"domain": "default.localhost" "domain": "default.localhost"
}, },
@ -13,8 +13,8 @@
"first_name": "Admin", "first_name": "Admin",
"last_name": "User" "last_name": "User"
}, },
"admin_token": "LD-1gRwrdVzdU5hOyMsMMZ3HlP8UlYuhDS4p-H-CSgKHb0F4jQyJuj-qSWpJLW9q3-B9b3o", "admin_token": "eW0mGnOlKjpYHsrZZNAh1o3_8qeyF1iKKgEj-Y63GBdjQbQmxKxEjsNmVLZ_DWRDK6I3_yI",
"project_id": "", "project_id": "",
"client_id": "358177048256118798", "client_id": "358572040510308366",
"client_secret": "OTfOq1qyYkewR5wfanhB78R3hZ1lpYc6vfVrreIx1UnyMl8FgJugBHuopmqMTOmg" "client_secret": "WyZRbj5iMkOkbvvtJWivXVaaydhWX1TodavhnAhsivl8IDZ44v2QoqT5upfgmOfz"
} }

12
package.json Normal file
View file

@ -0,0 +1,12 @@
{
"name": "gb",
"version": "1.0.0",
"main": "index.js",
"author": "Rodrigo Rodriguez (Pragmatismo) <me@rodrigorodriguez.com>",
"license": "MIT",
"devDependencies": {
"@playwright/test": "^1.58.1",
"@types/node": "^25.2.0"
},
"scripts": {}
}

79
playwright.config.ts Normal file
View file

@ -0,0 +1,79 @@
import { defineConfig, devices } from '@playwright/test';
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: './tests',
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('')`. */
// baseURL: 'http://localhost:3000',
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},
/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },
/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],
/* Run your local dev server before starting the tests */
// webServer: {
// command: 'npm run start',
// url: 'http://localhost:3000',
// reuseExistingServer: !process.env.CI,
// },
});

18
tests/example.spec.ts Normal file
View file

@ -0,0 +1,18 @@
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/Playwright/);
});
test('get started link', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Click the get started link.
await page.getByRole('link', { name: 'Get started' }).click();
// Expects page to have a heading with the name of Installation.
await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});

41
yarn.lock Normal file
View file

@ -0,0 +1,41 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@playwright/test@^1.58.1":
version "1.58.1"
resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.58.1.tgz#891dcd1da815cb1042490531f6d8778988509d22"
integrity sha512-6LdVIUERWxQMmUSSQi0I53GgCBYgM2RpGngCPY7hSeju+VrKjq3lvs7HpJoPbDiY5QM5EYRtRX5fvrinnMAz3w==
dependencies:
playwright "1.58.1"
"@types/node@^25.2.0":
version "25.2.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.0.tgz#015b7d228470c1dcbfc17fe9c63039d216b4d782"
integrity sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==
dependencies:
undici-types "~7.16.0"
fsevents@2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
playwright-core@1.58.1:
version "1.58.1"
resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.58.1.tgz#d63be2c9b7dcbdb035beddd4b42437bd3ca89107"
integrity sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==
playwright@1.58.1:
version "1.58.1"
resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.58.1.tgz#63300e77a604c77264e1b499c0d94b54ed96d6ba"
integrity sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==
dependencies:
playwright-core "1.58.1"
optionalDependencies:
fsevents "2.3.2"
undici-types@~7.16.0:
version "7.16.0"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46"
integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==