@indexnetwork/protocol 12.1.0-rc.463.1 → 13.0.0-rc.464.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.
- package/CHANGELOG.md +31 -0
- package/dist/capabilities/questions.facade.d.ts +2 -2
- package/dist/capabilities/questions.facade.js +1 -1
- package/dist/capabilities/questions.runtime.facade.d.ts +1 -1
- package/dist/capabilities/questions.runtime.facade.js +1 -1
- package/dist/chat/reporter.persona.js +1 -1
- package/dist/enrichment/enrichment.graph.d.ts +1 -3
- package/dist/enrichment/enrichment.graph.js +1 -2
- package/dist/index.d.ts +2 -2
- package/dist/negotiation/application/negotiation.graph.d.ts +5 -5
- package/dist/negotiation/domain/negotiation.state.d.ts +1 -1
- package/dist/opportunity/application/opportunity.graph.d.ts +23 -23
- package/dist/opportunity/domain/opportunity.state.d.ts +6 -6
- package/dist/opportunity/ports/opportunity.tools.port.d.ts +1 -1
- package/dist/questions/application/index.d.ts +2 -2
- package/dist/questions/application/index.js +1 -1
- package/dist/questions/application/question.env.d.ts +0 -30
- package/dist/questions/application/question.env.js +0 -38
- package/dist/questions/application/question.input.d.ts +2 -16
- package/dist/questions/application/question.presets.js +0 -66
- package/dist/questions/application/question.tools.js +3 -3
- package/dist/questions/domain/question.schema.d.ts +58 -58
- package/dist/questions/domain/question.schema.js +0 -2
- package/dist/questions/ports/index.d.ts +0 -2
- package/dist/questions/ports/index.js +0 -1
- package/dist/questions/public/index.d.ts +2 -2
- package/dist/questions/public/index.js +1 -1
- package/dist/runtime/foreground/composition/tool.factory.js +1 -2
- package/dist/shared/agent/activity-projection.d.ts +4 -4
- package/dist/shared/agent/activity-projection.js +6 -0
- package/dist/shared/agent/tool.helpers.d.ts +2 -8
- package/dist/shared/schemas/discovery-question.schema.d.ts +10 -28
- package/dist/shared/schemas/discovery-question.schema.js +2 -4
- package/dist/shared/schemas/negotiation-digest.schema.d.ts +5 -5
- package/package.json +1 -1
- package/dist/questions/application/question.discovery.prompt.d.ts +0 -8
- package/dist/questions/application/question.discovery.prompt.js +0 -181
- package/dist/questions/ports/question.generator.port.d.ts +0 -33
- package/dist/questions/ports/question.generator.port.js +0 -1
|
@@ -9,14 +9,6 @@
|
|
|
9
9
|
* interlock. Requires the master switch.
|
|
10
10
|
* QUESTIONER_UPTAKE_AUTHORITY_THRESHOLD
|
|
11
11
|
* authority threshold (0-100, default 70).
|
|
12
|
-
* QUESTIONER_DISCOVERY_ENABLED per-surface switch — decision questions during
|
|
13
|
-
* chat/MCP opportunity discovery. Only effective
|
|
14
|
-
* when the master switch is on (the discovery
|
|
15
|
-
* question step adds inline summarizer latency,
|
|
16
|
-
* so operators can turn it off independently).
|
|
17
|
-
* QUESTIONER_DISCOVERY_INPUT_MODE 'transcripts' | 'insights' generator input.
|
|
18
|
-
* QUESTIONER_DISCOVERY_TIMEOUT_MS per-call deadline for the discovery-questions
|
|
19
|
-
* LLM step (default 12s).
|
|
20
12
|
* QUESTIONER_CHAT_WAIT_TIMEOUT_MS how long the blocking ask_user_question chat
|
|
21
13
|
* tool waits for an inline answer (default 4 min).
|
|
22
14
|
*
|
|
@@ -27,15 +19,6 @@
|
|
|
27
19
|
* IND-547: canonical home — previously questioner/questioner.env.ts.
|
|
28
20
|
* Legacy path is a thin compatibility shim pointing here.
|
|
29
21
|
*/
|
|
30
|
-
/**
|
|
31
|
-
* Question-generator budget. Sized against Railway's ~60 s edge timeout:
|
|
32
|
-
* the discovery + evaluation + negotiate phases consume ~50 s on the slow
|
|
33
|
-
* path, leaving ~10 s of headroom for the tail. 12 s is the larger end of
|
|
34
|
-
* "fits"; the question step usually completes in 4-8 s, so most legitimate
|
|
35
|
-
* calls finish well inside. Aborted calls return `null` (no questions);
|
|
36
|
-
* the rest of the discovery payload still ships.
|
|
37
|
-
*/
|
|
38
|
-
export const DISCOVERY_QUESTIONS_TIMEOUT_MS_DEFAULT = 12000;
|
|
39
22
|
export const CHAT_QUESTION_WAIT_TIMEOUT_MS_DEFAULT = 240000;
|
|
40
23
|
export const UPTAKE_AUTHORITY_THRESHOLD_DEFAULT = 70;
|
|
41
24
|
/**
|
|
@@ -56,13 +39,6 @@ function positiveIntEnv(name, fallback) {
|
|
|
56
39
|
export function isQuestionerEnabled() {
|
|
57
40
|
return process.env.QUESTIONER_ENABLED === "true";
|
|
58
41
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Per-surface switch: should chat/MCP opportunity discovery produce decision
|
|
61
|
-
* questions? Hierarchical — always false when the master switch is off.
|
|
62
|
-
*/
|
|
63
|
-
export function isDiscoveryQuestionsEnabled() {
|
|
64
|
-
return isQuestionerEnabled() && process.env.QUESTIONER_DISCOVERY_ENABLED === "true";
|
|
65
|
-
}
|
|
66
42
|
/** Advisory uptake interlock. Flag-off by default and subordinate to the master switch. */
|
|
67
43
|
export function isUptakeGuardEnabled() {
|
|
68
44
|
return isQuestionerEnabled() && process.env.QUESTIONER_UPTAKE_ENABLED === "true";
|
|
@@ -77,20 +53,6 @@ export function uptakeAuthorityThreshold() {
|
|
|
77
53
|
const parsed = Number.parseInt(raw, 10);
|
|
78
54
|
return Math.min(100, Math.max(0, parsed));
|
|
79
55
|
}
|
|
80
|
-
/**
|
|
81
|
-
* Input mode for the discovery question generator. Only `transcripts` is
|
|
82
|
-
* implemented; any other value falls back to `transcripts` (startup.env.ts
|
|
83
|
-
* warns on invalid values).
|
|
84
|
-
*/
|
|
85
|
-
export function discoveryQuestionsInputMode() {
|
|
86
|
-
return process.env.QUESTIONER_DISCOVERY_INPUT_MODE?.trim() === "insights"
|
|
87
|
-
? "insights"
|
|
88
|
-
: "transcripts";
|
|
89
|
-
}
|
|
90
|
-
/** Per-call deadline for the discovery-questions LLM step. */
|
|
91
|
-
export function discoveryQuestionsTimeoutMs() {
|
|
92
|
-
return positiveIntEnv("QUESTIONER_DISCOVERY_TIMEOUT_MS", DISCOVERY_QUESTIONS_TIMEOUT_MS_DEFAULT);
|
|
93
|
-
}
|
|
94
56
|
/** Wait budget for the blocking ask_user_question chat tool. */
|
|
95
57
|
export function chatQuestionWaitTimeoutMs() {
|
|
96
58
|
return positiveIntEnv("QUESTIONER_CHAT_WAIT_TIMEOUT_MS", CHAT_QUESTION_WAIT_TIMEOUT_MS_DEFAULT);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* questions/application/question.input — QuestionerAgent input envelope.
|
|
3
3
|
*
|
|
4
|
-
* Defines per-mode context types (
|
|
4
|
+
* Defines per-mode context types (IntentContext, NegotiationContext, …),
|
|
5
5
|
* the discriminated QuestionerInput union, and the runtime validation guard
|
|
6
6
|
* `isValidQuestionerInputContract`.
|
|
7
7
|
*
|
|
@@ -17,15 +17,9 @@
|
|
|
17
17
|
* IND-547: canonical home — previously questioner/questioner.types.ts.
|
|
18
18
|
* Legacy path is a thin compatibility shim pointing here.
|
|
19
19
|
*/
|
|
20
|
-
import type { DiscoveryQuestionInput } from "../../shared/schemas/discovery-question.schema.js";
|
|
21
20
|
import type { ToolScopeType } from "../../shared/agent/tool.scope.js";
|
|
22
21
|
import type { NegotiationQuestionCandidate, QuestionMode, QuestionPoolDiscriminator } from "../domain/question.schema.js";
|
|
23
22
|
import type { NegotiationConsultationReason } from "../../capabilities/negotiation.questions.facade.js";
|
|
24
|
-
/**
|
|
25
|
-
* Discovery context — wraps the existing DiscoveryQuestionInput wholesale.
|
|
26
|
-
* The discovery preset's buildPrompt delegates to `question.discovery.prompt.ts`.
|
|
27
|
-
*/
|
|
28
|
-
export type DiscoveryContext = DiscoveryQuestionInput;
|
|
29
23
|
/** Intent context — data needed to generate questions about an intent. */
|
|
30
24
|
export interface IntentContext {
|
|
31
25
|
intentId: string;
|
|
@@ -40,14 +34,6 @@ export interface RecoveryIntentContext extends IntentContext {
|
|
|
40
34
|
/** Privacy-safe aggregate signal; raw negotiation evidence is never provided. */
|
|
41
35
|
rejectedNegotiationCount?: number;
|
|
42
36
|
}
|
|
43
|
-
/** Profile context — data needed to generate questions to fill profile gaps. */
|
|
44
|
-
export interface ProfileContext {
|
|
45
|
-
/** The user's global user_context paragraph (profile-replacing identity text). */
|
|
46
|
-
userContext?: string;
|
|
47
|
-
gaps: string[];
|
|
48
|
-
/** Existing premise texts the user has already stated (e.g. "I live in Berlin"). */
|
|
49
|
-
existingPremises?: string[];
|
|
50
|
-
}
|
|
51
37
|
/** Shared context fields for negotiation-mode questions. */
|
|
52
38
|
interface NegotiationContextBase {
|
|
53
39
|
negotiationId: string;
|
|
@@ -134,7 +120,7 @@ export interface PoolDiscoveryContext {
|
|
|
134
120
|
minedAt: string;
|
|
135
121
|
}
|
|
136
122
|
/** Discriminated union: mode selects the context shape. */
|
|
137
|
-
export type QuestionerContext =
|
|
123
|
+
export type QuestionerContext = IntentContext | RecoveryIntentContext | NegotiationContext | NegotiationInflightContext | ChatContext | PoolDiscoveryContext;
|
|
138
124
|
/**
|
|
139
125
|
* Payload shape accepted by the questionerEnqueue callback. Covers all
|
|
140
126
|
* question modes — the composition root bridges this to the concrete
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DISCOVERY_SYSTEM_PROMPT, buildDiscoveryQuestionPrompt } from "./question.discovery.prompt.js";
|
|
2
1
|
import { QUD_UNDERSPECIFICATION_RULES } from "./question.qud.js";
|
|
3
2
|
import { consultationPromptFor } from "../../capabilities/negotiation.questions.facade.js";
|
|
4
3
|
/**
|
|
@@ -121,63 +120,6 @@ function buildRecoveryIntentPrompt(ctx) {
|
|
|
121
120
|
"Return an empty `questions` array when no safe useful axis is missing.",
|
|
122
121
|
].join("\n");
|
|
123
122
|
}
|
|
124
|
-
// ─── Profile preset ─────────────────────────────────────────────────────────
|
|
125
|
-
const PROFILE_SYSTEM_PROMPT = `You sit between a human and a discovery protocol. The user has a profile that is incomplete. Your job: surface the minimum set of structured questions that fill the identified gaps — asking about location, skills, interests, current work, or goals — so the protocol can run better discovery on their behalf.
|
|
126
|
-
|
|
127
|
-
The user may already have premises — atomic self-descriptions they have stated. These cover specific profile domains. Do not ask about domains already addressed by existing premises. Focus only on gaps not covered by any premise.
|
|
128
|
-
|
|
129
|
-
You may pick from two strategies. Choose contextually; mix only when each question is genuinely distinct.
|
|
130
|
-
- surface_missing_detail: ask for one concrete missing piece of profile data (location, current role, skills, interests, goals, availability, …).
|
|
131
|
-
- refine_intent: ask the user to clarify or sharpen an existing profile signal so candidates can be ranked more accurately.
|
|
132
|
-
|
|
133
|
-
Ask a question only when ALL of these hold:
|
|
134
|
-
1. The answer is not already visible in the profile data shown.
|
|
135
|
-
2. The answer is not already covered by an existing premise listed below the profile.
|
|
136
|
-
3. The answer would meaningfully change which opportunities surface for this user.
|
|
137
|
-
4. The question targets a different profile domain from any other question in this batch.
|
|
138
|
-
|
|
139
|
-
Standalone prompt rule. Every generated \`prompt\` must be understandable outside the conversation where it was created. Naturally include the profile signal or gap being clarified in the question text itself, using concise plain language from the current profile, existing premises, or identified gaps. Do not rely on \`title\`, UI labels, hidden metadata, or surrounding digest/chat text to explain what the question is about.
|
|
140
|
-
- Bad: "What kind of role are you looking for?"
|
|
141
|
-
- Good: "To improve matches from your founder/operator profile, what kind of role are you looking for?"
|
|
142
|
-
|
|
143
|
-
${REFERENTIAL_CLOSURE_RULES}
|
|
144
|
-
|
|
145
|
-
Cardinality. Default one question. Add a second only when a DIFFERENT strategy genuinely complements the first and unblocks a clearly distinct decision. Never ask two questions of the same strategy unless their decision domains differ.
|
|
146
|
-
|
|
147
|
-
Option construction. Each option must represent a meaningfully different outcome. Suffix the safest or most common path with " (Recommended)" and list it first. The description states the CONSEQUENCE of choosing the option, not its definition. 2–4 options. Never add an "Other" option — clients provide a free-text fallback automatically.
|
|
148
|
-
|
|
149
|
-
Title rules. ≤12 chars. Noun of the profile domain. Examples: "Location", "Role", "Skills", "Goals", "Interests", "Availability", "Stage".
|
|
150
|
-
|
|
151
|
-
Anti-patterns — never do these.
|
|
152
|
-
- Don't ask about fields already filled in the profile.
|
|
153
|
-
- Don't ask about information already captured in an existing premise.
|
|
154
|
-
- Don't ask procedural confirmations ("Should I update your profile?").
|
|
155
|
-
- Don't ask vague introspective questions ("Who are you really?").
|
|
156
|
-
- Don't re-ask for facts visible anywhere in the profile data or premises shown.
|
|
157
|
-
|
|
158
|
-
Output. Return at most 2 entries in the "questions" array. Each entry must include a "strategy" field (one of the two values above). If the profile is already complete enough for discovery, return "questions": [].`;
|
|
159
|
-
function buildProfilePrompt(ctx) {
|
|
160
|
-
const profileBlock = buildUserContextBlock(ctx.userContext);
|
|
161
|
-
const premisesBlock = ctx.existingPremises && ctx.existingPremises.length > 0
|
|
162
|
-
? ctx.existingPremises.map((p, i) => `${i + 1}. ${p}`).join("\n")
|
|
163
|
-
: "(none)";
|
|
164
|
-
const gapsBlock = ctx.gaps.length > 0 ? ctx.gaps.join(", ") : "(none identified)";
|
|
165
|
-
return [
|
|
166
|
-
"## Current profile",
|
|
167
|
-
profileBlock,
|
|
168
|
-
"",
|
|
169
|
-
"## Existing premises",
|
|
170
|
-
premisesBlock,
|
|
171
|
-
"",
|
|
172
|
-
"## Identified gaps",
|
|
173
|
-
gapsBlock,
|
|
174
|
-
"",
|
|
175
|
-
"## Your task",
|
|
176
|
-
"Generate the minimum set of questions needed to fill the identified gaps.",
|
|
177
|
-
"Apply every rule from your system prompt before outputting.",
|
|
178
|
-
"Return an empty `questions` array if the profile is already complete enough.",
|
|
179
|
-
].join("\n");
|
|
180
|
-
}
|
|
181
123
|
// ─── Negotiation preset ──────────────────────────────────────────────────────
|
|
182
124
|
const NEGOTIATION_SYSTEM_PROMPT = `You sit between a human and a discovery protocol. You generate negotiation-mode questions for one of two purposes described in the user message.
|
|
183
125
|
|
|
@@ -397,18 +339,10 @@ function withQudMetadataRules(systemPrompt) {
|
|
|
397
339
|
return `${systemPrompt}\n\n${QUD_UNDERSPECIFICATION_RULES}`;
|
|
398
340
|
}
|
|
399
341
|
const presets = {
|
|
400
|
-
discovery: {
|
|
401
|
-
systemPrompt: withQudMetadataRules(DISCOVERY_SYSTEM_PROMPT),
|
|
402
|
-
buildPrompt: (context) => buildDiscoveryQuestionPrompt(context),
|
|
403
|
-
},
|
|
404
342
|
intent: {
|
|
405
343
|
systemPrompt: withQudMetadataRules(INTENT_SYSTEM_PROMPT),
|
|
406
344
|
buildPrompt: (context) => buildIntentPrompt(context),
|
|
407
345
|
},
|
|
408
|
-
enrichment: {
|
|
409
|
-
systemPrompt: withQudMetadataRules(PROFILE_SYSTEM_PROMPT),
|
|
410
|
-
buildPrompt: (context) => buildProfilePrompt(context),
|
|
411
|
-
},
|
|
412
346
|
negotiation: {
|
|
413
347
|
systemPrompt: withQudMetadataRules(NEGOTIATION_SYSTEM_PROMPT),
|
|
414
348
|
buildPrompt: (context) => buildNegotiationPrompt(context),
|
|
@@ -24,7 +24,7 @@ import { callerMayAccessQuestionMode } from "../../shared/agent/activity-project
|
|
|
24
24
|
* from opportunity metadata that can reference out-of-scope networks and
|
|
25
25
|
* other users' content (same leak class as the getOpportunitiesForUser fix).
|
|
26
26
|
*/
|
|
27
|
-
const SELF_OWNED_MODES = ["
|
|
27
|
+
const SELF_OWNED_MODES = ["intent"];
|
|
28
28
|
function isVisibleInScopedNetwork(question, userId, networkId) {
|
|
29
29
|
return question.actors?.some((actor) => actor.userId === userId && actor.networkId === networkId) === true;
|
|
30
30
|
}
|
|
@@ -65,11 +65,11 @@ export function createQuestionerTools(defineTool, deps) {
|
|
|
65
65
|
const readPendingQuestions = defineTool({
|
|
66
66
|
name: "read_pending_questions",
|
|
67
67
|
description: "Returns pending questions generated for the authenticated user across all modes " +
|
|
68
|
-
"(
|
|
68
|
+
"(intent, negotiation, chat, pool_discovery). These are questions generated by the " +
|
|
69
69
|
"system to help surface missing signals, refine intents, or capture engagement context.\n\n" +
|
|
70
70
|
"**Returns:** List of pending questions, each with `id`, `title`, `prompt`, `options`, " +
|
|
71
71
|
"`multiSelect`, `mode`, `sourceType`, `sourceId`, `createdAt`, and optional `expiresAt`. " +
|
|
72
|
-
"Network-scoped agents receive only
|
|
72
|
+
"Network-scoped agents receive only intent questions for the scoped network plus a " +
|
|
73
73
|
"`scopeRestriction` note.\n\n" +
|
|
74
74
|
"**Use:** Call with no arguments to get all pending questions, or pass `limit` to cap the " +
|
|
75
75
|
"count. For the daily brief the script calls with a small `limit` and renders the first " +
|
|
@@ -268,40 +268,40 @@ export declare const NegotiationQuestionCandidateSchema: z.ZodEffects<z.ZodObjec
|
|
|
268
268
|
counterpartyFelicityAuthority: z.ZodOptional<z.ZodNumber>;
|
|
269
269
|
}, "strip", z.ZodTypeAny, {
|
|
270
270
|
networkId: string;
|
|
271
|
+
opportunityId: string;
|
|
271
272
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
272
273
|
recipientUserId: string;
|
|
273
274
|
recipientIntentId: string;
|
|
274
|
-
opportunityId: string;
|
|
275
275
|
taskId?: string | undefined;
|
|
276
276
|
counterpartyUserId?: string | undefined;
|
|
277
277
|
counterpartyIntentId?: string | undefined;
|
|
278
278
|
counterpartyFelicityAuthority?: number | undefined;
|
|
279
279
|
}, {
|
|
280
280
|
networkId: string;
|
|
281
|
+
opportunityId: string;
|
|
281
282
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
282
283
|
recipientUserId: string;
|
|
283
284
|
recipientIntentId: string;
|
|
284
|
-
opportunityId: string;
|
|
285
285
|
taskId?: string | undefined;
|
|
286
286
|
counterpartyUserId?: string | undefined;
|
|
287
287
|
counterpartyIntentId?: string | undefined;
|
|
288
288
|
counterpartyFelicityAuthority?: number | undefined;
|
|
289
289
|
}>, {
|
|
290
290
|
networkId: string;
|
|
291
|
+
opportunityId: string;
|
|
291
292
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
292
293
|
recipientUserId: string;
|
|
293
294
|
recipientIntentId: string;
|
|
294
|
-
opportunityId: string;
|
|
295
295
|
taskId?: string | undefined;
|
|
296
296
|
counterpartyUserId?: string | undefined;
|
|
297
297
|
counterpartyIntentId?: string | undefined;
|
|
298
298
|
counterpartyFelicityAuthority?: number | undefined;
|
|
299
299
|
}, {
|
|
300
300
|
networkId: string;
|
|
301
|
+
opportunityId: string;
|
|
301
302
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
302
303
|
recipientUserId: string;
|
|
303
304
|
recipientIntentId: string;
|
|
304
|
-
opportunityId: string;
|
|
305
305
|
taskId?: string | undefined;
|
|
306
306
|
counterpartyUserId?: string | undefined;
|
|
307
307
|
counterpartyIntentId?: string | undefined;
|
|
@@ -332,74 +332,74 @@ export declare const NegotiationQuestionProvenanceSchema: z.ZodEffects<z.ZodObje
|
|
|
332
332
|
questionOrdinal: z.ZodNumber;
|
|
333
333
|
}, "strip", z.ZodTypeAny, {
|
|
334
334
|
networkId: string;
|
|
335
|
+
opportunityId: string;
|
|
336
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
337
|
+
opportunityUpdatedAt: string;
|
|
335
338
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
336
339
|
recipientUserId: string;
|
|
337
340
|
recipientIntentId: string;
|
|
338
|
-
opportunityId: string;
|
|
339
341
|
version: 1;
|
|
340
342
|
intentFingerprint: string;
|
|
341
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
342
|
-
opportunityUpdatedAt: string;
|
|
343
343
|
questionOrdinal: number;
|
|
344
344
|
taskId?: string | undefined;
|
|
345
345
|
counterpartyUserId?: string | undefined;
|
|
346
346
|
counterpartyIntentId?: string | undefined;
|
|
347
347
|
counterpartyFelicityAuthority?: number | undefined;
|
|
348
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
348
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
349
349
|
taskUpdatedAt?: string | undefined;
|
|
350
350
|
}, {
|
|
351
351
|
networkId: string;
|
|
352
|
+
opportunityId: string;
|
|
353
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
354
|
+
opportunityUpdatedAt: string;
|
|
352
355
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
353
356
|
recipientUserId: string;
|
|
354
357
|
recipientIntentId: string;
|
|
355
|
-
opportunityId: string;
|
|
356
358
|
version: 1;
|
|
357
359
|
intentFingerprint: string;
|
|
358
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
359
|
-
opportunityUpdatedAt: string;
|
|
360
360
|
questionOrdinal: number;
|
|
361
361
|
taskId?: string | undefined;
|
|
362
362
|
counterpartyUserId?: string | undefined;
|
|
363
363
|
counterpartyIntentId?: string | undefined;
|
|
364
364
|
counterpartyFelicityAuthority?: number | undefined;
|
|
365
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
365
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
366
366
|
taskUpdatedAt?: string | undefined;
|
|
367
367
|
}>, {
|
|
368
368
|
networkId: string;
|
|
369
|
+
opportunityId: string;
|
|
370
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
371
|
+
opportunityUpdatedAt: string;
|
|
369
372
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
370
373
|
recipientUserId: string;
|
|
371
374
|
recipientIntentId: string;
|
|
372
|
-
opportunityId: string;
|
|
373
375
|
version: 1;
|
|
374
376
|
intentFingerprint: string;
|
|
375
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
376
|
-
opportunityUpdatedAt: string;
|
|
377
377
|
questionOrdinal: number;
|
|
378
378
|
taskId?: string | undefined;
|
|
379
379
|
counterpartyUserId?: string | undefined;
|
|
380
380
|
counterpartyIntentId?: string | undefined;
|
|
381
381
|
counterpartyFelicityAuthority?: number | undefined;
|
|
382
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
382
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
383
383
|
taskUpdatedAt?: string | undefined;
|
|
384
384
|
}, {
|
|
385
385
|
networkId: string;
|
|
386
|
+
opportunityId: string;
|
|
387
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
388
|
+
opportunityUpdatedAt: string;
|
|
386
389
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
387
390
|
recipientUserId: string;
|
|
388
391
|
recipientIntentId: string;
|
|
389
|
-
opportunityId: string;
|
|
390
392
|
version: 1;
|
|
391
393
|
intentFingerprint: string;
|
|
392
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
393
|
-
opportunityUpdatedAt: string;
|
|
394
394
|
questionOrdinal: number;
|
|
395
395
|
taskId?: string | undefined;
|
|
396
396
|
counterpartyUserId?: string | undefined;
|
|
397
397
|
counterpartyIntentId?: string | undefined;
|
|
398
398
|
counterpartyFelicityAuthority?: number | undefined;
|
|
399
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
399
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
400
400
|
taskUpdatedAt?: string | undefined;
|
|
401
401
|
}>;
|
|
402
|
-
export declare const QuestionModeSchema: z.ZodEnum<["
|
|
402
|
+
export declare const QuestionModeSchema: z.ZodEnum<["intent", "negotiation", "negotiation_inflight", "chat", "pool_discovery"]>;
|
|
403
403
|
/** One server-side candidate→side assignment (never serialized to clients). */
|
|
404
404
|
export declare const QuestionPoolAssignmentSchema: z.ZodObject<{
|
|
405
405
|
opportunityId: z.ZodString;
|
|
@@ -727,7 +727,7 @@ export declare const QuestionVoidedReasonSchema: z.ZodEnum<["pool_drift", "inten
|
|
|
727
727
|
export declare const QuestionPoolPushRequestReasonSchema: z.ZodEnum<["question_lifecycle", "intent_lifecycle", "malformed_source", "malformed_actor", "malformed_pool", "malformed_cycle", "visited", "pool_size", "voi", "cycle_budget"]>;
|
|
728
728
|
export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
729
729
|
/** Which preset mode generated this question. */
|
|
730
|
-
mode: z.ZodEnum<["
|
|
730
|
+
mode: z.ZodEnum<["intent", "negotiation", "negotiation_inflight", "chat", "pool_discovery"]>;
|
|
731
731
|
/** Internal reason for generation; independent of mode and QUD repair metadata. */
|
|
732
732
|
purpose: z.ZodOptional<z.ZodEnum<["uptake", "recovery", "stalled_followup", "inflight_consultation"]>>;
|
|
733
733
|
/** Exact negotiation recipient/intent/task routing provenance. Internal only. */
|
|
@@ -752,71 +752,71 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
752
752
|
questionOrdinal: z.ZodNumber;
|
|
753
753
|
}, "strip", z.ZodTypeAny, {
|
|
754
754
|
networkId: string;
|
|
755
|
+
opportunityId: string;
|
|
756
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
757
|
+
opportunityUpdatedAt: string;
|
|
755
758
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
756
759
|
recipientUserId: string;
|
|
757
760
|
recipientIntentId: string;
|
|
758
|
-
opportunityId: string;
|
|
759
761
|
version: 1;
|
|
760
762
|
intentFingerprint: string;
|
|
761
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
762
|
-
opportunityUpdatedAt: string;
|
|
763
763
|
questionOrdinal: number;
|
|
764
764
|
taskId?: string | undefined;
|
|
765
765
|
counterpartyUserId?: string | undefined;
|
|
766
766
|
counterpartyIntentId?: string | undefined;
|
|
767
767
|
counterpartyFelicityAuthority?: number | undefined;
|
|
768
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
768
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
769
769
|
taskUpdatedAt?: string | undefined;
|
|
770
770
|
}, {
|
|
771
771
|
networkId: string;
|
|
772
|
+
opportunityId: string;
|
|
773
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
774
|
+
opportunityUpdatedAt: string;
|
|
772
775
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
773
776
|
recipientUserId: string;
|
|
774
777
|
recipientIntentId: string;
|
|
775
|
-
opportunityId: string;
|
|
776
778
|
version: 1;
|
|
777
779
|
intentFingerprint: string;
|
|
778
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
779
|
-
opportunityUpdatedAt: string;
|
|
780
780
|
questionOrdinal: number;
|
|
781
781
|
taskId?: string | undefined;
|
|
782
782
|
counterpartyUserId?: string | undefined;
|
|
783
783
|
counterpartyIntentId?: string | undefined;
|
|
784
784
|
counterpartyFelicityAuthority?: number | undefined;
|
|
785
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
785
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
786
786
|
taskUpdatedAt?: string | undefined;
|
|
787
787
|
}>, {
|
|
788
788
|
networkId: string;
|
|
789
|
+
opportunityId: string;
|
|
790
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
791
|
+
opportunityUpdatedAt: string;
|
|
789
792
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
790
793
|
recipientUserId: string;
|
|
791
794
|
recipientIntentId: string;
|
|
792
|
-
opportunityId: string;
|
|
793
795
|
version: 1;
|
|
794
796
|
intentFingerprint: string;
|
|
795
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
796
|
-
opportunityUpdatedAt: string;
|
|
797
797
|
questionOrdinal: number;
|
|
798
798
|
taskId?: string | undefined;
|
|
799
799
|
counterpartyUserId?: string | undefined;
|
|
800
800
|
counterpartyIntentId?: string | undefined;
|
|
801
801
|
counterpartyFelicityAuthority?: number | undefined;
|
|
802
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
802
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
803
803
|
taskUpdatedAt?: string | undefined;
|
|
804
804
|
}, {
|
|
805
805
|
networkId: string;
|
|
806
|
+
opportunityId: string;
|
|
807
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
808
|
+
opportunityUpdatedAt: string;
|
|
806
809
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
807
810
|
recipientUserId: string;
|
|
808
811
|
recipientIntentId: string;
|
|
809
|
-
opportunityId: string;
|
|
810
812
|
version: 1;
|
|
811
813
|
intentFingerprint: string;
|
|
812
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
813
|
-
opportunityUpdatedAt: string;
|
|
814
814
|
questionOrdinal: number;
|
|
815
815
|
taskId?: string | undefined;
|
|
816
816
|
counterpartyUserId?: string | undefined;
|
|
817
817
|
counterpartyIntentId?: string | undefined;
|
|
818
818
|
counterpartyFelicityAuthority?: number | undefined;
|
|
819
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
819
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
820
820
|
taskUpdatedAt?: string | undefined;
|
|
821
821
|
}>>;
|
|
822
822
|
/** Entity type that triggered generation (e.g. "opportunity", "intent", "profile"). */
|
|
@@ -1105,7 +1105,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1105
1105
|
/** Authoritative successful-delivery ledger timestamp. Internal only. */
|
|
1106
1106
|
pushedAt: z.ZodOptional<z.ZodString>;
|
|
1107
1107
|
}, "strip", z.ZodTypeAny, {
|
|
1108
|
-
mode: "chat" | "intent" | "
|
|
1108
|
+
mode: "chat" | "intent" | "negotiation" | "negotiation_inflight" | "pool_discovery";
|
|
1109
1109
|
sourceType: string;
|
|
1110
1110
|
sourceId: string;
|
|
1111
1111
|
timestamp: string;
|
|
@@ -1136,20 +1136,20 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1136
1136
|
purpose?: "uptake" | "stalled_followup" | "inflight_consultation" | "recovery" | undefined;
|
|
1137
1137
|
negotiation?: {
|
|
1138
1138
|
networkId: string;
|
|
1139
|
+
opportunityId: string;
|
|
1140
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1141
|
+
opportunityUpdatedAt: string;
|
|
1139
1142
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
1140
1143
|
recipientUserId: string;
|
|
1141
1144
|
recipientIntentId: string;
|
|
1142
|
-
opportunityId: string;
|
|
1143
1145
|
version: 1;
|
|
1144
1146
|
intentFingerprint: string;
|
|
1145
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1146
|
-
opportunityUpdatedAt: string;
|
|
1147
1147
|
questionOrdinal: number;
|
|
1148
1148
|
taskId?: string | undefined;
|
|
1149
1149
|
counterpartyUserId?: string | undefined;
|
|
1150
1150
|
counterpartyIntentId?: string | undefined;
|
|
1151
1151
|
counterpartyFelicityAuthority?: number | undefined;
|
|
1152
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
1152
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
1153
1153
|
taskUpdatedAt?: string | undefined;
|
|
1154
1154
|
} | undefined;
|
|
1155
1155
|
messageId?: string | undefined;
|
|
@@ -1199,7 +1199,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1199
1199
|
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | undefined;
|
|
1200
1200
|
pushedAt?: string | undefined;
|
|
1201
1201
|
}, {
|
|
1202
|
-
mode: "chat" | "intent" | "
|
|
1202
|
+
mode: "chat" | "intent" | "negotiation" | "negotiation_inflight" | "pool_discovery";
|
|
1203
1203
|
sourceType: string;
|
|
1204
1204
|
sourceId: string;
|
|
1205
1205
|
timestamp: string;
|
|
@@ -1230,20 +1230,20 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1230
1230
|
purpose?: "uptake" | "stalled_followup" | "inflight_consultation" | "recovery" | undefined;
|
|
1231
1231
|
negotiation?: {
|
|
1232
1232
|
networkId: string;
|
|
1233
|
+
opportunityId: string;
|
|
1234
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1235
|
+
opportunityUpdatedAt: string;
|
|
1233
1236
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
1234
1237
|
recipientUserId: string;
|
|
1235
1238
|
recipientIntentId: string;
|
|
1236
|
-
opportunityId: string;
|
|
1237
1239
|
version: 1;
|
|
1238
1240
|
intentFingerprint: string;
|
|
1239
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1240
|
-
opportunityUpdatedAt: string;
|
|
1241
1241
|
questionOrdinal: number;
|
|
1242
1242
|
taskId?: string | undefined;
|
|
1243
1243
|
counterpartyUserId?: string | undefined;
|
|
1244
1244
|
counterpartyIntentId?: string | undefined;
|
|
1245
1245
|
counterpartyFelicityAuthority?: number | undefined;
|
|
1246
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
1246
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
1247
1247
|
taskUpdatedAt?: string | undefined;
|
|
1248
1248
|
} | undefined;
|
|
1249
1249
|
messageId?: string | undefined;
|
|
@@ -1293,7 +1293,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1293
1293
|
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | undefined;
|
|
1294
1294
|
pushedAt?: string | undefined;
|
|
1295
1295
|
}>, {
|
|
1296
|
-
mode: "chat" | "intent" | "
|
|
1296
|
+
mode: "chat" | "intent" | "negotiation" | "negotiation_inflight" | "pool_discovery";
|
|
1297
1297
|
sourceType: string;
|
|
1298
1298
|
sourceId: string;
|
|
1299
1299
|
timestamp: string;
|
|
@@ -1324,20 +1324,20 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1324
1324
|
purpose?: "uptake" | "stalled_followup" | "inflight_consultation" | "recovery" | undefined;
|
|
1325
1325
|
negotiation?: {
|
|
1326
1326
|
networkId: string;
|
|
1327
|
+
opportunityId: string;
|
|
1328
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1329
|
+
opportunityUpdatedAt: string;
|
|
1327
1330
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
1328
1331
|
recipientUserId: string;
|
|
1329
1332
|
recipientIntentId: string;
|
|
1330
|
-
opportunityId: string;
|
|
1331
1333
|
version: 1;
|
|
1332
1334
|
intentFingerprint: string;
|
|
1333
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1334
|
-
opportunityUpdatedAt: string;
|
|
1335
1335
|
questionOrdinal: number;
|
|
1336
1336
|
taskId?: string | undefined;
|
|
1337
1337
|
counterpartyUserId?: string | undefined;
|
|
1338
1338
|
counterpartyIntentId?: string | undefined;
|
|
1339
1339
|
counterpartyFelicityAuthority?: number | undefined;
|
|
1340
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
1340
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
1341
1341
|
taskUpdatedAt?: string | undefined;
|
|
1342
1342
|
} | undefined;
|
|
1343
1343
|
messageId?: string | undefined;
|
|
@@ -1387,7 +1387,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1387
1387
|
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | undefined;
|
|
1388
1388
|
pushedAt?: string | undefined;
|
|
1389
1389
|
}, {
|
|
1390
|
-
mode: "chat" | "intent" | "
|
|
1390
|
+
mode: "chat" | "intent" | "negotiation" | "negotiation_inflight" | "pool_discovery";
|
|
1391
1391
|
sourceType: string;
|
|
1392
1392
|
sourceId: string;
|
|
1393
1393
|
timestamp: string;
|
|
@@ -1418,20 +1418,20 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1418
1418
|
purpose?: "uptake" | "stalled_followup" | "inflight_consultation" | "recovery" | undefined;
|
|
1419
1419
|
negotiation?: {
|
|
1420
1420
|
networkId: string;
|
|
1421
|
+
opportunityId: string;
|
|
1422
|
+
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1423
|
+
opportunityUpdatedAt: string;
|
|
1421
1424
|
purpose: "uptake" | "stalled_followup" | "inflight_consultation";
|
|
1422
1425
|
recipientUserId: string;
|
|
1423
1426
|
recipientIntentId: string;
|
|
1424
|
-
opportunityId: string;
|
|
1425
1427
|
version: 1;
|
|
1426
1428
|
intentFingerprint: string;
|
|
1427
|
-
opportunityStatus: "latent" | "draft" | "negotiating" | "pending" | "stalled" | "accepted" | "rejected" | "expired";
|
|
1428
|
-
opportunityUpdatedAt: string;
|
|
1429
1429
|
questionOrdinal: number;
|
|
1430
1430
|
taskId?: string | undefined;
|
|
1431
1431
|
counterpartyUserId?: string | undefined;
|
|
1432
1432
|
counterpartyIntentId?: string | undefined;
|
|
1433
1433
|
counterpartyFelicityAuthority?: number | undefined;
|
|
1434
|
-
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "
|
|
1434
|
+
taskState?: "rejected" | "waiting_for_agent" | "input_required" | "completed" | "failed" | "submitted" | "working" | "canceled" | "auth_required" | "claimed" | undefined;
|
|
1435
1435
|
taskUpdatedAt?: string | undefined;
|
|
1436
1436
|
} | undefined;
|
|
1437
1437
|
messageId?: string | undefined;
|
|
@@ -162,9 +162,7 @@ export const NegotiationQuestionProvenanceSchema = z.object({
|
|
|
162
162
|
}
|
|
163
163
|
});
|
|
164
164
|
export const QuestionModeSchema = z.enum([
|
|
165
|
-
"discovery",
|
|
166
165
|
"intent",
|
|
167
|
-
"enrichment",
|
|
168
166
|
"negotiation",
|
|
169
167
|
// Negotiator-initiated mid-negotiation client questions (ask_user action, P3).
|
|
170
168
|
// Distinct from "negotiation", which covers post-stall questions only.
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
* - ChatQuestionAnswerOutcome — resolution shape for awaited answers.
|
|
17
17
|
*
|
|
18
18
|
* ### Generator port (deprecated)
|
|
19
|
-
* - QuestionGeneratorReader — legacy inline discovery question generator.
|
|
20
19
|
*
|
|
21
20
|
* ### Tool host ports
|
|
22
21
|
* - QuestionerToolDeps — host capabilities for async question delivery tools.
|
|
@@ -25,5 +24,4 @@
|
|
|
25
24
|
* IND-547: canonical ports surface for the questions capability.
|
|
26
25
|
*/
|
|
27
26
|
export type { PersistableQuestion, PersistedQuestion, QuestionFilters, ChatQuestionAnswerOutcome, ChatQuestionsHost, QuestionerDatabase, } from "./question.persistence.port.js";
|
|
28
|
-
export type { QuestionGeneratorReader } from "./question.generator.port.js";
|
|
29
27
|
export type { QuestionerToolDeps, AskUserQuestionToolDeps } from "./question.tools.port.js";
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
* - ChatQuestionAnswerOutcome — resolution shape for awaited answers.
|
|
17
17
|
*
|
|
18
18
|
* ### Generator port (deprecated)
|
|
19
|
-
* - QuestionGeneratorReader — legacy inline discovery question generator.
|
|
20
19
|
*
|
|
21
20
|
* ### Tool host ports
|
|
22
21
|
* - QuestionerToolDeps — host capabilities for async question delivery tools.
|