@kyo-so/cli 0.12.0 → 0.13.0

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.
@@ -10,9 +10,9 @@ export declare const PLUGIN_RUNTIME_COMPATIBILITY_SCHEMA_VERSION = 1;
10
10
  export declare const MINIMUM_SUPPORTED_CODEX_VERSION = "0.144.0-alpha.4";
11
11
  export declare const PLUGIN_RUNTIME_EXPECTED_CONTRACT: {
12
12
  readonly distribution: {
13
- readonly pluginVersion: "0.5.0";
13
+ readonly pluginVersion: "0.6.0";
14
14
  readonly mcpCommand: "npx";
15
- readonly mcpPackagePin: "@kyo-so/cli@0.11.0";
15
+ readonly mcpPackagePin: "@kyo-so/cli@0.12.0";
16
16
  };
17
17
  readonly marketplace: {
18
18
  readonly name: "kyoso";
@@ -50,7 +50,7 @@ export declare const PLUGIN_RUNTIME_EXPECTED_CONTRACT: {
50
50
  readonly envVars: readonly ["OPENAI_API_KEY", "CODEX_API_KEY", "CODEX_HOME", "CODEX_ACCESS_TOKEN", "OPENROUTER_API_KEY", "ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN"];
51
51
  readonly cwd: null;
52
52
  readonly startupTimeoutSec: 20;
53
- readonly toolTimeoutSec: 360;
53
+ readonly toolTimeoutSec: 2160;
54
54
  };
55
55
  readonly pluginOverride: {
56
56
  readonly enabled: false;
@@ -59,7 +59,7 @@ export declare const PLUGIN_RUNTIME_EXPECTED_CONTRACT: {
59
59
  readonly envVars: readonly ["OPENAI_API_KEY", "CODEX_API_KEY", "CODEX_HOME", "CODEX_ACCESS_TOKEN", "OPENROUTER_API_KEY", "ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN"];
60
60
  readonly cwd: null;
61
61
  readonly startupTimeoutSec: 20;
62
- readonly toolTimeoutSec: 360;
62
+ readonly toolTimeoutSec: 2160;
63
63
  };
64
64
  readonly manualOverride: {
65
65
  readonly enabled: true;
@@ -130,9 +130,9 @@ export declare const pluginRuntimeContract: {
130
130
  readonly pluginListTopLevelKeys: readonly ["installed", "available"];
131
131
  readonly expectedContract: {
132
132
  readonly distribution: {
133
- readonly pluginVersion: "0.5.0";
133
+ readonly pluginVersion: "0.6.0";
134
134
  readonly mcpCommand: "npx";
135
- readonly mcpPackagePin: "@kyo-so/cli@0.11.0";
135
+ readonly mcpPackagePin: "@kyo-so/cli@0.12.0";
136
136
  };
137
137
  readonly marketplace: {
138
138
  readonly name: "kyoso";
@@ -170,7 +170,7 @@ export declare const pluginRuntimeContract: {
170
170
  readonly envVars: readonly ["OPENAI_API_KEY", "CODEX_API_KEY", "CODEX_HOME", "CODEX_ACCESS_TOKEN", "OPENROUTER_API_KEY", "ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN"];
171
171
  readonly cwd: null;
172
172
  readonly startupTimeoutSec: 20;
173
- readonly toolTimeoutSec: 360;
173
+ readonly toolTimeoutSec: 2160;
174
174
  };
175
175
  readonly pluginOverride: {
176
176
  readonly enabled: false;
@@ -179,7 +179,7 @@ export declare const pluginRuntimeContract: {
179
179
  readonly envVars: readonly ["OPENAI_API_KEY", "CODEX_API_KEY", "CODEX_HOME", "CODEX_ACCESS_TOKEN", "OPENROUTER_API_KEY", "ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN"];
180
180
  readonly cwd: null;
181
181
  readonly startupTimeoutSec: 20;
182
- readonly toolTimeoutSec: 360;
182
+ readonly toolTimeoutSec: 2160;
183
183
  };
184
184
  readonly manualOverride: {
185
185
  readonly enabled: true;
@@ -145,6 +145,7 @@ export declare const kyosoConfigSchema: z.ZodObject<{
145
145
  reviewBudget: z.ZodObject<{
146
146
  maxModelCalls: z.ZodNumber;
147
147
  maxTotalWallTimeMs: z.ZodNumber;
148
+ warnAgentOutputBytes: z.ZodNumber;
148
149
  maxAgentOutputBytes: z.ZodNumber;
149
150
  maxFindingsPerAgent: z.ZodNumber;
150
151
  skipOptionalPhasesWhenTokenUsageUnknown: z.ZodBoolean;
@@ -1,9 +1,10 @@
1
- export declare const DEFAULT_AGENT_TIMEOUT_MS = 120000;
1
+ export declare const DEFAULT_AGENT_TIMEOUT_MS = 600000;
2
2
  export declare const DEFAULT_MAX_CONTEXT_BYTES = 500000;
3
3
  export declare const DEFAULT_MAX_DIFF_BYTES = 300000;
4
+ export declare const DEFAULT_WARN_AGENT_OUTPUT_BYTES = 524288;
4
5
  export declare const MAX_AGENT_OUTPUT_BYTES = 1048576;
5
6
  export declare const JUDGE_MAX_OUTPUT_TOKENS = 4096;
6
7
  export declare const RAW_OUTPUT_MAX_CHARS = 16384;
7
8
  export declare const TRACE_DIR = ".kyoso/traces";
8
9
  export declare const KYOSO_CHILD_AGENT = "KYOSO_CHILD_AGENT";
9
- export declare const KYOSO_VERSION = "0.12.0";
10
+ export declare const KYOSO_VERSION = "0.13.0";
@@ -0,0 +1,9 @@
1
+ import type { ModelExecutionIdentity, ModelProviderRoute } from "./types.js";
2
+ export declare const MODEL_EXECUTION_IDENTITY_MAX_CHARS = 160;
3
+ export declare function createModelExecutionIdentity(input: {
4
+ providerRoute: ModelProviderRoute;
5
+ requestedModel?: unknown;
6
+ reportedProvider?: unknown;
7
+ reportedModel?: unknown;
8
+ }): ModelExecutionIdentity;
9
+ export declare function normalizeModelExecutionIdentity(value: unknown): ModelExecutionIdentity | undefined;
@@ -1,12 +1,12 @@
1
1
  import type { KyosoConfig } from "../config/schema.js";
2
- import type { AgentRole, KyosoReviewRequest, ReviewBudget, ReviewTool } from "./types.js";
2
+ import type { AgentRole, KyosoReviewRequest, ResolvedReviewBudget, ReviewTool } from "./types.js";
3
3
  export declare const REVIEW_CONTRACT_VERSION = "2026-07-16-v3";
4
4
  export declare function createRequestFingerprint(input: {
5
5
  tool: ReviewTool;
6
6
  request: KyosoReviewRequest;
7
7
  config: KyosoConfig;
8
8
  roles: Partial<Record<"codex" | "claude", AgentRole>>;
9
- budget: ReviewBudget;
9
+ budget: ResolvedReviewBudget;
10
10
  entrypoint?: "cli" | "mcp" | "core";
11
11
  }): string;
12
12
  export declare function canonicalJson(value: unknown): string;
@@ -1,4 +1,4 @@
1
- import type { AgentName, ModelCallKind, ModelTokenUsage, ReviewBudget, ReviewBudgetRequest, ReviewCompletion, ReviewCompletionReason, ReviewExecutionBudget, ReviewModelCallAudit } from "./types.js";
1
+ import type { AgentName, ModelExecutionIdentity, ModelCallKind, ModelTokenUsage, ReviewBudget, ReviewBudgetRequest, ReviewCompletion, ReviewCompletionReason, ReviewExecutionBudget, ReviewModelCallPlan, ReviewModelCallAudit, ResolvedReviewBudget } from "./types.js";
2
2
  type ReservationStatus = "reserved" | "started" | "completed" | "skipped";
3
3
  type Reservation = {
4
4
  id: number;
@@ -6,24 +6,39 @@ type Reservation = {
6
6
  agent?: AgentName;
7
7
  status: ReservationStatus;
8
8
  reason?: string;
9
+ messageBytes?: number;
10
+ thoughtBytes?: number;
9
11
  outputBytes?: number;
12
+ outputWarningTriggered?: boolean;
13
+ salvaged?: boolean;
14
+ reportedFindings?: number;
15
+ findingsTargetExceeded?: boolean;
10
16
  usage?: ModelTokenUsage;
17
+ executionIdentity?: ModelExecutionIdentity;
11
18
  stopReason?: string;
12
19
  };
13
20
  export type ModelCallReservation = Pick<Reservation, "id" | "kind" | "agent">;
14
21
  export type BudgetReservationFailure = {
15
22
  reason: "model_call_budget" | "deadline";
16
23
  };
17
- export declare function resolveReviewBudget(ceiling: ReviewBudget, requested: ReviewBudgetRequest | undefined): ReviewBudget;
24
+ export declare function resolveReviewBudget(ceiling: ReviewBudget, requested: ReviewBudgetRequest | undefined): ResolvedReviewBudget;
25
+ export declare function buildReviewModelCallPlan(input: {
26
+ maxModelCalls: number;
27
+ requiredPrimaryCalls: number;
28
+ verificationEnabled: boolean;
29
+ verificationMaxFindings: number;
30
+ llmJudgeAvailable: boolean;
31
+ }): ReviewModelCallPlan;
18
32
  export declare class ReviewBudgetTracker {
19
- readonly budget: ReviewBudget;
33
+ readonly budget: ResolvedReviewBudget;
20
34
  readonly startedAtEpochMs: number;
35
+ readonly modelCallPlan: ReviewModelCallPlan;
21
36
  readonly deadlineAtEpochMs: number;
22
37
  private readonly reservations;
23
38
  private readonly skippedCalls;
24
39
  private readonly incompleteReasons;
25
40
  private nextReservationId;
26
- constructor(budget: ReviewBudget, startedAtEpochMs?: number);
41
+ constructor(budget: ResolvedReviewBudget, startedAtEpochMs?: number, modelCallPlan?: ReviewModelCallPlan);
27
42
  remainingWallTimeMs(now?: number): number;
28
43
  hasDeadlineExpired(now?: number): boolean;
29
44
  reserveMany(inputs: Array<{
@@ -42,11 +57,19 @@ export declare class ReviewBudgetTracker {
42
57
  } | {
43
58
  failure: BudgetReservationFailure;
44
59
  };
45
- markStarted(reservation: ModelCallReservation): void;
60
+ markStarted(reservation: ModelCallReservation, executionIdentity?: ModelExecutionIdentity): void;
46
61
  hasStarted(reservation: ModelCallReservation): boolean;
62
+ executionIdentity(reservation: ModelCallReservation): ModelExecutionIdentity | undefined;
47
63
  complete(reservation: ModelCallReservation, values?: {
64
+ messageBytes?: number;
65
+ thoughtBytes?: number;
48
66
  outputBytes?: number;
67
+ outputWarningTriggered?: boolean;
68
+ salvaged?: boolean;
69
+ reportedFindings?: number;
70
+ findingsTargetExceeded?: boolean;
49
71
  usage?: ModelTokenUsage;
72
+ executionIdentity?: ModelExecutionIdentity;
50
73
  stopReason?: string;
51
74
  }): void;
52
75
  skip(reservation: ModelCallReservation, reason: string): void;
@@ -26,11 +26,15 @@ export type EvidenceRef = {
26
26
  export type ReviewBudget = {
27
27
  maxModelCalls: number;
28
28
  maxTotalWallTimeMs: number;
29
+ warnAgentOutputBytes: number;
29
30
  maxAgentOutputBytes: number;
30
31
  maxFindingsPerAgent: number;
31
32
  skipOptionalPhasesWhenTokenUsageUnknown: boolean;
32
33
  };
33
- export type ReviewBudgetRequest = Partial<ReviewBudget>;
34
+ export type ReviewBudgetRequest = Partial<Omit<ReviewBudget, "warnAgentOutputBytes">>;
35
+ export type ResolvedReviewBudget = ReviewBudget & {
36
+ effectiveWarnAgentOutputBytes?: number;
37
+ };
34
38
  export type ReviewCompletionReason = "model_call_budget" | "deadline" | "agent_output_limit" | "token_usage_unknown" | "coverage_incomplete" | "disputed_finding";
35
39
  export type ReviewCompletion = {
36
40
  status: "complete" | "incomplete";
@@ -38,6 +42,26 @@ export type ReviewCompletion = {
38
42
  retryable: false;
39
43
  };
40
44
  export type ModelCallKind = "primary" | "verifier" | "judge";
45
+ export type ModelProviderRoute = "codex_default" | "claude_default" | "openrouter" | "openai" | "anthropic";
46
+ export type ModelExecutionIdentity = {
47
+ providerRoute: ModelProviderRoute;
48
+ requestedModel?: string;
49
+ reportedProvider?: string;
50
+ reportedModel?: string;
51
+ reportingStatus: "reported" | "requested_only" | "unknown";
52
+ };
53
+ export type ReviewModelCallPlan = {
54
+ requiredPrimaryCalls: number;
55
+ potentialVerifierCalls: number;
56
+ potentialJudgeCalls: number;
57
+ potentialTotalCalls: number;
58
+ ceilingEffects: Array<{
59
+ kind: ModelCallKind;
60
+ action: "skip" | "deterministic_fallback";
61
+ calls: number;
62
+ reason: "model_call_budget";
63
+ }>;
64
+ };
41
65
  export type ModelTokenUsage = {
42
66
  totalTokens?: number;
43
67
  inputTokens?: number;
@@ -178,9 +202,10 @@ export type AgentRunInput = {
178
202
  workspaceDir: string;
179
203
  timeoutMs: number;
180
204
  deadlineAtEpochMs?: number;
205
+ warnOutputBytes?: number;
181
206
  maxOutputBytes?: number;
182
207
  networkMode: NetworkMode;
183
- onStarted?: (() => void) | (() => Promise<void>);
208
+ onStarted?: (executionIdentity?: ModelExecutionIdentity) => unknown;
184
209
  };
185
210
  export type AgentRunResult = {
186
211
  agent: AgentName;
@@ -195,13 +220,21 @@ export type AgentRunResult = {
195
220
  };
196
221
  warnings?: string[];
197
222
  usage?: ModelTokenUsage;
223
+ executionIdentity?: ModelExecutionIdentity;
224
+ messageBytes?: number;
225
+ thoughtBytes?: number;
198
226
  outputBytes?: number;
227
+ outputWarningTriggered?: boolean;
228
+ salvaged?: boolean;
229
+ reportedFindings?: number;
230
+ findingsTargetExceeded?: boolean;
199
231
  stopReason?: string;
200
232
  startedAt: string;
201
233
  completedAt?: string;
202
234
  };
203
235
  export type ReviewExecutionBudget = {
204
236
  maxModelCalls: number;
237
+ modelCallPlan: ReviewModelCallPlan;
205
238
  modelCalls: {
206
239
  planned: number;
207
240
  consumed: number;
@@ -217,6 +250,7 @@ export type ReviewExecutionBudget = {
217
250
  consumedMs: number;
218
251
  remainingMs: number;
219
252
  };
253
+ effectiveWarnAgentOutputBytes?: number;
220
254
  maxAgentOutputBytes: number;
221
255
  maxFindingsPerAgent: number;
222
256
  skipOptionalPhasesWhenTokenUsageUnknown: boolean;
@@ -233,8 +267,15 @@ export type ReviewModelCallAudit = {
233
267
  agent?: AgentName;
234
268
  status: "completed" | "skipped";
235
269
  reason?: string;
270
+ messageBytes?: number;
271
+ thoughtBytes?: number;
236
272
  outputBytes?: number;
273
+ outputWarningTriggered?: boolean;
274
+ salvaged?: boolean;
275
+ reportedFindings?: number;
276
+ findingsTargetExceeded?: boolean;
237
277
  usage?: ModelTokenUsage;
278
+ executionIdentity?: ModelExecutionIdentity;
238
279
  stopReason?: string;
239
280
  };
240
281
  export type KyosoResult = {
@@ -268,6 +309,7 @@ export type KyosoResult = {
268
309
  summary: string;
269
310
  status: "completed" | "failed" | "timeout" | "skipped";
270
311
  errorCode?: string;
312
+ salvaged?: boolean;
271
313
  rawText?: string;
272
314
  }>;
273
315
  audit: {
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { defineConfig } from "./config/defineConfig.js";
2
2
  export { runReview } from "./core/runReview.js";
3
- export type { ChangeRelation, CisaSecureByDesignResult, EvidenceQuality, EvidenceRef, FindingDisposition, GateStatus, KyosoDecision, KyosoFinding, KyosoResult, KyosoReviewRequest, ModelTokenUsage, NetworkMode, ReviewBudget, ReviewBudgetRequest, ReviewCompletion, ReviewContract, ReviewCoverage, ReviewExecutionBudget, ReviewLens, ReviewModelCallAudit, ReviewTool, } from "./core/types.js";
3
+ export type { ChangeRelation, CisaSecureByDesignResult, EvidenceQuality, EvidenceRef, FindingDisposition, GateStatus, KyosoDecision, KyosoFinding, KyosoResult, KyosoReviewRequest, ModelExecutionIdentity, ModelProviderRoute, ModelTokenUsage, NetworkMode, ReviewBudget, ReviewBudgetRequest, ReviewCompletion, ReviewContract, ReviewCoverage, ReviewExecutionBudget, ReviewLens, ReviewModelCallAudit, ReviewTool, } from "./core/types.js";