chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "MindsDB",
|
||||
"build": {
|
||||
"dockerfile": "../docker/mindsdb.Dockerfile",
|
||||
"context": ".."
|
||||
},
|
||||
"appPort": [47334, 47335],
|
||||
"postCreateCommand": "pip3 install -r requirements/requirements.txt",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/git:1": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/.github/workflows/ @mindsdb/devops
|
||||
@@ -0,0 +1,48 @@
|
||||
name: 🐞 Report a bug
|
||||
description: Create a bug report to help us improve MindsDB
|
||||
title: "[Bug]: "
|
||||
labels: [bug]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: Thanks for taking the time to fill out this bug report! Please fill out the form in English!
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Short description of current behavior
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Video or screenshots
|
||||
description: The better the evidence you can provide, the faster we can fix it!
|
||||
placeholder: https://www.loom.com/share/abcdefghijklmnopqrrstuvwxyz
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: A short description of what you expected to happen
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: How to reproduce the error
|
||||
description: The better the evidence you can provide, the faster we can fix it!
|
||||
placeholder: |
|
||||
I uses these queries...
|
||||
I was running MindsDB on...
|
||||
I get this error...
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: |
|
||||
Links? References? Ideas? Anything that will give us more context about the issue you are encountering!
|
||||
validations:
|
||||
required: false
|
||||
@@ -0,0 +1,4 @@
|
||||
contact_links:
|
||||
- name: "Join MindsDB Community"
|
||||
url: https://mindsdb.com/joincommunity
|
||||
about: Join our community on Slack for other questions and general chat
|
||||
@@ -0,0 +1,36 @@
|
||||
name: 🚀 Request a feature
|
||||
description: Create a feature request for us to add to our roadmap
|
||||
labels: [enhancement]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: Thanks for taking the time to fill out this feature request! Please fill out the form in English!
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Short description and motivation for the proposed feature
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Video or screenshots
|
||||
description: The better the information you can provide, the faster we can make it!
|
||||
placeholder: https://www.loom.com/share/abcdefghijklmnopqrrstuvwxyz
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe some possible solutions
|
||||
description: How could this feature be implemented?
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: |
|
||||
Links? References? Ideas? Anything else that will give us more context!
|
||||
validations:
|
||||
required: false
|
||||
@@ -0,0 +1,30 @@
|
||||
name: ✍️ Improve our docs
|
||||
title: "[Docs]: "
|
||||
description: Let us know how we can make our documentation more helpful
|
||||
labels: [documentation]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: Thanks for taking the time to fill out this docs request! Please fill out the form in English!
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Short description of what should be added or improved
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Video or screenshots
|
||||
description: The better the information you can provide, the faster we can improve it!
|
||||
placeholder: https://www.loom.com/share/abcdefghijklmnopqrrstuvwxyz
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: |
|
||||
Links? References? Ideas? Anything else that will give us more context!
|
||||
validations:
|
||||
required: false
|
||||
@@ -0,0 +1,47 @@
|
||||
name: 🧑🔧 Propose a new integration
|
||||
description: Share an idea for a new datasource or machine learning integration
|
||||
title: "[Integration]: "
|
||||
labels: [roadmap, integration]
|
||||
assignees:
|
||||
-
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to share the new integration! Please fill out the form in English!
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Is there an existing integration?
|
||||
description: Please search to see if MindsDB already supports this integration.A list with supported integrations can be found [here](https://github.com/mindsdb/mindsdb#database-integrations).
|
||||
options:
|
||||
- label: I have searched the existing integrations.
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Use Case
|
||||
description: Which use-cases does this solve?
|
||||
placeholder: |
|
||||
Why this integration will be usefull to users? What is the value of having this integration?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Motivation
|
||||
description: How will we know that this has succeeded?
|
||||
placeholder: |
|
||||
Explain the proposed integration as though it was already implemented and you were explaining it to a user.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Implementation
|
||||
description: Describe how this integration will work, with code, pseudo-code, mock-ups, text, or add diagrams
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: |
|
||||
Links? References? Anything that will give more context about this integration!
|
||||
validations:
|
||||
required: false
|
||||
@@ -0,0 +1,35 @@
|
||||
## Description
|
||||
|
||||
Please include a summary of the change and the issue it solves.
|
||||
|
||||
Fixes #issue_number
|
||||
|
||||
## Type of change
|
||||
|
||||
(Please delete options that are not relevant)
|
||||
|
||||
- [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] ⚡ New feature (non-breaking change which adds functionality)
|
||||
- [ ] 📢 Breaking change (fix or feature that would cause existing functionality not to work as expected)
|
||||
- [ ] 📄 This change requires a documentation update
|
||||
|
||||
## Verification Process
|
||||
|
||||
To ensure the changes are working as expected:
|
||||
|
||||
- [ ] Test Location: Specify the URL or path for testing.
|
||||
- [ ] Verification Steps: Outline the steps or queries needed to validate the change. Include any data, configurations, or actions required to reproduce or see the new functionality.
|
||||
|
||||
## Additional Media:
|
||||
|
||||
- [ ] I have attached a brief loom video or screenshots showcasing the new functionality or change.
|
||||
|
||||
## Checklist:
|
||||
|
||||
- [ ] My code follows the style guidelines(PEP 8) of MindsDB.
|
||||
- [ ] I have appropriately commented on my code, especially in complex areas.
|
||||
- [ ] Necessary documentation updates are either made or tracked in issues.
|
||||
- [ ] Relevant unit and integration tests are updated or added.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
pull_request:
|
||||
branches: ["main"]
|
||||
schedule:
|
||||
- cron: "0 4 * * 0"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
detect-languages:
|
||||
name: Detect CodeQL languages
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build language matrix
|
||||
id: set-matrix
|
||||
run: |
|
||||
include='[{"language":"actions","build-mode":"none"}]'
|
||||
|
||||
if git ls-files '*.py' | grep -q .; then
|
||||
include='[{"language":"actions","build-mode":"none"},{"language":"python","build-mode":"none"}]'
|
||||
fi
|
||||
|
||||
echo "matrix={\"include\":$include}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
analyze:
|
||||
name: Analyze (${{ matrix.language }})
|
||||
needs: detect-languages
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix: ${{ fromJSON(needs.detect-languages.outputs.matrix) }}
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v4
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix['build-mode'] }}
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4
|
||||
with:
|
||||
category: /language:${{ matrix.language }}
|
||||
@@ -0,0 +1,37 @@
|
||||
name: Deploy Docs to GitHub Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "docs/**"
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
concurrency:
|
||||
group: pages
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deploy.outputs.page_url }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/configure-pages@v5
|
||||
|
||||
- uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: docs/
|
||||
|
||||
- id: deploy
|
||||
uses: actions/deploy-pages@v4
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
**/*.pyc
|
||||
*__pycache__*
|
||||
var
|
||||
etc
|
||||
.idea
|
||||
mindsdb/logs
|
||||
.hypothesis/
|
||||
logs
|
||||
tests/temp
|
||||
tests/integration/flows/config/*
|
||||
my_model.zip
|
||||
model.py
|
||||
tests/integration/flows/model.py
|
||||
tests/integration/flows/my_model.zip
|
||||
distributions/docker-compose/*/storage
|
||||
venv/*
|
||||
env/*
|
||||
.envrc
|
||||
*.env
|
||||
mindsdb-venv/*
|
||||
root
|
||||
static
|
||||
tmp
|
||||
.pytest_cache
|
||||
tests/prediction_latency_test/*.csv
|
||||
storage_dir
|
||||
docker/dist/*
|
||||
.directory
|
||||
MindsDB.egg-info/*
|
||||
/build
|
||||
train_finetune.lock
|
||||
parser_tests
|
||||
|
||||
# Autokeras generated files
|
||||
auto_model
|
||||
autokeras
|
||||
structured_data_classifier
|
||||
structured_data_regressor
|
||||
mindsdb/integrations/handlers/autokeras_handler/structured_data_classifier
|
||||
|
||||
# AutoGluon generated files
|
||||
AutogluonModels
|
||||
|
||||
# VisualStudioCode
|
||||
.vscode
|
||||
.vscode/*
|
||||
.history
|
||||
doc/lib/
|
||||
run.csh
|
||||
|
||||
# Virtualenv
|
||||
mindsdb/bin
|
||||
mindsdb/lib
|
||||
mindsdb/lib64
|
||||
pyvenv.cfg
|
||||
.python-version
|
||||
.DS_Store
|
||||
mindsdb/Scripts
|
||||
mindsdb/Include
|
||||
xgboost
|
||||
|
||||
# Docs
|
||||
node_modules
|
||||
|
||||
mindsdb/**/pyproject.toml
|
||||
mindsdb/**/uv.lock
|
||||
|
||||
# dsi tests
|
||||
reports/
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
[submodule "frontend"]
|
||||
path = frontend
|
||||
url = https://github.com/mindsdb/cowork
|
||||
ignore = all
|
||||
[submodule "backend/core_api"]
|
||||
path = backend/core_api
|
||||
url = https://github.com/mindsdb/cowork-server
|
||||
ignore = all
|
||||
[submodule "backend/core_agent"]
|
||||
path = backend/core_agent
|
||||
url = https://github.com/mindsdb/anton
|
||||
ignore = all
|
||||
[submodule "backend/data-vault"]
|
||||
path = backend/data-vault
|
||||
url = https://github.com/mindsdb/data-vault
|
||||
ignore = all
|
||||
@@ -0,0 +1,180 @@
|
||||
# Minds Platform
|
||||
|
||||
## Submodules
|
||||
|
||||
This repo has 4 submodules:
|
||||
|
||||
| Path | Repo | Tracking |
|
||||
|---|---|---|
|
||||
| `frontend` | `mindsdb/cowork` | tag-pinned |
|
||||
| `backend/core_api` | `mindsdb/cowork-server` | tag-pinned |
|
||||
| `backend/core_agent` | `mindsdb/anton` | tag-pinned |
|
||||
| `backend/data-vault` | `mindsdb/data-vault` | `main` branch |
|
||||
|
||||
### Clone (fresh)
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://github.com/mindsdb/minds-platform
|
||||
```
|
||||
|
||||
### Initialize after cloning without submodules
|
||||
|
||||
```bash
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
### Pull — sync to what the parent repo pins (default)
|
||||
|
||||
```bash
|
||||
git submodule update --recursive
|
||||
```
|
||||
|
||||
### Pull — advance all submodules to latest `main`
|
||||
|
||||
Only do this if you intend to develop across all repos. You'll need to commit the updated pointers in the parent repo afterward.
|
||||
|
||||
```bash
|
||||
git submodule foreach 'git checkout main && git pull origin main'
|
||||
```
|
||||
|
||||
### Make changes and push inside a submodule
|
||||
|
||||
1. Go into the submodule and get on a real branch first (all submodules start in detached HEAD):
|
||||
|
||||
```bash
|
||||
cd backend/data-vault # or whichever submodule
|
||||
git checkout main # or: git checkout -b your-feature-branch
|
||||
```
|
||||
|
||||
2. Make your changes, commit, and push:
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "your message"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
3. Back in the parent repo, stage and commit the updated submodule pointer:
|
||||
|
||||
```bash
|
||||
cd ../..
|
||||
git add backend/data-vault
|
||||
git commit -m "bump data-vault to latest"
|
||||
git push
|
||||
```
|
||||
|
||||
> The parent repo stores a commit SHA pointer to each submodule, not the code itself. Always push from inside the submodule first, then update the pointer in the parent.
|
||||
|
||||
## Working on module branches (multi-developer)
|
||||
|
||||
The superproject pins each submodule to a commit. To let everyone develop on
|
||||
their own module branches without fighting over pins or drowning in `git status`
|
||||
noise, the workflow is:
|
||||
|
||||
**1. `.gitmodules` sets `ignore = all` on every submodule.** Day-to-day branch
|
||||
work in a submodule never shows up as a superproject change — `git status` in the
|
||||
parent stays clean no matter what branch each module is on. (This is the only
|
||||
setting that silences "new commits in `<module>`"; `ignore = dirty` does not.)
|
||||
|
||||
**2. Pick your branches in `dev.env`** (gitignored — copy from `dev.env.example`):
|
||||
|
||||
```bash
|
||||
cp dev.env.example dev.env
|
||||
# REF=feat/my-thing # all modules on one branch…
|
||||
# API_REF=feat/server-thing # …or override per module
|
||||
```
|
||||
|
||||
**3. `make` is the single source of truth for refs** — both run paths follow `dev.env`:
|
||||
|
||||
| Command | What it does |
|
||||
|---|---|
|
||||
| `make refs` | print the refs the next run will use |
|
||||
| `make use` | check out those refs across all submodules |
|
||||
| `make dev` / `make dev-web` | run the **local submodule source** (`--reload`) — follows the checked-out branch |
|
||||
| `make server` | (re)install the **Electron desktop server** from `API_REF`/`AGENT_REF` |
|
||||
| `make server-local` | install Electron desktop server **from local uncommitted source** (no push needed) |
|
||||
| `make app` | run the Electron desktop app (auto-update disabled so it can't revert your branch) |
|
||||
| `make app-local` | run the Electron desktop app **against local uncommitted source** (runs `server-local` first) |
|
||||
| `make pack-local` | build macOS `.app` from local uncommitted source, iCloud-safe (no DMG, `/tmp` build) |
|
||||
| `make watch` | live reload — Electron app + Python `--reload` (alias for `make dev`) |
|
||||
| `make baseline` | snap every submodule back to the superproject's pinned commits |
|
||||
| `make pin` | record the submodules' current commits as the superproject pins (a deliberate commit) |
|
||||
|
||||
> Two run paths, same refs: `make dev`/`dev-web` execute the local source, so they
|
||||
> follow whatever `make use` checked out. The desktop app runs a `uv`-tool-installed
|
||||
> server keyed by `COWORK_SERVER_REF`/`ANTON_REF` (see
|
||||
> `frontend/src/main/server-source.ts`); `make server`/`make app` set those from the
|
||||
> same `dev.env`. Keep both on the same ref — they share `~/.cowork/cowork.db`, so a
|
||||
> migration applied by one must exist in the other (else the app crashes on startup
|
||||
> with `Can't locate revision …`). `make flush` resets when they drift.
|
||||
|
||||
> **Developing with uncommitted changes in the Electron app**: `make dev`/`dev-web`
|
||||
> already pick up uncommitted source changes on-the-fly. For the Electron desktop path,
|
||||
> `make app-local` installs cowork-server directly from `backend/core_api/` (no commit
|
||||
> needed) and then launches the app. `COWORK_SERVER_DISABLE_AUTOUPDATE=1` is set
|
||||
> automatically so the installer won't re-download from git. To also develop `core_agent`
|
||||
> without committing: update `[tool.uv.sources] anton-agent` in
|
||||
> `backend/core_api/pyproject.toml` to `{ path = "../../core_agent" }`, then re-run
|
||||
> `make app-local`. (Restore the git source before pushing.)
|
||||
|
||||
**4. Bumping pins is deliberate.** Because submodules are ignored, the *only* way a
|
||||
pin changes is `make pin` (after a submodule PR merges and you push the submodule).
|
||||
Pushing from inside the submodule first still applies — `make pin` just records the
|
||||
new SHA in the superproject as one reviewable commit.
|
||||
|
||||
**5. Snap back to baselines** when you're *not* developing a module: `make baseline`
|
||||
(`git submodule update --init --recursive`). With `ignore = all`, `git status` won't
|
||||
remind you a teammate's pin bump left a module behind — run `make baseline` after
|
||||
pulling the superproject to align.
|
||||
|
||||
## Running locally (web browser mode)
|
||||
|
||||
After initializing submodules, start the full stack with:
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev:web
|
||||
```
|
||||
|
||||
Open `http://localhost:5173/`. The FastAPI backend starts automatically on `http://127.0.0.1:26866`.
|
||||
|
||||
### Skip Keycloak auth (required for local dev)
|
||||
|
||||
By default the web app redirects to MindsHub SSO on first load. To bypass this locally, create `frontend/src/renderer/.env` (Vite's root is `src/renderer`, not `frontend/`):
|
||||
|
||||
```bash
|
||||
echo "VITE_SKIP_AUTH=true" > frontend/src/renderer/.env
|
||||
```
|
||||
|
||||
Then restart `npm run dev:web`. The Keycloak redirect will be skipped and the app loads the onboarding screen directly where you can enter a BYOK API key.
|
||||
|
||||
### First-time symlink fix
|
||||
|
||||
The `dev:web` script expects the `uv`-installed tool at `~/.local/share/uv/tools/anton/`, but it may be installed as `anton-agent`. If you see "Anton Python interpreter not found", run:
|
||||
|
||||
```bash
|
||||
ln -s ~/.local/share/uv/tools/anton-agent ~/.local/share/uv/tools/anton
|
||||
```
|
||||
|
||||
## Flushing local installs (fresh start)
|
||||
|
||||
`make flush` wipes every local install **and** all app state, returning the machine to a pre-install condition. Use it to test the from-scratch install flow or to recover from a broken/half-installed environment.
|
||||
|
||||
```bash
|
||||
make flush # prompts before deleting
|
||||
make flush FORCE=1 # skip the prompt (CI / scripts)
|
||||
```
|
||||
|
||||
It removes:
|
||||
|
||||
| Removed | What it is |
|
||||
|---|---|
|
||||
| `cowork-server` uv tool (+ legacy `anton-agent`) | the runtime the **Electron app** installs via `uv tool install` |
|
||||
| `backend/core_api/.venv`, `backend/core_agent/.venv` | the venvs the **Makefile** dev flow builds via `uv sync` |
|
||||
| `~/.anton` | provider keys / `.env` |
|
||||
| `~/.cowork` | database, `hermes`, `projects` |
|
||||
|
||||
> ⚠️ Destructive — deletes conversations and saved provider keys, no undo. After flushing, the next `make setup` (or app launch) reinstalls everything from scratch.
|
||||
|
||||
> It deliberately leaves `uv` itself and uv-managed Python runtimes alone (shared infrastructure, not part of the anton/cowork install).
|
||||
@@ -0,0 +1,58 @@
|
||||
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at admin@mindsdb.com. All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
||||
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
|
||||
available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Contributing to Mindsdb
|
||||
|
||||
Being part of the core MindsDB team is accessible to anyone who is motivated and wants to be part of that journey!
|
||||
|
||||
Please see below how to contribute to the project, also refer to the contributing documentation.
|
||||
|
||||
## How can you help us?
|
||||
|
||||
* Report a bug
|
||||
* Improve documentation
|
||||
* Discuss the code implementation
|
||||
* Submit a bug fix
|
||||
* Propose new features
|
||||
* Test Mindsdb
|
||||
|
||||
## Code contributions
|
||||
|
||||
In general, we follow the "fork-and-pull" Git workflow.
|
||||
1. Fork the Mindsdb repository
|
||||
2. Clone the repository
|
||||
3. Make changes and commit them
|
||||
4. Push your local branch to your fork
|
||||
5. Submit a Pull request so that we can review your changes
|
||||
6. Write a commit message
|
||||
7. Make sure that the CI tests are GREEN
|
||||
|
||||
> NOTE: Be sure to merge the latest from "upstream" before making a pull request! Also, make the PR to the `main` branch.
|
||||
|
||||
## Feature and Bug reports
|
||||
We use GitHub issues to track bugs and features. Report them by opening a [new issue](https://github.com/mindsdb/mindsdb/issues/new/choose) and fill out all of the required inputs.
|
||||
|
||||
## Code review process
|
||||
|
||||
The Pull Request reviews are done on a regular basis. Please, make sure you respond to our feedback/questions.
|
||||
|
||||
## Community
|
||||
|
||||
If you have additional questions or you want to chat with the MindsDB core team, please join our [Slack community](https://mindsdb.com/joincommunity) or post at [Github Discussions](https://github.com/mindsdb/mindsdb/discussions).
|
||||
|
||||
To get updates on MindsDB’s latest announcements, releases, and events, sign up for our [Monthly Community Newsletter](https://mindsdb.com/newsletter/?utm_medium=community&utm_source=github&utm_campaign=mindsdb%20repo).
|
||||
|
||||
Join our mission of democratizing machine learning!
|
||||
|
||||
## Contributor Code of Conduct
|
||||
Please note that this project is released with a [Contributor Code of Conduct](https://github.com/mindsdb/mindsdb/blob/main/CODE_OF_CONDUCT.md). By participating in this project, you agree to abide by its terms.
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
## MIT License
|
||||
|
||||
Copyright (c) 2019 MindsDB, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,186 @@
|
||||
FRONTEND := frontend
|
||||
API := backend/core_api
|
||||
AGENT := backend/core_agent
|
||||
VAULT := backend/data-vault
|
||||
|
||||
_NPM_STAMP := $(FRONTEND)/node_modules/.package-lock.json
|
||||
_API_STAMP := $(API)/.venv
|
||||
_AGENT_STAMP := $(AGENT)/.venv
|
||||
|
||||
# ── Feature-branch selection ─────────────────────────────────────────────
|
||||
# Per-developer ref choice lives in `dev.env` (gitignored — never committed),
|
||||
# so each dev works on their own module branches without touching shared
|
||||
# files or CI. Example dev.env:
|
||||
# REF=feat/my-thing # all modules…
|
||||
# API_REF=feat/server-thing # …or override per module
|
||||
-include dev.env
|
||||
|
||||
REF ?= main
|
||||
API_REF ?= $(REF)
|
||||
AGENT_REF ?= $(REF)
|
||||
FRONTEND_REF ?= $(REF)
|
||||
|
||||
# Both run paths follow the same refs:
|
||||
# • `make dev`/`dev-web` run the LOCAL submodule source, so they follow
|
||||
# whatever branch is checked out (use `make use` to switch).
|
||||
# • the Electron desktop server is a uv-tool install keyed by these env
|
||||
# vars (frontend/src/main/server-source.ts) — exported here so `make app`
|
||||
# / `make server` install the matching branch.
|
||||
export COWORK_SERVER_REF := $(API_REF)
|
||||
export ANTON_REF := $(AGENT_REF)
|
||||
# Only inject a non-default anton override (uv rejects a redundant --with).
|
||||
_ANTON_WITH := $(if $(filter-out main,$(AGENT_REF)),--with "anton-agent @ git+https://github.com/mindsdb/anton.git@$(AGENT_REF)",)
|
||||
|
||||
.PHONY: help setup dev dev-web build dist-mac dist-win docker-build docker-up docker-down flush use pin baseline server server-local app app-local pack-local watch refs
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
help: ## list available targets
|
||||
@echo "Minds Platform — make targets:"
|
||||
@grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) \
|
||||
| sort \
|
||||
| awk 'BEGIN{FS=":.*?## "}{printf " \033[36m%-10s\033[0m %s\n", $$1, $$2}'
|
||||
@echo ""
|
||||
@echo "Module branches: set refs in dev.env (see dev.env.example), then 'make use'."
|
||||
@echo "Current refs → frontend=$(FRONTEND_REF) core_api=$(API_REF) core_agent=$(AGENT_REF)"
|
||||
|
||||
$(_NPM_STAMP): $(FRONTEND)/package-lock.json
|
||||
npm --prefix $(FRONTEND) ci
|
||||
|
||||
$(_API_STAMP): $(API)/uv.lock
|
||||
uv sync --directory $(API)
|
||||
|
||||
$(_AGENT_STAMP): $(AGENT)/uv.lock
|
||||
uv sync --directory $(AGENT)
|
||||
|
||||
setup: $(_NPM_STAMP) $(_API_STAMP) $(_AGENT_STAMP) ## install all module dependencies (npm + uv venvs)
|
||||
|
||||
dev: $(_NPM_STAMP) $(_API_STAMP) $(_AGENT_STAMP) ## run desktop dev from local module source (hot reload)
|
||||
@trap 'kill 0' SIGINT SIGTERM EXIT; \
|
||||
uv run --directory $(API) uvicorn cowork.server:app --reload \
|
||||
--reload-dir $(CURDIR)/$(API)/cowork \
|
||||
--reload-dir $(CURDIR)/$(AGENT)/anton & \
|
||||
npm --prefix $(FRONTEND) run dev
|
||||
|
||||
dev-web: $(_NPM_STAMP) $(_API_STAMP) $(_AGENT_STAMP) ## run web dev in the browser from local module source
|
||||
@trap 'kill 0' SIGINT SIGTERM EXIT; \
|
||||
uv run --directory $(API) uvicorn cowork.server:app --reload \
|
||||
--reload-dir $(CURDIR)/$(API)/cowork \
|
||||
--reload-dir $(CURDIR)/$(AGENT)/anton & \
|
||||
cd $(FRONTEND) && BUILD_TARGET=web npm run dev:renderer -- --open
|
||||
|
||||
build: $(_NPM_STAMP) ## production renderer build
|
||||
npm --prefix $(FRONTEND) run build
|
||||
|
||||
dist-mac: $(_NPM_STAMP) ## package the macOS desktop app
|
||||
npm --prefix $(FRONTEND) run dist:mac
|
||||
|
||||
dist-win: $(_NPM_STAMP) ## package the Windows desktop app
|
||||
npm --prefix $(FRONTEND) run dist:win
|
||||
|
||||
docker-build: ## build the docker images
|
||||
docker compose build
|
||||
|
||||
docker-up: ## start the docker stack
|
||||
docker compose up
|
||||
|
||||
docker-down: ## stop the docker stack
|
||||
docker compose down
|
||||
|
||||
# Wipe every local install + all app state, returning the machine to a
|
||||
# pre-install state. Covers BOTH runtime models (the Makefile dev venvs
|
||||
# AND the Electron app's `uv tool install cowork-server`) plus user data.
|
||||
# Removes:
|
||||
# • cowork-server uv tool (and the legacy anton-agent tool)
|
||||
# • submodule venvs: $(API)/.venv, $(AGENT)/.venv
|
||||
# • ~/.anton — provider keys / .env
|
||||
# • ~/.cowork — database, hermes, projects
|
||||
# The next `make setup` (or app launch) reinstalls from scratch.
|
||||
# Set FORCE=1 to skip the confirmation prompt (CI / scripts).
|
||||
flush: ## wipe all local installs + app state (fresh start; FORCE=1 to skip prompt)
|
||||
@echo "This will PERMANENTLY remove:"
|
||||
@echo " • cowork-server uv tool (+ legacy anton-agent)"
|
||||
@echo " • $(API)/.venv and $(AGENT)/.venv"
|
||||
@echo " • ~/.anton (provider keys / .env)"
|
||||
@echo " • ~/.cowork (database, hermes, projects)"
|
||||
@if [ "$(FORCE)" != "1" ]; then \
|
||||
read -p "Proceed? [y/N] " ans; [ "$$ans" = y ] || [ "$$ans" = Y ] || { echo "Aborted."; exit 1; }; \
|
||||
fi
|
||||
-uv tool uninstall cowork-server
|
||||
-uv tool uninstall anton-agent
|
||||
rm -rf $(API)/.venv $(AGENT)/.venv
|
||||
rm -rf $$HOME/.anton $$HOME/.cowork
|
||||
@echo "✓ Flushed. Run 'make setup' (or relaunch the app) for a fresh install."
|
||||
|
||||
# ── Module-branch workflow ───────────────────────────────────────────────
|
||||
# The superproject pins each submodule to a commit; `.gitmodules` sets
|
||||
# `ignore = all` so day-to-day branch work never shows up as superproject
|
||||
# changes (git stays clean). Pins move ONLY via `make pin` — a deliberate,
|
||||
# reviewable commit. See CLAUDE.md for the full workflow.
|
||||
|
||||
refs: ## print the refs the next make/run will use
|
||||
@echo "frontend : $(FRONTEND_REF)"
|
||||
@echo "core_api : $(API_REF)"
|
||||
@echo "core_agent: $(AGENT_REF)"
|
||||
|
||||
use: ## check out the configured refs across submodules (REF=… or dev.env)
|
||||
-git -C $(FRONTEND) fetch -q origin $(FRONTEND_REF)
|
||||
-git -C $(FRONTEND) checkout $(FRONTEND_REF)
|
||||
-git -C $(API) fetch -q origin $(API_REF)
|
||||
-git -C $(API) checkout $(API_REF)
|
||||
-git -C $(AGENT) fetch -q origin $(AGENT_REF)
|
||||
-git -C $(AGENT) checkout $(AGENT_REF)
|
||||
@echo "✓ on: frontend=$(FRONTEND_REF) core_api=$(API_REF) core_agent=$(AGENT_REF)"
|
||||
|
||||
baseline: ## snap every submodule back to the superproject's pinned commits
|
||||
git submodule update --init --recursive
|
||||
@echo "✓ submodules reset to pinned baseline."
|
||||
|
||||
pin: ## record the submodules' CURRENT commits as the superproject pins
|
||||
git add $(FRONTEND) $(API) $(AGENT) $(VAULT)
|
||||
@git diff --cached --quiet -- $(FRONTEND) $(API) $(AGENT) $(VAULT) \
|
||||
&& echo "Nothing to pin — submodule commits already match." \
|
||||
|| git commit -m "chore: bump submodule pins"
|
||||
@echo "→ push the superproject to share the new pins."
|
||||
|
||||
server: ## (re)install the Electron desktop server from the configured API_REF/AGENT_REF
|
||||
UV_PYTHON_PREFERENCE=only-managed uv tool install \
|
||||
"git+https://github.com/mindsdb/cowork-server.git@$(API_REF)" $(_ANTON_WITH) \
|
||||
--force --reinstall --python '>=3.12,<3.14'
|
||||
@echo "✓ desktop server installed from core_api@$(API_REF)."
|
||||
|
||||
server-local: ## install Electron desktop server from LOCAL uncommitted source (no push needed)
|
||||
UV_PYTHON_PREFERENCE=only-managed uv tool install \
|
||||
"$(CURDIR)/$(API)" \
|
||||
--force --reinstall --python '>=3.12,<3.14'
|
||||
@echo "✓ desktop server installed from local source: $(CURDIR)/$(API)"
|
||||
@echo " anton resolved from core_api/pyproject.toml [tool.uv.sources]"
|
||||
@echo " To also use local core_agent, set:"
|
||||
@echo " [tool.uv.sources] anton-agent = { path = \"../../core_agent\" }"
|
||||
@echo " in backend/core_api/pyproject.toml, then re-run server-local."
|
||||
|
||||
app: $(_NPM_STAMP) ## run the Electron desktop app against the configured branch (no auto-update)
|
||||
cd $(FRONTEND) && COWORK_SERVER_DISABLE_AUTOUPDATE=1 npm run dev
|
||||
|
||||
app-local: $(_NPM_STAMP) ## run the Electron desktop app using LOCAL source (implies server-local)
|
||||
$(MAKE) server-local
|
||||
cd $(FRONTEND) && COWORK_SERVER_DISABLE_AUTOUPDATE=1 \
|
||||
COWORK_SERVER_PACKAGE="$(CURDIR)/$(API)" npm run dev
|
||||
|
||||
pack-local: $(_NPM_STAMP) ## build macOS .app from LOCAL uncommitted source, iCloud-safe (no DMG)
|
||||
$(MAKE) server-local
|
||||
cd $(FRONTEND) && PATH="/opt/homebrew/opt/node@20/bin:$$PATH" \
|
||||
npm run build && \
|
||||
npx electron-builder --mac --arm64 --dir \
|
||||
--config.directories.output=/tmp/minds-build
|
||||
rm -rf $(FRONTEND)/release/mac-arm64
|
||||
cp -R /tmp/minds-build/mac-arm64 $(FRONTEND)/release/
|
||||
@echo "✓ Built: $(FRONTEND)/release/mac-arm64/MindsHub Cowork.app"
|
||||
@echo " Launch: COWORK_SERVER_DISABLE_AUTOUPDATE=1 '$(CURDIR)/$(FRONTEND)/release/mac-arm64/MindsHub Cowork.app/Contents/MacOS/MindsHub Cowork' &"
|
||||
|
||||
watch: $(_NPM_STAMP) $(_API_STAMP) $(_AGENT_STAMP) ## live reload — Electron app + Python hot-reload (alias for dev)
|
||||
@trap 'kill 0' SIGINT SIGTERM EXIT; \
|
||||
uv run --directory $(API) uvicorn cowork.server:app --reload \
|
||||
--reload-dir $(CURDIR)/$(API)/cowork \
|
||||
--reload-dir $(CURDIR)/$(AGENT)/anton & \
|
||||
npm --prefix $(FRONTEND) run dev
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
<a name="readme-top"></a>
|
||||
|
||||
<div align="center">
|
||||
|
||||
# MindsHub
|
||||
|
||||
**El espacio de trabajo unificado donde los modelos de código abierto hacen las cosas por ti.**
|
||||
|
||||
_Haz que la IA haga trabajo real. Cambia de modelo cuando quieras — conserva todo lo que has construido._
|
||||
|
||||
[](https://github.com/mindsdb/minds/releases)
|
||||
[](https://github.com/mindsdb/minds/stargazers)
|
||||
[](#-licencia)
|
||||
[](https://www.python.org/downloads/)
|
||||
|
||||
[Sitio web](https://mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Documentación](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[App web](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Precios](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Discord](https://mindshub.ai/discord)
|
||||
|
||||
<p align="center">
|
||||
<sub>Otros idiomas: <a href="README.md">English</a> · <a href="README.zh.md">中文</a> · <a href="README.pt.md">Português</a> · <a href="README.hi.md">हिन्दी</a></sub>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<img width="640" height="480" alt="cowork" src="https://github.com/user-attachments/assets/048761b8-aa77-4506-9c4d-32e2fdecbb60" />
|
||||
</p>
|
||||
|
||||
**MindsHub Cowork** es el espacio de trabajo unificado donde delegas proyectos completos —apps, sitios web, investigación, análisis, informes, operaciones programadas— y recibes resultados terminados y listos para compartir. Conecta tus datos, dirige el trabajo a cualquier modelo (abierto o propietario), ejecuta agentes de código abierto y convierte su resultado en aplicaciones web que puedes publicar. Es de código abierto y funciona en cualquier lugar: tu máquina, tu VPC o la app alojada.
|
||||
|
||||
Este repositorio es el **superproyecto de la plataforma**: reúne la app de escritorio/web, el backend del agente y el motor de datos para que puedas construir y ejecutar toda la pila desde el código fuente.
|
||||
|
||||
## Primeros pasos
|
||||
|
||||
Elige lo que mejor te convenga:
|
||||
|
||||
- **Web — nada que instalar.** Abre **[console.mindshub.ai](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)** e inicia sesión.
|
||||
- **macOS.** [Descarga la app de escritorio](https://downloads.mindsdb.com/mindshub-cowork/mac/mindshub-cowork-latest.pkg) (`.pkg`).
|
||||
- **Windows.** [Descarga la app de escritorio](https://downloads.mindsdb.com/mindshub-cowork/windows/mindshub-cowork-latest.exe) (`.exe`).
|
||||
- **Linux.** [Compílalo desde el código fuente](#compílalo-desde-el-código-fuente).
|
||||
|
||||
Gratis para empezar. Pro añade todos los modelos de vanguardia y artefactos privados — ver [precios](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
|
||||
## Qué puedes hacer
|
||||
|
||||
Para cualquier trabajador del conocimiento —creadores, estrategas y operadores—:
|
||||
|
||||
- **Automatiza** trabajo repetitivo de varios pasos que implica leer y escribir: informes, monitoreo, flujos de trabajo recurrentes y operaciones programadas.
|
||||
- **Crea** herramientas y artefactos internos de IA —apps, dashboards, presentaciones, documentos, análisis— sin necesidad de ingeniería, y publícalos en una URL en vivo para compartir con tu equipo.
|
||||
|
||||
## Qué incluye
|
||||
|
||||
- **Datos conectados.** Un vault seguro conecta sistemas como BigQuery, Postgres, Gmail, Drive, HubSpot, Notion y Linear. Las credenciales quedan delimitadas por conexión —los agentes nunca ven las claves en bruto.
|
||||
- **Model Router.** Cambia entre modelos de vanguardia (Claude, GPT, Gemini) y modelos abiertos (DeepSeek, Qwen, Kimi) sin configurar una clave para cada proveedor.
|
||||
- **Agentes abiertos.** Ejecuta harnesses de código abierto intercambiables —Anton (por defecto) y Hermes— seleccionables desde un menú desplegable.
|
||||
- **Artefactos.** Convierte la salida del agente en documentos, dashboards, apps y código, y publícalo en una URL en vivo.
|
||||
- **Memoria, habilidades y programación.** Memoria entre sesiones, una biblioteca de habilidades reutilizable y tareas que se ejecutan según un horario.
|
||||
|
||||
## Compílalo desde el código fuente
|
||||
|
||||
**1. Clona el repositorio**
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://github.com/mindsdb/minds.git
|
||||
cd minds
|
||||
```
|
||||
|
||||
**2. Instala las dependencias**
|
||||
|
||||
```bash
|
||||
make setup
|
||||
```
|
||||
|
||||
**3. Ejecuta**
|
||||
|
||||
| Modo | Comando |
|
||||
|---|---|
|
||||
| App de escritorio (Electron) con hot reload | `make dev` o `make watch` |
|
||||
| App web en el navegador con hot reload | `make dev-web` |
|
||||
| Build de producción | `make build` |
|
||||
| Empaquetar para macOS | `make dist-mac` |
|
||||
| Empaquetar para Windows | `make dist-win` |
|
||||
| Compilar la `.app` de macOS desde código local sin confirmar | `make pack-local` |
|
||||
| Borrar todas las instalaciones y datos locales (empezar de cero) | `make flush` |
|
||||
|
||||
> **Empezar de cero:** `make flush` elimina el runtime local (la herramienta uv `cowork-server` y los `backend/*/.venv`) y borra el estado de la app en `~/.anton` (claves de proveedores) y `~/.cowork` (base de datos, hermes, proyectos). Úsalo para probar el flujo de instalación desde cero o para recuperarte de una instalación rota. Pide confirmación —pasa `FORCE=1` para omitirla. El siguiente `make setup` o el próximo arranque de la app reinstala todo. ⚠️ Esto elimina tus conversaciones y claves guardadas.
|
||||
|
||||
### Trabajar en ramas de funcionalidades (submódulos)
|
||||
|
||||
Este repositorio es un superproyecto que fija (pin) cada módulo (`frontend`, `backend/core_api`, `backend/core_agent`, `backend/data-vault`) a un commit. Para trabajar en ramas de los módulos sin ensuciar el `git status` ni pelear por los pins:
|
||||
|
||||
**1. Elige tus ramas** en un `dev.env` (ignorado por git, cópialo de la plantilla):
|
||||
|
||||
```bash
|
||||
cp dev.env.example dev.env # luego define REF=feat/mi-cosa (o por módulo API_REF=…)
|
||||
```
|
||||
|
||||
**2. `make` sigue esa configuración** —un solo ajuste, para ambas formas de ejecutar:
|
||||
|
||||
| Comando | Qué hace |
|
||||
|---|---|
|
||||
| `make use` | hace checkout de las ramas de `dev.env` en todos los submódulos |
|
||||
| `make dev` / `make watch` | ejecuta la app Electron con hot reload contra el código local |
|
||||
| `make dev-web` | ejecuta la SPA web con hot reload contra el código local |
|
||||
| `make server` + `make app` | (re)instala el servidor de escritorio desde la rama configurada y lo lanza |
|
||||
| `make server-local` + `make app-local` | instala el servidor de escritorio desde **código local sin confirmar** y lo lanza |
|
||||
| `make pack-local` | compila la `.app` de macOS desde código local sin confirmar (sin necesidad de push) |
|
||||
| `make refs` | muestra qué referencias usará la próxima ejecución |
|
||||
| `make baseline` | restablece los submódulos a los commits fijados |
|
||||
| `make pin` | registra los commits actuales de los submódulos como los pins del superproyecto (un commit deliberado) |
|
||||
|
||||
Los submódulos están configurados con `ignore = all`, así que tu trabajo en ramas nunca aparece como cambios del superproyecto —el `git status` del repositorio padre se mantiene limpio. Los pins solo se mueven con `make pin`. Consulta [`CLAUDE.md`](CLAUDE.md) para el flujo completo.
|
||||
|
||||
## Despliega en cualquier lugar
|
||||
|
||||
Cowork está diseñado para un despliegue flexible —infraestructura **en la nube, VPC, on-prem, air-gapped e híbrida**— para que mantengas el control total sobre tu infraestructura, modelos, permisos y datos.
|
||||
|
||||
## Ayuda y soporte
|
||||
|
||||
- **Haz una pregunta** — únete a la [comunidad de Discord](https://mindshub.ai/discord).
|
||||
- **Reporta un bug** — abre un [issue en GitHub](https://github.com/mindsdb/minds/issues) con los pasos para reproducirlo.
|
||||
- **Lee la documentación** — guías, configuración y la API en [docs.mindshub.ai](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
- **SLAs empresariales o despliegues a medida** — [contacta al equipo](https://mindshub.ai/contact?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
|
||||
## 🤝 Contribuir
|
||||
|
||||
Cowork es de código abierto y las contribuciones son bienvenidas —código, integraciones, documentación, reportes de bugs e ideas de funcionalidades. Lee la [documentación](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) para configurarte, explora los [issues abiertos](https://github.com/mindsdb/minds/issues) y saluda en [Discord](https://mindshub.ai/discord).
|
||||
|
||||
## 🔒 Seguridad
|
||||
|
||||
¿Encontraste una vulnerabilidad de seguridad? Por favor **no** abras un issue público. Repórtala de forma privada a través de nuestra [política de seguridad](https://github.com/mindsdb/minds/security).
|
||||
|
||||
## 📚 Recursos
|
||||
|
||||
- [Documentación](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Blog](https://mindshub.ai/blog?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Guías de marca y kit de prensa](https://mindshub.ai/press-kit?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Comunidad de Discord](https://mindshub.ai/discord)
|
||||
|
||||
## 📄 Licencia
|
||||
|
||||
Este repositorio se publica bajo la [Licencia MIT](LICENSE). Los componentes incluidos se rigen por sus propias licencias —consulta el repositorio de cada submódulo para más detalles.
|
||||
|
||||
<p align="right">(<a href="#readme-top">volver arriba</a>)</p>
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
<a name="readme-top"></a>
|
||||
|
||||
<div align="center">
|
||||
|
||||
# MindsHub
|
||||
|
||||
**वह एकीकृत वर्कस्पेस जहाँ ओपन-सोर्स मॉडल आपके लिए काम पूरा करते हैं।**
|
||||
|
||||
_AI से असली काम करवाएँ। कभी भी मॉडल बदलें — जो कुछ आपने बनाया है, वह सब बना रहता है।_
|
||||
|
||||
[](https://github.com/mindsdb/minds/releases)
|
||||
[](https://github.com/mindsdb/minds/stargazers)
|
||||
[](#-लाइसेंस)
|
||||
[](https://www.python.org/downloads/)
|
||||
|
||||
[वेबसाइट](https://mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[दस्तावेज़](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[वेब ऐप](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[मूल्य निर्धारण](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Discord](https://mindshub.ai/discord)
|
||||
|
||||
<p align="center">
|
||||
<sub>अन्य भाषाएँ: <a href="README.md">English</a> · <a href="README.zh.md">中文</a> · <a href="README.es.md">Español</a> · <a href="README.pt.md">Português</a></sub>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<img width="640" height="480" alt="cowork" src="https://github.com/user-attachments/assets/048761b8-aa77-4506-9c4d-32e2fdecbb60" />
|
||||
</p>
|
||||
|
||||
**MindsHub Cowork** वह एकीकृत वर्कस्पेस है जहाँ आप पूरे प्रोजेक्ट्स सौंप सकते हैं — ऐप्स, वेबसाइट्स, रिसर्च, विश्लेषण, रिपोर्टिंग, शेड्यूल्ड ऑपरेशंस — और तैयार, शेयर करने-लायक नतीजे पाते हैं। अपना डेटा कनेक्ट करें, काम को किसी भी मॉडल (ओपन या प्रोप्राइटरी) पर रूट करें, ओपन-सोर्स एजेंट चलाएँ, और उनके आउटपुट को प्रकाशित करने-योग्य वेब ऐप्लिकेशंस में बदलें। यह ओपन सोर्स है और कहीं भी चलता है — आपकी मशीन पर, आपके VPC में, या होस्टेड ऐप में।
|
||||
|
||||
यह रिपॉज़िटरी **प्लेटफ़ॉर्म सुपरप्रोजेक्ट** है: यह डेस्कटॉप/वेब ऐप, एजेंट बैकएंड, और डेटा इंजन को एक साथ जोड़ता है, ताकि आप पूरा स्टैक सोर्स से बना और चला सकें।
|
||||
|
||||
## शुरुआत करें
|
||||
|
||||
जो आपके लिए सही हो, चुनें:
|
||||
|
||||
- **वेब — कुछ भी इंस्टॉल करने की ज़रूरत नहीं।** **[console.mindshub.ai](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)** खोलें और साइन इन करें।
|
||||
- **macOS.** [डेस्कटॉप ऐप डाउनलोड करें](https://downloads.mindsdb.com/mindshub-cowork/mac/mindshub-cowork-latest.pkg) (`.pkg`)।
|
||||
- **Windows.** [डेस्कटॉप ऐप डाउनलोड करें](https://downloads.mindsdb.com/mindshub-cowork/windows/mindshub-cowork-latest.exe) (`.exe`)।
|
||||
- **Linux.** [सोर्स से बिल्ड करें](#सोर्स-से-बिल्ड-करें)।
|
||||
|
||||
शुरू करना फ्री है। Pro में सभी फ्रंटियर मॉडल्स और प्राइवेट आर्टिफैक्ट्स जुड़ते हैं — [मूल्य निर्धारण](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) देखें।
|
||||
|
||||
## आप क्या कर सकते हैं
|
||||
|
||||
हर नॉलेज वर्कर के लिए — क्रिएटर्स, स्ट्रैटेजिस्ट्स, और ऑपरेटर्स:
|
||||
|
||||
- **ऑटोमेट करें** पढ़ने-लिखने से जुड़े दोहराव वाले, मल्टी-स्टेप काम: रिपोर्ट्स, मॉनिटरिंग, बार-बार होने वाले वर्कफ़्लो, और शेड्यूल्ड ऑपरेशंस।
|
||||
- **बनाएँ** इंटरनल AI टूल्स और आर्टिफैक्ट्स — ऐप्स, डैशबोर्ड्स, डेक्स, डॉक्युमेंट्स, एनालिसिस — इंजीनियरिंग के बिना, और अपनी टीम के साथ शेयर करने के लिए एक लाइव URL पर पब्लिश करें।
|
||||
|
||||
## इसमें क्या शामिल है
|
||||
|
||||
- **कनेक्टेड डेटा।** एक सुरक्षित वॉल्ट BigQuery, Postgres, Gmail, Drive, HubSpot, Notion, और Linear जैसे सिस्टम्स को जोड़ता है। क्रेडेंशियल्स हर कनेक्शन के हिसाब से सीमित रहते हैं — एजेंट्स कभी भी असली की (raw key) नहीं देखते।
|
||||
- **मॉडल राउटर (Model Router)।** फ्रंटियर मॉडल्स (Claude, GPT, Gemini) और ओपन मॉडल्स (DeepSeek, Qwen, Kimi) के बीच बिना हर प्रोवाइडर के लिए अलग की सेट किए स्विच करें।
|
||||
- **ओपन एजेंट्स।** इंटरचेंजेबल ओपन-सोर्स हार्नेस चलाएँ — Anton (डिफ़ॉल्ट) और Hermes — जिन्हें ड्रॉपडाउन से बदला जा सकता है।
|
||||
- **आर्टिफैक्ट्स।** एजेंट के आउटपुट को डॉक्युमेंट्स, डैशबोर्ड्स, ऐप्स और कोड में बदलें, और लाइव URL पर पब्लिश करें।
|
||||
- **मेमोरी, स्किल्स और शेड्यूलिंग।** सेशन्स के बीच याद रखने वाली मेमोरी, दोबारा इस्तेमाल होने वाली स्किल लाइब्रेरी, और शेड्यूल पर चलने वाले टास्क।
|
||||
|
||||
## सोर्स से बिल्ड करें
|
||||
|
||||
**1. रिपॉज़िटरी क्लोन करें**
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://github.com/mindsdb/minds.git
|
||||
cd minds
|
||||
```
|
||||
|
||||
**2. डिपेंडेंसीज़ इंस्टॉल करें**
|
||||
|
||||
```bash
|
||||
make setup
|
||||
```
|
||||
|
||||
**3. चलाएँ**
|
||||
|
||||
| मोड | कमांड |
|
||||
|---|---|
|
||||
| हॉट रीलोड के साथ डेस्कटॉप ऐप (Electron) | `make dev` या `make watch` |
|
||||
| हॉट रीलोड के साथ ब्राउज़र में वेब ऐप | `make dev-web` |
|
||||
| प्रोडक्शन बिल्ड | `make build` |
|
||||
| macOS के लिए पैकेज करें | `make dist-mac` |
|
||||
| Windows के लिए पैकेज करें | `make dist-win` |
|
||||
| लोकल अनकमिटेड सोर्स से macOS `.app` बनाएँ | `make pack-local` |
|
||||
| सभी लोकल इंस्टॉल्स + डेटा मिटाएँ (शुरुआत से) | `make flush` |
|
||||
|
||||
> **शुरुआत से:** `make flush` लोकल रनटाइम (`cowork-server` uv टूल और `backend/*/.venv`) हटा देता है और `~/.anton` (प्रोवाइडर कीज़) व `~/.cowork` (डेटाबेस, hermes, प्रोजेक्ट्स) में ऐप स्टेट डिलीट कर देता है। इसका उपयोग शुरुआत से इंस्टॉल फ़्लो टेस्ट करने या टूटे हुए इंस्टॉल से रिकवर करने के लिए करें। यह पुष्टि माँगता है — पुष्टि स्किप करने के लिए `FORCE=1` पास करें। अगला `make setup` या ऐप लॉन्च सब कुछ फिर से इंस्टॉल कर देता है। ⚠️ इससे आपकी बातचीत (conversations) और सेव्ड कीज़ डिलीट हो जाती हैं।
|
||||
|
||||
### फ़ीचर ब्रांच पर काम करना (सबमॉड्यूल्स)
|
||||
|
||||
यह रिपॉज़िटरी एक सुपरप्रोजेक्ट है जो हर मॉड्यूल (`frontend`, `backend/core_api`, `backend/core_agent`, `backend/data-vault`) को एक कमिट पर पिन करता है। `git status` को गंदा किए बिना या पिन्स को लेकर उलझे बिना मॉड्यूल ब्रांच पर काम करने के लिए:
|
||||
|
||||
**1. अपनी ब्रांच चुनें** एक (gitignored) `dev.env` में (टेम्प्लेट से कॉपी करें):
|
||||
|
||||
```bash
|
||||
cp dev.env.example dev.env # फिर सेट करें REF=feat/my-thing (या हर मॉड्यूल के लिए API_REF=…)
|
||||
```
|
||||
|
||||
**2. `make` इसे फ़ॉलो करता है** — एक ही सेटिंग, दोनों रन-पाथ के लिए:
|
||||
|
||||
| कमांड | यह क्या करता है |
|
||||
|---|---|
|
||||
| `make use` | सभी सबमॉड्यूल्स में `dev.env` की ब्रांच चेकआउट करता है |
|
||||
| `make dev` / `make watch` | लोकल सोर्स के खिलाफ़ हॉट रीलोड के साथ Electron ऐप चलाता है |
|
||||
| `make dev-web` | लोकल सोर्स के खिलाफ़ हॉट रीलोड के साथ वेब SPA चलाता है |
|
||||
| `make server` + `make app` | कॉन्फ़िगर की गई ब्रांच से डेस्कटॉप सर्वर (फिर से) इंस्टॉल करता है, फिर लॉन्च करता है |
|
||||
| `make server-local` + `make app-local` | **लोकल अनकमिटेड सोर्स** से डेस्कटॉप सर्वर इंस्टॉल करता है, फिर लॉन्च करता है |
|
||||
| `make pack-local` | लोकल अनकमिटेड सोर्स से macOS `.app` बनाता है (push की ज़रूरत नहीं) |
|
||||
| `make refs` | दिखाता है कि अगला रन किन रेफ़्स का उपयोग करेगा |
|
||||
| `make baseline` | सबमॉड्यूल्स को पिन किए गए कमिट्स पर रीसेट करता है |
|
||||
| `make pin` | मौजूदा सबमॉड्यूल कमिट्स को सुपरप्रोजेक्ट के पिन्स के रूप में रिकॉर्ड करता है (एक जानबूझकर किया गया कमिट) |
|
||||
|
||||
सबमॉड्यूल्स `ignore = all` के साथ कॉन्फ़िगर किए गए हैं, इसलिए आपका ब्रांच वाला काम कभी भी सुपरप्रोजेक्ट में बदलाव के रूप में नहीं दिखता — पेरेंट रिपॉज़िटरी का `git status` हमेशा साफ़ रहता है। पिन्स **केवल** `make pin` से बदलते हैं। पूरा वर्कफ़्लो [`CLAUDE.md`](CLAUDE.md) में देखें।
|
||||
|
||||
## कहीं भी डिप्लॉय करें
|
||||
|
||||
Cowork फ्लेक्सिबल डिप्लॉयमेंट के लिए बनाया गया है — **क्लाउड, VPC, ऑन-प्रेम, एयर-गैप्ड, और हाइब्रिड** इंफ़्रास्ट्रक्चर — ताकि आपका अपने इंफ़्रास्ट्रक्चर, मॉडल्स, परमिशन्स, और डेटा पर पूरा नियंत्रण बना रहे।
|
||||
|
||||
## मदद और सहायता
|
||||
|
||||
- **सवाल पूछें** — [Discord कम्युनिटी](https://mindshub.ai/discord) से जुड़ें।
|
||||
- **बग रिपोर्ट करें** — रीप्रोडक्शन स्टेप्स के साथ एक [GitHub issue](https://github.com/mindsdb/minds/issues) खोलें।
|
||||
- **दस्तावेज़ पढ़ें** — गाइड्स, सेटअप, और API [docs.mindshub.ai](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) पर।
|
||||
- **एंटरप्राइज़ SLA या कस्टम डिप्लॉयमेंट** — [टीम से संपर्क करें](https://mindshub.ai/contact?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)।
|
||||
|
||||
## 🤝 योगदान करें
|
||||
|
||||
Cowork ओपन सोर्स है और योगदान का स्वागत है — कोड, इंटीग्रेशन्स, दस्तावेज़, बग रिपोर्ट्स, और फ़ीचर आइडियाज़। सेटअप के लिए [दस्तावेज़](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) पढ़ें, [ओपन इश्यूज़](https://github.com/mindsdb/minds/issues) ब्राउज़ करें, और [Discord](https://mindshub.ai/discord) पर हाय कहें।
|
||||
|
||||
## 🔒 सुरक्षा
|
||||
|
||||
कोई सुरक्षा खामी (vulnerability) मिली? कृपया कोई पब्लिक issue **न** खोलें। हमारी [सुरक्षा नीति](https://github.com/mindsdb/minds/security) के ज़रिए इसे प्राइवेट तौर पर रिपोर्ट करें।
|
||||
|
||||
## 📚 संसाधन
|
||||
|
||||
- [दस्तावेज़](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [ब्लॉग](https://mindshub.ai/blog?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [ब्रांड गाइडलाइंस और प्रेस किट](https://mindshub.ai/press-kit?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Discord कम्युनिटी](https://mindshub.ai/discord)
|
||||
|
||||
## 📄 लाइसेंस
|
||||
|
||||
यह रिपॉज़िटरी [MIT लाइसेंस](LICENSE) के तहत जारी की गई है। बंडल किए गए कॉम्पोनेंट्स अपने-अपने लाइसेंस से गवर्न होते हैं — विवरण के लिए हर सबमॉड्यूल की रिपॉज़िटरी देखें।
|
||||
|
||||
<p align="right">(<a href="#readme-top">ऊपर वापस जाएँ</a>)</p>
|
||||
@@ -0,0 +1,150 @@
|
||||
<a name="readme-top"></a>
|
||||
|
||||
<div align="center">
|
||||
|
||||
# MindsHub
|
||||
|
||||
**The unified workspace where open-source models get things done for you.**
|
||||
|
||||
_Make AI do actual work. Swap the model anytime — keep everything you've built._
|
||||
|
||||
[](https://github.com/mindsdb/minds/releases)
|
||||
[](https://github.com/mindsdb/minds/stargazers)
|
||||
[](#-license)
|
||||
[](https://www.python.org/downloads/)
|
||||
|
||||
[Website](https://mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Docs](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Web app](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Pricing](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Discord](https://mindshub.ai/discord)
|
||||
|
||||
<p align="center">
|
||||
<sub>Read this in: <a href="README.zh.md">中文</a> · <a href="README.es.md">Español</a> · <a href="README.pt.md">Português</a> · <a href="README.hi.md">हिन्दी</a></sub>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<img width="640" height="480" alt="cowork" src="https://github.com/user-attachments/assets/048761b8-aa77-4506-9c4d-32e2fdecbb60" />
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
**MindsHub Cowork** is the unified workspace where you delegate entire projects — apps, websites, research, analysis, reporting, scheduled operations — and collect finished, shareable results. Connect your data, route work to any model (open or proprietary), run open-source agents, and turn their output into web applications you can publish. It's open source and runs anywhere — your machine, your VPC, or the hosted app.
|
||||
|
||||
This repository is the **platform superproject**: it pulls together the desktop/web app, the agent backend, and the data engine so you can build and run the whole stack from source.
|
||||
|
||||
## Get started
|
||||
|
||||
Pick whichever fits:
|
||||
|
||||
- **Web — nothing to install.** Open **[console.mindshub.ai](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)** and sign in.
|
||||
- **macOS.** [Download the desktop app](https://downloads.mindsdb.com/mindshub-cowork/mac/mindshub-cowork-latest.pkg) (`.pkg`).
|
||||
- **Windows.** [Download the desktop app](https://downloads.mindsdb.com/mindshub-cowork/windows/mindshub-cowork-latest.exe) (`.exe`).
|
||||
- **Linux.** [Build from source](#build-from-source).
|
||||
|
||||
Free to start. Pro adds all frontier models and private artifacts — see [pricing](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
|
||||
## What you can do
|
||||
|
||||
For every knowledge worker — creators, strategists, and operators:
|
||||
|
||||
- **Automate** repetitive, multi-step work that involves reading and writing: reports, monitoring, recurring workflows, and scheduled operations.
|
||||
- **Build** internal AI tools and artifacts — apps, dashboards, decks, docs, analyses — without engineering, and publish them to a live URL to share with your team.
|
||||
|
||||
## What's inside
|
||||
|
||||
- **Connected data.** A secure vault links systems like BigQuery, Postgres, Gmail, Drive, HubSpot, Notion, and Linear. Credentials stay scoped per connection — agents never see raw keys.
|
||||
- **Model Router.** Switch between frontier models (Claude, GPT, Gemini) and open models (DeepSeek, Qwen, Kimi) without wiring up a key for each provider.
|
||||
- **Open agents.** Run interchangeable open-source harnesses — Anton (default) and Hermes — swappable from a dropdown.
|
||||
- **Artifacts.** Turn agent output into documents, dashboards, apps, and code, and publish to a live URL.
|
||||
- **Memory, skills & scheduling.** Cross-session memory, a reusable skill library, and tasks that run on a schedule.
|
||||
|
||||
## Build from source
|
||||
|
||||
**1. Clone the repository**
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://github.com/mindsdb/minds.git
|
||||
cd minds
|
||||
```
|
||||
|
||||
**2. Install dependencies**
|
||||
|
||||
```bash
|
||||
make setup
|
||||
```
|
||||
|
||||
**3. Run**
|
||||
|
||||
| Mode | Command |
|
||||
|---|---|
|
||||
| Desktop app (Electron) with hot reload | `make dev` or `make watch` |
|
||||
| Web app in browser with hot reload | `make dev-web` |
|
||||
| Production build | `make build` |
|
||||
| Package for macOS | `make dist-mac` |
|
||||
| Package for Windows | `make dist-win` |
|
||||
| Build macOS `.app` from local uncommitted source | `make pack-local` |
|
||||
| Wipe all local installs + data (fresh start) | `make flush` |
|
||||
|
||||
> **Fresh start:** `make flush` removes the local runtime (the `cowork-server` uv tool and the `backend/*/.venv`s) and deletes app state in `~/.anton` (provider keys) and `~/.cowork` (database, hermes, projects). Use it to test the from-scratch install flow or recover from a broken install. It prompts for confirmation — pass `FORCE=1` to skip. The next `make setup` or app launch reinstalls everything. ⚠️ This deletes your conversations and saved keys.
|
||||
|
||||
### Working on feature branches (submodules)
|
||||
|
||||
This repo is a superproject that pins each module (`frontend`, `backend/core_api`, `backend/core_agent`, `backend/data-vault`) to a commit. To work on module branches without polluting `git status` or fighting over pins:
|
||||
|
||||
**1. Pick your branches** in a gitignored `dev.env` (copy the template):
|
||||
|
||||
```bash
|
||||
cp dev.env.example dev.env # then set REF=feat/my-thing (or per-module API_REF=…)
|
||||
```
|
||||
|
||||
**2. `make` follows it** — one knob, both run paths:
|
||||
|
||||
| Command | What it does |
|
||||
|---|---|
|
||||
| `make use` | check out your `dev.env` refs across all submodules |
|
||||
| `make dev` / `make watch` | run the Electron app with live reload against local source |
|
||||
| `make dev-web` | run the web SPA with live reload against local source |
|
||||
| `make server` + `make app` | (re)install the desktop server from the configured branch, then launch |
|
||||
| `make server-local` + `make app-local` | install the desktop server from **local uncommitted source**, then launch |
|
||||
| `make pack-local` | build the macOS `.app` from local uncommitted source (no push needed) |
|
||||
| `make refs` | show which refs the next run will use |
|
||||
| `make baseline` | reset submodules to the pinned commits |
|
||||
| `make pin` | record the current submodule commits as the superproject's pins (one deliberate commit) |
|
||||
|
||||
Submodules are configured with `ignore = all`, so your branch work never shows up as superproject changes — the parent `git status` stays clean. Pins move **only** via `make pin`. See [`CLAUDE.md`](CLAUDE.md) for the full workflow.
|
||||
|
||||
## Deploy anywhere
|
||||
|
||||
Cowork is built for flexible deployment — **cloud, VPC, on-prem, air-gapped, and hybrid** infrastructure — so you keep full control over your infrastructure, models, permissions, and data.
|
||||
|
||||
## Help & support
|
||||
|
||||
- **Ask a question** — join the [Discord community](https://mindshub.ai/discord).
|
||||
- **Report a bug** — open a [GitHub issue](https://github.com/mindsdb/minds/issues) with reproduction steps.
|
||||
- **Read the docs** — guides, setup, and the API at [docs.mindshub.ai](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
- **Enterprise SLAs or custom deployments** — [contact the team](https://mindshub.ai/contact?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
|
||||
## 🤝 Contribute
|
||||
|
||||
Cowork is open source and contributions are welcome — code, integrations, docs, bug reports, and feature ideas. Read the [docs](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) to get set up, browse [open issues](https://github.com/mindsdb/minds/issues), and say hi on [Discord](https://mindshub.ai/discord).
|
||||
|
||||
## 🔒 Security
|
||||
|
||||
Found a security vulnerability? Please **don't** open a public issue. Report it privately through our [security policy](https://github.com/mindsdb/minds/security).
|
||||
|
||||
## 📚 Resources
|
||||
|
||||
- [Documentation](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Blog](https://mindshub.ai/blog?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Brand guidelines & press kit](https://mindshub.ai/press-kit?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Discord community](https://mindshub.ai/discord)
|
||||
|
||||
## 📄 License
|
||||
|
||||
This repository is released under the [MIT License](LICENSE). Bundled components are governed by their own licenses — see each submodule's repository for details.
|
||||
|
||||
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
<a name="readme-top"></a>
|
||||
|
||||
<div align="center">
|
||||
|
||||
# MindsHub
|
||||
|
||||
**O espaço de trabalho unificado onde modelos de código aberto fazem as coisas por você.**
|
||||
|
||||
_Faça a IA realizar trabalho de verdade. Troque de modelo quando quiser — mantenha tudo o que você construiu._
|
||||
|
||||
[](https://github.com/mindsdb/minds/releases)
|
||||
[](https://github.com/mindsdb/minds/stargazers)
|
||||
[](#-licença)
|
||||
[](https://www.python.org/downloads/)
|
||||
|
||||
[Site](https://mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Documentação](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[App web](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Preços](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Discord](https://mindshub.ai/discord)
|
||||
|
||||
<p align="center">
|
||||
<sub>Outros idiomas: <a href="README.md">English</a> · <a href="README.zh.md">中文</a> · <a href="README.es.md">Español</a> · <a href="README.hi.md">हिन्दी</a></sub>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<img width="640" height="480" alt="cowork" src="https://github.com/user-attachments/assets/048761b8-aa77-4506-9c4d-32e2fdecbb60" />
|
||||
</p>
|
||||
|
||||
O **MindsHub Cowork** é o espaço de trabalho unificado onde você delega projetos inteiros —apps, sites, pesquisa, análise, relatórios, operações agendadas— e recebe resultados finalizados e prontos para compartilhar. Conecte seus dados, direcione o trabalho para qualquer modelo (aberto ou proprietário), execute agentes de código aberto e transforme a saída deles em aplicações web que você pode publicar. É open source e funciona em qualquer lugar —sua máquina, sua VPC, ou o app hospedado.
|
||||
|
||||
Este repositório é o **superprojeto da plataforma**: ele reúne o app de desktop/web, o backend do agente e o motor de dados para que você possa compilar e executar toda a stack a partir do código-fonte.
|
||||
|
||||
## Comece agora
|
||||
|
||||
Escolha o que fizer mais sentido:
|
||||
|
||||
- **Web — nada para instalar.** Abra **[console.mindshub.ai](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)** e faça login.
|
||||
- **macOS.** [Baixe o app de desktop](https://downloads.mindsdb.com/mindshub-cowork/mac/mindshub-cowork-latest.pkg) (`.pkg`).
|
||||
- **Windows.** [Baixe o app de desktop](https://downloads.mindsdb.com/mindshub-cowork/windows/mindshub-cowork-latest.exe) (`.exe`).
|
||||
- **Linux.** [Compile a partir do código-fonte](#compile-a-partir-do-código-fonte).
|
||||
|
||||
Grátis para começar. O plano Pro adiciona todos os modelos de ponta e artefatos privados — veja os [preços](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
|
||||
## O que você pode fazer
|
||||
|
||||
Para todo trabalhador do conhecimento —criadores, estrategistas e operadores:
|
||||
|
||||
- **Automatize** trabalho repetitivo e multietapas que envolve leitura e escrita: relatórios, monitoramento, fluxos recorrentes e operações agendadas.
|
||||
- **Construa** ferramentas e artefatos internos de IA —apps, dashboards, apresentações, documentos, análises— sem precisar de engenharia, e publique em uma URL ativa para compartilhar com sua equipe.
|
||||
|
||||
## O que tem por dentro
|
||||
|
||||
- **Dados conectados.** Um vault seguro conecta sistemas como BigQuery, Postgres, Gmail, Drive, HubSpot, Notion e Linear. As credenciais ficam restritas por conexão —os agentes nunca veem as chaves brutas.
|
||||
- **Model Router.** Alterne entre modelos de ponta (Claude, GPT, Gemini) e modelos abertos (DeepSeek, Qwen, Kimi) sem configurar uma chave para cada provedor.
|
||||
- **Agentes abertos.** Execute harnesses de código aberto intercambiáveis —Anton (padrão) e Hermes— selecionáveis em um menu.
|
||||
- **Artefatos.** Transforme a saída do agente em documentos, dashboards, apps e código, e publique em uma URL ativa.
|
||||
- **Memória, habilidades e agendamento.** Memória entre sessões, uma biblioteca de habilidades reutilizável e tarefas que rodam em horários programados.
|
||||
|
||||
## Compile a partir do código-fonte
|
||||
|
||||
**1. Clone o repositório**
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://github.com/mindsdb/minds.git
|
||||
cd minds
|
||||
```
|
||||
|
||||
**2. Instale as dependências**
|
||||
|
||||
```bash
|
||||
make setup
|
||||
```
|
||||
|
||||
**3. Execute**
|
||||
|
||||
| Modo | Comando |
|
||||
|---|---|
|
||||
| App de desktop (Electron) com hot reload | `make dev` ou `make watch` |
|
||||
| App web no navegador com hot reload | `make dev-web` |
|
||||
| Build de produção | `make build` |
|
||||
| Empacotar para macOS | `make dist-mac` |
|
||||
| Empacotar para Windows | `make dist-win` |
|
||||
| Compilar o `.app` do macOS a partir do código local não commitado | `make pack-local` |
|
||||
| Apagar todas as instalações e dados locais (começar do zero) | `make flush` |
|
||||
|
||||
> **Começar do zero:** `make flush` remove o runtime local (a ferramenta uv `cowork-server` e os `backend/*/.venv`) e apaga o estado do app em `~/.anton` (chaves de provedores) e `~/.cowork` (banco de dados, hermes, projetos). Use para testar o fluxo de instalação do zero ou recuperar uma instalação corrompida. Pede confirmação —passe `FORCE=1` para pular. O próximo `make setup` ou início do app reinstala tudo. ⚠️ Isso apaga suas conversas e chaves salvas.
|
||||
|
||||
### Trabalhando em branches de features (submódulos)
|
||||
|
||||
Este repositório é um superprojeto que fixa (pin) cada módulo (`frontend`, `backend/core_api`, `backend/core_agent`, `backend/data-vault`) em um commit. Para trabalhar em branches dos módulos sem poluir o `git status` ou disputar os pins:
|
||||
|
||||
**1. Escolha suas branches** em um `dev.env` (ignorado pelo git, copie do modelo):
|
||||
|
||||
```bash
|
||||
cp dev.env.example dev.env # depois defina REF=feat/minha-coisa (ou por módulo API_REF=…)
|
||||
```
|
||||
|
||||
**2. O `make` segue essa configuração** —um único controle, para os dois modos de execução:
|
||||
|
||||
| Comando | O que faz |
|
||||
|---|---|
|
||||
| `make use` | faz checkout das branches do `dev.env` em todos os submódulos |
|
||||
| `make dev` / `make watch` | executa o app Electron com hot reload a partir do código local |
|
||||
| `make dev-web` | executa a SPA web com hot reload a partir do código local |
|
||||
| `make server` + `make app` | (re)instala o servidor de desktop a partir da branch configurada e inicia |
|
||||
| `make server-local` + `make app-local` | instala o servidor de desktop a partir do **código local não commitado** e inicia |
|
||||
| `make pack-local` | compila o `.app` do macOS a partir do código local não commitado (sem precisar de push) |
|
||||
| `make refs` | mostra quais referências a próxima execução vai usar |
|
||||
| `make baseline` | reseta os submódulos para os commits fixados |
|
||||
| `make pin` | registra os commits atuais dos submódulos como os pins do superprojeto (um commit deliberado) |
|
||||
|
||||
Os submódulos são configurados com `ignore = all`, então seu trabalho em branches nunca aparece como alterações do superprojeto —o `git status` do repositório pai permanece limpo. Os pins só mudam via `make pin`. Veja o fluxo completo em [`CLAUDE.md`](CLAUDE.md).
|
||||
|
||||
## Implante em qualquer lugar
|
||||
|
||||
O Cowork é feito para implantação flexível —infraestrutura em **nuvem, VPC, on-premises, air-gapped e híbrida**— para que você mantenha controle total sobre sua infraestrutura, modelos, permissões e dados.
|
||||
|
||||
## Ajuda e suporte
|
||||
|
||||
- **Faça uma pergunta** — entre na [comunidade do Discord](https://mindshub.ai/discord).
|
||||
- **Reporte um bug** — abra uma [issue no GitHub](https://github.com/mindsdb/minds/issues) com os passos para reproduzir.
|
||||
- **Leia a documentação** — guias, configuração e a API em [docs.mindshub.ai](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
- **SLAs empresariais ou implantações personalizadas** — [entre em contato com o time](https://mindshub.ai/contact?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme).
|
||||
|
||||
## 🤝 Contribua
|
||||
|
||||
O Cowork é open source e contribuições são bem-vindas —código, integrações, documentação, relatos de bugs e ideias de funcionalidades. Leia a [documentação](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) para se preparar, veja as [issues abertas](https://github.com/mindsdb/minds/issues) e dê um alô no [Discord](https://mindshub.ai/discord).
|
||||
|
||||
## 🔒 Segurança
|
||||
|
||||
Encontrou uma vulnerabilidade de segurança? Por favor, **não** abra uma issue pública. Reporte de forma privada através da nossa [política de segurança](https://github.com/mindsdb/minds/security).
|
||||
|
||||
## 📚 Recursos
|
||||
|
||||
- [Documentação](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Blog](https://mindshub.ai/blog?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Diretrizes de marca e press kit](https://mindshub.ai/press-kit?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Comunidade do Discord](https://mindshub.ai/discord)
|
||||
|
||||
## 📄 Licença
|
||||
|
||||
Este repositório é distribuído sob a [Licença MIT](LICENSE). Os componentes empacotados são regidos por suas próprias licenças —consulte o repositório de cada submódulo para mais detalhes.
|
||||
|
||||
<p align="right">(<a href="#readme-top">voltar ao topo</a>)</p>
|
||||
@@ -0,0 +1,7 @@
|
||||
# WeHub 来源说明
|
||||
|
||||
- 原始项目:`mindsdb/minds`
|
||||
- 原始仓库:https://github.com/mindsdb/minds
|
||||
- 导入方式:上游默认分支的最新快照
|
||||
- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准
|
||||
- 本文件仅用于记录来源,不代表 WeHub 是原项目作者
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
<a name="readme-top"></a>
|
||||
|
||||
<div align="center">
|
||||
|
||||
# MindsHub
|
||||
|
||||
**开源模型为你完成任务的统一工作空间。**
|
||||
|
||||
_让 AI 真正干活。随时切换模型——你搭建的一切都保留下来。_
|
||||
|
||||
[](https://github.com/mindsdb/minds/releases)
|
||||
[](https://github.com/mindsdb/minds/stargazers)
|
||||
[](#-许可证)
|
||||
[](https://www.python.org/downloads/)
|
||||
|
||||
[官网](https://mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[文档](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[网页应用](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[定价](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme) ·
|
||||
[Discord](https://mindshub.ai/discord)
|
||||
|
||||
<p align="center">
|
||||
<sub>其他语言: <a href="README.md">English</a> · <a href="README.es.md">Español</a> · <a href="README.pt.md">Português</a> · <a href="README.hi.md">हिन्दी</a></sub>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<img width="640" height="480" alt="cowork" src="https://github.com/user-attachments/assets/048761b8-aa77-4506-9c4d-32e2fdecbb60" />
|
||||
</p>
|
||||
|
||||
**MindsHub Cowork** 是一个统一工作空间,你可以在这里委托完整的项目——应用、网站、调研、分析、报告、定时运维——并获得可直接分享的成品结果。连接你的数据,将工作路由到任意模型(开源或商用),运行开源智能体,并将其产出转化为可发布的网页应用。它是开源的,可以运行在任何地方——你的电脑、你的 VPC,或托管应用中。
|
||||
|
||||
本仓库是**平台超级项目(superproject)**:它整合了桌面/网页应用、智能体后端和数据引擎,让你可以从源码构建并运行整套技术栈。
|
||||
|
||||
## 快速开始
|
||||
|
||||
选择最适合你的方式:
|
||||
|
||||
- **网页版 —— 无需安装。** 打开 **[console.mindshub.ai](https://console.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)** 并登录。
|
||||
- **macOS。** [下载桌面应用](https://downloads.mindsdb.com/mindshub-cowork/mac/mindshub-cowork-latest.pkg)(`.pkg`)。
|
||||
- **Windows。** [下载桌面应用](https://downloads.mindsdb.com/mindshub-cowork/windows/mindshub-cowork-latest.exe)(`.exe`)。
|
||||
- **Linux。** [从源码构建](#从源码构建)。
|
||||
|
||||
免费即可开始使用。Pro 版本解锁全部前沿模型与私有成果物——详见[定价](https://mindshub.ai/pricing?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)。
|
||||
|
||||
## 你能做什么
|
||||
|
||||
面向每一位知识工作者——创作者、策略制定者与运营者:
|
||||
|
||||
- **自动化**涉及读写的重复性多步骤工作:报告、监控、周期性工作流以及定时运维任务。
|
||||
- **构建**内部 AI 工具与成果物——应用、仪表盘、演示文稿、文档、分析报告——无需工程开发,并发布到可分享给团队的在线链接。
|
||||
|
||||
## 内含功能
|
||||
|
||||
- **数据连接。** 安全的密钥库(vault)可连接 BigQuery、Postgres、Gmail、Drive、HubSpot、Notion、Linear 等系统。凭证按连接单独限定范围——智能体永远看不到原始密钥。
|
||||
- **模型路由(Model Router)。** 在前沿模型(Claude、GPT、Gemini)与开源模型(DeepSeek、Qwen、Kimi)之间自由切换,无需为每个提供方单独配置密钥。
|
||||
- **开源智能体。** 运行可互换的开源执行引擎(harness)——Anton(默认)与 Hermes——通过下拉菜单即可切换。
|
||||
- **成果物(Artifacts)。** 将智能体的产出转化为文档、仪表盘、应用与代码,并发布到在线链接。
|
||||
- **记忆、技能与定时任务。** 跨会话记忆、可复用的技能库,以及按计划运行的任务。
|
||||
|
||||
## 从源码构建
|
||||
|
||||
**1. 克隆仓库**
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://github.com/mindsdb/minds.git
|
||||
cd minds
|
||||
```
|
||||
|
||||
**2. 安装依赖**
|
||||
|
||||
```bash
|
||||
make setup
|
||||
```
|
||||
|
||||
**3. 运行**
|
||||
|
||||
| 模式 | 命令 |
|
||||
|---|---|
|
||||
| 桌面应用(Electron),支持热重载 | `make dev` 或 `make watch` |
|
||||
| 浏览器网页应用,支持热重载 | `make dev-web` |
|
||||
| 生产构建 | `make build` |
|
||||
| 打包 macOS 版本 | `make dist-mac` |
|
||||
| 打包 Windows 版本 | `make dist-win` |
|
||||
| 从本地未提交的源码构建 macOS `.app` | `make pack-local` |
|
||||
| 清除所有本地安装与数据(从零开始) | `make flush` |
|
||||
|
||||
> **从零开始:** `make flush` 会移除本地运行环境(`cowork-server` uv 工具及 `backend/*/.venv`),并删除 `~/.anton`(提供方密钥)与 `~/.cowork`(数据库、hermes、项目)中的应用状态。用它来测试从零安装流程,或从损坏的安装中恢复。执行前会要求确认——传入 `FORCE=1` 可跳过确认。之后运行 `make setup` 或启动应用即可重新安装全部内容。⚠️ 此操作会删除你的对话记录和已保存的密钥。
|
||||
|
||||
### 在功能分支上开发(子模块)
|
||||
|
||||
本仓库是一个超级项目,将每个模块(`frontend`、`backend/core_api`、`backend/core_agent`、`backend/data-vault`)固定(pin)到某个提交。要在模块分支上开发而不污染 `git status` 或与固定版本产生冲突:
|
||||
|
||||
**1. 在(已加入 `.gitignore` 的)`dev.env` 中选择你的分支**(从模板复制):
|
||||
|
||||
```bash
|
||||
cp dev.env.example dev.env # 然后设置 REF=feat/my-thing(或按模块设置 API_REF=…)
|
||||
```
|
||||
|
||||
**2. `make` 会自动读取该配置** —— 一个开关,适用于两种运行方式:
|
||||
|
||||
| 命令 | 作用 |
|
||||
|---|---|
|
||||
| `make use` | 按 `dev.env` 中的配置检出所有子模块的分支 |
|
||||
| `make dev` / `make watch` | 以本地源码热重载方式运行 Electron 应用 |
|
||||
| `make dev-web` | 以本地源码热重载方式运行网页版 SPA |
|
||||
| `make server` + `make app` | 从配置的分支(重新)安装桌面服务端,然后启动 |
|
||||
| `make server-local` + `make app-local` | 从**本地未提交的源码**安装桌面服务端,然后启动 |
|
||||
| `make pack-local` | 从本地未提交的源码构建 macOS `.app`(无需推送) |
|
||||
| `make refs` | 显示下一次运行将使用的分支引用 |
|
||||
| `make baseline` | 将子模块重置为固定的提交版本 |
|
||||
| `make pin` | 将当前子模块提交记录为超级项目的固定版本(一次明确的提交) |
|
||||
|
||||
子模块配置了 `ignore = all`,因此你在分支上的工作永远不会显示为超级项目的更改——父仓库的 `git status` 始终保持干净。固定版本**只能**通过 `make pin` 变更。完整流程见 [`CLAUDE.md`](CLAUDE.md)。
|
||||
|
||||
## 随处部署
|
||||
|
||||
Cowork 的设计支持灵活部署——**云端、VPC、本地部署、离线隔离环境以及混合基础设施**——让你完全掌控自己的基础设施、模型、权限与数据。
|
||||
|
||||
## 帮助与支持
|
||||
|
||||
- **提出问题** —— 加入 [Discord 社区](https://mindshub.ai/discord)。
|
||||
- **报告 Bug** —— 提交 [GitHub issue](https://github.com/mindsdb/minds/issues),并附上复现步骤。
|
||||
- **查阅文档** —— 使用指南、部署说明与 API,见 [docs.mindshub.ai](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)。
|
||||
- **企业级 SLA 或定制化部署** —— [联系我们](https://mindshub.ai/contact?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)。
|
||||
|
||||
## 🤝 参与贡献
|
||||
|
||||
Cowork 是开源项目,欢迎任何形式的贡献——代码、集成、文档、Bug 报告与功能建议。阅读[文档](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)完成环境搭建,浏览[已有 issue](https://github.com/mindsdb/minds/issues),也欢迎到 [Discord](https://mindshub.ai/discord) 打个招呼。
|
||||
|
||||
## 🔒 安全
|
||||
|
||||
发现安全漏洞?请**不要**创建公开 issue。请通过我们的[安全策略](https://github.com/mindsdb/minds/security)私下提交报告。
|
||||
|
||||
## 📚 资源
|
||||
|
||||
- [文档](https://docs.mindshub.ai/?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [博客](https://mindshub.ai/blog?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [品牌指南与媒体资料包](https://mindshub.ai/press-kit?utm_source=github&utm_medium=repo-readme&utm_campaign=minds-readme)
|
||||
- [Discord 社区](https://mindshub.ai/discord)
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
本仓库基于 [MIT 许可证](LICENSE) 发布。所捆绑的组件遵循各自的许可证——详情请参阅各子模块仓库。
|
||||
|
||||
<p align="right">(<a href="#readme-top">返回顶部</a>)</p>
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
# MindsDB Security Policy
|
||||
|
||||
At MindsDB, we consider the security of our systems a top priority. However, no matter how much effort we put into system security, there can still be vulnerabilities present.
|
||||
Supported Versions
|
||||
|
||||
MindsDB only offers security patches for the following versions
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| >=23.6.1.1 | :white_check_mark: |
|
||||
|
||||
### Reporting a Vulnerability
|
||||
|
||||
If you discover a security vulnerability, we appreciate your efforts to responsibly disclose your findings by sending an email to hello@mindsdb.com, providing as much detail as you can. Please do not publicly disclose these details without express consent from us.
|
||||
|
||||
Upon receiving your email, our security team will assess and respond to your report. We strive to keep all communication channels open with you to address your report effectively.
|
||||
Disclosure Policy
|
||||
|
||||
Once we have received and evaluated your vulnerability report, MindsDB commits to:
|
||||
|
||||
* Confirm the receipt of your report
|
||||
* Assess the vulnerability report to confirm its validity
|
||||
* Work on a fix and update the impacted versions
|
||||
* Publicly disclose the vulnerability after it has been addressed, giving credit to the reporter if they wish
|
||||
|
||||
### Comments on this Policy
|
||||
|
||||
If you have any suggestions to improve this policy, please let us know. We are committed to ensuring that our policy works effectively for everyone involved.
|
||||
|
||||
Thank you for helping to make MindsDB safer for everyone.
|
||||
@@ -0,0 +1,93 @@
|
||||
# MindsDB, Inc. Contributor License Agreement
|
||||
|
||||
By Submitting a Contribution to a Project, you hereby accept and agree to the following terms and
|
||||
conditions (this “Agreement”) for your prior, present and future Contributions submitted to MindsDB, Inc.
|
||||
(“Company”). Except for the licenses granted herein to Company, you reserve all right, title, and interest
|
||||
in and to your Contributions.
|
||||
|
||||
1. Definitions
|
||||
|
||||
1.1. “Submit” or “Submitting” is the act of uploading, submitting, transmitting, or distributing code or
|
||||
other content to any Project, including but not limited to communication on electronic mailing
|
||||
lists, source code control systems, and issue tracking systems that are managed by, or on behalf
|
||||
of, the Project for the purpose of discussing and improving that Project.
|
||||
|
||||
1.2. “Contribution” shall mean the code, documentation, or other original works of authorship,
|
||||
including any modifications or additions to an existing work, that is Submitted by you to
|
||||
Company for inclusion in, or documentation of, any of the works, products or projects owned or
|
||||
managed by Company (each a “Project”).
|
||||
2. Your Employer. References to “employer” in this Agreement include your employer or anyone else
|
||||
for whom you are acting in making or Submitting your Contribution, e.g. as a contractor, vendor, or
|
||||
agent, and any other entity that controls, is controlled by, or is under common control with that entity.
|
||||
For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty
|
||||
percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. If your
|
||||
Contribution is made in the course of your work for an employer or your employer has
|
||||
intellectual property rights in your Contribution by contract or applicable law, you must
|
||||
secure permission from your employer to make the Contribution before Submitting the
|
||||
Contribution. In that case, the term “you” in this Agreement will refer to you and the employer
|
||||
collectively. If you change employers in the future and desire to Submit additional Contributions for
|
||||
the new employer, then you agree to secure permission from the new employer before Submitting
|
||||
those Contributions.
|
||||
3. Originality of Work. You represent and warrant that each of your Contributions is entirely your
|
||||
original work, and that the Contribution, whether alone or in combination with the Project, will infringe
|
||||
upon or misappropriate the intellectual property or other rights of any third party. Should you wish to
|
||||
Submit materials that are not your original work, you may Submit them separately to the Project if you
|
||||
(i) retain all copyright and license information that was in the materials as you received them, (ii) in
|
||||
the description accompanying your Contribution, include the phrase “Contribution containing
|
||||
materials of a third party:” followed by the names of the third party and any licenses or other
|
||||
restrictions of which you are aware, and (iii) follow any other instructions in the Project’s written
|
||||
guidelines concerning Contributions.
|
||||
4. Licenses
|
||||
|
||||
4.1. Copyright License. You grant Company, and those who receive the Contribution directly or
|
||||
indirectly from Company, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license
|
||||
in the Contribution to reproduce, prepare derivative works of, publicly display, publicly perform,
|
||||
and distribute the Contribution and such derivative works, and to sublicense any or all of the
|
||||
foregoing rights to third parties.
|
||||
|
||||
4.2. Patent License. You grant Company, and those who receive the Contribution directly or indirectly
|
||||
from Company, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license under
|
||||
your patent claims that are necessarily infringed by the Contribution or the combination of the
|
||||
Contribution with the Project to which it was Submitted to make, have made, use, offer to sell,
|
||||
sell and import or otherwise dispose of the Contribution alone or with the Project.
|
||||
|
||||
4.3. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement.
|
||||
No additional licenses or rights whatsoever (including, without limitation, any implied licenses)
|
||||
are granted by implication, exhaustion, estoppel or otherwise.
|
||||
|
||||
5. Prior Contributions. You agree that if you submitted a Contribution to a Project prior to the Effective
|
||||
Date (each a “Prior Contribution”), then, regardless of whether you had an agreement in place with
|
||||
Company governing such Prior Contributions, such Prior Contributions are deemed “Contributions”
|
||||
hereunder and are hereby licensed to Company pursuant to Section 4 as of the date you Submitted
|
||||
the Prior Contribution.
|
||||
6. Representations and Warranties. You represent and warrant that you are legally entitled to grant
|
||||
the above licenses. You represent and warrant that each of your Contributions is entirely your original
|
||||
work (except as you may have disclosed in accordance with Section 3 ). You represent and warrant
|
||||
that you have secured permission from your employer to make the Contribution in cases where your
|
||||
Contribution is made in the course of your work for your employer or your employer has intellectual
|
||||
property rights in your Contribution (or any portion thereof) by contract or applicable law. If you are
|
||||
agreeing to this Agreement on behalf of your employer, you represent and warrant that you have the
|
||||
necessary authority to bind the listed employer to the obligations contained in this Agreement. You
|
||||
are not expected to provide support for your Contribution unless you choose to do so. UNLESS
|
||||
REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, AND EXCEPT FOR THE
|
||||
WARRANTIES EXPRESSLY STATED IN SECTIONS 3 AND 6 , THE CONTRIBUTION PROVIDED
|
||||
UNDER THIS AGREEMENT IS PROVIDED WITHOUT WARRANTY OF ANY KIND, INCLUDING,
|
||||
BUT NOT LIMITED TO, ANY WARRANTY OF MERCHANTABILITY, OR FITNESS FOR A
|
||||
PARTICULAR PURPOSE.
|
||||
7. Notice to Company. You agree to notify Company in writing of any facts or circumstances of which
|
||||
you later become aware that would make your representations or warranties in this Agreement
|
||||
inaccurate in any respect. You may contact Company at [EMAIL].
|
||||
8. Information about Contributions. You agree that Contributions to Projects and information about
|
||||
Contributions may be maintained indefinitely and disclosed publicly, including your name and other
|
||||
information that you submit with your Contribution.
|
||||
9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of California, and
|
||||
the parties consent to exclusive jurisdiction and venue in the federal courts sitting in the City and
|
||||
County of San Francisco. The parties waive all defenses of lack of personal jurisdiction and forum
|
||||
non-conveniens.
|
||||
10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and
|
||||
supersedes any and all prior agreements, understandings or communications, written or oral,
|
||||
between the parties relating to the subject matter hereof, including any of the foregoing as applicable
|
||||
to Prior Contributions. This Agreement may be freely assigned by Company, without notice to you.
|
||||
The parties accept and agree to be bound by the terms of this Agreement as of the date of the last
|
||||
signature below (the “Effective Date”).
|
||||
@@ -0,0 +1,93 @@
|
||||
# MindsDB, Inc. Contributor License Agreement
|
||||
|
||||
By Submitting a Contribution to a Project, you hereby accept and agree to the following terms and
|
||||
conditions (this “Agreement”) for your prior, present and future Contributions submitted to MindsDB, Inc.
|
||||
(“Company”). Except for the licenses granted herein to Company, you reserve all right, title, and interest
|
||||
in and to your Contributions.
|
||||
|
||||
1. Definitions
|
||||
|
||||
1.1. “Submit” or “Submitting” is the act of uploading, submitting, transmitting, or distributing code or
|
||||
other content to any Project, including but not limited to communication on electronic mailing
|
||||
lists, source code control systems, and issue tracking systems that are managed by, or on behalf
|
||||
of, the Project for the purpose of discussing and improving that Project.
|
||||
|
||||
1.2. “Contribution” shall mean the code, documentation, or other original works of authorship,
|
||||
including any modifications or additions to an existing work, that is Submitted by you to
|
||||
Company for inclusion in, or documentation of, any of the works, products or projects owned or
|
||||
managed by Company (each a “Project”).
|
||||
2. Your Employer. References to “employer” in this Agreement include your employer or anyone else
|
||||
for whom you are acting in making or Submitting your Contribution, e.g. as a contractor, vendor, or
|
||||
agent, and any other entity that controls, is controlled by, or is under common control with that entity.
|
||||
For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty
|
||||
percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. If your
|
||||
Contribution is made in the course of your work for an employer or your employer has
|
||||
intellectual property rights in your Contribution by contract or applicable law, you must
|
||||
secure permission from your employer to make the Contribution before Submitting the
|
||||
Contribution. In that case, the term “you” in this Agreement will refer to you and the employer
|
||||
collectively. If you change employers in the future and desire to Submit additional Contributions for
|
||||
the new employer, then you agree to secure permission from the new employer before Submitting
|
||||
those Contributions.
|
||||
3. Originality of Work. You represent and warrant that each of your Contributions is entirely your
|
||||
original work, and that the Contribution, whether alone or in combination with the Project, will infringe
|
||||
upon or misappropriate the intellectual property or other rights of any third party. Should you wish to
|
||||
Submit materials that are not your original work, you may Submit them separately to the Project if you
|
||||
(i) retain all copyright and license information that was in the materials as you received them, (ii) in
|
||||
the description accompanying your Contribution, include the phrase “Contribution containing
|
||||
materials of a third party:” followed by the names of the third party and any licenses or other
|
||||
restrictions of which you are aware, and (iii) follow any other instructions in the Project’s written
|
||||
guidelines concerning Contributions.
|
||||
4. Licenses
|
||||
|
||||
4.1. Copyright License. You grant Company, and those who receive the Contribution directly or
|
||||
indirectly from Company, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license
|
||||
in the Contribution to reproduce, prepare derivative works of, publicly display, publicly perform,
|
||||
and distribute the Contribution and such derivative works, and to sublicense any or all of the
|
||||
foregoing rights to third parties.
|
||||
|
||||
4.2. Patent License. You grant Company, and those who receive the Contribution directly or indirectly
|
||||
from Company, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license under
|
||||
your patent claims that are necessarily infringed by the Contribution or the combination of the
|
||||
Contribution with the Project to which it was Submitted to make, have made, use, offer to sell,
|
||||
sell and import or otherwise dispose of the Contribution alone or with the Project.
|
||||
|
||||
4.3. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement.
|
||||
No additional licenses or rights whatsoever (including, without limitation, any implied licenses)
|
||||
are granted by implication, exhaustion, estoppel or otherwise.
|
||||
|
||||
5. Prior Contributions. You agree that if you submitted a Contribution to a Project prior to the Effective
|
||||
Date (each a “Prior Contribution”), then, regardless of whether you had an agreement in place with
|
||||
Company governing such Prior Contributions, such Prior Contributions are deemed “Contributions”
|
||||
hereunder and are hereby licensed to Company pursuant to Section 4 as of the date you Submitted
|
||||
the Prior Contribution.
|
||||
6. Representations and Warranties. You represent and warrant that you are legally entitled to grant
|
||||
the above licenses. You represent and warrant that each of your Contributions is entirely your original
|
||||
work (except as you may have disclosed in accordance with Section 3 ). You represent and warrant
|
||||
that you have secured permission from your employer to make the Contribution in cases where your
|
||||
Contribution is made in the course of your work for your employer or your employer has intellectual
|
||||
property rights in your Contribution (or any portion thereof) by contract or applicable law. If you are
|
||||
agreeing to this Agreement on behalf of your employer, you represent and warrant that you have the
|
||||
necessary authority to bind the listed employer to the obligations contained in this Agreement. You
|
||||
are not expected to provide support for your Contribution unless you choose to do so. UNLESS
|
||||
REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, AND EXCEPT FOR THE
|
||||
WARRANTIES EXPRESSLY STATED IN SECTIONS 3 AND 6 , THE CONTRIBUTION PROVIDED
|
||||
UNDER THIS AGREEMENT IS PROVIDED WITHOUT WARRANTY OF ANY KIND, INCLUDING,
|
||||
BUT NOT LIMITED TO, ANY WARRANTY OF MERCHANTABILITY, OR FITNESS FOR A
|
||||
PARTICULAR PURPOSE.
|
||||
7. Notice to Company. You agree to notify Company in writing of any facts or circumstances of which
|
||||
you later become aware that would make your representations or warranties in this Agreement
|
||||
inaccurate in any respect. You may contact Company at [EMAIL].
|
||||
8. Information about Contributions. You agree that Contributions to Projects and information about
|
||||
Contributions may be maintained indefinitely and disclosed publicly, including your name and other
|
||||
information that you submit with your Contribution.
|
||||
9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of California, and
|
||||
the parties consent to exclusive jurisdiction and venue in the federal courts sitting in the City and
|
||||
County of San Francisco. The parties waive all defenses of lack of personal jurisdiction and forum
|
||||
non-conveniens.
|
||||
10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and
|
||||
supersedes any and all prior agreements, understandings or communications, written or oral,
|
||||
between the parties relating to the subject matter hereof, including any of the foregoing as applicable
|
||||
to Prior Contributions. This Agreement may be freely assigned by Company, without notice to you.
|
||||
The parties accept and agree to be bound by the terms of this Agreement as of the date of the last
|
||||
signature below (the “Effective Date”).
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,20 @@
|
||||
# Per-developer module-branch selection. Copy to `dev.env` (gitignored) and
|
||||
# set the branch(es) you're working on. `make use` checks them out; `make dev`
|
||||
# / `make dev-web` (local source) follow them, and `make server` / `make app`
|
||||
# install the matching Electron desktop server.
|
||||
#
|
||||
# cp dev.env.example dev.env
|
||||
# # edit, then:
|
||||
# make use && make dev # local-source dev on your branches
|
||||
# # or for the desktop app on your branch's server:
|
||||
# make server && make app
|
||||
#
|
||||
# Leave unset to track `main`.
|
||||
|
||||
# All modules on one branch:
|
||||
# REF=feat/my-thing
|
||||
|
||||
# …or override per module (these win over REF):
|
||||
# FRONTEND_REF=feat/ui-thing
|
||||
# API_REF=feat/server-thing
|
||||
# AGENT_REF=feat/agent-thing
|
||||
@@ -0,0 +1,37 @@
|
||||
services:
|
||||
api:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/api.Dockerfile
|
||||
environment:
|
||||
COWORK_SERVER_HOST: "0.0.0.0"
|
||||
COWORK_SERVER_PORT: "26866"
|
||||
DATABASE_URI: "sqlite:////home/cowork/.cowork/cowork.db"
|
||||
# ANTON_ANTHROPIC_API_KEY: "sk-ant-..."
|
||||
volumes:
|
||||
- cowork-data:/home/cowork/.cowork
|
||||
ports:
|
||||
- "26866:26866"
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "python", "-c",
|
||||
"import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:26866/health',timeout=3).status==200 else 1)"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
start_period: 20s
|
||||
retries: 3
|
||||
|
||||
web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/web.Dockerfile
|
||||
ports:
|
||||
- "3000:80"
|
||||
depends_on:
|
||||
api:
|
||||
condition: service_healthy
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
cowork-data:
|
||||
driver: local
|
||||
@@ -0,0 +1,38 @@
|
||||
FROM python:3.12-slim AS builder
|
||||
|
||||
RUN pip install uv --no-cache-dir
|
||||
|
||||
WORKDIR /src
|
||||
COPY backend/core_agent/ ./core_agent/
|
||||
COPY backend/core_api/ ./core_api/
|
||||
|
||||
RUN python -m venv /opt/venv && \
|
||||
/opt/venv/bin/pip install uv --no-cache-dir && \
|
||||
/opt/venv/bin/uv pip install ./core_agent ./core_api
|
||||
|
||||
FROM python:3.12-slim AS runtime
|
||||
|
||||
LABEL org.opencontainers.image.title="cowork-api"
|
||||
LABEL org.opencontainers.image.source="https://github.com/mindsdb/minds-platform"
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& useradd -m -u 1000 -s /bin/bash cowork
|
||||
|
||||
COPY --from=builder /opt/venv /opt/venv
|
||||
ENV PATH="/opt/venv/bin:$PATH" \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
COWORK_SERVER_HOST=0.0.0.0 \
|
||||
COWORK_SERVER_PORT=26866
|
||||
|
||||
RUN mkdir -p /home/cowork/.cowork && chown cowork:cowork /home/cowork/.cowork
|
||||
|
||||
USER cowork
|
||||
|
||||
EXPOSE 26866
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
||||
CMD python -c "import urllib.request,sys; \
|
||||
sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:26866/health',timeout=3).status==200 else 1)"
|
||||
|
||||
CMD ["cowork-server"]
|
||||
@@ -0,0 +1,18 @@
|
||||
server {
|
||||
listen 80;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
location /v1/ {
|
||||
proxy_pass http://api:26866;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_read_timeout 120s;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
FROM node:22-slim AS builder
|
||||
|
||||
WORKDIR /build
|
||||
COPY frontend/package.json frontend/package-lock.json ./
|
||||
RUN npm ci --ignore-scripts
|
||||
COPY frontend/ ./
|
||||
RUN npm run build:web
|
||||
|
||||
FROM nginx:alpine AS runtime
|
||||
|
||||
LABEL org.opencontainers.image.title="cowork-web"
|
||||
LABEL org.opencontainers.image.source="https://github.com/mindsdb/minds-platform"
|
||||
|
||||
COPY --from=builder /build/dist/renderer-web/ /usr/share/nginx/html/
|
||||
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
EXPOSE 80
|
||||
+1488
File diff suppressed because it is too large
Load Diff
+1326
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 1011 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
+397
@@ -0,0 +1,397 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Minds Cowork — Docs</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<meta name="description" content="Documentation for Minds Cowork — an open-source AI platform for knowledge workers. Automate recurring tasks, create apps and artifacts, and deploy anywhere." />
|
||||
<meta name="keywords" content="Minds Cowork, AI platform, AI automation, knowledge workers, open source AI, workflow automation, documentation" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="author" content="Minds Platform" />
|
||||
<meta property="og:title" content="Minds Cowork — Docs" />
|
||||
<meta property="og:description" content="Documentation for Minds Cowork — an open-source AI platform for knowledge workers. Automate recurring tasks, create apps and artifacts, and deploy anywhere." />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="Minds Cowork" />
|
||||
<meta property="og:image" content="favicon.png" />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:site" content="@MindsDB" />
|
||||
<meta name="twitter:title" content="Minds Cowork — Docs" />
|
||||
<meta name="twitter:description" content="Documentation for Minds Cowork — an open-source AI platform for knowledge workers. Automate recurring tasks, create apps and artifacts, and deploy anywhere." />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&family=Josefin+Sans:wght@300;400;700&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #080d18;
|
||||
--surface: #0E1626;
|
||||
--surface-2: #131D31;
|
||||
--surface-3: #1A2640;
|
||||
--line: #1E2A44;
|
||||
--line-2: #2A3957;
|
||||
--ink: #F2F6FF;
|
||||
--ink-2: #C7D2E5;
|
||||
--ink-3: #8A97AE;
|
||||
--ink-4: #5C6B85;
|
||||
--accent: #22D3EE;
|
||||
--accent-bg: rgba(34,211,238,0.10);
|
||||
--accent-glow: rgba(34,211,238,0.45);
|
||||
--r: 6px;
|
||||
--r-lg: 10px;
|
||||
--r-xl: 16px;
|
||||
--font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
|
||||
--font-display: 'Josefin Sans', 'Inter', sans-serif;
|
||||
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
||||
}
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
html { color-scheme: dark; }
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--ink-2);
|
||||
font-family: var(--font-sans);
|
||||
font-size: 15px;
|
||||
line-height: 1.6;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
a { color: var(--accent); text-decoration: none; }
|
||||
a:hover { opacity: 0.8; }
|
||||
|
||||
/* ── Nav ── */
|
||||
nav {
|
||||
position: sticky; top: 0; z-index: 40;
|
||||
background: rgba(8,13,24,0.80);
|
||||
backdrop-filter: saturate(160%) blur(16px);
|
||||
-webkit-backdrop-filter: saturate(160%) blur(16px);
|
||||
border-bottom: 1px solid var(--line);
|
||||
}
|
||||
.nav-inner {
|
||||
max-width: 1100px; margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
height: 52px;
|
||||
display: flex; align-items: center; gap: 32px;
|
||||
}
|
||||
.brand {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 11px; font-weight: 600;
|
||||
letter-spacing: 0.18em; text-transform: uppercase;
|
||||
color: var(--ink-3);
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
}
|
||||
.brand-dot {
|
||||
width: 6px; height: 6px; border-radius: 50%;
|
||||
background: var(--accent);
|
||||
box-shadow: 0 0 8px var(--accent-glow);
|
||||
}
|
||||
.nav-links { display: flex; gap: 24px; margin-left: auto; }
|
||||
/* ── Mobile nav ── */
|
||||
.hamburger {
|
||||
display: none;
|
||||
flex-direction: column; justify-content: center; gap: 5px;
|
||||
width: 36px; height: 36px;
|
||||
background: none; border: none; cursor: pointer;
|
||||
padding: 4px; margin-left: auto; flex-shrink: 0;
|
||||
}
|
||||
.hamburger span {
|
||||
display: block; width: 20px; height: 1.5px;
|
||||
background: var(--ink-3); border-radius: 2px;
|
||||
transition: transform 200ms, opacity 200ms, width 200ms;
|
||||
transform-origin: center;
|
||||
}
|
||||
nav[data-open] .hamburger span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
|
||||
nav[data-open] .hamburger span:nth-child(2) { opacity: 0; width: 0; }
|
||||
nav[data-open] .hamburger span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }
|
||||
@media (max-width: 640px) {
|
||||
.hamburger { display: flex; }
|
||||
.nav-links {
|
||||
display: none;
|
||||
position: absolute; top: 52px; left: 0; right: 0;
|
||||
flex-direction: column; gap: 0;
|
||||
background: rgba(8,13,24,0.97);
|
||||
backdrop-filter: saturate(160%) blur(16px);
|
||||
-webkit-backdrop-filter: saturate(160%) blur(16px);
|
||||
border-bottom: 1px solid var(--line);
|
||||
padding: 8px 0;
|
||||
z-index: 39;
|
||||
}
|
||||
nav[data-open] .nav-links { display: flex; }
|
||||
.nav-links a {
|
||||
padding: 12px 24px;
|
||||
font-size: 14px;
|
||||
border-left: 2px solid transparent;
|
||||
}
|
||||
.nav-links a.active { border-color: var(--accent); background: var(--accent-bg); }
|
||||
}
|
||||
|
||||
.nav-links a {
|
||||
font-size: 13px; color: var(--ink-3);
|
||||
transition: color 120ms;
|
||||
}
|
||||
.nav-links a:hover { color: var(--ink); opacity: 1; }
|
||||
.nav-links a.active { color: var(--accent); }
|
||||
|
||||
/* ── Hero ── */
|
||||
.hero-wrap {
|
||||
max-width: 1100px; margin: 0 auto;
|
||||
padding: 88px 24px 64px;
|
||||
}
|
||||
.eyebrow {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 11px; font-weight: 600;
|
||||
letter-spacing: 0.18em; text-transform: uppercase;
|
||||
color: var(--accent); margin-bottom: 16px;
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
}
|
||||
.eyebrow::before {
|
||||
content: '';
|
||||
display: block; width: 24px; height: 1px;
|
||||
background: var(--accent);
|
||||
}
|
||||
h1 {
|
||||
font-family: var(--font-display);
|
||||
font-size: clamp(36px, 5vw, 58px);
|
||||
font-weight: 700;
|
||||
letter-spacing: -0.01em;
|
||||
line-height: 1.06;
|
||||
color: var(--ink);
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
h1 span { color: var(--accent); }
|
||||
.lede {
|
||||
font-size: 17px; line-height: 1.65;
|
||||
color: var(--ink-3); max-width: 58ch;
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
|
||||
/* ── Doc cards ── */
|
||||
.cards {
|
||||
display: grid; gap: 16px;
|
||||
grid-template-columns: 1fr;
|
||||
max-width: 960px;
|
||||
margin-bottom: 72px;
|
||||
}
|
||||
@media (min-width: 640px) { .cards { grid-template-columns: 1fr 1fr; } }
|
||||
@media (min-width: 900px) { .cards { grid-template-columns: repeat(3, 1fr); } }
|
||||
|
||||
.card {
|
||||
position: relative;
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-xl);
|
||||
padding: 28px 26px 24px;
|
||||
display: flex; flex-direction: column; gap: 10px;
|
||||
transition: border-color 160ms, transform 160ms, box-shadow 160ms;
|
||||
cursor: pointer;
|
||||
}
|
||||
.card .card-cover {
|
||||
position: absolute; inset: 0; border-radius: var(--r-xl);
|
||||
}
|
||||
.card a.card-link { position: relative; z-index: 1; }
|
||||
.card:hover {
|
||||
border-color: rgba(34,211,238,0.30);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 28px rgba(0,0,0,0.5), 0 0 0 1px rgba(34,211,238,0.08);
|
||||
}
|
||||
.card-icon {
|
||||
width: 36px; height: 36px; border-radius: var(--r-lg);
|
||||
background: var(--accent-bg);
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
font-size: 17px; margin-bottom: 4px;
|
||||
}
|
||||
.card-tag {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 10px; font-weight: 600;
|
||||
letter-spacing: 0.14em; text-transform: uppercase;
|
||||
color: var(--accent);
|
||||
}
|
||||
.card h3 {
|
||||
font-size: 18px; font-weight: 600;
|
||||
letter-spacing: -0.01em; color: var(--ink);
|
||||
}
|
||||
.card p {
|
||||
font-size: 13.5px; line-height: 1.6; color: var(--ink-3);
|
||||
flex: 1;
|
||||
}
|
||||
.card a.card-link {
|
||||
font-size: 12.5px; font-weight: 500;
|
||||
color: var(--accent);
|
||||
display: flex; align-items: center; gap: 5px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
.card a.card-link:hover { opacity: 0.75; }
|
||||
|
||||
/* ── Architecture strip ── */
|
||||
.arch-section {
|
||||
max-width: 1100px; margin: 0 auto;
|
||||
padding: 0 24px 80px;
|
||||
}
|
||||
.section-label {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 10.5px; font-weight: 600;
|
||||
letter-spacing: 0.16em; text-transform: uppercase;
|
||||
color: var(--ink-4); margin-bottom: 24px;
|
||||
}
|
||||
.arch-grid {
|
||||
display: grid; gap: 12px;
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
@media (min-width: 640px) { .arch-grid { grid-template-columns: repeat(3, 1fr); } }
|
||||
|
||||
.arch-pill {
|
||||
position: relative;
|
||||
background: var(--surface-2);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-lg);
|
||||
padding: 18px 20px;
|
||||
display: flex; flex-direction: column; gap: 6px;
|
||||
transition: border-color 150ms, transform 150ms;
|
||||
}
|
||||
.arch-pill:hover {
|
||||
border-color: rgba(34,211,238,0.30);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
.arch-pill .pill-cover {
|
||||
position: absolute; inset: 0;
|
||||
border-radius: var(--r-lg);
|
||||
}
|
||||
.arch-pill .pill-name {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 11.5px; font-weight: 600;
|
||||
color: var(--accent);
|
||||
letter-spacing: 0.06em;
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
}
|
||||
.arch-pill .pill-desc {
|
||||
font-size: 13px; color: var(--ink-3); line-height: 1.5; flex: 1;
|
||||
}
|
||||
.arch-pill .pill-repo {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 10.5px; margin-top: 6px;
|
||||
position: relative; z-index: 1;
|
||||
}
|
||||
.arch-pill .pill-repo a {
|
||||
color: var(--ink-4);
|
||||
transition: color 120ms;
|
||||
}
|
||||
.arch-pill .pill-repo a:hover { color: var(--accent); opacity: 1; }
|
||||
.pill-optional {
|
||||
font-family: var(--font-mono); font-size: 9px; font-weight: 600;
|
||||
letter-spacing: 0.12em; text-transform: uppercase;
|
||||
background: rgba(139,92,246,0.12); color: #C4B5FD;
|
||||
border: 1px solid rgba(196,181,253,0.20);
|
||||
border-radius: 100px; padding: 2px 8px;
|
||||
}
|
||||
|
||||
/* ── Footer ── */
|
||||
footer {
|
||||
border-top: 1px solid var(--line);
|
||||
padding: 24px;
|
||||
text-align: center;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 11px; color: var(--ink-4);
|
||||
letter-spacing: 0.06em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<div class="brand">
|
||||
<div class="brand-dot"></div>
|
||||
Minds Cowork
|
||||
</div>
|
||||
<div class="nav-links">
|
||||
<a href="index.html" class="active">Docs</a>
|
||||
<a href="setup.html">Setup</a>
|
||||
<a href="use-cases.html">Use Cases</a>
|
||||
<a href="api.html">API</a>
|
||||
<a href="https://github.com/mindsdb/minds-platform">GitHub ↗</a>
|
||||
</div>
|
||||
<button class="hamburger" aria-label="Toggle menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="hero-wrap">
|
||||
<div class="eyebrow">Documentation</div>
|
||||
<h1>Build and automate<br>with <span>Minds Cowork</span></h1>
|
||||
<p class="lede">
|
||||
A general-purpose AI platform for knowledge workers. Automate recurring tasks,
|
||||
create artifacts, and deploy anywhere — on your terms.
|
||||
</p>
|
||||
|
||||
<div class="cards">
|
||||
<div class="card">
|
||||
<a href="setup.html" class="card-cover"></a>
|
||||
<div class="card-icon">⚡</div>
|
||||
<div class="card-tag">Guide</div>
|
||||
<h3>Get Started</h3>
|
||||
<p>Clone, install dependencies, and run the desktop or web app in under five minutes.</p>
|
||||
<a href="setup.html" class="card-link">Setup guide →</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<a href="use-cases.html" class="card-cover"></a>
|
||||
<div class="card-icon">◈</div>
|
||||
<div class="card-tag">Examples</div>
|
||||
<h3>Use Cases</h3>
|
||||
<p>See what creators, operators, and strategists are building with the platform.</p>
|
||||
<a href="use-cases.html" class="card-link">Explore examples →</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<a href="api.html" class="card-cover"></a>
|
||||
<div class="card-icon">⬡</div>
|
||||
<div class="card-tag">Reference</div>
|
||||
<h3>API</h3>
|
||||
<p>REST endpoints for conversations, projects, artifacts, schedules, connectors, and more.</p>
|
||||
<a href="api.html" class="card-link">API reference →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="arch-section">
|
||||
<div class="section-label">Platform modules</div>
|
||||
<div class="arch-grid">
|
||||
<div class="arch-pill">
|
||||
<a class="pill-cover" href="https://github.com/mindsdb/cowork" target="_blank"></a>
|
||||
<div class="pill-name">frontend</div>
|
||||
<div class="pill-desc">Electron + Vite desktop app. Also ships as a web SPA via <code>make dev-web</code>.</div>
|
||||
<div class="pill-repo"><a href="https://github.com/mindsdb/cowork" target="_blank">github.com/mindsdb/cowork ↗</a></div>
|
||||
</div>
|
||||
<div class="arch-pill">
|
||||
<a class="pill-cover" href="api.html"></a>
|
||||
<div class="pill-name">backend / core_api</div>
|
||||
<div class="pill-desc">FastAPI server. Conversations, projects, artifacts, schedules, connectors.</div>
|
||||
<div class="pill-repo"><a href="https://github.com/mindsdb/cowork-server" target="_blank">github.com/mindsdb/cowork-server ↗</a></div>
|
||||
</div>
|
||||
<div class="arch-pill">
|
||||
<a class="pill-cover" href="https://mindsdb.github.io/anton/" target="_blank"></a>
|
||||
<div class="pill-name">backend / core_agent</div>
|
||||
<div class="pill-desc">Anton — the autonomous coding and reasoning agent powering task execution.</div>
|
||||
<div class="pill-repo"><a href="https://mindsdb.github.io/anton/" target="_blank">mindsdb.github.io/anton ↗</a></div>
|
||||
</div>
|
||||
<div class="arch-pill">
|
||||
<a class="pill-cover" href="https://mindsdb.github.io/engine/" target="_blank"></a>
|
||||
<div class="pill-name">query engine <span class="pill-optional">optional</span></div>
|
||||
<div class="pill-desc">Embeddable query engine for conversational business intelligence across data sources.</div>
|
||||
<div class="pill-repo"><a href="https://mindsdb.github.io/engine/" target="_blank">mindsdb.github.io/engine ↗</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
Minds Platform · Open Source · <a href="https://github.com/mindsdb/minds-platform">github.com/mindsdb/minds-platform</a>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
document.querySelector('.hamburger').addEventListener('click', function() {
|
||||
const nav = this.closest('nav');
|
||||
nav.toggleAttribute('data-open');
|
||||
});
|
||||
document.querySelectorAll('.nav-links a').forEach(function(a) {
|
||||
a.addEventListener('click', function() {
|
||||
document.querySelector('nav').removeAttribute('data-open');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
+619
@@ -0,0 +1,619 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Setup — Minds Cowork Docs</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<meta name="description" content="Get started with Minds Cowork. Download the pre-built desktop or web app, or build from source with Node.js, Python, and Docker." />
|
||||
<meta name="keywords" content="Minds Cowork setup, install, get started, download, Electron app, Docker, build from source, Node.js, Python" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="author" content="Minds Platform" />
|
||||
<meta property="og:title" content="Setup — Minds Cowork" />
|
||||
<meta property="og:description" content="Get started with Minds Cowork. Download the pre-built desktop or web app, or build from source with Node.js, Python, and Docker." />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="Minds Cowork" />
|
||||
<meta property="og:image" content="favicon.png" />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:site" content="@MindsDB" />
|
||||
<meta name="twitter:title" content="Setup — Minds Cowork" />
|
||||
<meta name="twitter:description" content="Get started with Minds Cowork. Download the pre-built desktop or web app, or build from source with Node.js, Python, and Docker." />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&family=Josefin+Sans:wght@300;400;700&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #080d18;
|
||||
--surface: #0E1626;
|
||||
--surface-2: #131D31;
|
||||
--surface-3: #1A2640;
|
||||
--line: #1E2A44;
|
||||
--line-2: #2A3957;
|
||||
--ink: #F2F6FF;
|
||||
--ink-2: #C7D2E5;
|
||||
--ink-3: #8A97AE;
|
||||
--ink-4: #5C6B85;
|
||||
--accent: #22D3EE;
|
||||
--accent-bg: rgba(34,211,238,0.10);
|
||||
--accent-glow: rgba(34,211,238,0.45);
|
||||
--success: #4ADE80;
|
||||
--r: 6px;
|
||||
--r-lg: 10px;
|
||||
--r-xl: 16px;
|
||||
--font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
|
||||
--font-display: 'Josefin Sans', 'Inter', sans-serif;
|
||||
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
||||
}
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
html { color-scheme: dark; }
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--ink-2);
|
||||
font-family: var(--font-sans);
|
||||
font-size: 15px; line-height: 1.65;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
a { color: var(--accent); text-decoration: none; }
|
||||
a:hover { opacity: 0.8; }
|
||||
code {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.88em;
|
||||
background: var(--surface-3);
|
||||
border: 1px solid var(--line-2);
|
||||
border-radius: 4px;
|
||||
padding: 1px 6px;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* ── Nav ── */
|
||||
nav {
|
||||
position: sticky; top: 0; z-index: 40;
|
||||
background: rgba(8,13,24,0.80);
|
||||
backdrop-filter: saturate(160%) blur(16px);
|
||||
-webkit-backdrop-filter: saturate(160%) blur(16px);
|
||||
border-bottom: 1px solid var(--line);
|
||||
}
|
||||
.nav-inner {
|
||||
max-width: 1100px; margin: 0 auto; padding: 0 24px;
|
||||
height: 52px; display: flex; align-items: center; gap: 32px;
|
||||
}
|
||||
.brand {
|
||||
font-family: var(--font-mono); font-size: 11px; font-weight: 600;
|
||||
letter-spacing: 0.18em; text-transform: uppercase;
|
||||
color: var(--ink-3); display: flex; align-items: center; gap: 8px;
|
||||
}
|
||||
.brand-dot {
|
||||
width: 6px; height: 6px; border-radius: 50%;
|
||||
background: var(--accent); box-shadow: 0 0 8px var(--accent-glow);
|
||||
}
|
||||
.nav-links { display: flex; gap: 24px; margin-left: auto; }
|
||||
/* ── Mobile nav ── */
|
||||
.hamburger {
|
||||
display: none;
|
||||
flex-direction: column; justify-content: center; gap: 5px;
|
||||
width: 36px; height: 36px;
|
||||
background: none; border: none; cursor: pointer;
|
||||
padding: 4px; margin-left: auto; flex-shrink: 0;
|
||||
}
|
||||
.hamburger span {
|
||||
display: block; width: 20px; height: 1.5px;
|
||||
background: var(--ink-3); border-radius: 2px;
|
||||
transition: transform 200ms, opacity 200ms, width 200ms;
|
||||
transform-origin: center;
|
||||
}
|
||||
nav[data-open] .hamburger span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
|
||||
nav[data-open] .hamburger span:nth-child(2) { opacity: 0; width: 0; }
|
||||
nav[data-open] .hamburger span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }
|
||||
@media (max-width: 640px) {
|
||||
.hamburger { display: flex; }
|
||||
.nav-links {
|
||||
display: none;
|
||||
position: absolute; top: 52px; left: 0; right: 0;
|
||||
flex-direction: column; gap: 0;
|
||||
background: rgba(8,13,24,0.97);
|
||||
backdrop-filter: saturate(160%) blur(16px);
|
||||
-webkit-backdrop-filter: saturate(160%) blur(16px);
|
||||
border-bottom: 1px solid var(--line);
|
||||
padding: 8px 0;
|
||||
z-index: 39;
|
||||
}
|
||||
nav[data-open] .nav-links { display: flex; }
|
||||
.nav-links a {
|
||||
padding: 12px 24px;
|
||||
font-size: 14px;
|
||||
border-left: 2px solid transparent;
|
||||
}
|
||||
.nav-links a.active { border-color: var(--accent); background: var(--accent-bg); }
|
||||
}
|
||||
|
||||
.nav-links a { font-size: 13px; color: var(--ink-3); transition: color 120ms; }
|
||||
.nav-links a:hover { color: var(--ink); opacity: 1; }
|
||||
.nav-links a.active { color: var(--accent); }
|
||||
|
||||
/* ── Layout ── */
|
||||
.shell {
|
||||
max-width: 1100px; margin: 0 auto;
|
||||
padding: 64px 24px 120px;
|
||||
display: grid; gap: 0;
|
||||
grid-template-columns: 220px 1fr;
|
||||
align-items: start;
|
||||
}
|
||||
@media (max-width: 768px) { .shell { grid-template-columns: 1fr; } }
|
||||
|
||||
/* ── Sidebar ── */
|
||||
.sidebar {
|
||||
padding-right: 40px;
|
||||
padding-top: 4px;
|
||||
position: sticky;
|
||||
top: 72px;
|
||||
}
|
||||
@media (max-width: 768px) { .sidebar { display: none; } }
|
||||
.sidebar-label {
|
||||
font-family: var(--font-mono); font-size: 10px; font-weight: 600;
|
||||
letter-spacing: 0.16em; text-transform: uppercase;
|
||||
color: var(--ink-4); margin-bottom: 12px;
|
||||
}
|
||||
.sidebar ul { list-style: none; display: flex; flex-direction: column; gap: 2px; }
|
||||
.sidebar li a {
|
||||
font-size: 13px; color: var(--ink-3);
|
||||
display: block; padding: 4px 10px;
|
||||
border-left: 2px solid transparent;
|
||||
border-radius: 0 var(--r) var(--r) 0;
|
||||
transition: color 120ms, border-color 120ms;
|
||||
}
|
||||
.sidebar li a:hover { color: var(--ink); opacity: 1; border-color: var(--line-2); }
|
||||
.sidebar li a.active { color: var(--accent); border-color: var(--accent); }
|
||||
.sidebar .sub-group { list-style: none; }
|
||||
.sidebar .sub-group ul { list-style: none; border-left: 1px solid var(--line); margin-left: 10px; padding-left: 0; display: flex; flex-direction: column; gap: 2px; margin-top: 2px; }
|
||||
.sidebar .sub-group ul li a { font-size: 12.5px; color: var(--ink-4); padding-left: 14px; }
|
||||
|
||||
/* ── Content ── */
|
||||
.content { min-width: 0; }
|
||||
|
||||
.eyebrow {
|
||||
font-family: var(--font-mono); font-size: 11px; font-weight: 600;
|
||||
letter-spacing: 0.18em; text-transform: uppercase;
|
||||
color: var(--accent); margin-bottom: 14px;
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
}
|
||||
.eyebrow::before { content: ''; display: block; width: 24px; height: 1px; background: var(--accent); }
|
||||
h1 {
|
||||
font-family: var(--font-display);
|
||||
font-size: clamp(30px, 4vw, 46px); font-weight: 700;
|
||||
letter-spacing: -0.01em; line-height: 1.08;
|
||||
color: var(--ink); margin-bottom: 16px;
|
||||
}
|
||||
.lede {
|
||||
font-size: 16px; line-height: 1.65; color: var(--ink-3);
|
||||
max-width: 60ch; margin-bottom: 52px;
|
||||
}
|
||||
|
||||
/* ── Sections ── */
|
||||
.section { margin-bottom: 56px; scroll-margin-top: 80px; }
|
||||
h2 {
|
||||
font-size: 20px; font-weight: 600; letter-spacing: -0.01em;
|
||||
color: var(--ink); margin-bottom: 16px;
|
||||
padding-bottom: 10px; border-bottom: 1px solid var(--line);
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
}
|
||||
h2 .step-badge {
|
||||
font-family: var(--font-mono); font-size: 10.5px; font-weight: 600;
|
||||
background: var(--accent-bg); color: var(--accent);
|
||||
border: 1px solid rgba(34,211,238,0.25);
|
||||
border-radius: 100px; padding: 2px 10px;
|
||||
letter-spacing: 0.06em;
|
||||
}
|
||||
p { color: var(--ink-3); margin-bottom: 12px; }
|
||||
p:last-child { margin-bottom: 0; }
|
||||
|
||||
/* ── Code block ── */
|
||||
.code-block {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-lg);
|
||||
overflow: hidden;
|
||||
margin: 16px 0;
|
||||
}
|
||||
.code-header {
|
||||
padding: 10px 16px;
|
||||
border-bottom: 1px solid var(--line);
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
}
|
||||
.code-lang {
|
||||
font-family: var(--font-mono); font-size: 10.5px; font-weight: 600;
|
||||
letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4);
|
||||
}
|
||||
pre {
|
||||
font-family: var(--font-mono); font-size: 13px; line-height: 1.7;
|
||||
color: var(--ink-2); padding: 18px 20px;
|
||||
overflow-x: auto; tab-size: 2;
|
||||
}
|
||||
.hl { color: var(--accent); }
|
||||
.cm { color: var(--ink-4); }
|
||||
|
||||
/* ── Prereq chips ── */
|
||||
.prereq-grid {
|
||||
display: flex; flex-wrap: wrap; gap: 10px;
|
||||
margin: 16px 0;
|
||||
}
|
||||
.prereq-chip {
|
||||
background: var(--surface-2);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-lg);
|
||||
padding: 10px 16px;
|
||||
display: flex; flex-direction: column; gap: 3px;
|
||||
}
|
||||
.prereq-chip .chip-name {
|
||||
font-family: var(--font-mono); font-size: 12px; font-weight: 600;
|
||||
color: var(--ink);
|
||||
}
|
||||
.prereq-chip .chip-ver {
|
||||
font-size: 12px; color: var(--ink-4);
|
||||
}
|
||||
|
||||
/* ── Make table ── */
|
||||
.make-table {
|
||||
width: 100%; border-collapse: collapse;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-lg); overflow: hidden;
|
||||
margin: 16px 0; font-size: 13.5px;
|
||||
}
|
||||
.make-table th {
|
||||
background: var(--surface-2);
|
||||
font-family: var(--font-mono); font-size: 10.5px; font-weight: 600;
|
||||
letter-spacing: 0.12em; text-transform: uppercase;
|
||||
color: var(--ink-4); text-align: left;
|
||||
padding: 10px 16px; border-bottom: 1px solid var(--line);
|
||||
}
|
||||
.make-table td {
|
||||
padding: 11px 16px; color: var(--ink-3);
|
||||
border-bottom: 1px solid var(--line);
|
||||
vertical-align: top;
|
||||
}
|
||||
.make-table tr:last-child td { border-bottom: none; }
|
||||
.make-table td:first-child code {
|
||||
font-size: 12.5px; font-weight: 500;
|
||||
background: var(--accent-bg);
|
||||
border-color: rgba(34,211,238,0.20);
|
||||
color: var(--accent);
|
||||
}
|
||||
.make-table tr:hover td { background: var(--surface-2); }
|
||||
|
||||
/* ── Download cards ── */
|
||||
.download-grid {
|
||||
display: grid; gap: 12px; grid-template-columns: 1fr;
|
||||
margin: 16px 0 0;
|
||||
}
|
||||
@media (min-width: 600px) { .download-grid { grid-template-columns: repeat(3, 1fr); } }
|
||||
.download-card {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-xl);
|
||||
padding: 18px 20px;
|
||||
display: flex; align-items: center; gap: 14px;
|
||||
text-decoration: none;
|
||||
transition: border-color 150ms, transform 150ms;
|
||||
color: inherit;
|
||||
}
|
||||
.download-card:hover {
|
||||
border-color: rgba(34,211,238,0.35);
|
||||
transform: translateY(-2px);
|
||||
opacity: 1;
|
||||
}
|
||||
.dl-icon { font-size: 22px; flex-shrink: 0; line-height: 1; }
|
||||
.dl-body { flex: 1; }
|
||||
.dl-name { font-size: 14px; font-weight: 600; color: var(--ink); margin-bottom: 3px; }
|
||||
.dl-desc { font-size: 12.5px; color: var(--ink-3); line-height: 1.45; }
|
||||
.dl-arrow { font-size: 16px; color: var(--accent); flex-shrink: 0; }
|
||||
|
||||
/* ── Divider ── */
|
||||
.divider {
|
||||
display: flex; align-items: center; gap: 16px;
|
||||
margin: 40px 0 40px;
|
||||
color: var(--ink-4);
|
||||
font-family: var(--font-mono); font-size: 11px;
|
||||
letter-spacing: 0.12em; text-transform: uppercase;
|
||||
}
|
||||
.divider::before, .divider::after {
|
||||
content: ''; flex: 1; height: 1px; background: var(--line);
|
||||
}
|
||||
|
||||
/* ── Note ── */
|
||||
.note {
|
||||
background: var(--surface-2);
|
||||
border: 1px solid var(--line);
|
||||
border-left: 3px solid var(--accent);
|
||||
border-radius: 0 var(--r-lg) var(--r-lg) 0;
|
||||
padding: 14px 18px;
|
||||
font-size: 13.5px; color: var(--ink-3);
|
||||
margin: 16px 0;
|
||||
}
|
||||
.note strong { color: var(--ink); }
|
||||
|
||||
footer {
|
||||
border-top: 1px solid var(--line); padding: 24px;
|
||||
text-align: center; font-family: var(--font-mono);
|
||||
font-size: 11px; color: var(--ink-4); letter-spacing: 0.06em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<div class="brand"><div class="brand-dot"></div>Minds Cowork</div>
|
||||
<div class="nav-links">
|
||||
<a href="index.html">Docs</a>
|
||||
<a href="setup.html" class="active">Setup</a>
|
||||
<a href="use-cases.html">Use Cases</a>
|
||||
<a href="api.html">API</a>
|
||||
<a href="https://github.com/mindsdb/minds-platform">GitHub ↗</a>
|
||||
</div>
|
||||
<button class="hamburger" aria-label="Toggle menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="shell">
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-label">On this page</div>
|
||||
<ul>
|
||||
<li><a href="#app">Desktop or Web App</a></li>
|
||||
<li><a href="#source">Build From Source</a></li>
|
||||
<li class="sub-group">
|
||||
<ul>
|
||||
<li><a href="#prereqs">Prerequisites</a></li>
|
||||
<li><a href="#install">Install</a></li>
|
||||
<li><a href="#desktop">Dev — desktop</a></li>
|
||||
<li><a href="#web">Dev — web</a></li>
|
||||
<li><a href="#docker">Docker</a></li>
|
||||
<li><a href="#commands">All commands</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="eyebrow">Setup</div>
|
||||
<h1>Get Started</h1>
|
||||
<p class="lede">
|
||||
The simplest way to use Minds Cowork is the pre-built app — available on web and desktop.
|
||||
</p>
|
||||
|
||||
<!-- Desktop App download -->
|
||||
<section class="section" id="app">
|
||||
<h2>Desktop or Web App</h2>
|
||||
<p>Pre-built, packaged and ready — no setup required.</p>
|
||||
<div class="download-grid">
|
||||
<a class="download-card" href="https://mindshub.ai" target="_blank">
|
||||
<div class="dl-icon">
|
||||
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" style="color:var(--ink-2)">
|
||||
<circle cx="12" cy="12" r="10"/>
|
||||
<path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="dl-body">
|
||||
<div class="dl-name">Web</div>
|
||||
<div class="dl-desc">Try it at <span style="color:var(--accent);text-decoration:underline;text-underline-offset:2px;">mindshub.ai</span> — ready in one click.</div>
|
||||
</div>
|
||||
<div class="dl-arrow">↗</div>
|
||||
</a>
|
||||
<a class="download-card" href="https://downloads.mindsdb.com/anton/mac/anton-latest.pkg" target="_blank">
|
||||
<div class="dl-icon">
|
||||
<svg width="22" height="22" viewBox="0 0 814 1000" fill="currentColor" xmlns="http://www.w3.org/2000/svg" style="color:var(--ink-2)">
|
||||
<path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76 0-103.7 40.8-165.9 40.8s-105-43.4-150.3-116.6c-52.1-83.6-94.1-208.7-94.1-328.2 0-191.3 124.1-292.5 246.9-292.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="dl-body">
|
||||
<div class="dl-name">macOS</div>
|
||||
<div class="dl-desc">Download the <code>.pkg</code> installer for macOS.</div>
|
||||
</div>
|
||||
<div class="dl-arrow">
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" style="color:var(--accent)">
|
||||
<path d="M12 3v13M6 11l6 6 6-6M3 21h18"/>
|
||||
</svg>
|
||||
</div>
|
||||
</a>
|
||||
<a class="download-card" href="https://downloads.mindsdb.com/anton/windows/anton-latest.exe" target="_blank">
|
||||
<div class="dl-icon">
|
||||
<svg width="22" height="22" viewBox="0 0 88 88" fill="currentColor" xmlns="http://www.w3.org/2000/svg" style="color:var(--ink-2)">
|
||||
<path d="M0 12.402l35.687-4.86.016 34.423-35.67.203zm35.67 33.529l.028 34.453L.028 75.48.026 45.7zm4.326-39.025L87.314 0v41.527l-47.318.376zm47.329 39.349l-.015 41.344-47.318-6.63-.066-34.893z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="dl-body">
|
||||
<div class="dl-name">Windows</div>
|
||||
<div class="dl-desc">Download the <code>.exe</code> installer for Windows.</div>
|
||||
</div>
|
||||
<div class="dl-arrow">
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" style="color:var(--accent)">
|
||||
<path d="M12 3v13M6 11l6 6 6-6M3 21h18"/>
|
||||
</svg>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="divider"></div>
|
||||
|
||||
<section class="section" id="source">
|
||||
<h2>Build From Source</h2>
|
||||
<p>Or build from source if you want to hack the code ;)</p>
|
||||
</section>
|
||||
|
||||
<!-- Prerequisites -->
|
||||
<section class="section" id="prereqs">
|
||||
<h2><span class="step-badge">01</span> Prerequisites</h2>
|
||||
<p>Make sure the following are installed on your machine before starting.</p>
|
||||
<div class="prereq-grid">
|
||||
<div class="prereq-chip">
|
||||
<div class="chip-name">Node.js</div>
|
||||
<div class="chip-ver">v20 or later</div>
|
||||
</div>
|
||||
<div class="prereq-chip">
|
||||
<div class="chip-name">Python</div>
|
||||
<div class="chip-ver">3.12 or later</div>
|
||||
</div>
|
||||
<div class="prereq-chip">
|
||||
<div class="chip-name">uv</div>
|
||||
<div class="chip-ver">Python package manager</div>
|
||||
</div>
|
||||
<div class="prereq-chip">
|
||||
<div class="chip-name">make</div>
|
||||
<div class="chip-ver">pre-installed on macOS / Linux</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Install <code>uv</code> if you don't have it:</p>
|
||||
<div class="code-block">
|
||||
<div class="code-header"><span class="code-lang">bash</span></div>
|
||||
<pre><span class="hl">curl</span> -LsSf https://astral.sh/uv/install.sh | sh</pre>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Install -->
|
||||
<section class="section" id="install">
|
||||
<h2><span class="step-badge">02</span> Clone & install</h2>
|
||||
<p>Clone with <code>--recurse-submodules</code> to pull <code>frontend</code>, <code>backend/core_api</code>, and <code>backend/core_agent</code> in one shot.</p>
|
||||
<div class="code-block">
|
||||
<div class="code-header"><span class="code-lang">bash</span></div>
|
||||
<pre><span class="hl">git</span> clone --recurse-submodules https://github.com/mindsdb/minds-platform.git
|
||||
<span class="hl">cd</span> minds-platform
|
||||
<span class="hl">make</span> setup</pre>
|
||||
</div>
|
||||
<p><code>make setup</code> runs <code>npm ci</code> for the frontend and <code>uv sync</code> for both Python backends. It is automatically skipped on subsequent runs if nothing changed in the lock files.</p>
|
||||
</section>
|
||||
|
||||
<!-- Desktop -->
|
||||
<section class="section" id="desktop">
|
||||
<h2>Desktop app</h2>
|
||||
<p>Starts the FastAPI backend (with hot reload) and the Electron renderer (TypeScript watch + Vite HMR) in parallel.</p>
|
||||
<div class="code-block">
|
||||
<div class="code-header"><span class="code-lang">bash</span></div>
|
||||
<pre><span class="hl">make</span> dev</pre>
|
||||
</div>
|
||||
<p>Press <code>Ctrl-C</code> once to shut down all processes cleanly.</p>
|
||||
<p>To open DevTools, set <code>ANTON_OPEN_DEVTOOLS=1</code> before running:</p>
|
||||
<div class="code-block">
|
||||
<div class="code-header"><span class="code-lang">bash</span></div>
|
||||
<pre>ANTON_OPEN_DEVTOOLS=1 <span class="hl">make</span> dev</pre>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Web -->
|
||||
<section class="section" id="web">
|
||||
<h2>Web app</h2>
|
||||
<p>Starts the FastAPI backend and the Vite dev server with <code>BUILD_TARGET=web</code>. Opens the browser automatically.</p>
|
||||
<div class="code-block">
|
||||
<div class="code-header"><span class="code-lang">bash</span></div>
|
||||
<pre><span class="hl">make</span> dev-web</pre>
|
||||
</div>
|
||||
<p>The app is served at <a href="http://localhost:5173">http://localhost:5173</a>. The API runs on <a href="http://localhost:26866">http://localhost:26866</a>.</p>
|
||||
<div class="note">
|
||||
<strong>API key required.</strong> Set <code>ANTON_ANTHROPIC_API_KEY=sk-ant-...</code> in a <code>.env</code> file inside <code>backend/core_api/</code> before running.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Docker -->
|
||||
<section class="section" id="docker">
|
||||
<h2>Docker</h2>
|
||||
<p>Run the full stack in containers — the web SPA served by nginx on port 3000, the API on port 26866.</p>
|
||||
<div class="code-block">
|
||||
<div class="code-header"><span class="code-lang">bash</span></div>
|
||||
<pre><span class="hl">make</span> docker-build <span class="cm"># build both images</span>
|
||||
<span class="hl">make</span> docker-up <span class="cm"># start everything</span></pre>
|
||||
</div>
|
||||
<p>Or pass your API key inline:</p>
|
||||
<div class="code-block">
|
||||
<div class="code-header"><span class="code-lang">bash</span></div>
|
||||
<pre>ANTON_ANTHROPIC_API_KEY=sk-ant-... <span class="hl">docker</span> compose up --build</pre>
|
||||
</div>
|
||||
<p>Open <a href="http://localhost:3000">http://localhost:3000</a> when the health check turns green.</p>
|
||||
</section>
|
||||
|
||||
<!-- All commands -->
|
||||
<section class="section" id="commands">
|
||||
<h2>All make commands</h2>
|
||||
<table class="make-table">
|
||||
<thead>
|
||||
<tr><th>Command</th><th>What it does</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td><code>make</code> / <code>make help</code></td><td>List every target with a one-line description (this is the default goal).</td></tr>
|
||||
<tr><td><code>make setup</code></td><td>Install all dependencies (npm + uv). Auto-skipped when lock files haven't changed.</td></tr>
|
||||
<tr><td><code>make dev</code></td><td>Start backend + Electron with full hot reload (local module source).</td></tr>
|
||||
<tr><td><code>make dev-web</code></td><td>Start backend + Vite web dev server.</td></tr>
|
||||
<tr><td><code>make build</code></td><td>Production build of the frontend (renderer + main process).</td></tr>
|
||||
<tr><td><code>make dist-mac</code></td><td>Build and package a macOS <code>.dmg</code>.</td></tr>
|
||||
<tr><td><code>make dist-win</code></td><td>Build and package a Windows <code>.exe</code>.</td></tr>
|
||||
<tr><td><code>make docker-build</code></td><td>Build the api and web Docker images.</td></tr>
|
||||
<tr><td><code>make docker-up</code></td><td>Start the Docker stack (<code>docker compose up</code>).</td></tr>
|
||||
<tr><td><code>make docker-down</code></td><td>Stop and remove containers.</td></tr>
|
||||
<tr><td><code>make flush</code></td><td>Wipe all local installs + app data for a fresh start (see below).</td></tr>
|
||||
<tr><td colspan="2"><em>Module-branch workflow (see below)</em></td></tr>
|
||||
<tr><td><code>make refs</code></td><td>Print which module branches the next run will use.</td></tr>
|
||||
<tr><td><code>make use</code></td><td>Check out your <code>dev.env</code> refs across all submodules.</td></tr>
|
||||
<tr><td><code>make server</code></td><td>(Re)install the Electron desktop server from your branch.</td></tr>
|
||||
<tr><td><code>make app</code></td><td>Run the desktop app against your branch (auto-update off).</td></tr>
|
||||
<tr><td><code>make baseline</code></td><td>Reset every submodule to the superproject's pinned commits.</td></tr>
|
||||
<tr><td><code>make pin</code></td><td>Record the submodules' current commits as the superproject pins (one deliberate commit).</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Working on module branches</h2>
|
||||
<p>This repo is a superproject that <strong>pins</strong> each module (<code>frontend</code>, <code>backend/core_api</code>, <code>backend/core_agent</code>, <code>backend/data-vault</code>) to a commit. To let a team work on module branches without polluting <code>git status</code> or fighting over pins:</p>
|
||||
<p><strong>1. Pick your branches</strong> in a gitignored <code>dev.env</code> (copy the template):</p>
|
||||
<pre><code>cp dev.env.example dev.env # then set REF=feat/my-thing (or per-module API_REF=…)</code></pre>
|
||||
<p><strong>2. <code>make</code> follows it</strong> — one knob, both run paths. <code>make use</code> checks out those refs; <code>make dev</code>/<code>dev-web</code> run the local module source on them, and <code>make server</code> + <code>make app</code> run the desktop app against the matching branch server.</p>
|
||||
<p>Every submodule is configured with <code>ignore = all</code>, so your branch work never shows up as a superproject change — the parent <code>git status</code> stays clean. Pins move <strong>only</strong> via <code>make pin</code> (a deliberate, reviewable commit), and <code>make baseline</code> snaps submodules back to the pinned commits when you're not developing a module.</p>
|
||||
<div class="note">
|
||||
<strong>One DB, one ref.</strong> <code>make dev</code> (local source) and the desktop app (<code>make app</code>) share <code>~/.cowork/cowork.db</code>, so keep both on the same branch — a migration applied by one must exist in the other, or the app fails to start with <code>Can't locate revision …</code>. <code>make flush</code> resets if they drift.
|
||||
</div>
|
||||
|
||||
<h2>Reset to a clean slate</h2>
|
||||
<p><code>make flush</code> returns the machine to a pre-install state. It uninstalls the local runtime — the <code>cowork-server</code> uv tool <em>and</em> the <code>backend/core_api/.venv</code> + <code>backend/core_agent/.venv</code> — and deletes all app state: <code>~/.anton</code> (provider keys / <code>.env</code>) and <code>~/.cowork</code> (database, hermes, projects).</p>
|
||||
<p>Use it to test the from-scratch install flow or to recover from a broken install. It prompts for confirmation before deleting; pass <code>FORCE=1</code> to skip the prompt in scripts/CI. The next <code>make setup</code> (or app launch) reinstalls everything.</p>
|
||||
<div class="note">
|
||||
<strong>Destructive.</strong> This permanently deletes your conversations and saved provider keys. There is no undo.
|
||||
</div>
|
||||
<pre><code>make flush # prompts before wiping
|
||||
make flush FORCE=1 # no prompt (CI / scripts)</code></pre>
|
||||
</section>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
Minds Platform · Open Source · <a href="https://github.com/mindsdb/minds-platform">github.com/mindsdb/minds-platform</a>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
document.querySelector('.hamburger').addEventListener('click', function() {
|
||||
const nav = this.closest('nav');
|
||||
nav.toggleAttribute('data-open');
|
||||
});
|
||||
document.querySelectorAll('.nav-links a').forEach(function(a) {
|
||||
a.addEventListener('click', function() {
|
||||
document.querySelector('nav').removeAttribute('data-open');
|
||||
});
|
||||
});
|
||||
|
||||
// Scroll spy
|
||||
var sidebarLinks = Array.from(document.querySelectorAll('.sidebar a[href^="#"]'));
|
||||
var sections = sidebarLinks.map(function(a) {
|
||||
return document.querySelector(a.getAttribute('href'));
|
||||
}).filter(Boolean);
|
||||
|
||||
function onScroll() {
|
||||
var scrollY = window.scrollY + 100;
|
||||
var active = sections[0];
|
||||
sections.forEach(function(s) {
|
||||
if (s.getBoundingClientRect().top + window.scrollY <= scrollY) active = s;
|
||||
});
|
||||
sidebarLinks.forEach(function(a) {
|
||||
a.classList.toggle('active', a.getAttribute('href') === '#' + active.id);
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', onScroll, { passive: true });
|
||||
onScroll();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,403 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Use Cases — Minds Cowork Docs</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<meta name="description" content="Explore use cases for Minds Cowork. See how creators, operators, strategists, and teams automate workflows and build AI-powered apps, reports, and dashboards." />
|
||||
<meta name="keywords" content="AI use cases, AI automation, workflow automation, AI for teams, content automation, data reports, knowledge workers, Minds Cowork" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="author" content="Minds Platform" />
|
||||
<meta property="og:title" content="Use Cases — Minds Cowork" />
|
||||
<meta property="og:description" content="Explore use cases for Minds Cowork. See how creators, operators, strategists, and teams automate workflows and build AI-powered apps, reports, and dashboards." />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="Minds Cowork" />
|
||||
<meta property="og:image" content="favicon.png" />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:site" content="@MindsDB" />
|
||||
<meta name="twitter:title" content="Use Cases — Minds Cowork" />
|
||||
<meta name="twitter:description" content="Explore use cases for Minds Cowork. See how creators, operators, strategists, and teams automate workflows and build AI-powered apps, reports, and dashboards." />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&family=Josefin+Sans:wght@300;400;700&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
:root {
|
||||
--bg: #080d18;
|
||||
--surface: #0E1626;
|
||||
--surface-2: #131D31;
|
||||
--surface-3: #1A2640;
|
||||
--line: #1E2A44;
|
||||
--line-2: #2A3957;
|
||||
--ink: #F2F6FF;
|
||||
--ink-2: #C7D2E5;
|
||||
--ink-3: #8A97AE;
|
||||
--ink-4: #5C6B85;
|
||||
--accent: #22D3EE;
|
||||
--accent-bg: rgba(34,211,238,0.10);
|
||||
--accent-glow: rgba(34,211,238,0.45);
|
||||
--tint-1: #22D3EE;
|
||||
--tint-2: #6EE7B7;
|
||||
--tint-3: #FBBF24;
|
||||
--tint-4: #F87171;
|
||||
--tint-5: #C4B5FD;
|
||||
--r: 6px; --r-lg: 10px; --r-xl: 16px;
|
||||
--font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
|
||||
--font-display: 'Josefin Sans', 'Inter', sans-serif;
|
||||
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
||||
}
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
html { color-scheme: dark; }
|
||||
body { background: var(--bg); color: var(--ink-2); font-family: var(--font-sans); font-size: 15px; line-height: 1.65; -webkit-font-smoothing: antialiased; }
|
||||
a { color: var(--accent); text-decoration: none; }
|
||||
a:hover { opacity: 0.8; }
|
||||
|
||||
nav { position: sticky; top: 0; z-index: 40; background: rgba(8,13,24,0.80); backdrop-filter: saturate(160%) blur(16px); -webkit-backdrop-filter: saturate(160%) blur(16px); border-bottom: 1px solid var(--line); }
|
||||
.nav-inner { max-width: 1100px; margin: 0 auto; padding: 0 24px; height: 52px; display: flex; align-items: center; gap: 32px; }
|
||||
.brand { font-family: var(--font-mono); font-size: 11px; font-weight: 600; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-3); display: flex; align-items: center; gap: 8px; }
|
||||
.brand-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 8px var(--accent-glow); }
|
||||
.nav-links { display: flex; gap: 24px; margin-left: auto; }
|
||||
/* ── Mobile nav ── */
|
||||
.hamburger {
|
||||
display: none;
|
||||
flex-direction: column; justify-content: center; gap: 5px;
|
||||
width: 36px; height: 36px;
|
||||
background: none; border: none; cursor: pointer;
|
||||
padding: 4px; margin-left: auto; flex-shrink: 0;
|
||||
}
|
||||
.hamburger span {
|
||||
display: block; width: 20px; height: 1.5px;
|
||||
background: var(--ink-3); border-radius: 2px;
|
||||
transition: transform 200ms, opacity 200ms, width 200ms;
|
||||
transform-origin: center;
|
||||
}
|
||||
nav[data-open] .hamburger span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
|
||||
nav[data-open] .hamburger span:nth-child(2) { opacity: 0; width: 0; }
|
||||
nav[data-open] .hamburger span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }
|
||||
@media (max-width: 640px) {
|
||||
.hamburger { display: flex; }
|
||||
.nav-links {
|
||||
display: none;
|
||||
position: absolute; top: 52px; left: 0; right: 0;
|
||||
flex-direction: column; gap: 0;
|
||||
background: rgba(8,13,24,0.97);
|
||||
backdrop-filter: saturate(160%) blur(16px);
|
||||
-webkit-backdrop-filter: saturate(160%) blur(16px);
|
||||
border-bottom: 1px solid var(--line);
|
||||
padding: 8px 0;
|
||||
z-index: 39;
|
||||
}
|
||||
nav[data-open] .nav-links { display: flex; }
|
||||
.nav-links a {
|
||||
padding: 12px 24px;
|
||||
font-size: 14px;
|
||||
border-left: 2px solid transparent;
|
||||
}
|
||||
.nav-links a.active { border-color: var(--accent); background: var(--accent-bg); }
|
||||
}
|
||||
|
||||
.nav-links a { font-size: 13px; color: var(--ink-3); transition: color 120ms; }
|
||||
.nav-links a:hover { color: var(--ink); opacity: 1; }
|
||||
.nav-links a.active { color: var(--accent); }
|
||||
|
||||
/* ── Hero ── */
|
||||
.hero-wrap { max-width: 1100px; margin: 0 auto; padding: 88px 24px 72px; }
|
||||
.eyebrow { font-family: var(--font-mono); font-size: 11px; font-weight: 600; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent); margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
|
||||
.eyebrow::before { content: ''; display: block; width: 24px; height: 1px; background: var(--accent); }
|
||||
h1 { font-family: var(--font-display); font-size: clamp(32px, 5vw, 54px); font-weight: 700; letter-spacing: -0.01em; line-height: 1.06; color: var(--ink); margin-bottom: 20px; }
|
||||
h1 em { font-style: normal; color: var(--accent); }
|
||||
.lede { font-size: 17px; line-height: 1.65; color: var(--ink-3); max-width: 58ch; }
|
||||
|
||||
/* ── Primitive strip ── */
|
||||
.primitives {
|
||||
display: grid; gap: 16px; grid-template-columns: 1fr 1fr;
|
||||
max-width: 700px; margin: 48px 0 0;
|
||||
}
|
||||
@media (max-width: 560px) { .primitives { grid-template-columns: 1fr; } }
|
||||
.primitive {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-xl);
|
||||
padding: 24px;
|
||||
}
|
||||
.primitive .p-label {
|
||||
font-size: 18px; font-weight: 700; color: var(--ink);
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.primitive .p-label span { color: var(--accent); }
|
||||
.primitive .p-desc { font-size: 14px; color: var(--ink-3); line-height: 1.55; }
|
||||
|
||||
/* ── Persona sections ── */
|
||||
.personas { max-width: 1100px; margin: 0 auto; padding: 72px 24px 96px; }
|
||||
|
||||
.persona-block { margin-bottom: 72px; }
|
||||
.persona-header {
|
||||
display: flex; align-items: center; gap: 14px;
|
||||
margin-bottom: 28px;
|
||||
}
|
||||
.persona-icon {
|
||||
width: 44px; height: 44px;
|
||||
border-radius: var(--r-lg);
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
font-size: 20px; flex-shrink: 0;
|
||||
}
|
||||
h2 {
|
||||
font-family: var(--font-display);
|
||||
font-size: 26px; font-weight: 700;
|
||||
letter-spacing: -0.01em; color: var(--ink);
|
||||
}
|
||||
.persona-sub { font-size: 14px; color: var(--ink-4); margin-top: 2px; }
|
||||
|
||||
.use-case-grid {
|
||||
display: grid; gap: 14px;
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
@media (min-width: 640px) { .use-case-grid { grid-template-columns: 1fr 1fr; } }
|
||||
@media (min-width: 900px) { .use-case-grid { grid-template-columns: repeat(3, 1fr); } }
|
||||
|
||||
.uc-card {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-xl);
|
||||
padding: 22px 22px 20px;
|
||||
display: flex; flex-direction: column; gap: 10px;
|
||||
transition: border-color 160ms, transform 160ms;
|
||||
}
|
||||
.uc-card:hover { border-color: var(--line-2); transform: translateY(-2px); }
|
||||
.uc-tag {
|
||||
font-family: var(--font-mono); font-size: 10px; font-weight: 600;
|
||||
letter-spacing: 0.14em; text-transform: uppercase;
|
||||
padding: 3px 9px; border-radius: 100px;
|
||||
display: inline-flex; align-items: center; gap: 5px;
|
||||
width: fit-content;
|
||||
}
|
||||
.uc-title { font-size: 15px; font-weight: 600; color: var(--ink); line-height: 1.35; }
|
||||
.uc-desc { font-size: 13px; color: var(--ink-3); line-height: 1.55; flex: 1; }
|
||||
.uc-flow {
|
||||
font-family: var(--font-mono); font-size: 11.5px; color: var(--ink-4);
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
/* Persona colour themes */
|
||||
.creators .persona-icon { background: rgba(34,211,238,0.12); }
|
||||
.creators .uc-tag { background: rgba(34,211,238,0.10); color: var(--tint-1); }
|
||||
.creators .uc-card:hover { border-color: rgba(34,211,238,0.25); }
|
||||
|
||||
.operators .persona-icon { background: rgba(110,231,183,0.12); }
|
||||
.operators .uc-tag { background: rgba(110,231,183,0.10); color: var(--tint-2); }
|
||||
.operators .uc-card:hover { border-color: rgba(110,231,183,0.25); }
|
||||
|
||||
.strategists .persona-icon { background: rgba(196,181,253,0.12); }
|
||||
.strategists .uc-tag { background: rgba(196,181,253,0.10); color: var(--tint-5); }
|
||||
.strategists .uc-card:hover { border-color: rgba(196,181,253,0.25); }
|
||||
|
||||
.everyone .persona-icon { background: rgba(251,191,36,0.12); }
|
||||
.everyone .uc-tag { background: rgba(251,191,36,0.10); color: var(--tint-3); }
|
||||
.everyone .uc-card:hover { border-color: rgba(251,191,36,0.25); }
|
||||
|
||||
/* ── CTA ── */
|
||||
.cta-wrap {
|
||||
max-width: 1100px; margin: 0 auto;
|
||||
padding: 0 24px 96px;
|
||||
}
|
||||
.cta-block {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--r-xl);
|
||||
padding: 40px 40px;
|
||||
display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap;
|
||||
background-image: radial-gradient(ellipse 60% 100% at 80% 50%, rgba(34,211,238,0.05) 0%, transparent 70%);
|
||||
}
|
||||
.cta-text h3 { font-family: var(--font-display); font-size: 24px; font-weight: 700; color: var(--ink); margin-bottom: 8px; }
|
||||
.cta-text p { font-size: 14px; color: var(--ink-3); max-width: 44ch; }
|
||||
.cta-btn {
|
||||
display: inline-flex; align-items: center; gap: 8px;
|
||||
background: var(--accent); color: #080d18;
|
||||
font-weight: 600; font-size: 14px;
|
||||
padding: 11px 22px; border-radius: var(--r-lg);
|
||||
white-space: nowrap; transition: opacity 140ms;
|
||||
}
|
||||
.cta-btn:hover { opacity: 0.85; }
|
||||
|
||||
footer { border-top: 1px solid var(--line); padding: 24px; text-align: center; font-family: var(--font-mono); font-size: 11px; color: var(--ink-4); letter-spacing: 0.06em; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<div class="brand"><div class="brand-dot"></div>Minds Cowork</div>
|
||||
<div class="nav-links">
|
||||
<a href="index.html">Docs</a>
|
||||
<a href="setup.html">Setup</a>
|
||||
<a href="use-cases.html" class="active">Use Cases</a>
|
||||
<a href="api.html">API</a>
|
||||
<a href="https://github.com/mindsdb/minds-platform">GitHub ↗</a>
|
||||
</div>
|
||||
<button class="hamburger" aria-label="Toggle menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="hero-wrap">
|
||||
<div class="eyebrow">Use Cases</div>
|
||||
<h1>Two things.<br><em>Automate</em> and <em>Create.</em></h1>
|
||||
<p class="lede">
|
||||
Minds Cowork is built around two core primitives. Everything below is an expression of one or both.
|
||||
</p>
|
||||
<div class="primitives">
|
||||
<div class="primitive">
|
||||
<div class="p-label"><span>Automate</span></div>
|
||||
<div class="p-desc">Recurring tasks that run without you — reports, monitoring, workflows, digests.</div>
|
||||
</div>
|
||||
<div class="primitive">
|
||||
<div class="p-label"><span>Create</span></div>
|
||||
<div class="p-desc">Artifacts that used to take hours — apps, decks, docs, analyses, dashboards.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="personas">
|
||||
|
||||
<!-- Creators -->
|
||||
<div class="persona-block creators">
|
||||
<div class="persona-header">
|
||||
<div class="persona-icon">✦</div>
|
||||
<div>
|
||||
<h2>Creators</h2>
|
||||
<div class="persona-sub">Writers, designers, content teams</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="use-case-grid">
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Automate</span>
|
||||
<div class="uc-title">Content pipeline on autopilot</div>
|
||||
<div class="uc-desc">Draft, research, and publish in one run. The agent handles the full workflow from brief to publication.</div>
|
||||
<div class="uc-flow">blog → social → newsletter</div>
|
||||
</div>
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Automate</span>
|
||||
<div class="uc-title">Repurpose long-form content</div>
|
||||
<div class="uc-desc">Feed a transcript or essay and get a Twitter thread, LinkedIn post, and email summary — automatically.</div>
|
||||
<div class="uc-flow">video → clips → captions → posts</div>
|
||||
</div>
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Create</span>
|
||||
<div class="uc-title">Personal knowledge base</div>
|
||||
<div class="uc-desc">Upload your notes, docs, and bookmarks. Ask questions in plain language and get answers that actually reference your material.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Operators -->
|
||||
<div class="persona-block operators">
|
||||
<div class="persona-header">
|
||||
<div class="persona-icon">⬡</div>
|
||||
<div>
|
||||
<h2>Operators</h2>
|
||||
<div class="persona-sub">Sales, support, finance, engineering teams</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="use-case-grid">
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Automate</span>
|
||||
<div class="uc-title">Live data reports, written for you</div>
|
||||
<div class="uc-desc">Connect your data source and set a schedule. Every Monday the agent pulls fresh numbers and writes the summary.</div>
|
||||
<div class="uc-flow">data → analysis → digest → send</div>
|
||||
</div>
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Automate</span>
|
||||
<div class="uc-title">Meeting notes to tasks</div>
|
||||
<div class="uc-desc">Paste a transcript or upload a recording. The agent extracts action items and creates tasks — hands-free.</div>
|
||||
<div class="uc-flow">meeting → notes → actions → tasks</div>
|
||||
</div>
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Automate</span>
|
||||
<div class="uc-title">Thread monitoring and triage</div>
|
||||
<div class="uc-desc">Monitor a Slack channel or email thread and surface only what actually needs a decision — nothing else.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Strategists -->
|
||||
<div class="persona-block strategists">
|
||||
<div class="persona-header">
|
||||
<div class="persona-icon">◈</div>
|
||||
<div>
|
||||
<h2>Strategists</h2>
|
||||
<div class="persona-sub">Analysts, founders, product and research teams</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="use-case-grid">
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Create</span>
|
||||
<div class="uc-title">Ask across all your data</div>
|
||||
<div class="uc-desc">Query across docs, tickets, spreadsheets, and databases in plain language. No SQL, no dashboards.</div>
|
||||
</div>
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Automate</span>
|
||||
<div class="uc-title">Competitive research digest</div>
|
||||
<div class="uc-desc">Run a competitor sweep on a schedule. Every week you get a structured digest of what changed — pricing, features, messaging.</div>
|
||||
<div class="uc-flow">sources → extract → compare → report</div>
|
||||
</div>
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Create</span>
|
||||
<div class="uc-title">Synthesize feedback at scale</div>
|
||||
<div class="uc-desc">Feed support tickets, reviews, and survey responses. Get back themes, sentiment, and concrete product signal.</div>
|
||||
<div class="uc-flow">feedback → themes → insights → action</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Everyone -->
|
||||
<div class="persona-block everyone">
|
||||
<div class="persona-header">
|
||||
<div class="persona-icon">◇</div>
|
||||
<div>
|
||||
<h2>For everyone</h2>
|
||||
<div class="persona-sub">Any knowledge worker with repetitive work</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="use-case-grid">
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Automate</span>
|
||||
<div class="uc-title">Automate any multi-step task</div>
|
||||
<div class="uc-desc">If it involves reading something and writing something else on a schedule, the agent can own it.</div>
|
||||
</div>
|
||||
<div class="uc-card">
|
||||
<span class="uc-tag">Create</span>
|
||||
<div class="uc-title">Build internal AI tools</div>
|
||||
<div class="uc-desc">Describe what your team needs. The agent builds it — a web app, a form, a dashboard — and deploys it, no engineering required.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="cta-wrap">
|
||||
<div class="cta-block">
|
||||
<div class="cta-text">
|
||||
<h3>Ready to build?</h3>
|
||||
<p>Set up the platform in minutes and start automating your first workflow today.</p>
|
||||
</div>
|
||||
<a href="setup.html" class="cta-btn">Get started →</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
Minds Platform · Open Source · <a href="https://github.com/mindsdb/minds-platform">github.com/mindsdb/minds-platform</a>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
document.querySelector('.hamburger').addEventListener('click', function() {
|
||||
const nav = this.closest('nav');
|
||||
nav.toggleAttribute('data-open');
|
||||
});
|
||||
document.querySelectorAll('.nav-links a').forEach(function(a) {
|
||||
a.addEventListener('click', function() {
|
||||
document.querySelector('nav').removeAttribute('data-open');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user