@indexnetwork/protocol 4.15.0-rc.357.1 → 4.16.1-rc.359.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 (105) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/contact/contact.inviter.d.ts.map +1 -1
  3. package/dist/contact/contact.inviter.js +12 -5
  4. package/dist/contact/contact.inviter.js.map +1 -1
  5. package/dist/index.d.ts +12 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +5 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/opportunity/delivery-card.cache.d.ts.map +1 -1
  10. package/dist/opportunity/delivery-card.cache.js +7 -3
  11. package/dist/opportunity/delivery-card.cache.js.map +1 -1
  12. package/dist/opportunity/discriminator/discriminator.adjustments.d.ts +22 -15
  13. package/dist/opportunity/discriminator/discriminator.adjustments.d.ts.map +1 -1
  14. package/dist/opportunity/discriminator/discriminator.adjustments.js +39 -20
  15. package/dist/opportunity/discriminator/discriminator.adjustments.js.map +1 -1
  16. package/dist/opportunity/feed/feed.categorizer.d.ts.map +1 -1
  17. package/dist/opportunity/feed/feed.categorizer.js +6 -0
  18. package/dist/opportunity/feed/feed.categorizer.js.map +1 -1
  19. package/dist/opportunity/feed/feed.graph.d.ts +2 -0
  20. package/dist/opportunity/feed/feed.graph.d.ts.map +1 -1
  21. package/dist/opportunity/feed/feed.graph.js +53 -28
  22. package/dist/opportunity/feed/feed.graph.js.map +1 -1
  23. package/dist/opportunity/feed/feed.state.d.ts +3 -1
  24. package/dist/opportunity/feed/feed.state.d.ts.map +1 -1
  25. package/dist/opportunity/feed/feed.state.js.map +1 -1
  26. package/dist/opportunity/opportunity.claim-safety.d.ts +25 -0
  27. package/dist/opportunity/opportunity.claim-safety.d.ts.map +1 -0
  28. package/dist/opportunity/opportunity.claim-safety.js +89 -0
  29. package/dist/opportunity/opportunity.claim-safety.js.map +1 -0
  30. package/dist/opportunity/opportunity.discover.d.ts.map +1 -1
  31. package/dist/opportunity/opportunity.discover.js +6 -1
  32. package/dist/opportunity/opportunity.discover.js.map +1 -1
  33. package/dist/opportunity/opportunity.evaluator.d.ts.map +1 -1
  34. package/dist/opportunity/opportunity.evaluator.js +13 -8
  35. package/dist/opportunity/opportunity.evaluator.js.map +1 -1
  36. package/dist/opportunity/opportunity.graph.d.ts +36 -0
  37. package/dist/opportunity/opportunity.graph.d.ts.map +1 -1
  38. package/dist/opportunity/opportunity.graph.js +177 -18
  39. package/dist/opportunity/opportunity.graph.js.map +1 -1
  40. package/dist/opportunity/opportunity.persist.d.ts +8 -1
  41. package/dist/opportunity/opportunity.persist.d.ts.map +1 -1
  42. package/dist/opportunity/opportunity.persist.js +23 -2
  43. package/dist/opportunity/opportunity.persist.js.map +1 -1
  44. package/dist/opportunity/opportunity.presentation-cache.d.ts +7 -0
  45. package/dist/opportunity/opportunity.presentation-cache.d.ts.map +1 -0
  46. package/dist/opportunity/opportunity.presentation-cache.js +15 -0
  47. package/dist/opportunity/opportunity.presentation-cache.js.map +1 -0
  48. package/dist/opportunity/opportunity.presentation.d.ts.map +1 -1
  49. package/dist/opportunity/opportunity.presentation.js +8 -5
  50. package/dist/opportunity/opportunity.presentation.js.map +1 -1
  51. package/dist/opportunity/opportunity.presenter.d.ts +4 -4
  52. package/dist/opportunity/opportunity.presenter.d.ts.map +1 -1
  53. package/dist/opportunity/opportunity.presenter.js +55 -14
  54. package/dist/opportunity/opportunity.presenter.js.map +1 -1
  55. package/dist/opportunity/opportunity.safe-presentation.d.ts +1 -1
  56. package/dist/opportunity/opportunity.safe-presentation.d.ts.map +1 -1
  57. package/dist/opportunity/opportunity.safe-presentation.js +22 -9
  58. package/dist/opportunity/opportunity.safe-presentation.js.map +1 -1
  59. package/dist/opportunity/opportunity.state.d.ts +3 -0
  60. package/dist/opportunity/opportunity.state.d.ts.map +1 -1
  61. package/dist/opportunity/opportunity.state.js.map +1 -1
  62. package/dist/opportunity/opportunity.tools.d.ts +1 -17
  63. package/dist/opportunity/opportunity.tools.d.ts.map +1 -1
  64. package/dist/opportunity/opportunity.tools.js +32 -2
  65. package/dist/opportunity/opportunity.tools.js.map +1 -1
  66. package/dist/shared/agent/model.config.d.ts +5 -0
  67. package/dist/shared/agent/model.config.d.ts.map +1 -1
  68. package/dist/shared/agent/model.config.js +1 -0
  69. package/dist/shared/agent/model.config.js.map +1 -1
  70. package/dist/shared/hyde/hyde.documents.d.ts +10 -0
  71. package/dist/shared/hyde/hyde.documents.d.ts.map +1 -0
  72. package/dist/shared/hyde/hyde.documents.js +50 -0
  73. package/dist/shared/hyde/hyde.documents.js.map +1 -0
  74. package/dist/shared/hyde/hyde.env.d.ts +9 -0
  75. package/dist/shared/hyde/hyde.env.d.ts.map +1 -0
  76. package/dist/shared/hyde/hyde.env.js +10 -0
  77. package/dist/shared/hyde/hyde.env.js.map +1 -0
  78. package/dist/shared/hyde/hyde.frame.d.ts +151 -0
  79. package/dist/shared/hyde/hyde.frame.d.ts.map +1 -0
  80. package/dist/shared/hyde/hyde.frame.js +108 -0
  81. package/dist/shared/hyde/hyde.frame.js.map +1 -0
  82. package/dist/shared/hyde/hyde.generator.d.ts +23 -11
  83. package/dist/shared/hyde/hyde.generator.d.ts.map +1 -1
  84. package/dist/shared/hyde/hyde.generator.js +50 -21
  85. package/dist/shared/hyde/hyde.generator.js.map +1 -1
  86. package/dist/shared/hyde/hyde.graph.d.ts +58 -17
  87. package/dist/shared/hyde/hyde.graph.d.ts.map +1 -1
  88. package/dist/shared/hyde/hyde.graph.js +333 -89
  89. package/dist/shared/hyde/hyde.graph.js.map +1 -1
  90. package/dist/shared/hyde/hyde.state.d.ts +19 -2
  91. package/dist/shared/hyde/hyde.state.d.ts.map +1 -1
  92. package/dist/shared/hyde/hyde.state.js +23 -3
  93. package/dist/shared/hyde/hyde.state.js.map +1 -1
  94. package/dist/shared/hyde/hyde.validator.d.ts +79 -0
  95. package/dist/shared/hyde/hyde.validator.d.ts.map +1 -0
  96. package/dist/shared/hyde/hyde.validator.js +49 -0
  97. package/dist/shared/hyde/hyde.validator.js.map +1 -0
  98. package/dist/shared/hyde/lens.inferrer.d.ts +190 -12
  99. package/dist/shared/hyde/lens.inferrer.d.ts.map +1 -1
  100. package/dist/shared/hyde/lens.inferrer.js +93 -38
  101. package/dist/shared/hyde/lens.inferrer.js.map +1 -1
  102. package/dist/shared/interfaces/database.interface.d.ts +46 -2
  103. package/dist/shared/interfaces/database.interface.d.ts.map +1 -1
  104. package/dist/shared/interfaces/database.interface.js.map +1 -1
  105. package/package.json +2 -1
@@ -53,6 +53,11 @@ declare function getModelConfig(config?: ModelConfig): {
53
53
  readonly hydeGenerator: {
54
54
  readonly model: "google/gemini-2.5-flash";
55
55
  };
56
+ readonly hydeValidator: {
57
+ readonly model: "google/gemini-2.5-flash";
58
+ readonly temperature: 0;
59
+ readonly maxTokens: 2048;
60
+ };
56
61
  readonly lensInferrer: {
57
62
  readonly model: "google/gemini-2.5-flash";
58
63
  };
@@ -1 +1 @@
1
- {"version":3,"file":"model.config.d.ts","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAClH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7F;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,mBAAmB,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACvE;AAED,iBAAS,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAoCmD,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;;;;EAK/I;AAED,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,CAG/E;AAmDD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAMnG;AAkCD;;;;;;;;;;;;;;;GAeG;AAEH,wBAAgB,qBAAqB,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/F,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,OAAO,CAAC,EAAE,6BAA6B,CAAC,KAAK,CAAC,EAC9C,MAAM,CAAC,EAAE,WAAW,GACnB,QAAQ,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAK7C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,QAAQ,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAElD"}
1
+ {"version":3,"file":"model.config.d.ts","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAClH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7F;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,mBAAmB,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACvE;AAED,iBAAS,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAqCmD,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;;;;EAK/I;AAED,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,CAG/E;AAmDD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAMnG;AAkCD;;;;;;;;;;;;;;;GAeG;AAEH,wBAAgB,qBAAqB,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/F,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,OAAO,CAAC,EAAE,6BAA6B,CAAC,KAAK,CAAC,EAC9C,MAAM,CAAC,EAAE,WAAW,GACnB,QAAQ,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAK7C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,QAAQ,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAElD"}
@@ -8,6 +8,7 @@ function getModelConfig(config) {
8
8
  intentClarifier: { model: "google/gemini-2.5-flash" },
9
9
  profileGenerator: { model: "google/gemini-2.5-flash" },
10
10
  hydeGenerator: { model: "google/gemini-2.5-flash" },
11
+ hydeValidator: { model: "google/gemini-2.5-flash", temperature: 0.0, maxTokens: 2048 },
11
12
  lensInferrer: { model: "google/gemini-2.5-flash" },
12
13
  opportunityEvaluator: { model: "google/gemini-2.5-flash" },
13
14
  opportunityPresenter: { model: "google/gemini-2.5-flash" },
@@ -1 +1 @@
1
- {"version":3,"file":"model.config.js","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChatOpenAI } from \"@langchain/openai\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport type { BaseLanguageModelInput, StructuredOutputMethodOptions } from \"@langchain/core/language_models/base\";\nimport type { Runnable } from \"@langchain/core/runnables\";\nimport type { InteropZodType } from \"@langchain/core/utils/types\";\n\n/** Settings that can be configured per agent. */\nexport interface ModelSettings {\n model: string;\n temperature?: number;\n maxTokens?: number;\n reasoning?: { effort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'; exclude?: boolean };\n}\n\n/**\n * Runtime configuration for the protocol package.\n * When passed via `ToolContext.modelConfig`, all fields (`apiKey`, `baseURL`, `chatModel`,\n * `chatReasoningEffort`) are honored by `ChatAgent` when the chat graph runs.\n * Other protocol agents don't read from `ToolContext` but may accept an explicit `ModelConfig`\n * as a direct parameter to `createModel()`.\n * All fields fall back to environment variables if not provided.\n */\nexport interface ModelConfig {\n /** OpenRouter API key. Falls back to OPENROUTER_API_KEY env var. */\n apiKey?: string;\n /** OpenRouter base URL. Falls back to OPENROUTER_BASE_URL env var. */\n baseURL?: string;\n /** Override the chat agent model. Falls back to CHAT_MODEL env var. */\n chatModel?: string;\n /** Override the chat reasoning effort. Falls back to CHAT_REASONING_EFFORT env var. */\n chatReasoningEffort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';\n}\n\nfunction getModelConfig(config?: ModelConfig) {\n return {\n intentInferrer: { model: \"google/gemini-2.5-flash\" },\n intentIndexer: { model: \"google/gemini-2.5-flash\" },\n intentVerifier: { model: \"google/gemini-2.5-flash\" },\n intentReconciler: { model: \"google/gemini-2.5-flash\" },\n intentClarifier: { model: \"google/gemini-2.5-flash\" },\n profileGenerator: { model: \"google/gemini-2.5-flash\" },\n hydeGenerator: { model: \"google/gemini-2.5-flash\" },\n lensInferrer: { model: \"google/gemini-2.5-flash\" },\n opportunityEvaluator: { model: \"google/gemini-2.5-flash\" },\n opportunityPresenter: { model: \"google/gemini-2.5-flash\" },\n negotiator: { model: \"google/gemini-2.5-flash\" },\n negotiationScreener: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 1024 },\n negotiationReflector: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 2048 },\n homeCategorizer: { model: \"google/gemini-2.5-flash\" },\n suggestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatTitleGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 32 },\n negotiationInsights: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatContextSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n discoveryQuestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n questioner: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n negotiationSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 256 },\n poolDiscriminatorMiner: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 4096 },\n poolDiscriminatorAssigner: { model: \"google/gemini-2.5-flash\", temperature: 0.1, maxTokens: 16384 },\n inviteGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n premiseAnalyzer: { model: \"google/gemini-2.5-flash\" },\n premiseDecomposer: { model: \"google/gemini-2.5-flash\" },\n premiseIndexer: { model: \"google/gemini-2.5-flash\" },\n userContextGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n networkRecommender: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n interruptClassifier: { model: \"google/gemini-2.5-flash\", temperature: 0.0, maxTokens: 16 },\n chat: {\n model: config?.chatModel ?? process.env.CHAT_MODEL ?? \"google/gemini-3-pro-preview\",\n maxTokens: 8192,\n reasoning: {\n effort: (config?.chatReasoningEffort ?? process.env.CHAT_REASONING_EFFORT ?? \"low\") as NonNullable<ModelSettings[\"reasoning\"]>[\"effort\"],\n exclude: true,\n },\n },\n } as const;\n}\n\n/** Key identifying one of the per-agent model configurations. */\nexport type ModelAgent = keyof ReturnType<typeof getModelConfig>;\n\n/**\n * Returns the model name string for the given agent key.\n * @param agent - Key from MODEL_CONFIG identifying which agent's settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function getModelName(agent: ModelAgent, config?: ModelConfig): string {\n return getModelConfig(config)[agent].model;\n}\n\n/**\n * Creates a ChatOpenAI instance configured for OpenRouter.\n * @param agent - Key identifying which agent's model settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function createModel(agent: ModelAgent, config?: ModelConfig): ChatOpenAI {\n const cfg = getModelConfig(config)[agent] as ModelSettings;\n return instantiateModel(agent, cfg, config);\n}\n\n/** Instantiates a ChatOpenAI from explicit settings (shared by primary + fallback creation). */\nfunction instantiateModel(agent: string, cfg: ModelSettings, config?: ModelConfig): ChatOpenAI {\n const apiKey = config?.apiKey ?? process.env.OPENROUTER_API_KEY;\n if (!apiKey?.trim()) {\n throw new Error(`createModel(${agent}): OPENROUTER_API_KEY is required. Pass via the config argument, ToolContext.modelConfig.apiKey, or set the OPENROUTER_API_KEY environment variable.`);\n }\n // Hard upper bound on a single LLM call. Without this, langchain's HTTP\n // client waits until the upstream cuts the socket (~3 minutes via\n // OpenRouter), blocking the entire chat response. 60 s is generous enough\n // for slow providers but bounds the worst case.\n const timeoutEnv = Number.parseInt(process.env.OPENROUTER_REQUEST_TIMEOUT_MS ?? \"\", 10);\n const timeout = Number.isFinite(timeoutEnv) && timeoutEnv > 0 ? timeoutEnv : 60_000;\n // ChatOpenAI defaults to maxRetries=2. That means a single hung upstream\n // provider gets retried up to 2 more times, each waiting `timeout` before\n // failing — so worst-case latency becomes timeout * 3. Cap retries at 1\n // so the worst case stays bounded at ~2 * timeout. Configurable via\n // OPENROUTER_MAX_RETRIES.\n const retriesEnv = Number.parseInt(process.env.OPENROUTER_MAX_RETRIES ?? \"\", 10);\n const maxRetries = Number.isFinite(retriesEnv) && retriesEnv >= 0 ? retriesEnv : 1;\n return new ChatOpenAI({\n model: cfg.model,\n configuration: {\n baseURL: config?.baseURL ?? process.env.OPENROUTER_BASE_URL ?? \"https://openrouter.ai/api/v1\",\n apiKey,\n },\n temperature: cfg.temperature,\n maxTokens: cfg.maxTokens,\n timeout,\n maxRetries,\n ...(cfg.reasoning && { modelKwargs: { reasoning: cfg.reasoning } }),\n });\n}\n\n/**\n * Default cross-vendor fallback model. The per-agent primaries run on Google's\n * provider lane (gemini-2.5-flash); a same-key OpenRouter fallback on a\n * different vendor survives Google-side outages.\n * Override via OPENROUTER_FALLBACK_MODEL; set it to \"none\" (or \"off\") to disable.\n */\nconst DEFAULT_FALLBACK_MODEL = \"openai/gpt-4o-mini\";\n\nfunction getFallbackModelName(): string | undefined {\n const raw = process.env.OPENROUTER_FALLBACK_MODEL;\n if (raw === undefined) return DEFAULT_FALLBACK_MODEL;\n const value = raw.trim();\n if (!value || value.toLowerCase() === \"none\" || value.toLowerCase() === \"off\") return undefined;\n return value;\n}\n\n/**\n * Creates the fallback ChatOpenAI for an agent, or undefined when fallbacks\n * are disabled or the fallback would be the same model as the primary.\n * Reuses the agent's sampling settings but drops `reasoning` kwargs, which are\n * primary-model specific.\n */\nexport function createFallbackModel(agent: ModelAgent, config?: ModelConfig): ChatOpenAI | undefined {\n const fallbackName = getFallbackModelName();\n if (!fallbackName) return undefined;\n const cfg = getModelConfig(config)[agent] as ModelSettings;\n if (cfg.model === fallbackName) return undefined;\n return instantiateModel(agent, { ...cfg, model: fallbackName, reasoning: undefined }, config);\n}\n\n/**\n * Number of attempts (1 = no retry) for runnable-level retries added by\n * `createStructuredModel` / `createResilientModel`. These wrap ChatOpenAI's\n * own HTTP-level `maxRetries` and additionally cover structured-output\n * parse/validation failures. Configurable via OPENROUTER_RUNNABLE_MAX_ATTEMPTS.\n */\nfunction getRunnableMaxAttempts(): number {\n const env = Number.parseInt(process.env.OPENROUTER_RUNNABLE_MAX_ATTEMPTS ?? \"\", 10);\n return Number.isFinite(env) && env >= 1 ? env : 2;\n}\n\n/**\n * Stops runnable-level retries when the failure was a caller abort —\n * retrying a cancelled request only delays cancellation. Thrown errors from\n * `onFailedAttempt` abort the retry loop.\n */\nfunction abortAwareFailedAttemptHandler(error: Error): void {\n if (error?.name === \"AbortError\" || error?.name === \"APIUserAbortError\") throw error;\n}\n\nfunction withResilience<RunOutput>(\n primary: Runnable<BaseLanguageModelInput, RunOutput>,\n fallback: Runnable<BaseLanguageModelInput, RunOutput> | undefined,\n): Runnable<BaseLanguageModelInput, RunOutput> {\n const attempts = getRunnableMaxAttempts();\n let runnable: Runnable<BaseLanguageModelInput, RunOutput> = attempts > 1\n ? primary.withRetry({ stopAfterAttempt: attempts, onFailedAttempt: abortAwareFailedAttemptHandler })\n : primary;\n if (fallback) runnable = runnable.withFallbacks([fallback]);\n return runnable;\n}\n\n/**\n * Creates a structured-output model with runnable-level retry and cross-model\n * fallback. Equivalent to `createModel(agent).withStructuredOutput(schema, options)`\n * plus `.withRetry(...)` and `.withFallbacks([...])`.\n *\n * Retry covers transient provider errors *and* schema parse/validation\n * failures; the fallback model (see OPENROUTER_FALLBACK_MODEL) is bound to the\n * same schema so a provider outage degrades to a different vendor instead of\n * failing the call. Abort signals pass through: aborts are never retried and\n * skip the fallback.\n *\n * @param agent - Key identifying which agent's model settings to use.\n * @param outputSchema - Zod schema or JSON-schema response format.\n * @param options - Same options as `withStructuredOutput` (e.g. `{ name }`).\n * @param config - Optional runtime model config overrides.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors ChatOpenAI.withStructuredOutput's constraint; `unknown` rejects zod-inferred interface types\nexport function createStructuredModel<RunOutput extends Record<string, any> = Record<string, any>>(\n agent: ModelAgent,\n outputSchema: InteropZodType<RunOutput> | Record<string, unknown>,\n options?: StructuredOutputMethodOptions<false>,\n config?: ModelConfig,\n): Runnable<BaseLanguageModelInput, RunOutput> {\n const primary = createModel(agent, config).withStructuredOutput<RunOutput>(outputSchema, options);\n const fallbackModel = createFallbackModel(agent, config);\n const fallback = fallbackModel?.withStructuredOutput<RunOutput>(outputSchema, options);\n return withResilience(primary, fallback);\n}\n\n/**\n * Creates a plain-completion model with runnable-level retry and cross-model\n * fallback, for call sites that `invoke()` the model directly (no\n * `withStructuredOutput`/`bindTools`/`stream` chaining).\n *\n * @param agent - Key identifying which agent's model settings to use.\n * @param config - Optional runtime model config overrides.\n */\nexport function createResilientModel(\n agent: ModelAgent,\n config?: ModelConfig,\n): Runnable<BaseLanguageModelInput, AIMessageChunk> {\n return withResilience(createModel(agent, config), createFallbackModel(agent, config));\n}\n"]}
1
+ {"version":3,"file":"model.config.js","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChatOpenAI } from \"@langchain/openai\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport type { BaseLanguageModelInput, StructuredOutputMethodOptions } from \"@langchain/core/language_models/base\";\nimport type { Runnable } from \"@langchain/core/runnables\";\nimport type { InteropZodType } from \"@langchain/core/utils/types\";\n\n/** Settings that can be configured per agent. */\nexport interface ModelSettings {\n model: string;\n temperature?: number;\n maxTokens?: number;\n reasoning?: { effort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'; exclude?: boolean };\n}\n\n/**\n * Runtime configuration for the protocol package.\n * When passed via `ToolContext.modelConfig`, all fields (`apiKey`, `baseURL`, `chatModel`,\n * `chatReasoningEffort`) are honored by `ChatAgent` when the chat graph runs.\n * Other protocol agents don't read from `ToolContext` but may accept an explicit `ModelConfig`\n * as a direct parameter to `createModel()`.\n * All fields fall back to environment variables if not provided.\n */\nexport interface ModelConfig {\n /** OpenRouter API key. Falls back to OPENROUTER_API_KEY env var. */\n apiKey?: string;\n /** OpenRouter base URL. Falls back to OPENROUTER_BASE_URL env var. */\n baseURL?: string;\n /** Override the chat agent model. Falls back to CHAT_MODEL env var. */\n chatModel?: string;\n /** Override the chat reasoning effort. Falls back to CHAT_REASONING_EFFORT env var. */\n chatReasoningEffort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';\n}\n\nfunction getModelConfig(config?: ModelConfig) {\n return {\n intentInferrer: { model: \"google/gemini-2.5-flash\" },\n intentIndexer: { model: \"google/gemini-2.5-flash\" },\n intentVerifier: { model: \"google/gemini-2.5-flash\" },\n intentReconciler: { model: \"google/gemini-2.5-flash\" },\n intentClarifier: { model: \"google/gemini-2.5-flash\" },\n profileGenerator: { model: \"google/gemini-2.5-flash\" },\n hydeGenerator: { model: \"google/gemini-2.5-flash\" },\n hydeValidator: { model: \"google/gemini-2.5-flash\", temperature: 0.0, maxTokens: 2048 },\n lensInferrer: { model: \"google/gemini-2.5-flash\" },\n opportunityEvaluator: { model: \"google/gemini-2.5-flash\" },\n opportunityPresenter: { model: \"google/gemini-2.5-flash\" },\n negotiator: { model: \"google/gemini-2.5-flash\" },\n negotiationScreener: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 1024 },\n negotiationReflector: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 2048 },\n homeCategorizer: { model: \"google/gemini-2.5-flash\" },\n suggestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatTitleGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 32 },\n negotiationInsights: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatContextSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n discoveryQuestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n questioner: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n negotiationSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 256 },\n poolDiscriminatorMiner: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 4096 },\n poolDiscriminatorAssigner: { model: \"google/gemini-2.5-flash\", temperature: 0.1, maxTokens: 16384 },\n inviteGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n premiseAnalyzer: { model: \"google/gemini-2.5-flash\" },\n premiseDecomposer: { model: \"google/gemini-2.5-flash\" },\n premiseIndexer: { model: \"google/gemini-2.5-flash\" },\n userContextGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n networkRecommender: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n interruptClassifier: { model: \"google/gemini-2.5-flash\", temperature: 0.0, maxTokens: 16 },\n chat: {\n model: config?.chatModel ?? process.env.CHAT_MODEL ?? \"google/gemini-3-pro-preview\",\n maxTokens: 8192,\n reasoning: {\n effort: (config?.chatReasoningEffort ?? process.env.CHAT_REASONING_EFFORT ?? \"low\") as NonNullable<ModelSettings[\"reasoning\"]>[\"effort\"],\n exclude: true,\n },\n },\n } as const;\n}\n\n/** Key identifying one of the per-agent model configurations. */\nexport type ModelAgent = keyof ReturnType<typeof getModelConfig>;\n\n/**\n * Returns the model name string for the given agent key.\n * @param agent - Key from MODEL_CONFIG identifying which agent's settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function getModelName(agent: ModelAgent, config?: ModelConfig): string {\n return getModelConfig(config)[agent].model;\n}\n\n/**\n * Creates a ChatOpenAI instance configured for OpenRouter.\n * @param agent - Key identifying which agent's model settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function createModel(agent: ModelAgent, config?: ModelConfig): ChatOpenAI {\n const cfg = getModelConfig(config)[agent] as ModelSettings;\n return instantiateModel(agent, cfg, config);\n}\n\n/** Instantiates a ChatOpenAI from explicit settings (shared by primary + fallback creation). */\nfunction instantiateModel(agent: string, cfg: ModelSettings, config?: ModelConfig): ChatOpenAI {\n const apiKey = config?.apiKey ?? process.env.OPENROUTER_API_KEY;\n if (!apiKey?.trim()) {\n throw new Error(`createModel(${agent}): OPENROUTER_API_KEY is required. Pass via the config argument, ToolContext.modelConfig.apiKey, or set the OPENROUTER_API_KEY environment variable.`);\n }\n // Hard upper bound on a single LLM call. Without this, langchain's HTTP\n // client waits until the upstream cuts the socket (~3 minutes via\n // OpenRouter), blocking the entire chat response. 60 s is generous enough\n // for slow providers but bounds the worst case.\n const timeoutEnv = Number.parseInt(process.env.OPENROUTER_REQUEST_TIMEOUT_MS ?? \"\", 10);\n const timeout = Number.isFinite(timeoutEnv) && timeoutEnv > 0 ? timeoutEnv : 60_000;\n // ChatOpenAI defaults to maxRetries=2. That means a single hung upstream\n // provider gets retried up to 2 more times, each waiting `timeout` before\n // failing — so worst-case latency becomes timeout * 3. Cap retries at 1\n // so the worst case stays bounded at ~2 * timeout. Configurable via\n // OPENROUTER_MAX_RETRIES.\n const retriesEnv = Number.parseInt(process.env.OPENROUTER_MAX_RETRIES ?? \"\", 10);\n const maxRetries = Number.isFinite(retriesEnv) && retriesEnv >= 0 ? retriesEnv : 1;\n return new ChatOpenAI({\n model: cfg.model,\n configuration: {\n baseURL: config?.baseURL ?? process.env.OPENROUTER_BASE_URL ?? \"https://openrouter.ai/api/v1\",\n apiKey,\n },\n temperature: cfg.temperature,\n maxTokens: cfg.maxTokens,\n timeout,\n maxRetries,\n ...(cfg.reasoning && { modelKwargs: { reasoning: cfg.reasoning } }),\n });\n}\n\n/**\n * Default cross-vendor fallback model. The per-agent primaries run on Google's\n * provider lane (gemini-2.5-flash); a same-key OpenRouter fallback on a\n * different vendor survives Google-side outages.\n * Override via OPENROUTER_FALLBACK_MODEL; set it to \"none\" (or \"off\") to disable.\n */\nconst DEFAULT_FALLBACK_MODEL = \"openai/gpt-4o-mini\";\n\nfunction getFallbackModelName(): string | undefined {\n const raw = process.env.OPENROUTER_FALLBACK_MODEL;\n if (raw === undefined) return DEFAULT_FALLBACK_MODEL;\n const value = raw.trim();\n if (!value || value.toLowerCase() === \"none\" || value.toLowerCase() === \"off\") return undefined;\n return value;\n}\n\n/**\n * Creates the fallback ChatOpenAI for an agent, or undefined when fallbacks\n * are disabled or the fallback would be the same model as the primary.\n * Reuses the agent's sampling settings but drops `reasoning` kwargs, which are\n * primary-model specific.\n */\nexport function createFallbackModel(agent: ModelAgent, config?: ModelConfig): ChatOpenAI | undefined {\n const fallbackName = getFallbackModelName();\n if (!fallbackName) return undefined;\n const cfg = getModelConfig(config)[agent] as ModelSettings;\n if (cfg.model === fallbackName) return undefined;\n return instantiateModel(agent, { ...cfg, model: fallbackName, reasoning: undefined }, config);\n}\n\n/**\n * Number of attempts (1 = no retry) for runnable-level retries added by\n * `createStructuredModel` / `createResilientModel`. These wrap ChatOpenAI's\n * own HTTP-level `maxRetries` and additionally cover structured-output\n * parse/validation failures. Configurable via OPENROUTER_RUNNABLE_MAX_ATTEMPTS.\n */\nfunction getRunnableMaxAttempts(): number {\n const env = Number.parseInt(process.env.OPENROUTER_RUNNABLE_MAX_ATTEMPTS ?? \"\", 10);\n return Number.isFinite(env) && env >= 1 ? env : 2;\n}\n\n/**\n * Stops runnable-level retries when the failure was a caller abort —\n * retrying a cancelled request only delays cancellation. Thrown errors from\n * `onFailedAttempt` abort the retry loop.\n */\nfunction abortAwareFailedAttemptHandler(error: Error): void {\n if (error?.name === \"AbortError\" || error?.name === \"APIUserAbortError\") throw error;\n}\n\nfunction withResilience<RunOutput>(\n primary: Runnable<BaseLanguageModelInput, RunOutput>,\n fallback: Runnable<BaseLanguageModelInput, RunOutput> | undefined,\n): Runnable<BaseLanguageModelInput, RunOutput> {\n const attempts = getRunnableMaxAttempts();\n let runnable: Runnable<BaseLanguageModelInput, RunOutput> = attempts > 1\n ? primary.withRetry({ stopAfterAttempt: attempts, onFailedAttempt: abortAwareFailedAttemptHandler })\n : primary;\n if (fallback) runnable = runnable.withFallbacks([fallback]);\n return runnable;\n}\n\n/**\n * Creates a structured-output model with runnable-level retry and cross-model\n * fallback. Equivalent to `createModel(agent).withStructuredOutput(schema, options)`\n * plus `.withRetry(...)` and `.withFallbacks([...])`.\n *\n * Retry covers transient provider errors *and* schema parse/validation\n * failures; the fallback model (see OPENROUTER_FALLBACK_MODEL) is bound to the\n * same schema so a provider outage degrades to a different vendor instead of\n * failing the call. Abort signals pass through: aborts are never retried and\n * skip the fallback.\n *\n * @param agent - Key identifying which agent's model settings to use.\n * @param outputSchema - Zod schema or JSON-schema response format.\n * @param options - Same options as `withStructuredOutput` (e.g. `{ name }`).\n * @param config - Optional runtime model config overrides.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors ChatOpenAI.withStructuredOutput's constraint; `unknown` rejects zod-inferred interface types\nexport function createStructuredModel<RunOutput extends Record<string, any> = Record<string, any>>(\n agent: ModelAgent,\n outputSchema: InteropZodType<RunOutput> | Record<string, unknown>,\n options?: StructuredOutputMethodOptions<false>,\n config?: ModelConfig,\n): Runnable<BaseLanguageModelInput, RunOutput> {\n const primary = createModel(agent, config).withStructuredOutput<RunOutput>(outputSchema, options);\n const fallbackModel = createFallbackModel(agent, config);\n const fallback = fallbackModel?.withStructuredOutput<RunOutput>(outputSchema, options);\n return withResilience(primary, fallback);\n}\n\n/**\n * Creates a plain-completion model with runnable-level retry and cross-model\n * fallback, for call sites that `invoke()` the model directly (no\n * `withStructuredOutput`/`bindTools`/`stream` chaining).\n *\n * @param agent - Key identifying which agent's model settings to use.\n * @param config - Optional runtime model config overrides.\n */\nexport function createResilientModel(\n agent: ModelAgent,\n config?: ModelConfig,\n): Runnable<BaseLanguageModelInput, AIMessageChunk> {\n return withResilience(createModel(agent, config), createFallbackModel(agent, config));\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { HydeDocument } from '../interfaces/database.interface.js';
2
+ import { type HydeGenerationMode } from './hyde.env.js';
3
+ /** Hash source text without persisting the source itself in frame metadata. */
4
+ export declare function computeHydeSourceTextHash(sourceText: string): string;
5
+ /**
6
+ * Select persisted documents that belong to the currently active generation
7
+ * mode and, for frame-v1, the newest generation marker group.
8
+ */
9
+ export declare function selectHydeDocumentsForGeneration(documents: HydeDocument[], mode: HydeGenerationMode, sourceText: string): HydeDocument[];
10
+ //# sourceMappingURL=hyde.documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyde.documents.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAiC,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEvF,+EAA+E;AAC/E,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAoBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,YAAY,EAAE,EACzB,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,MAAM,GACjB,YAAY,EAAE,CAyBhB"}
@@ -0,0 +1,50 @@
1
+ import { createHash } from 'crypto';
2
+ import { HYDE_FRAME_GENERATION_VERSION } from './hyde.env.js';
3
+ /** Hash source text without persisting the source itself in frame metadata. */
4
+ export function computeHydeSourceTextHash(sourceText) {
5
+ return createHash('sha256').update(sourceText).digest('hex');
6
+ }
7
+ function isFrameStrategy(strategy) {
8
+ return strategy.startsWith(`${HYDE_FRAME_GENERATION_VERSION}:`);
9
+ }
10
+ function hasFrameMetadataForSource(document, sourceTextHash) {
11
+ const context = document.context;
12
+ return isFrameStrategy(document.strategy)
13
+ && context?.hydeGenerationVersion === HYDE_FRAME_GENERATION_VERSION
14
+ && context.validationStatus === 'valid'
15
+ && typeof context.lensLabel === 'string'
16
+ && context.lensLabel.length > 0
17
+ && typeof context.frameFingerprint === 'string'
18
+ && context.frameFingerprint.length > 0
19
+ && context.sourceTextHash === sourceTextHash
20
+ && typeof context.generatedAt === 'string'
21
+ && Number.isFinite(Date.parse(context.generatedAt));
22
+ }
23
+ /**
24
+ * Select persisted documents that belong to the currently active generation
25
+ * mode and, for frame-v1, the newest generation marker group.
26
+ */
27
+ export function selectHydeDocumentsForGeneration(documents, mode, sourceText) {
28
+ if (mode === 'legacy') {
29
+ return documents.filter((document) => !isFrameStrategy(document.strategy)
30
+ && document.context?.hydeGenerationVersion !== HYDE_FRAME_GENERATION_VERSION);
31
+ }
32
+ const sourceTextHash = computeHydeSourceTextHash(sourceText);
33
+ const eligible = documents.filter((document) => hasFrameMetadataForSource(document, sourceTextHash));
34
+ let newestGeneratedAt;
35
+ let newestTimestamp = Number.NEGATIVE_INFINITY;
36
+ for (const document of eligible) {
37
+ const generatedAt = document.context?.generatedAt;
38
+ if (typeof generatedAt !== 'string')
39
+ continue;
40
+ const timestamp = Date.parse(generatedAt);
41
+ if (timestamp > newestTimestamp) {
42
+ newestTimestamp = timestamp;
43
+ newestGeneratedAt = generatedAt;
44
+ }
45
+ }
46
+ return newestGeneratedAt
47
+ ? eligible.filter((document) => document.context?.generatedAt === newestGeneratedAt)
48
+ : [];
49
+ }
50
+ //# sourceMappingURL=hyde.documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyde.documents.js","sourceRoot":"/","sources":["shared/hyde/hyde.documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,OAAO,EAAE,6BAA6B,EAA2B,MAAM,eAAe,CAAC;AAEvF,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,6BAA6B,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAsB,EAAE,cAAsB;IAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;WACpC,OAAO,EAAE,qBAAqB,KAAK,6BAA6B;WAChE,OAAO,CAAC,gBAAgB,KAAK,OAAO;WACpC,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;WACrC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;WAC5B,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ;WAC5C,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;WACnC,OAAO,CAAC,cAAc,KAAK,cAAc;WACzC,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;WACvC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAC9C,SAAyB,EACzB,IAAwB,EACxB,UAAkB;IAElB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnC,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;eAChC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,KAAK,6BAA6B,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,cAAc,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,yBAAyB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IACrG,IAAI,iBAAqC,CAAC;IAC1C,IAAI,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAE/C,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;QAClD,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;YAChC,eAAe,GAAG,SAAS,CAAC;YAC5B,iBAAiB,GAAG,WAAW,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,iBAAiB;QACtB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,KAAK,iBAAiB,CAAC;QACpF,CAAC,CAAC,EAAE,CAAC;AACT,CAAC","sourcesContent":["import { createHash } from 'crypto';\n\nimport type { HydeDocument } from '../interfaces/database.interface.js';\nimport { HYDE_FRAME_GENERATION_VERSION, type HydeGenerationMode } from './hyde.env.js';\n\n/** Hash source text without persisting the source itself in frame metadata. */\nexport function computeHydeSourceTextHash(sourceText: string): string {\n return createHash('sha256').update(sourceText).digest('hex');\n}\n\nfunction isFrameStrategy(strategy: string): boolean {\n return strategy.startsWith(`${HYDE_FRAME_GENERATION_VERSION}:`);\n}\n\nfunction hasFrameMetadataForSource(document: HydeDocument, sourceTextHash: string): boolean {\n const context = document.context;\n return isFrameStrategy(document.strategy)\n && context?.hydeGenerationVersion === HYDE_FRAME_GENERATION_VERSION\n && context.validationStatus === 'valid'\n && typeof context.lensLabel === 'string'\n && context.lensLabel.length > 0\n && typeof context.frameFingerprint === 'string'\n && context.frameFingerprint.length > 0\n && context.sourceTextHash === sourceTextHash\n && typeof context.generatedAt === 'string'\n && Number.isFinite(Date.parse(context.generatedAt));\n}\n\n/**\n * Select persisted documents that belong to the currently active generation\n * mode and, for frame-v1, the newest generation marker group.\n */\nexport function selectHydeDocumentsForGeneration(\n documents: HydeDocument[],\n mode: HydeGenerationMode,\n sourceText: string,\n): HydeDocument[] {\n if (mode === 'legacy') {\n return documents.filter((document) =>\n !isFrameStrategy(document.strategy)\n && document.context?.hydeGenerationVersion !== HYDE_FRAME_GENERATION_VERSION);\n }\n\n const sourceTextHash = computeHydeSourceTextHash(sourceText);\n const eligible = documents.filter((document) => hasFrameMetadataForSource(document, sourceTextHash));\n let newestGeneratedAt: string | undefined;\n let newestTimestamp = Number.NEGATIVE_INFINITY;\n\n for (const document of eligible) {\n const generatedAt = document.context?.generatedAt;\n if (typeof generatedAt !== 'string') continue;\n const timestamp = Date.parse(generatedAt);\n if (timestamp > newestTimestamp) {\n newestTimestamp = timestamp;\n newestGeneratedAt = generatedAt;\n }\n }\n\n return newestGeneratedAt\n ? eligible.filter((document) => document.context?.generatedAt === newestGeneratedAt)\n : [];\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /** HyDE generation modes. */
2
+ export declare const HYDE_FRAME_GENERATION_VERSION: "frame-v1";
3
+ export type HydeGenerationMode = 'legacy' | typeof HYDE_FRAME_GENERATION_VERSION;
4
+ /**
5
+ * Resolve the HyDE generation mode from the feature flag.
6
+ * Only the exact literal `true` enables frame-constrained generation.
7
+ */
8
+ export declare function getHydeGenerationMode(value?: string | undefined): HydeGenerationMode;
9
+ //# sourceMappingURL=hyde.env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyde.env.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.env.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,eAAO,MAAM,6BAA6B,EAAG,UAAmB,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,6BAA6B,CAAC;AAEjF;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,GAAE,MAAM,GAAG,SAAsD,GACrE,kBAAkB,CAEpB"}
@@ -0,0 +1,10 @@
1
+ /** HyDE generation modes. */
2
+ export const HYDE_FRAME_GENERATION_VERSION = 'frame-v1';
3
+ /**
4
+ * Resolve the HyDE generation mode from the feature flag.
5
+ * Only the exact literal `true` enables frame-constrained generation.
6
+ */
7
+ export function getHydeGenerationMode(value = process.env.HYDE_FRAME_CONSTRAINTS_ENABLED) {
8
+ return value === 'true' ? HYDE_FRAME_GENERATION_VERSION : 'legacy';
9
+ }
10
+ //# sourceMappingURL=hyde.env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyde.env.js","sourceRoot":"/","sources":["shared/hyde/hyde.env.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,MAAM,CAAC,MAAM,6BAA6B,GAAG,UAAmB,CAAC;AAIjE;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAA4B,OAAO,CAAC,GAAG,CAAC,8BAA8B;IAEtE,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC","sourcesContent":["/** HyDE generation modes. */\nexport const HYDE_FRAME_GENERATION_VERSION = 'frame-v1' as const;\n\nexport type HydeGenerationMode = 'legacy' | typeof HYDE_FRAME_GENERATION_VERSION;\n\n/**\n * Resolve the HyDE generation mode from the feature flag.\n * Only the exact literal `true` enables frame-constrained generation.\n */\nexport function getHydeGenerationMode(\n value: string | undefined = process.env.HYDE_FRAME_CONSTRAINTS_ENABLED,\n): HydeGenerationMode {\n return value === 'true' ? HYDE_FRAME_GENERATION_VERSION : 'legacy';\n}\n"]}
@@ -0,0 +1,151 @@
1
+ import { z } from 'zod';
2
+ /** Source-grounded role supported by an exact span from the source text. */
3
+ export interface HydeFrameRole {
4
+ role: string;
5
+ evidence: string;
6
+ }
7
+ export declare const HYDE_HARD_CONSTRAINT_TYPES: readonly ["location", "time", "numeric", "credential", "organization", "exclusivity", "other"];
8
+ export type HydeHardConstraintType = (typeof HYDE_HARD_CONSTRAINT_TYPES)[number];
9
+ /** Explicit hard constraint supported by an exact span from the source text. */
10
+ export interface HydeFrameHardConstraint {
11
+ type: HydeHardConstraintType;
12
+ value: string;
13
+ evidence: string;
14
+ }
15
+ export declare const HYDE_NAMED_ENTITY_TYPES: readonly ["person", "organization", "product", "location", "event", "other"];
16
+ export type HydeNamedEntityType = (typeof HYDE_NAMED_ENTITY_TYPES)[number];
17
+ /** Named entity supported by an exact span from the source text. */
18
+ export interface HydeFrameNamedEntity {
19
+ type: HydeNamedEntityType;
20
+ name: string;
21
+ evidence: string;
22
+ }
23
+ /** Domain term supported by an exact span from the source text. */
24
+ export interface HydeFrameVocabulary {
25
+ term: string;
26
+ evidence: string;
27
+ }
28
+ /**
29
+ * Source-grounded controls for frame-constrained HyDE generation.
30
+ * Counterpart roles may be reciprocal/complementary inferences, but their
31
+ * evidence must still be an exact span from the source text.
32
+ */
33
+ export interface HydeSourceFrame {
34
+ sourceRoles: HydeFrameRole[];
35
+ counterpartRoles: HydeFrameRole[];
36
+ hardConstraints: HydeFrameHardConstraint[];
37
+ namedEntities: HydeFrameNamedEntity[];
38
+ domainVocabulary: HydeFrameVocabulary[];
39
+ }
40
+ /** Structured-output schema for source-grounded frames. */
41
+ export declare const HydeSourceFrameSchema: z.ZodObject<{
42
+ sourceRoles: z.ZodArray<z.ZodObject<{
43
+ role: z.ZodString;
44
+ evidence: z.ZodString;
45
+ }, "strip", z.ZodTypeAny, {
46
+ role: string;
47
+ evidence: string;
48
+ }, {
49
+ role: string;
50
+ evidence: string;
51
+ }>, "many">;
52
+ counterpartRoles: z.ZodArray<z.ZodObject<{
53
+ role: z.ZodString;
54
+ evidence: z.ZodString;
55
+ }, "strip", z.ZodTypeAny, {
56
+ role: string;
57
+ evidence: string;
58
+ }, {
59
+ role: string;
60
+ evidence: string;
61
+ }>, "many">;
62
+ hardConstraints: z.ZodArray<z.ZodObject<{
63
+ type: z.ZodEnum<["location", "time", "numeric", "credential", "organization", "exclusivity", "other"]>;
64
+ value: z.ZodString;
65
+ evidence: z.ZodString;
66
+ }, "strip", z.ZodTypeAny, {
67
+ value: string;
68
+ type: "location" | "time" | "numeric" | "credential" | "organization" | "exclusivity" | "other";
69
+ evidence: string;
70
+ }, {
71
+ value: string;
72
+ type: "location" | "time" | "numeric" | "credential" | "organization" | "exclusivity" | "other";
73
+ evidence: string;
74
+ }>, "many">;
75
+ namedEntities: z.ZodArray<z.ZodObject<{
76
+ type: z.ZodEnum<["person", "organization", "product", "location", "event", "other"]>;
77
+ name: z.ZodString;
78
+ evidence: z.ZodString;
79
+ }, "strip", z.ZodTypeAny, {
80
+ type: "location" | "event" | "organization" | "other" | "person" | "product";
81
+ name: string;
82
+ evidence: string;
83
+ }, {
84
+ type: "location" | "event" | "organization" | "other" | "person" | "product";
85
+ name: string;
86
+ evidence: string;
87
+ }>, "many">;
88
+ domainVocabulary: z.ZodArray<z.ZodObject<{
89
+ term: z.ZodString;
90
+ evidence: z.ZodString;
91
+ }, "strip", z.ZodTypeAny, {
92
+ evidence: string;
93
+ term: string;
94
+ }, {
95
+ evidence: string;
96
+ term: string;
97
+ }>, "many">;
98
+ }, "strip", z.ZodTypeAny, {
99
+ sourceRoles: {
100
+ role: string;
101
+ evidence: string;
102
+ }[];
103
+ counterpartRoles: {
104
+ role: string;
105
+ evidence: string;
106
+ }[];
107
+ hardConstraints: {
108
+ value: string;
109
+ type: "location" | "time" | "numeric" | "credential" | "organization" | "exclusivity" | "other";
110
+ evidence: string;
111
+ }[];
112
+ namedEntities: {
113
+ type: "location" | "event" | "organization" | "other" | "person" | "product";
114
+ name: string;
115
+ evidence: string;
116
+ }[];
117
+ domainVocabulary: {
118
+ evidence: string;
119
+ term: string;
120
+ }[];
121
+ }, {
122
+ sourceRoles: {
123
+ role: string;
124
+ evidence: string;
125
+ }[];
126
+ counterpartRoles: {
127
+ role: string;
128
+ evidence: string;
129
+ }[];
130
+ hardConstraints: {
131
+ value: string;
132
+ type: "location" | "time" | "numeric" | "credential" | "organization" | "exclusivity" | "other";
133
+ evidence: string;
134
+ }[];
135
+ namedEntities: {
136
+ type: "location" | "event" | "organization" | "other" | "person" | "product";
137
+ name: string;
138
+ evidence: string;
139
+ }[];
140
+ domainVocabulary: {
141
+ evidence: string;
142
+ term: string;
143
+ }[];
144
+ }>;
145
+ /**
146
+ * Remove frame elements that cross the source-evidence boundary. Structured
147
+ * payloads must occur inside their evidence span. Source roles require grounded
148
+ * substantive tokens; counterpart roles may add generic inferred role language.
149
+ */
150
+ export declare function sanitizeHydeSourceFrame(sourceText: string, frame: HydeSourceFrame): HydeSourceFrame;
151
+ //# sourceMappingURL=hyde.frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyde.frame.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,0BAA0B,gGAQ7B,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjF,gFAAgF;AAChF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,uBAAuB,8EAO1B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,gBAAgB,EAAE,aAAa,EAAE,CAAC;IAClC,eAAe,EAAE,uBAAuB,EAAE,CAAC;IAC3C,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAwBD,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMhC,CAAC;AAwDH;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,eAAe,CAenG"}
@@ -0,0 +1,108 @@
1
+ import { z } from 'zod';
2
+ export const HYDE_HARD_CONSTRAINT_TYPES = [
3
+ 'location',
4
+ 'time',
5
+ 'numeric',
6
+ 'credential',
7
+ 'organization',
8
+ 'exclusivity',
9
+ 'other',
10
+ ];
11
+ export const HYDE_NAMED_ENTITY_TYPES = [
12
+ 'person',
13
+ 'organization',
14
+ 'product',
15
+ 'location',
16
+ 'event',
17
+ 'other',
18
+ ];
19
+ const roleSchema = z.object({
20
+ role: z.string().min(1),
21
+ evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),
22
+ });
23
+ const hardConstraintSchema = z.object({
24
+ type: z.enum(HYDE_HARD_CONSTRAINT_TYPES),
25
+ value: z.string().min(1),
26
+ evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),
27
+ });
28
+ const namedEntitySchema = z.object({
29
+ type: z.enum(HYDE_NAMED_ENTITY_TYPES),
30
+ name: z.string().min(1),
31
+ evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),
32
+ });
33
+ const vocabularySchema = z.object({
34
+ term: z.string().min(1),
35
+ evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),
36
+ });
37
+ /** Structured-output schema for source-grounded frames. */
38
+ export const HydeSourceFrameSchema = z.object({
39
+ sourceRoles: z.array(roleSchema),
40
+ counterpartRoles: z.array(roleSchema),
41
+ hardConstraints: z.array(hardConstraintSchema),
42
+ namedEntities: z.array(namedEntitySchema),
43
+ domainVocabulary: z.array(vocabularySchema),
44
+ });
45
+ function escapeRegularExpression(value) {
46
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
47
+ }
48
+ /** Case-insensitive literal matching bounded by Unicode letters and numbers. */
49
+ function containsAlphanumericSpanCaseInsensitive(container, value) {
50
+ const needle = value.trim();
51
+ if (!needle)
52
+ return false;
53
+ return new RegExp(`(?<![\\p{L}\\p{M}\\p{N}])${escapeRegularExpression(needle)}(?![\\p{L}\\p{M}\\p{N}])`, 'iu').test(container);
54
+ }
55
+ function hasExactEvidence(sourceText, evidence) {
56
+ return containsAlphanumericSpanCaseInsensitive(sourceText, evidence);
57
+ }
58
+ const GENERIC_ROLE_TOKENS = new Set([
59
+ 'advisor', 'analyst', 'attendee', 'borrower', 'builder', 'buyer', 'candidate',
60
+ 'capitalist', 'ceo', 'cfo', 'client', 'cmo', 'cofounder', 'collaborator',
61
+ 'consultant', 'coo', 'creator', 'cto', 'customer', 'designer', 'developer',
62
+ 'director', 'employer', 'engineer', 'entrepreneur', 'executive', 'expert',
63
+ 'founder', 'funder', 'hire', 'hiring', 'investor', 'leader', 'lender',
64
+ 'manager', 'mentor', 'operator', 'organizer', 'owner', 'partner', 'practitioner',
65
+ 'professional', 'provider', 'recruiter', 'researcher', 'scientist', 'seller',
66
+ 'speaker', 'specialist', 'sponsor', 'strategist', 'supplier', 'technologist',
67
+ 'vendor', 'vp',
68
+ ]);
69
+ const GENERIC_ROLE_MODIFIERS = new Set([
70
+ 'business', 'co', 'commercial', 'community', 'creative', 'early', 'experienced',
71
+ 'growth', 'independent', 'industry', 'junior', 'lead', 'local', 'nonprofit',
72
+ 'operations', 'product', 'professional', 'public', 'senior', 'stage',
73
+ 'startup', 'technical', 'venture',
74
+ ]);
75
+ function roleTokens(role) {
76
+ return role.toLowerCase().match(/[\p{L}\p{M}\d]+/gu) ?? [];
77
+ }
78
+ function hasUnsupportedSourceRoleMaterial(role, evidence) {
79
+ const substantiveTokens = roleTokens(role).filter((token) => !GENERIC_ROLE_MODIFIERS.has(token));
80
+ return substantiveTokens.length === 0
81
+ || substantiveTokens.some((token) => !containsAlphanumericSpanCaseInsensitive(evidence, token));
82
+ }
83
+ function hasUnsupportedCounterpartRoleMaterial(role, evidence) {
84
+ return roleTokens(role).some((token) => !GENERIC_ROLE_TOKENS.has(token)
85
+ && !GENERIC_ROLE_MODIFIERS.has(token)
86
+ && !containsAlphanumericSpanCaseInsensitive(evidence, token));
87
+ }
88
+ /**
89
+ * Remove frame elements that cross the source-evidence boundary. Structured
90
+ * payloads must occur inside their evidence span. Source roles require grounded
91
+ * substantive tokens; counterpart roles may add generic inferred role language.
92
+ */
93
+ export function sanitizeHydeSourceFrame(sourceText, frame) {
94
+ const grounded = (items) => items.filter((item) => hasExactEvidence(sourceText, item.evidence));
95
+ return {
96
+ sourceRoles: grounded(frame.sourceRoles)
97
+ .filter((item) => !hasUnsupportedSourceRoleMaterial(item.role, item.evidence)),
98
+ counterpartRoles: grounded(frame.counterpartRoles)
99
+ .filter((item) => !hasUnsupportedCounterpartRoleMaterial(item.role, item.evidence)),
100
+ hardConstraints: grounded(frame.hardConstraints)
101
+ .filter((item) => containsAlphanumericSpanCaseInsensitive(item.evidence, item.value)),
102
+ namedEntities: grounded(frame.namedEntities)
103
+ .filter((item) => containsAlphanumericSpanCaseInsensitive(item.evidence, item.name)),
104
+ domainVocabulary: grounded(frame.domainVocabulary)
105
+ .filter((item) => containsAlphanumericSpanCaseInsensitive(item.evidence, item.term)),
106
+ };
107
+ }
108
+ //# sourceMappingURL=hyde.frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyde.frame.js","sourceRoot":"/","sources":["shared/hyde/hyde.frame.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\n/** Source-grounded role supported by an exact span from the source text. */\nexport interface HydeFrameRole {\n role: string;\n evidence: string;\n}\n\nexport const HYDE_HARD_CONSTRAINT_TYPES = [\n 'location',\n 'time',\n 'numeric',\n 'credential',\n 'organization',\n 'exclusivity',\n 'other',\n] as const;\n\nexport type HydeHardConstraintType = (typeof HYDE_HARD_CONSTRAINT_TYPES)[number];\n\n/** Explicit hard constraint supported by an exact span from the source text. */\nexport interface HydeFrameHardConstraint {\n type: HydeHardConstraintType;\n value: string;\n evidence: string;\n}\n\nexport const HYDE_NAMED_ENTITY_TYPES = [\n 'person',\n 'organization',\n 'product',\n 'location',\n 'event',\n 'other',\n] as const;\n\nexport type HydeNamedEntityType = (typeof HYDE_NAMED_ENTITY_TYPES)[number];\n\n/** Named entity supported by an exact span from the source text. */\nexport interface HydeFrameNamedEntity {\n type: HydeNamedEntityType;\n name: string;\n evidence: string;\n}\n\n/** Domain term supported by an exact span from the source text. */\nexport interface HydeFrameVocabulary {\n term: string;\n evidence: string;\n}\n\n/**\n * Source-grounded controls for frame-constrained HyDE generation.\n * Counterpart roles may be reciprocal/complementary inferences, but their\n * evidence must still be an exact span from the source text.\n */\nexport interface HydeSourceFrame {\n sourceRoles: HydeFrameRole[];\n counterpartRoles: HydeFrameRole[];\n hardConstraints: HydeFrameHardConstraint[];\n namedEntities: HydeFrameNamedEntity[];\n domainVocabulary: HydeFrameVocabulary[];\n}\n\nconst roleSchema = z.object({\n role: z.string().min(1),\n evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),\n});\n\nconst hardConstraintSchema = z.object({\n type: z.enum(HYDE_HARD_CONSTRAINT_TYPES),\n value: z.string().min(1),\n evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),\n});\n\nconst namedEntitySchema = z.object({\n type: z.enum(HYDE_NAMED_ENTITY_TYPES),\n name: z.string().min(1),\n evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),\n});\n\nconst vocabularySchema = z.object({\n term: z.string().min(1),\n evidence: z.string().min(1).describe('Exact evidence span copied from sourceText'),\n});\n\n/** Structured-output schema for source-grounded frames. */\nexport const HydeSourceFrameSchema = z.object({\n sourceRoles: z.array(roleSchema),\n counterpartRoles: z.array(roleSchema),\n hardConstraints: z.array(hardConstraintSchema),\n namedEntities: z.array(namedEntitySchema),\n domainVocabulary: z.array(vocabularySchema),\n});\n\nfunction escapeRegularExpression(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/** Case-insensitive literal matching bounded by Unicode letters and numbers. */\nfunction containsAlphanumericSpanCaseInsensitive(container: string, value: string): boolean {\n const needle = value.trim();\n if (!needle) return false;\n return new RegExp(\n `(?<![\\\\p{L}\\\\p{M}\\\\p{N}])${escapeRegularExpression(needle)}(?![\\\\p{L}\\\\p{M}\\\\p{N}])`,\n 'iu',\n ).test(container);\n}\n\nfunction hasExactEvidence(sourceText: string, evidence: string): boolean {\n return containsAlphanumericSpanCaseInsensitive(sourceText, evidence);\n}\n\nconst GENERIC_ROLE_TOKENS = new Set([\n 'advisor', 'analyst', 'attendee', 'borrower', 'builder', 'buyer', 'candidate',\n 'capitalist', 'ceo', 'cfo', 'client', 'cmo', 'cofounder', 'collaborator',\n 'consultant', 'coo', 'creator', 'cto', 'customer', 'designer', 'developer',\n 'director', 'employer', 'engineer', 'entrepreneur', 'executive', 'expert',\n 'founder', 'funder', 'hire', 'hiring', 'investor', 'leader', 'lender',\n 'manager', 'mentor', 'operator', 'organizer', 'owner', 'partner', 'practitioner',\n 'professional', 'provider', 'recruiter', 'researcher', 'scientist', 'seller',\n 'speaker', 'specialist', 'sponsor', 'strategist', 'supplier', 'technologist',\n 'vendor', 'vp',\n]);\n\nconst GENERIC_ROLE_MODIFIERS = new Set([\n 'business', 'co', 'commercial', 'community', 'creative', 'early', 'experienced',\n 'growth', 'independent', 'industry', 'junior', 'lead', 'local', 'nonprofit',\n 'operations', 'product', 'professional', 'public', 'senior', 'stage',\n 'startup', 'technical', 'venture',\n]);\n\nfunction roleTokens(role: string): string[] {\n return role.toLowerCase().match(/[\\p{L}\\p{M}\\d]+/gu) ?? [];\n}\n\nfunction hasUnsupportedSourceRoleMaterial(role: string, evidence: string): boolean {\n const substantiveTokens = roleTokens(role).filter((token) => !GENERIC_ROLE_MODIFIERS.has(token));\n return substantiveTokens.length === 0\n || substantiveTokens.some((token) => !containsAlphanumericSpanCaseInsensitive(evidence, token));\n}\n\nfunction hasUnsupportedCounterpartRoleMaterial(role: string, evidence: string): boolean {\n return roleTokens(role).some((token) =>\n !GENERIC_ROLE_TOKENS.has(token)\n && !GENERIC_ROLE_MODIFIERS.has(token)\n && !containsAlphanumericSpanCaseInsensitive(evidence, token));\n}\n\n/**\n * Remove frame elements that cross the source-evidence boundary. Structured\n * payloads must occur inside their evidence span. Source roles require grounded\n * substantive tokens; counterpart roles may add generic inferred role language.\n */\nexport function sanitizeHydeSourceFrame(sourceText: string, frame: HydeSourceFrame): HydeSourceFrame {\n const grounded = <T extends { evidence: string }>(items: T[]): T[] =>\n items.filter((item) => hasExactEvidence(sourceText, item.evidence));\n return {\n sourceRoles: grounded(frame.sourceRoles)\n .filter((item) => !hasUnsupportedSourceRoleMaterial(item.role, item.evidence)),\n counterpartRoles: grounded(frame.counterpartRoles)\n .filter((item) => !hasUnsupportedCounterpartRoleMaterial(item.role, item.evidence)),\n hardConstraints: grounded(frame.hardConstraints)\n .filter((item) => containsAlphanumericSpanCaseInsensitive(item.evidence, item.value)),\n namedEntities: grounded(frame.namedEntities)\n .filter((item) => containsAlphanumericSpanCaseInsensitive(item.evidence, item.name)),\n domainVocabulary: grounded(frame.domainVocabulary)\n .filter((item) => containsAlphanumericSpanCaseInsensitive(item.evidence, item.term)),\n };\n}\n"]}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * HyDE Generator Agent: pure LLM agent for generating hypothetical documents
3
+ * in the target corpus voice. Uses free-text lens labels instead of enum strategies.
4
+ */
5
+ import type { BaseLanguageModelInput } from '@langchain/core/language_models/base';
6
+ import type { HydeSourceFrame } from './hyde.frame.js';
1
7
  import type { HydeTargetCorpus } from './lens.inferrer.js';
2
8
  export interface HydeGeneratorOutput {
3
9
  text: string;
@@ -9,19 +15,25 @@ export interface HydeGenerateInput {
9
15
  lens: string;
10
16
  /** Which corpus voice to generate in. */
11
17
  corpus: HydeTargetCorpus;
18
+ /** Sanitized source-grounded frame. Absence preserves the exact legacy prompt. */
19
+ sourceFrame?: HydeSourceFrame;
12
20
  }
13
- /**
14
- * Generates hypothetical documents in a target corpus voice for semantic search.
15
- * Uses free-text lens labels (from LensInferrer) instead of enum strategies.
16
- */
21
+ /** Minimal structured model contract used for deterministic injection in tests. */
22
+ export interface HydeGeneratorStructuredModel {
23
+ invoke(input: BaseLanguageModelInput, config?: {
24
+ signal?: AbortSignal;
25
+ }): Promise<unknown>;
26
+ }
27
+ /** Build the frame-v1 generation prompt from sanitized source evidence. */
28
+ export declare function buildFrameHydePrompt(input: HydeGenerateInput & {
29
+ sourceFrame: HydeSourceFrame;
30
+ }): string;
31
+ /** Generates hypothetical documents in a target corpus voice for semantic search. */
17
32
  export declare class HydeGenerator {
18
- private model;
19
- /**
20
- * Generate a hypothetical document for the given source text and lens.
21
- *
22
- * @param input - Source text, lens label, and target corpus
23
- * @returns Generated hypothetical document text
24
- */
33
+ private model?;
34
+ constructor(model?: HydeGeneratorStructuredModel);
35
+ private getModel;
36
+ /** Generate a hypothetical document for the given source text and lens. */
25
37
  generate(input: HydeGenerateInput): Promise<HydeGeneratorOutput>;
26
38
  }
27
39
  //# sourceMappingURL=hyde.generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hyde.generator.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.generator.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAwB3D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAEV;IAEH;;;;;OAKG;IAEG,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAoBvE"}
1
+ {"version":3,"file":"hyde.generator.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAQnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAoB3D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,gBAAgB,CAAC;IACzB,kFAAkF;IAClF,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,mFAAmF;AACnF,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5F;AAMD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG;IAAE,WAAW,EAAE,eAAe,CAAA;CAAE,GAAG,MAAM,CA0BxG;AAED,qFAAqF;AACrF,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAC,CAA+B;gBAEjC,KAAK,CAAC,EAAE,4BAA4B;IAQhD,OAAO,CAAC,QAAQ;IAOhB,2EAA2E;IAErE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAuBvE"}