@contractspec/lib.support-bot 0.0.0-canary-20260113170453

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 (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -0
  3. package/dist/ai-agent/src/agent/contract-spec-agent.d.ts +5 -0
  4. package/dist/ai-agent/src/agent/index.d.ts +2 -0
  5. package/dist/ai-agent/src/agent/unified-agent.d.ts +3 -0
  6. package/dist/ai-agent/src/approval/index.d.ts +1 -0
  7. package/dist/ai-agent/src/approval/workflow.d.ts +1 -0
  8. package/dist/ai-agent/src/exporters/claude-agent-exporter.d.ts +2 -0
  9. package/dist/ai-agent/src/exporters/index.d.ts +3 -0
  10. package/dist/ai-agent/src/exporters/opencode-exporter.d.ts +2 -0
  11. package/dist/ai-agent/src/exporters/types.d.ts +2 -0
  12. package/dist/ai-agent/src/index.d.ts +14 -0
  13. package/dist/ai-agent/src/interop/index.d.ts +3 -0
  14. package/dist/ai-agent/src/interop/spec-consumer.d.ts +2 -0
  15. package/dist/ai-agent/src/interop/tool-consumer.d.ts +3 -0
  16. package/dist/ai-agent/src/interop/types.d.ts +2 -0
  17. package/dist/ai-agent/src/knowledge/index.d.ts +1 -0
  18. package/dist/ai-agent/src/knowledge/injector.d.ts +1 -0
  19. package/dist/ai-agent/src/providers/claude-agent-sdk/adapter.d.ts +2 -0
  20. package/dist/ai-agent/src/providers/claude-agent-sdk/index.d.ts +3 -0
  21. package/dist/ai-agent/src/providers/claude-agent-sdk/session-bridge.d.ts +1 -0
  22. package/dist/ai-agent/src/providers/claude-agent-sdk/tool-bridge.d.ts +3 -0
  23. package/dist/ai-agent/src/providers/index.d.ts +4 -0
  24. package/dist/ai-agent/src/providers/opencode-sdk/adapter.d.ts +2 -0
  25. package/dist/ai-agent/src/providers/opencode-sdk/agent-bridge.d.ts +3 -0
  26. package/dist/ai-agent/src/providers/opencode-sdk/index.d.ts +3 -0
  27. package/dist/ai-agent/src/providers/opencode-sdk/tool-bridge.d.ts +3 -0
  28. package/dist/ai-agent/src/providers/registry.d.ts +1 -0
  29. package/dist/ai-agent/src/providers/types.d.ts +3 -0
  30. package/dist/ai-agent/src/schema/index.d.ts +2 -0
  31. package/dist/ai-agent/src/schema/json-schema-to-zod.d.ts +1 -0
  32. package/dist/ai-agent/src/schema/schema-output.d.ts +2 -0
  33. package/dist/ai-agent/src/session/index.d.ts +1 -0
  34. package/dist/ai-agent/src/session/store.d.ts +2 -0
  35. package/dist/ai-agent/src/spec/index.d.ts +2 -0
  36. package/dist/ai-agent/src/spec/registry.d.ts +2 -0
  37. package/dist/ai-agent/src/spec/spec.d.ts +115 -0
  38. package/dist/ai-agent/src/spec/spec.d.ts.map +1 -0
  39. package/dist/ai-agent/src/telemetry/adapter.d.ts +1 -0
  40. package/dist/ai-agent/src/telemetry/index.d.ts +1 -0
  41. package/dist/ai-agent/src/tools/index.d.ts +4 -0
  42. package/dist/ai-agent/src/tools/knowledge-tool.d.ts +2 -0
  43. package/dist/ai-agent/src/tools/mcp-client.d.ts +1 -0
  44. package/dist/ai-agent/src/tools/mcp-server.d.ts +3 -0
  45. package/dist/ai-agent/src/tools/tool-adapter.d.ts +3 -0
  46. package/dist/ai-agent/src/types.d.ts +1 -0
  47. package/dist/bot/auto-responder.d.ts +26 -0
  48. package/dist/bot/auto-responder.d.ts.map +1 -0
  49. package/dist/bot/auto-responder.js +84 -0
  50. package/dist/bot/auto-responder.js.map +1 -0
  51. package/dist/bot/feedback-loop.d.ts +20 -0
  52. package/dist/bot/feedback-loop.d.ts.map +1 -0
  53. package/dist/bot/feedback-loop.js +35 -0
  54. package/dist/bot/feedback-loop.js.map +1 -0
  55. package/dist/bot/index.d.ts +4 -0
  56. package/dist/bot/index.js +5 -0
  57. package/dist/bot/tools.d.ts +15 -0
  58. package/dist/bot/tools.d.ts.map +1 -0
  59. package/dist/bot/tools.js +137 -0
  60. package/dist/bot/tools.js.map +1 -0
  61. package/dist/contracts/src/app-config/lifecycle.d.ts +1 -0
  62. package/dist/contracts/src/app-config/runtime.d.ts +13 -0
  63. package/dist/contracts/src/app-config/spec.d.ts +9 -0
  64. package/dist/contracts/src/capabilities/capabilities.d.ts +1 -0
  65. package/dist/contracts/src/capabilities/index.d.ts +2 -0
  66. package/dist/contracts/src/capabilities/openbanking.d.ts +1 -0
  67. package/dist/contracts/src/data-views/index.d.ts +3 -0
  68. package/dist/contracts/src/data-views/registry.d.ts +2 -0
  69. package/dist/contracts/src/data-views/spec.d.ts +2 -0
  70. package/dist/contracts/src/data-views/types.d.ts +2 -0
  71. package/dist/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.d.ts +1 -0
  72. package/dist/contracts/src/docs/index.d.ts +25 -0
  73. package/dist/contracts/src/docs/presentations.d.ts +2 -0
  74. package/dist/contracts/src/docs/registry.d.ts +10 -0
  75. package/dist/contracts/src/docs/registry.d.ts.map +1 -0
  76. package/dist/contracts/src/docs/tech/auth/better-auth-nextjs.docblock.d.ts +1 -0
  77. package/dist/contracts/src/docs/tech/contracts/README.docblock.d.ts +1 -0
  78. package/dist/contracts/src/docs/tech/contracts/openapi-export.docblock.d.ts +1 -0
  79. package/dist/contracts/src/docs/tech/contracts/openapi-import.docblock.d.ts +1 -0
  80. package/dist/contracts/src/docs/tech/lifecycle-stage-system.docblock.d.ts +1 -0
  81. package/dist/contracts/src/docs/tech/llm/llm-integration.docblock.d.ts +1 -0
  82. package/dist/contracts/src/docs/tech/mcp-endpoints.docblock.d.ts +1 -0
  83. package/dist/contracts/src/docs/tech/presentation-runtime.docblock.d.ts +1 -0
  84. package/dist/contracts/src/docs/tech/schema/README.docblock.d.ts +1 -0
  85. package/dist/contracts/src/docs/tech/studio/learning-events.docblock.d.ts +1 -0
  86. package/dist/contracts/src/docs/tech/studio/learning-journeys.docblock.d.ts +1 -0
  87. package/dist/contracts/src/docs/tech/studio/platform-admin-panel.docblock.d.ts +1 -0
  88. package/dist/contracts/src/docs/tech/studio/project-access-teams.docblock.d.ts +1 -0
  89. package/dist/contracts/src/docs/tech/studio/project-routing.docblock.d.ts +1 -0
  90. package/dist/contracts/src/docs/tech/studio/sandbox-unlogged.docblock.d.ts +1 -0
  91. package/dist/contracts/src/docs/tech/studio/team-invitations.docblock.d.ts +1 -0
  92. package/dist/contracts/src/docs/tech/studio/workspace-ops.docblock.d.ts +1 -0
  93. package/dist/contracts/src/docs/tech/studio/workspaces.docblock.d.ts +1 -0
  94. package/dist/contracts/src/docs/tech/telemetry-ingest.docblock.d.ts +1 -0
  95. package/dist/contracts/src/docs/tech/vscode-extension.docblock.d.ts +1 -0
  96. package/dist/contracts/src/events.d.ts +4 -0
  97. package/dist/contracts/src/experiments/spec-resolver.d.ts +4 -0
  98. package/dist/contracts/src/experiments/spec.d.ts +4 -0
  99. package/dist/contracts/src/features/index.d.ts +4 -0
  100. package/dist/contracts/src/features/install.d.ts +6 -0
  101. package/dist/contracts/src/features/registry.d.ts +2 -0
  102. package/dist/contracts/src/features/types.d.ts +5 -0
  103. package/dist/contracts/src/features/validation.d.ts +2 -0
  104. package/dist/contracts/src/install.d.ts +7 -0
  105. package/dist/contracts/src/integrations/connection.d.ts +1 -0
  106. package/dist/contracts/src/integrations/providers/llm.d.ts +83 -0
  107. package/dist/contracts/src/integrations/providers/llm.d.ts.map +1 -0
  108. package/dist/contracts/src/integrations/spec.d.ts +3 -0
  109. package/dist/contracts/src/knowledge/spec.d.ts +9 -0
  110. package/dist/contracts/src/knowledge/spec.d.ts.map +1 -0
  111. package/dist/contracts/src/operations/index.d.ts +2 -0
  112. package/dist/contracts/src/operations/operation.d.ts +6 -0
  113. package/dist/contracts/src/operations/registry.d.ts +6 -0
  114. package/dist/contracts/src/ownership.d.ts +61 -0
  115. package/dist/contracts/src/ownership.d.ts.map +1 -0
  116. package/dist/contracts/src/policy/registry.d.ts +2 -0
  117. package/dist/contracts/src/policy/spec.d.ts +11 -0
  118. package/dist/contracts/src/policy/spec.d.ts.map +1 -0
  119. package/dist/contracts/src/presentations/index.d.ts +3 -0
  120. package/dist/contracts/src/presentations/presentations.d.ts +2 -0
  121. package/dist/contracts/src/presentations/registry.d.ts +2 -0
  122. package/dist/contracts/src/presentations/transform-engine.d.ts +2 -0
  123. package/dist/contracts/src/registry-utils.d.ts +1 -0
  124. package/dist/contracts/src/registry.d.ts +3 -0
  125. package/dist/contracts/src/resources.d.ts +2 -0
  126. package/dist/contracts/src/telemetry/anomaly.d.ts +2 -0
  127. package/dist/contracts/src/telemetry/index.d.ts +3 -0
  128. package/dist/contracts/src/telemetry/spec.d.ts +2 -0
  129. package/dist/contracts/src/telemetry/tracker.d.ts +2 -0
  130. package/dist/contracts/src/tests/spec.d.ts +1 -0
  131. package/dist/contracts/src/themes.d.ts +2 -0
  132. package/dist/contracts/src/types.d.ts +5 -0
  133. package/dist/contracts/src/workflow/overview.docblock.d.ts +1 -0
  134. package/dist/contracts/src/workflow/spec.d.ts +5 -0
  135. package/dist/contracts/src/workspace-config/workspace-config.docblock.d.ts +1 -0
  136. package/dist/index.d.ts +11 -0
  137. package/dist/index.js +9 -0
  138. package/dist/rag/index.d.ts +2 -0
  139. package/dist/rag/index.js +3 -0
  140. package/dist/rag/ticket-resolver.d.ts +25 -0
  141. package/dist/rag/ticket-resolver.d.ts.map +1 -0
  142. package/dist/rag/ticket-resolver.js +64 -0
  143. package/dist/rag/ticket-resolver.js.map +1 -0
  144. package/dist/schema/src/EnumType.d.ts +2 -0
  145. package/dist/schema/src/FieldType.d.ts +2 -0
  146. package/dist/schema/src/GraphQLSchemaType.d.ts +2 -0
  147. package/dist/schema/src/JsonSchemaType.d.ts +2 -0
  148. package/dist/schema/src/ScalarTypeEnum.d.ts +1 -0
  149. package/dist/schema/src/SchemaModel.d.ts +4 -0
  150. package/dist/schema/src/SchemaModelType.d.ts +1 -0
  151. package/dist/schema/src/ZodSchemaType.d.ts +2 -0
  152. package/dist/schema/src/entity/defineEntity.d.ts +1 -0
  153. package/dist/schema/src/entity/generator.d.ts +1 -0
  154. package/dist/schema/src/entity/index.d.ts +3 -0
  155. package/dist/schema/src/entity/types.d.ts +1 -0
  156. package/dist/schema/src/index.d.ts +9 -0
  157. package/dist/spec.d.ts +14 -0
  158. package/dist/spec.d.ts.map +1 -0
  159. package/dist/spec.js +35 -0
  160. package/dist/spec.js.map +1 -0
  161. package/dist/tickets/classifier.d.ts +25 -0
  162. package/dist/tickets/classifier.d.ts.map +1 -0
  163. package/dist/tickets/classifier.js +199 -0
  164. package/dist/tickets/classifier.js.map +1 -0
  165. package/dist/tickets/index.d.ts +2 -0
  166. package/dist/tickets/index.js +3 -0
  167. package/dist/types.d.ts +77 -0
  168. package/dist/types.d.ts.map +1 -0
  169. package/dist/types.js +0 -0
  170. package/package.json +85 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Chaman Ventures, SASU
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # @contractspec/lib.support-bot
2
+
3
+ Website: https://contractspec.io/
4
+
5
+
6
+ Production-ready building blocks for AI-first support desks powered by ContractSpec. The library wires knowledge-grounded responses, ticket classification, auto-resolutions, and performance telemetry into `@contractspec/lib.ai-agent`.
7
+
8
+ ## Highlights
9
+
10
+ - **TicketClassifier** – fast heuristics + optional LLM validation for category, priority, urgency, and sentiment.
11
+ - **TicketResolver** – multi-space RAG pipeline that cites references and surfaces confidence scores.
12
+ - **AutoResponder** – generates tone-aware replies, adds policy disclaimers, and escalates when risky.
13
+ - **FeedbackLoop** – records outcomes, tunes confidence thresholds, and syncs new knowledge back.
14
+ - **Agent Tools** – helpers to expose the above capabilities as `AgentRunner` tools in one line.
15
+
16
+ ## Quickstart
17
+
18
+ ```ts
19
+ import { defineSupportBot, TicketResolver, TicketClassifier, createSupportTools } from '@contractspec/lib.support-bot';
20
+ import { AgentRegistry, AgentRunner, ToolExecutor } from '@contractspec/lib.ai-agent';
21
+
22
+ const SupportBot = defineSupportBot({
23
+ base: {
24
+ meta: { name: 'support.bot', version: '1.0.0', owners: ['team-support'], domain: 'operations' },
25
+ instructions: 'Resolve support tickets with empathy. Escalate if billing or compliance risk.',
26
+ tools: [{ name: 'resolve_ticket' }, { name: 'escalate_ticket' }],
27
+ },
28
+ escalation: { confidenceThreshold: 0.75 },
29
+ });
30
+
31
+ const resolver = new TicketResolver({ knowledge: knowledgeQueryService });
32
+ const classifier = new TicketClassifier();
33
+ const tools = createSupportTools({ resolver, classifier });
34
+
35
+ const registry = new AgentRegistry().register(SupportBot);
36
+ const runner = new AgentRunner({
37
+ registry,
38
+ llm: mistralProvider,
39
+ toolExecutor: new ToolExecutor({ tools }),
40
+ });
41
+
42
+ const outcome = await runner.run({
43
+ agent: 'support.bot',
44
+ input: 'My payout failed yesterday and it is urgent',
45
+ tenantId: 'acme',
46
+ });
47
+ ```
48
+
49
+ See `/packages/examples/ai-support-bot` for an end-to-end integration with ticket ingestion, review queues, and analytics.
@@ -0,0 +1,5 @@
1
+ import "../spec/spec.js";
2
+ import "../types.js";
3
+ import "../session/store.js";
4
+ import "../telemetry/adapter.js";
5
+ import "ai";
@@ -0,0 +1,2 @@
1
+ import "./contract-spec-agent.js";
2
+ import "./unified-agent.js";
@@ -0,0 +1,3 @@
1
+ import "../spec/spec.js";
2
+ import "../types.js";
3
+ import "../providers/types.js";
@@ -0,0 +1 @@
1
+ import "./workflow.js";
@@ -0,0 +1 @@
1
+ import "../types.js";
@@ -0,0 +1,2 @@
1
+ import "../spec/spec.js";
2
+ import "./types.js";
@@ -0,0 +1,3 @@
1
+ import "./types.js";
2
+ import "./claude-agent-exporter.js";
3
+ import "./opencode-exporter.js";
@@ -0,0 +1,2 @@
1
+ import "../spec/spec.js";
2
+ import "./types.js";
@@ -0,0 +1,2 @@
1
+ import "../spec/spec.js";
2
+ import "../providers/types.js";
@@ -0,0 +1,14 @@
1
+ import { AgentConfidencePolicy, AgentEscalationPolicy, AgentKnowledgeRef, AgentMemoryConfig, AgentMeta, AgentPolicy, AgentSpec, AgentToolConfig } from "./spec/spec.js";
2
+ import "./types.js";
3
+ import "./agent/index.js";
4
+ import "./spec/index.js";
5
+ import "./tools/index.js";
6
+ import "./schema/index.js";
7
+ import "./knowledge/index.js";
8
+ import "./session/index.js";
9
+ import "./telemetry/index.js";
10
+ import "./approval/index.js";
11
+ import "./providers/index.js";
12
+ import "./exporters/index.js";
13
+ import "./interop/index.js";
14
+ import "ai";
@@ -0,0 +1,3 @@
1
+ import "./types.js";
2
+ import "./spec-consumer.js";
3
+ import "./tool-consumer.js";
@@ -0,0 +1,2 @@
1
+ import "../spec/spec.js";
2
+ import "./types.js";
@@ -0,0 +1,3 @@
1
+ import "../spec/spec.js";
2
+ import "../types.js";
3
+ import "./types.js";
@@ -0,0 +1,2 @@
1
+ import "../spec/spec.js";
2
+ import "../types.js";
@@ -0,0 +1 @@
1
+ import "./injector.js";
@@ -0,0 +1 @@
1
+ import "../spec/spec.js";
@@ -0,0 +1,2 @@
1
+ import "../../spec/spec.js";
2
+ import "../types.js";
@@ -0,0 +1,3 @@
1
+ import "./adapter.js";
2
+ import "./tool-bridge.js";
3
+ import "./session-bridge.js";
@@ -0,0 +1 @@
1
+ import "../../types.js";
@@ -0,0 +1,3 @@
1
+ import "../../spec/spec.js";
2
+ import "../../types.js";
3
+ import "../types.js";
@@ -0,0 +1,4 @@
1
+ import "./types.js";
2
+ import "./claude-agent-sdk/index.js";
3
+ import "./opencode-sdk/index.js";
4
+ import "./registry.js";
@@ -0,0 +1,2 @@
1
+ import "../../spec/spec.js";
2
+ import "../types.js";
@@ -0,0 +1,3 @@
1
+ import "../../spec/spec.js";
2
+ import "../types.js";
3
+ import "./tool-bridge.js";
@@ -0,0 +1,3 @@
1
+ import "./adapter.js";
2
+ import "./tool-bridge.js";
3
+ import "./agent-bridge.js";
@@ -0,0 +1,3 @@
1
+ import "../../spec/spec.js";
2
+ import "../../types.js";
3
+ import "../types.js";
@@ -0,0 +1 @@
1
+ import "./types.js";
@@ -0,0 +1,3 @@
1
+ import "../spec/spec.js";
2
+ import "../types.js";
3
+ import "../tools/mcp-client.js";
@@ -0,0 +1,2 @@
1
+ import "./json-schema-to-zod.js";
2
+ import "./schema-output.js";
@@ -0,0 +1 @@
1
+ import "zod";
@@ -0,0 +1,2 @@
1
+ import "zod";
2
+ import "ai";
@@ -0,0 +1 @@
1
+ import "./store.js";
@@ -0,0 +1,2 @@
1
+ import "../types.js";
2
+ import "ai";
@@ -0,0 +1,2 @@
1
+ import { AgentConfidencePolicy, AgentEscalationPolicy, AgentKnowledgeRef, AgentMemoryConfig, AgentMeta, AgentPolicy, AgentSpec, AgentToolConfig } from "./spec.js";
2
+ import "./registry.js";
@@ -0,0 +1,2 @@
1
+ import "../../../contracts/src/registry.js";
2
+ import "./spec.js";
@@ -0,0 +1,115 @@
1
+ import { OwnerShipMeta } from "../../../contracts/src/ownership.js";
2
+ import { PolicyRef } from "../../../contracts/src/policy/spec.js";
3
+ import { KnowledgeCategory } from "../../../contracts/src/knowledge/spec.js";
4
+
5
+ //#region ../ai-agent/src/spec/spec.d.ts
6
+
7
+ /**
8
+ * Metadata for an agent specification.
9
+ */
10
+ type AgentMeta = OwnerShipMeta;
11
+ /**
12
+ * Configuration for a tool that an agent can use.
13
+ */
14
+ interface AgentToolConfig {
15
+ /** Tool name (unique within the agent) */
16
+ name: string;
17
+ /** Human-readable description for the LLM */
18
+ description?: string;
19
+ /** JSON Schema fragment for tool parameters */
20
+ schema?: Record<string, unknown>;
21
+ /** Optional cooldown in milliseconds between invocations */
22
+ cooldownMs?: number;
23
+ /** Maximum execution time before timeout */
24
+ timeoutMs?: number;
25
+ /** Whether the tool can be executed without human approval (AI SDK needsApproval = !automationSafe) */
26
+ automationSafe?: boolean;
27
+ /** Explicit approval requirement (overrides automationSafe) */
28
+ requiresApproval?: boolean;
29
+ /** Optional policy guard that must evaluate to allow the tool call */
30
+ policy?: PolicyRef;
31
+ }
32
+ /**
33
+ * Reference to a knowledge space that the agent can access.
34
+ */
35
+ interface AgentKnowledgeRef {
36
+ /** Knowledge space key */
37
+ key: string;
38
+ /** Optional specific version */
39
+ version?: number;
40
+ /** Filter by knowledge category */
41
+ category?: KnowledgeCategory;
42
+ /** Whether the knowledge is required (static injection) or optional (dynamic RAG) */
43
+ required?: boolean;
44
+ /** Additional instructions appended when the space is available */
45
+ instructions?: string;
46
+ }
47
+ /**
48
+ * Memory configuration for agent session persistence.
49
+ */
50
+ interface AgentMemoryConfig {
51
+ /** Maximum entries to keep in memory */
52
+ maxEntries?: number;
53
+ /** Time-to-live in minutes */
54
+ ttlMinutes?: number;
55
+ /** Number of messages before triggering summarization */
56
+ summaryTrigger?: number;
57
+ /** Whether to persist to long-term storage */
58
+ persistLongTerm?: boolean;
59
+ }
60
+ /**
61
+ * Confidence policy for agent responses.
62
+ */
63
+ interface AgentConfidencePolicy {
64
+ /** Minimum acceptable confidence before escalation. Defaults to 0.7 */
65
+ min?: number;
66
+ /** Default value used when provider does not report confidence */
67
+ default?: number;
68
+ }
69
+ /**
70
+ * Escalation policy for handling uncertain or failed agent responses.
71
+ */
72
+ interface AgentEscalationPolicy {
73
+ /** Auto escalate when confidence < threshold */
74
+ confidenceThreshold?: number;
75
+ /** Escalate when a tool throws irrecoverable errors */
76
+ onToolFailure?: boolean;
77
+ /** Escalate when iteration budget exceeded */
78
+ onTimeout?: boolean;
79
+ /** Optional human approval workflow ID */
80
+ approvalWorkflow?: string;
81
+ }
82
+ /**
83
+ * Combined policy configuration for an agent.
84
+ */
85
+ interface AgentPolicy {
86
+ confidence?: AgentConfidencePolicy;
87
+ escalation?: AgentEscalationPolicy;
88
+ /** Feature flags to apply to this agent */
89
+ flags?: string[];
90
+ }
91
+ /**
92
+ * Complete specification for a ContractSpec agent.
93
+ */
94
+ interface AgentSpec {
95
+ meta: AgentMeta;
96
+ /** System instructions for the agent */
97
+ instructions: string;
98
+ /** Human-readable description */
99
+ description?: string;
100
+ /** Tags for categorization */
101
+ tags?: string[];
102
+ /** Tools the agent can use */
103
+ tools: AgentToolConfig[];
104
+ /** Memory/session configuration */
105
+ memory?: AgentMemoryConfig;
106
+ /** Knowledge spaces the agent can access */
107
+ knowledge?: AgentKnowledgeRef[];
108
+ /** Policy configuration */
109
+ policy?: AgentPolicy;
110
+ /** Maximum steps per generation (defaults to 10) */
111
+ maxSteps?: number;
112
+ }
113
+ //#endregion
114
+ export { AgentConfidencePolicy, AgentEscalationPolicy, AgentKnowledgeRef, AgentMemoryConfig, AgentMeta, AgentPolicy, AgentSpec, AgentToolConfig };
115
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","names":[],"sources":["../../../../../ai-agent/src/spec/spec.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAOA;AAKiB,KALL,SAAA,GAAY,aAWb;AAgBX;AAgBA;AAcA;AAUiB,UA9DA,eAAA,CA8DqB;EAcrB;EAUA,IAAA,EAAA,MAAS;EAClB;EAQC,WAAA,CAAA,EAAA,MAAA;EAEE;EAEG,MAAA,CAAA,EA7FH,MA6FG,CAAA,MAAA,EAAA,OAAA,CAAA;EAEH;EAAW,UAAA,CAAA,EAAA,MAAA;;;;;;;;WArFX;;;;;UAMM,iBAAA;;;;;;aAMJ;;;;;;;;;UAUI,iBAAA;;;;;;;;;;;;;UAcA,qBAAA;;;;;;;;;UAUA,qBAAA;;;;;;;;;;;;;UAcA,WAAA;eACF;eACA;;;;;;;UAQE,SAAA;QACT;;;;;;;;SAQC;;WAEE;;cAEG;;WAEH"}
@@ -0,0 +1 @@
1
+ import "ai";
@@ -0,0 +1 @@
1
+ import "./adapter.js";
@@ -0,0 +1,4 @@
1
+ import "./mcp-client.js";
2
+ import "./tool-adapter.js";
3
+ import "./knowledge-tool.js";
4
+ import "./mcp-server.js";
@@ -0,0 +1,2 @@
1
+ import "../spec/spec.js";
2
+ import "ai";
@@ -0,0 +1 @@
1
+ import "ai";
@@ -0,0 +1,3 @@
1
+ import "../spec/spec.js";
2
+ import "../agent/contract-spec-agent.js";
3
+ import "@modelcontextprotocol/sdk/server/mcp.js";
@@ -0,0 +1,3 @@
1
+ import "../spec/spec.js";
2
+ import "../types.js";
3
+ import "ai";
@@ -0,0 +1 @@
1
+ import "ai";
@@ -0,0 +1,26 @@
1
+ import { LLMProvider } from "../contracts/src/integrations/providers/llm.js";
2
+ import { SupportResolution, SupportResponseDraft, SupportTicket, TicketClassification } from "../types.js";
3
+
4
+ //#region src/bot/auto-responder.d.ts
5
+ interface AutoResponderOptions {
6
+ llm?: LLMProvider;
7
+ model?: string;
8
+ tone?: 'friendly' | 'formal';
9
+ closing?: string;
10
+ }
11
+ declare class AutoResponder {
12
+ private readonly llm?;
13
+ private readonly model?;
14
+ private readonly tone;
15
+ private readonly closing;
16
+ constructor(options?: AutoResponderOptions);
17
+ draft(ticket: SupportTicket, resolution: SupportResolution, classification: TicketClassification): Promise<SupportResponseDraft>;
18
+ private generateWithLLM;
19
+ private generateTemplate;
20
+ private buildDraft;
21
+ private renderCategoryIntro;
22
+ private renderCitations;
23
+ }
24
+ //#endregion
25
+ export { AutoResponder, AutoResponderOptions };
26
+ //# sourceMappingURL=auto-responder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-responder.d.ts","names":[],"sources":["../../src/bot/auto-responder.ts"],"sourcesContent":[],"mappings":";;;;UAQiB,oBAAA;QACT;EADS,KAAA,CAAA,EAAA,MAAA;EAOJ,IAAA,CAAA,EAAA,UAAa,GAAA,QAAA;EAMF,OAAA,CAAA,EAAA,MAAA;;AAaR,cAnBH,aAAA,CAmBG;EACI,iBAAA,GAAA;EACP,iBAAA,KAAA;EAAR,iBAAA,IAAA;EAAO,iBAAA,OAAA;wBAfY;gBAYZ,2BACI,mCACI,uBACf,QAAQ"}
@@ -0,0 +1,84 @@
1
+ //#region src/bot/auto-responder.ts
2
+ var AutoResponder = class {
3
+ llm;
4
+ model;
5
+ tone;
6
+ closing;
7
+ constructor(options) {
8
+ this.llm = options?.llm;
9
+ this.model = options?.model;
10
+ this.tone = options?.tone ?? "friendly";
11
+ this.closing = options?.closing ?? (this.tone === "friendly" ? "We remain available if you need anything else." : "Please let us know if you require additional assistance.");
12
+ }
13
+ async draft(ticket, resolution, classification) {
14
+ if (this.llm) return this.generateWithLLM(ticket, resolution, classification);
15
+ return this.generateTemplate(ticket, resolution, classification);
16
+ }
17
+ async generateWithLLM(ticket, resolution, classification) {
18
+ const prompt = `You are a ${this.tone} support agent. Draft an email response.
19
+ Ticket Subject: ${ticket.subject}
20
+ Ticket Body: ${ticket.body}
21
+ Detected Category: ${classification.category}
22
+ Detected Priority: ${classification.priority}
23
+ Resolution:
24
+ ${resolution.answer}
25
+ Citations: ${resolution.citations.map((c) => c.label).join(", ")}`;
26
+ const body = (await this.llm.chat([{
27
+ role: "system",
28
+ content: [{
29
+ type: "text",
30
+ text: "Write empathetic, accurate support replies that cite sources when relevant."
31
+ }]
32
+ }, {
33
+ role: "user",
34
+ content: [{
35
+ type: "text",
36
+ text: prompt
37
+ }]
38
+ }], { model: this.model })).message.content.map((part) => "text" in part ? part.text : "").join("").trim();
39
+ return this.buildDraft(ticket, resolution, classification, body);
40
+ }
41
+ generateTemplate(ticket, resolution, classification) {
42
+ const body = `${ticket.customerName ? `Hi ${ticket.customerName},` : "Hi there,"}
43
+
44
+ Thanks for contacting us about "${ticket.subject}". ${this.renderCategoryIntro(classification)}
45
+
46
+ ${resolution.answer}
47
+
48
+ ${this.renderCitations(resolution)}
49
+ ${this.closing}
50
+
51
+ — ContractSpec Support`;
52
+ return this.buildDraft(ticket, resolution, classification, body);
53
+ }
54
+ buildDraft(ticket, resolution, classification, body) {
55
+ return {
56
+ ticketId: ticket.id,
57
+ subject: ticket.subject.startsWith("Re:") ? ticket.subject : `Re: ${ticket.subject}`,
58
+ body,
59
+ confidence: Math.min(resolution.confidence, classification.confidence),
60
+ requiresEscalation: resolution.actions.some((action) => action.type === "escalate") || Boolean(classification.escalationRequired),
61
+ citations: resolution.citations
62
+ };
63
+ }
64
+ renderCategoryIntro(classification) {
65
+ switch (classification.category) {
66
+ case "billing": return "I understand billing issues can be stressful, so let me clarify the situation.";
67
+ case "technical": return "I see you encountered a technical issue. Here is what happened and how to fix it.";
68
+ case "product": return "Thanks for sharing feedback about the product. Here are the next steps.";
69
+ case "account": return "Account access is critical, so let me walk you through the resolution.";
70
+ case "compliance": return "Compliance questions require precision. See the policy-aligned answer below.";
71
+ default: return "Here is what we found after reviewing your request.";
72
+ }
73
+ }
74
+ renderCitations(resolution) {
75
+ if (!resolution.citations.length) return "";
76
+ return `References:\n${resolution.citations.map((citation, index) => {
77
+ return `- ${citation.label || `Source ${index + 1}`}${citation.url ? ` (${citation.url})` : ""}`;
78
+ }).join("\n")}`;
79
+ }
80
+ };
81
+
82
+ //#endregion
83
+ export { AutoResponder };
84
+ //# sourceMappingURL=auto-responder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-responder.js","names":[],"sources":["../../src/bot/auto-responder.ts"],"sourcesContent":["import type { LLMProvider } from '@contractspec/lib.contracts/integrations/providers/llm';\nimport type {\n SupportResponseDraft,\n SupportResolution,\n SupportTicket,\n TicketClassification,\n} from '../types';\n\nexport interface AutoResponderOptions {\n llm?: LLMProvider;\n model?: string;\n tone?: 'friendly' | 'formal';\n closing?: string;\n}\n\nexport class AutoResponder {\n private readonly llm?: LLMProvider;\n private readonly model?: string;\n private readonly tone: 'friendly' | 'formal';\n private readonly closing: string;\n\n constructor(options?: AutoResponderOptions) {\n this.llm = options?.llm;\n this.model = options?.model;\n this.tone = options?.tone ?? 'friendly';\n this.closing =\n options?.closing ??\n (this.tone === 'friendly'\n ? 'We remain available if you need anything else.'\n : 'Please let us know if you require additional assistance.');\n }\n\n async draft(\n ticket: SupportTicket,\n resolution: SupportResolution,\n classification: TicketClassification\n ): Promise<SupportResponseDraft> {\n if (this.llm) {\n return this.generateWithLLM(ticket, resolution, classification);\n }\n return this.generateTemplate(ticket, resolution, classification);\n }\n\n private async generateWithLLM(\n ticket: SupportTicket,\n resolution: SupportResolution,\n classification: TicketClassification\n ): Promise<SupportResponseDraft> {\n const prompt = `You are a ${this.tone} support agent. Draft an email response.\nTicket Subject: ${ticket.subject}\nTicket Body: ${ticket.body}\nDetected Category: ${classification.category}\nDetected Priority: ${classification.priority}\nResolution:\n${resolution.answer}\nCitations: ${resolution.citations.map((c) => c.label).join(', ')}`;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const response = await this.llm!.chat(\n [\n {\n role: 'system',\n content: [\n {\n type: 'text',\n text: 'Write empathetic, accurate support replies that cite sources when relevant.',\n },\n ],\n },\n {\n role: 'user',\n content: [{ type: 'text', text: prompt }],\n },\n ],\n { model: this.model }\n );\n\n const body = response.message.content\n .map((part) => ('text' in part ? part.text : ''))\n .join('')\n .trim();\n\n return this.buildDraft(ticket, resolution, classification, body);\n }\n\n private generateTemplate(\n ticket: SupportTicket,\n resolution: SupportResolution,\n classification: TicketClassification\n ): SupportResponseDraft {\n const greeting = ticket.customerName\n ? `Hi ${ticket.customerName},`\n : 'Hi there,';\n const body = `${greeting}\n\nThanks for contacting us about \"${ticket.subject}\". ${this.renderCategoryIntro(\n classification\n )}\n\n${resolution.answer}\n\n${this.renderCitations(resolution)}\n${this.closing}\n\n— ContractSpec Support`;\n\n return this.buildDraft(ticket, resolution, classification, body);\n }\n\n private buildDraft(\n ticket: SupportTicket,\n resolution: SupportResolution,\n classification: TicketClassification,\n body: string\n ): SupportResponseDraft {\n return {\n ticketId: ticket.id,\n subject: ticket.subject.startsWith('Re:')\n ? ticket.subject\n : `Re: ${ticket.subject}`,\n body,\n confidence: Math.min(resolution.confidence, classification.confidence),\n requiresEscalation:\n resolution.actions.some((action) => action.type === 'escalate') ||\n Boolean(classification.escalationRequired),\n citations: resolution.citations,\n };\n }\n\n private renderCategoryIntro(classification: TicketClassification) {\n switch (classification.category) {\n case 'billing':\n return 'I understand billing issues can be stressful, so let me clarify the situation.';\n case 'technical':\n return 'I see you encountered a technical issue. Here is what happened and how to fix it.';\n case 'product':\n return 'Thanks for sharing feedback about the product. Here are the next steps.';\n case 'account':\n return 'Account access is critical, so let me walk you through the resolution.';\n case 'compliance':\n return 'Compliance questions require precision. See the policy-aligned answer below.';\n default:\n return 'Here is what we found after reviewing your request.';\n }\n }\n\n private renderCitations(resolution: SupportResolution) {\n if (!resolution.citations.length) return '';\n const lines = resolution.citations.map((citation, index) => {\n const label = citation.label || `Source ${index + 1}`;\n const link = citation.url ? ` (${citation.url})` : '';\n return `- ${label}${link}`;\n });\n return `References:\\n${lines.join('\\n')}`;\n }\n}\n"],"mappings":";AAeA,IAAa,gBAAb,MAA2B;CACzB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAAgC;AAC1C,OAAK,MAAM,SAAS;AACpB,OAAK,QAAQ,SAAS;AACtB,OAAK,OAAO,SAAS,QAAQ;AAC7B,OAAK,UACH,SAAS,YACR,KAAK,SAAS,aACX,mDACA;;CAGR,MAAM,MACJ,QACA,YACA,gBAC+B;AAC/B,MAAI,KAAK,IACP,QAAO,KAAK,gBAAgB,QAAQ,YAAY,eAAe;AAEjE,SAAO,KAAK,iBAAiB,QAAQ,YAAY,eAAe;;CAGlE,MAAc,gBACZ,QACA,YACA,gBAC+B;EAC/B,MAAM,SAAS,aAAa,KAAK,KAAK;kBACxB,OAAO,QAAQ;eAClB,OAAO,KAAK;qBACN,eAAe,SAAS;qBACxB,eAAe,SAAS;;EAE3C,WAAW,OAAO;aACP,WAAW,UAAU,KAAK,MAAM,EAAE,MAAM,CAAC,KAAK,KAAK;EAsB5D,MAAM,QAnBW,MAAM,KAAK,IAAK,KAC/B,CACE;GACE,MAAM;GACN,SAAS,CACP;IACE,MAAM;IACN,MAAM;IACP,CACF;GACF,EACD;GACE,MAAM;GACN,SAAS,CAAC;IAAE,MAAM;IAAQ,MAAM;IAAQ,CAAC;GAC1C,CACF,EACD,EAAE,OAAO,KAAK,OAAO,CACtB,EAEqB,QAAQ,QAC3B,KAAK,SAAU,UAAU,OAAO,KAAK,OAAO,GAAI,CAChD,KAAK,GAAG,CACR,MAAM;AAET,SAAO,KAAK,WAAW,QAAQ,YAAY,gBAAgB,KAAK;;CAGlE,AAAQ,iBACN,QACA,YACA,gBACsB;EAItB,MAAM,OAAO,GAHI,OAAO,eACpB,MAAM,OAAO,aAAa,KAC1B,YACqB;;kCAEK,OAAO,QAAQ,KAAK,KAAK,oBACrD,eACD,CAAC;;EAEJ,WAAW,OAAO;;EAElB,KAAK,gBAAgB,WAAW,CAAC;EACjC,KAAK,QAAQ;;;AAIX,SAAO,KAAK,WAAW,QAAQ,YAAY,gBAAgB,KAAK;;CAGlE,AAAQ,WACN,QACA,YACA,gBACA,MACsB;AACtB,SAAO;GACL,UAAU,OAAO;GACjB,SAAS,OAAO,QAAQ,WAAW,MAAM,GACrC,OAAO,UACP,OAAO,OAAO;GAClB;GACA,YAAY,KAAK,IAAI,WAAW,YAAY,eAAe,WAAW;GACtE,oBACE,WAAW,QAAQ,MAAM,WAAW,OAAO,SAAS,WAAW,IAC/D,QAAQ,eAAe,mBAAmB;GAC5C,WAAW,WAAW;GACvB;;CAGH,AAAQ,oBAAoB,gBAAsC;AAChE,UAAQ,eAAe,UAAvB;GACE,KAAK,UACH,QAAO;GACT,KAAK,YACH,QAAO;GACT,KAAK,UACH,QAAO;GACT,KAAK,UACH,QAAO;GACT,KAAK,aACH,QAAO;GACT,QACE,QAAO;;;CAIb,AAAQ,gBAAgB,YAA+B;AACrD,MAAI,CAAC,WAAW,UAAU,OAAQ,QAAO;AAMzC,SAAO,gBALO,WAAW,UAAU,KAAK,UAAU,UAAU;AAG1D,UAAO,KAFO,SAAS,SAAS,UAAU,QAAQ,MACrC,SAAS,MAAM,KAAK,SAAS,IAAI,KAAK;IAEnD,CAC2B,KAAK,KAAK"}
@@ -0,0 +1,20 @@
1
+ import { ResolutionResultPayload } from "../types.js";
2
+
3
+ //#region src/bot/feedback-loop.d.ts
4
+ interface FeedbackMetrics {
5
+ totalTickets: number;
6
+ autoResolved: number;
7
+ escalated: number;
8
+ avgConfidence: number;
9
+ avgResponseTimeMs: number;
10
+ }
11
+ declare class SupportFeedbackLoop {
12
+ private readonly history;
13
+ private readonly responseTimes;
14
+ recordResolution(payload: ResolutionResultPayload, responseTimeMs?: number): void;
15
+ metrics(): FeedbackMetrics;
16
+ feedbackSummary(limit?: number): string;
17
+ }
18
+ //#endregion
19
+ export { FeedbackMetrics, SupportFeedbackLoop };
20
+ //# sourceMappingURL=feedback-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-loop.d.ts","names":[],"sources":["../../src/bot/feedback-loop.ts"],"sourcesContent":[],"mappings":";;;UAEiB,eAAA;;EAAA,YAAA,EAAA,MAAe;EAQnB,SAAA,EAAA,MAAA;;;;cAAA,mBAAA;;;4BAIe;aAOf"}
@@ -0,0 +1,35 @@
1
+ //#region src/bot/feedback-loop.ts
2
+ var SupportFeedbackLoop = class {
3
+ history = [];
4
+ responseTimes = /* @__PURE__ */ new Map();
5
+ recordResolution(payload, responseTimeMs) {
6
+ this.history.push(payload);
7
+ if (responseTimeMs != null) this.responseTimes.set(payload.ticket.id, responseTimeMs);
8
+ }
9
+ metrics() {
10
+ const total = this.history.length;
11
+ const autoResolved = this.history.filter((entry) => !entry.resolution.actions.some((action) => action.type === "escalate")).length;
12
+ const escalated = total - autoResolved;
13
+ const avgConfidence = total === 0 ? 0 : this.history.reduce((sum, entry) => sum + entry.resolution.confidence, 0) / total;
14
+ const avgResponseTimeMs = this.responseTimes.size === 0 ? 0 : [...this.responseTimes.values()].reduce((a, b) => a + b, 0) / this.responseTimes.size;
15
+ return {
16
+ totalTickets: total,
17
+ autoResolved,
18
+ escalated,
19
+ avgConfidence: Number(avgConfidence.toFixed(2)),
20
+ avgResponseTimeMs: Math.round(avgResponseTimeMs)
21
+ };
22
+ }
23
+ feedbackSummary(limit = 5) {
24
+ const recent = this.history.slice(-limit);
25
+ if (!recent.length) return "No feedback recorded yet.";
26
+ return recent.map((entry) => {
27
+ const status = entry.resolution.actions.some((action) => action.type === "escalate") ? "Escalated" : "Auto-resolved";
28
+ return `${entry.ticket.subject} – ${status} (confidence: ${entry.resolution.confidence})`;
29
+ }).join("\n");
30
+ }
31
+ };
32
+
33
+ //#endregion
34
+ export { SupportFeedbackLoop };
35
+ //# sourceMappingURL=feedback-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-loop.js","names":[],"sources":["../../src/bot/feedback-loop.ts"],"sourcesContent":["import type { ResolutionResultPayload } from '../types';\n\nexport interface FeedbackMetrics {\n totalTickets: number;\n autoResolved: number;\n escalated: number;\n avgConfidence: number;\n avgResponseTimeMs: number;\n}\n\nexport class SupportFeedbackLoop {\n private readonly history: ResolutionResultPayload[] = [];\n private readonly responseTimes = new Map<string, number>();\n\n recordResolution(payload: ResolutionResultPayload, responseTimeMs?: number) {\n this.history.push(payload);\n if (responseTimeMs != null) {\n this.responseTimes.set(payload.ticket.id, responseTimeMs);\n }\n }\n\n metrics(): FeedbackMetrics {\n const total = this.history.length;\n const autoResolved = this.history.filter(\n (entry) =>\n !entry.resolution.actions.some((action) => action.type === 'escalate')\n ).length;\n const escalated = total - autoResolved;\n const avgConfidence =\n total === 0\n ? 0\n : this.history.reduce(\n (sum, entry) => sum + entry.resolution.confidence,\n 0\n ) / total;\n const avgResponseTimeMs =\n this.responseTimes.size === 0\n ? 0\n : [...this.responseTimes.values()].reduce((a, b) => a + b, 0) /\n this.responseTimes.size;\n\n return {\n totalTickets: total,\n autoResolved,\n escalated,\n avgConfidence: Number(avgConfidence.toFixed(2)),\n avgResponseTimeMs: Math.round(avgResponseTimeMs),\n };\n }\n\n feedbackSummary(limit = 5): string {\n const recent = this.history.slice(-limit);\n if (!recent.length) return 'No feedback recorded yet.';\n return recent\n .map((entry) => {\n const status = entry.resolution.actions.some(\n (action) => action.type === 'escalate'\n )\n ? 'Escalated'\n : 'Auto-resolved';\n return `${entry.ticket.subject} – ${status} (confidence: ${entry.resolution.confidence})`;\n })\n .join('\\n');\n }\n}\n"],"mappings":";AAUA,IAAa,sBAAb,MAAiC;CAC/B,AAAiB,UAAqC,EAAE;CACxD,AAAiB,gCAAgB,IAAI,KAAqB;CAE1D,iBAAiB,SAAkC,gBAAyB;AAC1E,OAAK,QAAQ,KAAK,QAAQ;AAC1B,MAAI,kBAAkB,KACpB,MAAK,cAAc,IAAI,QAAQ,OAAO,IAAI,eAAe;;CAI7D,UAA2B;EACzB,MAAM,QAAQ,KAAK,QAAQ;EAC3B,MAAM,eAAe,KAAK,QAAQ,QAC/B,UACC,CAAC,MAAM,WAAW,QAAQ,MAAM,WAAW,OAAO,SAAS,WAAW,CACzE,CAAC;EACF,MAAM,YAAY,QAAQ;EAC1B,MAAM,gBACJ,UAAU,IACN,IACA,KAAK,QAAQ,QACV,KAAK,UAAU,MAAM,MAAM,WAAW,YACvC,EACD,GAAG;EACV,MAAM,oBACJ,KAAK,cAAc,SAAS,IACxB,IACA,CAAC,GAAG,KAAK,cAAc,QAAQ,CAAC,CAAC,QAAQ,GAAG,MAAM,IAAI,GAAG,EAAE,GAC3D,KAAK,cAAc;AAEzB,SAAO;GACL,cAAc;GACd;GACA;GACA,eAAe,OAAO,cAAc,QAAQ,EAAE,CAAC;GAC/C,mBAAmB,KAAK,MAAM,kBAAkB;GACjD;;CAGH,gBAAgB,QAAQ,GAAW;EACjC,MAAM,SAAS,KAAK,QAAQ,MAAM,CAAC,MAAM;AACzC,MAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,SAAO,OACJ,KAAK,UAAU;GACd,MAAM,SAAS,MAAM,WAAW,QAAQ,MACrC,WAAW,OAAO,SAAS,WAC7B,GACG,cACA;AACJ,UAAO,GAAG,MAAM,OAAO,QAAQ,KAAK,OAAO,gBAAgB,MAAM,WAAW,WAAW;IACvF,CACD,KAAK,KAAK"}
@@ -0,0 +1,4 @@
1
+ import { AutoResponder, AutoResponderOptions } from "./auto-responder.js";
2
+ import { FeedbackMetrics, SupportFeedbackLoop } from "./feedback-loop.js";
3
+ import { SupportToolsetOptions, createSupportTools } from "./tools.js";
4
+ export { AutoResponder, AutoResponderOptions, FeedbackMetrics, SupportFeedbackLoop, SupportToolsetOptions, createSupportTools };
@@ -0,0 +1,5 @@
1
+ import { AutoResponder } from "./auto-responder.js";
2
+ import { SupportFeedbackLoop } from "./feedback-loop.js";
3
+ import { createSupportTools } from "./tools.js";
4
+
5
+ export { AutoResponder, SupportFeedbackLoop, createSupportTools };
@@ -0,0 +1,15 @@
1
+ import { AutoResponder } from "./auto-responder.js";
2
+ import { TicketResolver } from "../rag/ticket-resolver.js";
3
+ import { TicketClassifier } from "../tickets/classifier.js";
4
+ import { Tool } from "@ai-sdk/provider-utils";
5
+
6
+ //#region src/bot/tools.d.ts
7
+ interface SupportToolsetOptions {
8
+ resolver: TicketResolver;
9
+ classifier: TicketClassifier;
10
+ responder: AutoResponder;
11
+ }
12
+ declare function createSupportTools(options: SupportToolsetOptions): Tool[];
13
+ //#endregion
14
+ export { SupportToolsetOptions, createSupportTools };
15
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","names":[],"sources":["../../src/bot/tools.ts"],"sourcesContent":[],"mappings":";;;;;;UAgGiB,qBAAA;YACL;EADK,UAAA,EAEH,gBAFwB;EAC1B,SAAA,EAEC,aAFD;;AAEC,iBAGG,kBAAA,CAHH,OAAA,EAG+B,qBAH/B,CAAA,EAGuD,IAHvD,EAAA"}