@deepstrike/sdk 0.2.28 → 0.2.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +45 -21
  2. package/dist/harness/harness.d.ts +3 -2
  3. package/dist/harness/harness.js +15 -35
  4. package/dist/harness/judge.d.ts +42 -0
  5. package/dist/harness/judge.js +58 -0
  6. package/dist/harness/public.d.ts +4 -0
  7. package/dist/harness/public.js +3 -0
  8. package/dist/index.d.ts +21 -80
  9. package/dist/index.js +28 -60
  10. package/dist/kernel.d.ts +7 -1
  11. package/dist/memory/public.d.ts +4 -0
  12. package/dist/memory/public.js +3 -0
  13. package/dist/os/public.d.ts +18 -0
  14. package/dist/os/public.js +14 -0
  15. package/dist/planes/public.d.ts +13 -0
  16. package/dist/planes/public.js +9 -0
  17. package/dist/providers/anthropic-compatible.d.ts +23 -0
  18. package/dist/providers/anthropic-compatible.js +29 -0
  19. package/dist/providers/anthropic.d.ts +11 -2
  20. package/dist/providers/anthropic.js +14 -9
  21. package/dist/providers/catalog.js +5 -53
  22. package/dist/providers/deepseek.d.ts +28 -8
  23. package/dist/providers/deepseek.js +38 -157
  24. package/dist/providers/factories.d.ts +31 -0
  25. package/dist/providers/factories.js +33 -0
  26. package/dist/providers/glm.d.ts +5 -4
  27. package/dist/providers/glm.js +8 -23
  28. package/dist/providers/kimi.d.ts +5 -4
  29. package/dist/providers/kimi.js +8 -22
  30. package/dist/providers/minimax.d.ts +26 -12
  31. package/dist/providers/minimax.js +32 -158
  32. package/dist/providers/openai.d.ts +57 -2
  33. package/dist/providers/openai.js +139 -70
  34. package/dist/providers/public.d.ts +10 -0
  35. package/dist/providers/public.js +11 -0
  36. package/dist/providers/qwen.d.ts +19 -19
  37. package/dist/providers/qwen.js +37 -176
  38. package/dist/providers/registry.d.ts +18 -0
  39. package/dist/providers/registry.js +35 -0
  40. package/dist/providers/vendor-profiles.d.ts +54 -0
  41. package/dist/providers/vendor-profiles.js +62 -0
  42. package/dist/runtime/event-stream.d.ts +44 -0
  43. package/dist/runtime/event-stream.js +39 -0
  44. package/dist/runtime/facade.js +6 -1
  45. package/dist/runtime/reactive-session.d.ts +125 -0
  46. package/dist/runtime/reactive-session.js +127 -0
  47. package/dist/runtime/run-group.d.ts +74 -0
  48. package/dist/runtime/run-group.js +72 -0
  49. package/dist/runtime/runner.d.ts +9 -0
  50. package/dist/runtime/runner.js +79 -46
  51. package/dist/runtime/session-log.d.ts +8 -0
  52. package/dist/runtime/turn-policy.d.ts +33 -0
  53. package/dist/runtime/turn-policy.js +58 -0
  54. package/dist/signals/gateway.d.ts +7 -2
  55. package/dist/signals/gateway.js +13 -3
  56. package/dist/signals/types.d.ts +10 -1
  57. package/dist/workflow/public.d.ts +20 -0
  58. package/dist/workflow/public.js +15 -0
  59. package/package.json +54 -2
package/README.md CHANGED
@@ -76,9 +76,25 @@ const reply = await collectText(runner.run({ sessionId: "chat-1", goal: "What is
76
76
 
77
77
  Use `InMemorySessionLog` for process-local sessions or `FileSessionLog` when replay should survive restarts. `wake(sessionId)` resumes from the event log without inserting a duplicate `run_started` event.
78
78
 
79
+ ### Package layout (v0.2.30)
80
+
81
+ The root export is the **intent layer** — what you reach for to run an agent, run a workflow, author a tool, or pick a provider (~30 symbols). Advanced machinery lives behind subpaths, so the common surface stays small and tree-shakeable:
82
+
83
+ | Import | Contains |
84
+ |--------|----------|
85
+ | `@deepstrike/sdk` | `runAgent` · `runFanout` · `RuntimeRunner` · `tool` · `LocalExecutionPlane` · `InMemorySessionLog`/`FileSessionLog` · `AnthropicProvider`/`OpenAIProvider`/`OpenAIResponsesProvider` · `createProvider` · `Governance` · `AgentPool` · core types |
86
+ | `@deepstrike/sdk/providers` | backend factories (`deepseek`, `kimi`, `qwen`, `glm`, `minimax`, `gemini`, `ollama`), profiles, `CircuitBreaker` |
87
+ | `@deepstrike/sdk/workflow` | `SubAgentOrchestrator`, `spawnStandalone`, reducers, contracts, handoff/modes, agent + spec types |
88
+ | `@deepstrike/sdk/planes` | `WorktreeExecutionPlane`, `ProcessSandboxPlane`, `McpProxyPlane`, `RemoteVpcPlane`, archive/credential stores |
89
+ | `@deepstrike/sdk/memory` | `DreamStore`, `WorkingMemory`, `InMemoryDreamStore`, `KnowledgeSource` |
90
+ | `@deepstrike/sdk/harness` | `SinglePassHarness`, `EvalLoopHarness`, `HarnessLoop`, `judge` |
91
+ | `@deepstrike/sdk/os` | profiles, `KernelPrimitivesDashboard`, signals, `PermissionManager`, replay-testing utilities |
92
+
93
+ > **Migration from 0.2.x:** the kernel-lowering converters (`*ToKernel`), low-level prompt/eval builders, and the `OpenAIChatProvider` alias are no longer exported from root; backend providers, planes, memory, harness, and OS utilities moved to the subpaths above. See [`MIGRATION-v0.2.300.md`](./MIGRATION-v0.2.300.md).
94
+
79
95
  ### Recipes — the canonical entry points
80
96
 
81
- The package exports a large surface, but most apps need one of three shapes. Start with the facades and drop down to `RuntimeRunner` only when you need streaming, signals, memory, or governance hooks.
97
+ Most apps need one of three shapes. Start with the facades and drop down to `RuntimeRunner` only when you need streaming, signals, memory, or governance hooks.
82
98
 
83
99
  ```typescript
84
100
  import { runAgent, runFanout } from "@deepstrike/sdk"
@@ -232,36 +248,44 @@ A node's `kind` selects the control-flow shape; the same executor drives them al
232
248
 
233
249
  ## Providers
234
250
 
235
- | Class | Backend | Notes |
236
- |-------|---------|-------|
237
- | `OpenAIChatProvider` | OpenAI Chat Completions API | SSE tool-call accumulation |
238
- | `OpenAIProvider` | OpenAI Chat Completions API | Compatibility alias for `OpenAIChatProvider` |
239
- | `OpenAIResponsesProvider` | OpenAI Responses API | Native `previous_response_id` continuation |
240
- | `AnthropicProvider` | Anthropic API | Native SSE, `ThinkingDelta` support |
241
- | `QwenProvider` | DashScope | `enable_thinking` via extensions |
242
- | `DeepSeekProvider` | DeepSeek API | V4 thinking controls + reasoning replay across tool turns |
243
- | `MiniMaxProvider` | MiniMax API | Anthropic-compatible M2.7/M2.5 path |
244
- | `OllamaProvider` | Local Ollama | `http://localhost:11434` default |
245
- | `KimiProvider` | Moonshot API | K2.6 default; K2.5 also supported |
251
+ The root package exports the three base providers — `AnthropicProvider`, `OpenAIProvider`,
252
+ `OpenAIResponsesProvider` — plus `createProvider`. **Every other backend is a factory function** in
253
+ `@deepstrike/sdk/providers`: one per backend, with a `protocol` option where a backend speaks both the
254
+ OpenAI- and Anthropic-compatible wire.
246
255
 
247
- All providers accept `RetryConfig` for exponential backoff and share a `CircuitBreaker`.
256
+ ```typescript
257
+ import { deepseek, kimi, minimax } from "@deepstrike/sdk/providers"
248
258
 
249
- `extensions` are forwarded by every provider in both `complete()` and `stream()` while SDK-owned structural fields such as `model`, `messages`, `tools`, and streaming flags remain protected.
259
+ const ds = deepseek({ apiKey }) // OpenAI-compatible wire (default)
260
+ const dsA = deepseek({ apiKey, protocol: "anthropic" }) // Anthropic-compatible wire
261
+ const mm = minimax({ apiKey }) // MiniMax defaults to the Anthropic wire
262
+ ```
263
+
264
+ | Entry | Import from | Backend |
265
+ |-------|-------------|---------|
266
+ | `OpenAIProvider` | root | OpenAI Chat Completions (and any OpenAI-compatible `/v1`) |
267
+ | `OpenAIResponsesProvider` | root | OpenAI Responses API (`previous_response_id` continuation) |
268
+ | `AnthropicProvider` | root | Anthropic Messages API (`ThinkingDelta` support) |
269
+ | `deepseek` · `kimi` · `qwen` · `glm` · `minimax` · `gemini` · `ollama` | `@deepstrike/sdk/providers` | the respective vendor (factory functions) |
250
270
 
251
- **Custom OpenAI-compatible endpoint** (MiMo, DeepSeek, Kimi, Qwen, GLM via their `/v1` base URL): use `OpenAIChatProvider` (alias `OpenAIProvider`) and pass the base URL as the **4th** argument — the 3rd is `RetryConfig`:
271
+ Providers take an **options object** and share a `CircuitBreaker`. `extensions` are forwarded in both
272
+ `complete()` and `stream()`; SDK-owned fields (`model`, `messages`, `tools`, streaming flags) stay protected.
273
+
274
+ **Custom OpenAI-compatible endpoint** (MiMo, DeepSeek, Kimi, Qwen, GLM via their `/v1` base URL): construct
275
+ `OpenAIProvider` with an options object — no more positional `baseURL` hole:
252
276
 
253
277
  ```typescript
254
278
  import { OpenAIProvider } from "@deepstrike/sdk"
255
279
 
256
- const provider = new OpenAIProvider(
280
+ const provider = new OpenAIProvider({
257
281
  apiKey,
258
- "mimo-v2.5-pro",
259
- { maxRetries: 3, baseDelay: 1000 }, // RetryConfig (pass undefined for defaults)
260
- "https://token-plan-cn.xiaomimimo.com/v1",
261
- )
282
+ model: "mimo-v2.5-pro",
283
+ baseURL: "https://token-plan-cn.xiaomimimo.com/v1",
284
+ })
262
285
  ```
263
286
 
264
- Prefer a dedicated `*Provider` (e.g. `DeepSeekProvider`, `KimiProvider`) when one exists for your backend — they default the base URL and add backend-specific reasoning handling. OpenAI itself can also be selected through the provider catalog:
287
+ Prefer a dedicated backend class from `@deepstrike/sdk/providers` when one exists — they default the base
288
+ URL and add backend-specific reasoning handling. Any model can also be selected through the catalog: `createProvider` picks the protocol/endpoint for you:
265
289
 
266
290
  ```typescript
267
291
  import { createProvider } from "@deepstrike/sdk"
@@ -126,10 +126,11 @@ export interface HarnessLoopOptions {
126
126
  }
127
127
  export declare class HarnessLoop {
128
128
  private runner;
129
- private evalProvider;
130
129
  private maxAttempts;
131
130
  private skillDir?;
132
- private verdictFn?;
131
+ /** How each attempt is judged. Hybrid (host verdictFn → LLM eval) when a verdictFn is supplied,
132
+ * otherwise the built-in LLM eval. The loop just calls `this.judge.judge(...)`. */
133
+ private judge;
133
134
  constructor(runner: RuntimeRunner, evalProvider: import("../types.js").LLMProvider, options?: HarnessLoopOptions);
134
135
  run(request: HarnessRequest): Promise<HarnessOutcome>;
135
136
  stream(request: HarnessRequest): AsyncIterable<HarnessEvent>;
@@ -1,7 +1,7 @@
1
1
  import { collectText } from "../runtime/runner.js";
2
2
  import { writeFile } from "fs/promises";
3
3
  import path from "path";
4
- import { getKernel } from "../kernel.js";
4
+ import { HybridJudge, VerdictFnJudge, LlmEvalJudge } from "./judge.js";
5
5
  async function runOnce(runner, req) {
6
6
  let text = "";
7
7
  let done;
@@ -58,16 +58,19 @@ export class EvalLoopHarness {
58
58
  }
59
59
  export class HarnessLoop {
60
60
  runner;
61
- evalProvider;
62
61
  maxAttempts;
63
62
  skillDir;
64
- verdictFn;
63
+ /** How each attempt is judged. Hybrid (host verdictFn → LLM eval) when a verdictFn is supplied,
64
+ * otherwise the built-in LLM eval. The loop just calls `this.judge.judge(...)`. */
65
+ judge;
65
66
  constructor(runner, evalProvider, options = {}) {
66
67
  this.runner = runner;
67
- this.evalProvider = evalProvider;
68
68
  this.maxAttempts = options.maxAttempts ?? 3;
69
69
  this.skillDir = options.skillDir;
70
- this.verdictFn = options.verdictFn;
70
+ const llmJudge = new LlmEvalJudge(evalProvider);
71
+ this.judge = options.verdictFn
72
+ ? new HybridJudge(new VerdictFnJudge(options.verdictFn), llmJudge)
73
+ : llmJudge;
71
74
  }
72
75
  async run(request) {
73
76
  let last;
@@ -93,7 +96,6 @@ export class HarnessLoop {
93
96
  };
94
97
  }
95
98
  async *stream(request) {
96
- const kernel = getKernel();
97
99
  const criteria = request.criteria ?? [];
98
100
  let currentGoal = request.goal;
99
101
  let lastIterations = 0;
@@ -135,35 +137,13 @@ export class HarnessLoop {
135
137
  }
136
138
  }
137
139
  yield { type: "supervising" };
138
- // I3.2 (A2/A3): host-supplied `verdictFn` short-circuits the LLM eval. When it returns a
139
- // Verdict, use it; when it returns undefined, defer to the built-in eval (hybrid path).
140
- let verdict;
141
- let skillCandidate;
142
- if (this.verdictFn) {
143
- verdict = await this.verdictFn({ goal: request.goal, criteria, attempt, result: lastResult });
144
- }
145
- if (!verdict) {
146
- // #6 (0.5.0): the eval/verdict compute is the kernel's stateless free functions (was the
147
- // EvalPipeline state machine). Build the eval prompt, call the eval LLM, parse the verdict.
148
- const evalMsgs = kernel.buildEvalMessages(request.goal, criteria, lastResult, attempt, true);
149
- let evalText = "";
150
- const evalContext = {
151
- systemText: evalMsgs.filter((m) => m.role === "system").map((m) => m.content).join("\n\n"),
152
- turns: evalMsgs.filter((m) => m.role !== "system"),
153
- };
154
- for await (const evt of this.evalProvider.stream(evalContext, [], undefined)) {
155
- if (evt.type === "text_delta")
156
- evalText += evt.delta;
157
- }
158
- const parsed = kernel.parseVerdict(evalText);
159
- verdict = {
160
- passed: parsed.passed,
161
- overallScore: parsed.overallScore,
162
- feedback: parsed.feedback,
163
- details: parsed.details ?? [],
164
- };
165
- skillCandidate = parsed.skillCandidate;
166
- }
140
+ // I3.2 (A2/A3): the judge Strategy encapsulates "host verdictFn short-circuit → built-in LLM
141
+ // eval". HarnessLoop's judge always terminates in LlmEvalJudge, so a verdict is guaranteed.
142
+ const judged = await this.judge.judge({ goal: request.goal, criteria, attempt, result: lastResult });
143
+ const verdict = judged?.verdict;
144
+ const skillCandidate = judged?.skillCandidate;
145
+ if (!verdict)
146
+ throw new Error("HarnessLoop: judge produced no verdict");
167
147
  if (verdict.passed) {
168
148
  if (skillCandidate && this.skillDir) {
169
149
  const { name, description, whenToUse, content } = skillCandidate;
@@ -0,0 +1,42 @@
1
+ import type { LLMProvider } from "../types.js";
2
+ import { getKernel } from "../kernel.js";
3
+ import type { Criterion, Verdict, VerdictFn } from "./harness.js";
4
+ export type SkillCandidate = ReturnType<ReturnType<typeof getKernel>["parseVerdict"]>["skillCandidate"];
5
+ export interface JudgeContext {
6
+ goal: string;
7
+ criteria: Criterion[];
8
+ attempt: number;
9
+ result: string;
10
+ }
11
+ export interface JudgeResult {
12
+ verdict: Verdict;
13
+ /** Skill the judge proposes extracting on pass (LLM-eval path only). */
14
+ skillCandidate?: SkillCandidate;
15
+ }
16
+ /** Decides whether one attempt's result meets the criteria. Returning `undefined` defers to a
17
+ * fallback judge (enables hybrid host/LLM judgment). */
18
+ export interface AttemptJudge {
19
+ judge(ctx: JudgeContext): Promise<JudgeResult | undefined>;
20
+ }
21
+ /** Wraps a host-supplied `VerdictFn`. Returns `undefined` (defer) when the function does. */
22
+ export declare class VerdictFnJudge implements AttemptJudge {
23
+ private readonly fn;
24
+ constructor(fn: VerdictFn);
25
+ judge(ctx: JudgeContext): Promise<JudgeResult | undefined>;
26
+ }
27
+ /** The built-in LLM eval: render the kernel eval prompt, stream the eval provider, parse the
28
+ * verdict. Always produces a JudgeResult (never defers). */
29
+ export declare class LlmEvalJudge implements AttemptJudge {
30
+ private readonly evalProvider;
31
+ private readonly extractSkillOnPass;
32
+ constructor(evalProvider: LLMProvider, extractSkillOnPass?: boolean);
33
+ judge(ctx: JudgeContext): Promise<JudgeResult>;
34
+ }
35
+ /** Try `primary`; if it defers (`undefined`), use `fallback`. Models HarnessLoop's
36
+ * "verdictFn short-circuits, else built-in LLM eval" hybrid judgment. */
37
+ export declare class HybridJudge implements AttemptJudge {
38
+ private readonly primary;
39
+ private readonly fallback;
40
+ constructor(primary: AttemptJudge, fallback: AttemptJudge);
41
+ judge(ctx: JudgeContext): Promise<JudgeResult | undefined>;
42
+ }
@@ -0,0 +1,58 @@
1
+ import { getKernel } from "../kernel.js";
2
+ /** Wraps a host-supplied `VerdictFn`. Returns `undefined` (defer) when the function does. */
3
+ export class VerdictFnJudge {
4
+ fn;
5
+ constructor(fn) {
6
+ this.fn = fn;
7
+ }
8
+ async judge(ctx) {
9
+ const verdict = await this.fn({ goal: ctx.goal, criteria: ctx.criteria, attempt: ctx.attempt, result: ctx.result });
10
+ return verdict ? { verdict } : undefined;
11
+ }
12
+ }
13
+ /** The built-in LLM eval: render the kernel eval prompt, stream the eval provider, parse the
14
+ * verdict. Always produces a JudgeResult (never defers). */
15
+ export class LlmEvalJudge {
16
+ evalProvider;
17
+ extractSkillOnPass;
18
+ constructor(evalProvider, extractSkillOnPass = true) {
19
+ this.evalProvider = evalProvider;
20
+ this.extractSkillOnPass = extractSkillOnPass;
21
+ }
22
+ async judge(ctx) {
23
+ const kernel = getKernel();
24
+ const evalMsgs = kernel.buildEvalMessages(ctx.goal, ctx.criteria, ctx.result, ctx.attempt, this.extractSkillOnPass);
25
+ const evalContext = {
26
+ systemText: evalMsgs.filter((m) => m.role === "system").map((m) => m.content).join("\n\n"),
27
+ turns: evalMsgs.filter((m) => m.role !== "system"),
28
+ };
29
+ let evalText = "";
30
+ for await (const evt of this.evalProvider.stream(evalContext, [], undefined)) {
31
+ if (evt.type === "text_delta")
32
+ evalText += evt.delta;
33
+ }
34
+ const parsed = kernel.parseVerdict(evalText);
35
+ return {
36
+ verdict: {
37
+ passed: parsed.passed,
38
+ overallScore: parsed.overallScore,
39
+ feedback: parsed.feedback,
40
+ details: parsed.details ?? [],
41
+ },
42
+ skillCandidate: parsed.skillCandidate,
43
+ };
44
+ }
45
+ }
46
+ /** Try `primary`; if it defers (`undefined`), use `fallback`. Models HarnessLoop's
47
+ * "verdictFn short-circuits, else built-in LLM eval" hybrid judgment. */
48
+ export class HybridJudge {
49
+ primary;
50
+ fallback;
51
+ constructor(primary, fallback) {
52
+ this.primary = primary;
53
+ this.fallback = fallback;
54
+ }
55
+ async judge(ctx) {
56
+ return (await this.primary.judge(ctx)) ?? (await this.fallback.judge(ctx));
57
+ }
58
+ }
@@ -0,0 +1,4 @@
1
+ export { SinglePassHarness, EvalLoopHarness, HarnessLoop } from "./harness.js";
2
+ export type { HarnessRequest, HarnessOutcome, HarnessLoopOptions, QualityGate, CriterionResult, HarnessEvent, VerdictFn, } from "./harness.js";
3
+ export { judge } from "../runtime/eval.js";
4
+ export type { Criterion, Verdict, VerdictDetail, JudgeArgs } from "../runtime/eval.js";
@@ -0,0 +1,3 @@
1
+ // `@deepstrike/sdk/harness` — the evaluation framework: single-pass / eval-loop harnesses and the judge.
2
+ export { SinglePassHarness, EvalLoopHarness, HarnessLoop } from "./harness.js";
3
+ export { judge } from "../runtime/eval.js";
package/dist/index.d.ts CHANGED
@@ -1,92 +1,33 @@
1
1
  export { runAgent, runFanout } from "./runtime/facade.js";
2
2
  export type { RunAgentOptions, RunFanoutOptions } from "./runtime/facade.js";
3
3
  export { RuntimeRunner, collectText } from "./runtime/runner.js";
4
- export type { RuntimeOptions, SchedulerBudget } from "./runtime/runner.js";
5
- export { builtinReducers, resolveReducer } from "./runtime/reducers.js";
6
- export type { Reducer, ReducerRegistry, ReducerInput } from "./runtime/reducers.js";
7
- export { loopInstruction, classifyInstruction, judgeGoal, extractLoopContinue, extractClassifyBranch, extractJudgeWinner, } from "./runtime/workflow-control-flow.js";
8
- export { WorktreeExecutionPlane, GitWorktreeManager } from "./runtime/worktree-plane.js";
9
- export type { WorktreeManager } from "./runtime/worktree-plane.js";
10
- export { FileWorkflowStore } from "./runtime/workflow-store.js";
11
- export type { MemoryPolicy, MemoryWriteRateLimit, ResourceQuota } from "./kernel.js";
12
- export { KernelPrimitivesDashboard } from "./runtime/kernel-primitives-dashboard.js";
13
- export { FilteredExecutionPlane } from "./runtime/filtered-plane.js";
14
- export { SubAgentOrchestrator, defaultSubAgentOrchestrator, spawnStandalone } from "./runtime/sub-agent-orchestrator.js";
15
- export type { SubAgentRunContext } from "./runtime/sub-agent-orchestrator.js";
4
+ export type { RuntimeOptions } from "./runtime/runner.js";
16
5
  export { LocalExecutionPlane } from "./runtime/execution-plane.js";
17
6
  export type { ExecutionPlane, RunContext } from "./runtime/execution-plane.js";
18
7
  export { InMemorySessionLog, FileSessionLog } from "./runtime/session-log.js";
19
8
  export type { SessionLog, SessionEvent } from "./runtime/session-log.js";
20
- export { ReplayProvider } from "./runtime/replay-provider.js";
21
- export type { ReplayProviderOpts } from "./runtime/replay-provider.js";
22
- export { extractRecordedMessages } from "./runtime/replay-fixture.js";
23
- export { judge, buildEvalMessages, parseVerdict, verdictOutputSchema } from "./runtime/eval.js";
24
- export type { Criterion, Verdict, VerdictDetail, JudgeArgs } from "./runtime/eval.js";
25
- export { DEFAULT_NATIVE_ATTENTION_POLICY, DEFAULT_NATIVE_GOVERNANCE_POLICY, assertNativeProfile, osProfile, } from "./runtime/os-profile.js";
26
- export type { NativeOsProfile, OsProfileId } from "./runtime/os-profile.js";
27
- export { rebuildOsSnapshotFromSessionEvents, sessionLogHasRequiredCategories, } from "./runtime/os-snapshot.js";
28
- export type { OsSnapshot } from "./runtime/os-snapshot.js";
29
- export { categoryForKind, kernelObservationToSessionEvent } from "./runtime/kernel-event-log.js";
30
- export type { KernelEventCategory } from "./runtime/kernel-event-log.js";
31
- export { NullArchiveStore, FileArchiveStore } from "./runtime/archive.js";
32
- export type { ArchiveStore } from "./runtime/archive.js";
33
- export { EnvCredentialVault, InMemoryCredentialVault, ChainedCredentialVault } from "./runtime/credential-vault.js";
34
- export type { CredentialVault } from "./runtime/credential-vault.js";
35
- export { ProcessSandboxPlane } from "./runtime/process-sandbox-plane.js";
36
- export type { SandboxOptions } from "./runtime/process-sandbox-plane.js";
37
- export { McpProxyPlane } from "./runtime/mcp-proxy-plane.js";
38
- export type { McpServerConfig } from "./runtime/mcp-proxy-plane.js";
39
- export { RemoteVpcPlane } from "./runtime/remote-vpc-plane.js";
40
- export type { RemoteVpcOptions } from "./runtime/remote-vpc-plane.js";
41
- export { AnthropicProvider } from "./providers/anthropic.js";
42
- export { OpenAIChatProvider, OpenAIProvider } from "./providers/openai.js";
43
- export { DeepSeekProvider, DeepSeekAnthropicProvider } from "./providers/deepseek.js";
44
- export { KimiProvider, KimiAnthropicProvider } from "./providers/kimi.js";
45
- export { QwenProvider, QwenAnthropicProvider } from "./providers/qwen.js";
46
- export { GLMProvider, GLMAnthropicProvider } from "./providers/glm.js";
47
- export { GeminiProvider } from "./providers/gemini.js";
48
- export { MiniMaxAnthropicProvider, MiniMaxOpenAIProvider } from "./providers/minimax.js";
49
- export { OllamaProvider } from "./providers/ollama.js";
50
- export { CircuitBreaker, normalizeToolCall } from "./providers/base.js";
51
- export { OpenAIChatAdapter } from "./providers/openai-chat.js";
52
- export { OpenAIResponsesAdapter, OpenAIResponsesProvider } from "./providers/openai-responses.js";
53
- export type { OpenAIResponsesRunState } from "./providers/openai-responses.js";
54
- export { endpointProfiles, modelProfiles, getModelProfile } from "./providers/profiles.js";
55
- export type { ModelProfileId, ProviderId } from "./providers/profiles.js";
56
- export { createProvider } from "./providers/catalog.js";
57
- export type { CreateProviderOptions, EndpointProfileId } from "./providers/catalog.js";
58
- export { ProviderReplayValidationError, DEGRADED_REASONING_PLACEHOLDER } from "./providers/replay-validator.js";
59
- export { assessProviderReplayability, peekProviderReplay, seedProviderReplayFromEvents, isReplayCompatibleWithProvider, } from "./runtime/provider-replay.js";
60
- export { tool, streamingTool, executeTools, readFile, validateToolArguments } from "./tools/index.js";
9
+ export { InMemoryGroupBudgetStore, SessionLogGroupBudgetStore } from "./runtime/run-group.js";
10
+ export type { RunGroup, GroupBudgetStore, GroupLedger, GroupCharge, GroupMember } from "./runtime/run-group.js";
11
+ export { InMemoryEventStream, isVisibleTo } from "./runtime/event-stream.js";
12
+ export type { EventStream, BlackboardEvent, EventViewer } from "./runtime/event-stream.js";
13
+ export { reactByMention, directorDriven, roundRobin, firstNonEmpty, union } from "./runtime/turn-policy.js";
14
+ export type { TurnPolicy, PeerView } from "./runtime/turn-policy.js";
15
+ export { ReactiveSession, readRecentTool } from "./runtime/reactive-session.js";
16
+ export type { ReactiveSessionOptions, ReactivePeerSpec, EmitEvent, Reaction, ReactorTurn, ReactorContext } from "./runtime/reactive-session.js";
17
+ export { tool, streamingTool } from "./tools/index.js";
61
18
  export type { RegisteredTool, ToolExecContext } from "./tools/index.js";
62
19
  export { safeTool, ok, fail, ToolError, formatToolError } from "./tools/errors.js";
63
20
  export type { ToolEnvelope, ToolEnvelopeOk, ToolEnvelopeFail } from "./tools/errors.js";
64
- export { scanSkillDir, readSkillFile } from "./skills/loader.js";
65
- export type { SkillMetadata } from "./skills/loader.js";
66
- export { WorkingMemory } from "./memory/working.js";
67
- export { InMemoryDreamStore } from "./memory/in-memory-store.js";
68
- export type { DreamStore, DreamResult, SessionData, SessionMessage, MemoryEntry, CurationResult, CurationStats, MemoryWriteRequest, MemoryQuery, MemoryRetrieval, MemoryMetadata, MemoryKind, } from "./memory/protocols.js";
69
- export type { KnowledgeSource } from "./knowledge/source.js";
70
- export { ScheduledPrompt } from "./signals/scheduled.js";
71
- export { SignalGateway } from "./signals/gateway.js";
72
- export type { RuntimeSignal, SignalSource } from "./signals/types.js";
73
- export { PermissionManager, PermissionMode } from "./safety/permissions.js";
74
- export type { PermissionDecision, Permission } from "./safety/permissions.js";
75
- export { Governance, governancePolicyToKernelEvent } from "./governance.js";
21
+ export { AnthropicProvider } from "./providers/anthropic.js";
22
+ export type { AnthropicProviderConfig } from "./providers/anthropic.js";
23
+ export { OpenAIProvider } from "./providers/openai.js";
24
+ export type { OpenAIProviderOptions } from "./providers/openai.js";
25
+ export { OpenAIResponsesProvider } from "./providers/openai-responses.js";
26
+ export { createProvider } from "./providers/catalog.js";
27
+ export type { CreateProviderOptions, EndpointProfileId } from "./providers/catalog.js";
28
+ export { Governance } from "./governance.js";
76
29
  export type { GovernanceVerdict, GovernancePolicy, GovernanceConstraint } from "./governance.js";
77
- export { SinglePassHarness, EvalLoopHarness, HarnessLoop } from "./harness/harness.js";
78
- export type { HarnessRequest, HarnessOutcome, HarnessLoopOptions, QualityGate, CriterionResult, HarnessEvent, VerdictFn } from "./harness/harness.js";
79
- export type { Message, ToolCall, ToolResult, ToolSchema, ContentPart, TextPart, ImagePart, AudioPart, StreamEvent, TextDelta, ThinkingDelta, ToolCallEvent, ToolChunk, ToolDeltaEvent, ToolSuspendEvent, ToolResultEvent, ToolAuditFailedEvent, DoneEvent, ErrorEvent, PermissionRequestEvent, PermissionResolvedEvent, PermissionResponse, LLMProvider, RetryConfig, TokenUsage, ProviderToolSpec, ProviderRunState, ProviderReplay, RenderedContext, ReplayabilityAssessment, CacheBreakpointStrategy, } from "./types.js";
80
- export type { AgentCapabilityFilter, AgentIdentity, AgentIsolation, AgentRunSpec, AgentProcessChangedObservation, ContextInheritance, KernelAgentRole, LoopResult, MilestoneCheckResult, MilestoneContract, MilestonePhase, MilestonePolicy, SubAgentResult, TerminationReason, WorkflowSpec, WorkflowNodeSpec, WorkflowTaskSpec, WorkflowSpawnInfo, } from "./types/agent.js";
81
- export { agentIdentitySub, agentRunSpecToKernel, milestoneCheckFail, milestoneCheckPass, milestoneCheckResultToKernel, subAgentResultToKernel, workflowSpecToKernel, workflowNodeSpecToKernel, submitWorkflowNodesToKernel, submitWorkflowToKernel, submitWorkflowNodesTool, startWorkflowTool, fanoutSynthesize, generateAndFilter, verifyRules, genEval, } from "./types/agent.js";
82
- export type { AcceptanceCriterion, VerificationContract, ContractCheckResult, } from "./collaboration/contract.js";
83
- export { ContractBuilder, formatContractForSystemPrompt, contractToCriteriaStrings, } from "./collaboration/contract.js";
84
30
  export { AgentPool } from "./collaboration/pool.js";
85
- export type { AgentRole, IsolatedVerifierContext, CoordinatorConfig } from "./collaboration/pool.js";
86
- export { KERNEL_ROLE_MAP } from "./collaboration/pool.js";
87
- export { ContractDrivenHarness } from "./collaboration/harness.js";
88
- export type { ContractOutcome, ContractHarnessOptions, Violation } from "./collaboration/harness.js";
89
- export { HandoffBus } from "./collaboration/handoff.js";
90
- export type { HandoffArtifact, ContractOutcomeInput } from "./collaboration/handoff.js";
91
- export { CreatorVerifierMode, OrchestrationMode } from "./collaboration/modes/creator-verifier.js";
92
- export type { CreatorVerifierMetrics } from "./collaboration/modes/creator-verifier.js";
31
+ export type { RuntimeSignal, SignalSource } from "./signals/types.js";
32
+ export type { Message, ToolCall, ToolResult, ToolSchema, ContentPart, TextPart, ImagePart, AudioPart, StreamEvent, TextDelta, ThinkingDelta, ToolCallEvent, ToolChunk, ToolDeltaEvent, ToolSuspendEvent, ToolResultEvent, ToolAuditFailedEvent, DoneEvent, ErrorEvent, PermissionRequestEvent, PermissionResolvedEvent, PermissionResponse, LLMProvider, RetryConfig, TokenUsage, } from "./types.js";
33
+ export type { WorkflowSpec, WorkflowNodeSpec, } from "./types/agent.js";
package/dist/index.js CHANGED
@@ -1,69 +1,37 @@
1
1
  // ╔══════════════════════════════════════════════════════════════════════════╗
2
- // ║ START HERE — the canonical entry points for the common cases. ║
3
- // ║ runAgent → one prompt, one model, the text back. ║
4
- // ║ runFanout → run N tasks in parallel, then synthesize (kernel-gated DAG).║
5
- // ║ RuntimeRunner → drop down to this for streaming, tools, signals, memory, ║
6
- // ║ governance, and the standalone `runWorkflow` driver. ║
7
- // ║ Everything below the providers block is advanced / opt-in surface. ║
2
+ // ║ @deepstrike/sdk — root surface (v0.2.30). ║
3
+ // ║ ║
4
+ // ║ This is the intent layer: run an agent, run a workflow, author a tool, ║
5
+ // ║ pick a provider. Advanced machinery lives behind subpaths: ║
6
+ // ║ @deepstrike/sdk/providers — backend provider classes + profiles ║
7
+ // ║ @deepstrike/sdk/workflow — orchestration, reducers, contracts, specs ║
8
+ // ║ @deepstrike/sdk/planes — worktree / sandbox / mcp / vpc planes ║
9
+ // ║ @deepstrike/sdk/memory — dream + working memory, knowledge sources ║
10
+ // ║ @deepstrike/sdk/harness — eval harnesses + judge ║
11
+ // ║ @deepstrike/sdk/os — profiles, diagnostics, signals, replay tests ║
8
12
  // ╚══════════════════════════════════════════════════════════════════════════╝
13
+ // ── Start here: the canonical entry points ─────────────────────────────────
9
14
  export { runAgent, runFanout } from "./runtime/facade.js";
10
- // ── Runtime (Layer 1.5) ────────────────────────────────────────────────────
11
15
  export { RuntimeRunner, collectText } from "./runtime/runner.js";
12
- export { builtinReducers, resolveReducer } from "./runtime/reducers.js";
13
- export { loopInstruction, classifyInstruction, judgeGoal, extractLoopContinue, extractClassifyBranch, extractJudgeWinner, } from "./runtime/workflow-control-flow.js";
14
- export { WorktreeExecutionPlane, GitWorktreeManager } from "./runtime/worktree-plane.js";
15
- export { FileWorkflowStore } from "./runtime/workflow-store.js";
16
- export { KernelPrimitivesDashboard } from "./runtime/kernel-primitives-dashboard.js";
17
- export { FilteredExecutionPlane } from "./runtime/filtered-plane.js";
18
- export { SubAgentOrchestrator, defaultSubAgentOrchestrator, spawnStandalone } from "./runtime/sub-agent-orchestrator.js";
16
+ // ── Execution plane + session log (the defaults) ────────────────────────────
19
17
  export { LocalExecutionPlane } from "./runtime/execution-plane.js";
20
18
  export { InMemorySessionLog, FileSessionLog } from "./runtime/session-log.js";
21
- export { ReplayProvider } from "./runtime/replay-provider.js";
22
- export { extractRecordedMessages } from "./runtime/replay-fixture.js";
23
- export { judge, buildEvalMessages, parseVerdict, verdictOutputSchema } from "./runtime/eval.js";
24
- export { DEFAULT_NATIVE_ATTENTION_POLICY, DEFAULT_NATIVE_GOVERNANCE_POLICY, assertNativeProfile, osProfile, } from "./runtime/os-profile.js";
25
- export { rebuildOsSnapshotFromSessionEvents, sessionLogHasRequiredCategories, } from "./runtime/os-snapshot.js";
26
- export { categoryForKind, kernelObservationToSessionEvent } from "./runtime/kernel-event-log.js";
27
- export { NullArchiveStore, FileArchiveStore } from "./runtime/archive.js";
28
- export { EnvCredentialVault, InMemoryCredentialVault, ChainedCredentialVault } from "./runtime/credential-vault.js";
29
- export { ProcessSandboxPlane } from "./runtime/process-sandbox-plane.js";
30
- export { McpProxyPlane } from "./runtime/mcp-proxy-plane.js";
31
- export { RemoteVpcPlane } from "./runtime/remote-vpc-plane.js";
32
- // ── Providers ─────────────────────────────────────────────────────────────
19
+ export { InMemoryGroupBudgetStore, SessionLogGroupBudgetStore } from "./runtime/run-group.js";
20
+ export { InMemoryEventStream, isVisibleTo } from "./runtime/event-stream.js";
21
+ export { reactByMention, directorDriven, roundRobin, firstNonEmpty, union } from "./runtime/turn-policy.js";
22
+ export { ReactiveSession, readRecentTool } from "./runtime/reactive-session.js";
23
+ // ── Tool authoring ──────────────────────────────────────────────────────────
24
+ export { tool, streamingTool } from "./tools/index.js";
25
+ export { safeTool, ok, fail, ToolError, formatToolError } from "./tools/errors.js";
26
+ // ── Providers (base classes + the universal factory) ────────────────────────
27
+ // Any backend — including a custom OpenAI-compatible endpoint — is reachable via `createProvider`.
28
+ // Backend-specific classes (DeepSeek/Kimi/Qwen/GLM/Gemini/Ollama/MiniMax) live in `@deepstrike/sdk/providers`.
33
29
  export { AnthropicProvider } from "./providers/anthropic.js";
34
- export { OpenAIChatProvider, OpenAIProvider } from "./providers/openai.js";
35
- export { DeepSeekProvider, DeepSeekAnthropicProvider } from "./providers/deepseek.js";
36
- export { KimiProvider, KimiAnthropicProvider } from "./providers/kimi.js";
37
- export { QwenProvider, QwenAnthropicProvider } from "./providers/qwen.js";
38
- export { GLMProvider, GLMAnthropicProvider } from "./providers/glm.js";
39
- export { GeminiProvider } from "./providers/gemini.js";
40
- export { MiniMaxAnthropicProvider, MiniMaxOpenAIProvider } from "./providers/minimax.js";
41
- export { OllamaProvider } from "./providers/ollama.js";
42
- export { CircuitBreaker, normalizeToolCall } from "./providers/base.js";
43
- export { OpenAIChatAdapter } from "./providers/openai-chat.js";
44
- export { OpenAIResponsesAdapter, OpenAIResponsesProvider } from "./providers/openai-responses.js";
45
- export { endpointProfiles, modelProfiles, getModelProfile } from "./providers/profiles.js";
30
+ export { OpenAIProvider } from "./providers/openai.js";
31
+ export { OpenAIResponsesProvider } from "./providers/openai-responses.js";
46
32
  export { createProvider } from "./providers/catalog.js";
47
- export { ProviderReplayValidationError, DEGRADED_REASONING_PLACEHOLDER } from "./providers/replay-validator.js";
48
- export { assessProviderReplayability, peekProviderReplay, seedProviderReplayFromEvents, isReplayCompatibleWithProvider, } from "./runtime/provider-replay.js";
49
- // ── Tools & Skills ─────────────────────────────────────────────────────────
50
- export { tool, streamingTool, executeTools, readFile, validateToolArguments } from "./tools/index.js";
51
- export { safeTool, ok, fail, ToolError, formatToolError } from "./tools/errors.js";
52
- export { scanSkillDir, readSkillFile } from "./skills/loader.js";
53
- // ── Memory ─────────────────────────────────────────────────────────────────
54
- export { WorkingMemory } from "./memory/working.js";
55
- export { InMemoryDreamStore } from "./memory/in-memory-store.js";
56
- export { ScheduledPrompt } from "./signals/scheduled.js";
57
- export { SignalGateway } from "./signals/gateway.js";
58
- // ── Safety & Governance ────────────────────────────────────────────────────
59
- export { PermissionManager, PermissionMode } from "./safety/permissions.js";
60
- export { Governance, governancePolicyToKernelEvent } from "./governance.js";
61
- // ── Harness ────────────────────────────────────────────────────────────────
62
- export { SinglePassHarness, EvalLoopHarness, HarnessLoop } from "./harness/harness.js";
63
- export { agentIdentitySub, agentRunSpecToKernel, milestoneCheckFail, milestoneCheckPass, milestoneCheckResultToKernel, subAgentResultToKernel, workflowSpecToKernel, workflowNodeSpecToKernel, submitWorkflowNodesToKernel, submitWorkflowToKernel, submitWorkflowNodesTool, startWorkflowTool, fanoutSynthesize, generateAndFilter, verifyRules, genEval, } from "./types/agent.js";
64
- export { ContractBuilder, formatContractForSystemPrompt, contractToCriteriaStrings, } from "./collaboration/contract.js";
33
+ // ── Governance ──────────────────────────────────────────────────────────────
34
+ export { Governance } from "./governance.js";
35
+ // ── Multi-agent primitive ───────────────────────────────────────────────────
36
+ // Parallel fan-out / sub-agent delegation. The full orchestration layer is in `@deepstrike/sdk/workflow`.
65
37
  export { AgentPool } from "./collaboration/pool.js";
66
- export { KERNEL_ROLE_MAP } from "./collaboration/pool.js";
67
- export { ContractDrivenHarness } from "./collaboration/harness.js";
68
- export { HandoffBus } from "./collaboration/handoff.js";
69
- export { CreatorVerifierMode, OrchestrationMode } from "./collaboration/modes/creator-verifier.js";
package/dist/kernel.d.ts CHANGED
@@ -17,8 +17,12 @@ export interface MemoryWriteRateLimit {
17
17
  windowMs: number;
18
18
  }
19
19
  export interface ResourceQuota {
20
- /** Max sub-agents in the `running` state at once; further spawns are denied while at cap. */
20
+ /** Max sub-agents in the `running` state at once; further spawns are denied while at cap.
21
+ * Instantaneous — vehicle-scoped (cannot span stateless replicas). */
21
22
  maxConcurrentSubagents?: number;
23
+ /** L1 (RunGroup): max sub-agents spawned *cumulatively* across the governance domain. With a
24
+ * `runGroup`, this spans N stateless top-level runs (seeded/charged via the group ledger). */
25
+ maxTotalSubagents?: number;
22
26
  /** Max sub-agent nesting depth (direct children of the root loop are depth 1). */
23
27
  maxSpawnDepth?: number;
24
28
  /** Rolling-window memory-write rate limit: at most `maxWrites` per any `windowMs` span. */
@@ -135,6 +139,8 @@ export interface KernelRuntimeInstance {
135
139
  step(inputJson: string): string;
136
140
  isTerminal(): boolean;
137
141
  turn(): number;
142
+ /** L1 (RunGroup): cumulative sub-agent spawns this run, for charging the group ledger at run end. */
143
+ localSubagentsSpawned(): number;
138
144
  recoveryContentBytes(): number;
139
145
  render(): RenderedContext;
140
146
  drainNewMessages(): Message[];
@@ -0,0 +1,4 @@
1
+ export { WorkingMemory } from "./working.js";
2
+ export { InMemoryDreamStore } from "./in-memory-store.js";
3
+ export type { DreamStore, DreamResult, SessionData, SessionMessage, MemoryEntry, CurationResult, CurationStats, MemoryWriteRequest, MemoryQuery, MemoryRetrieval, MemoryMetadata, MemoryKind, } from "./protocols.js";
4
+ export type { KnowledgeSource } from "../knowledge/source.js";
@@ -0,0 +1,3 @@
1
+ // `@deepstrike/sdk/memory` — long-term (dream) and working memory, plus the knowledge-source interface.
2
+ export { WorkingMemory } from "./working.js";
3
+ export { InMemoryDreamStore } from "./in-memory-store.js";
@@ -0,0 +1,18 @@
1
+ export { DEFAULT_NATIVE_ATTENTION_POLICY, DEFAULT_NATIVE_GOVERNANCE_POLICY, assertNativeProfile, osProfile, } from "../runtime/os-profile.js";
2
+ export type { NativeOsProfile, OsProfileId } from "../runtime/os-profile.js";
3
+ export { rebuildOsSnapshotFromSessionEvents, sessionLogHasRequiredCategories } from "../runtime/os-snapshot.js";
4
+ export type { OsSnapshot } from "../runtime/os-snapshot.js";
5
+ export type { KernelEventCategory } from "../runtime/kernel-event-log.js";
6
+ export { KernelPrimitivesDashboard } from "../runtime/kernel-primitives-dashboard.js";
7
+ export type { MemoryPolicy, MemoryWriteRateLimit, ResourceQuota } from "../kernel.js";
8
+ export type { SchedulerBudget } from "../runtime/runner.js";
9
+ export { ScheduledPrompt } from "../signals/scheduled.js";
10
+ export { SignalGateway } from "../signals/gateway.js";
11
+ export { PermissionManager, PermissionMode } from "../safety/permissions.js";
12
+ export type { PermissionDecision, Permission } from "../safety/permissions.js";
13
+ export { ReplayProvider } from "../runtime/replay-provider.js";
14
+ export type { ReplayProviderOpts } from "../runtime/replay-provider.js";
15
+ export { extractRecordedMessages } from "../runtime/replay-fixture.js";
16
+ export { ProviderReplayValidationError, DEGRADED_REASONING_PLACEHOLDER } from "../providers/replay-validator.js";
17
+ export { assessProviderReplayability, peekProviderReplay, seedProviderReplayFromEvents, isReplayCompatibleWithProvider, } from "../runtime/provider-replay.js";
18
+ export type { ReplayabilityAssessment } from "../types.js";
@@ -0,0 +1,14 @@
1
+ // `@deepstrike/sdk/os` — Agent-OS diagnostics, profiles, signal/permission machinery, replay-testing,
2
+ // and the scheduler/quota/policy types referenced by advanced `RuntimeOptions` fields.
3
+ export { DEFAULT_NATIVE_ATTENTION_POLICY, DEFAULT_NATIVE_GOVERNANCE_POLICY, assertNativeProfile, osProfile, } from "../runtime/os-profile.js";
4
+ export { rebuildOsSnapshotFromSessionEvents, sessionLogHasRequiredCategories } from "../runtime/os-snapshot.js";
5
+ export { KernelPrimitivesDashboard } from "../runtime/kernel-primitives-dashboard.js";
6
+ // Signals + SDK-side permissions.
7
+ export { ScheduledPrompt } from "../signals/scheduled.js";
8
+ export { SignalGateway } from "../signals/gateway.js";
9
+ export { PermissionManager, PermissionMode } from "../safety/permissions.js";
10
+ // Replay-based testing utilities.
11
+ export { ReplayProvider } from "../runtime/replay-provider.js";
12
+ export { extractRecordedMessages } from "../runtime/replay-fixture.js";
13
+ export { ProviderReplayValidationError, DEGRADED_REASONING_PLACEHOLDER } from "../providers/replay-validator.js";
14
+ export { assessProviderReplayability, peekProviderReplay, seedProviderReplayFromEvents, isReplayCompatibleWithProvider, } from "../runtime/provider-replay.js";