Skip to content
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { createDesktopConnectorMarketBackend } from "./desktopConnectorMarketBac
test("desktop connector market backend delegates snapshot reads to the daemon client", async () => {
let calls = 0;
const snapshot: ConnectorMarketSnapshot = {
contractCohort: "connector-control-plane-v2",
catalogState: "ready",
connectors: [],
operations: [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ export function createDesktopConnectorMarketBackend(
getOperation({ operationId }) {
return client.getConnectorMarketOperation(operationId);
},
refreshCatalog(input) {
return client.refreshConnectorMarket(input);
refreshCatalog() {
return client.refreshConnectorMarket();
},
installConnector({ connectorKey, ...request }) {
return client.installConnectorMarketConnector(connectorKey, request);
Expand Down
2 changes: 1 addition & 1 deletion docs/architecture/connector-market.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ The shared Connector modules own:
replacement, size and digest verification, no-network import, safe
extraction, release-to-package verification, atomic promotion, and cleanup
- `connector/market`: the reusable local daemon OpenAPI fragment under
`openapi/connector-market.v1.yaml`
`openapi/connector-market.v2.yaml`
- the renderer `ConnectorMarketBackend` contract, module Root/Runtime,
lifecycle and StartupJobs, Valtio-backed domain services, reusable renderer,
and connector-market i18n bundle
Expand Down
2 changes: 1 addition & 1 deletion docs/conventions/npm-package-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ The stable package entrypoints are:
@tutti-os/connector-market/authorization
@tutti-os/connector-market/core
@tutti-os/connector-market/i18n
@tutti-os/connector-market/openapi/connector-market.v1.yaml
@tutti-os/connector-market/openapi/connector-market.v2.yaml
@tutti-os/connector-market/services
@tutti-os/connector-market/ui
@tutti-os/workspace-app-center
Expand Down
9 changes: 5 additions & 4 deletions docs/specs/2026-08-03-connector-market-shared-domain.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ local daemon OpenAPI fragment.

### Local Daemon API

`packages/connector/market/openapi/connector-market.v1.yaml` is the shared
`packages/connector/market/openapi/connector-market.v2.yaml` is the shared
local daemon fragment. It exposes accepted catalog state, local installation,
authorization, compatibility, revisions, and durable operations to renderers.
An installed connector is daemon-global and available to every Agent and the
Expand All @@ -70,9 +70,10 @@ its own server and client, and provides transport mapping. The local daemon is
the authoritative source for renderer state.

Market placement is not part of the immutable release manifest. ZK owns each
listing's primary category, ranks, and optional featured placement; TSH exposes
the selected deployment market through category and cursor-paginated item
endpoints. Tutti forwards that model through daemon-owned category/page APIs.
listing's primary category, ranks, and optional featured placement; tsh-server
exposes the selected connector market as one versioned full snapshot. Local
daemons persist that snapshot and expose daemon-owned category/page projections
to renderers without making further remote pagination requests.
The shared Valtio service maintains independent page state for every section,
and the renderer does not infer category membership from connector keys or
manifest JSON. `featured` is an overlapping collection, while authoritative
Expand Down
8 changes: 3 additions & 5 deletions packages/clients/tuttid-ts/src/connectorMarketClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,7 @@ export interface ConnectorMarketClient {
getConnectorMarketOperation(
operationId: string
): Promise<ConnectorMarketOperation>;
refreshConnectorMarket(
request: ConnectorMarketMutationRequest
): Promise<ConnectorMarketMutationResponse>;
refreshConnectorMarket(): Promise<ConnectorMarketSnapshot>;
installConnectorMarketConnector(
connectorKey: string,
request: ConnectorMarketMutationRequest
Expand Down Expand Up @@ -130,9 +128,9 @@ export function createConnectorMarketClient(
"Get connector market operation request failed."
);
},
async refreshConnectorMarket(request) {
async refreshConnectorMarket() {
return unwrapConnectorMarketData(
await refreshConnectorMarket({ client, body: request }),
await refreshConnectorMarket({ client }),
"Refresh connector market request failed."
);
},
Expand Down
1 change: 1 addition & 0 deletions packages/clients/tuttid-ts/src/generated/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,7 @@ export type {
ConnectorMarketPageToken,
ConnectorMarketRelease,
ConnectorMarketSectionId,
ConnectorMarketSecurity,
ConnectorMarketSnapshot,
CopyWorkspaceFileEntryData,
CopyWorkspaceFileEntryError,
Expand Down
32 changes: 14 additions & 18 deletions packages/clients/tuttid-ts/src/generated/sdk.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5447,7 +5447,7 @@ export const getConnectorMarket = <ThrowOnError extends boolean = false>(
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market",
url: "/v2/connector-market",
...options
});

Expand All @@ -5465,7 +5465,7 @@ export const listConnectorMarketCategories = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/categories",
url: "/v2/connector-market/categories",
...options
});

Expand All @@ -5483,7 +5483,7 @@ export const listConnectorMarketCatalog = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/catalog",
url: "/v2/connector-market/catalog",
...options
});

Expand All @@ -5501,28 +5501,24 @@ export const getConnectorMarketConnector = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/connectors/{connectorKey}",
url: "/v2/connector-market/connectors/{connectorKey}",
...options
});

/**
* Refresh and accept the upstream connector catalog
* Synchronize the complete upstream connector catalog snapshot
*/
export const refreshConnectorMarket = <ThrowOnError extends boolean = false>(
options: Options<RefreshConnectorMarketData, ThrowOnError>
options?: Options<RefreshConnectorMarketData, ThrowOnError>
) =>
(options.client ?? client).post<
(options?.client ?? client).post<
RefreshConnectorMarketResponses,
RefreshConnectorMarketErrors,
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market:refresh",
...options,
headers: {
"Content-Type": "application/json",
...options.headers
}
url: "/v2/connector-market:refresh",
...options
});

/**
Expand All @@ -5539,7 +5535,7 @@ export const installConnectorMarketConnector = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/connectors/{connectorKey}:install",
url: "/v2/connector-market/connectors/{connectorKey}:install",
...options,
headers: {
"Content-Type": "application/json",
Expand All @@ -5563,7 +5559,7 @@ export const uninstallConnectorMarketConnector = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/connectors/{connectorKey}:uninstall",
url: "/v2/connector-market/connectors/{connectorKey}:uninstall",
...options,
headers: {
"Content-Type": "application/json",
Expand All @@ -5585,7 +5581,7 @@ export const startConnectorMarketAuthorization = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/connectors/{connectorKey}/authorization:start",
url: "/v2/connector-market/connectors/{connectorKey}/authorization:start",
...options,
headers: {
"Content-Type": "application/json",
Expand All @@ -5607,7 +5603,7 @@ export const disconnectConnectorMarketAuthorization = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/connectors/{connectorKey}/authorization:disconnect",
url: "/v2/connector-market/connectors/{connectorKey}/authorization:disconnect",
...options,
headers: {
"Content-Type": "application/json",
Expand All @@ -5629,7 +5625,7 @@ export const getConnectorMarketOperation = <
ThrowOnError
>({
security: [{ scheme: "bearer", type: "http" }],
url: "/v1/connector-market/operations/{operationID}",
url: "/v2/connector-market/operations/{operationID}",
...options
});

Expand Down
Loading
Loading