Build and deploy AI Agents on Cloudflare
This report presents the forensic synthetic code analysis of cloudflare/agents, a TypeScript project with 5,257 GitHub stars. SynthScan v2.0 examined 549,777 lines of code across 2066 source files, recording 1387 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 6.0 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1387 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | design/rfc-think-multi-session.md | 120 | // ── SQLite schema (managed internally) ────────────────────────── | COMMENT |
| MEDIUM | design/rfc-think-multi-session.md | 176 | // ── Search-provider hooks (for RemoteSearchProvider) ──────────── | COMMENT |
| MEDIUM | design/rfc-think-multi-session.md | 188 | // ── Spawning chats ────────────────────────────────────────────── | COMMENT |
| MEDIUM | design/think-sessions.md | 261 | // ── Session ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | design/think-sessions.md | 274 | // ── Override points ──────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | design/think-sessions.md | 328 | // ── Dynamic configuration ────────────────────────────────── | COMMENT |
| MEDIUM⚡ | design/think-sessions.md | 336 | // ── Sub-agent RPC ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | design/think-sessions.md | 345 | // ── Message access ───────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/client.tsx | 51 | // ─── Helpers ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/client.tsx | 121 | // ─── Action Queue Panel ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/client.tsx | 279 | // ─── Customer Table ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/client.tsx | 334 | // ─── Chat Panel ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/client.tsx | 649 | // ─── App Root ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 20 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 22 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 50 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 55 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 105 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 107 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 120 | // ─── Sub-agent access ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 126 | // ─── Queue table ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 145 | // ─── State sync ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 165 | // ─── Gatekeeper API ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 247 | // ─── Chat ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-gatekeeper/src/server.ts | 344 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/client.tsx | 96 | // ─── Execution Log ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/client.tsx | 153 | // ─── Customer Table ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/client.tsx | 204 | // ─── Main ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 50 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 52 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 75 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 77 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 134 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 146 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 178 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 184 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 218 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 220 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 234 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 236 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 249 | // ─── Database sub-agent ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 274 | // ─── Tables ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 288 | // ─── State sync ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 300 | // ─── Trace delivery (from TailLoopback) ────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 312 | // ─── Code execution via LOADER ─────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 413 | // ─── Chat ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gadgets-sandbox/src/server.ts | 510 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/e2e/recovery.test.ts | 369 | // ── Settled-tool persist gate against a FOREIGN tool vocabulary ───────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 177 | // ── Handshake host state (shared with the streaming/broadcast loop) ───────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 201 | // ── Transcript persistence ────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 340 | // ── Model selection (faux default | real Workers AI) ─────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 379 | // ── Turn execution (fiber-wrapped so a mid-stream crash is recoverable) ───── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 624 | // ── Scheduled recovery callbacks (engine-driven) ──────────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 634 | // ── WebSocket wiring: drive the shared ResumeHandshake ────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 726 | // ── Fiber recovery entry: drive the shared engine ─────────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 793 | // ── Shared engine adapter ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/tanstack-agent.ts | 904 | // ── Inspection surface (server HTTP → e2e assertions) ─────────────────────── | COMMENT |
| MEDIUM | experimental/tanstack-recovery/src/ws-bridge.ts | 143 | // ── internals ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gateway-resume-think/src/layer-b.test.ts | 11 | // ── helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | experimental/gateway-resume-think/src/layer-b.test.ts | 58 | // ── planResume (Layer-B decision) ────────────────────────────────────────── | COMMENT |
| 810 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | design/chat-api.md | 360 | async function defaultGetInitialMessagesFetch({ url }: GetInitialMessagesOptions) { | CODE |
| LOW | agent-think/src/agent.ts | 74 | export function configureAgentThinkSession( | CODE |
| LOW | agent-think/src/tools/fs/edit-diff.ts | 169 | export function applyEditsToNormalizedContent( | CODE |
| LOW | docs/agents/queue.md | 218 | class DataProcessor extends Agent { | CODE |
| LOW | guides/anthropic-patterns/src/app.tsx | 109 | function getOrCreateSessionId() { | CODE |
| LOW | examples/assistant/src/client.tsx | 309 | function shouldShowStreamedTextPart(part: { | CODE |
| LOW | examples/assistant/src/auth.ts | 180 | export function createUnauthorizedResponse(request: Request) { | CODE |
| LOW | examples/dynamic-tools/src/client.tsx | 158 | function shouldShowStreamedTextPart(part: { | CODE |
| LOW | examples/playground/src/hooks/useUserId.ts | 6 | function getOrCreateUserId(): string { | CODE |
| LOW | examples/agents-as-tools/src/client.tsx | 163 | function isTerminalAgentToolStatus( | CODE |
| LOW | examples/auth-agent/src/auth.ts | 180 | export function createUnauthorizedResponse(request: Request) { | CODE |
| LOW | examples/chat-sdk-messenger/src/client.tsx | 639 | async function resetSelectedConversation() { | CODE |
| LOW | …amples/chat-sdk-messenger/src/intelligence/messages.ts | 14 | export function conversationNameForThread(thread: Pick<Thread, "id">): string { | CODE |
| LOW | …amples/chat-sdk-messenger/src/intelligence/messages.ts | 55 | export function extractLatestAssistantText( | CODE |
| LOW | examples/ai-chat/src/client.tsx | 94 | function shouldShowStreamedTextPart(part: { | CODE |
| LOW | examples/deploy-churn/src/server.ts | 386 | function createSingleTaskMockModel(): LanguageModel { | CODE |
| LOW | …pts/vitest/strip-node-modules-source-map-references.ts | 12 | export function stripNodeModulesSourceMapReferences(): Plugin { | CODE |
| LOW | packages/think/src/vite.ts | 274 | export async function createThinkViteWorkerConfig( | CODE |
| LOW | packages/think/src/vite.ts | 281 | export async function createThinkViteWorkerConfigResult( | CODE |
| LOW | packages/think/src/media-eviction.ts | 65 | export function resolveMediaEvictionConfig( | CODE |
| LOW | packages/think/src/media-eviction.ts | 110 | export function evictLargeMediaFromMessage( | CODE |
| LOW | packages/think/src/think.ts | 321 | function shouldMarkSkippedAfterGenerationChange( | CODE |
| LOW | packages/think/src/think.ts | 393 | function actionAuthorizationErrorEnvelope( | CODE |
| LOW | packages/think/src/think.ts | 408 | function actionApprovalInputErrorEnvelope(): { | CODE |
| LOW | packages/think/src/think.ts | 419 | function actionPendingErrorEnvelope(): { | CODE |
| LOW | packages/think/src/think.ts | 431 | function actionKeyConflictEnvelope( | CODE |
| LOW | packages/think/src/think.ts | 480 | function safeStringifyActionOutput(output: unknown): { | CODE |
| LOW | packages/think/src/think.ts | 511 | function prepareActionOutputForModel(output: unknown): unknown { | CODE |
| LOW | packages/think/src/think.ts | 599 | function parseDeclaredTaskSchedule( | CODE |
| LOW | packages/think/src/think.ts | 613 | function tryParseDeclaredTaskSchedule( | CODE |
| LOW | packages/think/src/think.ts | 635 | function parseDeclaredTaskScheduleUnchecked( | CODE |
| LOW | packages/think/src/think.ts | 968 | function ensureValidContinueCheckpoint( | CODE |
| LOW | packages/think/src/think.ts | 1783 | function isThinkFinalAnswerToolName(name: string): boolean { | CODE |
| LOW | packages/think/src/think.ts | 1794 | function thinkFinalAnswerInstruction(toolName: string): string { | CODE |
| LOW | packages/think/src/think.ts | 2149 | export function defaultContextOverflowClassifier( | CODE |
| LOW | packages/think/src/server-entry.ts | 261 | export function rewriteThinkSubAgentRequest( | CODE |
| LOW | packages/think/src/server-entry.ts | 268 | function rewriteThinkSubAgentRequestResult( | CODE |
| LOW | packages/think/src/server-entry.ts | 320 | function rewriteThinkAgentPathname( | CODE |
| LOW | packages/think/src/server-entry.ts | 396 | function resolveThinkTopLevelAgent( | CODE |
| LOW | packages/think/src/server-entry.ts | 435 | function resolveThinkSubAgentRouteAlias( | CODE |
| LOW | packages/think/src/server-entry.ts | 493 | function routePrefixToAgentsPrefix(routePrefix = "/agents"): string { | CODE |
| LOW | packages/think/src/server-entry.ts | 513 | function requestHasSubAgentSegment(request: Request): boolean { | CODE |
| LOW | packages/think/src/tools/execute.ts | 375 | export function truncatePausedExecutionOutput(output: unknown): unknown { | CODE |
| LOW | packages/think/src/tools/fetch.ts | 856 | function normalizeAllowlistPattern(pattern: string): string { | CODE |
| LOW | packages/think/src/framework/project.ts | 135 | export async function createThinkProjectWorkerConfigResult( | CODE |
| LOW | packages/think/src/framework/codegen.ts | 4 | export function generateThinkAgentsModule( | CODE |
| LOW⚡ | packages/think/src/framework/codegen.ts | 41 | export function generateThinkManifestModule( | CODE |
| LOW⚡ | packages/think/src/framework/codegen.ts | 47 | export function generateThinkConfigModule( | CODE |
| LOW⚡ | packages/think/src/framework/codegen.ts | 53 | export function generateThinkRouterModule( | CODE |
| LOW | packages/think/src/framework/codegen.ts | 65 | export function generateThinkServerEntryModule(): string { | CODE |
| LOW | packages/think/src/framework/discovery.ts | 240 | function discoverConventionFeatureSources( | CODE |
| LOW | packages/think/src/framework/discovery.ts | 314 | function discoverDeterministicPlatformRequirements( | CODE |
| LOW | packages/think/src/framework/config.ts | 37 | export function createThinkWorkerDefaults( | CODE |
| LOW | packages/think/src/framework/config.ts | 153 | export function diagnoseThinkWorkerConfig( | CODE |
| LOW | packages/think/src/framework/config.ts | 333 | function mergeDurableObjectBindings( | CODE |
| LOW | packages/think/src/framework/config.ts | 515 | function findUnsupportedNestedSubAgents( | CODE |
| LOW | packages/think/src/tests/message-reconciliation.test.ts | 138 | function makeClientOptimisticAssistant(id: string): UIMessage { | CODE |
| LOW | packages/think/src/tests/streaming-message-id.test.ts | 40 | function runTurnAndCollectStartChunks( | CODE |
| LOW | packages/think/src/tests/client-tools.test.ts | 223 | async function waitForOverlappingSubmits( | CODE |
| LOW⚡ | packages/think/src/tests/think-session.test.ts | 137 | async function freshConfigInSessionAgent(name: string) { | CODE |
| 116 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/agents/workflows.md | 69 | // Step 1: Process data | COMMENT |
| LOW | docs/agents/workflows.md | 82 | // Step 2: Save results | COMMENT |
| LOW | docs/agents/human-in-the-loop.md | 68 | // Step 1: Validate the expense | COMMENT |
| LOW | docs/agents/human-in-the-loop.md | 73 | // Step 2: Wait for manager approval | COMMENT |
| LOW | docs/agents/human-in-the-loop.md | 87 | // Step 3: Process the approved expense | COMMENT |
| LOW | docs/agents/mcp-transports.md | 93 | #### Step 1: Define your MCP server | COMMENT |
| LOW | docs/agents/mcp-transports.md | 129 | #### Step 2: Connect your Agent to the MCP server | COMMENT |
| LOW | docs/agents/mcp-transports.md | 160 | #### Step 3: Configure Durable Object bindings | COMMENT |
| LOW | docs/agents/mcp-transports.md | 181 | #### Step 4: Set up your Worker fetch handler | COMMENT |
| LOW | examples/workflows/src/server.ts | 438 | // Step 1: Validate | COMMENT |
| LOW | examples/workflows/src/server.ts | 460 | // Step 2: Process | COMMENT |
| LOW | examples/workflows/src/server.ts | 486 | // Step 3: Wait for human approval | COMMENT |
| LOW | examples/workflows/src/server.ts | 511 | // Step 4: Finalize | COMMENT |
| LOW⚡ | packages/agents/README.md | 361 | // Step 1: Validate (retries automatically on failure) | COMMENT |
| LOW⚡ | packages/agents/README.md | 366 | // Step 2: Wait for human approval | COMMENT |
| LOW⚡ | packages/agents/README.md | 370 | // Step 3: Process the approved order | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 36 | // Step 1: Report start (non-durable) | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 44 | // Step 2: If waiting for approval, pause and wait for event | COMMENT |
| LOW | packages/agents/src/tests/test-workflow.ts | 66 | // Step 3: Process the task (non-durable progress report) | COMMENT |
| LOW | packages/agents/src/tests/test-workflow.ts | 85 | // Step 4: Call agent method via RPC (if agent is available) | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 96 | // Step 5: Broadcast to clients (non-durable) | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 103 | // Step 6: Report completion (durable via step) | COMMENT |
| LOW | packages/agents/src/tests/agents/migration.ts | 79 | // Step 1: Add missing columns (same as constructor) | COMMENT |
| LOW | packages/agents/src/tests/agents/migration.ts | 104 | // Step 2: Recreate table if CHECK constraint is missing 'interval' | COMMENT |
| LOW | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 186 | // Step 1: Open observer WebSocket and wait for it to be established | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 221 | // Step 2: Wait for WebSocket to be fully registered with the DO | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 224 | // Step 3: Trigger server-initiated stream via Playwright's request API | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 233 | // Step 4: Wait a bit for stream completion to propagate | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 236 | // Step 5: Collect observer results from the browser | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 21 | // Step 1: Persist a message with tool output on the server | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 38 | // Step 2: Client sends the same message but without the tool output | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 62 | // Step 3: Verify the tool output is preserved | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 85 | // Step 1: Server has a tool that was approved and executed (output-available) | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 102 | // Step 2: Client sends the same tool but in approval-responded state | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 126 | // Step 3: Verify the server's output-available state is preserved, | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 152 | // Step 1: Server has a tool that was executed (output-available) | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 169 | // Step 2: Client sends the same tool but in approval-requested state | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 192 | // Step 3: Verify the server's output-available state is preserved, | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 523 | // Step 1: Simulate an initial interrupted stream | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 543 | // Step 2: Continue, producing more content | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 556 | // Step 3: Simulate that continuation was ALSO interrupted — | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 568 | // Step 4: Trigger fiber recovery — should persist the second partial | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 580 | // Step 5: Continue again | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 85 | // Step 1: Send initial request so context is established | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 88 | // Step 2: Persist a tool call in input-available state | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 106 | // Step 3: Clear captured state before continuation | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 109 | // Step 4: Send tool result with autoContinue | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 145 | // Step 1: Send initial request | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 148 | // Step 2: Persist a tool call in approval-required state | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 166 | // Step 3: Clear captured state | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 169 | // Step 4: Send approval with autoContinue | COMMENT |
| LOW | packages/ai-chat/src/tests/request-id.test.ts | 123 | // Step 5: Verify a requestId was passed (server-generated, so just check it exists) | COMMENT |
| LOW | packages/ai-chat/src/tests/request-id.test.ts | 182 | // Step 5: Verify requestId was passed | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 12 | // Step 1: Set up a conversation with a pending tool call (simulates state before refresh) | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 38 | // Step 2: Connect (simulates reconnect after refresh) | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 49 | // Step 3: Send tool result WITH clientTools (simulates client approval after reconnect) | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 83 | // Step 4: Verify continuation received client tools | COMMENT |
| LOW | packages/ai-chat/src/tests/on-stream-end.test.ts | 320 | // Step 1: Send initial chat request to establish the agent | COMMENT |
| LOW | packages/ai-chat/src/tests/on-stream-end.test.ts | 334 | // Step 2: Persist a tool call in input-available state | COMMENT |
| LOW | packages/ai-chat/src/tests/on-stream-end.test.ts | 354 | // Step 3: Send tool result with autoContinue=true | COMMENT |
| 16 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | experimental/tanstack-recovery/src/tanstack-agent.ts | 121 | // durably so a cold-wake recovery (post-SIGKILL) re-runs the SAME provider it | COMMENT |
| LOW | experimental/gateway-resume/src/index.ts | 61 | // | COMMENT |
| LOW | experimental/gateway-resume/src/index.ts | 301 | COMMENT | |
| LOW | experimental/chat-recovery-probe/src/server.ts | 61 | // | COMMENT |
| LOW | experimental/forever-chat/src/server.ts | 121 | // Tracks stash data for the current buffered turn so both the custom | COMMENT |
| LOW | agent-think/worker-configuration.d.ts | 14421 | send(records: T[]): Promise<void>; | COMMENT |
| LOW | agent-think/worker-configuration.d.ts | 14581 | // prettier-ignore | COMMENT |
| LOW | agent-think/worker-configuration.d.ts | 14621 | // declaration will be merged with this one. | COMMENT |
| LOW | agent-think/worker-configuration.d.ts | 15861 | // Context in which this trace event lives. | COMMENT |
| LOW | agent-think/test/env.d.ts | 1 | /// <reference types="@cloudflare/vitest-pool-workers/types" /> | COMMENT |
| LOW | agent-think/test/vitest.config.ts | 21 | stripNodeModulesSourceMapReferences(), | COMMENT |
| LOW | agent-think/test/server.ts | 1 | import { setupServer } from "msw/node"; | COMMENT |
| LOW | agent-think/src/sandbox.ts | 61 | constructor(ctx: DurableObjectState, env: SandboxEnv) { | COMMENT |
| LOW | agent-think/src/sandbox.ts | 81 | // CloudflareContainerBackend(container) [stage=connect]: | COMMENT |
| LOW | …amples/assistant/agents/assistant/shared-mcp-client.ts | 1 | import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js"; | COMMENT |
| LOW | examples/assistant/agents/assistant/agent.ts | 1 | import { callable } from "agents"; | COMMENT |
| LOW | examples/assistant/agents/assistant/agent.ts | 281 | } | COMMENT |
| LOW | examples/assistant/agents/assistant/agent.ts | 381 | async symlink(target: string, linkPath: string): Promise<void> { | COMMENT |
| LOW | examples/assistant/agents/assistant/shared-workspace.ts | 1 | import type { Workspace } from "@cloudflare/think"; | COMMENT |
| LOW | examples/assistant/src/use-chats.ts | 101 | agent: "AssistantDirectory", | COMMENT |
| LOW | examples/assistant/src/client.tsx | 481 | } | null>(null); | COMMENT |
| LOW | examples/assistant/src/tests/env.d.ts | 1 | /// <reference types="@cloudflare/vitest-pool-workers/types" /> | COMMENT |
| LOW | examples/agents-as-tools/playwright.config.ts | 41 | // Real-LLM timing — see the comment block above. The example | COMMENT |
| LOW | examples/agents-as-tools/playwright.config.ts | 61 | // suite. With 1 retry we can ride out transient capacity issues | COMMENT |
| LOW | examples/agents-as-tools/e2e/refresh-replay.e2e.ts | 61 | // `cf_agent_tool_runs` is the source of truth and never | COMMENT |
| LOW | examples/agents-as-tools/e2e/planner-drill-in.e2e.ts | 61 | // Sanity: a Planner panel rendered. The bug would have NOT | COMMENT |
| LOW | examples/agents-as-tools/e2e/compare-fanout.e2e.ts | 41 | // "Compare X and Y" is in-distribution for the `compare` tool — | COMMENT |
| LOW | examples/agents-as-tools/src/client.tsx | 801 | // | COMMENT |
| LOW | examples/agents-as-tools/src/client.tsx | 841 | // shipped on 2026-04-28 from a different root cause. | COMMENT |
| LOW | examples/deploy-churn/src/server.ts | 281 | // | COMMENT |
| LOW | examples/voice-agent/src/client.tsx | 421 | // by observing the VoiceClient's raw message events. Since useVoiceAgent abstracts | COMMENT |
| LOW | examples/voice-agent/src/client.tsx | 501 | // special prefix that the server won't try to process as text_message. | COMMENT |
| LOW | examples/voice-agent/src/client.tsx | 521 | // Cleanest workaround: send a text_message with a special content | COMMENT |
| LOW | packages/think/src/think.ts | 901 | * generic). `retryTargetUserId` is the pre-stream user message the turn re-runs | COMMENT |
| LOW | packages/think/src/think.ts | 921 | // / `evaluateChatRecoveryIncident`. See design/rfc-chat-recovery-foundation.md. | COMMENT |
| LOW | packages/think/src/think.ts | 941 | // simply never auto-continues — the isolate is not pinned waiting for it. | COMMENT |
| LOW | packages/think/src/think.ts | 3421 | private _insideResponseHook = false; | COMMENT |
| LOW | packages/think/src/think.ts | 5301 | // `maxTurns` is an overridable per-channel default: a user `beforeTurn` | COMMENT |
| LOW | packages/think/src/think.ts | 5381 | // can inspect/rewrite the stream (e.g. emit `source` parts derived from | COMMENT |
| LOW | packages/think/src/think.ts | 5401 | // `beforeStep` returning `void`/`undefined`/`null` is normalized to | COMMENT |
| LOW | packages/think/src/think.ts | 10561 | // authoritative source of state: `_notifyStreamResuming` tells | COMMENT |
| LOW | packages/think/src/think.ts | 10781 | COMMENT | |
| LOW | packages/think/src/think.ts | 11521 | await callback.onEvent(chunkBody); | COMMENT |
| LOW | packages/think/src/think.ts | 12881 | // currently is and survives the eventual `accumulator.toMessage()` persist | COMMENT |
| LOW | packages/think/src/think.ts | 13201 | resolveConfig: () => this._resolveChatRecoveryConfig(), | COMMENT |
| LOW | packages/think/src/think.ts | 13341 | // broadcast the user would be left staring at a half-finished message | COMMENT |
| LOW | packages/think/src/tools/workspace.ts | 1 | import type { Workspace, FileInfo } from "@cloudflare/shell"; | COMMENT |
| LOW | packages/think/src/tests/client-tools.test.ts | 1781 | // (autoContinue:false) result re-arms the EXISTING pending the fast sibling | COMMENT |
| LOW | packages/think/src/tests/think-session.test.ts | 3881 | expect( | COMMENT |
| LOW | packages/think/src/e2e-tests/harden-net.ts | 1 | // Side-effect module for the `wrangler dev` chaos e2e tests. Import it (for its | COMMENT |
| LOW | packages/think/src/e2e-tests/workflow-recovery.test.ts | 301 | await pollUntil( | COMMENT |
| LOW | packages/think/src/e2e-tests/worker.ts | 941 | // flat wall-clock timer that is NOT reset by child forward-progress, and the | COMMENT |
| LOW | packages/think/src/e2e-tests/worker.ts | 1661 | } | COMMENT |
| LOW | packages/think/src/e2e-tests/worker.ts | 1781 | const rows = this.sql<{ c: number }>` | COMMENT |
| LOW | packages/think/src/e2e-tests/worker.ts | 1961 | const rows = this.sql<{ c: number }>` | COMMENT |
| LOW | packages/think/src/e2e-tests/worker.ts | 2101 | // resume with NO live client connection. This agent drives the full path | COMMENT |
| LOW | packages/think/src/react-tests/stream-resume.test.tsx | 1 | // Deterministic client-path coverage for Think's reconnect/resume handshake. | COMMENT |
| LOW | packages/shell/src/tests/workspace.test.ts | 561 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| LOW | packages/shell/src/tests/git.test.ts | 541 | expect(removed!.status).toContain("deleted"); | COMMENT |
| LOW | packages/agents/skills-module.d.ts | 1 | // Ambient types for the Agents Vite plugin's `agents:skills` virtual modules. | COMMENT |
| 68 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/workflows/src/server.ts | 438 | // Step 1: Validate | COMMENT |
| LOW | examples/workflows/src/server.ts | 460 | // Step 2: Process | COMMENT |
| LOW | examples/workflows/src/server.ts | 486 | // Step 3: Wait for human approval | COMMENT |
| LOW | examples/workflows/src/server.ts | 511 | // Step 4: Finalize | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 36 | // Step 1: Report start (non-durable) | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 44 | // Step 2: If waiting for approval, pause and wait for event | COMMENT |
| LOW | packages/agents/src/tests/test-workflow.ts | 66 | // Step 3: Process the task (non-durable progress report) | COMMENT |
| LOW | packages/agents/src/tests/test-workflow.ts | 85 | // Step 4: Call agent method via RPC (if agent is available) | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 96 | // Step 5: Broadcast to clients (non-durable) | COMMENT |
| LOW⚡ | packages/agents/src/tests/test-workflow.ts | 103 | // Step 6: Report completion (durable via step) | COMMENT |
| LOW | packages/agents/src/tests/agents/migration.ts | 79 | // Step 1: Add missing columns (same as constructor) | COMMENT |
| LOW | packages/agents/src/tests/agents/migration.ts | 104 | // Step 2: Recreate table if CHECK constraint is missing 'interval' | COMMENT |
| LOW | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 186 | // Step 1: Open observer WebSocket and wait for it to be established | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 221 | // Step 2: Wait for WebSocket to be fully registered with the DO | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 224 | // Step 3: Trigger server-initiated stream via Playwright's request API | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 233 | // Step 4: Wait a bit for stream completion to propagate | COMMENT |
| LOW⚡ | packages/ai-chat/e2e/on-stream-end-llm.spec.ts | 236 | // Step 5: Collect observer results from the browser | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 21 | // Step 1: Persist a message with tool output on the server | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 38 | // Step 2: Client sends the same message but without the tool output | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 62 | // Step 3: Verify the tool output is preserved | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 85 | // Step 1: Server has a tool that was approved and executed (output-available) | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 102 | // Step 2: Client sends the same tool but in approval-responded state | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 126 | // Step 3: Verify the server's output-available state is preserved, | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 152 | // Step 1: Server has a tool that was executed (output-available) | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 169 | // Step 2: Client sends the same tool but in approval-requested state | COMMENT |
| LOW | packages/ai-chat/src/tests/merge-server-state.test.ts | 192 | // Step 3: Verify the server's output-available state is preserved, | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 523 | // Step 1: Simulate an initial interrupted stream | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 543 | // Step 2: Continue, producing more content | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 556 | // Step 3: Simulate that continuation was ALSO interrupted — | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 568 | // Step 4: Trigger fiber recovery — should persist the second partial | COMMENT |
| LOW | packages/ai-chat/src/tests/continue-last-turn.test.ts | 580 | // Step 5: Continue again | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 85 | // Step 1: Send initial request so context is established | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 88 | // Step 2: Persist a tool call in input-available state | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 106 | // Step 3: Clear captured state before continuation | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 109 | // Step 4: Send tool result with autoContinue | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 145 | // Step 1: Send initial request | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 148 | // Step 2: Persist a tool call in approval-required state | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 166 | // Step 3: Clear captured state | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/request-id.test.ts | 169 | // Step 4: Send approval with autoContinue | COMMENT |
| LOW | packages/ai-chat/src/tests/request-id.test.ts | 123 | // Step 5: Verify a requestId was passed (server-generated, so just check it exists) | COMMENT |
| LOW | packages/ai-chat/src/tests/request-id.test.ts | 182 | // Step 5: Verify requestId was passed | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 12 | // Step 1: Set up a conversation with a pending tool call (simulates state before refresh) | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 38 | // Step 2: Connect (simulates reconnect after refresh) | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 49 | // Step 3: Send tool result WITH clientTools (simulates client approval after reconnect) | COMMENT |
| LOW | …kages/ai-chat/src/tests/client-tools-reconnect.test.ts | 83 | // Step 4: Verify continuation received client tools | COMMENT |
| LOW | packages/ai-chat/src/tests/on-stream-end.test.ts | 320 | // Step 1: Send initial chat request to establish the agent | COMMENT |
| LOW | packages/ai-chat/src/tests/on-stream-end.test.ts | 334 | // Step 2: Persist a tool call in input-available state | COMMENT |
| LOW | packages/ai-chat/src/tests/on-stream-end.test.ts | 354 | // Step 3: Send tool result with autoContinue=true | COMMENT |
| LOW | packages/ai-chat/src/tests/on-stream-end.test.ts | 368 | // Step 4: Verify onChatResponse results | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/regenerate-message.test.ts | 70 | // Step 1: Send the first message — server will respond with an assistant message | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/regenerate-message.test.ts | 80 | // Step 2: Simulate regenerate() — client removes the assistant message | COMMENT |
| LOW⚡ | packages/ai-chat/src/tests/regenerate-message.test.ts | 85 | // Step 3: Verify the old assistant message was deleted and replaced | COMMENT |
| LOW | …ges/ai-chat/src/tests/custom-body-continuation.test.ts | 16 | // Step 1: Send initial chat request WITH custom body fields to store them | COMMENT |
| LOW | …ges/ai-chat/src/tests/custom-body-continuation.test.ts | 67 | // Step 2: Persist a tool call in input-available state | COMMENT |
| LOW⚡ | …ges/ai-chat/src/tests/custom-body-continuation.test.ts | 85 | // Step 3: Clear captured state before continuation | COMMENT |
| LOW⚡ | …ges/ai-chat/src/tests/custom-body-continuation.test.ts | 88 | // Step 4: Send tool result with autoContinue to trigger continuation | COMMENT |
| LOW | …ges/ai-chat/src/tests/custom-body-continuation.test.ts | 104 | // Step 5: Verify continuation received the same body | COMMENT |
| LOW | …es/ai-chat/src/tests/client-tools-continuation.test.ts | 43 | // Step 1: Send initial chat request WITH client tools to store them | COMMENT |
| LOW | …es/ai-chat/src/tests/client-tools-continuation.test.ts | 105 | // Step 2: Persist a tool call in input-available state | COMMENT |
| LOW⚡ | …es/ai-chat/src/tests/client-tools-continuation.test.ts | 123 | // Step 3: Clear captured state before continuation | COMMENT |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | design/rfc-helper-sub-agent-orchestration.md | 1 | # RFC: Agent tool orchestration | COMMENT |
| MEDIUM | design/rfc-chat-recovery-foundation.md | 1043 | | Auto-continuation barrier | Barrier inside the continuation turn; fixed 60s timeout t | CODE |
| MEDIUM | design/rfc-chat-recovery-foundation.md | 1155 | #### Adopt Think's event-driven auto-continuation barrier | COMMENT |
| MEDIUM | design/rfc-chat-recovery-foundation-progress.md | 1647 | ### Phase 1: introduce internal engine scaffolding | COMMENT |
| MEDIUM | design/think-vs-aichat.md | 270 | ### Multi-agent orchestration | COMMENT |
| MEDIUM | experimental/inference-buffer/README.md | 214 | The SDK handles: model wrapping (custom fetch for all providers — including Workers AI via the `fetch` option added in [ | CODE |
| MEDIUM | docs/think/index.md | 1033 | [Compaction](https://github.com/cloudflare/agents/blob/main/docs/agents/sessions.md#compaction) is checked **between tur | CODE |
| MEDIUM | docs/think/sub-agents.md | 312 | See [`cloudflare/agents#1406`](https://github.com/cloudflare/agents/issues/1406) for the original motivation, and [Agent | CODE |
| MEDIUM | docs/agents/index.md | 18 | | A durable, general-purpose reasoning agent | [`Think`](https://github.com/cloudflare/agents/blob/m | CODE |
| MEDIUM | docs/agents/chat-agents.md | 1481 | Use [`wrapLanguageModel`](https://ai-sdk.dev/docs/ai-sdk-core/middleware) to add guardrails, RAG, caching, or logging wi | CODE |
| MEDIUM | examples/assistant/agents/assistant/agent.ts | 32 | // (see `getScheduledTasks`) and leaves room for top-level agentic work | COMMENT |
| MEDIUM | examples/playground/testing.md | 294 | ### Supervisor Pattern (`/multi-agent/supervisor`) | COMMENT |
| MEDIUM | examples/playground/testing.md | 351 | ### Chat Rooms (`/multi-agent/rooms`) | COMMENT |
| MEDIUM | examples/playground/testing.md | 410 | ### Workers Pattern (`/multi-agent/workers`) | COMMENT |
| MEDIUM | examples/playground/testing.md | 425 | ### Pipeline Pattern (`/multi-agent/pipeline`) | COMMENT |
| MEDIUM | examples/chat-sdk-messenger/README.md | 150 | index.ts # Ingress orchestration and Chat SDK event wiring | CODE |
| MEDIUM | examples/deploy-churn/src/server.ts | 591 | // agentic loop actually settles tool results that recovery must preserve. | COMMENT |
| MEDIUM | examples/multi-ai-chat/src/server.ts | 330 | // Allow multi-step agentic loops — the model can call a tool, | COMMENT |
| MEDIUM | packages/think/CHANGELOG.md | 218 | - [#1817](https://github.com/cloudflare/agents/pull/1817) [`7f367d8`](https://github.com/cloudflare/agents/commit/7f367d | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 218 | - [#1817](https://github.com/cloudflare/agents/pull/1817) [`7f367d8`](https://github.com/cloudflare/agents/commit/7f367d | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 703 | - [#1667](https://github.com/cloudflare/agents/pull/1667) [`919bfaa`](https://github.com/cloudflare/agents/commit/919bfa | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 1012 | - [#1641](https://github.com/cloudflare/agents/pull/1641) [`3aa1936`](https://github.com/cloudflare/agents/commit/3aa193 | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 1144 | - [#1561](https://github.com/cloudflare/agents/pull/1561) [`831ba1d`](https://github.com/cloudflare/agents/commit/831ba1 | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 1144 | - [#1561](https://github.com/cloudflare/agents/pull/1561) [`831ba1d`](https://github.com/cloudflare/agents/commit/831ba1 | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 1183 | - [#1517](https://github.com/cloudflare/agents/pull/1517) [`449b421`](https://github.com/cloudflare/agents/commit/449b42 | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 1227 | - [#1421](https://github.com/cloudflare/agents/pull/1421) [`1b65ff5`](https://github.com/cloudflare/agents/commit/1b65ff | CODE |
| MEDIUM | packages/think/CHANGELOG.md | 1299 | - [#1372](https://github.com/cloudflare/agents/pull/1372) [`040da0f`](https://github.com/cloudflare/agents/commit/040da0 | CODE |
| MEDIUM | packages/think/src/tests/hooks.test.ts | 199 | // agentic loop, and `ctx.steps` / `ctx.stepNumber` must reflect the | COMMENT |
| MEDIUM | …ges/think/src/e2e-tests/step-prompt-structured.test.ts | 273 | // Multi-step agentic path: the model must call real (workspace) tools before | COMMENT |
| MEDIUM | packages/think/src/cli-tests/cli.test.ts | 642 | // Template scaffold (not augment): a full starter app in the subfolder. | COMMENT |
| MEDIUM | packages/agents/CHANGELOG.md | 1119 | - [#1641](https://github.com/cloudflare/agents/pull/1641) [`3aa1936`](https://github.com/cloudflare/agents/commit/3aa193 | CODE |
| MEDIUM | packages/agents/CHANGELOG.md | 1295 | - [#1421](https://github.com/cloudflare/agents/pull/1421) [`1b65ff5`](https://github.com/cloudflare/agents/commit/1b65ff | CODE |
| MEDIUM | packages/ai-chat/CHANGELOG.md | 165 | - [#1788](https://github.com/cloudflare/agents/pull/1788) [`3b2af54`](https://github.com/cloudflare/agents/commit/3b2af5 | CODE |
| MEDIUM | packages/ai-chat/CHANGELOG.md | 658 | - [#1641](https://github.com/cloudflare/agents/pull/1641) [`3aa1936`](https://github.com/cloudflare/agents/commit/3aa193 | CODE |
| MEDIUM | packages/ai-chat/CHANGELOG.md | 779 | - [#1421](https://github.com/cloudflare/agents/pull/1421) [`1b65ff5`](https://github.com/cloudflare/agents/commit/1b65ff | CODE |
| MEDIUM | packages/create-think/CHANGELOG.md | 7 | - [#1817](https://github.com/cloudflare/agents/pull/1817) [`7f367d8`](https://github.com/cloudflare/agents/commit/7f367d | CODE |
| MEDIUM | packages/create-think/CHANGELOG.md | 7 | - [#1817](https://github.com/cloudflare/agents/pull/1817) [`7f367d8`](https://github.com/cloudflare/agents/commit/7f367d | CODE |
| MEDIUM | wip/think-multi-session-assistant-plan.md | 136 | ### Think config scaffolding — landed in PR #1372 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/agents/email.md | 349 | await email.forward("admin@example.com"); | CODE |
| LOW | docs/agents/scheduling.md | 68 | await this.schedule(300, "sendFollowUp", { email: "user@example.com" }); | CODE |
| LOW | docs/agents/retries.md | 176 | { to: "user@example.com" }, | CODE |
| LOW | docs/agents/queue.md | 55 | email: "user@example.com", | CODE |
| LOW | packages/think/src/tests/action-types.test-d.ts | 144 | to: ["user@example.com"] | CODE |
| LOW | packages/think/src/cli-tests/cli.test.ts | 340 | name: "placeholder", | CODE |
| LOW | packages/shell/src/tests/git.test.ts | 266 | author: { name: "Test", email: "test@test.com" } | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 552 | from: "user@example.com" | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 639 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 655 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 666 | expect(call!.to).toBe("user@example.com"); | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 684 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 705 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 729 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 752 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 761 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 774 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-routing.test.ts | 783 | to: "user@example.com", | CODE |
| LOW | packages/agents/src/tests/email-headers.test.ts | 80 | From: "user@example.com", | CODE |
| LOW | packages/agents/conformance/everything-server.ts | 372 | default: "John Doe" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pnpm-workspace.yaml | 31 | # Transitive dep of @cloudflare/tanstack-ai (tanstack-recovery harness). The | COMMENT |
| MEDIUM | experimental/gateway-resume-think/src/server.ts | 120 | // mismatch (RFC §9.4) it can drop the prefix. from=0 is the robust, | COMMENT |
| MEDIUM | experimental/gateway-resume/src/index.ts | 13 | * (RFC #1257). This harness verifies the contract empirically, across models, | COMMENT |
| MEDIUM | packages/agents/src/index.ts | 2889 | // but we handle the data-property case to stay robust for hibernate: false | COMMENT |
| MEDIUM | packages/agents/src/tests/retries.test.ts | 395 | // wrappers may not — the cause chain is the robust signal. | COMMENT |
| MEDIUM | packages/agents/conformance/baseline-server-handler.yml | 12 | # SHOULD-level warnings only for pre-2025-11-25 clients: the harness | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/agents/src/tests/skill-runner.test.ts | 640 | print(template.replace("{{text}}", data["text"].upper()))`, | CODE |
| HIGH | packages/agents/src/tests/skill-runner.test.ts | 678 | print("done")` | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | design/rfc-workers-ai-gateway-merge.md | 465 | model: string; // slug as requested, e.g. "openrouter/anthropic/claude-…" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guides/anthropic-patterns/src/app.tsx | 168 | // TODO: Add validation | COMMENT |
| LOW | guides/anthropic-patterns/src/app.tsx | 252 | "e.g.,\nfunction processUserData(data) {\n // TODO: Add validation\n database.save(data);\n return true | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | site/agents/src/components/header-visual.tsx | 167 | text: "If you’re using a CLI-based PR system, let me know which tool you use (e.g., GitLab CLI, Gite | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/agents/conformance/run.sh | 10 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/think-react-router/app/entry.server.tsx | 4 | export default async function handleRequest( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/agents/src/skills/runner.ts | 779 | except Exception as err: | CODE |