@indexnetwork/protocol 11.0.2-rc.456.1 → 11.2.0-rc.458.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 (41) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/capabilities/negotiation.facade.d.ts +4 -1
  3. package/dist/capabilities/negotiation.facade.js +2 -1
  4. package/dist/capabilities/negotiation.questions.facade.d.ts +1 -1
  5. package/dist/capabilities/negotiation.questions.facade.js +1 -1
  6. package/dist/index.d.ts +8 -4
  7. package/dist/index.js +5 -1
  8. package/dist/mcp/mcp.authorization-policy.d.ts +10 -4
  9. package/dist/mcp/mcp.authorization-policy.js +64 -5
  10. package/dist/negotiation/application/negotiation.agent.d.ts +7 -1
  11. package/dist/negotiation/application/negotiation.agent.js +6 -4
  12. package/dist/negotiation/application/negotiation.detail-reader.js +3 -6
  13. package/dist/negotiation/application/negotiation.graph.d.ts +17 -29
  14. package/dist/negotiation/application/negotiation.graph.js +35 -49
  15. package/dist/negotiation/application/negotiation.tools.js +40 -43
  16. package/dist/negotiation/domain/index.d.ts +5 -0
  17. package/dist/negotiation/domain/index.js +4 -0
  18. package/dist/negotiation/domain/negotiation.consultation-policy.d.ts +2 -3
  19. package/dist/negotiation/domain/negotiation.expected-speaker.d.ts +19 -0
  20. package/dist/negotiation/domain/negotiation.expected-speaker.js +47 -0
  21. package/dist/negotiation/domain/negotiation.hermes-contract.d.ts +31 -0
  22. package/dist/negotiation/domain/negotiation.hermes-contract.js +72 -0
  23. package/dist/negotiation/domain/negotiation.protocol.d.ts +36 -66
  24. package/dist/negotiation/domain/negotiation.state.d.ts +10 -19
  25. package/dist/negotiation/domain/negotiation.turn-cap.d.ts +9 -0
  26. package/dist/negotiation/domain/negotiation.turn-cap.js +12 -0
  27. package/dist/negotiation/public/index.d.ts +4 -1
  28. package/dist/negotiation/public/index.js +3 -1
  29. package/dist/questions/application/question.input.d.ts +4 -8
  30. package/dist/questions/application/question.input.js +3 -8
  31. package/dist/questions/application/question.presets.js +10 -11
  32. package/dist/shared/agent/model-signal.d.ts +6 -1
  33. package/dist/shared/agent/model-signal.js +5 -2
  34. package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +3 -0
  35. package/dist/shared/interfaces/database.interface.d.ts +1 -1
  36. package/dist/shared/interfaces/negotiation-events.interface.d.ts +12 -2
  37. package/dist/shared/schemas/mcp-auth.schema.d.ts +6 -0
  38. package/dist/shared/schemas/mcp-auth.schema.js +9 -0
  39. package/dist/shared/schemas/negotiation-state.schema.d.ts +17 -23
  40. package/dist/shared/schemas/negotiation-state.schema.js +13 -8
  41. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -28,6 +28,12 @@ pin a supported release, use `latest`.
28
28
 
29
29
  ## [Unreleased]
30
30
 
31
+ ### Added
32
+ - Full standalone Hermes capability policy (11.2.0): the `hermes-agent` principal has an explicit six-action MCP/REST policy while the existing `hermes-negotiator` principal remains restricted to its four scheduled negotiation handlers. Both policies default deny and preserve one-shot, generation-fenced negotiation authority.
33
+
34
+ ### Security
35
+ - The Hermes policy never exposes owner credentials, account-security, credential/permission/agent administration, billing, or unclassified tools; connector and owner-native callers receive only nonsecret response projections.
36
+
31
37
  ### Removed
32
38
  - Remove six unsupported shared interface/schema forwarding shims after migrating repository consumers to capability-owned domain and port modules; stable package-root exports remain unchanged.
33
39
  - Remove six unsupported tool-port forwarding shims and the deprecated unused discovery-question mapper; stable package-root exports remain unchanged.
@@ -51,6 +57,7 @@ pin a supported release, use `latest`.
51
57
  enrichment are unchanged.
52
58
 
53
59
  ### Added
60
+ - Add the Personal Agent Hermes negotiation-runtime contract (11.1.0). The public negotiation facade now exports `configuredAskUserEnabled` and `askUserAnswerWindowMs` for host-side owner-consultation admission, with regenerated consumer/export inventories. The generated Hermes negotiator skill receives a privacy-minimal structural envelope: server-provided seat, protocol version, deadlines, closed allowed actions, consultation eligibility, opportunity identifiers/status, and message-free history. Owner memory, private context, consultation text, evaluator reasoning, actor prose, and shared-message prose are excluded; each scheduled pass permits at most one response or owner consultation and treats all pickup prose as untrusted data.
54
61
  - Add a live answer-first signal-intake eval with unrelated, relevant, and no-bridge profile cases plus provider-free corpus, runner, and scorer checks.
55
62
  - Add the protocol-only Guided Atlas, deterministic architecture inventory
56
63
  generator, and source-evidenced Configuration Lab. The atlas explains
@@ -78,6 +85,9 @@ pin a supported release, use `latest`.
78
85
  boundary gate and the protocol atlas generator; allowed dependency directions
79
86
  are unchanged.
80
87
 
88
+ ### Security
89
+ - The Hermes skill contract is restricted to the four negotiator tools, never treats model prose as authority, never forwards secrets or owner-private context, and relies on Index's validated action/consultation and bounded fallback paths. **This branch targets dev/private testing only. Production distribution remains blocked until the Mac owner credential is migrated to Keychain and the plaintext file/directory is removed, Developer ID hardened-runtime signing and notarization are complete, and the credential TTL/revocation checklist is verified.**
90
+
81
91
  ### Fixed
82
92
  - Add an independent complete-payload golden digest and stronger audit/report leak
83
93
  sentinels for the historical discovery seed serializer, and clarify the H4 review
@@ -16,8 +16,11 @@ export { NegotiationReflector } from "../negotiation/public/index.js";
16
16
  export type { DistilledMemory, ReflectionTranscriptEntry, NegotiationReflectionInput, ChatReflectionInput, NegotiationReflectJobData, ReflectEnqueueFn } from "../negotiation/public/index.js";
17
17
  export type { NegotiatorMemoryEntry } from "../negotiation/public/index.js";
18
18
  export type { NegotiationGraphLike } from "../negotiation/public/index.js";
19
+ export { HERMES_OWNER_DIRECTIVE, HERMES_SHARED_MESSAGE_TEMPLATES, HermesNegotiationActionSchema, HermesNegotiationResponseSchema, HermesOwnerDirectiveSchema, HermesRoleAlignmentSchema, allowedHermesActionsFor, buildHermesNegotiationTurn, } from "../negotiation/public/index.js";
20
+ export type { HermesNegotiationAction, HermesNegotiationResponse, HermesOwnerDirective, HermesRoleAlignment, } from "../negotiation/public/index.js";
19
21
  export { AMBIENT_PARK_WINDOW_MS } from "../negotiation/public/index.js";
20
- export { allowedActionsFor, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "../negotiation/public/index.js";
22
+ export { DEFAULT_NEGOTIATION_MAX_TURNS, isNegotiationTurnCapReached, expectedNegotiationSpeaker, allowedActionsFor, askUserAnswerWindowMs, configuredAskUserEnabled, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "../negotiation/public/index.js";
23
+ export type { NegotiationSpeakerParticipants, NegotiationSpeakerMessage } from "../negotiation/public/index.js";
21
24
  export { assessConsultationEligibility, consultationPromptFor, negotiationConsultationPolicyMode } from "../negotiation/public/index.js";
22
25
  export type { ConsultationEligibility, ConsultationEligibilityInput, NegotiationConsultationPolicyMode, NegotiationConsultationReason } from "../negotiation/public/index.js";
23
26
  export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, isSafeNegotiationQuestionText, validateInflightAskUserFields, negotiationQuestionSettlementId, } from "../negotiation/public/index.js";
@@ -11,7 +11,8 @@ export { NegotiationInsightsGenerator } from "../negotiation/public/index.js";
11
11
  export { IndexNegotiator } from "../negotiation/public/index.js";
12
12
  export { NegotiationScreener } from "../negotiation/public/index.js";
13
13
  export { NegotiationReflector } from "../negotiation/public/index.js";
14
+ export { HERMES_OWNER_DIRECTIVE, HERMES_SHARED_MESSAGE_TEMPLATES, HermesNegotiationActionSchema, HermesNegotiationResponseSchema, HermesOwnerDirectiveSchema, HermesRoleAlignmentSchema, allowedHermesActionsFor, buildHermesNegotiationTurn, } from "../negotiation/public/index.js";
14
15
  export { AMBIENT_PARK_WINDOW_MS } from "../negotiation/public/index.js";
15
- export { allowedActionsFor, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "../negotiation/public/index.js";
16
+ export { DEFAULT_NEGOTIATION_MAX_TURNS, isNegotiationTurnCapReached, expectedNegotiationSpeaker, allowedActionsFor, askUserAnswerWindowMs, configuredAskUserEnabled, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "../negotiation/public/index.js";
16
17
  export { assessConsultationEligibility, consultationPromptFor, negotiationConsultationPolicyMode } from "../negotiation/public/index.js";
17
18
  export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, isSafeNegotiationQuestionText, validateInflightAskUserFields, negotiationQuestionSettlementId, } from "../negotiation/public/index.js";
@@ -2,5 +2,5 @@
2
2
  * Narrow question-policy port consumed by the Questions capability — IND-550.
3
3
  * Sources now route through the canonical negotiation module public surface.
4
4
  */
5
- export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, isSafeNegotiationQuestionText, } from "../negotiation/public/index.js";
5
+ export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, consultationPromptFor, isSafeNegotiationQuestionText, } from "../negotiation/public/index.js";
6
6
  export type { NegotiationConsultationReason } from "../negotiation/public/index.js";
@@ -2,4 +2,4 @@
2
2
  * Narrow question-policy port consumed by the Questions capability — IND-550.
3
3
  * Sources now route through the canonical negotiation module public surface.
4
4
  */
5
- export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, isSafeNegotiationQuestionText, } from "../negotiation/public/index.js";
5
+ export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, consultationPromptFor, isSafeNegotiationQuestionText, } from "../negotiation/public/index.js";
package/dist/index.d.ts CHANGED
@@ -21,7 +21,7 @@ export type { IntegrationAdapter, IntegrationConnection, IntegrationSession, Int
21
21
  export type { IntentGraphQueue } from "./shared/interfaces/queue.interface.js";
22
22
  export type { Scraper } from "./shared/interfaces/scraper.interface.js";
23
23
  export type { EnrichmentRunInput, EnrichmentRunRecord } from "./shared/interfaces/enrichment-run.interface.js";
24
- export type { NegotiationTimeoutQueue, AskUserExpiryPayload } from "./shared/interfaces/negotiation-events.interface.js";
24
+ export type { NegotiationTimeoutQueue, AskUserExpiryPayload, NegotiationContinuationTimeoutIdentity, } from "./shared/interfaces/negotiation-events.interface.js";
25
25
  export type { AgentDispatcher, AgentDispatchResult, NegotiationTurnPayload } from "./shared/interfaces/agent-dispatcher.interface.js";
26
26
  export { SYSTEM_AGENT_IDS } from './capabilities/participant-agents.facade.js';
27
27
  export { ChatContextDigestSchema, type ChatContextDigest } from "./shared/schemas/chat-context.schema.js";
@@ -151,10 +151,14 @@ export { MCP_AGENT_ADMIN_TOOLS, CANONICAL_MCP_CAPABILITY_POLICY_OPTIONS, CANONIC
151
151
  export { ActivityQuestionCountsSchema, ActivityQuestionDomainSchema, ActivitySummaryDomainSchema, ActivitySummaryResponseSchema, McpActivityCallerSchema, QUESTION_MODE_TO_DOMAIN, READ_ACTIVITY_SUMMARY_TOOL_NAME, activitySummaryNetworkId, projectActivitySummary, resolveActivitySummaryDomains, } from "./shared/agent/activity-projection.js";
152
152
  export type { ActivityQuestionCounts, ActivityQuestionDomain, ActivitySummaryDomain, McpActivityCaller, ProjectedActivitySummary, } from "./shared/agent/activity-projection.js";
153
153
  export type { McpAuthorizationDenialEvent, McpAuthorizationObserver, McpCapabilityDecision, McpCapabilityDecisionReason, McpCapabilityPolicyOptions, McpCapabilitySubject, McpPermissionAction, McpPolicyAgentSnapshot, McpPrincipalProfile, McpToolPermissionMap, McpToolPermissionRequirement, McpToolAccessRule, McpToolAccessRuleMap, ResolveMcpCapabilitySubjectInput, } from "./mcp/mcp.authorization-policy.js";
154
+ export { AskUserPayloadSchema, NEGOTIATION_CONSULTATION_REASONS, NegotiationConsultationReasonSchema, } from "./shared/schemas/negotiation-state.schema.js";
154
155
  export type { UserNegotiationContext, NegotiationTurn, NegotiationOutcome, SeedAssessment } from "./shared/schemas/negotiation-state.schema.js";
155
- export type { NegotiationAction, NegotiationSeat, NegotiationProtocolVersion } from "./shared/schemas/negotiation-state.schema.js";
156
+ export type { NegotiationAction, NegotiationConsultationReason, NegotiationSeat, NegotiationProtocolVersion } from "./shared/schemas/negotiation-state.schema.js";
156
157
  export type { NegotiationGraphLike } from "./capabilities/negotiation.facade.js";
157
- export { allowedActionsFor, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "./capabilities/negotiation.facade.js";
158
+ export { HERMES_OWNER_DIRECTIVE, HERMES_SHARED_MESSAGE_TEMPLATES, HermesNegotiationActionSchema, HermesNegotiationResponseSchema, HermesOwnerDirectiveSchema, HermesRoleAlignmentSchema, allowedHermesActionsFor, buildHermesNegotiationTurn, } from "./capabilities/negotiation.facade.js";
159
+ export type { HermesNegotiationAction, HermesNegotiationResponse, HermesOwnerDirective, HermesRoleAlignment, } from "./capabilities/negotiation.facade.js";
160
+ export { DEFAULT_NEGOTIATION_MAX_TURNS, isNegotiationTurnCapReached, expectedNegotiationSpeaker, allowedActionsFor, askUserAnswerWindowMs, configuredAskUserEnabled, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "./capabilities/negotiation.facade.js";
161
+ export type { NegotiationSpeakerParticipants, NegotiationSpeakerMessage } from "./capabilities/negotiation.facade.js";
158
162
  export { assessConsultationEligibility, consultationPromptFor, negotiationConsultationPolicyMode } from "./capabilities/negotiation.facade.js";
159
- export type { ConsultationEligibility, ConsultationEligibilityInput, NegotiationConsultationPolicyMode, NegotiationConsultationReason } from "./capabilities/negotiation.facade.js";
163
+ export type { ConsultationEligibility, ConsultationEligibilityInput, NegotiationConsultationPolicyMode } from "./capabilities/negotiation.facade.js";
160
164
  export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, isSafeNegotiationQuestionText, negotiationQuestionSettlementId, validateInflightAskUserFields, } from "./capabilities/negotiation.facade.js";
package/dist/index.js CHANGED
@@ -121,7 +121,11 @@ export { normalizeTelegramHandle } from './shared/utils/telegram-handle.js';
121
121
  export { createMcpServer, buildMcpOnboardingMessage, ONBOARDING_ALLOWED } from "./mcp/mcp.server.js";
122
122
  export { MCP_AGENT_ADMIN_TOOLS, CANONICAL_MCP_CAPABILITY_POLICY_OPTIONS, CANONICAL_MCP_TOOL_ACCESS_RULES, MCP_INFORMATIONAL_TOOLS, MCP_PERMISSION_ACTIONS, McpCapabilityPolicy, McpCapabilitySubjectSchema, McpPermissionActionSchema, McpPolicyAgentSnapshotSchema, McpPrincipalProfileSchema, McpToolPermissionRequirementSchema, McpToolAccessRuleSchema, buildMcpAuthorizationDenialEvent, defineMcpToolAccessRules, defineMcpToolPermissionMap, resolveMcpActivityCaller, resolveMcpCapabilitySubject, } from "./mcp/mcp.authorization-policy.js";
123
123
  export { ActivityQuestionCountsSchema, ActivityQuestionDomainSchema, ActivitySummaryDomainSchema, ActivitySummaryResponseSchema, McpActivityCallerSchema, QUESTION_MODE_TO_DOMAIN, READ_ACTIVITY_SUMMARY_TOOL_NAME, activitySummaryNetworkId, projectActivitySummary, resolveActivitySummaryDomains, } from "./shared/agent/activity-projection.js";
124
+ // ─── States (for advanced graph consumers) ────────────────────────────────────
125
+ // @experimental — internal graph-state shapes; may change in a minor release.
126
+ export { AskUserPayloadSchema, NEGOTIATION_CONSULTATION_REASONS, NegotiationConsultationReasonSchema, } from "./shared/schemas/negotiation-state.schema.js";
127
+ export { HERMES_OWNER_DIRECTIVE, HERMES_SHARED_MESSAGE_TEMPLATES, HermesNegotiationActionSchema, HermesNegotiationResponseSchema, HermesOwnerDirectiveSchema, HermesRoleAlignmentSchema, allowedHermesActionsFor, buildHermesNegotiationTurn, } from "./capabilities/negotiation.facade.js";
124
128
  // ─── Negotiation seat rules (v2 client-advocate protocol) ───────────────────
125
- export { allowedActionsFor, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "./capabilities/negotiation.facade.js";
129
+ export { DEFAULT_NEGOTIATION_MAX_TURNS, isNegotiationTurnCapReached, expectedNegotiationSpeaker, allowedActionsFor, askUserAnswerWindowMs, configuredAskUserEnabled, isTerminalAction, isRejectLikeAction, readProtocolVersion, resolveSeat, seatViolationMessage } from "./capabilities/negotiation.facade.js";
126
130
  export { assessConsultationEligibility, consultationPromptFor, negotiationConsultationPolicyMode } from "./capabilities/negotiation.facade.js";
127
131
  export { NEGOTIATION_QUESTION_GENERIC_COUNTERPARTY, NEGOTIATION_QUESTION_GENERIC_NETWORK, NEGOTIATION_QUESTION_GENERIC_UPTAKE_ACTIVITY, isSafeNegotiationQuestionText, negotiationQuestionSettlementId, validateInflightAskUserFields, } from "./capabilities/negotiation.facade.js";
@@ -25,6 +25,12 @@ export type McpToolPermissionMap = ReadonlyMap<string, McpToolPermissionRequirem
25
25
  * Runtime-validates a capability-owned tool-to-permission mapping.
26
26
  */
27
27
  export declare function defineMcpToolPermissionMap(mapping: Readonly<Record<string, McpToolPermissionRequirement>>): McpToolPermissionMap;
28
+ /**
29
+ * Exact full-standalone Hermes MCP surface. Every admitted tool maps to one
30
+ * canonical action; absence is denial, including human-only, deletion,
31
+ * permission-management, agent-administration, and retired aliases.
32
+ */
33
+ export declare const HERMES_AGENT_MCP_TOOL_PERMISSIONS: McpToolPermissionMap;
28
34
  export declare const McpToolAccessRuleSchema: z.ZodEffects<z.ZodObject<{
29
35
  access: z.ZodEnum<["permission", "authenticated", "human_only", "agent_admin", "informational", "delivery_only", "removed"]>;
30
36
  actions: z.ZodOptional<z.ZodArray<z.ZodEnum<["manage:identity", "manage:premises", "manage:intents", "manage:networks", "manage:opportunities", "manage:negotiations"]>, "many">>;
@@ -113,10 +119,10 @@ export declare const McpPolicyAgentSnapshotSchema: z.ZodObject<{
113
119
  }[];
114
120
  }>;
115
121
  export type McpPolicyAgentSnapshot = z.infer<typeof McpPolicyAgentSnapshotSchema>;
116
- export declare const McpPrincipalProfileSchema: z.ZodEnum<["session_human", "onboarding_human", "enrollment_key", "unregistered_key", "registered_global_agent", "registered_network_agent", "delivery_agent", "invalid_agent"]>;
122
+ export declare const McpPrincipalProfileSchema: z.ZodEnum<["session_human", "onboarding_human", "enrollment_key", "unregistered_key", "registered_global_agent", "registered_network_agent", "hermes_agent", "delivery_agent", "invalid_agent"]>;
117
123
  export type McpPrincipalProfile = z.infer<typeof McpPrincipalProfileSchema>;
118
124
  export declare const McpCapabilitySubjectSchema: z.ZodObject<{
119
- profile: z.ZodEnum<["session_human", "onboarding_human", "enrollment_key", "unregistered_key", "registered_global_agent", "registered_network_agent", "delivery_agent", "invalid_agent"]>;
125
+ profile: z.ZodEnum<["session_human", "onboarding_human", "enrollment_key", "unregistered_key", "registered_global_agent", "registered_network_agent", "hermes_agent", "delivery_agent", "invalid_agent"]>;
120
126
  userId: z.ZodString;
121
127
  agentId: z.ZodOptional<z.ZodString>;
122
128
  agentType: z.ZodOptional<z.ZodEnum<["personal", "external", "system"]>>;
@@ -125,7 +131,7 @@ export declare const McpCapabilitySubjectSchema: z.ZodObject<{
125
131
  permissions: z.ZodArray<z.ZodEnum<["manage:identity", "manage:premises", "manage:intents", "manage:networks", "manage:opportunities", "manage:negotiations"]>, "many">;
126
132
  }, "strict", z.ZodTypeAny, {
127
133
  userId: string;
128
- profile: "session_human" | "onboarding_human" | "enrollment_key" | "unregistered_key" | "registered_global_agent" | "registered_network_agent" | "delivery_agent" | "invalid_agent";
134
+ profile: "session_human" | "onboarding_human" | "enrollment_key" | "unregistered_key" | "registered_global_agent" | "registered_network_agent" | "hermes_agent" | "delivery_agent" | "invalid_agent";
129
135
  permissions: ("manage:negotiations" | "manage:intents" | "manage:opportunities" | "manage:identity" | "manage:premises" | "manage:networks")[];
130
136
  networkScopeId: string | null;
131
137
  isOnboarding: boolean;
@@ -133,7 +139,7 @@ export declare const McpCapabilitySubjectSchema: z.ZodObject<{
133
139
  agentType?: "system" | "personal" | "external" | undefined;
134
140
  }, {
135
141
  userId: string;
136
- profile: "session_human" | "onboarding_human" | "enrollment_key" | "unregistered_key" | "registered_global_agent" | "registered_network_agent" | "delivery_agent" | "invalid_agent";
142
+ profile: "session_human" | "onboarding_human" | "enrollment_key" | "unregistered_key" | "registered_global_agent" | "registered_network_agent" | "hermes_agent" | "delivery_agent" | "invalid_agent";
137
143
  permissions: ("manage:negotiations" | "manage:intents" | "manage:opportunities" | "manage:identity" | "manage:premises" | "manage:networks")[];
138
144
  networkScopeId: string | null;
139
145
  isOnboarding: boolean;
@@ -26,6 +26,44 @@ export function defineMcpToolPermissionMap(mapping) {
26
26
  const parsed = McpToolPermissionMapSchema.parse(mapping);
27
27
  return new Map(Object.entries(parsed));
28
28
  }
29
+ /**
30
+ * Exact full-standalone Hermes MCP surface. Every admitted tool maps to one
31
+ * canonical action; absence is denial, including human-only, deletion,
32
+ * permission-management, agent-administration, and retired aliases.
33
+ */
34
+ export const HERMES_AGENT_MCP_TOOL_PERMISSIONS = defineMcpToolPermissionMap({
35
+ read_user_contexts: { action: 'manage:identity', reach: 'principal' },
36
+ preview_user_context: { action: 'manage:identity', reach: 'principal' },
37
+ confirm_user_context: { action: 'manage:identity', reach: 'principal' },
38
+ create_user_context: { action: 'manage:identity', reach: 'principal' },
39
+ update_user_context: { action: 'manage:identity', reach: 'principal' },
40
+ get_enrichment_run: { action: 'manage:identity', reach: 'principal' },
41
+ cancel_enrichment_run: { action: 'manage:identity', reach: 'principal' },
42
+ read_intents: { action: 'manage:intents', reach: 'network' },
43
+ search_intents: { action: 'manage:intents', reach: 'network' },
44
+ create_intent: { action: 'manage:intents', reach: 'network' },
45
+ update_intent: { action: 'manage:intents', reach: 'network' },
46
+ read_intent_indexes: { action: 'manage:intents', reach: 'network' },
47
+ create_intent_index: { action: 'manage:intents', reach: 'network' },
48
+ list_negotiations: { action: 'manage:negotiations', reach: 'network' },
49
+ get_negotiation: { action: 'manage:negotiations', reach: 'network' },
50
+ respond_to_negotiation: { action: 'manage:negotiations', reach: 'network' },
51
+ read_networks: { action: 'manage:networks', reach: 'network' },
52
+ read_network_memberships: { action: 'manage:networks', reach: 'network' },
53
+ create_network: { action: 'manage:networks', reach: 'network' },
54
+ update_network: { action: 'manage:networks', reach: 'network' },
55
+ create_network_membership: { action: 'manage:networks', reach: 'network' },
56
+ list_opportunities: { action: 'manage:opportunities', reach: 'network' },
57
+ update_opportunity: { action: 'manage:opportunities', reach: 'network' },
58
+ confirm_opportunity_delivery: { action: 'manage:opportunities', reach: 'network' },
59
+ read_premises: { action: 'manage:premises', reach: 'principal' },
60
+ create_premise: { action: 'manage:premises', reach: 'principal' },
61
+ update_premise: { action: 'manage:premises', reach: 'principal' },
62
+ retract_premise: { action: 'manage:premises', reach: 'principal' },
63
+ read_pending_questions: { action: 'manage:identity', reach: 'principal' },
64
+ read_activity_summary: { action: 'manage:identity', reach: 'principal' },
65
+ read_docs: { action: 'manage:identity', reach: 'principal' },
66
+ });
29
67
  export const McpToolAccessRuleSchema = z.object({
30
68
  access: z.enum([
31
69
  'permission',
@@ -216,6 +254,7 @@ export const McpPrincipalProfileSchema = z.enum([
216
254
  'unregistered_key',
217
255
  'registered_global_agent',
218
256
  'registered_network_agent',
257
+ 'hermes_agent',
219
258
  'delivery_agent',
220
259
  'invalid_agent',
221
260
  ]);
@@ -331,11 +370,13 @@ export function resolveMcpCapabilitySubject(input) {
331
370
  });
332
371
  }
333
372
  const agent = parsedAgent.data;
334
- const profile = identity.isDeliveryAgent === true
335
- ? 'delivery_agent'
336
- : identity.networkScopeId
337
- ? 'registered_network_agent'
338
- : 'registered_global_agent';
373
+ const profile = identity.isHermesAgent === true
374
+ ? 'hermes_agent'
375
+ : identity.isDeliveryAgent === true
376
+ ? 'delivery_agent'
377
+ : identity.networkScopeId
378
+ ? 'registered_network_agent'
379
+ : 'registered_global_agent';
339
380
  return McpCapabilitySubjectSchema.parse({
340
381
  profile,
341
382
  userId: identity.userId,
@@ -437,6 +478,24 @@ export class McpCapabilityPolicy {
437
478
  if (subject.isOnboarding && !ONBOARDING_ALLOWED.has(toolName)) {
438
479
  return { allowed: false, reason: 'onboarding_required', reach: rule.reach };
439
480
  }
481
+ if (subject.profile === 'hermes_agent') {
482
+ const requirement = HERMES_AGENT_MCP_TOOL_PERMISSIONS.get(toolName);
483
+ if (!requirement)
484
+ return { allowed: false, reason: 'tool_unclassified' };
485
+ return subject.permissions.includes(requirement.action)
486
+ ? {
487
+ allowed: true,
488
+ reason: 'permission_granted',
489
+ reach: requirement.reach,
490
+ requiredPermissions: [requirement.action],
491
+ }
492
+ : {
493
+ allowed: false,
494
+ reason: 'permission_missing',
495
+ reach: requirement.reach,
496
+ requiredPermissions: [requirement.action],
497
+ };
498
+ }
440
499
  if (rule.access === 'delivery_only') {
441
500
  return subject.profile === 'delivery_agent'
442
501
  ? { allowed: true, reason: 'delivery', reach: rule.reach }
@@ -69,6 +69,12 @@ export interface NegotiationAgentInput {
69
69
  * falls back to the flat continuation history (byte-identical to before).
70
70
  */
71
71
  priorDialogue?: AttributedPriorDialogue;
72
+ /**
73
+ * Durable caller-owned execution identity. Timeout workers reuse this exact
74
+ * value across delivery retries; it is forwarded as model-run metadata for
75
+ * deterministic provider tracing/idempotency without entering the prompt.
76
+ */
77
+ executionId?: string;
72
78
  }
73
79
  export interface IndexNegotiatorConfig {
74
80
  /**
@@ -106,5 +112,5 @@ export declare class IndexNegotiator {
106
112
  protected callModel(model: ReturnType<typeof createStructuredModel>, chatMessages: Array<{
107
113
  role: string;
108
114
  content: string;
109
- }>): Promise<unknown>;
115
+ }>, executionId?: string): Promise<unknown>;
110
116
  }
@@ -56,7 +56,7 @@ const V2_INITIATOR_RULES = `- You hold the INITIATING seat: your user's side sur
56
56
  * prompt (or the schema) otherwise.
57
57
  */
58
58
  const ASK_USER_RULE = `
59
- - "ask_user" if you need {userName}'s OWN input before you can proceed — typically permission to disclose something sensitive (budget, availability, private details) or a fact only they know. This PAUSES the negotiation until they answer (up to 24h), so use it only when proceeding without their input would risk over-disclosure or a wrong call. You get AT MOST ONE client consultation per negotiation spend it well. Set askUser: { disclosureSubject: what you need permission for or need to know, draftQuestion: the question in your words }. Use "question" (not "ask_user") when the clarification should come from the other side.`;
59
+ - "ask_user" if you need {userName}'s OWN input before you can proceed. This PAUSES the negotiation until they answer (up to 24h), so use it only when proceeding without their input would risk over-disclosure or a wrong call. You get AT MOST ONE client consultation per negotiation. Set askUser to exactly one closed server category: { reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" }. Never write question text or instructions in askUser; the server owns all owner-facing copy. Use "question" (not "ask_user") when clarification should come from the other side.`;
60
60
  /** v2 counterparty seat: receiving stance — acceptance is this seat's decision alone. */
61
61
  const V2_COUNTERPARTY_RULES = `- You hold the RECEIVING seat: the other side reached out to {userName}. Whether to accept is YOUR seat's decision alone.
62
62
  - Evaluate the initiator's arguments. Either:
@@ -233,7 +233,7 @@ ${input.history.length === 0 && !input.isContinuation ? (version === "v2" && sea
233
233
  // out-of-vocabulary actions. Validate; retry once; then fall back to the
234
234
  // conservative seat-valid action instead of poisoning the turn history.
235
235
  for (let attempt = 0; attempt < 2; attempt++) {
236
- const result = await this.callModel(model, chatMessages);
236
+ const result = await this.callModel(model, chatMessages, input.executionId);
237
237
  const parsed = schema.safeParse(result);
238
238
  if (parsed.success)
239
239
  return parsed.data;
@@ -262,7 +262,9 @@ ${input.history.length === 0 && !input.isContinuation ? (version === "v2" && sea
262
262
  * Raw structured-model round trip. Split out as a seam so tests can drive
263
263
  * the validate→retry→fallback loop without a live provider.
264
264
  */
265
- async callModel(model, chatMessages) {
266
- return invokeWithAbortSignal(model, chatMessages, AbortSignal.timeout(this.turnTimeoutMs));
265
+ async callModel(model, chatMessages, executionId) {
266
+ return invokeWithAbortSignal(model, chatMessages, AbortSignal.timeout(this.turnTimeoutMs), executionId
267
+ ? { metadata: { timeoutExecutionId: executionId }, tags: ['negotiation-timeout'] }
268
+ : undefined);
267
269
  }
268
270
  }
@@ -1,3 +1,4 @@
1
+ import { expectedNegotiationSpeaker } from '../domain/negotiation.expected-speaker.js';
1
2
  import { buildLifecycleNarration } from '../domain/negotiation.lifecycle-narration.js';
2
3
  import { allowedActionsFor, readProtocolVersion, resolveSeat } from '../domain/negotiation.protocol.js';
3
4
  /**
@@ -53,16 +54,12 @@ export async function readAuthorizedNegotiationDetail(input) {
53
54
  ? outcomeArtifact.parts?.find((part) => part.kind === 'data')?.data
54
55
  : null;
55
56
  const turnCount = messages.length;
56
- const lastSenderId = turnCount > 0 ? messages[turnCount - 1].senderId : null;
57
- const currentSpeaker = lastSenderId
58
- ? (lastSenderId === `agent:${metadata.sourceUserId}` ? 'candidate' : 'source')
59
- : (turnCount % 2 === 0 ? 'source' : 'candidate');
57
+ const expectedSpeaker = expectedNegotiationSpeaker(metadata, messages);
60
58
  const status = task.state === 'working' ? 'active'
61
59
  : task.state === 'waiting_for_agent' ? 'waiting_for_agent'
62
60
  : task.state === 'completed' ? 'completed'
63
61
  : task.state;
64
- const isUsersTurn = status !== 'completed' &&
65
- ((isSource && currentSpeaker === 'source') || (!isSource && currentSpeaker === 'candidate'));
62
+ const isUsersTurn = status !== 'completed' && expectedSpeaker === callerUserId;
66
63
  const protocolVersion = readProtocolVersion(metadata) ?? 'v1';
67
64
  const seat = resolveSeat(callerUserId, metadata);
68
65
  const priorTurnCount = metadata.priorTurnCount ?? 0;
@@ -50,7 +50,7 @@ export declare class NegotiationGraphFactory {
50
50
  continuationExecution: import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined;
51
51
  continuationReceipt: NegotiationContinuationReceipt | undefined;
52
52
  privateConsultation: import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined;
53
- consultationPolicyReason: NegotiationConsultationReason | undefined;
53
+ consultationPolicyReason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined;
54
54
  conversationId: string;
55
55
  taskId: string;
56
56
  messages: import("../domain/negotiation.state.js").NegotiationMessage[];
@@ -69,8 +69,7 @@ export declare class NegotiationGraphFactory {
69
69
  };
70
70
  message?: string | null | undefined;
71
71
  askUser?: {
72
- disclosureSubject: string;
73
- draftQuestion?: string | null | undefined;
72
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
74
73
  } | null | undefined;
75
74
  } | null;
76
75
  status: "waiting_for_agent" | "input_required" | "completed" | "active";
@@ -118,7 +117,7 @@ export declare class NegotiationGraphFactory {
118
117
  continuationExecution?: import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined> | undefined;
119
118
  continuationReceipt?: NegotiationContinuationReceipt | import("@langchain/langgraph").OverwriteValue<NegotiationContinuationReceipt | undefined> | undefined;
120
119
  privateConsultation?: import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined> | undefined;
121
- consultationPolicyReason?: NegotiationConsultationReason | import("@langchain/langgraph").OverwriteValue<NegotiationConsultationReason | undefined> | undefined;
120
+ consultationPolicyReason?: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | import("@langchain/langgraph").OverwriteValue<"unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined> | undefined;
122
121
  conversationId?: string | import("@langchain/langgraph").OverwriteValue<string> | undefined;
123
122
  taskId?: string | import("@langchain/langgraph").OverwriteValue<string> | undefined;
124
123
  messages?: import("../domain/negotiation.state.js").NegotiationMessage[] | import("@langchain/langgraph").OverwriteValue<import("../domain/negotiation.state.js").NegotiationMessage[]> | undefined;
@@ -137,8 +136,7 @@ export declare class NegotiationGraphFactory {
137
136
  };
138
137
  message?: string | null | undefined;
139
138
  askUser?: {
140
- disclosureSubject: string;
141
- draftQuestion?: string | null | undefined;
139
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
142
140
  } | null | undefined;
143
141
  } | import("@langchain/langgraph").OverwriteValue<{
144
142
  action: "propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user";
@@ -151,8 +149,7 @@ export declare class NegotiationGraphFactory {
151
149
  };
152
150
  message?: string | null | undefined;
153
151
  askUser?: {
154
- disclosureSubject: string;
155
- draftQuestion?: string | null | undefined;
152
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
156
153
  } | null | undefined;
157
154
  } | null> | null | undefined;
158
155
  status?: "waiting_for_agent" | "input_required" | "completed" | "active" | import("@langchain/langgraph").OverwriteValue<"waiting_for_agent" | "input_required" | "completed" | "active"> | undefined;
@@ -212,7 +209,7 @@ export declare class NegotiationGraphFactory {
212
209
  continuationExecution: import("@langchain/langgraph").BaseChannel<import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined, import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined> | undefined, unknown>;
213
210
  continuationReceipt: import("@langchain/langgraph").BaseChannel<NegotiationContinuationReceipt | undefined, NegotiationContinuationReceipt | import("@langchain/langgraph").OverwriteValue<NegotiationContinuationReceipt | undefined> | undefined, unknown>;
214
211
  privateConsultation: import("@langchain/langgraph").BaseChannel<import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined, import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined> | undefined, unknown>;
215
- consultationPolicyReason: import("@langchain/langgraph").BaseChannel<NegotiationConsultationReason | undefined, NegotiationConsultationReason | import("@langchain/langgraph").OverwriteValue<NegotiationConsultationReason | undefined> | undefined, unknown>;
212
+ consultationPolicyReason: import("@langchain/langgraph").BaseChannel<"unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined, "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | import("@langchain/langgraph").OverwriteValue<"unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined> | undefined, unknown>;
216
213
  conversationId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
217
214
  taskId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
218
215
  messages: import("@langchain/langgraph").BaseChannel<import("../domain/negotiation.state.js").NegotiationMessage[], import("../domain/negotiation.state.js").NegotiationMessage[] | import("@langchain/langgraph").OverwriteValue<import("../domain/negotiation.state.js").NegotiationMessage[]>, unknown>;
@@ -231,8 +228,7 @@ export declare class NegotiationGraphFactory {
231
228
  };
232
229
  message?: string | null | undefined;
233
230
  askUser?: {
234
- disclosureSubject: string;
235
- draftQuestion?: string | null | undefined;
231
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
236
232
  } | null | undefined;
237
233
  } | null, {
238
234
  action: "propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user";
@@ -245,8 +241,7 @@ export declare class NegotiationGraphFactory {
245
241
  };
246
242
  message?: string | null | undefined;
247
243
  askUser?: {
248
- disclosureSubject: string;
249
- draftQuestion?: string | null | undefined;
244
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
250
245
  } | null | undefined;
251
246
  } | import("@langchain/langgraph").OverwriteValue<{
252
247
  action: "propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user";
@@ -259,8 +254,7 @@ export declare class NegotiationGraphFactory {
259
254
  };
260
255
  message?: string | null | undefined;
261
256
  askUser?: {
262
- disclosureSubject: string;
263
- draftQuestion?: string | null | undefined;
257
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
264
258
  } | null | undefined;
265
259
  } | null> | null, unknown>;
266
260
  status: import("@langchain/langgraph").BaseChannel<"waiting_for_agent" | "input_required" | "completed" | "active", "waiting_for_agent" | "input_required" | "completed" | "active" | import("@langchain/langgraph").OverwriteValue<"waiting_for_agent" | "input_required" | "completed" | "active">, unknown>;
@@ -329,7 +323,7 @@ export declare class NegotiationGraphFactory {
329
323
  continuationExecution: import("@langchain/langgraph").BaseChannel<import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined, import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined> | undefined, unknown>;
330
324
  continuationReceipt: import("@langchain/langgraph").BaseChannel<NegotiationContinuationReceipt | undefined, NegotiationContinuationReceipt | import("@langchain/langgraph").OverwriteValue<NegotiationContinuationReceipt | undefined> | undefined, unknown>;
331
325
  privateConsultation: import("@langchain/langgraph").BaseChannel<import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined, import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined> | undefined, unknown>;
332
- consultationPolicyReason: import("@langchain/langgraph").BaseChannel<NegotiationConsultationReason | undefined, NegotiationConsultationReason | import("@langchain/langgraph").OverwriteValue<NegotiationConsultationReason | undefined> | undefined, unknown>;
326
+ consultationPolicyReason: import("@langchain/langgraph").BaseChannel<"unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined, "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | import("@langchain/langgraph").OverwriteValue<"unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined> | undefined, unknown>;
333
327
  conversationId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
334
328
  taskId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
335
329
  messages: import("@langchain/langgraph").BaseChannel<import("../domain/negotiation.state.js").NegotiationMessage[], import("../domain/negotiation.state.js").NegotiationMessage[] | import("@langchain/langgraph").OverwriteValue<import("../domain/negotiation.state.js").NegotiationMessage[]>, unknown>;
@@ -348,8 +342,7 @@ export declare class NegotiationGraphFactory {
348
342
  };
349
343
  message?: string | null | undefined;
350
344
  askUser?: {
351
- disclosureSubject: string;
352
- draftQuestion?: string | null | undefined;
345
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
353
346
  } | null | undefined;
354
347
  } | null, {
355
348
  action: "propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user";
@@ -362,8 +355,7 @@ export declare class NegotiationGraphFactory {
362
355
  };
363
356
  message?: string | null | undefined;
364
357
  askUser?: {
365
- disclosureSubject: string;
366
- draftQuestion?: string | null | undefined;
358
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
367
359
  } | null | undefined;
368
360
  } | import("@langchain/langgraph").OverwriteValue<{
369
361
  action: "propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user";
@@ -376,8 +368,7 @@ export declare class NegotiationGraphFactory {
376
368
  };
377
369
  message?: string | null | undefined;
378
370
  askUser?: {
379
- disclosureSubject: string;
380
- draftQuestion?: string | null | undefined;
371
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
381
372
  } | null | undefined;
382
373
  } | null> | null, unknown>;
383
374
  status: import("@langchain/langgraph").BaseChannel<"waiting_for_agent" | "input_required" | "completed" | "active", "waiting_for_agent" | "input_required" | "completed" | "active" | import("@langchain/langgraph").OverwriteValue<"waiting_for_agent" | "input_required" | "completed" | "active">, unknown>;
@@ -501,7 +492,7 @@ export declare class NegotiationGraphFactory {
501
492
  continuationExecution: import("@langchain/langgraph").BaseChannel<import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined, import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationContinuationExecution | undefined> | undefined, unknown>;
502
493
  continuationReceipt: import("@langchain/langgraph").BaseChannel<NegotiationContinuationReceipt | undefined, NegotiationContinuationReceipt | import("@langchain/langgraph").OverwriteValue<NegotiationContinuationReceipt | undefined> | undefined, unknown>;
503
494
  privateConsultation: import("@langchain/langgraph").BaseChannel<import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined, import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | import("@langchain/langgraph").OverwriteValue<import("../../shared/interfaces/database.interface.js").NegotiationPrivateConsultation | undefined> | undefined, unknown>;
504
- consultationPolicyReason: import("@langchain/langgraph").BaseChannel<NegotiationConsultationReason | undefined, NegotiationConsultationReason | import("@langchain/langgraph").OverwriteValue<NegotiationConsultationReason | undefined> | undefined, unknown>;
495
+ consultationPolicyReason: import("@langchain/langgraph").BaseChannel<"unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined, "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | import("@langchain/langgraph").OverwriteValue<"unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority" | undefined> | undefined, unknown>;
505
496
  conversationId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
506
497
  taskId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
507
498
  messages: import("@langchain/langgraph").BaseChannel<import("../domain/negotiation.state.js").NegotiationMessage[], import("../domain/negotiation.state.js").NegotiationMessage[] | import("@langchain/langgraph").OverwriteValue<import("../domain/negotiation.state.js").NegotiationMessage[]>, unknown>;
@@ -520,8 +511,7 @@ export declare class NegotiationGraphFactory {
520
511
  };
521
512
  message?: string | null | undefined;
522
513
  askUser?: {
523
- disclosureSubject: string;
524
- draftQuestion?: string | null | undefined;
514
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
525
515
  } | null | undefined;
526
516
  } | null, {
527
517
  action: "propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user";
@@ -534,8 +524,7 @@ export declare class NegotiationGraphFactory {
534
524
  };
535
525
  message?: string | null | undefined;
536
526
  askUser?: {
537
- disclosureSubject: string;
538
- draftQuestion?: string | null | undefined;
527
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
539
528
  } | null | undefined;
540
529
  } | import("@langchain/langgraph").OverwriteValue<{
541
530
  action: "propose" | "accept" | "reject" | "counter" | "question" | "outreach" | "withdraw" | "decline" | "ask_user";
@@ -548,8 +537,7 @@ export declare class NegotiationGraphFactory {
548
537
  };
549
538
  message?: string | null | undefined;
550
539
  askUser?: {
551
- disclosureSubject: string;
552
- draftQuestion?: string | null | undefined;
540
+ reason: "unresolved_owner_constraint" | "consequential_disclosure_permission" | "repeated_non_convergence" | "insufficient_commitment_authority";
553
541
  } | null | undefined;
554
542
  } | null> | null, unknown>;
555
543
  status: import("@langchain/langgraph").BaseChannel<"waiting_for_agent" | "input_required" | "completed" | "active", "waiting_for_agent" | "input_required" | "completed" | "active" | import("@langchain/langgraph").OverwriteValue<"waiting_for_agent" | "input_required" | "completed" | "active">, unknown>;