@hadooppei/hwcode 1.0.22 → 1.0.24

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.
@@ -32,7 +32,6 @@ export const KNOWLEDGE_RUNTIME_DEFAULTS = Object.freeze({
32
32
  capabilityPollMs: 5_000,
33
33
  requestTimeoutMs: 45_000,
34
34
  modelTimeoutMs: 180_000,
35
- maxOutputTokens: 4_096,
36
35
  maxAttempts: 2,
37
36
  maxFailureDetailChars: 4_000,
38
37
  maxDeltaChars: 12_000,
@@ -257,7 +257,6 @@ async function runReview(message: Extract<KnowledgeWorkerOutput, { type: "review
257
257
  reasoningEffort: "low",
258
258
  cacheRetention: "none",
259
259
  temperature: 0,
260
- maxTokens: KNOWLEDGE_RUNTIME_DEFAULTS.review.maxOutputTokens,
261
260
  timeoutMs: KNOWLEDGE_RUNTIME_DEFAULTS.review.requestTimeoutMs,
262
261
  maxRetries: 0,
263
262
  onPayload: () => { setRequestPhase("awaiting-http-response"); },
@@ -270,8 +269,15 @@ async function runReview(message: Extract<KnowledgeWorkerOutput, { type: "review
270
269
  if (response.stopReason === "error" || response.stopReason === "aborted") {
271
270
  throw new Error(response.errorMessage ?? `knowledge-review-model-${response.stopReason}`);
272
271
  }
272
+ const responseDetail = [
273
+ `stopReason=${response.stopReason}`,
274
+ `contentTypes=${response.content.map((item) => item.type).join(",") || "none"}`,
275
+ `outputTokens=${response.usage.output}`,
276
+ ].join("; ");
277
+ if (response.stopReason === "length") throw new Error(`knowledge-review-output-truncated; ${responseDetail}`);
273
278
  const raw = response.content.filter((item): item is { type: "text"; text: string } => item.type === "text")
274
279
  .map((item) => item.text).join("\n");
280
+ if (!raw.trim()) throw new Error(`knowledge-review-model-returned-no-text; ${responseDetail}`);
275
281
  post({ type: "review_result", leaderToken: message.leaderToken, requestId: message.requestId, raw });
276
282
  } catch (error) {
277
283
  const baseReason = review?.controller.signal.aborted
@@ -28,6 +28,7 @@ type OpenAIModel = Model<"openai-completions">;
28
28
  interface RemoteModel {
29
29
  id: string;
30
30
  name?: string;
31
+ reasoning?: boolean;
31
32
  input?: ModelInput[];
32
33
  contextWindow?: number;
33
34
  }
@@ -69,7 +70,7 @@ function toPiModel(
69
70
  api: "openai-completions",
70
71
  provider: provider.id,
71
72
  baseUrl,
72
- reasoning: override?.reasoning ?? defaults?.reasoning ?? false,
73
+ reasoning: override?.reasoning ?? defaults?.reasoning ?? remote.reasoning ?? false,
73
74
  input: override?.input ?? remote.input ?? defaults?.input ?? ["text"],
74
75
  contextWindow,
75
76
  maxTokens: Math.min(maxTokens, contextWindow),
@@ -104,7 +105,7 @@ function remoteContextWindow(model: Record<string, unknown>): number | undefined
104
105
  return undefined;
105
106
  }
106
107
 
107
- function parseRemoteModels(payload: unknown): RemoteModel[] {
108
+ export function parseRemoteModels(payload: unknown): RemoteModel[] {
108
109
  const entries = Array.isArray(payload)
109
110
  ? payload
110
111
  : isRecord(payload) && Array.isArray(payload.data)
@@ -122,6 +123,7 @@ function parseRemoteModels(payload: unknown): RemoteModel[] {
122
123
  models.push({
123
124
  id,
124
125
  name: typeof entry.name === "string" && entry.name.trim() ? entry.name.trim() : undefined,
126
+ reasoning: typeof entry.reasoning === "boolean" ? entry.reasoning : isRecord(entry.reasoning) || undefined,
125
127
  input: remoteInput(entry),
126
128
  contextWindow: remoteContextWindow(entry),
127
129
  });
@@ -33,7 +33,6 @@ export const KNOWLEDGE_RUNTIME_DEFAULTS = Object.freeze({
33
33
  capabilityPollMs: 5_000,
34
34
  requestTimeoutMs: 45_000,
35
35
  modelTimeoutMs: 180_000,
36
- maxOutputTokens: 4_096,
37
36
  maxAttempts: 2,
38
37
  maxFailureDetailChars: 4_000,
39
38
  maxDeltaChars: 12_000,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hadooppei/hwcode",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
4
4
  "description": "A customizable terminal coding agent with local-model support and HWCode workflows.",
5
5
  "type": "module",
6
6
  "bin": {