@momentiq/dark-factory-cli 2.2.2 → 2.2.3
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.
|
@@ -14,27 +14,31 @@ export interface LlmResult {
|
|
|
14
14
|
outputTokens: number;
|
|
15
15
|
attempts: number;
|
|
16
16
|
}
|
|
17
|
+
export interface LlmStreamResult {
|
|
18
|
+
id: string;
|
|
19
|
+
model: string;
|
|
20
|
+
content: Array<{
|
|
21
|
+
type: "tool_use";
|
|
22
|
+
name: string;
|
|
23
|
+
input: unknown;
|
|
24
|
+
} | {
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
} | {
|
|
28
|
+
type: string;
|
|
29
|
+
}>;
|
|
30
|
+
usage: {
|
|
31
|
+
input_tokens: number;
|
|
32
|
+
output_tokens: number;
|
|
33
|
+
};
|
|
34
|
+
stop_reason: string;
|
|
35
|
+
}
|
|
36
|
+
export interface LlmStreamHandle {
|
|
37
|
+
finalMessage(): Promise<LlmStreamResult>;
|
|
38
|
+
}
|
|
17
39
|
export interface LlmClientLike {
|
|
18
40
|
messages: {
|
|
19
|
-
|
|
20
|
-
id: string;
|
|
21
|
-
model: string;
|
|
22
|
-
content: Array<{
|
|
23
|
-
type: "tool_use";
|
|
24
|
-
name: string;
|
|
25
|
-
input: unknown;
|
|
26
|
-
} | {
|
|
27
|
-
type: "text";
|
|
28
|
-
text: string;
|
|
29
|
-
} | {
|
|
30
|
-
type: string;
|
|
31
|
-
}>;
|
|
32
|
-
usage: {
|
|
33
|
-
input_tokens: number;
|
|
34
|
-
output_tokens: number;
|
|
35
|
-
};
|
|
36
|
-
stop_reason: string;
|
|
37
|
-
}>;
|
|
41
|
+
stream(params: unknown): LlmStreamHandle;
|
|
38
42
|
};
|
|
39
43
|
}
|
|
40
44
|
export type LlmClientFactory = (apiKey: string) => LlmClientLike;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/onboard/llm-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/onboard/llm-client.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CACV;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAClD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC9B;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CACnB,CAAC;IACF,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE;QAIR,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAAC;KAC1C,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;AAkBjE,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,SAAS,CAAC,CAsFpB"}
|
|
@@ -14,6 +14,17 @@
|
|
|
14
14
|
// block's `input` as the candidate JSON. The SDK validates the JSON
|
|
15
15
|
// shape at the API boundary; downstream Zod validation re-checks the
|
|
16
16
|
// semantics (discriminated-union, byte budgets).
|
|
17
|
+
//
|
|
18
|
+
// Why streaming (client.messages.stream) instead of client.messages.create:
|
|
19
|
+
// the inlined sage-blueprint template pushes Phase B's request to ~960k
|
|
20
|
+
// input tokens + 32k output, which routinely exceeds Anthropic's 10-minute
|
|
21
|
+
// hard guard on non-streaming requests ("Streaming is required for
|
|
22
|
+
// operations that may take longer than 10 minutes"). The SDK refused the
|
|
23
|
+
// request pre-flight before any retry logic could fire — see #147 for the
|
|
24
|
+
// full empirical trace. The stream() helper auto-assembles tool_use input
|
|
25
|
+
// from input_json_delta events into the final Message; finalMessage() then
|
|
26
|
+
// returns the same { content, usage, stop_reason, model } shape we already
|
|
27
|
+
// read from create(), so the rest of the call site is unchanged.
|
|
17
28
|
import Anthropic from "@anthropic-ai/sdk";
|
|
18
29
|
const DEFAULT_FACTORY = (apiKey) => new Anthropic({ apiKey });
|
|
19
30
|
const TRANSIENT_STATUSES = new Set([429, 500, 502, 503, 504]);
|
|
@@ -63,7 +74,15 @@ export async function callScaffoldLlm(inputs, opts = {}) {
|
|
|
63
74
|
for (let attempt = 0; attempt < 2; attempt++) {
|
|
64
75
|
attempts++;
|
|
65
76
|
try {
|
|
66
|
-
|
|
77
|
+
// Both the stream() call and finalMessage() awaiting must live inside
|
|
78
|
+
// the try block — with streaming, the SDK's API errors (401/429/5xx,
|
|
79
|
+
// network failures) now surface as rejections on finalMessage() rather
|
|
80
|
+
// than on the synchronous stream() call. The SDK's APIError subclasses
|
|
81
|
+
// still carry .status, so isTransient() classification continues to
|
|
82
|
+
// work; tests must mock by throwing from finalMessage() with .status
|
|
83
|
+
// set to keep that contract verified.
|
|
84
|
+
const stream = client.messages.stream(request);
|
|
85
|
+
const r = await stream.finalMessage();
|
|
67
86
|
// Opt-in diagnostic — stop_reason + token counts + content shape are the
|
|
68
87
|
// discriminating signals when downstream Zod validation fails on the
|
|
69
88
|
// returned plan (truncation vs. malformed output vs. wrong block type).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/onboard/llm-client.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,kEAAkE;AAClE,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,oEAAoE;AACpE,wEAAwE;AACxE,0EAA0E;AAC1E,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AACzE,qEAAqE;AACrE,oEAAoE;AACpE,qEAAqE;AACrE,iDAAiD;
|
|
1
|
+
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/onboard/llm-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@momentiq/dark-factory-cli",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"description": "Dark Factory OSS CLI — multi-vendor adversarial critic orchestration (Cursor, Codex, Gemini, Grok) with min-complete-quorum aggregation and trusted-surface rebind",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://momentiq.ai/dark-factory",
|