AG2 (formerly AutoGen): The Open-Source AgentOS.Join us at: https://discord.gg/sNGSwQME3x
This report summarizes scanner evidence for ag2ai/ag2, a Python project with 4,988 GitHub stars. SynthScan examined 223,503 lines of code across 1256 source files, recording 6852 pattern matches distributed across 24 syntactic categories. The legacy adjusted pattern signal is 35.0 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 5159 finding(s).
Are imports declared and package/API names verified? 1256 finding(s).
Are wrappers, guards, and repeated structures necessary? 5369 finding(s).
Which changes need focused human review? 6852 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 6852 distinct pattern matches across 24 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test/test_optional_imports.py | 21 | def test_version_constraint_is_rejected_rather_than_ignored(constraint: str) -> None: | CODE |
| LOW⚡ | test/test_optional_imports.py | 28 | def test_names_that_can_never_be_imported_are_rejected(name: str) -> None: | CODE |
| LOW⚡ | test/test_optional_imports.py | 33 | def test_missing_submodule_of_a_present_parent_still_raises() -> None: | CODE |
| LOW | test/test_watch_advanced.py | 17 | async def test_collects_events_in_window(self) -> None: | CODE |
| LOW | test/test_watch_advanced.py | 53 | async def test_ignores_non_matching(self) -> None: | CODE |
| LOW | test/test_watch_advanced.py | 69 | async def test_disarm_cancels_timer(self) -> None: | CODE |
| LOW | test/test_watch_advanced.py | 86 | async def test_disarm_resets_armed_flag(self) -> None: | CODE |
| LOW | test/test_watch_advanced.py | 101 | async def test_cron_watch_arm_and_disarm() -> None: | CODE |
| LOW | test/test_task.py | 82 | async def test_clean_exit_auto_completes(self) -> None: | CODE |
| LOW | test/test_task.py | 96 | async def test_explicit_complete_records_result(self) -> None: | CODE |
| LOW | test/test_task.py | 112 | async def test_complete_is_idempotent(self) -> None: | CODE |
| LOW | test/test_task.py | 124 | async def test_exception_emits_task_failed_and_propagates(self) -> None: | CODE |
| LOW | test/test_task.py | 148 | async def test_explicit_fail_with_string(self) -> None: | CODE |
| LOW | test/test_task.py | 165 | async def test_progress_accumulates_into_metadata(self) -> None: | CODE |
| LOW | test/test_task.py | 183 | async def test_progress_after_terminal_is_noop(self) -> None: | CODE |
| LOW | test/test_task.py | 199 | async def test_expire_emits_task_expired(self) -> None: | CODE |
| LOW | test/test_task.py | 216 | async def test_events_fire_on_supplied_stream(self) -> None: | CODE |
| LOW | test/test_task.py | 232 | async def test_task_inject_stamped_during_block(self) -> None: | CODE |
| LOW | test/test_task.py | 244 | async def test_nested_tasks_restore_previous(self) -> None: | CODE |
| LOW⚡ | test/test_task.py | 260 | async def test_ttl_seconds_populates_expires_at(self) -> None: | CODE |
| LOW⚡ | test/test_task.py | 269 | async def test_no_ttl_leaves_expires_at_none(self) -> None: | CODE |
| LOW⚡ | test/test_task.py | 276 | def test_state_returns_created(self) -> None: | CODE |
| LOW⚡ | test/test_task.py | 281 | def test_task_id_raises_before_entry(self) -> None: | CODE |
| LOW⚡ | test/test_task.py | 287 | def test_metadata_raises_before_entry(self) -> None: | CODE |
| LOW | test/test_task.py | 306 | async def test_owner_id_is_agent_name(self) -> None: | CODE |
| LOW | test/test_task.py | 313 | async def test_payload_passed_through(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 104 | async def test_single_warning_injected(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 122 | async def test_multiple_severities_formatted(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 143 | async def test_fatal_emits_halt_event(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 170 | async def test_mixed_fatal_and_nonfatal(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 216 | async def test_new_alerts_delivered_after_dedup(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 235 | async def test_dedup_survives_history_replacement(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 255 | async def test_multiple_fatals_uses_first_for_halt(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 286 | async def test_no_halt_passes_through(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 298 | async def test_halt_short_circuits_second_llm_call(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 342 | async def test_halt_event_on_stream(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 378 | async def test_nonfatal_does_not_halt(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 411 | async def test_concurrent_fatal_from_two_observers(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 446 | def test_alert_before_reduction_no_warning(self) -> None: | CODE |
| LOW | test/test_alert_halt.py | 455 | def test_reduction_before_alert_warns(self) -> None: | CODE |
| LOW⚡ | test/test_compact.py | 105 | async def test_clean_cycle_boundary_kept(self) -> None: | CODE |
| LOW⚡ | test/test_compact.py | 111 | async def test_split_second_of_chained_cycles(self) -> None: | CODE |
| LOW⚡ | test/test_compact.py | 119 | async def test_split_cycle_persisted_whole(self) -> None: | CODE |
| LOW | test/test_compact.py | 47 | async def test_truncates_above_target(self) -> None: | CODE |
| LOW | test/test_compact.py | 56 | async def test_persists_dropped_to_store(self) -> None: | CODE |
| LOW | test/test_compact.py | 71 | async def test_no_persist_without_store(self) -> None: | CODE |
| LOW | test/test_compact.py | 92 | async def test_split_cycle_compacts_whole(self) -> None: | CODE |
| LOW | test/test_compact.py | 140 | async def test_intact_builtin_cycle_does_not_block_compaction(self) -> None: | CODE |
| LOW | test/test_compact.py | 156 | async def test_split_builtin_group_compacts_whole(self) -> None: | CODE |
| LOW | test/test_compact.py | 175 | async def test_usage_events_do_not_consume_window(self) -> None: | CODE |
| LOW | test/test_compact.py | 187 | async def test_telemetry_alone_is_no_op(self) -> None: | CODE |
| LOW | test/test_compact.py | 193 | async def test_summarizer_prompt_excludes_telemetry(self) -> None: | CODE |
| LOW | test/test_compact.py | 207 | async def test_usage_events_do_not_advance_trigger(self) -> None: | CODE |
| LOW | test/test_compact.py | 278 | async def test_spend_from_before_the_retained_window_survives(self) -> None: | CODE |
| LOW | test/test_compact.py | 289 | async def test_the_summarization_call_s_own_spend_survives_and_trails(self) -> None: | CODE |
| LOW | test/test_compact.py | 304 | async def test_carried_records_do_not_advance_the_compaction_trigger(self) -> None: | CODE |
| LOW | test/test_compact.py | 321 | async def test_a_second_compaction_carries_the_first_s_records_once(self) -> None: | CODE |
| LOW | test/test_compact.py | 367 | def test_custom_chars_per_token(self) -> None: | CODE |
| LOW | test/test_compact.py | 377 | async def test_fires_when_threshold_crossed(self) -> None: | CODE |
| LOW | test/test_compact.py | 409 | async def test_does_not_fire_below_threshold(self) -> None: | CODE |
| 4781 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test_optional_imports.py | 13 | CODE | |
| LOW | test/middleware/builtins/test_approval_subtasks.py | 5 | CODE | |
| LOW | test/middleware/builtins/test_approval_subtasks.py | 14 | CODE | |
| LOW | test/tools/test_local_shell.py | 8 | CODE | |
| LOW | test/agent/test_hitl.py | 10 | CODE | |
| LOW | test/agent/test_hitl.py | 10 | CODE | |
| LOW | ag2/hitl.py | 13 | CODE | |
| LOW | ag2/textual.py | 11 | CODE | |
| LOW | ag2/__init__.py | 5 | CODE | |
| LOW | ag2/__init__.py | 7 | CODE | |
| LOW | ag2/__init__.py | 7 | CODE | |
| LOW | ag2/__init__.py | 7 | CODE | |
| LOW | ag2/__init__.py | 7 | CODE | |
| LOW | ag2/__init__.py | 8 | CODE | |
| LOW | ag2/__init__.py | 8 | CODE | |
| LOW | ag2/__init__.py | 8 | CODE | |
| LOW | ag2/__init__.py | 9 | CODE | |
| LOW | ag2/__init__.py | 9 | CODE | |
| LOW | ag2/__init__.py | 9 | CODE | |
| LOW | ag2/__init__.py | 9 | CODE | |
| LOW | ag2/__init__.py | 9 | CODE | |
| LOW | ag2/__init__.py | 9 | CODE | |
| LOW | ag2/__init__.py | 9 | CODE | |
| LOW | ag2/__init__.py | 18 | CODE | |
| LOW | ag2/__init__.py | 19 | CODE | |
| LOW | ag2/__init__.py | 20 | CODE | |
| LOW | ag2/__init__.py | 21 | CODE | |
| LOW | ag2/__init__.py | 22 | CODE | |
| LOW | ag2/__init__.py | 23 | CODE | |
| LOW | ag2/__init__.py | 23 | CODE | |
| LOW | ag2/__init__.py | 23 | CODE | |
| LOW | ag2/__init__.py | 24 | CODE | |
| LOW | ag2/__init__.py | 25 | CODE | |
| LOW | ag2/__init__.py | 26 | CODE | |
| LOW | ag2/__init__.py | 26 | CODE | |
| LOW | ag2/__init__.py | 26 | CODE | |
| LOW | ag2/__init__.py | 27 | CODE | |
| LOW | ag2/__init__.py | 27 | CODE | |
| LOW | ag2/__init__.py | 27 | CODE | |
| LOW | ag2/__init__.py | 28 | CODE | |
| LOW | ag2/mypy.py | 21 | CODE | |
| LOW | ag2/stream.py | 14 | CODE | |
| LOW | ag2/stream.py | 17 | CODE | |
| LOW | ag2/context.py | 14 | CODE | |
| LOW | ag2/context.py | 16 | CODE | |
| LOW | ag2/context.py | 18 | CODE | |
| LOW | ag2/context.py | 24 | CODE | |
| LOW | ag2/agent.py | 85 | CODE | |
| LOW | ag2/testing.py | 5 | CODE | |
| LOW | ag2/testing.py | 26 | CODE | |
| LOW | ag2/history.py | 6 | CODE | |
| LOW | ag2/history.py | 9 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| LOW | ag2/middleware/__init__.py | 5 | CODE | |
| 1161 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | test/network/test_observation.py | 62 | # ── Skill render unit tests ───────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | test/network/test_observation.py | 131 | # ── Capability index integration tests ────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observation.py | 215 | # ── record_observation tests ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observation.py | 295 | # ── AgentClient mutation tests ────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observation.py | 339 | # ── TaskMirror end-to-end via Task lifecycle ──────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observability.py | 41 | # ── HubListener ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observability.py | 170 | # ── HubArbiter ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observability.py | 257 | # ── Audit subscribe ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observability.py | 279 | # ── Handler exception trap ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observability.py | 314 | # ── Hub.health() ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observability.py | 350 | # ── Hub logging ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_observability.py | 387 | # ── Coverage gap tests ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_sweeper_and_registry.py | 82 | # ── Real-clock expectation sweeper ────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_sweeper_and_registry.py | 139 | # ── TransitionRegistry isolation ──────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_sweeper_and_registry.py | 194 | # ── Cross-tool flow (no LLM — direct FunctionTool invocation) ─────────────── | COMMENT |
| MEDIUM | test/network/test_sweeper_and_registry.py | 279 | # ── Trust-boundary check ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_expectations.py | 141 | # ── Evaluator unit tests ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | test/network/test_expectations.py | 265 | # ── Handler integration tests ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_expectations.py | 426 | # ── Audit log tests for identity changes ──────────────────────────────────── | COMMENT |
| MEDIUM⚡ | test/network/test_hub_races.py | 428 | # ── Lifecycle ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_races.py | 50 | # ── Registration races ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_races.py | 126 | # ── Unregister mid-flight ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_races.py | 197 | # ── Endpoint binding ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_races.py | 232 | # ── Concurrent post_envelope ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_races.py | 299 | # ── Channel-state edges ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_races.py | 458 | # ── Outbound-access edge ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | test/network/test_workflow.py | 112 | # ── TransitionTarget unit tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | test/network/test_workflow.py | 170 | # ── TransitionGraph serialization ─────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | test/network/test_workflow.py | 272 | # ── WorkflowAdapter integration tests ─────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_human_client.py | 524 | # ── Helpers ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_adapter_tools.py | 39 | # ── Plugin attaches identity-level tools only ───────────────────────────── | COMMENT |
| MEDIUM | test/network/test_adapter_tools.py | 56 | # ── Adapter tools_for ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_adapter_tools.py | 141 | # ── Layer-2 envelope helpers ────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_adapter_tools.py | 183 | # ── channels(open, message=...) seed ────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_invariants.py | 139 | # ── Fix #1: Hub.unregister disk cleanup ───────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_invariants.py | 187 | # ── Fix #4: Hub.register rejects duplicate name ────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_invariants.py | 223 | # ── Fix #2: concurrency caps + inbox limits ────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_invariants.py | 377 | # ── Fix #3 / #5: delegate inbox race + fail-fast on close ──────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_invariants.py | 613 | # ── Fix #6: expectation dedup keyed by identity ────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_invariants.py | 687 | # ── Fix #7: task_mirror idempotent observation ─────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_hub_invariants.py | 730 | # ── Edge cases the per-fix tests above don't reach ─────────────────────────── | COMMENT |
| MEDIUM | test/network/test_tools.py | 74 | # ── peers tool ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_tools.py | 158 | # ── channels tool ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_tools.py | 197 | # ── context tool ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_tools.py | 277 | # ── tasks tool ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_tools.py | 470 | # ── Plugin attaches all 6 tools ──────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_subclass_surface.py | 42 | # ── Subclass on_* hooks ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_subclass_surface.py | 121 | # ── Custom sweeper ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_subclass_surface.py | 179 | # ── Audit kinds open set ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_subclass_surface.py | 201 | # ── Inbox pressure ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_subclass_surface.py | 247 | # ── Task mirror error escalation ────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_audit_and_lifecycle.py | 53 | # ── delegation_depth ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_audit_and_lifecycle.py | 119 | # ── Hydrate with missing adapter ──────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_audit_and_lifecycle.py | 181 | # ── Sweeper auto_close cross-channel bleed ────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_audit_and_lifecycle.py | 246 | # ── Channel + task lifecycle audit ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | test/network/test_rule_enforcement.py | 81 | # ── Access: outbound_to + inbound_from ────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_rule_enforcement.py | 52 | # ── parse_duration ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_rule_enforcement.py | 231 | # ── delegation_depth ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_rule_enforcement.py | 274 | # ── max_concurrent_channels ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/network/test_rule_enforcement.py | 325 | # ── max_concurrent_tasks (via observe_task) ───────────────────────────────── | COMMENT |
| 105 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | test/tools/test_local_shell.py | 28 | assert contains_shell_operator('echo "a && b" "$(c)"') is False | CODE |
| HIGH⚡ | test/tools/test_local_shell.py | 224 | cmd = f"sleep 5 && echo ok > {output_file}" | CODE |
| HIGH⚡ | test/tools/sandbox/test_local_sandbox.py | 22 | result = await sandbox.exec(["sh", "-c", "echo hello && echo world"]) | CODE |
| HIGH⚡ | test/tools/sandbox/adapter/test_shell_adapter.py | 125 | pytest.param("true && touch pwned", id="and"), | CODE |
| HIGH⚡ | test/a2ui/test_actions.py | 57 | # Optional[str] (anyOf with null) resolves to the non-null branch; | COMMENT |
| HIGH⚡ | ag2/mcp/apps.py | 712 | var meta = params ? params._meta : null; | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 713 | var name = meta ? meta[TOOL_KEY] : null; | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 714 | if (name && byTool[name]) { emit(byTool[name], params); } | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 746 | if (!message || message.jsonrpc !== "2.0") { return; } | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 748 | if (message.id === undefined || message.id === null) { onNotification(message.method, message.params); } | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 748 | if (message.id === undefined || message.id === null) { onNotification(message.method, message.params); } | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 808 | var available = host.context ? host.context.availableDisplayModes : null; | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 809 | if (!available || available.indexOf(mode) === -1) { | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 816 | if (result && result.displayMode) { host.context.displayMode = result.displayMode; } | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 848 | host.protocolVersion = result.protocolVersion || null; | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 848 | host.protocolVersion = result.protocolVersion || null; | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 849 | host.info = result.hostInfo || null; | CODE |
| HIGH⚡ | ag2/mcp/apps.py | 849 | host.info = result.hostInfo || null; | CODE |
| HIGH | ag2/mcp/apps.py | 659 | var host = { protocolVersion: null, info: null, capabilities: {}, context: {} }; | CODE |
| HIGH | ag2/mcp/apps.py | 687 | if (window.console && window.console.error) { window.console.error("ag2ui subscriber failed", e); } | CODE |
| HIGH | ag2/mcp/apps.py | 697 | list.push(fn); | CODE |
| HIGH | ag2/mcp/apps.py | 767 | if (width === lastWidth && height === lastHeight) { return; } | CODE |
| HIGH | ag2/live/observer.py | 94 | if text := self._buffer.push(event.content): | CODE |
| HIGH | ag2/live/cascade.py | 126 | voice = detector.push(event.content) | CODE |
| HIGH | examples/mcp/server_apps.py | 40 | var current = null; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/a2a/test_multi_replica.py | 167 | except Exception: # noqa: BLE001 - not stored yet | CODE |
| LOW | test/a2a/test_card_signing.py | 117 | except Exception: | CODE |
| LOW⚡ | test/events/test_tool_events.py | 37 | except Exception as e: | CODE |
| LOW⚡ | test/events/test_tool_events.py | 48 | except Exception as e: | CODE |
| LOW⚡ | website/mkdocs/_website/utils.py | 280 | except Exception as e: | CODE |
| MEDIUM⚡ | website/mkdocs/_website/utils.py | 281 | print(f"Error processing {file_path}: {e}") | CODE |
| MEDIUM⚡ | website/mkdocs/_website/utils.py | 290 | print(f"Error reading authors file: {e}") | CODE |
| LOW | website/mkdocs/_website/utils.py | 415 | except Exception as e: | STRING |
| LOW | ag2/context.py | 258 | except Exception as exc: | CODE |
| LOW | ag2/agent.py | 1789 | except Exception as exc: | CODE |
| LOW | ag2/agent.py | 1944 | except Exception as e: | CODE |
| LOW | ag2/agent.py | 2154 | except Exception as exc: | CODE |
| LOW | ag2/agent.py | 2344 | except Exception as exc: | CODE |
| LOW | ag2/watch.py | 220 | except Exception: | CODE |
| LOW | ag2/watch.py | 254 | except Exception: | CODE |
| LOW | ag2/watch.py | 470 | except Exception: | CODE |
| LOW | ag2/middleware/describe.py | 77 | except Exception: | CODE |
| LOW | ag2/middleware/builtin/telemetry.py | 105 | except Exception: | CODE |
| LOW | ag2/middleware/builtin/telemetry.py | 369 | except Exception as exc: | CODE |
| LOW | ag2/middleware/builtin/telemetry.py | 481 | except Exception as exc: | CODE |
| LOW | ag2/middleware/builtin/telemetry.py | 545 | except Exception as exc: | CODE |
| LOW | ag2/middleware/builtin/telemetry.py | 582 | except Exception as exc: | CODE |
| LOW | ag2/tools/executor.py | 172 | except Exception as e: | CODE |
| LOW | ag2/tools/subagents/run_task.py | 229 | except Exception as e: | CODE |
| LOW | ag2/tools/subagents/run_task.py | 236 | except Exception: | CODE |
| LOW | ag2/tools/toolkits/mcp_server/toolkit.py | 240 | except Exception as e: | CODE |
| LOW | ag2/tools/sandbox/filter.py | 136 | except Exception: | CODE |
| LOW | ag2/tools/final/function_tool.py | 159 | except Exception as e: | CODE |
| LOW | ag2/tools/skills/skill_search/toolkit.py | 136 | except Exception as e: | CODE |
| LOW | ag2/tools/skills/skill_search/toolkit.py | 197 | except Exception as e: | CODE |
| LOW | ag2/tools/skills/skill_search/extractor.py | 55 | except Exception: | CODE |
| LOW | ag2/tools/builtin/anthropic_bash.py | 97 | except Exception as e: | CODE |
| LOW | ag2/a2a/client.py | 306 | except Exception as e: | CODE |
| LOW | ag2/a2a/executor.py | 191 | except Exception: | CODE |
| LOW | ag2/network/task_mirror.py | 202 | except Exception as exc: | CODE |
| LOW | ag2/network/task_mirror.py | 213 | except Exception as exc: | CODE |
| LOW | ag2/network/task_mirror.py | 225 | except Exception as exc: | CODE |
| LOW | ag2/network/task_mirror.py | 238 | except Exception as exc: | CODE |
| LOW | ag2/network/task_mirror.py | 247 | except Exception as exc: | CODE |
| LOW | ag2/network/task_mirror.py | 260 | except Exception as exc: | CODE |
| LOW | ag2/network/task_mirror.py | 285 | except Exception: | CODE |
| LOW | ag2/network/task_mirror.py | 296 | except Exception: | CODE |
| LOW | ag2/network/transport/ws.py | 134 | except Exception: | CODE |
| LOW | ag2/network/transport/ws.py | 191 | except Exception: | CODE |
| LOW | ag2/network/client/human_client.py | 167 | except Exception: | CODE |
| LOW | ag2/network/client/handlers.py | 264 | except Exception: | CODE |
| LOW | ag2/network/client/handlers.py | 311 | except Exception as exc: | CODE |
| LOW | ag2/network/client/hub_client.py | 234 | except Exception: | CODE |
| LOW | ag2/network/client/hub_client.py | 248 | except Exception: | CODE |
| LOW | ag2/network/client/hub_client.py | 312 | except Exception as exc: | CODE |
| LOW | ag2/network/client/hub_client.py | 333 | except Exception: | CODE |
| LOW | ag2/network/client/tools/tasks.py | 103 | except Exception as exc: | CODE |
| LOW | ag2/network/client/tools/tasks.py | 112 | except Exception as exc: | CODE |
| LOW | ag2/network/client/tools/tasks.py | 134 | except Exception: | CODE |
| LOW | ag2/network/client/tools/tasks.py | 146 | except Exception: | CODE |
| LOW | ag2/network/client/tools/tasks.py | 158 | except Exception: | CODE |
| LOW | ag2/network/client/tools/tasks.py | 177 | except Exception as exc: | CODE |
| LOW | ag2/network/client/tools/say.py | 72 | except Exception as exc: | CODE |
| LOW | ag2/network/client/tools/say.py | 83 | except Exception: | CODE |
| LOW | ag2/network/client/tools/say.py | 95 | except Exception as exc: | CODE |
| 82 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/beta/extensions/nlip/test_context_sync.py | 0 | a gated ``delete_account`` tool, the prompts it raised and the ids it deleted. | STRING |
| HIGH | test/a2a/test_context_sync.py | 0 | a gated ``delete_account`` tool, the prompts it raised and the ids it deleted. | STRING |
| HIGH | test/a2ui/test_context_sync.py | 0 | a gated ``delete_account`` tool, the prompts it raised and the ids it deleted. | STRING |
| HIGH | test/config/gemini/test_convert_messages.py | 0 | json.loads must not crash on empty or none tool call arguments. | STRING |
| HIGH | test/config/anthropic/test_convert_messages.py | 0 | json.loads must not crash on empty or none tool call arguments. | STRING |
| HIGH | test/config/ollama/test_convert_messages.py | 0 | json.loads must not crash on empty or none tool call arguments. | STRING |
| HIGH | test/config/gemini/test_response_schema_to_api.py | 0 | json schema for a primitive/union wrapped in ``{\"data\": ...}`` (default ``embed=true``). | STRING |
| HIGH | test/config/anthropic/test_response_schema_to_api.py | 0 | json schema for a primitive/union wrapped in ``{\"data\": ...}`` (default ``embed=true``). | STRING |
| HIGH | test/config/dashscope/test_response_schema_to_api.py | 0 | json schema for a primitive/union wrapped in ``{\"data\": ...}`` (default ``embed=true``). | STRING |
| HIGH | test/config/ollama/test_response_schema_to_api.py | 0 | json schema for a primitive/union wrapped in ``{\"data\": ...}`` (default ``embed=true``). | STRING |
| HIGH | test/config/openai/test_response_schema_to_api.py | 0 | json schema for a primitive/union wrapped in ``{\"data\": ...}`` (default ``embed=true``). | STRING |
| HIGH | …config/openai/test_response_schema_to_responses_api.py | 0 | json schema for a primitive/union wrapped in ``{\"data\": ...}`` (default ``embed=true``). | STRING |
| HIGH | test/config/bedrock/_helpers.py | 0 | every event sent on `stream`, transient ones included — history keeps none of those. | STRING |
| HIGH | test/config/ollama/_helpers.py | 0 | every event sent on `stream`, transient ones included — history keeps none of those. | STRING |
| HIGH | test/config/openai/_helpers.py | 0 | every event sent on `stream`, transient ones included — history keeps none of those. | STRING |
| HIGH | test/providers/test_network_mixed_provider.py | 0 | transfer the conversation to the engineering specialist. | STRING |
| HIGH | test/providers/test_network_cross_process_smoke.py | 0 | transfer the conversation to the engineering specialist. | STRING |
| HIGH | test/providers/anthropic/test_workflow_smoke.py | 0 | transfer the conversation to the engineering specialist. | STRING |
| HIGH | test/providers/gemini/test_gemini_integration.py | 0 | a follow-up question after an empty-args tool call must not crash. | STRING |
| HIGH | test/providers/anthropic/test_anthropic_integration.py | 0 | a follow-up question after an empty-args tool call must not crash. | STRING |
| HIGH | test/providers/openai/test_openai_integration.py | 0 | a follow-up question after an empty-args tool call must not crash. | STRING |
| HIGH | test/providers/gemini/test_gemini_integration.py | 0 | discover available agents, optionally filtered by capability. | STRING |
| HIGH | test/providers/anthropic/test_anthropic_integration.py | 0 | discover available agents, optionally filtered by capability. | STRING |
| HIGH | test/providers/openai/test_openai_integration.py | 0 | discover available agents, optionally filtered by capability. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/providers/test_network_mixed_provider.py | 65 | except ImportError: | CODE |
| HIGH | test/providers/test_network_cross_process_smoke.py | 85 | except ImportError: | CODE |
| HIGH | test/providers/gemini/test_network_smoke.py | 40 | except ImportError: | CODE |
| HIGH | test/providers/anthropic/test_network_coverage_smoke.py | 62 | except ImportError: | CODE |
| HIGH | test/providers/anthropic/test_workflow_smoke.py | 55 | except ImportError: | CODE |
| HIGH | test/providers/anthropic/test_network_smoke.py | 41 | except ImportError: | CODE |
| HIGH | test/providers/openai/test_prompt_cache.py | 40 | except ImportError: | CODE |
| HIGH | test/providers/openai/test_network_smoke.py | 40 | except ImportError: | CODE |
| HIGH | website/mkdocs/_website/generate_mkdocs.py | 512 | except (FileNotFoundError, yaml.YAMLError): | CODE |
| HIGH | ag2/network/task_mirror.py | 211 | except NotFoundError: | CODE |
| HIGH | ag2/network/task_mirror.py | 223 | except NotFoundError: | CODE |
| HIGH | ag2/network/task_mirror.py | 236 | except NotFoundError: | CODE |
| HIGH | ag2/network/task_mirror.py | 245 | except NotFoundError: | CODE |
| HIGH | ag2/network/task_mirror.py | 258 | except NotFoundError: | CODE |
| HIGH | ag2/network/hub/sweepers.py | 64 | except Exception: | CODE |
| HIGH | ag2/extensions/docker/sandbox.py | 222 | except NotFound: | CODE |
| HIGH | ag2/extensions/docker/sandbox.py | 229 | except NotFound: | CODE |
| HIGH | ag2/extensions/daytona/sandbox.py | 167 | except DaytonaNotFoundError: | CODE |
| HIGH | ag2/knowledge/polling.py | 77 | except Exception: # pragma: no cover | CODE |
| HIGH | ag2/events/_serialization.py | 115 | except (ImportError, ValueError): | CODE |
| HIGH | ag2/acp/client.py | 73 | except ProcessLookupError: | CODE |
| HIGH | ag2/acp/client.py | 365 | except asyncio.CancelledError: | CODE |
| HIGH | ag2/acp/bridge.py | 96 | except ProcessLookupError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/network/test_at_least_once.py | 658 | CODE | |
| LOW | website/mkdocs/docs.py | 109 | CODE | |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 57 | CODE | |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 368 | CODE | |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 756 | CODE | |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 813 | CODE | |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 86 | CODE | |
| LOW | website/mkdocs/_website/utils.py | 297 | CODE | |
| LOW | ag2/textual.py | 56 | CODE | |
| LOW | ag2/_replay.py | 93 | CODE | |
| LOW | ag2/assembly.py | 93 | CODE | |
| LOW | ag2/agent.py | 1977 | CODE | |
| LOW | ag2/agent.py | 1985 | CODE | |
| LOW | ag2/agent.py | 2289 | CODE | |
| LOW | ag2/watch.py | 416 | CODE | |
| LOW | ag2/annotations.py | 34 | CODE | |
| LOW | ag2/annotations.py | 67 | CODE | |
| LOW | ag2/middleware/builtin/telemetry.py | 150 | CODE | |
| LOW | ag2/middleware/builtin/telemetry.py | 522 | CODE | |
| LOW | ag2/tools/executor.py | 56 | CODE | |
| LOW | ag2/tools/precedence.py | 92 | CODE | |
| LOW | ag2/tools/toolkits/mcp_server/toolkit.py | 438 | CODE | |
| LOW | ag2/tools/toolkits/mcp_server/answering.py | 247 | CODE | |
| LOW | ag2/tools/sandbox/filter.py | 88 | CODE | |
| LOW | ag2/tools/skills/runtime/local/loader.py | 146 | CODE | |
| LOW | ag2/tools/skills/skill_search/extractor.py | 18 | CODE | |
| LOW | ag2/tools/skills/skill_search/extractor.py | 62 | CODE | |
| LOW | ag2/config/gemini/events.py | 79 | CODE | |
| LOW | ag2/config/gemini/mappers.py | 93 | CODE | |
| LOW | ag2/config/gemini/mappers.py | 264 | CODE | |
| LOW | ag2/config/gemini/gemini_client.py | 169 | CODE | |
| LOW | ag2/config/gemini/gemini_client.py | 246 | CODE | |
| LOW | ag2/config/typesafe/mappers.py | 48 | CODE | |
| LOW | ag2/config/xai/mappers.py | 256 | CODE | |
| LOW | ag2/config/bedrock/bedrock_client.py | 220 | CODE | |
| LOW | ag2/config/bedrock/mappers.py | 217 | CODE | |
| LOW | ag2/config/bedrock/mappers.py | 237 | CODE | |
| LOW | ag2/config/bedrock/mappers.py | 270 | CODE | |
| LOW | ag2/config/anthropic/events.py | 124 | CODE | |
| LOW | ag2/config/anthropic/mappers.py | 312 | CODE | |
| LOW | ag2/config/anthropic/mappers.py | 418 | CODE | |
| LOW | ag2/config/anthropic/mappers.py | 605 | CODE | |
| LOW | ag2/config/anthropic/mappers.py | 654 | CODE | |
| LOW | ag2/config/anthropic/mappers.py | 670 | CODE | |
| LOW | ag2/config/anthropic/anthropic_client.py | 283 | CODE | |
| LOW | ag2/config/anthropic/anthropic_client.py | 346 | CODE | |
| LOW | ag2/config/dashscope/dashscope_client.py | 97 | CODE | |
| LOW | ag2/config/dashscope/dashscope_client.py | 161 | CODE | |
| LOW | ag2/config/dashscope/mappers.py | 62 | CODE | |
| LOW | ag2/config/ollama/mappers.py | 63 | CODE | |
| LOW | ag2/config/mistral/mappers.py | 231 | CODE | |
| LOW | ag2/config/mistral/mappers.py | 273 | CODE | |
| LOW | ag2/config/zai/zai_client.py | 204 | CODE | |
| LOW | ag2/config/zai/mappers.py | 177 | CODE | |
| LOW | ag2/config/openai/openai_responses_client.py | 236 | CODE | |
| LOW | ag2/config/openai/openai_responses_client.py | 301 | CODE | |
| LOW | ag2/config/openai/events.py | 124 | CODE | |
| LOW | ag2/config/openai/decisions_mappers.py | 82 | CODE | |
| LOW | ag2/config/openai/mappers.py | 188 | CODE | |
| LOW | ag2/config/openai/mappers.py | 391 | CODE | |
| 56 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test_plugin/test_invocation.py | 165 | def update_defaults(event: BaseEvent, ctx: Context) -> None: | CODE |
| LOW | test/tools/test_task.py | 85 | async def set_history(self, stream_id: StreamId, events: Iterable[BaseEvent]) -> None: | CODE |
| LOW | ag2/_import_utils.py | 19 | __all__ = [ | CODE |
| LOW | ag2/context.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/agent.py | 98 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/watch.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/history.py | 26 | async def set_history(self, stream_id: "StreamId", events: Iterable[BaseEvent]) -> None: ... | CODE |
| LOW | ag2/history.py | 41 | async def set_history(self, stream_id: "StreamId", events: Iterable["BaseEvent"]) -> None: | CODE |
| LOW | ag2/tools/precedence.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/tools/toolkits/mcp_server/toolkit.py | 131 | async def _settle_era(session: ClientSession, mode: ProtocolMode) -> None: | CODE |
| LOW | ag2/tools/toolkits/mcp_server/answering.py | 60 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/tools/skills/runtime/memory/skill.py | 112 | def _set_instructions(self, body: "str | Callable[..., Any]") -> None: | CODE |
| LOW | ag2/tools/skills/runtime/local/loader.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/config/typesafe/config.py | 70 | __all__ = ["TypeSafeConfig", "TypeSafeConfigOverrides"] | CODE |
| LOW | ag2/config/typesafe/typesafe_client.py | 29 | __all__ = ["TypeSafeClient"] | CODE |
| LOW | ag2/config/xai/xai_client.py | 42 | __all__ = ["CreateOptions", "IncludeOption", "ReasoningEffort", "ToolMode", "XAIClient"] | CODE |
| LOW | ag2/config/bedrock/mappers.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/config/anthropic/mappers.py | 67 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/config/anthropic/anthropic_client.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/config/mistral/config.py | 113 | __all__ = ["MISTRAL_DEFAULT_SERVER_URL", "MistralConfig", "MistralConfigOverrides"] | CODE |
| LOW | ag2/config/mistral/mistral_client.py | 66 | __all__ = ["CreateOptions", "MistralClient", "ReasoningEffort"] | CODE |
| LOW | ag2/config/openai/openai_decisions_client.py | 29 | __all__ = ["OpenAIDecisionsClient"] | CODE |
| LOW | ag2/a2a/mappers/__init__.py | 32 | __all__ = [ | CODE |
| LOW | ag2/streams/redis/storage.py | 51 | async def set_history(self, stream_id: StreamId, events: Iterable[BaseEvent]) -> None: | CODE |
| LOW | ag2/network/task_mirror.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/network/workflow_helpers.py | 43 | async def set_context(channel: Channel, key: str, value: Any) -> None: | CODE |
| LOW | ag2/network/transport/ws.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | ag2/network/client/agent_client.py | 318 | async def set_resume(self, resume: Resume) -> None: | CODE |
| LOW | ag2/network/client/agent_client.py | 334 | async def set_skill(self, skill_md: str | None) -> None: | CODE |
| LOW | ag2/network/client/agent_client.py | 337 | async def set_rule(self, rule: Rule) -> None: | CODE |
| LOW | ag2/network/client/human_client.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/network/client/handlers.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/network/client/hub_client.py | 73 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | ag2/network/client/hub_client.py | 750 | async def set_resume(self, agent_id: str, resume: Resume) -> None: | CODE |
| LOW⚡ | ag2/network/client/hub_client.py | 756 | async def set_skill(self, agent_id: str, skill_md: str | None) -> None: | CODE |
| LOW⚡ | ag2/network/client/hub_client.py | 762 | async def set_rule(self, agent_id: str, rule: Rule) -> None: | CODE |
| LOW | ag2/network/hub/audit.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/network/hub/telemetry.py | 84 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/network/hub/core.py | 141 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/network/hub/core.py | 1424 | async def set_resume(self, agent_id: str, resume: Resume) -> None: | CODE |
| LOW | ag2/network/hub/core.py | 1465 | async def set_skill(self, agent_id: str, skill_md: str | None) -> None: | CODE |
| LOW | ag2/network/hub/core.py | 1481 | async def set_rule(self, agent_id: str, rule: Rule) -> None: | CODE |
| LOW | ag2/a2ui/server_action.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/request.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/parser.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/capabilities.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/incoming.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/middleware.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/a2a/executor.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/transports/rest.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/a2ui/transports/ag_ui.py | 76 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/mcp/server.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/mcp/pause.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/mcp/sampling.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/mcp/elicitation.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/extensions/docker/sandbox.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/extensions/tealtiger/__init__.py | 24 | __all__ = [ | CODE |
| LOW | ag2/extensions/daytona/sandbox.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/extensions/tenki/sandbox.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | ag2/extensions/nlip/server.py | 16 | logger = logging.getLogger(__name__) | CODE |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | jog.yaml | 21 | # Note: The agent starts from the assumption that documentation is correct unless it finds clear evidence otherwise. | COMMENT |
| LOW | test/_serving.py | 61 | # *process-wide*. Left set, every later SSE response in this process | COMMENT |
| LOW | test/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/middleware/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/middleware/builtins/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/test_plugin/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/tools/search/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/tools/sandbox/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/tools/sandbox/adapter/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/tools/skills/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/dynamic/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/response/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/gemini/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/xai/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/bedrock/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/anthropic/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/anthropic/tools/test_shell.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/dashscope/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/ollama/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/zai/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/config/openai/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/providers/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/providers/agent/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/stream/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/network/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/spec/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/observer/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/a2ui/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/a2ui/a2a/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/a2ui/transports/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/agent/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/policies/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/extensions/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/extensions/tools/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/extensions/tools/search/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/extensions/tealtiger/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/knowledge/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/live/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/orchestration/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/files/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/eval/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/eval/dataset/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/eval/runtime/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/eval/scorers/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/eval/results/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/eval/sources/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | test/events/__init__.py | 1 | # Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | website/mkdocs/_website/__init__.py | 1 | # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors | COMMENT |
| LOW | ag2/hitl.py | 21 | ) | COMMENT |
| LOW | ag2/agent.py | 1561 | COMMENT | |
| LOW | ag2/middleware/builtin/telemetry.py | 181 | # Fallback when the wrapper was never persisted; an id-less result cannot be paired. | COMMENT |
| LOW | ag2/middleware/builtin/llm_retry.py | 61 | for _ in range(self._max_retries): | COMMENT |
| LOW | ag2/tools/executor.py | 61 | tasks = [asyncio.ensure_future(_execute_call(context, call)) for call in event.calls] | COMMENT |
| LOW | ag2/tools/subagents/run_task.py | 181 | # same ``finally`` as the bridge above, so it cannot outlive the call. | COMMENT |
| LOW | ag2/config/anthropic/mappers.py | 681 | if isinstance(message, ModelResponse): | COMMENT |
| LOW | ag2/a2a/executor.py | 81 | return | COMMENT |
| LOW | ag2/network/envelope.py | 41 | # Fixed set; new names are added in code, not at runtime. User-defined event | COMMENT |
| LOW | ag2/network/client/human_client.py | 81 | # Push callbacks. Run in registration order; exceptions are | COMMENT |
| 21 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/mkdocs/_website/generate_mkdocs.py | 132 | CODE | |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 959 | CODE | |
| LOW | ag2/spec.py | 132 | CODE | |
| LOW | ag2/agent.py | 210 | CODE | |
| LOW | ag2/agent.py | 226 | CODE | |
| LOW | ag2/agent.py | 242 | CODE | |
| LOW | ag2/agent.py | 258 | CODE | |
| LOW | ag2/agent.py | 272 | CODE | |
| LOW | ag2/agent.py | 304 | CODE | |
| LOW | ag2/agent.py | 320 | CODE | |
| LOW | ag2/agent.py | 336 | CODE | |
| LOW | ag2/agent.py | 352 | CODE | |
| LOW | ag2/agent.py | 366 | CODE | |
| LOW | ag2/agent.py | 702 | CODE | |
| LOW | ag2/agent.py | 722 | CODE | |
| LOW | ag2/agent.py | 742 | CODE | |
| LOW | ag2/agent.py | 762 | CODE | |
| LOW | ag2/agent.py | 781 | CODE | |
| LOW | ag2/agent.py | 991 | CODE | |
| LOW | ag2/agent.py | 1008 | CODE | |
| LOW | ag2/agent.py | 1026 | CODE | |
| LOW | ag2/agent.py | 1044 | CODE | |
| LOW | ag2/agent.py | 1060 | CODE | |
| LOW | ag2/agent.py | 1094 | CODE | |
| LOW | ag2/agent.py | 1111 | CODE | |
| LOW | ag2/agent.py | 1129 | CODE | |
| LOW | ag2/agent.py | 1147 | CODE | |
| LOW | ag2/agent.py | 1163 | CODE | |
| LOW | ag2/agent.py | 1275 | CODE | |
| LOW | ag2/agent.py | 1415 | CODE | |
| LOW | ag2/tools/shell/tool.py | 79 | CODE | |
| LOW | ag2/tools/search/tavily.py | 47 | CODE | |
| LOW | ag2/tools/search/perplexity.py | 127 | CODE | |
| LOW | ag2/tools/search/perplexity.py | 191 | CODE | |
| LOW | ag2/tools/builtin/web_fetch.py | 99 | CODE | |
| LOW | ag2/config/gemini/gemini_client.py | 89 | CODE | |
| LOW | ag2/config/typesafe/typesafe_client.py | 33 | CODE | |
| LOW | ag2/config/bedrock/bedrock_client.py | 64 | CODE | |
| LOW | ag2/config/anthropic/anthropic_client.py | 90 | CODE | |
| LOW | ag2/config/zai/zai_client.py | 91 | CODE | |
| LOW | ag2/config/openai/openai_responses_client.py | 107 | CODE | |
| LOW | ag2/config/openai/containers.py | 56 | CODE | |
| LOW | ag2/config/openai/openai_decisions_client.py | 33 | CODE | |
| LOW | ag2/config/openai/openai_client.py | 84 | CODE | |
| LOW | ag2/a2a/server.py | 97 | CODE | |
| LOW | ag2/a2a/tasks.py | 74 | CODE | |
| LOW | ag2/a2a/client.py | 172 | CODE | |
| LOW | ag2/a2a/card.py | 31 | CODE | |
| LOW | ag2/a2a/transports/grpc.py | 80 | CODE | |
| LOW | ag2/a2a/transports/rest.py | 34 | CODE | |
| LOW | ag2/a2a/transports/jsonrpc.py | 34 | CODE | |
| LOW | ag2/a2a/mappers/messages.py | 62 | CODE | |
| LOW | ag2/network/client/tools/tasks.py | 66 | CODE | |
| LOW | ag2/network/client/tools/context.py | 48 | CODE | |
| LOW | ag2/network/client/tools/channels.py | 62 | CODE | |
| LOW | ag2/network/hub/core.py | 514 | CODE | |
| LOW | ag2/a2ui/server.py | 53 | CODE | |
| LOW | ag2/a2ui/_runtime.py | 40 | CODE | |
| LOW | ag2/a2ui/a2a/executor.py | 83 | CODE | |
| LOW | ag2/mcp/server.py | 285 | CODE | |
| 31 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ag2/_import_utils.py | 61 | Parse a module name string to create a ModuleInfo object. Args: module_info (str): The importable m | STRING |
| HIGH | ag2/tools/skills/skill_search/client.py | 77 | Download a skill via the GitHub Tarball API and install it via *runtime*. Args: source: ``"owner/ | STRING |
| HIGH | ag2/a2ui/dispatch.py | 93 | Execute one turn and yield its prose then A2UI message frames. Server-side actions are handled first and never invo | STRING |
| HIGH | ag2/a2ui/request.py | 59 | Parse a raw request body into an :class:`A2UIServerRequest`. Args: body: The raw JSON request body (bytes/s | STRING |
| HIGH | ag2/extensions/tools/search/serply.py | 119 | Run one GET against the Serply REST API. Args: client_kwargs: Keyword arguments for the ``httpx.AsyncClient | STRING |
| HIGH | ag2/extensions/tenki/environment.py | 145 | Yield the sandbox matching the resolved parameters. Sandboxes are cached by those parameters, so repeated calls | STRING |
| HIGH | ag2/eval/runtime/runner.py | 79 | Run an evaluation suite end-to-end. The given :class:`~ag2.Agent` is run once per task with a :class:`~ag2.midd | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | website/mkdocs/_website/generate_mkdocs.py | 719 | # Create the target posts directory | COMMENT |
| MEDIUM | website/mkdocs/_website/generate_mkdocs.py | 722 | # Create the index file in the target blog directory | COMMENT |
| MEDIUM | website/mkdocs/_website/generate_mkdocs.py | 908 | # Create the MkDocs admonition | COMMENT |
| MEDIUM | website/mkdocs/_website/generate_mkdocs.py | 1052 | # Create the front matter metadata js file for examples by notebook section | COMMENT |
| MEDIUM | ag2/textual.py | 69 | # Create a buffer block for assistant streaming | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 72 | - [Orchestrating Multiple Agents](#orchestrating-multiple-agents) | CODE |
| MEDIUM | README.md | 74 | - [Advanced agentic design patterns](#advanced-agentic-design-patterns) | CODE |
| MEDIUM | README.md | 458 | ### Advanced agentic design patterns | COMMENT |
| MEDIUM | .github/review/TRIAGE_AI_TASKS.md | 11 | ## Global guardrails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | test/extensions/tools/search/test_tinyfish.py | 243 | assert set(route.calls.last.request.url.params.keys()) == {"query"} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ag2/agent.py | 855 | # Assembly policies (empty by default; bare Agent has no harness). | COMMENT |
| LOW | ag2/network/adapters/workflow.py | 222 | # the same packet just set (atomic state-update + speaker- | COMMENT |
| LOW | ag2/extensions/tealtiger/middleware.py | 369 | # OBSERVE mode: skip policy evaluation, just pass through with audit | COMMENT |
| MEDIUM | ag2/acp/testing.py | 379 | # The same arguments the real transports pass: a harness that connected | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/config/gemini/test_gemini_tool_config_request.py | 86 | credentials=Credentials(token="fake-token"), | CODE |
| LOW | test/a2ui/a2a/test_a2a_executor.py | 42 | "context": {"email": "user@example.com"}, | CODE |
| LOW | test/a2ui/a2a/test_a2a_executor.py | 154 | assert clicked == ["user@example.com"] | CODE |
| LOW | test/a2ui/a2a/test_a2a_executor.py | 172 | assert "user@example.com" not in synthesized | CODE |
| LOW | test/a2ui/a2a/test_a2a_executor.py | 202 | assert recorder.emails == ["user@example.com"] | CODE |
| LOW | test/a2ui/a2a/test_a2a_executor.py | 217 | assert "user@example.com" in synthesized | CODE |
| LOW | test/extensions/tealtiger/test_governance_middleware.py | 168 | event = _make_tool_event(name="send", arguments={"to": "user@example.com"}) | CODE |
| LOW | ag2/a2ui/v1_0/spec/basic_catalog.json | 644 | "placeholder": { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/mkdocs/_website/generate_mkdocs.py | 237 | # Check if the path already has a file extension | COMMENT |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 692 | # Check if the path starts with /snippets/ | COMMENT |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 702 | # Read the file content | COMMENT |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 789 | # Open file in append mode | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 139 | export OPENAI_API_KEY="<your-api-key>" # or ANTHROPIC_API_KEY, GEMINI_API_KEY, ... | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .github/review/TRIAGE_POLICY.md | 248 | Reviews from anyone else in the community are welcome and don't gate the PR, but they're still held to the [AI Policy](. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/mkdocs/_website/generate_mkdocs.py | 469 | # Step 1: First copy mdx files to destination as md files | COMMENT |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 486 | # Step 2: Process the MD files we created | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/mkdocs/_website/generate_mkdocs.py | 469 | # Step 1: First copy mdx files to destination as md files | COMMENT |
| LOW | website/mkdocs/_website/generate_mkdocs.py | 486 | # Step 2: Process the MD files we created | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/network/test_hub_invariants.py | 965 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ag2/tools/subagents/run_task.py | 132 | async def run_task( | CODE |