@zeniai/client-epic-state 5.1.24 → 5.1.25-betaRD1
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 +2 -1
- package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +1 -0
- package/lib/entity/transaction/payloadTypes/transactionPayload.js +5 -0
- package/lib/entity/transaction/stateTypes/transaction.d.ts +1 -0
- package/lib/epic.d.ts +2 -1
- package/lib/epic.js +2 -1
- package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +5 -0
- package/lib/esm/epic.js +2 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +29 -3
- package/lib/esm/view/aiCfoView/aiCfoViewSelector.js +11 -0
- package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
- package/lib/esm/view/aiCfoView/epics/fetchSkillsEpic.js +34 -0
- package/lib/esm/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
- package/lib/esm/view/transactionDetail/epics/saveTransactionDetailEpic.js +3 -1
- package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +11 -2
- package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +19 -4
- package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +17 -0
- package/lib/index.d.ts +4 -4
- package/lib/index.js +9 -5
- package/lib/view/aiCfoView/aiCfoViewPayload.d.ts +14 -0
- package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +8 -4
- package/lib/view/aiCfoView/aiCfoViewReducer.js +30 -4
- package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +2 -1
- package/lib/view/aiCfoView/aiCfoViewSelector.js +12 -0
- package/lib/view/aiCfoView/aiCfoViewState.d.ts +15 -0
- package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
- package/lib/view/aiCfoView/epics/fetchSkillsEpic.d.ts +8 -0
- package/lib/view/aiCfoView/epics/fetchSkillsEpic.js +38 -0
- package/lib/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
- package/lib/view/transactionDetail/epics/saveTransactionDetailEpic.js +3 -1
- package/lib/view/transactionDetail/epics/saveTransactionHelper.d.ts +1 -1
- package/lib/view/transactionDetail/epics/saveTransactionHelper.js +11 -2
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +19 -4
- package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +17 -0
- package/lib/view/transactionDetail/transactionDetailState.d.ts +1 -0
- package/lib/view/transactionDetail/transactionDetailTypes.d.ts +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse } from '../../../responsePayload';
|
|
4
|
+
import { fetchSkills, fetchSkillsFailure, fetchSkillsSuccess, } from '../aiCfoViewReducer';
|
|
5
|
+
const toSkill = (s) => ({
|
|
6
|
+
macroId: s.macro_id,
|
|
7
|
+
name: s.name,
|
|
8
|
+
displayName: s.display_name,
|
|
9
|
+
description: s.description,
|
|
10
|
+
semver: s.semver,
|
|
11
|
+
parameterHints: s.parameter_hints,
|
|
12
|
+
hasScripts: s.has_scripts,
|
|
13
|
+
});
|
|
14
|
+
/** GET {aiCfoMicroServiceBaseUrl}/1.0/skills — chat-visible skills for the `/` menu. */
|
|
15
|
+
export const fetchSkillsEpic = (actions$,
|
|
16
|
+
// state$ intentionally unused: the `/` menu dispatches this once per slash-entry
|
|
17
|
+
// (the composer dedupes), so we always re-fetch the (small, singleton) list.
|
|
18
|
+
_state$, zeniAPI) => actions$.pipe(filter(fetchSkills.match),
|
|
19
|
+
// switchMap: a singleton list endpoint with no key — cancel any in-flight
|
|
20
|
+
// fetch so the latest dispatch wins (no racing writes to `skills`).
|
|
21
|
+
switchMap(() => {
|
|
22
|
+
// aiCfoMicroServiceBaseUrl already targets the chat service (it serves the
|
|
23
|
+
// /1.0/agents/{id} submit route too); /1.0/skills lives on the same service.
|
|
24
|
+
const url = `${zeniAPI.apiEndPoints.aiCfoMicroServiceBaseUrl}/1.0/skills`;
|
|
25
|
+
return zeniAPI.getJSON(url).pipe(mergeMap((response) => {
|
|
26
|
+
if (isSuccessResponse(response) && response.data != null) {
|
|
27
|
+
// Guard the array: a malformed 2xx body without `skills` must not crash .map.
|
|
28
|
+
return of(fetchSkillsSuccess({
|
|
29
|
+
skills: (response.data.skills ?? []).map(toSkill),
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
return of(fetchSkillsFailure(response.status));
|
|
33
|
+
}), catchError((error) => of(fetchSkillsFailure(createZeniAPIStatus('Unexpected Error', 'Fetch skills REST API call failed', error instanceof Error ? { message: error.message } : undefined)))));
|
|
34
|
+
}));
|
|
@@ -4,7 +4,7 @@ import { upsertOrAddQuestionAnswerPayload } from '../../../entity/aiCfo/aiCfoRed
|
|
|
4
4
|
import { createZeniAPIStatus, isSuccessResponse } from '../../../responsePayload';
|
|
5
5
|
import { submitQuestion, submitQuestionFailure, submitQuestionSuccess, } from '../aiCfoViewReducer';
|
|
6
6
|
export const submitQuestionEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(submitQuestion.match), mergeMap((action) => {
|
|
7
|
-
const { questionAnswerId, userId, sessionId, questionId, createdAt, question, files, } = action.payload;
|
|
7
|
+
const { questionAnswerId, userId, sessionId, questionId, createdAt, question, files, macroId, } = action.payload;
|
|
8
8
|
const { aiCfoViewState } = state$.value;
|
|
9
9
|
const { uiState } = aiCfoViewState;
|
|
10
10
|
const agentId = uiState.agentId;
|
|
@@ -17,15 +17,21 @@ export const submitQuestionEpic = (actions$, state$, zeniAPI) => actions$.pipe(f
|
|
|
17
17
|
const formData = new FormData();
|
|
18
18
|
formData.append('chat_session_id', sessionId);
|
|
19
19
|
formData.append('message', question);
|
|
20
|
+
if (macroId != null) {
|
|
21
|
+
formData.append('macro_id', macroId);
|
|
22
|
+
}
|
|
20
23
|
for (const file of files) {
|
|
21
24
|
formData.append('files', file, file.name);
|
|
22
25
|
}
|
|
23
26
|
apiCall = zeniAPI.postFormData(endpoint, formData);
|
|
24
27
|
}
|
|
25
28
|
else {
|
|
29
|
+
// `message` is the display token (e.g. "/flux"); `macro_id` tells the chat
|
|
30
|
+
// service to expand the skill's instructions as the actual agent prompt.
|
|
26
31
|
apiCall = zeniAPI.postAndGetJSON(endpoint, {
|
|
27
32
|
chat_session_id: sessionId,
|
|
28
33
|
message: question,
|
|
34
|
+
...(macroId != null && { macro_id: macroId }),
|
|
29
35
|
});
|
|
30
36
|
}
|
|
31
37
|
return apiCall.pipe(mergeMap((response) => {
|
|
@@ -2,6 +2,7 @@ import recordGet from 'lodash/get';
|
|
|
2
2
|
import { from } from 'rxjs';
|
|
3
3
|
import { filter, mergeMap } from 'rxjs/operators';
|
|
4
4
|
import { getSupportedTransactionById } from '../../../entity/transaction/transactionSelector';
|
|
5
|
+
import { getIsAccountingProjectsEnabled } from '../../../entity/tenant/tenantSelector';
|
|
5
6
|
import { saveTransactionDetail, updateTransactionDetail, } from '../transactionDetailReducer';
|
|
6
7
|
import { getTransactionDetailKey } from '../transactionDetailState';
|
|
7
8
|
import { toTransactionUpdatesFromTransactionDetailLocalData } from './saveTransactionHelper';
|
|
@@ -10,12 +11,13 @@ export const saveTransactionDetailEpic = (actions$, state$) => actions$.pipe(fil
|
|
|
10
11
|
const fetchActions = [];
|
|
11
12
|
const transactionDetailState = state$.value.transactionDetailState;
|
|
12
13
|
const transactionState = state$.value.transactionState;
|
|
14
|
+
const isAccountingProjectsEnabled = getIsAccountingProjectsEnabled(state$.value);
|
|
13
15
|
const key = getTransactionDetailKey(transactionId);
|
|
14
16
|
const detail = recordGet(transactionDetailState.transactionDetailById, key, undefined);
|
|
15
17
|
const transaction = getSupportedTransactionById(transactionState, key);
|
|
16
18
|
if (detail != null && transaction != null) {
|
|
17
19
|
const localData = detail.transactionDetailLocalData;
|
|
18
|
-
const transactionSaveUpdates = toTransactionUpdatesFromTransactionDetailLocalData(localData, transaction, isExpenseAutomationEnabled);
|
|
20
|
+
const transactionSaveUpdates = toTransactionUpdatesFromTransactionDetailLocalData(localData, transaction, isExpenseAutomationEnabled, isAccountingProjectsEnabled);
|
|
19
21
|
fetchActions.push(updateTransactionDetail(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking, isUncategorizedExpenseCategoryEnabled));
|
|
20
22
|
return from(fetchActions);
|
|
21
23
|
}
|
|
@@ -21,7 +21,7 @@ import { isAccountUncategorized } from '../transactionDetailLocalDataHelper';
|
|
|
21
21
|
* 4. Only difference between this and Miscategorized will be that we will
|
|
22
22
|
* additionally fire “Mark as not miscat” for every point above.
|
|
23
23
|
*/
|
|
24
|
-
export const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDetailLocalData, transaction, isExpenseAutomationEnabled) => {
|
|
24
|
+
export const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDetailLocalData, transaction, isExpenseAutomationEnabled, isAccountingProjectsEnabled = false) => {
|
|
25
25
|
const updates = {
|
|
26
26
|
updatesByLineId: {},
|
|
27
27
|
};
|
|
@@ -30,6 +30,12 @@ export const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDe
|
|
|
30
30
|
const isTransactionMisCategorized = isTransactionMiscategorized(transaction, isExpenseAutomationEnabled);
|
|
31
31
|
updates.memo = transactionDetailLocalData.memo;
|
|
32
32
|
updates.documentId = transactionDetailLocalData.documentId;
|
|
33
|
+
// Project is at the transaction level only for invoice and credit_memo,
|
|
34
|
+
// and only when the projects feature is enabled for this tenant.
|
|
35
|
+
if (isAccountingProjectsEnabled &&
|
|
36
|
+
(transaction.type === 'invoice' || transaction.type === 'credit_memo')) {
|
|
37
|
+
updates.project = transactionDetailLocalData.project;
|
|
38
|
+
}
|
|
33
39
|
const selectedEntity = transactionDetailLocalData.selectedEntity;
|
|
34
40
|
const updatedEntityId = transactionDetailLocalData.updatePreviousTransactionsWithUpdatedVendor ===
|
|
35
41
|
true
|
|
@@ -52,7 +58,10 @@ export const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDe
|
|
|
52
58
|
lineDescription: lineItem.lineDescription,
|
|
53
59
|
class: lineItem.class,
|
|
54
60
|
account: lineItem.account,
|
|
55
|
-
|
|
61
|
+
// Project is at the transaction level for invoice/credit_memo; omit from lines.
|
|
62
|
+
...(transaction.type !== 'invoice' && transaction.type !== 'credit_memo'
|
|
63
|
+
? { project: lineItem.project }
|
|
64
|
+
: {}),
|
|
56
65
|
recommendation: convertCOTRecommendationsToRegular(lineItem.recommendationsWithCOT),
|
|
57
66
|
};
|
|
58
67
|
if (line.type === 'journal_entry_transaction_line' ||
|
|
@@ -19,6 +19,7 @@ import { getSupportedTransactionById } from '../../../entity/transaction/transac
|
|
|
19
19
|
import { updateVendors } from '../../../entity/vendor/vendorReducer';
|
|
20
20
|
import { getVendorByVendorId } from '../../../entity/vendor/vendorSelector';
|
|
21
21
|
import { createZeniAPIStatus, isActionNotAllowed, isSuccessResponse, } from '../../../responsePayload';
|
|
22
|
+
import { getIsAccountingProjectsEnabled } from '../../../entity/tenant/tenantSelector';
|
|
22
23
|
import { getUncategorizedAccounts } from '../../accountList/accountListSelector';
|
|
23
24
|
import { getPendingReviewLineIdsFromTransaction } from '../../expenseAutomationView/helpers/transactionCategorizationLocalDataHelper';
|
|
24
25
|
import { syncTransactionCategorizationFromDetailSave } from '../../expenseAutomationView/reducers/transactionsViewReducer';
|
|
@@ -27,9 +28,10 @@ import { getTransactionDetailKey, } from '../transactionDetailState';
|
|
|
27
28
|
import { isTransactionUncategorized } from './saveTransactionHelper';
|
|
28
29
|
export const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(updateTransactionDetail.match), mergeMap((action) => {
|
|
29
30
|
const { transactionState, vendorState, transactionDetailState } = state$.value;
|
|
31
|
+
const isAccountingProjectsEnabled = getIsAccountingProjectsEnabled(state$.value);
|
|
30
32
|
const { cotTransactionTracking, transactionId, transactionSaveUpdates, isUncategorizedExpenseCategoryEnabled, } = action.payload;
|
|
31
33
|
return zeniAPI
|
|
32
|
-
.putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/categorize`, preparePayload(transactionState, vendorState, transactionDetailState, transactionId, transactionSaveUpdates, cotTransactionTracking))
|
|
34
|
+
.putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/categorize`, preparePayload(transactionState, vendorState, transactionDetailState, transactionId, transactionSaveUpdates, cotTransactionTracking, isAccountingProjectsEnabled))
|
|
33
35
|
.pipe(mergeMap((response) => {
|
|
34
36
|
if (isSuccessResponse(response) && response.data != null) {
|
|
35
37
|
const transactionIdResp = toTransactionID(response.data.transaction);
|
|
@@ -123,7 +125,7 @@ export const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => action
|
|
|
123
125
|
}
|
|
124
126
|
}), catchError((error) => of(updateTransactionDetailSaveStatus(action.payload.transactionId, 'Error', createZeniAPIStatus('Unexpected Error', `REST API call errored out ${error}`)))));
|
|
125
127
|
}));
|
|
126
|
-
function preparePayload(transactionState, vendorState, transactionDetailState, transactionId, saveUpdates, cotTransactionTracking) {
|
|
128
|
+
function preparePayload(transactionState, vendorState, transactionDetailState, transactionId, saveUpdates, cotTransactionTracking, isAccountingProjectsEnabled) {
|
|
127
129
|
const transactionDetailKey = getTransactionDetailKey(transactionId);
|
|
128
130
|
const detail = getSupportedTransactionById(transactionState, transactionDetailKey);
|
|
129
131
|
const tranDetail = recordGet(transactionDetailState.transactionDetailById, transactionDetailKey, undefined);
|
|
@@ -155,7 +157,7 @@ function preparePayload(transactionState, vendorState, transactionDetailState, t
|
|
|
155
157
|
};
|
|
156
158
|
}
|
|
157
159
|
if (detail != null) {
|
|
158
|
-
const transUpdates = toTransactionUpdatePayload(saveUpdates.updates, detail, cotTransactionTracking, vendorUpdates, customerUpdates, currentSelectedEntity);
|
|
160
|
+
const transUpdates = toTransactionUpdatePayload(saveUpdates.updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, currentSelectedEntity);
|
|
159
161
|
const entityUpdates = toEntityUpdatePayload(saveUpdates.entityRelatedUpdates);
|
|
160
162
|
return {
|
|
161
163
|
entity_related_updates: entityUpdates,
|
|
@@ -165,7 +167,7 @@ function preparePayload(transactionState, vendorState, transactionDetailState, t
|
|
|
165
167
|
}
|
|
166
168
|
return undefined;
|
|
167
169
|
}
|
|
168
|
-
const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, vendorUpdates, customerUpdates, tranSelectedEntity) => {
|
|
170
|
+
const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, tranSelectedEntity) => {
|
|
169
171
|
const transaction = Object.assign({}, detail);
|
|
170
172
|
transaction.memo = updates.memo ?? '';
|
|
171
173
|
// Unlike `memo` (always reset to '' when absent), `documentId` falls back to
|
|
@@ -226,6 +228,19 @@ const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, ven
|
|
|
226
228
|
let basePayload;
|
|
227
229
|
if (isCustomerTransaction(transaction)) {
|
|
228
230
|
basePayload = toCustomerTransactionPayload(transaction);
|
|
231
|
+
// For invoice/credit_memo only, project lives at the transaction level.
|
|
232
|
+
// Guard behind the projects feature flag to avoid touching the field when
|
|
233
|
+
// projects are disabled for this tenant.
|
|
234
|
+
if (isAccountingProjectsEnabled &&
|
|
235
|
+
(transaction.type === 'invoice' || transaction.type === 'credit_memo') &&
|
|
236
|
+
updates.project != null) {
|
|
237
|
+
basePayload = {
|
|
238
|
+
...basePayload,
|
|
239
|
+
accounting_project_id: updates.project.projectId,
|
|
240
|
+
accounting_project_integration_id: updates.project.accountingProviderProjectId ?? null,
|
|
241
|
+
accounting_project_name: updates.project.projectName,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
229
244
|
}
|
|
230
245
|
else if (isVendorTransaction(transaction)) {
|
|
231
246
|
if (tranSelectedEntity != null && tranSelectedEntity.type === 'customer') {
|
|
@@ -12,6 +12,17 @@ export const toTransactionDetailLocalData = (transaction, defaultVendorId, uncat
|
|
|
12
12
|
const vendorId = defaultVendorId ?? transaction.vendor?.id;
|
|
13
13
|
transactionLocal.memo = transaction.memo;
|
|
14
14
|
transactionLocal.documentId = transaction.documentId;
|
|
15
|
+
// Project is at the transaction level only for invoice and credit_memo.
|
|
16
|
+
if ((transaction.type === 'invoice' || transaction.type === 'credit_memo') &&
|
|
17
|
+
transaction.projectId != null) {
|
|
18
|
+
transactionLocal.project = {
|
|
19
|
+
projectId: transaction.projectId,
|
|
20
|
+
projectName: transaction.projectName ?? '',
|
|
21
|
+
...(transaction.accountingProviderProjectId != null
|
|
22
|
+
? { accountingProviderProjectId: transaction.accountingProviderProjectId }
|
|
23
|
+
: {}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
15
26
|
transactionLocal.vendorUpdates =
|
|
16
27
|
isVendorTransaction(transaction) && vendorId != null
|
|
17
28
|
? {
|
|
@@ -423,6 +434,7 @@ export const toUpdateLineItemsOriginalCategoryClass = (transaction, transactionD
|
|
|
423
434
|
...initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
424
435
|
memo: transactionDetailLocalData.memo,
|
|
425
436
|
documentId: transactionDetailLocalData.documentId,
|
|
437
|
+
project: transactionDetailLocalData.project,
|
|
426
438
|
lineItemById: newLineItems,
|
|
427
439
|
vendorDetails: transactionDetailLocalData.vendorDetails,
|
|
428
440
|
vendorUpdates: transactionDetailLocalData.vendorUpdates,
|
|
@@ -527,6 +539,7 @@ export const toSetAllLineItemsToCategoryClass = (transaction, transactionDetailL
|
|
|
527
539
|
...initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
528
540
|
memo: transactionDetailLocalData.memo,
|
|
529
541
|
documentId: transactionDetailLocalData.documentId,
|
|
542
|
+
project: transactionDetailLocalData.project,
|
|
530
543
|
lineItemById: newLineItems,
|
|
531
544
|
vendorUpdates: transactionDetailLocalData.vendorUpdates,
|
|
532
545
|
vendorDetails: transactionDetailLocalData.vendorDetails,
|
|
@@ -572,6 +585,7 @@ export const toSetAllLineItemsLocalDataIsUpdateAllChecked = (transaction, transa
|
|
|
572
585
|
...initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
573
586
|
memo: transactionDetailLocalData.memo,
|
|
574
587
|
documentId: transactionDetailLocalData.documentId,
|
|
588
|
+
project: transactionDetailLocalData.project,
|
|
575
589
|
lineItemById: newLineItems,
|
|
576
590
|
vendorDetails: transactionDetailLocalData.vendorDetails,
|
|
577
591
|
vendorUpdates: transactionDetailLocalData.vendorUpdates,
|
|
@@ -729,6 +743,7 @@ export const setEntityRecommendationForLineIdInLocalData = (transaction, transac
|
|
|
729
743
|
...initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
730
744
|
memo: transactionDetailLocalData.memo,
|
|
731
745
|
documentId: transactionDetailLocalData.documentId,
|
|
746
|
+
project: transactionDetailLocalData.project,
|
|
732
747
|
lineItemById: newLineItems,
|
|
733
748
|
vendorUpdates: transactionDetailLocalData.vendorUpdates,
|
|
734
749
|
vendorDetails: transactionDetailLocalData.vendorDetails,
|
|
@@ -782,6 +797,7 @@ export const removeEntityRecommendationForLineIdInLocalData = (transaction, tran
|
|
|
782
797
|
...initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
783
798
|
memo: transactionDetailLocalData.memo,
|
|
784
799
|
documentId: transactionDetailLocalData.documentId,
|
|
800
|
+
project: transactionDetailLocalData.project,
|
|
785
801
|
lineItemById: newLineItems,
|
|
786
802
|
vendorDetails: transactionDetailLocalData.vendorDetails,
|
|
787
803
|
vendorUpdates: transactionDetailLocalData.vendorUpdates,
|
|
@@ -1002,6 +1018,7 @@ export const toUpdateLineItemsToOriginalVendor = (transaction, transactionDetail
|
|
|
1002
1018
|
...initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
1003
1019
|
memo: transactionDetailLocalData.memo,
|
|
1004
1020
|
documentId: transactionDetailLocalData.documentId,
|
|
1021
|
+
project: transactionDetailLocalData.project,
|
|
1005
1022
|
lineItemById: newLineItems,
|
|
1006
1023
|
isVendorUpdateAllChecked: false,
|
|
1007
1024
|
latestUpdatedLineWithEntity: transactionDetailLocalData.latestUpdatedLineWithEntity,
|
package/lib/index.d.ts
CHANGED
|
@@ -919,11 +919,11 @@ export { AiAccountantCustomerViewState, AiAccountantSortKey, AiAccountantUIState
|
|
|
919
919
|
export { AiAccountantFilterCategoryField } from './view/companyView/types/cockpitTypes';
|
|
920
920
|
export { cancelAiAccountantOnboarding, clearAiAccountantView, fetchAiAccountantCustomers, fetchAiAccountantJobs, setSelectedTenantIdsForJobTrigger, triggerAiAccountantJob, updateAiAccountantUIState, } from './view/aiAccountantView/aiAccountantViewReducer';
|
|
921
921
|
export { AiAccountantCockpitView, getAiAccountantCockpitView, } from './view/aiAccountantView/aiAccountantViewSelector';
|
|
922
|
-
export { fetchChatSessionsForUser, createSession, submitQuestion, updateAiCfoViewScrollPosition, updateCurrentInput, updateCotCollapsedState, clearInput, setSession, clearAiCfoView, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, createSessionAndSubmit, stopSubmit, stopSubmitQuestion, fetchChatHistory, acceptMasterTOS, deleteChatSession, updateResponseState, fetchSuggestedQuestions, fetchSuggestedQuestionsSuccess, fetchSuggestedQuestionsFailure, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, } from './view/aiCfoView/aiCfoViewReducer';
|
|
923
|
-
export { AiCfoViewState, AiCfoViewUIState, SuggestedQuestionsForPageContext, } from './view/aiCfoView/aiCfoViewState';
|
|
924
|
-
export { FetchSuggestedQuestionsResponse, SuggestedQuestionsDataPayload, } from './view/aiCfoView/aiCfoViewPayload';
|
|
922
|
+
export { fetchChatSessionsForUser, createSession, submitQuestion, updateAiCfoViewScrollPosition, updateCurrentInput, updateCotCollapsedState, clearInput, setSession, clearAiCfoView, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, createSessionAndSubmit, stopSubmit, stopSubmitQuestion, fetchChatHistory, acceptMasterTOS, deleteChatSession, updateResponseState, fetchSuggestedQuestions, fetchSuggestedQuestionsSuccess, fetchSuggestedQuestionsFailure, fetchSkills, fetchSkillsSuccess, fetchSkillsFailure, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, } from './view/aiCfoView/aiCfoViewReducer';
|
|
923
|
+
export { AiCfoViewState, AiCfoViewUIState, Skill, SkillsState, SuggestedQuestionsForPageContext, } from './view/aiCfoView/aiCfoViewState';
|
|
924
|
+
export { FetchSuggestedQuestionsResponse, SuggestedQuestionsDataPayload, FetchSkillsResponse, SkillSummaryPayload, SkillListDataPayload, } from './view/aiCfoView/aiCfoViewPayload';
|
|
925
925
|
export type { AiCfoSuggestedQuestionsPageContext } from './common/aiCfo/aiCfoSuggestedQuestionsPageContext';
|
|
926
|
-
export { AiCfoViewSelector, getAiCfoView, getSuggestedQuestionsForPageContext, } from './view/aiCfoView/aiCfoViewSelector';
|
|
926
|
+
export { AiCfoViewSelector, getAiCfoView, getSuggestedQuestionsForPageContext, getSkills, } from './view/aiCfoView/aiCfoViewSelector';
|
|
927
927
|
export { MessagePayload, ChatSessionPayload, AiCfoAnswerPayload, } from './entity/aiCfo/aiCfoPayload';
|
|
928
928
|
export { setNewSession, setSessions, updateAiCfoAnswerCardPolicyWizardPlan, upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, addQuestionPayload, clearSession, clearAiCfo, toAiCfoVisualization, appendSyntheticAiCfoAnswer, updateSyntheticAiCfoAnswer, removeSyntheticAiCfoAnswer, clearSyntheticAiCfoAnswers, } from './entity/aiCfo/aiCfoReducer';
|
|
929
929
|
export { AiCfoSelectorView, getAllQuestionAnswersForChatSession, getQuestionAnswerByIdForChatSession, getAllQuestionsForChatSession, getAiCfoSelectorView, getSyntheticAiCfoAnswersForChatSession, getSyntheticAiCfoAnswerByQuestionAnswerId, ChatSessionWithOrderedQuestionAnswers, } from './entity/aiCfo/aiCfoSelector';
|
package/lib/index.js
CHANGED
|
@@ -71,11 +71,11 @@ exports.getAllTasks = exports.getTaskGroupById = exports.toRecurringBillFrequenc
|
|
|
71
71
|
exports.confirmCardSetupIntent = exports.createCardSetupIntent = exports.getAllCardsAndBankPaymentMethods = exports.deleteTag = exports.createTag = exports.fetchTagList = exports.getAllTags = exports.ALL_TASK_LIST_TABS = exports.initialTaskDetailLocalData = exports.convertHHMMStrToMinutes = exports.unsnoozeTask = exports.snoozeTask = exports.removeTaskFromList = exports.updateTaskListTab = exports.updateTaskFromListView = exports.toDueDateGroupKeyType = exports.toTaskStatusCodeType = exports.toPriorityCodeType = exports.getDueDateValueFromDueDateGroupId = exports.initialTaskDetail = exports.fetchAllTaskGroups = exports.getTaskUpdates = exports.toTaskListGroupByKeyTypeStrict = exports.toTaskListGroupByKeyType = exports.updateTaskGroupName = exports.dragNDropTasks = exports.updateTaskListLocalData = exports.deleteTaskGroup = exports.initiateTaskListLocalData = exports.createNewTaskGroup = exports.bulkUpdateTaskList = exports.discardTaskUpdatesInLocalStore = exports.deleteTask = exports.TASK_LIST_GROUP_BY_CATEGORIES = exports.TASK_LIST_FILTER_CATEGORIES = exports.updateTaskFilters = exports.allTaskPriority = exports.allTaskStatus = exports.updateTaskListUIState = exports.updateTaskListSearchText = exports.getCannedResponsesView = exports.deleteCannedResponse = exports.saveCannedResponse = exports.fetchCannedResponses = exports.archiveTask = exports.saveTaskDetail = exports.saveTaskUpdatesToLocalStore = exports.fetchTaskDetailPage = exports.getTaskDetail = exports.fetchTaskListPage = void 0;
|
|
72
72
|
exports.getNotifications = exports.getLastNotificationTime = exports.pushToastNotification = exports.isFeatureInterestRegistered = exports.getRegisteredInterestsByFeature = exports.getRegisteredInterests = exports.getFeatureNotificationView = exports.notifyMeForFeature = exports.fetchRegisteredInterests = exports.clearFeatureNotificationView = exports.getNotificationsForSelectedSubTab = exports.getExternalNotificationsForSelectedSubTab = exports.getNotificationView = exports.updateNotificationViewUIState = exports.updateNotificationViewSubTab = exports.updateNotificationViewCurrentTabAndSubTab = exports.updateNotificationViewTabState = exports.updateNotificationViewNotificationStatus = exports.updateNotificationViewAllNotificationsStatus = exports.fetchNotificationUnreadCountSuccess = exports.fetchNotificationUnreadCount = exports.fetchNotificationView = exports.toNotificationTabTypeStrict = exports.toNotificationSubTabTypeStrict = exports.updateCommentsNotificationsStatuses = exports.updateCommentsNotifications = exports.toNotificationModeStrict = exports.parseOAuthParams = exports.getZeniOAuthApproveRedirectUrl = exports.getZeniOAuthApproveFetchState = exports.getZeniOAuthApproveError = exports.clearZeniOAuthView = exports.approveOAuthConsentSuccess = exports.approveOAuthConsentFailure = exports.approveOAuthConsent = exports.fetchZeniAccountsPromoCard = exports.getZeniAccountsPromoCard = exports.getAuthenticationView = exports.fetchCollaborationAuthToken = exports.clearAuditReportGroupViewByCompanyId = exports.saveReasonForAuditRule = exports.fetchAuditReportGroupView = exports.fetchAuditRuleGroupView = exports.getUserFromAllUsers = exports.getAuditRuleGroupViewSelectorView = exports.getAuditReportGroupViewSelectorView = exports.clearCardPaymentView = exports.resetCardPaymentErrorStatuses = exports.fetchPaymentSources = exports.addCardPaymentSource = void 0;
|
|
73
73
|
exports.toAiAccountantOperationType = exports.toAiAccountantJobStatus = exports.toAiAccountantEnrollmentStatus = exports.getAllowedOperationsForStatus = exports.getTreasuryFundsMaximumYield = exports.getTreasurySetupViewDetails = exports.updateTreasuryVideoViewed = exports.updateTreasuryPromoRemindMeLaterClicked = exports.updateTreasuryPromoIntroClosedByOutsideClick = exports.updateFundAllocationLocalData = exports.fetchPortfolioAllocation = exports.updatePortfolioAllocation = exports.fetchTreasuryFunds = exports.clearTreasurySetupView = exports.fetchTreasurySetupView = exports.acceptTreasuryTerms = exports.getExpressPayView = exports.resetExpressPayLocalData = exports.submitExpressPay = exports.updateExpressPayFormLocalData = exports.fetchExpressPayInitialDetails = exports.getIntlWireVerificationView = exports.updateVerificationFormLocalData = exports.submitInternationalVerificationForm = exports.fetchInternationalVerificationForm = exports.createTaskFromTaskGroupTemplate = exports.getCompanyTaskManagerView = exports.fetchTaskManagerMetrics = exports.fetchCompanyTaskManagerView = exports.fetchCockpitContext = exports.toRecurringFrequency = exports.toDayOfWeek = exports.getRecurringEndDateFromCount = exports.getMinAllowedEndDate = exports.SEMI_WEEKLY_REQUIRED_DAYS_COUNT = exports.ALL_WEEK_DAYS = exports.updateReferViewed = exports.getRewardsPlanCard = exports.fetchRewardsPlan = exports.resendReferralInvite = exports.updateReferralListSortUiState = exports.saveReferralFormDataInLocalStore = exports.clearReferrals = exports.sendReferralInvite = exports.fetchReferrals = exports.AmountStatusTypes = exports.StatusTypes = exports.toReferralListViewSortKeyType = exports.getInviteFormView = exports.getReferralListView = void 0;
|
|
74
|
-
exports.
|
|
75
|
-
exports.
|
|
76
|
-
exports.
|
|
77
|
-
exports.
|
|
78
|
-
exports.getCashManagementOverviewBanner = exports.getCashManagementOverview = exports.bufferAmountToRisk = exports.RISK_BUFFER_AMOUNT = exports.getAutoSweepFlow = exports.updateCashManagementSettingsFetchStatus = exports.updateCashManagementSettings = exports.updateAutoSweepSettingsFetchStatus = exports.updateAutoSweepRisk = exports.updateAutoSweepDraft = exports.saveAutoSweepSettings = exports.clearAutoSweepFlow = exports.fetchCashManagementOverviewPage = exports.fetchCashManagementBanner = exports.toKycProvidedDocumentTypeFromAllowed = exports.toKycProvidedDocumentType = exports.DEFAULT_SESSION_CONFIG = exports.SessionManager = exports.getTransactionActivityLogView = exports.fetchTransactionActivityLog = exports.BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = exports.BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = exports.getAutoTransferRuleHistory = exports.getAutoTransferRuleById = exports.getAutoTransferRules = exports.clearRuleUpdateLocalData = exports.updateRuleLocalData = exports.fetchAutoTransferReviewDetail = exports.fetchAutoTransferRuleHistory = exports.deleteAutoTransferRule = exports.updateAutoTransferRule = exports.createAutoTransferRule = exports.fetchAutoTransferRules = exports.getTreasuryTaxLetters = exports.fetchTreasuryTaxLetterList = exports.getTreasuryStatements = void 0;
|
|
74
|
+
exports.updateAiCfoAnswerCardPolicyWizardPlan = exports.setSessions = exports.setNewSession = exports.getSkills = exports.getSuggestedQuestionsForPageContext = exports.getAiCfoView = exports.clearAiCfoSidePanelHostPageContext = exports.applyAiCfoSidePanelHostPageTransition = exports.fetchSkillsFailure = exports.fetchSkillsSuccess = exports.fetchSkills = exports.fetchSuggestedQuestionsFailure = exports.fetchSuggestedQuestionsSuccess = exports.fetchSuggestedQuestions = exports.updateResponseState = exports.deleteChatSession = exports.acceptMasterTOS = exports.fetchChatHistory = exports.stopSubmitQuestion = exports.stopSubmit = exports.createSessionAndSubmit = exports.clearLastContextMessage = exports.clearDeleteChatSessionStatus = exports.clearCurrentSessionId = exports.clearAiCfoView = exports.setSession = exports.clearInput = exports.updateCotCollapsedState = exports.updateCurrentInput = exports.updateAiCfoViewScrollPosition = exports.submitQuestion = exports.createSession = exports.fetchChatSessionsForUser = exports.getAiAccountantCockpitView = exports.updateAiAccountantUIState = exports.triggerAiAccountantJob = exports.setSelectedTenantIdsForJobTrigger = exports.fetchAiAccountantJobs = exports.fetchAiAccountantCustomers = exports.clearAiAccountantView = exports.cancelAiAccountantOnboarding = exports.getAiAccountantJobsByTenantId = exports.getAiAccountantCustomers = exports.updateAiAccountantJobs = exports.updateAiAccountantCustomer = exports.updateAiAccountantCustomers = exports.clearAllAiAccountantCustomers = exports.toAiAccountantJob = exports.toAiAccountantEnrollment = exports.toAiAccountantCustomer = void 0;
|
|
75
|
+
exports.updatePolicyRecommendationFromUploadFailure = exports.updatePolicyDocumentExtractionSuccess = exports.updatePolicyDocumentExtractionFailure = exports.updateCreatedCardPolicyTemplate = exports.updateCardPolicyVendorOptionsFailure = exports.updateCardPolicyVendorOptions = exports.updateCardPolicyTemplates = exports.updateCardPolicyStats = exports.updateCardPolicyMccCategoriesFailure = exports.updateCardPolicyMccCategories = exports.removeCardPolicyTemplate = exports.fetchCardPolicyVendorOptions = exports.fetchCardPolicyRecommendationFromUpload = exports.fetchCardPolicyMccCategories = exports.extractPolicyDocument = exports.clearPolicyDocumentExtraction = exports.toMessageType = exports.toMessageSender = exports.ALL_SYNTHETIC_AI_CFO_ANSWER_KINDS = exports.toInteractiveFormTypeStrict = exports.toInteractiveFormType = exports.toAiCfoAnswerResponseTypeStrict = exports.toAiCfoAnswerResponseType = exports.toAiCfoAnswerStateTypeStrict = exports.toAiCfoAnswerStateType = exports.toAiCfoChartTypeStrict = exports.toAiCfoChartType = exports.toAiCfoVisualizationTypeStrict = exports.toAiCfoVisualizationType = exports.ALL_INTERACTIVE_FORM_TYPES = exports.ALL_AI_CFO_ANSWER_RESPONSE_TYPES = exports.ALL_AI_CFO_ANSWER_STATE_TYPES = exports.ALL_AI_CFO_VISUALIZATION_TYPES = exports.ALL_AI_CFO_CHARTS_TYPES = exports.getSyntheticAiCfoAnswerByQuestionAnswerId = exports.getSyntheticAiCfoAnswersForChatSession = exports.getAiCfoSelectorView = exports.getAllQuestionsForChatSession = exports.getQuestionAnswerByIdForChatSession = exports.getAllQuestionAnswersForChatSession = exports.clearSyntheticAiCfoAnswers = exports.removeSyntheticAiCfoAnswer = exports.updateSyntheticAiCfoAnswer = exports.appendSyntheticAiCfoAnswer = exports.toAiCfoVisualization = exports.clearAiCfo = exports.clearSession = exports.addQuestionPayload = exports.upsertOrAddQuestionAnswerPayload = exports.upsertAnswerPayload = void 0;
|
|
76
|
+
exports.updateManualCardPolicyFormDraft = exports.updateCreateCardPolicyTemplateRequestState = exports.updateAiCardPolicyFormDraftFromUploadPlan = exports.updateAiCardPolicyFormDraft = exports.seedManualCardPolicyFormDraft = exports.seedAiCardPolicyFormDraft = exports.createCardPolicyTemplates = exports.clearManualCardPolicyFormDraft = exports.clearCreateCardPolicy = exports.clearAiCardPolicyFormDraft = exports.applyExtractedPolicyToManualCardPolicyDraft = exports.applyExtractedPolicyToAiCardPolicyDraft = exports.toUpdateCardPolicyTemplateRequestBody = exports.toExtractedCardPolicyRules = exports.toCreateCardPolicyTemplatesRequestBody = exports.toCreateCardPolicyTemplateRequestBody = exports.toCardPolicyVendorSearchOption = exports.toCardPolicyTemplateList = exports.toCardPolicyTemplate = exports.toCardPolicyStats = exports.toCardPolicyEditFormDraft = exports.toBulkCreateCardPolicyTemplateError = exports.toCardPolicyTemplateStatus = exports.toCardPolicyTemplateMode = exports.ALL_CARD_POLICY_TEMPLATE_STATUSES = exports.ALL_CARD_POLICY_TEMPLATE_MODES = exports.getUploadedPolicyDocumentFileName = exports.getPolicyRecommendationFromUploadFetchState = exports.getPolicyRecommendationFromUploadError = exports.getPolicyRecommendationFromUploadChatSessionId = exports.getPolicyRecommendationFromUploadAnswerId = exports.getPolicyDocumentExtractionFetchState = exports.getPolicyDocumentExtractionError = exports.getExtractedCardPolicyRules = exports.getCardPolicyVendorSearchString = exports.getCardPolicyVendorSearchOptions = exports.getCardPolicyVendorSearchFetchState = exports.getCardPolicyTemplatesByIds = exports.getCardPolicyTemplateById = exports.getCardPolicySuggestedBlockMerchants = exports.getCardPolicySuggestedBlockCategories = exports.getCardPolicySuggestedAllowMerchants = exports.getCardPolicySuggestedAllowCategories = exports.getCardPolicyStats = exports.getCardPolicyMccCategoriesFetchState = exports.getCardPolicyMccCategoriesError = exports.getCardPolicyMccCategories = exports.getAllCardPolicyTemplates = exports.clearCardPolicy = exports.updatePolicyRecommendationFromUploadSuccess = void 0;
|
|
77
|
+
exports.executeTreasuryTransferMoney = exports.getTreasuryDetail = exports.updateTreasuryTransactionListUIState = exports.fetchTreasuryTransactionList = exports.fetchTreasuryOverviewDetail = exports.getUpdateCardPolicyFetchState = exports.getCardPolicyFormDraft = exports.getCardPolicyDetailView = exports.getCardPolicyDetailFetchState = exports.updateCardPolicyFormDraft = exports.updateCardPolicyFetchStatus = exports.updateCardPolicyDetailFetchStatus = exports.updateCardPolicy = exports.fetchCardPolicyDetail = exports.clearCardPolicyDetail = exports.getCardPolicyTemplateIds = exports.getCardPolicyListView = exports.getCardPolicyListFetchState = exports.getArchiveCardPolicyFetchState = exports.updateCardPolicyListFetchStatus = exports.updateArchiveCardPolicyFetchStatus = exports.prependCardPolicyTemplateIds = exports.fetchCardPolicyList = exports.clearCardPolicyList = exports.archiveCardPolicy = exports.toManualCardPolicyTemplateRequestFromDraft = exports.toBulkCardPolicyTemplateRequestsFromDraft = exports.toCardPolicyTemplateRequestFromDraft = exports.applyAiCardPolicyFormDraftUpdate = exports.deriveAiPolicyReviewRowsFromInputs = exports.buildManualCardPolicyFormDraftSeed = exports.buildUploadReviewRows = exports.buildEmptyLimitRows = exports.buildAiCardPolicyFormDraftSeed = exports.toVendorChipFieldValue = exports.toMccCategoryChipFieldValue = exports.buildVendorChipId = exports.buildMccCategoryChipId = exports.VENDOR_CHIP_ID_PREFIX = exports.MCC_CHIP_ID_PREFIX = exports.toMccCategoryLike = exports.CARD_POLICY_LIMIT_ROW_ID_TRANSACTION = exports.CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT = exports.getManualCardPolicyFormDraft = exports.getLastCreatedCardPolicyTemplateIds = exports.getLastCreatedCardPolicyTemplateId = exports.getLastCreateCardPolicyTemplateErrors = exports.getLastCreateCardPolicySourceChatSessionId = exports.getCreateCardPolicyTemplateRequestState = exports.getAiCardPolicyFormDraft = void 0;
|
|
78
|
+
exports.getCashManagementOverviewBanner = exports.getCashManagementOverview = exports.bufferAmountToRisk = exports.RISK_BUFFER_AMOUNT = exports.getAutoSweepFlow = exports.updateCashManagementSettingsFetchStatus = exports.updateCashManagementSettings = exports.updateAutoSweepSettingsFetchStatus = exports.updateAutoSweepRisk = exports.updateAutoSweepDraft = exports.saveAutoSweepSettings = exports.clearAutoSweepFlow = exports.fetchCashManagementOverviewPage = exports.fetchCashManagementBanner = exports.toKycProvidedDocumentTypeFromAllowed = exports.toKycProvidedDocumentType = exports.DEFAULT_SESSION_CONFIG = exports.SessionManager = exports.getTransactionActivityLogView = exports.fetchTransactionActivityLog = exports.BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = exports.BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = exports.getAutoTransferRuleHistory = exports.getAutoTransferRuleById = exports.getAutoTransferRules = exports.clearRuleUpdateLocalData = exports.updateRuleLocalData = exports.fetchAutoTransferReviewDetail = exports.fetchAutoTransferRuleHistory = exports.deleteAutoTransferRule = exports.updateAutoTransferRule = exports.createAutoTransferRule = exports.fetchAutoTransferRules = exports.getTreasuryTaxLetters = exports.fetchTreasuryTaxLetterList = exports.getTreasuryStatements = exports.fetchTreasuryStatementList = exports.getTreasuryTransferMoney = exports.clearTreasuryTransferMoney = exports.updateTreasuryTransferMoneyLocalData = void 0;
|
|
79
79
|
const allowedValue_1 = require("./commonStateTypes/allowedValue");
|
|
80
80
|
Object.defineProperty(exports, "isAllowedValueWithCode", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithCode; } });
|
|
81
81
|
Object.defineProperty(exports, "isAllowedValueWithID", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithID; } });
|
|
@@ -2331,11 +2331,15 @@ Object.defineProperty(exports, "updateResponseState", { enumerable: true, get: f
|
|
|
2331
2331
|
Object.defineProperty(exports, "fetchSuggestedQuestions", { enumerable: true, get: function () { return aiCfoViewReducer_1.fetchSuggestedQuestions; } });
|
|
2332
2332
|
Object.defineProperty(exports, "fetchSuggestedQuestionsSuccess", { enumerable: true, get: function () { return aiCfoViewReducer_1.fetchSuggestedQuestionsSuccess; } });
|
|
2333
2333
|
Object.defineProperty(exports, "fetchSuggestedQuestionsFailure", { enumerable: true, get: function () { return aiCfoViewReducer_1.fetchSuggestedQuestionsFailure; } });
|
|
2334
|
+
Object.defineProperty(exports, "fetchSkills", { enumerable: true, get: function () { return aiCfoViewReducer_1.fetchSkills; } });
|
|
2335
|
+
Object.defineProperty(exports, "fetchSkillsSuccess", { enumerable: true, get: function () { return aiCfoViewReducer_1.fetchSkillsSuccess; } });
|
|
2336
|
+
Object.defineProperty(exports, "fetchSkillsFailure", { enumerable: true, get: function () { return aiCfoViewReducer_1.fetchSkillsFailure; } });
|
|
2334
2337
|
Object.defineProperty(exports, "applyAiCfoSidePanelHostPageTransition", { enumerable: true, get: function () { return aiCfoViewReducer_1.applyAiCfoSidePanelHostPageTransition; } });
|
|
2335
2338
|
Object.defineProperty(exports, "clearAiCfoSidePanelHostPageContext", { enumerable: true, get: function () { return aiCfoViewReducer_1.clearAiCfoSidePanelHostPageContext; } });
|
|
2336
2339
|
var aiCfoViewSelector_1 = require("./view/aiCfoView/aiCfoViewSelector");
|
|
2337
2340
|
Object.defineProperty(exports, "getAiCfoView", { enumerable: true, get: function () { return aiCfoViewSelector_1.getAiCfoView; } });
|
|
2338
2341
|
Object.defineProperty(exports, "getSuggestedQuestionsForPageContext", { enumerable: true, get: function () { return aiCfoViewSelector_1.getSuggestedQuestionsForPageContext; } });
|
|
2342
|
+
Object.defineProperty(exports, "getSkills", { enumerable: true, get: function () { return aiCfoViewSelector_1.getSkills; } });
|
|
2339
2343
|
var aiCfoReducer_1 = require("./entity/aiCfo/aiCfoReducer");
|
|
2340
2344
|
Object.defineProperty(exports, "setNewSession", { enumerable: true, get: function () { return aiCfoReducer_1.setNewSession; } });
|
|
2341
2345
|
Object.defineProperty(exports, "setSessions", { enumerable: true, get: function () { return aiCfoReducer_1.setSessions; } });
|
|
@@ -30,4 +30,18 @@ export interface SuggestedQuestionsDataPayload {
|
|
|
30
30
|
suggested_questions: string[];
|
|
31
31
|
}
|
|
32
32
|
export type FetchSuggestedQuestionsResponse = ZeniAPIResponse<SuggestedQuestionsDataPayload>;
|
|
33
|
+
/** One entry in the `/` skill menu — from GET {chat}/1.0/skills (SkillSummary). */
|
|
34
|
+
export interface SkillSummaryPayload {
|
|
35
|
+
description: string | null;
|
|
36
|
+
display_name: string | null;
|
|
37
|
+
has_scripts: boolean;
|
|
38
|
+
macro_id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
parameter_hints: Record<string, unknown> | null;
|
|
41
|
+
semver: string | null;
|
|
42
|
+
}
|
|
43
|
+
export interface SkillListDataPayload {
|
|
44
|
+
skills: SkillSummaryPayload[];
|
|
45
|
+
}
|
|
46
|
+
export type FetchSkillsResponse = ZeniAPIResponse<SkillListDataPayload>;
|
|
33
47
|
export {};
|
|
@@ -5,9 +5,9 @@ import { ChatSessionPayload } from '../../entity/aiCfo/aiCfoPayload';
|
|
|
5
5
|
import { AiCfoAnswerResponseType } from '../../entity/aiCfo/aiCfoState';
|
|
6
6
|
import { ZeniAPIStatus } from '../../responsePayload';
|
|
7
7
|
import { ContextStatus } from './aiCfoViewPayload';
|
|
8
|
-
import { AiCfoViewState } from './aiCfoViewState';
|
|
8
|
+
import { AiCfoViewState, Skill } from './aiCfoViewState';
|
|
9
9
|
export declare const initialAiCfoViewState: AiCfoViewState;
|
|
10
|
-
export declare const submitQuestion: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[sessionId: string, questionAnswerId: string, userId: string, questionId: string, createdAt: import("dayjs").Dayjs, question: string, files?: File[] | undefined], {
|
|
10
|
+
export declare const submitQuestion: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[sessionId: string, questionAnswerId: string, userId: string, questionId: string, createdAt: import("dayjs").Dayjs, question: string, files?: File[] | undefined, macroId?: string | undefined], {
|
|
11
11
|
sessionId: string;
|
|
12
12
|
questionAnswerId: string;
|
|
13
13
|
userId: string;
|
|
@@ -15,6 +15,7 @@ export declare const submitQuestion: import("@reduxjs/toolkit").ActionCreatorWit
|
|
|
15
15
|
createdAt: import("dayjs").Dayjs;
|
|
16
16
|
question: string;
|
|
17
17
|
files: File[] | undefined;
|
|
18
|
+
macroId: string | undefined;
|
|
18
19
|
}, "aiCfoView/submitQuestion", never, never>, submitQuestionSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "aiCfoView/submitQuestionSuccess">, submitQuestionFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
19
20
|
error: ZeniAPIStatus;
|
|
20
21
|
sessionId: ID;
|
|
@@ -36,7 +37,7 @@ export declare const submitQuestion: import("@reduxjs/toolkit").ActionCreatorWit
|
|
|
36
37
|
sessionId: ID;
|
|
37
38
|
contextMessage?: string;
|
|
38
39
|
contextStatus?: ContextStatus;
|
|
39
|
-
}, "aiCfoView/createSessionSuccess">, createSessionFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<ZeniAPIStatus<Record<string, unknown>>, "aiCfoView/createSessionFailure">, createSessionAndSubmit: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[agentId: string, userId: string, questionAnswerId: string, questionId: string, createdAt: import("dayjs").Dayjs, question: string, files?: File[] | undefined, pageContext?: string | undefined], {
|
|
40
|
+
}, "aiCfoView/createSessionSuccess">, createSessionFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<ZeniAPIStatus<Record<string, unknown>>, "aiCfoView/createSessionFailure">, createSessionAndSubmit: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[agentId: string, userId: string, questionAnswerId: string, questionId: string, createdAt: import("dayjs").Dayjs, question: string, files?: File[] | undefined, pageContext?: string | undefined, macroId?: string | undefined], {
|
|
40
41
|
agentId: string;
|
|
41
42
|
userId: string;
|
|
42
43
|
questionAnswerId: string;
|
|
@@ -45,6 +46,7 @@ export declare const submitQuestion: import("@reduxjs/toolkit").ActionCreatorWit
|
|
|
45
46
|
question: string;
|
|
46
47
|
files: File[] | undefined;
|
|
47
48
|
pageContext: string | undefined;
|
|
49
|
+
macroId: string | undefined;
|
|
48
50
|
}, "aiCfoView/createSessionAndSubmit", never, never>, initializeNewSessionState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
49
51
|
agentId: string;
|
|
50
52
|
sessionId: ID;
|
|
@@ -108,7 +110,9 @@ export declare const submitQuestion: import("@reduxjs/toolkit").ActionCreatorWit
|
|
|
108
110
|
}, "aiCfoView/fetchSuggestedQuestionsSuccess">, fetchSuggestedQuestionsFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
109
111
|
error: ZeniAPIStatus;
|
|
110
112
|
pageContext: AiCfoSuggestedQuestionsPageContext;
|
|
111
|
-
}, "aiCfoView/fetchSuggestedQuestionsFailure">,
|
|
113
|
+
}, "aiCfoView/fetchSuggestedQuestionsFailure">, fetchSkills: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"aiCfoView/fetchSkills">, fetchSkillsSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
114
|
+
skills: Skill[];
|
|
115
|
+
}, "aiCfoView/fetchSkillsSuccess">, fetchSkillsFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<ZeniAPIStatus<Record<string, unknown>>, "aiCfoView/fetchSkillsFailure">, applyAiCfoSidePanelHostPageTransition: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
112
116
|
newAiCfoSidePanelHostPageKey: string;
|
|
113
117
|
/** When omitted or null, clears the active session (empty / suggested questions). */
|
|
114
118
|
nextCurrentChatSessionId?: ID | null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.clearAiCfoSidePanelHostPageContext = exports.applyAiCfoSidePanelHostPageTransition = exports.fetchSuggestedQuestionsFailure = exports.fetchSuggestedQuestionsSuccess = exports.fetchSuggestedQuestions = exports.updateCotCollapsedState = exports.clearAiCfoView = exports.clearDeleteChatSessionStatus = exports.deleteChatSessionFailure = exports.deleteChatSessionSuccess = exports.deleteChatSession = exports.acceptMasterTOSFailure = exports.acceptMasterTOSSuccess = exports.acceptMasterTOS = exports.stopSubmitQuestionFailure = exports.stopSubmitQuestionSuccess = exports.stopSubmitQuestion = exports.stopSubmitFailure = exports.stopSubmitSuccess = exports.stopSubmit = exports.clearLastContextMessage = exports.clearCurrentSessionId = exports.fetchChatHistoryFailure = exports.fetchChatHistorySuccess = exports.fetchChatHistory = exports.fetchChatSessionsForUserFailure = exports.fetchChatSessionsForUserSuccess = exports.fetchChatSessionsForUser = exports.createSessionAndSubmitFailure = exports.createSessionAndSubmitSuccess = exports.initializeNewSessionState = exports.createSessionAndSubmit = exports.createSessionFailure = exports.createSessionSuccess = exports.createSession = exports.setSession = exports.clearInput = exports.updateCurrentInput = exports.updateAiCfoViewScrollPosition = exports.updateResponseState = exports.submitQuestionFailure = exports.submitQuestionSuccess = exports.submitQuestion = exports.initialAiCfoViewState = void 0;
|
|
4
|
+
exports.clearAiCfoSidePanelHostPageContext = exports.applyAiCfoSidePanelHostPageTransition = exports.fetchSkillsFailure = exports.fetchSkillsSuccess = exports.fetchSkills = exports.fetchSuggestedQuestionsFailure = exports.fetchSuggestedQuestionsSuccess = exports.fetchSuggestedQuestions = exports.updateCotCollapsedState = exports.clearAiCfoView = exports.clearDeleteChatSessionStatus = exports.deleteChatSessionFailure = exports.deleteChatSessionSuccess = exports.deleteChatSession = exports.acceptMasterTOSFailure = exports.acceptMasterTOSSuccess = exports.acceptMasterTOS = exports.stopSubmitQuestionFailure = exports.stopSubmitQuestionSuccess = exports.stopSubmitQuestion = exports.stopSubmitFailure = exports.stopSubmitSuccess = exports.stopSubmit = exports.clearLastContextMessage = exports.clearCurrentSessionId = exports.fetchChatHistoryFailure = exports.fetchChatHistorySuccess = exports.fetchChatHistory = exports.fetchChatSessionsForUserFailure = exports.fetchChatSessionsForUserSuccess = exports.fetchChatSessionsForUser = exports.createSessionAndSubmitFailure = exports.createSessionAndSubmitSuccess = exports.initializeNewSessionState = exports.createSessionAndSubmit = exports.createSessionFailure = exports.createSessionSuccess = exports.createSession = exports.setSession = exports.clearInput = exports.updateCurrentInput = exports.updateAiCfoViewScrollPosition = exports.updateResponseState = exports.submitQuestionFailure = exports.submitQuestionSuccess = exports.submitQuestion = exports.initialAiCfoViewState = void 0;
|
|
5
5
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
6
|
function removeSessionIdFromPageKeyMap(draft, sessionId) {
|
|
7
7
|
const map = draft.uiState.chatSessionIdByPageKey;
|
|
@@ -51,6 +51,7 @@ exports.initialAiCfoViewState = {
|
|
|
51
51
|
responseStateByChatSessionId: {},
|
|
52
52
|
stopSubmitStateByChatSessionId: {},
|
|
53
53
|
suggestedQuestionsByPageContext: {},
|
|
54
|
+
skills: { fetchState: 'Not-Started', error: undefined, skills: [] },
|
|
54
55
|
};
|
|
55
56
|
const aiCfoView = (0, toolkit_1.createSlice)({
|
|
56
57
|
name: 'aiCfoView',
|
|
@@ -66,7 +67,7 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
66
67
|
answer: { fetchState: 'In-Progress', error: undefined },
|
|
67
68
|
};
|
|
68
69
|
},
|
|
69
|
-
prepare(sessionId, questionAnswerId, userId, questionId, createdAt, question, files) {
|
|
70
|
+
prepare(sessionId, questionAnswerId, userId, questionId, createdAt, question, files, macroId) {
|
|
70
71
|
return {
|
|
71
72
|
payload: {
|
|
72
73
|
sessionId,
|
|
@@ -76,6 +77,7 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
76
77
|
createdAt,
|
|
77
78
|
question,
|
|
78
79
|
files,
|
|
80
|
+
macroId,
|
|
79
81
|
},
|
|
80
82
|
};
|
|
81
83
|
},
|
|
@@ -226,7 +228,7 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
226
228
|
draft.createSessionAndSubmitState.fetchState = 'In-Progress';
|
|
227
229
|
draft.createSessionAndSubmitState.error = undefined;
|
|
228
230
|
},
|
|
229
|
-
prepare(agentId, userId, questionAnswerId, questionId, createdAt, question, files, pageContext) {
|
|
231
|
+
prepare(agentId, userId, questionAnswerId, questionId, createdAt, question, files, pageContext, macroId) {
|
|
230
232
|
return {
|
|
231
233
|
payload: {
|
|
232
234
|
agentId,
|
|
@@ -237,6 +239,7 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
237
239
|
question,
|
|
238
240
|
files,
|
|
239
241
|
pageContext,
|
|
242
|
+
macroId,
|
|
240
243
|
},
|
|
241
244
|
};
|
|
242
245
|
},
|
|
@@ -449,6 +452,29 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
449
452
|
error,
|
|
450
453
|
};
|
|
451
454
|
},
|
|
455
|
+
fetchSkills(draft) {
|
|
456
|
+
// Optional-chain: persisted/rehydrated state from before this slice existed
|
|
457
|
+
// may have no `skills`, so don't assume draft.skills is set.
|
|
458
|
+
draft.skills = {
|
|
459
|
+
fetchState: 'In-Progress',
|
|
460
|
+
error: undefined,
|
|
461
|
+
skills: draft.skills?.skills ?? [],
|
|
462
|
+
};
|
|
463
|
+
},
|
|
464
|
+
fetchSkillsSuccess(draft, action) {
|
|
465
|
+
draft.skills = {
|
|
466
|
+
fetchState: 'Completed',
|
|
467
|
+
error: undefined,
|
|
468
|
+
skills: action.payload.skills,
|
|
469
|
+
};
|
|
470
|
+
},
|
|
471
|
+
fetchSkillsFailure(draft, action) {
|
|
472
|
+
draft.skills = {
|
|
473
|
+
fetchState: 'Error',
|
|
474
|
+
error: action.payload,
|
|
475
|
+
skills: draft.skills?.skills ?? [],
|
|
476
|
+
};
|
|
477
|
+
},
|
|
452
478
|
clearAiCfoView(draft) {
|
|
453
479
|
Object.assign(draft, exports.initialAiCfoViewState);
|
|
454
480
|
},
|
|
@@ -459,5 +485,5 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
459
485
|
},
|
|
460
486
|
},
|
|
461
487
|
});
|
|
462
|
-
_a = aiCfoView.actions, exports.submitQuestion = _a.submitQuestion, exports.submitQuestionSuccess = _a.submitQuestionSuccess, exports.submitQuestionFailure = _a.submitQuestionFailure, exports.updateResponseState = _a.updateResponseState, exports.updateAiCfoViewScrollPosition = _a.updateAiCfoViewScrollPosition, exports.updateCurrentInput = _a.updateCurrentInput, exports.clearInput = _a.clearInput, exports.setSession = _a.setSession, exports.createSession = _a.createSession, exports.createSessionSuccess = _a.createSessionSuccess, exports.createSessionFailure = _a.createSessionFailure, exports.createSessionAndSubmit = _a.createSessionAndSubmit, exports.initializeNewSessionState = _a.initializeNewSessionState, exports.createSessionAndSubmitSuccess = _a.createSessionAndSubmitSuccess, exports.createSessionAndSubmitFailure = _a.createSessionAndSubmitFailure, exports.fetchChatSessionsForUser = _a.fetchChatSessionsForUser, exports.fetchChatSessionsForUserSuccess = _a.fetchChatSessionsForUserSuccess, exports.fetchChatSessionsForUserFailure = _a.fetchChatSessionsForUserFailure, exports.fetchChatHistory = _a.fetchChatHistory, exports.fetchChatHistorySuccess = _a.fetchChatHistorySuccess, exports.fetchChatHistoryFailure = _a.fetchChatHistoryFailure, exports.clearCurrentSessionId = _a.clearCurrentSessionId, exports.clearLastContextMessage = _a.clearLastContextMessage, exports.stopSubmit = _a.stopSubmit, exports.stopSubmitSuccess = _a.stopSubmitSuccess, exports.stopSubmitFailure = _a.stopSubmitFailure, exports.stopSubmitQuestion = _a.stopSubmitQuestion, exports.stopSubmitQuestionSuccess = _a.stopSubmitQuestionSuccess, exports.stopSubmitQuestionFailure = _a.stopSubmitQuestionFailure, exports.acceptMasterTOS = _a.acceptMasterTOS, exports.acceptMasterTOSSuccess = _a.acceptMasterTOSSuccess, exports.acceptMasterTOSFailure = _a.acceptMasterTOSFailure, exports.deleteChatSession = _a.deleteChatSession, exports.deleteChatSessionSuccess = _a.deleteChatSessionSuccess, exports.deleteChatSessionFailure = _a.deleteChatSessionFailure, exports.clearDeleteChatSessionStatus = _a.clearDeleteChatSessionStatus, exports.clearAiCfoView = _a.clearAiCfoView, exports.updateCotCollapsedState = _a.updateCotCollapsedState, exports.fetchSuggestedQuestions = _a.fetchSuggestedQuestions, exports.fetchSuggestedQuestionsSuccess = _a.fetchSuggestedQuestionsSuccess, exports.fetchSuggestedQuestionsFailure = _a.fetchSuggestedQuestionsFailure, exports.applyAiCfoSidePanelHostPageTransition = _a.applyAiCfoSidePanelHostPageTransition, exports.clearAiCfoSidePanelHostPageContext = _a.clearAiCfoSidePanelHostPageContext;
|
|
488
|
+
_a = aiCfoView.actions, exports.submitQuestion = _a.submitQuestion, exports.submitQuestionSuccess = _a.submitQuestionSuccess, exports.submitQuestionFailure = _a.submitQuestionFailure, exports.updateResponseState = _a.updateResponseState, exports.updateAiCfoViewScrollPosition = _a.updateAiCfoViewScrollPosition, exports.updateCurrentInput = _a.updateCurrentInput, exports.clearInput = _a.clearInput, exports.setSession = _a.setSession, exports.createSession = _a.createSession, exports.createSessionSuccess = _a.createSessionSuccess, exports.createSessionFailure = _a.createSessionFailure, exports.createSessionAndSubmit = _a.createSessionAndSubmit, exports.initializeNewSessionState = _a.initializeNewSessionState, exports.createSessionAndSubmitSuccess = _a.createSessionAndSubmitSuccess, exports.createSessionAndSubmitFailure = _a.createSessionAndSubmitFailure, exports.fetchChatSessionsForUser = _a.fetchChatSessionsForUser, exports.fetchChatSessionsForUserSuccess = _a.fetchChatSessionsForUserSuccess, exports.fetchChatSessionsForUserFailure = _a.fetchChatSessionsForUserFailure, exports.fetchChatHistory = _a.fetchChatHistory, exports.fetchChatHistorySuccess = _a.fetchChatHistorySuccess, exports.fetchChatHistoryFailure = _a.fetchChatHistoryFailure, exports.clearCurrentSessionId = _a.clearCurrentSessionId, exports.clearLastContextMessage = _a.clearLastContextMessage, exports.stopSubmit = _a.stopSubmit, exports.stopSubmitSuccess = _a.stopSubmitSuccess, exports.stopSubmitFailure = _a.stopSubmitFailure, exports.stopSubmitQuestion = _a.stopSubmitQuestion, exports.stopSubmitQuestionSuccess = _a.stopSubmitQuestionSuccess, exports.stopSubmitQuestionFailure = _a.stopSubmitQuestionFailure, exports.acceptMasterTOS = _a.acceptMasterTOS, exports.acceptMasterTOSSuccess = _a.acceptMasterTOSSuccess, exports.acceptMasterTOSFailure = _a.acceptMasterTOSFailure, exports.deleteChatSession = _a.deleteChatSession, exports.deleteChatSessionSuccess = _a.deleteChatSessionSuccess, exports.deleteChatSessionFailure = _a.deleteChatSessionFailure, exports.clearDeleteChatSessionStatus = _a.clearDeleteChatSessionStatus, exports.clearAiCfoView = _a.clearAiCfoView, exports.updateCotCollapsedState = _a.updateCotCollapsedState, exports.fetchSuggestedQuestions = _a.fetchSuggestedQuestions, exports.fetchSuggestedQuestionsSuccess = _a.fetchSuggestedQuestionsSuccess, exports.fetchSuggestedQuestionsFailure = _a.fetchSuggestedQuestionsFailure, exports.fetchSkills = _a.fetchSkills, exports.fetchSkillsSuccess = _a.fetchSkillsSuccess, exports.fetchSkillsFailure = _a.fetchSkillsFailure, exports.applyAiCfoSidePanelHostPageTransition = _a.applyAiCfoSidePanelHostPageTransition, exports.clearAiCfoSidePanelHostPageContext = _a.clearAiCfoSidePanelHostPageContext;
|
|
463
489
|
exports.default = aiCfoView.reducer;
|
|
@@ -4,7 +4,7 @@ import { FetchStateAndError } from '../../commonStateTypes/common';
|
|
|
4
4
|
import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
5
5
|
import { AiCfoSelectorView } from '../../entity/aiCfo/aiCfoSelector';
|
|
6
6
|
import { RootState } from '../../reducer';
|
|
7
|
-
import { AiCfoViewUIState, SuggestedQuestionsForPageContext } from './aiCfoViewState';
|
|
7
|
+
import { AiCfoViewUIState, SkillsState, SuggestedQuestionsForPageContext } from './aiCfoViewState';
|
|
8
8
|
export interface AiCfoViewSelector extends SelectorView, AiCfoSelectorView {
|
|
9
9
|
createSessionAndSubmitState: FetchStateAndError;
|
|
10
10
|
createSessionState: FetchStateAndError;
|
|
@@ -23,3 +23,4 @@ export interface AiCfoViewSelector extends SelectorView, AiCfoSelectorView {
|
|
|
23
23
|
}
|
|
24
24
|
export declare const getAiCfoView: (state: RootState) => AiCfoViewSelector;
|
|
25
25
|
export declare function getSuggestedQuestionsForPageContext(state: RootState, pageContext: AiCfoSuggestedQuestionsPageContext): SuggestedQuestionsForPageContext | undefined;
|
|
26
|
+
export declare function getSkills(state: RootState): SkillsState;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAiCfoView = void 0;
|
|
4
4
|
exports.getSuggestedQuestionsForPageContext = getSuggestedQuestionsForPageContext;
|
|
5
|
+
exports.getSkills = getSkills;
|
|
5
6
|
const aiCfoReducer_1 = require("../../entity/aiCfo/aiCfoReducer");
|
|
6
7
|
const aiCfoSelector_1 = require("../../entity/aiCfo/aiCfoSelector");
|
|
7
8
|
const aiCfoViewReducer_1 = require("./aiCfoViewReducer");
|
|
@@ -27,3 +28,14 @@ exports.getAiCfoView = getAiCfoView;
|
|
|
27
28
|
function getSuggestedQuestionsForPageContext(state, pageContext) {
|
|
28
29
|
return state.aiCfoViewState?.suggestedQuestionsByPageContext?.[pageContext];
|
|
29
30
|
}
|
|
31
|
+
// Stable fallback so getSkills returns a referentially-stable object when skills
|
|
32
|
+
// state is absent — a fresh literal each call would defeat useSelector identity
|
|
33
|
+
// checks and cause needless re-renders.
|
|
34
|
+
const EMPTY_SKILLS_STATE = {
|
|
35
|
+
fetchState: 'Not-Started',
|
|
36
|
+
error: undefined,
|
|
37
|
+
skills: [],
|
|
38
|
+
};
|
|
39
|
+
function getSkills(state) {
|
|
40
|
+
return state.aiCfoViewState?.skills ?? EMPTY_SKILLS_STATE;
|
|
41
|
+
}
|
|
@@ -37,6 +37,19 @@ export interface SuggestedQuestionsForPageContext extends FetchStateAndError {
|
|
|
37
37
|
suggestedQuestions: string[];
|
|
38
38
|
generatedAt?: string;
|
|
39
39
|
}
|
|
40
|
+
/** A chat-visible skill shown in the `/` menu. */
|
|
41
|
+
export interface Skill {
|
|
42
|
+
description: string | null;
|
|
43
|
+
displayName: string | null;
|
|
44
|
+
hasScripts: boolean;
|
|
45
|
+
macroId: string;
|
|
46
|
+
name: string;
|
|
47
|
+
parameterHints: Record<string, unknown> | null;
|
|
48
|
+
semver: string | null;
|
|
49
|
+
}
|
|
50
|
+
export interface SkillsState extends FetchStateAndError {
|
|
51
|
+
skills: Skill[];
|
|
52
|
+
}
|
|
40
53
|
export interface AiCfoViewState extends FetchStateAndError {
|
|
41
54
|
allChatSessionIds: ID[];
|
|
42
55
|
createSessionAndSubmitState: FetchStateAndError;
|
|
@@ -50,6 +63,8 @@ export interface AiCfoViewState extends FetchStateAndError {
|
|
|
50
63
|
reasoning: FetchStateAndError;
|
|
51
64
|
thought: FetchStateAndError;
|
|
52
65
|
}>;
|
|
66
|
+
/** Chat-visible skills for the `/` menu. */
|
|
67
|
+
skills: SkillsState;
|
|
53
68
|
stopSubmitStateByChatSessionId: Record<ID, FetchStateAndError>;
|
|
54
69
|
/** Keyed by `page_context` query value (e.g. balance_sheet). */
|
|
55
70
|
suggestedQuestionsByPageContext: Partial<Record<AiCfoSuggestedQuestionsPageContext, SuggestedQuestionsForPageContext>>;
|
|
@@ -69,7 +69,7 @@ function waitForChannelSubscription(pusherInstance, channelName, timeoutMs = 500
|
|
|
69
69
|
}));
|
|
70
70
|
}
|
|
71
71
|
const createSessionAndSubmitEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(aiCfoViewReducer_1.createSessionAndSubmit.match), (0, operators_1.switchMap)((action) => {
|
|
72
|
-
const { agentId, userId, questionAnswerId, questionId, createdAt, question, files, pageContext, } = action.payload;
|
|
72
|
+
const { agentId, userId, questionAnswerId, questionId, createdAt, question, files, pageContext, macroId, } = action.payload;
|
|
73
73
|
const payload = {
|
|
74
74
|
agent_id: agentId,
|
|
75
75
|
...(pageContext != null && { page_context: pageContext }),
|
|
@@ -116,7 +116,7 @@ const createSessionAndSubmitEpic = (actions$, _state$, zeniAPI) => actions$.pipe
|
|
|
116
116
|
// This allows fetchChatHistory to run after the question is submitted
|
|
117
117
|
(0, rxjs_1.of)((0, aiCfoViewReducer_1.createSessionAndSubmitSuccess)(),
|
|
118
118
|
// Submit the question after handlers are bound
|
|
119
|
-
(0, aiCfoViewReducer_1.submitQuestion)(sessionId, questionAnswerId, userId, questionId, createdAt, question, files),
|
|
119
|
+
(0, aiCfoViewReducer_1.submitQuestion)(sessionId, questionAnswerId, userId, questionId, createdAt, question, files, macroId),
|
|
120
120
|
// Add question payload optimistically after submitQuestion (matches original order)
|
|
121
121
|
// This is idempotent - won't create duplicates if called multiple times
|
|
122
122
|
// submitQuestionEpic will find the question already exists and only update the response
|