@yuaone/core 0.9.43 → 1.0.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/dist/agent-affordance.d.ts +37 -0
- package/dist/agent-affordance.d.ts.map +1 -0
- package/dist/agent-affordance.js +139 -0
- package/dist/agent-affordance.js.map +1 -0
- package/dist/agent-decision-types.d.ts +262 -0
- package/dist/agent-decision-types.d.ts.map +1 -0
- package/dist/agent-decision-types.js +19 -0
- package/dist/agent-decision-types.js.map +1 -0
- package/dist/agent-decision.d.ts +52 -0
- package/dist/agent-decision.d.ts.map +1 -0
- package/dist/agent-decision.js +767 -0
- package/dist/agent-decision.js.map +1 -0
- package/dist/agent-loop.d.ts +37 -79
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +730 -586
- package/dist/agent-loop.js.map +1 -1
- package/dist/agent-reasoning-engine.d.ts +48 -0
- package/dist/agent-reasoning-engine.d.ts.map +1 -0
- package/dist/agent-reasoning-engine.js +544 -0
- package/dist/agent-reasoning-engine.js.map +1 -0
- package/dist/codebase-context.d.ts +3 -0
- package/dist/codebase-context.d.ts.map +1 -1
- package/dist/codebase-context.js +15 -6
- package/dist/codebase-context.js.map +1 -1
- package/dist/command-plan-compiler.d.ts +43 -0
- package/dist/command-plan-compiler.d.ts.map +1 -0
- package/dist/command-plan-compiler.js +164 -0
- package/dist/command-plan-compiler.js.map +1 -0
- package/dist/dependency-guard.d.ts +18 -0
- package/dist/dependency-guard.d.ts.map +1 -0
- package/dist/dependency-guard.js +113 -0
- package/dist/dependency-guard.js.map +1 -0
- package/dist/execution-engine.d.ts +10 -1
- package/dist/execution-engine.d.ts.map +1 -1
- package/dist/execution-engine.js +162 -8
- package/dist/execution-engine.js.map +1 -1
- package/dist/execution-receipt.d.ts +62 -0
- package/dist/execution-receipt.d.ts.map +1 -0
- package/dist/execution-receipt.js +67 -0
- package/dist/execution-receipt.js.map +1 -0
- package/dist/failure-surface-writer.d.ts +13 -0
- package/dist/failure-surface-writer.d.ts.map +1 -0
- package/dist/failure-surface-writer.js +33 -0
- package/dist/failure-surface-writer.js.map +1 -0
- package/dist/file-chunker.d.ts +26 -0
- package/dist/file-chunker.d.ts.map +1 -0
- package/dist/file-chunker.js +103 -0
- package/dist/file-chunker.js.map +1 -0
- package/dist/image-observer.d.ts +22 -0
- package/dist/image-observer.d.ts.map +1 -0
- package/dist/image-observer.js +60 -0
- package/dist/image-observer.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/judgment-rules.d.ts +44 -0
- package/dist/judgment-rules.d.ts.map +1 -0
- package/dist/judgment-rules.js +185 -0
- package/dist/judgment-rules.js.map +1 -0
- package/dist/memory-decay.d.ts +41 -0
- package/dist/memory-decay.d.ts.map +1 -0
- package/dist/memory-decay.js +62 -0
- package/dist/memory-decay.js.map +1 -0
- package/dist/memory-manager.d.ts.map +1 -1
- package/dist/memory-manager.js +30 -0
- package/dist/memory-manager.js.map +1 -1
- package/dist/model-weakness-tracker.d.ts +42 -0
- package/dist/model-weakness-tracker.d.ts.map +1 -0
- package/dist/model-weakness-tracker.js +107 -0
- package/dist/model-weakness-tracker.js.map +1 -0
- package/dist/overhead-governor.d.ts +3 -1
- package/dist/overhead-governor.d.ts.map +1 -1
- package/dist/overhead-governor.js +5 -0
- package/dist/overhead-governor.js.map +1 -1
- package/dist/patch-scope-controller.d.ts +44 -0
- package/dist/patch-scope-controller.d.ts.map +1 -0
- package/dist/patch-scope-controller.js +107 -0
- package/dist/patch-scope-controller.js.map +1 -0
- package/dist/patch-transaction.d.ts +53 -0
- package/dist/patch-transaction.d.ts.map +1 -0
- package/dist/patch-transaction.js +119 -0
- package/dist/patch-transaction.js.map +1 -0
- package/dist/pre-write-validator.d.ts +29 -0
- package/dist/pre-write-validator.d.ts.map +1 -0
- package/dist/pre-write-validator.js +97 -0
- package/dist/pre-write-validator.js.map +1 -0
- package/dist/prompt-builder.d.ts +25 -0
- package/dist/prompt-builder.d.ts.map +1 -0
- package/dist/prompt-builder.js +93 -0
- package/dist/prompt-builder.js.map +1 -0
- package/dist/prompt-envelope.d.ts +40 -0
- package/dist/prompt-envelope.d.ts.map +1 -0
- package/dist/prompt-envelope.js +16 -0
- package/dist/prompt-envelope.js.map +1 -0
- package/dist/prompt-runtime.d.ts +66 -0
- package/dist/prompt-runtime.d.ts.map +1 -0
- package/dist/prompt-runtime.js +492 -0
- package/dist/prompt-runtime.js.map +1 -0
- package/dist/repo-capability-profile.d.ts +24 -0
- package/dist/repo-capability-profile.d.ts.map +1 -0
- package/dist/repo-capability-profile.js +113 -0
- package/dist/repo-capability-profile.js.map +1 -0
- package/dist/security-gate.d.ts +39 -0
- package/dist/security-gate.d.ts.map +1 -0
- package/dist/security-gate.js +121 -0
- package/dist/security-gate.js.map +1 -0
- package/dist/self-evaluation.d.ts +22 -0
- package/dist/self-evaluation.d.ts.map +1 -0
- package/dist/self-evaluation.js +43 -0
- package/dist/self-evaluation.js.map +1 -0
- package/dist/semantic-diff-reviewer.d.ts +28 -0
- package/dist/semantic-diff-reviewer.d.ts.map +1 -0
- package/dist/semantic-diff-reviewer.js +168 -0
- package/dist/semantic-diff-reviewer.js.map +1 -0
- package/dist/stall-detector.d.ts +26 -2
- package/dist/stall-detector.d.ts.map +1 -1
- package/dist/stall-detector.js +128 -3
- package/dist/stall-detector.js.map +1 -1
- package/dist/system-core.d.ts +27 -0
- package/dist/system-core.d.ts.map +1 -0
- package/dist/system-core.js +269 -0
- package/dist/system-core.js.map +1 -0
- package/dist/system-prompt.d.ts +4 -0
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +12 -218
- package/dist/system-prompt.js.map +1 -1
- package/dist/target-file-ranker.d.ts +38 -0
- package/dist/target-file-ranker.d.ts.map +1 -0
- package/dist/target-file-ranker.js +90 -0
- package/dist/target-file-ranker.js.map +1 -0
- package/dist/task-classifier.d.ts +6 -0
- package/dist/task-classifier.d.ts.map +1 -1
- package/dist/task-classifier.js +6 -0
- package/dist/task-classifier.js.map +1 -1
- package/dist/test-impact-planner.d.ts +16 -0
- package/dist/test-impact-planner.d.ts.map +1 -0
- package/dist/test-impact-planner.js +68 -0
- package/dist/test-impact-planner.js.map +1 -0
- package/dist/tool-outcome-cache.d.ts +41 -0
- package/dist/tool-outcome-cache.d.ts.map +1 -0
- package/dist/tool-outcome-cache.js +88 -0
- package/dist/tool-outcome-cache.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/verifier-rules.d.ts +15 -0
- package/dist/verifier-rules.d.ts.map +1 -0
- package/dist/verifier-rules.js +80 -0
- package/dist/verifier-rules.js.map +1 -0
- package/dist/workspace-mutation-policy.d.ts +28 -0
- package/dist/workspace-mutation-policy.d.ts.map +1 -0
- package/dist/workspace-mutation-policy.js +56 -0
- package/dist/workspace-mutation-policy.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module dependency-guard
|
|
3
|
+
* @description Detects and gates dependency changes (package.json, lockfile, install commands).
|
|
4
|
+
* Dependency changes are higher risk than normal code changes.
|
|
5
|
+
* NO LLM, deterministic pattern matching.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Constants ───
|
|
8
|
+
/** Manifest files (dependency declaration) */
|
|
9
|
+
const MANIFEST_FILES = [
|
|
10
|
+
"package.json",
|
|
11
|
+
"pyproject.toml",
|
|
12
|
+
"Cargo.toml",
|
|
13
|
+
"go.mod",
|
|
14
|
+
"Gemfile",
|
|
15
|
+
"pom.xml",
|
|
16
|
+
"build.gradle",
|
|
17
|
+
"build.gradle.kts",
|
|
18
|
+
];
|
|
19
|
+
/** Lock files (resolved dependency tree) */
|
|
20
|
+
const LOCK_FILES = [
|
|
21
|
+
"pnpm-lock.yaml",
|
|
22
|
+
"package-lock.json",
|
|
23
|
+
"yarn.lock",
|
|
24
|
+
"bun.lockb",
|
|
25
|
+
"Pipfile.lock",
|
|
26
|
+
"poetry.lock",
|
|
27
|
+
"Cargo.lock",
|
|
28
|
+
"go.sum",
|
|
29
|
+
"Gemfile.lock",
|
|
30
|
+
];
|
|
31
|
+
/** Patterns that match install/add commands across ecosystems */
|
|
32
|
+
const INSTALL_PATTERNS = [
|
|
33
|
+
/\bnpm\s+install\b/i,
|
|
34
|
+
/\bnpm\s+i\b/i,
|
|
35
|
+
/\bpnpm\s+(add|install)\b/i,
|
|
36
|
+
/\byarn\s+add\b/i,
|
|
37
|
+
/\bbun\s+(add|install)\b/i,
|
|
38
|
+
/\bpip\s+install\b/i,
|
|
39
|
+
/\bpip3\s+install\b/i,
|
|
40
|
+
/\bcargo\s+add\b/i,
|
|
41
|
+
/\bgo\s+get\b/i,
|
|
42
|
+
/\bgem\s+install\b/i,
|
|
43
|
+
/\bcomposer\s+require\b/i,
|
|
44
|
+
];
|
|
45
|
+
// ─── Helpers ───
|
|
46
|
+
function isManifestFile(path) {
|
|
47
|
+
const basename = path.split("/").pop() ?? "";
|
|
48
|
+
return MANIFEST_FILES.includes(basename);
|
|
49
|
+
}
|
|
50
|
+
function isLockFile(path) {
|
|
51
|
+
const basename = path.split("/").pop() ?? "";
|
|
52
|
+
return LOCK_FILES.includes(basename);
|
|
53
|
+
}
|
|
54
|
+
function isInstallCommand(command) {
|
|
55
|
+
return INSTALL_PATTERNS.some((p) => p.test(command));
|
|
56
|
+
}
|
|
57
|
+
// ─── Not-a-dependency-change sentinel ───
|
|
58
|
+
const NOT_DEP = {
|
|
59
|
+
isDependencyChange: false,
|
|
60
|
+
kind: null,
|
|
61
|
+
requiresApproval: false,
|
|
62
|
+
budgetMultiplier: 1,
|
|
63
|
+
verifyAfter: false,
|
|
64
|
+
};
|
|
65
|
+
// ─── Public API ───
|
|
66
|
+
/** Check if a tool call involves dependency changes */
|
|
67
|
+
export function checkDependencyChange(toolName, args) {
|
|
68
|
+
// Shell commands: detect install commands
|
|
69
|
+
if (toolName === "shell_exec" || toolName === "bash") {
|
|
70
|
+
const cmd = String(args.command ?? args.script ?? "");
|
|
71
|
+
if (isInstallCommand(cmd)) {
|
|
72
|
+
return {
|
|
73
|
+
isDependencyChange: true,
|
|
74
|
+
kind: "install_command",
|
|
75
|
+
requiresApproval: true,
|
|
76
|
+
budgetMultiplier: 3,
|
|
77
|
+
verifyAfter: true,
|
|
78
|
+
reason: `Install command detected: ${cmd.slice(0, 80)}`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return NOT_DEP;
|
|
82
|
+
}
|
|
83
|
+
// File operations: detect manifest/lock file changes
|
|
84
|
+
if (toolName === "file_write" || toolName === "file_edit") {
|
|
85
|
+
const filePath = String(args.path ?? args.file_path ?? "");
|
|
86
|
+
if (isManifestFile(filePath)) {
|
|
87
|
+
const content = String(args.content ?? args.new_string ?? "");
|
|
88
|
+
// Heuristic: if content mentions dependency sections, classify as add
|
|
89
|
+
const hasNew = /\+.*"[^"]+"\s*:\s*"[^"]*"/.test(content) ||
|
|
90
|
+
/dependencies|devDependencies/.test(content);
|
|
91
|
+
return {
|
|
92
|
+
isDependencyChange: true,
|
|
93
|
+
kind: hasNew ? "manifest_add" : "manifest_upgrade",
|
|
94
|
+
requiresApproval: true,
|
|
95
|
+
budgetMultiplier: 2,
|
|
96
|
+
verifyAfter: true,
|
|
97
|
+
reason: `Manifest file modified: ${filePath}`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (isLockFile(filePath)) {
|
|
101
|
+
return {
|
|
102
|
+
isDependencyChange: true,
|
|
103
|
+
kind: "lockfile_only",
|
|
104
|
+
requiresApproval: false, // lockfile-only is usually safe
|
|
105
|
+
budgetMultiplier: 1,
|
|
106
|
+
verifyAfter: true,
|
|
107
|
+
reason: `Lock file modified: ${filePath}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return NOT_DEP;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=dependency-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-guard.js","sourceRoot":"","sources":["../src/dependency-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
*/
|
|
29
29
|
import { EventEmitter } from "node:events";
|
|
30
30
|
import type { BYOKConfig, ToolExecutor, AgentTermination } from "./types.js";
|
|
31
|
+
import type { AgentDecisionContext } from "./agent-decision-types.js";
|
|
31
32
|
import { AgentLogger } from "./agent-logger.js";
|
|
32
33
|
import type { LoggerConfig } from "./agent-logger.js";
|
|
33
34
|
import type { GovernorConfig } from "./governor.js";
|
|
@@ -249,6 +250,12 @@ export declare class ExecutionEngine extends EventEmitter {
|
|
|
249
250
|
* - 병렬도 고려해서 전체 예산을 안전하게 분할
|
|
250
251
|
*/
|
|
251
252
|
private getSubAgentTokenBudget;
|
|
253
|
+
/**
|
|
254
|
+
* Apply Decision Engine policy to ExecutionEngine config.
|
|
255
|
+
* Overrides iteration limits, token budgets, and feature flags
|
|
256
|
+
* based on the decision's compute policy and failure surface.
|
|
257
|
+
*/
|
|
258
|
+
private applyDecisionPolicy;
|
|
252
259
|
/** Sandbox manager for tool call validation (null if disabled) */
|
|
253
260
|
private sandboxManager;
|
|
254
261
|
/** Skill loader */
|
|
@@ -263,6 +270,8 @@ export declare class ExecutionEngine extends EventEmitter {
|
|
|
263
270
|
private readonly resolvedSkillsByStepId;
|
|
264
271
|
/** Global complexity inferred during analyze phase */
|
|
265
272
|
private globalComplexity;
|
|
273
|
+
/** Decision context injected at execute() time (null if not provided) */
|
|
274
|
+
private decision;
|
|
266
275
|
constructor(config: ExecutionEngineConfig);
|
|
267
276
|
/** 실행 로거 — 실행 후 로그 조회에 사용 */
|
|
268
277
|
get logger(): AgentLogger;
|
|
@@ -290,7 +299,7 @@ export declare class ExecutionEngine extends EventEmitter {
|
|
|
290
299
|
* @param goal - 사용자의 실행 목표
|
|
291
300
|
* @returns 실행 결과 (성공 여부, 변경 파일, 토큰 사용량 등)
|
|
292
301
|
*/
|
|
293
|
-
execute(goal: string): Promise<ExecutionResult>;
|
|
302
|
+
execute(goal: string, decision?: AgentDecisionContext): Promise<ExecutionResult>;
|
|
294
303
|
/**
|
|
295
304
|
* 런타임 상태를 디스크에 체크포인트로 저장한다.
|
|
296
305
|
* sessionPersistence가 없으면 아무것도 하지 않는다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-engine.d.ts","sourceRoot":"","sources":["../src/execution-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EAEZ,gBAAgB,EAOjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"execution-engine.d.ts","sourceRoot":"","sources":["../src/execution-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/execution-engine.js
CHANGED
|
@@ -123,9 +123,105 @@ export class ExecutionEngine extends EventEmitter {
|
|
|
123
123
|
* - 병렬도 고려해서 전체 예산을 안전하게 분할
|
|
124
124
|
*/
|
|
125
125
|
getSubAgentTokenBudget() {
|
|
126
|
+
// Decision-aware budget: each sub-agent gets 1/parallelAgents of total budget, min 10K
|
|
127
|
+
if (this.decision) {
|
|
128
|
+
const policy = this.decision.core.computePolicy;
|
|
129
|
+
return Math.max(10_000, Math.floor(policy.maxTokenBudget / Math.max(1, policy.parallelAgents)));
|
|
130
|
+
}
|
|
131
|
+
// Legacy fallback
|
|
126
132
|
const divisor = Math.max(1, this.config.maxParallelAgents + 1);
|
|
127
133
|
return Math.max(5000, Math.floor(this.config.totalTokenBudget / divisor));
|
|
128
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Apply Decision Engine policy to ExecutionEngine config.
|
|
137
|
+
* Overrides iteration limits, token budgets, and feature flags
|
|
138
|
+
* based on the decision's compute policy and failure surface.
|
|
139
|
+
*/
|
|
140
|
+
applyDecisionPolicy(dec) {
|
|
141
|
+
const core = dec.core;
|
|
142
|
+
// Compute policy → iteration and token budget overrides
|
|
143
|
+
this.config.maxIterations = core.computePolicy.maxIterations;
|
|
144
|
+
this.config.totalTokenBudget = core.computePolicy.maxTokenBudget;
|
|
145
|
+
// Affordance → deep verify activation
|
|
146
|
+
if (core.affordance.run_checks > 0.7) {
|
|
147
|
+
this.config.enableDeepVerify = true;
|
|
148
|
+
}
|
|
149
|
+
// Failure surface → security scan activation
|
|
150
|
+
if (core.failureSurface.patchRisk > 0.6) {
|
|
151
|
+
this.config.enableSecurityScan = true;
|
|
152
|
+
}
|
|
153
|
+
// Massive complexity → parallel execution
|
|
154
|
+
if (core.reasoning.complexity === "massive") {
|
|
155
|
+
this.config.enableParallelExecution = true;
|
|
156
|
+
this.config.maxParallelAgents = core.computePolicy.parallelAgents;
|
|
157
|
+
}
|
|
158
|
+
// Sub-agent plan from Decision (Phase I SSOT)
|
|
159
|
+
if (core.subAgentPlan.enabled) {
|
|
160
|
+
this.config.enableParallelExecution = true;
|
|
161
|
+
this.config.maxParallelAgents = Math.max(this.config.maxParallelAgents, core.subAgentPlan.maxAgents);
|
|
162
|
+
}
|
|
163
|
+
// Re-initialize DAGOrchestrator with Decision-derived parallel limit
|
|
164
|
+
if (this.dagOrchestrator) {
|
|
165
|
+
this.dagOrchestrator = new DAGOrchestrator({
|
|
166
|
+
maxParallelAgents: core.computePolicy.parallelAgents || this.config.maxParallelAgents,
|
|
167
|
+
maxRetries: 2,
|
|
168
|
+
tokenBudget: core.computePolicy.maxTokenBudget,
|
|
169
|
+
wallTimeLimit: 600000,
|
|
170
|
+
spawnAgent: this.spawnAgent.bind(this),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// Complexity-based design skip
|
|
174
|
+
const isSimpleOrTrivial = core.reasoning.complexity === "trivial" || core.reasoning.complexity === "simple";
|
|
175
|
+
if (isSimpleOrTrivial) {
|
|
176
|
+
this.config.skipDesignForSimple = true;
|
|
177
|
+
}
|
|
178
|
+
// ── Module activations from decision ──
|
|
179
|
+
// Speculative execution: high inspect_more + complex task
|
|
180
|
+
if (core.affordance.inspect_more > 0.8 &&
|
|
181
|
+
(core.reasoning.complexity === "complex" || core.reasoning.complexity === "massive")) {
|
|
182
|
+
this.config.enableSpeculative = true;
|
|
183
|
+
}
|
|
184
|
+
// Security scan: any modify intent with non-trivial complexity (enhanced)
|
|
185
|
+
if (core.failureSurface.patchRisk > 0.5 ||
|
|
186
|
+
(core.reasoning.intent === "edit" && core.reasoning.complexity !== "trivial")) {
|
|
187
|
+
this.config.enableSecurityScan = true;
|
|
188
|
+
}
|
|
189
|
+
// Doc generation: refactor/plan intent at complex+ complexity
|
|
190
|
+
if ((core.reasoning.intent === "refactor" || core.reasoning.intent === "plan") &&
|
|
191
|
+
(core.reasoning.complexity === "complex" || core.reasoning.complexity === "massive")) {
|
|
192
|
+
this.config.enableDocGeneration = true;
|
|
193
|
+
}
|
|
194
|
+
// Sandbox: high blast radius or shell-heavy budget
|
|
195
|
+
if (core.failureSurface.blastRadius > 0.7 || core.toolBudget.maxShellExecs > 10) {
|
|
196
|
+
this.config.enableSandbox = true;
|
|
197
|
+
}
|
|
198
|
+
// Perf tracking: AGENT mode always, HYBRID for complex+
|
|
199
|
+
if (core.interactionMode === "AGENT" ||
|
|
200
|
+
(core.interactionMode === "HYBRID" && core.reasoning.complexity !== "simple")) {
|
|
201
|
+
this.config.enablePerfTracking = true;
|
|
202
|
+
}
|
|
203
|
+
// Set global complexity from decision
|
|
204
|
+
this.globalComplexity = core.reasoning.complexity;
|
|
205
|
+
// Log decision-driven module activations
|
|
206
|
+
const activated = [];
|
|
207
|
+
if (this.config.enableSpeculative)
|
|
208
|
+
activated.push("speculative");
|
|
209
|
+
if (this.config.enableSecurityScan)
|
|
210
|
+
activated.push("security-scan");
|
|
211
|
+
if (this.config.enableDocGeneration)
|
|
212
|
+
activated.push("doc-gen");
|
|
213
|
+
if (this.config.enableSandbox)
|
|
214
|
+
activated.push("sandbox");
|
|
215
|
+
if (this.config.enablePerfTracking)
|
|
216
|
+
activated.push("perf-track");
|
|
217
|
+
if (this.config.enableDeepVerify)
|
|
218
|
+
activated.push("deep-verify");
|
|
219
|
+
if (this.config.enableParallelExecution)
|
|
220
|
+
activated.push("parallel");
|
|
221
|
+
if (activated.length > 0) {
|
|
222
|
+
this.emit("engine:modules_activated", activated);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
129
225
|
/** Sandbox manager for tool call validation (null if disabled) */
|
|
130
226
|
sandboxManager = null;
|
|
131
227
|
/** Skill loader */
|
|
@@ -140,6 +236,8 @@ export class ExecutionEngine extends EventEmitter {
|
|
|
140
236
|
resolvedSkillsByStepId = new Map();
|
|
141
237
|
/** Global complexity inferred during analyze phase */
|
|
142
238
|
globalComplexity = "moderate";
|
|
239
|
+
/** Decision context injected at execute() time (null if not provided) */
|
|
240
|
+
decision = null;
|
|
143
241
|
constructor(config) {
|
|
144
242
|
super();
|
|
145
243
|
this.setMaxListeners(200);
|
|
@@ -167,6 +265,9 @@ export class ExecutionEngine extends EventEmitter {
|
|
|
167
265
|
enableIntentInference: config.enableIntentInference ?? true,
|
|
168
266
|
enableSpeculative: config.enableSpeculative ?? false,
|
|
169
267
|
speculativeMaxApproaches: config.speculativeMaxApproaches ?? 3,
|
|
268
|
+
enablePerfTracking: config.enablePerfTracking ?? false,
|
|
269
|
+
enableSandbox: config.enableSandbox ?? false,
|
|
270
|
+
sandboxTier: config.sandboxTier ?? 2,
|
|
170
271
|
governorConfig: config.governorConfig,
|
|
171
272
|
contextConfig: config.contextConfig,
|
|
172
273
|
approvalConfig: config.approvalConfig,
|
|
@@ -222,6 +323,10 @@ export class ExecutionEngine extends EventEmitter {
|
|
|
222
323
|
wallTimeLimit: 600000,
|
|
223
324
|
spawnAgent: this.spawnAgent.bind(this),
|
|
224
325
|
});
|
|
326
|
+
// NOTE: Decision-aware DAG parallel limit is applied in applyDecisionPolicy()
|
|
327
|
+
// TODO: Consider using ParallelExecutor for fine-grained concurrency control
|
|
328
|
+
// ParallelExecutor provides fault isolation per sub-agent, currently unused
|
|
329
|
+
// Decision.core.subAgentPlan determines parallel strategy
|
|
225
330
|
this.dagOrchestrator.on("dag:agent_reasoning", (e) => {
|
|
226
331
|
this.emit("agent:event", {
|
|
227
332
|
kind: "agent:reasoning_timeline",
|
|
@@ -286,7 +391,7 @@ export class ExecutionEngine extends EventEmitter {
|
|
|
286
391
|
* @param goal - 사용자의 실행 목표
|
|
287
392
|
* @returns 실행 결과 (성공 여부, 변경 파일, 토큰 사용량 등)
|
|
288
393
|
*/
|
|
289
|
-
async execute(goal) {
|
|
394
|
+
async execute(goal, decision) {
|
|
290
395
|
const startTime = Date.now();
|
|
291
396
|
this.abortController = new AbortController();
|
|
292
397
|
this.changedFiles.clear();
|
|
@@ -300,6 +405,11 @@ export class ExecutionEngine extends EventEmitter {
|
|
|
300
405
|
this.activeSkillContext = {
|
|
301
406
|
taskDescription: goal,
|
|
302
407
|
};
|
|
408
|
+
// Apply Decision Engine policy if provided
|
|
409
|
+
this.decision = decision ?? null;
|
|
410
|
+
if (this.decision) {
|
|
411
|
+
this.applyDecisionPolicy(this.decision);
|
|
412
|
+
}
|
|
303
413
|
this.emit("engine:start", goal);
|
|
304
414
|
this._logger.logInput(goal);
|
|
305
415
|
this.reflection.think("start", `Goal received: "${goal}"`);
|
|
@@ -340,14 +450,36 @@ export class ExecutionEngine extends EventEmitter {
|
|
|
340
450
|
}
|
|
341
451
|
// 1. Build codebase index (if enabled and not already built)
|
|
342
452
|
if (this.config.enableCodebaseIndex && !this.codebaseContext) {
|
|
453
|
+
// TODO Phase D+: LanguageSupport could receive decision.core.reasoning to prioritize language-specific patterns
|
|
343
454
|
const languageSupport = new LanguageSupport();
|
|
344
455
|
this.codebaseContext = new CodebaseContext(this.config.projectPath, languageSupport);
|
|
345
456
|
this._logger.info("system", "Building codebase index", { projectPath: this.config.projectPath });
|
|
346
457
|
this.reflection.think("analyze", "Building codebase index...");
|
|
347
458
|
await this.codebaseContext.buildIndex();
|
|
348
459
|
const stats = this.codebaseContext.getStats();
|
|
349
|
-
this._logger.info("system", `Codebase indexed: ${stats.totalFiles} files, ${stats.totalSymbols} symbols`);
|
|
350
|
-
this.reflection.think("analyze", `Index built: ${stats.totalFiles} files, ${stats.totalSymbols} symbols`);
|
|
460
|
+
this._logger.info("system", `Codebase indexed: ${stats.totalFiles} files, ${stats.totalSymbols} symbols, avgComplexity: ${stats.avgComplexity}, maxComplexity: ${stats.maxComplexity}`);
|
|
461
|
+
this.reflection.think("analyze", `Index built: ${stats.totalFiles} files, ${stats.totalSymbols} symbols, avgComplexity: ${stats.avgComplexity}`);
|
|
462
|
+
// Apply codebase complexity to runtime policy (Decision is frozen, so adjust execution config directly)
|
|
463
|
+
if (stats.avgComplexity > 15) {
|
|
464
|
+
// High average complexity → force deeper verification
|
|
465
|
+
if (!this.config.enableDeepVerify) {
|
|
466
|
+
this.config.enableDeepVerify = true;
|
|
467
|
+
this._logger.info("system", `Codebase avgComplexity ${stats.avgComplexity} > 15 — enabling deep verify`);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
if (stats.maxComplexity > 50) {
|
|
471
|
+
// Extremely complex file exists → enable security scan
|
|
472
|
+
if (!this.config.enableSecurityScan) {
|
|
473
|
+
this.config.enableSecurityScan = true;
|
|
474
|
+
this._logger.info("system", `Codebase maxComplexity ${stats.maxComplexity} > 50 — enabling security scan`);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
if (stats.avgLoc > 300) {
|
|
478
|
+
// Large files → enable perf tracking
|
|
479
|
+
if (!this.config.enablePerfTracking) {
|
|
480
|
+
this.config.enablePerfTracking = true;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
351
483
|
}
|
|
352
484
|
// 1b. VectorIndex initialization (pgvector or in-memory semantic search)
|
|
353
485
|
if (this.config.enableVectorSearch && !this.vectorIndex && !this.inMemoryVectorStore) {
|
|
@@ -1102,9 +1234,12 @@ Exactly one approach should have recommended=true.`;
|
|
|
1102
1234
|
// SubAgent execution
|
|
1103
1235
|
// ─────────────────────────────────────────
|
|
1104
1236
|
const startMs = Date.now();
|
|
1237
|
+
// TODO: routeSubAgent should accept decisionHint for deterministic routing
|
|
1238
|
+
// When Decision is available, intent/complexity/affordance can guide model tier selection
|
|
1105
1239
|
const routing = routeSubAgent({
|
|
1106
1240
|
role: step.role ?? "coder",
|
|
1107
|
-
complexity:
|
|
1241
|
+
complexity: (this.decision?.core.reasoning.complexity) ??
|
|
1242
|
+
state.workingMemory.get("complexity") ?? "moderate",
|
|
1108
1243
|
fileCount: step.targetFiles.length,
|
|
1109
1244
|
hasTests: step.tools.includes("test_run"),
|
|
1110
1245
|
isCriticalPath: false,
|
|
@@ -1273,10 +1408,15 @@ Exactly one approach should have recommended=true.`;
|
|
|
1273
1408
|
}
|
|
1274
1409
|
this._logger.logDecision("Verification verdict", ["pass", "warn", "fail"], deepResult.verdict, `Score: ${deepResult.overallScore}, confidence: ${deepResult.confidence}`);
|
|
1275
1410
|
this.reflection.think("verify", `Deep verification: ${deepResult.verdict} (score: ${deepResult.overallScore}, confidence: ${deepResult.confidence})`);
|
|
1276
|
-
// ─── Debate Orchestrator (optional — auto-activates when complexity >= moderate) ───
|
|
1411
|
+
// ─── Debate Orchestrator (optional — Decision-aware gating or auto-activates when complexity >= moderate) ───
|
|
1277
1412
|
const debateComplexity = state.workingMemory.get("complexity");
|
|
1278
1413
|
const debateAutoActivate = ["moderate", "complex", "massive"].includes(debateComplexity ?? "");
|
|
1279
|
-
|
|
1414
|
+
// Decision-aware: activate debate when run_checks is high and task is non-trivial
|
|
1415
|
+
const shouldDebate = this.decision
|
|
1416
|
+
? this.decision.core.affordance.run_checks > 0.6 &&
|
|
1417
|
+
this.decision.core.reasoning.complexity !== "trivial" &&
|
|
1418
|
+
this.changedFiles.size > 0
|
|
1419
|
+
: (this.config.enableDebate || debateAutoActivate) && this.changedFiles.size > 0;
|
|
1280
1420
|
if (shouldDebate) {
|
|
1281
1421
|
try {
|
|
1282
1422
|
this._logger.info("system", "Running multi-agent debate verification...");
|
|
@@ -1595,9 +1735,11 @@ ${[...this.changedFiles].join(", ")}
|
|
|
1595
1735
|
* DAGOrchestrator가 호출하는 Agent worker
|
|
1596
1736
|
*/
|
|
1597
1737
|
async spawnAgent(task, context, _signal) {
|
|
1738
|
+
// TODO: routeSubAgent should accept decisionHint for deterministic routing
|
|
1739
|
+
// When Decision is available, use decision complexity over globalComplexity
|
|
1598
1740
|
const routing = routeSubAgent({
|
|
1599
1741
|
role: task.role ?? "coder",
|
|
1600
|
-
complexity: this.globalComplexity,
|
|
1742
|
+
complexity: this.decision?.core.reasoning.complexity ?? this.globalComplexity,
|
|
1601
1743
|
fileCount: task.targetFiles.length,
|
|
1602
1744
|
hasTests: task.tools?.includes("test_run") ?? false,
|
|
1603
1745
|
isCriticalPath: false,
|
|
@@ -1619,9 +1761,21 @@ ${[...this.changedFiles].join(", ")}
|
|
|
1619
1761
|
role,
|
|
1620
1762
|
parentModelTier: routing.tier,
|
|
1621
1763
|
});
|
|
1764
|
+
// Pass decision-derived hints to sub-agent goal
|
|
1765
|
+
let taskGoal = context.taskGoal ?? task.goal;
|
|
1766
|
+
if (this.decision) {
|
|
1767
|
+
const subBudget = this.getSubAgentTokenBudget();
|
|
1768
|
+
// Sub-agents inherit parent's token budget (proportional) and interaction mode
|
|
1769
|
+
taskGoal += `\n[Budget: max ${subBudget} tokens. Mode: ${this.decision.core.interactionMode}]`;
|
|
1770
|
+
// Propagate code quality policy to sub-agents
|
|
1771
|
+
if (this.decision.core.codeQuality.isCodeTask) {
|
|
1772
|
+
const cq = this.decision.core.codeQuality;
|
|
1773
|
+
taskGoal += `\n[Code Quality: ${cq.codeTaskType} mode. STRICT: no TODO/stub/placeholder. Risk: ${cq.primaryRisk}]`;
|
|
1774
|
+
}
|
|
1775
|
+
}
|
|
1622
1776
|
const result = await subAgent.run({
|
|
1623
1777
|
overallGoal: context.overallGoal,
|
|
1624
|
-
taskGoal
|
|
1778
|
+
taskGoal,
|
|
1625
1779
|
targetFiles: context.targetFiles ?? task.targetFiles,
|
|
1626
1780
|
readFiles: context.readFiles ?? task.readFiles,
|
|
1627
1781
|
projectStructure: context.projectStructure,
|