dsh-scout 0.9.2 → 0.9.4
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/CHANGELOG.md +76 -1
- package/README.en.md +140 -47
- package/README.md +140 -47
- package/dist/i18n.d.ts +157 -1
- package/dist/i18n.js +354 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +360 -88
- package/dist/model.d.ts +62 -9
- package/dist/model.js +655 -134
- package/docs/dsh-scout-product-contract.md +22 -1
- package/package.json +4 -1
- package/scripts/acceptance-report.mjs +622 -0
- package/scripts/check-release.mjs +228 -0
- package/scripts/profile-smoke.mjs +12 -15
- package/scripts/smoke-tool-call.mjs +43 -0
- package/tests/acceptance.test.mjs +118 -42
- package/tests/model.test.mjs +301 -69
- package/tests/package.test.mjs +572 -3
- package/tests/tools.test.mjs +382 -16
package/dist/i18n.js
CHANGED
|
@@ -29,8 +29,175 @@ const ZH_CN = {
|
|
|
29
29
|
claimLedger: '## Claim ledger',
|
|
30
30
|
sources: '## Sources',
|
|
31
31
|
coverage: '## Coverage',
|
|
32
|
+
identity: '## 主体核验',
|
|
32
33
|
interviewQuestions: '## Interview questions',
|
|
33
34
|
},
|
|
35
|
+
identity: {
|
|
36
|
+
legalEntity: '- 法定主体:{value}',
|
|
37
|
+
registrationNumber: '- 统一社会信用代码:{value}',
|
|
38
|
+
region: '- 注册地:{value}',
|
|
39
|
+
representative: '- 法定代表人:{value}',
|
|
40
|
+
brandRelationship: '- 品牌关系:{value}',
|
|
41
|
+
tier: '- 核验等级:{value}',
|
|
42
|
+
tiers: {
|
|
43
|
+
verified: '已核验(E3 权威来源支撑注册号)',
|
|
44
|
+
corroborated: '已交叉核验(E2,多源一致;非官方登记核验)',
|
|
45
|
+
needs_verification: '未核验',
|
|
46
|
+
},
|
|
47
|
+
fieldLabels: {
|
|
48
|
+
legalEntity: '法定主体',
|
|
49
|
+
registrationNumber: '统一社会信用代码',
|
|
50
|
+
registeredRegion: '注册地',
|
|
51
|
+
legalRepresentative: '法定代表人',
|
|
52
|
+
brandRelationship: '品牌关系',
|
|
53
|
+
},
|
|
54
|
+
evidence: '- 证据来源:{value}',
|
|
55
|
+
fieldEvidence: '- {field} 证据:{value}',
|
|
56
|
+
unknown: '未知',
|
|
57
|
+
},
|
|
58
|
+
report: {
|
|
59
|
+
meta: {
|
|
60
|
+
role: '岗位',
|
|
61
|
+
location: '地点',
|
|
62
|
+
evidenceAsOf: '证据截至',
|
|
63
|
+
decision: '判断',
|
|
64
|
+
objective: '目标',
|
|
65
|
+
unknownLocation: '未指定',
|
|
66
|
+
},
|
|
67
|
+
readingGuide: '> 阅读顺序:30 秒结论 → 主体 → 已确认事实 → 待确认 → 风险 → 面试问题 → 附录(证据台账)',
|
|
68
|
+
confidenceLegend: '> 可信度:已核实=多来源一致;有报道=单一来源;推断=由事实推出;未知=没查到;未找到证据=不代表不存在',
|
|
69
|
+
quick: {
|
|
70
|
+
heading: '## 30 秒结论',
|
|
71
|
+
entity: '主体:{entity}({registrationNumber}),{region},法人 {representative}——已核实。',
|
|
72
|
+
entityUnverified: '主体:{entity}——尚未核验。',
|
|
73
|
+
business: '业务:{text}(已核实)',
|
|
74
|
+
businessUnknown: '业务:公开信息未形成可核实的产品描述。',
|
|
75
|
+
capital: '资本:{text}{suffix}',
|
|
76
|
+
capitalSuffix: ';另有 {count} 条融资/工商变更线索。',
|
|
77
|
+
capitalUnknown: '资本:未找到公开融资信息。',
|
|
78
|
+
confirmHeading: '**最该先确认的 3 件事**',
|
|
79
|
+
confirmIdentity: '取得官方登记证据(营业执照或工商公示页),确认合同主体与信用代码',
|
|
80
|
+
confirmRole: '确认岗位是否真实在招、汇报给谁、有多大授权(只能见面问)',
|
|
81
|
+
confirmRisk: '核实口碑/面试流程类单方说法(不影响主体,但影响体验预期)',
|
|
82
|
+
},
|
|
83
|
+
sections: {
|
|
84
|
+
identity: '## 1. 公司与主体(已确认)',
|
|
85
|
+
confirmed: '## 2. 已确认的事实(阶段:可直接使用)',
|
|
86
|
+
open: '## 3. 线索与待确认(阶段:先别当事实)',
|
|
87
|
+
risk: '## 4. 风险与红旗(阶段:已识别)',
|
|
88
|
+
interview: '## 5. 面试问题(按主题,最多 12 条)',
|
|
89
|
+
gap: '## 6. 距离下一步还差什么',
|
|
90
|
+
appendixSources: '## 附录 A · 来源表',
|
|
91
|
+
appendixLedger: '## 附录 B · 主张台账(技术可追溯)',
|
|
92
|
+
appendixCoverage: '## 附录 C · 调查覆盖度',
|
|
93
|
+
appendixGlossary: '## 附录 D · 术语表',
|
|
94
|
+
},
|
|
95
|
+
themes: { business: '业务与产品', capital: '资本与融资', organization: '组织与团队' },
|
|
96
|
+
openSubheads: {
|
|
97
|
+
interview: '### 只能面试确认',
|
|
98
|
+
external: '### 还能通过公开渠道再核实',
|
|
99
|
+
conflict: '### 说法冲突(需要裁决)',
|
|
100
|
+
},
|
|
101
|
+
labels: { ask: '要问', nextStep: '下一步', advice: '建议', tier: '核验等级', means: '这意味着', identityEvidence: '主体核验字段来源' },
|
|
102
|
+
tier: {
|
|
103
|
+
verified: '已核验:有官方/权威来源支撑统一社会信用代码,可直接引用。',
|
|
104
|
+
corroborated: '已交叉核验:多个独立来源(工商聚合、应用商店等)在信用代码与法人上一致;尚未取得官方登记页,签约前仍需看营业执照。',
|
|
105
|
+
unverified: '未核验:尚无足够来源确认主体。',
|
|
106
|
+
meansVerified: '可以直接按该主体做后续判断。',
|
|
107
|
+
meansOther: '可以按该主体继续尽调与判断,但把它视为“未拿到官方盖章的事实”,关键动作(签约、背调、开票)前需复核。',
|
|
108
|
+
},
|
|
109
|
+
confirmedItem: '- {text}\n - {status} · {level} · {sources}{captured}',
|
|
110
|
+
captured: '(采集于 {date})',
|
|
111
|
+
openInterviewLine: '{status} · {level} · {ask}:{question}',
|
|
112
|
+
openExternalLine: '{status} · {level} · {next}:{action}',
|
|
113
|
+
riskLine: '- {text}({status} · {level})\n - {advice}:{action}',
|
|
114
|
+
gapLine: {
|
|
115
|
+
why: '- **为什么现在还是「{decision}」**:{sentence}',
|
|
116
|
+
toProceed: '- **补齐后可以进入「可以推进」**:',
|
|
117
|
+
minActions: '- **最小行动清单**:',
|
|
118
|
+
identityItem: '主体:取得官方登记页/营业执照(或明确接受“多源交叉核验”的残余风险)',
|
|
119
|
+
},
|
|
120
|
+
decisionSentences: {
|
|
121
|
+
proceed: '关键结论都有来源支撑,可以进入下一轮,并在现场继续核验。',
|
|
122
|
+
identity: '公司主体还没有核验,现在还不能决定是否推进。',
|
|
123
|
+
corroborated: '公司主体已多源交叉核验,但还没拿到官方登记证据,仍有 {open} 项关键结论未确认,现在还不能决定是否推进。',
|
|
124
|
+
unresolved: '仍有 {open} 项影响判断的结论未确认,现在还不能决定是否推进。',
|
|
125
|
+
stop: '存在互相矛盾的关键事实,先解决冲突再决定。',
|
|
126
|
+
},
|
|
127
|
+
questionThemes: {
|
|
128
|
+
role: '岗位与团队',
|
|
129
|
+
capital: '资本与现金',
|
|
130
|
+
product: '产品与市场',
|
|
131
|
+
process: '流程与待遇',
|
|
132
|
+
general: '通用',
|
|
133
|
+
},
|
|
134
|
+
questionKeywords: {
|
|
135
|
+
role: ['岗位', '在招', '汇报', '授权', '编制', '团队', '离职', '组织'],
|
|
136
|
+
capital: ['融资', '轮次', '金额', '现金', '股东', '股权'],
|
|
137
|
+
product: ['产品', '收入', '竞品', '市场', '差异化', '增长'],
|
|
138
|
+
process: ['面试', '英语', '薪资', '流程', '办公', '通勤'],
|
|
139
|
+
},
|
|
140
|
+
tableHeaders: {
|
|
141
|
+
item: '项目',
|
|
142
|
+
value: '内容',
|
|
143
|
+
id: '编号',
|
|
144
|
+
source: '来源',
|
|
145
|
+
type: '类型',
|
|
146
|
+
level: '可信度',
|
|
147
|
+
capturedAt: '采集日期',
|
|
148
|
+
summary: '结论摘要',
|
|
149
|
+
stage: '阶段/证据',
|
|
150
|
+
impact: '影响',
|
|
151
|
+
next: '下一步',
|
|
152
|
+
code: '代码',
|
|
153
|
+
label: '面向读者的说法',
|
|
154
|
+
meaning: '含义',
|
|
155
|
+
},
|
|
156
|
+
coverage: {
|
|
157
|
+
untouched: '未调查',
|
|
158
|
+
openOnly: '仅 {open} 条待确认线索',
|
|
159
|
+
verified: '{verified} 条已核实',
|
|
160
|
+
withOpen: '{verified} 条已核实,{open} 条待确认',
|
|
161
|
+
},
|
|
162
|
+
sourceTypes: {
|
|
163
|
+
company_registry: '工商登记',
|
|
164
|
+
regulator: '政府/监管',
|
|
165
|
+
official_filing: '官方文件',
|
|
166
|
+
company_official: '公司官方',
|
|
167
|
+
job_posting: '招聘平台',
|
|
168
|
+
independent_media: '独立媒体',
|
|
169
|
+
public_database: '公开数据库',
|
|
170
|
+
user_provided: '用户提供',
|
|
171
|
+
user_provided_historical_report: '用户历史材料',
|
|
172
|
+
other: '其他',
|
|
173
|
+
},
|
|
174
|
+
levelLabels: {
|
|
175
|
+
E3: '官方/权威来源',
|
|
176
|
+
E2: '独立来源',
|
|
177
|
+
E1: '单方说法',
|
|
178
|
+
E0: '未找到证据',
|
|
179
|
+
},
|
|
180
|
+
levelMeanings: {
|
|
181
|
+
E3: '政府登记、监管、官方文件;可直接引用',
|
|
182
|
+
E2: '独立媒体、公开数据库、招聘平台;可交叉核对',
|
|
183
|
+
E1: '公司自述、招聘信息、匿名评价、用户提供',
|
|
184
|
+
E0: '没找到证据,不等于不存在',
|
|
185
|
+
},
|
|
186
|
+
statusMeanings: {
|
|
187
|
+
verified: '多来源一致',
|
|
188
|
+
reported: '单一来源转述,未交叉',
|
|
189
|
+
inferred: '由事实推出,不是直接证据',
|
|
190
|
+
contradicted: '两个来源口径不一致',
|
|
191
|
+
unknown: '没查到,需要补',
|
|
192
|
+
needs_verification: '有线索但未核实',
|
|
193
|
+
},
|
|
194
|
+
empty: {
|
|
195
|
+
noVerified: '- 暂无已核实的事实',
|
|
196
|
+
noOpen: '- 暂无待确认事项',
|
|
197
|
+
noRisks: '- 暂无已识别风险',
|
|
198
|
+
noQuestions: '- 暂无面试问题',
|
|
199
|
+
},
|
|
200
|
+
},
|
|
34
201
|
claim: {
|
|
35
202
|
line: '- **{status} / {evidenceLevel} / {impact}** {text}(维度:{dimension};来源:{sourceIds};置信说明:{confidenceNote};下一步:{nextAction}{history})',
|
|
36
203
|
noSourceIds: '无来源',
|
|
@@ -47,6 +214,7 @@ const ZH_CN = {
|
|
|
47
214
|
},
|
|
48
215
|
coverage: {
|
|
49
216
|
entry: '- {dimension}({label}):已核验 {verified} / 待核验 {open} / 未调查:{untouched}',
|
|
217
|
+
identityEntry: '- {dimension}({label}):已核验 {verified} / 待核验 {open} / 未调查:{untouched};主体核验:{identity}',
|
|
50
218
|
untouchedLine: '未调查维度({count}):{dimensions}',
|
|
51
219
|
yes: '是',
|
|
52
220
|
no: '否',
|
|
@@ -60,6 +228,8 @@ const ZH_CN = {
|
|
|
60
228
|
},
|
|
61
229
|
decisionReasons: {
|
|
62
230
|
identity: '公司主体仍未核验,不能直接推进。',
|
|
231
|
+
identityCorroborated: '公司主体已完成多源交叉核验(E2),但仍未取得 E3 官方登记证据,且尚有未核验结论,不能直接推进。',
|
|
232
|
+
identityCorroboratedClear: '公司主体已完成多源交叉核验(E2),但尚未取得 E3 官方登记证据,不能直接推进。',
|
|
63
233
|
unresolved: '仍有阻断级或重要结论未完成核验,不能直接推进。',
|
|
64
234
|
missingDimension: '缺少已核验的必需维度:{dimension}。',
|
|
65
235
|
proceed: '当前关键结论均有来源支撑,建议进入下一轮并继续现场核验。',
|
|
@@ -126,12 +296,19 @@ const ZH_CN = {
|
|
|
126
296
|
autoConfidenceNote: '由采集项自动登记,来源 {sourceId}',
|
|
127
297
|
autoNextAction: '核验该主张并补充独立来源',
|
|
128
298
|
},
|
|
299
|
+
nextActions: {
|
|
300
|
+
verifyIdentity: '核验公司主体(补充 E3 官方来源,或两家独立工商源交叉验证)',
|
|
301
|
+
collectSources: '用 scout_search / scout_ingest 登记第一批来源',
|
|
302
|
+
missingDimension: '补齐必需维度:{dimension}',
|
|
303
|
+
conclude: '整理报告并准备进入下一轮',
|
|
304
|
+
},
|
|
129
305
|
comparison: {
|
|
130
306
|
title: '# 公司/岗位对比({count} 个案例)',
|
|
131
307
|
overviewHeading: '## 总览',
|
|
132
308
|
summary: '- **{title}**:决策 **{decision}**;主体{identity};主张 {claimCount} 条{countsSuffix}',
|
|
133
309
|
countsSuffix: '({counts})',
|
|
134
310
|
identityVerified: '已核验',
|
|
311
|
+
identityCorroborated: '已交叉核验',
|
|
135
312
|
identityUnverified: '待核验',
|
|
136
313
|
decisionTableHeading: '## 决策与主体核验对比',
|
|
137
314
|
tableHeader: '| 案例 | 决策 | 主体核验 | 主张数 |',
|
|
@@ -167,8 +344,175 @@ const EN = {
|
|
|
167
344
|
claimLedger: '## Claim ledger',
|
|
168
345
|
sources: '## Sources',
|
|
169
346
|
coverage: '## Coverage',
|
|
347
|
+
identity: '## Verified subject',
|
|
170
348
|
interviewQuestions: '## Interview questions',
|
|
171
349
|
},
|
|
350
|
+
identity: {
|
|
351
|
+
legalEntity: '- Legal entity: {value}',
|
|
352
|
+
registrationNumber: '- Unified social credit identifier: {value}',
|
|
353
|
+
region: '- Registered region: {value}',
|
|
354
|
+
representative: '- Legal representative: {value}',
|
|
355
|
+
brandRelationship: '- Brand relationship: {value}',
|
|
356
|
+
tier: '- Verification tier: {value}',
|
|
357
|
+
tiers: {
|
|
358
|
+
verified: 'verified (E3 authoritative source backs the registration number)',
|
|
359
|
+
corroborated: 'corroborated (E2, multiple independent sources agree; not an official registry check)',
|
|
360
|
+
needs_verification: 'not verified',
|
|
361
|
+
},
|
|
362
|
+
fieldLabels: {
|
|
363
|
+
legalEntity: 'Legal entity',
|
|
364
|
+
registrationNumber: 'Unified social credit identifier',
|
|
365
|
+
registeredRegion: 'Registered region',
|
|
366
|
+
legalRepresentative: 'Legal representative',
|
|
367
|
+
brandRelationship: 'Brand relationship',
|
|
368
|
+
},
|
|
369
|
+
evidence: '- Evidence sources: {value}',
|
|
370
|
+
fieldEvidence: '- {field} evidence: {value}',
|
|
371
|
+
unknown: 'unknown',
|
|
372
|
+
},
|
|
373
|
+
report: {
|
|
374
|
+
meta: {
|
|
375
|
+
role: 'Role',
|
|
376
|
+
location: 'Location',
|
|
377
|
+
evidenceAsOf: 'Evidence as of',
|
|
378
|
+
decision: 'Decision',
|
|
379
|
+
objective: 'Objective',
|
|
380
|
+
unknownLocation: 'unspecified',
|
|
381
|
+
},
|
|
382
|
+
readingGuide: '> Reading order: 30-second verdict -> subject -> confirmed facts -> open items -> risks -> interview questions -> appendices (evidence ledger)',
|
|
383
|
+
confidenceLegend: '> Confidence: verified=multiple sources agree; reported=single source; inferred=derived; unknown=not found; no-evidence-found does not mean absent',
|
|
384
|
+
quick: {
|
|
385
|
+
heading: '## 30-second verdict',
|
|
386
|
+
entity: 'Subject: {entity} ({registrationNumber}), {region}, legal representative {representative} - verified.',
|
|
387
|
+
entityUnverified: 'Subject: {entity} - not verified yet.',
|
|
388
|
+
business: 'Business: {text} (verified)',
|
|
389
|
+
businessUnknown: 'Business: public sources do not support a verifiable product description.',
|
|
390
|
+
capital: 'Capital: {text}{suffix}',
|
|
391
|
+
capitalSuffix: '; {count} more funding or registration leads.',
|
|
392
|
+
capitalUnknown: 'Capital: no public funding information found.',
|
|
393
|
+
confirmHeading: '**Top 3 things to confirm first**',
|
|
394
|
+
confirmIdentity: 'Obtain an official registration record (business licence or registry filing) and confirm the contracting entity and credit code',
|
|
395
|
+
confirmRole: 'Confirm the role is open, who it reports to, and how much authority it carries (interview only)',
|
|
396
|
+
confirmRisk: 'Verify the single-source reputation and interview-process claims (not decision-blocking, but expectation-setting)',
|
|
397
|
+
},
|
|
398
|
+
sections: {
|
|
399
|
+
identity: '## 1. The company and its legal subject (confirmed)',
|
|
400
|
+
confirmed: '## 2. Confirmed facts (stage: safe to use)',
|
|
401
|
+
open: '## 3. Leads and open items (stage: do not treat as facts yet)',
|
|
402
|
+
risk: '## 4. Risks and red flags (stage: identified)',
|
|
403
|
+
interview: '## 5. Interview questions (by theme, up to 12)',
|
|
404
|
+
gap: '## 6. What still stands between you and the next step',
|
|
405
|
+
appendixSources: '## Appendix A - Sources',
|
|
406
|
+
appendixLedger: '## Appendix B - Claim ledger (technical audit trail)',
|
|
407
|
+
appendixCoverage: '## Appendix C - Investigation coverage',
|
|
408
|
+
appendixGlossary: '## Appendix D - Glossary',
|
|
409
|
+
},
|
|
410
|
+
themes: { business: 'Business and product', capital: 'Capital and funding', organization: 'Organization and team' },
|
|
411
|
+
openSubheads: {
|
|
412
|
+
interview: '### Interview-only',
|
|
413
|
+
external: '### Still publicly checkable',
|
|
414
|
+
conflict: '### Conflicting accounts (needs a ruling)',
|
|
415
|
+
},
|
|
416
|
+
labels: { ask: 'ask', nextStep: 'next step', advice: 'suggested action', tier: 'Verification tier', means: 'What this means', identityEvidence: 'Identity field provenance' },
|
|
417
|
+
tier: {
|
|
418
|
+
verified: 'Verified: an authoritative source backs the credit code; safe to quote.',
|
|
419
|
+
corroborated: 'Corroborated: several independent sources agree on the credit code and legal representative; no official registry page yet, so check the business licence before signing.',
|
|
420
|
+
unverified: 'Not verified: not enough sources confirm the subject yet.',
|
|
421
|
+
meansVerified: 'You can make decisions on this subject.',
|
|
422
|
+
meansOther: 'Continue diligence and judgement on this subject, but treat it as "not officially stamped"; re-check before signing, reference checks, or invoicing.',
|
|
423
|
+
},
|
|
424
|
+
confirmedItem: '- {text}\n - {status} · {level} · {sources}{captured}',
|
|
425
|
+
captured: ' (captured {date})',
|
|
426
|
+
openInterviewLine: '{status} · {level} · {ask}: {question}',
|
|
427
|
+
openExternalLine: '{status} · {level} · {next}: {action}',
|
|
428
|
+
riskLine: '- {text} ({status} · {level})\n - {advice}: {action}',
|
|
429
|
+
gapLine: {
|
|
430
|
+
why: '- **Why the verdict is still "{decision}"**: {sentence}',
|
|
431
|
+
toProceed: '- **What would move it to "proceed"**:',
|
|
432
|
+
minActions: '- **Smallest action list**:',
|
|
433
|
+
identityItem: 'Subject: obtain the official registry page or business licence (or explicitly accept the residual risk of multi-source corroboration)',
|
|
434
|
+
},
|
|
435
|
+
decisionSentences: {
|
|
436
|
+
proceed: 'Key claims are sourced; proceed to the next round and keep verifying on site.',
|
|
437
|
+
identity: 'The legal subject is not verified yet, so the decision cannot be made.',
|
|
438
|
+
corroborated: 'The legal subject is corroborated by multiple sources, but no official registry evidence exists yet and {open} decision-relevant claims remain open.',
|
|
439
|
+
unresolved: '{open} decision-relevant claims remain open, so the decision cannot be made.',
|
|
440
|
+
stop: 'Key facts contradict each other; resolve the conflict first.',
|
|
441
|
+
},
|
|
442
|
+
questionThemes: {
|
|
443
|
+
role: 'Role and team',
|
|
444
|
+
capital: 'Capital and cash',
|
|
445
|
+
product: 'Product and market',
|
|
446
|
+
process: 'Process and compensation',
|
|
447
|
+
general: 'General',
|
|
448
|
+
},
|
|
449
|
+
questionKeywords: {
|
|
450
|
+
role: ['role', 'open', 'report', 'authority', 'headcount', 'team', 'attrition', 'organization'],
|
|
451
|
+
capital: ['funding', 'round', 'amount', 'runway', 'cash', 'shareholder', 'equity'],
|
|
452
|
+
product: ['product', 'revenue', 'competitor', 'market', 'differentiation', 'growth'],
|
|
453
|
+
process: ['interview', 'english', 'salary', 'process', 'office', 'commute'],
|
|
454
|
+
},
|
|
455
|
+
tableHeaders: {
|
|
456
|
+
item: 'Item',
|
|
457
|
+
value: 'Detail',
|
|
458
|
+
id: 'Id',
|
|
459
|
+
source: 'Source',
|
|
460
|
+
type: 'Type',
|
|
461
|
+
level: 'Confidence',
|
|
462
|
+
capturedAt: 'Captured',
|
|
463
|
+
summary: 'Claim',
|
|
464
|
+
stage: 'Stage/evidence',
|
|
465
|
+
impact: 'Impact',
|
|
466
|
+
next: 'Next step',
|
|
467
|
+
code: 'Code',
|
|
468
|
+
label: 'Reader-facing label',
|
|
469
|
+
meaning: 'Meaning',
|
|
470
|
+
},
|
|
471
|
+
coverage: {
|
|
472
|
+
untouched: 'not investigated',
|
|
473
|
+
openOnly: 'only {open} open lead(s)',
|
|
474
|
+
verified: '{verified} verified',
|
|
475
|
+
withOpen: '{verified} verified, {open} open',
|
|
476
|
+
},
|
|
477
|
+
sourceTypes: {
|
|
478
|
+
company_registry: 'Registry',
|
|
479
|
+
regulator: 'Government/regulator',
|
|
480
|
+
official_filing: 'Official filing',
|
|
481
|
+
company_official: 'Company official',
|
|
482
|
+
job_posting: 'Job platform',
|
|
483
|
+
independent_media: 'Independent media',
|
|
484
|
+
public_database: 'Public database',
|
|
485
|
+
user_provided: 'User provided',
|
|
486
|
+
user_provided_historical_report: 'User history',
|
|
487
|
+
other: 'Other',
|
|
488
|
+
},
|
|
489
|
+
levelLabels: {
|
|
490
|
+
E3: 'Official/authoritative',
|
|
491
|
+
E2: 'Independent source',
|
|
492
|
+
E1: 'Single-party account',
|
|
493
|
+
E0: 'No evidence found',
|
|
494
|
+
},
|
|
495
|
+
levelMeanings: {
|
|
496
|
+
E3: 'Registry, regulator, or official document; safe to quote',
|
|
497
|
+
E2: 'Independent media, public database, job platform; cross-checkable',
|
|
498
|
+
E1: 'Company self-description, job posting, anonymous review, user-provided',
|
|
499
|
+
E0: 'Nothing found; absence of evidence is not evidence of absence',
|
|
500
|
+
},
|
|
501
|
+
statusMeanings: {
|
|
502
|
+
verified: 'multiple sources agree',
|
|
503
|
+
reported: 'single source, not cross-checked',
|
|
504
|
+
inferred: 'derived from facts, not direct evidence',
|
|
505
|
+
contradicted: 'sources disagree',
|
|
506
|
+
unknown: 'not found yet',
|
|
507
|
+
needs_verification: 'lead exists but unverified',
|
|
508
|
+
},
|
|
509
|
+
empty: {
|
|
510
|
+
noVerified: '- No confirmed facts yet',
|
|
511
|
+
noOpen: '- No open items',
|
|
512
|
+
noRisks: '- No identified risks yet',
|
|
513
|
+
noQuestions: '- No interview questions yet',
|
|
514
|
+
},
|
|
515
|
+
},
|
|
172
516
|
claim: {
|
|
173
517
|
line: '- **{status} / {evidenceLevel} / {impact}** {text} (dimension: {dimension}; sources: {sourceIds}; confidence: {confidenceNote}; next action: {nextAction}{history})',
|
|
174
518
|
noSourceIds: 'no source',
|
|
@@ -185,6 +529,7 @@ const EN = {
|
|
|
185
529
|
},
|
|
186
530
|
coverage: {
|
|
187
531
|
entry: '- {dimension} ({label}): verified {verified} / open {open} / untouched: {untouched}',
|
|
532
|
+
identityEntry: '- {dimension} ({label}): verified {verified} / open {open} / untouched: {untouched}; subject: {identity}',
|
|
188
533
|
untouchedLine: 'Untouched dimensions ({count}): {dimensions}',
|
|
189
534
|
yes: 'yes',
|
|
190
535
|
no: 'no',
|
|
@@ -198,6 +543,8 @@ const EN = {
|
|
|
198
543
|
},
|
|
199
544
|
decisionReasons: {
|
|
200
545
|
identity: 'The company identity is not verified yet, so we cannot proceed.',
|
|
546
|
+
identityCorroborated: 'The company identity is corroborated by multiple independent sources (E2), but no E3 official registry evidence exists yet and some claims remain unverified, so we cannot proceed.',
|
|
547
|
+
identityCorroboratedClear: 'The company identity is corroborated by multiple independent sources (E2), but no E3 official registry evidence exists yet, so we cannot proceed.',
|
|
201
548
|
unresolved: 'Blocking or material claims are still unverified, so we cannot proceed.',
|
|
202
549
|
missingDimension: 'Missing verified required dimension: {dimension}.',
|
|
203
550
|
proceed: 'All key claims are backed by sources; proceed to the next round and keep verifying on site.',
|
|
@@ -264,12 +611,19 @@ const EN = {
|
|
|
264
611
|
autoConfidenceNote: 'Auto-registered from an ingested item; source {sourceId}',
|
|
265
612
|
autoNextAction: 'Verify this claim and add an independent source',
|
|
266
613
|
},
|
|
614
|
+
nextActions: {
|
|
615
|
+
verifyIdentity: 'Verify the company identity (add an E3 official source, or cross-check two independent registries)',
|
|
616
|
+
collectSources: 'Register the first sources with scout_search / scout_ingest',
|
|
617
|
+
missingDimension: 'Cover the required dimension: {dimension}',
|
|
618
|
+
conclude: 'Wrap up the report and prepare for the next round',
|
|
619
|
+
},
|
|
267
620
|
comparison: {
|
|
268
621
|
title: '# Company / role comparison ({count} cases)',
|
|
269
622
|
overviewHeading: '## Overview',
|
|
270
623
|
summary: '- **{title}**: decision **{decision}**; identity {identity}; claims: {claimCount}{countsSuffix}',
|
|
271
624
|
countsSuffix: ' ({counts})',
|
|
272
625
|
identityVerified: 'verified',
|
|
626
|
+
identityCorroborated: 'corroborated',
|
|
273
627
|
identityUnverified: 'unverified',
|
|
274
628
|
decisionTableHeading: '## Decision and identity comparison',
|
|
275
629
|
tableHeader: '| Case | Decision | Identity | Claims |',
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,23 @@ import z from '@deepseek-ai/schemastery';
|
|
|
3
3
|
import { type ScoutLanguage } from './i18n.js';
|
|
4
4
|
export declare const name = "dsh-scout";
|
|
5
5
|
export declare const inject: string[];
|
|
6
|
+
/**
|
|
7
|
+
* The version this source tree ships, stated as a literal.
|
|
8
|
+
*
|
|
9
|
+
* It is deliberately never read back from `package.json`. A release checklist
|
|
10
|
+
* anchor only works when the version is asserted in two independent places: the
|
|
11
|
+
* assertion compares this literal against the manifest, so a bump that updates
|
|
12
|
+
* one and forgets the other fails the suite instead of shipping silently.
|
|
13
|
+
* `tests/acceptance.test.mjs` pins this constant, `package.json` and the
|
|
14
|
+
* `/scout status` output to the same string.
|
|
15
|
+
*
|
|
16
|
+
* Where this reaches a user: `runScoutCommand` prints it in `/scout status`.
|
|
17
|
+
* It cannot be printed at load time — a plugin's log output is not visible in
|
|
18
|
+
* any DSH surface (cordis only buffers it in memory), and a plugin that failed
|
|
19
|
+
* to load never runs at all, so "is it loaded, and which version?" is answered
|
|
20
|
+
* by the settings plugin list instead.
|
|
21
|
+
*/
|
|
22
|
+
export declare const PLUGIN_VERSION = "0.9.4";
|
|
6
23
|
export interface Config {
|
|
7
24
|
/** Default directory for case exports; case files land under `<scoutDir>/<caseId>/`. */
|
|
8
25
|
scoutDir?: string;
|