@kyo-so/cli 0.11.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/.agents/skills/kyoso-review/SKILL.md +14 -6
- package/CHANGELOG.md +59 -0
- package/README.ja.md +96 -29
- package/README.md +96 -29
- package/README.zh-CN.md +96 -29
- package/dist/acp/ndJsonLineLimit.d.ts +6 -0
- package/dist/acp/normalize.d.ts +1 -0
- package/dist/acp/prompts.d.ts +9 -3
- package/dist/aggregate/aggregateFindings.d.ts +1 -0
- package/dist/bin/kyoso.js +1779 -251
- package/dist/cli/knownSkillDigests.d.ts +8 -1
- package/dist/cli/pluginRuntimeContract.d.ts +8 -8
- package/dist/config/schema.d.ts +24 -4
- package/dist/core/constants.d.ts +3 -2
- package/dist/core/findingAdmission.d.ts +10 -0
- package/dist/core/modelExecutionIdentity.d.ts +9 -0
- package/dist/core/requestFingerprint.d.ts +4 -3
- package/dist/core/reviewBudget.d.ts +28 -5
- package/dist/core/reviewPolicy.d.ts +16 -0
- package/dist/core/runReview.d.ts +1 -0
- package/dist/core/types.d.ts +89 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1660 -202
- 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/mcp/schemas.d.ts +23 -0
- package/dist/security/cisaGate.d.ts +11 -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
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
export declare const CURRENT_SKILL_DIGEST = "sha256:
|
|
1
|
+
export declare const CURRENT_SKILL_DIGEST = "sha256:8654e68ea61f2acea29027056802bf627ad737f084c9a86ab052946943538409";
|
|
2
2
|
export declare const KNOWN_SKILL_DIGESTS_BY_VERSION: {
|
|
3
|
+
readonly "0.11.0": readonly [{
|
|
4
|
+
readonly digest: "sha256:110dd872a3d1c8a71474a0eadb226f51a6addd86f9d4f3ed17b73678b3179a4e";
|
|
5
|
+
readonly kind: "historical";
|
|
6
|
+
}, {
|
|
7
|
+
readonly digest: "sha256:570f83f716734f34db00147f1b98bc8cd4e9c0016d3946b352ecef4a5d6b8734";
|
|
8
|
+
readonly kind: "historical";
|
|
9
|
+
}];
|
|
3
10
|
readonly "0.8.0": readonly [{
|
|
4
11
|
readonly digest: "sha256:b16ea3f8141a01399b96dee650365d99df2b8c5fc99184d9cb22d5d72c106fd8";
|
|
5
12
|
readonly kind: "historical";
|
|
@@ -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
|
@@ -11,12 +11,31 @@ export declare const kyosoConfigSchema: z.ZodObject<{
|
|
|
11
11
|
mcp: z.ZodBoolean;
|
|
12
12
|
cli: z.ZodBoolean;
|
|
13
13
|
}, z.core.$strip>;
|
|
14
|
-
firstClassClient: z.
|
|
14
|
+
firstClassClient: z.ZodLiteral<"codex">;
|
|
15
15
|
tools: z.ZodObject<{
|
|
16
16
|
planReview: z.ZodBoolean;
|
|
17
17
|
securityReview: z.ZodBoolean;
|
|
18
18
|
diffReview: z.ZodBoolean;
|
|
19
19
|
}, z.core.$strip>;
|
|
20
|
+
reviewPolicy: z.ZodObject<{
|
|
21
|
+
additionalLenses: z.ZodArray<z.ZodEnum<{
|
|
22
|
+
correctness: "correctness";
|
|
23
|
+
regression: "regression";
|
|
24
|
+
security_boundaries: "security_boundaries";
|
|
25
|
+
secrets_and_injection: "secrets_and_injection";
|
|
26
|
+
data_integrity: "data_integrity";
|
|
27
|
+
public_contract: "public_contract";
|
|
28
|
+
supply_chain: "supply_chain";
|
|
29
|
+
privacy: "privacy";
|
|
30
|
+
resource_amplification: "resource_amplification";
|
|
31
|
+
architecture: "architecture";
|
|
32
|
+
performance: "performance";
|
|
33
|
+
tests: "tests";
|
|
34
|
+
documentation: "documentation";
|
|
35
|
+
maintainability: "maintainability";
|
|
36
|
+
}>>;
|
|
37
|
+
multiAgentRequired: z.ZodBoolean;
|
|
38
|
+
}, z.core.$strip>;
|
|
20
39
|
agents: z.ZodObject<{
|
|
21
40
|
codex: z.ZodObject<{
|
|
22
41
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -71,7 +90,7 @@ export declare const kyosoConfigSchema: z.ZodObject<{
|
|
|
71
90
|
workspace: z.ZodObject<{
|
|
72
91
|
mode: z.ZodLiteral<"temp_snapshot">;
|
|
73
92
|
root: z.ZodString;
|
|
74
|
-
readOnly: z.
|
|
93
|
+
readOnly: z.ZodLiteral<true>;
|
|
75
94
|
maxContextBytes: z.ZodNumber;
|
|
76
95
|
maxDiffBytes: z.ZodNumber;
|
|
77
96
|
deny: z.ZodArray<z.ZodString>;
|
|
@@ -89,7 +108,7 @@ export declare const kyosoConfigSchema: z.ZodObject<{
|
|
|
89
108
|
allowUnrestricted: z.ZodBoolean;
|
|
90
109
|
warnOnUnrestricted: z.ZodBoolean;
|
|
91
110
|
mediatedWeb: z.ZodObject<{
|
|
92
|
-
enabled: z.
|
|
111
|
+
enabled: z.ZodLiteral<false>;
|
|
93
112
|
}, z.core.$strip>;
|
|
94
113
|
}, z.core.$strip>;
|
|
95
114
|
securityReview: z.ZodObject<{
|
|
@@ -126,6 +145,7 @@ export declare const kyosoConfigSchema: z.ZodObject<{
|
|
|
126
145
|
reviewBudget: z.ZodObject<{
|
|
127
146
|
maxModelCalls: z.ZodNumber;
|
|
128
147
|
maxTotalWallTimeMs: z.ZodNumber;
|
|
148
|
+
warnAgentOutputBytes: z.ZodNumber;
|
|
129
149
|
maxAgentOutputBytes: z.ZodNumber;
|
|
130
150
|
maxFindingsPerAgent: z.ZodNumber;
|
|
131
151
|
skipOptionalPhasesWhenTokenUsageUnknown: z.ZodBoolean;
|
|
@@ -135,7 +155,7 @@ export declare const kyosoConfigSchema: z.ZodObject<{
|
|
|
135
155
|
format: z.ZodLiteral<"jsonl">;
|
|
136
156
|
directory: z.ZodString;
|
|
137
157
|
includeRawAgentOutput: z.ZodBoolean;
|
|
138
|
-
includeFileContents: z.
|
|
158
|
+
includeFileContents: z.ZodLiteral<false>;
|
|
139
159
|
}, z.core.$strip>;
|
|
140
160
|
}, z.core.$strip>;
|
|
141
161
|
export declare const kyosoConfigKnownLeafPaths: string[];
|
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,10 @@
|
|
|
1
|
+
import type { EvidenceRef, KyosoFinding, KyosoReviewRequest, ReviewMode, ReviewTool } from "./types.js";
|
|
2
|
+
export declare function admitFindings(input: {
|
|
3
|
+
tool: ReviewTool;
|
|
4
|
+
request: KyosoReviewRequest;
|
|
5
|
+
findings: KyosoFinding[];
|
|
6
|
+
reviewMode: ReviewMode;
|
|
7
|
+
}): KyosoFinding[];
|
|
8
|
+
export declare function selectRegressionTests(tests: string[]): string[];
|
|
9
|
+
export declare function buildAdmissionOpenQuestions(findings: KyosoFinding[]): string[];
|
|
10
|
+
export declare function findingFingerprint(finding: Pick<KyosoFinding, "category" | "title">, evidenceRefs: EvidenceRef[]): string;
|
|
@@ -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,11 +1,12 @@
|
|
|
1
1
|
import type { KyosoConfig } from "../config/schema.js";
|
|
2
|
-
import type { AgentRole, KyosoReviewRequest,
|
|
3
|
-
export declare const REVIEW_CONTRACT_VERSION = "2026-07-
|
|
2
|
+
import type { AgentRole, KyosoReviewRequest, ResolvedReviewBudget, ReviewTool } from "./types.js";
|
|
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
|
+
entrypoint?: "cli" | "mcp" | "core";
|
|
10
11
|
}): string;
|
|
11
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;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AgentRole, AgentRunResult, KyosoReviewRequest, ReviewCoverage, ReviewLens } from "./types.js";
|
|
2
|
+
export declare const REVIEW_LENSES: readonly ["correctness", "regression", "security_boundaries", "secrets_and_injection", "data_integrity", "public_contract", "supply_chain", "privacy", "resource_amplification", "architecture", "performance", "tests", "documentation", "maintainability"];
|
|
3
|
+
export declare const BUILT_IN_SAFETY_FLOOR: readonly ["correctness", "regression", "security_boundaries", "secrets_and_injection", "data_integrity", "public_contract"];
|
|
4
|
+
export declare const REQUIRED_REVIEW_PERSPECTIVES: AgentRole[];
|
|
5
|
+
export declare function isReviewLens(value: unknown): value is ReviewLens;
|
|
6
|
+
export declare function resolveRequiredLenses(request: KyosoReviewRequest, additionalLenses?: ReviewLens[]): ReviewLens[];
|
|
7
|
+
export declare function buildReviewCoverage(input: {
|
|
8
|
+
request: KyosoReviewRequest;
|
|
9
|
+
additionalLenses?: ReviewLens[];
|
|
10
|
+
agentResults: AgentRunResult[];
|
|
11
|
+
}): ReviewCoverage;
|
|
12
|
+
export declare function isCoverageIncomplete(coverage: ReviewCoverage, options: {
|
|
13
|
+
multiAgentRequired: boolean;
|
|
14
|
+
}): boolean;
|
|
15
|
+
export declare function unavailableReviewCoverage(request: KyosoReviewRequest, reason: string, additionalLenses?: ReviewLens[]): ReviewCoverage;
|
|
16
|
+
export declare function renderTrustedReviewContract(request: KyosoReviewRequest, requiredLenses?: ReviewLens[]): string;
|
package/dist/core/runReview.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type RunReviewOptions = LoadConfigOptions & {
|
|
|
10
10
|
agentManager?: AcpAgentManager;
|
|
11
11
|
env?: NodeJS.ProcessEnv;
|
|
12
12
|
mcpNetworkMode?: NetworkMode;
|
|
13
|
+
entrypoint?: "cli" | "mcp" | "core";
|
|
13
14
|
traceWriterFactory?: (options: TraceWriterOptions) => TraceWriter;
|
|
14
15
|
};
|
|
15
16
|
export declare function runReview(tool: ReviewTool, request: KyosoReviewRequest, options?: RunReviewOptions): Promise<KyosoResult>;
|
package/dist/core/types.d.ts
CHANGED
|
@@ -4,14 +4,37 @@ export type GateStatus = "pass" | "warn" | "fail" | "not_applicable";
|
|
|
4
4
|
export type NetworkMode = "model_only" | "unrestricted";
|
|
5
5
|
export type JudgeProvider = "auto" | "openai" | "anthropic" | "none";
|
|
6
6
|
export type Severity = "critical" | "high" | "medium" | "low" | "info";
|
|
7
|
+
export type ReviewLens = "correctness" | "regression" | "security_boundaries" | "secrets_and_injection" | "data_integrity" | "public_contract" | "supply_chain" | "privacy" | "resource_amplification" | "architecture" | "performance" | "tests" | "documentation" | "maintainability";
|
|
8
|
+
export type ReviewContract = {
|
|
9
|
+
focus?: ReviewLens[];
|
|
10
|
+
nonGoals?: string[];
|
|
11
|
+
acceptedRisks?: Array<{
|
|
12
|
+
findingFingerprint: string;
|
|
13
|
+
rationale: string;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
export type FindingDisposition = "gate" | "actionable" | "advisory" | "disputed";
|
|
17
|
+
export type ChangeRelation = "introduced" | "worsened" | "pre_existing" | "unknown";
|
|
18
|
+
export type EvidenceQuality = "concrete" | "partial" | "insufficient";
|
|
19
|
+
export type EvidenceRef = {
|
|
20
|
+
kind: "file" | "diff_hunk" | "plan_clause";
|
|
21
|
+
path?: string;
|
|
22
|
+
lineStart?: number;
|
|
23
|
+
lineEnd?: number;
|
|
24
|
+
label?: string;
|
|
25
|
+
};
|
|
7
26
|
export type ReviewBudget = {
|
|
8
27
|
maxModelCalls: number;
|
|
9
28
|
maxTotalWallTimeMs: number;
|
|
29
|
+
warnAgentOutputBytes: number;
|
|
10
30
|
maxAgentOutputBytes: number;
|
|
11
31
|
maxFindingsPerAgent: number;
|
|
12
32
|
skipOptionalPhasesWhenTokenUsageUnknown: boolean;
|
|
13
33
|
};
|
|
14
|
-
export type ReviewBudgetRequest = Partial<ReviewBudget
|
|
34
|
+
export type ReviewBudgetRequest = Partial<Omit<ReviewBudget, "warnAgentOutputBytes">>;
|
|
35
|
+
export type ResolvedReviewBudget = ReviewBudget & {
|
|
36
|
+
effectiveWarnAgentOutputBytes?: number;
|
|
37
|
+
};
|
|
15
38
|
export type ReviewCompletionReason = "model_call_budget" | "deadline" | "agent_output_limit" | "token_usage_unknown" | "coverage_incomplete" | "disputed_finding";
|
|
16
39
|
export type ReviewCompletion = {
|
|
17
40
|
status: "complete" | "incomplete";
|
|
@@ -19,6 +42,26 @@ export type ReviewCompletion = {
|
|
|
19
42
|
retryable: false;
|
|
20
43
|
};
|
|
21
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
|
+
};
|
|
22
65
|
export type ModelTokenUsage = {
|
|
23
66
|
totalTokens?: number;
|
|
24
67
|
inputTokens?: number;
|
|
@@ -31,6 +74,7 @@ export type FindingCategory = "architecture" | "authn" | "authz" | "csrf" | "xss
|
|
|
31
74
|
export type CisaDimension = "customer_security_outcomes" | "secure_by_default" | "transparency_and_accountability" | "governance";
|
|
32
75
|
export type KyosoReviewRequest = {
|
|
33
76
|
goal: string;
|
|
77
|
+
reviewContract?: ReviewContract;
|
|
34
78
|
repoSummary?: string;
|
|
35
79
|
currentPlan?: string;
|
|
36
80
|
selectedFiles?: Array<{
|
|
@@ -66,6 +110,12 @@ export type KyosoFinding = {
|
|
|
66
110
|
title: string;
|
|
67
111
|
evidence: string;
|
|
68
112
|
recommendation: string;
|
|
113
|
+
disposition: FindingDisposition;
|
|
114
|
+
changeRelation: ChangeRelation;
|
|
115
|
+
evidenceQuality: EvidenceQuality;
|
|
116
|
+
evidenceRefs: EvidenceRef[];
|
|
117
|
+
policyReasons: string[];
|
|
118
|
+
fingerprint: string;
|
|
69
119
|
files?: Array<{
|
|
70
120
|
path: string;
|
|
71
121
|
lineStart?: number;
|
|
@@ -82,6 +132,8 @@ export type KyosoFinding = {
|
|
|
82
132
|
};
|
|
83
133
|
};
|
|
84
134
|
export type CisaSecureByDesignResult = {
|
|
135
|
+
gateEnabled: boolean;
|
|
136
|
+
enabledDimensions: CisaDimension[];
|
|
85
137
|
customerSecurityOutcomes: GateStatus;
|
|
86
138
|
secureByDefault: GateStatus;
|
|
87
139
|
transparencyAndAccountability: GateStatus;
|
|
@@ -91,6 +143,17 @@ export type CisaSecureByDesignResult = {
|
|
|
91
143
|
export type AgentName = "codex" | "claude";
|
|
92
144
|
export type AgentRole = "implementation_reviewer" | "architecture_security_reviewer" | "combined_reviewer" | "finding_verifier";
|
|
93
145
|
export type ReviewMode = "multi_agent" | "single_agent";
|
|
146
|
+
export type ReviewCoverage = {
|
|
147
|
+
requiredLenses: ReviewLens[];
|
|
148
|
+
attemptedLenses: ReviewLens[];
|
|
149
|
+
missingLenses: Array<{
|
|
150
|
+
lens: ReviewLens;
|
|
151
|
+
reason: string;
|
|
152
|
+
}>;
|
|
153
|
+
requiredPerspectives: AgentRole[];
|
|
154
|
+
completedPerspectives: AgentRole[];
|
|
155
|
+
independentReview: boolean;
|
|
156
|
+
};
|
|
94
157
|
export type NormalizedAgentOpinion = {
|
|
95
158
|
agent: AgentName;
|
|
96
159
|
role: string;
|
|
@@ -101,6 +164,10 @@ export type NormalizedAgentOpinion = {
|
|
|
101
164
|
title: string;
|
|
102
165
|
evidence: string;
|
|
103
166
|
recommendation: string;
|
|
167
|
+
disposition?: FindingDisposition;
|
|
168
|
+
changeRelation?: ChangeRelation;
|
|
169
|
+
evidenceQuality?: EvidenceQuality;
|
|
170
|
+
evidenceRefs?: EvidenceRef[];
|
|
104
171
|
files?: Array<{
|
|
105
172
|
path: string;
|
|
106
173
|
lineStart?: number;
|
|
@@ -135,9 +202,10 @@ export type AgentRunInput = {
|
|
|
135
202
|
workspaceDir: string;
|
|
136
203
|
timeoutMs: number;
|
|
137
204
|
deadlineAtEpochMs?: number;
|
|
205
|
+
warnOutputBytes?: number;
|
|
138
206
|
maxOutputBytes?: number;
|
|
139
207
|
networkMode: NetworkMode;
|
|
140
|
-
onStarted?: (
|
|
208
|
+
onStarted?: (executionIdentity?: ModelExecutionIdentity) => unknown;
|
|
141
209
|
};
|
|
142
210
|
export type AgentRunResult = {
|
|
143
211
|
agent: AgentName;
|
|
@@ -152,13 +220,21 @@ export type AgentRunResult = {
|
|
|
152
220
|
};
|
|
153
221
|
warnings?: string[];
|
|
154
222
|
usage?: ModelTokenUsage;
|
|
223
|
+
executionIdentity?: ModelExecutionIdentity;
|
|
224
|
+
messageBytes?: number;
|
|
225
|
+
thoughtBytes?: number;
|
|
155
226
|
outputBytes?: number;
|
|
227
|
+
outputWarningTriggered?: boolean;
|
|
228
|
+
salvaged?: boolean;
|
|
229
|
+
reportedFindings?: number;
|
|
230
|
+
findingsTargetExceeded?: boolean;
|
|
156
231
|
stopReason?: string;
|
|
157
232
|
startedAt: string;
|
|
158
233
|
completedAt?: string;
|
|
159
234
|
};
|
|
160
235
|
export type ReviewExecutionBudget = {
|
|
161
236
|
maxModelCalls: number;
|
|
237
|
+
modelCallPlan: ReviewModelCallPlan;
|
|
162
238
|
modelCalls: {
|
|
163
239
|
planned: number;
|
|
164
240
|
consumed: number;
|
|
@@ -174,6 +250,7 @@ export type ReviewExecutionBudget = {
|
|
|
174
250
|
consumedMs: number;
|
|
175
251
|
remainingMs: number;
|
|
176
252
|
};
|
|
253
|
+
effectiveWarnAgentOutputBytes?: number;
|
|
177
254
|
maxAgentOutputBytes: number;
|
|
178
255
|
maxFindingsPerAgent: number;
|
|
179
256
|
skipOptionalPhasesWhenTokenUsageUnknown: boolean;
|
|
@@ -190,8 +267,15 @@ export type ReviewModelCallAudit = {
|
|
|
190
267
|
agent?: AgentName;
|
|
191
268
|
status: "completed" | "skipped";
|
|
192
269
|
reason?: string;
|
|
270
|
+
messageBytes?: number;
|
|
271
|
+
thoughtBytes?: number;
|
|
193
272
|
outputBytes?: number;
|
|
273
|
+
outputWarningTriggered?: boolean;
|
|
274
|
+
salvaged?: boolean;
|
|
275
|
+
reportedFindings?: number;
|
|
276
|
+
findingsTargetExceeded?: boolean;
|
|
194
277
|
usage?: ModelTokenUsage;
|
|
278
|
+
executionIdentity?: ModelExecutionIdentity;
|
|
195
279
|
stopReason?: string;
|
|
196
280
|
};
|
|
197
281
|
export type KyosoResult = {
|
|
@@ -202,6 +286,7 @@ export type KyosoResult = {
|
|
|
202
286
|
degraded: boolean;
|
|
203
287
|
agentsUsed: AgentName[];
|
|
204
288
|
reviewMode: ReviewMode;
|
|
289
|
+
coverage: ReviewCoverage;
|
|
205
290
|
verificationMode?: "cross_agent" | "skipped_single_agent";
|
|
206
291
|
summaryMarkdown: string;
|
|
207
292
|
findings: KyosoFinding[];
|
|
@@ -217,12 +302,14 @@ export type KyosoResult = {
|
|
|
217
302
|
crossModelAnalysis?: CrossModelAnalysis;
|
|
218
303
|
testsToAdd: string[];
|
|
219
304
|
residualRisks: string[];
|
|
305
|
+
openQuestions: string[];
|
|
220
306
|
agentOpinions: Array<{
|
|
221
307
|
agent: AgentName;
|
|
222
308
|
role: string;
|
|
223
309
|
summary: string;
|
|
224
310
|
status: "completed" | "failed" | "timeout" | "skipped";
|
|
225
311
|
errorCode?: string;
|
|
312
|
+
salvaged?: boolean;
|
|
226
313
|
rawText?: string;
|
|
227
314
|
}>;
|
|
228
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 { CisaSecureByDesignResult, GateStatus, KyosoDecision, KyosoFinding, KyosoResult, KyosoReviewRequest, ModelTokenUsage, NetworkMode, ReviewBudget, ReviewBudgetRequest, ReviewCompletion, ReviewExecutionBudget, 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";
|