@indexnetwork/protocol 4.5.0 → 4.6.0-rc.342.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 (29) hide show
  1. package/dist/index.d.ts +8 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/opportunity/discriminator/discriminator.env.d.ts +29 -0
  6. package/dist/opportunity/discriminator/discriminator.env.d.ts.map +1 -0
  7. package/dist/opportunity/discriminator/discriminator.env.js +29 -0
  8. package/dist/opportunity/discriminator/discriminator.env.js.map +1 -0
  9. package/dist/opportunity/discriminator/discriminator.miner.d.ts +99 -0
  10. package/dist/opportunity/discriminator/discriminator.miner.d.ts.map +1 -0
  11. package/dist/opportunity/discriminator/discriminator.miner.js +190 -0
  12. package/dist/opportunity/discriminator/discriminator.miner.js.map +1 -0
  13. package/dist/opportunity/discriminator/discriminator.scorer.d.ts +33 -0
  14. package/dist/opportunity/discriminator/discriminator.scorer.d.ts.map +1 -0
  15. package/dist/opportunity/discriminator/discriminator.scorer.js +106 -0
  16. package/dist/opportunity/discriminator/discriminator.scorer.js.map +1 -0
  17. package/dist/opportunity/discriminator/discriminator.shadow.d.ts +25 -0
  18. package/dist/opportunity/discriminator/discriminator.shadow.d.ts.map +1 -0
  19. package/dist/opportunity/discriminator/discriminator.shadow.js +50 -0
  20. package/dist/opportunity/discriminator/discriminator.shadow.js.map +1 -0
  21. package/dist/opportunity/discriminator/discriminator.types.d.ts +88 -0
  22. package/dist/opportunity/discriminator/discriminator.types.d.ts.map +1 -0
  23. package/dist/opportunity/discriminator/discriminator.types.js +19 -0
  24. package/dist/opportunity/discriminator/discriminator.types.js.map +1 -0
  25. package/dist/shared/agent/model.config.d.ts +5 -0
  26. package/dist/shared/agent/model.config.d.ts.map +1 -1
  27. package/dist/shared/agent/model.config.js +1 -0
  28. package/dist/shared/agent/model.config.js.map +1 -1
  29. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -105,6 +105,14 @@ export type { QuestionerInput, QuestionerContext, QuestionerEnqueuePayload, Ques
105
105
  export { getPreset } from "./questioner/questioner.presets.js";
106
106
  export { isQuestionerEnabled, isDiscoveryQuestionsEnabled, discoveryQuestionsInputMode, discoveryQuestionsTimeoutMs, chatQuestionWaitTimeoutMs } from "./questioner/questioner.env.js";
107
107
  export type { QuestionerPreset } from "./questioner/questioner.presets.js";
108
+ export { PoolDiscriminatorMiner } from "./opportunity/discriminator/discriminator.miner.js";
109
+ export type { PoolDiscriminatorMinerConfig } from "./opportunity/discriminator/discriminator.miner.js";
110
+ export { runPoolDiscriminatorShadow } from "./opportunity/discriminator/discriminator.shadow.js";
111
+ export type { DiscriminatorShadowInput } from "./opportunity/discriminator/discriminator.shadow.js";
112
+ export { scoreDiscriminator, computeNovelty, cosineSimilarity } from "./opportunity/discriminator/discriminator.scorer.js";
113
+ export { poolQuestionsMiningMode, POOL_DISCRIMINATOR_MIN_POOL_SIZE, POOL_DISCRIMINATOR_MAX_CANDIDATES, POOL_DISCRIMINATOR_MAX_PUBLIC_CONTEXT_CHARS } from "./opportunity/discriminator/discriminator.env.js";
114
+ export type { PoolQuestionsMiningMode } from "./opportunity/discriminator/discriminator.env.js";
115
+ export type { PoolCandidate, DiscriminatorMiningInput, MinedDiscriminator, ScoredDiscriminator, VerifiedAssignment, DiscriminatorShadowResult } from "./opportunity/discriminator/discriminator.types.js";
108
116
  export { OpportunityEvaluator } from "./opportunity/opportunity.evaluator.js";
109
117
  export type { EvaluatorInput, OpportunityEvaluatorOptionsConstructor } from "./opportunity/opportunity.evaluator.js";
110
118
  export { OpportunityPresenter, gatherPresenterContext } from "./opportunity/opportunity.presenter.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACjF,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACjJ,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC/H,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,gBAAgB,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AACrI,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAIhH,YAAY,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/G,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAC9H,YAAY,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACvF,YAAY,EAAE,iBAAiB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,YAAY,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AACnG,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7L,YAAY,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,YAAY,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACrG,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC3K,YAAY,EACV,0BAA0B,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAClE,wBAAwB,EAAE,6BAA6B,EAAE,iBAAiB,EAC1E,mBAAmB,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,8BAA8B,EACrG,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,wBAAwB,EAC1F,kBAAkB,EAAE,qBAAqB,EACzC,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,yBAAyB,EAClG,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAC7D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,0BAA0B,EACxH,oBAAoB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,UAAU,EAC9H,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAC3E,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EACpF,sBAAsB,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAC5G,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,GACnE,MAAM,2CAA2C,CAAC;AACnD,YAAY,EACV,QAAQ,EAAE,kBAAkB,EAAE,wBAAwB,EACtD,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAClD,aAAa,EAAE,iBAAiB,EAAE,aAAa,GAChD,MAAM,2CAA2C,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AACxH,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,YAAY,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAClG,YAAY,EAAE,OAAO,EAAE,MAAM,0CAA0C,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAChH,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AACtG,YAAY,EACV,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAChF,kBAAkB,EAAE,kBAAkB,GACvC,MAAM,gDAAgD,CAAC;AACxD,YAAY,EACV,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,wBAAwB,EACpF,4BAA4B,EAAE,6BAA6B,EAC3D,mBAAmB,EAAE,mBAAmB,EAAE,sBAAsB,GACjE,MAAM,iDAAiD,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AACzH,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AACtI,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACxN,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAI1E,OAAO,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,KAAK,wBAAwB,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACjf,YAAY,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAC5F,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAC9M,OAAO,EAAE,mCAAmC,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,qCAAqC,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAClW,YAAY,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACjT,OAAO,EAAE,oCAAoC,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AACxN,YAAY,EAAE,mBAAmB,EAAE,iCAAiC,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AACzN,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kCAAkC,EAAE,MAAM,uCAAuC,CAAC;AAC3L,YAAY,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAIpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACzG,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,yBAAyB,EACzB,6BAA6B,EAC7B,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,YAAY,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACjI,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACjI,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAIjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AACtK,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,YAAY,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,YAAY,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAChJ,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AACjJ,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC5K,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC5O,OAAO,EAAE,6BAA6B,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AACvH,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAC3J,YAAY,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACxP,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACvL,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,YAAY,EAAE,4BAA4B,EAAE,MAAM,oDAAoD,CAAC;AACvG,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,YAAY,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AAC3H,OAAO,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,iCAAiC,EAAE,2CAA2C,EAAE,MAAM,kDAAkD,CAAC;AAC7M,YAAY,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAChG,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC1M,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,YAAY,EAAE,cAAc,EAAE,sCAAsC,EAAE,MAAM,wCAAwC,CAAC;AACrH,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAIxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACnP,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAC5N,YAAY,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AACzI,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,YAAY,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpH,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAC1N,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAC7J,OAAO,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAInK,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAI5E,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACpI,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAKnH,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAChJ,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACzG,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACnJ,YAAY,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAI/E,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,WAAW,EACX,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAI/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC"}
package/dist/index.js CHANGED
@@ -68,6 +68,10 @@ export { renderNegotiatorMemorySection, renderNegotiatorChatMemorySection } from
68
68
  export { QuestionerAgent } from "./questioner/questioner.agent.js";
69
69
  export { getPreset } from "./questioner/questioner.presets.js";
70
70
  export { isQuestionerEnabled, isDiscoveryQuestionsEnabled, discoveryQuestionsInputMode, discoveryQuestionsTimeoutMs, chatQuestionWaitTimeoutMs } from "./questioner/questioner.env.js";
71
+ export { PoolDiscriminatorMiner } from "./opportunity/discriminator/discriminator.miner.js";
72
+ export { runPoolDiscriminatorShadow } from "./opportunity/discriminator/discriminator.shadow.js";
73
+ export { scoreDiscriminator, computeNovelty, cosineSimilarity } from "./opportunity/discriminator/discriminator.scorer.js";
74
+ export { poolQuestionsMiningMode, POOL_DISCRIMINATOR_MIN_POOL_SIZE, POOL_DISCRIMINATOR_MAX_CANDIDATES, POOL_DISCRIMINATOR_MAX_PUBLIC_CONTEXT_CHARS } from "./opportunity/discriminator/discriminator.env.js";
71
75
  export { OpportunityEvaluator } from "./opportunity/opportunity.evaluator.js";
72
76
  export { OpportunityPresenter, gatherPresenterContext } from "./opportunity/opportunity.presenter.js";
73
77
  export { createOpportunityTools } from "./opportunity/opportunity.tools.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// =============================================================================\n// @indexnetwork/protocol — public API barrel\n//\n// This file is the ONLY supported entry point. Deep imports\n// (\"@indexnetwork/protocol/src/...\") are not part of the contract and may break\n// in any release. Every symbol is re-exported explicitly (no wildcards) so the\n// surface is reviewable and changes are intentional.\n//\n// Stability tiers are defined in STABILITY.md. In short:\n// • Stable — Interfaces, Graph factories, Agents, createChatTools,\n// the tool/runtime helpers, and shared schemas.\n// • Experimental — Sections marked @experimental below (advanced graph state\n// types and internal helpers); may change in a minor release.\n// =============================================================================\n\n// ─── Public API (recommended for external consumers) ──────────────────────────\n\nexport { createChatTools } from \"./shared/agent/tool.factory.js\";\nexport { getModelName } from \"./shared/agent/model.config.js\";\nexport type { ChatTools } from \"./shared/agent/tool.factory.js\";\nexport type { ModelConfig, ModelSettings } from \"./shared/agent/model.config.js\";\nexport type { ToolContext, ResolvedToolContext, ToolDeps, ProtocolDeps, RawToolDefinition, CompiledGraph } from \"./shared/agent/tool.helpers.js\";\nexport { ChatContextAccessError, resolveChatContext } from \"./shared/agent/tool.helpers.js\";\nexport {\n deriveAllowedNetworkIds,\n deriveDiscoveryNetworkIds,\n focusedNetworkId,\n focusedNetworkLabel,\n hasNetworkScope,\n scopeFromNetworkId,\n} from \"./shared/agent/tool.scope.js\";\nexport type { ToolScopeEnvelope, ToolScopeType, ScopeMembership, DeriveNetworkScopeInput } from \"./shared/agent/tool.scope.js\";\nexport { requestContext } from \"./shared/observability/request-context.js\";\nexport { setLoggerFactory } from \"./shared/observability/log.js\";\nexport type { LoggerWithSource as ProtocolLoggerWithSource } from \"./shared/observability/log.js\";\nexport { setTimingWrapper } from \"./shared/observability/performance.js\";\nexport { ToolRuntimeError, getToolTimeoutPolicy, invokeToolRuntime, toolRuntimeErrorToResult } from \"./shared/agent/tool.runtime.js\";\nexport type { ToolRuntimeErrorCode, ToolTimeoutClass, ToolTimeoutPolicy } from \"./shared/agent/tool.runtime.js\";\n\n// ─── Interfaces (implement these to wire up your infrastructure) ───────────────\n\nexport type { McpAuthResolver } from \"./shared/interfaces/auth.interface.js\";\nexport type { Cache, CacheOptions, HydeCache, OpportunityCache } from \"./shared/interfaces/cache.interface.js\";\nexport type { ChatSessionReader, ChatSessionDetail, ChatSessionSummary } from \"./shared/interfaces/chat-session.interface.js\";\nexport type { ChatSummaryReader } from \"./shared/interfaces/chat-summary.interface.js\";\nexport type { ChatMessageWriter } from \"./shared/interfaces/chat-message-writer.interface.js\";\nexport type { QuestionGeneratorReader } from \"./shared/interfaces/question-generator.interface.js\";\nexport type { QuestionerDatabase, PersistableQuestion, PersistedQuestion, QuestionFilters, ChatQuestionsHost, ChatQuestionAnswerOutcome } from \"./shared/interfaces/questioner.interface.js\";\nexport type { NegotiationSummaryReader } from \"./shared/interfaces/negotiation-summary.interface.js\";\nexport type { DiscoveryNegotiationDigest } from \"./shared/schemas/negotiation-digest.schema.js\";\nexport { NegotiationSummarizer, buildFallbackDigest } from \"./negotiation/negotiation.summarizer.js\";\nexport type { ContactServiceAdapter, ContactEntry, ContactImportResult, ContactInput, ContactResult, ContactSearchResult } from \"./shared/interfaces/contact.interface.js\";\nexport type {\n ChatGraphCompositeDatabase, UserDatabase, SystemDatabase, Database,\n OpportunityGraphDatabase, OpportunityControllerDatabase, HomeGraphDatabase,\n IntentGraphDatabase, IntentNetworkGraphDatabase, NetworkGraphDatabase, NetworkMembershipGraphDatabase,\n HydeGraphDatabase, EnrichmentGraphDatabase, PremiseGraphDatabase, NegotiationGraphDatabase,\n NegotiationQueries, NegotiationUserAnswer,\n Opportunity, OpportunityActor, OpportunityContext, OpportunityDetection, OpportunityInterpretation,\n OpportunityQueryOptions, OpportunitySignal, OpportunityStatus,\n ActiveIntent, CreatedIntent, CreateIntentData, UpdateIntentData, IntentRecord, SimilarIntent, SimilarIntentSearchOptions,\n IndexedIntentDetails, IndexMemberDetails, AssignmentNetworkMembership, NetworkAssignmentContext, NetworkMembership, OwnedIndex,\n CreateHydeDocumentData, HydeDocument, HydeSourceType, CreateOpportunityData,\n PremiseAnalysis, PremiseAssertion, PremiseProvenance, PremiseRecord, PremiseValidity,\n OnboardingPrivacyState, OnboardingProfileSeed, OnboardingState, PrivacyConsentDecision, PrivacyConsentSource,\n UpdateIndexSettingsData, UserRecord, UserSocial, ArchiveResult, Id,\n} from \"./shared/interfaces/database.interface.js\";\nexport type {\n Embedder, EmbeddingGenerator, EmbeddingGenerateOptions,\n VectorStore, VectorStoreOption, VectorSearchResult,\n HydeCandidate, HydeSearchOptions, LensEmbedding,\n} from \"./shared/interfaces/embedder.interface.js\";\nexport type { ProfileEnricher, EnrichmentRequest, EnrichmentResult } from \"./shared/interfaces/enrichment.interface.js\";\nexport type { IntegrationAdapter, IntegrationConnection, IntegrationSession, IntegrationSessionOptions, ToolActionResponse } from \"./shared/interfaces/integration.interface.js\";\nexport type { IntentGraphQueue } from \"./shared/interfaces/queue.interface.js\";\nexport type { Scraper, ExtractUrlContentOptions } from \"./shared/interfaces/scraper.interface.js\";\nexport type { Storage } from \"./shared/interfaces/storage.interface.js\";\nexport type { DeliveryLedger, DeliveredOpportunityRow } from \"./shared/interfaces/delivery-ledger.interface.js\";\nexport type { MintConnectLink, ConnectLinkKind } from \"./shared/interfaces/connect-link.interface.js\";\nexport type {\n DiscoveryRunStore, DiscoveryRunQueue, DiscoveryRunInput, CreateDiscoveryRunInput,\n DiscoveryRunRecord, DiscoveryRunStatus,\n} from \"./shared/interfaces/discovery-run.interface.js\";\nexport type {\n EnrichmentRunStore, EnrichmentRunQueue, EnrichmentRunInput, CreateEnrichmentRunInput,\n UpdateUserEnrichmentRunInput, PreviewUserEnrichmentRunInput,\n EnrichmentRunRecord, EnrichmentRunStatus, EnrichmentRunOperation,\n} from \"./shared/interfaces/enrichment-run.interface.js\";\nexport type { NegotiationTimeoutQueue, AskUserExpiryPayload } from \"./shared/interfaces/negotiation-events.interface.js\";\nexport type { AgentDispatcher, AgentDispatchResult, NegotiationTurnPayload } from \"./shared/interfaces/agent-dispatcher.interface.js\";\nexport type { AgentRecord, AgentTransportRecord, AgentPermissionRecord, AgentWithRelations, CreateAgentInput, CreateTransportInput, GrantPermissionInput, AgentDatabase } from './shared/interfaces/agent.interface.js';\nexport { SYSTEM_AGENT_IDS } from './shared/interfaces/agent.interface.js';\n\n// ─── Shared schemas ───────────────────────────────────────────────────────────\n\nexport { ChatContextDigestSchema, type ChatContextDigest } from \"./shared/schemas/chat-context.schema.js\";\nexport { QuestionOptionSchema, QuestionSchema, QuestionStrategySchema, QuestionWithStrategySchema, QuestionGeneratorResponseSchema, QuestionModeSchema, QuestionDetectionSchema, QuestionActorSchema, QuestionAnswerSchema, type Question, type QuestionOption, type QuestionStrategy, type QuestionWithStrategy, type QuestionGeneratorResponse, type QuestionGenerationResult, type QuestionMode, type QuestionDetection, type QuestionActor, type QuestionAnswer } from \"./shared/schemas/question.schema.js\";\nexport type { PendingQuestionSummary } from \"./shared/schemas/pending-question.schema.js\";\nexport type { McpAuthInput } from \"./shared/schemas/mcp-auth.schema.js\";\nexport { UserIdentitySchema, type UserIdentity } from \"./shared/schemas/identity.schema.js\";\nexport type { DiscoverySourceProfile, DiscoverySummary, DiscoveryNegotiation, DiscoveryTurn, DiscoveryOutcome, DiscoveryQuestionInput, NegotiationRole } from \"./shared/schemas/discovery-question.schema.js\";\nexport { NetworkAssignmentResourceTypeSchema, NetworkAssignmentModeSchema, NetworkAssignmentScopeSchema, NetworkAssignmentPromptPresenceSchema, NetworkAssignmentPolicySchema, NetworkAssignmentRawScoresSchema, NetworkAssignmentMetadataSchema, OpportunityEvidenceKindSchema, OpportunityEvidenceSchema } from \"./shared/schemas/network-assignment.schema.js\";\nexport type { NetworkAssignmentResourceType, NetworkAssignmentMode, NetworkAssignmentScope, NetworkAssignmentPromptPresence, NetworkAssignmentPolicy, NetworkAssignmentRawScores, NetworkAssignmentMetadata, OpportunityEvidenceKind, OpportunityEvidence } from \"./shared/schemas/network-assignment.schema.js\";\nexport { DEFAULT_NETWORK_ASSIGNMENT_THRESHOLD, classifyPromptPresence, resolveAssignmentNetworkScope, buildNetworkAssignmentDecision, combineAssignmentScores } from \"./shared/assignment/network-assignment.policy.js\";\nexport type { PromptPresenceInput, ResolveAssignmentNetworkScopeArgs, AssignmentScopeMembership, BuildNetworkAssignmentDecisionArgs, NetworkAssignmentDecision } from \"./shared/assignment/network-assignment.policy.js\";\nexport { buildCandidateEvidence, withCandidateEvidence, mergeOpportunityEvidence, withMatchedStrategies, renderOpportunityEvidenceForPrompt } from \"./opportunity/opportunity.evidence.js\";\nexport type { EvidenceCandidateInput } from \"./opportunity/opportunity.evidence.js\";\n\n// ─── Graph factories ──────────────────────────────────────────────────────────\n\nexport { ChatGraphFactory } from \"./chat/chat.graph.js\";\nexport {\n ORCHESTRATOR_PERSONA,\n ORCHESTRATOR_PERSONA_ID,\n type ChatPersonaConfig,\n type ChatPersonaLoopBehaviors,\n} from \"./chat/chat.persona.js\";\nexport {\n NEGOTIATOR_PERSONA_ID,\n NEGOTIATOR_TOOL_NAMES,\n createNegotiatorPersona,\n createNegotiatorTools,\n filterNegotiatorTools,\n} from \"./chat/negotiator.persona.js\";\nexport { buildNegotiatorSystemContent, type NegotiatorPromptOptions } from \"./chat/negotiator.prompt.js\";\nexport {\n NEGOTIATOR_MEMORY_TOOL_NAMES,\n createNegotiatorMemoryTools,\n} from \"./chat/negotiator.tools.js\";\nexport type {\n NegotiatorMemoryToolsHost,\n NegotiatorMemoryRememberInput,\n NegotiatorMemoryToolView,\n NegotiatorMemoryForgetResult,\n RememberableMemoryKind,\n} from \"./shared/interfaces/negotiator-memory.interface.js\";\nexport { HomeGraphFactory } from \"./opportunity/feed/feed.graph.js\";\nexport { HydeGraphFactory } from \"./shared/hyde/hyde.graph.js\";\nexport { NetworkGraphFactory } from \"./network/network.graph.js\";\nexport { NetworkMembershipGraphFactory } from \"./network/membership/membership.graph.js\";\nexport { IntentGraphFactory } from \"./intent/intent.graph.js\";\nexport { IntentNetworkGraphFactory } from \"./network/indexer/indexer.graph.js\";\nexport { MaintenanceGraphFactory } from \"./maintenance/maintenance.graph.js\";\nexport type { MaintenanceGraphDatabase, MaintenanceGraphCache, MaintenanceGraphQueue } from \"./maintenance/maintenance.graph.js\";\nexport { NegotiationGraphFactory, createDefaultNegotiationGraph, negotiateCandidates } from \"./negotiation/negotiation.graph.js\";\nexport { OpportunityGraphFactory } from \"./opportunity/opportunity.graph.js\";\nexport { EnrichmentGraphFactory } from \"./enrichment/enrichment.graph.js\";\nexport { PremiseGraphFactory } from \"./premise/premise.graph.js\";\n\n// ─── Agents ───────────────────────────────────────────────────────────────────\n\nexport { UserContextGenerator } from \"./context/context.generator.js\";\nexport type { UserContextInput, IncrementalContextInput, UserContextResult, GlobalContextInput, GlobalIncrementalContextInput } from \"./context/context.generator.js\";\nexport { ChatTitleGenerator } from \"./chat/chat.title.generator.js\";\nexport { ChatInterruptClassifier } from \"./chat/chat.interrupt.classifier.js\";\nexport type { ClassifyInterruptInput } from \"./chat/chat.interrupt.classifier.js\";\nexport { ChatSummarizer } from \"./chat/chat.summarizer.js\";\nexport type { ChatSummarizerInput, ChatSummarizerMessage } from \"./chat/chat.summarizer.js\";\nexport { HydeGenerator } from \"./shared/hyde/hyde.generator.js\";\nexport { SuggestionGenerator } from \"./chat/chat.suggester.js\";\nexport type { SuggestionGeneratorInput } from \"./chat/chat.suggester.js\";\nexport { generateInviteMessage } from \"./contact/contact.inviter.js\";\nexport type { InviteInput, InviteOutput } from \"./contact/contact.inviter.js\";\nexport { IntentIndexer } from \"./intent/intent.indexer.js\";\nexport type { IntentIndexerOutput } from \"./intent/intent.indexer.js\";\nexport { PremiseAnalyzer } from \"./premise/premise.analyzer.js\";\nexport type { PremiseAnalyzerOutput } from \"./premise/premise.analyzer.js\";\nexport { PremiseDecomposer } from \"./premise/premise.decomposer.js\";\nexport type { PremiseDecomposerOutput, DecomposedPremise } from \"./premise/premise.decomposer.js\";\nexport { PremiseIndexer } from \"./premise/premise.indexer.js\";\nexport type { PremiseIndexerOutput } from \"./premise/premise.indexer.js\";\nexport { LensInferrer } from \"./shared/hyde/lens.inferrer.js\";\nexport { NegotiationInsightsGenerator } from \"./negotiation/insight.generator.js\";\nexport type { NegotiationDigest } from \"./negotiation/insight.generator.js\";\nexport { IndexNegotiator } from \"./negotiation/negotiation.agent.js\";\nexport { NegotiationScreener, configuredScreenMode, ScreenDecisionSchema, NEGOTIATION_SCREEN_MODES } from \"./negotiation/negotiation.screen.js\";\nexport type { ScreenDecision, ScreenDecisionRecord, NegotiationScreenMode, NegotiationScreenerInput } from \"./negotiation/negotiation.screen.js\";\nexport { NegotiationReflector, DistilledMemorySchema, ReflectionResultSchema, MAX_DISTILLED_MEMORIES, NEGOTIATOR_MEMORY_KINDS } from \"./negotiation/negotiation.reflect.js\";\nexport type { DistilledMemory, DistilledMemoryKind, ReflectionResult, ReflectionTranscriptEntry, NegotiationReflectionInput, ChatReflectionInput, NegotiationReflectJobData, ReflectEnqueueFn } from \"./negotiation/negotiation.reflect.js\";\nexport { renderNegotiatorMemorySection, renderNegotiatorChatMemorySection } from \"./negotiation/negotiation.memory.js\";\nexport type { NegotiatorMemoryEntry, NegotiatorMemoryQuery, NegotiatorMemoryScope, NegotiatorMemoryRetrieveFn } from \"./negotiation/negotiation.memory.js\";\nexport type { NegotiationAgentInput } from \"./negotiation/negotiation.agent.js\";\nexport { QuestionerAgent } from \"./questioner/questioner.agent.js\";\nexport type { QuestionerAgentConfig } from \"./questioner/questioner.agent.js\";\nexport type { QuestionerInput, QuestionerContext, QuestionerEnqueuePayload, QuestionerEnqueueFn, DiscoveryContext, IntentContext, ProfileContext, NegotiationContext, NegotiationInflightContext, ChatContext } from \"./questioner/questioner.types.js\";\nexport { getPreset } from \"./questioner/questioner.presets.js\";\nexport { isQuestionerEnabled, isDiscoveryQuestionsEnabled, discoveryQuestionsInputMode, discoveryQuestionsTimeoutMs, chatQuestionWaitTimeoutMs } from \"./questioner/questioner.env.js\";\nexport type { QuestionerPreset } from \"./questioner/questioner.presets.js\";\nexport { OpportunityEvaluator } from \"./opportunity/opportunity.evaluator.js\";\nexport type { EvaluatorInput, OpportunityEvaluatorOptionsConstructor } from \"./opportunity/opportunity.evaluator.js\";\nexport { OpportunityPresenter, gatherPresenterContext } from \"./opportunity/opportunity.presenter.js\";\nexport { createOpportunityTools } from \"./opportunity/opportunity.tools.js\";\nexport { createEnrichmentTools } from \"./enrichment/enrichment.tools.js\";\nexport type { PresenterDatabase } from \"./opportunity/opportunity.presenter.js\";\nexport { QuestionGenerator } from \"./opportunity/question.generator.js\";\n\n// ─── Support utilities ────────────────────────────────────────────────────────\n\nexport { renderNetworkContext } from './shared/network/metadata.renderer.js';\nexport { canUserSeeOpportunity, isActionableForViewer, validateOpportunityActors, classifyOpportunity, selectByComposition, selectDigestCandidates, DIGEST_REDELIVERY_COOLDOWN_DAYS, FEED_SOFT_TARGETS } from \"./opportunity/opportunity.utils.js\";\nexport type { DigestDeliveredRow } from \"./opportunity/opportunity.utils.js\";\nexport { getPrimaryActionLabel } from \"./opportunity/opportunity.labels.js\";\nexport { computeFeedHealth } from \"./opportunity/feed/feed.health.js\";\nexport type { FeedHealthInput, FeedHealthResult } from \"./opportunity/feed/feed.health.js\";\nexport { selectContactsForDiscovery, shouldRunIntroducerDiscovery, runIntroducerDiscovery, MAX_CONTACTS_PER_CYCLE, MAX_CANDIDATES_PER_CONTACT, INTRODUCER_DISCOVERY_SOURCE } from \"./opportunity/opportunity.introducer.js\";\nexport type { IntroducerDiscoveryDatabase, IntroducerDiscoveryQueue, ContactWithIntents } from \"./opportunity/opportunity.introducer.js\";\nexport { persistOpportunities } from \"./opportunity/opportunity.persist.js\";\nexport { presentOpportunity } from \"./opportunity/opportunity.presentation.js\";\nexport type { UserInfo } from \"./opportunity/opportunity.presentation.js\";\nexport { stripUuids, stripIntroducerMentions, truncateAtBoundary } from \"./opportunity/opportunity.presentation.js\";\nexport { safeFallbackSummary, getSafePresentationOrSkip, SAFE_FALLBACK_MAX_CHARS, DEFAULT_FALLBACK_HEADLINE, DEFAULT_FALLBACK_ACTION, DEFAULT_EMPTY_FALLBACK_TEXT } from \"./opportunity/opportunity.safe-presentation.js\";\nexport type { SafeFallbackOptions, SafePresentation, SafePresentationOptions, SafePresentationSource } from \"./opportunity/opportunity.safe-presentation.js\";\nexport { getOrCreateDeliveryCardBatch, DELIVERY_CARD_CACHE_TTL, type CachedDeliveryCard, type OpportunityWithContext } from \"./opportunity/delivery-card.cache.js\";\n\n// ─── Tools ────────────────────────────────────────────────────────────────────\n\nexport { createToolRegistry } from \"./shared/agent/tool.registry.js\";\nexport { createAgentTools } from './agent/agent.tools.js';\nexport { AMBIENT_PARK_WINDOW_MS } from './negotiation/negotiation.tools.js';\nexport { normalizeTelegramHandle } from './shared/utils/telegram-handle.js';\n\n// ─── MCP ──────────────────────────────────────────────────────────────────────\n\nexport { createMcpServer, computeAgentAllowedNetworkIds, buildMcpOnboardingMessage, ONBOARDING_ALLOWED } from \"./mcp/mcp.server.js\";\nexport type { ScopedDepsFactory } from \"./mcp/mcp.server.js\";\nexport { buildElicitationCreate, flattenChoice } from \"./mcp/elicitation.builder.js\";\nexport { dispatchElicitations } from \"./mcp/elicitation.dispatcher.js\";\nexport type { ElicitResultLike, ElicitInputFn, DispatchElicitationsParams } from \"./mcp/elicitation.dispatcher.js\";\n\n// ─── States (for advanced graph consumers) ────────────────────────────────────\n// @experimental — internal graph-state shapes; may change in a minor release.\n\nexport type { UserNegotiationContext, NegotiationTurn, NegotiationOutcome, SeedAssessment } from \"./shared/schemas/negotiation-state.schema.js\";\nexport { NEGOTIATION_ACTIONS, AskUserPayloadSchema } from \"./shared/schemas/negotiation-state.schema.js\";\nexport type { NegotiationAction, NegotiationSeat, NegotiationProtocolVersion, AskUserPayload } from \"./shared/schemas/negotiation-state.schema.js\";\nexport type { NegotiationGraphLike } from \"./negotiation/negotiation.state.js\";\n\n// ─── Negotiation seat rules (v2 client-advocate protocol) ───────────────────\n\nexport {\n InitiatorTurnSchema,\n CounterpartyTurnSchema,\n FinalInitiatorTurnSchema,\n FinalCounterpartyTurnSchema,\n InitiatorAskUserTurnSchema,\n CounterpartyAskUserTurnSchema,\n allowedActionsFor,\n turnSchemaFor,\n isTerminalAction,\n isRejectLikeAction,\n fallbackActionFor,\n rejectActionFor,\n readProtocolVersion,\n configuredProtocolVersion,\n configuredAskUserEnabled,\n askUserAnswerWindowMs,\n DEFAULT_ASK_USER_WINDOW_MS,\n ASK_USER_LOCK_SLACK_MS,\n resolveSeat,\n seatViolationMessage,\n} from \"./negotiation/negotiation.protocol.js\";\n\n// ─── Streamers ────────────────────────────────────────────────────────────────\n\nexport { ChatStreamer } from \"./chat/chat.streamer.js\";\nexport { ResponseStreamer } from \"./shared/agent/response.streamer.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// =============================================================================\n// @indexnetwork/protocol — public API barrel\n//\n// This file is the ONLY supported entry point. Deep imports\n// (\"@indexnetwork/protocol/src/...\") are not part of the contract and may break\n// in any release. Every symbol is re-exported explicitly (no wildcards) so the\n// surface is reviewable and changes are intentional.\n//\n// Stability tiers are defined in STABILITY.md. In short:\n// • Stable — Interfaces, Graph factories, Agents, createChatTools,\n// the tool/runtime helpers, and shared schemas.\n// • Experimental — Sections marked @experimental below (advanced graph state\n// types and internal helpers); may change in a minor release.\n// =============================================================================\n\n// ─── Public API (recommended for external consumers) ──────────────────────────\n\nexport { createChatTools } from \"./shared/agent/tool.factory.js\";\nexport { getModelName } from \"./shared/agent/model.config.js\";\nexport type { ChatTools } from \"./shared/agent/tool.factory.js\";\nexport type { ModelConfig, ModelSettings } from \"./shared/agent/model.config.js\";\nexport type { ToolContext, ResolvedToolContext, ToolDeps, ProtocolDeps, RawToolDefinition, CompiledGraph } from \"./shared/agent/tool.helpers.js\";\nexport { ChatContextAccessError, resolveChatContext } from \"./shared/agent/tool.helpers.js\";\nexport {\n deriveAllowedNetworkIds,\n deriveDiscoveryNetworkIds,\n focusedNetworkId,\n focusedNetworkLabel,\n hasNetworkScope,\n scopeFromNetworkId,\n} from \"./shared/agent/tool.scope.js\";\nexport type { ToolScopeEnvelope, ToolScopeType, ScopeMembership, DeriveNetworkScopeInput } from \"./shared/agent/tool.scope.js\";\nexport { requestContext } from \"./shared/observability/request-context.js\";\nexport { setLoggerFactory } from \"./shared/observability/log.js\";\nexport type { LoggerWithSource as ProtocolLoggerWithSource } from \"./shared/observability/log.js\";\nexport { setTimingWrapper } from \"./shared/observability/performance.js\";\nexport { ToolRuntimeError, getToolTimeoutPolicy, invokeToolRuntime, toolRuntimeErrorToResult } from \"./shared/agent/tool.runtime.js\";\nexport type { ToolRuntimeErrorCode, ToolTimeoutClass, ToolTimeoutPolicy } from \"./shared/agent/tool.runtime.js\";\n\n// ─── Interfaces (implement these to wire up your infrastructure) ───────────────\n\nexport type { McpAuthResolver } from \"./shared/interfaces/auth.interface.js\";\nexport type { Cache, CacheOptions, HydeCache, OpportunityCache } from \"./shared/interfaces/cache.interface.js\";\nexport type { ChatSessionReader, ChatSessionDetail, ChatSessionSummary } from \"./shared/interfaces/chat-session.interface.js\";\nexport type { ChatSummaryReader } from \"./shared/interfaces/chat-summary.interface.js\";\nexport type { ChatMessageWriter } from \"./shared/interfaces/chat-message-writer.interface.js\";\nexport type { QuestionGeneratorReader } from \"./shared/interfaces/question-generator.interface.js\";\nexport type { QuestionerDatabase, PersistableQuestion, PersistedQuestion, QuestionFilters, ChatQuestionsHost, ChatQuestionAnswerOutcome } from \"./shared/interfaces/questioner.interface.js\";\nexport type { NegotiationSummaryReader } from \"./shared/interfaces/negotiation-summary.interface.js\";\nexport type { DiscoveryNegotiationDigest } from \"./shared/schemas/negotiation-digest.schema.js\";\nexport { NegotiationSummarizer, buildFallbackDigest } from \"./negotiation/negotiation.summarizer.js\";\nexport type { ContactServiceAdapter, ContactEntry, ContactImportResult, ContactInput, ContactResult, ContactSearchResult } from \"./shared/interfaces/contact.interface.js\";\nexport type {\n ChatGraphCompositeDatabase, UserDatabase, SystemDatabase, Database,\n OpportunityGraphDatabase, OpportunityControllerDatabase, HomeGraphDatabase,\n IntentGraphDatabase, IntentNetworkGraphDatabase, NetworkGraphDatabase, NetworkMembershipGraphDatabase,\n HydeGraphDatabase, EnrichmentGraphDatabase, PremiseGraphDatabase, NegotiationGraphDatabase,\n NegotiationQueries, NegotiationUserAnswer,\n Opportunity, OpportunityActor, OpportunityContext, OpportunityDetection, OpportunityInterpretation,\n OpportunityQueryOptions, OpportunitySignal, OpportunityStatus,\n ActiveIntent, CreatedIntent, CreateIntentData, UpdateIntentData, IntentRecord, SimilarIntent, SimilarIntentSearchOptions,\n IndexedIntentDetails, IndexMemberDetails, AssignmentNetworkMembership, NetworkAssignmentContext, NetworkMembership, OwnedIndex,\n CreateHydeDocumentData, HydeDocument, HydeSourceType, CreateOpportunityData,\n PremiseAnalysis, PremiseAssertion, PremiseProvenance, PremiseRecord, PremiseValidity,\n OnboardingPrivacyState, OnboardingProfileSeed, OnboardingState, PrivacyConsentDecision, PrivacyConsentSource,\n UpdateIndexSettingsData, UserRecord, UserSocial, ArchiveResult, Id,\n} from \"./shared/interfaces/database.interface.js\";\nexport type {\n Embedder, EmbeddingGenerator, EmbeddingGenerateOptions,\n VectorStore, VectorStoreOption, VectorSearchResult,\n HydeCandidate, HydeSearchOptions, LensEmbedding,\n} from \"./shared/interfaces/embedder.interface.js\";\nexport type { ProfileEnricher, EnrichmentRequest, EnrichmentResult } from \"./shared/interfaces/enrichment.interface.js\";\nexport type { IntegrationAdapter, IntegrationConnection, IntegrationSession, IntegrationSessionOptions, ToolActionResponse } from \"./shared/interfaces/integration.interface.js\";\nexport type { IntentGraphQueue } from \"./shared/interfaces/queue.interface.js\";\nexport type { Scraper, ExtractUrlContentOptions } from \"./shared/interfaces/scraper.interface.js\";\nexport type { Storage } from \"./shared/interfaces/storage.interface.js\";\nexport type { DeliveryLedger, DeliveredOpportunityRow } from \"./shared/interfaces/delivery-ledger.interface.js\";\nexport type { MintConnectLink, ConnectLinkKind } from \"./shared/interfaces/connect-link.interface.js\";\nexport type {\n DiscoveryRunStore, DiscoveryRunQueue, DiscoveryRunInput, CreateDiscoveryRunInput,\n DiscoveryRunRecord, DiscoveryRunStatus,\n} from \"./shared/interfaces/discovery-run.interface.js\";\nexport type {\n EnrichmentRunStore, EnrichmentRunQueue, EnrichmentRunInput, CreateEnrichmentRunInput,\n UpdateUserEnrichmentRunInput, PreviewUserEnrichmentRunInput,\n EnrichmentRunRecord, EnrichmentRunStatus, EnrichmentRunOperation,\n} from \"./shared/interfaces/enrichment-run.interface.js\";\nexport type { NegotiationTimeoutQueue, AskUserExpiryPayload } from \"./shared/interfaces/negotiation-events.interface.js\";\nexport type { AgentDispatcher, AgentDispatchResult, NegotiationTurnPayload } from \"./shared/interfaces/agent-dispatcher.interface.js\";\nexport type { AgentRecord, AgentTransportRecord, AgentPermissionRecord, AgentWithRelations, CreateAgentInput, CreateTransportInput, GrantPermissionInput, AgentDatabase } from './shared/interfaces/agent.interface.js';\nexport { SYSTEM_AGENT_IDS } from './shared/interfaces/agent.interface.js';\n\n// ─── Shared schemas ───────────────────────────────────────────────────────────\n\nexport { ChatContextDigestSchema, type ChatContextDigest } from \"./shared/schemas/chat-context.schema.js\";\nexport { QuestionOptionSchema, QuestionSchema, QuestionStrategySchema, QuestionWithStrategySchema, QuestionGeneratorResponseSchema, QuestionModeSchema, QuestionDetectionSchema, QuestionActorSchema, QuestionAnswerSchema, type Question, type QuestionOption, type QuestionStrategy, type QuestionWithStrategy, type QuestionGeneratorResponse, type QuestionGenerationResult, type QuestionMode, type QuestionDetection, type QuestionActor, type QuestionAnswer } from \"./shared/schemas/question.schema.js\";\nexport type { PendingQuestionSummary } from \"./shared/schemas/pending-question.schema.js\";\nexport type { McpAuthInput } from \"./shared/schemas/mcp-auth.schema.js\";\nexport { UserIdentitySchema, type UserIdentity } from \"./shared/schemas/identity.schema.js\";\nexport type { DiscoverySourceProfile, DiscoverySummary, DiscoveryNegotiation, DiscoveryTurn, DiscoveryOutcome, DiscoveryQuestionInput, NegotiationRole } from \"./shared/schemas/discovery-question.schema.js\";\nexport { NetworkAssignmentResourceTypeSchema, NetworkAssignmentModeSchema, NetworkAssignmentScopeSchema, NetworkAssignmentPromptPresenceSchema, NetworkAssignmentPolicySchema, NetworkAssignmentRawScoresSchema, NetworkAssignmentMetadataSchema, OpportunityEvidenceKindSchema, OpportunityEvidenceSchema } from \"./shared/schemas/network-assignment.schema.js\";\nexport type { NetworkAssignmentResourceType, NetworkAssignmentMode, NetworkAssignmentScope, NetworkAssignmentPromptPresence, NetworkAssignmentPolicy, NetworkAssignmentRawScores, NetworkAssignmentMetadata, OpportunityEvidenceKind, OpportunityEvidence } from \"./shared/schemas/network-assignment.schema.js\";\nexport { DEFAULT_NETWORK_ASSIGNMENT_THRESHOLD, classifyPromptPresence, resolveAssignmentNetworkScope, buildNetworkAssignmentDecision, combineAssignmentScores } from \"./shared/assignment/network-assignment.policy.js\";\nexport type { PromptPresenceInput, ResolveAssignmentNetworkScopeArgs, AssignmentScopeMembership, BuildNetworkAssignmentDecisionArgs, NetworkAssignmentDecision } from \"./shared/assignment/network-assignment.policy.js\";\nexport { buildCandidateEvidence, withCandidateEvidence, mergeOpportunityEvidence, withMatchedStrategies, renderOpportunityEvidenceForPrompt } from \"./opportunity/opportunity.evidence.js\";\nexport type { EvidenceCandidateInput } from \"./opportunity/opportunity.evidence.js\";\n\n// ─── Graph factories ──────────────────────────────────────────────────────────\n\nexport { ChatGraphFactory } from \"./chat/chat.graph.js\";\nexport {\n ORCHESTRATOR_PERSONA,\n ORCHESTRATOR_PERSONA_ID,\n type ChatPersonaConfig,\n type ChatPersonaLoopBehaviors,\n} from \"./chat/chat.persona.js\";\nexport {\n NEGOTIATOR_PERSONA_ID,\n NEGOTIATOR_TOOL_NAMES,\n createNegotiatorPersona,\n createNegotiatorTools,\n filterNegotiatorTools,\n} from \"./chat/negotiator.persona.js\";\nexport { buildNegotiatorSystemContent, type NegotiatorPromptOptions } from \"./chat/negotiator.prompt.js\";\nexport {\n NEGOTIATOR_MEMORY_TOOL_NAMES,\n createNegotiatorMemoryTools,\n} from \"./chat/negotiator.tools.js\";\nexport type {\n NegotiatorMemoryToolsHost,\n NegotiatorMemoryRememberInput,\n NegotiatorMemoryToolView,\n NegotiatorMemoryForgetResult,\n RememberableMemoryKind,\n} from \"./shared/interfaces/negotiator-memory.interface.js\";\nexport { HomeGraphFactory } from \"./opportunity/feed/feed.graph.js\";\nexport { HydeGraphFactory } from \"./shared/hyde/hyde.graph.js\";\nexport { NetworkGraphFactory } from \"./network/network.graph.js\";\nexport { NetworkMembershipGraphFactory } from \"./network/membership/membership.graph.js\";\nexport { IntentGraphFactory } from \"./intent/intent.graph.js\";\nexport { IntentNetworkGraphFactory } from \"./network/indexer/indexer.graph.js\";\nexport { MaintenanceGraphFactory } from \"./maintenance/maintenance.graph.js\";\nexport type { MaintenanceGraphDatabase, MaintenanceGraphCache, MaintenanceGraphQueue } from \"./maintenance/maintenance.graph.js\";\nexport { NegotiationGraphFactory, createDefaultNegotiationGraph, negotiateCandidates } from \"./negotiation/negotiation.graph.js\";\nexport { OpportunityGraphFactory } from \"./opportunity/opportunity.graph.js\";\nexport { EnrichmentGraphFactory } from \"./enrichment/enrichment.graph.js\";\nexport { PremiseGraphFactory } from \"./premise/premise.graph.js\";\n\n// ─── Agents ───────────────────────────────────────────────────────────────────\n\nexport { UserContextGenerator } from \"./context/context.generator.js\";\nexport type { UserContextInput, IncrementalContextInput, UserContextResult, GlobalContextInput, GlobalIncrementalContextInput } from \"./context/context.generator.js\";\nexport { ChatTitleGenerator } from \"./chat/chat.title.generator.js\";\nexport { ChatInterruptClassifier } from \"./chat/chat.interrupt.classifier.js\";\nexport type { ClassifyInterruptInput } from \"./chat/chat.interrupt.classifier.js\";\nexport { ChatSummarizer } from \"./chat/chat.summarizer.js\";\nexport type { ChatSummarizerInput, ChatSummarizerMessage } from \"./chat/chat.summarizer.js\";\nexport { HydeGenerator } from \"./shared/hyde/hyde.generator.js\";\nexport { SuggestionGenerator } from \"./chat/chat.suggester.js\";\nexport type { SuggestionGeneratorInput } from \"./chat/chat.suggester.js\";\nexport { generateInviteMessage } from \"./contact/contact.inviter.js\";\nexport type { InviteInput, InviteOutput } from \"./contact/contact.inviter.js\";\nexport { IntentIndexer } from \"./intent/intent.indexer.js\";\nexport type { IntentIndexerOutput } from \"./intent/intent.indexer.js\";\nexport { PremiseAnalyzer } from \"./premise/premise.analyzer.js\";\nexport type { PremiseAnalyzerOutput } from \"./premise/premise.analyzer.js\";\nexport { PremiseDecomposer } from \"./premise/premise.decomposer.js\";\nexport type { PremiseDecomposerOutput, DecomposedPremise } from \"./premise/premise.decomposer.js\";\nexport { PremiseIndexer } from \"./premise/premise.indexer.js\";\nexport type { PremiseIndexerOutput } from \"./premise/premise.indexer.js\";\nexport { LensInferrer } from \"./shared/hyde/lens.inferrer.js\";\nexport { NegotiationInsightsGenerator } from \"./negotiation/insight.generator.js\";\nexport type { NegotiationDigest } from \"./negotiation/insight.generator.js\";\nexport { IndexNegotiator } from \"./negotiation/negotiation.agent.js\";\nexport { NegotiationScreener, configuredScreenMode, ScreenDecisionSchema, NEGOTIATION_SCREEN_MODES } from \"./negotiation/negotiation.screen.js\";\nexport type { ScreenDecision, ScreenDecisionRecord, NegotiationScreenMode, NegotiationScreenerInput } from \"./negotiation/negotiation.screen.js\";\nexport { NegotiationReflector, DistilledMemorySchema, ReflectionResultSchema, MAX_DISTILLED_MEMORIES, NEGOTIATOR_MEMORY_KINDS } from \"./negotiation/negotiation.reflect.js\";\nexport type { DistilledMemory, DistilledMemoryKind, ReflectionResult, ReflectionTranscriptEntry, NegotiationReflectionInput, ChatReflectionInput, NegotiationReflectJobData, ReflectEnqueueFn } from \"./negotiation/negotiation.reflect.js\";\nexport { renderNegotiatorMemorySection, renderNegotiatorChatMemorySection } from \"./negotiation/negotiation.memory.js\";\nexport type { NegotiatorMemoryEntry, NegotiatorMemoryQuery, NegotiatorMemoryScope, NegotiatorMemoryRetrieveFn } from \"./negotiation/negotiation.memory.js\";\nexport type { NegotiationAgentInput } from \"./negotiation/negotiation.agent.js\";\nexport { QuestionerAgent } from \"./questioner/questioner.agent.js\";\nexport type { QuestionerAgentConfig } from \"./questioner/questioner.agent.js\";\nexport type { QuestionerInput, QuestionerContext, QuestionerEnqueuePayload, QuestionerEnqueueFn, DiscoveryContext, IntentContext, ProfileContext, NegotiationContext, NegotiationInflightContext, ChatContext } from \"./questioner/questioner.types.js\";\nexport { getPreset } from \"./questioner/questioner.presets.js\";\nexport { isQuestionerEnabled, isDiscoveryQuestionsEnabled, discoveryQuestionsInputMode, discoveryQuestionsTimeoutMs, chatQuestionWaitTimeoutMs } from \"./questioner/questioner.env.js\";\nexport type { QuestionerPreset } from \"./questioner/questioner.presets.js\";\nexport { PoolDiscriminatorMiner } from \"./opportunity/discriminator/discriminator.miner.js\";\nexport type { PoolDiscriminatorMinerConfig } from \"./opportunity/discriminator/discriminator.miner.js\";\nexport { runPoolDiscriminatorShadow } from \"./opportunity/discriminator/discriminator.shadow.js\";\nexport type { DiscriminatorShadowInput } from \"./opportunity/discriminator/discriminator.shadow.js\";\nexport { scoreDiscriminator, computeNovelty, cosineSimilarity } from \"./opportunity/discriminator/discriminator.scorer.js\";\nexport { poolQuestionsMiningMode, POOL_DISCRIMINATOR_MIN_POOL_SIZE, POOL_DISCRIMINATOR_MAX_CANDIDATES, POOL_DISCRIMINATOR_MAX_PUBLIC_CONTEXT_CHARS } from \"./opportunity/discriminator/discriminator.env.js\";\nexport type { PoolQuestionsMiningMode } from \"./opportunity/discriminator/discriminator.env.js\";\nexport type { PoolCandidate, DiscriminatorMiningInput, MinedDiscriminator, ScoredDiscriminator, VerifiedAssignment, DiscriminatorShadowResult } from \"./opportunity/discriminator/discriminator.types.js\";\nexport { OpportunityEvaluator } from \"./opportunity/opportunity.evaluator.js\";\nexport type { EvaluatorInput, OpportunityEvaluatorOptionsConstructor } from \"./opportunity/opportunity.evaluator.js\";\nexport { OpportunityPresenter, gatherPresenterContext } from \"./opportunity/opportunity.presenter.js\";\nexport { createOpportunityTools } from \"./opportunity/opportunity.tools.js\";\nexport { createEnrichmentTools } from \"./enrichment/enrichment.tools.js\";\nexport type { PresenterDatabase } from \"./opportunity/opportunity.presenter.js\";\nexport { QuestionGenerator } from \"./opportunity/question.generator.js\";\n\n// ─── Support utilities ────────────────────────────────────────────────────────\n\nexport { renderNetworkContext } from './shared/network/metadata.renderer.js';\nexport { canUserSeeOpportunity, isActionableForViewer, validateOpportunityActors, classifyOpportunity, selectByComposition, selectDigestCandidates, DIGEST_REDELIVERY_COOLDOWN_DAYS, FEED_SOFT_TARGETS } from \"./opportunity/opportunity.utils.js\";\nexport type { DigestDeliveredRow } from \"./opportunity/opportunity.utils.js\";\nexport { getPrimaryActionLabel } from \"./opportunity/opportunity.labels.js\";\nexport { computeFeedHealth } from \"./opportunity/feed/feed.health.js\";\nexport type { FeedHealthInput, FeedHealthResult } from \"./opportunity/feed/feed.health.js\";\nexport { selectContactsForDiscovery, shouldRunIntroducerDiscovery, runIntroducerDiscovery, MAX_CONTACTS_PER_CYCLE, MAX_CANDIDATES_PER_CONTACT, INTRODUCER_DISCOVERY_SOURCE } from \"./opportunity/opportunity.introducer.js\";\nexport type { IntroducerDiscoveryDatabase, IntroducerDiscoveryQueue, ContactWithIntents } from \"./opportunity/opportunity.introducer.js\";\nexport { persistOpportunities } from \"./opportunity/opportunity.persist.js\";\nexport { presentOpportunity } from \"./opportunity/opportunity.presentation.js\";\nexport type { UserInfo } from \"./opportunity/opportunity.presentation.js\";\nexport { stripUuids, stripIntroducerMentions, truncateAtBoundary } from \"./opportunity/opportunity.presentation.js\";\nexport { safeFallbackSummary, getSafePresentationOrSkip, SAFE_FALLBACK_MAX_CHARS, DEFAULT_FALLBACK_HEADLINE, DEFAULT_FALLBACK_ACTION, DEFAULT_EMPTY_FALLBACK_TEXT } from \"./opportunity/opportunity.safe-presentation.js\";\nexport type { SafeFallbackOptions, SafePresentation, SafePresentationOptions, SafePresentationSource } from \"./opportunity/opportunity.safe-presentation.js\";\nexport { getOrCreateDeliveryCardBatch, DELIVERY_CARD_CACHE_TTL, type CachedDeliveryCard, type OpportunityWithContext } from \"./opportunity/delivery-card.cache.js\";\n\n// ─── Tools ────────────────────────────────────────────────────────────────────\n\nexport { createToolRegistry } from \"./shared/agent/tool.registry.js\";\nexport { createAgentTools } from './agent/agent.tools.js';\nexport { AMBIENT_PARK_WINDOW_MS } from './negotiation/negotiation.tools.js';\nexport { normalizeTelegramHandle } from './shared/utils/telegram-handle.js';\n\n// ─── MCP ──────────────────────────────────────────────────────────────────────\n\nexport { createMcpServer, computeAgentAllowedNetworkIds, buildMcpOnboardingMessage, ONBOARDING_ALLOWED } from \"./mcp/mcp.server.js\";\nexport type { ScopedDepsFactory } from \"./mcp/mcp.server.js\";\nexport { buildElicitationCreate, flattenChoice } from \"./mcp/elicitation.builder.js\";\nexport { dispatchElicitations } from \"./mcp/elicitation.dispatcher.js\";\nexport type { ElicitResultLike, ElicitInputFn, DispatchElicitationsParams } from \"./mcp/elicitation.dispatcher.js\";\n\n// ─── States (for advanced graph consumers) ────────────────────────────────────\n// @experimental — internal graph-state shapes; may change in a minor release.\n\nexport type { UserNegotiationContext, NegotiationTurn, NegotiationOutcome, SeedAssessment } from \"./shared/schemas/negotiation-state.schema.js\";\nexport { NEGOTIATION_ACTIONS, AskUserPayloadSchema } from \"./shared/schemas/negotiation-state.schema.js\";\nexport type { NegotiationAction, NegotiationSeat, NegotiationProtocolVersion, AskUserPayload } from \"./shared/schemas/negotiation-state.schema.js\";\nexport type { NegotiationGraphLike } from \"./negotiation/negotiation.state.js\";\n\n// ─── Negotiation seat rules (v2 client-advocate protocol) ───────────────────\n\nexport {\n InitiatorTurnSchema,\n CounterpartyTurnSchema,\n FinalInitiatorTurnSchema,\n FinalCounterpartyTurnSchema,\n InitiatorAskUserTurnSchema,\n CounterpartyAskUserTurnSchema,\n allowedActionsFor,\n turnSchemaFor,\n isTerminalAction,\n isRejectLikeAction,\n fallbackActionFor,\n rejectActionFor,\n readProtocolVersion,\n configuredProtocolVersion,\n configuredAskUserEnabled,\n askUserAnswerWindowMs,\n DEFAULT_ASK_USER_WINDOW_MS,\n ASK_USER_LOCK_SLACK_MS,\n resolveSeat,\n seatViolationMessage,\n} from \"./negotiation/negotiation.protocol.js\";\n\n// ─── Streamers ────────────────────────────────────────────────────────────────\n\nexport { ChatStreamer } from \"./chat/chat.streamer.js\";\nexport { ResponseStreamer } from \"./shared/agent/response.streamer.js\";\n"]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Centralized accessors for pool-question environment variables (IND-416).
3
+ *
4
+ * POOL_QUESTIONS_MINING off | shadow — P1 shadow axis mining on
5
+ * discovery-run completion. `shadow` mines and
6
+ * scores axes and logs them; no questions are
7
+ * generated and no user-facing behavior changes.
8
+ * Any value other than "shadow" (including unset)
9
+ * means off.
10
+ *
11
+ * All reads go through this module — do not read these variables via
12
+ * `process.env` elsewhere. Values are read on every call (no caching) so
13
+ * tests and long-lived processes observe changes.
14
+ */
15
+ /** Mining mode for pool discriminator axes. */
16
+ export type PoolQuestionsMiningMode = "off" | "shadow";
17
+ /** Current POOL_QUESTIONS_MINING mode (default off). */
18
+ export declare function poolQuestionsMiningMode(): PoolQuestionsMiningMode;
19
+ /**
20
+ * k-anonymity floor: axes are only mined when the pool has at least this many
21
+ * candidates, so no axis (or later, question option) can be traced back to a
22
+ * specific individual.
23
+ */
24
+ export declare const POOL_DISCRIMINATOR_MIN_POOL_SIZE = 5;
25
+ /** Max candidates sent to the miner LLM (top-N by score). */
26
+ export declare const POOL_DISCRIMINATOR_MAX_CANDIDATES = 24;
27
+ /** Max chars of public context per candidate in the miner prompt. */
28
+ export declare const POOL_DISCRIMINATOR_MAX_PUBLIC_CONTEXT_CHARS = 400;
29
+ //# sourceMappingURL=discriminator.env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.env.d.ts","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+CAA+C;AAC/C,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvD,wDAAwD;AACxD,wBAAgB,uBAAuB,IAAI,uBAAuB,CAEjE;AAED;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,6DAA6D;AAC7D,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD,qEAAqE;AACrE,eAAO,MAAM,2CAA2C,MAAM,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Centralized accessors for pool-question environment variables (IND-416).
3
+ *
4
+ * POOL_QUESTIONS_MINING off | shadow — P1 shadow axis mining on
5
+ * discovery-run completion. `shadow` mines and
6
+ * scores axes and logs them; no questions are
7
+ * generated and no user-facing behavior changes.
8
+ * Any value other than "shadow" (including unset)
9
+ * means off.
10
+ *
11
+ * All reads go through this module — do not read these variables via
12
+ * `process.env` elsewhere. Values are read on every call (no caching) so
13
+ * tests and long-lived processes observe changes.
14
+ */
15
+ /** Current POOL_QUESTIONS_MINING mode (default off). */
16
+ export function poolQuestionsMiningMode() {
17
+ return process.env.POOL_QUESTIONS_MINING?.trim() === "shadow" ? "shadow" : "off";
18
+ }
19
+ /**
20
+ * k-anonymity floor: axes are only mined when the pool has at least this many
21
+ * candidates, so no axis (or later, question option) can be traced back to a
22
+ * specific individual.
23
+ */
24
+ export const POOL_DISCRIMINATOR_MIN_POOL_SIZE = 5;
25
+ /** Max candidates sent to the miner LLM (top-N by score). */
26
+ export const POOL_DISCRIMINATOR_MAX_CANDIDATES = 24;
27
+ /** Max chars of public context per candidate in the miner prompt. */
28
+ export const POOL_DISCRIMINATOR_MAX_PUBLIC_CONTEXT_CHARS = 400;
29
+ //# sourceMappingURL=discriminator.env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.env.js","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,wDAAwD;AACxD,MAAM,UAAU,uBAAuB;IACrC,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAElD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAEpD,qEAAqE;AACrE,MAAM,CAAC,MAAM,2CAA2C,GAAG,GAAG,CAAC","sourcesContent":["/**\n * Centralized accessors for pool-question environment variables (IND-416).\n *\n * POOL_QUESTIONS_MINING off | shadow — P1 shadow axis mining on\n * discovery-run completion. `shadow` mines and\n * scores axes and logs them; no questions are\n * generated and no user-facing behavior changes.\n * Any value other than \"shadow\" (including unset)\n * means off.\n *\n * All reads go through this module — do not read these variables via\n * `process.env` elsewhere. Values are read on every call (no caching) so\n * tests and long-lived processes observe changes.\n */\n\n/** Mining mode for pool discriminator axes. */\nexport type PoolQuestionsMiningMode = \"off\" | \"shadow\";\n\n/** Current POOL_QUESTIONS_MINING mode (default off). */\nexport function poolQuestionsMiningMode(): PoolQuestionsMiningMode {\n return process.env.POOL_QUESTIONS_MINING?.trim() === \"shadow\" ? \"shadow\" : \"off\";\n}\n\n/**\n * k-anonymity floor: axes are only mined when the pool has at least this many\n * candidates, so no axis (or later, question option) can be traced back to a\n * specific individual.\n */\nexport const POOL_DISCRIMINATOR_MIN_POOL_SIZE = 5;\n\n/** Max candidates sent to the miner LLM (top-N by score). */\nexport const POOL_DISCRIMINATOR_MAX_CANDIDATES = 24;\n\n/** Max chars of public context per candidate in the miner prompt. */\nexport const POOL_DISCRIMINATOR_MAX_PUBLIC_CONTEXT_CHARS = 400;\n"]}
@@ -0,0 +1,99 @@
1
+ import { z } from "zod";
2
+ import { createStructuredModel } from "../../shared/agent/model.config.js";
3
+ import type { MinedDiscriminator, DiscriminatorMiningInput } from "./discriminator.types.js";
4
+ declare const AxisMiningResponseSchema: z.ZodObject<{
5
+ axes: z.ZodArray<z.ZodObject<{
6
+ axis: z.ZodString;
7
+ questionSeed: z.ZodString;
8
+ sides: z.ZodArray<z.ZodString, "many">;
9
+ assignments: z.ZodArray<z.ZodObject<{
10
+ id: z.ZodString;
11
+ side: z.ZodNullable<z.ZodString>;
12
+ evidence: z.ZodNullable<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ id: string;
15
+ evidence: string | null;
16
+ side: string | null;
17
+ }, {
18
+ id: string;
19
+ evidence: string | null;
20
+ side: string | null;
21
+ }>, "many">;
22
+ }, "strip", z.ZodTypeAny, {
23
+ axis: string;
24
+ questionSeed: string;
25
+ sides: string[];
26
+ assignments: {
27
+ id: string;
28
+ evidence: string | null;
29
+ side: string | null;
30
+ }[];
31
+ }, {
32
+ axis: string;
33
+ questionSeed: string;
34
+ sides: string[];
35
+ assignments: {
36
+ id: string;
37
+ evidence: string | null;
38
+ side: string | null;
39
+ }[];
40
+ }>, "many">;
41
+ }, "strip", z.ZodTypeAny, {
42
+ axes: {
43
+ axis: string;
44
+ questionSeed: string;
45
+ sides: string[];
46
+ assignments: {
47
+ id: string;
48
+ evidence: string | null;
49
+ side: string | null;
50
+ }[];
51
+ }[];
52
+ }, {
53
+ axes: {
54
+ axis: string;
55
+ questionSeed: string;
56
+ sides: string[];
57
+ assignments: {
58
+ id: string;
59
+ evidence: string | null;
60
+ side: string | null;
61
+ }[];
62
+ }[];
63
+ }>;
64
+ type AxisMiningResponse = z.infer<typeof AxisMiningResponseSchema>;
65
+ /** Config for PoolDiscriminatorMiner construction. */
66
+ export interface PoolDiscriminatorMinerConfig {
67
+ /** Optional model config override (API key / base URL / model). */
68
+ modelConfig?: Parameters<typeof createStructuredModel>[3];
69
+ }
70
+ /**
71
+ * Stateless axis-mining agent. One `mine()` call = one structured LLM pass +
72
+ * deterministic evidence verification.
73
+ */
74
+ export declare class PoolDiscriminatorMiner {
75
+ private model;
76
+ constructor(config?: PoolDiscriminatorMinerConfig);
77
+ /**
78
+ * Mine discriminating axes for one pool.
79
+ *
80
+ * @returns Verified axes (may be empty). Throws on LLM failure — callers
81
+ * run this fire-and-forget and must catch.
82
+ */
83
+ mine(input: DiscriminatorMiningInput, options?: {
84
+ signal?: AbortSignal;
85
+ }): Promise<MinedDiscriminator[]>;
86
+ }
87
+ /** Builds the human message: intent text + one numbered block per candidate. */
88
+ export declare function buildMiningPrompt(input: DiscriminatorMiningInput): string;
89
+ /**
90
+ * Deterministic post-pass over one LLM axis:
91
+ * - drops assignments for ids not in the pool,
92
+ * - demotes to unknown: sides not in the axis's side list, missing evidence,
93
+ * and evidence that does not substring-match the candidate's publicContext,
94
+ * - guarantees exactly one assignment per pool candidate (missing → unknown),
95
+ * - computes evidenceRate = verified / side-proposals.
96
+ */
97
+ export declare function verifyAxis(axis: AxisMiningResponse["axes"][number], candidates: DiscriminatorMiningInput["candidates"]): MinedDiscriminator;
98
+ export {};
99
+ //# sourceMappingURL=discriminator.miner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.miner.d.ts","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.miner.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAsB,MAAM,0BAA0B,CAAC;AAOjH,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoC5B,CAAC;AAEH,KAAK,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAkBnE,sDAAsD;AACtD,MAAM,WAAW,4BAA4B;IAC3C,mEAAmE;IACnE,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3D;AA2BD;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAA+D;gBAEhE,MAAM,CAAC,EAAE,4BAA4B;IASjD;;;;;OAKG;IAEG,IAAI,CACR,KAAK,EAAE,wBAAwB,EAC/B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAcjC;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAQzE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACxC,UAAU,EAAE,wBAAwB,CAAC,YAAY,CAAC,GACjD,kBAAkB,CAuCpB"}
@@ -0,0 +1,190 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ /**
11
+ * PoolDiscriminatorMiner — one structured LLM pass that proposes discriminating axes
12
+ * over a discovery-run candidate pool, with code-side evidence verification
13
+ * (IND-417).
14
+ *
15
+ * Anti-hallucination contract: every side assignment must quote a short
16
+ * evidence span from that candidate's supplied publicContext. Verification is
17
+ * done in code (substring match, case/whitespace-insensitive), NOT trusted
18
+ * from the prompt. Failed verifications are demoted to `unknown`, which
19
+ * lowers coverage → lowers VoI → buries the axis. The failure mode
20
+ * self-punishes.
21
+ *
22
+ * Follows the QuestionerAgent pattern: constructor binds the structured
23
+ * model once; single public `mine()` per call.
24
+ */
25
+ import { HumanMessage, SystemMessage } from "@langchain/core/messages";
26
+ import { z } from "zod";
27
+ import { createStructuredModel } from "../../shared/agent/model.config.js";
28
+ import { invokeWithAbortSignal } from "../../shared/agent/model-signal.js";
29
+ import { protocolLogger } from "../../shared/observability/protocol.logger.js";
30
+ import { Timed } from "../../shared/observability/performance.js";
31
+ const logger = protocolLogger("PoolDiscriminatorMiner");
32
+ /** Max axes requested from (and accepted out of) one mining pass. */
33
+ const MAX_AXES = 6;
34
+ const AxisMiningResponseSchema = z.object({
35
+ axes: z
36
+ .array(z.object({
37
+ axis: z
38
+ .string()
39
+ .describe("Short discriminating-axis label, e.g. 'Hands-on builders vs strategic advisors'"),
40
+ questionSeed: z
41
+ .string()
42
+ .describe("A direct question the intent owner could answer to resolve this axis"),
43
+ sides: z
44
+ .array(z.string())
45
+ .min(2)
46
+ .max(3)
47
+ .describe("2-3 mutually exclusive side labels (2-5 words each)"),
48
+ assignments: z
49
+ .array(z.object({
50
+ id: z.string().describe("Candidate id exactly as given"),
51
+ side: z
52
+ .string()
53
+ .nullable()
54
+ .describe("One of this axis's side labels, or null when the context is insufficient"),
55
+ evidence: z
56
+ .string()
57
+ .max(200)
58
+ .nullable()
59
+ .describe("VERBATIM span (≤80 chars) copied from this candidate's context that justifies the side. null when side is null"),
60
+ }))
61
+ .describe("One entry per candidate"),
62
+ }))
63
+ .max(MAX_AXES),
64
+ });
65
+ const SYSTEM_PROMPT = `You analyze a pool of candidate matches for one user intent and propose the preference axes that best SPLIT the pool into meaningfully different groups.
66
+
67
+ Rules for every axis:
68
+ - Sides must be mutually exclusive readings of one dimension (a candidate belongs to at most one side).
69
+ - The axis must NOT already be determined by the intent text itself — only propose axes the intent leaves genuinely open.
70
+ - The axis must be phrased as a preference the intent OWNER could hold and answer (the questionSeed asks them directly).
71
+ - Side labels are terse (2-5 words), concrete, and derived from patterns across MULTIPLE candidates — never from a single person and never naming anyone.
72
+ - BANNED axis families: protected attributes (race, ethnicity, religion, gender, age, nationality, disability, politics, sexual orientation), and vanity/noise splits (profile completeness, bio length, has photo, name alphabet).
73
+
74
+ Rules for assignments:
75
+ - Assign EVERY candidate: pick a side only when the candidate's context contains clear support; otherwise use side null.
76
+ - When you pick a side you MUST quote a short (≤80 chars) VERBATIM substring of that candidate's context as evidence. Copy it exactly — it is checked mechanically, and paraphrased evidence is discarded. Do NOT add punctuation that is not in the source (no trailing period); cutting off mid-sentence is fine.
77
+ - Never invent context. If unsure, use side null with evidence null.
78
+
79
+ Prefer axes that split the pool close to evenly and that cover many candidates with verifiable evidence. Propose at most ${MAX_AXES} axes; fewer strong axes beat many weak ones.`;
80
+ /**
81
+ * Collapse whitespace, lowercase, and fold typographic punctuation to ASCII
82
+ * (curly quotes/apostrophes, en/em dashes, ellipsis), so evidence matching
83
+ * tolerates formatting drift without weakening the verbatim requirement.
84
+ */
85
+ function normalizeForMatch(s) {
86
+ return s
87
+ .toLowerCase()
88
+ .replace(/[\u2018\u2019\u02bc]/g, "'")
89
+ .replace(/[\u201c\u201d]/g, '"')
90
+ .replace(/[\u2013\u2014]/g, "-")
91
+ .replace(/\u2026/g, "...")
92
+ .replace(/\s+/g, " ")
93
+ .trim();
94
+ }
95
+ /**
96
+ * Strips wrapping quotes and edge punctuation from an evidence span before
97
+ * matching. LLMs habitually sentence-ize copied spans (append a trailing
98
+ * period, wrap in quotes); the meaningful content must still match verbatim.
99
+ */
100
+ function stripEdgePunctuation(s) {
101
+ return s.replace(/^[\s"'.,;:!?()\u2018\u2019\u201c\u201d]+/, "").replace(/[\s"'.,;:!?()\u2018\u2019\u201c\u201d]+$/, "");
102
+ }
103
+ /**
104
+ * Stateless axis-mining agent. One `mine()` call = one structured LLM pass +
105
+ * deterministic evidence verification.
106
+ */
107
+ export class PoolDiscriminatorMiner {
108
+ constructor(config) {
109
+ this.model = createStructuredModel("poolDiscriminatorMiner", AxisMiningResponseSchema, { name: "pool_axes" }, config?.modelConfig);
110
+ }
111
+ /**
112
+ * Mine discriminating axes for one pool.
113
+ *
114
+ * @returns Verified axes (may be empty). Throws on LLM failure — callers
115
+ * run this fire-and-forget and must catch.
116
+ */
117
+ async mine(input, options) {
118
+ const prompt = buildMiningPrompt(input);
119
+ const raw = await invokeWithAbortSignal(this.model, [new SystemMessage(SYSTEM_PROMPT), new HumanMessage(prompt)], options?.signal);
120
+ const parsed = AxisMiningResponseSchema.safeParse(raw);
121
+ if (!parsed.success) {
122
+ logger.warn("Mining response failed schema validation", { issues: parsed.error.issues.length });
123
+ return [];
124
+ }
125
+ return parsed.data.axes.slice(0, MAX_AXES).map((axis) => verifyAxis(axis, input.candidates));
126
+ }
127
+ }
128
+ __decorate([
129
+ Timed(),
130
+ __metadata("design:type", Function),
131
+ __metadata("design:paramtypes", [Object, Object]),
132
+ __metadata("design:returntype", Promise)
133
+ ], PoolDiscriminatorMiner.prototype, "mine", null);
134
+ /** Builds the human message: intent text + one numbered block per candidate. */
135
+ export function buildMiningPrompt(input) {
136
+ const candidateBlocks = input.candidates
137
+ .map((c) => `[${c.id}]\n${c.publicContext}`)
138
+ .join("\n\n");
139
+ return [
140
+ `Intent:\n${input.intentText}`,
141
+ `Candidate pool (${input.candidates.length} candidates, id in brackets):\n\n${candidateBlocks}`,
142
+ ].join("\n\n");
143
+ }
144
+ /**
145
+ * Deterministic post-pass over one LLM axis:
146
+ * - drops assignments for ids not in the pool,
147
+ * - demotes to unknown: sides not in the axis's side list, missing evidence,
148
+ * and evidence that does not substring-match the candidate's publicContext,
149
+ * - guarantees exactly one assignment per pool candidate (missing → unknown),
150
+ * - computes evidenceRate = verified / side-proposals.
151
+ */
152
+ export function verifyAxis(axis, candidates) {
153
+ const contextById = new Map(candidates.map((c) => [c.id, normalizeForMatch(c.publicContext)]));
154
+ const byId = new Map();
155
+ let proposed = 0;
156
+ let verified = 0;
157
+ for (const a of axis.assignments) {
158
+ const context = contextById.get(a.id);
159
+ if (context === undefined)
160
+ continue; // hallucinated candidate id
161
+ if (byId.has(a.id))
162
+ continue; // first proposal wins
163
+ if (a.side === null) {
164
+ byId.set(a.id, { id: a.id, side: null, evidence: null, verified: false });
165
+ continue;
166
+ }
167
+ proposed++;
168
+ const sideOk = axis.sides.includes(a.side);
169
+ const evidenceCore = a.evidence === null ? "" : normalizeForMatch(stripEdgePunctuation(a.evidence));
170
+ const evidenceOk = evidenceCore.length > 0 && context.includes(evidenceCore);
171
+ if (sideOk && evidenceOk) {
172
+ verified++;
173
+ byId.set(a.id, { id: a.id, side: a.side, evidence: a.evidence, verified: true });
174
+ }
175
+ else {
176
+ // Demoted: keep the (failed) evidence for audit logging, but unknown side.
177
+ byId.set(a.id, { id: a.id, side: null, evidence: a.evidence, verified: false });
178
+ }
179
+ }
180
+ // Every pool candidate gets exactly one assignment.
181
+ const assignments = candidates.map((c) => byId.get(c.id) ?? { id: c.id, side: null, evidence: null, verified: false });
182
+ return {
183
+ label: axis.axis,
184
+ questionSeed: axis.questionSeed,
185
+ sides: axis.sides,
186
+ assignments,
187
+ evidenceRate: proposed > 0 ? verified / proposed : 0,
188
+ };
189
+ }
190
+ //# sourceMappingURL=discriminator.miner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.miner.js","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.miner.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PoolDiscriminatorMiner — one structured LLM pass that proposes discriminating axes\n * over a discovery-run candidate pool, with code-side evidence verification\n * (IND-417).\n *\n * Anti-hallucination contract: every side assignment must quote a short\n * evidence span from that candidate's supplied publicContext. Verification is\n * done in code (substring match, case/whitespace-insensitive), NOT trusted\n * from the prompt. Failed verifications are demoted to `unknown`, which\n * lowers coverage → lowers VoI → buries the axis. The failure mode\n * self-punishes.\n *\n * Follows the QuestionerAgent pattern: constructor binds the structured\n * model once; single public `mine()` per call.\n */\nimport { HumanMessage, SystemMessage } from \"@langchain/core/messages\";\nimport { z } from \"zod\";\n\nimport { createStructuredModel } from \"../../shared/agent/model.config.js\";\nimport { invokeWithAbortSignal } from \"../../shared/agent/model-signal.js\";\nimport { protocolLogger } from \"../../shared/observability/protocol.logger.js\";\nimport { Timed } from \"../../shared/observability/performance.js\";\nimport type { MinedDiscriminator, DiscriminatorMiningInput, VerifiedAssignment } from \"./discriminator.types.js\";\n\nconst logger = protocolLogger(\"PoolDiscriminatorMiner\");\n\n/** Max axes requested from (and accepted out of) one mining pass. */\nconst MAX_AXES = 6;\n\nconst AxisMiningResponseSchema = z.object({\n axes: z\n .array(\n z.object({\n axis: z\n .string()\n .describe(\"Short discriminating-axis label, e.g. 'Hands-on builders vs strategic advisors'\"),\n questionSeed: z\n .string()\n .describe(\"A direct question the intent owner could answer to resolve this axis\"),\n sides: z\n .array(z.string())\n .min(2)\n .max(3)\n .describe(\"2-3 mutually exclusive side labels (2-5 words each)\"),\n assignments: z\n .array(\n z.object({\n id: z.string().describe(\"Candidate id exactly as given\"),\n side: z\n .string()\n .nullable()\n .describe(\"One of this axis's side labels, or null when the context is insufficient\"),\n evidence: z\n .string()\n .max(200)\n .nullable()\n .describe(\n \"VERBATIM span (≤80 chars) copied from this candidate's context that justifies the side. null when side is null\",\n ),\n }),\n )\n .describe(\"One entry per candidate\"),\n }),\n )\n .max(MAX_AXES),\n});\n\ntype AxisMiningResponse = z.infer<typeof AxisMiningResponseSchema>;\n\nconst SYSTEM_PROMPT = `You analyze a pool of candidate matches for one user intent and propose the preference axes that best SPLIT the pool into meaningfully different groups.\n\nRules for every axis:\n- Sides must be mutually exclusive readings of one dimension (a candidate belongs to at most one side).\n- The axis must NOT already be determined by the intent text itself — only propose axes the intent leaves genuinely open.\n- The axis must be phrased as a preference the intent OWNER could hold and answer (the questionSeed asks them directly).\n- Side labels are terse (2-5 words), concrete, and derived from patterns across MULTIPLE candidates — never from a single person and never naming anyone.\n- BANNED axis families: protected attributes (race, ethnicity, religion, gender, age, nationality, disability, politics, sexual orientation), and vanity/noise splits (profile completeness, bio length, has photo, name alphabet).\n\nRules for assignments:\n- Assign EVERY candidate: pick a side only when the candidate's context contains clear support; otherwise use side null.\n- When you pick a side you MUST quote a short (≤80 chars) VERBATIM substring of that candidate's context as evidence. Copy it exactly — it is checked mechanically, and paraphrased evidence is discarded. Do NOT add punctuation that is not in the source (no trailing period); cutting off mid-sentence is fine.\n- Never invent context. If unsure, use side null with evidence null.\n\nPrefer axes that split the pool close to evenly and that cover many candidates with verifiable evidence. Propose at most ${MAX_AXES} axes; fewer strong axes beat many weak ones.`;\n\n/** Config for PoolDiscriminatorMiner construction. */\nexport interface PoolDiscriminatorMinerConfig {\n /** Optional model config override (API key / base URL / model). */\n modelConfig?: Parameters<typeof createStructuredModel>[3];\n}\n\n/**\n * Collapse whitespace, lowercase, and fold typographic punctuation to ASCII\n * (curly quotes/apostrophes, en/em dashes, ellipsis), so evidence matching\n * tolerates formatting drift without weakening the verbatim requirement.\n */\nfunction normalizeForMatch(s: string): string {\n return s\n .toLowerCase()\n .replace(/[\\u2018\\u2019\\u02bc]/g, \"'\")\n .replace(/[\\u201c\\u201d]/g, '\"')\n .replace(/[\\u2013\\u2014]/g, \"-\")\n .replace(/\\u2026/g, \"...\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\n/**\n * Strips wrapping quotes and edge punctuation from an evidence span before\n * matching. LLMs habitually sentence-ize copied spans (append a trailing\n * period, wrap in quotes); the meaningful content must still match verbatim.\n */\nfunction stripEdgePunctuation(s: string): string {\n return s.replace(/^[\\s\"'.,;:!?()\\u2018\\u2019\\u201c\\u201d]+/, \"\").replace(/[\\s\"'.,;:!?()\\u2018\\u2019\\u201c\\u201d]+$/, \"\");\n}\n\n/**\n * Stateless axis-mining agent. One `mine()` call = one structured LLM pass +\n * deterministic evidence verification.\n */\nexport class PoolDiscriminatorMiner {\n private model: ReturnType<typeof createStructuredModel<AxisMiningResponse>>;\n\n constructor(config?: PoolDiscriminatorMinerConfig) {\n this.model = createStructuredModel<AxisMiningResponse>(\n \"poolDiscriminatorMiner\",\n AxisMiningResponseSchema,\n { name: \"pool_axes\" },\n config?.modelConfig,\n );\n }\n\n /**\n * Mine discriminating axes for one pool.\n *\n * @returns Verified axes (may be empty). Throws on LLM failure — callers\n * run this fire-and-forget and must catch.\n */\n @Timed()\n async mine(\n input: DiscriminatorMiningInput,\n options?: { signal?: AbortSignal },\n ): Promise<MinedDiscriminator[]> {\n const prompt = buildMiningPrompt(input);\n const raw = await invokeWithAbortSignal(\n this.model,\n [new SystemMessage(SYSTEM_PROMPT), new HumanMessage(prompt)],\n options?.signal,\n );\n const parsed = AxisMiningResponseSchema.safeParse(raw);\n if (!parsed.success) {\n logger.warn(\"Mining response failed schema validation\", { issues: parsed.error.issues.length });\n return [];\n }\n return parsed.data.axes.slice(0, MAX_AXES).map((axis) => verifyAxis(axis, input.candidates));\n }\n}\n\n/** Builds the human message: intent text + one numbered block per candidate. */\nexport function buildMiningPrompt(input: DiscriminatorMiningInput): string {\n const candidateBlocks = input.candidates\n .map((c) => `[${c.id}]\\n${c.publicContext}`)\n .join(\"\\n\\n\");\n return [\n `Intent:\\n${input.intentText}`,\n `Candidate pool (${input.candidates.length} candidates, id in brackets):\\n\\n${candidateBlocks}`,\n ].join(\"\\n\\n\");\n}\n\n/**\n * Deterministic post-pass over one LLM axis:\n * - drops assignments for ids not in the pool,\n * - demotes to unknown: sides not in the axis's side list, missing evidence,\n * and evidence that does not substring-match the candidate's publicContext,\n * - guarantees exactly one assignment per pool candidate (missing → unknown),\n * - computes evidenceRate = verified / side-proposals.\n */\nexport function verifyAxis(\n axis: AxisMiningResponse[\"axes\"][number],\n candidates: DiscriminatorMiningInput[\"candidates\"],\n): MinedDiscriminator {\n const contextById = new Map(candidates.map((c) => [c.id, normalizeForMatch(c.publicContext)]));\n const byId = new Map<string, VerifiedAssignment>();\n let proposed = 0;\n let verified = 0;\n\n for (const a of axis.assignments) {\n const context = contextById.get(a.id);\n if (context === undefined) continue; // hallucinated candidate id\n if (byId.has(a.id)) continue; // first proposal wins\n if (a.side === null) {\n byId.set(a.id, { id: a.id, side: null, evidence: null, verified: false });\n continue;\n }\n proposed++;\n const sideOk = axis.sides.includes(a.side);\n const evidenceCore = a.evidence === null ? \"\" : normalizeForMatch(stripEdgePunctuation(a.evidence));\n const evidenceOk = evidenceCore.length > 0 && context.includes(evidenceCore);\n if (sideOk && evidenceOk) {\n verified++;\n byId.set(a.id, { id: a.id, side: a.side, evidence: a.evidence, verified: true });\n } else {\n // Demoted: keep the (failed) evidence for audit logging, but unknown side.\n byId.set(a.id, { id: a.id, side: null, evidence: a.evidence, verified: false });\n }\n }\n\n // Every pool candidate gets exactly one assignment.\n const assignments: VerifiedAssignment[] = candidates.map(\n (c) => byId.get(c.id) ?? { id: c.id, side: null, evidence: null, verified: false },\n );\n\n return {\n label: axis.axis,\n questionSeed: axis.questionSeed,\n sides: axis.sides,\n assignments,\n evidenceRate: proposed > 0 ? verified / proposed : 0,\n };\n}\n"]}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Pool-axis VoI scorer — pure functions, no LLM, no I/O (IND-417).
3
+ *
4
+ * VoI = H_norm × coverage^1.5 × novelty
5
+ *
6
+ * H_norm score-weighted entropy over the axis sides, normalized by
7
+ * log2(k). Entropy is computed over candidate *score mass*
8
+ * (confidence weights), not head counts, so a balanced split of
9
+ * low-confidence junk-tail candidates doesn't inflate VoI.
10
+ * coverage fraction of total pool score mass with a verified side
11
+ * assignment. The ^1.5 exponent is the anti-vague-axis knob:
12
+ * axes the LLM couldn't ground in evidence lose fast.
13
+ * novelty 1 − max cosine similarity between the axis embedding and
14
+ * reference embeddings (existing premises, intent sentences).
15
+ * An axis the user has already answered elsewhere scores ~0.
16
+ */
17
+ import type { MinedDiscriminator, PoolCandidate, ScoredDiscriminator } from "./discriminator.types.js";
18
+ /** Cosine similarity of two equal-length vectors, in [-1, 1]. 0 for degenerate input. */
19
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
20
+ /**
21
+ * Novelty of an axis vs reference texts: 1 − max cosine similarity, clamped
22
+ * to [0, 1]. No references → 1 (fully novel).
23
+ */
24
+ export declare function computeNovelty(axisEmbedding: number[], referenceEmbeddings: number[][]): number;
25
+ /**
26
+ * Score one mined axis against its pool.
27
+ *
28
+ * @param axis Mined axis with verified assignments (one per candidate).
29
+ * @param candidates The pool (provides score mass per candidate id).
30
+ * @param novelty Precomputed novelty in [0,1] (see {@link computeNovelty}).
31
+ */
32
+ export declare function scoreDiscriminator(axis: MinedDiscriminator, candidates: PoolCandidate[], novelty: number): ScoredDiscriminator;
33
+ //# sourceMappingURL=discriminator.scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.scorer.d.ts","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEvG,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYjE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAQ/F;AAUD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,MAAM,GACd,mBAAmB,CA0CrB"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Pool-axis VoI scorer — pure functions, no LLM, no I/O (IND-417).
3
+ *
4
+ * VoI = H_norm × coverage^1.5 × novelty
5
+ *
6
+ * H_norm score-weighted entropy over the axis sides, normalized by
7
+ * log2(k). Entropy is computed over candidate *score mass*
8
+ * (confidence weights), not head counts, so a balanced split of
9
+ * low-confidence junk-tail candidates doesn't inflate VoI.
10
+ * coverage fraction of total pool score mass with a verified side
11
+ * assignment. The ^1.5 exponent is the anti-vague-axis knob:
12
+ * axes the LLM couldn't ground in evidence lose fast.
13
+ * novelty 1 − max cosine similarity between the axis embedding and
14
+ * reference embeddings (existing premises, intent sentences).
15
+ * An axis the user has already answered elsewhere scores ~0.
16
+ */
17
+ /** Cosine similarity of two equal-length vectors, in [-1, 1]. 0 for degenerate input. */
18
+ export function cosineSimilarity(a, b) {
19
+ if (a.length === 0 || a.length !== b.length)
20
+ return 0;
21
+ let dot = 0;
22
+ let normA = 0;
23
+ let normB = 0;
24
+ for (let i = 0; i < a.length; i++) {
25
+ dot += a[i] * b[i];
26
+ normA += a[i] * a[i];
27
+ normB += b[i] * b[i];
28
+ }
29
+ if (normA === 0 || normB === 0)
30
+ return 0;
31
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
32
+ }
33
+ /**
34
+ * Novelty of an axis vs reference texts: 1 − max cosine similarity, clamped
35
+ * to [0, 1]. No references → 1 (fully novel).
36
+ */
37
+ export function computeNovelty(axisEmbedding, referenceEmbeddings) {
38
+ if (referenceEmbeddings.length === 0)
39
+ return 1;
40
+ let maxSim = 0;
41
+ for (const ref of referenceEmbeddings) {
42
+ const sim = cosineSimilarity(axisEmbedding, ref);
43
+ if (sim > maxSim)
44
+ maxSim = sim;
45
+ }
46
+ return Math.min(1, Math.max(0, 1 - maxSim));
47
+ }
48
+ /**
49
+ * Weight for one candidate's score mass. Negative/NaN scores contribute 0;
50
+ * when the whole pool has zero mass the caller falls back to count weights.
51
+ */
52
+ function massOf(score) {
53
+ return Number.isFinite(score) && score > 0 ? score : 0;
54
+ }
55
+ /**
56
+ * Score one mined axis against its pool.
57
+ *
58
+ * @param axis Mined axis with verified assignments (one per candidate).
59
+ * @param candidates The pool (provides score mass per candidate id).
60
+ * @param novelty Precomputed novelty in [0,1] (see {@link computeNovelty}).
61
+ */
62
+ export function scoreDiscriminator(axis, candidates, novelty) {
63
+ const massById = new Map();
64
+ let totalMass = 0;
65
+ for (const c of candidates) {
66
+ const m = massOf(c.score);
67
+ massById.set(c.id, m);
68
+ totalMass += m;
69
+ }
70
+ // Degenerate pool (all zero/invalid scores): fall back to count weights.
71
+ const useCounts = totalMass <= 0;
72
+ if (useCounts) {
73
+ totalMass = candidates.length;
74
+ for (const c of candidates)
75
+ massById.set(c.id, 1);
76
+ }
77
+ const sideMass = new Map();
78
+ let assignedMass = 0;
79
+ for (const a of axis.assignments) {
80
+ if (a.side === null || !a.verified)
81
+ continue;
82
+ if (!axis.sides.includes(a.side))
83
+ continue;
84
+ const m = massById.get(a.id) ?? 0;
85
+ if (m <= 0)
86
+ continue;
87
+ sideMass.set(a.side, (sideMass.get(a.side) ?? 0) + m);
88
+ assignedMass += m;
89
+ }
90
+ const k = axis.sides.length;
91
+ let entropy = 0;
92
+ if (assignedMass > 0 && k >= 2) {
93
+ let h = 0;
94
+ for (const mass of sideMass.values()) {
95
+ const p = mass / assignedMass;
96
+ if (p > 0)
97
+ h -= p * Math.log2(p);
98
+ }
99
+ entropy = h / Math.log2(k);
100
+ }
101
+ const coverage = totalMass > 0 ? assignedMass / totalMass : 0;
102
+ const clampedNovelty = Math.min(1, Math.max(0, novelty));
103
+ const voi = entropy * Math.pow(coverage, 1.5) * clampedNovelty;
104
+ return { ...axis, entropy, coverage, novelty: clampedNovelty, voi };
105
+ }
106
+ //# sourceMappingURL=discriminator.scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.scorer.js","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.scorer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pool-axis VoI scorer — pure functions, no LLM, no I/O (IND-417).\n *\n * VoI = H_norm × coverage^1.5 × novelty\n *\n * H_norm score-weighted entropy over the axis sides, normalized by\n * log2(k). Entropy is computed over candidate *score mass*\n * (confidence weights), not head counts, so a balanced split of\n * low-confidence junk-tail candidates doesn't inflate VoI.\n * coverage fraction of total pool score mass with a verified side\n * assignment. The ^1.5 exponent is the anti-vague-axis knob:\n * axes the LLM couldn't ground in evidence lose fast.\n * novelty 1 − max cosine similarity between the axis embedding and\n * reference embeddings (existing premises, intent sentences).\n * An axis the user has already answered elsewhere scores ~0.\n */\n\nimport type { MinedDiscriminator, PoolCandidate, ScoredDiscriminator } from \"./discriminator.types.js\";\n\n/** Cosine similarity of two equal-length vectors, in [-1, 1]. 0 for degenerate input. */\nexport function cosineSimilarity(a: number[], b: number[]): number {\n if (a.length === 0 || a.length !== b.length) return 0;\n let dot = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n if (normA === 0 || normB === 0) return 0;\n return dot / (Math.sqrt(normA) * Math.sqrt(normB));\n}\n\n/**\n * Novelty of an axis vs reference texts: 1 − max cosine similarity, clamped\n * to [0, 1]. No references → 1 (fully novel).\n */\nexport function computeNovelty(axisEmbedding: number[], referenceEmbeddings: number[][]): number {\n if (referenceEmbeddings.length === 0) return 1;\n let maxSim = 0;\n for (const ref of referenceEmbeddings) {\n const sim = cosineSimilarity(axisEmbedding, ref);\n if (sim > maxSim) maxSim = sim;\n }\n return Math.min(1, Math.max(0, 1 - maxSim));\n}\n\n/**\n * Weight for one candidate's score mass. Negative/NaN scores contribute 0;\n * when the whole pool has zero mass the caller falls back to count weights.\n */\nfunction massOf(score: number): number {\n return Number.isFinite(score) && score > 0 ? score : 0;\n}\n\n/**\n * Score one mined axis against its pool.\n *\n * @param axis Mined axis with verified assignments (one per candidate).\n * @param candidates The pool (provides score mass per candidate id).\n * @param novelty Precomputed novelty in [0,1] (see {@link computeNovelty}).\n */\nexport function scoreDiscriminator(\n axis: MinedDiscriminator,\n candidates: PoolCandidate[],\n novelty: number,\n): ScoredDiscriminator {\n const massById = new Map<string, number>();\n let totalMass = 0;\n for (const c of candidates) {\n const m = massOf(c.score);\n massById.set(c.id, m);\n totalMass += m;\n }\n // Degenerate pool (all zero/invalid scores): fall back to count weights.\n const useCounts = totalMass <= 0;\n if (useCounts) {\n totalMass = candidates.length;\n for (const c of candidates) massById.set(c.id, 1);\n }\n\n const sideMass = new Map<string, number>();\n let assignedMass = 0;\n for (const a of axis.assignments) {\n if (a.side === null || !a.verified) continue;\n if (!axis.sides.includes(a.side)) continue;\n const m = massById.get(a.id) ?? 0;\n if (m <= 0) continue;\n sideMass.set(a.side, (sideMass.get(a.side) ?? 0) + m);\n assignedMass += m;\n }\n\n const k = axis.sides.length;\n let entropy = 0;\n if (assignedMass > 0 && k >= 2) {\n let h = 0;\n for (const mass of sideMass.values()) {\n const p = mass / assignedMass;\n if (p > 0) h -= p * Math.log2(p);\n }\n entropy = h / Math.log2(k);\n }\n\n const coverage = totalMass > 0 ? assignedMass / totalMass : 0;\n const clampedNovelty = Math.min(1, Math.max(0, novelty));\n const voi = entropy * Math.pow(coverage, 1.5) * clampedNovelty;\n\n return { ...axis, entropy, coverage, novelty: clampedNovelty, voi };\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import type { EmbeddingGenerator } from "../../shared/interfaces/embedder.interface.js";
2
+ import type { PoolDiscriminatorMiner } from "./discriminator.miner.js";
3
+ import type { PoolCandidate, DiscriminatorShadowResult } from "./discriminator.types.js";
4
+ /** Input for one shadow mining+scoring pass. */
5
+ export interface DiscriminatorShadowInput {
6
+ /** Intent payload (+ summary) or search query that produced the pool. */
7
+ intentText: string;
8
+ /** The pool (already filtered/capped by the caller). */
9
+ candidates: PoolCandidate[];
10
+ /**
11
+ * Novelty references: the intent owner's active premise texts and intent
12
+ * sentences. An axis semantically equal to any reference scores ~0.
13
+ */
14
+ referenceTexts: string[];
15
+ miner: Pick<PoolDiscriminatorMiner, "mine">;
16
+ embedder: EmbeddingGenerator;
17
+ signal?: AbortSignal;
18
+ }
19
+ /**
20
+ * Runs miner → embeddings → scorer. Throws only when *mining* fails (callers
21
+ * are fire-and-forget); embedding failures degrade to novelty = 1 for all
22
+ * discriminators rather than dropping the pass.
23
+ */
24
+ export declare function runPoolDiscriminatorShadow(input: DiscriminatorShadowInput): Promise<DiscriminatorShadowResult>;
25
+ //# sourceMappingURL=discriminator.shadow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.shadow.d.ts","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.shadow.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,KAAK,EAAsB,aAAa,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAO7G,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAOD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAmCpH"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Shadow orchestrator: mine discriminators for a pool, embed them, score VoI, and
3
+ * return the log payload (IND-417). No persistence, no questions, no UI —
4
+ * P1 output is consumed only by structured logs for human review.
5
+ */
6
+ import { protocolLogger } from "../../shared/observability/protocol.logger.js";
7
+ import { computeNovelty, scoreDiscriminator } from "./discriminator.scorer.js";
8
+ const logger = protocolLogger("PoolDiscriminatorShadow");
9
+ /** Max reference texts embedded for novelty (premises + intent sentences). */
10
+ const MAX_REFERENCE_TEXTS = 24;
11
+ /** Text embedded per discriminator for the novelty comparison. */
12
+ function discriminatorEmbeddingText(d) {
13
+ return `${d.label} — ${d.questionSeed}`;
14
+ }
15
+ /**
16
+ * Runs miner → embeddings → scorer. Throws only when *mining* fails (callers
17
+ * are fire-and-forget); embedding failures degrade to novelty = 1 for all
18
+ * discriminators rather than dropping the pass.
19
+ */
20
+ export async function runPoolDiscriminatorShadow(input) {
21
+ const { candidates } = input;
22
+ const mined = await input.miner.mine({ intentText: input.intentText, candidates }, input.signal ? { signal: input.signal } : undefined);
23
+ if (mined.length === 0) {
24
+ return { poolSize: candidates.length, discriminators: [] };
25
+ }
26
+ const references = input.referenceTexts
27
+ .map((t) => t.trim())
28
+ .filter((t) => t.length > 0)
29
+ .slice(0, MAX_REFERENCE_TEXTS);
30
+ let novelties = mined.map(() => 1);
31
+ if (references.length > 0) {
32
+ try {
33
+ const texts = [...mined.map(discriminatorEmbeddingText), ...references];
34
+ const embeddings = (await input.embedder.generate(texts));
35
+ const discriminatorEmbeddings = embeddings.slice(0, mined.length);
36
+ const referenceEmbeddings = embeddings.slice(mined.length);
37
+ novelties = discriminatorEmbeddings.map((e) => computeNovelty(e, referenceEmbeddings));
38
+ }
39
+ catch (err) {
40
+ logger.warn("Novelty embedding failed; defaulting novelty to 1", {
41
+ error: err instanceof Error ? err.message : String(err),
42
+ });
43
+ }
44
+ }
45
+ const discriminators = mined
46
+ .map((d, i) => scoreDiscriminator(d, candidates, novelties[i]))
47
+ .sort((a, b) => b.voi - a.voi);
48
+ return { poolSize: candidates.length, discriminators };
49
+ }
50
+ //# sourceMappingURL=discriminator.shadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.shadow.js","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.shadow.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shadow orchestrator: mine discriminators for a pool, embed them, score VoI, and\n * return the log payload (IND-417). No persistence, no questions, no UI —\n * P1 output is consumed only by structured logs for human review.\n */\nimport { protocolLogger } from \"../../shared/observability/protocol.logger.js\";\nimport type { EmbeddingGenerator } from \"../../shared/interfaces/embedder.interface.js\";\nimport type { PoolDiscriminatorMiner } from \"./discriminator.miner.js\";\nimport { computeNovelty, scoreDiscriminator } from \"./discriminator.scorer.js\";\nimport type { MinedDiscriminator, PoolCandidate, DiscriminatorShadowResult } from \"./discriminator.types.js\";\n\nconst logger = protocolLogger(\"PoolDiscriminatorShadow\");\n\n/** Max reference texts embedded for novelty (premises + intent sentences). */\nconst MAX_REFERENCE_TEXTS = 24;\n\n/** Input for one shadow mining+scoring pass. */\nexport interface DiscriminatorShadowInput {\n /** Intent payload (+ summary) or search query that produced the pool. */\n intentText: string;\n /** The pool (already filtered/capped by the caller). */\n candidates: PoolCandidate[];\n /**\n * Novelty references: the intent owner's active premise texts and intent\n * sentences. An axis semantically equal to any reference scores ~0.\n */\n referenceTexts: string[];\n miner: Pick<PoolDiscriminatorMiner, \"mine\">;\n embedder: EmbeddingGenerator;\n signal?: AbortSignal;\n}\n\n/** Text embedded per discriminator for the novelty comparison. */\nfunction discriminatorEmbeddingText(d: MinedDiscriminator): string {\n return `${d.label} — ${d.questionSeed}`;\n}\n\n/**\n * Runs miner → embeddings → scorer. Throws only when *mining* fails (callers\n * are fire-and-forget); embedding failures degrade to novelty = 1 for all\n * discriminators rather than dropping the pass.\n */\nexport async function runPoolDiscriminatorShadow(input: DiscriminatorShadowInput): Promise<DiscriminatorShadowResult> {\n const { candidates } = input;\n const mined = await input.miner.mine(\n { intentText: input.intentText, candidates },\n input.signal ? { signal: input.signal } : undefined,\n );\n if (mined.length === 0) {\n return { poolSize: candidates.length, discriminators: [] };\n }\n\n const references = input.referenceTexts\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n .slice(0, MAX_REFERENCE_TEXTS);\n\n let novelties: number[] = mined.map(() => 1);\n if (references.length > 0) {\n try {\n const texts = [...mined.map(discriminatorEmbeddingText), ...references];\n const embeddings = (await input.embedder.generate(texts)) as number[][];\n const discriminatorEmbeddings = embeddings.slice(0, mined.length);\n const referenceEmbeddings = embeddings.slice(mined.length);\n novelties = discriminatorEmbeddings.map((e) => computeNovelty(e, referenceEmbeddings));\n } catch (err) {\n logger.warn(\"Novelty embedding failed; defaulting novelty to 1\", {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const discriminators = mined\n .map((d, i) => scoreDiscriminator(d, candidates, novelties[i]))\n .sort((a, b) => b.voi - a.voi);\n\n return { poolSize: candidates.length, discriminators };\n}\n"]}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Pool discriminator mining — shared types (IND-416 / IND-417).
3
+ *
4
+ * A "pool discriminator" is a preference dimension that splits a discovery-run
5
+ * candidate pool into meaningfully different groups (e.g. "hands-on builders
6
+ * vs advisors"). Discriminators are mined by one structured LLM pass, then
7
+ * scored deterministically (VoI = entropy × coverage^1.5 × novelty) so the
8
+ * highest value question can eventually be asked to the intent owner.
9
+ *
10
+ * Vocabulary note: the LLM wire format (prompt + response schema in the miner)
11
+ * speaks of "axes" with mutually exclusive "sides" — the clearest way to
12
+ * explain the concept to the model. Everything the rest of the codebase
13
+ * touches (types, exports, logs) uses "discriminator".
14
+ *
15
+ * P1 (shadow) uses these types for log-only output; later phases reuse them
16
+ * for question synthesis and answer application.
17
+ */
18
+ /** One candidate in the pool as supplied to the miner LLM. */
19
+ export interface PoolCandidate {
20
+ /** Opportunity id (stable key for later answer application). */
21
+ id: string;
22
+ /**
23
+ * The exact public-context string shown to the LLM for this candidate
24
+ * (name + bio + matchReason + headline + premise snippets, ≤400 chars).
25
+ * Evidence spans are substring-verified against this exact string.
26
+ */
27
+ publicContext: string;
28
+ /** Candidate confidence/score — the mass used for score-weighted entropy. */
29
+ score: number;
30
+ }
31
+ /** Input envelope for one mining pass. */
32
+ export interface DiscriminatorMiningInput {
33
+ /** Intent payload (+ summary) or ad-hoc search query that produced the pool. */
34
+ intentText: string;
35
+ candidates: PoolCandidate[];
36
+ }
37
+ /**
38
+ * One candidate assignment on a discriminator, after code-side evidence verification.
39
+ * `side === null` means unknown (LLM abstained, evidence failed verification,
40
+ * or the candidate was missing from the LLM output).
41
+ */
42
+ export interface VerifiedAssignment {
43
+ /** Candidate (opportunity) id. */
44
+ id: string;
45
+ /** Verified side label (one of the discriminator's sides), or null = unknown. */
46
+ side: string | null;
47
+ /** The evidence span quoted by the LLM (kept for logging/audit), if any. */
48
+ evidence: string | null;
49
+ /**
50
+ * True when the LLM proposed a side AND its evidence span substring-matched
51
+ * the candidate's publicContext. False for demoted-to-unknown proposals.
52
+ */
53
+ verified: boolean;
54
+ }
55
+ /** One mined discriminator after evidence verification (pre-scoring). */
56
+ export interface MinedDiscriminator {
57
+ /** Short discriminator label, e.g. "Hands-on builders vs strategic advisors". */
58
+ label: string;
59
+ /** A question the intent owner could be asked to resolve the discriminator. */
60
+ questionSeed: string;
61
+ /** 2–3 mutually exclusive side labels. */
62
+ sides: string[];
63
+ /** Exactly one entry per pool candidate. */
64
+ assignments: VerifiedAssignment[];
65
+ /**
66
+ * verified-proposals / total side proposals from the LLM for this discriminator
67
+ * (0 when the LLM proposed no sides at all). The hallucination health metric.
68
+ */
69
+ evidenceRate: number;
70
+ }
71
+ /** A mined discriminator with its deterministic VoI score components. */
72
+ export interface ScoredDiscriminator extends MinedDiscriminator {
73
+ /** Normalized score-weighted entropy over sides, in [0,1]. */
74
+ entropy: number;
75
+ /** Assigned score mass / total pool score mass, in [0,1]. */
76
+ coverage: number;
77
+ /** 1 − max cosine similarity vs reference texts (premises/intent), in [0,1]. */
78
+ novelty: number;
79
+ /** entropy × coverage^1.5 × novelty. */
80
+ voi: number;
81
+ }
82
+ /** Result of one shadow mining+scoring pass (the log payload shape). */
83
+ export interface DiscriminatorShadowResult {
84
+ poolSize: number;
85
+ /** Scored discriminators, sorted by VoI descending. */
86
+ discriminators: ScoredDiscriminator[];
87
+ }
88
+ //# sourceMappingURL=discriminator.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.types.d.ts","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0CAA0C;AAC1C,MAAM,WAAW,wBAAwB;IACvC,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4CAA4C;IAC5C,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wEAAwE;AACxE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,cAAc,EAAE,mBAAmB,EAAE,CAAC;CACvC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Pool discriminator mining — shared types (IND-416 / IND-417).
3
+ *
4
+ * A "pool discriminator" is a preference dimension that splits a discovery-run
5
+ * candidate pool into meaningfully different groups (e.g. "hands-on builders
6
+ * vs advisors"). Discriminators are mined by one structured LLM pass, then
7
+ * scored deterministically (VoI = entropy × coverage^1.5 × novelty) so the
8
+ * highest value question can eventually be asked to the intent owner.
9
+ *
10
+ * Vocabulary note: the LLM wire format (prompt + response schema in the miner)
11
+ * speaks of "axes" with mutually exclusive "sides" — the clearest way to
12
+ * explain the concept to the model. Everything the rest of the codebase
13
+ * touches (types, exports, logs) uses "discriminator".
14
+ *
15
+ * P1 (shadow) uses these types for log-only output; later phases reuse them
16
+ * for question synthesis and answer application.
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=discriminator.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminator.types.js","sourceRoot":"/","sources":["opportunity/discriminator/discriminator.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG","sourcesContent":["/**\n * Pool discriminator mining — shared types (IND-416 / IND-417).\n *\n * A \"pool discriminator\" is a preference dimension that splits a discovery-run\n * candidate pool into meaningfully different groups (e.g. \"hands-on builders\n * vs advisors\"). Discriminators are mined by one structured LLM pass, then\n * scored deterministically (VoI = entropy × coverage^1.5 × novelty) so the\n * highest value question can eventually be asked to the intent owner.\n *\n * Vocabulary note: the LLM wire format (prompt + response schema in the miner)\n * speaks of \"axes\" with mutually exclusive \"sides\" — the clearest way to\n * explain the concept to the model. Everything the rest of the codebase\n * touches (types, exports, logs) uses \"discriminator\".\n *\n * P1 (shadow) uses these types for log-only output; later phases reuse them\n * for question synthesis and answer application.\n */\n\n/** One candidate in the pool as supplied to the miner LLM. */\nexport interface PoolCandidate {\n /** Opportunity id (stable key for later answer application). */\n id: string;\n /**\n * The exact public-context string shown to the LLM for this candidate\n * (name + bio + matchReason + headline + premise snippets, ≤400 chars).\n * Evidence spans are substring-verified against this exact string.\n */\n publicContext: string;\n /** Candidate confidence/score — the mass used for score-weighted entropy. */\n score: number;\n}\n\n/** Input envelope for one mining pass. */\nexport interface DiscriminatorMiningInput {\n /** Intent payload (+ summary) or ad-hoc search query that produced the pool. */\n intentText: string;\n candidates: PoolCandidate[];\n}\n\n/**\n * One candidate assignment on a discriminator, after code-side evidence verification.\n * `side === null` means unknown (LLM abstained, evidence failed verification,\n * or the candidate was missing from the LLM output).\n */\nexport interface VerifiedAssignment {\n /** Candidate (opportunity) id. */\n id: string;\n /** Verified side label (one of the discriminator's sides), or null = unknown. */\n side: string | null;\n /** The evidence span quoted by the LLM (kept for logging/audit), if any. */\n evidence: string | null;\n /**\n * True when the LLM proposed a side AND its evidence span substring-matched\n * the candidate's publicContext. False for demoted-to-unknown proposals.\n */\n verified: boolean;\n}\n\n/** One mined discriminator after evidence verification (pre-scoring). */\nexport interface MinedDiscriminator {\n /** Short discriminator label, e.g. \"Hands-on builders vs strategic advisors\". */\n label: string;\n /** A question the intent owner could be asked to resolve the discriminator. */\n questionSeed: string;\n /** 2–3 mutually exclusive side labels. */\n sides: string[];\n /** Exactly one entry per pool candidate. */\n assignments: VerifiedAssignment[];\n /**\n * verified-proposals / total side proposals from the LLM for this discriminator\n * (0 when the LLM proposed no sides at all). The hallucination health metric.\n */\n evidenceRate: number;\n}\n\n/** A mined discriminator with its deterministic VoI score components. */\nexport interface ScoredDiscriminator extends MinedDiscriminator {\n /** Normalized score-weighted entropy over sides, in [0,1]. */\n entropy: number;\n /** Assigned score mass / total pool score mass, in [0,1]. */\n coverage: number;\n /** 1 − max cosine similarity vs reference texts (premises/intent), in [0,1]. */\n novelty: number;\n /** entropy × coverage^1.5 × novelty. */\n voi: number;\n}\n\n/** Result of one shadow mining+scoring pass (the log payload shape). */\nexport interface DiscriminatorShadowResult {\n poolSize: number;\n /** Scored discriminators, sorted by VoI descending. */\n discriminators: ScoredDiscriminator[];\n}\n"]}
@@ -113,6 +113,11 @@ declare function getModelConfig(config?: ModelConfig): {
113
113
  readonly temperature: 0.2;
114
114
  readonly maxTokens: 256;
115
115
  };
116
+ readonly poolDiscriminatorMiner: {
117
+ readonly model: "google/gemini-2.5-flash";
118
+ readonly temperature: 0.2;
119
+ readonly maxTokens: 4096;
120
+ };
116
121
  readonly inviteGenerator: {
117
122
  readonly model: "google/gemini-2.5-flash";
118
123
  readonly temperature: 0.3;
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAkCmD,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAmCmD,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"}
@@ -22,6 +22,7 @@ function getModelConfig(config) {
22
22
  discoveryQuestionGenerator: { model: "google/gemini-2.5-flash", temperature: 0.5, maxTokens: 1024 },
23
23
  questioner: { model: "google/gemini-2.5-flash", temperature: 0.5, maxTokens: 1024 },
24
24
  negotiationSummarizer: { model: "google/gemini-2.5-flash", temperature: 0.2, maxTokens: 256 },
25
+ poolDiscriminatorMiner: { model: "google/gemini-2.5-flash", temperature: 0.2, maxTokens: 4096 },
25
26
  inviteGenerator: { model: "google/gemini-2.5-flash", temperature: 0.3, maxTokens: 512 },
26
27
  premiseAnalyzer: { model: "google/gemini-2.5-flash" },
27
28
  premiseDecomposer: { 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 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 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 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indexnetwork/protocol",
3
- "version": "4.5.0",
3
+ "version": "4.6.0-rc.342.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",