@talkpilot/core-db 1.3.26 → 1.3.27
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.
- package/README.md +38 -0
- package/dist/talkpilot/calls/calls.constants.d.ts +14 -0
- package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.constants.js +15 -1
- package/dist/talkpilot/calls/calls.constants.js.map +1 -1
- package/dist/talkpilot/calls/calls.getters.d.ts +3 -0
- package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.getters.js +12 -1
- package/dist/talkpilot/calls/calls.getters.js.map +1 -1
- package/dist/talkpilot/calls/calls.types.d.ts +11 -2
- package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/talkpilot/calls/__tests__/calls.spec.ts +189 -1
- package/src/talkpilot/calls/calls.constants.ts +17 -0
- package/src/talkpilot/calls/calls.getters.ts +19 -0
- package/src/talkpilot/calls/calls.types.ts +13 -10
package/README.md
CHANGED
|
@@ -152,7 +152,9 @@ Refer to `DEVELOPMENT.md` for the full walkthrough, token instructions, and fact
|
|
|
152
152
|
| 1.3.18 | WebsiteTalk multi-website API (CP-1372): ships `websiteUrls` module, scan getters by `websiteUrlId`, `activeScanId` getters on `clientsConfig`. **Note:** 1.3.17 did not include these — they landed after merge. **Breaking:** `WebsiteTalkProduct.defaultBaseUrl` removed from type. |
|
|
153
153
|
| 1.3.19 | WebsiteTalk flow provisioning (WTIS activate-scan): optional `flowId` on `WebsiteTalkProduct`; `bindClientPhoneToFlow(clientId, flowId)` sets `flow_id` on the client's primary `phone_numbers` document so inbound calls route to the provisioned TalkPilot flow. |
|
|
154
154
|
| 1.3.20 | `FINAL_STATUSES` constant for terminal Twilio call statuses (`no-answer`, `completed`, `busy`, `failed`, `canceled`) in `calls.constants`. |
|
|
155
|
+
| 1.3.21 | Added `ToolExecutionStep` type, `steps` field to `ToolExecution`, and `pushToolExecution` getter (CP-1093). Added `ToolExecutionStepLevel` named type and `TOOL_EXECUTIONS_DEFAULT_LIMIT`/`SKIP` constants. Widened `ToolExecutionStep.data` to `Record<string, unknown> \| string` — allows plain string steps alongside structured JSON. Added optional `ToolExecutionStep.payload` for structured drill-down data. |
|
|
155
156
|
| 1.3.22 | `CallsFilterParams.status` typed as `CallStatus` instead of `string` — aligns call-query filters with the Twilio status union from 1.3.17. |
|
|
157
|
+
| 1.3.23 | Merge of 1.3.21 and 1.3.22 — combines the `ToolExecutionStep`/`steps`/`pushToolExecution` work (CP-1093) with the `CallsFilterParams.status: CallStatus` fix. Adds `CallStatusValues` (const object) with `CallStatus` and `ALL_CALL_STATUSES` derived from it. `CallStatus` still does not include `"redirected"` — tracked separately. |
|
|
156
158
|
| 1.3.24 | **Breaking:** removed `flowId` from `WebsiteTalkProduct` — flow source of truth is `phone_numbers.flow_id`. Added `getPrimaryPhoneFlowId(clientId)`. |
|
|
157
159
|
| 1.3.25 | Added `disconnectDb()` to close all MongoDB clients opened by `ensureDbConnected()` — for one-shot scripts that must exit cleanly. |
|
|
158
160
|
### 1.1.9
|
|
@@ -470,6 +472,26 @@ Centralizes terminal Twilio call statuses so consumers (e.g. TalkPilot Server `c
|
|
|
470
472
|
|
|
471
473
|
No — purely additive. Replace local `FINAL_STATUSES` arrays with `import { FINAL_STATUSES } from "@talkpilot/core-db"` when convenient.
|
|
472
474
|
|
|
475
|
+
### 1.3.21 — Tool execution steps & push getter (CP-1093)
|
|
476
|
+
|
|
477
|
+
Added `ToolExecutionStep` type, `steps` field on `ToolExecution`, `pushToolExecution` getter, named `ToolExecutionStepLevel` type, and pagination constants.
|
|
478
|
+
|
|
479
|
+
**Added**
|
|
480
|
+
|
|
481
|
+
| Export | Purpose |
|
|
482
|
+
| --- | --- |
|
|
483
|
+
| `ToolExecutionStepLevel` | Named type: `"info" \| "warn" \| "error"`. |
|
|
484
|
+
| `ToolExecution.steps` | Optional `ToolExecutionStep[]`. Ordered log of intermediate steps within a tool call (e.g. `audio_enrichment`, `google_places`, `subject_classification`). Absent on executions recorded before this version. |
|
|
485
|
+
| `ToolExecutionStep.payload` | Optional `Record<string, unknown>`. Structured data for UI drill-down, alongside the human-readable `data` field. |
|
|
486
|
+
| `pushToolExecution(callSid, execution)` | Append a `ToolExecution` to the call's `toolExecutions` array via `$push`. |
|
|
487
|
+
| `getToolExecutionsByCallSid(callSid, opts?)` | Fetch the `toolExecutions` array for a call. `opts.skip` and `opts.limit` (default `TOOL_EXECUTIONS_DEFAULT_LIMIT` = 50) support pagination. Returns `[]` when the call has no executions or does not exist. |
|
|
488
|
+
| `TOOL_EXECUTIONS_DEFAULT_LIMIT` | `50` — default page size for `getToolExecutionsByCallSid`. |
|
|
489
|
+
| `TOOL_EXECUTIONS_DEFAULT_SKIP` | `0` — default skip for `getToolExecutionsByCallSid`. |
|
|
490
|
+
|
|
491
|
+
**Do I need to update my app?**
|
|
492
|
+
|
|
493
|
+
No — purely additive. All new fields are optional and existing documents continue to work unchanged.
|
|
494
|
+
|
|
473
495
|
### 1.3.22 — `CallsFilterParams.status` type alignment
|
|
474
496
|
|
|
475
497
|
Tightens the `status` filter field on `CallsFilterParams` from `string` to `CallStatus` so call-query consumers get compile-time validation against the Twilio-aligned status union introduced in 1.3.17.
|
|
@@ -484,6 +506,22 @@ Tightens the `status` filter field on `CallsFilterParams` from `string` to `Call
|
|
|
484
506
|
|
|
485
507
|
Only if you pass a non-`CallStatus` string to `CallsFilterParams.status` — fix the value or cast. No runtime behavior change.
|
|
486
508
|
|
|
509
|
+
### 1.3.23 — Merge of 1.3.21 and 1.3.22, plus `CallStatusValues`
|
|
510
|
+
|
|
511
|
+
Combines the CP-1093 tool-execution-steps work (1.3.21) with the `CallsFilterParams.status` type fix (1.3.22); both were published independently from diverging branches.
|
|
512
|
+
|
|
513
|
+
**Added**
|
|
514
|
+
|
|
515
|
+
| Export | Purpose |
|
|
516
|
+
| --- | --- |
|
|
517
|
+
| `CallStatusValues` | `as const` object mapping named keys (`Completed`, `Failed`, ...) to the 9 raw Twilio-aligned status strings — gives enum-like dot access (`CallStatusValues.Completed`) while `CallStatus` stays a plain string-literal union (no breaking change for existing `status === "completed"` comparisons). |
|
|
518
|
+
| `CallStatus` | Now derived from `CallStatusValues` (`(typeof CallStatusValues)[keyof typeof CallStatusValues]`) instead of a hand-written union — single source of truth. |
|
|
519
|
+
| `ALL_CALL_STATUSES` | `CallStatus[]` — `Object.values(CallStatusValues)`, for runtime validation of raw input (e.g. HTTP query params) against `CallStatus`. |
|
|
520
|
+
|
|
521
|
+
**Do I need to update my app?** No — `CallStatus` is structurally identical to before (same 9 string literals); this is a source-only refactor.
|
|
522
|
+
|
|
523
|
+
`CallStatus` still does not include `"redirected"` — tracked separately.
|
|
524
|
+
|
|
487
525
|
## 🛠 CI/CD & deployment
|
|
488
526
|
|
|
489
527
|
- This package is consumed by Cloud Build-based services (TalkPilot Server, MIS, CIS) as a dependency when Docker images are built. Keep `dist/` in sync with your builds because the compiled artifact is what downstream services install.
|
|
@@ -18,4 +18,18 @@ export declare const STATS_MAX_TIME_MS = 30000;
|
|
|
18
18
|
*/
|
|
19
19
|
export declare const TREND_MONTH_BUCKET_MIN_MONTHS = 6;
|
|
20
20
|
export declare const TREND_WEEK_BUCKET_MIN_MONTHS = 3;
|
|
21
|
+
export declare const TOOL_EXECUTIONS_DEFAULT_SKIP = 0;
|
|
22
|
+
export declare const TOOL_EXECUTIONS_DEFAULT_LIMIT = 50;
|
|
23
|
+
export declare const CallStatusValues: {
|
|
24
|
+
readonly Initiated: "initiated";
|
|
25
|
+
readonly Ringing: "ringing";
|
|
26
|
+
readonly InProgress: "in-progress";
|
|
27
|
+
readonly Answered: "answered";
|
|
28
|
+
readonly Completed: "completed";
|
|
29
|
+
readonly Busy: "busy";
|
|
30
|
+
readonly NoAnswer: "no-answer";
|
|
31
|
+
readonly Failed: "failed";
|
|
32
|
+
readonly Canceled: "canceled";
|
|
33
|
+
};
|
|
34
|
+
export declare const ALL_CALL_STATUSES: ("in-progress" | "answered" | "no-answer" | "completed" | "busy" | "failed" | "canceled" | "initiated" | "ringing")[];
|
|
21
35
|
//# sourceMappingURL=calls.constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAG,UAAmB,CAAC;AAE5D,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,4EAA4E;AAC5E,eAAO,MAAM,cAAc,mEAMjB,CAAC;AAEX,6BAA6B;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"calls.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAG,UAAmB,CAAC;AAE5D,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,4EAA4E;AAC5E,eAAO,MAAM,cAAc,mEAMjB,CAAC;AAEX,6BAA6B;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAEX,eAAO,MAAM,iBAAiB,uHAAkC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.FINAL_STATUSES = exports.IN_CALL_STATUSES = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
|
|
3
|
+
exports.ALL_CALL_STATUSES = exports.CallStatusValues = exports.TOOL_EXECUTIONS_DEFAULT_LIMIT = exports.TOOL_EXECUTIONS_DEFAULT_SKIP = exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.FINAL_STATUSES = exports.IN_CALL_STATUSES = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
|
|
4
4
|
/** Customer role within a conference call. */
|
|
5
5
|
exports.CONFERENCE_ROLE_CUSTOMER = "customer";
|
|
6
6
|
/** Supervisor role within a conference call. */
|
|
@@ -27,4 +27,18 @@ exports.STATS_MAX_TIME_MS = 30_000;
|
|
|
27
27
|
*/
|
|
28
28
|
exports.TREND_MONTH_BUCKET_MIN_MONTHS = 6;
|
|
29
29
|
exports.TREND_WEEK_BUCKET_MIN_MONTHS = 3;
|
|
30
|
+
exports.TOOL_EXECUTIONS_DEFAULT_SKIP = 0;
|
|
31
|
+
exports.TOOL_EXECUTIONS_DEFAULT_LIMIT = 50;
|
|
32
|
+
exports.CallStatusValues = {
|
|
33
|
+
Initiated: "initiated",
|
|
34
|
+
Ringing: "ringing",
|
|
35
|
+
InProgress: "in-progress",
|
|
36
|
+
Answered: "answered",
|
|
37
|
+
Completed: "completed",
|
|
38
|
+
Busy: "busy",
|
|
39
|
+
NoAnswer: "no-answer",
|
|
40
|
+
Failed: "failed",
|
|
41
|
+
Canceled: "canceled",
|
|
42
|
+
};
|
|
43
|
+
exports.ALL_CALL_STATUSES = Object.values(exports.CallStatusValues);
|
|
30
44
|
//# sourceMappingURL=calls.constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,UAAmB,CAAC;AAE5D,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,YAAqB,CAAC;AAEhE,wEAAwE;AAC3D,QAAA,gBAAgB,GAAG,CAAC,aAAa,EAAE,UAAU,CAAU,CAAC;AAErE,4EAA4E;AAC/D,QAAA,cAAc,GAAG;IAC5B,WAAW;IACX,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,6BAA6B;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC,iEAAiE;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;GAKG;AACU,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,4BAA4B,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"calls.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,UAAmB,CAAC;AAE5D,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,YAAqB,CAAC;AAEhE,wEAAwE;AAC3D,QAAA,gBAAgB,GAAG,CAAC,aAAa,EAAE,UAAU,CAAU,CAAC;AAErE,4EAA4E;AAC/D,QAAA,cAAc,GAAG;IAC5B,WAAW;IACX,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,6BAA6B;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC,iEAAiE;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;GAKG;AACU,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAEjC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEnC,QAAA,gBAAgB,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEE,QAAA,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC"}
|
|
@@ -9,6 +9,9 @@ export declare const getCallsByClient: (clientId: string) => Promise<import("mon
|
|
|
9
9
|
export declare const getCallsByFlow: (flowId: ObjectId) => Promise<import("mongodb").WithId<Call>[]>;
|
|
10
10
|
export declare const createCallDoc: (call: Omit<Call, "createdAt" | "updatedAt" | "env">) => Promise<import("mongodb").InsertOneResult<Call>>;
|
|
11
11
|
export declare const updateCallByCallSid: (callSid: string, updates: CallUpdateParams) => Promise<CallDoc | null>;
|
|
12
|
+
export declare const getToolExecutionsByCallSid: (callSid: string, opts?: Pick<CallQueryOptions, "skip" | "limit"> & {
|
|
13
|
+
clientId?: string;
|
|
14
|
+
}) => Promise<ToolExecution[]>;
|
|
12
15
|
export declare const updateCallStatusByCallSid: (callSid: string, status: CallStatus) => Promise<CallDoc | null>;
|
|
13
16
|
export declare const pushToolExecution: (callSid: string, execution: ToolExecution) => Promise<void>;
|
|
14
17
|
export declare const getCallsByClientAndDateRange: (clientId: string, startDate: Date, endDate: Date) => Promise<import("mongodb").WithId<Call>[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"calls.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKrF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,eAAO,MAAM,kBAAkB,0CAE9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,mDAE/C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,aAAa,MAAM,8CAIxD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,8CAEhD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,QAAQ,8CAE9C,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,MAAM,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC,qDAQpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,gBAAgB,KACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAWxB,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EACf,OAAO,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KACtE,OAAO,CAAC,aAAa,EAAE,CAUzB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,QAAQ,UAAU,KACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKtB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,WAAW,aAAa,KACvB,OAAO,CAAC,IAAI,CAKd,CAAC;AAIF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,8CAWd,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,EACnB,UAAU,gBAAgB,KACzB,OAAO,CAAC,OAAO,EAAE,CAGnB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,OAAO,MAAM,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAEpE,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,mBAAmB,EAAE,MAAM,EAC3B,IAAI,GAAE,SAAc,EACpB,KAAK,GAAE,SAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,eAAO,MAAM,KAAK;qBACC,IAAI,SAAS,IAAI,KAAG,SAAS;sBAC9B,SAAS;qBACV,SAAS;qBAKT,SAAS;yBAKH,IAAI,KAAG,SAAS;CAItC,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,GAAE,IAAiB,GAAG,IAAI,CAIrD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CjE;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA2BnC"}
|
|
@@ -33,13 +33,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.range = exports.countCalls = exports.findCallsByQuery = exports.getCallsByClientAndDateRange = exports.pushToolExecution = exports.updateCallStatusByCallSid = exports.updateCallByCallSid = exports.createCallDoc = exports.getCallsByFlow = exports.getCallsByClient = exports.getCallsByPhoneNumber = exports.getCallByCallSid = exports.getCallsCollection = void 0;
|
|
36
|
+
exports.range = exports.countCalls = exports.findCallsByQuery = exports.getCallsByClientAndDateRange = exports.pushToolExecution = exports.updateCallStatusByCallSid = exports.getToolExecutionsByCallSid = exports.updateCallByCallSid = exports.createCallDoc = exports.getCallsByFlow = exports.getCallsByClient = exports.getCallsByPhoneNumber = exports.getCallByCallSid = exports.getCallsCollection = void 0;
|
|
37
37
|
exports.countCallsByPhoneInRange = countCallsByPhoneInRange;
|
|
38
38
|
exports.startOfDay = startOfDay;
|
|
39
39
|
exports.addDays = addDays;
|
|
40
40
|
exports.getCallsStatsForDateRange = getCallsStatsForDateRange;
|
|
41
41
|
exports.getCallsHourlyAggregation = getCallsHourlyAggregation;
|
|
42
42
|
const index_1 = require("../index");
|
|
43
|
+
const calls_constants_1 = require("./calls.constants");
|
|
43
44
|
const process = __importStar(require("node:process"));
|
|
44
45
|
const query_utils_1 = require("../utils/query.utils");
|
|
45
46
|
const getCallsCollection = () => {
|
|
@@ -82,6 +83,16 @@ const updateCallByCallSid = async (callSid, updates) => {
|
|
|
82
83
|
}, { returnDocument: "after" });
|
|
83
84
|
};
|
|
84
85
|
exports.updateCallByCallSid = updateCallByCallSid;
|
|
86
|
+
const getToolExecutionsByCallSid = async (callSid, opts) => {
|
|
87
|
+
const skip = Math.max(0, opts?.skip ?? calls_constants_1.TOOL_EXECUTIONS_DEFAULT_SKIP);
|
|
88
|
+
const limit = Math.max(1, opts?.limit ?? calls_constants_1.TOOL_EXECUTIONS_DEFAULT_LIMIT);
|
|
89
|
+
const filter = { callSid };
|
|
90
|
+
if (opts?.clientId != null)
|
|
91
|
+
filter.clientId = opts.clientId;
|
|
92
|
+
const call = await (0, exports.getCallsCollection)().findOne(filter, { projection: { toolExecutions: { $slice: [skip, limit] } } });
|
|
93
|
+
return call?.toolExecutions ?? [];
|
|
94
|
+
};
|
|
95
|
+
exports.getToolExecutionsByCallSid = getToolExecutionsByCallSid;
|
|
85
96
|
const updateCallStatusByCallSid = async (callSid, status) => (0, exports.getCallsCollection)().findOneAndUpdate({ callSid }, { $set: { status, updatedAt: new Date() } }, { returnDocument: "after" });
|
|
86
97
|
exports.updateCallStatusByCallSid = updateCallStatusByCallSid;
|
|
87
98
|
const pushToolExecution = async (callSid, execution) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"calls.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ObjectId, Sort, WithId } from "mongodb";
|
|
2
2
|
import { TranscriptionSegment } from "../results";
|
|
3
3
|
import { LeadProperty } from "../leads";
|
|
4
|
-
import { CONFERENCE_ROLE_CUSTOMER, CONFERENCE_ROLE_SUPERVISOR } from "./calls.constants";
|
|
4
|
+
import { CallStatusValues, CONFERENCE_ROLE_CUSTOMER, CONFERENCE_ROLE_SUPERVISOR } from "./calls.constants";
|
|
5
5
|
export type ConferenceRole = typeof CONFERENCE_ROLE_CUSTOMER | typeof CONFERENCE_ROLE_SUPERVISOR | null;
|
|
6
|
-
export type CallStatus =
|
|
6
|
+
export type CallStatus = (typeof CallStatusValues)[keyof typeof CallStatusValues];
|
|
7
7
|
export type Call = {
|
|
8
8
|
callSid: string;
|
|
9
9
|
flowId: ObjectId;
|
|
@@ -46,6 +46,15 @@ export type ToolExecution = {
|
|
|
46
46
|
status: "success" | "error";
|
|
47
47
|
httpStatus?: number;
|
|
48
48
|
response?: Record<string, unknown>;
|
|
49
|
+
steps?: ToolExecutionStep[];
|
|
50
|
+
};
|
|
51
|
+
export type ToolExecutionStepLevel = "info" | "warn" | "error";
|
|
52
|
+
export type ToolExecutionStep = {
|
|
53
|
+
timestamp: Date;
|
|
54
|
+
label: string;
|
|
55
|
+
level: ToolExecutionStepLevel;
|
|
56
|
+
data?: Record<string, unknown> | string;
|
|
57
|
+
payload?: Record<string, unknown>;
|
|
49
58
|
};
|
|
50
59
|
export type ToolExecutionMeta = {
|
|
51
60
|
kind: "http";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,cAAc,GACtB,OAAO,wBAAwB,GAC/B,OAAO,0BAA0B,GACjC,IAAI,CAAC;AAET,MAAM,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"calls.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -9,9 +9,10 @@ import {
|
|
|
9
9
|
getCallsByClientAndDateRange,
|
|
10
10
|
getCallsCollection,
|
|
11
11
|
pushToolExecution,
|
|
12
|
+
getToolExecutionsByCallSid,
|
|
12
13
|
updateCallStatusByCallSid,
|
|
13
14
|
} from "../calls.getters";
|
|
14
|
-
import type { ToolExecution } from "../calls.types";
|
|
15
|
+
import type { ToolExecution, ToolExecutionStep } from "../calls.types";
|
|
15
16
|
import { ObjectId } from "mongodb";
|
|
16
17
|
import { createOutGoingCallDoc } from "../../../test-utils/factories";
|
|
17
18
|
|
|
@@ -242,6 +243,193 @@ describe("db.calls", () => {
|
|
|
242
243
|
});
|
|
243
244
|
});
|
|
244
245
|
|
|
246
|
+
describe("getToolExecutionsByCallSid()", () => {
|
|
247
|
+
const makeExecution = (
|
|
248
|
+
overrides?: Partial<ToolExecution>,
|
|
249
|
+
): ToolExecution => ({
|
|
250
|
+
toolName: "testTool",
|
|
251
|
+
executedAt: new Date(),
|
|
252
|
+
durationMs: 100,
|
|
253
|
+
args: { query: "test" },
|
|
254
|
+
meta: { kind: "http", url: "https://example.com", method: "POST" },
|
|
255
|
+
status: "success",
|
|
256
|
+
httpStatus: 200,
|
|
257
|
+
...overrides,
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it("returns all executions for a call", async () => {
|
|
261
|
+
const call = createOutGoingCallDoc();
|
|
262
|
+
await createCallDoc(call);
|
|
263
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: "first" }));
|
|
264
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: "second" }));
|
|
265
|
+
|
|
266
|
+
const result = await getToolExecutionsByCallSid(call.callSid);
|
|
267
|
+
|
|
268
|
+
expect(result).toHaveLength(2);
|
|
269
|
+
expect(result.map((e) => e.toolName)).toEqual(["first", "second"]);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
it("returns an empty array when the call has no executions", async () => {
|
|
273
|
+
const call = createOutGoingCallDoc();
|
|
274
|
+
await createCallDoc(call);
|
|
275
|
+
|
|
276
|
+
const result = await getToolExecutionsByCallSid(call.callSid);
|
|
277
|
+
|
|
278
|
+
expect(result).toEqual([]);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it("returns an empty array for an unknown callSid", async () => {
|
|
282
|
+
const result = await getToolExecutionsByCallSid("nonexistent-sid");
|
|
283
|
+
|
|
284
|
+
expect(result).toEqual([]);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it("respects skip and limit for pagination", async () => {
|
|
288
|
+
const call = createOutGoingCallDoc();
|
|
289
|
+
await createCallDoc(call);
|
|
290
|
+
for (const name of ["a", "b", "c", "d", "e"]) {
|
|
291
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: name }));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const page1 = await getToolExecutionsByCallSid(call.callSid, { skip: 0, limit: 2 });
|
|
295
|
+
const page2 = await getToolExecutionsByCallSid(call.callSid, { skip: 2, limit: 2 });
|
|
296
|
+
const page3 = await getToolExecutionsByCallSid(call.callSid, { skip: 4, limit: 2 });
|
|
297
|
+
|
|
298
|
+
expect(page1.map((e) => e.toolName)).toEqual(["a", "b"]);
|
|
299
|
+
expect(page2.map((e) => e.toolName)).toEqual(["c", "d"]);
|
|
300
|
+
expect(page3.map((e) => e.toolName)).toEqual(["e"]);
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
it("includes steps when present", async () => {
|
|
304
|
+
const call = createOutGoingCallDoc();
|
|
305
|
+
await createCallDoc(call);
|
|
306
|
+
const steps: ToolExecutionStep[] = [
|
|
307
|
+
{ timestamp: new Date("2024-01-01T10:00:00Z"), label: "audio_enrichment", level: "info", data: { audioUsed: true } },
|
|
308
|
+
{ timestamp: new Date("2024-01-01T10:00:01Z"), label: "subject_classification", level: "warn" },
|
|
309
|
+
];
|
|
310
|
+
await pushToolExecution(call.callSid, makeExecution({ steps }));
|
|
311
|
+
|
|
312
|
+
const result = await getToolExecutionsByCallSid(call.callSid);
|
|
313
|
+
|
|
314
|
+
expect(result[0].steps).toHaveLength(2);
|
|
315
|
+
const s0 = result[0].steps![0];
|
|
316
|
+
expect(s0.label).toBe("audio_enrichment");
|
|
317
|
+
expect(s0.level).toBe("info");
|
|
318
|
+
expect(new Date(s0.timestamp).toISOString()).toBe("2024-01-01T10:00:00.000Z");
|
|
319
|
+
expect(s0.data).toEqual({ audioUsed: true });
|
|
320
|
+
const s1 = result[0].steps![1];
|
|
321
|
+
expect(s1.label).toBe("subject_classification");
|
|
322
|
+
expect(s1.level).toBe("warn");
|
|
323
|
+
expect(s1.data).toBeUndefined();
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it("includes step payload when present", async () => {
|
|
327
|
+
const call = createOutGoingCallDoc();
|
|
328
|
+
await createCallDoc(call);
|
|
329
|
+
const steps: ToolExecutionStep[] = [
|
|
330
|
+
{
|
|
331
|
+
timestamp: new Date("2024-01-01T10:00:00Z"),
|
|
332
|
+
label: "subject_classification",
|
|
333
|
+
level: "info",
|
|
334
|
+
data: "Classified as: ניקיון / אשפה",
|
|
335
|
+
payload: { subject: "ניקיון", subSubject: "אשפה", ids: { subject: "abc", subSubject: "def" } },
|
|
336
|
+
},
|
|
337
|
+
];
|
|
338
|
+
await pushToolExecution(call.callSid, makeExecution({ steps }));
|
|
339
|
+
|
|
340
|
+
const result = await getToolExecutionsByCallSid(call.callSid);
|
|
341
|
+
|
|
342
|
+
const s0 = result[0].steps![0];
|
|
343
|
+
expect(s0.data).toBe("Classified as: ניקיון / אשפה");
|
|
344
|
+
expect(s0.payload).toEqual({ subject: "ניקיון", subSubject: "אשפה", ids: { subject: "abc", subSubject: "def" } });
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
it("does not require step payload to be present", async () => {
|
|
348
|
+
const call = createOutGoingCallDoc();
|
|
349
|
+
await createCallDoc(call);
|
|
350
|
+
const steps: ToolExecutionStep[] = [
|
|
351
|
+
{ timestamp: new Date(), label: "user_query", level: "info", data: "Query: הרצל" },
|
|
352
|
+
];
|
|
353
|
+
await pushToolExecution(call.callSid, makeExecution({ steps }));
|
|
354
|
+
|
|
355
|
+
const result = await getToolExecutionsByCallSid(call.callSid);
|
|
356
|
+
|
|
357
|
+
expect(result[0].steps![0].payload).toBeUndefined();
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
it("does not require steps to be present", async () => {
|
|
361
|
+
const call = createOutGoingCallDoc();
|
|
362
|
+
await createCallDoc(call);
|
|
363
|
+
await pushToolExecution(call.callSid, makeExecution());
|
|
364
|
+
|
|
365
|
+
const result = await getToolExecutionsByCallSid(call.callSid);
|
|
366
|
+
|
|
367
|
+
expect(result[0].steps).toBeUndefined();
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
it("returns at most 50 executions by default", async () => {
|
|
371
|
+
const call = createOutGoingCallDoc();
|
|
372
|
+
await getCallsCollection().insertOne({
|
|
373
|
+
...call,
|
|
374
|
+
createdAt: new Date(),
|
|
375
|
+
updatedAt: new Date(),
|
|
376
|
+
env: "test",
|
|
377
|
+
toolExecutions: Array.from({ length: 51 }, (_, i) =>
|
|
378
|
+
makeExecution({ toolName: `tool${i}` }),
|
|
379
|
+
),
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
const result = await getToolExecutionsByCallSid(call.callSid);
|
|
383
|
+
|
|
384
|
+
expect(result).toHaveLength(50);
|
|
385
|
+
expect(result[0].toolName).toBe("tool0");
|
|
386
|
+
expect(result[49].toolName).toBe("tool49");
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
it("clamps negative skip to 0", async () => {
|
|
390
|
+
const call = createOutGoingCallDoc();
|
|
391
|
+
await createCallDoc(call);
|
|
392
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: "only" }));
|
|
393
|
+
|
|
394
|
+
const result = await getToolExecutionsByCallSid(call.callSid, { skip: -5 });
|
|
395
|
+
|
|
396
|
+
expect(result).toHaveLength(1);
|
|
397
|
+
expect(result[0].toolName).toBe("only");
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
it("clamps negative limit to 1", async () => {
|
|
401
|
+
const call = createOutGoingCallDoc();
|
|
402
|
+
await createCallDoc(call);
|
|
403
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: "first" }));
|
|
404
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: "second" }));
|
|
405
|
+
|
|
406
|
+
const result = await getToolExecutionsByCallSid(call.callSid, { limit: -1 });
|
|
407
|
+
|
|
408
|
+
expect(result).toHaveLength(1);
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
it("returns executions when clientId matches the call's client", async () => {
|
|
412
|
+
const call = createOutGoingCallDoc({ clientId: "clientA" });
|
|
413
|
+
await createCallDoc(call);
|
|
414
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: "secret" }));
|
|
415
|
+
|
|
416
|
+
const result = await getToolExecutionsByCallSid(call.callSid, { clientId: "clientA" });
|
|
417
|
+
|
|
418
|
+
expect(result).toHaveLength(1);
|
|
419
|
+
expect(result[0].toolName).toBe("secret");
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
it("returns empty when clientId does not match the call's client", async () => {
|
|
423
|
+
const call = createOutGoingCallDoc({ clientId: "clientA" });
|
|
424
|
+
await createCallDoc(call);
|
|
425
|
+
await pushToolExecution(call.callSid, makeExecution({ toolName: "secret" }));
|
|
426
|
+
|
|
427
|
+
const result = await getToolExecutionsByCallSid(call.callSid, { clientId: "clientB" });
|
|
428
|
+
|
|
429
|
+
expect(result).toEqual([]);
|
|
430
|
+
});
|
|
431
|
+
});
|
|
432
|
+
|
|
245
433
|
describe("getCallsByClientAndDateRange()", () => {
|
|
246
434
|
it("should return calls within date range", async () => {
|
|
247
435
|
const clientId = "dateRangeClient";
|
|
@@ -30,3 +30,20 @@ export const STATS_MAX_TIME_MS = 30_000;
|
|
|
30
30
|
*/
|
|
31
31
|
export const TREND_MONTH_BUCKET_MIN_MONTHS = 6;
|
|
32
32
|
export const TREND_WEEK_BUCKET_MIN_MONTHS = 3;
|
|
33
|
+
|
|
34
|
+
export const TOOL_EXECUTIONS_DEFAULT_SKIP = 0;
|
|
35
|
+
export const TOOL_EXECUTIONS_DEFAULT_LIMIT = 50;
|
|
36
|
+
|
|
37
|
+
export const CallStatusValues = {
|
|
38
|
+
Initiated: "initiated",
|
|
39
|
+
Ringing: "ringing",
|
|
40
|
+
InProgress: "in-progress",
|
|
41
|
+
Answered: "answered",
|
|
42
|
+
Completed: "completed",
|
|
43
|
+
Busy: "busy",
|
|
44
|
+
NoAnswer: "no-answer",
|
|
45
|
+
Failed: "failed",
|
|
46
|
+
Canceled: "canceled",
|
|
47
|
+
} as const;
|
|
48
|
+
|
|
49
|
+
export const ALL_CALL_STATUSES = Object.values(CallStatusValues);
|
|
@@ -6,6 +6,10 @@ import {
|
|
|
6
6
|
getDb,
|
|
7
7
|
} from "../index";
|
|
8
8
|
import type { CountOpts, DateRange, ToolExecution, CallStatus } from "./calls.types";
|
|
9
|
+
import {
|
|
10
|
+
TOOL_EXECUTIONS_DEFAULT_LIMIT,
|
|
11
|
+
TOOL_EXECUTIONS_DEFAULT_SKIP,
|
|
12
|
+
} from "./calls.constants";
|
|
9
13
|
import { Filter, ObjectId } from "mongodb";
|
|
10
14
|
import * as process from "node:process";
|
|
11
15
|
import { applyQueryOptions } from "../utils/query.utils";
|
|
@@ -60,6 +64,21 @@ export const updateCallByCallSid = async (
|
|
|
60
64
|
);
|
|
61
65
|
};
|
|
62
66
|
|
|
67
|
+
export const getToolExecutionsByCallSid = async (
|
|
68
|
+
callSid: string,
|
|
69
|
+
opts?: Pick<CallQueryOptions, "skip" | "limit"> & { clientId?: string },
|
|
70
|
+
): Promise<ToolExecution[]> => {
|
|
71
|
+
const skip = Math.max(0, opts?.skip ?? TOOL_EXECUTIONS_DEFAULT_SKIP);
|
|
72
|
+
const limit = Math.max(1, opts?.limit ?? TOOL_EXECUTIONS_DEFAULT_LIMIT);
|
|
73
|
+
const filter: Filter<Call> = { callSid };
|
|
74
|
+
if (opts?.clientId != null) filter.clientId = opts.clientId;
|
|
75
|
+
const call = await getCallsCollection().findOne(
|
|
76
|
+
filter,
|
|
77
|
+
{ projection: { toolExecutions: { $slice: [skip, limit] } } },
|
|
78
|
+
);
|
|
79
|
+
return call?.toolExecutions ?? [];
|
|
80
|
+
};
|
|
81
|
+
|
|
63
82
|
export const updateCallStatusByCallSid = async (
|
|
64
83
|
callSid: string,
|
|
65
84
|
status: CallStatus,
|
|
@@ -3,6 +3,7 @@ import { TranscriptionSegment } from "../results";
|
|
|
3
3
|
import { LeadProperty } from "../leads";
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
|
+
CallStatusValues,
|
|
6
7
|
CONFERENCE_ROLE_CUSTOMER,
|
|
7
8
|
CONFERENCE_ROLE_SUPERVISOR,
|
|
8
9
|
} from "./calls.constants";
|
|
@@ -12,16 +13,7 @@ export type ConferenceRole =
|
|
|
12
13
|
| typeof CONFERENCE_ROLE_SUPERVISOR
|
|
13
14
|
| null;
|
|
14
15
|
|
|
15
|
-
export type CallStatus =
|
|
16
|
-
| "initiated"
|
|
17
|
-
| "ringing"
|
|
18
|
-
| "in-progress"
|
|
19
|
-
| "answered"
|
|
20
|
-
| "completed"
|
|
21
|
-
| "busy"
|
|
22
|
-
| "no-answer"
|
|
23
|
-
| "failed"
|
|
24
|
-
| "canceled";
|
|
16
|
+
export type CallStatus = (typeof CallStatusValues)[keyof typeof CallStatusValues];
|
|
25
17
|
|
|
26
18
|
export type Call = {
|
|
27
19
|
callSid: string;
|
|
@@ -64,6 +56,17 @@ export type ToolExecution = {
|
|
|
64
56
|
status: "success" | "error";
|
|
65
57
|
httpStatus?: number;
|
|
66
58
|
response?: Record<string, unknown>;
|
|
59
|
+
steps?: ToolExecutionStep[];
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export type ToolExecutionStepLevel = "info" | "warn" | "error";
|
|
63
|
+
|
|
64
|
+
export type ToolExecutionStep = {
|
|
65
|
+
timestamp: Date;
|
|
66
|
+
label: string;
|
|
67
|
+
level: ToolExecutionStepLevel;
|
|
68
|
+
data?: Record<string, unknown> | string;
|
|
69
|
+
payload?: Record<string, unknown>;
|
|
67
70
|
};
|
|
68
71
|
|
|
69
72
|
export type ToolExecutionMeta =
|