dsh-llm-verifier 0.1.13 → 0.1.14
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/LICENSE +22 -22
- package/README.md +301 -301
- package/cordis.patch.yml +4 -4
- package/lib/client.js +176 -14
- package/lib/index.js +418 -43
- package/lib/types/client-i18n.d.ts +27 -0
- package/lib/types/client-i18n.js +18 -0
- package/lib/types/client.d.ts +15 -2
- package/lib/types/client.js +134 -9
- package/lib/types/config.d.ts +4 -0
- package/lib/types/config.js +5 -3
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.js +185 -4
- package/lib/types/plan-gate.d.ts +14 -0
- package/lib/types/plan-gate.js +70 -0
- package/lib/types/router.d.ts +10 -1
- package/lib/types/router.js +37 -7
- package/lib/types/session.js +25 -10
- package/lib/types/team-gate.d.ts +11 -0
- package/lib/types/team-gate.js +51 -0
- package/package.json +112 -112
- package/src/auto.test.ts +86 -86
- package/src/auto.ts +133 -133
- package/src/cache.ts +115 -115
- package/src/caller.test.ts +34 -34
- package/src/caller.ts +151 -151
- package/src/client-i18n.ts +18 -0
- package/src/client.tsx +385 -213
- package/src/config.ts +189 -183
- package/src/core.test.ts +71 -71
- package/src/core.ts +205 -205
- package/src/engine.test.ts +136 -136
- package/src/engine.ts +140 -140
- package/src/images.ts +33 -33
- package/src/index.ts +416 -247
- package/src/parity.test.ts +85 -85
- package/src/plan-gate.test.ts +56 -0
- package/src/plan-gate.ts +77 -0
- package/src/router.test.ts +107 -89
- package/src/router.ts +349 -309
- package/src/session.test.ts +53 -36
- package/src/session.ts +117 -103
- package/src/statistics.test.ts +80 -80
- package/src/statistics.ts +328 -328
- package/src/team-gate.test.ts +56 -0
- package/src/team-gate.ts +63 -0
- package/src/top-logprobs.test.ts +84 -84
- package/src/top-logprobs.ts +153 -153
- package/src/topic-storage.test.ts +31 -31
- package/src/topic-storage.ts +42 -42
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { sanitizeVerifierText } from "./session.js";
|
|
2
|
+
export function detectPlanExit(events, fromSeq = 0) {
|
|
3
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
4
|
+
const event = events[i];
|
|
5
|
+
if (event.seq < fromSeq)
|
|
6
|
+
break;
|
|
7
|
+
if (event.type === 'tool/call' && event.data.name === 'exit_plan_mode') {
|
|
8
|
+
let planText = '';
|
|
9
|
+
try {
|
|
10
|
+
const parsed = JSON.parse(event.data.arguments);
|
|
11
|
+
if (typeof parsed.plan === 'string' && parsed.plan.trim()) {
|
|
12
|
+
planText = parsed.plan.trim();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch { }
|
|
16
|
+
if (!planText) {
|
|
17
|
+
for (let j = i - 1; j >= 0; j--) {
|
|
18
|
+
const prev = events[j];
|
|
19
|
+
if (prev.seq < fromSeq)
|
|
20
|
+
break;
|
|
21
|
+
if (prev.type === 'assistant/message') {
|
|
22
|
+
const msg = prev.data.message;
|
|
23
|
+
if (Array.isArray(msg?.content)) {
|
|
24
|
+
const texts = msg.content
|
|
25
|
+
.filter((b) => b.type === 'text')
|
|
26
|
+
.map(b => b.text);
|
|
27
|
+
if (texts.length > 0) {
|
|
28
|
+
planText = texts.join('\n').trim();
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { hasExitPlanMode: true, callSeq: event.seq, planText };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { hasExitPlanMode: false };
|
|
39
|
+
}
|
|
40
|
+
export function buildPlanPreReviewPrompt(problem, planText, maxChars = 20000) {
|
|
41
|
+
return [
|
|
42
|
+
'You are an expert independent technical plan verifier. A candidate implementation plan was submitted for human review.',
|
|
43
|
+
'Evaluate whether the plan is sound, executable, and comprehensive.',
|
|
44
|
+
'Scoring criteria:',
|
|
45
|
+
'A: Flawless, thorough, with clear steps, rigorous verification, edge cases handled.',
|
|
46
|
+
'B-J: Mostly sound, minor gaps or nuances missing.',
|
|
47
|
+
'K-S: Noticeable architectural gaps, missing regression checks, or ambiguities.',
|
|
48
|
+
'T: Fundamentally flawed, dangerous, or missing core requirements.',
|
|
49
|
+
'',
|
|
50
|
+
'Task requirement:',
|
|
51
|
+
sanitizeVerifierText(problem, 4000),
|
|
52
|
+
'',
|
|
53
|
+
'Proposed Plan:',
|
|
54
|
+
sanitizeVerifierText(planText, maxChars),
|
|
55
|
+
'',
|
|
56
|
+
'Output format:',
|
|
57
|
+
'Line 1: Verdict: <Single uppercase letter A-T>',
|
|
58
|
+
'Line 2: Summary: <One sentence assessment>',
|
|
59
|
+
'Line 3+: Key strengths, blind spots, and verification guidance.',
|
|
60
|
+
].join('\n\n');
|
|
61
|
+
}
|
|
62
|
+
export function parsePlanReviewVerdict(text) {
|
|
63
|
+
const match = /Verdict:\s*([A-T])/i.exec(text);
|
|
64
|
+
const verdict = match ? match[1].toUpperCase() : 'B';
|
|
65
|
+
// A is 1.0, T is 0.0
|
|
66
|
+
const index = verdict.charCodeAt(0) - 65;
|
|
67
|
+
const score = Math.max(0, Math.min(1, 1 - index / 19));
|
|
68
|
+
return { verdict, score, feedback: text.trim() };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=plan-gate.js.map
|
package/lib/types/router.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SessionEvent, TodoItem } from '@deepseek-ai/dsh-session';
|
|
2
2
|
import type { AutoVerifyMode } from './auto.ts';
|
|
3
3
|
export type RoutedVerifierKind = 'compare' | 'select' | 'track';
|
|
4
|
-
export type RoutePhase = 'semantic' | RoutedVerifierKind | 'final';
|
|
4
|
+
export type RoutePhase = 'semantic' | RoutedVerifierKind | 'final' | 'plan_review' | 'team_task';
|
|
5
5
|
export interface CandidateArtifact {
|
|
6
6
|
id: string;
|
|
7
7
|
groupId: string;
|
|
@@ -63,10 +63,19 @@ export interface EvidenceCall {
|
|
|
63
63
|
resultSeq: number;
|
|
64
64
|
text: string;
|
|
65
65
|
}
|
|
66
|
+
export interface TeamTaskItem {
|
|
67
|
+
id: string;
|
|
68
|
+
revision: number;
|
|
69
|
+
subject: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
status: 'pending' | 'in_progress' | 'completed' | 'deleted';
|
|
72
|
+
ownerId?: string;
|
|
73
|
+
}
|
|
66
74
|
interface EvidenceIndex {
|
|
67
75
|
problemSeq: number;
|
|
68
76
|
calls: Map<string, EvidenceCall>;
|
|
69
77
|
todos: Map<number, TodoItem[]>;
|
|
78
|
+
teamTasks: Map<number, TeamTaskItem[]>;
|
|
70
79
|
}
|
|
71
80
|
export declare function buildEvidenceIndex(events: readonly SessionEvent[]): EvidenceIndex | undefined;
|
|
72
81
|
export declare function analyzeStructuredRoute(events: readonly SessionEvent[], maxCandidates?: number, maxItemChars?: number): RouteDecision | undefined;
|
package/lib/types/router.js
CHANGED
|
@@ -44,15 +44,26 @@ export function buildEvidenceIndex(events) {
|
|
|
44
44
|
const calls = new Map();
|
|
45
45
|
const results = new Map();
|
|
46
46
|
const todos = new Map();
|
|
47
|
+
const teamTasks = new Map();
|
|
47
48
|
const paired = new Map();
|
|
48
|
-
|
|
49
|
+
// Track the rolling view of team tasks across the session
|
|
50
|
+
const currentTeamTasks = new Map();
|
|
51
|
+
for (const rawEvent of relevant) {
|
|
52
|
+
const event = rawEvent;
|
|
49
53
|
if (event.type === 'tool/call')
|
|
50
|
-
calls.set(String(event.data.callId),
|
|
51
|
-
else if (event.type === 'tool/result' && successful(
|
|
52
|
-
results.set(String(event.data.message.source.callId),
|
|
54
|
+
calls.set(String(event.data.callId), rawEvent);
|
|
55
|
+
else if (event.type === 'tool/result' && successful(rawEvent))
|
|
56
|
+
results.set(String(event.data.message.source.callId), rawEvent);
|
|
53
57
|
else if (event.type === 'todo/write')
|
|
54
58
|
todos.set(event.seq, event.data.todos);
|
|
55
|
-
else if (event.type === '
|
|
59
|
+
else if (event.type === 'team/task') {
|
|
60
|
+
const data = event.data;
|
|
61
|
+
if (data?.task) {
|
|
62
|
+
currentTeamTasks.set(data.task.id, { ...data.task });
|
|
63
|
+
teamTasks.set(event.seq, [...currentTeamTasks.values()]);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else if (event.type === 'tool/ptc-dispatch' || event.type === 'tool/code-dispatch') {
|
|
56
67
|
const data = event.data;
|
|
57
68
|
const isOk = data.isError !== true && (!Array.isArray(data.content) || data.content.every(b => b.isError !== true));
|
|
58
69
|
if (isOk) {
|
|
@@ -67,7 +78,7 @@ export function buildEvidenceIndex(events) {
|
|
|
67
78
|
if (result)
|
|
68
79
|
paired.set(callId, { name: call.data.name, callSeq: call.seq, resultSeq: result.seq, text: blockText(result.data.message.content) });
|
|
69
80
|
}
|
|
70
|
-
return { problemSeq: taskStartSeq, calls: paired, todos };
|
|
81
|
+
return { problemSeq: taskStartSeq, calls: paired, todos, teamTasks };
|
|
71
82
|
}
|
|
72
83
|
function parseTrustedWorkflow(value, callId, callSeq, resultSeq, maxCandidates, maxItemChars) {
|
|
73
84
|
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
@@ -119,6 +130,17 @@ function canonicalTodoSnapshots(index) {
|
|
|
119
130
|
}
|
|
120
131
|
return values;
|
|
121
132
|
}
|
|
133
|
+
function canonicalTeamTaskSnapshots(index) {
|
|
134
|
+
const values = [];
|
|
135
|
+
let previous = '';
|
|
136
|
+
for (const [seq, tasks] of index.teamTasks) {
|
|
137
|
+
const canonical = JSON.stringify(tasks.map(t => ({ id: t.id, status: t.status, revision: t.revision })));
|
|
138
|
+
if (canonical !== previous)
|
|
139
|
+
values.push({ seq, tasks });
|
|
140
|
+
previous = canonical;
|
|
141
|
+
}
|
|
142
|
+
return values;
|
|
143
|
+
}
|
|
122
144
|
export function analyzeStructuredRoute(events, maxCandidates = 8, maxItemChars = 20_000) {
|
|
123
145
|
const index = buildEvidenceIndex(events);
|
|
124
146
|
if (!index)
|
|
@@ -145,6 +167,12 @@ export function analyzeStructuredRoute(events, maxCandidates = 8, maxItemChars =
|
|
|
145
167
|
const checkpoints = steps.map((_, i) => i + 1);
|
|
146
168
|
return { kind: 'track', source: 'structured', confidence: 1, reason: 'changed durable todo snapshots', fingerprint: stableHash({ kind: 'track', snapshots }), steps, checkpoints, evidenceSeqs: snapshots.map(snapshot => snapshot.seq) };
|
|
147
169
|
}
|
|
170
|
+
const teamSnapshots = canonicalTeamTaskSnapshots(index);
|
|
171
|
+
if (teamSnapshots.length >= 2) {
|
|
172
|
+
const steps = teamSnapshots.map(snapshot => sanitizeVerifierText('Team task checkpoint seq ' + snapshot.seq + ':\n' + snapshot.tasks.map(task => '- [' + task.status + '] ' + task.subject + (task.description ? ' (' + task.description + ')' : '')).join('\n'), maxItemChars));
|
|
173
|
+
const checkpoints = steps.map((_, i) => i + 1);
|
|
174
|
+
return { kind: 'track', source: 'structured', confidence: 1, reason: 'changed durable team tasks', fingerprint: stableHash({ kind: 'track', teamSnapshots }), steps, checkpoints, evidenceSeqs: teamSnapshots.map(snapshot => snapshot.seq) };
|
|
175
|
+
}
|
|
148
176
|
}
|
|
149
177
|
return undefined;
|
|
150
178
|
}
|
|
@@ -152,10 +180,12 @@ export function semanticRouteHint(events) {
|
|
|
152
180
|
const index = buildEvidenceIndex(events);
|
|
153
181
|
if (!index)
|
|
154
182
|
return false;
|
|
155
|
-
if ([...index.calls.values()].some(pair => pair.name === 'subagent' || pair.name === 'subagent_fork' || pair.name === 'workflow'))
|
|
183
|
+
if ([...index.calls.values()].some(pair => pair.name === 'subagent' || pair.name === 'subagent_fork' || pair.name === 'workflow' || pair.name === 'exit_plan_mode'))
|
|
156
184
|
return true;
|
|
157
185
|
if (canonicalTodoSnapshots(index).length >= 2)
|
|
158
186
|
return true;
|
|
187
|
+
if (canonicalTeamTaskSnapshots(index).length >= 2)
|
|
188
|
+
return true;
|
|
159
189
|
return false;
|
|
160
190
|
}
|
|
161
191
|
export function buildSemanticRoutePrompt(problem, events, maxCandidates, maxItemChars = 20_000) {
|
package/lib/types/session.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
function textOf(blocks) {
|
|
2
2
|
const parts = [];
|
|
3
3
|
for (const block of blocks) {
|
|
4
|
-
|
|
4
|
+
const blockType = block.type;
|
|
5
|
+
if (blockType === 'text')
|
|
5
6
|
parts.push(block.text);
|
|
6
|
-
else if (
|
|
7
|
+
else if (blockType === 'reasoning')
|
|
7
8
|
parts.push('[Reasoning] ' + block.text);
|
|
8
|
-
else if (
|
|
9
|
+
else if (blockType === 'tool-call')
|
|
9
10
|
parts.push('[Tool Call] ' + block.name + ' ' + block.arguments);
|
|
10
|
-
else if (
|
|
11
|
+
else if (blockType === 'tool-result')
|
|
11
12
|
parts.push('[Tool Result] ' + textOf(block.content));
|
|
13
|
+
else if (blockType === 'file') {
|
|
14
|
+
const fileData = block;
|
|
15
|
+
parts.push('[File] ' + (fileData.path ?? fileData.filename ?? fileData.title ?? 'attachment'));
|
|
16
|
+
}
|
|
12
17
|
}
|
|
13
18
|
return parts.join('\n');
|
|
14
19
|
}
|
|
@@ -53,17 +58,20 @@ export async function extractSession(agent, loadImage, options = {}) {
|
|
|
53
58
|
let problem = '';
|
|
54
59
|
const trace = [];
|
|
55
60
|
const images = [];
|
|
56
|
-
for (const
|
|
61
|
+
for (const rawEvent of events) {
|
|
62
|
+
const event = rawEvent;
|
|
57
63
|
if (event.type === 'user/message') {
|
|
58
|
-
|
|
64
|
+
const sourceKind = event.data?.source?.kind;
|
|
65
|
+
if (sourceKind !== 'user' && sourceKind !== 'team-message')
|
|
59
66
|
continue;
|
|
60
67
|
const text = textOf(event.data.content);
|
|
61
|
-
if (!problem && text.trim())
|
|
68
|
+
if (!problem && sourceKind === 'user' && text.trim())
|
|
62
69
|
problem = text.trim();
|
|
63
70
|
for (const block of event.data.content)
|
|
64
71
|
if (block.type === 'image')
|
|
65
72
|
images.push(await loadImage(block.attachment));
|
|
66
|
-
|
|
73
|
+
const tag = sourceKind === 'team-message' ? 'Team Message' : 'User';
|
|
74
|
+
trace.push('--- ' + tag + ' seq ' + event.seq + ' ---\n' + text);
|
|
67
75
|
}
|
|
68
76
|
else if (event.type === 'assistant/message' && options.includeAssistantText !== false) {
|
|
69
77
|
trace.push('--- Assistant turn ' + event.data.turn + ' step ' + event.data.step + ' ---\n' + textOf(event.data.message.content));
|
|
@@ -74,7 +82,7 @@ export async function extractSession(agent, loadImage, options = {}) {
|
|
|
74
82
|
else if (event.type === 'tool/result') {
|
|
75
83
|
trace.push('--- Tool Result turn ' + event.data.turn + ' step ' + event.data.step + ' ---\n[Output] ' + textOf(event.data.message.content));
|
|
76
84
|
}
|
|
77
|
-
else if (event.type === 'tool/code-dispatch') {
|
|
85
|
+
else if (event.type === 'tool/ptc-dispatch' || event.type === 'tool/code-dispatch') {
|
|
78
86
|
const data = event.data;
|
|
79
87
|
const status = data.isError ? ' [Error]' : '';
|
|
80
88
|
const args = data.arguments !== undefined ? ' ' + (typeof data.arguments === 'string' ? data.arguments : JSON.stringify(data.arguments)) : '';
|
|
@@ -85,7 +93,14 @@ export async function extractSession(agent, loadImage, options = {}) {
|
|
|
85
93
|
images.push(await loadImage(block.attachment));
|
|
86
94
|
}
|
|
87
95
|
}
|
|
88
|
-
|
|
96
|
+
const label = event.type === 'tool/ptc-dispatch' ? 'PTC Dispatch ' : 'Code Dispatch ';
|
|
97
|
+
trace.push('--- ' + label + data.name + status + ' seq ' + event.seq + ' ---\n[Command] ' + data.name + args + '\n[Output] ' + content);
|
|
98
|
+
}
|
|
99
|
+
else if (event.type === 'team/message/queued') {
|
|
100
|
+
const data = event.data;
|
|
101
|
+
const sender = data?.message?.senderName ?? 'Teammate';
|
|
102
|
+
const content = Array.isArray(data?.message?.content) ? textOf(data.message.content) : '';
|
|
103
|
+
trace.push('--- Team Message Queued from ' + sender + ' seq ' + event.seq + ' ---\n' + content);
|
|
89
104
|
}
|
|
90
105
|
}
|
|
91
106
|
const raw = redactText(trace.join('\n\n'), patterns);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
2
|
+
import type { TeamTaskItem } from './router.ts';
|
|
3
|
+
export interface TeamTaskInspection {
|
|
4
|
+
latestCompletedTask?: TeamTaskItem;
|
|
5
|
+
completedSeq?: number;
|
|
6
|
+
activeTasks: TeamTaskItem[];
|
|
7
|
+
hasRecentCompletedTask: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function inspectTeamTasks(events: readonly SessionEvent[], fromSeq?: number): TeamTaskInspection;
|
|
10
|
+
export declare function buildTeamTaskVerificationPrompt(task: TeamTaskItem, executionTrace: string, maxChars?: number): string;
|
|
11
|
+
//# sourceMappingURL=team-gate.d.ts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { sanitizeVerifierText } from "./session.js";
|
|
2
|
+
export function inspectTeamTasks(events, fromSeq = 0) {
|
|
3
|
+
let latestCompletedTask;
|
|
4
|
+
let completedSeq;
|
|
5
|
+
const taskMap = new Map();
|
|
6
|
+
for (const rawEvent of events) {
|
|
7
|
+
const event = rawEvent;
|
|
8
|
+
if (event.type === 'team/task') {
|
|
9
|
+
const data = event.data;
|
|
10
|
+
if (data?.task) {
|
|
11
|
+
taskMap.set(data.task.id, { ...data.task });
|
|
12
|
+
if (event.seq >= fromSeq && data.task.status === 'completed') {
|
|
13
|
+
latestCompletedTask = { ...data.task };
|
|
14
|
+
completedSeq = event.seq;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
latestCompletedTask,
|
|
21
|
+
completedSeq,
|
|
22
|
+
activeTasks: [...taskMap.values()].filter(t => t.status !== 'deleted'),
|
|
23
|
+
hasRecentCompletedTask: latestCompletedTask !== undefined,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function buildTeamTaskVerificationPrompt(task, executionTrace, maxChars = 20000) {
|
|
27
|
+
return [
|
|
28
|
+
'You are an expert independent technical verifier reviewing a completed Agent Teams task.',
|
|
29
|
+
'Verify if the task goal has been satisfied by concrete evidence (code edits, test runs, successful commands).',
|
|
30
|
+
'Task Details:',
|
|
31
|
+
'ID: ' + task.id,
|
|
32
|
+
'Subject: ' + task.subject,
|
|
33
|
+
task.description ? 'Description: ' + task.description : '',
|
|
34
|
+
'',
|
|
35
|
+
'Execution Evidence & Trace:',
|
|
36
|
+
sanitizeVerifierText(executionTrace, maxChars),
|
|
37
|
+
'',
|
|
38
|
+
'Evaluate whether the task is genuinely completed with verified proof.',
|
|
39
|
+
'Scoring criteria:',
|
|
40
|
+
'A: Completely fulfilled with solid execution/test evidence.',
|
|
41
|
+
'B-J: Mostly complete, minor gaps or edge cases not fully asserted.',
|
|
42
|
+
'K-S: Incomplete, missing key requirements or untested.',
|
|
43
|
+
'T: Unfulfilled, failed, or contradictory evidence.',
|
|
44
|
+
'',
|
|
45
|
+
'Output format:',
|
|
46
|
+
'Line 1: Verdict: <Single uppercase letter A-T>',
|
|
47
|
+
'Line 2: Summary: <One sentence evaluation of task fulfillment>',
|
|
48
|
+
'Line 3+: Remaining gaps or next steps for the team.',
|
|
49
|
+
].filter(Boolean).join('\n\n');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=team-gate.js.map
|
package/package.json
CHANGED
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dsh-llm-verifier",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Configurable DSH-native LLM verifier with a Web settings page",
|
|
5
|
-
"repository": {
|
|
6
|
-
"type": "git",
|
|
7
|
-
"url": "git+https://github.com/Aa728848/dsh-llm-verifier.git"
|
|
8
|
-
},
|
|
9
|
-
"homepage": "https://github.com/Aa728848/dsh-llm-verifier#readme",
|
|
10
|
-
"bugs": {
|
|
11
|
-
"url": "https://github.com/Aa728848/dsh-llm-verifier/issues"
|
|
12
|
-
},
|
|
13
|
-
"keywords": [
|
|
14
|
-
"deepseek",
|
|
15
|
-
"dsh",
|
|
16
|
-
"verifier",
|
|
17
|
-
"llm",
|
|
18
|
-
"cordis",
|
|
19
|
-
"plugin"
|
|
20
|
-
],
|
|
21
|
-
"author": "eddyskywalker",
|
|
22
|
-
"type": "module",
|
|
23
|
-
"main": "lib/index.js",
|
|
24
|
-
"types": "lib/types/index.d.ts",
|
|
25
|
-
"exports": {
|
|
26
|
-
".": {
|
|
27
|
-
"types": "./lib/types/index.d.ts",
|
|
28
|
-
"default": "./lib/index.js"
|
|
29
|
-
},
|
|
30
|
-
"./core": {
|
|
31
|
-
"types": "./lib/types/core.d.ts",
|
|
32
|
-
"default": "./lib/core.js"
|
|
33
|
-
},
|
|
34
|
-
"./caller": {
|
|
35
|
-
"types": "./lib/types/caller.d.ts",
|
|
36
|
-
"default": "./lib/caller.js"
|
|
37
|
-
},
|
|
38
|
-
"./package.json": "./package.json",
|
|
39
|
-
"./client": {
|
|
40
|
-
"types": "./lib/types/client.d.ts",
|
|
41
|
-
"default": "./lib/client.js"
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
"dsh": {
|
|
45
|
-
"bundle": {
|
|
46
|
-
"patch": "./cordis.patch.yml"
|
|
47
|
-
},
|
|
48
|
-
"client": {
|
|
49
|
-
"inject": [
|
|
50
|
-
"@deepseek-ai/dsh-client-connection",
|
|
51
|
-
"@deepseek-ai/dsh-client-runtime",
|
|
52
|
-
"@deepseek-ai/dsh-client-ui-slots",
|
|
53
|
-
"@deepseek-ai/dsh-client-ui-settings",
|
|
54
|
-
"@deepseek-ai/dsh-client-ui-conversation",
|
|
55
|
-
"@deepseek-ai/dsh-client-locale",
|
|
56
|
-
"@deepseek-ai/dsh-api-remotes"
|
|
57
|
-
],
|
|
58
|
-
"platform": "web"
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
"peerDependencies": {
|
|
62
|
-
"@deepseek-ai/cordis": "^4.0.1 || ^4.0.2",
|
|
63
|
-
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2",
|
|
64
|
-
"@deepseek-ai/dsh-agent": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2",
|
|
65
|
-
"@deepseek-ai/dsh-session": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2",
|
|
66
|
-
"@deepseek-ai/dsh-llm": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2",
|
|
67
|
-
"@deepseek-ai/dsh-attachment": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2",
|
|
68
|
-
"@deepseek-ai/dsh-settings": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2",
|
|
69
|
-
"@deepseek-ai/dsh-credentials": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2",
|
|
70
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2"
|
|
71
|
-
},
|
|
72
|
-
"dependencies": {
|
|
73
|
-
"schemastery": "^3.18.0"
|
|
74
|
-
},
|
|
75
|
-
"devDependencies": {
|
|
76
|
-
"@deepseek-ai/cordis": "^4.0.1",
|
|
77
|
-
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2",
|
|
78
|
-
"@deepseek-ai/dsh-agent": "^0.1.1-rc.2",
|
|
79
|
-
"@deepseek-ai/dsh-session": "^0.1.1-rc.2",
|
|
80
|
-
"@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
|
|
81
|
-
"@deepseek-ai/dsh-attachment": "^0.1.1-rc.2",
|
|
82
|
-
"@types/node": "^22.20.0",
|
|
83
|
-
"tsdown": "0.22.2",
|
|
84
|
-
"typescript": "~5.7.2",
|
|
85
|
-
"vitest": "^3.0.0",
|
|
86
|
-
"@deepseek-ai/dsh-settings": "^0.1.1-rc.2",
|
|
87
|
-
"@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2",
|
|
88
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2",
|
|
89
|
-
"@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
|
|
90
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.2",
|
|
91
|
-
"@deepseek-ai/dsh-client-ui-slots": "^0.1.1-rc.2",
|
|
92
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.2",
|
|
93
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.1-rc.2",
|
|
94
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2",
|
|
95
|
-
"react": "^18.2.0",
|
|
96
|
-
"@types/react": "~18.3.1",
|
|
97
|
-
"@deepseek-ai/dsh-credentials": "^0.1.1-rc.2"
|
|
98
|
-
},
|
|
99
|
-
"files": [
|
|
100
|
-
"lib/**/*.js",
|
|
101
|
-
"lib/**/*.d.ts",
|
|
102
|
-
"src",
|
|
103
|
-
"cordis.patch.yml",
|
|
104
|
-
"README.md"
|
|
105
|
-
],
|
|
106
|
-
"scripts": {
|
|
107
|
-
"build": "node -e \"require('node:fs').rmSync('lib',{recursive:true,force:true})\" && tsc -p tsconfig.build.json && tsdown",
|
|
108
|
-
"typecheck": "tsc --noEmit -p tsconfig.build.json",
|
|
109
|
-
"test": "vitest run"
|
|
110
|
-
},
|
|
111
|
-
"license": "MIT"
|
|
112
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-llm-verifier",
|
|
3
|
+
"version": "0.1.14",
|
|
4
|
+
"description": "Configurable DSH-native LLM verifier with a Web settings page",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/Aa728848/dsh-llm-verifier.git"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/Aa728848/dsh-llm-verifier#readme",
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/Aa728848/dsh-llm-verifier/issues"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"deepseek",
|
|
15
|
+
"dsh",
|
|
16
|
+
"verifier",
|
|
17
|
+
"llm",
|
|
18
|
+
"cordis",
|
|
19
|
+
"plugin"
|
|
20
|
+
],
|
|
21
|
+
"author": "eddyskywalker",
|
|
22
|
+
"type": "module",
|
|
23
|
+
"main": "lib/index.js",
|
|
24
|
+
"types": "lib/types/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./lib/types/index.d.ts",
|
|
28
|
+
"default": "./lib/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./core": {
|
|
31
|
+
"types": "./lib/types/core.d.ts",
|
|
32
|
+
"default": "./lib/core.js"
|
|
33
|
+
},
|
|
34
|
+
"./caller": {
|
|
35
|
+
"types": "./lib/types/caller.d.ts",
|
|
36
|
+
"default": "./lib/caller.js"
|
|
37
|
+
},
|
|
38
|
+
"./package.json": "./package.json",
|
|
39
|
+
"./client": {
|
|
40
|
+
"types": "./lib/types/client.d.ts",
|
|
41
|
+
"default": "./lib/client.js"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"dsh": {
|
|
45
|
+
"bundle": {
|
|
46
|
+
"patch": "./cordis.patch.yml"
|
|
47
|
+
},
|
|
48
|
+
"client": {
|
|
49
|
+
"inject": [
|
|
50
|
+
"@deepseek-ai/dsh-client-connection",
|
|
51
|
+
"@deepseek-ai/dsh-client-runtime",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-slots",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-settings",
|
|
54
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
55
|
+
"@deepseek-ai/dsh-client-locale",
|
|
56
|
+
"@deepseek-ai/dsh-api-remotes"
|
|
57
|
+
],
|
|
58
|
+
"platform": "web"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"@deepseek-ai/cordis": "^4.0.1 || ^4.0.2",
|
|
63
|
+
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5",
|
|
64
|
+
"@deepseek-ai/dsh-agent": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5",
|
|
65
|
+
"@deepseek-ai/dsh-session": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5",
|
|
66
|
+
"@deepseek-ai/dsh-llm": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5",
|
|
67
|
+
"@deepseek-ai/dsh-attachment": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5",
|
|
68
|
+
"@deepseek-ai/dsh-settings": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5",
|
|
69
|
+
"@deepseek-ai/dsh-credentials": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5",
|
|
70
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2 || ^0.1.2-alpha.1 || ^0.1.2-alpha.2 || ^0.1.2-alpha.3 || ^0.1.2-alpha.4 || ^0.1.2-alpha.5 || ^0.1.2-rc.1 || ~0.1.2 || ^0.1.3 || ^0.1.4 || ^0.1.5-alpha.1 || ^0.1.5-rc.1 || ~0.1.5"
|
|
71
|
+
},
|
|
72
|
+
"dependencies": {
|
|
73
|
+
"schemastery": "^3.18.0"
|
|
74
|
+
},
|
|
75
|
+
"devDependencies": {
|
|
76
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
77
|
+
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-agent": "^0.1.1-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-session": "^0.1.1-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh-attachment": "^0.1.1-rc.2",
|
|
82
|
+
"@types/node": "^22.20.0",
|
|
83
|
+
"tsdown": "0.22.2",
|
|
84
|
+
"typescript": "~5.7.2",
|
|
85
|
+
"vitest": "^3.0.0",
|
|
86
|
+
"@deepseek-ai/dsh-settings": "^0.1.1-rc.2",
|
|
87
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2",
|
|
88
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2",
|
|
89
|
+
"@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
|
|
90
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.2",
|
|
91
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.1-rc.2",
|
|
92
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.2",
|
|
93
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.1-rc.2",
|
|
94
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2",
|
|
95
|
+
"react": "^18.2.0",
|
|
96
|
+
"@types/react": "~18.3.1",
|
|
97
|
+
"@deepseek-ai/dsh-credentials": "^0.1.1-rc.2"
|
|
98
|
+
},
|
|
99
|
+
"files": [
|
|
100
|
+
"lib/**/*.js",
|
|
101
|
+
"lib/**/*.d.ts",
|
|
102
|
+
"src",
|
|
103
|
+
"cordis.patch.yml",
|
|
104
|
+
"README.md"
|
|
105
|
+
],
|
|
106
|
+
"scripts": {
|
|
107
|
+
"build": "node -e \"require('node:fs').rmSync('lib',{recursive:true,force:true})\" && tsc -p tsconfig.build.json && tsdown",
|
|
108
|
+
"typecheck": "tsc --noEmit -p tsconfig.build.json",
|
|
109
|
+
"test": "vitest run"
|
|
110
|
+
},
|
|
111
|
+
"license": "MIT"
|
|
112
|
+
}
|