@contractspec/lib.support-bot 1.56.1 → 1.58.0

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 (216) hide show
  1. package/dist/bot/auto-responder.d.ts +19 -23
  2. package/dist/bot/auto-responder.d.ts.map +1 -1
  3. package/dist/bot/auto-responder.js +86 -68
  4. package/dist/bot/feedback-loop.d.ts +13 -17
  5. package/dist/bot/feedback-loop.d.ts.map +1 -1
  6. package/dist/bot/feedback-loop.js +38 -34
  7. package/dist/bot/index.d.ts +4 -4
  8. package/dist/bot/index.d.ts.map +1 -0
  9. package/dist/bot/index.js +268 -4
  10. package/dist/bot/tools.d.ts +9 -13
  11. package/dist/bot/tools.d.ts.map +1 -1
  12. package/dist/bot/tools.js +118 -123
  13. package/dist/browser/bot/auto-responder.js +101 -0
  14. package/dist/browser/bot/feedback-loop.js +38 -0
  15. package/dist/browser/bot/index.js +268 -0
  16. package/dist/browser/bot/tools.js +131 -0
  17. package/dist/browser/index.js +517 -0
  18. package/dist/browser/rag/index.js +65 -0
  19. package/dist/browser/rag/ticket-resolver.js +65 -0
  20. package/dist/browser/spec.js +33 -0
  21. package/dist/browser/tickets/classifier.js +156 -0
  22. package/dist/browser/tickets/index.js +156 -0
  23. package/dist/browser/types.js +0 -0
  24. package/dist/index.d.ts +6 -11
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +518 -9
  27. package/dist/node/bot/auto-responder.js +101 -0
  28. package/dist/node/bot/feedback-loop.js +38 -0
  29. package/dist/node/bot/index.js +268 -0
  30. package/dist/node/bot/tools.js +131 -0
  31. package/dist/node/index.js +517 -0
  32. package/dist/node/rag/index.js +65 -0
  33. package/dist/node/rag/ticket-resolver.js +65 -0
  34. package/dist/node/spec.js +33 -0
  35. package/dist/node/tickets/classifier.js +156 -0
  36. package/dist/node/tickets/index.js +156 -0
  37. package/dist/node/types.js +0 -0
  38. package/dist/rag/index.d.ts +2 -2
  39. package/dist/rag/index.d.ts.map +1 -0
  40. package/dist/rag/index.js +66 -3
  41. package/dist/rag/ticket-resolver.d.ts +17 -21
  42. package/dist/rag/ticket-resolver.d.ts.map +1 -1
  43. package/dist/rag/ticket-resolver.js +65 -63
  44. package/dist/spec.d.ts +7 -12
  45. package/dist/spec.d.ts.map +1 -1
  46. package/dist/spec.js +31 -32
  47. package/dist/tickets/classifier.d.ts +18 -22
  48. package/dist/tickets/classifier.d.ts.map +1 -1
  49. package/dist/tickets/classifier.js +153 -195
  50. package/dist/tickets/index.d.ts +2 -2
  51. package/dist/tickets/index.d.ts.map +1 -0
  52. package/dist/tickets/index.js +156 -2
  53. package/dist/types.d.ts +62 -67
  54. package/dist/types.d.ts.map +1 -1
  55. package/dist/types.js +1 -0
  56. package/package.json +127 -38
  57. package/dist/ai-agent/src/agent/contract-spec-agent.d.ts +0 -5
  58. package/dist/ai-agent/src/agent/index.d.ts +0 -2
  59. package/dist/ai-agent/src/agent/unified-agent.d.ts +0 -3
  60. package/dist/ai-agent/src/approval/index.d.ts +0 -1
  61. package/dist/ai-agent/src/approval/workflow.d.ts +0 -1
  62. package/dist/ai-agent/src/exporters/claude-agent-exporter.d.ts +0 -2
  63. package/dist/ai-agent/src/exporters/index.d.ts +0 -3
  64. package/dist/ai-agent/src/exporters/opencode-exporter.d.ts +0 -2
  65. package/dist/ai-agent/src/exporters/types.d.ts +0 -2
  66. package/dist/ai-agent/src/index.d.ts +0 -14
  67. package/dist/ai-agent/src/interop/index.d.ts +0 -3
  68. package/dist/ai-agent/src/interop/spec-consumer.d.ts +0 -2
  69. package/dist/ai-agent/src/interop/tool-consumer.d.ts +0 -3
  70. package/dist/ai-agent/src/interop/types.d.ts +0 -2
  71. package/dist/ai-agent/src/knowledge/index.d.ts +0 -1
  72. package/dist/ai-agent/src/knowledge/injector.d.ts +0 -1
  73. package/dist/ai-agent/src/providers/claude-agent-sdk/adapter.d.ts +0 -2
  74. package/dist/ai-agent/src/providers/claude-agent-sdk/index.d.ts +0 -3
  75. package/dist/ai-agent/src/providers/claude-agent-sdk/session-bridge.d.ts +0 -1
  76. package/dist/ai-agent/src/providers/claude-agent-sdk/tool-bridge.d.ts +0 -3
  77. package/dist/ai-agent/src/providers/index.d.ts +0 -4
  78. package/dist/ai-agent/src/providers/opencode-sdk/adapter.d.ts +0 -2
  79. package/dist/ai-agent/src/providers/opencode-sdk/agent-bridge.d.ts +0 -3
  80. package/dist/ai-agent/src/providers/opencode-sdk/index.d.ts +0 -3
  81. package/dist/ai-agent/src/providers/opencode-sdk/tool-bridge.d.ts +0 -3
  82. package/dist/ai-agent/src/providers/registry.d.ts +0 -1
  83. package/dist/ai-agent/src/providers/types.d.ts +0 -3
  84. package/dist/ai-agent/src/schema/index.d.ts +0 -2
  85. package/dist/ai-agent/src/schema/json-schema-to-zod.d.ts +0 -1
  86. package/dist/ai-agent/src/schema/schema-output.d.ts +0 -2
  87. package/dist/ai-agent/src/session/index.d.ts +0 -1
  88. package/dist/ai-agent/src/session/store.d.ts +0 -2
  89. package/dist/ai-agent/src/spec/index.d.ts +0 -2
  90. package/dist/ai-agent/src/spec/registry.d.ts +0 -2
  91. package/dist/ai-agent/src/spec/spec.d.ts +0 -115
  92. package/dist/ai-agent/src/spec/spec.d.ts.map +0 -1
  93. package/dist/ai-agent/src/telemetry/adapter.d.ts +0 -1
  94. package/dist/ai-agent/src/telemetry/index.d.ts +0 -1
  95. package/dist/ai-agent/src/tools/index.d.ts +0 -4
  96. package/dist/ai-agent/src/tools/knowledge-tool.d.ts +0 -2
  97. package/dist/ai-agent/src/tools/mcp-client.d.ts +0 -1
  98. package/dist/ai-agent/src/tools/mcp-server.d.ts +0 -3
  99. package/dist/ai-agent/src/tools/tool-adapter.d.ts +0 -3
  100. package/dist/ai-agent/src/types.d.ts +0 -1
  101. package/dist/bot/auto-responder.js.map +0 -1
  102. package/dist/bot/feedback-loop.js.map +0 -1
  103. package/dist/bot/tools.js.map +0 -1
  104. package/dist/contracts/src/app-config/lifecycle.d.ts +0 -1
  105. package/dist/contracts/src/app-config/runtime.d.ts +0 -13
  106. package/dist/contracts/src/app-config/spec.d.ts +0 -9
  107. package/dist/contracts/src/capabilities/capabilities.d.ts +0 -1
  108. package/dist/contracts/src/capabilities/context.d.ts +0 -1
  109. package/dist/contracts/src/capabilities/guards.d.ts +0 -4
  110. package/dist/contracts/src/capabilities/index.d.ts +0 -5
  111. package/dist/contracts/src/capabilities/openbanking.d.ts +0 -1
  112. package/dist/contracts/src/capabilities/validation.d.ts +0 -4
  113. package/dist/contracts/src/data-views/index.d.ts +0 -3
  114. package/dist/contracts/src/data-views/registry.d.ts +0 -2
  115. package/dist/contracts/src/data-views/report/contractVerificationTable.d.ts +0 -1
  116. package/dist/contracts/src/data-views/spec.d.ts +0 -3
  117. package/dist/contracts/src/data-views/types.d.ts +0 -2
  118. package/dist/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.d.ts +0 -1
  119. package/dist/contracts/src/docs/commands/docsGenerate.command.d.ts +0 -1
  120. package/dist/contracts/src/docs/commands/docsPublish.command.d.ts +0 -1
  121. package/dist/contracts/src/docs/commands/index.d.ts +0 -2
  122. package/dist/contracts/src/docs/contracts.d.ts +0 -6
  123. package/dist/contracts/src/docs/events/docsGenerated.event.d.ts +0 -1
  124. package/dist/contracts/src/docs/events/docsPublished.event.d.ts +0 -1
  125. package/dist/contracts/src/docs/events/index.d.ts +0 -2
  126. package/dist/contracts/src/docs/forms/docsSearch.form.d.ts +0 -1
  127. package/dist/contracts/src/docs/forms/index.d.ts +0 -1
  128. package/dist/contracts/src/docs/index.d.ts +0 -30
  129. package/dist/contracts/src/docs/presentations.d.ts +0 -2
  130. package/dist/contracts/src/docs/queries/contractReference.query.d.ts +0 -1
  131. package/dist/contracts/src/docs/queries/docsIndex.query.d.ts +0 -1
  132. package/dist/contracts/src/docs/queries/index.d.ts +0 -2
  133. package/dist/contracts/src/docs/registry.d.ts +0 -10
  134. package/dist/contracts/src/docs/registry.d.ts.map +0 -1
  135. package/dist/contracts/src/docs/tech/auth/better-auth-nextjs.docblock.d.ts +0 -1
  136. package/dist/contracts/src/docs/tech/contracts/README.docblock.d.ts +0 -1
  137. package/dist/contracts/src/docs/tech/contracts/openapi-export.docblock.d.ts +0 -1
  138. package/dist/contracts/src/docs/tech/contracts/openapi-import.docblock.d.ts +0 -1
  139. package/dist/contracts/src/docs/tech/lifecycle-stage-system.docblock.d.ts +0 -1
  140. package/dist/contracts/src/docs/tech/llm/llm-integration.docblock.d.ts +0 -1
  141. package/dist/contracts/src/docs/tech/mcp-endpoints.docblock.d.ts +0 -1
  142. package/dist/contracts/src/docs/tech/presentation-runtime.docblock.d.ts +0 -1
  143. package/dist/contracts/src/docs/tech/schema/README.docblock.d.ts +0 -1
  144. package/dist/contracts/src/docs/tech/studio/learning-events.docblock.d.ts +0 -1
  145. package/dist/contracts/src/docs/tech/studio/learning-journeys.docblock.d.ts +0 -1
  146. package/dist/contracts/src/docs/tech/studio/platform-admin-panel.docblock.d.ts +0 -1
  147. package/dist/contracts/src/docs/tech/studio/project-access-teams.docblock.d.ts +0 -1
  148. package/dist/contracts/src/docs/tech/studio/project-routing.docblock.d.ts +0 -1
  149. package/dist/contracts/src/docs/tech/studio/sandbox-unlogged.docblock.d.ts +0 -1
  150. package/dist/contracts/src/docs/tech/studio/team-invitations.docblock.d.ts +0 -1
  151. package/dist/contracts/src/docs/tech/studio/workspace-ops.docblock.d.ts +0 -1
  152. package/dist/contracts/src/docs/tech/studio/workspaces.docblock.d.ts +0 -1
  153. package/dist/contracts/src/docs/tech/telemetry-ingest.docblock.d.ts +0 -1
  154. package/dist/contracts/src/docs/tech/vscode-extension.docblock.d.ts +0 -1
  155. package/dist/contracts/src/events.d.ts +0 -5
  156. package/dist/contracts/src/experiments/spec-resolver.d.ts +0 -4
  157. package/dist/contracts/src/experiments/spec.d.ts +0 -4
  158. package/dist/contracts/src/features/index.d.ts +0 -4
  159. package/dist/contracts/src/features/install.d.ts +0 -6
  160. package/dist/contracts/src/features/registry.d.ts +0 -2
  161. package/dist/contracts/src/features/types.d.ts +0 -5
  162. package/dist/contracts/src/features/validation.d.ts +0 -2
  163. package/dist/contracts/src/forms/forms.d.ts +0 -3
  164. package/dist/contracts/src/forms/index.d.ts +0 -1
  165. package/dist/contracts/src/install.d.ts +0 -7
  166. package/dist/contracts/src/integrations/connection.d.ts +0 -1
  167. package/dist/contracts/src/integrations/providers/llm.d.ts +0 -83
  168. package/dist/contracts/src/integrations/providers/llm.d.ts.map +0 -1
  169. package/dist/contracts/src/integrations/spec.d.ts +0 -3
  170. package/dist/contracts/src/knowledge/spec.d.ts +0 -9
  171. package/dist/contracts/src/knowledge/spec.d.ts.map +0 -1
  172. package/dist/contracts/src/operations/index.d.ts +0 -3
  173. package/dist/contracts/src/operations/operation.d.ts +0 -7
  174. package/dist/contracts/src/operations/registry.d.ts +0 -6
  175. package/dist/contracts/src/operations/report/getContractVerificationStatus.d.ts +0 -3
  176. package/dist/contracts/src/operations/report/index.d.ts +0 -4
  177. package/dist/contracts/src/ownership.d.ts +0 -164
  178. package/dist/contracts/src/ownership.d.ts.map +0 -1
  179. package/dist/contracts/src/policy/registry.d.ts +0 -2
  180. package/dist/contracts/src/policy/spec.d.ts +0 -13
  181. package/dist/contracts/src/policy/spec.d.ts.map +0 -1
  182. package/dist/contracts/src/presentations/index.d.ts +0 -3
  183. package/dist/contracts/src/presentations/presentations.d.ts +0 -3
  184. package/dist/contracts/src/presentations/registry.d.ts +0 -2
  185. package/dist/contracts/src/presentations/transform-engine.d.ts +0 -2
  186. package/dist/contracts/src/registry-utils.d.ts +0 -1
  187. package/dist/contracts/src/registry.d.ts +0 -3
  188. package/dist/contracts/src/resources.d.ts +0 -2
  189. package/dist/contracts/src/telemetry/anomaly.d.ts +0 -2
  190. package/dist/contracts/src/telemetry/index.d.ts +0 -3
  191. package/dist/contracts/src/telemetry/spec.d.ts +0 -2
  192. package/dist/contracts/src/telemetry/tracker.d.ts +0 -3
  193. package/dist/contracts/src/tests/spec.d.ts +0 -1
  194. package/dist/contracts/src/themes.d.ts +0 -2
  195. package/dist/contracts/src/types.d.ts +0 -5
  196. package/dist/contracts/src/versioning/refs.d.ts +0 -28
  197. package/dist/contracts/src/versioning/refs.d.ts.map +0 -1
  198. package/dist/contracts/src/workflow/overview.docblock.d.ts +0 -1
  199. package/dist/contracts/src/workflow/spec.d.ts +0 -5
  200. package/dist/contracts/src/workspace-config/workspace-config.docblock.d.ts +0 -1
  201. package/dist/rag/ticket-resolver.js.map +0 -1
  202. package/dist/schema/src/EnumType.d.ts +0 -2
  203. package/dist/schema/src/FieldType.d.ts +0 -2
  204. package/dist/schema/src/GraphQLSchemaType.d.ts +0 -2
  205. package/dist/schema/src/JsonSchemaType.d.ts +0 -2
  206. package/dist/schema/src/ScalarTypeEnum.d.ts +0 -1
  207. package/dist/schema/src/SchemaModel.d.ts +0 -4
  208. package/dist/schema/src/SchemaModelType.d.ts +0 -1
  209. package/dist/schema/src/ZodSchemaType.d.ts +0 -2
  210. package/dist/schema/src/entity/defineEntity.d.ts +0 -1
  211. package/dist/schema/src/entity/generator.d.ts +0 -1
  212. package/dist/schema/src/entity/index.d.ts +0 -3
  213. package/dist/schema/src/entity/types.d.ts +0 -1
  214. package/dist/schema/src/index.d.ts +0 -9
  215. package/dist/spec.js.map +0 -1
  216. package/dist/tickets/classifier.js.map +0 -1
@@ -1,164 +0,0 @@
1
- import { DocId } from "./docs/registry.js";
2
- import "./docs/index.js";
3
-
4
- //#region ../contracts/src/ownership.d.ts
5
-
6
- /**
7
- * Lifecycle stability stages for specs.
8
- *
9
- * Specs progress through these stages as they mature:
10
- * - `idea`: Initial concept, not implemented
11
- * - `in_creation`: Currently being built
12
- * - `experimental`: Working but may change significantly
13
- * - `beta`: Feature-complete, seeking feedback
14
- * - `stable`: Production-ready, breaking changes require major version bump
15
- * - `deprecated`: Scheduled for removal, use alternatives
16
- */
17
- declare const StabilityEnum: {
18
- /** Initial concept, not yet implemented. */
19
- readonly Idea: "idea";
20
- /** Currently being built, not ready for use. */
21
- readonly InCreation: "in_creation";
22
- /** Working but unstable, may change significantly. */
23
- readonly Experimental: "experimental";
24
- /** Feature-complete, seeking feedback before stabilization. */
25
- readonly Beta: "beta";
26
- /** Production-ready, follows semantic versioning. */
27
- readonly Stable: "stable";
28
- /** Scheduled for removal, use alternatives. */
29
- readonly Deprecated: "deprecated";
30
- };
31
- /** Stability level for a spec's lifecycle stage. */
32
- type Stability = (typeof StabilityEnum)[keyof typeof StabilityEnum];
33
- /**
34
- * Curated owner identifiers for business/product ownership.
35
- *
36
- * Used for CODEOWNERS, on-call routing, and approval workflows.
37
- * Custom owner strings are also allowed for flexibility.
38
- */
39
- declare const OwnersEnum: {
40
- /** Core platform team. */
41
- readonly PlatformCore: "platform.core";
42
- /** Sigil/auth team. */
43
- readonly PlatformSigil: "platform.sigil";
44
- /** Marketplace team. */
45
- readonly PlatformMarketplace: "platform.marketplace";
46
- /** Messaging/notifications team. */
47
- readonly PlatformMessaging: "platform.messaging";
48
- /** Content/CMS team. */
49
- readonly PlatformContent: "platform.content";
50
- /** Feature flags team. */
51
- readonly PlatformFeatureFlags: "platform.featureflags";
52
- /** Finance/billing team. */
53
- readonly PlatformFinance: "platform.finance";
54
- };
55
- /**
56
- * Owner identifier for a spec.
57
- * Can be a predefined OwnersEnum value or any custom string.
58
- */
59
- type Owner = (typeof OwnersEnum)[keyof typeof OwnersEnum] | (string & {});
60
- /**
61
- * Common tags for categorizing specs.
62
- *
63
- * Used for search, grouping, and documentation navigation.
64
- * Custom tag strings are also allowed for flexibility.
65
- */
66
- declare const TagsEnum: {
67
- /** Spots/locations domain. */
68
- readonly Spots: "spots";
69
- /** Collectivity/community domain. */
70
- readonly Collectivity: "collectivity";
71
- /** Marketplace domain. */
72
- readonly Marketplace: "marketplace";
73
- /** Seller-related features. */
74
- readonly Sellers: "sellers";
75
- /** Authentication features. */
76
- readonly Auth: "auth";
77
- /** Login flows. */
78
- readonly Login: "login";
79
- /** Signup flows. */
80
- readonly Signup: "signup";
81
- /** Onboarding/guides. */
82
- readonly Guide: "guide";
83
- /** Documentation. */
84
- readonly Docs: "docs";
85
- /** Internationalization. */
86
- readonly I18n: "i18n";
87
- /** Incident management. */
88
- readonly Incident: "incident";
89
- /** Automation/workflows. */
90
- readonly Automation: "automation";
91
- /** Code hygiene/maintenance. */
92
- readonly Hygiene: "hygiene";
93
- };
94
- /**
95
- * Tag for categorizing a spec.
96
- * Can be a predefined TagsEnum value or any custom string.
97
- */
98
- type Tag = (typeof TagsEnum)[keyof typeof TagsEnum] | (string & {});
99
- /**
100
- * Common metadata interface for all ContractSpec specifications.
101
- *
102
- * Every spec type (operations, events, presentations, etc.) extends this
103
- * interface to provide consistent ownership, versioning, and discoverability.
104
- *
105
- * @example
106
- * ```typescript
107
- * const meta: OwnerShipMeta = {
108
- * key: 'auth.login',
109
- * version: '1.0.0',
110
- * description: 'Authenticates a user with email and password',
111
- * stability: StabilityEnum.Stable,
112
- * owners: [OwnersEnum.PlatformSigil],
113
- * tags: [TagsEnum.Auth, TagsEnum.Login],
114
- * };
115
- * ```
116
- */
117
- interface OwnerShipMeta {
118
- /**
119
- * Semantic version string (e.g., "1.0.0").
120
- * Bump for breaking changes according to semver rules.
121
- */
122
- version: string;
123
- /**
124
- * Fully-qualified spec key (e.g., "sigil.beginSignup", "user.created").
125
- * Must be unique within the spec type.
126
- */
127
- key: string;
128
- /**
129
- * Human-friendly title (e.g., "Begin Signup").
130
- * Used in documentation and UI.
131
- */
132
- title?: string;
133
- /**
134
- * Short human-friendly summary of what this spec does.
135
- * Should be concise (1-2 sentences).
136
- */
137
- description: string;
138
- /**
139
- * Business domain this spec belongs to (e.g., "auth", "marketplace").
140
- * Used for grouping and discovery.
141
- */
142
- domain?: string;
143
- /**
144
- * Lifecycle stability marker.
145
- * Indicates maturity level and change expectations.
146
- */
147
- stability: Stability;
148
- /**
149
- * Team/individual owners responsible for this spec.
150
- * Used for CODEOWNERS, on-call routing, and approvals.
151
- */
152
- owners: Owner[];
153
- /**
154
- * Tags for search, grouping, and documentation navigation.
155
- */
156
- tags: Tag[];
157
- /**
158
- * Associated DocBlock identifiers for documentation linkage.
159
- */
160
- docId?: DocId[];
161
- }
162
- //#endregion
163
- export { OwnerShipMeta };
164
- //# sourceMappingURL=ownership.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownership.d.ts","names":[],"sources":["../../../../contracts/src/ownership.ts"],"sourcesContent":[],"mappings":";;;;;AA6HA;AA2BA;;;;;;;;;;cA9Ha;;;;;;;;;;;;;;;KAgBD,SAAA,WAAoB,4BAA4B;;;;;;;cAY/C;;;;;;;;;;;;;;;;;;;;KAqBD,KAAA,WACA,yBAAyB;;;;;;;cAgBxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCD,GAAA,WAAc,uBAAuB;;;;;;;;;;;;;;;;;;;UA2BhC,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAmCJ;;;;;UAMH;;;;QAKF;;;;UAKE"}
@@ -1,2 +0,0 @@
1
- import "./spec.js";
2
- import "../registry.js";
@@ -1,13 +0,0 @@
1
- import { VersionedSpecRef } from "../versioning/refs.js";
2
- import "../ownership.js";
3
-
4
- //#region ../contracts/src/policy/spec.d.ts
5
-
6
- /**
7
- * Reference to a policy spec.
8
- * Uses key and version to identify a specific policy.
9
- */
10
- type PolicyRef = VersionedSpecRef;
11
- //#endregion
12
- export { PolicyRef };
13
- //# sourceMappingURL=spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.d.ts","names":[],"sources":["../../../../../contracts/src/policy/spec.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAyHY,SAAA,GAAY"}
@@ -1,3 +0,0 @@
1
- import "./presentations.js";
2
- import "./transform-engine.js";
3
- import "./registry.js";
@@ -1,3 +0,0 @@
1
- import "../../../schema/src/index.js";
2
- import "../capabilities/capabilities.js";
3
- import "../ownership.js";
@@ -1,2 +0,0 @@
1
- import "./presentations.js";
2
- import "../registry.js";
@@ -1,2 +0,0 @@
1
- import "./presentations.js";
2
- import "react";
@@ -1 +0,0 @@
1
- import "./ownership.js";
@@ -1,3 +0,0 @@
1
- import "./registry-utils.js";
2
- import "./types.js";
3
- import "./ownership.js";
@@ -1,2 +0,0 @@
1
- import "./ownership.js";
2
- import "zod";
@@ -1,2 +0,0 @@
1
- import "./spec.js";
2
- import "./tracker.js";
@@ -1,3 +0,0 @@
1
- import "./spec.js";
2
- import "./anomaly.js";
3
- import "./tracker.js";
@@ -1,2 +0,0 @@
1
- import "../registry.js";
2
- import "../ownership.js";
@@ -1,3 +0,0 @@
1
- import "./spec.js";
2
- import "./anomaly.js";
3
- import "../types.js";
@@ -1 +0,0 @@
1
- import "../ownership.js";
@@ -1,2 +0,0 @@
1
- import "./registry.js";
2
- import "./ownership.js";
@@ -1,5 +0,0 @@
1
- import "./policy/spec.js";
2
- import "./telemetry/index.js";
3
- import "./app-config/runtime.js";
4
- import "./experiments/spec-resolver.js";
5
- import "./events.js";
@@ -1,28 +0,0 @@
1
- //#region ../contracts/src/versioning/refs.d.ts
2
- /**
3
- * Base reference types for ContractSpec versioning.
4
- *
5
- * Provides canonical reference types for linking between specs.
6
- * Domain-specific refs (OpRef, EventRef, etc.) should alias these
7
- * base types for consistency and maintainability.
8
- *
9
- * @module versioning/refs
10
- */
11
- /**
12
- * Base reference type for versioned specs.
13
- * Used to reference any spec by its key and version.
14
- *
15
- * @example
16
- * ```typescript
17
- * const opRef: VersionedSpecRef = { key: 'auth.login', version: '1.0.0' };
18
- * ```
19
- */
20
- interface VersionedSpecRef {
21
- /** Unique key identifying the spec (e.g., "auth.login", "user.created"). */
22
- key: string;
23
- /** Semantic version of the spec (e.g., "1.0.0", "2.1.0"). */
24
- version: string;
25
- }
26
- //#endregion
27
- export { VersionedSpecRef };
28
- //# sourceMappingURL=refs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"refs.d.ts","names":[],"sources":["../../../../../contracts/src/versioning/refs.ts"],"sourcesContent":[],"mappings":";;AAuBA;;;;;;;;;;;;;;;;;UAAiB,gBAAA"}
@@ -1 +0,0 @@
1
- import "../docs/index.js";
@@ -1,5 +0,0 @@
1
- import "../capabilities/index.js";
2
- import "../experiments/spec.js";
3
- import "../features/index.js";
4
- import "../registry.js";
5
- import "../ownership.js";
@@ -1 +0,0 @@
1
- import "../docs/index.js";
@@ -1 +0,0 @@
1
- {"version":3,"file":"ticket-resolver.js","names":[],"sources":["../../src/rag/ticket-resolver.ts"],"sourcesContent":["import type { KnowledgeAnswer } from '@contractspec/lib.knowledge/query/service';\nimport type { SupportResolution, SupportTicket } from '../types';\n\nexport interface KnowledgeRetriever {\n query(question: string): Promise<KnowledgeAnswer>;\n}\n\nexport interface TicketResolverOptions {\n knowledge: KnowledgeRetriever;\n minConfidence?: number;\n prependPrompt?: string;\n}\n\nexport class TicketResolver {\n private readonly knowledge: KnowledgeRetriever;\n private readonly minConfidence: number;\n private readonly prependPrompt?: string;\n\n constructor(options: TicketResolverOptions) {\n this.knowledge = options.knowledge;\n this.minConfidence = options.minConfidence ?? 0.65;\n this.prependPrompt = options.prependPrompt;\n }\n\n async resolve(ticket: SupportTicket): Promise<SupportResolution> {\n const question = this.buildQuestion(ticket);\n const answer = await this.knowledge.query(question);\n return this.toResolution(ticket, answer);\n }\n\n private buildQuestion(ticket: SupportTicket): string {\n const header = [`Subject: ${ticket.subject}`, `Channel: ${ticket.channel}`];\n if (ticket.customerName) header.push(`Customer: ${ticket.customerName}`);\n const sections = [\n this.prependPrompt,\n header.join('\\n'),\n '---',\n ticket.body,\n ].filter(Boolean);\n return sections.join('\\n');\n }\n\n private toResolution(\n ticket: SupportTicket,\n answer: KnowledgeAnswer\n ): SupportResolution {\n const citations = answer.references.map((ref) => {\n const label =\n typeof ref.payload?.title === 'string'\n ? ref.payload.title\n : typeof ref.payload?.documentId === 'string'\n ? ref.payload.documentId\n : ref.id;\n return {\n label,\n url: typeof ref.payload?.url === 'string' ? ref.payload.url : undefined,\n snippet:\n typeof ref.payload?.text === 'string'\n ? ref.payload.text.slice(0, 280)\n : undefined,\n score: ref.score,\n };\n });\n\n const confidence = this.deriveConfidence(answer);\n const escalate = confidence < this.minConfidence || citations.length === 0;\n\n return {\n ticketId: ticket.id,\n answer: answer.answer,\n confidence,\n citations,\n actions: [\n escalate\n ? { type: 'escalate', label: 'Escalate for human review' }\n : { type: 'respond', label: 'Send automated response' },\n ],\n escalationReason: escalate\n ? 'Insufficient confidence or missing knowledge references'\n : undefined,\n knowledgeUpdates: escalate ? [ticket.body.slice(0, 200)] : undefined,\n };\n }\n\n private deriveConfidence(answer: KnowledgeAnswer): number {\n if (!answer.references.length) return 0.3;\n const topScore = answer.references[0]?.score ?? 0.4;\n const normalized = Math.min(1, Math.max(0, topScore));\n const tokenPenalty = answer.usage?.completionTokens\n ? Math.min(answer.usage.completionTokens / 1000, 0.2)\n : 0;\n return Number((normalized - tokenPenalty).toFixed(2));\n }\n}\n"],"mappings":";AAaA,IAAa,iBAAb,MAA4B;CAC1B,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAAgC;AAC1C,OAAK,YAAY,QAAQ;AACzB,OAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,OAAK,gBAAgB,QAAQ;;CAG/B,MAAM,QAAQ,QAAmD;EAC/D,MAAM,WAAW,KAAK,cAAc,OAAO;EAC3C,MAAM,SAAS,MAAM,KAAK,UAAU,MAAM,SAAS;AACnD,SAAO,KAAK,aAAa,QAAQ,OAAO;;CAG1C,AAAQ,cAAc,QAA+B;EACnD,MAAM,SAAS,CAAC,YAAY,OAAO,WAAW,YAAY,OAAO,UAAU;AAC3E,MAAI,OAAO,aAAc,QAAO,KAAK,aAAa,OAAO,eAAe;AAOxE,SANiB;GACf,KAAK;GACL,OAAO,KAAK,KAAK;GACjB;GACA,OAAO;GACR,CAAC,OAAO,QAAQ,CACD,KAAK,KAAK;;CAG5B,AAAQ,aACN,QACA,QACmB;EACnB,MAAM,YAAY,OAAO,WAAW,KAAK,QAAQ;AAO/C,UAAO;IACL,OANA,OAAO,IAAI,SAAS,UAAU,WAC1B,IAAI,QAAQ,QACZ,OAAO,IAAI,SAAS,eAAe,WACjC,IAAI,QAAQ,aACZ,IAAI;IAGV,KAAK,OAAO,IAAI,SAAS,QAAQ,WAAW,IAAI,QAAQ,MAAM;IAC9D,SACE,OAAO,IAAI,SAAS,SAAS,WACzB,IAAI,QAAQ,KAAK,MAAM,GAAG,IAAI,GAC9B;IACN,OAAO,IAAI;IACZ;IACD;EAEF,MAAM,aAAa,KAAK,iBAAiB,OAAO;EAChD,MAAM,WAAW,aAAa,KAAK,iBAAiB,UAAU,WAAW;AAEzE,SAAO;GACL,UAAU,OAAO;GACjB,QAAQ,OAAO;GACf;GACA;GACA,SAAS,CACP,WACI;IAAE,MAAM;IAAY,OAAO;IAA6B,GACxD;IAAE,MAAM;IAAW,OAAO;IAA2B,CAC1D;GACD,kBAAkB,WACd,4DACA;GACJ,kBAAkB,WAAW,CAAC,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG;GAC5D;;CAGH,AAAQ,iBAAiB,QAAiC;AACxD,MAAI,CAAC,OAAO,WAAW,OAAQ,QAAO;EACtC,MAAM,WAAW,OAAO,WAAW,IAAI,SAAS;EAChD,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,SAAS,CAAC;EACrD,MAAM,eAAe,OAAO,OAAO,mBAC/B,KAAK,IAAI,OAAO,MAAM,mBAAmB,KAAM,GAAI,GACnD;AACJ,SAAO,QAAQ,aAAa,cAAc,QAAQ,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- import "zod";
2
- import "graphql";
@@ -1,2 +0,0 @@
1
- import "zod";
2
- import "graphql";
@@ -1,2 +0,0 @@
1
- import "./SchemaModelType.js";
2
- import "zod";
@@ -1,2 +0,0 @@
1
- import "./SchemaModelType.js";
2
- import "zod";
@@ -1 +0,0 @@
1
- import "./FieldType.js";
@@ -1,4 +0,0 @@
1
- import "./FieldType.js";
2
- import "./EnumType.js";
3
- import "./SchemaModelType.js";
4
- import "zod";
@@ -1 +0,0 @@
1
- import "zod";
@@ -1,2 +0,0 @@
1
- import "./SchemaModelType.js";
2
- import "zod";
@@ -1 +0,0 @@
1
- import "./types.js";
@@ -1 +0,0 @@
1
- import "./types.js";
@@ -1,3 +0,0 @@
1
- import "./types.js";
2
- import "./defineEntity.js";
3
- import "./generator.js";
@@ -1 +0,0 @@
1
- import "zod";
@@ -1,9 +0,0 @@
1
- import "./FieldType.js";
2
- import "./ScalarTypeEnum.js";
3
- import "./EnumType.js";
4
- import "./SchemaModelType.js";
5
- import "./SchemaModel.js";
6
- import "./entity/index.js";
7
- import "./ZodSchemaType.js";
8
- import "./JsonSchemaType.js";
9
- import "./GraphQLSchemaType.js";
package/dist/spec.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.js","names":[],"sources":["../src/spec.ts"],"sourcesContent":["import type { AgentSpec, AgentToolConfig } from '@contractspec/lib.ai-agent';\nimport { defineAgent } from '@contractspec/lib.ai-agent';\nimport type { SupportBotSpec } from './types';\n\nexport interface SupportBotDefinition {\n base: AgentSpec;\n tools?: AgentToolConfig[];\n autoEscalateThreshold?: number;\n}\n\nexport function defineSupportBot(\n definition: SupportBotDefinition\n): SupportBotSpec {\n const base = defineAgent({\n ...definition.base,\n policy: {\n ...definition.base.policy,\n confidence: {\n min: definition.base.policy?.confidence?.min ?? 0.7,\n default: definition.base.policy?.confidence?.default ?? 0.6,\n },\n escalation: {\n confidenceThreshold:\n definition.autoEscalateThreshold ??\n definition.base.policy?.escalation?.confidenceThreshold ??\n definition.base.policy?.confidence?.min ??\n 0.7,\n ...definition.base.policy?.escalation,\n },\n },\n memory: definition.base.memory ?? { maxEntries: 120, ttlMinutes: 120 },\n tools: definition.tools ?? definition.base.tools,\n instructions: `${definition.base.instructions}\\n\\nAlways cite support knowledge sources and flag compliance/billing issues for human review when unsure.`,\n });\n\n return {\n ...base,\n thresholds: {\n autoResolveMinConfidence: definition.autoEscalateThreshold ?? 0.75,\n maxIterations: 6,\n },\n };\n}\n"],"mappings":";;;AAUA,SAAgB,iBACd,YACgB;AAuBhB,QAAO;EACL,GAvBW,YAAY;GACvB,GAAG,WAAW;GACd,QAAQ;IACN,GAAG,WAAW,KAAK;IACnB,YAAY;KACV,KAAK,WAAW,KAAK,QAAQ,YAAY,OAAO;KAChD,SAAS,WAAW,KAAK,QAAQ,YAAY,WAAW;KACzD;IACD,YAAY;KACV,qBACE,WAAW,yBACX,WAAW,KAAK,QAAQ,YAAY,uBACpC,WAAW,KAAK,QAAQ,YAAY,OACpC;KACF,GAAG,WAAW,KAAK,QAAQ;KAC5B;IACF;GACD,QAAQ,WAAW,KAAK,UAAU;IAAE,YAAY;IAAK,YAAY;IAAK;GACtE,OAAO,WAAW,SAAS,WAAW,KAAK;GAC3C,cAAc,GAAG,WAAW,KAAK,aAAa;GAC/C,CAAC;EAIA,YAAY;GACV,0BAA0B,WAAW,yBAAyB;GAC9D,eAAe;GAChB;EACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"classifier.js","names":[],"sources":["../../src/tickets/classifier.ts"],"sourcesContent":["import type { LLMProvider } from '@contractspec/lib.contracts/integrations/providers/llm';\nimport type {\n SupportTicket,\n TicketCategory,\n TicketPriority,\n TicketSentiment,\n TicketClassification,\n} from '../types';\n\nconst CATEGORY_KEYWORDS: Record<TicketCategory, string[]> = {\n billing: ['invoice', 'payout', 'refund', 'charge', 'billing', 'payment'],\n technical: ['bug', 'error', 'crash', 'issue', 'failed', 'timeout'],\n product: ['feature', 'roadmap', 'idea', 'request', 'feedback'],\n account: ['login', 'password', '2fa', 'account', 'profile', 'email change'],\n compliance: ['kyc', 'aml', 'compliance', 'regulation', 'gdpr'],\n other: [],\n};\n\nconst PRIORITY_HINTS: Record<TicketPriority, string[]> = {\n urgent: ['urgent', 'asap', 'immediately', 'today', 'right away'],\n high: ['high priority', 'blocking', 'major', 'critical'],\n medium: ['soon', 'next few days'],\n low: ['nice to have', 'when possible', 'later'],\n};\n\nconst SENTIMENT_HINTS: Record<TicketSentiment, string[]> = {\n positive: ['love', 'great', 'awesome', 'thank you'],\n neutral: ['question', 'wonder', 'curious'],\n negative: ['unhappy', 'bad', 'terrible', 'awful', 'angry'],\n frustrated: ['furious', 'frustrated', 'fed up', 'ridiculous'],\n};\n\nexport interface TicketClassifierOptions {\n keywords?: Partial<Record<TicketCategory, string[]>>;\n llm?: LLMProvider;\n llmModel?: string;\n}\n\nexport class TicketClassifier {\n private readonly keywords: Record<TicketCategory, string[]>;\n private readonly llm?: LLMProvider;\n private readonly llmModel?: string;\n\n constructor(options?: TicketClassifierOptions) {\n this.keywords = {\n ...CATEGORY_KEYWORDS,\n ...(options?.keywords ?? {}),\n } as Record<TicketCategory, string[]>;\n this.llm = options?.llm;\n this.llmModel = options?.llmModel;\n }\n\n async classify(ticket: SupportTicket): Promise<TicketClassification> {\n const heuristics = this.heuristicClassification(ticket);\n if (!this.llm) return heuristics;\n\n try {\n const llmResult = await this.llm.chat(\n [\n {\n role: 'system',\n content: [{ type: 'text', text: 'Classify the support ticket.' }],\n },\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n subject: ticket.subject,\n body: ticket.body,\n channel: ticket.channel,\n }),\n },\n ],\n },\n ],\n {\n responseFormat: 'json',\n model: this.llmModel,\n }\n );\n const content = llmResult.message.content.find((part) => 'text' in part);\n if (content && 'text' in content) {\n const parsed = JSON.parse(\n content.text\n ) as Partial<TicketClassification>;\n return {\n ...heuristics,\n ...parsed,\n intents: parsed.intents ?? heuristics.intents,\n tags: parsed.tags ?? heuristics.tags,\n };\n }\n } catch {\n // fallback to heuristics\n }\n\n return heuristics;\n }\n\n private heuristicClassification(ticket: SupportTicket): TicketClassification {\n const text = `${ticket.subject}\\n${ticket.body}`.toLowerCase();\n const category = this.detectCategory(text);\n const priority = this.detectPriority(text);\n const sentiment = this.detectSentiment(text);\n const intents = this.extractIntents(text);\n const tags = intents.slice(0, 3);\n const confidence = this.estimateConfidence(category, priority, sentiment);\n\n return {\n ticketId: ticket.id,\n category,\n priority,\n sentiment,\n intents,\n tags,\n confidence,\n escalationRequired: priority === 'urgent' || category === 'compliance',\n };\n }\n\n private detectCategory(text: string): TicketCategory {\n for (const [category, keywords] of Object.entries(this.keywords) as [\n TicketCategory,\n string[],\n ][]) {\n if (keywords.some((keyword) => text.includes(keyword))) {\n return category;\n }\n }\n return 'other';\n }\n\n private detectPriority(text: string): TicketPriority {\n for (const priority of [\n 'urgent',\n 'high',\n 'medium',\n 'low',\n ] as TicketPriority[]) {\n if (PRIORITY_HINTS[priority].some((word) => text.includes(word))) {\n return priority;\n }\n }\n return 'medium';\n }\n\n private detectSentiment(text: string): TicketSentiment {\n for (const sentiment of [\n 'frustrated',\n 'negative',\n 'neutral',\n 'positive',\n ] as TicketSentiment[]) {\n if (SENTIMENT_HINTS[sentiment].some((word) => text.includes(word))) {\n return sentiment;\n }\n }\n return 'neutral';\n }\n\n private extractIntents(text: string): string[] {\n const intents: string[] = [];\n if (text.includes('refund') || text.includes('chargeback'))\n intents.push('refund');\n if (text.includes('payout')) intents.push('payout');\n if (text.includes('login')) intents.push('login-help');\n if (text.includes('feature')) intents.push('feature-request');\n if (text.includes('bug') || text.includes('error'))\n intents.push('bug-report');\n return intents.length ? intents : ['general'];\n }\n\n private estimateConfidence(\n category: TicketCategory,\n priority: TicketPriority,\n sentiment: TicketSentiment\n ): number {\n let base = 0.6;\n if (category !== 'other') base += 0.1;\n if (priority === 'urgent' || priority === 'low') base += 0.05;\n if (sentiment === 'frustrated') base -= 0.05;\n return Math.min(0.95, Math.max(0.4, Number(base.toFixed(2))));\n }\n}\n"],"mappings":"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"}