@zeniai/client-epic-state 5.1.24 → 5.1.25-betaRD2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +2 -1
  2. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +1 -0
  3. package/lib/entity/transaction/payloadTypes/transactionPayload.js +5 -0
  4. package/lib/entity/transaction/stateTypes/transaction.d.ts +1 -0
  5. package/lib/epic.d.ts +2 -1
  6. package/lib/epic.js +2 -1
  7. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +5 -0
  8. package/lib/esm/epic.js +2 -1
  9. package/lib/esm/index.js +2 -2
  10. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +29 -3
  11. package/lib/esm/view/aiCfoView/aiCfoViewSelector.js +11 -0
  12. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
  13. package/lib/esm/view/aiCfoView/epics/fetchSkillsEpic.js +34 -0
  14. package/lib/esm/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
  15. package/lib/esm/view/transactionDetail/epics/saveTransactionDetailEpic.js +3 -1
  16. package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +11 -2
  17. package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +28 -4
  18. package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +17 -0
  19. package/lib/index.d.ts +4 -4
  20. package/lib/index.js +9 -5
  21. package/lib/view/aiCfoView/aiCfoViewPayload.d.ts +14 -0
  22. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +8 -4
  23. package/lib/view/aiCfoView/aiCfoViewReducer.js +30 -4
  24. package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +2 -1
  25. package/lib/view/aiCfoView/aiCfoViewSelector.js +12 -0
  26. package/lib/view/aiCfoView/aiCfoViewState.d.ts +15 -0
  27. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
  28. package/lib/view/aiCfoView/epics/fetchSkillsEpic.d.ts +8 -0
  29. package/lib/view/aiCfoView/epics/fetchSkillsEpic.js +38 -0
  30. package/lib/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
  31. package/lib/view/transactionDetail/epics/saveTransactionDetailEpic.js +3 -1
  32. package/lib/view/transactionDetail/epics/saveTransactionHelper.d.ts +1 -1
  33. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +11 -2
  34. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.d.ts +8 -0
  35. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +30 -5
  36. package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +17 -0
  37. package/lib/view/transactionDetail/transactionDetailState.d.ts +1 -0
  38. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +1 -0
  39. 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
- project: lineItem.project,
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
+ export 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,28 @@ 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. Clear-project (null injection) is
234
+ // intentionally out of scope for this change — the null write-back path will
235
+ // be added in a follow-up once the backend contract is confirmed.
236
+ if (isAccountingProjectsEnabled &&
237
+ (transaction.type === 'invoice' || transaction.type === 'credit_memo') &&
238
+ updates.project != null) {
239
+ basePayload = {
240
+ ...basePayload,
241
+ accounting_project_id: updates.project.projectId,
242
+ // Only spread integration_id when we have a concrete value; omitting it
243
+ // avoids accidentally nulling out the server-side value when the load
244
+ // path didn't surface the field (e.g. list-shaped data or pre-deploy store).
245
+ ...(updates.project.accountingProviderProjectId != null
246
+ ? {
247
+ accounting_project_integration_id: updates.project.accountingProviderProjectId,
248
+ }
249
+ : {}),
250
+ accounting_project_name: updates.project.projectName,
251
+ };
252
+ }
229
253
  }
230
254
  else if (isVendorTransaction(transaction)) {
231
255
  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.clearSession = exports.addQuestionPayload = exports.upsertOrAddQuestionAnswerPayload = exports.upsertAnswerPayload = exports.updateAiCfoAnswerCardPolicyWizardPlan = exports.setSessions = exports.setNewSession = exports.getSuggestedQuestionsForPageContext = exports.getAiCfoView = exports.clearAiCfoSidePanelHostPageContext = exports.applyAiCfoSidePanelHostPageTransition = 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.getCardPolicyMccCategories = exports.getAllCardPolicyTemplates = exports.clearCardPolicy = exports.updatePolicyRecommendationFromUploadSuccess = 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 = void 0;
76
- exports.getLastCreateCardPolicyTemplateErrors = exports.getLastCreateCardPolicySourceChatSessionId = exports.getCreateCardPolicyTemplateRequestState = exports.getAiCardPolicyFormDraft = 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 = void 0;
77
- exports.fetchTreasuryStatementList = exports.getTreasuryTransferMoney = exports.clearTreasuryTransferMoney = exports.updateTreasuryTransferMoneyLocalData = 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 = 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 = 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">, applyAiCfoSidePanelHostPageTransition: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
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>>;