@memberjunction/ai-agents 6.2.0-edge.1 → 6.2.0-edge.3

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 (131) hide show
  1. package/README.md +18 -0
  2. package/dist/AgentDecisionService.d.ts +90 -0
  3. package/dist/AgentDecisionService.d.ts.map +1 -0
  4. package/dist/AgentDecisionService.js +159 -0
  5. package/dist/AgentDecisionService.js.map +1 -0
  6. package/dist/AgentRunner.d.ts +9 -0
  7. package/dist/AgentRunner.d.ts.map +1 -1
  8. package/dist/AgentRunner.js +23 -7
  9. package/dist/AgentRunner.js.map +1 -1
  10. package/dist/ConversationCompactionManager.d.ts +7 -1
  11. package/dist/ConversationCompactionManager.d.ts.map +1 -1
  12. package/dist/ConversationCompactionManager.js +4 -1
  13. package/dist/ConversationCompactionManager.js.map +1 -1
  14. package/dist/KnowledgeAgent.d.ts.map +1 -1
  15. package/dist/KnowledgeAgent.js +6 -6
  16. package/dist/KnowledgeAgent.js.map +1 -1
  17. package/dist/PayloadFeedbackManager.d.ts +116 -14
  18. package/dist/PayloadFeedbackManager.d.ts.map +1 -1
  19. package/dist/PayloadFeedbackManager.js +229 -88
  20. package/dist/PayloadFeedbackManager.js.map +1 -1
  21. package/dist/agent-context-injector.d.ts +47 -3
  22. package/dist/agent-context-injector.d.ts.map +1 -1
  23. package/dist/agent-context-injector.js +77 -10
  24. package/dist/agent-context-injector.js.map +1 -1
  25. package/dist/agent-memory-context-builder.d.ts +13 -0
  26. package/dist/agent-memory-context-builder.d.ts.map +1 -1
  27. package/dist/agent-memory-context-builder.js +24 -5
  28. package/dist/agent-memory-context-builder.js.map +1 -1
  29. package/dist/agent-types/flow-agent-type.d.ts +97 -0
  30. package/dist/agent-types/flow-agent-type.d.ts.map +1 -1
  31. package/dist/agent-types/flow-agent-type.js +281 -24
  32. package/dist/agent-types/flow-agent-type.js.map +1 -1
  33. package/dist/agent-types/flow-graph-executor.d.ts +12 -1
  34. package/dist/agent-types/flow-graph-executor.d.ts.map +1 -1
  35. package/dist/agent-types/flow-graph-executor.js +25 -1
  36. package/dist/agent-types/flow-graph-executor.js.map +1 -1
  37. package/dist/agent-types/loop-agent-prompt-params.d.ts +239 -66
  38. package/dist/agent-types/loop-agent-prompt-params.d.ts.map +1 -1
  39. package/dist/agent-types/loop-agent-prompt-params.js +47 -2
  40. package/dist/agent-types/loop-agent-prompt-params.js.map +1 -1
  41. package/dist/agent-types/loop-agent-response-type.d.ts +12 -1
  42. package/dist/agent-types/loop-agent-response-type.d.ts.map +1 -1
  43. package/dist/agent-types/loop-agent-response-type.js.map +1 -1
  44. package/dist/agent-types/loop-agent-type.d.ts +26 -0
  45. package/dist/agent-types/loop-agent-type.d.ts.map +1 -1
  46. package/dist/agent-types/loop-agent-type.js +115 -5
  47. package/dist/agent-types/loop-agent-type.js.map +1 -1
  48. package/dist/base-agent.d.ts +527 -10
  49. package/dist/base-agent.d.ts.map +1 -1
  50. package/dist/base-agent.js +1779 -110
  51. package/dist/base-agent.js.map +1 -1
  52. package/dist/catalog-narrowing.d.ts +136 -0
  53. package/dist/catalog-narrowing.d.ts.map +1 -0
  54. package/dist/catalog-narrowing.js +212 -0
  55. package/dist/catalog-narrowing.js.map +1 -0
  56. package/dist/decision-discovery.d.ts +401 -0
  57. package/dist/decision-discovery.d.ts.map +1 -0
  58. package/dist/decision-discovery.js +511 -0
  59. package/dist/decision-discovery.js.map +1 -0
  60. package/dist/finish-if-mode-warnings.d.ts +39 -0
  61. package/dist/finish-if-mode-warnings.d.ts.map +1 -0
  62. package/dist/finish-if-mode-warnings.js +78 -0
  63. package/dist/finish-if-mode-warnings.js.map +1 -0
  64. package/dist/finish-if-state.d.ts +72 -0
  65. package/dist/finish-if-state.d.ts.map +1 -0
  66. package/dist/finish-if-state.js +109 -0
  67. package/dist/finish-if-state.js.map +1 -0
  68. package/dist/index.d.ts +10 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +11 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/memory-manager-agent.d.ts +108 -2
  73. package/dist/memory-manager-agent.d.ts.map +1 -1
  74. package/dist/memory-manager-agent.js +172 -9
  75. package/dist/memory-manager-agent.js.map +1 -1
  76. package/dist/memory-note-gate.d.ts +208 -0
  77. package/dist/memory-note-gate.d.ts.map +1 -0
  78. package/dist/memory-note-gate.js +294 -0
  79. package/dist/memory-note-gate.js.map +1 -0
  80. package/dist/native-tools/action-tool-builder.d.ts +14 -0
  81. package/dist/native-tools/action-tool-builder.d.ts.map +1 -1
  82. package/dist/native-tools/action-tool-builder.js +62 -7
  83. package/dist/native-tools/action-tool-builder.js.map +1 -1
  84. package/dist/native-tools/control-tools.d.ts +17 -1
  85. package/dist/native-tools/control-tools.d.ts.map +1 -1
  86. package/dist/native-tools/control-tools.js +40 -3
  87. package/dist/native-tools/control-tools.js.map +1 -1
  88. package/dist/realtime/bridge-host-params.d.ts +22 -0
  89. package/dist/realtime/bridge-host-params.d.ts.map +1 -0
  90. package/dist/realtime/bridge-host-params.js +53 -0
  91. package/dist/realtime/bridge-host-params.js.map +1 -0
  92. package/dist/realtime/bridge-realtime-session-factory.d.ts +23 -2
  93. package/dist/realtime/bridge-realtime-session-factory.d.ts.map +1 -1
  94. package/dist/realtime/bridge-realtime-session-factory.js +22 -6
  95. package/dist/realtime/bridge-realtime-session-factory.js.map +1 -1
  96. package/dist/realtime/bridge-room-transcript-sink.d.ts.map +1 -1
  97. package/dist/realtime/bridge-room-transcript-sink.js +15 -9
  98. package/dist/realtime/bridge-room-transcript-sink.js.map +1 -1
  99. package/dist/realtime/bridge-session-transcript-sink.d.ts +37 -0
  100. package/dist/realtime/bridge-session-transcript-sink.d.ts.map +1 -0
  101. package/dist/realtime/bridge-session-transcript-sink.js +58 -0
  102. package/dist/realtime/bridge-session-transcript-sink.js.map +1 -0
  103. package/dist/realtime/realtime-client-session-service.d.ts +117 -12
  104. package/dist/realtime/realtime-client-session-service.d.ts.map +1 -1
  105. package/dist/realtime/realtime-client-session-service.js +162 -39
  106. package/dist/realtime/realtime-client-session-service.js.map +1 -1
  107. package/dist/realtime/realtime-coagent-resolution.d.ts +90 -0
  108. package/dist/realtime/realtime-coagent-resolution.d.ts.map +1 -0
  109. package/dist/realtime/realtime-coagent-resolution.js +186 -0
  110. package/dist/realtime/realtime-coagent-resolution.js.map +1 -0
  111. package/dist/realtime/realtime-delegation-narrator.d.ts +97 -0
  112. package/dist/realtime/realtime-delegation-narrator.d.ts.map +1 -0
  113. package/dist/realtime/realtime-delegation-narrator.js +162 -0
  114. package/dist/realtime/realtime-delegation-narrator.js.map +1 -0
  115. package/dist/realtime/realtime-session-runner.d.ts +2 -82
  116. package/dist/realtime/realtime-session-runner.d.ts.map +1 -1
  117. package/dist/realtime/realtime-session-runner.js +12 -187
  118. package/dist/realtime/realtime-session-runner.js.map +1 -1
  119. package/dist/realtime/realtime-vendor-resolution.d.ts +8 -3
  120. package/dist/realtime/realtime-vendor-resolution.d.ts.map +1 -1
  121. package/dist/realtime/realtime-vendor-resolution.js +3 -3
  122. package/dist/realtime/realtime-vendor-resolution.js.map +1 -1
  123. package/dist/rubric-evaluation-agent-runner.d.ts +2 -0
  124. package/dist/rubric-evaluation-agent-runner.d.ts.map +1 -0
  125. package/dist/rubric-evaluation-agent-runner.js +47 -0
  126. package/dist/rubric-evaluation-agent-runner.js.map +1 -0
  127. package/dist/self-check.d.ts +101 -0
  128. package/dist/self-check.d.ts.map +1 -0
  129. package/dist/self-check.js +74 -0
  130. package/dist/self-check.js.map +1 -0
  131. package/package.json +19 -18
@@ -0,0 +1,401 @@
1
+ /**
2
+ * @fileoverview Decision discovery (typed-decision plan, Task 3.1): the pure half.
3
+ *
4
+ * When the user names no agent, a conversation manager such as Sage takes two turns to delegate: it
5
+ * calls Find Candidate Agents, then reads the rows and picks one. With the Loop prompt param
6
+ * `decisionDiscovery` on, `BaseAgent` instead asks one decision before the first prompt of a
7
+ * conversation's opening turn: a Choice over the agents the user may run, and a Likelihood that a
8
+ * specialist agent should handle the request. When both answers are confident, a `<suggested_agent>`
9
+ * system message reaches the first prompt, so the agent can delegate in its first turn. These helpers
10
+ * build the options and questions, judge the answers and format the message. The call, the
11
+ * `Agent discovery` step and the injection live on `BaseAgent`.
12
+ *
13
+ * It fails safe: after an error, a timeout, an unusable answer or an unsure one, nothing is injected
14
+ * and the agent behaves as it did before. A follow-up turn is never asked about (see
15
+ * {@link IsOpeningTurn}), so discovery never pulls the agent away from one it has already engaged.
16
+ *
17
+ * Known limitation, kept on purpose: the Likelihood does not name the options, so "none of these
18
+ * agents fits" cannot be expressed (see {@link DECISION_DISCOVERY_APPLIES_INSTRUCTIONS}).
19
+ *
20
+ * @module @memberjunction/ai-agents
21
+ */
22
+ import { type ChatMessage, type DecisionAnswer, type DecisionQuestion, type PlattCalibration } from '@memberjunction/ai';
23
+ import type { AIDecisionRunResult } from '@memberjunction/ai-prompts';
24
+ import { type DecisionAnsweringModel, type DecisionModelCalibration } from '@memberjunction/ai-core-plus';
25
+ import type { AIEngine } from '@memberjunction/aiengine';
26
+ import type { EntitySearchResult, IRunViewProvider, UserInfo } from '@memberjunction/core';
27
+ import type { MJAIAgentEntity } from '@memberjunction/core-entities';
28
+ /**
29
+ * The most options the Choice ever offers. It always applies: the limit is this, or the decision
30
+ * model's declared `MaxChoiceOptions` when that is smaller. A larger catalog is first narrowed to
31
+ * the limit by the semantic search Find Candidate Agents uses.
32
+ */
33
+ export declare const DECISION_DISCOVERY_MAX_OPTIONS = 25;
34
+ /**
35
+ * The least **calibrated** confidence at which the suggestion is shown (see
36
+ * {@link DECISION_DISCOVERY_CALIBRATION}). Both the Choice's confidence and the Likelihood that any
37
+ * agent applies must reach it.
38
+ *
39
+ * Set from the agent-discovery Decision Eval (plan Task 3.1, 2026-09-29): 258 labelled requests, 198
40
+ * for one of 33 agents and 60 for none, three repeats per model, calibrated out of fold, and scored
41
+ * as production would, so an answer after {@link DECISION_DISCOVERY_TIMEOUT_MS} injects nothing. At a
42
+ * calibrated 0.85, Jev's suggestion covered 21.7% of the requests meant for an agent, and named the
43
+ * right agent for 95.3% of those it covered. It was shown for 5.0% of the requests meant for no agent,
44
+ * all of them multi-agent workflows. Every Jev discovery but the run's first, which loaded the
45
+ * embedding model, finished within the timeout. LLM Decision finished within it for at least 67.7% of
46
+ * requests, and covered at least 16.0% at 92.6% precision, shown for 5.0%. A wrong suggestion costs
47
+ * more than a missed one, which is only the two-turn flow the agent used before, so the threshold
48
+ * favours precision. On raw probabilities the old 0.7 almost never fired: Jev's raw any-applies
49
+ * Likelihood never passed 0.8, so it covered 6.9%.
50
+ */
51
+ export declare const DECISION_DISCOVERY_MIN_CONFIDENCE = 0.85;
52
+ /** A decision model's Platt calibration of the two discovery answers. */
53
+ export interface DecisionDiscoveryCalibration {
54
+ /** The Choice's confidence, as the probability that the chosen agent is the right one. */
55
+ Confidence: PlattCalibration;
56
+ /** The Likelihood that a specialist agent should handle the request. */
57
+ AnyApplies: PlattCalibration;
58
+ }
59
+ /**
60
+ * Platt calibration of the discovery answers, each tied to the exact model it was fitted on (see
61
+ * `FindDecisionCalibration` in `@memberjunction/ai-core-plus`): the MJ decision model that answered
62
+ * (`ModelName`, from `modelInfo.modelName`) and the model its driver reports behind it
63
+ * (`ResolvedModel`, from `DecisionResult.ResolvedModel`). A model's raw answers are not calibrated:
64
+ * Jev's raw any-applies Likelihood sits between 0.1 and 0.8 whatever the request. Any other model,
65
+ * including Jev at another version or `LLM Decision` answered by another chat model, is treated as
66
+ * unsure, so its answer suggests nothing.
67
+ *
68
+ * Fitted on the agent-discovery Decision Eval (2026-09-29; 258 requests, 3 repeats per model, 774
69
+ * answers each): the Choice's confidence against whether it named the labelled agent (594 answers
70
+ * to requests meant for an agent), and the Likelihood against whether the request was meant for an
71
+ * agent (all 774). Every fit converged (5 to 7 Newton iterations; a 60-digit refit agrees to 4
72
+ * places).
73
+ * - **Jev** at its pinned `APIName`, `typesafe/jev-1.13-20260917`, which it reports back as the
74
+ * resolved model.
75
+ * - **LLM Decision** when its chat model is GPT-OSS-120B, which answered all 774 of its runs.
76
+ *
77
+ * Refit, and add the new pair, whenever a model, its version, the questions or the catalog's shape
78
+ * changes.
79
+ */
80
+ export declare const DECISION_DISCOVERY_CALIBRATION: readonly DecisionModelCalibration<DecisionDiscoveryCalibration>[];
81
+ /**
82
+ * The answers with the Choice's confidence and the Likelihood calibrated for the exact model that
83
+ * gave them ({@link DECISION_DISCOVERY_CALIBRATION}), or null when that model has no discovery
84
+ * calibration. Other answers, and the Choice's distribution, are returned as they are.
85
+ *
86
+ * @param answers - The raw answers, by question key.
87
+ * @param answeredBy - The decision model that answered, and the model behind it.
88
+ */
89
+ export declare function CalibrateDiscoveryAnswers(answers: Record<string, DecisionAnswer>, answeredBy: DecisionAnsweringModel): Record<string, DecisionAnswer> | null;
90
+ /**
91
+ * The longest decision discovery may delay the run's first prompt. Past it the run moves on, the
92
+ * decision call is aborted, and nothing is injected.
93
+ */
94
+ export declare const DECISION_DISCOVERY_TIMEOUT_MS = 1500;
95
+ /**
96
+ * The fewest options discovery asks about. Below it nothing is asked and nothing is suggested.
97
+ *
98
+ * Two options are not enough, although the Choice is well-formed: its probabilities sum to 1, so its
99
+ * top answer is at least 0.5 however poorly both agents fit, and the any-applies Likelihood cannot
100
+ * vouch for them (see {@link DECISION_DISCOVERY_APPLIES_INSTRUCTIONS}). A confidence threshold then
101
+ * sits only a little above chance. The discovery eval (#4892) offered every request dozens of
102
+ * options, so this bound leaves the measured case alone. With fewer options the agent falls back to
103
+ * Find Candidate Agents, as it would without discovery.
104
+ */
105
+ export declare const DECISION_DISCOVERY_MIN_OPTIONS = 3;
106
+ /** The Choice's question key: which agent should handle the request. */
107
+ export declare const DECISION_DISCOVERY_AGENT_QUESTION = "agent";
108
+ /** The Likelihood's question key: whether any of the agents should. */
109
+ export declare const DECISION_DISCOVERY_APPLIES_QUESTION = "anyApplies";
110
+ /**
111
+ * The Likelihood's instructions. They stand on the request alone, because a driver may answer each
112
+ * question separately and never see the Choice's options.
113
+ *
114
+ * **Known limitation.** Because they name no agent, the Likelihood measures "is this specialist
115
+ * work?", not "does one of *these* agents fit?". A per-question driver, such as the Default
116
+ * Decision prompt's top-priority binding, answers each question on its own, so it never sees the
117
+ * options while answering this one. The Choice cannot say "none" either: its probabilities sum to
118
+ * 1 over the options it is given. So when the options leave out the agent the request needs (a host
119
+ * allow-list of a Billing and a Marketing agent, and a request for a legal review), both answers can
120
+ * still clear the threshold and suggest an agent that does not fit. The suggestion stays advisory,
121
+ * and the agent's prompt keeps the "unless the request clearly needs something else" escape.
122
+ *
123
+ * **Why the wording stays.** The discovery eval (#4892) measured, and the calibration (#4893)
124
+ * calibrated, exactly this question: its per-model Platt parameters and threshold hold only for this
125
+ * wording. Rewording it invalidates both, so the fix (quoting the options, or one Likelihood per
126
+ * option) waits for a re-measurement, tracked in #4938. Meanwhile {@link DECISION_DISCOVERY_MIN_OPTIONS} closes the
127
+ * worst case, two options, and leaves the measured case unchanged.
128
+ */
129
+ export declare const DECISION_DISCOVERY_APPLIES_INSTRUCTIONS = "This request asks for work that a specialist agent should do, rather than something the conversation manager should answer directly or plan as a multi-agent workflow.";
130
+ /** The entity the semantic search ranks when the catalog is over the limit, as Find Candidate Agents does. */
131
+ export declare const DECISION_DISCOVERY_SEARCH_ENTITY = "MJ: AI Agents";
132
+ /**
133
+ * The `ExecuteAgentParams.data` key holding the host's catalog of agents the conversation manager
134
+ * may route to (`ConversationAgentRunner` sets it, narrowed to the host's `AllowedAgentIDs`).
135
+ */
136
+ export declare const DECISION_DISCOVERY_HOST_AGENTS_KEY = "ALL_AVAILABLE_AGENTS";
137
+ /** The most agent IDs the step records in a list, such as the agents left out for having no description. */
138
+ export declare const DECISION_DISCOVERY_MAX_RECORDED_IDS = 50;
139
+ /** One agent the Choice can pick. */
140
+ export interface DecisionDiscoveryOption {
141
+ /** The agent's ID: the option's value. */
142
+ ID: string;
143
+ /** The agent's name: used in the suggestion and the step, never shown to the decision model. */
144
+ Name: string;
145
+ /** The agent's description: what the decision model reads. */
146
+ Description: string;
147
+ }
148
+ /** A valid answer to the two questions, in terms of the options. */
149
+ export interface DecisionDiscoveryAnswer {
150
+ /** The agent the Choice picked. */
151
+ Agent: DecisionDiscoveryOption;
152
+ /** The Choice's confidence. */
153
+ Confidence: number;
154
+ /** The Likelihood that a specialist agent should handle the request ({@link DECISION_DISCOVERY_APPLIES_INSTRUCTIONS}). */
155
+ AnyApplies: number;
156
+ /** The Choice's distribution, by agent name. */
157
+ Probabilities: Record<string, number>;
158
+ }
159
+ /** What the answers mean for the prompt. */
160
+ export interface DecisionDiscoveryVerdict {
161
+ /** The answer, when both questions were answered validly. */
162
+ Answer?: DecisionDiscoveryAnswer;
163
+ /** Whether the suggestion is shown: both answers at or above the threshold. */
164
+ Confident: boolean;
165
+ /** Why it is not shown. */
166
+ Reason?: string;
167
+ }
168
+ /** What one run's decision discovery did. `BaseAgent` records it as the `Agent discovery` step. */
169
+ export interface DecisionDiscoveryOutcome {
170
+ /** Whether the `<suggested_agent>` message goes into the first prompt. */
171
+ Injected: boolean;
172
+ /** The message, when it is injected. */
173
+ Message?: string;
174
+ /**
175
+ * False when discovery failed: an error, a timeout, a cancelled run, or an answer it could not
176
+ * use. True when the decision gave a valid answer, confident or not.
177
+ */
178
+ Succeeded: boolean;
179
+ /** Why nothing is injected. */
180
+ Reason?: string;
181
+ /** How many agents the user may delegate to: the catalog before any narrowing. */
182
+ CatalogSize?: number;
183
+ /** How many IDs the host's allow-list held, when the run carried one. The catalog was cut to it. */
184
+ HostAllowListSize?: number;
185
+ /** The IDs of the catalog agents left out of the options for having no description. */
186
+ WithoutDescription?: string[];
187
+ /** How many options the Choice offered. */
188
+ OptionCount?: number;
189
+ /** The most options the Choice may offer: see {@link DecisionOptionLimit}. */
190
+ OptionLimit?: number;
191
+ /** The decision model's option cap, when one is declared. */
192
+ DeclaredOptionCap?: number;
193
+ /** The number of options before the semantic search narrowed them. Set only when it did. */
194
+ NarrowedFrom?: number;
195
+ /** The answer, when there was a valid one. */
196
+ Answer?: DecisionDiscoveryAnswer;
197
+ /** The decision call's result, for its usage. */
198
+ Result?: AIDecisionRunResult;
199
+ /**
200
+ * The model behind the answer (`DescribeAnsweringModel`), when it has no discovery calibration,
201
+ * so its answer was treated as unsure: discovery never suggests anything for it.
202
+ */
203
+ UncalibratedModel?: string;
204
+ }
205
+ /**
206
+ * The Choice's options for one run, and how they were reached from the catalog. Its members other
207
+ * than `Options` and `Error` carry over into the {@link DecisionDiscoveryOutcome}.
208
+ */
209
+ export interface DecisionDiscoveryOptionSet {
210
+ /** The options to offer. */
211
+ Options: DecisionDiscoveryOption[];
212
+ /** Why the options could not be built, when they could not. */
213
+ Error?: string;
214
+ /** See {@link DecisionDiscoveryOutcome.CatalogSize}. */
215
+ CatalogSize: number;
216
+ /** See {@link DecisionDiscoveryOutcome.HostAllowListSize}. */
217
+ HostAllowListSize?: number;
218
+ /** See {@link DecisionDiscoveryOutcome.WithoutDescription}. */
219
+ WithoutDescription: string[];
220
+ /** See {@link DecisionDiscoveryOutcome.OptionLimit}. */
221
+ OptionLimit: number;
222
+ /** See {@link DecisionDiscoveryOutcome.DeclaredOptionCap}. */
223
+ DeclaredOptionCap?: number;
224
+ /** See {@link DecisionDiscoveryOutcome.NarrowedFrom}. */
225
+ NarrowedFrom?: number;
226
+ }
227
+ /** A discovery that failed: nothing is injected. */
228
+ export declare function FailedDecisionDiscovery(reason: string): DecisionDiscoveryOutcome;
229
+ /**
230
+ * Whether the `decisionDiscovery` setting is on in merged agent-type prompt params. Only `true` turns it
231
+ * on. Discovery runs only when the master switch, `decisionsEnabled`, is on as well: `BaseAgent` checks both.
232
+ */
233
+ export declare function IsDecisionDiscoveryOn(promptParams: Record<string, unknown> | undefined): boolean;
234
+ /**
235
+ * Whether a run answers a conversation's opening request, the only turn discovery asks about: its
236
+ * messages hold exactly one user message. A follow-up turn carries the earlier requests in its
237
+ * history (or the summary of them, which also arrives as a user message), and may be continuing work
238
+ * with an agent already engaged, which a suggestion must not pull the agent away from. Assistant and
239
+ * system messages do not count, so a greeting before the first request still leaves it the opening
240
+ * turn. Read it from the messages the run started with, before the framework adds any.
241
+ *
242
+ * @param messages - The run's conversation messages, as the run received them.
243
+ */
244
+ export declare function IsOpeningTurn(messages: ReadonlyArray<ChatMessage> | undefined): boolean;
245
+ /**
246
+ * Whether the request @mentions an agent other than the one running, in which case the user has
247
+ * already chosen and discovery does not run. It recognises both forms a mention takes by the time a
248
+ * run starts: the composer's `@{"_mode":"mention","type":"agent",...}` token, and the "@Agent Name"
249
+ * text `BaseAgent` converts that token to (or that the user typed). Names match whole, in any case.
250
+ * A mention of the running agent itself does not count: it names no one to delegate to.
251
+ *
252
+ * @param request - The run's opening request.
253
+ * @param agents - Every agent a mention could name.
254
+ * @param selfID - The running agent's ID.
255
+ */
256
+ export declare function MentionsAgent(request: string, agents: ReadonlyArray<{
257
+ ID: string;
258
+ Name: string | null;
259
+ }>, selfID: string): boolean;
260
+ /**
261
+ * The Choice's options: one per agent with a description, in catalog order. An agent with a blank
262
+ * description is left out, because the decision model reads only descriptions and the decision
263
+ * primitive rejects an option without one.
264
+ */
265
+ export declare function DecisionDiscoveryOptions(agents: ReadonlyArray<{
266
+ ID: string;
267
+ Name: string;
268
+ Description: string | null;
269
+ }>): DecisionDiscoveryOption[];
270
+ /** The IDs of the agents {@link DecisionDiscoveryOptions} leaves out for having a blank description, in catalog order. */
271
+ export declare function AgentsWithoutDescription(agents: ReadonlyArray<{
272
+ ID: string;
273
+ Description: string | null;
274
+ }>): string[];
275
+ /**
276
+ * The agent IDs in the host's allow-list, when the run carries one: the `ID` of each entry of
277
+ * `data[`{@link DECISION_DISCOVERY_HOST_AGENTS_KEY}`]` when that is an array. `undefined` when it is
278
+ * absent or not an array. An empty array is an allow-list that allows no one.
279
+ */
280
+ export declare function HostAllowedAgentIDs(data: Record<string, unknown> | undefined): string[] | undefined;
281
+ /**
282
+ * The agents the host allows, in their original order, compared UUID-safely. Without an allow-list
283
+ * every agent is kept, and `agents` itself is returned.
284
+ */
285
+ export declare function KeepHostAllowedAgents<T extends {
286
+ ID: string;
287
+ }>(agents: T[], allowedIDs: ReadonlyArray<string> | undefined): T[];
288
+ /**
289
+ * The smallest option cap any of the decision prompt's models declares, or `undefined` when none
290
+ * does. The runner may answer with any of them after failover, so the smallest is the one they all
291
+ * accept. Anything but a positive number declares no cap.
292
+ */
293
+ export declare function SmallestOptionCap(caps: ReadonlyArray<number | null | undefined>): number | undefined;
294
+ /**
295
+ * The most options the Choice may offer: {@link DECISION_DISCOVERY_MAX_OPTIONS}, or the model's
296
+ * declared cap when that is smaller. It always applies, declared cap or not. More options than this
297
+ * are narrowed first.
298
+ */
299
+ export declare function DecisionOptionLimit(declaredCap: number | undefined): number;
300
+ /**
301
+ * Keeps the options the semantic search returned, in its rank order, up to `limit`. An option the
302
+ * search did not return is dropped, and a result that is not an option (an agent the user may not
303
+ * run, say) is skipped.
304
+ */
305
+ export declare function RankOptionsBySearch(options: ReadonlyArray<DecisionDiscoveryOption>, rankedIDs: ReadonlyArray<string>, limit: number): DecisionDiscoveryOption[];
306
+ /**
307
+ * The two questions, asked about the opening request in one call: a Choice over the options, whose
308
+ * values are agent IDs and whose descriptions are the agents' descriptions, and a Likelihood,
309
+ * {@link DECISION_DISCOVERY_APPLIES_INSTRUCTIONS}, that stands on the request alone.
310
+ *
311
+ * Neither can say that none of the options fits: the Likelihood never sees them, and the Choice's
312
+ * probabilities sum to 1 over them. The wording is what the discovery eval measured and calibrated,
313
+ * so it changes only with a re-measurement (see {@link DECISION_DISCOVERY_APPLIES_INSTRUCTIONS}).
314
+ *
315
+ * @param options - The agents to choose from.
316
+ */
317
+ export declare function BuildDecisionDiscoveryQuestions(options: ReadonlyArray<DecisionDiscoveryOption>): Record<string, DecisionQuestion>;
318
+ /**
319
+ * Judges the answers. Confident means the Choice's confidence and the Likelihood both reach
320
+ * `minConfidence`. An answer that is missing, of the wrong kind, not a finite number, or names no
321
+ * option gives no answer at all.
322
+ */
323
+ export declare function JudgeDecisionDiscovery(answers: Record<string, DecisionAnswer>, options: ReadonlyArray<DecisionDiscoveryOption>, minConfidence?: number): DecisionDiscoveryVerdict;
324
+ /**
325
+ * What a finished decision call means for the prompt: the suggestion when both **calibrated**
326
+ * answers are confident, otherwise nothing, with the reason. A failed call, or an answer that cannot
327
+ * be used, is a failed discovery. An answer from a model with no discovery calibration is unsure.
328
+ */
329
+ export declare function DecisionDiscoveryFromResult(result: AIDecisionRunResult, options: ReadonlyArray<DecisionDiscoveryOption>, minConfidence?: number): DecisionDiscoveryOutcome;
330
+ /** The system message placed before the first prompt when the answer is confident. */
331
+ export declare function SuggestedAgentMessage(agent: DecisionDiscoveryOption, confidence: number): string;
332
+ /**
333
+ * Whether a provider can run `SearchEntity`. It is declared on `IRunViewProvider`, which every real
334
+ * provider implements alongside `IMetadataProvider`.
335
+ */
336
+ export declare function CanSearchEntities<T extends object>(provider: T | undefined): provider is T & Pick<IRunViewProvider, 'SearchEntity'>;
337
+ /** The fields of an agent that discovery reads. Every `MJAIAgentEntity` has them. */
338
+ export type DecisionDiscoveryAgent = Pick<MJAIAgentEntity, 'ID' | 'Name' | 'Description' | 'Status' | 'InvocationMode' | 'ParentID'>;
339
+ /**
340
+ * The semantic search that ranks agents for one request, best first: see
341
+ * {@link DecisionDiscoveryAgentSearch}. It returns at most `topK` results.
342
+ */
343
+ export type DecisionDiscoverySearch = (topK: number) => Promise<EntitySearchResult[]>;
344
+ /** What {@link BuildDecisionDiscoveryOptionSet} builds the Choice's options from. */
345
+ export interface DecisionDiscoveryOptionSetParams {
346
+ /** The agents the user may run: {@link DecisionDiscoveryRunnableAgents} over the engine's catalog. */
347
+ Agents: ReadonlyArray<DecisionDiscoveryAgent>;
348
+ /** The agent running discovery, such as Sage. It is never an option. */
349
+ RunningAgentID: string;
350
+ /** The host's allow-list ({@link HostAllowedAgentIDs}), when the run carries one. */
351
+ HostAllowedIDs?: ReadonlyArray<string>;
352
+ /** The decision model's option cap ({@link DecisionPromptOptionCap}), when one is declared. */
353
+ DeclaredCap?: number;
354
+ /** Narrows a catalog over the limit. Undefined when the provider cannot run the search. */
355
+ Search?: DecisionDiscoverySearch;
356
+ }
357
+ /**
358
+ * The agents a user may run, as Find Candidate Agents filters them: through
359
+ * {@link AIAgentPermissionHelper.FilterRunnableAgents} (Active, with run permission), in catalog order.
360
+ *
361
+ * @param agents - The catalog: `AIEngine.Instance.Agents`.
362
+ * @param contextUser - The user whose run permission decides.
363
+ */
364
+ export declare function DecisionDiscoveryRunnableAgents<T extends DecisionDiscoveryAgent>(agents: T[], contextUser: UserInfo): Promise<T[]>;
365
+ /**
366
+ * The agents this run may suggest: of the agents the user may run, the ones that can be discovered
367
+ * directly (the set Find Candidate Agents offers, through the same {@link AIAgentPermissionHelper}
368
+ * filter), minus the running agent itself. In catalog order.
369
+ *
370
+ * @param agents - The agents the user may run ({@link DecisionDiscoveryRunnableAgents}).
371
+ * @param runningAgentID - The agent running discovery.
372
+ */
373
+ export declare function DecisionDiscoveryCatalog<T extends Pick<DecisionDiscoveryAgent, 'ID' | 'InvocationMode' | 'ParentID'>>(agents: ReadonlyArray<T>, runningAgentID: string): T[];
374
+ /**
375
+ * The decision model's option cap: the smallest `Decision.MaxChoiceOptions` in the effective model
376
+ * configuration of the models the decision prompt is bound to, the setting `AIDecisionRunner`
377
+ * checks before its call. `undefined` when none declares one, or the prompt is not found.
378
+ *
379
+ * @param engine - The loaded engine: `AIEngine.Instance`.
380
+ * @param promptName - The decision prompt's name, matched whole in any case.
381
+ */
382
+ export declare function DecisionPromptOptionCap(engine: Pick<AIEngine, 'Prompts' | 'PromptModels' | 'ModelVendors' | 'GetEffectiveModelConfiguration'>, promptName: string): number | undefined;
383
+ /**
384
+ * The search Find Candidate Agents runs, for one request: hybrid over
385
+ * {@link DECISION_DISCOVERY_SEARCH_ENTITY}. Its similarity floor is not applied: the caller judges fit.
386
+ *
387
+ * @param provider - A provider that can search ({@link CanSearchEntities}).
388
+ * @param request - The request to rank agents for.
389
+ * @param contextUser - The user the search runs as.
390
+ */
391
+ export declare function DecisionDiscoveryAgentSearch(provider: Pick<IRunViewProvider, 'SearchEntity'>, request: string, contextUser: UserInfo): DecisionDiscoverySearch;
392
+ /**
393
+ * The Choice's options, rebuilt on every call and never cached: the agents in the permitted
394
+ * catalog ({@link DecisionDiscoveryCatalog}) that the host allows and that have a description.
395
+ * There are never more than {@link DecisionOptionLimit}: when there are, the semantic search narrows
396
+ * them first; if it cannot, `Error` says why.
397
+ *
398
+ * @param params - The permitted agents, the running agent, the host's allow-list, the option cap and the search.
399
+ */
400
+ export declare function BuildDecisionDiscoveryOptionSet(params: DecisionDiscoveryOptionSetParams): Promise<DecisionDiscoveryOptionSet>;
401
+ //# sourceMappingURL=decision-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-discovery.d.ts","sourceRoot":"","sources":["../src/decision-discovery.ts"],"names":[],"mappings":"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"}