Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
cd3efef
fix(v2): stop a third-party tool description from 500ing MCP discovery
waleedlatif1 Aug 12, 2026
0dc8b27
fix(v2): close correctness gaps in the workflows deployment surface
waleedlatif1 Aug 12, 2026
ac276e8
fix(v2): conceal knowledge upload existence, tighten knowledge/files …
waleedlatif1 Aug 12, 2026
86e12f0
fix(v2): publish the reachable 413 on body-carrying resources ops
waleedlatif1 Aug 12, 2026
76c6602
fix(v2): head-safe binary downloads, coded 403s, and truthful surface…
waleedlatif1 Aug 12, 2026
f815f1a
fix(tables): close the v2 tables correctness and contract gaps
waleedlatif1 Aug 12, 2026
86b708b
Merge remote-tracking branch 'origin/fix/v2-cross' into integrate/v2-…
waleedlatif1 Aug 12, 2026
289276b
Merge remote-tracking branch 'origin/fix/v2-mcp' into integrate/v2-ha…
waleedlatif1 Aug 12, 2026
6787999
Merge remote-tracking branch 'origin/fix/v2-wf' into integrate/v2-har…
waleedlatif1 Aug 12, 2026
e8673d3
Merge remote-tracking branch 'origin/fix/v2-know' into integrate/v2-h…
waleedlatif1 Aug 12, 2026
dcd98e3
Merge remote-tracking branch 'origin/fix/v2-tables' into integrate/v2…
waleedlatif1 Aug 12, 2026
fd68bf8
docs(v2): record why the two migrate-on-read GETs stay head-safe
waleedlatif1 Aug 12, 2026
a7c03d9
fix(api): classify the caller input that reached the driver unvalidated
waleedlatif1 Aug 12, 2026
1bf324d
fix(v2): stop six endpoints from returning a confident untruth
waleedlatif1 Aug 12, 2026
551de85
fix(tables): refuse the writes v2 was silently discarding
waleedlatif1 Aug 12, 2026
fb56439
fix(v2): bind every paged list's cursor to its filters, not just its …
waleedlatif1 Aug 13, 2026
c3fc82f
Merge remote-tracking branch 'origin/fix/w2-cursor' into integrate/v2-w2
waleedlatif1 Aug 13, 2026
972c195
Merge remote-tracking branch 'origin/fix/w2-tblife' into integrate/v2-w2
waleedlatif1 Aug 13, 2026
563a7ee
Merge remote-tracking branch 'origin/fix/w2-semantic' into integrate/…
waleedlatif1 Aug 13, 2026
44bd442
fix(v2): authorize HEAD probes and declare every v2 query schema
waleedlatif1 Aug 13, 2026
05e696b
test(tables): pin the multiselect paste on the refusal, not the silen…
waleedlatif1 Aug 13, 2026
bf36724
Merge remote-tracking branch 'origin/fix/w2-strict' into integrate/v2-w2
waleedlatif1 Aug 13, 2026
6c8904f
docs(v2): make the API-key security description render as plain prose
waleedlatif1 Aug 13, 2026
a480a8e
fix(v2): bind the query cursor to its filter on every shape
waleedlatif1 Aug 13, 2026
43e5817
fix(tables): make a saved view's column references survive the write
waleedlatif1 Aug 13, 2026
6b37747
fix(storage): validate at the decode and multipart boundaries, bound …
waleedlatif1 Aug 13, 2026
8e357cf
docs(v2): make the published spec describe the API it has
waleedlatif1 Aug 13, 2026
84e5594
fix(v2): make upload completion, blank query values, search, and fold…
waleedlatif1 Aug 13, 2026
be37868
Merge remote-tracking branch 'origin/fix/w3-storage' into integrate/v…
waleedlatif1 Aug 13, 2026
53dd05a
Merge remote-tracking branch 'origin/fix/w3-docs' into integrate/v2-w3
waleedlatif1 Aug 13, 2026
e9d6e55
Merge remote-tracking branch 'origin/fix/w3-upload' into integrate/v2-w3
waleedlatif1 Aug 13, 2026
b50f478
chore(v2): regenerate the specs from the merged sources
waleedlatif1 Aug 13, 2026
4313202
docs(v2): give a built-in skill's id its real form
waleedlatif1 Aug 13, 2026
b2de45e
Merge remote-tracking branch 'origin/staging' into integrate/v2-w3
waleedlatif1 Aug 13, 2026
46c8fcb
fix(uploads): keep local upload artifacts inside NAME_MAX
waleedlatif1 Aug 13, 2026
aa47166
fix(uploads): budget every key built from a caller-supplied name
waleedlatif1 Aug 13, 2026
710ad21
fix(v2): stop the logs and billing reads answering 500 or a silent re…
waleedlatif1 Aug 13, 2026
0748d10
fix(v2): pin naive timestamps to UTC and close six contract divergences
waleedlatif1 Aug 13, 2026
3ed6ed6
improvement(v2): cut the extraneous half out of the published descrip…
waleedlatif1 Aug 13, 2026
edd59ef
Merge remote-tracking branch 'origin/fix/w4-upload' into integrate/v2-w4
waleedlatif1 Aug 13, 2026
55e6546
Merge remote-tracking branch 'origin/fix/w4-logs' into integrate/v2-w4
waleedlatif1 Aug 13, 2026
4819224
Merge remote-tracking branch 'origin/fix/w4-consistency' into integra…
waleedlatif1 Aug 13, 2026
165db83
fix(v2): keep one unreadable-cursor message
waleedlatif1 Aug 13, 2026
1ae4a72
fix(v2): bind a cursor to what a set filter means, not how it was spe…
waleedlatif1 Aug 13, 2026
f8f568e
fix(v2, db): make two unfalsifiable tests observable and document str…
waleedlatif1 Aug 13, 2026
f9c6330
fix(w5): narrow three fixes that reached past the harm they were fixing
waleedlatif1 Aug 13, 2026
acc7207
fix(tables): confine the write-policy tightening to what the caller sent
waleedlatif1 Aug 13, 2026
f3ac68e
Merge remote-tracking branch 'origin/fix/w5-txn' into integrate/v2-w5
waleedlatif1 Aug 13, 2026
5c3014f
Merge remote-tracking branch 'origin/fix/w5-tables2' into integrate/v…
waleedlatif1 Aug 13, 2026
75357db
test(db): narrow the mapped timestamp to Date
waleedlatif1 Aug 13, 2026
9f9aca8
fix(v2): correct four stale contracts and clear the merge debris behi…
waleedlatif1 Aug 13, 2026
4fb855d
fix(v2): de-duplicate a set filter before fingerprinting it
waleedlatif1 Aug 13, 2026
1fac7df
Merge remote-tracking branch 'origin/fix/w6-tidy' into integrate/v2-w5
waleedlatif1 Aug 13, 2026
922ac91
fix(w6): close a head-authorization hole, a TZ leak, and five tests t…
waleedlatif1 Aug 13, 2026
85b3734
Merge remote-tracking branch 'origin/fix/w6-risk' into integrate/v2-w5
waleedlatif1 Aug 13, 2026
fa3724c
Merge remote-tracking branch 'origin/staging' into integrate/v2-w5
waleedlatif1 Aug 13, 2026
6fd3189
Merge remote-tracking branch 'origin/staging' into integrate/v2-w5
waleedlatif1 Aug 13, 2026
f2bdd58
refactor(v2): collapse two names for the cursor scope key onto one he…
waleedlatif1 Aug 13, 2026
f01d93e
refactor: delete three pieces of surface this branch added with no co…
waleedlatif1 Aug 13, 2026
872a8d4
docs(v2): state why the local upload data-plane routes bypass the bui…
waleedlatif1 Aug 13, 2026
cf186ac
test(v2): pin cursor-to-filter binding on the tables and runs lists
waleedlatif1 Aug 13, 2026
9aaf865
fix(tables): keep the v2 write strictness inside v2
waleedlatif1 Aug 13, 2026
586e246
test(v2): pin cursor-to-filter binding on seven more paged lists
waleedlatif1 Aug 13, 2026
4d1d130
test: cover four untested behaviors and drop five tests that cannot fail
waleedlatif1 Aug 13, 2026
c36c1b2
Merge branch 'fix/w8-neutral' of https://github.com/simstudioai/sim i…
waleedlatif1 Aug 13, 2026
b586897
Merge remote-tracking branch 'origin/staging' into integrate/v2-w5
waleedlatif1 Aug 13, 2026
ea5cf64
fix(v2): parse a bound list filter once, so the scope matches the query
waleedlatif1 Aug 13, 2026
2996814
Merge remote-tracking branch 'origin/staging' into integrate/v2-w5
waleedlatif1 Aug 13, 2026
9ad50fd
fix(v2): bind an AND-conjoined filter array as a set, not a sequence
waleedlatif1 Aug 13, 2026
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
34 changes: 24 additions & 10 deletions .agents/skills/v2-api-conventions/SKILL.md

Large diffs are not rendered by default.

34 changes: 24 additions & 10 deletions .claude/commands/v2-api-conventions.md

Large diffs are not rendered by default.

34 changes: 24 additions & 10 deletions .cursor/commands/v2-api-conventions.md

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ Dockerfile* text eol=lf
.gitignore text eol=lf
.gitattributes text eol=lf

# Source files always diff as text. Git otherwise classifies a whole file as
# binary the moment it contains a NUL byte, hiding every line of it from review.
*.ts diff
*.tsx diff
*.js diff
*.jsx diff
*.json diff
*.md diff

# Denote all files that are truly binary and should not be modified
*.png binary
*.jpg binary
Expand Down
Binary file modified apps/desktop/src/main/downloads.test.ts
Binary file not shown.
18 changes: 18 additions & 0 deletions apps/docs/content/docs/de/api-reference/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,24 @@ The API uses standard HTTP status codes. v2 errors include a stable code and hum
| `404` | Resource not found | Verify the ID exists and belongs to your workspace |
| `429` | Rate limit exceeded | Wait for the duration in the `Retry-After` header |

### Unrecognized fields are rejected

Every v2 endpoint validates the request against its published schema — path parameters, query string, and body — and answers `400` for any field it does not declare. A misspelled parameter is an error rather than a silent no-op, so `?limt=20` fails instead of quietly returning an unbounded list.

This holds for endpoints that declare no query parameters at all. Do not append tracking tags, cache busters, or other extra parameters to a v2 URL; send only what the endpoint documents.

```json
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request",
"details": [
{ "code": "unrecognized_keys", "keys": ["limt"], "path": [], "message": "Unrecognized key: \"limt\"" }
]
}
}
```

<Callout type="info">
Use [Get Billing Status](/api-reference/billing/getBillingStatus) to inspect current credit and storage usage.
</Callout>
Expand Down
18 changes: 18 additions & 0 deletions apps/docs/content/docs/en/api-reference/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,24 @@ The API uses standard HTTP status codes. v2 errors include a stable code and hum
| `404` | Resource not found | Verify the ID exists and belongs to your workspace |
| `429` | Rate limit exceeded | Wait for the duration in the `Retry-After` header |

### Unrecognized fields are rejected

Every v2 endpoint validates the request against its published schema — path parameters, query string, and body — and answers `400` for any field it does not declare. A misspelled parameter is an error rather than a silent no-op, so `?limt=20` fails instead of quietly returning an unbounded list.

This holds for endpoints that declare no query parameters at all. Do not append tracking tags, cache busters, or other extra parameters to a v2 URL; send only what the endpoint documents.

```json
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request",
"details": [
{ "code": "unrecognized_keys", "keys": ["limt"], "path": [], "message": "Unrecognized key: \"limt\"" }
]
}
}
```

<Callout type="info">
Use [Get Billing Status](/api-reference/billing/getBillingStatus) to inspect current credit and storage usage.
</Callout>
Expand Down
18 changes: 18 additions & 0 deletions apps/docs/content/docs/es/api-reference/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,24 @@ The API uses standard HTTP status codes. v2 errors include a stable code and hum
| `404` | Resource not found | Verify the ID exists and belongs to your workspace |
| `429` | Rate limit exceeded | Wait for the duration in the `Retry-After` header |

### Unrecognized fields are rejected

Every v2 endpoint validates the request against its published schema — path parameters, query string, and body — and answers `400` for any field it does not declare. A misspelled parameter is an error rather than a silent no-op, so `?limt=20` fails instead of quietly returning an unbounded list.

This holds for endpoints that declare no query parameters at all. Do not append tracking tags, cache busters, or other extra parameters to a v2 URL; send only what the endpoint documents.

```json
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request",
"details": [
{ "code": "unrecognized_keys", "keys": ["limt"], "path": [], "message": "Unrecognized key: \"limt\"" }
]
}
}
```

<Callout type="info">
Use [Get Billing Status](/api-reference/billing/getBillingStatus) to inspect current credit and storage usage.
</Callout>
Expand Down
18 changes: 18 additions & 0 deletions apps/docs/content/docs/fr/api-reference/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,24 @@ The API uses standard HTTP status codes. v2 errors include a stable code and hum
| `404` | Resource not found | Verify the ID exists and belongs to your workspace |
| `429` | Rate limit exceeded | Wait for the duration in the `Retry-After` header |

### Unrecognized fields are rejected

Every v2 endpoint validates the request against its published schema — path parameters, query string, and body — and answers `400` for any field it does not declare. A misspelled parameter is an error rather than a silent no-op, so `?limt=20` fails instead of quietly returning an unbounded list.

This holds for endpoints that declare no query parameters at all. Do not append tracking tags, cache busters, or other extra parameters to a v2 URL; send only what the endpoint documents.

```json
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request",
"details": [
{ "code": "unrecognized_keys", "keys": ["limt"], "path": [], "message": "Unrecognized key: \"limt\"" }
]
}
}
```

<Callout type="info">
Use [Get Billing Status](/api-reference/billing/getBillingStatus) to inspect current credit and storage usage.
</Callout>
Expand Down
18 changes: 18 additions & 0 deletions apps/docs/content/docs/ja/api-reference/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,24 @@ The API uses standard HTTP status codes. v2 errors include a stable code and hum
| `404` | Resource not found | Verify the ID exists and belongs to your workspace |
| `429` | Rate limit exceeded | Wait for the duration in the `Retry-After` header |

### Unrecognized fields are rejected

Every v2 endpoint validates the request against its published schema — path parameters, query string, and body — and answers `400` for any field it does not declare. A misspelled parameter is an error rather than a silent no-op, so `?limt=20` fails instead of quietly returning an unbounded list.

This holds for endpoints that declare no query parameters at all. Do not append tracking tags, cache busters, or other extra parameters to a v2 URL; send only what the endpoint documents.

```json
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request",
"details": [
{ "code": "unrecognized_keys", "keys": ["limt"], "path": [], "message": "Unrecognized key: \"limt\"" }
]
}
}
```

<Callout type="info">
Use [Get Billing Status](/api-reference/billing/getBillingStatus) to inspect current credit and storage usage.
</Callout>
Expand Down
18 changes: 18 additions & 0 deletions apps/docs/content/docs/zh/api-reference/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,24 @@ The API uses standard HTTP status codes. v2 errors include a stable code and hum
| `404` | Resource not found | Verify the ID exists and belongs to your workspace |
| `429` | Rate limit exceeded | Wait for the duration in the `Retry-After` header |

### Unrecognized fields are rejected

Every v2 endpoint validates the request against its published schema — path parameters, query string, and body — and answers `400` for any field it does not declare. A misspelled parameter is an error rather than a silent no-op, so `?limt=20` fails instead of quietly returning an unbounded list.

This holds for endpoints that declare no query parameters at all. Do not append tracking tags, cache busters, or other extra parameters to a v2 URL; send only what the endpoint documents.

```json
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request",
"details": [
{ "code": "unrecognized_keys", "keys": ["limt"], "path": [], "message": "Unrecognized key: \"limt\"" }
]
}
}
```

<Callout type="info">
Use [Get Billing Status](/api-reference/billing/getBillingStatus) to inspect current credit and storage usage.
</Callout>
Expand Down
Loading
Loading