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
36 changes: 32 additions & 4 deletions api/tinyhumans.backend.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
"url": "https://api.tinyhumans.ai/swagger.json",
"title": "TinyHumans API",
"version": "1.0.0",
"pathCount": 243,
"totalOperationCount": 269,
"operationCount": 212,
"pathCount": 256,
"totalOperationCount": 286,
"operationCount": 229,
"supplementalOperationCount": 13,
"excludedAdminOperationCount": 49,
"excludedWebhookOperationCount": 12,
Expand All @@ -34,14 +34,16 @@
"name": "agentIntegrations",
"basePath": "/agent-integrations",
"auth": "mixed",
"operationCount": 78,
"operationCount": 94,
"tags": [
"Agent Integrations",
"OpenHuman parity"
],
"routes": [
"DELETE /agent-integrations/composio/connections/{connectionId}",
"DELETE /agent-integrations/composio/triggers/{triggerId}",
"DELETE /agent-integrations/exa/agent/runs/{runId}",
"DELETE /agent-integrations/exa/batches/{batchId}",
"DELETE /agent-integrations/file-storage/files/{fileId}",
"GET /agent-integrations/apify/runs/{runId}",
"GET /agent-integrations/apify/runs/{runId}/results",
Expand All @@ -52,6 +54,11 @@
"GET /agent-integrations/composio/triggers",
"GET /agent-integrations/composio/triggers/available",
"GET /agent-integrations/crypto/routes",
"GET /agent-integrations/exa/agent/runs",
"GET /agent-integrations/exa/agent/runs/{runId}",
"GET /agent-integrations/exa/agent/runs/{runId}/events",
"GET /agent-integrations/exa/batches",
"GET /agent-integrations/exa/batches/{batchId}",
"GET /agent-integrations/file-storage/files",
"GET /agent-integrations/file-storage/files/{fileId}",
"GET /agent-integrations/file-storage/files/{fileId}/download",
Expand Down Expand Up @@ -82,6 +89,15 @@
"POST /agent-integrations/composio/triggers",
"POST /agent-integrations/crypto/bridge",
"POST /agent-integrations/crypto/swap",
"POST /agent-integrations/exa/agent/runs",
"POST /agent-integrations/exa/agent/runs/{runId}/cancel",
"POST /agent-integrations/exa/agent/runs/{runId}/stop",
"POST /agent-integrations/exa/answer",
"POST /agent-integrations/exa/batches",
"POST /agent-integrations/exa/batches/{batchId}/cancel",
"POST /agent-integrations/exa/contents",
"POST /agent-integrations/exa/findSimilar",
"POST /agent-integrations/exa/search",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Wait to advertise the Exa route until it is deployed

If this SDK ships while the backend implementation is still pending, callers that trust this generated manifest will see POST /agent-integrations/exa/search advertised as part of the deployed contract but receive a missing-route response in production. Keep it out of the public registry until it appears in the deployed Swagger document, or land the backend deployment first.

AGENTS.md reference: AGENTS.md:L12-L19

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium security confident

Add the Exa operation to the typed SDK surface

This manifest entry introduces a public operation, but no Rust API method or request/response types for /agent-integrations/exa/search exist under src. Although the generated raw-route registry contains the route, the repository contract requires each public operation to have matching Rust methods, types, and route tests. Add the typed Exa client surface and its tests, or remove the manifest entry if the operation is not intended to be public.

[RULE] contract-sync ·

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium critique confident

Add the Exa operation to the typed SDK surface

This adds the Exa search operation to the public contract, but the repository search shows no Exa module, request/response types, or typed client method. Callers can only use the raw escape hatch despite this being presented as part of the stable SDK surface. Add the typed operation in the matching namespace and keep its request and response types aligned with the deployed contract.

[RULE] typed-sdk-surface ·

"POST /agent-integrations/file-storage/files",
"POST /agent-integrations/file-storage/files/{fileId}/link",
"POST /agent-integrations/financial-apis/commodity",
Expand Down Expand Up @@ -461,6 +477,18 @@
"PUT /teams/{teamId}/members/{userId}/role"
]
},
{
"name": "telemetry",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium critique confident

Include the telemetry route in the pull request description

The pull request description does not document the newly added telemetry route, even though it introduces a distinct public namespace and ingestion endpoint. Update the pull request description to explain the route, its authentication, and why it is part of the public SDK contract.

[RULE] contract-documentation ·

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium critique confident

Keep unrelated route families in separate changes

This change bundles a large Exa integration expansion with an unrelated Langfuse telemetry namespace. The repository requires small, coherent contract changes; splitting telemetry from the Exa integration would make review, regeneration, and rollback of each route family independent.

[RULE] coherent-changes ·

"basePath": "/telemetry",
"auth": "bearer",
"operationCount": 1,
"tags": [
"Telemetry"
],
"routes": [
"POST /telemetry/langfuse/otel/v1/traces"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority critical security confident

Generate the telemetry route in the SDK registry

This adds a public manifest route, but the route is absent from src/generated_public_routes.rs. The manifest/registry parity test will therefore fail, and the raw SDK route guard will reject this endpoint. Regenerate the public route registry from the matching contract and add the required route test and typed client surface before merging.

[RULE] generated-surface-sync ·

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium critique confident

Add typed methods and route tests for the new Exa search and telemetry routes

The manifest and generated registry expose these new routes, but the repository contains no typed Exa or telemetry client methods and no mock-server route tests for them. This leaves serialization, paths, and envelope handling unverified and violates the repository rule requiring matching Rust methods, types, and route tests for contract changes. Add those methods and tests before merging.


Additional security observation

priority medium confident

Add typed methods and route tests for the new Exa search and telemetry routes

[RULE] missing-typed-methods

The new Exa and telemetry routes are present in the manifest and route registry, but there are no corresponding typed Rust methods, request/response types, or mock-server route tests. The repository's SDK discipline requires those pieces to be added together so serialization and route regressions are exercised.


Additional security observation

priority medium confident

Keep unrelated Exa and telemetry routes in separate changes

[RULE] incoherent-contract-change

This change combines a large Exa integration expansion with an unrelated Langfuse telemetry route, while neither has its matching typed SDK surface and tests in the same contract update. Split the unrelated route families or include their complete, independently testable implementations together.

[RULE] missing-route-tests ·

]
},
{
"name": "voiceAgent",
"basePath": "/voice-agent",
Expand Down
17 changes: 17 additions & 0 deletions src/generated_public_routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,22 @@ pub const PUBLIC_ROUTES: &[(&str, &str)] = &[
("POST", "/agent-integrations/crypto/bridge"),
("GET", "/agent-integrations/crypto/routes"),
("POST", "/agent-integrations/crypto/swap"),
("GET", "/agent-integrations/exa/agent/runs"),
("POST", "/agent-integrations/exa/agent/runs"),
("DELETE", "/agent-integrations/exa/agent/runs/{runId}"),
("GET", "/agent-integrations/exa/agent/runs/{runId}"),
("POST", "/agent-integrations/exa/agent/runs/{runId}/cancel"),
("GET", "/agent-integrations/exa/agent/runs/{runId}/events"),
("POST", "/agent-integrations/exa/agent/runs/{runId}/stop"),
("POST", "/agent-integrations/exa/answer"),
("GET", "/agent-integrations/exa/batches"),
("POST", "/agent-integrations/exa/batches"),
("DELETE", "/agent-integrations/exa/batches/{batchId}"),
("GET", "/agent-integrations/exa/batches/{batchId}"),
("POST", "/agent-integrations/exa/batches/{batchId}/cancel"),
("POST", "/agent-integrations/exa/contents"),
("POST", "/agent-integrations/exa/findSimilar"),
("POST", "/agent-integrations/exa/search"),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium tests confident

Add typed methods and route tests for the new Exa search and telemetry routes

The diff adds POST /agent-integrations/exa/search and POST /telemetry/langfuse/otel/v1/traces to the public route registry and manifest, but does not add corresponding typed Rust methods, request/response types, or route tests. The repository's OpenAPI discipline rule (AGENTS.md) requires: "Add matching Rust methods, request/response types, and route tests." Without these, the new routes are only callable through the raw escape hatch, and no SDK-level test exercises them, so regressions in serialization or contract would go undetected. Add an exa module under src/api/agent_integrations/ (or a new src/api/telemetry.rs namespace), define request/response types, implement the client methods, and write at least a mock-server route test for each. The parity test already validates the route list, so that part is fine; the gap is the typed surface and its coverage.

[RULE] missing-typed-methods ·

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium critique confident

Add the Exa operation to the typed SDK surface

The Exa search route is now allowlisted in the generated raw-route registry, but there is still no corresponding typed client method anywhere under src. This leaves the newly advertised operation available only through the escape hatch and violates the repository's requirement to add matching Rust methods and request/response types. Add the typed Exa operation using the deployed Swagger contract.


Additional security observation

priority medium confident

Add the Exa operation to the typed SDK surface

[RULE] missing-typed-methods

This adds the Exa search operation only to the raw route registry; no typed Exa client method or request/response types are present in the changed surface. Callers are therefore forced to use the raw escape hatch, contrary to the repository rule requiring named namespace clients for public routes. Add the typed operation based on the deployed contract.

[RULE] typed-sdk-surface ·

("GET", "/agent-integrations/file-storage/files"),
("POST", "/agent-integrations/file-storage/files"),
("DELETE", "/agent-integrations/file-storage/files/{fileId}"),
Expand Down Expand Up @@ -199,6 +215,7 @@ pub const PUBLIC_ROUTES: &[(&str, &str)] = &[
("POST", "/teams/{teamId}/switch"),
("POST", "/teams/join"),
("GET", "/teams/me/usage"),
("POST", "/telemetry/langfuse/otel/v1/traces"),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium critique confident

Add typed methods and route tests for the new Exa and telemetry routes

This change adds 16 additional Exa routes and the Langfuse telemetry route to the public contract, but the repository contains no typed methods or route tests for them. The parity test only checks route-list synchronization; it does not exercise request serialization, response handling, or the actual paths. Add the matching typed clients and mock-server tests for the new Exa and telemetry operations.


Additional security observation

priority medium confident

Add typed methods and route tests for the new Exa search and telemetry routes

[RULE] missing-typed-methods

The registry now exposes the new Exa and Langfuse telemetry routes, but the repository contains no corresponding typed methods, request/response types, or mock-server route tests. The parity test checks only route-list synchronization and cannot catch serialization or request-path regressions. Add the required typed surfaces and tests for these new operations.


Additional tests observation

priority medium likely

Keep changes coherent: add unrelated routes in separate pull requests

[RULE] coherence

This change adds both Exa agent/batch routes and a Langfuse OTLP telemetry route in a single pull request. The repository rule "Keep changes small and coherent" (AGENTS.md) expects unrelated route families to be introduced in separate, focused changes. Splitting them reduces review surface and avoids conflating two distinct contract updates.

[RULE] route-test-coverage ·

("GET", "/voice-agent/get-signed-url"),
("GET", "/waitlist/download/{token}"),
("POST", "/waitlist/join"),
Expand Down
10 changes: 8 additions & 2 deletions tests/openapi_sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,10 @@ fn generated_rust_routes_match_the_public_manifest() {
// 208 -> 211: the Gemini integration — `POST .../gemini/models/{model}/generate-content`,
// `POST .../gemini/live/sessions` and `GET .../gemini/live/sessions/{sessionId}`.
// 211 -> 212: the retired orchestration session-list compatibility route.
assert_eq!(manifest["source"]["operationCount"], 212);
// 212 -> 214: Exa search plus the authenticated Langfuse telemetry route.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority medium security likely

Keep unrelated route families in separate changes

This contract change combines the Exa integration's search, batch, contents, answer, and agent-run routes with the unrelated Langfuse telemetry route. Splitting the route families would keep the generated registry, typed implementations, tests, and contract changes reviewable and independently attributable.

[RULE] incoherent-change-scope ·

// 214 -> 229: the remaining priced Exa Contents, Answer, Find Similar,
// Agent run, and Batch operations.
assert_eq!(manifest["source"]["operationCount"], 229);
// 14 -> 13: `GET /orchestration/v1/steering` left with that family.
assert_eq!(manifest["source"]["supplementalOperationCount"], 13);
// 37 -> 39: the two service-token operations on
Expand Down Expand Up @@ -208,7 +211,10 @@ fn generated_rust_routes_match_the_public_manifest() {
// (`GET /opencompany/companies` and `POST /opencompany/instances/{slug}/update`).
// 208 -> 211: the three Gemini routes.
// 211 -> 212: the retired orchestration session-list compatibility route.
assert_eq!(rust_routes.len(), 212);
// 212 -> 214: Exa search plus the authenticated Langfuse telemetry route.
// 214 -> 229: the remaining priced Exa Contents, Answer, Find Similar,
// Agent run, and Batch operations.
assert_eq!(rust_routes.len(), 229);
assert_eq!(rust_routes, manifest_routes);
assert!(rust_routes
.iter()
Expand Down
Loading