@linghun/tui 0.1.3 → 0.1.4

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.
Files changed (94) hide show
  1. package/dist/background-control-runtime.js +29 -29
  2. package/dist/cache-command-runtime.js +3 -3
  3. package/dist/capability-runtime.js +17 -17
  4. package/dist/{chunk-QD4SCW4A.js → chunk-2JFSRRK7.js} +21 -21
  5. package/dist/{chunk-6JPUBF7B.js → chunk-2JZBPXHF.js} +12 -12
  6. package/dist/{chunk-J7AAPUTV.js → chunk-33WA4BDG.js} +4 -4
  7. package/dist/{chunk-NWZ44SFI.js → chunk-3KRRVLS4.js} +111 -78
  8. package/dist/{chunk-ZPFOP557.js → chunk-4UER2AKI.js} +0 -190
  9. package/dist/{chunk-YBTXLLO5.js → chunk-7ODJHN53.js} +1 -1
  10. package/dist/{chunk-6DBBXNEG.js → chunk-7VGFNZPN.js} +38 -2
  11. package/dist/{chunk-QXV2N4F2.js → chunk-AFNWUI6R.js} +1 -1
  12. package/dist/{chunk-G7O26P5X.js → chunk-BRNV6757.js} +1 -1
  13. package/dist/{chunk-7XAOTGHZ.js → chunk-CL3U56EI.js} +1 -1
  14. package/dist/{chunk-OH35XDD4.js → chunk-HMGGPN4J.js} +1 -1
  15. package/dist/{chunk-CQCJGMXG.js → chunk-IU7NZO6B.js} +2 -2
  16. package/dist/{chunk-3LT6OWQ2.js → chunk-IWBV4CEI.js} +1 -1
  17. package/dist/{chunk-DEIYY6NI.js → chunk-JY2DO7OF.js} +4 -155
  18. package/dist/{chunk-OV5OT66G.js → chunk-KI7NO6IF.js} +216 -5
  19. package/dist/{chunk-KKZBBCHK.js → chunk-NL4M3V5D.js} +1 -1
  20. package/dist/{chunk-IQS34W5A.js → chunk-NR3MFRPO.js} +1 -1
  21. package/dist/{chunk-ESAACKVG.js → chunk-R7BB45CP.js} +1 -1
  22. package/dist/{chunk-RDTVAQBD.js → chunk-RKFC3V6A.js} +112 -26
  23. package/dist/{chunk-PBIPV4LD.js → chunk-RMXEIZYR.js} +1 -1
  24. package/dist/{chunk-4TO2LDMP.js → chunk-SEVD3KES.js} +2 -2
  25. package/dist/{chunk-5OZEJQBH.js → chunk-T2V2USR3.js} +1 -1
  26. package/dist/{chunk-XYY5LRSF.js → chunk-T7LHFTVM.js} +3 -3
  27. package/dist/{chunk-7RZE45OT.js → chunk-UN3MMVE4.js} +1 -1
  28. package/dist/{chunk-TO6IN4LA.js → chunk-UUWG4VXV.js} +5 -195
  29. package/dist/{chunk-GYHEUVR2.js → chunk-UYEVRXUA.js} +3 -3
  30. package/dist/{chunk-RDGM4RUE.js → chunk-VZFP7NWI.js} +1 -1
  31. package/dist/{chunk-7ZMDQZ22.js → chunk-W6O7KDNM.js} +1 -1
  32. package/dist/{chunk-2YL5VKJ5.js → chunk-WO56RSMP.js} +1 -1
  33. package/dist/{chunk-BEDD7OFL.js → chunk-WRVHCSM2.js} +24 -8
  34. package/dist/{chunk-EGHM55EV.js → chunk-WXQSF2AS.js} +3 -3
  35. package/dist/{chunk-Q57WS7YZ.js → chunk-ZNAYWBBI.js} +2 -2
  36. package/dist/command-panel-runtime.js +16 -16
  37. package/dist/compact-cache-command-runtime.js +29 -29
  38. package/dist/compact-preflight-runtime.js +10 -10
  39. package/dist/connector-runtime.js +18 -18
  40. package/dist/deferred-tools-catalog.d.ts +2 -1
  41. package/dist/deferred-tools-catalog.d.ts.map +1 -1
  42. package/dist/deferred-tools-catalog.js +3 -1
  43. package/dist/details-status-runtime.js +16 -16
  44. package/dist/evidence-runtime.d.ts.map +1 -1
  45. package/dist/evidence-runtime.js +6 -6
  46. package/dist/extension-command-runtime.js +3 -3
  47. package/dist/extension-slash-runtime.js +17 -17
  48. package/dist/failure-learning-command-runtime.js +17 -17
  49. package/dist/final-answer-gate.d.ts +0 -1
  50. package/dist/final-answer-gate.d.ts.map +1 -1
  51. package/dist/final-answer-gate.js +2 -4
  52. package/dist/git-command-runtime.js +17 -17
  53. package/dist/handoff-session-runtime.js +3 -3
  54. package/dist/headless-bench-runtime.d.ts +1 -19
  55. package/dist/headless-bench-runtime.d.ts.map +1 -1
  56. package/dist/headless-bench-runtime.js +1 -3
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +32 -42
  59. package/dist/job-agent-command-runtime.js +16 -16
  60. package/dist/mcp-index-runtime.d.ts +8 -0
  61. package/dist/mcp-index-runtime.d.ts.map +1 -1
  62. package/dist/mcp-index-runtime.js +19 -17
  63. package/dist/memory-command-runtime.js +17 -17
  64. package/dist/meta-scheduler-runtime.js +2 -2
  65. package/dist/model-command-runtime.js +17 -17
  66. package/dist/model-doctor-runtime.d.ts +1 -0
  67. package/dist/model-doctor-runtime.d.ts.map +1 -1
  68. package/dist/model-doctor-runtime.js +1 -1
  69. package/dist/model-loop-runtime.d.ts +15 -1
  70. package/dist/model-loop-runtime.d.ts.map +1 -1
  71. package/dist/model-loop-runtime.js +29 -1
  72. package/dist/model-prompt-runtime.d.ts.map +1 -1
  73. package/dist/model-prompt-runtime.js +3 -3
  74. package/dist/model-stream-runtime.js +29 -29
  75. package/dist/model-tool-runtime.d.ts +7 -0
  76. package/dist/model-tool-runtime.d.ts.map +1 -1
  77. package/dist/model-tool-runtime.js +31 -29
  78. package/dist/permission-approval-runtime.js +29 -29
  79. package/dist/provider-loop-runtime.js +3 -3
  80. package/dist/remote-command-runtime.js +17 -17
  81. package/dist/shell/components/ProductBlock.js +2 -2
  82. package/dist/shell/components/ShellApp.js +12 -12
  83. package/dist/shell/ink-renderer.js +12 -12
  84. package/dist/shell/view-model.js +4 -4
  85. package/dist/slash-command-runtime.js +29 -29
  86. package/dist/terminal-readiness-runtime.js +3 -3
  87. package/dist/tui-agent-job-runtime.js +4 -4
  88. package/dist/tui-context-runtime.js +3 -3
  89. package/dist/tui-model-runtime.js +2 -2
  90. package/dist/tui-output-surface.js +5 -5
  91. package/dist/verification-command-runtime.js +5 -5
  92. package/dist/workflow-command-runtime.js +16 -16
  93. package/package.json +4 -4
  94. package/dist/{chunk-Z265MCGC.js → chunk-VWEAK3UV.js} +3 -3
@@ -4,7 +4,7 @@ import {
4
4
  extractStructuredFinalAnswerClaims,
5
5
  finalAnswerHasCompletenessClassification,
6
6
  hasArchitectureEvidenceForClaims
7
- } from "./chunk-NWZ44SFI.js";
7
+ } from "./chunk-3KRRVLS4.js";
8
8
  import {
9
9
  detectArchitectureDrift
10
10
  } from "./chunk-MVONSJEN.js";
@@ -170,16 +170,12 @@ function isBetaVerdictEvidence(item) {
170
170
  ) || hasReportWriteEvidence([item]);
171
171
  }
172
172
  function checkClaimSupport(claim, context) {
173
- const headlessRisk = createHeadlessBenchDiagnosticRiskSummary(context);
174
- const validationContractRisk = createHeadlessBenchValidationContractRiskSummary(context);
175
173
  const structuredClaims = extractStructuredFinalAnswerClaims(claim);
176
174
  if (structuredClaims.some((item) => item.kind === "beta_readiness")) {
177
175
  return {
178
176
  status: "needs_disclaimer",
179
177
  unsupportedClaims: [
180
- ...structuredClaims.filter((item) => item.kind === "beta_readiness").map((item) => item.phrase),
181
- ...validationContractRisk ? [validationContractRisk] : [],
182
- ...headlessRisk ? [headlessRisk] : []
178
+ ...structuredClaims.filter((item) => item.kind === "beta_readiness").map((item) => item.phrase)
183
179
  ],
184
180
  verdict: createPhase15BetaVerdictScope(context.evidence)
185
181
  };
@@ -187,26 +183,7 @@ function checkClaimSupport(claim, context) {
187
183
  if (structuredClaims.length === 0) {
188
184
  const nlCheck = detectNaturalLanguageHighRiskClaims(claim);
189
185
  if (nlCheck.status !== "passed") {
190
- return {
191
- ...nlCheck,
192
- unsupportedClaims: [
193
- ...nlCheck.unsupportedClaims,
194
- ...validationContractRisk ? [validationContractRisk] : [],
195
- ...headlessRisk ? [headlessRisk] : []
196
- ]
197
- };
198
- }
199
- if (validationContractRisk) {
200
- return {
201
- status: "needs_disclaimer",
202
- unsupportedClaims: [validationContractRisk]
203
- };
204
- }
205
- if (headlessRisk) {
206
- return {
207
- status: "needs_disclaimer",
208
- unsupportedClaims: [headlessRisk]
209
- };
186
+ return nlCheck;
210
187
  }
211
188
  return { status: "passed", unsupportedClaims: [] };
212
189
  }
@@ -218,186 +195,20 @@ function checkClaimSupport(claim, context) {
218
195
  return {
219
196
  status: "needs_disclaimer",
220
197
  unsupportedClaims: [
221
- ...extended.verdict.matchedClaims.map((item) => item.phrase),
222
- ...validationContractRisk ? [validationContractRisk] : [],
223
- ...headlessRisk ? [headlessRisk] : []
198
+ ...extended.verdict.matchedClaims.map((item) => item.phrase)
224
199
  ]
225
200
  };
226
201
  }
227
202
  }
228
203
  const verdict = evaluateFinalAnswerClaims(claim, context.evidence);
229
204
  if (verdict.status === "passed") {
230
- if (validationContractRisk) {
231
- return {
232
- status: "needs_disclaimer",
233
- unsupportedClaims: [validationContractRisk]
234
- };
235
- }
236
- if (headlessRisk) {
237
- return {
238
- status: "needs_disclaimer",
239
- unsupportedClaims: [headlessRisk]
240
- };
241
- }
242
205
  return { status: "passed", unsupportedClaims: [] };
243
206
  }
244
207
  return {
245
208
  status: "needs_disclaimer",
246
- unsupportedClaims: [
247
- ...structuredClaims.map((item) => item.phrase),
248
- ...validationContractRisk ? [validationContractRisk] : [],
249
- ...headlessRisk ? [headlessRisk] : []
250
- ]
209
+ unsupportedClaims: structuredClaims.map((item) => item.phrase)
251
210
  };
252
211
  }
253
- function createHeadlessBenchValidationContractRiskSummary(context) {
254
- const tools = context.tools;
255
- if (tools.headlessBench?.enabled !== true) return void 0;
256
- const items = tools.validationContract?.items ?? [];
257
- if (items.length === 0) return void 0;
258
- const risks = items.map((item) => summarizeValidationContractItemRisk(item, context.evidence)).filter((risk) => Boolean(risk));
259
- if (risks.length === 0) return void 0;
260
- return `validation contract needs validation: ${risks.slice(0, 4).join("; ")}`;
261
- }
262
- function summarizeValidationContractItemRisk(item, evidence) {
263
- const matching = collectMatchingValidationEvidence(item, evidence);
264
- if (matching.some((entry) => entry.ok === true)) {
265
- if (item.kind === "service" && item.validation === "semantic" && !hasSemanticServiceEvidence(item, matching, evidence)) {
266
- const subject2 = item.path ?? item.target ?? item.id;
267
- return `${item.kind} ${subject2} missing semantic response probe evidence; status/readiness alone is not enough`;
268
- }
269
- return void 0;
270
- }
271
- const subject = item.path ?? item.target ?? item.id;
272
- if (matching.some((entry) => entry.ok === false)) {
273
- return `${item.kind} ${subject} failed explicit ${item.requiredTool}; needs_repair before final`;
274
- }
275
- return `${item.kind} ${subject} missing explicit ${item.requiredTool}`;
276
- }
277
- function collectMatchingValidationEvidence(item, evidence) {
278
- return evidence.flatMap((record) => readValidationEvidence(record)).filter(
279
- (entry) => entry.kind === item.kind && entry.tool === item.requiredTool && validationEvidenceSubjectMatches(item, entry)
280
- );
281
- }
282
- function readValidationEvidence(evidence) {
283
- if (!evidence.data || typeof evidence.data !== "object") return [];
284
- const value = evidence.data.validationEvidence;
285
- if (!Array.isArray(value)) return [];
286
- return value.map((entry) => entry && typeof entry === "object" ? entry : void 0).filter((entry) => Boolean(entry));
287
- }
288
- function validationEvidenceSubjectMatches(item, evidence) {
289
- if (item.path) return validationPathsMatch(evidence.path, item.path);
290
- if (item.target) return normalizeValidationTarget(evidence.target) === normalizeValidationTarget(item.target);
291
- return false;
292
- }
293
- function validationPathsMatch(evidencePath, contractPath) {
294
- const evidence = normalizeValidationPath(evidencePath);
295
- const contract = normalizeValidationPath(contractPath);
296
- if (!evidence || !contract) return false;
297
- if (evidence === contract) return true;
298
- return stripKnownWorkspaceRoot(evidence) === stripKnownWorkspaceRoot(contract);
299
- }
300
- function stripKnownWorkspaceRoot(path) {
301
- for (const prefix of ["/app/", "/workspace/"]) {
302
- if (path.startsWith(prefix)) return path.slice(prefix.length);
303
- }
304
- return path;
305
- }
306
- function normalizeValidationPath(path) {
307
- if (!path) return void 0;
308
- return path.replace(/\\/gu, "/").replace(/\/$/u, "");
309
- }
310
- function normalizeValidationTarget(target) {
311
- if (!target) return void 0;
312
- try {
313
- const url = target.startsWith("http://") || target.startsWith("https://") ? new URL(target) : new URL(`http://${target}`);
314
- const port = url.port || (url.protocol === "https:" ? "443" : "80");
315
- const path = target.startsWith("http://") || target.startsWith("https://") ? url.pathname.replace(/\/$/u, "") : "";
316
- return `${url.hostname}:${port}${path}`;
317
- } catch {
318
- return target.replace(/\/$/u, "");
319
- }
320
- }
321
- function hasSemanticServiceEvidence(item, matching, evidence) {
322
- const tokens = item.semanticTokens ?? [];
323
- if (matching.some((entry) => serviceFetchEvidenceHasSemanticChecks(entry, tokens))) return true;
324
- return evidence.some((record) => commandOrVerificationEvidenceHasSemanticProbe(record, tokens));
325
- }
326
- function serviceFetchEvidenceHasSemanticChecks(entry, tokens) {
327
- if (entry.ok !== true) return false;
328
- const fetch = readRecord(entry.checks?.fetch);
329
- const bodyContains = readStringList(fetch?.bodyContains);
330
- if (bodyContains.length === 0) return false;
331
- if (tokens.length === 0) return true;
332
- const haystack = bodyContains.join("\n").toLowerCase();
333
- return tokens.some((token) => haystack.includes(token.toLowerCase()));
334
- }
335
- function commandOrVerificationEvidenceHasSemanticProbe(record, tokens) {
336
- if (record.kind === "test_result" && record.supportsClaims.includes("verification_passed")) return true;
337
- if (record.kind !== "command_output") return false;
338
- if (!record.supportsClaims.includes("bash_exit_0")) return false;
339
- const semanticProbe = readRecord(readEvidenceDataRecord(record, "semanticProbe"));
340
- const semanticProbeTokens = readStringList(semanticProbe?.tokens);
341
- const haystack = `${record.summary}
342
- ${record.source}
343
- ${semanticProbeTokens.join("\n")}`.toLowerCase();
344
- const matchedTokens = tokens.filter((token) => haystack.includes(token.toLowerCase()));
345
- return matchedTokens.length >= Math.min(2, tokens.length);
346
- }
347
- function readRecord(value) {
348
- return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
349
- }
350
- function readStringList(value) {
351
- if (typeof value === "string" && value.trim()) return [value];
352
- if (!Array.isArray(value)) return [];
353
- return value.filter((item) => typeof item === "string" && item.trim().length > 0);
354
- }
355
- function createHeadlessBenchDiagnosticRiskSummary(context) {
356
- const tools = context.tools;
357
- if (tools.headlessBench?.enabled !== true) return void 0;
358
- const risky = (tools.recentDiagnostics ?? []).slice(0, 10).filter(
359
- (diagnostic) => (diagnostic.severity === "recoverable" || diagnostic.severity === "blocking") && (diagnostic.type === "service_readiness" || diagnostic.type === "artifact_preservation" || diagnostic.type === "binary_tool_missing" || diagnostic.type === "missing_command" || diagnostic.type === "timeout" || diagnostic.type === "provider_or_network") && !isDiagnosticRiskResolved(diagnostic, context.evidence)
360
- );
361
- if (risky.length === 0) return void 0;
362
- return `headless bench risk: ${risky.slice(0, 3).map((diagnostic) => `${diagnostic.type}: ${diagnostic.evidence ?? ""}`.trim()).join("; ")}`;
363
- }
364
- function isDiagnosticRiskResolved(diagnostic, evidence) {
365
- if (diagnostic.type === "service_readiness" || diagnostic.type === "timeout") {
366
- const target = readDiagnosticServiceTarget(diagnostic);
367
- if (!target) return false;
368
- return evidence.some((item) => {
369
- const serviceHint = readEvidenceDataRecord(item, "serviceHint");
370
- const service = readEvidenceDataRecord(item, "service");
371
- return serviceHint?.ready === true && serviceHint.target === target || service?.ready === true && service.target === target;
372
- });
373
- }
374
- if (diagnostic.type === "artifact_preservation") {
375
- if (!diagnostic.path) return false;
376
- return evidence.some((item) => {
377
- const artifactHint = readEvidenceDataRecord(item, "artifactHint");
378
- return artifactHint?.exists === true && artifactHint.path === diagnostic.path;
379
- });
380
- }
381
- if (diagnostic.type === "binary_tool_missing") {
382
- if (!diagnostic.path) return false;
383
- return evidence.some(
384
- (item) => readEvidenceDataRecord(item, "binaryHint")?.path === diagnostic.path || readEvidenceDataRecord(item, "binaryPreflight")?.path === diagnostic.path
385
- );
386
- }
387
- return false;
388
- }
389
- function readDiagnosticServiceTarget(diagnostic) {
390
- if (diagnostic.target) return diagnostic.target;
391
- if (diagnostic.targetHost && diagnostic.targetPort !== void 0) {
392
- return `${diagnostic.targetHost}:${diagnostic.targetPort}`;
393
- }
394
- return void 0;
395
- }
396
- function readEvidenceDataRecord(evidence, key) {
397
- if (!evidence.data || typeof evidence.data !== "object") return void 0;
398
- const value = evidence.data[key];
399
- return value && typeof value === "object" ? value : void 0;
400
- }
401
212
  var HIGH_RISK_NL_CLAIM_PATTERNS = [
402
213
  // ── Chinese patterns(无 \b,CJK 字符无需 ASCII 单词边界)──
403
214
  {
@@ -494,6 +305,5 @@ export {
494
305
  createHandoffRiskItems,
495
306
  createPhase15BetaVerdictScope,
496
307
  checkClaimSupport,
497
- createHeadlessBenchValidationContractRiskSummary,
498
308
  formatClaimCheck
499
309
  };
@@ -6,16 +6,16 @@ import {
6
6
  } from "./chunk-TVNWAEJR.js";
7
7
  import {
8
8
  showCommandPanel
9
- } from "./chunk-6JPUBF7B.js";
9
+ } from "./chunk-2JZBPXHF.js";
10
10
  import {
11
11
  writeErrorLine
12
- } from "./chunk-OH35XDD4.js";
12
+ } from "./chunk-HMGGPN4J.js";
13
13
  import {
14
14
  createHandoffPacket,
15
15
  formatResumePacket,
16
16
  hydrateResumeContext,
17
17
  validateHandoffPacket
18
- } from "./chunk-7ZMDQZ22.js";
18
+ } from "./chunk-W6O7KDNM.js";
19
19
  import {
20
20
  createEvidenceBackedMemoryCandidates,
21
21
  createLinghunMdTemplate,
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-IWUIOLMF.js";
9
9
  import {
10
10
  formatReasoningEffectiveState
11
- } from "./chunk-3LT6OWQ2.js";
11
+ } from "./chunk-IWBV4CEI.js";
12
12
 
13
13
  // src/tui-context-runtime.ts
14
14
  import {
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-6JGRNES6.js";
14
14
  import {
15
15
  getRuntimeStatusProvider
16
- } from "./chunk-3LT6OWQ2.js";
16
+ } from "./chunk-IWBV4CEI.js";
17
17
  import {
18
18
  summarizeArchitectureCard
19
19
  } from "./chunk-MVONSJEN.js";
@@ -202,7 +202,7 @@ async function formatModelRouteDoctor(context) {
202
202
  if (context.deferredToolsSummary) {
203
203
  const summary = context.deferredToolsSummary;
204
204
  lines.push(
205
- `- deferred tools: total ${summary.total}; executable ${summary.executableCount}; codebase-memory ${summary.byKind["codebase-memory"]}; mcp ${summary.byKind.mcp}; skill ${summary.byKind.skill}; plugin ${summary.byKind.plugin} (SearchExtraTools/ExecuteExtraTool \u5165\u53E3\uFF1Bbuilt-in \u5DE5\u5177\u4E0D\u8D70\u8BE5\u6D3E\u53D1)`
205
+ `- deferred tools: total ${summary.total}; executable ${summary.executableCount}; codebase-memory ${summary.byKind["codebase-memory"]}; pre-engine ${summary.byKind["pre-engine"]}; mcp ${summary.byKind.mcp}; skill ${summary.byKind.skill}; plugin ${summary.byKind.plugin} (SearchExtraTools/ExecuteExtraTool \u5165\u53E3\uFF1Bbuilt-in \u5DE5\u5177\u4E0D\u8D70\u8BE5\u6D3E\u53D1)`
206
206
  );
207
207
  }
208
208
  if (context.discoveredDeferredToolsSummary) {
@@ -6,15 +6,16 @@ import {
6
6
  } from "./chunk-PGNALDEH.js";
7
7
  import {
8
8
  formatDeferredToolsSystemReminder,
9
+ registerPreEngineDeferredToolsForRuntime,
9
10
  snapshotDeferredTools
10
- } from "./chunk-6DBBXNEG.js";
11
+ } from "./chunk-7VGFNZPN.js";
11
12
  import {
12
13
  formatControlledMemoryForModel
13
14
  } from "./chunk-OJTMM5CV.js";
14
15
  import {
15
16
  createSolutionCompletenessStatus,
16
17
  projectRuntimeStatusForPrompt
17
- } from "./chunk-NWZ44SFI.js";
18
+ } from "./chunk-3KRRVLS4.js";
18
19
  import {
19
20
  truncateDisplay
20
21
  } from "./chunk-UGYFQF6M.js";
@@ -23,12 +24,25 @@ import {
23
24
  var MEMORY_PROMPT_TOP_K = 3;
24
25
  function createModelSystemPrompt(text, context, runtimeStatus, architectureDirective, worktreeContextSummary, failureLearningSummary, metaSchedulerDirective, gitStatusSummary) {
25
26
  const solutionCompletenessWarning = updateSolutionCompletenessGate(text, context);
26
- const deferredReminder = formatDeferredToolsSystemReminder(
27
- context.language,
28
- snapshotDeferredTools(context)
29
- );
30
- const worktreeContextLine = worktreeContextSummary && worktreeContextSummary.isWorktree === true ? `
31
- WorktreeContext=${JSON.stringify(worktreeContextSummary)}` : "";
27
+ const deferredSnapshot = snapshotDeferredTools(context);
28
+ const deferredReminder = formatDeferredToolsSystemReminder(context.language, deferredSnapshot);
29
+ const preEngineToolNames = registerPreEngineDeferredToolsForRuntime(context, deferredSnapshot);
30
+ const preEngineToolsLine = preEngineToolNames.length > 0 ? `
31
+ PreEngineRepositoryTools=${JSON.stringify({
32
+ discovered: true,
33
+ tools: preEngineToolNames,
34
+ invocation: "These pre-engine tools are first-class readonly model tools; call them directly when useful. ExecuteExtraTool remains available for deferred-tool dispatch.",
35
+ indexCoordination: "If codebase-memory index is ready, use index-backed tools for broad repository discovery first, then pre-engine for AST precision; if the index is missing or stale, use pre-engine as the fast repository-analysis entry.",
36
+ useFor: [
37
+ "repository code understanding",
38
+ "impact analysis",
39
+ "edit planning",
40
+ "quick verification"
41
+ ]
42
+ })}
43
+ RepositoryAnalysisWorkflow=Before broad Grep/Read exploration for repository analysis work, get structured evidence first: use codebase-memory index tools when ready, then pre-engine for AST precision. If the task names a concrete function, class, method, command, or file-level anchor, call pre_context on that anchor first; use pre_plan first only when no concrete anchor is known. When a pre-engine result includes answer_pack with high/medium confidence and little missing_evidence, use it as the primary evidence map; suggested_minimal_reads are line-window hints, so prefer ReadSnippets for those ranges and avoid broad Grep/full-file Read unless explicit evidence is missing.` : "";
44
+ const worktreeContextLine = `${preEngineToolsLine}${worktreeContextSummary && worktreeContextSummary.isWorktree === true ? `
45
+ WorktreeContext=${JSON.stringify(worktreeContextSummary)}` : ""}`;
32
46
  const failureLearningLine = failureLearningSummary && failureLearningSummary.count > 0 ? `
33
47
  FailureLearningSummary=${failureLearningSummary.text}
34
48
  FailureLearningRule=These are lessons from PAST real failures in this project, surfaced as risk hints only. They do NOT mean the current task has failed, is fixed, or is verified. Use them to double-check risky steps; never cite them as evidence that something is already done/fixed/verified. Say "history shows / may be related", not present-tense facts.` : "";
@@ -165,6 +179,8 @@ var INTERNAL_PROMPT_TOKENS = [
165
179
  "raw tool_result",
166
180
  "internal scheduler labels",
167
181
  "meta_scheduler",
182
+ "PreEngineRepositoryTools",
183
+ "RepositoryAnalysisWorkflow",
168
184
  "WorktreeContext",
169
185
  "DeferredToolsReminder",
170
186
  "OutputStyle",
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createCompactBoundaryBlock
3
- } from "./chunk-ESAACKVG.js";
3
+ } from "./chunk-R7BB45CP.js";
4
4
  import {
5
5
  createEvidenceRecord,
6
6
  rememberEvidence
7
- } from "./chunk-DEIYY6NI.js";
7
+ } from "./chunk-JY2DO7OF.js";
8
8
  import {
9
9
  applyToolResultBudgetToMessages
10
10
  } from "./chunk-O7S3HYE6.js";
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-K4FSYBSY.js";
18
18
  import {
19
19
  getRoleRoute
20
- } from "./chunk-2YL5VKJ5.js";
20
+ } from "./chunk-WO56RSMP.js";
21
21
  import {
22
22
  compactMessagesToFit
23
23
  } from "./chunk-URNQUECO.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  showCommandPanel
3
- } from "./chunk-6JPUBF7B.js";
3
+ } from "./chunk-2JZBPXHF.js";
4
4
  import {
5
5
  createSkillEvolutionCandidate,
6
6
  formatExtensionInstallGate,
@@ -14,7 +14,7 @@ import {
14
14
  removeExtension,
15
15
  updateExtension,
16
16
  validateExtensionItems
17
- } from "./chunk-5OZEJQBH.js";
17
+ } from "./chunk-T2V2USR3.js";
18
18
  import {
19
19
  createHookState,
20
20
  createPluginState,
@@ -3,27 +3,27 @@ import {
3
3
  getCommandPanelRowText,
4
4
  getCommandPanelSelectableRows,
5
5
  showCommandPanel
6
- } from "./chunk-6JPUBF7B.js";
6
+ } from "./chunk-2JZBPXHF.js";
7
7
  import "./chunk-V7GDHHBL.js";
8
8
  import "./chunk-GCMH5P4W.js";
9
9
  import "./chunk-PHPEPZAA.js";
10
- import "./chunk-7XAOTGHZ.js";
11
- import "./chunk-YBTXLLO5.js";
10
+ import "./chunk-CL3U56EI.js";
11
+ import "./chunk-7ODJHN53.js";
12
12
  import "./chunk-YGXPS5F2.js";
13
- import "./chunk-OH35XDD4.js";
13
+ import "./chunk-HMGGPN4J.js";
14
14
  import "./chunk-IPZZGDUU.js";
15
- import "./chunk-PBIPV4LD.js";
15
+ import "./chunk-RMXEIZYR.js";
16
16
  import "./chunk-NMOVU75L.js";
17
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-ZPFOP557.js";
22
- import "./chunk-5OZEJQBH.js";
21
+ import "./chunk-4UER2AKI.js";
22
+ import "./chunk-T2V2USR3.js";
23
23
  import "./chunk-HMGYFENJ.js";
24
24
  import "./chunk-VDQTNA4W.js";
25
25
  import "./chunk-E72U7WW7.js";
26
- import "./chunk-ESAACKVG.js";
26
+ import "./chunk-R7BB45CP.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-BEDD7OFL.js";
34
+ import "./chunk-WRVHCSM2.js";
35
35
  import "./chunk-6C32YAB5.js";
36
36
  import "./chunk-KTWV5JC5.js";
37
37
  import "./chunk-PGNALDEH.js";
38
38
  import "./chunk-PI6T2AGS.js";
39
39
  import "./chunk-6SMM5CMP.js";
40
- import "./chunk-6DBBXNEG.js";
41
- import "./chunk-DEIYY6NI.js";
42
- import "./chunk-RDGM4RUE.js";
40
+ import "./chunk-7VGFNZPN.js";
41
+ import "./chunk-JY2DO7OF.js";
42
+ import "./chunk-VZFP7NWI.js";
43
43
  import "./chunk-O7S3HYE6.js";
44
44
  import "./chunk-OI5TZ37D.js";
45
45
  import "./chunk-IWUIOLMF.js";
46
- import "./chunk-7ZMDQZ22.js";
46
+ import "./chunk-W6O7KDNM.js";
47
47
  import "./chunk-OJTMM5CV.js";
48
- import "./chunk-NWZ44SFI.js";
48
+ import "./chunk-3KRRVLS4.js";
49
49
  import "./chunk-BFVPLGAC.js";
50
50
  import "./chunk-6USL33ZO.js";
51
51
  import "./chunk-4EIC5BCT.js";
@@ -60,8 +60,8 @@ import "./chunk-4EP3TUFF.js";
60
60
  import "./chunk-WX2OTJXL.js";
61
61
  import "./chunk-QBCGAIU7.js";
62
62
  import "./chunk-K4FSYBSY.js";
63
- import "./chunk-3LT6OWQ2.js";
64
- import "./chunk-2YL5VKJ5.js";
63
+ import "./chunk-IWBV4CEI.js";
64
+ import "./chunk-WO56RSMP.js";
65
65
  import "./chunk-EBACIBJP.js";
66
66
  import "./chunk-OZMX3E35.js";
67
67
  import "./chunk-URNQUECO.js";
@@ -16,7 +16,7 @@ import {
16
16
  refreshWorkspaceReferenceCache,
17
17
  requestBreakCacheMutationApproval,
18
18
  requestMemoryMutationApproval
19
- } from "./chunk-RDTVAQBD.js";
19
+ } from "./chunk-RKFC3V6A.js";
20
20
  import "./chunk-SJOS5PM6.js";
21
21
  import "./chunk-SRJ4XWOR.js";
22
22
  import "./chunk-GC55DMZV.js";
@@ -24,58 +24,58 @@ import "./chunk-DICVLZHH.js";
24
24
  import "./chunk-3XNUDLOM.js";
25
25
  import "./chunk-ZYSN7AWW.js";
26
26
  import "./chunk-ZKPQ4KLK.js";
27
- import "./chunk-4TO2LDMP.js";
28
- import "./chunk-IQS34W5A.js";
27
+ import "./chunk-SEVD3KES.js";
28
+ import "./chunk-NR3MFRPO.js";
29
29
  import "./chunk-UT5BOJKU.js";
30
30
  import "./chunk-RM5JDRCW.js";
31
31
  import "./chunk-HJOC5WUV.js";
32
- import "./chunk-GYHEUVR2.js";
32
+ import "./chunk-UYEVRXUA.js";
33
33
  import "./chunk-TVNWAEJR.js";
34
- import "./chunk-KKZBBCHK.js";
34
+ import "./chunk-NL4M3V5D.js";
35
35
  import "./chunk-KQJHVJZB.js";
36
- import "./chunk-J7AAPUTV.js";
36
+ import "./chunk-33WA4BDG.js";
37
37
  import "./chunk-NMNOAFFT.js";
38
- import "./chunk-OV5OT66G.js";
38
+ import "./chunk-KI7NO6IF.js";
39
39
  import "./chunk-W6NU7ZAV.js";
40
40
  import "./chunk-OMWSM2DA.js";
41
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-TO6IN4LA.js";
46
- import "./chunk-G7O26P5X.js";
45
+ import "./chunk-UUWG4VXV.js";
46
+ import "./chunk-BRNV6757.js";
47
47
  import "./chunk-GTP2KPLY.js";
48
48
  import "./chunk-7ZE5JFAZ.js";
49
- import "./chunk-Q57WS7YZ.js";
50
- import "./chunk-QXV2N4F2.js";
49
+ import "./chunk-ZNAYWBBI.js";
50
+ import "./chunk-AFNWUI6R.js";
51
51
  import "./chunk-A4H3UTJZ.js";
52
52
  import "./chunk-WJWYRBWH.js";
53
53
  import "./chunk-CFXB5SE5.js";
54
- import "./chunk-EGHM55EV.js";
54
+ import "./chunk-WXQSF2AS.js";
55
55
  import "./chunk-WVAQYKGL.js";
56
56
  import "./chunk-QIU3FJPC.js";
57
- import "./chunk-7RZE45OT.js";
58
- import "./chunk-6JPUBF7B.js";
57
+ import "./chunk-UN3MMVE4.js";
58
+ import "./chunk-2JZBPXHF.js";
59
59
  import "./chunk-V7GDHHBL.js";
60
60
  import "./chunk-GCMH5P4W.js";
61
61
  import "./chunk-PHPEPZAA.js";
62
- import "./chunk-7XAOTGHZ.js";
63
- import "./chunk-YBTXLLO5.js";
62
+ import "./chunk-CL3U56EI.js";
63
+ import "./chunk-7ODJHN53.js";
64
64
  import "./chunk-YGXPS5F2.js";
65
- import "./chunk-OH35XDD4.js";
65
+ import "./chunk-HMGGPN4J.js";
66
66
  import "./chunk-IPZZGDUU.js";
67
- import "./chunk-PBIPV4LD.js";
67
+ import "./chunk-RMXEIZYR.js";
68
68
  import "./chunk-NMOVU75L.js";
69
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-ZPFOP557.js";
74
- import "./chunk-5OZEJQBH.js";
73
+ import "./chunk-4UER2AKI.js";
74
+ import "./chunk-T2V2USR3.js";
75
75
  import "./chunk-HMGYFENJ.js";
76
76
  import "./chunk-VDQTNA4W.js";
77
77
  import "./chunk-E72U7WW7.js";
78
- import "./chunk-ESAACKVG.js";
78
+ import "./chunk-R7BB45CP.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-BEDD7OFL.js";
86
+ import "./chunk-WRVHCSM2.js";
87
87
  import "./chunk-6C32YAB5.js";
88
88
  import "./chunk-KTWV5JC5.js";
89
89
  import "./chunk-PGNALDEH.js";
90
90
  import "./chunk-PI6T2AGS.js";
91
91
  import "./chunk-6SMM5CMP.js";
92
- import "./chunk-6DBBXNEG.js";
93
- import "./chunk-DEIYY6NI.js";
94
- import "./chunk-RDGM4RUE.js";
92
+ import "./chunk-7VGFNZPN.js";
93
+ import "./chunk-JY2DO7OF.js";
94
+ import "./chunk-VZFP7NWI.js";
95
95
  import "./chunk-O7S3HYE6.js";
96
96
  import "./chunk-OI5TZ37D.js";
97
97
  import "./chunk-IWUIOLMF.js";
98
- import "./chunk-7ZMDQZ22.js";
98
+ import "./chunk-W6O7KDNM.js";
99
99
  import "./chunk-OJTMM5CV.js";
100
- import "./chunk-NWZ44SFI.js";
100
+ import "./chunk-3KRRVLS4.js";
101
101
  import "./chunk-BFVPLGAC.js";
102
102
  import "./chunk-6USL33ZO.js";
103
103
  import "./chunk-4EIC5BCT.js";
@@ -112,8 +112,8 @@ import "./chunk-4EP3TUFF.js";
112
112
  import "./chunk-WX2OTJXL.js";
113
113
  import "./chunk-QBCGAIU7.js";
114
114
  import "./chunk-K4FSYBSY.js";
115
- import "./chunk-3LT6OWQ2.js";
116
- import "./chunk-2YL5VKJ5.js";
115
+ import "./chunk-IWBV4CEI.js";
116
+ import "./chunk-WO56RSMP.js";
117
117
  import "./chunk-EBACIBJP.js";
118
118
  import "./chunk-OZMX3E35.js";
119
119
  import "./chunk-URNQUECO.js";
@@ -5,8 +5,8 @@ import {
5
5
  prepareMessagesForProviderPreflight,
6
6
  recordCompactBoundary,
7
7
  sanitizeCompactSummaryText
8
- } from "./chunk-EGHM55EV.js";
9
- import "./chunk-ESAACKVG.js";
8
+ } from "./chunk-WXQSF2AS.js";
9
+ import "./chunk-R7BB45CP.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-BEDD7OFL.js";
17
+ import "./chunk-WRVHCSM2.js";
18
18
  import "./chunk-6C32YAB5.js";
19
19
  import "./chunk-KTWV5JC5.js";
20
20
  import "./chunk-PGNALDEH.js";
21
21
  import "./chunk-PI6T2AGS.js";
22
22
  import "./chunk-6SMM5CMP.js";
23
- import "./chunk-6DBBXNEG.js";
24
- import "./chunk-DEIYY6NI.js";
25
- import "./chunk-RDGM4RUE.js";
23
+ import "./chunk-7VGFNZPN.js";
24
+ import "./chunk-JY2DO7OF.js";
25
+ import "./chunk-VZFP7NWI.js";
26
26
  import "./chunk-O7S3HYE6.js";
27
27
  import "./chunk-OI5TZ37D.js";
28
28
  import "./chunk-IWUIOLMF.js";
29
- import "./chunk-7ZMDQZ22.js";
29
+ import "./chunk-W6O7KDNM.js";
30
30
  import "./chunk-OJTMM5CV.js";
31
- import "./chunk-NWZ44SFI.js";
31
+ import "./chunk-3KRRVLS4.js";
32
32
  import "./chunk-BFVPLGAC.js";
33
33
  import "./chunk-6USL33ZO.js";
34
34
  import "./chunk-4EIC5BCT.js";
@@ -42,8 +42,8 @@ import "./chunk-5H7RRF7C.js";
42
42
  import "./chunk-4EP3TUFF.js";
43
43
  import "./chunk-WX2OTJXL.js";
44
44
  import "./chunk-K4FSYBSY.js";
45
- import "./chunk-3LT6OWQ2.js";
46
- import "./chunk-2YL5VKJ5.js";
45
+ import "./chunk-IWBV4CEI.js";
46
+ import "./chunk-WO56RSMP.js";
47
47
  import "./chunk-EBACIBJP.js";
48
48
  import "./chunk-OZMX3E35.js";
49
49
  import "./chunk-URNQUECO.js";