@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.
- package/CHANGELOG.md +27 -0
- package/README.ja.md +64 -34
- package/README.md +64 -34
- package/README.zh-CN.md +64 -34
- package/dist/acp/ndJsonLineLimit.d.ts +6 -0
- package/dist/acp/normalize.d.ts +1 -0
- package/dist/acp/prompts.d.ts +1 -0
- package/dist/bin/kyoso.js +840 -165
- package/dist/cli/pluginRuntimeContract.d.ts +8 -8
- package/dist/config/schema.d.ts +1 -0
- package/dist/core/constants.d.ts +3 -2
- package/dist/core/modelExecutionIdentity.d.ts +9 -0
- package/dist/core/requestFingerprint.d.ts +2 -2
- package/dist/core/reviewBudget.d.ts +28 -5
- package/dist/core/types.d.ts +44 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +780 -128
- package/dist/judge/anthropic.d.ts +2 -0
- package/dist/judge/openai.d.ts +2 -0
- package/dist/judge/provider.d.ts +9 -1
- package/dist/utils/env.d.ts +12 -2
- package/examples/codex-config.toml +1 -1
- package/package.json +5 -2
- package/scripts/review-budget-report.mjs +1114 -0
|
@@ -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.
|
|
13
|
+
readonly pluginVersion: "0.6.0";
|
|
14
14
|
readonly mcpCommand: "npx";
|
|
15
|
-
readonly mcpPackagePin: "@kyo-so/cli@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:
|
|
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:
|
|
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.
|
|
133
|
+
readonly pluginVersion: "0.6.0";
|
|
134
134
|
readonly mcpCommand: "npx";
|
|
135
|
-
readonly mcpPackagePin: "@kyo-so/cli@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:
|
|
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:
|
|
182
|
+
readonly toolTimeoutSec: 2160;
|
|
183
183
|
};
|
|
184
184
|
readonly manualOverride: {
|
|
185
185
|
readonly enabled: true;
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -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;
|
package/dist/core/constants.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export declare const DEFAULT_AGENT_TIMEOUT_MS =
|
|
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.
|
|
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,
|
|
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:
|
|
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):
|
|
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:
|
|
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:
|
|
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;
|
package/dist/core/types.d.ts
CHANGED
|
@@ -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?: (
|
|
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";
|