@chatcops/core 0.3.2 → 0.5.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 (162) hide show
  1. package/dist/agent/chat.d.ts +13 -0
  2. package/dist/agent/chat.d.ts.map +1 -0
  3. package/dist/agent/chat.js +42 -0
  4. package/dist/agent/chat.js.map +1 -0
  5. package/dist/agent/errors.d.ts +14 -0
  6. package/dist/agent/errors.d.ts.map +1 -0
  7. package/dist/agent/errors.js +24 -0
  8. package/dist/agent/errors.js.map +1 -0
  9. package/dist/agent/index.d.ts +5 -0
  10. package/dist/agent/index.d.ts.map +1 -0
  11. package/dist/agent/index.js +5 -0
  12. package/dist/agent/index.js.map +1 -0
  13. package/dist/agent/run-turn.d.ts +68 -0
  14. package/dist/agent/run-turn.d.ts.map +1 -0
  15. package/dist/agent/run-turn.js +344 -0
  16. package/dist/agent/run-turn.js.map +1 -0
  17. package/dist/agent/tool-registry.d.ts +28 -0
  18. package/dist/agent/tool-registry.d.ts.map +1 -0
  19. package/dist/agent/tool-registry.js +69 -0
  20. package/dist/agent/tool-registry.js.map +1 -0
  21. package/dist/analytics/index.d.ts +1 -0
  22. package/dist/analytics/index.d.ts.map +1 -1
  23. package/dist/analytics/index.js +1 -0
  24. package/dist/analytics/index.js.map +1 -1
  25. package/dist/analytics/sink.d.ts +24 -0
  26. package/dist/analytics/sink.d.ts.map +1 -0
  27. package/dist/analytics/sink.js +106 -0
  28. package/dist/analytics/sink.js.map +1 -0
  29. package/dist/conversation/index.d.ts +1 -0
  30. package/dist/conversation/index.d.ts.map +1 -1
  31. package/dist/conversation/index.js.map +1 -1
  32. package/dist/conversation/manager.d.ts +62 -6
  33. package/dist/conversation/manager.d.ts.map +1 -1
  34. package/dist/conversation/manager.js +109 -30
  35. package/dist/conversation/manager.js.map +1 -1
  36. package/dist/conversation/store.d.ts +6 -5
  37. package/dist/conversation/store.d.ts.map +1 -1
  38. package/dist/conversation/store.js +4 -0
  39. package/dist/conversation/store.js.map +1 -1
  40. package/dist/index.d.ts +18 -4
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +14 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/limits/budget.d.ts +84 -0
  45. package/dist/limits/budget.d.ts.map +1 -0
  46. package/dist/limits/budget.js +114 -0
  47. package/dist/limits/budget.js.map +1 -0
  48. package/dist/limits/rate-limit.d.ts +53 -0
  49. package/dist/limits/rate-limit.d.ts.map +1 -0
  50. package/dist/limits/rate-limit.js +68 -0
  51. package/dist/limits/rate-limit.js.map +1 -0
  52. package/dist/parts.d.ts +9 -0
  53. package/dist/parts.d.ts.map +1 -0
  54. package/dist/parts.js +17 -0
  55. package/dist/parts.js.map +1 -0
  56. package/dist/protocol/ai-sdk.d.ts +27 -0
  57. package/dist/protocol/ai-sdk.d.ts.map +1 -0
  58. package/dist/protocol/ai-sdk.js +127 -0
  59. package/dist/protocol/ai-sdk.js.map +1 -0
  60. package/dist/protocol/errors.d.ts +10 -0
  61. package/dist/protocol/errors.d.ts.map +1 -0
  62. package/dist/protocol/errors.js +42 -0
  63. package/dist/protocol/errors.js.map +1 -0
  64. package/dist/protocol/index.d.ts +9 -0
  65. package/dist/protocol/index.d.ts.map +1 -0
  66. package/dist/protocol/index.js +6 -0
  67. package/dist/protocol/index.js.map +1 -0
  68. package/dist/protocol/legacy.d.ts +18 -0
  69. package/dist/protocol/legacy.d.ts.map +1 -0
  70. package/dist/protocol/legacy.js +41 -0
  71. package/dist/protocol/legacy.js.map +1 -0
  72. package/dist/protocol/sse.d.ts +10 -0
  73. package/dist/protocol/sse.d.ts.map +1 -0
  74. package/dist/protocol/sse.js +15 -0
  75. package/dist/protocol/sse.js.map +1 -0
  76. package/dist/protocol/v1.d.ts +140 -0
  77. package/dist/protocol/v1.d.ts.map +1 -0
  78. package/dist/protocol/v1.js +15 -0
  79. package/dist/protocol/v1.js.map +1 -0
  80. package/dist/providers/base.d.ts +17 -15
  81. package/dist/providers/base.d.ts.map +1 -1
  82. package/dist/providers/base.js +43 -31
  83. package/dist/providers/base.js.map +1 -1
  84. package/dist/providers/claude.d.ts +40 -2
  85. package/dist/providers/claude.d.ts.map +1 -1
  86. package/dist/providers/claude.js +250 -113
  87. package/dist/providers/claude.js.map +1 -1
  88. package/dist/providers/gemini.d.ts +23 -3
  89. package/dist/providers/gemini.d.ts.map +1 -1
  90. package/dist/providers/gemini.js +245 -102
  91. package/dist/providers/gemini.js.map +1 -1
  92. package/dist/providers/history.d.ts +52 -0
  93. package/dist/providers/history.d.ts.map +1 -0
  94. package/dist/providers/history.js +212 -0
  95. package/dist/providers/history.js.map +1 -0
  96. package/dist/providers/index.d.ts +5 -5
  97. package/dist/providers/index.d.ts.map +1 -1
  98. package/dist/providers/index.js +5 -4
  99. package/dist/providers/index.js.map +1 -1
  100. package/dist/providers/openai.d.ts +37 -3
  101. package/dist/providers/openai.d.ts.map +1 -1
  102. package/dist/providers/openai.js +246 -140
  103. package/dist/providers/openai.js.map +1 -1
  104. package/dist/providers/registry.d.ts +7 -0
  105. package/dist/providers/registry.d.ts.map +1 -0
  106. package/dist/providers/registry.js +12 -0
  107. package/dist/providers/registry.js.map +1 -0
  108. package/dist/providers/schema.d.ts +16 -0
  109. package/dist/providers/schema.d.ts.map +1 -0
  110. package/dist/providers/schema.js +80 -0
  111. package/dist/providers/schema.js.map +1 -0
  112. package/dist/providers/tool-execution.d.ts +10 -0
  113. package/dist/providers/tool-execution.d.ts.map +1 -1
  114. package/dist/providers/tool-execution.js +38 -12
  115. package/dist/providers/tool-execution.js.map +1 -1
  116. package/dist/providers/types.d.ts +71 -0
  117. package/dist/providers/types.d.ts.map +1 -0
  118. package/dist/providers/types.js +2 -0
  119. package/dist/providers/types.js.map +1 -0
  120. package/dist/storage/adapt.d.ts +15 -0
  121. package/dist/storage/adapt.d.ts.map +1 -0
  122. package/dist/storage/adapt.js +83 -0
  123. package/dist/storage/adapt.js.map +1 -0
  124. package/dist/storage/errors.d.ts +18 -0
  125. package/dist/storage/errors.d.ts.map +1 -0
  126. package/dist/storage/errors.js +28 -0
  127. package/dist/storage/errors.js.map +1 -0
  128. package/dist/storage/index.d.ts +5 -0
  129. package/dist/storage/index.d.ts.map +1 -0
  130. package/dist/storage/index.js +4 -0
  131. package/dist/storage/index.js.map +1 -0
  132. package/dist/storage/memory.d.ts +24 -0
  133. package/dist/storage/memory.d.ts.map +1 -0
  134. package/dist/storage/memory.js +265 -0
  135. package/dist/storage/memory.js.map +1 -0
  136. package/dist/storage/types.d.ts +118 -0
  137. package/dist/storage/types.d.ts.map +1 -0
  138. package/dist/storage/types.js +2 -0
  139. package/dist/storage/types.js.map +1 -0
  140. package/dist/testing/conformance.d.ts +29 -0
  141. package/dist/testing/conformance.d.ts.map +1 -0
  142. package/dist/testing/conformance.js +335 -0
  143. package/dist/testing/conformance.js.map +1 -0
  144. package/dist/testing/index.d.ts +3 -0
  145. package/dist/testing/index.d.ts.map +1 -0
  146. package/dist/testing/index.js +5 -0
  147. package/dist/testing/index.js.map +1 -0
  148. package/dist/testing/provider.d.ts +45 -0
  149. package/dist/testing/provider.d.ts.map +1 -0
  150. package/dist/testing/provider.js +82 -0
  151. package/dist/testing/provider.js.map +1 -0
  152. package/dist/tools/base.d.ts +14 -4
  153. package/dist/tools/base.d.ts.map +1 -1
  154. package/dist/tools/base.js +4 -2
  155. package/dist/tools/base.js.map +1 -1
  156. package/dist/tools/lead-capture.d.ts +3 -1
  157. package/dist/tools/lead-capture.d.ts.map +1 -1
  158. package/dist/tools/lead-capture.js +6 -1
  159. package/dist/tools/lead-capture.js.map +1 -1
  160. package/dist/types.d.ts +168 -4
  161. package/dist/types.d.ts.map +1 -1
  162. package/package.json +53 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/testing/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAmC,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/E;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,kBAAkB,KAAK,aAAa,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhH,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAChE,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,kBAAkB,EAAE,CAAC;CACtC;AAmBD,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAO,GAAG,aAAa,EAAE,CAKhH;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CACtB,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,EAC5E,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAO,GAClD,aAAa,EAAE,CAUjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,GAAE,uBAA4B,GAAG,gBAAgB,CA+BhH"}
@@ -0,0 +1,82 @@
1
+ import { chatSyncViaTurn, chatViaTurn } from '../agent/chat.js';
2
+ const USAGE = { inputTokens: 10, outputTokens: 5 };
3
+ function abortError(signal) {
4
+ return signal?.reason ?? new DOMException('The operation was aborted.', 'AbortError');
5
+ }
6
+ function wait(ms, signal) {
7
+ return new Promise((resolve, reject) => {
8
+ if (signal?.aborted)
9
+ return reject(abortError(signal));
10
+ const timer = setTimeout(resolve, ms);
11
+ signal?.addEventListener('abort', () => {
12
+ clearTimeout(timer);
13
+ reject(abortError(signal));
14
+ }, { once: true });
15
+ });
16
+ }
17
+ /** A step that answers with `text`, streamed in pieces of `chunkSize` characters. */
18
+ export function textStep(text, options = {}) {
19
+ const size = options.chunkSize ?? 8;
20
+ const deltas = [];
21
+ for (let i = 0; i < text.length; i += size)
22
+ deltas.push({ type: 'text-delta', delta: text.slice(i, i + size) });
23
+ return [...deltas, { type: 'finish', reason: 'stop', usage: options.usage ?? USAGE, parts: text ? [{ type: 'text', text }] : [] }];
24
+ }
25
+ /** A step that calls tools, optionally after some text. */
26
+ export function toolStep(calls, options = {}) {
27
+ const parts = options.text ? [{ type: 'text', text: options.text }] : [];
28
+ const events = options.text ? [{ type: 'text-delta', delta: options.text }] : [];
29
+ for (const [i, call] of calls.entries()) {
30
+ const id = call.id ?? `call_${i + 1}`;
31
+ const input = call.input ?? {};
32
+ parts.push({ type: 'tool-call', toolCallId: id, toolName: call.name, input, executor: 'server', state: 'pending' });
33
+ events.push({ type: 'tool-call', call: { id, name: call.name, input } });
34
+ }
35
+ return [...events, { type: 'finish', reason: 'tool-calls', usage: options.usage ?? USAGE, parts }];
36
+ }
37
+ /**
38
+ * A provider that plays back a script instead of calling a model, for tests
39
+ * of anything built on ChatCops: each `step()` call takes the next entry.
40
+ *
41
+ * ```ts
42
+ * const provider = scriptedProvider([
43
+ * toolStep([{ name: 'lookup_order', input: { id: 'A-1' } }]),
44
+ * textStep('Your order shipped on Monday.'),
45
+ * ]);
46
+ * ```
47
+ */
48
+ export function scriptedProvider(script, options = {}) {
49
+ const calls = [];
50
+ const provider = {
51
+ name: options.name ?? 'scripted',
52
+ model: 'scripted',
53
+ calls,
54
+ async *step(params) {
55
+ const entry = script[calls.length];
56
+ // A copy, since the reply in `messages` keeps growing after this step.
57
+ calls.push({ ...params, messages: structuredClone(params.messages) });
58
+ if (entry === undefined)
59
+ throw new Error(`scriptedProvider has no step ${calls.length}.`);
60
+ if (entry instanceof Error)
61
+ throw entry;
62
+ if (entry === 'hang') {
63
+ await wait(2 ** 31 - 1, params.signal);
64
+ return;
65
+ }
66
+ for (const event of typeof entry === 'function' ? entry(params) : entry) {
67
+ if (options.delayMs)
68
+ await wait(options.delayMs, params.signal);
69
+ params.signal?.throwIfAborted();
70
+ yield event;
71
+ }
72
+ },
73
+ chat(params) {
74
+ return chatViaTurn(provider, params);
75
+ },
76
+ chatSync(params) {
77
+ return chatSyncViaTurn(provider, params);
78
+ },
79
+ };
80
+ return provider;
81
+ }
82
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/testing/provider.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,20 @@
1
- import type { ToolParameter, ToolResult, ToolDefinition } from '../types.js';
1
+ import type { JSONSchema, MessagePart, ToolAnnotations, ToolContext, ToolDefinition, ToolParameter, ToolResult } from '../types.js';
2
2
  export interface ChatTool {
3
3
  name: string;
4
4
  description: string;
5
- parameters: Record<string, ToolParameter>;
6
- required: string[];
7
- execute(input: Record<string, unknown>): Promise<ToolResult>;
5
+ /** JSON Schema for the input (root `type: 'object'`). Preferred over `parameters`. */
6
+ inputSchema?: JSONSchema;
7
+ /** The 0.4 flat form, used when there's no `inputSchema`. */
8
+ parameters?: Record<string, ToolParameter>;
9
+ required?: string[];
10
+ annotations?: ToolAnnotations;
11
+ /** `context` is new in 0.6; tools written for 0.4 can ignore it. */
12
+ execute(input: Record<string, unknown>, context?: ToolContext): Promise<ToolResult>;
13
+ /**
14
+ * Parts to add to the reply after this tool runs, for things the widget
15
+ * shows besides text. `LeadCaptureTool` adds a `lead-captured` part.
16
+ */
17
+ emits?(result: ToolResult): MessagePart[];
8
18
  }
9
19
  export declare function toolToDefinition(tool: ChatTool): ToolDefinition;
10
20
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAO/D"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,oEAAoE;IACpE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpF;;;OAGG;IACH,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE,CAAC;CAC3C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAS/D"}
@@ -2,8 +2,10 @@ export function toolToDefinition(tool) {
2
2
  return {
3
3
  name: tool.name,
4
4
  description: tool.description,
5
- parameters: tool.parameters,
6
- required: tool.required,
5
+ ...(tool.inputSchema ? { inputSchema: tool.inputSchema } : {}),
6
+ ...(tool.parameters ? { parameters: tool.parameters } : {}),
7
+ ...(tool.required ? { required: tool.required } : {}),
8
+ ...(tool.annotations ? { annotations: tool.annotations } : {}),
7
9
  };
8
10
  }
9
11
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ToolResult, LeadData } from '../types.js';
1
+ import type { LeadData, MessagePart, ToolResult } from '../types.js';
2
2
  import type { ChatTool } from './base.js';
3
3
  export type LeadCaptureCallback = (lead: LeadData) => void | Promise<void>;
4
4
  export declare class LeadCaptureTool implements ChatTool {
@@ -29,6 +29,8 @@ export declare class LeadCaptureTool implements ChatTool {
29
29
  required: string[];
30
30
  private onCapture?;
31
31
  constructor(onCapture?: LeadCaptureCallback);
32
+ /** A captured lead shows up in the reply as a `lead-captured` part. */
33
+ emits(result: ToolResult): MessagePart[];
32
34
  execute(input: Record<string, unknown>): Promise<ToolResult>;
33
35
  }
34
36
  //# sourceMappingURL=lead-capture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lead-capture.d.ts","sourceRoot":"","sources":["../../src/tools/lead-capture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAU3E,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,IAAI,SAAkB;IACtB,WAAW,SAA6I;IACxJ,UAAU;;;;;;;;;;;;;;;;;;;;;MAMR;IACF,QAAQ,WAAuC;IAE/C,OAAO,CAAC,SAAS,CAAC,CAAsB;gBAE5B,SAAS,CAAC,EAAE,mBAAmB;IAIrC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAmCnE"}
1
+ {"version":3,"file":"lead-capture.d.ts","sourceRoot":"","sources":["../../src/tools/lead-capture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAU3E,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,IAAI,SAAkB;IACtB,WAAW,SAA6I;IACxJ,UAAU;;;;;;;;;;;;;;;;;;;;;MAMR;IACF,QAAQ,WAAuC;IAE/C,OAAO,CAAC,SAAS,CAAC,CAAsB;gBAE5B,SAAS,CAAC,EAAE,mBAAmB;IAI3C,uEAAuE;IACvE,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE;IAIlC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAoCnE"}
@@ -21,6 +21,10 @@ export class LeadCaptureTool {
21
21
  constructor(onCapture) {
22
22
  this.onCapture = onCapture;
23
23
  }
24
+ /** A captured lead shows up in the reply as a `lead-captured` part. */
25
+ emits(result) {
26
+ return result.success && result.data ? [{ type: 'lead-captured', lead: result.data }] : [];
27
+ }
24
28
  async execute(input) {
25
29
  const parsed = leadInputSchema.safeParse(input);
26
30
  if (!parsed.success) {
@@ -41,7 +45,8 @@ export class LeadCaptureTool {
41
45
  try {
42
46
  await this.onCapture(lead);
43
47
  }
44
- catch {
48
+ catch (err) {
49
+ console.error('[chatcops] Lead capture callback failed:', err);
45
50
  return {
46
51
  success: false,
47
52
  message: 'Failed to process lead capture callback.',
@@ -1 +1 @@
1
- {"version":3,"file":"lead-capture.js","sourceRoot":"","sources":["../../src/tools/lead-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,OAAO,eAAe;IAC1B,IAAI,GAAG,cAAc,CAAC;IACtB,WAAW,GAAG,yIAAyI,CAAC;IACxJ,UAAU,GAAG;QACX,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACvE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,eAAe,EAAE;QAChE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC/E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC7E,cAAc,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,gCAAgC,EAAE;KAC3F,CAAC;IACF,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEvC,SAAS,CAAuB;IAExC,YAAY,SAA+B;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA8B;QAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,sBAAsB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACtF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAa;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;YACtB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;YAC5B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;YAC1C,MAAM,EAAE,iBAAiB;SAC1B,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,0CAA0C;iBACpD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,yCAAyC;SACnD,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"lead-capture.js","sourceRoot":"","sources":["../../src/tools/lead-capture.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,7 +1,27 @@
1
1
  export interface ChatMessage {
2
2
  id: string;
3
3
  role: 'user' | 'assistant' | 'system';
4
+ /**
5
+ * The message text. For a message with `parts`, this is the text parts
6
+ * joined, kept so older stores and widgets that only know `content` work.
7
+ */
4
8
  content: string;
9
+ /**
10
+ * What the message is made of: text, tool calls and their results, sources.
11
+ * Messages saved by older versions have no parts; read them with
12
+ * `partsOf(message)`, which treats `content` as one text part.
13
+ */
14
+ parts?: MessagePart[];
15
+ /**
16
+ * `incomplete` is a reply that stopped early (a provider error, max tokens).
17
+ * `aborted` is a reply the visitor walked away from. Neither is sent back to
18
+ * the model as if it were a finished answer. Missing means complete.
19
+ */
20
+ status?: 'complete' | 'incomplete' | 'aborted';
21
+ /** Tokens the reply used. Assistant messages only. */
22
+ usage?: TokenUsage;
23
+ /** True on replies a model wrote, for machine-readable AI marking. */
24
+ aiGenerated?: boolean;
5
25
  timestamp: number;
6
26
  metadata?: Record<string, unknown>;
7
27
  }
@@ -9,9 +29,81 @@ export interface Conversation {
9
29
  id: string;
10
30
  messages: ChatMessage[];
11
31
  metadata?: Record<string, unknown>;
32
+ /**
33
+ * Goes up by one on every write, for stores that check for conflicting
34
+ * writes. Missing on conversations from stores that don't track it.
35
+ */
36
+ version?: number;
12
37
  createdAt: number;
13
38
  updatedAt: number;
14
39
  }
40
+ export interface TokenUsage {
41
+ inputTokens: number;
42
+ outputTokens: number;
43
+ /** Input tokens read from the provider's prompt cache. */
44
+ cacheReadTokens?: number;
45
+ /** Input tokens written to the provider's prompt cache. */
46
+ cacheWriteTokens?: number;
47
+ }
48
+ /**
49
+ * Data a provider needs back on the next request but nobody else reads, keyed
50
+ * by provider name. For example Claude's thinking signatures or Gemini's
51
+ * thought signatures. Store it as is and never show it.
52
+ */
53
+ export type ProviderMetadata = Record<string, Record<string, unknown>>;
54
+ /** A JSON Schema object (draft 2020-12). Providers each accept a subset. */
55
+ export type JSONSchema = Record<string, unknown>;
56
+ export type ToolExecutor = 'server' | 'client' | 'mcp';
57
+ export type ToolCallState = 'pending' | 'awaiting-approval' | 'done' | 'error' | 'expired';
58
+ export interface TextPart {
59
+ type: 'text';
60
+ text: string;
61
+ providerMetadata?: ProviderMetadata;
62
+ }
63
+ /** The model's reasoning. Kept for the provider, never shown to visitors. */
64
+ export interface ReasoningPart {
65
+ type: 'reasoning';
66
+ text: string;
67
+ providerMetadata?: ProviderMetadata;
68
+ }
69
+ export interface SourcePart {
70
+ type: 'source';
71
+ sourceId: string;
72
+ url: string;
73
+ title?: string;
74
+ snippet?: string;
75
+ }
76
+ export interface ToolCallPart {
77
+ type: 'tool-call';
78
+ toolCallId: string;
79
+ toolName: string;
80
+ input: unknown;
81
+ executor: ToolExecutor;
82
+ state: ToolCallState;
83
+ providerMetadata?: ProviderMetadata;
84
+ }
85
+ export interface ToolResultPart {
86
+ type: 'tool-result';
87
+ toolCallId: string;
88
+ toolName: string;
89
+ output?: unknown;
90
+ error?: string;
91
+ }
92
+ export interface LeadCapturedPart {
93
+ type: 'lead-captured';
94
+ lead: Record<string, unknown>;
95
+ }
96
+ export interface HandoffPart {
97
+ type: 'handoff';
98
+ status: 'requested' | 'queued' | 'connected' | 'ended';
99
+ provider?: string;
100
+ }
101
+ /**
102
+ * One piece of a message. An assistant message for a turn with tool calls
103
+ * holds every step in order: reasoning, text and tool calls, then the tool
104
+ * results, then the next step.
105
+ */
106
+ export type MessagePart = TextPart | ReasoningPart | SourcePart | ToolCallPart | ToolResultPart | LeadCapturedPart | HandoffPart;
15
107
  export interface ChatRequest {
16
108
  conversationId: string;
17
109
  message: string;
@@ -43,11 +135,33 @@ export interface ToolParameter {
43
135
  description: string;
44
136
  enum?: string[];
45
137
  }
138
+ /** Hints about what a tool does, in the shape MCP uses. Not enforced. */
139
+ export interface ToolAnnotations {
140
+ title?: string;
141
+ /** The tool only reads; calling it changes nothing. */
142
+ readOnlyHint?: boolean;
143
+ /** The tool can change or delete something that matters. */
144
+ destructiveHint?: boolean;
145
+ }
46
146
  export interface ToolDefinition {
47
147
  name: string;
48
148
  description: string;
49
- parameters: Record<string, ToolParameter>;
50
- required: string[];
149
+ /**
150
+ * JSON Schema for the tool's input. The root must be `type: 'object'`.
151
+ * Nested objects, arrays, `enum`, `anyOf` and `$ref` all work.
152
+ */
153
+ inputSchema?: JSONSchema;
154
+ /** The 0.4 flat form, used when there's no `inputSchema`. */
155
+ parameters?: Record<string, ToolParameter>;
156
+ /** Required keys of `parameters`. Ignored with `inputSchema`, which has its own `required`. */
157
+ required?: string[];
158
+ annotations?: ToolAnnotations;
159
+ }
160
+ /** What a running tool gets besides its input. */
161
+ export interface ToolContext {
162
+ conversationId: string;
163
+ /** Aborts when the visitor leaves or the tool times out. */
164
+ signal: AbortSignal;
51
165
  }
52
166
  export interface ToolResult {
53
167
  success: boolean;
@@ -63,12 +177,57 @@ export type ProviderToolExecutor = (call: ProviderToolCall) => Promise<ToolResul
63
177
  export interface WebhookConfig {
64
178
  url: string;
65
179
  events: string[];
180
+ /** Signs each delivery; check it with `verifyWebhook` from `@chatcops/server`. */
66
181
  secret?: string;
182
+ /**
183
+ * Allows http and hosts on loopback, private or link-local networks, which
184
+ * are refused by default. Use it for a local receiver during development.
185
+ */
186
+ allowPrivateNetwork?: boolean;
67
187
  }
188
+ /** How much effort a model spends on each reply. Lower is faster and cheaper. */
189
+ export type ProviderEffort = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
68
190
  export interface ProviderConfig {
69
- type: 'claude' | 'openai' | 'gemini';
70
- apiKey: string;
191
+ type: 'claude' | 'openai' | 'gemini' | 'openai-compatible' | (string & {});
192
+ /** Required for the hosted providers; optional for openai-compatible and custom providers. */
193
+ apiKey?: string;
71
194
  model?: string;
195
+ /**
196
+ * Custom API endpoint, for proxies and OpenAI-compatible servers
197
+ * (Ollama, vLLM, Groq, OpenRouter). Passed to the provider SDK as is.
198
+ */
199
+ baseURL?: string;
200
+ /** Extra request headers for OpenAI and OpenAI-compatible endpoints. */
201
+ headers?: Record<string, string>;
202
+ /** OpenAI providers: omit tools when false. Defaults to true. */
203
+ supportsTools?: boolean;
204
+ /** OpenAI organization id. Ignored by other providers. */
205
+ organization?: string;
206
+ /**
207
+ * Reply effort for models that support it (Claude 4.6+, OpenAI reasoning
208
+ * models, Gemini thinking models). Defaults to `'low'`, which suits chat.
209
+ * Ignored by models without an effort setting.
210
+ */
211
+ effort?: ProviderEffort;
212
+ /**
213
+ * OpenAI providers: the name of the output token limit sent to the API.
214
+ * Defaults to `'max_completion_tokens'` for openai and `'max_tokens'`
215
+ * for openai-compatible.
216
+ */
217
+ maxTokensParam?: 'max_completion_tokens' | 'max_tokens';
218
+ /**
219
+ * The `fetch` the provider SDK sends requests with. Defaults to the global
220
+ * one. Set it to route requests through a proxy or to replay recorded
221
+ * responses in tests.
222
+ */
223
+ fetch?: typeof fetch;
224
+ /**
225
+ * Claude only: mark the system prompt and tools as a cached prefix, so
226
+ * later requests read them from the prompt cache at a tenth of the price.
227
+ * On by default. Prompts shorter than the model's minimum aren't cached
228
+ * either way.
229
+ */
230
+ promptCaching?: boolean;
72
231
  }
73
232
  export interface ProviderChatParams {
74
233
  messages: ChatMessage[];
@@ -78,6 +237,11 @@ export interface ProviderChatParams {
78
237
  toolTimeoutMs?: number;
79
238
  maxTokens?: number;
80
239
  temperature?: number;
240
+ /**
241
+ * Aborts the reply, for example when the visitor disconnects. The provider
242
+ * request is cancelled and no further tool rounds start.
243
+ */
244
+ signal?: AbortSignal;
81
245
  }
82
246
  export interface AnalyticsEvent {
83
247
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/C,sDAAsD;IACtD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvE,4EAA4E;AAC5E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3F,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,aAAa,GACb,UAAU,GACV,YAAY,GACZ,cAAc,GACd,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEnF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,mBAAmB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC3E,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iEAAiE;IACjE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,uBAAuB,GAAG,YAAY,CAAC;IACxD;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,19 @@
1
1
  {
2
2
  "name": "@chatcops/core",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "description": "Core AI provider abstraction, tools, and knowledge base for ChatCops",
5
+ "keywords": [
6
+ "chatcops",
7
+ "ai",
8
+ "chatbot",
9
+ "llm",
10
+ "claude",
11
+ "openai",
12
+ "gemini",
13
+ "tool-calling"
14
+ ],
15
+ "homepage": "https://chat.codercops.com",
16
+ "bugs": "https://github.com/codercops/chatcops/issues",
5
17
  "type": "module",
6
18
  "main": "dist/index.js",
7
19
  "types": "dist/index.d.ts",
@@ -9,30 +21,66 @@
9
21
  ".": {
10
22
  "types": "./dist/index.d.ts",
11
23
  "import": "./dist/index.js"
24
+ },
25
+ "./providers/claude": {
26
+ "types": "./dist/providers/claude.d.ts",
27
+ "import": "./dist/providers/claude.js"
28
+ },
29
+ "./providers/openai": {
30
+ "types": "./dist/providers/openai.d.ts",
31
+ "import": "./dist/providers/openai.js"
32
+ },
33
+ "./providers/gemini": {
34
+ "types": "./dist/providers/gemini.d.ts",
35
+ "import": "./dist/providers/gemini.js"
36
+ },
37
+ "./protocol": {
38
+ "types": "./dist/protocol/index.d.ts",
39
+ "import": "./dist/protocol/index.js"
40
+ },
41
+ "./testing": {
42
+ "types": "./dist/testing/index.d.ts",
43
+ "import": "./dist/testing/index.js"
44
+ },
45
+ "./testing/provider": {
46
+ "types": "./dist/testing/provider.d.ts",
47
+ "import": "./dist/testing/provider.js"
12
48
  }
13
49
  },
14
50
  "files": [
15
51
  "dist"
16
52
  ],
17
53
  "dependencies": {
18
- "@anthropic-ai/sdk": "^0.39.0",
19
- "openai": "^4.80.0",
20
- "@google/generative-ai": "^0.21.0",
54
+ "@anthropic-ai/sdk": "^0.135.0",
55
+ "@google/genai": "^2.30.0",
56
+ "openai": "^7.39.0",
21
57
  "zod": "^3.24.0"
22
58
  },
59
+ "peerDependencies": {
60
+ "vitest": ">=3.2.0"
61
+ },
62
+ "peerDependenciesMeta": {
63
+ "vitest": {
64
+ "optional": true
65
+ }
66
+ },
23
67
  "devDependencies": {
24
68
  "typescript": "^5.7.0",
25
69
  "vitest": "^4.1.11"
26
70
  },
27
71
  "repository": {
28
72
  "type": "git",
29
- "url": "https://github.com/codercops/chatcops",
73
+ "url": "git+https://github.com/codercops/chatcops.git",
30
74
  "directory": "packages/core"
31
75
  },
32
76
  "publishConfig": {
33
77
  "access": "public"
34
78
  },
35
79
  "license": "MIT",
80
+ "engines": {
81
+ "node": ">=22"
82
+ },
83
+ "sideEffects": false,
36
84
  "scripts": {
37
85
  "build": "tsc",
38
86
  "typecheck": "tsc --noEmit",