@deepstrike/sdk 0.2.17 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/harness/harness.js +10 -15
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/kernel.d.ts +8 -15
- package/dist/types/agent.d.ts +7 -0
- package/dist/types/agent.js +29 -0
- package/package.json +2 -2
package/dist/harness/harness.js
CHANGED
|
@@ -84,7 +84,6 @@ export class HarnessLoop {
|
|
|
84
84
|
}
|
|
85
85
|
async *stream(request) {
|
|
86
86
|
const kernel = getKernel();
|
|
87
|
-
const pipeline = new kernel.EvalPipeline({ extractSkillOnPass: true });
|
|
88
87
|
const criteria = request.criteria ?? [];
|
|
89
88
|
let currentGoal = request.goal;
|
|
90
89
|
let lastIterations = 0;
|
|
@@ -126,11 +125,10 @@ export class HarnessLoop {
|
|
|
126
125
|
}
|
|
127
126
|
}
|
|
128
127
|
yield { type: "supervising" };
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
// #6 (0.5.0): the eval/verdict compute is the kernel's stateless free functions (was the
|
|
129
|
+
// EvalPipeline state machine). Build the eval prompt, call the eval LLM, parse the verdict.
|
|
130
|
+
const evalMsgs = kernel.buildEvalMessages(request.goal, criteria, lastResult, attempt, true);
|
|
132
131
|
let evalText = "";
|
|
133
|
-
const evalMsgs = evalAction.messages ?? [];
|
|
134
132
|
const evalContext = {
|
|
135
133
|
systemText: evalMsgs.filter((m) => m.role === "system").map((m) => m.content).join("\n\n"),
|
|
136
134
|
turns: evalMsgs.filter((m) => m.role !== "system"),
|
|
@@ -139,18 +137,16 @@ export class HarnessLoop {
|
|
|
139
137
|
if (evt.type === "text_delta")
|
|
140
138
|
evalText += evt.delta;
|
|
141
139
|
}
|
|
142
|
-
const
|
|
143
|
-
if (doneAction.kind !== "done")
|
|
144
|
-
break;
|
|
140
|
+
const parsed = kernel.parseVerdict(evalText);
|
|
145
141
|
const verdict = {
|
|
146
|
-
passed:
|
|
147
|
-
overallScore:
|
|
148
|
-
feedback:
|
|
149
|
-
details:
|
|
142
|
+
passed: parsed.passed,
|
|
143
|
+
overallScore: parsed.overallScore,
|
|
144
|
+
feedback: parsed.feedback,
|
|
145
|
+
details: parsed.details ?? [],
|
|
150
146
|
};
|
|
151
147
|
if (verdict.passed) {
|
|
152
|
-
if (
|
|
153
|
-
const { name, description, whenToUse, content } =
|
|
148
|
+
if (parsed.skillCandidate && this.skillDir) {
|
|
149
|
+
const { name, description, whenToUse, content } = parsed.skillCandidate;
|
|
154
150
|
const fm = ["---", `name: ${name}`, `description: ${description}`,
|
|
155
151
|
whenToUse ? `when_to_use: ${whenToUse}` : null, "---", ""]
|
|
156
152
|
.filter(Boolean).join("\n");
|
|
@@ -162,7 +158,6 @@ export class HarnessLoop {
|
|
|
162
158
|
yield { type: "revising", verdict };
|
|
163
159
|
currentGoal = `${request.goal}\n\n[Attempt ${attempt} feedback: ${verdict.feedback}]`;
|
|
164
160
|
lastResult = "";
|
|
165
|
-
pipeline.reset();
|
|
166
161
|
}
|
|
167
162
|
yield { type: "max_attempts_reached" };
|
|
168
163
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -68,7 +68,7 @@ export { SinglePassHarness, EvalLoopHarness, HarnessLoop } from "./harness/harne
|
|
|
68
68
|
export type { HarnessRequest, HarnessOutcome, HarnessLoopOptions, QualityGate } from "./harness/harness.js";
|
|
69
69
|
export type { Message, ToolCall, ToolResult, ToolSchema, ContentPart, TextPart, ImagePart, AudioPart, StreamEvent, TextDelta, ThinkingDelta, ToolCallEvent, ToolChunk, ToolDeltaEvent, ToolSuspendEvent, ToolResultEvent, DoneEvent, ErrorEvent, PermissionRequestEvent, PermissionResolvedEvent, PermissionResponse, LLMProvider, RetryConfig, TokenUsage, ProviderToolSpec, ProviderRunState, ProviderReplay, RenderedContext, ReplayabilityAssessment, } from "./types.js";
|
|
70
70
|
export type { AgentCapabilityFilter, AgentIdentity, AgentIsolation, AgentRunSpec, AgentProcessChangedObservation, ContextInheritance, KernelAgentRole, LoopResult, MilestoneCheckResult, MilestoneContract, MilestonePhase, MilestonePolicy, SubAgentResult, TerminationReason, WorkflowSpec, WorkflowNodeSpec, WorkflowTaskSpec, WorkflowSpawnInfo, } from "./types/agent.js";
|
|
71
|
-
export { agentIdentitySub, agentRunSpecToKernel, milestoneCheckFail, milestoneCheckPass, milestoneCheckResultToKernel, subAgentResultToKernel, workflowSpecToKernel, workflowNodeSpecToKernel, submitWorkflowNodesToKernel, submitWorkflowToKernel, submitWorkflowNodesTool, startWorkflowTool, fanoutSynthesize, generateAndFilter, verifyRules, } from "./types/agent.js";
|
|
71
|
+
export { agentIdentitySub, agentRunSpecToKernel, milestoneCheckFail, milestoneCheckPass, milestoneCheckResultToKernel, subAgentResultToKernel, workflowSpecToKernel, workflowNodeSpecToKernel, submitWorkflowNodesToKernel, submitWorkflowToKernel, submitWorkflowNodesTool, startWorkflowTool, fanoutSynthesize, generateAndFilter, verifyRules, genEval, } from "./types/agent.js";
|
|
72
72
|
export type { AcceptanceCriterion, VerificationContract, ContractCheckResult, } from "./collaboration/contract.js";
|
|
73
73
|
export { ContractBuilder, formatContractForSystemPrompt, contractToCriteriaStrings, } from "./collaboration/contract.js";
|
|
74
74
|
export { AgentPool } from "./collaboration/pool.js";
|
package/dist/index.js
CHANGED
|
@@ -46,7 +46,7 @@ export { PermissionManager, PermissionMode } from "./safety/permissions.js";
|
|
|
46
46
|
export { Governance, governancePolicyToKernelEvent } from "./governance.js";
|
|
47
47
|
// ── Harness ────────────────────────────────────────────────────────────────
|
|
48
48
|
export { SinglePassHarness, EvalLoopHarness, HarnessLoop } from "./harness/harness.js";
|
|
49
|
-
export { agentIdentitySub, agentRunSpecToKernel, milestoneCheckFail, milestoneCheckPass, milestoneCheckResultToKernel, subAgentResultToKernel, workflowSpecToKernel, workflowNodeSpecToKernel, submitWorkflowNodesToKernel, submitWorkflowToKernel, submitWorkflowNodesTool, startWorkflowTool, fanoutSynthesize, generateAndFilter, verifyRules, } from "./types/agent.js";
|
|
49
|
+
export { agentIdentitySub, agentRunSpecToKernel, milestoneCheckFail, milestoneCheckPass, milestoneCheckResultToKernel, subAgentResultToKernel, workflowSpecToKernel, workflowNodeSpecToKernel, submitWorkflowNodesToKernel, submitWorkflowToKernel, submitWorkflowNodesTool, startWorkflowTool, fanoutSynthesize, generateAndFilter, verifyRules, genEval, } from "./types/agent.js";
|
|
50
50
|
export { ContractBuilder, formatContractForSystemPrompt, contractToCriteriaStrings, } from "./collaboration/contract.js";
|
|
51
51
|
export { AgentPool } from "./collaboration/pool.js";
|
|
52
52
|
export { KERNEL_ROLE_MAP } from "./collaboration/pool.js";
|
package/dist/kernel.d.ts
CHANGED
|
@@ -77,13 +77,11 @@ interface NativeCriterion {
|
|
|
77
77
|
required: boolean;
|
|
78
78
|
weight?: number;
|
|
79
79
|
}
|
|
80
|
-
interface
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
feedback?: string;
|
|
86
|
-
details?: Array<{
|
|
80
|
+
export interface Verdict {
|
|
81
|
+
passed: boolean;
|
|
82
|
+
overallScore: number;
|
|
83
|
+
feedback: string;
|
|
84
|
+
details: Array<{
|
|
87
85
|
criterion: string;
|
|
88
86
|
passed: boolean;
|
|
89
87
|
score: number;
|
|
@@ -96,11 +94,6 @@ interface EvalPipelineAction {
|
|
|
96
94
|
content: string;
|
|
97
95
|
};
|
|
98
96
|
}
|
|
99
|
-
interface EvalPipelineInstance {
|
|
100
|
-
feedOutcome(goal: string, criteria: NativeCriterion[], result: string, attempt: number): EvalPipelineAction;
|
|
101
|
-
feedEvalResult(content: string): EvalPipelineAction;
|
|
102
|
-
reset(): void;
|
|
103
|
-
}
|
|
104
97
|
interface IdlePipelineAction {
|
|
105
98
|
kind: "synthesize_insights" | "commit_memories" | "noop" | "aborted";
|
|
106
99
|
messages?: Message[];
|
|
@@ -156,9 +149,9 @@ interface KernelModule {
|
|
|
156
149
|
timeoutMs?: bigint;
|
|
157
150
|
}) => KernelRuntimeInstance;
|
|
158
151
|
SignalRouter: new (maxQueueSize: number) => SignalRouterInstance;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
152
|
+
buildEvalMessages(goal: string, criteria: NativeCriterion[], result: string, attempt: number, extractSkillOnPass: boolean): Message[];
|
|
153
|
+
parseVerdict(content: string): Verdict;
|
|
154
|
+
verdictOutputSchema(extractSkillOnPass: boolean): string;
|
|
162
155
|
IdlePipeline: new (agentId: string) => IdlePipelineInstance;
|
|
163
156
|
}
|
|
164
157
|
export declare function getKernel(): KernelModule;
|
package/dist/types/agent.d.ts
CHANGED
|
@@ -225,6 +225,13 @@ export declare function workflowNodeToManifest(node: WorkflowSpawnInfo, parentSe
|
|
|
225
225
|
export declare function fanoutSynthesize(workers: WorkflowTaskSpec[], synthesize: WorkflowTaskSpec): WorkflowSpec;
|
|
226
226
|
/** N parallel Implement generators feeding a single Verify filter/dedupe step (barrier). */
|
|
227
227
|
export declare function generateAndFilter(generators: WorkflowTaskSpec[], filter: WorkflowTaskSpec): WorkflowSpec;
|
|
228
|
+
/**
|
|
229
|
+
* Generate→evaluate quality gate (the EvalPipeline successor, #6): a `loop` worker node (re-run up
|
|
230
|
+
* to `maxIters`, stopping early on a `loop_continue=false` self-signal) + a bias-resistant `verify`
|
|
231
|
+
* eval node gated on it, carrying the kernel's verdict `outputSchema`. Mirrors the kernel `gen_eval`
|
|
232
|
+
* template. For the iterative retry-with-feedback variant, drive it with `HarnessLoop`.
|
|
233
|
+
*/
|
|
234
|
+
export declare function genEval(worker: WorkflowTaskSpec, evaluate: WorkflowTaskSpec, maxIters?: number, extractSkillOnPass?: boolean): WorkflowSpec;
|
|
228
235
|
/**
|
|
229
236
|
* One fresh-context verifier per rule/claim (parallel) + optional skeptic that depends on all and
|
|
230
237
|
* re-checks flags. Verifiers run read-only with no inherited author context (bias-resistant).
|
package/dist/types/agent.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getKernel } from "../kernel.js";
|
|
1
2
|
/** Map kernel spawn observation → host manifest. */
|
|
2
3
|
export function spawnObservationToManifest(obs, spec, parentSessionId) {
|
|
3
4
|
const o = obs;
|
|
@@ -409,6 +410,34 @@ export function generateAndFilter(generators, filter) {
|
|
|
409
410
|
});
|
|
410
411
|
return { nodes };
|
|
411
412
|
}
|
|
413
|
+
/**
|
|
414
|
+
* Generate→evaluate quality gate (the EvalPipeline successor, #6): a `loop` worker node (re-run up
|
|
415
|
+
* to `maxIters`, stopping early on a `loop_continue=false` self-signal) + a bias-resistant `verify`
|
|
416
|
+
* eval node gated on it, carrying the kernel's verdict `outputSchema`. Mirrors the kernel `gen_eval`
|
|
417
|
+
* template. For the iterative retry-with-feedback variant, drive it with `HarnessLoop`.
|
|
418
|
+
*/
|
|
419
|
+
export function genEval(worker, evaluate, maxIters = 3, extractSkillOnPass = true) {
|
|
420
|
+
const schema = JSON.parse(getKernel().verdictOutputSchema(extractSkillOnPass));
|
|
421
|
+
return {
|
|
422
|
+
nodes: [
|
|
423
|
+
{
|
|
424
|
+
task: asTask(worker),
|
|
425
|
+
role: "implement",
|
|
426
|
+
isolation: "worktree",
|
|
427
|
+
contextInheritance: "full",
|
|
428
|
+
loop: { maxIters: Math.max(1, maxIters) },
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
task: asTask(evaluate),
|
|
432
|
+
role: "verify",
|
|
433
|
+
isolation: "read_only",
|
|
434
|
+
contextInheritance: "none",
|
|
435
|
+
dependsOn: [0],
|
|
436
|
+
outputSchema: schema,
|
|
437
|
+
},
|
|
438
|
+
],
|
|
439
|
+
};
|
|
440
|
+
}
|
|
412
441
|
/**
|
|
413
442
|
* One fresh-context verifier per rule/claim (parallel) + optional skeptic that depends on all and
|
|
414
443
|
* re-checks flags. Verifiers run read-only with no inherited author context (bias-resistant).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepstrike/sdk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.18",
|
|
4
4
|
"description": "DeepStrike Node.js SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@anthropic-ai/sdk": "^0.99.0",
|
|
23
|
-
"@deepstrike/core": "0.2.
|
|
23
|
+
"@deepstrike/core": "0.2.18",
|
|
24
24
|
"@google/generative-ai": "^0.24.1",
|
|
25
25
|
"openai": "^5.23.2"
|
|
26
26
|
},
|