Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Docs

on:
push:
branches: [feature/gap-filling]
paths:
- 'website/**'
- '.github/workflows/docs.yml'
pull_request:
paths:
- 'website/**'
- '.github/workflows/docs.yml'

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4
with:
version: 9

- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm

- run: pnpm install --frozen-lockfile

- name: Build Docusaurus site
run: pnpm docs:build

- name: Upload build artifact
uses: actions/upload-pages-artifact@v3
with:
path: website/build
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,10 @@ markus.json.lock
# Auto-generated API docs (regenerate via typedoc)
docs/api/
docs/api-test/

# Docusaurus website build output
website/build/
website/.docusaurus/
website/.cache/
website/node_modules/
package-lock.json
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
"typecheck": "tsc -b && tsc --noEmit -p packages/web-ui",
"quality": "npm run typecheck && npm run test",
"quality": "pnpm typecheck && pnpm test",
"docs:build": "cd website && pnpm build",
"docs:dev": "cd website && pnpm dev",
"docs:serve": "cd website && pnpm serve",
"clean": "pnpm -r clean",
"test:gui": "tsx test-gui-integration.ts",
"example:gui": "tsx examples/gui-automation-workflow.ts",
Expand Down
21,102 changes: 15,314 additions & 5,788 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
packages:
- "packages/*"
- "website"
5 changes: 5 additions & 0 deletions website/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Docusaurus
node_modules/
build/
.docusaurus/
.cache/
1 change: 1 addition & 0 deletions website/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
link-workspace-packages=false
10 changes: 10 additions & 0 deletions website/blog/2026-06-01-welcome/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
slug: welcome
title: Welcome to Markus
authors: [markus-team]
tags: [markus, release, announcement]
---

Markus is an open-source AI Digital Employee Platform that lets you hire, manage, and coordinate multiple AI agents that work like real employees.

Stay tuned for updates on new features, releases, and community contributions.
4 changes: 4 additions & 0 deletions website/blog/authors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
markus-team:
name: Markus Team
title: Markus Team
url: https://github.com/markus
139 changes: 139 additions & 0 deletions website/docs/api/agents.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
---
sidebar_position: 2
---

# Agents API

## List Agents

```http
GET /api/agents
```

Returns a paginated list of all agents.

**Query Parameters:**

| Param | Type | Description |
| -------- | ------- | ------------------------------------ |
| `status` | string | Filter by status (`idle`, `working`, `busy`, `offline`) |
| `page` | integer | Page number (default: `1`) |
| `limit` | integer | Items per page (default: `20`) |

**Response** `200 OK`:

```json
{
"data": [
{
"id": "agt_abc123",
"name": "Alice",
"status": "idle",
"skills": ["web-search", "code-review"],
"created_at": "2024-01-15T10:30:00Z"
}
],
"meta": { "page": 1, "limit": 20, "total": 42 }
}
```

## Create Agent

```http
POST /api/agents
```

Register a new agent.

**Request Body:**

```json
{
"name": "Alice",
"skills": ["web-search", "code-review"],
"config": { "timeout_ms": 60000 }
}
```

**Response** `201 Created`:

```json
{
"id": "agt_abc123",
"name": "Alice",
"status": "idle",
"skills": ["web-search", "code-review"],
"created_at": "2024-01-15T10:30:00Z"
}
```

## Get Agent

```http
GET /api/agents/:id
```

Retrieve a single agent by ID.

**Response** `200 OK`:

```json
{
"id": "agt_abc123",
"name": "Alice",
"status": "idle",
"skills": ["web-search", "code-review"],
"created_at": "2024-01-15T10:30:00Z"
}
```

**Response** `404 Not Found`:

```json
{ "error": "agent not found", "code": 404 }
```

## Update Agent

```http
PATCH /api/agents/:id
```

Partially update an agent's fields.

**Request Body:**

```json
{
"status": "busy",
"skills": ["web-search", "code-review", "memory"]
}
```

**Response** `200 OK`:

```json
{
"id": "agt_abc123",
"name": "Alice",
"status": "busy",
"skills": ["web-search", "code-review", "memory"],
"updated_at": "2024-01-15T11:00:00Z"
}
```

## Delete Agent

```http
DELETE /api/agents/:id
```

Remove an agent from the system.

**Response** `204 No Content` — no body returned.

**Response** `404 Not Found`:

```json
{ "error": "agent not found", "code": 404 }
```
88 changes: 88 additions & 0 deletions website/docs/api/chat.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
sidebar_position: 5
---

# Chat API

## POST /api/chat

Send a message to the chat assistant. Returns a **Server-Sent Events (SSE)** stream.

**Request body**

| Field | Type | Description |
|----------|----------|--------------------------------|
| content | `string` | The user message text |
| sessionId| `string` | Optional. Existing session ID |

**SSE streaming response format**

```
event: message
data: {"content":"Hello","role":"assistant"}

event: message
data: {"content":" How can","role":"assistant"}

event: done
data: {"sessionId":"abc123"}
```

Events: `message` (chunk of assistant reply), `done` (stream complete, includes `sessionId`).

**Example — cURL**

```bash
curl -X POST http://localhost:3000/api/chat \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"content":"What is Markus?"}'
```

---

## GET /api/chat/sessions

List all chat sessions for the authenticated user.

**Response**

| Field | Type | Description |
|------------|------------|------------------------------|
| sessions | `object[]` | Array of session objects |
| sessions[].id | `string` | Session ID |
| sessions[].title | `string` | Auto-generated title |
| sessions[].createdAt | `string` | ISO-8601 timestamp |

**Example response**

```json
{
"sessions": [
{
"id": "abc123",
"title": "What is Markus?",
"createdAt": "2025-01-15T10:30:00Z"
}
]
}
```

---

## DELETE /api/chat/sessions/:id

Delete a specific chat session and all its messages.

| Parameter | Type | Description |
|-----------|----------|------------------------|
| id | `string` | Path parameter — session ID |

**Response** — `204 No Content`

**Errors**

| Status Code | Description |
|-------------|----------------------------------|
| 404 | Session not found |
| 401 | Unauthorized — invalid or missing token |
Loading
Loading