dialog-survey 1.6.10 → 1.6.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -5
- package/dist/api/plans.d.ts.map +1 -1
- package/dist/api/plans.js +13 -43
- package/dist/api/plans.js.map +1 -1
- package/dist/api/templates.d.ts.map +1 -1
- package/dist/api/templates.js +1 -3
- package/dist/api/templates.js.map +1 -1
- package/dist/core/graph.d.ts +1 -1
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +48 -20
- package/dist/core/graph.js.map +1 -1
- package/dist/core/nodes/interviewing.d.ts +1 -9
- package/dist/core/nodes/interviewing.d.ts.map +1 -1
- package/dist/core/nodes/interviewing.js +61 -72
- package/dist/core/nodes/interviewing.js.map +1 -1
- package/dist/core/nodes/planning.d.ts +1 -13
- package/dist/core/nodes/planning.d.ts.map +1 -1
- package/dist/core/nodes/planning.js +12 -22
- package/dist/core/nodes/planning.js.map +1 -1
- package/dist/core/nodes/template-utils.d.ts +4 -0
- package/dist/core/nodes/template-utils.d.ts.map +1 -0
- package/dist/core/nodes/template-utils.js +12 -0
- package/dist/core/nodes/template-utils.js.map +1 -0
- package/dist/core/types/index.d.ts +16 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +11 -0
- package/dist/core/types/index.js.map +1 -1
- package/dist/integrations/dingtalk/client.d.ts.map +1 -1
- package/dist/integrations/dingtalk/client.js +10 -6
- package/dist/integrations/dingtalk/client.js.map +1 -1
- package/dist/integrations/dingtalk/token-manager.js +7 -7
- package/dist/integrations/dingtalk/token-manager.js.map +1 -1
- package/dist/repositories/interview-state.repository.d.ts +4 -0
- package/dist/repositories/interview-state.repository.d.ts.map +1 -1
- package/dist/repositories/interview-state.repository.js +10 -0
- package/dist/repositories/interview-state.repository.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/services/followup.service.d.ts +4 -3
- package/dist/services/followup.service.d.ts.map +1 -1
- package/dist/services/followup.service.js +32 -5
- package/dist/services/followup.service.js.map +1 -1
- package/dist/services/interview-plan-base.service.d.ts +9 -32
- package/dist/services/interview-plan-base.service.d.ts.map +1 -1
- package/dist/services/interview-plan-base.service.js +5 -87
- package/dist/services/interview-plan-base.service.js.map +1 -1
- package/dist/services/interview-plan-members.service.d.ts +6 -0
- package/dist/services/interview-plan-members.service.d.ts.map +1 -1
- package/dist/services/interview-plan-members.service.js +14 -25
- package/dist/services/interview-plan-members.service.js.map +1 -1
- package/dist/services/interview-plan-send.service.d.ts +0 -10
- package/dist/services/interview-plan-send.service.d.ts.map +1 -1
- package/dist/services/interview-plan-send.service.js +7 -100
- package/dist/services/interview-plan-send.service.js.map +1 -1
- package/dist/services/interview-plan.service.d.ts +1 -2
- package/dist/services/interview-plan.service.d.ts.map +1 -1
- package/dist/services/interview-plan.service.js +0 -1
- package/dist/services/interview-plan.service.js.map +1 -1
- package/dist/services/member-verification.service.d.ts +28 -0
- package/dist/services/member-verification.service.d.ts.map +1 -0
- package/dist/services/member-verification.service.js +78 -0
- package/dist/services/member-verification.service.js.map +1 -0
- package/dist/services/prompt.service.d.ts.map +1 -1
- package/dist/services/prompt.service.js +18 -16
- package/dist/services/prompt.service.js.map +1 -1
- package/dist/services/report.service.js.map +1 -1
- package/dist/services/stream-message.service.d.ts +5 -0
- package/dist/services/stream-message.service.d.ts.map +1 -1
- package/dist/services/stream-message.service.js +118 -5
- package/dist/services/stream-message.service.js.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +1 -0
- package/src/views/admin/content/plan-detail.njk +29 -24
- package/src/views/admin/content/plan-form.njk +15 -12
- package/src/views/admin/content/template-info.njk +2 -1
- package/src/views/layouts/admin-tree.njk +5 -1
- package/dist/core/nodes/analyzing.d.ts +0 -4
- package/dist/core/nodes/analyzing.d.ts.map +0 -1
- package/dist/core/nodes/analyzing.js +0 -38
- package/dist/core/nodes/analyzing.js.map +0 -1
- package/dist/core/nodes/completed.d.ts +0 -3
- package/dist/core/nodes/completed.d.ts.map +0 -1
- package/dist/core/nodes/completed.js +0 -8
- package/dist/core/nodes/completed.js.map +0 -1
- package/dist/services/conversation-engine.d.ts +0 -16
- package/dist/services/conversation-engine.d.ts.map +0 -1
- package/dist/services/conversation-engine.js +0 -49
- package/dist/services/conversation-engine.js.map +0 -1
package/README.md
CHANGED
|
@@ -198,19 +198,22 @@ npm run dev
|
|
|
198
198
|
```
|
|
199
199
|
|
|
200
200
|
**生产模式** (推荐用于长期运行):
|
|
201
|
-
```bash
|
|
202
|
-
npm run build # 编译到 dist/
|
|
203
|
-
node dist/src/server.ts
|
|
204
|
-
```
|
|
205
201
|
|
|
206
|
-
|
|
202
|
+
**Linux / macOS** — 使用 PM2 管理进程:
|
|
207
203
|
```bash
|
|
208
204
|
npm install -g pm2
|
|
205
|
+
npm run build # 编译到 dist/
|
|
209
206
|
pm2 start dist/src/server.ts --name dialog-survey
|
|
210
207
|
pm2 save
|
|
211
208
|
pm2 startup # 设置开机自启
|
|
212
209
|
```
|
|
213
210
|
|
|
211
|
+
**Windows** — 直接使用 Node 启动(PM2 在 Windows 上不稳定):
|
|
212
|
+
```bash
|
|
213
|
+
npm run build # 编译到 dist/
|
|
214
|
+
node dist/src/server.ts
|
|
215
|
+
```
|
|
216
|
+
|
|
214
217
|
### 环境变量说明
|
|
215
218
|
|
|
216
219
|
| 变量名 | 说明 | 示例 |
|
package/dist/api/plans.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/api/plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/api/plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA8D/C,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,iBAgI/B"}
|
package/dist/api/plans.js
CHANGED
|
@@ -1,23 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { adminAuth } from '../middleware/admin-auth.js';
|
|
3
|
-
import { InterviewNotFoundError, InterviewPlanService, InvalidMemberInputError, InvalidStateError, MemberConflictError, MemberNotFoundError, PlanNotFoundError,
|
|
3
|
+
import { InterviewNotFoundError, InterviewPlanService, InvalidMemberInputError, InvalidStateError, MemberConflictError, MemberNotFoundError, PlanNotFoundError, } from '../services/interview-plan.service.js';
|
|
4
4
|
const createPlanSchema = z.object({
|
|
5
5
|
name: z.string().min(1),
|
|
6
6
|
description: z.string().optional(),
|
|
7
7
|
templateId: z.string().uuid(),
|
|
8
8
|
targetDate: z.string().optional(),
|
|
9
9
|
schedule: z.string().optional(),
|
|
10
|
-
invitees: z.string().optional(),
|
|
11
|
-
publish: z.coerce.boolean().optional().default(false),
|
|
12
|
-
});
|
|
13
|
-
const importInviteesSchema = z.object({
|
|
14
|
-
invitees: z.array(z.object({
|
|
15
|
-
userId: z.string(),
|
|
16
|
-
name: z.string(),
|
|
17
|
-
email: z.string().optional(),
|
|
18
|
-
phone: z.string().optional(),
|
|
19
|
-
customFields: z.record(z.string(), z.unknown()).optional(),
|
|
20
|
-
})),
|
|
21
10
|
});
|
|
22
11
|
const addMemberSchema = z
|
|
23
12
|
.object({
|
|
@@ -36,11 +25,14 @@ const remindSchema = z.object({
|
|
|
36
25
|
interviewId: z.string().min(1).optional(),
|
|
37
26
|
});
|
|
38
27
|
function mapServiceErrorToStatus(err) {
|
|
39
|
-
if (err instanceof PlanNotFoundError
|
|
40
|
-
return { status: 404, message:
|
|
28
|
+
if (err instanceof PlanNotFoundError) {
|
|
29
|
+
return { status: 404, message: '访谈计划不存在或已被删除' };
|
|
30
|
+
}
|
|
31
|
+
if (err instanceof InterviewNotFoundError) {
|
|
32
|
+
return { status: 404, message: '访谈记录不存在或已被删除' };
|
|
41
33
|
}
|
|
42
34
|
if (err instanceof MemberNotFoundError) {
|
|
43
|
-
return { status: 404, message:
|
|
35
|
+
return { status: 404, message: '成员不存在或已被删除' };
|
|
44
36
|
}
|
|
45
37
|
if (err instanceof MemberConflictError) {
|
|
46
38
|
return { status: 409, message: err.message };
|
|
@@ -51,14 +43,13 @@ function mapServiceErrorToStatus(err) {
|
|
|
51
43
|
if (err instanceof InvalidMemberInputError) {
|
|
52
44
|
return { status: 400, message: err.message };
|
|
53
45
|
}
|
|
54
|
-
const message = err instanceof Error ? err.message : '
|
|
46
|
+
const message = err instanceof Error ? err.message : '服务异常,请稍后重试';
|
|
55
47
|
return { status: 502, message };
|
|
56
48
|
}
|
|
57
49
|
export async function interviewPlanRoutes(fastify, opts) {
|
|
58
50
|
const planService = new InterviewPlanService(opts.prisma);
|
|
59
51
|
fastify.post('/api/plans', async (request, _reply) => {
|
|
60
52
|
const input = createPlanSchema.parse(request.body);
|
|
61
|
-
// Always create the plan first
|
|
62
53
|
const planId = await planService.createPlan({
|
|
63
54
|
name: input.name,
|
|
64
55
|
...(input.description != null ? { description: input.description } : {}),
|
|
@@ -66,24 +57,6 @@ export async function interviewPlanRoutes(fastify, opts) {
|
|
|
66
57
|
...(input.targetDate != null ? { targetDate: new Date(input.targetDate) } : {}),
|
|
67
58
|
...(input.schedule != null ? { schedule: input.schedule } : {}),
|
|
68
59
|
});
|
|
69
|
-
if (input.invitees) {
|
|
70
|
-
const inviteeData = parseInviteeText(input.invitees);
|
|
71
|
-
const importResult = await planService.importInvitees(planId, inviteeData);
|
|
72
|
-
let sent = 0;
|
|
73
|
-
let failed = 0;
|
|
74
|
-
if (input.publish === true) {
|
|
75
|
-
const sendResult = await planService.sendInvitations(planId);
|
|
76
|
-
sent = sendResult.sent;
|
|
77
|
-
failed = sendResult.failed;
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
id: planId,
|
|
81
|
-
imported: importResult.success,
|
|
82
|
-
sent,
|
|
83
|
-
failed,
|
|
84
|
-
errors: importResult.errors,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
60
|
return { id: planId };
|
|
88
61
|
});
|
|
89
62
|
fastify.get('/api/plans', async (request) => {
|
|
@@ -110,16 +83,9 @@ export async function interviewPlanRoutes(fastify, opts) {
|
|
|
110
83
|
...(input.description != null ? { description: input.description } : {}),
|
|
111
84
|
...(input.targetDate != null ? { targetDate: input.targetDate } : {}),
|
|
112
85
|
...(input.schedule != null ? { schedule: input.schedule } : {}),
|
|
113
|
-
...(input.invitees != null ? { invitees: input.invitees } : {}),
|
|
114
86
|
});
|
|
115
87
|
return { id };
|
|
116
88
|
});
|
|
117
|
-
fastify.post('/api/plans/:id/invitees', async (request, _reply) => {
|
|
118
|
-
const { id } = request.params;
|
|
119
|
-
const { invitees } = importInviteesSchema.parse(request.body);
|
|
120
|
-
const result = await planService.importInvitees(id, invitees);
|
|
121
|
-
return result;
|
|
122
|
-
});
|
|
123
89
|
fastify.post('/api/plans/:id/send', async (request, _reply) => {
|
|
124
90
|
const { id } = request.params;
|
|
125
91
|
const result = await planService.sendInvitations(id);
|
|
@@ -147,8 +113,8 @@ export async function interviewPlanRoutes(fastify, opts) {
|
|
|
147
113
|
});
|
|
148
114
|
fastify.post('/api/plans/:id/members', { preHandler: adminAuth }, async (request, reply) => {
|
|
149
115
|
const { id } = request.params;
|
|
150
|
-
const input = addMemberSchema.parse(request.body);
|
|
151
116
|
try {
|
|
117
|
+
const input = addMemberSchema.parse(request.body);
|
|
152
118
|
const result = await planService.addMember(id, {
|
|
153
119
|
...(input.userId != null ? { userId: input.userId } : {}),
|
|
154
120
|
...(input.phone != null ? { phone: input.phone } : {}),
|
|
@@ -157,6 +123,10 @@ export async function interviewPlanRoutes(fastify, opts) {
|
|
|
157
123
|
return result;
|
|
158
124
|
}
|
|
159
125
|
catch (e) {
|
|
126
|
+
if (e instanceof z.ZodError) {
|
|
127
|
+
const messages = e.issues.map((issue) => issue.message).join(';');
|
|
128
|
+
return reply.status(400).send({ error: `输入格式错误:${messages}` });
|
|
129
|
+
}
|
|
160
130
|
const { status, message } = mapServiceErrorToStatus(e);
|
|
161
131
|
return reply.status(status).send({ error: message });
|
|
162
132
|
}
|
package/dist/api/plans.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/api/plans.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/api/plans.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/api/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAGjF,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,EAAE,YAAY,CAAC;CACtB;AAsCD,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/api/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAGjF,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,EAAE,YAAY,CAAC;CACtB;AAsCD,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,iBA4NzF"}
|
package/dist/api/templates.js
CHANGED
|
@@ -76,9 +76,7 @@ export async function templateRoutes(fastify, opts) {
|
|
|
76
76
|
const template = await templateRepo.update(id, {
|
|
77
77
|
...(input.name != null ? { name: input.name } : {}),
|
|
78
78
|
...(input.description != null ? { description: input.description } : {}),
|
|
79
|
-
...(input.content != null
|
|
80
|
-
? { content: input.content }
|
|
81
|
-
: {}),
|
|
79
|
+
...(input.content != null ? { content: input.content } : {}),
|
|
82
80
|
...(input.status != null ? { status: input.status } : {}),
|
|
83
81
|
});
|
|
84
82
|
return reply.send(formatTemplateResponse(template));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/api/templates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/api/templates.ts"],"names":[],"mappings":"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"}
|
package/dist/core/graph.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PrismaClient } from '@prisma/client';
|
|
2
|
-
import type
|
|
2
|
+
import { type InterviewState, type NodeInput } from './types/index.js';
|
|
3
3
|
export interface GraphResult {
|
|
4
4
|
response: string;
|
|
5
5
|
nextState: InterviewState;
|
package/dist/core/graph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD,OAAO,EAA2B,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEhG,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAMD,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,cAAc,EAC5B,KAAK,EAAE,SAAS,EAChB,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CAqDtB"}
|
package/dist/core/graph.js
CHANGED
|
@@ -1,31 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { AnalysisService } from '../services/analysis.service.js';
|
|
2
|
+
import { getDb } from '../utils/db.js';
|
|
3
|
+
import { error } from '../utils/logger.js';
|
|
3
4
|
import { interviewingNode } from './nodes/interviewing.js';
|
|
4
5
|
import { planningNode } from './nodes/planning.js';
|
|
6
|
+
import { DEFAULT_CLOSING_MESSAGE } from './types/index.js';
|
|
7
|
+
function mergeState(state, update) {
|
|
8
|
+
return { ...state, ...update };
|
|
9
|
+
}
|
|
5
10
|
export async function runInterviewGraph(initialState, input, prisma) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
// Phase 1: Initialize (only on first call)
|
|
12
|
+
if (initialState.status === 'PENDING') {
|
|
13
|
+
const result = await planningNode(initialState, prisma);
|
|
14
|
+
return {
|
|
15
|
+
response: result.response || DEFAULT_CLOSING_MESSAGE,
|
|
16
|
+
nextState: mergeState(initialState, result),
|
|
17
|
+
};
|
|
12
18
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
// Guard: skip non-active states
|
|
20
|
+
if (initialState.status !== 'ACTIVE' && initialState.status !== 'WAITING') {
|
|
21
|
+
return {
|
|
22
|
+
response: DEFAULT_CLOSING_MESSAGE,
|
|
23
|
+
nextState: initialState,
|
|
24
|
+
};
|
|
17
25
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
// Phase 2: Process user input
|
|
27
|
+
if (input.content?.trim()) {
|
|
28
|
+
const result = await interviewingNode(initialState, {
|
|
29
|
+
content: input.content,
|
|
30
|
+
...(prisma != null ? { prisma } : {}),
|
|
31
|
+
});
|
|
32
|
+
const nextState = mergeState(initialState, result);
|
|
33
|
+
// If interview completed, trigger async analysis (fire-and-forget)
|
|
34
|
+
if (result.shouldContinue === false && initialState.interviewId) {
|
|
35
|
+
setImmediate(() => {
|
|
36
|
+
const interviewId = initialState.interviewId;
|
|
37
|
+
if (!interviewId)
|
|
38
|
+
return;
|
|
39
|
+
const analysisService = new AnalysisService(prisma || getDb());
|
|
40
|
+
analysisService.analyzeInterview(interviewId).catch((e) => {
|
|
41
|
+
error('Async analysis failed', {
|
|
42
|
+
interviewId: initialState.interviewId,
|
|
43
|
+
error: e instanceof Error ? e.message : String(e),
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
});
|
|
24
47
|
}
|
|
48
|
+
return {
|
|
49
|
+
response: result.response || DEFAULT_CLOSING_MESSAGE,
|
|
50
|
+
nextState,
|
|
51
|
+
};
|
|
25
52
|
}
|
|
53
|
+
// Empty message guard
|
|
26
54
|
return {
|
|
27
|
-
response:
|
|
28
|
-
nextState:
|
|
55
|
+
response: '请发送消息开始访谈。',
|
|
56
|
+
nextState: initialState,
|
|
29
57
|
};
|
|
30
58
|
}
|
|
31
59
|
//# sourceMappingURL=graph.js.map
|
package/dist/core/graph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAuC,MAAM,kBAAkB,CAAC;AAOhG,SAAS,UAAU,CAAC,KAAqB,EAAE,MAA+B;IACxE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,YAA4B,EAC5B,KAAgB,EAChB,MAAqB;IAErB,2CAA2C;IAC3C,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,uBAAuB;YACpD,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1E,OAAO;YACL,QAAQ,EAAE,uBAAuB;YACjC,SAAS,EAAE,YAAY;SACxB,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE;YAClD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAEnD,mEAAmE;QACnE,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAChE,YAAY,CAAC,GAAG,EAAE;gBAChB,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;gBAC7C,IAAI,CAAC,WAAW;oBAAE,OAAO;gBACzB,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;gBAC/D,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACxD,KAAK,CAAC,uBAAuB,EAAE;wBAC7B,WAAW,EAAE,YAAY,CAAC,WAAW;wBACrC,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;qBAClD,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,uBAAuB;YACpD,SAAS;SACV,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,YAAY;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import type { PrismaClient } from '@prisma/client';
|
|
2
|
-
import type
|
|
3
|
-
export interface TemplateContent {
|
|
4
|
-
name: string;
|
|
5
|
-
description?: string;
|
|
6
|
-
invitationPrompt: string;
|
|
7
|
-
questions: string[];
|
|
8
|
-
closingMessage?: string;
|
|
9
|
-
llmPromptTemplate?: string;
|
|
10
|
-
}
|
|
2
|
+
import { type InterviewState, type NodeOutput } from '../types/index.js';
|
|
11
3
|
export declare function interviewingNode(state: InterviewState, input: {
|
|
12
4
|
content: string;
|
|
13
5
|
prisma?: PrismaClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interviewing.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/interviewing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"interviewing.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/interviewing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,UAAU,EAEhB,MAAM,mBAAmB,CAAC;AAwH3B,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE,GAChD,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,CA0C/C"}
|
|
@@ -1,72 +1,88 @@
|
|
|
1
|
-
import { TemplateRepository } from '../../repositories/template.repository.js';
|
|
2
1
|
import { generateSmartResponse } from '../../services/followup.service.js';
|
|
3
2
|
import { info, warn } from '../../utils/logger.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
import { DEFAULT_CLOSING_MESSAGE, } from '../types/index.js';
|
|
4
|
+
import { loadTemplateContent } from './template-utils.js';
|
|
5
|
+
function routeAction(initialAction, followupCount, maxFollowups, currentQ, totalQuestions, smartResponse, closingMessage, nextQuestion) {
|
|
6
|
+
const isLastQuestion = currentQ >= totalQuestions - 1;
|
|
7
|
+
const closing = closingMessage || DEFAULT_CLOSING_MESSAGE;
|
|
8
|
+
let action = initialAction;
|
|
9
|
+
// Rule 1: Enforce followup limit - force NEXT if exceeded
|
|
10
|
+
if (action === 'FOLLOWUP' && followupCount >= maxFollowups) {
|
|
11
|
+
action = 'NEXT';
|
|
12
|
+
}
|
|
13
|
+
// Rule 2: END / shouldEndInterview
|
|
14
|
+
if (action === 'END' || action === 'shouldEndInterview') {
|
|
15
|
+
if (currentQ < totalQuestions - 1) {
|
|
16
|
+
warn('LLM tried to END prematurely — forcing NEXT', {
|
|
17
|
+
currentQ,
|
|
18
|
+
totalQuestions,
|
|
19
|
+
remainingQuestions: totalQuestions - currentQ - 1,
|
|
20
|
+
});
|
|
21
|
+
action = 'NEXT';
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return {
|
|
25
|
+
followupCount: 0,
|
|
26
|
+
currentQuestion: currentQ,
|
|
27
|
+
shouldContinue: false,
|
|
28
|
+
status: 'COMPLETED',
|
|
29
|
+
response: `${smartResponse}\n\n${closing}`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
15
32
|
}
|
|
16
|
-
|
|
33
|
+
// Rule 3: FOLLOWUP (not exceeded limit)
|
|
34
|
+
if (action === 'FOLLOWUP') {
|
|
17
35
|
return {
|
|
18
|
-
|
|
19
|
-
|
|
36
|
+
followupCount: followupCount + 1,
|
|
37
|
+
currentQuestion: currentQ,
|
|
20
38
|
shouldContinue: true,
|
|
21
|
-
response:
|
|
39
|
+
response: smartResponse,
|
|
22
40
|
};
|
|
23
41
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
const nextQuestion = content.questions[currentQ + 1];
|
|
28
|
-
const isLastQuestion = currentQ >= content.questions.length - 1;
|
|
29
|
-
if (containsMultipleQuestions(smartResult.response)) {
|
|
30
|
-
warn('LLM response contains multiple questions. Removing extra text.', {
|
|
31
|
-
text: smartResult.response.substring(0, 80),
|
|
32
|
-
});
|
|
33
|
-
const firstSentence = smartResult.response.split(/[??]/)[0].trim();
|
|
42
|
+
// Rule 4: STAY (re-ask same question) — also increments followup to prevent infinite loops
|
|
43
|
+
if (action === 'STAY') {
|
|
34
44
|
return {
|
|
35
|
-
|
|
36
|
-
currentQuestion: currentQ
|
|
37
|
-
shouldContinue:
|
|
38
|
-
response:
|
|
45
|
+
followupCount: followupCount + 1,
|
|
46
|
+
currentQuestion: currentQ,
|
|
47
|
+
shouldContinue: true,
|
|
48
|
+
response: smartResponse,
|
|
39
49
|
};
|
|
40
50
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
'非常感谢您的分享!这些信息对我们非常有价值。访谈到此结束,祝您工作顺利!';
|
|
51
|
+
// Rule 5: NEXT — advance to next question or complete
|
|
52
|
+
if (isLastQuestion) {
|
|
44
53
|
return {
|
|
45
|
-
|
|
54
|
+
followupCount: 0,
|
|
46
55
|
currentQuestion: currentQ + 1,
|
|
47
56
|
shouldContinue: false,
|
|
48
|
-
|
|
57
|
+
status: 'COMPLETED',
|
|
58
|
+
response: `${smartResponse}\n\n${closing}`,
|
|
49
59
|
};
|
|
50
60
|
}
|
|
51
|
-
return
|
|
61
|
+
return {
|
|
62
|
+
followupCount: 0,
|
|
63
|
+
currentQuestion: currentQ + 1,
|
|
64
|
+
shouldContinue: true,
|
|
65
|
+
response: nextQuestion ? `${smartResponse}\n\n${nextQuestion}` : smartResponse,
|
|
66
|
+
};
|
|
52
67
|
}
|
|
53
68
|
function buildFallbackResponse(content, currentQ, newResponses) {
|
|
54
69
|
const nextQuestion = content.questions[currentQ + 1];
|
|
55
70
|
const isLastQuestion = currentQ >= content.questions.length - 1;
|
|
56
71
|
if (isLastQuestion) {
|
|
57
|
-
const closing = buildClosingMessage(content.closingMessage);
|
|
58
72
|
return {
|
|
59
73
|
responses: newResponses,
|
|
60
74
|
currentQuestion: currentQ + 1,
|
|
75
|
+
followupCount: 0,
|
|
61
76
|
shouldContinue: false,
|
|
62
|
-
response:
|
|
77
|
+
response: content.closingMessage || DEFAULT_CLOSING_MESSAGE,
|
|
63
78
|
};
|
|
64
79
|
}
|
|
65
80
|
return {
|
|
66
81
|
responses: newResponses,
|
|
67
82
|
currentQuestion: currentQ + 1,
|
|
83
|
+
followupCount: 0,
|
|
68
84
|
shouldContinue: !!nextQuestion,
|
|
69
|
-
response: nextQuestion ||
|
|
85
|
+
response: nextQuestion || DEFAULT_CLOSING_MESSAGE,
|
|
70
86
|
};
|
|
71
87
|
}
|
|
72
88
|
export async function interviewingNode(state, input) {
|
|
@@ -78,21 +94,19 @@ export async function interviewingNode(state, input) {
|
|
|
78
94
|
{ questionId: `q${currentQ}`, content: input.content, isFollowup: false },
|
|
79
95
|
];
|
|
80
96
|
try {
|
|
81
|
-
const smartResult = await generateSmartResponse(state, input.content, currentQuestion, content.llmPromptTemplate, currentQ >= content.questions.length - 1);
|
|
97
|
+
const smartResult = await generateSmartResponse(state, input.content, currentQuestion, content.llmPromptTemplate, currentQ >= content.questions.length - 1, content.questions.length);
|
|
82
98
|
info('Smart response generated', {
|
|
83
99
|
currentQ,
|
|
84
100
|
action: smartResult.action,
|
|
85
101
|
response: smartResult.response.substring(0, 50),
|
|
86
102
|
});
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
103
|
+
const nextQ = content.questions[currentQ + 1];
|
|
104
|
+
const handled = smartResult.shouldEndInterview
|
|
105
|
+
? routeAction('END', state.followupCount, state.maxFollowups, currentQ, content.questions.length, smartResult.response, content.closingMessage, nextQ)
|
|
106
|
+
: routeAction(smartResult.action, state.followupCount, state.maxFollowups, currentQ, content.questions.length, smartResult.response, content.closingMessage, nextQ);
|
|
91
107
|
return {
|
|
92
108
|
responses: newResponses,
|
|
93
|
-
|
|
94
|
-
shouldContinue: !!nextQuestion,
|
|
95
|
-
response: smartResult.response ? `${smartResult.response}\n\n${nextQuestion}` : nextQuestion,
|
|
109
|
+
...handled,
|
|
96
110
|
};
|
|
97
111
|
}
|
|
98
112
|
catch (e) {
|
|
@@ -102,29 +116,4 @@ export async function interviewingNode(state, input) {
|
|
|
102
116
|
}
|
|
103
117
|
return buildFallbackResponse(content, currentQ, newResponses);
|
|
104
118
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Detect multiple questions in a text. If > 1 question mark, returns true.
|
|
107
|
-
*/
|
|
108
|
-
function containsMultipleQuestions(text) {
|
|
109
|
-
const matches = text.match(/[??]/g);
|
|
110
|
-
return matches ? matches.length > 1 : false;
|
|
111
|
-
}
|
|
112
|
-
async function loadTemplateContent(templateId, prisma) {
|
|
113
|
-
if (templateId && prisma) {
|
|
114
|
-
const repo = new TemplateRepository(prisma);
|
|
115
|
-
const template = await repo.findById(templateId);
|
|
116
|
-
if (template)
|
|
117
|
-
return JSON.parse(template.content);
|
|
118
|
-
}
|
|
119
|
-
return {
|
|
120
|
-
name: 'Default Interview',
|
|
121
|
-
invitationPrompt: '您好!欢迎参与本次访谈。',
|
|
122
|
-
questions: [
|
|
123
|
-
'请简单介绍一下您的工作经历?',
|
|
124
|
-
'您在工作中遇到过最大的挑战是什么?',
|
|
125
|
-
'您是如何解决这个挑战的?',
|
|
126
|
-
'您对未来的职业规划是什么?',
|
|
127
|
-
],
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
119
|
//# sourceMappingURL=interviewing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interviewing.js","sourceRoot":"","sources":["../../../src/core/nodes/interviewing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interviewing.js","sourceRoot":"","sources":["../../../src/core/nodes/interviewing.ts"],"names":[],"mappings":"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"}
|