|
| 1 | +import type { BootstrapContextMode } from "../../agents/bootstrap-files.js"; |
1 | 2 | import { resolveCliRuntimeExecutionProvider } from "../../agents/model-runtime-aliases.js"; |
2 | 3 | import type { SkillSnapshot } from "../../agents/skills.js"; |
3 | 4 | import { normalizeToolList } from "../../agents/tool-policy.js"; |
@@ -60,6 +61,29 @@ function resolveCronOwnerOnlyToolAllowlist(toolsAllow: string[] | undefined): st |
60 | 61 | return ["cron"]; |
61 | 62 | } |
62 | 63 |
|
| 64 | +const COMMAND_STYLE_CRON_PREFIX = |
| 65 | + /^(?:(?:[A-Z_][A-Z0-9_]*=\S+\s+)+)?(?:cd\s+\S+|(?:\.{1,2}|~)?\/\S+|[A-Za-z]:[\\/]\S+|(?:bash|bun|cargo|deno|docker|gh|git|go|make|node|npm|npx|pnpm|python|python3|ruby|sh|tsx|uv|zsh)\b)/u; |
| 66 | + |
| 67 | +export function isCommandStyleCronMessage(message: string): boolean { |
| 68 | + const trimmed = message.trim(); |
| 69 | + if (!trimmed || trimmed.includes("\n")) { |
| 70 | + return false; |
| 71 | + } |
| 72 | + return COMMAND_STYLE_CRON_PREFIX.test(trimmed); |
| 73 | +} |
| 74 | + |
| 75 | +function resolveCronBootstrapContextMode( |
| 76 | + payload: AgentTurnPayload, |
| 77 | +): BootstrapContextMode | undefined { |
| 78 | + if (payload?.lightContext === true) { |
| 79 | + return "lightweight"; |
| 80 | + } |
| 81 | + if (payload?.lightContext === false) { |
| 82 | + return undefined; |
| 83 | + } |
| 84 | + return isCommandStyleCronMessage(payload?.message ?? "") ? "lightweight" : undefined; |
| 85 | +} |
| 86 | + |
63 | 87 | export type CronExecutionResult = { |
64 | 88 | runResult: CronPromptRunResult; |
65 | 89 | fallbackProvider: string; |
@@ -180,6 +204,8 @@ export function createCronPromptExecutor(params: { |
180 | 204 | onExecutionPhase: params.onExecutionPhase, |
181 | 205 | bootstrapPromptWarningSignaturesSeen, |
182 | 206 | bootstrapPromptWarningSignature, |
| 207 | + bootstrapContextMode: resolveCronBootstrapContextMode(params.agentPayload), |
| 208 | + bootstrapContextRunKind: "cron", |
183 | 209 | senderIsOwner: params.senderIsOwner, |
184 | 210 | }); |
185 | 211 | bootstrapPromptWarningSignaturesSeen = resolveBootstrapWarningSignaturesSeen( |
@@ -234,7 +260,7 @@ export function createCronPromptExecutor(params: { |
234 | 260 | verboseLevel: params.resolvedVerboseLevel, |
235 | 261 | timeoutMs: params.timeoutMs, |
236 | 262 | runTimeoutOverrideMs: params.runTimeoutOverrideMs, |
237 | | - bootstrapContextMode: params.agentPayload?.lightContext ? "lightweight" : undefined, |
| 263 | + bootstrapContextMode: resolveCronBootstrapContextMode(params.agentPayload), |
238 | 264 | bootstrapContextRunKind: "cron", |
239 | 265 | toolsAllow: params.agentPayload?.toolsAllow, |
240 | 266 | execOverrides: params.suppressExecNotifyOnExit |
|
0 commit comments