@reconcrap/boss-recommend-mcp 2.0.18 → 2.0.19

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reconcrap/boss-recommend-mcp",
3
- "version": "2.0.18",
3
+ "version": "2.0.19",
4
4
  "description": "Unified MCP pipeline for recommend-page filtering and screening on Boss Zhipin",
5
5
  "keywords": [
6
6
  "boss",
@@ -153,6 +153,11 @@ function resultOpenedDetail(result) {
153
153
  return Boolean(result?.detail && !result.detail?.cv_acquisition?.skipped);
154
154
  }
155
155
 
156
+ export function chatDetailSkipReasonFromReadyState(state = {}) {
157
+ if (state?.attachment_resume_enabled) return "attachment_resume_already_available";
158
+ return "";
159
+ }
160
+
156
161
  function llmToScreening(llmResult, candidate) {
157
162
  return {
158
163
  status: llmResult?.passed ? "pass" : "fail",
@@ -962,20 +967,37 @@ export async function runChatWorkflow({
962
967
  }
963
968
  effectiveCardNodeId = selected.card_node_id || cardNodeId;
964
969
  const selectionNetworkEvents = networkRecorder.events.slice();
970
+ try {
971
+ preActionState = await readChatConversationReadyState(client);
972
+ } catch (error) {
973
+ preActionState = {
974
+ error: error?.message || String(error)
975
+ };
976
+ }
977
+ const preDetailSkipReason = chatDetailSkipReasonFromReadyState(preActionState);
978
+ if (preDetailSkipReason) {
979
+ detailUnavailableReason = preDetailSkipReason;
980
+ detailResult = createSkippedDetailResult(cardCandidate, preDetailSkipReason);
981
+ detailResult.cv_acquisition.pre_detail_state = preActionState;
982
+ detailResult.cv_acquisition.selection_ready_state = selected.ready;
983
+ }
965
984
  if (!selected.ready?.ok) {
966
- if (selected.ready?.reason === "active_candidate_mismatch") {
985
+ if (detailResult) {
986
+ // Already classified by the pre-detail conversation state.
987
+ } else if (selected.ready?.reason === "active_candidate_mismatch") {
967
988
  detailUnavailableReason = "active_candidate_mismatch";
968
989
  detailResult = createSkippedDetailResult(cardCandidate, detailUnavailableReason);
969
990
  detailResult.cv_acquisition.selection_ready_state = selected.ready;
970
991
  } else {
971
992
  detailStep = "read_conversation_ready_state";
972
- preActionState = await readChatConversationReadyState(client);
973
993
  if (preActionState.attachment_resume_enabled) {
974
994
  detailUnavailableReason = "attachment_resume_already_available";
975
995
  detailResult = createSkippedDetailResult(cardCandidate, "attachment_resume_already_available");
996
+ detailResult.cv_acquisition.pre_detail_state = preActionState;
976
997
  } else {
977
998
  detailUnavailableReason = "online_resume_button_unavailable";
978
999
  detailResult = createSkippedDetailResult(cardCandidate, detailUnavailableReason);
1000
+ detailResult.cv_acquisition.pre_detail_state = preActionState;
979
1001
  }
980
1002
  }
981
1003
  }