feat: implement ensure_publication for zero_publication management

- Added the ensure_publication function to create and verify the zero_publication if it is missing, ensuring idempotency during database initialization.
- Integrated ensure_publication into the create_db_and_tables function to prevent zero-cache crash loops on startup.
- Introduced a self-check script to validate the ensure_publication functionality on a create_all-bootstrapped database.
- Updated various components to reflect the transition from search space to workspace, including adjustments in imports and routing paths.
This commit is contained in:
DESKTOP-RTLN3BA\$punk 2026-07-05 23:17:13 -07:00
parent 7562bc78ee
commit a64c8205fe
164 changed files with 626 additions and 506 deletions

View file

@ -24,7 +24,7 @@ export async function streamChatToCompletion(
headers: authHeaders(token),
data: {
chat_id: args.threadId,
search_space_id: args.searchSpaceId,
workspace_id: args.searchSpaceId,
user_query: args.query,
},
});

View file

@ -16,7 +16,7 @@ export async function listConnectors(
searchSpaceId: number
): Promise<ConnectorRow[]> {
const response = await request.get(
`${BACKEND_URL}/api/v1/search-source-connectors?search_space_id=${searchSpaceId}`,
`${BACKEND_URL}/api/v1/search-source-connectors?workspace_id=${searchSpaceId}`,
{ headers: authHeaders(token) }
);
if (!response.ok()) {
@ -115,7 +115,7 @@ export async function triggerIndex(
body: IndexBody
): Promise<{ ok: true }> {
const response = await request.post(
`${BACKEND_URL}/api/v1/search-source-connectors/${connectorId}/index?search_space_id=${searchSpaceId}`,
`${BACKEND_URL}/api/v1/search-source-connectors/${connectorId}/index?workspace_id=${searchSpaceId}`,
{ headers: authHeaders(token), data: body }
);
if (!response.ok()) {
@ -134,7 +134,7 @@ export async function triggerIndexExpectDisabled(
body: IndexBody = {}
): Promise<{ indexing_started: false; message?: string }> {
const response = await request.post(
`${BACKEND_URL}/api/v1/search-source-connectors/${connectorId}/index?search_space_id=${searchSpaceId}`,
`${BACKEND_URL}/api/v1/search-source-connectors/${connectorId}/index?workspace_id=${searchSpaceId}`,
{ headers: authHeaders(token), data: body }
);
if (!response.ok()) {

View file

@ -21,7 +21,7 @@ export async function listDocuments(
limit = 100
): Promise<DocumentRow[]> {
const response = await request.get(
`${BACKEND_URL}/api/v1/documents?search_space_id=${searchSpaceId}&limit=${limit}`,
`${BACKEND_URL}/api/v1/documents?workspace_id=${searchSpaceId}&limit=${limit}`,
{ headers: authHeaders(token) }
);
if (!response.ok()) {
@ -55,7 +55,7 @@ export async function getEditorContent(
documentId: number
): Promise<EditorContent> {
const response = await request.get(
`${BACKEND_URL}/api/v1/search-spaces/${searchSpaceId}/documents/${documentId}/editor-content`,
`${BACKEND_URL}/api/v1/workspaces/${searchSpaceId}/documents/${documentId}/editor-content`,
{ headers: authHeaders(token) }
);
if (!response.ok()) {

View file

@ -13,7 +13,7 @@ export async function createSearchSpace(
name: string,
description = "E2E test search space"
): Promise<SearchSpaceRow> {
const response = await request.post(`${BACKEND_URL}/api/v1/searchspaces`, {
const response = await request.post(`${BACKEND_URL}/api/v1/workspaces`, {
headers: authHeaders(token),
data: { name, description },
});
@ -28,7 +28,7 @@ export async function deleteSearchSpace(
token: string,
id: number
): Promise<void> {
const response = await request.delete(`${BACKEND_URL}/api/v1/searchspaces/${id}`, {
const response = await request.delete(`${BACKEND_URL}/api/v1/workspaces/${id}`, {
headers: authHeaders(token),
});
if (!response.ok() && response.status() !== 404) {