@indexnetwork/protocol 4.3.3-rc.308.1 → 4.3.4-rc.309.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 (69) hide show
  1. package/dist/chat/chat.agent.d.ts.map +1 -1
  2. package/dist/chat/chat.agent.js +11 -1
  3. package/dist/chat/chat.agent.js.map +1 -1
  4. package/dist/chat/chat.graph.d.ts +16 -0
  5. package/dist/chat/chat.graph.d.ts.map +1 -1
  6. package/dist/chat/chat.graph.js +5 -2
  7. package/dist/chat/chat.graph.js.map +1 -1
  8. package/dist/chat/chat.prompt.d.ts.map +1 -1
  9. package/dist/chat/chat.prompt.js +19 -12
  10. package/dist/chat/chat.prompt.js.map +1 -1
  11. package/dist/chat/chat.state.d.ts +6 -3
  12. package/dist/chat/chat.state.d.ts.map +1 -1
  13. package/dist/chat/chat.state.js +12 -3
  14. package/dist/chat/chat.state.js.map +1 -1
  15. package/dist/chat/chat.streamer.d.ts +5 -0
  16. package/dist/chat/chat.streamer.d.ts.map +1 -1
  17. package/dist/chat/chat.streamer.js +13 -4
  18. package/dist/chat/chat.streamer.js.map +1 -1
  19. package/dist/enrichment/enrichment.tools.d.ts.map +1 -1
  20. package/dist/enrichment/enrichment.tools.js +16 -19
  21. package/dist/enrichment/enrichment.tools.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/intent/intent.graph.d.ts.map +1 -1
  27. package/dist/intent/intent.state.d.ts +1 -1
  28. package/dist/intent/intent.state.js +1 -1
  29. package/dist/intent/intent.state.js.map +1 -1
  30. package/dist/intent/intent.tools.d.ts.map +1 -1
  31. package/dist/intent/intent.tools.js +60 -43
  32. package/dist/intent/intent.tools.js.map +1 -1
  33. package/dist/mcp/mcp.server.d.ts +3 -5
  34. package/dist/mcp/mcp.server.d.ts.map +1 -1
  35. package/dist/mcp/mcp.server.js +7 -16
  36. package/dist/mcp/mcp.server.js.map +1 -1
  37. package/dist/negotiation/negotiation.tools.d.ts.map +1 -1
  38. package/dist/negotiation/negotiation.tools.js +11 -7
  39. package/dist/negotiation/negotiation.tools.js.map +1 -1
  40. package/dist/network/network.tools.d.ts.map +1 -1
  41. package/dist/network/network.tools.js +50 -38
  42. package/dist/network/network.tools.js.map +1 -1
  43. package/dist/opportunity/opportunity.graph.js +1 -1
  44. package/dist/opportunity/opportunity.graph.js.map +1 -1
  45. package/dist/opportunity/opportunity.tools.d.ts.map +1 -1
  46. package/dist/opportunity/opportunity.tools.js +25 -29
  47. package/dist/opportunity/opportunity.tools.js.map +1 -1
  48. package/dist/questioner/questioner.tools.d.ts +1 -1
  49. package/dist/questioner/questioner.tools.d.ts.map +1 -1
  50. package/dist/questioner/questioner.tools.js +4 -5
  51. package/dist/questioner/questioner.tools.js.map +1 -1
  52. package/dist/shared/agent/tool.factory.d.ts.map +1 -1
  53. package/dist/shared/agent/tool.factory.js +9 -10
  54. package/dist/shared/agent/tool.factory.js.map +1 -1
  55. package/dist/shared/agent/tool.registry.js +1 -1
  56. package/dist/shared/agent/tool.registry.js.map +1 -1
  57. package/dist/shared/agent/tool.scope.d.ts +12 -0
  58. package/dist/shared/agent/tool.scope.d.ts.map +1 -1
  59. package/dist/shared/agent/tool.scope.js +14 -0
  60. package/dist/shared/agent/tool.scope.js.map +1 -1
  61. package/dist/shared/interfaces/auth.interface.d.ts +3 -3
  62. package/dist/shared/interfaces/auth.interface.js.map +1 -1
  63. package/dist/shared/interfaces/discovery-run.interface.d.ts +1 -1
  64. package/dist/shared/interfaces/discovery-run.interface.d.ts.map +1 -1
  65. package/dist/shared/interfaces/discovery-run.interface.js.map +1 -1
  66. package/dist/shared/interfaces/enrichment-run.interface.d.ts +1 -1
  67. package/dist/shared/interfaces/enrichment-run.interface.d.ts.map +1 -1
  68. package/dist/shared/interfaces/enrichment-run.interface.js.map +1 -1
  69. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"opportunity.tools.d.ts","sourceRoot":"/","sources":["opportunity/opportunity.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opportunity.tools.d.ts","sourceRoot":"/","sources":["opportunity/opportunity.tools.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { requestContext } from "../shared/observability/request-context.js";
3
3
  import { success, error, UUID_REGEX } from "../shared/agent/tool.helpers.js";
4
- import { deriveDiscoveryNetworkIds } from "../shared/agent/tool.scope.js";
4
+ import { deriveDiscoveryNetworkIds, focusedNetworkId, focusedNetworkLabel } from "../shared/agent/tool.scope.js";
5
5
  import { MINIMAL_MAIN_TEXT_MAX_CHARS, getPrimaryActionLabel, SECONDARY_ACTION_LABEL } from "./opportunity.labels.js";
6
6
  import { viewerCentricCardSummary, narratorRemarkFromReasoning, stripUuids } from "./opportunity.presentation.js";
7
7
  import { runDiscoverFromQuery, continueDiscovery } from "./opportunity.discover.js";
@@ -386,17 +386,13 @@ function discoveryRunSignature(input, scopeKey) {
386
386
  * coalesce only when they resolve to the same focused discovery boundary. For
387
387
  * scoped contexts, that boundary is the scope envelope (`scopeType`/`scopeId`),
388
388
  * not the personal-inclusive allowed network reach used for self-owned writes.
389
- * When no scope envelope is present, legacy `indexScope` remains part of the
390
- * key so older contexts with different unscoped reach do not coalesce.
389
+ * Unscoped requests intentionally share a single empty-scope key; concrete
390
+ * allowed reach is derived from memberships at execution time.
391
391
  */
392
392
  function discoveryScopeKey(ctx) {
393
393
  return JSON.stringify({
394
- networkId: (ctx.networkId ?? "").trim(),
395
394
  scopeType: (ctx.scopeType ?? "").trim(),
396
395
  scopeId: (ctx.scopeId ?? "").trim(),
397
- indexScope: ctx.scopeType && ctx.scopeId
398
- ? []
399
- : [...(ctx.indexScope ?? [])].map((s) => s.trim()).sort(),
400
396
  });
401
397
  }
402
398
  function confirmDeliveryError(code, retryable, message) {
@@ -519,11 +515,13 @@ export function createOpportunityTools(defineTool, deps) {
519
515
  "'complementary skills for a startup'). Helps the evaluator produce better match reasoning."),
520
516
  }),
521
517
  handler: async ({ context, query }) => {
518
+ const scopedNetworkId = focusedNetworkId(context);
519
+ const scopedIndexLabel = focusedNetworkLabel(context);
522
520
  // Strict scope enforcement: when chat is index-scoped, only allow that index
523
- if (context.networkId &&
521
+ if (scopedNetworkId &&
524
522
  query.networkId?.trim() &&
525
- query.networkId.trim() !== context.networkId) {
526
- return error(`This chat is scoped to ${context.indexName ?? "this index"}. You can only create opportunities in this community.`);
523
+ query.networkId.trim() !== scopedNetworkId) {
524
+ return error(`This chat is scoped to ${scopedIndexLabel}. You can only create opportunities in this community.`);
527
525
  }
528
526
  // Distinguish an explicit `query.networkId` override (caller wants discovery
529
527
  // scoped to one specific index) from an implicit scoped-chat context.
@@ -568,10 +566,8 @@ export function createOpportunityTools(defineTool, deps) {
568
566
  userId: context.userId,
569
567
  userName: context.userName,
570
568
  userEmail: context.userEmail,
571
- ...(context.networkId ? { networkId: context.networkId } : {}),
572
- ...(context.scopeType && context.scopeId ? { scopeType: context.scopeType, scopeId: context.scopeId } : {}),
569
+ ...(scopedNetworkId ? { scopeType: 'network', scopeId: scopedNetworkId } : {}),
573
570
  ...(context.indexName ? { indexName: context.indexName } : {}),
574
- indexScope: context.indexScope,
575
571
  ...(context.sessionId ? { sessionId: context.sessionId } : {}),
576
572
  ...(context.agentId ? { agentId: context.agentId } : {}),
577
573
  ...(context.clientSurface ? { clientSurface: context.clientSurface } : {}),
@@ -618,7 +614,7 @@ export function createOpportunityTools(defineTool, deps) {
618
614
  cache,
619
615
  userId: context.userId,
620
616
  discoveryId: query.continueFrom,
621
- expectedIndexId: context.networkId,
617
+ expectedIndexId: scopedNetworkId,
622
618
  limit: 20,
623
619
  presenter: createOpportunityPresenter(),
624
620
  useHomeCardFormat: true,
@@ -733,7 +729,7 @@ export function createOpportunityTools(defineTool, deps) {
733
729
  networkId: primaryNetworkId,
734
730
  introductionEntities: evaluatorEntities,
735
731
  introductionHint: query.hint,
736
- requiredNetworkId: context.networkId ?? undefined,
732
+ requiredNetworkId: scopedNetworkId,
737
733
  options: {
738
734
  initialStatus: "draft",
739
735
  ...(context.sessionId ? { conversationId: context.sessionId } : {}),
@@ -877,10 +873,9 @@ export function createOpportunityTools(defineTool, deps) {
877
873
  });
878
874
  indexScope = scopedDiscoveryIds;
879
875
  }
880
- else if (context.networkId) {
881
- // Legacy scoped context without a scope envelope: preserve focused-only
882
- // discovery using the focused network id.
883
- indexScope = [context.networkId];
876
+ else if (scopedNetworkId) {
877
+ // Scoped context: preserve focused-only discovery using the scope envelope.
878
+ indexScope = [scopedNetworkId];
884
879
  }
885
880
  else {
886
881
  // No scope - use all indexes (only in unscoped chat)
@@ -1312,15 +1307,15 @@ export function createOpportunityTools(defineTool, deps) {
1312
1307
  .describe("Internal scheduled-digest mode only. When true, includes hidden delivery markers so the digest send pass can confirm only edited-in opportunities."),
1313
1308
  }),
1314
1309
  handler: async ({ context, query }) => {
1310
+ const scopedNetworkId = focusedNetworkId(context);
1311
+ const scopedIndexLabel = focusedNetworkLabel(context);
1315
1312
  // Strict scope enforcement: when chat is index-scoped, only allow that index
1316
- if (context.networkId &&
1313
+ if (scopedNetworkId &&
1317
1314
  query.networkId?.trim() &&
1318
- query.networkId.trim() !== context.networkId) {
1319
- return error("This chat is scoped to " +
1320
- (context.indexName ?? "this index") +
1321
- ". You can only list opportunities from this community.");
1315
+ query.networkId.trim() !== scopedNetworkId) {
1316
+ return error(`This chat is scoped to ${scopedIndexLabel}. You can only list opportunities from this community.`);
1322
1317
  }
1323
- const effectiveIndexId = (context.networkId || query.networkId?.trim()) ?? undefined;
1318
+ const effectiveIndexId = (scopedNetworkId || query.networkId?.trim()) ?? undefined;
1324
1319
  if (effectiveIndexId && !UUID_REGEX.test(effectiveIndexId)) {
1325
1320
  return error("Invalid network ID format.");
1326
1321
  }
@@ -1819,10 +1814,11 @@ export function createOpportunityTools(defineTool, deps) {
1819
1814
  // Strict scope enforcement: when chat is index-scoped, the caller's own
1820
1815
  // actor entry on this opportunity must be anchored on the bound network.
1821
1816
  // Mirrors the per-actor filter in getOpportunitiesForUser — relying on
1822
- // `context.networkId` or any-actor matches would let a counterpart's
1823
- // network presence shadow a viewer whose own actor is elsewhere.
1824
- if (context.networkId) {
1825
- const callerOnBoundNetwork = opportunity.actors?.some((a) => a.userId === context.userId && a.networkId === context.networkId);
1817
+ // a focus-scope id or any-actor matches would let a counterpart's network
1818
+ // presence shadow a viewer whose own actor is elsewhere.
1819
+ const scopedNetworkId = focusedNetworkId(context);
1820
+ if (scopedNetworkId) {
1821
+ const callerOnBoundNetwork = opportunity.actors?.some((a) => a.userId === context.userId && a.networkId === scopedNetworkId);
1826
1822
  if (!callerOnBoundNetwork) {
1827
1823
  return error("Opportunity not found.");
1828
1824
  }