weave-typescript 0.38.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -28,7 +28,7 @@ export interface SearchApprovedThreadsSemanticRow {
28
28
  conceptCluster: string;
29
29
  }
30
30
  export declare function searchApprovedThreadsSemantic(client: Client, args: SearchApprovedThreadsSemanticArgs): Promise<SearchApprovedThreadsSemanticRow[]>;
31
- export declare const searchApprovedThreadsSemanticByUserPermissionsQuery = "-- name: SearchApprovedThreadsSemanticByUserPermissions :many\nSELECT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n similarity.score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n COALESCE(cc.name, '') AS concept_cluster\nFROM weave.threads t\nJOIN weave.documents d ON d.id = t.document_id\nCROSS JOIN LATERAL (\n SELECT CAST(\n 1.0::double precision\n - (t.embedding <=> $1::vector)::double precision\n AS double precision\n ) AS score\n) similarity\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN weave.concept_clusters cc ON cc.id = t.cluster_id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e.canonical ORDER BY e.canonical) AS entities\n FROM weave.thread_entities te\n JOIN weave.entities e ON e.id = te.entity_id\n WHERE te.thread_id = t.id\n) entity_data ON TRUE\nWHERE t.organization_id = $2\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND t.embedding IS NOT NULL\n AND similarity.score >= $3::double precision\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $4)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND EXISTS (\n SELECT 1\n FROM weave.user_sensitivity_clearances c\n WHERE c.organization_id = $2\n AND c.user_id = $4\n AND cardinality(d.sensitivity_tags) = 1\n AND c.sensitivity_tag_slug = d.sensitivity_tags[1]\n ))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $5";
31
+ export declare const searchApprovedThreadsSemanticByUserPermissionsQuery = "-- name: SearchApprovedThreadsSemanticByUserPermissions :many\nSELECT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n similarity.score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n COALESCE(cc.name, '') AS concept_cluster\nFROM weave.threads t\nJOIN weave.documents d ON d.id = t.document_id\nCROSS JOIN LATERAL (\n SELECT CAST(\n 1.0::double precision\n - (t.embedding <=> $1::vector)::double precision\n AS double precision\n ) AS score\n) similarity\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN weave.concept_clusters cc ON cc.id = t.cluster_id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e.canonical ORDER BY e.canonical) AS entities\n FROM weave.thread_entities te\n JOIN weave.entities e ON e.id = te.entity_id\n WHERE te.thread_id = t.id\n) entity_data ON TRUE\nWHERE t.organization_id = $2\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND t.embedding IS NOT NULL\n AND similarity.score >= $3::double precision\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $4)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND (\n EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_user_memberships rgum\n ON rgum.organization_id = drg.organization_id\n AND rgum.restricted_group_id = drg.restricted_group_id\n AND rgum.user_id = $4\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )\n OR EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_team_memberships rgtm\n ON rgtm.organization_id = drg.organization_id\n AND rgtm.restricted_group_id = drg.restricted_group_id\n JOIN weave.org_team_memberships otm\n ON otm.organization_id = rgtm.organization_id\n AND otm.org_team_id = rgtm.org_team_id\n AND otm.user_id = $4\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $5";
32
32
  export interface SearchApprovedThreadsSemanticByUserPermissionsArgs {
33
33
  queryEmbedding: string;
34
34
  organizationId: string;
@@ -53,7 +53,7 @@ export interface SearchApprovedThreadsSemanticByUserPermissionsRow {
53
53
  conceptCluster: string;
54
54
  }
55
55
  export declare function searchApprovedThreadsSemanticByUserPermissions(client: Client, args: SearchApprovedThreadsSemanticByUserPermissionsArgs): Promise<SearchApprovedThreadsSemanticByUserPermissionsRow[]>;
56
- export declare const searchAccessibleDocumentsSemanticQuery = "-- name: SearchAccessibleDocumentsSemantic :many\nWITH tag_data AS (\n SELECT\n dt.document_id,\n array_agg(dt.tag ORDER BY dt.tag ASC) AS tags,\n array_agg(dt.confidence ORDER BY dt.tag ASC) AS tag_confidences\n FROM weave.document_tags dt\n JOIN weave.documents d ON d.id = dt.document_id\n WHERE d.organization_id = $4\n GROUP BY dt.document_id\n),\nmatches AS (\n SELECT\n t.id AS thread_id,\n t.text,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n d.mime_type,\n d.scope,\n d.sensitivity_tags,\n d.uploaded_at,\n COALESCE(tag_data.tags, '{}'::text[]) AS tags,\n COALESCE(tag_data.tag_confidences, '{}'::real[]) AS tag_confidences,\n t.source_location,\n t.approved_at,\n CAST(\n 1.0::double precision\n - (t.embedding <=> $5::vector)::double precision\n AS double precision\n ) AS score\n FROM weave.threads t\n JOIN weave.documents d ON d.id = t.document_id\n LEFT JOIN tag_data ON tag_data.document_id = d.id\n WHERE t.organization_id = $4\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND t.embedding IS NOT NULL\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $6)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND EXISTS (\n SELECT 1\n FROM weave.user_sensitivity_clearances c\n WHERE c.organization_id = $4\n AND c.user_id = $6\n AND cardinality(d.sensitivity_tags) = 1\n AND c.sensitivity_tag_slug = d.sensitivity_tags[1]\n ))\n )\n AND (cardinality($7::text[]) = 0 OR tag_data.tags && $7::text[] OR d.sensitivity_tags && $7::text[])\n AND (cardinality($8::text[]) = 0 OR d.sensitivity_tags && $8::text[])\n AND (cardinality($9::text[]) = 0 OR d.scope = ANY($9::text[]))\n AND ($10::timestamptz IS NULL OR d.uploaded_at >= $10::timestamptz)\n AND ($11::timestamptz IS NULL OR d.uploaded_at <= $11::timestamptz)\n)\nSELECT\n document_id,\n document_name,\n mime_type,\n scope,\n sensitivity_tags,\n tags,\n tag_confidences,\n uploaded_at,\n MAX(score)::double precision AS score,\n COUNT(*)::int AS matched_thread_count,\n (array_agg(thread_id ORDER BY score DESC, approved_at DESC))[1] AS best_thread_id,\n (array_agg(text ORDER BY score DESC, approved_at DESC))[1] AS best_text,\n (array_agg(classification ORDER BY score DESC, approved_at DESC))[1] AS best_classification,\n (array_agg(source_location ORDER BY score DESC, approved_at DESC))[1] AS best_source_location\nFROM matches\nWHERE score >= $1::double precision\nGROUP BY\n document_id,\n document_name,\n mime_type,\n scope,\n sensitivity_tags,\n tags,\n tag_confidences,\n uploaded_at\nORDER BY score DESC, uploaded_at DESC\nLIMIT $3 OFFSET $2";
56
+ export declare const searchAccessibleDocumentsSemanticQuery = "-- name: SearchAccessibleDocumentsSemantic :many\nWITH tag_data AS (\n SELECT\n dt.document_id,\n array_agg(dt.tag ORDER BY dt.tag ASC) AS tags,\n array_agg(dt.confidence ORDER BY dt.tag ASC) AS tag_confidences\n FROM weave.document_tags dt\n JOIN weave.documents d ON d.id = dt.document_id\n WHERE d.organization_id = $4\n GROUP BY dt.document_id\n),\nmatches AS (\n SELECT\n t.id AS thread_id,\n t.text,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n d.mime_type,\n d.scope,\n d.uploaded_at,\n COALESCE(tag_data.tags, '{}'::text[]) AS tags,\n COALESCE(tag_data.tag_confidences, '{}'::real[]) AS tag_confidences,\n t.source_location,\n t.approved_at,\n CAST(\n 1.0::double precision\n - (t.embedding <=> $5::vector)::double precision\n AS double precision\n ) AS score\n FROM weave.threads t\n JOIN weave.documents d ON d.id = t.document_id\n LEFT JOIN tag_data ON tag_data.document_id = d.id\n WHERE t.organization_id = $4\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND t.embedding IS NOT NULL\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $6)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND (\n EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_user_memberships rgum\n ON rgum.organization_id = drg.organization_id\n AND rgum.restricted_group_id = drg.restricted_group_id\n AND rgum.user_id = $6\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )\n OR EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_team_memberships rgtm\n ON rgtm.organization_id = drg.organization_id\n AND rgtm.restricted_group_id = drg.restricted_group_id\n JOIN weave.org_team_memberships otm\n ON otm.organization_id = rgtm.organization_id\n AND otm.org_team_id = rgtm.org_team_id\n AND otm.user_id = $6\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )))\n )\n AND (cardinality($7::text[]) = 0 OR tag_data.tags && $7::text[])\n AND (\n cardinality($8::uuid[]) = 0\n OR EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n AND drg.restricted_group_id = ANY($8::uuid[])\n )\n )\n AND (cardinality($9::text[]) = 0 OR d.scope = ANY($9::text[]))\n AND ($10::timestamptz IS NULL OR d.uploaded_at >= $10::timestamptz)\n AND ($11::timestamptz IS NULL OR d.uploaded_at <= $11::timestamptz)\n)\nSELECT\n document_id,\n document_name,\n mime_type,\n scope,\n tags,\n tag_confidences,\n uploaded_at,\n MAX(score)::double precision AS score,\n COUNT(*)::int AS matched_thread_count,\n (array_agg(thread_id ORDER BY score DESC, approved_at DESC))[1] AS best_thread_id,\n (array_agg(text ORDER BY score DESC, approved_at DESC))[1] AS best_text,\n (array_agg(classification ORDER BY score DESC, approved_at DESC))[1] AS best_classification,\n (array_agg(source_location ORDER BY score DESC, approved_at DESC))[1] AS best_source_location\nFROM matches\nWHERE score >= $1::double precision\nGROUP BY\n document_id,\n document_name,\n mime_type,\n scope,\n tags,\n tag_confidences,\n uploaded_at\nORDER BY score DESC, uploaded_at DESC\nLIMIT $3 OFFSET $2";
57
57
  export interface SearchAccessibleDocumentsSemanticArgs {
58
58
  minSimilarity: number;
59
59
  pageOffset: string;
@@ -62,7 +62,7 @@ export interface SearchAccessibleDocumentsSemanticArgs {
62
62
  queryEmbedding: string;
63
63
  actingUserId: string;
64
64
  tags: string[];
65
- restrictedTags: string[];
65
+ restrictedGroupIds: string[];
66
66
  scopes: string[];
67
67
  uploadedAfter: Date | null;
68
68
  uploadedBefore: Date | null;
@@ -72,7 +72,6 @@ export interface SearchAccessibleDocumentsSemanticRow {
72
72
  documentName: string;
73
73
  mimeType: string;
74
74
  scope: string;
75
- sensitivityTags: string[];
76
75
  tags: string;
77
76
  tagConfidences: string;
78
77
  uploadedAt: Date;
@@ -109,7 +108,7 @@ export interface SearchApprovedThreadsSemanticByKnowledgeTypesRow {
109
108
  conceptCluster: string;
110
109
  }
111
110
  export declare function searchApprovedThreadsSemanticByKnowledgeTypes(client: Client, args: SearchApprovedThreadsSemanticByKnowledgeTypesArgs): Promise<SearchApprovedThreadsSemanticByKnowledgeTypesRow[]>;
112
- export declare const searchApprovedThreadsSemanticByKnowledgeTypesAndUserPermissionsQuery = "-- name: SearchApprovedThreadsSemanticByKnowledgeTypesAndUserPermissions :many\nSELECT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n similarity.score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n COALESCE(cc.name, '') AS concept_cluster\nFROM weave.threads t\nJOIN weave.documents d ON d.id = t.document_id\nCROSS JOIN LATERAL (\n SELECT CAST(\n 1.0::double precision\n - (t.embedding <=> $1::vector)::double precision\n AS double precision\n ) AS score\n) similarity\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN weave.concept_clusters cc ON cc.id = t.cluster_id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e.canonical ORDER BY e.canonical) AS entities\n FROM weave.thread_entities te\n JOIN weave.entities e ON e.id = te.entity_id\n WHERE te.thread_id = t.id\n) entity_data ON TRUE\nWHERE t.organization_id = $2\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND t.embedding IS NOT NULL\n AND t.knowledge_type = ANY($3::text[])\n AND similarity.score >= $4::double precision\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $5)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND EXISTS (\n SELECT 1\n FROM weave.user_sensitivity_clearances c\n WHERE c.organization_id = $2\n AND c.user_id = $5\n AND cardinality(d.sensitivity_tags) = 1\n AND c.sensitivity_tag_slug = d.sensitivity_tags[1]\n ))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $6";
111
+ export declare const searchApprovedThreadsSemanticByKnowledgeTypesAndUserPermissionsQuery = "-- name: SearchApprovedThreadsSemanticByKnowledgeTypesAndUserPermissions :many\nSELECT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n similarity.score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n COALESCE(cc.name, '') AS concept_cluster\nFROM weave.threads t\nJOIN weave.documents d ON d.id = t.document_id\nCROSS JOIN LATERAL (\n SELECT CAST(\n 1.0::double precision\n - (t.embedding <=> $1::vector)::double precision\n AS double precision\n ) AS score\n) similarity\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN weave.concept_clusters cc ON cc.id = t.cluster_id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e.canonical ORDER BY e.canonical) AS entities\n FROM weave.thread_entities te\n JOIN weave.entities e ON e.id = te.entity_id\n WHERE te.thread_id = t.id\n) entity_data ON TRUE\nWHERE t.organization_id = $2\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND t.embedding IS NOT NULL\n AND t.knowledge_type = ANY($3::text[])\n AND similarity.score >= $4::double precision\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $5)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND (\n EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_user_memberships rgum\n ON rgum.organization_id = drg.organization_id\n AND rgum.restricted_group_id = drg.restricted_group_id\n AND rgum.user_id = $5\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )\n OR EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_team_memberships rgtm\n ON rgtm.organization_id = drg.organization_id\n AND rgtm.restricted_group_id = drg.restricted_group_id\n JOIN weave.org_team_memberships otm\n ON otm.organization_id = rgtm.organization_id\n AND otm.org_team_id = rgtm.org_team_id\n AND otm.user_id = $5\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $6";
113
112
  export interface SearchApprovedThreadsSemanticByKnowledgeTypesAndUserPermissionsArgs {
114
113
  queryEmbedding: string;
115
114
  organizationId: string;
@@ -158,7 +157,7 @@ export interface SearchApprovedThreadsByEntitiesRow {
158
157
  conceptCluster: string;
159
158
  }
160
159
  export declare function searchApprovedThreadsByEntities(client: Client, args: SearchApprovedThreadsByEntitiesArgs): Promise<SearchApprovedThreadsByEntitiesRow[]>;
161
- export declare const searchApprovedThreadsByEntitiesAndUserPermissionsQuery = "-- name: SearchApprovedThreadsByEntitiesAndUserPermissions :many\nSELECT DISTINCT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n te.confidence::double precision AS score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n COALESCE(cc.name, '') AS concept_cluster\nFROM weave.threads t\nJOIN weave.documents d ON d.id = t.document_id\nJOIN weave.thread_entities te ON te.thread_id = t.id\nJOIN weave.entities e ON e.id = te.entity_id\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN weave.concept_clusters cc ON cc.id = t.cluster_id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e2.canonical ORDER BY e2.canonical) AS entities\n FROM weave.thread_entities te2\n JOIN weave.entities e2 ON e2.id = te2.entity_id\n WHERE te2.thread_id = t.id\n) entity_data ON TRUE\nWHERE t.organization_id = $1\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND e.canonical = ANY($2::text[])\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $3)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND EXISTS (\n SELECT 1\n FROM weave.user_sensitivity_clearances c\n WHERE c.organization_id = $1\n AND c.user_id = $3\n AND cardinality(d.sensitivity_tags) = 1\n AND c.sensitivity_tag_slug = d.sensitivity_tags[1]\n ))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $4";
160
+ export declare const searchApprovedThreadsByEntitiesAndUserPermissionsQuery = "-- name: SearchApprovedThreadsByEntitiesAndUserPermissions :many\nSELECT DISTINCT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n te.confidence::double precision AS score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n COALESCE(cc.name, '') AS concept_cluster\nFROM weave.threads t\nJOIN weave.documents d ON d.id = t.document_id\nJOIN weave.thread_entities te ON te.thread_id = t.id\nJOIN weave.entities e ON e.id = te.entity_id\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN weave.concept_clusters cc ON cc.id = t.cluster_id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e2.canonical ORDER BY e2.canonical) AS entities\n FROM weave.thread_entities te2\n JOIN weave.entities e2 ON e2.id = te2.entity_id\n WHERE te2.thread_id = t.id\n) entity_data ON TRUE\nWHERE t.organization_id = $1\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND e.canonical = ANY($2::text[])\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $3)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND (\n EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_user_memberships rgum\n ON rgum.organization_id = drg.organization_id\n AND rgum.restricted_group_id = drg.restricted_group_id\n AND rgum.user_id = $3\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )\n OR EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_team_memberships rgtm\n ON rgtm.organization_id = drg.organization_id\n AND rgtm.restricted_group_id = drg.restricted_group_id\n JOIN weave.org_team_memberships otm\n ON otm.organization_id = rgtm.organization_id\n AND otm.org_team_id = rgtm.org_team_id\n AND otm.user_id = $3\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $4";
162
161
  export interface SearchApprovedThreadsByEntitiesAndUserPermissionsArgs {
163
162
  organizationId: string;
164
163
  entityCanonicals: string[];
@@ -234,7 +233,7 @@ export interface SearchConceptClusterThreadsBySimilarityRow {
234
233
  conceptCluster: string;
235
234
  }
236
235
  export declare function searchConceptClusterThreadsBySimilarity(client: Client, args: SearchConceptClusterThreadsBySimilarityArgs): Promise<SearchConceptClusterThreadsBySimilarityRow[]>;
237
- export declare const searchConceptClusterThreadsBySimilarityAndUserPermissionsQuery = "-- name: SearchConceptClusterThreadsBySimilarityAndUserPermissions :many\nSELECT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n similarity.score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n cc.name AS concept_cluster\nFROM weave.concept_clusters cc\nCROSS JOIN LATERAL (\n SELECT CAST(\n 1.0::double precision\n - (cc.embedding <=> $1::vector)::double precision\n AS double precision\n ) AS score\n) similarity\nJOIN weave.threads t ON t.cluster_id = cc.id\nJOIN weave.documents d ON d.id = t.document_id\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e.canonical ORDER BY e.canonical) AS entities\n FROM weave.thread_entities te\n JOIN weave.entities e ON e.id = te.entity_id\n WHERE te.thread_id = t.id\n) entity_data ON TRUE\nWHERE cc.organization_id = $2\n AND cc.realm_kind = $3\n AND cc.realm_key = $4\n AND cc.level = 0\n AND cc.embedding IS NOT NULL\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND similarity.score >= $5::double precision\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $6)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND EXISTS (\n SELECT 1\n FROM weave.user_sensitivity_clearances c\n WHERE c.organization_id = $2\n AND c.user_id = $6\n AND cardinality(d.sensitivity_tags) = 1\n AND c.sensitivity_tag_slug = d.sensitivity_tags[1]\n ))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $7";
236
+ export declare const searchConceptClusterThreadsBySimilarityAndUserPermissionsQuery = "-- name: SearchConceptClusterThreadsBySimilarityAndUserPermissions :many\nSELECT\n t.id AS thread_id,\n t.text,\n t.knowledge_type,\n t.facet_fields,\n similarity.score,\n t.classification,\n t.document_id,\n d.filename AS document_name,\n t.source_location,\n t.approved_at,\n t.temporal_validity,\n COALESCE(entity_data.entities, '{}'::text[]) AS entities,\n COALESCE(rs.reinforcement_count, 0) AS reinforcement_count,\n cc.name AS concept_cluster\nFROM weave.concept_clusters cc\nCROSS JOIN LATERAL (\n SELECT CAST(\n 1.0::double precision\n - (cc.embedding <=> $1::vector)::double precision\n AS double precision\n ) AS score\n) similarity\nJOIN weave.threads t ON t.cluster_id = cc.id\nJOIN weave.documents d ON d.id = t.document_id\nLEFT JOIN weave.thread_reinforcement_scores rs ON rs.thread_id = t.id\nLEFT JOIN LATERAL (\n SELECT array_agg(DISTINCT e.canonical ORDER BY e.canonical) AS entities\n FROM weave.thread_entities te\n JOIN weave.entities e ON e.id = te.entity_id\n WHERE te.thread_id = t.id\n) entity_data ON TRUE\nWHERE cc.organization_id = $2\n AND cc.realm_kind = $3\n AND cc.realm_key = $4\n AND cc.level = 0\n AND cc.embedding IS NOT NULL\n AND t.retrieval_status = 'THREAD_RETRIEVAL_STATUS_APPROVED'\n AND similarity.score >= $5::double precision\n AND (\n d.scope = 'DOCUMENT_SCOPE_ORG'\n OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'\n AND d.uploaded_by_user_id = $6)\n OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'\n AND (\n EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_user_memberships rgum\n ON rgum.organization_id = drg.organization_id\n AND rgum.restricted_group_id = drg.restricted_group_id\n AND rgum.user_id = $6\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )\n OR EXISTS (\n SELECT 1\n FROM weave.document_restricted_groups drg\n JOIN weave.restricted_group_team_memberships rgtm\n ON rgtm.organization_id = drg.organization_id\n AND rgtm.restricted_group_id = drg.restricted_group_id\n JOIN weave.org_team_memberships otm\n ON otm.organization_id = rgtm.organization_id\n AND otm.org_team_id = rgtm.org_team_id\n AND otm.user_id = $6\n WHERE drg.organization_id = d.organization_id\n AND drg.document_id = d.id\n )))\n )\nORDER BY score DESC, t.approved_at DESC\nLIMIT $7";
238
237
  export interface SearchConceptClusterThreadsBySimilarityAndUserPermissionsArgs {
239
238
  queryEmbedding: string;
240
239
  organizationId: string;
@@ -131,14 +131,30 @@ WHERE t.organization_id = $2
131
131
  OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'
132
132
  AND d.uploaded_by_user_id = $4)
133
133
  OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'
134
- AND EXISTS (
134
+ AND (
135
+ EXISTS (
135
136
  SELECT 1
136
- FROM weave.user_sensitivity_clearances c
137
- WHERE c.organization_id = $2
138
- AND c.user_id = $4
139
- AND cardinality(d.sensitivity_tags) = 1
140
- AND c.sensitivity_tag_slug = d.sensitivity_tags[1]
141
- ))
137
+ FROM weave.document_restricted_groups drg
138
+ JOIN weave.restricted_group_user_memberships rgum
139
+ ON rgum.organization_id = drg.organization_id
140
+ AND rgum.restricted_group_id = drg.restricted_group_id
141
+ AND rgum.user_id = $4
142
+ WHERE drg.organization_id = d.organization_id
143
+ AND drg.document_id = d.id
144
+ )
145
+ OR EXISTS (
146
+ SELECT 1
147
+ FROM weave.document_restricted_groups drg
148
+ JOIN weave.restricted_group_team_memberships rgtm
149
+ ON rgtm.organization_id = drg.organization_id
150
+ AND rgtm.restricted_group_id = drg.restricted_group_id
151
+ JOIN weave.org_team_memberships otm
152
+ ON otm.organization_id = rgtm.organization_id
153
+ AND otm.org_team_id = rgtm.org_team_id
154
+ AND otm.user_id = $4
155
+ WHERE drg.organization_id = d.organization_id
156
+ AND drg.document_id = d.id
157
+ )))
142
158
  )
143
159
  ORDER BY score DESC, t.approved_at DESC
144
160
  LIMIT $5`;
@@ -187,7 +203,6 @@ matches AS (
187
203
  d.filename AS document_name,
188
204
  d.mime_type,
189
205
  d.scope,
190
- d.sensitivity_tags,
191
206
  d.uploaded_at,
192
207
  COALESCE(tag_data.tags, '{}'::text[]) AS tags,
193
208
  COALESCE(tag_data.tag_confidences, '{}'::real[]) AS tag_confidences,
@@ -209,17 +224,42 @@ matches AS (
209
224
  OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'
210
225
  AND d.uploaded_by_user_id = $6)
211
226
  OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'
212
- AND EXISTS (
227
+ AND (
228
+ EXISTS (
229
+ SELECT 1
230
+ FROM weave.document_restricted_groups drg
231
+ JOIN weave.restricted_group_user_memberships rgum
232
+ ON rgum.organization_id = drg.organization_id
233
+ AND rgum.restricted_group_id = drg.restricted_group_id
234
+ AND rgum.user_id = $6
235
+ WHERE drg.organization_id = d.organization_id
236
+ AND drg.document_id = d.id
237
+ )
238
+ OR EXISTS (
213
239
  SELECT 1
214
- FROM weave.user_sensitivity_clearances c
215
- WHERE c.organization_id = $4
216
- AND c.user_id = $6
217
- AND cardinality(d.sensitivity_tags) = 1
218
- AND c.sensitivity_tag_slug = d.sensitivity_tags[1]
219
- ))
240
+ FROM weave.document_restricted_groups drg
241
+ JOIN weave.restricted_group_team_memberships rgtm
242
+ ON rgtm.organization_id = drg.organization_id
243
+ AND rgtm.restricted_group_id = drg.restricted_group_id
244
+ JOIN weave.org_team_memberships otm
245
+ ON otm.organization_id = rgtm.organization_id
246
+ AND otm.org_team_id = rgtm.org_team_id
247
+ AND otm.user_id = $6
248
+ WHERE drg.organization_id = d.organization_id
249
+ AND drg.document_id = d.id
250
+ )))
251
+ )
252
+ AND (cardinality($7::text[]) = 0 OR tag_data.tags && $7::text[])
253
+ AND (
254
+ cardinality($8::uuid[]) = 0
255
+ OR EXISTS (
256
+ SELECT 1
257
+ FROM weave.document_restricted_groups drg
258
+ WHERE drg.organization_id = d.organization_id
259
+ AND drg.document_id = d.id
260
+ AND drg.restricted_group_id = ANY($8::uuid[])
261
+ )
220
262
  )
221
- AND (cardinality($7::text[]) = 0 OR tag_data.tags && $7::text[] OR d.sensitivity_tags && $7::text[])
222
- AND (cardinality($8::text[]) = 0 OR d.sensitivity_tags && $8::text[])
223
263
  AND (cardinality($9::text[]) = 0 OR d.scope = ANY($9::text[]))
224
264
  AND ($10::timestamptz IS NULL OR d.uploaded_at >= $10::timestamptz)
225
265
  AND ($11::timestamptz IS NULL OR d.uploaded_at <= $11::timestamptz)
@@ -229,7 +269,6 @@ SELECT
229
269
  document_name,
230
270
  mime_type,
231
271
  scope,
232
- sensitivity_tags,
233
272
  tags,
234
273
  tag_confidences,
235
274
  uploaded_at,
@@ -246,7 +285,6 @@ GROUP BY
246
285
  document_name,
247
286
  mime_type,
248
287
  scope,
249
- sensitivity_tags,
250
288
  tags,
251
289
  tag_confidences,
252
290
  uploaded_at
@@ -255,7 +293,7 @@ LIMIT $3 OFFSET $2`;
255
293
  async function searchAccessibleDocumentsSemantic(client, args) {
256
294
  const result = await client.query({
257
295
  text: exports.searchAccessibleDocumentsSemanticQuery,
258
- values: [args.minSimilarity, args.pageOffset, args.resultLimit, args.organizationId, args.queryEmbedding, args.actingUserId, args.tags, args.restrictedTags, args.scopes, args.uploadedAfter, args.uploadedBefore],
296
+ values: [args.minSimilarity, args.pageOffset, args.resultLimit, args.organizationId, args.queryEmbedding, args.actingUserId, args.tags, args.restrictedGroupIds, args.scopes, args.uploadedAfter, args.uploadedBefore],
259
297
  rowMode: "array"
260
298
  });
261
299
  return result.rows.map(row => {
@@ -264,16 +302,15 @@ async function searchAccessibleDocumentsSemantic(client, args) {
264
302
  documentName: row[1],
265
303
  mimeType: row[2],
266
304
  scope: row[3],
267
- sensitivityTags: row[4],
268
- tags: row[5],
269
- tagConfidences: row[6],
270
- uploadedAt: row[7],
271
- score: row[8],
272
- matchedThreadCount: row[9],
273
- bestThreadId: row[10],
274
- bestText: row[11],
275
- bestClassification: row[12],
276
- bestSourceLocation: row[13]
305
+ tags: row[4],
306
+ tagConfidences: row[5],
307
+ uploadedAt: row[6],
308
+ score: row[7],
309
+ matchedThreadCount: row[8],
310
+ bestThreadId: row[9],
311
+ bestText: row[10],
312
+ bestClassification: row[11],
313
+ bestSourceLocation: row[12]
277
314
  };
278
315
  });
279
316
  }
@@ -385,14 +422,30 @@ WHERE t.organization_id = $2
385
422
  OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'
386
423
  AND d.uploaded_by_user_id = $5)
387
424
  OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'
388
- AND EXISTS (
425
+ AND (
426
+ EXISTS (
427
+ SELECT 1
428
+ FROM weave.document_restricted_groups drg
429
+ JOIN weave.restricted_group_user_memberships rgum
430
+ ON rgum.organization_id = drg.organization_id
431
+ AND rgum.restricted_group_id = drg.restricted_group_id
432
+ AND rgum.user_id = $5
433
+ WHERE drg.organization_id = d.organization_id
434
+ AND drg.document_id = d.id
435
+ )
436
+ OR EXISTS (
389
437
  SELECT 1
390
- FROM weave.user_sensitivity_clearances c
391
- WHERE c.organization_id = $2
392
- AND c.user_id = $5
393
- AND cardinality(d.sensitivity_tags) = 1
394
- AND c.sensitivity_tag_slug = d.sensitivity_tags[1]
395
- ))
438
+ FROM weave.document_restricted_groups drg
439
+ JOIN weave.restricted_group_team_memberships rgtm
440
+ ON rgtm.organization_id = drg.organization_id
441
+ AND rgtm.restricted_group_id = drg.restricted_group_id
442
+ JOIN weave.org_team_memberships otm
443
+ ON otm.organization_id = rgtm.organization_id
444
+ AND otm.org_team_id = rgtm.org_team_id
445
+ AND otm.user_id = $5
446
+ WHERE drg.organization_id = d.organization_id
447
+ AND drg.document_id = d.id
448
+ )))
396
449
  )
397
450
  ORDER BY score DESC, t.approved_at DESC
398
451
  LIMIT $6`;
@@ -515,14 +568,30 @@ WHERE t.organization_id = $1
515
568
  OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'
516
569
  AND d.uploaded_by_user_id = $3)
517
570
  OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'
518
- AND EXISTS (
571
+ AND (
572
+ EXISTS (
519
573
  SELECT 1
520
- FROM weave.user_sensitivity_clearances c
521
- WHERE c.organization_id = $1
522
- AND c.user_id = $3
523
- AND cardinality(d.sensitivity_tags) = 1
524
- AND c.sensitivity_tag_slug = d.sensitivity_tags[1]
525
- ))
574
+ FROM weave.document_restricted_groups drg
575
+ JOIN weave.restricted_group_user_memberships rgum
576
+ ON rgum.organization_id = drg.organization_id
577
+ AND rgum.restricted_group_id = drg.restricted_group_id
578
+ AND rgum.user_id = $3
579
+ WHERE drg.organization_id = d.organization_id
580
+ AND drg.document_id = d.id
581
+ )
582
+ OR EXISTS (
583
+ SELECT 1
584
+ FROM weave.document_restricted_groups drg
585
+ JOIN weave.restricted_group_team_memberships rgtm
586
+ ON rgtm.organization_id = drg.organization_id
587
+ AND rgtm.restricted_group_id = drg.restricted_group_id
588
+ JOIN weave.org_team_memberships otm
589
+ ON otm.organization_id = rgtm.organization_id
590
+ AND otm.org_team_id = rgtm.org_team_id
591
+ AND otm.user_id = $3
592
+ WHERE drg.organization_id = d.organization_id
593
+ AND drg.document_id = d.id
594
+ )))
526
595
  )
527
596
  ORDER BY score DESC, t.approved_at DESC
528
597
  LIMIT $4`;
@@ -720,14 +789,30 @@ WHERE cc.organization_id = $2
720
789
  OR (d.scope = 'DOCUMENT_SCOPE_PRIVATE'
721
790
  AND d.uploaded_by_user_id = $6)
722
791
  OR (d.scope = 'DOCUMENT_SCOPE_RESTRICTED'
723
- AND EXISTS (
792
+ AND (
793
+ EXISTS (
794
+ SELECT 1
795
+ FROM weave.document_restricted_groups drg
796
+ JOIN weave.restricted_group_user_memberships rgum
797
+ ON rgum.organization_id = drg.organization_id
798
+ AND rgum.restricted_group_id = drg.restricted_group_id
799
+ AND rgum.user_id = $6
800
+ WHERE drg.organization_id = d.organization_id
801
+ AND drg.document_id = d.id
802
+ )
803
+ OR EXISTS (
724
804
  SELECT 1
725
- FROM weave.user_sensitivity_clearances c
726
- WHERE c.organization_id = $2
727
- AND c.user_id = $6
728
- AND cardinality(d.sensitivity_tags) = 1
729
- AND c.sensitivity_tag_slug = d.sensitivity_tags[1]
730
- ))
805
+ FROM weave.document_restricted_groups drg
806
+ JOIN weave.restricted_group_team_memberships rgtm
807
+ ON rgtm.organization_id = drg.organization_id
808
+ AND rgtm.restricted_group_id = drg.restricted_group_id
809
+ JOIN weave.org_team_memberships otm
810
+ ON otm.organization_id = rgtm.organization_id
811
+ AND otm.org_team_id = rgtm.org_team_id
812
+ AND otm.user_id = $6
813
+ WHERE drg.organization_id = d.organization_id
814
+ AND drg.document_id = d.id
815
+ )))
731
816
  )
732
817
  ORDER BY score DESC, t.approved_at DESC
733
818
  LIMIT $7`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weave-typescript",
3
- "version": "0.38.0",
3
+ "version": "0.40.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -31,7 +31,7 @@
31
31
  "devDependencies": {
32
32
  "@types/node": "^25.2.0",
33
33
  "@types/pg": "^8.15.5",
34
- "@typescript/native-preview": "7.0.0-dev.20260503.1"
34
+ "@typescript/native-preview": "7.0.0-dev.20260510.1"
35
35
  },
36
36
  "scripts": {
37
37
  "test": "node tools/sqlcgen.test.js",