@linghun/tui 0.1.2 → 0.1.3
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/background-control-runtime.js +31 -31
- package/dist/capability-runtime.js +19 -19
- package/dist/{chunk-AGI6GFFL.js → chunk-5OZEJQBH.js} +1 -1
- package/dist/{chunk-42ZZUF7P.js → chunk-6C32YAB5.js} +17 -5
- package/dist/{chunk-PPUOHBAK.js → chunk-6JPUBF7B.js} +11 -11
- package/dist/{chunk-CJRJR7TP.js → chunk-7XAOTGHZ.js} +2 -2
- package/dist/{chunk-YLOJWSHB.js → chunk-BEDD7OFL.js} +2 -2
- package/dist/{chunk-HPQ2IHOW.js → chunk-CQCJGMXG.js} +3 -3
- package/dist/{chunk-NK4NMYF5.js → chunk-DEIYY6NI.js} +276 -10
- package/dist/{chunk-5IFNLTOF.js → chunk-EGHM55EV.js} +2 -2
- package/dist/{chunk-EKYXI6C7.js → chunk-ESAACKVG.js} +1 -1
- package/dist/{chunk-YMEMN5FG.js → chunk-G7O26P5X.js} +1 -1
- package/dist/{chunk-FGGY5KNM.js → chunk-GYHEUVR2.js} +2 -2
- package/dist/{chunk-HZ5XNKWS.js → chunk-HMGYFENJ.js} +1 -1
- package/dist/{chunk-ZJDPYOTK.js → chunk-IQS34W5A.js} +2 -2
- package/dist/{chunk-7BHMBWG2.js → chunk-J7AAPUTV.js} +1 -1
- package/dist/{chunk-YDTJ7UBG.js → chunk-JMUAQUQQ.js} +1 -1
- package/dist/{chunk-NL4M3V5D.js → chunk-KKZBBCHK.js} +1 -1
- package/dist/{chunk-UIKN3CDF.js → chunk-NMOVU75L.js} +1 -1
- package/dist/{chunk-YKOXJQGX.js → chunk-NWZ44SFI.js} +78 -3
- package/dist/{chunk-HPIHFENG.js → chunk-OH35XDD4.js} +1 -1
- package/dist/{chunk-WXTHKLNH.js → chunk-OI5TZ37D.js} +27 -0
- package/dist/{chunk-DIDRFIIW.js → chunk-OMWSM2DA.js} +1 -1
- package/dist/{chunk-X7E34LKV.js → chunk-OV5OT66G.js} +5 -5
- package/dist/{chunk-HGCTHBUY.js → chunk-PHPEPZAA.js} +1 -1
- package/dist/{chunk-ZF36LULR.js → chunk-Q57WS7YZ.js} +2 -2
- package/dist/{chunk-3PG7I3LA.js → chunk-QXV2N4F2.js} +1 -1
- package/dist/{chunk-7R4YXN7Z.js → chunk-RDTVAQBD.js} +86 -61
- package/dist/{chunk-LBC75QAB.js → chunk-TO6IN4LA.js} +201 -5
- package/dist/{chunk-O2U4XQVM.js → chunk-UYU4QN3P.js} +1 -1
- package/dist/{chunk-J6CYFWSW.js → chunk-VDQTNA4W.js} +20 -1
- package/dist/{chunk-3MRYQO7X.js → chunk-XYY5LRSF.js} +3 -3
- package/dist/{chunk-OSFBVVEP.js → chunk-YBTXLLO5.js} +1 -1
- package/dist/{chunk-JY3LI63F.js → chunk-YGXPS5F2.js} +1 -1
- package/dist/{chunk-4UER2AKI.js → chunk-ZPFOP557.js} +190 -0
- package/dist/command-panel-runtime.js +18 -18
- package/dist/compact-cache-command-runtime.js +31 -31
- package/dist/compact-preflight-runtime.js +7 -7
- package/dist/connector-runtime.js +20 -20
- package/dist/details-status-runtime.js +18 -18
- package/dist/evidence-runtime.d.ts.map +1 -1
- package/dist/evidence-runtime.js +3 -2
- package/dist/extension-command-runtime.js +3 -3
- package/dist/extension-slash-runtime.js +19 -19
- package/dist/failure-learning-command-runtime.js +19 -19
- package/dist/final-answer-gate.d.ts +1 -0
- package/dist/final-answer-gate.d.ts.map +1 -1
- package/dist/final-answer-gate.js +4 -2
- package/dist/git-command-runtime.js +19 -19
- package/dist/headless-bench-runtime.d.ts +19 -1
- package/dist/headless-bench-runtime.d.ts.map +1 -1
- package/dist/headless-bench-runtime.js +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +108 -40
- package/dist/job-agent-command-runtime.js +18 -18
- package/dist/job-runtime.js +4 -4
- package/dist/mcp-index-command-runtime.js +3 -3
- package/dist/mcp-index-runtime.js +21 -21
- package/dist/mcp-stdio-runtime.js +2 -2
- package/dist/memory-command-runtime.js +19 -19
- package/dist/meta-scheduler-runtime.js +2 -2
- package/dist/model-command-runtime.js +19 -19
- package/dist/model-loop-runtime.d.ts.map +1 -1
- package/dist/model-loop-runtime.js +1 -1
- package/dist/model-prompt-runtime.js +4 -4
- package/dist/model-stream-runtime.d.ts.map +1 -1
- package/dist/model-stream-runtime.js +31 -31
- package/dist/model-tool-runtime.d.ts.map +1 -1
- package/dist/model-tool-runtime.js +31 -31
- package/dist/permission-approval-runtime.js +31 -31
- package/dist/permission-continuation-runtime.d.ts.map +1 -1
- package/dist/permission-continuation-runtime.js +2 -2
- package/dist/process-command-runtime.js +2 -2
- package/dist/process-guard.d.ts +3 -0
- package/dist/process-guard.d.ts.map +1 -1
- package/dist/process-guard.js +5 -1
- package/dist/remote-command-runtime.js +19 -19
- package/dist/runner-runtime.js +3 -3
- package/dist/shell/view-model.js +5 -5
- package/dist/slash-command-runtime.js +31 -31
- package/dist/tool-output-presenter.d.ts +1 -0
- package/dist/tool-output-presenter.d.ts.map +1 -1
- package/dist/tool-output-presenter.js +3 -1
- package/dist/tui-agent-job-runtime.js +5 -5
- package/dist/tui-context-runtime.d.ts +2 -0
- package/dist/tui-context-runtime.d.ts.map +1 -1
- package/dist/tui-data-types.d.ts +1 -0
- package/dist/tui-data-types.d.ts.map +1 -1
- package/dist/tui-details-runtime.js +5 -5
- package/dist/tui-output-surface.js +6 -6
- package/dist/tui-permission-runtime.js +3 -3
- package/dist/verification-command-runtime.js +6 -6
- package/dist/workflow-command-runtime.js +18 -18
- package/package.json +5 -5
|
@@ -48,6 +48,13 @@ var ProcessGuardRegistry = class {
|
|
|
48
48
|
label: entry.label
|
|
49
49
|
}));
|
|
50
50
|
}
|
|
51
|
+
activeSnapshot() {
|
|
52
|
+
return Array.from(this.tracked.values()).filter((entry) => !entry.retainAfterExit).map((entry) => ({
|
|
53
|
+
pid: entry.pid,
|
|
54
|
+
detached: entry.detached,
|
|
55
|
+
label: entry.label
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
51
58
|
stopAll(kind, force, deps, allowAsyncWindowsTreeKill, onlyPids) {
|
|
52
59
|
const result = {
|
|
53
60
|
kind,
|
|
@@ -61,6 +68,10 @@ var ProcessGuardRegistry = class {
|
|
|
61
68
|
if (onlyPids && !onlyPids.has(entry.pid)) {
|
|
62
69
|
continue;
|
|
63
70
|
}
|
|
71
|
+
if (kind === "exit-cleanup" && entry.retainAfterExit) {
|
|
72
|
+
result.skipped += 1;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
64
75
|
if (stopEntry(entry, force, deps, allowAsyncWindowsTreeKill, result)) {
|
|
65
76
|
removePids.push(entry.pid);
|
|
66
77
|
}
|
|
@@ -111,19 +122,25 @@ function requestTrackedProcessStop(force) {
|
|
|
111
122
|
function cleanupTrackedProcessesForExit() {
|
|
112
123
|
return recordStopResult(defaultRegistry.stopAll("exit-cleanup", true, resolveDeps(), false));
|
|
113
124
|
}
|
|
125
|
+
function cleanupTrackedProcessesBeforeExit() {
|
|
126
|
+
return recordStopResult(defaultRegistry.stopAll("exit-cleanup", false, resolveDeps(), false));
|
|
127
|
+
}
|
|
114
128
|
function consumeProcessGuardStopResultsForTest() {
|
|
115
129
|
return recentStopResults.splice(0, recentStopResults.length);
|
|
116
130
|
}
|
|
117
131
|
function getTrackedProcessSnapshot() {
|
|
118
132
|
return defaultRegistry.snapshot();
|
|
119
133
|
}
|
|
134
|
+
function getActiveTrackedProcessSnapshot() {
|
|
135
|
+
return defaultRegistry.activeSnapshot();
|
|
136
|
+
}
|
|
120
137
|
function installProcessGuardExitHandlers() {
|
|
121
138
|
if (hooksInstalled) {
|
|
122
139
|
return;
|
|
123
140
|
}
|
|
124
141
|
hooksInstalled = true;
|
|
125
142
|
process.once("beforeExit", () => {
|
|
126
|
-
|
|
143
|
+
cleanupTrackedProcessesBeforeExit();
|
|
127
144
|
});
|
|
128
145
|
process.once("exit", () => {
|
|
129
146
|
cleanupTrackedProcessesForExit();
|
|
@@ -258,7 +275,9 @@ export {
|
|
|
258
275
|
trackChildProcess,
|
|
259
276
|
requestTrackedProcessStop,
|
|
260
277
|
cleanupTrackedProcessesForExit,
|
|
278
|
+
cleanupTrackedProcessesBeforeExit,
|
|
261
279
|
consumeProcessGuardStopResultsForTest,
|
|
262
280
|
getTrackedProcessSnapshot,
|
|
281
|
+
getActiveTrackedProcessSnapshot,
|
|
263
282
|
installProcessGuardExitHandlers
|
|
264
283
|
};
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
registerCapabilityProvider,
|
|
5
5
|
setCapabilityConnectionResolver,
|
|
6
6
|
unregisterCapabilitiesByApp
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-CQCJGMXG.js";
|
|
8
8
|
import {
|
|
9
9
|
ensureSession,
|
|
10
10
|
showCommandPanel
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-6JPUBF7B.js";
|
|
12
12
|
import {
|
|
13
13
|
budgetToolResultTranscriptContent
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-DEIYY6NI.js";
|
|
15
15
|
import {
|
|
16
16
|
truncateDisplay,
|
|
17
17
|
writeLine
|
|
@@ -55,6 +55,10 @@ async function resolveHeadlessBenchConfig(input) {
|
|
|
55
55
|
testTimeoutMs,
|
|
56
56
|
maxRepairAttempts,
|
|
57
57
|
requiredArtifacts,
|
|
58
|
+
validationContract: createValidationContract({
|
|
59
|
+
prompt: input.prompt,
|
|
60
|
+
requiredArtifacts
|
|
61
|
+
}),
|
|
58
62
|
preflight: input.options?.preflight ?? parseBoolean(env.LINGHUN_HEADLESS_PREFLIGHT) ?? true,
|
|
59
63
|
environmentSetupRetries
|
|
60
64
|
};
|
|
@@ -77,6 +81,7 @@ async function runHeadlessEnvironmentPreflight(projectPath) {
|
|
|
77
81
|
function createHeadlessBenchInitialPrompt(input) {
|
|
78
82
|
if (!input.config.enabled) return input.originalPrompt;
|
|
79
83
|
const required = input.config.requiredArtifacts.length ? `Required artifacts detected: ${input.config.requiredArtifacts.join(", ")}. Verify they exist and are readable before final.` : "No explicit output artifact path was detected; still verify observable task completion.";
|
|
84
|
+
const contract = formatValidationContractPromptLines(input.config.validationContract);
|
|
80
85
|
const test = input.config.testCommand ? `Official test command available: ${input.config.testCommand}. Prefer it over ad-hoc smoke tests before final.` : "No official test command was detected; use the strongest task-local verification available.";
|
|
81
86
|
const preflight = input.preflight ? `Environment preflight: ${input.preflight.summary}` : "";
|
|
82
87
|
return [
|
|
@@ -85,9 +90,11 @@ function createHeadlessBenchInitialPrompt(input) {
|
|
|
85
90
|
"[Linghun headless bench guard]",
|
|
86
91
|
test,
|
|
87
92
|
required,
|
|
93
|
+
...contract,
|
|
88
94
|
preflight,
|
|
89
95
|
formatInitialProfileStrategy(input.config.profile),
|
|
90
96
|
"If rg is unavailable, use grep/find/sed/awk fallbacks instead of failing the task.",
|
|
97
|
+
...formatCommonBenchStabilityGuidance(),
|
|
91
98
|
"Do not claim completion from a self-written smoke test when an official test entrypoint is available."
|
|
92
99
|
].filter(Boolean).join("\n");
|
|
93
100
|
}
|
|
@@ -217,7 +224,9 @@ function createHeadlessBenchRepairPrompt(input) {
|
|
|
217
224
|
"Continue from the current workspace. Do not restart from scratch unless necessary.",
|
|
218
225
|
"Use the official test failure and current files to make the smallest fix, then rerun the official test or artifact check.",
|
|
219
226
|
formatRepairProfileStrategy(input.failure.category, input.profile ?? "generic"),
|
|
227
|
+
...formatCommonBenchStabilityGuidance(),
|
|
220
228
|
input.preflight?.missingTools.includes("rg") ? "rg is missing in this environment; use grep/find/sed/awk fallbacks." : "",
|
|
229
|
+
...formatValidationContractPromptLines(input.validationContract),
|
|
221
230
|
artifactLine,
|
|
222
231
|
logLine,
|
|
223
232
|
"",
|
|
@@ -228,6 +237,183 @@ function createHeadlessBenchRepairPrompt(input) {
|
|
|
228
237
|
input.originalPrompt
|
|
229
238
|
].filter(Boolean).join("\n");
|
|
230
239
|
}
|
|
240
|
+
function createValidationContract(input) {
|
|
241
|
+
const items = [];
|
|
242
|
+
for (const path of input.requiredArtifacts) {
|
|
243
|
+
pushValidationContractItem(items, {
|
|
244
|
+
id: `artifact:${path}`,
|
|
245
|
+
kind: "artifact",
|
|
246
|
+
path,
|
|
247
|
+
requiredTool: "Bash.artifact"
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
for (const target of detectExplicitServiceTargets(input.prompt)) {
|
|
251
|
+
const semanticTokens = detectServiceSemanticTokens(input.prompt);
|
|
252
|
+
const semantic = semanticTokens.length >= 2 && hasSemanticServiceExpectation(input.prompt);
|
|
253
|
+
const validationTarget = semantic ? normalizeServiceReadinessTarget(target) : target;
|
|
254
|
+
pushValidationContractItem(items, {
|
|
255
|
+
id: `service:${validationTarget}`,
|
|
256
|
+
kind: "service",
|
|
257
|
+
target: validationTarget,
|
|
258
|
+
validation: semantic ? "semantic" : "readiness",
|
|
259
|
+
...semantic ? { semanticTokens } : {},
|
|
260
|
+
requiredTool: "Bash.service"
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
if (hasPreservationRequirement(input.prompt)) {
|
|
264
|
+
for (const path of detectEngineeringArtifactTargets(input.prompt)) {
|
|
265
|
+
pushValidationContractItem(items, {
|
|
266
|
+
id: `preservation:${path}`,
|
|
267
|
+
kind: "preservation",
|
|
268
|
+
path,
|
|
269
|
+
requiredTool: "Bash.artifact"
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
for (const path of uniqueStrings([
|
|
274
|
+
...input.requiredArtifacts.filter(isBinaryLikePath),
|
|
275
|
+
...detectEngineeringArtifactTargets(input.prompt).filter(
|
|
276
|
+
(path2) => isBinaryLikePath(path2) || hasBinaryRequirementNearPath(input.prompt, path2)
|
|
277
|
+
)
|
|
278
|
+
])) {
|
|
279
|
+
pushValidationContractItem(items, {
|
|
280
|
+
id: `binary:${path}`,
|
|
281
|
+
kind: "binary",
|
|
282
|
+
path,
|
|
283
|
+
requiredTool: "Bash.binary"
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return { items };
|
|
287
|
+
}
|
|
288
|
+
function pushValidationContractItem(items, item) {
|
|
289
|
+
if (items.some(
|
|
290
|
+
(existing) => existing.kind === item.kind && existing.path === item.path && normalizeContractTarget(existing.target) === normalizeContractTarget(item.target)
|
|
291
|
+
)) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
items.push(item);
|
|
295
|
+
}
|
|
296
|
+
function formatValidationContractPromptLines(contract) {
|
|
297
|
+
if (!contract?.items.length) return [];
|
|
298
|
+
return [
|
|
299
|
+
"Validation contract: before final, satisfy each item with the required explicit tool.",
|
|
300
|
+
...contract.items.map((item) => {
|
|
301
|
+
const subject = item.path ?? item.target ?? item.id;
|
|
302
|
+
const semantic = item.kind === "service" && item.validation === "semantic" ? `; also run semantic request/response probes for expected fields/values (${(item.semanticTokens ?? []).join(", ")}) including representative and adversarial cases` : "";
|
|
303
|
+
return `- ${item.kind}: ${subject}; required Bash input: ${formatValidationContractToolInput(item)}${semantic}`;
|
|
304
|
+
})
|
|
305
|
+
];
|
|
306
|
+
}
|
|
307
|
+
function formatValidationContractToolInput(item) {
|
|
308
|
+
if (item.requiredTool === "Bash.service") {
|
|
309
|
+
const target = item.target ?? "http://127.0.0.1:PORT/";
|
|
310
|
+
const url = target.startsWith("http://") || target.startsWith("https://") ? target : `http://${target}`;
|
|
311
|
+
return `{ "service": { "action": "fetch", "url": ${JSON.stringify(url)}, "expectStatus": 200, "retry": 5 } }`;
|
|
312
|
+
}
|
|
313
|
+
if (item.requiredTool === "Bash.binary") {
|
|
314
|
+
return `{ "binary": { "path": ${JSON.stringify(item.path ?? "PATH")} } }`;
|
|
315
|
+
}
|
|
316
|
+
if (item.kind === "preservation") {
|
|
317
|
+
return `{ "artifact": { "path": ${JSON.stringify(item.path ?? "PATH")}, "preserve": { "mode": "compareNormalizedHtml", "expectedPath": "EXPECTED_PATH" } } }`;
|
|
318
|
+
}
|
|
319
|
+
return `{ "artifact": { "path": ${JSON.stringify(item.path ?? "PATH")} } }`;
|
|
320
|
+
}
|
|
321
|
+
function detectExplicitServiceTargets(prompt) {
|
|
322
|
+
const targets = [];
|
|
323
|
+
const urlPattern = /https?:\/\/(?:localhost|127\.0\.0\.1)(?::\d{1,5})?(?:\/[^\s`"')\]}<>]*)?/giu;
|
|
324
|
+
for (const match of prompt.matchAll(urlPattern)) {
|
|
325
|
+
targets.push(normalizeServiceTarget(match[0]));
|
|
326
|
+
}
|
|
327
|
+
const hostPortPattern = /\b(?:localhost|127\.0\.0\.1):\d{1,5}\b/giu;
|
|
328
|
+
for (const match of prompt.matchAll(hostPortPattern)) {
|
|
329
|
+
targets.push(normalizeServiceTarget(match[0]));
|
|
330
|
+
}
|
|
331
|
+
if (hasExplicitServicePortContext(prompt)) {
|
|
332
|
+
const portPattern = /\b(?:port\s+(\d{1,5})|listen(?:ing)?(?:\s+on)?\s+(?:port\s+)?(\d{1,5})|localhost\s+port\s+(\d{1,5})|127\.0\.0\.1\s+port\s+(\d{1,5}))\b/giu;
|
|
333
|
+
for (const match of prompt.matchAll(portPattern)) {
|
|
334
|
+
const port = match[1] ?? match[2] ?? match[3] ?? match[4];
|
|
335
|
+
if (port) targets.push(`127.0.0.1:${port}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return uniqueStrings(targets).filter(hasValidServicePort);
|
|
339
|
+
}
|
|
340
|
+
function hasExplicitServicePortContext(prompt) {
|
|
341
|
+
return /\b(?:service|server|serve|listen|http|endpoint|health|localhost|127\.0\.0\.1)\b/iu.test(prompt);
|
|
342
|
+
}
|
|
343
|
+
function hasSemanticServiceExpectation(prompt) {
|
|
344
|
+
return /\b(?:api|endpoint|json|response|respond|return|schema|field|classification|sentiment|confidence|prediction|inference|request)\b|接口|响应|返回|字段|分类|预测/iu.test(
|
|
345
|
+
prompt
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
function detectServiceSemanticTokens(prompt) {
|
|
349
|
+
const tokens = [];
|
|
350
|
+
for (const match of prompt.matchAll(/["']([A-Za-z][A-Za-z0-9_-]{1,39})["']\s*:/gu)) {
|
|
351
|
+
tokens.push(match[1]);
|
|
352
|
+
}
|
|
353
|
+
for (const match of prompt.matchAll(/\b(?:positive|negative|true|false|pass|fail|success|error|valid|invalid)\b/giu)) {
|
|
354
|
+
tokens.push(match[0].toLowerCase());
|
|
355
|
+
}
|
|
356
|
+
return uniqueStrings(tokens).slice(0, 8);
|
|
357
|
+
}
|
|
358
|
+
function normalizeServiceTarget(value) {
|
|
359
|
+
return value.replace(/[),.;!?]+$/u, "");
|
|
360
|
+
}
|
|
361
|
+
function normalizeServiceReadinessTarget(target) {
|
|
362
|
+
try {
|
|
363
|
+
const url = target.startsWith("http://") || target.startsWith("https://") ? new URL(target) : new URL(`http://${target}`);
|
|
364
|
+
return target.startsWith("http://") || target.startsWith("https://") ? url.origin : `${url.hostname}:${url.port || (url.protocol === "https:" ? "443" : "80")}`;
|
|
365
|
+
} catch {
|
|
366
|
+
return target;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
function normalizeContractTarget(target) {
|
|
370
|
+
if (!target) return void 0;
|
|
371
|
+
try {
|
|
372
|
+
const url = target.startsWith("http://") || target.startsWith("https://") ? new URL(target) : new URL(`http://${target}`);
|
|
373
|
+
const port = url.port || (url.protocol === "https:" ? "443" : "80");
|
|
374
|
+
const path = url.pathname.replace(/\/$/u, "");
|
|
375
|
+
return `${url.hostname}:${port}${path}`;
|
|
376
|
+
} catch {
|
|
377
|
+
return target.replace(/\/$/u, "");
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
function hasValidServicePort(target) {
|
|
381
|
+
try {
|
|
382
|
+
const url = target.startsWith("http://") || target.startsWith("https://") ? new URL(target) : new URL(`http://${target}`);
|
|
383
|
+
const port = Number(url.port || (url.protocol === "https:" ? 443 : 80));
|
|
384
|
+
return Number.isInteger(port) && port > 0 && port <= 65535;
|
|
385
|
+
} catch {
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
function hasPreservationRequirement(prompt) {
|
|
390
|
+
return /(?:\bpreserve\b|\bclean\b|\boriginal\b|\bunchanged\b|don't modify|do not modify|不要修改|保持原样|保留原始)/iu.test(
|
|
391
|
+
prompt
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
function isBinaryLikePath(path) {
|
|
395
|
+
return /\.(?:bin|elf|so|dll|dylib|exe|o|a|class|wasm|7z|zip|tar|gz|xz|bz2)$/iu.test(path);
|
|
396
|
+
}
|
|
397
|
+
function hasBinaryRequirementNearPath(prompt, path) {
|
|
398
|
+
const index = prompt.indexOf(path);
|
|
399
|
+
if (index < 0) return false;
|
|
400
|
+
const window = prompt.slice(Math.max(0, index - 80), Math.min(prompt.length, index + path.length + 80));
|
|
401
|
+
return /(?:\bbinary\b|\bELF\b|二进制)/iu.test(window);
|
|
402
|
+
}
|
|
403
|
+
function formatCommonBenchStabilityGuidance() {
|
|
404
|
+
return [
|
|
405
|
+
"Command environment: prefer python3 over bare python. If a command reports python not found, treat it as recoverable and retry with python3.",
|
|
406
|
+
'Python dependencies: before relying on optional imports, probe with python3 -c "import X"; install only when appropriate, otherwise use a stdlib fallback.',
|
|
407
|
+
"Services: after starting HTTP/gRPC/server processes, poll the port or health endpoint with a bounded timeout and inspect logs before final verification.",
|
|
408
|
+
"Time budget: build the smallest verifiable solution first, run focused checks early, and avoid long blind builds/training runs near the deadline.",
|
|
409
|
+
"Verifier alignment: read task-local tests/verifier expectations and confirm output path, filename, port, and answer format instead of only matching examples.",
|
|
410
|
+
"Artifact checks: match validation commands to the artifact language or file type; do not run shell syntax checks on Python/JS/C++ source files.",
|
|
411
|
+
"Preservation tasks: when unchanged/clean/original content must survive, avoid parser/serializer round-trips unless tests allow reformatting; make targeted edits and compare preserved regions.",
|
|
412
|
+
"Sanitizer/filter tasks: run negative clean-sample checks that compare parser-normalized or whitespace-stripped output against the original; unsafe-case smoke tests alone are not enough.",
|
|
413
|
+
"Answer extraction: inspect tests/expected files for required count, ordering, and multi-line answers; do not stop at the first plausible value when the verifier expects multiple outputs.",
|
|
414
|
+
"Puzzle answer tasks: if multiple equally optimal or valid answers can exist and the output format allows a list, enumerate all required answers rather than a single example."
|
|
415
|
+
];
|
|
416
|
+
}
|
|
231
417
|
async function detectHeadlessBenchTaskProfile(input) {
|
|
232
418
|
const files = await listProjectFiles(input.projectPath, 220);
|
|
233
419
|
const haystack = `${input.prompt}
|
|
@@ -367,6 +553,9 @@ function formatRepairProfileStrategy(category, profile) {
|
|
|
367
553
|
if (category === "missing_artifact") {
|
|
368
554
|
return "Repair route: generate or write the required artifact now, then verify it exists, is readable, and is non-empty.";
|
|
369
555
|
}
|
|
556
|
+
if (category === "validation_contract") {
|
|
557
|
+
return "Repair route: run the required explicit validation tool for the contract item, then repair any failed evidence before final.";
|
|
558
|
+
}
|
|
370
559
|
if (category === "test_timeout") {
|
|
371
560
|
return "Repair route: narrow validation to focused tests or logs first; avoid repeatedly launching full expensive runs.";
|
|
372
561
|
}
|
|
@@ -627,6 +816,7 @@ export {
|
|
|
627
816
|
collectHeadlessArtifactChecklist,
|
|
628
817
|
classifyEnvironmentSetupFailure,
|
|
629
818
|
createHeadlessBenchRepairPrompt,
|
|
819
|
+
createValidationContract,
|
|
630
820
|
detectHeadlessBenchTaskProfile,
|
|
631
821
|
detectEngineeringTaskProfile,
|
|
632
822
|
classifyHeadlessFailure,
|
|
@@ -3,27 +3,27 @@ import {
|
|
|
3
3
|
getCommandPanelRowText,
|
|
4
4
|
getCommandPanelSelectableRows,
|
|
5
5
|
showCommandPanel
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6JPUBF7B.js";
|
|
7
7
|
import "./chunk-V7GDHHBL.js";
|
|
8
8
|
import "./chunk-GCMH5P4W.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-PHPEPZAA.js";
|
|
10
|
+
import "./chunk-7XAOTGHZ.js";
|
|
11
|
+
import "./chunk-YBTXLLO5.js";
|
|
12
|
+
import "./chunk-YGXPS5F2.js";
|
|
13
|
+
import "./chunk-OH35XDD4.js";
|
|
14
14
|
import "./chunk-IPZZGDUU.js";
|
|
15
15
|
import "./chunk-PBIPV4LD.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-NMOVU75L.js";
|
|
17
|
+
import "./chunk-JMUAQUQQ.js";
|
|
18
18
|
import "./chunk-L4XXW6Y5.js";
|
|
19
19
|
import "./chunk-CRSLDQOA.js";
|
|
20
20
|
import "./chunk-VIBENDE3.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-ZPFOP557.js";
|
|
22
|
+
import "./chunk-5OZEJQBH.js";
|
|
23
|
+
import "./chunk-HMGYFENJ.js";
|
|
24
|
+
import "./chunk-VDQTNA4W.js";
|
|
25
25
|
import "./chunk-E72U7WW7.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-ESAACKVG.js";
|
|
27
27
|
import "./chunk-WCMHJ6SS.js";
|
|
28
28
|
import "./chunk-3AKXDMVS.js";
|
|
29
29
|
import "./chunk-H3T4EF5F.js";
|
|
@@ -31,21 +31,21 @@ import "./chunk-NSIKYD3X.js";
|
|
|
31
31
|
import "./chunk-FRIMDSRU.js";
|
|
32
32
|
import "./chunk-RBOQJFIZ.js";
|
|
33
33
|
import "./chunk-VIJ7GDKI.js";
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-WXTHKLNH.js";
|
|
34
|
+
import "./chunk-BEDD7OFL.js";
|
|
35
|
+
import "./chunk-6C32YAB5.js";
|
|
37
36
|
import "./chunk-KTWV5JC5.js";
|
|
38
37
|
import "./chunk-PGNALDEH.js";
|
|
39
38
|
import "./chunk-PI6T2AGS.js";
|
|
40
39
|
import "./chunk-6SMM5CMP.js";
|
|
41
40
|
import "./chunk-6DBBXNEG.js";
|
|
42
|
-
import "./chunk-
|
|
41
|
+
import "./chunk-DEIYY6NI.js";
|
|
43
42
|
import "./chunk-RDGM4RUE.js";
|
|
44
43
|
import "./chunk-O7S3HYE6.js";
|
|
44
|
+
import "./chunk-OI5TZ37D.js";
|
|
45
45
|
import "./chunk-IWUIOLMF.js";
|
|
46
46
|
import "./chunk-7ZMDQZ22.js";
|
|
47
47
|
import "./chunk-OJTMM5CV.js";
|
|
48
|
-
import "./chunk-
|
|
48
|
+
import "./chunk-NWZ44SFI.js";
|
|
49
49
|
import "./chunk-BFVPLGAC.js";
|
|
50
50
|
import "./chunk-6USL33ZO.js";
|
|
51
51
|
import "./chunk-4EIC5BCT.js";
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
refreshWorkspaceReferenceCache,
|
|
17
17
|
requestBreakCacheMutationApproval,
|
|
18
18
|
requestMemoryMutationApproval
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-RDTVAQBD.js";
|
|
20
20
|
import "./chunk-SJOS5PM6.js";
|
|
21
21
|
import "./chunk-SRJ4XWOR.js";
|
|
22
22
|
import "./chunk-GC55DMZV.js";
|
|
@@ -25,57 +25,57 @@ import "./chunk-3XNUDLOM.js";
|
|
|
25
25
|
import "./chunk-ZYSN7AWW.js";
|
|
26
26
|
import "./chunk-ZKPQ4KLK.js";
|
|
27
27
|
import "./chunk-4TO2LDMP.js";
|
|
28
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-IQS34W5A.js";
|
|
29
29
|
import "./chunk-UT5BOJKU.js";
|
|
30
30
|
import "./chunk-RM5JDRCW.js";
|
|
31
31
|
import "./chunk-HJOC5WUV.js";
|
|
32
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-GYHEUVR2.js";
|
|
33
33
|
import "./chunk-TVNWAEJR.js";
|
|
34
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-KKZBBCHK.js";
|
|
35
35
|
import "./chunk-KQJHVJZB.js";
|
|
36
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-J7AAPUTV.js";
|
|
37
37
|
import "./chunk-NMNOAFFT.js";
|
|
38
|
-
import "./chunk-
|
|
38
|
+
import "./chunk-OV5OT66G.js";
|
|
39
39
|
import "./chunk-W6NU7ZAV.js";
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-
|
|
40
|
+
import "./chunk-OMWSM2DA.js";
|
|
41
|
+
import "./chunk-UYU4QN3P.js";
|
|
42
42
|
import "./chunk-BNC4F63N.js";
|
|
43
43
|
import "./chunk-CRW3636S.js";
|
|
44
44
|
import "./chunk-6CHUZ2NF.js";
|
|
45
|
-
import "./chunk-
|
|
46
|
-
import "./chunk-
|
|
45
|
+
import "./chunk-TO6IN4LA.js";
|
|
46
|
+
import "./chunk-G7O26P5X.js";
|
|
47
47
|
import "./chunk-GTP2KPLY.js";
|
|
48
48
|
import "./chunk-7ZE5JFAZ.js";
|
|
49
|
-
import "./chunk-
|
|
50
|
-
import "./chunk-
|
|
49
|
+
import "./chunk-Q57WS7YZ.js";
|
|
50
|
+
import "./chunk-QXV2N4F2.js";
|
|
51
51
|
import "./chunk-A4H3UTJZ.js";
|
|
52
52
|
import "./chunk-WJWYRBWH.js";
|
|
53
53
|
import "./chunk-CFXB5SE5.js";
|
|
54
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-EGHM55EV.js";
|
|
55
55
|
import "./chunk-WVAQYKGL.js";
|
|
56
56
|
import "./chunk-QIU3FJPC.js";
|
|
57
57
|
import "./chunk-7RZE45OT.js";
|
|
58
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-6JPUBF7B.js";
|
|
59
59
|
import "./chunk-V7GDHHBL.js";
|
|
60
60
|
import "./chunk-GCMH5P4W.js";
|
|
61
|
-
import "./chunk-
|
|
62
|
-
import "./chunk-
|
|
63
|
-
import "./chunk-
|
|
64
|
-
import "./chunk-
|
|
65
|
-
import "./chunk-
|
|
61
|
+
import "./chunk-PHPEPZAA.js";
|
|
62
|
+
import "./chunk-7XAOTGHZ.js";
|
|
63
|
+
import "./chunk-YBTXLLO5.js";
|
|
64
|
+
import "./chunk-YGXPS5F2.js";
|
|
65
|
+
import "./chunk-OH35XDD4.js";
|
|
66
66
|
import "./chunk-IPZZGDUU.js";
|
|
67
67
|
import "./chunk-PBIPV4LD.js";
|
|
68
|
-
import "./chunk-
|
|
69
|
-
import "./chunk-
|
|
68
|
+
import "./chunk-NMOVU75L.js";
|
|
69
|
+
import "./chunk-JMUAQUQQ.js";
|
|
70
70
|
import "./chunk-L4XXW6Y5.js";
|
|
71
71
|
import "./chunk-CRSLDQOA.js";
|
|
72
72
|
import "./chunk-VIBENDE3.js";
|
|
73
|
-
import "./chunk-
|
|
74
|
-
import "./chunk-
|
|
75
|
-
import "./chunk-
|
|
76
|
-
import "./chunk-
|
|
73
|
+
import "./chunk-ZPFOP557.js";
|
|
74
|
+
import "./chunk-5OZEJQBH.js";
|
|
75
|
+
import "./chunk-HMGYFENJ.js";
|
|
76
|
+
import "./chunk-VDQTNA4W.js";
|
|
77
77
|
import "./chunk-E72U7WW7.js";
|
|
78
|
-
import "./chunk-
|
|
78
|
+
import "./chunk-ESAACKVG.js";
|
|
79
79
|
import "./chunk-WCMHJ6SS.js";
|
|
80
80
|
import "./chunk-3AKXDMVS.js";
|
|
81
81
|
import "./chunk-H3T4EF5F.js";
|
|
@@ -83,21 +83,21 @@ import "./chunk-NSIKYD3X.js";
|
|
|
83
83
|
import "./chunk-FRIMDSRU.js";
|
|
84
84
|
import "./chunk-RBOQJFIZ.js";
|
|
85
85
|
import "./chunk-VIJ7GDKI.js";
|
|
86
|
-
import "./chunk-
|
|
87
|
-
import "./chunk-
|
|
88
|
-
import "./chunk-WXTHKLNH.js";
|
|
86
|
+
import "./chunk-BEDD7OFL.js";
|
|
87
|
+
import "./chunk-6C32YAB5.js";
|
|
89
88
|
import "./chunk-KTWV5JC5.js";
|
|
90
89
|
import "./chunk-PGNALDEH.js";
|
|
91
90
|
import "./chunk-PI6T2AGS.js";
|
|
92
91
|
import "./chunk-6SMM5CMP.js";
|
|
93
92
|
import "./chunk-6DBBXNEG.js";
|
|
94
|
-
import "./chunk-
|
|
93
|
+
import "./chunk-DEIYY6NI.js";
|
|
95
94
|
import "./chunk-RDGM4RUE.js";
|
|
96
95
|
import "./chunk-O7S3HYE6.js";
|
|
96
|
+
import "./chunk-OI5TZ37D.js";
|
|
97
97
|
import "./chunk-IWUIOLMF.js";
|
|
98
98
|
import "./chunk-7ZMDQZ22.js";
|
|
99
99
|
import "./chunk-OJTMM5CV.js";
|
|
100
|
-
import "./chunk-
|
|
100
|
+
import "./chunk-NWZ44SFI.js";
|
|
101
101
|
import "./chunk-BFVPLGAC.js";
|
|
102
102
|
import "./chunk-6USL33ZO.js";
|
|
103
103
|
import "./chunk-4EIC5BCT.js";
|
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
prepareMessagesForProviderPreflight,
|
|
6
6
|
recordCompactBoundary,
|
|
7
7
|
sanitizeCompactSummaryText
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-EGHM55EV.js";
|
|
9
|
+
import "./chunk-ESAACKVG.js";
|
|
10
10
|
import "./chunk-WCMHJ6SS.js";
|
|
11
11
|
import "./chunk-3AKXDMVS.js";
|
|
12
12
|
import "./chunk-H3T4EF5F.js";
|
|
@@ -14,21 +14,21 @@ import "./chunk-NSIKYD3X.js";
|
|
|
14
14
|
import "./chunk-FRIMDSRU.js";
|
|
15
15
|
import "./chunk-RBOQJFIZ.js";
|
|
16
16
|
import "./chunk-VIJ7GDKI.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-WXTHKLNH.js";
|
|
17
|
+
import "./chunk-BEDD7OFL.js";
|
|
18
|
+
import "./chunk-6C32YAB5.js";
|
|
20
19
|
import "./chunk-KTWV5JC5.js";
|
|
21
20
|
import "./chunk-PGNALDEH.js";
|
|
22
21
|
import "./chunk-PI6T2AGS.js";
|
|
23
22
|
import "./chunk-6SMM5CMP.js";
|
|
24
23
|
import "./chunk-6DBBXNEG.js";
|
|
25
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-DEIYY6NI.js";
|
|
26
25
|
import "./chunk-RDGM4RUE.js";
|
|
27
26
|
import "./chunk-O7S3HYE6.js";
|
|
27
|
+
import "./chunk-OI5TZ37D.js";
|
|
28
28
|
import "./chunk-IWUIOLMF.js";
|
|
29
29
|
import "./chunk-7ZMDQZ22.js";
|
|
30
30
|
import "./chunk-OJTMM5CV.js";
|
|
31
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-NWZ44SFI.js";
|
|
32
32
|
import "./chunk-BFVPLGAC.js";
|
|
33
33
|
import "./chunk-6USL33ZO.js";
|
|
34
34
|
import "./chunk-4EIC5BCT.js";
|
|
@@ -6,29 +6,29 @@ import {
|
|
|
6
6
|
handleAppsCommand,
|
|
7
7
|
listAppConnectors,
|
|
8
8
|
validateAppConnectorManifest
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-XYY5LRSF.js";
|
|
10
|
+
import "./chunk-CQCJGMXG.js";
|
|
11
|
+
import "./chunk-6JPUBF7B.js";
|
|
12
12
|
import "./chunk-V7GDHHBL.js";
|
|
13
13
|
import "./chunk-GCMH5P4W.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-PHPEPZAA.js";
|
|
15
|
+
import "./chunk-7XAOTGHZ.js";
|
|
16
|
+
import "./chunk-YBTXLLO5.js";
|
|
17
|
+
import "./chunk-YGXPS5F2.js";
|
|
18
|
+
import "./chunk-OH35XDD4.js";
|
|
19
19
|
import "./chunk-IPZZGDUU.js";
|
|
20
20
|
import "./chunk-PBIPV4LD.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-NMOVU75L.js";
|
|
22
|
+
import "./chunk-JMUAQUQQ.js";
|
|
23
23
|
import "./chunk-L4XXW6Y5.js";
|
|
24
24
|
import "./chunk-CRSLDQOA.js";
|
|
25
25
|
import "./chunk-VIBENDE3.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-ZPFOP557.js";
|
|
27
|
+
import "./chunk-5OZEJQBH.js";
|
|
28
|
+
import "./chunk-HMGYFENJ.js";
|
|
29
|
+
import "./chunk-VDQTNA4W.js";
|
|
30
30
|
import "./chunk-E72U7WW7.js";
|
|
31
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-ESAACKVG.js";
|
|
32
32
|
import "./chunk-WCMHJ6SS.js";
|
|
33
33
|
import "./chunk-3AKXDMVS.js";
|
|
34
34
|
import "./chunk-H3T4EF5F.js";
|
|
@@ -36,21 +36,21 @@ import "./chunk-NSIKYD3X.js";
|
|
|
36
36
|
import "./chunk-FRIMDSRU.js";
|
|
37
37
|
import "./chunk-RBOQJFIZ.js";
|
|
38
38
|
import "./chunk-VIJ7GDKI.js";
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-WXTHKLNH.js";
|
|
39
|
+
import "./chunk-BEDD7OFL.js";
|
|
40
|
+
import "./chunk-6C32YAB5.js";
|
|
42
41
|
import "./chunk-KTWV5JC5.js";
|
|
43
42
|
import "./chunk-PGNALDEH.js";
|
|
44
43
|
import "./chunk-PI6T2AGS.js";
|
|
45
44
|
import "./chunk-6SMM5CMP.js";
|
|
46
45
|
import "./chunk-6DBBXNEG.js";
|
|
47
|
-
import "./chunk-
|
|
46
|
+
import "./chunk-DEIYY6NI.js";
|
|
48
47
|
import "./chunk-RDGM4RUE.js";
|
|
49
48
|
import "./chunk-O7S3HYE6.js";
|
|
49
|
+
import "./chunk-OI5TZ37D.js";
|
|
50
50
|
import "./chunk-IWUIOLMF.js";
|
|
51
51
|
import "./chunk-7ZMDQZ22.js";
|
|
52
52
|
import "./chunk-OJTMM5CV.js";
|
|
53
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-NWZ44SFI.js";
|
|
54
54
|
import "./chunk-BFVPLGAC.js";
|
|
55
55
|
import "./chunk-6USL33ZO.js";
|
|
56
56
|
import "./chunk-4EIC5BCT.js";
|