@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.
Files changed (129) hide show
  1. package/dist/ai/model-registry.d.ts +0 -1
  2. package/dist/ai/model-registry.js +1 -205
  3. package/dist/ai/structured-output.d.ts +0 -1
  4. package/dist/ai/structured-output.js +1 -78
  5. package/dist/errors/app-error.d.ts +0 -1
  6. package/dist/errors/app-error.js +1 -95
  7. package/dist/errors/error-codes.d.ts +0 -1
  8. package/dist/errors/error-codes.js +1 -115
  9. package/dist/errors/error-factory.d.ts +0 -1
  10. package/dist/errors/error-factory.js +1 -86
  11. package/dist/errors/error-utils.d.ts +0 -1
  12. package/dist/errors/error-utils.js +1 -188
  13. package/dist/errors/index.d.ts +0 -1
  14. package/dist/errors/index.js +1 -5
  15. package/dist/index.d.ts +0 -1
  16. package/dist/index.js +1 -12
  17. package/dist/log-control.d.ts +0 -1
  18. package/dist/log-control.js +1 -15
  19. package/dist/pipeline/age-eligibility.d.ts +0 -1
  20. package/dist/pipeline/age-eligibility.js +1 -176
  21. package/dist/pipeline/candidate-context.d.ts +0 -1
  22. package/dist/pipeline/candidate-context.js +1 -31
  23. package/dist/pipeline/candidate-utils.d.ts +0 -1
  24. package/dist/pipeline/candidate-utils.js +1 -33
  25. package/dist/pipeline/classification.d.ts +0 -1
  26. package/dist/pipeline/classification.js +1 -206
  27. package/dist/pipeline/context-builder.d.ts +0 -1
  28. package/dist/pipeline/context-builder.js +1 -404
  29. package/dist/pipeline/pipeline-progress.d.ts +0 -1
  30. package/dist/pipeline/pipeline-progress.js +1 -33
  31. package/dist/pipeline/reply-gate.d.ts +0 -1
  32. package/dist/pipeline/reply-gate.js +1 -139
  33. package/dist/pipeline/smart-reply.d.ts +0 -1
  34. package/dist/pipeline/smart-reply.js +1 -418
  35. package/dist/pipeline.d.ts +0 -1
  36. package/dist/pipeline.js +1 -12
  37. package/dist/services/brand-alias.d.ts +0 -1
  38. package/dist/services/brand-alias.js +1 -184
  39. package/dist/services/brand-config-selectors.d.ts +0 -1
  40. package/dist/services/brand-config-selectors.js +1 -30
  41. package/dist/services/config-loader.d.ts +0 -1
  42. package/dist/services/config-loader.js +1 -45
  43. package/dist/services/duliday-api.d.ts +0 -1
  44. package/dist/services/duliday-api.js +1 -160
  45. package/dist/services/duliday-mapper.d.ts +0 -1
  46. package/dist/services/duliday-mapper.js +1 -536
  47. package/dist/tools/generate-reply.d.ts +0 -1
  48. package/dist/tools/generate-reply.js +1 -132
  49. package/dist/tools/sync-brand-data.d.ts +0 -1
  50. package/dist/tools/sync-brand-data.js +1 -114
  51. package/dist/types/brand-resolution.d.ts +0 -1
  52. package/dist/types/brand-resolution.js +1 -37
  53. package/dist/types/classification.d.ts +0 -1
  54. package/dist/types/classification.js +1 -30
  55. package/dist/types/config.d.ts +0 -1
  56. package/dist/types/config.js +1 -7
  57. package/dist/types/duliday-api.d.ts +0 -1
  58. package/dist/types/duliday-api.js +1 -235
  59. package/dist/types/geocoding.d.ts +0 -1
  60. package/dist/types/geocoding.js +1 -12
  61. package/dist/types/reply-policy.d.ts +0 -1
  62. package/dist/types/reply-policy.js +1 -332
  63. package/dist/types/zhipin.d.ts +0 -1
  64. package/dist/types/zhipin.js +1 -123
  65. package/package.json +3 -3
  66. package/dist/ai/model-registry.d.ts.map +0 -1
  67. package/dist/ai/model-registry.js.map +0 -1
  68. package/dist/ai/structured-output.d.ts.map +0 -1
  69. package/dist/ai/structured-output.js.map +0 -1
  70. package/dist/errors/app-error.d.ts.map +0 -1
  71. package/dist/errors/app-error.js.map +0 -1
  72. package/dist/errors/error-codes.d.ts.map +0 -1
  73. package/dist/errors/error-codes.js.map +0 -1
  74. package/dist/errors/error-factory.d.ts.map +0 -1
  75. package/dist/errors/error-factory.js.map +0 -1
  76. package/dist/errors/error-utils.d.ts.map +0 -1
  77. package/dist/errors/error-utils.js.map +0 -1
  78. package/dist/errors/index.d.ts.map +0 -1
  79. package/dist/errors/index.js.map +0 -1
  80. package/dist/index.d.ts.map +0 -1
  81. package/dist/index.js.map +0 -1
  82. package/dist/log-control.d.ts.map +0 -1
  83. package/dist/log-control.js.map +0 -1
  84. package/dist/pipeline/age-eligibility.d.ts.map +0 -1
  85. package/dist/pipeline/age-eligibility.js.map +0 -1
  86. package/dist/pipeline/candidate-context.d.ts.map +0 -1
  87. package/dist/pipeline/candidate-context.js.map +0 -1
  88. package/dist/pipeline/candidate-utils.d.ts.map +0 -1
  89. package/dist/pipeline/candidate-utils.js.map +0 -1
  90. package/dist/pipeline/classification.d.ts.map +0 -1
  91. package/dist/pipeline/classification.js.map +0 -1
  92. package/dist/pipeline/context-builder.d.ts.map +0 -1
  93. package/dist/pipeline/context-builder.js.map +0 -1
  94. package/dist/pipeline/pipeline-progress.d.ts.map +0 -1
  95. package/dist/pipeline/pipeline-progress.js.map +0 -1
  96. package/dist/pipeline/reply-gate.d.ts.map +0 -1
  97. package/dist/pipeline/reply-gate.js.map +0 -1
  98. package/dist/pipeline/smart-reply.d.ts.map +0 -1
  99. package/dist/pipeline/smart-reply.js.map +0 -1
  100. package/dist/pipeline.d.ts.map +0 -1
  101. package/dist/pipeline.js.map +0 -1
  102. package/dist/services/brand-alias.d.ts.map +0 -1
  103. package/dist/services/brand-alias.js.map +0 -1
  104. package/dist/services/brand-config-selectors.d.ts.map +0 -1
  105. package/dist/services/brand-config-selectors.js.map +0 -1
  106. package/dist/services/config-loader.d.ts.map +0 -1
  107. package/dist/services/config-loader.js.map +0 -1
  108. package/dist/services/duliday-api.d.ts.map +0 -1
  109. package/dist/services/duliday-api.js.map +0 -1
  110. package/dist/services/duliday-mapper.d.ts.map +0 -1
  111. package/dist/services/duliday-mapper.js.map +0 -1
  112. package/dist/tools/generate-reply.d.ts.map +0 -1
  113. package/dist/tools/generate-reply.js.map +0 -1
  114. package/dist/tools/sync-brand-data.d.ts.map +0 -1
  115. package/dist/tools/sync-brand-data.js.map +0 -1
  116. package/dist/types/brand-resolution.d.ts.map +0 -1
  117. package/dist/types/brand-resolution.js.map +0 -1
  118. package/dist/types/classification.d.ts.map +0 -1
  119. package/dist/types/classification.js.map +0 -1
  120. package/dist/types/config.d.ts.map +0 -1
  121. package/dist/types/config.js.map +0 -1
  122. package/dist/types/duliday-api.d.ts.map +0 -1
  123. package/dist/types/duliday-api.js.map +0 -1
  124. package/dist/types/geocoding.d.ts.map +0 -1
  125. package/dist/types/geocoding.js.map +0 -1
  126. package/dist/types/reply-policy.d.ts.map +0 -1
  127. package/dist/types/reply-policy.js.map +0 -1
  128. package/dist/types/zhipin.d.ts.map +0 -1
  129. package/dist/types/zhipin.js.map +0 -1
@@ -1,132 +1 @@
1
- import { defineTool } from "@roll-agent/sdk";
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}}});
@@ -9,4 +9,3 @@ export declare const syncBrandData: import("@roll-agent/sdk").ToolDefinition<{
9
9
  updatedAt: string;
10
10
  error?: string | undefined;
11
11
  }>;
12
- //# sourceMappingURL=sync-brand-data.d.ts.map
@@ -1,114 +1 @@
1
- import { defineTool } from "@roll-agent/sdk";
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}}
@@ -81,4 +81,3 @@ export interface BrandResolutionContext {
81
81
  reason: string;
82
82
  }>;
83
83
  }
84
- //# sourceMappingURL=brand-resolution.d.ts.map
@@ -1,37 +1 @@
1
- import { z } from "zod";
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 { z } from "zod";
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()});
@@ -1,4 +1,3 @@
1
1
  import { z } from "zod";
2
2
  export declare const BrandPriorityStrategySchema: z.ZodEnum<["user-selected", "conversation-extracted", "smart"]>;
3
3
  export type BrandPriorityStrategy = z.infer<typeof BrandPriorityStrategySchema>;
4
- //# sourceMappingURL=config.d.ts.map
@@ -1,7 +1 @@
1
- import { z } from "zod";
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 { z } from "zod";
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();
@@ -21,4 +21,3 @@ export declare const CHINA_BOUNDS: {
21
21
  readonly minLng: 73.66;
22
22
  readonly maxLng: 135.05;
23
23
  };
24
- //# sourceMappingURL=geocoding.d.ts.map
@@ -1,12 +1 @@
1
- import { z } from "zod";
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