@roll-agent/smart-reply-agent 0.1.0 → 0.1.1
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/dist/ai/model-registry.d.ts +0 -1
- package/dist/ai/model-registry.js +1 -205
- package/dist/ai/structured-output.d.ts +0 -1
- package/dist/ai/structured-output.js +1 -78
- package/dist/errors/app-error.d.ts +0 -1
- package/dist/errors/app-error.js +1 -95
- package/dist/errors/error-codes.d.ts +0 -1
- package/dist/errors/error-codes.js +1 -115
- package/dist/errors/error-factory.d.ts +0 -1
- package/dist/errors/error-factory.js +1 -86
- package/dist/errors/error-utils.d.ts +0 -1
- package/dist/errors/error-utils.js +1 -188
- package/dist/errors/index.d.ts +0 -1
- package/dist/errors/index.js +1 -5
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -12
- package/dist/log-control.d.ts +0 -1
- package/dist/log-control.js +1 -15
- package/dist/pipeline/age-eligibility.d.ts +0 -1
- package/dist/pipeline/age-eligibility.js +1 -176
- package/dist/pipeline/candidate-context.d.ts +0 -1
- package/dist/pipeline/candidate-context.js +1 -31
- package/dist/pipeline/candidate-utils.d.ts +0 -1
- package/dist/pipeline/candidate-utils.js +1 -33
- package/dist/pipeline/classification.d.ts +0 -1
- package/dist/pipeline/classification.js +1 -206
- package/dist/pipeline/context-builder.d.ts +0 -1
- package/dist/pipeline/context-builder.js +1 -404
- package/dist/pipeline/pipeline-progress.d.ts +0 -1
- package/dist/pipeline/pipeline-progress.js +1 -33
- package/dist/pipeline/reply-gate.d.ts +0 -1
- package/dist/pipeline/reply-gate.js +1 -139
- package/dist/pipeline/smart-reply.d.ts +0 -1
- package/dist/pipeline/smart-reply.js +1 -418
- package/dist/pipeline.d.ts +0 -1
- package/dist/pipeline.js +1 -12
- package/dist/services/brand-alias.d.ts +0 -1
- package/dist/services/brand-alias.js +1 -184
- package/dist/services/brand-config-selectors.d.ts +0 -1
- package/dist/services/brand-config-selectors.js +1 -30
- package/dist/services/config-loader.d.ts +0 -1
- package/dist/services/config-loader.js +1 -45
- package/dist/services/duliday-api.d.ts +0 -1
- package/dist/services/duliday-api.js +1 -160
- package/dist/services/duliday-mapper.d.ts +0 -1
- package/dist/services/duliday-mapper.js +1 -536
- package/dist/tools/generate-reply.d.ts +0 -1
- package/dist/tools/generate-reply.js +1 -132
- package/dist/tools/sync-brand-data.d.ts +0 -1
- package/dist/tools/sync-brand-data.js +1 -114
- package/dist/types/brand-resolution.d.ts +0 -1
- package/dist/types/brand-resolution.js +1 -37
- package/dist/types/classification.d.ts +0 -1
- package/dist/types/classification.js +1 -30
- package/dist/types/config.d.ts +0 -1
- package/dist/types/config.js +1 -7
- package/dist/types/duliday-api.d.ts +0 -1
- package/dist/types/duliday-api.js +1 -235
- package/dist/types/geocoding.d.ts +0 -1
- package/dist/types/geocoding.js +1 -12
- package/dist/types/reply-policy.d.ts +0 -1
- package/dist/types/reply-policy.js +1 -332
- package/dist/types/zhipin.d.ts +0 -1
- package/dist/types/zhipin.js +1 -123
- package/package.json +3 -3
- package/dist/ai/model-registry.d.ts.map +0 -1
- package/dist/ai/model-registry.js.map +0 -1
- package/dist/ai/structured-output.d.ts.map +0 -1
- package/dist/ai/structured-output.js.map +0 -1
- package/dist/errors/app-error.d.ts.map +0 -1
- package/dist/errors/app-error.js.map +0 -1
- package/dist/errors/error-codes.d.ts.map +0 -1
- package/dist/errors/error-codes.js.map +0 -1
- package/dist/errors/error-factory.d.ts.map +0 -1
- package/dist/errors/error-factory.js.map +0 -1
- package/dist/errors/error-utils.d.ts.map +0 -1
- package/dist/errors/error-utils.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/log-control.d.ts.map +0 -1
- package/dist/log-control.js.map +0 -1
- package/dist/pipeline/age-eligibility.d.ts.map +0 -1
- package/dist/pipeline/age-eligibility.js.map +0 -1
- package/dist/pipeline/candidate-context.d.ts.map +0 -1
- package/dist/pipeline/candidate-context.js.map +0 -1
- package/dist/pipeline/candidate-utils.d.ts.map +0 -1
- package/dist/pipeline/candidate-utils.js.map +0 -1
- package/dist/pipeline/classification.d.ts.map +0 -1
- package/dist/pipeline/classification.js.map +0 -1
- package/dist/pipeline/context-builder.d.ts.map +0 -1
- package/dist/pipeline/context-builder.js.map +0 -1
- package/dist/pipeline/pipeline-progress.d.ts.map +0 -1
- package/dist/pipeline/pipeline-progress.js.map +0 -1
- package/dist/pipeline/reply-gate.d.ts.map +0 -1
- package/dist/pipeline/reply-gate.js.map +0 -1
- package/dist/pipeline/smart-reply.d.ts.map +0 -1
- package/dist/pipeline/smart-reply.js.map +0 -1
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/pipeline.js.map +0 -1
- package/dist/services/brand-alias.d.ts.map +0 -1
- package/dist/services/brand-alias.js.map +0 -1
- package/dist/services/brand-config-selectors.d.ts.map +0 -1
- package/dist/services/brand-config-selectors.js.map +0 -1
- package/dist/services/config-loader.d.ts.map +0 -1
- package/dist/services/config-loader.js.map +0 -1
- package/dist/services/duliday-api.d.ts.map +0 -1
- package/dist/services/duliday-api.js.map +0 -1
- package/dist/services/duliday-mapper.d.ts.map +0 -1
- package/dist/services/duliday-mapper.js.map +0 -1
- package/dist/tools/generate-reply.d.ts.map +0 -1
- package/dist/tools/generate-reply.js.map +0 -1
- package/dist/tools/sync-brand-data.d.ts.map +0 -1
- package/dist/tools/sync-brand-data.js.map +0 -1
- package/dist/types/brand-resolution.d.ts.map +0 -1
- package/dist/types/brand-resolution.js.map +0 -1
- package/dist/types/classification.d.ts.map +0 -1
- package/dist/types/classification.js.map +0 -1
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js.map +0 -1
- package/dist/types/duliday-api.d.ts.map +0 -1
- package/dist/types/duliday-api.js.map +0 -1
- package/dist/types/geocoding.d.ts.map +0 -1
- package/dist/types/geocoding.js.map +0 -1
- package/dist/types/reply-policy.d.ts.map +0 -1
- package/dist/types/reply-policy.js.map +0 -1
- package/dist/types/zhipin.d.ts.map +0 -1
- package/dist/types/zhipin.js.map +0 -1
|
@@ -1,132 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import { CandidateInfoSchema } from "../types/zhipin.js";
|
|
4
|
-
import { loadBrandConfig, loadReplyPolicy } from "../services/config-loader.js";
|
|
5
|
-
import { generateSmartReply } from "../pipeline/smart-reply.js";
|
|
6
|
-
import { AGE_ELIGIBILITY_STATUSES } from "../pipeline/age-eligibility.js";
|
|
7
|
-
import { ChannelTypeSchema, EffectiveDisclosureModeSchema, FunnelStageSchema, ReplyNeedSchema, RiskFlagSchema, } from "../types/reply-policy.js";
|
|
8
|
-
import { REPLY_GATE_VIOLATION_CODES } from "../pipeline/reply-gate.js";
|
|
9
|
-
import { ModelConfigSchema } from "../types/classification.js";
|
|
10
|
-
const ReplyGateViolationCodeSchema = z.enum(REPLY_GATE_VIOLATION_CODES);
|
|
11
|
-
const AgeEligibilityStatusSchema = z.enum(AGE_ELIGIBILITY_STATUSES);
|
|
12
|
-
export const generateReply = defineTool({
|
|
13
|
-
name: "generate_reply",
|
|
14
|
-
description: "根据候选人消息、对话历史和品牌数据生成智能招聘回复。内部流程:回合规划 → primaryNeed 驱动上下文构建 → 年龄资格校验 → 策略化回复生成 → FactGate/ReplyGate 校验。",
|
|
15
|
-
input: z.object({
|
|
16
|
-
candidateMessage: z.string().describe("候选人发送的消息"),
|
|
17
|
-
conversationHistory: z.array(z.string()).optional().describe("对话历史(最近几轮)"),
|
|
18
|
-
candidateInfo: CandidateInfoSchema.optional().describe("候选人基本信息"),
|
|
19
|
-
preferredBrand: z.string().optional().describe("偏好品牌"),
|
|
20
|
-
channelType: ChannelTypeSchema.optional().describe("渠道类型: public(BOSS直聘) 或 private(微信)"),
|
|
21
|
-
defaultWechatId: z.string().optional().describe("默认微信号"),
|
|
22
|
-
industryVoiceId: z.string().optional().describe("行业语调ID"),
|
|
23
|
-
turnIndex: z.number().int().min(1).optional().describe("当前会话回复轮次"),
|
|
24
|
-
modelConfig: ModelConfigSchema.optional().describe("模型配置覆盖"),
|
|
25
|
-
}),
|
|
26
|
-
output: z.object({
|
|
27
|
-
suggestedReply: z.string(),
|
|
28
|
-
confidence: z.number(),
|
|
29
|
-
stage: FunnelStageSchema,
|
|
30
|
-
latencyMs: z.number().optional(),
|
|
31
|
-
shouldExchangeWechat: z.boolean().optional(),
|
|
32
|
-
error: z.string().optional(),
|
|
33
|
-
diagnostics: z
|
|
34
|
-
.object({
|
|
35
|
-
subGoals: z.array(z.string()),
|
|
36
|
-
needs: z.array(ReplyNeedSchema),
|
|
37
|
-
primaryNeed: ReplyNeedSchema,
|
|
38
|
-
riskFlags: z.array(RiskFlagSchema),
|
|
39
|
-
reasoningText: z.string(),
|
|
40
|
-
extractedInfo: z.object({
|
|
41
|
-
mentionedBrand: z.string().nullable(),
|
|
42
|
-
city: z.string().nullable(),
|
|
43
|
-
specificAge: z.number().nullable(),
|
|
44
|
-
hasUrgency: z.boolean().nullable(),
|
|
45
|
-
preferredSchedule: z.string().nullable(),
|
|
46
|
-
}),
|
|
47
|
-
ageGate: z.object({
|
|
48
|
-
enabled: z.boolean(),
|
|
49
|
-
status: AgeEligibilityStatusSchema,
|
|
50
|
-
strategy: z.string(),
|
|
51
|
-
}),
|
|
52
|
-
resolvedBrand: z.string(),
|
|
53
|
-
storeCount: z.number(),
|
|
54
|
-
detailLevel: EffectiveDisclosureModeSchema,
|
|
55
|
-
turnIndex: z.number(),
|
|
56
|
-
effectiveDisclosureMode: EffectiveDisclosureModeSchema,
|
|
57
|
-
replyGateRewritten: z.boolean(),
|
|
58
|
-
gateViolations: z.array(ReplyGateViolationCodeSchema),
|
|
59
|
-
factGateRewritten: z.boolean(),
|
|
60
|
-
})
|
|
61
|
-
.optional(),
|
|
62
|
-
}),
|
|
63
|
-
execute: async (input, ctx) => {
|
|
64
|
-
ctx.logger.info(`Processing message: ${input.candidateMessage.slice(0, 50)}...`);
|
|
65
|
-
let configData;
|
|
66
|
-
try {
|
|
67
|
-
configData = loadBrandConfig();
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
return {
|
|
71
|
-
suggestedReply: "",
|
|
72
|
-
confidence: 0,
|
|
73
|
-
stage: "trust_building",
|
|
74
|
-
error: "品牌数据未配置,请先调用 sync_brand_data 写入数据",
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
const replyPolicy = loadReplyPolicy();
|
|
78
|
-
const result = await generateSmartReply({
|
|
79
|
-
candidateMessage: input.candidateMessage,
|
|
80
|
-
conversationHistory: input.conversationHistory,
|
|
81
|
-
candidateInfo: input.candidateInfo,
|
|
82
|
-
preferredBrand: input.preferredBrand,
|
|
83
|
-
channelType: input.channelType,
|
|
84
|
-
defaultWechatId: input.defaultWechatId,
|
|
85
|
-
industryVoiceId: input.industryVoiceId,
|
|
86
|
-
turnIndex: input.turnIndex,
|
|
87
|
-
modelConfig: input.modelConfig,
|
|
88
|
-
configData,
|
|
89
|
-
replyPolicy,
|
|
90
|
-
});
|
|
91
|
-
ctx.logger.info(`Reply generated. Stage: ${result.turnPlan.stage}, Confidence: ${result.confidence}`);
|
|
92
|
-
const debug = result.debugInfo;
|
|
93
|
-
return {
|
|
94
|
-
suggestedReply: result.suggestedReply,
|
|
95
|
-
confidence: result.confidence,
|
|
96
|
-
stage: result.turnPlan.stage,
|
|
97
|
-
latencyMs: result.latencyMs,
|
|
98
|
-
shouldExchangeWechat: result.shouldExchangeWechat,
|
|
99
|
-
error: result.error?.userMessage,
|
|
100
|
-
diagnostics: debug
|
|
101
|
-
? {
|
|
102
|
-
subGoals: result.turnPlan.subGoals,
|
|
103
|
-
needs: result.turnPlan.needs,
|
|
104
|
-
primaryNeed: result.turnPlan.primaryNeed,
|
|
105
|
-
riskFlags: result.turnPlan.riskFlags,
|
|
106
|
-
reasoningText: result.turnPlan.reasoningText,
|
|
107
|
-
extractedInfo: {
|
|
108
|
-
mentionedBrand: result.turnPlan.extractedInfo.mentionedBrand ?? null,
|
|
109
|
-
city: result.turnPlan.extractedInfo.city ?? null,
|
|
110
|
-
specificAge: result.turnPlan.extractedInfo.specificAge ?? null,
|
|
111
|
-
hasUrgency: result.turnPlan.extractedInfo.hasUrgency ?? null,
|
|
112
|
-
preferredSchedule: result.turnPlan.extractedInfo.preferredSchedule ?? null,
|
|
113
|
-
},
|
|
114
|
-
ageGate: {
|
|
115
|
-
enabled: debug.appliedStrategy.enabled,
|
|
116
|
-
status: debug.gateStatus,
|
|
117
|
-
strategy: debug.appliedStrategy.strategy,
|
|
118
|
-
},
|
|
119
|
-
resolvedBrand: debug.resolvedBrand,
|
|
120
|
-
storeCount: debug.storeCount,
|
|
121
|
-
detailLevel: debug.detailLevel,
|
|
122
|
-
turnIndex: debug.turnIndex,
|
|
123
|
-
effectiveDisclosureMode: debug.effectiveDisclosureMode,
|
|
124
|
-
replyGateRewritten: result.replyGateRewritten,
|
|
125
|
-
gateViolations: result.gateViolations,
|
|
126
|
-
factGateRewritten: result.factGateRewritten,
|
|
127
|
-
}
|
|
128
|
-
: undefined,
|
|
129
|
-
};
|
|
130
|
-
},
|
|
131
|
-
});
|
|
132
|
-
//# sourceMappingURL=generate-reply.js.map
|
|
1
|
+
import{defineTool as e}from"@roll-agent/sdk";import{z as t}from"zod";import{CandidateInfoSchema as n}from"../types/zhipin.js";import{loadBrandConfig as r,loadReplyPolicy as a}from"../services/config-loader.js";import{generateSmartReply as i}from"../pipeline/smart-reply.js";import{AGE_ELIGIBILITY_STATUSES as o}from"../pipeline/age-eligibility.js";import{ChannelTypeSchema as s,EffectiveDisclosureModeSchema as l,FunnelStageSchema as d,ReplyNeedSchema as c,RiskFlagSchema as g}from"../types/reply-policy.js";import{REPLY_GATE_VIOLATION_CODES as u}from"../pipeline/reply-gate.js";import{ModelConfigSchema as p}from"../types/classification.js";const y=t.enum(u),f=t.enum(o);export const generateReply=e({name:"generate_reply",description:"根据候选人消息、对话历史和品牌数据生成智能招聘回复。内部流程:回合规划 → primaryNeed 驱动上下文构建 → 年龄资格校验 → 策略化回复生成 → FactGate/ReplyGate 校验。",input:t.object({candidateMessage:t.string().describe("候选人发送的消息"),conversationHistory:t.array(t.string()).optional().describe("对话历史(最近几轮)"),candidateInfo:n.optional().describe("候选人基本信息"),preferredBrand:t.string().optional().describe("偏好品牌"),channelType:s.optional().describe("渠道类型: public(BOSS直聘) 或 private(微信)"),defaultWechatId:t.string().optional().describe("默认微信号"),industryVoiceId:t.string().optional().describe("行业语调ID"),turnIndex:t.number().int().min(1).optional().describe("当前会话回复轮次"),modelConfig:p.optional().describe("模型配置覆盖")}),output:t.object({suggestedReply:t.string(),confidence:t.number(),stage:d,latencyMs:t.number().optional(),shouldExchangeWechat:t.boolean().optional(),error:t.string().optional(),diagnostics:t.object({subGoals:t.array(t.string()),needs:t.array(c),primaryNeed:c,riskFlags:t.array(g),reasoningText:t.string(),extractedInfo:t.object({mentionedBrand:t.string().nullable(),city:t.string().nullable(),specificAge:t.number().nullable(),hasUrgency:t.boolean().nullable(),preferredSchedule:t.string().nullable()}),ageGate:t.object({enabled:t.boolean(),status:f,strategy:t.string()}),resolvedBrand:t.string(),storeCount:t.number(),detailLevel:l,turnIndex:t.number(),effectiveDisclosureMode:l,replyGateRewritten:t.boolean(),gateViolations:t.array(y),factGateRewritten:t.boolean()}).optional()}),execute:async(e,t)=>{let n;t.logger.info(`Processing message: ${e.candidateMessage.slice(0,50)}...`);try{n=r()}catch{return{suggestedReply:"",confidence:0,stage:"trust_building",error:"品牌数据未配置,请先调用 sync_brand_data 写入数据"}}const o=a(),s=await i({candidateMessage:e.candidateMessage,conversationHistory:e.conversationHistory,candidateInfo:e.candidateInfo,preferredBrand:e.preferredBrand,channelType:e.channelType,defaultWechatId:e.defaultWechatId,industryVoiceId:e.industryVoiceId,turnIndex:e.turnIndex,modelConfig:e.modelConfig,configData:n,replyPolicy:o});t.logger.info(`Reply generated. Stage: ${s.turnPlan.stage}, Confidence: ${s.confidence}`);const l=s.debugInfo;return{suggestedReply:s.suggestedReply,confidence:s.confidence,stage:s.turnPlan.stage,latencyMs:s.latencyMs,shouldExchangeWechat:s.shouldExchangeWechat,error:s.error?.userMessage,diagnostics:l?{subGoals:s.turnPlan.subGoals,needs:s.turnPlan.needs,primaryNeed:s.turnPlan.primaryNeed,riskFlags:s.turnPlan.riskFlags,reasoningText:s.turnPlan.reasoningText,extractedInfo:{mentionedBrand:s.turnPlan.extractedInfo.mentionedBrand??null,city:s.turnPlan.extractedInfo.city??null,specificAge:s.turnPlan.extractedInfo.specificAge??null,hasUrgency:s.turnPlan.extractedInfo.hasUrgency??null,preferredSchedule:s.turnPlan.extractedInfo.preferredSchedule??null},ageGate:{enabled:l.appliedStrategy.enabled,status:l.gateStatus,strategy:l.appliedStrategy.strategy},resolvedBrand:l.resolvedBrand,storeCount:l.storeCount,detailLevel:l.detailLevel,turnIndex:l.turnIndex,effectiveDisclosureMode:l.effectiveDisclosureMode,replyGateRewritten:s.replyGateRewritten,gateViolations:s.gateViolations,factGateRewritten:s.factGateRewritten}:void 0}}});
|
|
@@ -1,114 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import { getDulidayToken, getDulidayJobListEndpoint, fetchAllJobListPages, FULL_INCLUDE_OPTIONS, } from "../services/duliday-api.js";
|
|
4
|
-
import { getSharedBrandAliasMap } from "../services/brand-alias.js";
|
|
5
|
-
import { convertPositionsToZhipinData } from "../services/duliday-mapper.js";
|
|
6
|
-
import { saveBrandConfig } from "../services/config-loader.js";
|
|
7
|
-
export const syncBrandData = defineTool({
|
|
8
|
-
name: "sync_brand_data",
|
|
9
|
-
description: "从 Duliday API 拉取并同步品牌配置数据(门店、岗位、薪资等)到本地。可选传入品牌别名和城市名称作为过滤条件。",
|
|
10
|
-
input: z.object({
|
|
11
|
-
brandAlias: z.string().optional().describe("品牌别名(可选,配合 cityName 使用可按品牌过滤)"),
|
|
12
|
-
cityName: z
|
|
13
|
-
.string()
|
|
14
|
-
.describe('城市名称(必填,Duliday API 要求至少提供城市作为筛选条件,如 "上海市")'),
|
|
15
|
-
}),
|
|
16
|
-
output: z.object({
|
|
17
|
-
success: z.boolean(),
|
|
18
|
-
brandsCount: z.number(),
|
|
19
|
-
storesCount: z.number(),
|
|
20
|
-
positionsCount: z.number(),
|
|
21
|
-
updatedAt: z.string(),
|
|
22
|
-
error: z.string().optional(),
|
|
23
|
-
}),
|
|
24
|
-
execute: async (input, ctx) => {
|
|
25
|
-
const token = getDulidayToken();
|
|
26
|
-
const endpoint = getDulidayJobListEndpoint();
|
|
27
|
-
if (!token || !endpoint) {
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
brandsCount: 0,
|
|
31
|
-
storesCount: 0,
|
|
32
|
-
positionsCount: 0,
|
|
33
|
-
updatedAt: new Date().toISOString(),
|
|
34
|
-
error: `缺少环境变量: ${[!token && "DULIDAY_TOKEN", !endpoint && "DULIDAY_JOB_LIST_URL"].filter(Boolean).join(", ")}`,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
if (!input.cityName) {
|
|
38
|
-
return {
|
|
39
|
-
success: false,
|
|
40
|
-
brandsCount: 0,
|
|
41
|
-
storesCount: 0,
|
|
42
|
-
positionsCount: 0,
|
|
43
|
-
updatedAt: new Date().toISOString(),
|
|
44
|
-
error: 'cityName 为必填项,Duliday API 要求至少提供城市作为筛选条件(如 "上海市")',
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
ctx.logger.info("Fetching all job list pages from Duliday API...");
|
|
49
|
-
const { items } = await fetchAllJobListPages(token, endpoint, {
|
|
50
|
-
brandAlias: input.brandAlias ?? null,
|
|
51
|
-
cityName: input.cityName ?? null,
|
|
52
|
-
include: FULL_INCLUDE_OPTIONS,
|
|
53
|
-
});
|
|
54
|
-
let preferredDefaultBrandName = resolveFirstBrandName(items);
|
|
55
|
-
if (!preferredDefaultBrandName && input.brandAlias) {
|
|
56
|
-
preferredDefaultBrandName = await reverseLookupBrand(input.brandAlias, token);
|
|
57
|
-
}
|
|
58
|
-
if (!preferredDefaultBrandName && input.brandAlias) {
|
|
59
|
-
preferredDefaultBrandName = input.brandAlias;
|
|
60
|
-
}
|
|
61
|
-
ctx.logger.info(`Resolved default brand: ${preferredDefaultBrandName ?? "自动推断"}, converting ${items.length} positions...`);
|
|
62
|
-
const zhipinData = convertPositionsToZhipinData(items, preferredDefaultBrandName, input.cityName);
|
|
63
|
-
saveBrandConfig(zhipinData);
|
|
64
|
-
ctx.logger.info(`Brand config saved: ${zhipinData.brands.length} brands, ${zhipinData.brands.reduce((sum, brand) => sum + brand.stores.length, 0)} stores`);
|
|
65
|
-
const storesCount = zhipinData.brands.reduce((sum, brand) => sum + brand.stores.length, 0);
|
|
66
|
-
const positionsCount = zhipinData.brands.reduce((sum, brand) => sum + brand.stores.reduce((inner, store) => inner + store.positions.length, 0), 0);
|
|
67
|
-
return {
|
|
68
|
-
success: true,
|
|
69
|
-
brandsCount: zhipinData.brands.length,
|
|
70
|
-
storesCount,
|
|
71
|
-
positionsCount,
|
|
72
|
-
updatedAt: new Date().toISOString(),
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
catch (err) {
|
|
76
|
-
return {
|
|
77
|
-
success: false,
|
|
78
|
-
brandsCount: 0,
|
|
79
|
-
storesCount: 0,
|
|
80
|
-
positionsCount: 0,
|
|
81
|
-
updatedAt: new Date().toISOString(),
|
|
82
|
-
error: err instanceof Error ? err.message : String(err),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
function isRecord(value) {
|
|
88
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
89
|
-
}
|
|
90
|
-
function resolveFirstBrandName(items) {
|
|
91
|
-
for (const item of items) {
|
|
92
|
-
if (!isRecord(item))
|
|
93
|
-
continue;
|
|
94
|
-
const basicInfo = isRecord(item.basicInfo) ? item.basicInfo : null;
|
|
95
|
-
if (basicInfo && typeof basicInfo.brandName === "string" && basicInfo.brandName) {
|
|
96
|
-
return basicInfo.brandName;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return undefined;
|
|
100
|
-
}
|
|
101
|
-
async function reverseLookupBrand(alias, dulidayToken) {
|
|
102
|
-
try {
|
|
103
|
-
const aliasMap = await getSharedBrandAliasMap(dulidayToken);
|
|
104
|
-
const key = alias
|
|
105
|
-
.trim()
|
|
106
|
-
.toLowerCase()
|
|
107
|
-
.replace(/[\s._-]+/g, "");
|
|
108
|
-
return aliasMap.get(key);
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
return undefined;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
//# sourceMappingURL=sync-brand-data.js.map
|
|
1
|
+
import{defineTool as t}from"@roll-agent/sdk";import{z as n}from"zod";import{getDulidayToken as r,getDulidayJobListEndpoint as e,fetchAllJobListPages as s,FULL_INCLUDE_OPTIONS as o}from"../services/duliday-api.js";import{getSharedBrandAliasMap as a}from"../services/brand-alias.js";import{convertPositionsToZhipinData as i}from"../services/duliday-mapper.js";import{saveBrandConfig as c}from"../services/config-loader.js";export const syncBrandData=t({name:"sync_brand_data",description:"从 Duliday API 拉取并同步品牌配置数据(门店、岗位、薪资等)到本地。可选传入品牌别名和城市名称作为过滤条件。",input:n.object({brandAlias:n.string().optional().describe("品牌别名(可选,配合 cityName 使用可按品牌过滤)"),cityName:n.string().describe('城市名称(必填,Duliday API 要求至少提供城市作为筛选条件,如 "上海市")')}),output:n.object({success:n.boolean(),brandsCount:n.number(),storesCount:n.number(),positionsCount:n.number(),updatedAt:n.string(),error:n.string().optional()}),execute:async(t,n)=>{const a=r(),u=e();if(!a||!u)return{success:!1,brandsCount:0,storesCount:0,positionsCount:0,updatedAt:(new Date).toISOString(),error:`缺少环境变量: ${[!a&&"DULIDAY_TOKEN",!u&&"DULIDAY_JOB_LIST_URL"].filter(Boolean).join(", ")}`};if(!t.cityName)return{success:!1,brandsCount:0,storesCount:0,positionsCount:0,updatedAt:(new Date).toISOString(),error:'cityName 为必填项,Duliday API 要求至少提供城市作为筛选条件(如 "上海市")'};try{n.logger.info("Fetching all job list pages from Duliday API...");const{items:r}=await s(a,u,{brandAlias:t.brandAlias??null,cityName:t.cityName??null,include:o});let e=d(r);!e&&t.brandAlias&&(e=await l(t.brandAlias,a)),!e&&t.brandAlias&&(e=t.brandAlias),n.logger.info(`Resolved default brand: ${e??"自动推断"}, converting ${r.length} positions...`);const b=i(r,e,t.cityName);c(b),n.logger.info(`Brand config saved: ${b.brands.length} brands, ${b.brands.reduce((t,n)=>t+n.stores.length,0)} stores`);const g=b.brands.reduce((t,n)=>t+n.stores.length,0),m=b.brands.reduce((t,n)=>t+n.stores.reduce((t,n)=>t+n.positions.length,0),0);return{success:!0,brandsCount:b.brands.length,storesCount:g,positionsCount:m,updatedAt:(new Date).toISOString()}}catch(t){return{success:!1,brandsCount:0,storesCount:0,positionsCount:0,updatedAt:(new Date).toISOString(),error:t instanceof Error?t.message:String(t)}}}});function u(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function d(t){for(const n of t){if(!u(n))continue;const t=u(n.basicInfo)?n.basicInfo:null;if(t&&"string"==typeof t.brandName&&t.brandName)return t.brandName}}async function l(t,n){try{const r=await a(n),e=t.trim().toLowerCase().replace(/[\s._-]+/g,"");return r.get(e)}catch{return}}
|
|
@@ -1,37 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BrandPriorityStrategySchema } from "./config.js";
|
|
3
|
-
export const BrandResolutionInputSchema = z.object({
|
|
4
|
-
uiSelectedBrand: z.string().optional(),
|
|
5
|
-
configDefaultBrand: z.string().optional(),
|
|
6
|
-
conversationBrand: z.string().optional(),
|
|
7
|
-
availableBrands: z.array(z.string()),
|
|
8
|
-
strategy: BrandPriorityStrategySchema,
|
|
9
|
-
});
|
|
10
|
-
export const BrandMatchTypeSchema = z.enum(["exact", "fuzzy", "fallback"]);
|
|
11
|
-
export const BrandSourceSchema = z.enum(["ui", "conversation", "config", "default"]);
|
|
12
|
-
export const BrandResolutionOutputSchema = z.object({
|
|
13
|
-
resolvedBrand: z.string(),
|
|
14
|
-
matchType: BrandMatchTypeSchema,
|
|
15
|
-
source: BrandSourceSchema,
|
|
16
|
-
reason: z.string(),
|
|
17
|
-
originalInput: z.string().optional(),
|
|
18
|
-
});
|
|
19
|
-
export const FuzzyMatchResultSchema = z.object({
|
|
20
|
-
brand: z.string(),
|
|
21
|
-
isExact: z.boolean(),
|
|
22
|
-
originalInput: z.string(),
|
|
23
|
-
});
|
|
24
|
-
export const BRAND_RESOLUTION_PRIORITY = {
|
|
25
|
-
"user-selected": ["uiSelectedBrand", "configDefaultBrand", "firstAvailable"],
|
|
26
|
-
"conversation-extracted": [
|
|
27
|
-
"conversationBrand",
|
|
28
|
-
"uiSelectedBrand",
|
|
29
|
-
"configDefaultBrand",
|
|
30
|
-
"firstAvailable",
|
|
31
|
-
],
|
|
32
|
-
smart: ["conversationBrand", "uiSelectedBrand", "configDefaultBrand", "firstAvailable"],
|
|
33
|
-
};
|
|
34
|
-
export function isBrandPriorityStrategy(value) {
|
|
35
|
-
return BrandPriorityStrategySchema.safeParse(value).success;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=brand-resolution.js.map
|
|
1
|
+
import{z as t}from"zod";import{BrandPriorityStrategySchema as a}from"./config.js";export const BrandResolutionInputSchema=t.object({uiSelectedBrand:t.string().optional(),configDefaultBrand:t.string().optional(),conversationBrand:t.string().optional(),availableBrands:t.array(t.string()),strategy:a});export const BrandMatchTypeSchema=t.enum(["exact","fuzzy","fallback"]);export const BrandSourceSchema=t.enum(["ui","conversation","config","default"]);export const BrandResolutionOutputSchema=t.object({resolvedBrand:t.string(),matchType:BrandMatchTypeSchema,source:BrandSourceSchema,reason:t.string(),originalInput:t.string().optional()});export const FuzzyMatchResultSchema=t.object({brand:t.string(),isExact:t.boolean(),originalInput:t.string()});export const BRAND_RESOLUTION_PRIORITY={"user-selected":["uiSelectedBrand","configDefaultBrand","firstAvailable"],"conversation-extracted":["conversationBrand","uiSelectedBrand","configDefaultBrand","firstAvailable"],smart:["conversationBrand","uiSelectedBrand","configDefaultBrand","firstAvailable"]};export function isBrandPriorityStrategy(t){return a.safeParse(t).success}
|
|
@@ -179,4 +179,3 @@ export type ModelConfig = z.infer<typeof ModelConfigSchema>;
|
|
|
179
179
|
export type ProviderConfigs = z.infer<typeof ProviderConfigsSchema>;
|
|
180
180
|
export type BrandData = z.infer<typeof BrandDataSchema>;
|
|
181
181
|
export type ClassificationOptions = z.infer<typeof ClassificationOptionsSchema>;
|
|
182
|
-
//# sourceMappingURL=classification.d.ts.map
|
|
@@ -1,30 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ChannelTypeSchema } from "./reply-policy.js";
|
|
3
|
-
// ========== Provider / Model Config Schemas ==========
|
|
4
|
-
export const ProviderConfigSchema = z.object({
|
|
5
|
-
name: z.string(),
|
|
6
|
-
baseURL: z.string(),
|
|
7
|
-
description: z.string(),
|
|
8
|
-
});
|
|
9
|
-
export const ProviderConfigsSchema = z.record(z.string(), ProviderConfigSchema);
|
|
10
|
-
export const ModelConfigSchema = z.object({
|
|
11
|
-
chatModel: z.string().optional(),
|
|
12
|
-
classifyModel: z.string().optional(),
|
|
13
|
-
replyModel: z.string().optional(),
|
|
14
|
-
providerConfigs: ProviderConfigsSchema.optional(),
|
|
15
|
-
});
|
|
16
|
-
// ========== Classification Agent Schema ==========
|
|
17
|
-
export const BrandDataSchema = z.object({
|
|
18
|
-
city: z.string().optional(),
|
|
19
|
-
defaultBrand: z.string(),
|
|
20
|
-
availableBrands: z.array(z.string()),
|
|
21
|
-
storeCount: z.number(),
|
|
22
|
-
});
|
|
23
|
-
export const ClassificationOptionsSchema = z.object({
|
|
24
|
-
modelConfig: ModelConfigSchema,
|
|
25
|
-
candidateMessage: z.string(),
|
|
26
|
-
conversationHistory: z.array(z.string()).default([]),
|
|
27
|
-
brandData: BrandDataSchema.optional(),
|
|
28
|
-
channelType: ChannelTypeSchema.optional(),
|
|
29
|
-
});
|
|
30
|
-
//# sourceMappingURL=classification.js.map
|
|
1
|
+
import{z as o}from"zod";import{ChannelTypeSchema as t}from"./reply-policy.js";export const ProviderConfigSchema=o.object({name:o.string(),baseURL:o.string(),description:o.string()});export const ProviderConfigsSchema=o.record(o.string(),ProviderConfigSchema);export const ModelConfigSchema=o.object({chatModel:o.string().optional(),classifyModel:o.string().optional(),replyModel:o.string().optional(),providerConfigs:ProviderConfigsSchema.optional()});export const BrandDataSchema=o.object({city:o.string().optional(),defaultBrand:o.string(),availableBrands:o.array(o.string()),storeCount:o.number()});export const ClassificationOptionsSchema=o.object({modelConfig:ModelConfigSchema,candidateMessage:o.string(),conversationHistory:o.array(o.string()).default([]),brandData:BrandDataSchema.optional(),channelType:t.optional()});
|
package/dist/types/config.d.ts
CHANGED
package/dist/types/config.js
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export const BrandPriorityStrategySchema = z.enum([
|
|
3
|
-
"user-selected",
|
|
4
|
-
"conversation-extracted",
|
|
5
|
-
"smart",
|
|
6
|
-
]);
|
|
7
|
-
//# sourceMappingURL=config.js.map
|
|
1
|
+
import{z as e}from"zod";export const BrandPriorityStrategySchema=e.enum(["user-selected","conversation-extracted","smart"]);
|
|
@@ -6726,4 +6726,3 @@ export type DulidayCertificate = z.infer<typeof DulidayCertificateSchema>;
|
|
|
6726
6726
|
export type DulidayHiringRequirement = z.infer<typeof DulidayHiringRequirementSchema>;
|
|
6727
6727
|
export type DulidayNewWorkTime = z.infer<typeof DulidayNewWorkTimeSchema>;
|
|
6728
6728
|
export type DulidayNewPosition = z.infer<typeof DulidayNewPositionSchema>;
|
|
6729
|
-
//# sourceMappingURL=duliday-api.d.ts.map
|
|
@@ -1,235 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
// ========== Duliday 新 API 响应 Zod Schema ==========
|
|
3
|
-
export const DulidayMoreWelfareItemSchema = z
|
|
4
|
-
.object({
|
|
5
|
-
content: z.string(),
|
|
6
|
-
image: z.string().nullable().optional(),
|
|
7
|
-
})
|
|
8
|
-
.passthrough();
|
|
9
|
-
export const DulidayStoreInfoSchema = z
|
|
10
|
-
.object({
|
|
11
|
-
storeId: z.number().optional(),
|
|
12
|
-
storeName: z.string(),
|
|
13
|
-
storeCityName: z.string().optional(),
|
|
14
|
-
storeRegionName: z.string().optional(),
|
|
15
|
-
storeAddress: z.string().optional(),
|
|
16
|
-
longitude: z.number().optional(),
|
|
17
|
-
latitude: z.number().optional(),
|
|
18
|
-
})
|
|
19
|
-
.passthrough();
|
|
20
|
-
export const DulidayBasicInfoSchema = z
|
|
21
|
-
.object({
|
|
22
|
-
jobId: z.number(),
|
|
23
|
-
jobName: z.string(),
|
|
24
|
-
jobContent: z.string().nullable().optional(),
|
|
25
|
-
brandId: z.number().optional(),
|
|
26
|
-
brandName: z.string().optional(),
|
|
27
|
-
projectId: z.number().optional(),
|
|
28
|
-
projectName: z.string().optional(),
|
|
29
|
-
storeInfo: DulidayStoreInfoSchema.optional(),
|
|
30
|
-
})
|
|
31
|
-
.passthrough();
|
|
32
|
-
export const DulidaySalaryScenarioSchema = z
|
|
33
|
-
.object({
|
|
34
|
-
salaryType: z.string().nullable().optional(),
|
|
35
|
-
salaryPeriod: z.string().nullable().optional(),
|
|
36
|
-
hasStairSalary: z.string().nullable().optional(),
|
|
37
|
-
basicSalary: z
|
|
38
|
-
.object({
|
|
39
|
-
basicSalary: z.number().nullable().optional(),
|
|
40
|
-
basicSalaryUnit: z.string().nullable().optional(),
|
|
41
|
-
})
|
|
42
|
-
.passthrough()
|
|
43
|
-
.nullable()
|
|
44
|
-
.optional(),
|
|
45
|
-
stairSalaries: z
|
|
46
|
-
.array(z
|
|
47
|
-
.object({
|
|
48
|
-
fullWorkTime: z.number().nullable().optional(),
|
|
49
|
-
fullWorkTimeUnit: z.string().nullable().optional(),
|
|
50
|
-
salary: z.number().nullable().optional(),
|
|
51
|
-
salaryUnit: z.string().nullable().optional(),
|
|
52
|
-
})
|
|
53
|
-
.passthrough())
|
|
54
|
-
.nullable()
|
|
55
|
-
.optional(),
|
|
56
|
-
comprehensiveSalary: z
|
|
57
|
-
.object({
|
|
58
|
-
minComprehensiveSalary: z.number().nullable().optional(),
|
|
59
|
-
maxComprehensiveSalary: z.number().nullable().optional(),
|
|
60
|
-
comprehensiveSalaryUnit: z.string().nullable().optional(),
|
|
61
|
-
})
|
|
62
|
-
.passthrough()
|
|
63
|
-
.nullable()
|
|
64
|
-
.optional(),
|
|
65
|
-
holidaySalary: z
|
|
66
|
-
.object({
|
|
67
|
-
holidaySalaryType: z.string().nullable().optional(),
|
|
68
|
-
holidaySalaryMultiple: z.number().nullable().optional(),
|
|
69
|
-
holidayFixedSalary: z.number().nullable().optional(),
|
|
70
|
-
holidayFixedSalaryUnit: z.string().nullable().optional(),
|
|
71
|
-
})
|
|
72
|
-
.passthrough()
|
|
73
|
-
.nullable()
|
|
74
|
-
.optional(),
|
|
75
|
-
})
|
|
76
|
-
.passthrough();
|
|
77
|
-
export const DulidayJobSalarySchema = z
|
|
78
|
-
.object({
|
|
79
|
-
salary: z.number().optional(),
|
|
80
|
-
salaryUnitStr: z.string().optional(),
|
|
81
|
-
salaryScenarioList: z.array(DulidaySalaryScenarioSchema).nullable().optional(),
|
|
82
|
-
})
|
|
83
|
-
.passthrough();
|
|
84
|
-
export const DulidayNewWelfareSchema = z
|
|
85
|
-
.object({
|
|
86
|
-
haveInsurance: z.string(),
|
|
87
|
-
accommodation: z.string(),
|
|
88
|
-
catering: z.string().optional(),
|
|
89
|
-
otherWelfare: z.array(z.string()).nullable().optional(),
|
|
90
|
-
accommodationAllowance: z.number().nullable().optional(),
|
|
91
|
-
accommodationAllowanceUnit: z.string().nullable().optional(),
|
|
92
|
-
cateringSalary: z.number().nullable().optional(),
|
|
93
|
-
cateringSalaryUnit: z.string().nullable().optional(),
|
|
94
|
-
trafficAllowanceSalary: z.number().nullable().optional(),
|
|
95
|
-
trafficAllowanceSalaryUnit: z.string().nullable().optional(),
|
|
96
|
-
memo: z.string().nullable().optional(),
|
|
97
|
-
promotionWelfare: z.string().nullable().optional(),
|
|
98
|
-
moreWelfares: z.array(DulidayMoreWelfareItemSchema).nullable().optional(),
|
|
99
|
-
})
|
|
100
|
-
.passthrough();
|
|
101
|
-
export const DulidayBasicPersonalRequirementsSchema = z
|
|
102
|
-
.object({
|
|
103
|
-
minAge: z.number().nullable().optional(),
|
|
104
|
-
maxAge: z.number().nullable().optional(),
|
|
105
|
-
genderRequirement: z.string().nullable().optional(),
|
|
106
|
-
})
|
|
107
|
-
.passthrough();
|
|
108
|
-
export const DulidayCertificateSchema = z
|
|
109
|
-
.object({
|
|
110
|
-
education: z.string().nullable().optional(),
|
|
111
|
-
healthCertificate: z.string().nullable().optional(),
|
|
112
|
-
})
|
|
113
|
-
.passthrough();
|
|
114
|
-
export const DulidayHiringRequirementSchema = z
|
|
115
|
-
.object({
|
|
116
|
-
cooperationMode: z.number().optional(),
|
|
117
|
-
requirementNum: z.number().optional(),
|
|
118
|
-
thresholdNum: z.number().optional(),
|
|
119
|
-
signUpNum: z.number().nullable().optional(),
|
|
120
|
-
basicPersonalRequirements: DulidayBasicPersonalRequirementsSchema.nullable().optional(),
|
|
121
|
-
certificate: DulidayCertificateSchema.nullable().optional(),
|
|
122
|
-
})
|
|
123
|
-
.passthrough();
|
|
124
|
-
export const DulidayNewWorkTimeSchema = z
|
|
125
|
-
.object({
|
|
126
|
-
employmentForm: z.string(),
|
|
127
|
-
minWorkMonths: z.number().nullable().optional(),
|
|
128
|
-
maxWorkTakingTime: z.number().nullable().optional(),
|
|
129
|
-
restTimeDesc: z.string().nullable().optional(),
|
|
130
|
-
workTimeRemark: z.string().nullable().optional(),
|
|
131
|
-
employmentDescription: z.string().nullable().optional(),
|
|
132
|
-
weekWorkTime: z
|
|
133
|
-
.object({
|
|
134
|
-
weekWorkTimeRequirement: z.string().nullable().optional(),
|
|
135
|
-
perWeekWorkDays: z.number().nullable().optional(),
|
|
136
|
-
perWeekRestDays: z.number().nullable().optional(),
|
|
137
|
-
perWeekNeedWorkDays: z.union([z.string(), z.number()]).nullable().optional(),
|
|
138
|
-
workSingleDouble: z.string().nullable().optional(),
|
|
139
|
-
customnWorkTimeList: z
|
|
140
|
-
.array(z
|
|
141
|
-
.object({
|
|
142
|
-
customMinWorkDays: z.number().nullable().optional(),
|
|
143
|
-
customMaxWorkDays: z.number().nullable().optional(),
|
|
144
|
-
customWorkWeekdays: z
|
|
145
|
-
.array(z.union([z.string(), z.number()]))
|
|
146
|
-
.nullable()
|
|
147
|
-
.optional(),
|
|
148
|
-
})
|
|
149
|
-
.passthrough())
|
|
150
|
-
.nullable()
|
|
151
|
-
.optional(),
|
|
152
|
-
})
|
|
153
|
-
.passthrough()
|
|
154
|
-
.nullable()
|
|
155
|
-
.optional(),
|
|
156
|
-
monthWorkTime: z
|
|
157
|
-
.object({
|
|
158
|
-
perMonthMinWorkTime: z.number().nullable().optional(),
|
|
159
|
-
perMonthMinWorkTimeUnit: z.union([z.string(), z.number()]).nullable().optional(),
|
|
160
|
-
monthWorkTimeRequirement: z.string().nullable().optional(),
|
|
161
|
-
perMonthMaxRestTime: z.number().nullable().optional(),
|
|
162
|
-
perMonthMaxRestTimeUnit: z.number().nullable().optional(),
|
|
163
|
-
})
|
|
164
|
-
.passthrough()
|
|
165
|
-
.nullable()
|
|
166
|
-
.optional(),
|
|
167
|
-
dayWorkTime: z
|
|
168
|
-
.object({
|
|
169
|
-
perDayMinWorkHours: z.union([z.string(), z.number()]).nullable().optional(),
|
|
170
|
-
dayWorkTimeRequirement: z.string().nullable().optional(),
|
|
171
|
-
})
|
|
172
|
-
.passthrough()
|
|
173
|
-
.nullable()
|
|
174
|
-
.optional(),
|
|
175
|
-
dailyShiftSchedule: z
|
|
176
|
-
.object({
|
|
177
|
-
arrangementType: z.string().nullable().optional(),
|
|
178
|
-
fixedScheduleList: z
|
|
179
|
-
.array(z
|
|
180
|
-
.object({
|
|
181
|
-
fixedShiftStartTime: z.union([z.string(), z.number()]).optional(),
|
|
182
|
-
fixedShiftEndTime: z.union([z.string(), z.number()]).optional(),
|
|
183
|
-
startTime: z.number().optional(),
|
|
184
|
-
endTime: z.number().optional(),
|
|
185
|
-
})
|
|
186
|
-
.passthrough())
|
|
187
|
-
.nullable()
|
|
188
|
-
.optional(),
|
|
189
|
-
combinedArrangement: z
|
|
190
|
-
.array(z
|
|
191
|
-
.object({
|
|
192
|
-
CombinedArrangementWeekdays: z.union([z.string(), z.array(z.number())]).optional(),
|
|
193
|
-
CombinedArrangementStartTime: z.number().optional(),
|
|
194
|
-
CombinedArrangementEndTime: z.number().optional(),
|
|
195
|
-
startTime: z.number().optional(),
|
|
196
|
-
endTime: z.number().optional(),
|
|
197
|
-
weekdays: z.array(z.number()).optional(),
|
|
198
|
-
})
|
|
199
|
-
.passthrough())
|
|
200
|
-
.nullable()
|
|
201
|
-
.optional(),
|
|
202
|
-
fixedTime: z
|
|
203
|
-
.object({
|
|
204
|
-
goToWorkStartTime: z.union([z.string(), z.number()]).nullable().optional(),
|
|
205
|
-
goToWorkEndTime: z.union([z.string(), z.number()]).nullable().optional(),
|
|
206
|
-
goOffWorkStartTime: z.union([z.string(), z.number()]).nullable().optional(),
|
|
207
|
-
goOffWorkEndTime: z.union([z.string(), z.number()]).nullable().optional(),
|
|
208
|
-
})
|
|
209
|
-
.passthrough()
|
|
210
|
-
.nullable()
|
|
211
|
-
.optional(),
|
|
212
|
-
})
|
|
213
|
-
.passthrough()
|
|
214
|
-
.nullable()
|
|
215
|
-
.optional(),
|
|
216
|
-
temporaryEmployment: z
|
|
217
|
-
.object({
|
|
218
|
-
temporaryEmploymentStartTime: z.string().nullable().optional(),
|
|
219
|
-
temporaryEmploymentEndTime: z.string().nullable().optional(),
|
|
220
|
-
})
|
|
221
|
-
.passthrough()
|
|
222
|
-
.nullable()
|
|
223
|
-
.optional(),
|
|
224
|
-
})
|
|
225
|
-
.passthrough();
|
|
226
|
-
export const DulidayNewPositionSchema = z
|
|
227
|
-
.object({
|
|
228
|
-
basicInfo: DulidayBasicInfoSchema,
|
|
229
|
-
jobSalary: DulidayJobSalarySchema,
|
|
230
|
-
welfare: DulidayNewWelfareSchema,
|
|
231
|
-
hiringRequirement: DulidayHiringRequirementSchema,
|
|
232
|
-
workTime: DulidayNewWorkTimeSchema,
|
|
233
|
-
})
|
|
234
|
-
.passthrough();
|
|
235
|
-
//# sourceMappingURL=duliday-api.js.map
|
|
1
|
+
import{z as l}from"zod";export const DulidayMoreWelfareItemSchema=l.object({content:l.string(),image:l.string().nullable().optional()}).passthrough();export const DulidayStoreInfoSchema=l.object({storeId:l.number().optional(),storeName:l.string(),storeCityName:l.string().optional(),storeRegionName:l.string().optional(),storeAddress:l.string().optional(),longitude:l.number().optional(),latitude:l.number().optional()}).passthrough();export const DulidayBasicInfoSchema=l.object({jobId:l.number(),jobName:l.string(),jobContent:l.string().nullable().optional(),brandId:l.number().optional(),brandName:l.string().optional(),projectId:l.number().optional(),projectName:l.string().optional(),storeInfo:DulidayStoreInfoSchema.optional()}).passthrough();export const DulidaySalaryScenarioSchema=l.object({salaryType:l.string().nullable().optional(),salaryPeriod:l.string().nullable().optional(),hasStairSalary:l.string().nullable().optional(),basicSalary:l.object({basicSalary:l.number().nullable().optional(),basicSalaryUnit:l.string().nullable().optional()}).passthrough().nullable().optional(),stairSalaries:l.array(l.object({fullWorkTime:l.number().nullable().optional(),fullWorkTimeUnit:l.string().nullable().optional(),salary:l.number().nullable().optional(),salaryUnit:l.string().nullable().optional()}).passthrough()).nullable().optional(),comprehensiveSalary:l.object({minComprehensiveSalary:l.number().nullable().optional(),maxComprehensiveSalary:l.number().nullable().optional(),comprehensiveSalaryUnit:l.string().nullable().optional()}).passthrough().nullable().optional(),holidaySalary:l.object({holidaySalaryType:l.string().nullable().optional(),holidaySalaryMultiple:l.number().nullable().optional(),holidayFixedSalary:l.number().nullable().optional(),holidayFixedSalaryUnit:l.string().nullable().optional()}).passthrough().nullable().optional()}).passthrough();export const DulidayJobSalarySchema=l.object({salary:l.number().optional(),salaryUnitStr:l.string().optional(),salaryScenarioList:l.array(DulidaySalaryScenarioSchema).nullable().optional()}).passthrough();export const DulidayNewWelfareSchema=l.object({haveInsurance:l.string(),accommodation:l.string(),catering:l.string().optional(),otherWelfare:l.array(l.string()).nullable().optional(),accommodationAllowance:l.number().nullable().optional(),accommodationAllowanceUnit:l.string().nullable().optional(),cateringSalary:l.number().nullable().optional(),cateringSalaryUnit:l.string().nullable().optional(),trafficAllowanceSalary:l.number().nullable().optional(),trafficAllowanceSalaryUnit:l.string().nullable().optional(),memo:l.string().nullable().optional(),promotionWelfare:l.string().nullable().optional(),moreWelfares:l.array(DulidayMoreWelfareItemSchema).nullable().optional()}).passthrough();export const DulidayBasicPersonalRequirementsSchema=l.object({minAge:l.number().nullable().optional(),maxAge:l.number().nullable().optional(),genderRequirement:l.string().nullable().optional()}).passthrough();export const DulidayCertificateSchema=l.object({education:l.string().nullable().optional(),healthCertificate:l.string().nullable().optional()}).passthrough();export const DulidayHiringRequirementSchema=l.object({cooperationMode:l.number().optional(),requirementNum:l.number().optional(),thresholdNum:l.number().optional(),signUpNum:l.number().nullable().optional(),basicPersonalRequirements:DulidayBasicPersonalRequirementsSchema.nullable().optional(),certificate:DulidayCertificateSchema.nullable().optional()}).passthrough();export const DulidayNewWorkTimeSchema=l.object({employmentForm:l.string(),minWorkMonths:l.number().nullable().optional(),maxWorkTakingTime:l.number().nullable().optional(),restTimeDesc:l.string().nullable().optional(),workTimeRemark:l.string().nullable().optional(),employmentDescription:l.string().nullable().optional(),weekWorkTime:l.object({weekWorkTimeRequirement:l.string().nullable().optional(),perWeekWorkDays:l.number().nullable().optional(),perWeekRestDays:l.number().nullable().optional(),perWeekNeedWorkDays:l.union([l.string(),l.number()]).nullable().optional(),workSingleDouble:l.string().nullable().optional(),customnWorkTimeList:l.array(l.object({customMinWorkDays:l.number().nullable().optional(),customMaxWorkDays:l.number().nullable().optional(),customWorkWeekdays:l.array(l.union([l.string(),l.number()])).nullable().optional()}).passthrough()).nullable().optional()}).passthrough().nullable().optional(),monthWorkTime:l.object({perMonthMinWorkTime:l.number().nullable().optional(),perMonthMinWorkTimeUnit:l.union([l.string(),l.number()]).nullable().optional(),monthWorkTimeRequirement:l.string().nullable().optional(),perMonthMaxRestTime:l.number().nullable().optional(),perMonthMaxRestTimeUnit:l.number().nullable().optional()}).passthrough().nullable().optional(),dayWorkTime:l.object({perDayMinWorkHours:l.union([l.string(),l.number()]).nullable().optional(),dayWorkTimeRequirement:l.string().nullable().optional()}).passthrough().nullable().optional(),dailyShiftSchedule:l.object({arrangementType:l.string().nullable().optional(),fixedScheduleList:l.array(l.object({fixedShiftStartTime:l.union([l.string(),l.number()]).optional(),fixedShiftEndTime:l.union([l.string(),l.number()]).optional(),startTime:l.number().optional(),endTime:l.number().optional()}).passthrough()).nullable().optional(),combinedArrangement:l.array(l.object({CombinedArrangementWeekdays:l.union([l.string(),l.array(l.number())]).optional(),CombinedArrangementStartTime:l.number().optional(),CombinedArrangementEndTime:l.number().optional(),startTime:l.number().optional(),endTime:l.number().optional(),weekdays:l.array(l.number()).optional()}).passthrough()).nullable().optional(),fixedTime:l.object({goToWorkStartTime:l.union([l.string(),l.number()]).nullable().optional(),goToWorkEndTime:l.union([l.string(),l.number()]).nullable().optional(),goOffWorkStartTime:l.union([l.string(),l.number()]).nullable().optional(),goOffWorkEndTime:l.union([l.string(),l.number()]).nullable().optional()}).passthrough().nullable().optional()}).passthrough().nullable().optional(),temporaryEmployment:l.object({temporaryEmploymentStartTime:l.string().nullable().optional(),temporaryEmploymentEndTime:l.string().nullable().optional()}).passthrough().nullable().optional()}).passthrough();export const DulidayNewPositionSchema=l.object({basicInfo:DulidayBasicInfoSchema,jobSalary:DulidayJobSalarySchema,welfare:DulidayNewWelfareSchema,hiringRequirement:DulidayHiringRequirementSchema,workTime:DulidayNewWorkTimeSchema}).passthrough();
|
package/dist/types/geocoding.js
CHANGED
|
@@ -1,12 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export const CoordinatesSchema = z.object({
|
|
3
|
-
lat: z.number(),
|
|
4
|
-
lng: z.number(),
|
|
5
|
-
});
|
|
6
|
-
export const CHINA_BOUNDS = {
|
|
7
|
-
minLat: 3.86,
|
|
8
|
-
maxLat: 53.55,
|
|
9
|
-
minLng: 73.66,
|
|
10
|
-
maxLng: 135.05,
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=geocoding.js.map
|
|
1
|
+
import{z as n}from"zod";export const CoordinatesSchema=n.object({lat:n.number(),lng:n.number()});export const CHINA_BOUNDS={minLat:3.86,maxLat:53.55,minLng:73.66,maxLng:135.05};
|
|
@@ -1388,4 +1388,3 @@ export type AgeQualificationPolicy = z.infer<typeof AgeQualificationPolicySchema
|
|
|
1388
1388
|
export type QualificationPolicy = z.infer<typeof QualificationPolicySchema>;
|
|
1389
1389
|
export type ReplyPolicyConfig = z.infer<typeof ReplyPolicyConfigSchema>;
|
|
1390
1390
|
export declare const DEFAULT_REPLY_POLICY: ReplyPolicyConfig;
|
|
1391
|
-
//# sourceMappingURL=reply-policy.d.ts.map
|