@indexnetwork/protocol 0.1.0 → 0.2.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.
Files changed (128) hide show
  1. package/README.md +113 -0
  2. package/dist/agents/chat.agent.js +2 -2
  3. package/dist/agents/chat.agent.js.map +1 -1
  4. package/dist/agents/chat.prompt.d.ts.map +1 -1
  5. package/dist/agents/chat.prompt.js +44 -32
  6. package/dist/agents/chat.prompt.js.map +1 -1
  7. package/dist/agents/chat.prompt.modules.js +16 -16
  8. package/dist/agents/chat.prompt.modules.js.map +1 -1
  9. package/dist/agents/negotiation.proposer.d.ts +1 -1
  10. package/dist/agents/negotiation.proposer.d.ts.map +1 -1
  11. package/dist/agents/negotiation.responder.d.ts +1 -1
  12. package/dist/agents/negotiation.responder.d.ts.map +1 -1
  13. package/dist/agents/opportunity.evaluator.d.ts +1 -1
  14. package/dist/agents/opportunity.evaluator.d.ts.map +1 -1
  15. package/dist/agents/opportunity.evaluator.js +2 -2
  16. package/dist/agents/opportunity.evaluator.js.map +1 -1
  17. package/dist/agents/opportunity.presenter.js +1 -1
  18. package/dist/agents/opportunity.presenter.js.map +1 -1
  19. package/dist/graphs/chat.graph.d.ts +9 -9
  20. package/dist/graphs/chat.graph.d.ts.map +1 -1
  21. package/dist/graphs/chat.graph.js +2 -2
  22. package/dist/graphs/chat.graph.js.map +1 -1
  23. package/dist/graphs/home.graph.d.ts +5 -5
  24. package/dist/graphs/home.graph.d.ts.map +1 -1
  25. package/dist/graphs/home.graph.js +2 -2
  26. package/dist/graphs/home.graph.js.map +1 -1
  27. package/dist/graphs/intent.graph.d.ts +21 -21
  28. package/dist/graphs/intent.graph.d.ts.map +1 -1
  29. package/dist/graphs/intent.graph.js +8 -8
  30. package/dist/graphs/intent.graph.js.map +1 -1
  31. package/dist/graphs/intent_network.graph.d.ts +398 -0
  32. package/dist/graphs/intent_network.graph.d.ts.map +1 -0
  33. package/dist/graphs/intent_network.graph.js +345 -0
  34. package/dist/graphs/intent_network.graph.js.map +1 -0
  35. package/dist/graphs/negotiation.graph.d.ts +27 -27
  36. package/dist/graphs/negotiation.graph.d.ts.map +1 -1
  37. package/dist/graphs/negotiation.graph.js +2 -2
  38. package/dist/graphs/negotiation.graph.js.map +1 -1
  39. package/dist/graphs/network.graph.d.ts +620 -0
  40. package/dist/graphs/network.graph.d.ts.map +1 -0
  41. package/dist/graphs/network.graph.js +226 -0
  42. package/dist/graphs/network.graph.js.map +1 -0
  43. package/dist/graphs/network_membership.graph.d.ts +250 -0
  44. package/dist/graphs/network_membership.graph.d.ts.map +1 -0
  45. package/dist/graphs/network_membership.graph.js +204 -0
  46. package/dist/graphs/network_membership.graph.js.map +1 -0
  47. package/dist/graphs/opportunity.graph.d.ts +33 -33
  48. package/dist/graphs/opportunity.graph.d.ts.map +1 -1
  49. package/dist/graphs/opportunity.graph.js +155 -138
  50. package/dist/graphs/opportunity.graph.js.map +1 -1
  51. package/dist/graphs/profile.graph.js +4 -4
  52. package/dist/graphs/profile.graph.js.map +1 -1
  53. package/dist/graphs/tests/chat.graph.mocks.d.ts +14 -14
  54. package/dist/graphs/tests/chat.graph.mocks.d.ts.map +1 -1
  55. package/dist/graphs/tests/chat.graph.mocks.js +20 -20
  56. package/dist/graphs/tests/chat.graph.mocks.js.map +1 -1
  57. package/dist/index.d.ts +3 -3
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +3 -3
  60. package/dist/index.js.map +1 -1
  61. package/dist/interfaces/database.interface.d.ts +93 -93
  62. package/dist/interfaces/database.interface.d.ts.map +1 -1
  63. package/dist/interfaces/embedder.interface.d.ts +1 -1
  64. package/dist/interfaces/embedder.interface.d.ts.map +1 -1
  65. package/dist/mcp/mcp.server.js +1 -1
  66. package/dist/mcp/mcp.server.js.map +1 -1
  67. package/dist/states/chat.state.d.ts +2 -2
  68. package/dist/states/chat.state.js +2 -2
  69. package/dist/states/chat.state.js.map +1 -1
  70. package/dist/states/home.state.d.ts +1 -1
  71. package/dist/states/home.state.js +1 -1
  72. package/dist/states/home.state.js.map +1 -1
  73. package/dist/states/intent.state.d.ts +4 -4
  74. package/dist/states/intent.state.d.ts.map +1 -1
  75. package/dist/states/intent.state.js +1 -1
  76. package/dist/states/intent.state.js.map +1 -1
  77. package/dist/states/intent_network.state.d.ts +148 -0
  78. package/dist/states/intent_network.state.d.ts.map +1 -0
  79. package/dist/states/intent_network.state.js +100 -0
  80. package/dist/states/intent_network.state.js.map +1 -0
  81. package/dist/states/negotiation.state.d.ts +4 -4
  82. package/dist/states/negotiation.state.d.ts.map +1 -1
  83. package/dist/states/negotiation.state.js +1 -1
  84. package/dist/states/negotiation.state.js.map +1 -1
  85. package/dist/states/network.state.d.ts +179 -0
  86. package/dist/states/network.state.d.ts.map +1 -0
  87. package/dist/states/network.state.js +56 -0
  88. package/dist/states/network.state.js.map +1 -0
  89. package/dist/states/network_membership.state.d.ts +77 -0
  90. package/dist/states/network_membership.state.d.ts.map +1 -0
  91. package/dist/states/network_membership.state.js +43 -0
  92. package/dist/states/network_membership.state.js.map +1 -0
  93. package/dist/states/opportunity.state.d.ts +15 -15
  94. package/dist/states/opportunity.state.d.ts.map +1 -1
  95. package/dist/states/opportunity.state.js +6 -6
  96. package/dist/states/opportunity.state.js.map +1 -1
  97. package/dist/streamers/chat.streamer.d.ts +2 -2
  98. package/dist/streamers/chat.streamer.d.ts.map +1 -1
  99. package/dist/streamers/chat.streamer.js +6 -6
  100. package/dist/streamers/chat.streamer.js.map +1 -1
  101. package/dist/support/opportunity.discover.js +2 -2
  102. package/dist/support/opportunity.discover.js.map +1 -1
  103. package/dist/support/opportunity.enricher.js +2 -2
  104. package/dist/support/opportunity.enricher.js.map +1 -1
  105. package/dist/support/protocol.logger.d.ts +1 -1
  106. package/dist/support/protocol.logger.d.ts.map +1 -1
  107. package/dist/tools/index.d.ts.map +1 -1
  108. package/dist/tools/index.js +21 -17
  109. package/dist/tools/index.js.map +1 -1
  110. package/dist/tools/intent.tools.js +67 -67
  111. package/dist/tools/intent.tools.js.map +1 -1
  112. package/dist/tools/network.tools.d.ts +3 -0
  113. package/dist/tools/network.tools.d.ts.map +1 -0
  114. package/dist/tools/network.tools.js +423 -0
  115. package/dist/tools/network.tools.js.map +1 -0
  116. package/dist/tools/opportunity.tools.d.ts.map +1 -1
  117. package/dist/tools/opportunity.tools.js +51 -44
  118. package/dist/tools/opportunity.tools.js.map +1 -1
  119. package/dist/tools/profile.tools.js +17 -17
  120. package/dist/tools/profile.tools.js.map +1 -1
  121. package/dist/tools/tool.helpers.d.ts +7 -7
  122. package/dist/tools/tool.helpers.d.ts.map +1 -1
  123. package/dist/tools/tool.helpers.js +11 -11
  124. package/dist/tools/tool.helpers.js.map +1 -1
  125. package/dist/tools/tool.registry.js +3 -3
  126. package/dist/tools/tool.registry.js.map +1 -1
  127. package/dist/tools/utility.tools.js +3 -3
  128. package/package.json +1 -1
@@ -7,8 +7,8 @@ export type Id<T extends string = string> = string & {
7
7
  export interface OnboardingState {
8
8
  completedAt?: string;
9
9
  flow?: 1 | 2 | 3;
10
- currentStep?: 'profile' | 'summary' | 'connections' | 'create_index' | 'invite_members' | 'join_indexes';
11
- indexId?: string;
10
+ currentStep?: 'profile' | 'summary' | 'connections' | 'create_network' | 'invite_members' | 'join_networks';
11
+ networkId?: string;
12
12
  invitationCode?: string;
13
13
  }
14
14
  /** Social-media handles stored as JSON on the user record. */
@@ -27,9 +27,9 @@ export interface OpportunityDetection {
27
27
  timestamp: string;
28
28
  enrichedFrom?: string[];
29
29
  }
30
- /** A participant (user + index) involved in an opportunity. */
30
+ /** A participant (user + network) involved in an opportunity. */
31
31
  export interface OpportunityActor {
32
- indexId: Id<'indexes'>;
32
+ networkId: Id<'networks'>;
33
33
  userId: Id<'users'>;
34
34
  intent?: Id<'intents'>;
35
35
  role: string;
@@ -47,9 +47,9 @@ export interface OpportunityInterpretation {
47
47
  confidence: number;
48
48
  signals?: OpportunitySignal[];
49
49
  }
50
- /** Optional scoping context (index / conversation) for an opportunity. */
50
+ /** Optional scoping context (network / conversation) for an opportunity. */
51
51
  export interface OpportunityContext {
52
- indexId?: Id<'indexes'>;
52
+ networkId?: Id<'networks'>;
53
53
  conversationId?: Id<'conversations'>;
54
54
  }
55
55
  /** User record returned by getUser (minimal fields plus optional profile fields). */
@@ -95,7 +95,7 @@ export interface CreateIntentData {
95
95
  /** Whether the intent should be hidden from public views */
96
96
  isIncognito?: boolean;
97
97
  /** Index IDs to associate with (optional, uses dynamic scoping if empty) */
98
- indexIds?: string[];
98
+ networkIds?: string[];
99
99
  /** Source type for provenance tracking */
100
100
  sourceType?: 'file' | 'integration' | 'link' | 'discovery_form' | 'enrichment';
101
101
  /** Source ID for provenance tracking */
@@ -131,7 +131,7 @@ export interface UpdateIntentData {
131
131
  /** Updated incognito status */
132
132
  isIncognito?: boolean;
133
133
  /** Updated index associations (replaces existing) */
134
- indexIds?: string[];
134
+ networkIds?: string[];
135
135
  /** Semantic entropy from verifier (0 specific -> 1 vague) */
136
136
  semanticEntropy?: number | null;
137
137
  /** Referential anchor extracted by verifier (if any) */
@@ -207,11 +207,11 @@ export interface SimilarIntentSearchOptions {
207
207
  * Represents a user's membership in an index with full details.
208
208
  * Used for displaying index memberships in chat (index_query).
209
209
  */
210
- export interface IndexMembership {
210
+ export interface NetworkMembership {
211
211
  /** Unique identifier of the index */
212
- indexId: string;
212
+ networkId: string;
213
213
  /** Display title of the index */
214
- indexTitle: string;
214
+ networkTitle: string;
215
215
  /** Index description/prompt (what the community is about) */
216
216
  indexPrompt: string | null;
217
217
  /** Member's permissions in this index */
@@ -372,7 +372,7 @@ export interface CreateOpportunityData {
372
372
  }
373
373
  export interface OpportunityQueryOptions {
374
374
  status?: OpportunityStatus;
375
- indexId?: string;
375
+ networkId?: string;
376
376
  role?: string;
377
377
  limit?: number;
378
378
  offset?: number;
@@ -569,27 +569,27 @@ export interface Database {
569
569
  * @param userId - The unique identifier of the user
570
570
  * @returns Array of index memberships with details
571
571
  */
572
- getIndexMemberships(userId: string): Promise<IndexMembership[]>;
572
+ getNetworkMemberships(userId: string): Promise<NetworkMembership[]>;
573
573
  /**
574
574
  * Get a single index membership by index and user.
575
- * Used when the preloaded memberships list may not contain this index (e.g. after isIndexMember check).
575
+ * Used when the preloaded memberships list may not contain this index (e.g. after isNetworkMember check).
576
576
  *
577
- * @param indexId - The index ID
577
+ * @param networkId - The index ID
578
578
  * @param userId - The user ID
579
579
  * @returns The membership or null if not found
580
580
  */
581
- getIndexMembership(indexId: string, userId: string): Promise<IndexMembership | null>;
581
+ getNetworkMembership(networkId: string, userId: string): Promise<NetworkMembership | null>;
582
582
  /**
583
583
  * Get index by ID (id and title only). Used for opportunity presentation.
584
584
  */
585
- getIndex(indexId: string): Promise<{
585
+ getIndex(networkId: string): Promise<{
586
586
  id: string;
587
587
  title: string;
588
588
  } | null>;
589
589
  /**
590
590
  * Get index by ID with permissions (e.g. joinPolicy). Used by chat tools for create_index_membership.
591
591
  */
592
- getIndexWithPermissions(indexId: string): Promise<{
592
+ getIndexWithPermissions(networkId: string): Promise<{
593
593
  id: string;
594
594
  title: string;
595
595
  permissions: {
@@ -598,7 +598,7 @@ export interface Database {
598
598
  } | null>;
599
599
  /**
600
600
  * Associates an intent with one or more indexes.
601
- * Creates entries in the intentIndexes join table.
601
+ * Creates entries in the intentNetworks join table.
602
602
  *
603
603
  * @param intentId - The intent to associate
604
604
  * @param indexIds - Array of index IDs to associate with
@@ -649,30 +649,30 @@ export interface Database {
649
649
  * Index + member prompts for a user in an index (only when member has autoAssign).
650
650
  * Returns null if user is not a member or autoAssign is false.
651
651
  */
652
- getIndexMemberContext(indexId: string, userId: string): Promise<{
653
- indexId: string;
652
+ getIndexMemberContext(networkId: string, userId: string): Promise<{
653
+ networkId: string;
654
654
  indexPrompt: string | null;
655
655
  memberPrompt: string | null;
656
656
  } | null>;
657
657
  /**
658
658
  * Whether the intent is currently assigned to the index.
659
659
  */
660
- isIntentAssignedToIndex(intentId: string, indexId: string): Promise<boolean>;
660
+ isIntentAssignedToIndex(intentId: string, networkId: string): Promise<boolean>;
661
661
  /**
662
662
  * Assigns an intent to an index (inserts intent_indexes row).
663
663
  */
664
- assignIntentToIndex(intentId: string, indexId: string, relevancyScore?: number): Promise<void>;
664
+ assignIntentToNetwork(intentId: string, networkId: string, relevancyScore?: number): Promise<void>;
665
665
  /**
666
666
  * Returns per-index relevancy scores for an intent's index assignments.
667
667
  */
668
668
  getIntentIndexScores(intentId: string): Promise<Array<{
669
- indexId: string;
669
+ networkId: string;
670
670
  relevancyScore: number | null;
671
671
  }>>;
672
672
  /**
673
673
  * Removes an intent from an index (deletes intent_indexes row).
674
674
  */
675
- unassignIntentFromIndex(intentId: string, indexId: string): Promise<void>;
675
+ unassignIntentFromIndex(intentId: string, networkId: string): Promise<void>;
676
676
  /**
677
677
  * Returns all index IDs that an intent is registered to.
678
678
  */
@@ -693,7 +693,7 @@ export interface Database {
693
693
  * @returns Object containing array of public indexes with owner info
694
694
  */
695
695
  getPublicIndexesNotJoined(userId: string): Promise<{
696
- indexes: Array<{
696
+ networks: Array<{
697
697
  id: string;
698
698
  title: string;
699
699
  prompt: string | null;
@@ -708,40 +708,40 @@ export interface Database {
708
708
  /**
709
709
  * Check if user is an owner of a specific index.
710
710
  *
711
- * @param indexId - The index to check
711
+ * @param networkId - The index to check
712
712
  * @param userId - The user to verify ownership for
713
713
  * @returns True if user is an owner
714
714
  */
715
- isIndexOwner(indexId: string, userId: string): Promise<boolean>;
715
+ isIndexOwner(networkId: string, userId: string): Promise<boolean>;
716
716
  /**
717
717
  * Check if user is a member of a specific index.
718
718
  *
719
- * @param indexId - The index to check
719
+ * @param networkId - The index to check
720
720
  * @param userId - The user to verify membership for
721
721
  * @returns True if user is a member
722
722
  */
723
- isIndexMember(indexId: string, userId: string): Promise<boolean>;
723
+ isNetworkMember(networkId: string, userId: string): Promise<boolean>;
724
724
  /**
725
725
  * Get all members of an index with their details.
726
726
  * **OWNER ONLY** - throws if user is not an owner.
727
727
  *
728
- * @param indexId - The index to get members for
728
+ * @param networkId - The index to get members for
729
729
  * @param requestingUserId - The user requesting (must be owner)
730
730
  * @returns Array of member details with intent counts
731
731
  * @throws Error if requestingUserId is not an owner
732
732
  */
733
- getIndexMembersForOwner(indexId: string, requestingUserId: string): Promise<IndexMemberDetails[]>;
733
+ getIndexMembersForOwner(networkId: string, requestingUserId: string): Promise<IndexMemberDetails[]>;
734
734
  /**
735
735
  * Get all members of an index with their details.
736
736
  * **MEMBER ONLY** - any member of the index can list members (not just owners).
737
737
  * Returns same shape as getIndexMembersForOwner; email may be omitted for privacy.
738
738
  *
739
- * @param indexId - The index to get members for
739
+ * @param networkId - The index to get members for
740
740
  * @param requestingUserId - The user requesting (must be a member of the index)
741
741
  * @returns Array of member details with intent counts
742
742
  * @throws Error if requestingUserId is not a member of the index
743
743
  */
744
- getIndexMembersForMember(indexId: string, requestingUserId: string): Promise<IndexMemberDetails[]>;
744
+ getIndexMembersForMember(networkId: string, requestingUserId: string): Promise<IndexMemberDetails[]>;
745
745
  /**
746
746
  * Get all members from every index the user is a member of (deduplicated).
747
747
  * Used for mentionable-users: anyone who shares at least one index with the requesting user.
@@ -758,13 +758,13 @@ export interface Database {
758
758
  * Get all indexed intents for an index.
759
759
  * **OWNER ONLY** - throws if user is not an owner.
760
760
  *
761
- * @param indexId - The index to get intents for
761
+ * @param networkId - The index to get intents for
762
762
  * @param requestingUserId - The user requesting (must be owner)
763
763
  * @param options - Pagination options
764
764
  * @returns Array of intent details with owner info
765
765
  * @throws Error if requestingUserId is not an owner
766
766
  */
767
- getIndexIntentsForOwner(indexId: string, requestingUserId: string, options?: {
767
+ getIndexIntentsForOwner(networkId: string, requestingUserId: string, options?: {
768
768
  limit?: number;
769
769
  offset?: number;
770
770
  }): Promise<IndexedIntentDetails[]>;
@@ -772,13 +772,13 @@ export interface Database {
772
772
  * Get all indexed intents for an index.
773
773
  * **MEMBER ONLY** - any member of the index can list intents (not just owners).
774
774
  *
775
- * @param indexId - The index to get intents for
775
+ * @param networkId - The index to get intents for
776
776
  * @param requestingUserId - The user requesting (must be a member of the index)
777
777
  * @param options - Pagination options
778
778
  * @returns Array of intent details with owner info
779
779
  * @throws Error if requestingUserId is not a member of the index
780
780
  */
781
- getIndexIntentsForMember(indexId: string, requestingUserId: string, options?: {
781
+ getIndexIntentsForMember(networkId: string, requestingUserId: string, options?: {
782
782
  limit?: number;
783
783
  offset?: number;
784
784
  }): Promise<IndexedIntentDetails[]>;
@@ -786,20 +786,20 @@ export interface Database {
786
786
  * Update index settings.
787
787
  * **OWNER ONLY** - throws if user is not an owner.
788
788
  *
789
- * @param indexId - The index to update
789
+ * @param networkId - The index to update
790
790
  * @param requestingUserId - The user requesting (must be owner)
791
791
  * @param data - The settings to update
792
792
  * @returns The updated index
793
793
  * @throws Error if requestingUserId is not an owner
794
794
  */
795
- updateIndexSettings(indexId: string, requestingUserId: string, data: UpdateIndexSettingsData): Promise<OwnedIndex>;
795
+ updateIndexSettings(networkId: string, requestingUserId: string, data: UpdateIndexSettingsData): Promise<OwnedIndex>;
796
796
  /**
797
797
  * Soft-delete an index (set deletedAt).
798
798
  * Caller must ensure index is not personal and has no other members.
799
799
  *
800
- * @param indexId - The index to soft-delete
800
+ * @param networkId - The index to soft-delete
801
801
  */
802
- softDeleteIndex(indexId: string): Promise<void>;
802
+ softDeleteIndex(networkId: string): Promise<void>;
803
803
  /**
804
804
  * Delete a user's profile (removes profile row).
805
805
  * Used after confirmation in chat tools.
@@ -822,7 +822,7 @@ export interface Database {
822
822
  * @param data - Title, optional prompt, optional imageUrl, optional joinPolicy
823
823
  * @returns The created index with id, title, prompt, imageUrl, permissions
824
824
  */
825
- createIndex(data: {
825
+ createNetwork(data: {
826
826
  title: string;
827
827
  prompt?: string | null;
828
828
  imageUrl?: string | null;
@@ -843,19 +843,19 @@ export interface Database {
843
843
  /**
844
844
  * Count members in an index (for delete guard).
845
845
  *
846
- * @param indexId - The index to count
846
+ * @param networkId - The index to count
847
847
  * @returns Number of members
848
848
  */
849
- getIndexMemberCount(indexId: string): Promise<number>;
849
+ getIndexMemberCount(networkId: string): Promise<number>;
850
850
  /**
851
851
  * Add a user as a member of an index (replaces deprecated lib/index-members.ts).
852
852
  *
853
- * @param indexId - The index to add to
853
+ * @param networkId - The index to add to
854
854
  * @param userId - The user to add
855
855
  * @param role - owner | admin | member
856
856
  * @returns success and optionally alreadyMember if they were already in the index
857
857
  */
858
- addMemberToIndex(indexId: string, userId: string, role: 'owner' | 'admin' | 'member'): Promise<{
858
+ addMemberToIndex(networkId: string, userId: string, role: 'owner' | 'admin' | 'member'): Promise<{
859
859
  success: boolean;
860
860
  alreadyMember?: boolean;
861
861
  }>;
@@ -863,11 +863,11 @@ export interface Database {
863
863
  * Removes a user from an index.
864
864
  * Only the index owner can remove members. Cannot remove the owner.
865
865
  *
866
- * @param indexId - The index to remove from
866
+ * @param networkId - The index to remove from
867
867
  * @param userId - The user to remove
868
868
  * @returns success, or wasOwner/notMember if removal failed
869
869
  */
870
- removeMemberFromIndex(indexId: string, userId: string): Promise<{
870
+ removeMemberFromIndex(networkId: string, userId: string): Promise<{
871
871
  success: boolean;
872
872
  wasOwner?: boolean;
873
873
  notMember?: boolean;
@@ -954,11 +954,11 @@ export interface Database {
954
954
  /**
955
955
  * Get opportunities in an index (for index admins).
956
956
  *
957
- * @param indexId - Index ID
957
+ * @param networkId - Index ID
958
958
  * @param options - Optional filters and pagination
959
959
  * @returns Array of opportunities
960
960
  */
961
- getOpportunitiesForIndex(indexId: string, options?: OpportunityQueryOptions): Promise<Opportunity[]>;
961
+ getOpportunitiesForNetwork(networkId: string, options?: OpportunityQueryOptions): Promise<Opportunity[]>;
962
962
  /**
963
963
  * Update an opportunity's status.
964
964
  *
@@ -984,19 +984,19 @@ export interface Database {
984
984
  * Check if an opportunity already exists between the given actors in the index (deduplication).
985
985
  *
986
986
  * @param actorIds - Array of user IDs that would be actors
987
- * @param indexId - Index ID
987
+ * @param networkId - Index ID
988
988
  * @returns True if a non-expired opportunity exists with exactly these actors in this index
989
989
  */
990
- opportunityExistsBetweenActors(actorIds: string[], indexId: string): Promise<boolean>;
990
+ opportunityExistsBetweenActors(actorIds: string[], networkId: string): Promise<boolean>;
991
991
  /**
992
992
  * Return one non-expired opportunity between the given actors in the index, if any.
993
993
  * Used to avoid creating a duplicate and to surface existing opportunity id/status.
994
994
  *
995
995
  * @param actorIds - Array of user IDs that would be actors
996
- * @param indexId - Index ID
996
+ * @param networkId - Index ID
997
997
  * @returns The first matching opportunity's id and status, or null
998
998
  */
999
- getOpportunityBetweenActors(actorIds: string[], indexId: string): Promise<{
999
+ getOpportunityBetweenActors(actorIds: string[], networkId: string): Promise<{
1000
1000
  id: Id<'opportunities'>;
1001
1001
  status: OpportunityStatus;
1002
1002
  } | null>;
@@ -1023,11 +1023,11 @@ export interface Database {
1023
1023
  /**
1024
1024
  * Expire opportunities for a user removed from an index.
1025
1025
  *
1026
- * @param indexId - Index ID
1026
+ * @param networkId - Index ID
1027
1027
  * @param userId - User ID that was removed
1028
1028
  * @returns Number of opportunities updated to expired
1029
1029
  */
1030
- expireOpportunitiesForRemovedMember(indexId: string, userId: string): Promise<number>;
1030
+ expireOpportunitiesForRemovedMember(networkId: string, userId: string): Promise<number>;
1031
1031
  /**
1032
1032
  * Expire opportunities whose expires_at <= now. Used by maintenance cron.
1033
1033
  *
@@ -1089,7 +1089,7 @@ export interface Database {
1089
1089
  * @returns Array of personal index IDs
1090
1090
  */
1091
1091
  getPersonalIndexesForContact(userId: string): Promise<{
1092
- indexId: string;
1092
+ networkId: string;
1093
1093
  }[]>;
1094
1094
  /** Find a user by email. */
1095
1095
  getUserByEmail(email: string): Promise<{
@@ -1154,29 +1154,29 @@ export interface UserDatabase {
1154
1154
  /** Associate an intent with indexes. */
1155
1155
  associateIntentWithIndexes(intentId: string, indexIds: string[]): Promise<void>;
1156
1156
  /** Assign an intent to an index. */
1157
- assignIntentToIndex(intentId: string, indexId: string, relevancyScore?: number): Promise<void>;
1157
+ assignIntentToNetwork(intentId: string, networkId: string, relevancyScore?: number): Promise<void>;
1158
1158
  /** Unassign an intent from an index. */
1159
- unassignIntentFromIndex(intentId: string, indexId: string): Promise<void>;
1159
+ unassignIntentFromIndex(intentId: string, networkId: string): Promise<void>;
1160
1160
  /** Get index IDs for an intent. */
1161
1161
  getIndexIdsForIntent(intentId: string): Promise<string[]>;
1162
1162
  /** Check if intent is assigned to index. */
1163
- isIntentAssignedToIndex(intentId: string, indexId: string): Promise<boolean>;
1163
+ isIntentAssignedToIndex(intentId: string, networkId: string): Promise<boolean>;
1164
1164
  /** Get all index memberships for the authenticated user. */
1165
- getIndexMemberships(): Promise<IndexMembership[]>;
1165
+ getNetworkMemberships(): Promise<NetworkMembership[]>;
1166
1166
  /** Get index IDs with auto-assign enabled for the authenticated user. */
1167
1167
  getUserIndexIds(): Promise<string[]>;
1168
1168
  /** Get indexes owned by the authenticated user. */
1169
1169
  getOwnedIndexes(): Promise<OwnedIndex[]>;
1170
1170
  /** Get a specific index membership for the authenticated user. */
1171
- getIndexMembership(indexId: string): Promise<IndexMembership | null>;
1171
+ getNetworkMembership(networkId: string): Promise<NetworkMembership | null>;
1172
1172
  /** Get index + member context for the authenticated user (for auto-assign). */
1173
- getIndexMemberContext(indexId: string): Promise<{
1174
- indexId: string;
1173
+ getIndexMemberContext(networkId: string): Promise<{
1174
+ networkId: string;
1175
1175
  indexPrompt: string | null;
1176
1176
  memberPrompt: string | null;
1177
1177
  } | null>;
1178
1178
  /** Create a new index (user becomes owner). */
1179
- createIndex(data: {
1179
+ createNetwork(data: {
1180
1180
  title: string;
1181
1181
  prompt?: string | null;
1182
1182
  imageUrl?: string | null;
@@ -1195,12 +1195,12 @@ export interface UserDatabase {
1195
1195
  };
1196
1196
  }>;
1197
1197
  /** Update index settings (owner only). */
1198
- updateIndexSettings(indexId: string, data: UpdateIndexSettingsData): Promise<OwnedIndex>;
1198
+ updateIndexSettings(networkId: string, data: UpdateIndexSettingsData): Promise<OwnedIndex>;
1199
1199
  /** Soft-delete an index (owner only). */
1200
- softDeleteIndex(indexId: string): Promise<void>;
1200
+ softDeleteIndex(networkId: string): Promise<void>;
1201
1201
  /** Get public indexes (joinPolicy 'anyone') that the user has not joined. */
1202
1202
  getPublicIndexesNotJoined(): Promise<{
1203
- indexes: Array<{
1203
+ networks: Array<{
1204
1204
  id: string;
1205
1205
  title: string;
1206
1206
  prompt: string | null;
@@ -1213,7 +1213,7 @@ export interface UserDatabase {
1213
1213
  }>;
1214
1214
  }>;
1215
1215
  /** Join a public index (validates joinPolicy === 'anyone'). */
1216
- joinPublicIndex(indexId: string): Promise<{
1216
+ joinPublicNetwork(networkId: string): Promise<{
1217
1217
  success: boolean;
1218
1218
  alreadyMember?: boolean;
1219
1219
  }>;
@@ -1255,22 +1255,22 @@ export interface SystemDatabase {
1255
1255
  /** Get a user's basic record (requires shared index membership). */
1256
1256
  getUser(userId: string): Promise<UserRecord | null>;
1257
1257
  /** Get all intents in an index (cross-user, requires membership). */
1258
- getIntentsInIndex(indexId: string, options?: {
1258
+ getIntentsInIndex(networkId: string, options?: {
1259
1259
  limit?: number;
1260
1260
  offset?: number;
1261
1261
  }): Promise<IndexedIntentDetails[]>;
1262
1262
  /** Get a specific user's intents in an index (requires shared membership). */
1263
- getUserIntentsInIndex(userId: string, indexId: string): Promise<ActiveIntent[]>;
1263
+ getUserIntentsInIndex(userId: string, networkId: string): Promise<ActiveIntent[]>;
1264
1264
  /** Get a single intent by ID (if in scope). */
1265
1265
  getIntent(intentId: string): Promise<IntentRecord | null>;
1266
1266
  /** Find similar intents across users within the index scope. */
1267
1267
  findSimilarIntentsInScope(embedding: number[], options?: SimilarIntentSearchOptions): Promise<SimilarIntent[]>;
1268
1268
  /** Check if a user is a member of an index. */
1269
- isIndexMember(indexId: string, userId: string): Promise<boolean>;
1269
+ isNetworkMember(networkId: string, userId: string): Promise<boolean>;
1270
1270
  /** Check if a user is an owner of an index. */
1271
- isIndexOwner(indexId: string, userId: string): Promise<boolean>;
1271
+ isIndexOwner(networkId: string, userId: string): Promise<boolean>;
1272
1272
  /** Get all members of an index (requires membership). */
1273
- getIndexMembers(indexId: string): Promise<IndexMemberDetails[]>;
1273
+ getIndexMembers(networkId: string): Promise<IndexMemberDetails[]>;
1274
1274
  /** Get all members across all indexes in scope (deduplicated). */
1275
1275
  getMembersFromScope(): Promise<{
1276
1276
  userId: Id<'users'>;
@@ -1278,23 +1278,23 @@ export interface SystemDatabase {
1278
1278
  avatar: string | null;
1279
1279
  }[]>;
1280
1280
  /** Add a user to an index (requires ownership or 'anyone' policy). */
1281
- addMemberToIndex(indexId: string, userId: string, role: 'owner' | 'admin' | 'member'): Promise<{
1281
+ addMemberToIndex(networkId: string, userId: string, role: 'owner' | 'admin' | 'member'): Promise<{
1282
1282
  success: boolean;
1283
1283
  alreadyMember?: boolean;
1284
1284
  }>;
1285
1285
  /** Remove a user from an index (requires ownership). Cannot remove the owner. */
1286
- removeMemberFromIndex(indexId: string, userId: string): Promise<{
1286
+ removeMemberFromIndex(networkId: string, userId: string): Promise<{
1287
1287
  success: boolean;
1288
1288
  wasOwner?: boolean;
1289
1289
  notMember?: boolean;
1290
1290
  }>;
1291
1291
  /** Get index info by ID (requires scope). */
1292
- getIndex(indexId: string): Promise<{
1292
+ getIndex(networkId: string): Promise<{
1293
1293
  id: string;
1294
1294
  title: string;
1295
1295
  } | null>;
1296
1296
  /** Get index with permissions (requires scope). */
1297
- getIndexWithPermissions(indexId: string): Promise<{
1297
+ getIndexWithPermissions(networkId: string): Promise<{
1298
1298
  id: string;
1299
1299
  title: string;
1300
1300
  permissions: {
@@ -1302,7 +1302,7 @@ export interface SystemDatabase {
1302
1302
  };
1303
1303
  } | null>;
1304
1304
  /** Get member count for an index (requires scope). */
1305
- getIndexMemberCount(indexId: string): Promise<number>;
1305
+ getIndexMemberCount(networkId: string): Promise<number>;
1306
1306
  /** Create an opportunity (cross-user). */
1307
1307
  createOpportunity(data: CreateOpportunityData): Promise<Opportunity>;
1308
1308
  /** Create opportunity and expire overlapping ones atomically. */
@@ -1313,13 +1313,13 @@ export interface SystemDatabase {
1313
1313
  /** Get an opportunity by ID (for system processing). */
1314
1314
  getOpportunity(id: string): Promise<Opportunity | null>;
1315
1315
  /** Get opportunities for an index (requires membership). */
1316
- getOpportunitiesForIndex(indexId: string, options?: OpportunityQueryOptions): Promise<Opportunity[]>;
1316
+ getOpportunitiesForNetwork(networkId: string, options?: OpportunityQueryOptions): Promise<Opportunity[]>;
1317
1317
  /** Update an opportunity's status (system-level). */
1318
1318
  updateOpportunityStatus(id: string, status: OpportunityStatus): Promise<Opportunity | null>;
1319
1319
  /** Check if opportunity exists between actors in an index. */
1320
- opportunityExistsBetweenActors(actorIds: string[], indexId: string): Promise<boolean>;
1320
+ opportunityExistsBetweenActors(actorIds: string[], networkId: string): Promise<boolean>;
1321
1321
  /** Return one opportunity between actors in the index (id + status), or null. */
1322
- getOpportunityBetweenActors(actorIds: string[], indexId: string): Promise<{
1322
+ getOpportunityBetweenActors(actorIds: string[], networkId: string): Promise<{
1323
1323
  id: Id<'opportunities'>;
1324
1324
  status: OpportunityStatus;
1325
1325
  } | null>;
@@ -1330,7 +1330,7 @@ export interface SystemDatabase {
1330
1330
  /** Expire opportunities referencing an intent. */
1331
1331
  expireOpportunitiesByIntent(intentId: string): Promise<number>;
1332
1332
  /** Expire opportunities for a removed member. */
1333
- expireOpportunitiesForRemovedMember(indexId: string, userId: string): Promise<number>;
1333
+ expireOpportunitiesForRemovedMember(networkId: string, userId: string): Promise<number>;
1334
1334
  /** Expire stale opportunities (maintenance). */
1335
1335
  expireStaleOpportunities(): Promise<number>;
1336
1336
  /** Get a HyDE document (cross-user for matching). */
@@ -1354,13 +1354,13 @@ export type ProfileGraphDatabase = Pick<Database, 'getProfile' | 'getUser' | 'up
1354
1354
  /**
1355
1355
  * Composite database interface for Chat Graph.
1356
1356
  * Includes direct ChatGraph operations plus all methods needed by
1357
- * internally composed subgraphs (ProfileGraph, OpportunityGraph, IntentGraph, IndexGraph).
1357
+ * internally composed subgraphs (ProfileGraph, OpportunityGraph, IntentGraph, NetworkGraph).
1358
1358
  *
1359
1359
  * Use this type when ChatGraph orchestrates subgraphs internally.
1360
1360
  *
1361
1361
  * Access layer: Both UserDatabase + SystemDatabase (orchestrates all operations)
1362
1362
  */
1363
- export type ChatGraphCompositeDatabase = Pick<Database, 'getProfile' | 'getActiveIntents' | 'getIntentsInIndexForMember' | 'getUser' | 'updateUser' | 'saveProfile' | 'softDeleteGhost' | 'createIntent' | 'updateIntent' | 'archiveIntent' | 'createOpportunity' | 'getOpportunity' | 'opportunityExistsBetweenActors' | 'getOpportunityBetweenActors' | 'findOverlappingOpportunities' | 'getOpportunitiesForUser' | 'updateOpportunityStatus' | 'getHydeDocument' | 'getHydeDocumentsForSource' | 'saveHydeDocument' | 'getIntent' | 'getPublicIndexesNotJoined' | 'getUserIndexIds' | 'getIndexMemberships' | 'getIndexMembership' | 'getIndex' | 'getIndexWithPermissions' | 'getIntentForIndexing' | 'getIndexMemberContext' | 'isIntentAssignedToIndex' | 'assignIntentToIndex' | 'unassignIntentFromIndex' | 'getIndexIdsForIntent' | 'getIntentIndexScores' | 'getPersonalIndexesForContact' | 'getOwnedIndexes' | 'isIndexOwner' | 'isIndexMember' | 'getIndexMembersForOwner' | 'getIndexMembersForMember' | 'getMembersFromUserIndexes' | 'getIndexIntentsForOwner' | 'getIndexIntentsForMember' | 'updateIndexSettings' | 'softDeleteIndex' | 'deleteProfile' | 'getProfileByUserId' | 'createIndex' | 'getIndexMemberCount' | 'addMemberToIndex' | 'removeMemberFromIndex'>;
1363
+ export type ChatGraphCompositeDatabase = Pick<Database, 'getProfile' | 'getActiveIntents' | 'getIntentsInIndexForMember' | 'getUser' | 'updateUser' | 'saveProfile' | 'softDeleteGhost' | 'createIntent' | 'updateIntent' | 'archiveIntent' | 'createOpportunity' | 'getOpportunity' | 'opportunityExistsBetweenActors' | 'getOpportunityBetweenActors' | 'findOverlappingOpportunities' | 'getOpportunitiesForUser' | 'updateOpportunityStatus' | 'getHydeDocument' | 'getHydeDocumentsForSource' | 'saveHydeDocument' | 'getIntent' | 'getPublicIndexesNotJoined' | 'getUserIndexIds' | 'getNetworkMemberships' | 'getNetworkMembership' | 'getIndex' | 'getIndexWithPermissions' | 'getIntentForIndexing' | 'getIndexMemberContext' | 'isIntentAssignedToIndex' | 'assignIntentToNetwork' | 'unassignIntentFromIndex' | 'getIndexIdsForIntent' | 'getIntentIndexScores' | 'getPersonalIndexesForContact' | 'getOwnedIndexes' | 'isIndexOwner' | 'isNetworkMember' | 'getIndexMembersForOwner' | 'getIndexMembersForMember' | 'getMembersFromUserIndexes' | 'getIndexIntentsForOwner' | 'getIndexIntentsForMember' | 'updateIndexSettings' | 'softDeleteIndex' | 'deleteProfile' | 'getProfileByUserId' | 'createNetwork' | 'getIndexMemberCount' | 'addMemberToIndex' | 'removeMemberFromIndex'>;
1364
1364
  /**
1365
1365
  * Database interface for Opportunity Graph operations.
1366
1366
  * Includes prep/scope (index membership, intents, index details), persist (create, dedupe),
@@ -1368,7 +1368,7 @@ export type ChatGraphCompositeDatabase = Pick<Database, 'getProfile' | 'getActiv
1368
1368
  *
1369
1369
  * Access layer: SystemDatabase (cross-user opportunity operations)
1370
1370
  */
1371
- export type OpportunityGraphDatabase = Pick<Database, 'getProfile' | 'createOpportunity' | 'opportunityExistsBetweenActors' | 'getOpportunityBetweenActors' | 'findOverlappingOpportunities' | 'getUserIndexIds' | 'getIndexMemberships' | 'getActiveIntents' | 'getIndexIdsForIntent' | 'getIndex' | 'getIndexMemberCount' | 'getIntentIndexScores' | 'getIndexMemberContext' | 'getOpportunity' | 'getOpportunitiesForUser' | 'updateOpportunityStatus' | 'isIndexMember' | 'getUser' | 'getIntent'>;
1371
+ export type OpportunityGraphDatabase = Pick<Database, 'getProfile' | 'createOpportunity' | 'opportunityExistsBetweenActors' | 'getOpportunityBetweenActors' | 'findOverlappingOpportunities' | 'getUserIndexIds' | 'getNetworkMemberships' | 'getActiveIntents' | 'getIndexIdsForIntent' | 'getIndex' | 'getIndexMemberCount' | 'getIntentIndexScores' | 'getIndexMemberContext' | 'getOpportunity' | 'getOpportunitiesForUser' | 'updateOpportunityStatus' | 'isNetworkMember' | 'isIndexOwner' | 'getUser' | 'getIntent'>;
1372
1372
  /**
1373
1373
  * Database interface for the negotiation graph (A2A conversation/task/artifact persistence).
1374
1374
  *
@@ -1447,7 +1447,7 @@ export interface NegotiationDatabase {
1447
1447
  *
1448
1448
  * Access layer: Both UserDatabase + SystemDatabase (API handles auth)
1449
1449
  */
1450
- export type OpportunityControllerDatabase = Pick<Database, 'getOpportunity' | 'getOpportunitiesForUser' | 'getOpportunitiesForIndex' | 'resolveOpportunityId' | 'updateOpportunityStatus' | 'createOpportunity' | 'createOpportunityAndExpireIds' | 'opportunityExistsBetweenActors' | 'findOverlappingOpportunities' | 'getAcceptedOpportunitiesBetweenActors' | 'acceptSiblingOpportunities' | 'isIndexOwner' | 'isIndexMember' | 'getUser' | 'getIndex' | 'getIndexMemberships' | 'getProfile' | 'getActiveIntents' | 'upsertContactMembership'>;
1450
+ export type OpportunityControllerDatabase = Pick<Database, 'getOpportunity' | 'getOpportunitiesForUser' | 'getOpportunitiesForNetwork' | 'resolveOpportunityId' | 'updateOpportunityStatus' | 'createOpportunity' | 'createOpportunityAndExpireIds' | 'opportunityExistsBetweenActors' | 'findOverlappingOpportunities' | 'getAcceptedOpportunitiesBetweenActors' | 'acceptSiblingOpportunities' | 'isIndexOwner' | 'isNetworkMember' | 'getUser' | 'getIndex' | 'getNetworkMemberships' | 'getProfile' | 'getActiveIntents' | 'upsertContactMembership'>;
1451
1451
  /**
1452
1452
  * Database interface narrowed for Intent Graph operations.
1453
1453
  * Provides state population (getActiveIntents), action execution (create/update/archive),
@@ -1455,29 +1455,29 @@ export type OpportunityControllerDatabase = Pick<Database, 'getOpportunity' | 'g
1455
1455
  *
1456
1456
  * Access layer: UserDatabase (mutations on own intents) + SystemDatabase (index-scoped reads)
1457
1457
  */
1458
- export type IntentGraphDatabase = Pick<Database, 'getActiveIntents' | 'getIntentsInIndexForMember' | 'createIntent' | 'updateIntent' | 'archiveIntent' | 'isIndexMember' | 'getIndexIntentsForMember' | 'getUser' | 'getProfile' | 'getPersonalIndexesForContact' | 'assignIntentToIndex'>;
1458
+ export type IntentGraphDatabase = Pick<Database, 'getActiveIntents' | 'getIntentsInIndexForMember' | 'createIntent' | 'updateIntent' | 'archiveIntent' | 'isNetworkMember' | 'getIndexIntentsForMember' | 'getUser' | 'getProfile' | 'getPersonalIndexesForContact' | 'assignIntentToNetwork'>;
1459
1459
  /**
1460
1460
  * Database interface narrowed for Index Graph CRUD operations.
1461
1461
  * Handles create, read, update, delete of indexes (communities).
1462
1462
  *
1463
1463
  * Access layer: UserDatabase (CRUD on own indexes and memberships)
1464
1464
  */
1465
- export type IndexGraphDatabase = Pick<Database, 'getIndexMemberships' | 'getOwnedIndexes' | 'getPublicIndexesNotJoined' | 'isIndexOwner' | 'isIndexMember' | 'getIndex' | 'createIndex' | 'addMemberToIndex' | 'updateIndexSettings' | 'softDeleteIndex' | 'getIndexMemberCount'>;
1465
+ export type NetworkGraphDatabase = Pick<Database, 'getNetworkMemberships' | 'getOwnedIndexes' | 'getPublicIndexesNotJoined' | 'isIndexOwner' | 'isNetworkMember' | 'getIndex' | 'createNetwork' | 'addMemberToIndex' | 'updateIndexSettings' | 'softDeleteIndex' | 'getIndexMemberCount'>;
1466
1466
  /**
1467
1467
  * Database interface narrowed for Intent Index Graph operations.
1468
1468
  * Provides intent/index context and assignment for intent–index evaluation.
1469
- * (Migrated from the old IndexGraphDatabase.)
1469
+ * (Migrated from the old NetworkGraphDatabase.)
1470
1470
  *
1471
1471
  * Access layer: UserDatabase (own intent assignment) + SystemDatabase (index context)
1472
1472
  */
1473
- export type IntentIndexGraphDatabase = Pick<Database, 'getIntentForIndexing' | 'getIndexMemberContext' | 'isIntentAssignedToIndex' | 'assignIntentToIndex' | 'unassignIntentFromIndex' | 'getIntent' | 'isIndexMember' | 'getIndexIdsForIntent' | 'getIndexIntentsForMember' | 'getIntentsInIndexForMember'>;
1473
+ export type IntentNetworkGraphDatabase = Pick<Database, 'getIntentForIndexing' | 'getIndexMemberContext' | 'isIntentAssignedToIndex' | 'assignIntentToNetwork' | 'unassignIntentFromIndex' | 'getIntent' | 'isNetworkMember' | 'isIndexOwner' | 'getIndexIdsForIntent' | 'getIndexIntentsForMember' | 'getIntentsInIndexForMember'>;
1474
1474
  /**
1475
1475
  * Database interface narrowed for Index Membership Graph operations.
1476
1476
  * Handles CRUD for index memberships (add, list, remove members).
1477
1477
  *
1478
1478
  * Access layer: SystemDatabase (cross-user membership operations)
1479
1479
  */
1480
- export type IndexMembershipGraphDatabase = Pick<Database, 'isIndexMember' | 'isIndexOwner' | 'getIndexWithPermissions' | 'addMemberToIndex' | 'removeMemberFromIndex' | 'getIndexMembersForMember'>;
1480
+ export type NetworkMembershipGraphDatabase = Pick<Database, 'isNetworkMember' | 'isIndexOwner' | 'getIndexWithPermissions' | 'addMemberToIndex' | 'removeMemberFromIndex' | 'getIndexMembersForMember'>;
1481
1481
  /**
1482
1482
  * Database interface narrowed for HyDE Graph operations.
1483
1483
  * Provides HyDE document CRUD and intent lookup for refresh.