@indexnetwork/protocol 4.3.3-rc.308.1 → 4.3.4-rc.310.1

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 (136) hide show
  1. package/IMPLEMENTATION.md +2 -2
  2. package/dist/chat/chat.agent.d.ts +1 -1
  3. package/dist/chat/chat.agent.d.ts.map +1 -1
  4. package/dist/chat/chat.agent.js +12 -2
  5. package/dist/chat/chat.agent.js.map +1 -1
  6. package/dist/chat/chat.graph.d.ts +16 -0
  7. package/dist/chat/chat.graph.d.ts.map +1 -1
  8. package/dist/chat/chat.graph.js +5 -2
  9. package/dist/chat/chat.graph.js.map +1 -1
  10. package/dist/chat/chat.prompt.d.ts.map +1 -1
  11. package/dist/chat/chat.prompt.js +44 -37
  12. package/dist/chat/chat.prompt.js.map +1 -1
  13. package/dist/chat/chat.prompt.modules.js +8 -8
  14. package/dist/chat/chat.prompt.modules.js.map +1 -1
  15. package/dist/chat/chat.state.d.ts +7 -4
  16. package/dist/chat/chat.state.d.ts.map +1 -1
  17. package/dist/chat/chat.state.js +12 -3
  18. package/dist/chat/chat.state.js.map +1 -1
  19. package/dist/chat/chat.streamer.d.ts +5 -0
  20. package/dist/chat/chat.streamer.d.ts.map +1 -1
  21. package/dist/chat/chat.streamer.js +13 -4
  22. package/dist/chat/chat.streamer.js.map +1 -1
  23. package/dist/chat/tests/chat.graph.mocks.d.ts +1 -1
  24. package/dist/chat/tests/chat.graph.mocks.js +1 -1
  25. package/dist/chat/tests/chat.graph.mocks.js.map +1 -1
  26. package/dist/contact/contact.tools.js +6 -6
  27. package/dist/contact/contact.tools.js.map +1 -1
  28. package/dist/enrichment/enrichment.tools.d.ts.map +1 -1
  29. package/dist/enrichment/enrichment.tools.js +23 -26
  30. package/dist/enrichment/enrichment.tools.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/integration/integration.tools.js +1 -1
  36. package/dist/integration/integration.tools.js.map +1 -1
  37. package/dist/intent/intent.graph.d.ts.map +1 -1
  38. package/dist/intent/intent.graph.js +9 -9
  39. package/dist/intent/intent.graph.js.map +1 -1
  40. package/dist/intent/intent.indexer.d.ts +1 -1
  41. package/dist/intent/intent.indexer.js +4 -4
  42. package/dist/intent/intent.indexer.js.map +1 -1
  43. package/dist/intent/intent.state.d.ts +8 -8
  44. package/dist/intent/intent.state.js +8 -8
  45. package/dist/intent/intent.state.js.map +1 -1
  46. package/dist/intent/intent.tools.d.ts.map +1 -1
  47. package/dist/intent/intent.tools.js +87 -70
  48. package/dist/intent/intent.tools.js.map +1 -1
  49. package/dist/maintenance/maintenance.graph.d.ts +2 -2
  50. package/dist/maintenance/maintenance.graph.d.ts.map +1 -1
  51. package/dist/maintenance/maintenance.graph.js.map +1 -1
  52. package/dist/mcp/mcp.server.d.ts +5 -7
  53. package/dist/mcp/mcp.server.d.ts.map +1 -1
  54. package/dist/mcp/mcp.server.js +11 -20
  55. package/dist/mcp/mcp.server.js.map +1 -1
  56. package/dist/negotiation/negotiation.tools.d.ts.map +1 -1
  57. package/dist/negotiation/negotiation.tools.js +11 -7
  58. package/dist/negotiation/negotiation.tools.js.map +1 -1
  59. package/dist/network/indexer/indexer.graph.d.ts +2 -2
  60. package/dist/network/indexer/indexer.graph.d.ts.map +1 -1
  61. package/dist/network/indexer/indexer.graph.js +13 -13
  62. package/dist/network/indexer/indexer.graph.js.map +1 -1
  63. package/dist/network/indexer/indexer.state.d.ts +3 -3
  64. package/dist/network/indexer/indexer.state.d.ts.map +1 -1
  65. package/dist/network/indexer/indexer.state.js +4 -4
  66. package/dist/network/indexer/indexer.state.js.map +1 -1
  67. package/dist/network/membership/membership.graph.d.ts +1 -1
  68. package/dist/network/membership/membership.graph.js +21 -21
  69. package/dist/network/membership/membership.graph.js.map +1 -1
  70. package/dist/network/membership/membership.state.d.ts +2 -2
  71. package/dist/network/membership/membership.state.js +2 -2
  72. package/dist/network/membership/membership.state.js.map +1 -1
  73. package/dist/network/network.graph.d.ts +1 -1
  74. package/dist/network/network.graph.d.ts.map +1 -1
  75. package/dist/network/network.graph.js +13 -13
  76. package/dist/network/network.graph.js.map +1 -1
  77. package/dist/network/network.state.d.ts +3 -3
  78. package/dist/network/network.state.d.ts.map +1 -1
  79. package/dist/network/network.state.js +3 -3
  80. package/dist/network/network.state.js.map +1 -1
  81. package/dist/network/network.tools.js +68 -68
  82. package/dist/network/network.tools.js.map +1 -1
  83. package/dist/opportunity/opportunity.discover.d.ts +1 -1
  84. package/dist/opportunity/opportunity.discover.d.ts.map +1 -1
  85. package/dist/opportunity/opportunity.discover.js +1 -1
  86. package/dist/opportunity/opportunity.discover.js.map +1 -1
  87. package/dist/opportunity/opportunity.graph.js +11 -11
  88. package/dist/opportunity/opportunity.graph.js.map +1 -1
  89. package/dist/opportunity/opportunity.introducer.d.ts +3 -3
  90. package/dist/opportunity/opportunity.introducer.d.ts.map +1 -1
  91. package/dist/opportunity/opportunity.introducer.js +2 -2
  92. package/dist/opportunity/opportunity.introducer.js.map +1 -1
  93. package/dist/opportunity/opportunity.state.d.ts +1 -1
  94. package/dist/opportunity/opportunity.state.js +1 -1
  95. package/dist/opportunity/opportunity.state.js.map +1 -1
  96. package/dist/opportunity/opportunity.tools.d.ts.map +1 -1
  97. package/dist/opportunity/opportunity.tools.js +43 -47
  98. package/dist/opportunity/opportunity.tools.js.map +1 -1
  99. package/dist/premise/premise.indexer.d.ts +1 -1
  100. package/dist/premise/premise.indexer.js +5 -5
  101. package/dist/premise/premise.indexer.js.map +1 -1
  102. package/dist/questioner/questioner.tools.d.ts +1 -1
  103. package/dist/questioner/questioner.tools.d.ts.map +1 -1
  104. package/dist/questioner/questioner.tools.js +5 -6
  105. package/dist/questioner/questioner.tools.js.map +1 -1
  106. package/dist/shared/agent/tool.factory.d.ts +1 -1
  107. package/dist/shared/agent/tool.factory.d.ts.map +1 -1
  108. package/dist/shared/agent/tool.factory.js +10 -11
  109. package/dist/shared/agent/tool.factory.js.map +1 -1
  110. package/dist/shared/agent/tool.helpers.d.ts +6 -6
  111. package/dist/shared/agent/tool.helpers.d.ts.map +1 -1
  112. package/dist/shared/agent/tool.helpers.js +2 -2
  113. package/dist/shared/agent/tool.helpers.js.map +1 -1
  114. package/dist/shared/agent/tool.registry.js +1 -1
  115. package/dist/shared/agent/tool.registry.js.map +1 -1
  116. package/dist/shared/agent/tool.scope.d.ts +12 -0
  117. package/dist/shared/agent/tool.scope.d.ts.map +1 -1
  118. package/dist/shared/agent/tool.scope.js +14 -0
  119. package/dist/shared/agent/tool.scope.js.map +1 -1
  120. package/dist/shared/agent/utility.tools.js +20 -20
  121. package/dist/shared/agent/utility.tools.js.map +1 -1
  122. package/dist/shared/interfaces/auth.interface.d.ts +3 -3
  123. package/dist/shared/interfaces/auth.interface.js.map +1 -1
  124. package/dist/shared/interfaces/database.interface.d.ts +59 -59
  125. package/dist/shared/interfaces/database.interface.d.ts.map +1 -1
  126. package/dist/shared/interfaces/database.interface.js.map +1 -1
  127. package/dist/shared/interfaces/discovery-run.interface.d.ts +1 -1
  128. package/dist/shared/interfaces/discovery-run.interface.d.ts.map +1 -1
  129. package/dist/shared/interfaces/discovery-run.interface.js.map +1 -1
  130. package/dist/shared/interfaces/embedder.interface.d.ts +2 -2
  131. package/dist/shared/interfaces/embedder.interface.d.ts.map +1 -1
  132. package/dist/shared/interfaces/embedder.interface.js.map +1 -1
  133. package/dist/shared/interfaces/enrichment-run.interface.d.ts +1 -1
  134. package/dist/shared/interfaces/enrichment-run.interface.d.ts.map +1 -1
  135. package/dist/shared/interfaces/enrichment-run.interface.js.map +1 -1
  136. package/package.json +1 -1
@@ -7,7 +7,7 @@ const logger = protocolLogger("NetworkGraphFactory");
7
7
  * Factory class to build and compile the Index (CRUD) Graph.
8
8
  *
9
9
  * Handles create, read, update, and delete operations for indexes.
10
- * Membership and intent-index assignment operations are handled by
10
+ * Membership and intent-network assignment operations are handled by
11
11
  * separate graphs (NetworkMembershipGraph and IntentNetworkGraph).
12
12
  *
13
13
  * Flow:
@@ -20,11 +20,11 @@ export class NetworkGraphFactory {
20
20
  createGraph() {
21
21
  // --- NODE DEFINITIONS ---
22
22
  /**
23
- * Read Node: List indexes the user belongs to and owns.
23
+ * Read Node: List networks the user belongs to and owns.
24
24
  */
25
25
  const readNode = async (state) => {
26
26
  return timed("NetworkGraph.read", async () => {
27
- logger.verbose("Read indexes", { userId: state.userId, networkId: state.networkId, showAll: state.showAll });
27
+ logger.verbose("Read networks", { userId: state.userId, networkId: state.networkId, showAll: state.showAll });
28
28
  // Shared projections for both the scoped and unscoped read paths.
29
29
  const projectMembership = (m) => ({
30
30
  networkId: m.networkId,
@@ -48,12 +48,12 @@ export class NetworkGraphFactory {
48
48
  this.database.getOwnedIndexes(state.userId),
49
49
  this.database.getPublicIndexesNotJoined(state.userId),
50
50
  ]);
51
- // If index-scoped and not showAll, return just that index plus the
52
- // user's personal index (their contacts). The personal index is part
51
+ // If network-scoped and not showAll, return just that index plus the
52
+ // user's personal network (their contacts). The personal network is part
53
53
  // of every allowed-network reach calculation for network-bound agents,
54
54
  // and a user clicked into a community-scoped
55
55
  // chat still owns their contact list — so surfacing it here keeps
56
- // tools that operate on the personal index (add_contact, list_contacts,
56
+ // tools that operate on the personal network (add_contact, list_contacts,
57
57
  // import_*_contacts) discoverable. Other community memberships are
58
58
  // still hidden, and `publicNetworks` is omitted.
59
59
  const scopeToCurrentIndex = state.networkId && !state.showAll;
@@ -92,7 +92,7 @@ export class NetworkGraphFactory {
92
92
  stats: {
93
93
  memberOfCount: memberOf.length,
94
94
  ownsCount: owns.length,
95
- scopeNote: "Showing current index and your personal index. Use showAll: true for all indexes.",
95
+ scopeNote: "Showing current network and your personal network. Use showAll: true for all networks.",
96
96
  },
97
97
  },
98
98
  };
@@ -115,7 +115,7 @@ export class NetworkGraphFactory {
115
115
  };
116
116
  }
117
117
  catch (err) {
118
- logger.error("Read indexes failed", { error: err });
118
+ logger.error("Read networks failed", { error: err });
119
119
  return { error: "Failed to fetch network information." };
120
120
  }
121
121
  });
@@ -125,7 +125,7 @@ export class NetworkGraphFactory {
125
125
  */
126
126
  const createNode = async (state) => {
127
127
  return timed("NetworkGraph.create", async () => {
128
- logger.verbose("Create index", { userId: state.userId, createInput: state.createInput });
128
+ logger.verbose("Create network", { userId: state.userId, createInput: state.createInput });
129
129
  if (!state.createInput?.title?.trim()) {
130
130
  return { mutationResult: { success: false, error: "Title is required." } };
131
131
  }
@@ -157,7 +157,7 @@ export class NetworkGraphFactory {
157
157
  };
158
158
  }
159
159
  catch (err) {
160
- logger.error("Create index failed", { error: err });
160
+ logger.error("Create network failed", { error: err });
161
161
  if (createdIndexId) {
162
162
  try {
163
163
  await this.database.softDeleteNetwork(createdIndexId);
@@ -204,12 +204,12 @@ export class NetworkGraphFactory {
204
204
  });
205
205
  };
206
206
  /**
207
- * Delete Node: Soft-delete an index (owner only, sole member).
207
+ * Delete Node: Soft-delete a network (owner only, sole member).
208
208
  */
209
209
  const deleteNode = async (state) => {
210
210
  return timed("NetworkGraph.delete", async () => {
211
211
  const networkId = state.networkId;
212
- logger.verbose("Delete index", { userId: state.userId, networkId });
212
+ logger.verbose("Delete network", { userId: state.userId, networkId });
213
213
  if (!networkId) {
214
214
  return { mutationResult: { success: false, error: "networkId is required for delete." } };
215
215
  }
@@ -232,7 +232,7 @@ export class NetworkGraphFactory {
232
232
  };
233
233
  }
234
234
  catch (err) {
235
- logger.error("Delete index failed", { error: err });
235
+ logger.error("Delete network failed", { error: err });
236
236
  return { mutationResult: { success: false, error: "Failed to delete network." } };
237
237
  }
238
238
  });
@@ -1 +1 @@
1
- {"version":3,"file":"network.graph.js","sourceRoot":"/","sources":["network/network.graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IAC9B,YAAoB,QAA8B;QAA9B,aAAQ,GAAR,QAAQ,CAAsB;IAAG,CAAC;IAE/C,WAAW;QAChB,2BAA2B;QAE3B;;WAEG;QACH,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAqC,EAAE,EAAE;YAC/D,OAAO,KAAK,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;gBAC3C,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAE7G,kEAAkE;gBAClE,MAAM,iBAAiB,GAAG,CAAC,CAA0E,EAAE,EAAE,CAAC,CAAC;oBACzG,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,KAAK,EAAE,CAAC,CAAC,YAAY;oBACrB,MAAM,EAAE,CAAC,CAAC,WAAW;oBACrB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,CAAC,CAAoE,EAAE,EAAE,CAAC,CAAC;oBAC9F,SAAS,EAAE,CAAC,CAAC,EAAE;oBACf,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU;iBACrC,CAAC,CAAC;gBAEH,IAAI,CAAC;oBACH,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,mBAAmB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;wBAC5E,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC;wBACjD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;wBAC3C,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC;qBACtD,CAAC,CAAC;oBAEH,mEAAmE;oBACnE,qEAAqE;oBACrE,uEAAuE;oBACvE,6CAA6C;oBAC7C,kEAAkE;oBAClE,wEAAwE;oBACxE,mEAAmE;oBACnE,iDAAiD;oBACjD,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC9D,IAAI,mBAAmB,EAAE,CAAC;wBACxB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAU,CAAC;wBACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACd,OAAO;gCACL,UAAU,EAAE;oCACV,QAAQ,EAAE,EAAE;oCACZ,IAAI,EAAE,EAAE;oCACR,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,4CAA4C,EAAE;iCACnG;6BACF,CAAC;wBACJ,CAAC;wBACD,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;wBAC/E,MAAM,kBAAkB,GAAG,gBAAgB,EAAE,UAAU;4BACrD,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;wBAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;wBACjE,MAAM,aAAa,GAAG,kBAAkB;4BACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,kBAAkB,CAAC,SAAS,CAAC;4BACjE,CAAC,CAAC,SAAS,CAAC;wBACd,MAAM,QAAQ,GAAG;4BACf,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAClE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yBACvE,CAAC;wBACF,MAAM,IAAI,GAAG;4BACX,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BACnD,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yBACxD,CAAC;wBACF,OAAO;4BACL,UAAU,EAAE;gCACV,QAAQ;gCACR,IAAI;gCACJ,KAAK,EAAE;oCACL,aAAa,EAAE,QAAQ,CAAC,MAAM;oCAC9B,SAAS,EAAE,IAAI,CAAC,MAAM;oCACtB,SAAS,EAAE,mFAAmF;iCAC/F;6BACF;yBACF,CAAC;oBACJ,CAAC;oBAED,4CAA4C;oBAC5C,MAAM,cAAc,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBAChE,SAAS,EAAE,GAAG,CAAC,EAAE;wBACjB,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,WAAW,EAAE,GAAG,CAAC,WAAW;wBAC5B,KAAK,EAAE,GAAG,CAAC,KAAK;qBACjB,CAAC,CAAC,CAAC;oBAEJ,OAAO;wBACL,UAAU,EAAE;4BACV,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC;4BAC/C,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;4BACpC,cAAc;4BACd,KAAK,EAAE,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,cAAc,CAAC,MAAM,EAAE;yBAC5H;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpD,OAAO,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC;gBAC3D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF;;WAEG;QACH,MAAM,UAAU,GAAG,KAAK,EAAE,KAAqC,EAAE,EAAE;YACjE,OAAO,KAAK,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;gBAC7C,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBAEzF,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;oBACtC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC;gBAC7E,CAAC;gBAED,IAAI,cAAkC,CAAC;gBACvC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;wBAC9C,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;wBACrC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS;wBACrD,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,SAAS;wBACjD,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU;qBACzC,CAAC,CAAC;oBACH,cAAc,GAAG,KAAK,CAAC,EAAE,CAAC;oBAE1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACtF,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBACnB,MAAM,CAAC,KAAK,CAAC,yDAAyD,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;wBACjG,IAAI,CAAC;4BAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAA,CAAC;wBACjE,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sDAAsD,EAAE,EAAE,CAAC;oBAC/G,CAAC;oBAED,OAAO;wBACL,cAAc,EAAE;4BACd,OAAO,EAAE,IAAI;4BACb,SAAS,EAAE,KAAK,CAAC,EAAE;4BACnB,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,OAAO,EAAE,YAAY,KAAK,CAAC,KAAK,+BAA+B;yBAChE;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpD,IAAI,cAAc,EAAE,CAAC;wBACnB,IAAI,CAAC;4BAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAA,CAAC;oBACzE,CAAC;oBACD,OAAO;wBACL,cAAc,EAAE;4BACd,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B;yBACxE;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF;;WAEG;QACH,MAAM,UAAU,GAAG,KAAK,EAAE,KAAqC,EAAE,EAAE;YACjE,OAAO,KAAK,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;gBAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBAEpG,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,EAAE,CAAC;gBAC5F,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,EAAE,CAAC;oBAChG,CAAC;oBAED,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;oBAE1F,OAAO;wBACL,cAAc,EAAE;4BACd,OAAO,EAAE,IAAI;4BACb,SAAS;4BACT,OAAO,EAAE,2BAA2B;yBACrC;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpD,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,CAAC;gBACpF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF;;WAEG;QACH,MAAM,UAAU,GAAG,KAAK,EAAE,KAAqC,EAAE,EAAE;YACjE,OAAO,KAAK,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;gBAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAEpE,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,EAAE,CAAC;gBAC5F,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,EAAE,CAAC;oBAChG,CAAC;oBAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;oBACnE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACd,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iEAAiE,EAAE,EAAE,CAAC;oBAC1H,CAAC;oBAED,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;oBAEjD,OAAO;wBACL,cAAc,EAAE;4BACd,OAAO,EAAE,IAAI;4BACb,SAAS;4BACT,OAAO,EAAE,kBAAkB;yBAC5B;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpD,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,CAAC;gBACpF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,8BAA8B;QAE9B,MAAM,WAAW,GAAG,CAAC,KAAqC,EAAU,EAAE;YACpE,QAAQ,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC5B,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;gBAC/B,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;gBAC3B,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;gBAC/B,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC;gBACnC,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEF,yBAAyB;QAEzB,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAC;aAC/C,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;aACzB,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;aAC7B,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;aAC7B,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC;aACjC,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE;YACvC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,YAAY;SACzB,CAAC;aACD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;aACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;aACtB,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAE9B,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACF","sourcesContent":["import { StateGraph, START, END } from \"@langchain/langgraph\";\n\nimport { NetworkGraphDatabase } from \"../shared/interfaces/database.interface.js\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport { timed } from \"../shared/observability/performance.js\";\n\nimport { NetworkGraphState } from \"./network.state.js\";\n\nconst logger = protocolLogger(\"NetworkGraphFactory\");\n\n/**\n * Factory class to build and compile the Index (CRUD) Graph.\n *\n * Handles create, read, update, and delete operations for indexes.\n * Membership and intent-index assignment operations are handled by\n * separate graphs (NetworkMembershipGraph and IntentNetworkGraph).\n *\n * Flow:\n * START → routerNode → {createNode | readNode | updateNode | deleteNode} → END\n */\nexport class NetworkGraphFactory {\n constructor(private database: NetworkGraphDatabase) {}\n\n public createGraph() {\n // --- NODE DEFINITIONS ---\n\n /**\n * Read Node: List indexes the user belongs to and owns.\n */\n const readNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.read\", async () => {\n logger.verbose(\"Read indexes\", { userId: state.userId, networkId: state.networkId, showAll: state.showAll });\n\n // Shared projections for both the scoped and unscoped read paths.\n const projectMembership = (m: Awaited<ReturnType<typeof this.database.getNetworkMemberships>>[number]) => ({\n networkId: m.networkId,\n title: m.networkTitle,\n prompt: m.indexPrompt,\n autoAssign: m.autoAssign,\n isPersonal: m.isPersonal,\n joinedAt: m.joinedAt,\n });\n const projectOwned = (o: Awaited<ReturnType<typeof this.database.getOwnedIndexes>>[number]) => ({\n networkId: o.id,\n title: o.title,\n prompt: o.prompt,\n memberCount: o.memberCount,\n intentCount: o.intentCount,\n joinPolicy: o.permissions.joinPolicy,\n });\n\n try {\n const [allMemberships, ownedIndexes, publicIndexesResult] = await Promise.all([\n this.database.getNetworkMemberships(state.userId),\n this.database.getOwnedIndexes(state.userId),\n this.database.getPublicIndexesNotJoined(state.userId),\n ]);\n\n // If index-scoped and not showAll, return just that index plus the\n // user's personal index (their contacts). The personal index is part\n // of every allowed-network reach calculation for network-bound agents,\n // and a user clicked into a community-scoped\n // chat still owns their contact list — so surfacing it here keeps\n // tools that operate on the personal index (add_contact, list_contacts,\n // import_*_contacts) discoverable. Other community memberships are\n // still hidden, and `publicNetworks` is omitted.\n const scopeToCurrentIndex = state.networkId && !state.showAll;\n if (scopeToCurrentIndex) {\n const networkId = state.networkId!;\n const isMember = await this.database.isNetworkMember(networkId, state.userId);\n if (!isMember) {\n return {\n readResult: {\n memberOf: [],\n owns: [],\n stats: { memberOfCount: 0, ownsCount: 0, scopeNote: \"Network not found or you are not a member.\" },\n },\n };\n }\n const scopedMembership = allMemberships.find((m) => m.networkId === networkId);\n const personalMembership = scopedMembership?.isPersonal\n ? undefined\n : allMemberships.find((m) => m.isPersonal);\n const scopedOwned = ownedIndexes.find((o) => o.id === networkId);\n const personalOwned = personalMembership\n ? ownedIndexes.find((o) => o.id === personalMembership.networkId)\n : undefined;\n const memberOf = [\n ...(scopedMembership ? [projectMembership(scopedMembership)] : []),\n ...(personalMembership ? [projectMembership(personalMembership)] : []),\n ];\n const owns = [\n ...(scopedOwned ? [projectOwned(scopedOwned)] : []),\n ...(personalOwned ? [projectOwned(personalOwned)] : []),\n ];\n return {\n readResult: {\n memberOf,\n owns,\n stats: {\n memberOfCount: memberOf.length,\n ownsCount: owns.length,\n scopeNote: \"Showing current index and your personal index. Use showAll: true for all indexes.\",\n },\n },\n };\n }\n\n // Include public networks available to join\n const publicNetworks = publicIndexesResult.networks.map((idx) => ({\n networkId: idx.id,\n title: idx.title,\n prompt: idx.prompt,\n memberCount: idx.memberCount,\n owner: idx.owner,\n }));\n\n return {\n readResult: {\n memberOf: allMemberships.map(projectMembership),\n owns: ownedIndexes.map(projectOwned),\n publicNetworks,\n stats: { memberOfCount: allMemberships.length, ownsCount: ownedIndexes.length, publicNetworksCount: publicNetworks.length },\n },\n };\n } catch (err) {\n logger.error(\"Read indexes failed\", { error: err });\n return { error: \"Failed to fetch network information.\" };\n }\n });\n };\n\n /**\n * Create Node: Create a new index and add user as owner.\n */\n const createNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.create\", async () => {\n logger.verbose(\"Create index\", { userId: state.userId, createInput: state.createInput });\n\n if (!state.createInput?.title?.trim()) {\n return { mutationResult: { success: false, error: \"Title is required.\" } };\n }\n\n let createdIndexId: string | undefined;\n try {\n const index = await this.database.createNetwork({\n title: state.createInput.title.trim(),\n prompt: state.createInput.prompt?.trim() || undefined,\n imageUrl: state.createInput.imageUrl ?? undefined,\n joinPolicy: state.createInput.joinPolicy,\n });\n createdIndexId = index.id;\n\n const added = await this.database.addMemberToNetwork(index.id, state.userId, 'owner');\n if (!added.success) {\n logger.error(\"addMemberToNetwork failed; cleaning up orphaned network\", { networkId: index.id });\n try { await this.database.softDeleteNetwork(index.id); } catch {}\n return { mutationResult: { success: false, error: \"Failed to set you as owner. Network was not created.\" } };\n }\n\n return {\n mutationResult: {\n success: true,\n networkId: index.id,\n title: index.title,\n message: `Network \"${index.title}\" created. You are the owner.`,\n },\n };\n } catch (err) {\n logger.error(\"Create index failed\", { error: err });\n if (createdIndexId) {\n try { await this.database.softDeleteNetwork(createdIndexId); } catch {}\n }\n return {\n mutationResult: {\n success: false,\n error: err instanceof Error ? err.message : \"Failed to create network.\",\n },\n };\n }\n });\n };\n\n /**\n * Update Node: Update index settings (owner only).\n */\n const updateNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.update\", async () => {\n const networkId = state.networkId;\n logger.verbose(\"Update index\", { userId: state.userId, networkId, updateInput: state.updateInput });\n\n if (!networkId) {\n return { mutationResult: { success: false, error: \"networkId is required for update.\" } };\n }\n\n try {\n const isOwner = await this.database.isIndexOwner(networkId, state.userId);\n if (!isOwner) {\n return { mutationResult: { success: false, error: \"You can only modify networks you own.\" } };\n }\n\n await this.database.updateIndexSettings(networkId, state.userId, state.updateInput ?? {});\n\n return {\n mutationResult: {\n success: true,\n networkId,\n message: \"Network settings updated.\",\n },\n };\n } catch (err) {\n logger.error(\"Update index failed\", { error: err });\n return { mutationResult: { success: false, error: \"Failed to update network.\" } };\n }\n });\n };\n\n /**\n * Delete Node: Soft-delete an index (owner only, sole member).\n */\n const deleteNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.delete\", async () => {\n const networkId = state.networkId;\n logger.verbose(\"Delete index\", { userId: state.userId, networkId });\n\n if (!networkId) {\n return { mutationResult: { success: false, error: \"networkId is required for delete.\" } };\n }\n\n try {\n const isOwner = await this.database.isIndexOwner(networkId, state.userId);\n if (!isOwner) {\n return { mutationResult: { success: false, error: \"You can only delete networks you own.\" } };\n }\n\n const count = await this.database.getNetworkMemberCount(networkId);\n if (count > 1) {\n return { mutationResult: { success: false, error: \"Cannot delete network with other members. Remove members first.\" } };\n }\n\n await this.database.softDeleteNetwork(networkId);\n\n return {\n mutationResult: {\n success: true,\n networkId,\n message: \"Network deleted.\",\n },\n };\n } catch (err) {\n logger.error(\"Delete index failed\", { error: err });\n return { mutationResult: { success: false, error: \"Failed to delete network.\" } };\n }\n });\n };\n\n // --- CONDITIONAL ROUTING ---\n\n const routeByMode = (state: typeof NetworkGraphState.State): string => {\n switch (state.operationMode) {\n case 'create': return 'create';\n case 'read': return 'read';\n case 'update': return 'update';\n case 'delete': return 'delete_idx';\n default: return 'read';\n }\n };\n\n // --- GRAPH ASSEMBLY ---\n\n const workflow = new StateGraph(NetworkGraphState)\n .addNode(\"read\", readNode)\n .addNode(\"create\", createNode)\n .addNode(\"update\", updateNode)\n .addNode(\"delete_idx\", deleteNode)\n .addConditionalEdges(START, routeByMode, {\n read: \"read\",\n create: \"create\",\n update: \"update\",\n delete_idx: \"delete_idx\",\n })\n .addEdge(\"read\", END)\n .addEdge(\"create\", END)\n .addEdge(\"update\", END)\n .addEdge(\"delete_idx\", END);\n\n return workflow.compile();\n }\n}\n"]}
1
+ {"version":3,"file":"network.graph.js","sourceRoot":"/","sources":["network/network.graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { StateGraph, START, END } from \"@langchain/langgraph\";\n\nimport { NetworkGraphDatabase } from \"../shared/interfaces/database.interface.js\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport { timed } from \"../shared/observability/performance.js\";\n\nimport { NetworkGraphState } from \"./network.state.js\";\n\nconst logger = protocolLogger(\"NetworkGraphFactory\");\n\n/**\n * Factory class to build and compile the Index (CRUD) Graph.\n *\n * Handles create, read, update, and delete operations for indexes.\n * Membership and intent-network assignment operations are handled by\n * separate graphs (NetworkMembershipGraph and IntentNetworkGraph).\n *\n * Flow:\n * START → routerNode → {createNode | readNode | updateNode | deleteNode} → END\n */\nexport class NetworkGraphFactory {\n constructor(private database: NetworkGraphDatabase) {}\n\n public createGraph() {\n // --- NODE DEFINITIONS ---\n\n /**\n * Read Node: List networks the user belongs to and owns.\n */\n const readNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.read\", async () => {\n logger.verbose(\"Read networks\", { userId: state.userId, networkId: state.networkId, showAll: state.showAll });\n\n // Shared projections for both the scoped and unscoped read paths.\n const projectMembership = (m: Awaited<ReturnType<typeof this.database.getNetworkMemberships>>[number]) => ({\n networkId: m.networkId,\n title: m.networkTitle,\n prompt: m.indexPrompt,\n autoAssign: m.autoAssign,\n isPersonal: m.isPersonal,\n joinedAt: m.joinedAt,\n });\n const projectOwned = (o: Awaited<ReturnType<typeof this.database.getOwnedIndexes>>[number]) => ({\n networkId: o.id,\n title: o.title,\n prompt: o.prompt,\n memberCount: o.memberCount,\n intentCount: o.intentCount,\n joinPolicy: o.permissions.joinPolicy,\n });\n\n try {\n const [allMemberships, ownedIndexes, publicIndexesResult] = await Promise.all([\n this.database.getNetworkMemberships(state.userId),\n this.database.getOwnedIndexes(state.userId),\n this.database.getPublicIndexesNotJoined(state.userId),\n ]);\n\n // If network-scoped and not showAll, return just that index plus the\n // user's personal network (their contacts). The personal network is part\n // of every allowed-network reach calculation for network-bound agents,\n // and a user clicked into a community-scoped\n // chat still owns their contact list — so surfacing it here keeps\n // tools that operate on the personal network (add_contact, list_contacts,\n // import_*_contacts) discoverable. Other community memberships are\n // still hidden, and `publicNetworks` is omitted.\n const scopeToCurrentIndex = state.networkId && !state.showAll;\n if (scopeToCurrentIndex) {\n const networkId = state.networkId!;\n const isMember = await this.database.isNetworkMember(networkId, state.userId);\n if (!isMember) {\n return {\n readResult: {\n memberOf: [],\n owns: [],\n stats: { memberOfCount: 0, ownsCount: 0, scopeNote: \"Network not found or you are not a member.\" },\n },\n };\n }\n const scopedMembership = allMemberships.find((m) => m.networkId === networkId);\n const personalMembership = scopedMembership?.isPersonal\n ? undefined\n : allMemberships.find((m) => m.isPersonal);\n const scopedOwned = ownedIndexes.find((o) => o.id === networkId);\n const personalOwned = personalMembership\n ? ownedIndexes.find((o) => o.id === personalMembership.networkId)\n : undefined;\n const memberOf = [\n ...(scopedMembership ? [projectMembership(scopedMembership)] : []),\n ...(personalMembership ? [projectMembership(personalMembership)] : []),\n ];\n const owns = [\n ...(scopedOwned ? [projectOwned(scopedOwned)] : []),\n ...(personalOwned ? [projectOwned(personalOwned)] : []),\n ];\n return {\n readResult: {\n memberOf,\n owns,\n stats: {\n memberOfCount: memberOf.length,\n ownsCount: owns.length,\n scopeNote: \"Showing current network and your personal network. Use showAll: true for all networks.\",\n },\n },\n };\n }\n\n // Include public networks available to join\n const publicNetworks = publicIndexesResult.networks.map((idx) => ({\n networkId: idx.id,\n title: idx.title,\n prompt: idx.prompt,\n memberCount: idx.memberCount,\n owner: idx.owner,\n }));\n\n return {\n readResult: {\n memberOf: allMemberships.map(projectMembership),\n owns: ownedIndexes.map(projectOwned),\n publicNetworks,\n stats: { memberOfCount: allMemberships.length, ownsCount: ownedIndexes.length, publicNetworksCount: publicNetworks.length },\n },\n };\n } catch (err) {\n logger.error(\"Read networks failed\", { error: err });\n return { error: \"Failed to fetch network information.\" };\n }\n });\n };\n\n /**\n * Create Node: Create a new index and add user as owner.\n */\n const createNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.create\", async () => {\n logger.verbose(\"Create network\", { userId: state.userId, createInput: state.createInput });\n\n if (!state.createInput?.title?.trim()) {\n return { mutationResult: { success: false, error: \"Title is required.\" } };\n }\n\n let createdIndexId: string | undefined;\n try {\n const index = await this.database.createNetwork({\n title: state.createInput.title.trim(),\n prompt: state.createInput.prompt?.trim() || undefined,\n imageUrl: state.createInput.imageUrl ?? undefined,\n joinPolicy: state.createInput.joinPolicy,\n });\n createdIndexId = index.id;\n\n const added = await this.database.addMemberToNetwork(index.id, state.userId, 'owner');\n if (!added.success) {\n logger.error(\"addMemberToNetwork failed; cleaning up orphaned network\", { networkId: index.id });\n try { await this.database.softDeleteNetwork(index.id); } catch {}\n return { mutationResult: { success: false, error: \"Failed to set you as owner. Network was not created.\" } };\n }\n\n return {\n mutationResult: {\n success: true,\n networkId: index.id,\n title: index.title,\n message: `Network \"${index.title}\" created. You are the owner.`,\n },\n };\n } catch (err) {\n logger.error(\"Create network failed\", { error: err });\n if (createdIndexId) {\n try { await this.database.softDeleteNetwork(createdIndexId); } catch {}\n }\n return {\n mutationResult: {\n success: false,\n error: err instanceof Error ? err.message : \"Failed to create network.\",\n },\n };\n }\n });\n };\n\n /**\n * Update Node: Update index settings (owner only).\n */\n const updateNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.update\", async () => {\n const networkId = state.networkId;\n logger.verbose(\"Update index\", { userId: state.userId, networkId, updateInput: state.updateInput });\n\n if (!networkId) {\n return { mutationResult: { success: false, error: \"networkId is required for update.\" } };\n }\n\n try {\n const isOwner = await this.database.isIndexOwner(networkId, state.userId);\n if (!isOwner) {\n return { mutationResult: { success: false, error: \"You can only modify networks you own.\" } };\n }\n\n await this.database.updateIndexSettings(networkId, state.userId, state.updateInput ?? {});\n\n return {\n mutationResult: {\n success: true,\n networkId,\n message: \"Network settings updated.\",\n },\n };\n } catch (err) {\n logger.error(\"Update index failed\", { error: err });\n return { mutationResult: { success: false, error: \"Failed to update network.\" } };\n }\n });\n };\n\n /**\n * Delete Node: Soft-delete a network (owner only, sole member).\n */\n const deleteNode = async (state: typeof NetworkGraphState.State) => {\n return timed(\"NetworkGraph.delete\", async () => {\n const networkId = state.networkId;\n logger.verbose(\"Delete network\", { userId: state.userId, networkId });\n\n if (!networkId) {\n return { mutationResult: { success: false, error: \"networkId is required for delete.\" } };\n }\n\n try {\n const isOwner = await this.database.isIndexOwner(networkId, state.userId);\n if (!isOwner) {\n return { mutationResult: { success: false, error: \"You can only delete networks you own.\" } };\n }\n\n const count = await this.database.getNetworkMemberCount(networkId);\n if (count > 1) {\n return { mutationResult: { success: false, error: \"Cannot delete network with other members. Remove members first.\" } };\n }\n\n await this.database.softDeleteNetwork(networkId);\n\n return {\n mutationResult: {\n success: true,\n networkId,\n message: \"Network deleted.\",\n },\n };\n } catch (err) {\n logger.error(\"Delete network failed\", { error: err });\n return { mutationResult: { success: false, error: \"Failed to delete network.\" } };\n }\n });\n };\n\n // --- CONDITIONAL ROUTING ---\n\n const routeByMode = (state: typeof NetworkGraphState.State): string => {\n switch (state.operationMode) {\n case 'create': return 'create';\n case 'read': return 'read';\n case 'update': return 'update';\n case 'delete': return 'delete_idx';\n default: return 'read';\n }\n };\n\n // --- GRAPH ASSEMBLY ---\n\n const workflow = new StateGraph(NetworkGraphState)\n .addNode(\"read\", readNode)\n .addNode(\"create\", createNode)\n .addNode(\"update\", updateNode)\n .addNode(\"delete_idx\", deleteNode)\n .addConditionalEdges(START, routeByMode, {\n read: \"read\",\n create: \"create\",\n update: \"update\",\n delete_idx: \"delete_idx\",\n })\n .addEdge(\"read\", END)\n .addEdge(\"create\", END)\n .addEdge(\"update\", END)\n .addEdge(\"delete_idx\", END);\n\n return workflow.compile();\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Index Graph State.
2
+ * Network Graph State.
3
3
  * Handles CRUD operations for indexes (communities).
4
4
  *
5
5
  * Flow:
@@ -12,7 +12,7 @@ export declare const NetworkGraphState: import("@langchain/langgraph").Annotatio
12
12
  (): import("@langchain/langgraph").LastValue<string>;
13
13
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
14
14
  };
15
- /** Target index ID. Required for read/update/delete. From ChatGraph or tool arg. */
15
+ /** Target network ID. Required for read/update/delete. From ChatGraph or tool arg. */
16
16
  networkId: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
17
17
  /** Operation mode. */
18
18
  operationMode: import("@langchain/langgraph").BaseChannel<"update" | "create" | "delete" | "read", "update" | "create" | "delete" | "read" | import("@langchain/langgraph").OverwriteValue<"update" | "create" | "delete" | "read">, unknown>;
@@ -53,7 +53,7 @@ export declare const NetworkGraphState: import("@langchain/langgraph").Annotatio
53
53
  joinPolicy?: "anyone" | "invite_only";
54
54
  allowGuestVibeCheck?: boolean;
55
55
  } | undefined> | undefined, unknown>;
56
- /** When true and index-scoped, read returns all user indexes (not just scoped one). */
56
+ /** When true and network-scoped, read returns all user indexes (not just scoped one). */
57
57
  showAll: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
58
58
  /** Output for read mode. */
59
59
  readResult: import("@langchain/langgraph").BaseChannel<{
@@ -1 +1 @@
1
- {"version":3,"file":"network.state.d.ts","sourceRoot":"/","sources":["network/network.state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network.state.d.ts","sourceRoot":"/","sources":["network/network.state.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Annotation } from "@langchain/langgraph";
2
2
  /**
3
- * Index Graph State.
3
+ * Network Graph State.
4
4
  * Handles CRUD operations for indexes (communities).
5
5
  *
6
6
  * Flow:
@@ -10,7 +10,7 @@ export const NetworkGraphState = Annotation.Root({
10
10
  // --- Core Inputs (from ChatGraph via ToolContext) ---
11
11
  /** User performing the action. Always required. */
12
12
  userId: (Annotation),
13
- /** Target index ID. Required for read/update/delete. From ChatGraph or tool arg. */
13
+ /** Target network ID. Required for read/update/delete. From ChatGraph or tool arg. */
14
14
  networkId: Annotation({
15
15
  reducer: (_, next) => next,
16
16
  default: () => undefined,
@@ -31,7 +31,7 @@ export const NetworkGraphState = Annotation.Root({
31
31
  reducer: (_, next) => next,
32
32
  default: () => undefined,
33
33
  }),
34
- /** When true and index-scoped, read returns all user indexes (not just scoped one). */
34
+ /** When true and network-scoped, read returns all user indexes (not just scoped one). */
35
35
  showAll: Annotation({
36
36
  reducer: (_, next) => next,
37
37
  default: () => false,
@@ -1 +1 @@
1
- {"version":3,"file":"network.state.js","sourceRoot":"/","sources":["network/network.state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;IAC/C,uDAAuD;IAEvD,mDAAmD;IACnD,MAAM,EAAE,CAAA,UAAkB,CAAA;IAE1B,oFAAoF;IACpF,SAAS,EAAE,UAAU,CAAqB;QACxC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,sBAAsB;IACtB,aAAa,EAAE,UAAU,CAA0C;QACjE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAe;KAC/B,CAAC;IAEF,+BAA+B;IAE/B,4CAA4C;IAC5C,WAAW,EAAE,UAAU,CAKR;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,yCAAyC;IACzC,WAAW,EAAE,UAAU,CAMR;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,uFAAuF;IACvF,OAAO,EAAE,UAAU,CAAU;QAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;KACrB,CAAC;IAEF,kBAAkB;IAElB,4BAA4B;IAC5B,UAAU,EAAE,UAAU,CA8BP;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,6CAA6C;IAC7C,cAAc,EAAE,UAAU,CAMX;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,iDAAiD;IACjD,KAAK,EAAE,UAAU,CAAgB;QAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;KACpB,CAAC;CACH,CAAC,CAAC","sourcesContent":["import { Annotation } from \"@langchain/langgraph\";\n\n/**\n * Index Graph State.\n * Handles CRUD operations for indexes (communities).\n *\n * Flow:\n * START → routerNode → {createNode | readNode | updateNode | deleteNode} → END\n */\nexport const NetworkGraphState = Annotation.Root({\n // --- Core Inputs (from ChatGraph via ToolContext) ---\n\n /** User performing the action. Always required. */\n userId: Annotation<string>,\n\n /** Target index ID. Required for read/update/delete. From ChatGraph or tool arg. */\n networkId: Annotation<string | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** Operation mode. */\n operationMode: Annotation<'create' | 'read' | 'update' | 'delete'>({\n reducer: (curr, next) => next ?? curr,\n default: () => 'read' as const,\n }),\n\n // --- Mode-Specific Inputs ---\n\n /** For create mode: index creation data. */\n createInput: Annotation<{\n title: string;\n prompt?: string;\n imageUrl?: string | null;\n joinPolicy?: 'anyone' | 'invite_only';\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** For update mode: fields to update. */\n updateInput: Annotation<{\n title?: string;\n prompt?: string | null;\n imageUrl?: string | null;\n joinPolicy?: 'anyone' | 'invite_only';\n allowGuestVibeCheck?: boolean;\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** When true and index-scoped, read returns all user indexes (not just scoped one). */\n showAll: Annotation<boolean>({\n reducer: (_, next) => next,\n default: () => false,\n }),\n\n // --- Outputs ---\n\n /** Output for read mode. */\n readResult: Annotation<{\n memberOf: Array<{\n networkId: string;\n title: string;\n prompt: string | null;\n autoAssign: boolean;\n isPersonal: boolean;\n joinedAt: Date;\n }>;\n owns: Array<{\n networkId: string;\n title: string;\n prompt: string | null;\n memberCount: number;\n intentCount: number;\n joinPolicy: string;\n }>;\n publicNetworks?: Array<{\n networkId: string;\n title: string;\n prompt: string | null;\n memberCount: number;\n owner: { name: string; avatar: string | null } | null;\n }>;\n stats: {\n memberOfCount: number;\n ownsCount: number;\n publicNetworksCount?: number;\n scopeNote?: string;\n };\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** Output for create/update/delete modes. */\n mutationResult: Annotation<{\n success: boolean;\n networkId?: string;\n title?: string;\n message?: string;\n error?: string;\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** Error message if graph could not complete. */\n error: Annotation<string | null>({\n reducer: (_, next) => next,\n default: () => null,\n }),\n});\n"]}
1
+ {"version":3,"file":"network.state.js","sourceRoot":"/","sources":["network/network.state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;IAC/C,uDAAuD;IAEvD,mDAAmD;IACnD,MAAM,EAAE,CAAA,UAAkB,CAAA;IAE1B,sFAAsF;IACtF,SAAS,EAAE,UAAU,CAAqB;QACxC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,sBAAsB;IACtB,aAAa,EAAE,UAAU,CAA0C;QACjE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAe;KAC/B,CAAC;IAEF,+BAA+B;IAE/B,4CAA4C;IAC5C,WAAW,EAAE,UAAU,CAKR;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,yCAAyC;IACzC,WAAW,EAAE,UAAU,CAMR;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,yFAAyF;IACzF,OAAO,EAAE,UAAU,CAAU;QAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;KACrB,CAAC;IAEF,kBAAkB;IAElB,4BAA4B;IAC5B,UAAU,EAAE,UAAU,CA8BP;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,6CAA6C;IAC7C,cAAc,EAAE,UAAU,CAMX;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,iDAAiD;IACjD,KAAK,EAAE,UAAU,CAAgB;QAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;KACpB,CAAC;CACH,CAAC,CAAC","sourcesContent":["import { Annotation } from \"@langchain/langgraph\";\n\n/**\n * Network Graph State.\n * Handles CRUD operations for indexes (communities).\n *\n * Flow:\n * START → routerNode → {createNode | readNode | updateNode | deleteNode} → END\n */\nexport const NetworkGraphState = Annotation.Root({\n // --- Core Inputs (from ChatGraph via ToolContext) ---\n\n /** User performing the action. Always required. */\n userId: Annotation<string>,\n\n /** Target network ID. Required for read/update/delete. From ChatGraph or tool arg. */\n networkId: Annotation<string | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** Operation mode. */\n operationMode: Annotation<'create' | 'read' | 'update' | 'delete'>({\n reducer: (curr, next) => next ?? curr,\n default: () => 'read' as const,\n }),\n\n // --- Mode-Specific Inputs ---\n\n /** For create mode: index creation data. */\n createInput: Annotation<{\n title: string;\n prompt?: string;\n imageUrl?: string | null;\n joinPolicy?: 'anyone' | 'invite_only';\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** For update mode: fields to update. */\n updateInput: Annotation<{\n title?: string;\n prompt?: string | null;\n imageUrl?: string | null;\n joinPolicy?: 'anyone' | 'invite_only';\n allowGuestVibeCheck?: boolean;\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** When true and network-scoped, read returns all user indexes (not just scoped one). */\n showAll: Annotation<boolean>({\n reducer: (_, next) => next,\n default: () => false,\n }),\n\n // --- Outputs ---\n\n /** Output for read mode. */\n readResult: Annotation<{\n memberOf: Array<{\n networkId: string;\n title: string;\n prompt: string | null;\n autoAssign: boolean;\n isPersonal: boolean;\n joinedAt: Date;\n }>;\n owns: Array<{\n networkId: string;\n title: string;\n prompt: string | null;\n memberCount: number;\n intentCount: number;\n joinPolicy: string;\n }>;\n publicNetworks?: Array<{\n networkId: string;\n title: string;\n prompt: string | null;\n memberCount: number;\n owner: { name: string; avatar: string | null } | null;\n }>;\n stats: {\n memberOfCount: number;\n ownsCount: number;\n publicNetworksCount?: number;\n scopeNote?: string;\n };\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** Output for create/update/delete modes. */\n mutationResult: Annotation<{\n success: boolean;\n networkId?: string;\n title?: string;\n message?: string;\n error?: string;\n } | undefined>({\n reducer: (_, next) => next,\n default: () => undefined,\n }),\n\n /** Error message if graph could not complete. */\n error: Annotation<string | null>({\n reducer: (_, next) => next,\n default: () => null,\n }),\n});\n"]}