@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.
Files changed (39) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/capabilities/questions.facade.d.ts +2 -2
  3. package/dist/capabilities/questions.facade.js +1 -1
  4. package/dist/capabilities/questions.runtime.facade.d.ts +1 -1
  5. package/dist/capabilities/questions.runtime.facade.js +1 -1
  6. package/dist/chat/reporter.persona.js +1 -1
  7. package/dist/enrichment/enrichment.graph.d.ts +1 -3
  8. package/dist/enrichment/enrichment.graph.js +1 -2
  9. package/dist/index.d.ts +2 -2
  10. package/dist/negotiation/application/negotiation.graph.d.ts +5 -5
  11. package/dist/negotiation/domain/negotiation.state.d.ts +1 -1
  12. package/dist/opportunity/application/opportunity.graph.d.ts +23 -23
  13. package/dist/opportunity/domain/opportunity.state.d.ts +6 -6
  14. package/dist/opportunity/ports/opportunity.tools.port.d.ts +1 -1
  15. package/dist/questions/application/index.d.ts +2 -2
  16. package/dist/questions/application/index.js +1 -1
  17. package/dist/questions/application/question.env.d.ts +0 -30
  18. package/dist/questions/application/question.env.js +0 -38
  19. package/dist/questions/application/question.input.d.ts +2 -16
  20. package/dist/questions/application/question.presets.js +0 -66
  21. package/dist/questions/application/question.tools.js +3 -3
  22. package/dist/questions/domain/question.schema.d.ts +58 -58
  23. package/dist/questions/domain/question.schema.js +0 -2
  24. package/dist/questions/ports/index.d.ts +0 -2
  25. package/dist/questions/ports/index.js +0 -1
  26. package/dist/questions/public/index.d.ts +2 -2
  27. package/dist/questions/public/index.js +1 -1
  28. package/dist/runtime/foreground/composition/tool.factory.js +1 -2
  29. package/dist/shared/agent/activity-projection.d.ts +4 -4
  30. package/dist/shared/agent/activity-projection.js +6 -0
  31. package/dist/shared/agent/tool.helpers.d.ts +2 -8
  32. package/dist/shared/schemas/discovery-question.schema.d.ts +10 -28
  33. package/dist/shared/schemas/discovery-question.schema.js +2 -4
  34. package/dist/shared/schemas/negotiation-digest.schema.d.ts +5 -5
  35. package/package.json +1 -1
  36. package/dist/questions/application/question.discovery.prompt.d.ts +0 -8
  37. package/dist/questions/application/question.discovery.prompt.js +0 -181
  38. package/dist/questions/ports/question.generator.port.d.ts +0 -33
  39. 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 (DiscoveryContext, IntentContext, …),
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 = DiscoveryContext | IntentContext | RecoveryIntentContext | ProfileContext | NegotiationContext | NegotiationInflightContext | ChatContext | PoolDiscoveryContext;
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 = ["enrichment", "intent", "discovery"];
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
- "(profile, intent, negotiation, discovery). These are questions generated by the " +
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 profile/intent/discovery questions for the scoped network plus a " +
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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<["discovery", "intent", "enrichment", "negotiation", "negotiation_inflight", "chat", "pool_discovery"]>;
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<["discovery", "intent", "enrichment", "negotiation", "negotiation_inflight", "chat", "pool_discovery"]>;
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "enrichment" | "discovery" | "negotiation" | "negotiation_inflight" | "pool_discovery";
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "enrichment" | "discovery" | "negotiation" | "negotiation_inflight" | "pool_discovery";
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "enrichment" | "discovery" | "negotiation" | "negotiation_inflight" | "pool_discovery";
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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" | "enrichment" | "discovery" | "negotiation" | "negotiation_inflight" | "pool_discovery";
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" | "submitted" | "working" | "completed" | "canceled" | "failed" | "auth_required" | "claimed" | undefined;
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.