AI Slop Code RIsk Monitor

microsoft/TypeChat

TypeChat is a library that makes it easy to build natural language interfaces using types.

7.4 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for microsoft/TypeChat, a TypeScript project with 8,688 GitHub stars. SynthScan examined 21,478 lines of code across 244 source files, recording 115 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 7.4 (Moderate 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.

7.4
Adjusted Signal
7.4
Raw Pattern Score
100%
Time Factor
2026-10-06
Last Push
8.7K
Stars
TypeScript
Language
21.5K
Lines of Code
244
Files
115
Pattern Hits
2026-10-12
Scan Date
0.02
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 19.1/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 81 finding(s).

Hallucinated Dependency & Supply Chain Risk 3.7/100 · LOW

Are imports declared and package/API names verified? 16 finding(s).

Agent Over-Engineering Ratio 18.9/100 · LOW

Are wrappers, guards, and repeated structures necessary? 55 finding(s).

PR Review Velocity Impact 30.4/100 · MEDIUM

Which changes need focused human review? 115 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 5MEDIUM 8LOW 102

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 115 distinct pattern matches across 14 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.

Hyper-Verbose Identifiers36 hits · 38 pts
SeverityFileLineSnippetContext
LOW⚡python/tests/test_translator.py41def test_translator_with_immediate_pass(snapshot: Any):CODE
LOW⚡python/tests/test_translator.py50def test_translator_with_single_failure(snapshot: Any):CODE
LOW⚡python/tests/test_translator.py60def test_translator_with_invalid_json(snapshot: Any):CODE
LOW⚡python/tests/test_translator.py70def test_translator_with_single_failure_and_str_preamble(snapshot: Any):CODE
LOWpython/tests/test_model.py35def test_reads_response_within_size_limit():CODE
LOWpython/tests/test_model.py45def test_rejects_oversized_response_via_content_length():CODE
LOWpython/tests/test_model.py57def test_rejects_oversized_streamed_response_without_content_length():CODE
LOWpython/tests/test_model.py73def test_size_limit_disabled_allows_large_response():CODE
LOWpython/tests/test_abstract_collections.py26def test_abstract_collections(snapshot: Any):CODE
LOWpython/tests/test_validator.py13def test_dict_valid_as_dataclass():CODE
LOWpython/examples/music/client.py96def get_tracks_from_result_list(resultItems: list[Any]) -> list[SimplifiedTrackInfo]:CODE
LOWpython/examples/music/client.py149def update_track_list_and_print(tracks: list[SimplifiedTrackInfo], context: ClientContext):CODE
LOWpython/examples/music/client.py154async def get_current_users_playlists(context: ClientContext) -> list[SimplifiedPlaylistInfo]:CODE
LOWpython/examples/music/spotipyWrapper.py110 async def current_user_unfollow_playlist(self, playlist_id: str) -> None:CODE
LOWpython/examples/multiSchema/agents.py55 async def _handle_json_program_call(self, func: str, args: Sequence[object]) -> int | float:CODE
LOWpython/src/typechat/_internal/model.py193def create_openai_language_model(api_key: str, model: str, endpoint: str = "https://api.openai.com/v1/chat/completions",CODE
LOWpython/src/typechat/_internal/model.py212def create_azure_openai_language_model(api_key: str, endpoint: str) -> HttpxLanguageModel:CODE
LOWpython/src/typechat/_internal/ts_conversion/__init__.py23def python_type_to_typescript_schema(py_type: type | TypeAliasType) -> TypeScriptSchemaConversionResult:CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py156def python_type_to_typescript_nodes(root_py_type: object) -> TypeScriptNodeTranslationResult:CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py175 def convert_to_type_reference_node(py_type: TypeReferenceTarget) -> TypeNode:CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py193 def generic_alias_to_type_reference(py_type: GenericAliasish) -> TypeReferenceNode:CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py200 def convert_literal_type_arg_to_type_node(py_type: object) -> TypeNode:CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py420 def attribute_identical_in_all_bases(attr_name: str, type_hint: object, base_attributes: dict[str, set[object]]) -> CODE
LOWtypescript/examples/crossword/src/translator.ts56 function getScreenshotPromptSection(screenshot: string | undefined) {CODE
LOWtypescript/src/model.ts192export function createOpenAILanguageModel(apiKey: string, model: string, endPoint = "https://api.openai.com/v1/chat/compCODE
LOWtypescript/src/model.ts213export function createAzureOpenAILanguageModel(apiKey: string, endPoint: string, options?: LanguageModelOptions): TypeChCODE
LOWtypescript/src/model.ts333function createResponsesFetchLanguageModel(url: string, headers: object, defaultParams: object, proxy?: ProxySettings) {CODE
LOWtypescript/src/model.ts601function missingEnvironmentVariable(name: string): never {CODE
LOWtypescript/src/zod/validate.ts219 function appendUnionOrIntersectionTypes(types: readonly z.ZodType[], minPrecedence: TypePrecedence) {CODE
LOWtypescript/src/ts/program.ts99export function createModuleTextFromProgram(jsonObject: object): Result<string> {CODE
LOWtypescript/src/ts/validate.ts126 function flattenDiagnosticMessageText(diagnostic: Diagnostic, newLine: string): string {CODE
LOWtypescript/src/ts/validate.ts145 function expandMissingPropertiesMessage(checker: Checker, file: SourceFile, position: number): string | undefined {CODE
LOWsite/src/docs/python/basic-usage.md72def create_openai_language_model(CODE
LOWsite/src/docs/python/basic-usage.md80def create_azure_openai_language_model(api_key: str, endpoint: str): ...CODE
LOWsite/src/docs/typescript/basic-usage.md71export function createOpenAILanguageModel(apiKey: string, model: string, endPoint? string): TypeChatLanguageModel;CODE
LOWsite/src/docs/typescript/basic-usage.md73export function createAzureOpenAILanguageModel(apiKey: string, endPoint: string): TypeChatLanguageModel;CODE
Decorative Section Separators6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMpython/examples/healthData/input.txt8# ================COMMENT
MEDIUMpython/examples/healthData/input.txt10# ================COMMENT
MEDIUMtypescript/examples/healthData/src/input.txt8# ================COMMENT
MEDIUMtypescript/examples/healthData/src/input.txt10# ================COMMENT
MEDIUM.github/workflows/fix-dependabot-alerts.yml125 # ── Final clean build verification ──────────────────────────────COMMENT
MEDIUM.github/workflows/fix-dependabot-alerts.yml150 # ── Create PR ───────────────────────────────────────────────────COMMENT
Deep Nesting17 hits · 17 pts
SeverityFileLineSnippetContext
LOWpython/examples/music/client.py186CODE
LOWpython/examples/music/demo.py10CODE
LOWpython/examples/music/demo.py17CODE
LOWpython/examples/restaurant/demo.py8CODE
LOWpython/examples/restaurant/demo.py14CODE
LOWpython/examples/drawing/demo.py20CODE
LOWpython/examples/drawing/demo.py35CODE
LOWpython/examples/coffeeShop/demo.py10CODE
LOWpython/examples/coffeeShop/demo.py17CODE
LOWpython/examples/calendar/demo.py9CODE
LOWpython/examples/calendar/demo.py15CODE
LOWpython/src/typechat/_internal/interactive.py3CODE
LOWpython/src/typechat/_internal/translator.py52CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py156CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py211CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py296CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py345CODE
Structural Annotation Overuse11 hits · 16 pts
SeverityFileLineSnippetContext
LOWpython/examples/README.md22## Step 1: Configure your development environmentCOMMENT
LOWpython/examples/README.md76## Step 2: Configure environment variablesCOMMENT
LOWpython/examples/README.md107## Step 3: Run the examplesCOMMENT
LOWtypescript/examples/README.md21## Step 1: Configure your development environmentCOMMENT
LOWtypescript/examples/README.md56## Step 2: Build TypeChat SamplesCOMMENT
LOWtypescript/examples/README.md64## Step 3: Configure environment variablesCOMMENT
LOWtypescript/examples/README.md114## Step 4: Run the examplesCOMMENT
LOWsite/src/docs/examples.md23## Step 1: Configure development environmentCOMMENT
LOWsite/src/docs/examples.md58## Step 2: Build TypeChat ExamplesCOMMENT
LOWsite/src/docs/examples.md66## Step 3: Configure environment variablesCOMMENT
LOWsite/src/docs/examples.md95## Step 4: Run the examplesCOMMENT
Unused Imports16 hits · 16 pts
SeverityFileLineSnippetContext
LOWpython/examples/math/program.py1CODE
LOWpython/src/typechat/__init__.py5CODE
LOWpython/src/typechat/__init__.py5CODE
LOWpython/src/typechat/__init__.py5CODE
LOWpython/src/typechat/__init__.py5CODE
LOWpython/src/typechat/__init__.py5CODE
LOWpython/src/typechat/__init__.py6CODE
LOWpython/src/typechat/__init__.py6CODE
LOWpython/src/typechat/__init__.py6CODE
LOWpython/src/typechat/__init__.py7CODE
LOWpython/src/typechat/__init__.py8CODE
LOWpython/src/typechat/__init__.py9CODE
LOWpython/src/typechat/__init__.py10CODE
LOWpython/src/typechat/_internal/interactive.py25CODE
LOW…/src/typechat/_internal/ts_conversion/ts_type_nodes.py1CODE
LOW…hat/_internal/ts_conversion/python_type_to_ts_nodes.py1CODE
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHpython/examples/math/program.py0the following is the user request translated into a json object with 2 spaces of indentation and no properties with the STRING
HIGHpython/examples/healthData/translator.py0the following is the user request translated into a json object with 2 spaces of indentation and no properties with the STRING
HIGHpython/src/typechat/_internal/translator.py0the following is the user request translated into a json object with 2 spaces of indentation and no properties with the STRING
Over-Commented Block10 hits · 10 pts
SeverityFileLineSnippetContext
LOWpython/tests/__init__.py1# SPDX-FileCopyrightText: Microsoft CorporationCOMMENT
LOW…pshots__/test_tuple_errors_1/test_tuples_2.schema.d.ts1// Entry point is: 'TupleContainer'COMMENT
LOWpython/examples/healthData/input.txt1#COMMENT
LOWpython/src/typechat/__about__.py1# SPDX-FileCopyrightText: Microsoft CorporationCOMMENT
LOWtypescript/examples/music/src/chatifyActionsSchema.ts21 // show now playingCOMMENT
LOWtypescript/examples/music/src/chatifyActionsSchema.ts41 setVolume(newVolumeLevel: number): void;COMMENT
LOWtypescript/examples/healthData/src/input.txt1#COMMENT
LOW.github/dependabot.yml1# Dependabot configuration for microsoft/TypeChat.COMMENT
LOW.github/workflows/fix-dependabot-alerts.yml1# Copyright (c) Microsoft Corporation.COMMENT
LOW.github/workflows/fix-dependabot-alerts.yml121 # cache key. The restore step uses a shared prefix so anyCOMMENT
Empty Error Handlers2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHpython/src/typechat/_internal/model.py152except Exception:CODE
HIGHpython/src/typechat/_internal/interactive.py26except ImportError:CODE
Excessive Try-Catch Wrapping5 hits · 6 pts
SeverityFileLineSnippetContext
LOWpython/examples/music/demo.py27 except Exception as error:CODE
LOWpython/examples/multiSchema/agents.py123 except Exception as error:CODE
LOWpython/src/typechat/_internal/model.py107 except Exception as e:CODE
LOWpython/src/typechat/_internal/model.py152 except Exception:CODE
MEDIUMpython/src/typechat/_internal/model.py149def __del__(self):CODE
Overly Generic Function Names4 hits · 4 pts
SeverityFileLineSnippetContext
LOWpython/tests/test_dataclasses.py25 def do_something(self):CODE
LOWpython/examples/multiSchema/agents.py37 async def handle_request(self, line: str):CODE
LOWpython/examples/multiSchema/agents.py80 async def handle_request(self, line: str):CODE
LOWpython/examples/multiSchema/agents.py108 async def handle_request(self, line: str):CODE
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/fix-dependabot-alerts.yml244 # Create the new PR FIRST, capture its number, THEN closeCOMMENT
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpython/src/typechat/__init__.py12__all__ = [CODE
LOWpython/src/typechat/_internal/ts_conversion/__init__.py7__all__ = [CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWpython/examples/math/program.py108 # For now, we just pass in `Any` in place of `JsonProgram`.COMMENT
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpython/examples/music/client.py68CODE