Skip to content
Merged
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
8 changes: 8 additions & 0 deletions content/sync.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ The default store is in memory and is lost on restart. Set `SYNC_S3_BUCKET` (and

Sync does not run agents, merge pull requests, or execute jobs. Workers that claim a job are what run the payload.

## Compare-and-swap

CAS is compare-and-swap. Sync keeps JSON documents, not rows in a SQL database. Each document has an ETag, a version stamp from the last write.

An update sends that stamp as `If-Match`. The write succeeds only if the document is still the version you read. If another worker wrote first, Sync returns `412` and you read again.

That is how two agents can share a session or claim a job without silently overwriting each other.

## MCP companion

MCP clients should not call that HTTP API themselves. [sync-mcp](https://github.com/aixgo-dev/sync-mcp) is a stdio MCP server that wraps Sync and exposes sessions, messages and jobs as tools.
Expand Down
4 changes: 2 additions & 2 deletions data/sync.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ hero:

stats:
- value: "CAS"
label: "JSON objects with If-Match / ETag"
label: "Compare-and-swap: a write is rejected if the document changed since you read it"
accent: true
- value: "org/project"
label: "Tenant path and API-key scope"
Expand Down Expand Up @@ -51,7 +51,7 @@ cannot:
roadmap:
- version: "v0.1.0"
state: "done"
item: "CAS store, tenant keys, HTTP sessions, messages and jobs"
item: "Compare-and-swap store, tenant keys, HTTP sessions, messages and jobs"
- version: "next"
state: "progress"
item: "Desired-state GET/PUT, session attach, device register"
Expand Down
4 changes: 2 additions & 2 deletions layouts/_default/products.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ <h1 class="ax-hero__title">{{ .Title }}</h1>
<section class="ax-section ax-section--alt ax-textured">
<div class="ax-wrap">
<div class="ax-grid ax-grid--2">
<a class="ax-card sibling-card" href="/">
<a class="ax-card ax-listcard sibling-card" href="/">
<h2>Framework</h2>
<p>The Go framework for building agents. One module, one binary.</p>
<p class="ax-microlabel sibling-status">MIT</p>
</a>
{{- range hugo.Data.products }}
<a class="ax-card sibling-card" href="{{ .url }}">
<a class="ax-card ax-listcard sibling-card" href="{{ .url }}">
<h2>{{ .name }}</h2>
<p>{{ .description }}</p>
<p class="ax-microlabel sibling-status">{{ .status }}</p>
Expand Down
2 changes: 1 addition & 1 deletion layouts/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ <h2>Aixgo builds agents. Code, Aixgate and Sync handle the rest.</h2>

<div class="ax-grid ax-grid--3">
{{- range hugo.Data.products }}
<a class="ax-card sibling-card" href="{{ .url }}">
<a class="ax-card ax-listcard sibling-card" href="{{ .url }}">
<h3>{{ .name }}</h3>
<p>{{ .description }}</p>
<p class="ax-microlabel sibling-status">{{ .status }}</p>
Expand Down
1 change: 1 addition & 0 deletions static/css/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@
border-radius: var(--ax-r-lg);
padding: var(--ax-s-5);
box-shadow: var(--ax-e-1);
overflow-wrap: break-word;
transition:
border-color var(--ax-dur-1) var(--ax-ease),
box-shadow var(--ax-dur-2) var(--ax-ease),
Expand Down
5 changes: 5 additions & 0 deletions static/css/sections.css
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,10 @@
letter-spacing: -0.028em;
line-height: 1.04;
color: var(--ax-text);
/* Global h1 uses text-wrap: balance, which will keep a short title on
one line even when it overflows. The hero clips overflow, so wrap. */
text-wrap: wrap;
overflow-wrap: break-word;
}

.ax-hero .ax-rule { margin-top: 1.25rem; }
Expand Down Expand Up @@ -955,6 +959,7 @@
.ax-listcard {
display: block;
text-decoration: none;
color: inherit;
}

.ax-listcard__meta { margin-bottom: var(--ax-s-3); }
Expand Down
Loading