Agent workspace built on Cloudflare Workers for creating documents, building apps, and running agents with your company’s context and systems.
This report summarizes scanner evidence for cloudflare/cloudflare-os, a TypeScript project with 11,634 GitHub stars. SynthScan examined 958,394 lines of code across 2036 source files, recording 1079 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 1.6 (Low 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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 795 finding(s).
Are imports declared and package/API names verified? 78 finding(s).
Are wrappers, guards, and repeated structures necessary? 502 finding(s).
Which changes need focused human review? 1079 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 1079 distinct pattern matches across 12 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 |
|---|---|---|---|---|
| MEDIUM | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 11204 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 11225 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-supabase/worker-configuration.d.ts | 11211 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-supabase/worker-configuration.d.ts | 11232 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ckages/gatekeeper-mcp-portal/worker-configuration.d.ts | 11192 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ckages/gatekeeper-mcp-portal/worker-configuration.d.ts | 11213 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/mcp-shared/worker-configuration.d.ts | 11192 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/mcp-shared/worker-configuration.d.ts | 11213 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-github/worker-configuration.d.ts | 11211 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-github/worker-configuration.d.ts | 11232 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-github/__tests__/workerd/worker.ts | 533 | // ── Hooks, with this object standing in for the Overseer ───────────── | COMMENT |
| MEDIUM | packages/gatekeeper-github/src/github-hooks.ts | 91 | // ── Driver ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-github/src/github-hooks.ts | 724 | // ── Webhook deliveries ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-x/worker-configuration.d.ts | 11211 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-x/worker-configuration.d.ts | 11232 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-email/worker-configuration.d.ts | 11211 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-email/worker-configuration.d.ts | 11232 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-zoominfo/worker-configuration.d.ts | 11211 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-zoominfo/worker-configuration.d.ts | 11232 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-notion/worker-configuration.d.ts | 11211 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/gatekeeper-notion/worker-configuration.d.ts | 11232 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/__tests__/google-hooks-upgrade.test.ts | 125 | // ── Under the release before this one ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/__tests__/google-hooks-upgrade.test.ts | 157 | // ── The upgrade ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/__tests__/google-hooks-upgrade.test.ts | 163 | // ── Under this tree's release ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-backend/worker-configuration.d.ts | 11210 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-backend/worker-configuration.d.ts | 11231 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/ChatInterface.tsx | 5307 | // ─── sidebar list content (reused in both modes) ────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/ChatInterface.tsx | 5556 | // ─── main render ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/workshop-frontend/src/GadgetEditor.tsx | 1397 | // ── reload UI when preview branch/code changes ──────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/workshop-frontend/src/GadgetEditor.tsx | 1407 | // ── user info ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/workshop-frontend/src/GadgetEditor.tsx | 1412 | // ── notification mute ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 80 | // ─── console log subscriber ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 104 | // ─── workpieces subscriber ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 165 | // ─── right-panel tabs ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 462 | // ─── component ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 476 | // ── toasts ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 479 | // ── core state ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 490 | // ── title editing ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 525 | // ── role gating ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 533 | // ── layout ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 644 | // ── code / chat state ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 712 | // ── workpiece selection ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 929 | // ── console log buffering ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1063 | // ── chat count / auto-switch ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1183 | // ── navigation helper ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1216 | // ── keep single-chat routing aligned with the current mode ────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1238 | // ── resize handle ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1282 | // ── workpiece list subscription ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1308 | // ── selected gadget stub ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1322 | // ── follow the agent across gadgets ───────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1348 | // ── workpiece picker handlers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1382 | // ── console log subscription ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1431 | // ── title save/cancel ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1449 | // ── back ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1454 | // ── delete ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1471 | // ── shared height tokens ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1475 | // ── error / loading states ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/GadgetEditor.tsx | 1552 | // ── always render the full two-pane edit layout; preview overlays on top ────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/OnboardingWizard.tsx | 41 | // ─── constants ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/workshop-frontend/src/OnboardingWizard.tsx | 64 | // ─── component ────────────────────────────────────────────────────────────────── | COMMENT |
| 146 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pnpm-workspace.yaml | 21 | # Exact: TypeScript 7 (tsgo). Type-checking runs on the native compiler. Build-time | COMMENT |
| LOW | pnpm-workspace.yaml | 41 | playwright: ^1.64.0 | COMMENT |
| LOW | plans/gatekeeper-kit.md | 381 | // expired — grant gone: provider-confirmed death (the account owns announcing it; delivery | COMMENT |
| LOW | plans/gatekeeper-kit.md | 421 | // credential, and it is the only authority that matters | COMMENT |
| LOW | plans/gatekeeper-kit.md | 441 | // after the notify await resolves a mid-notification reconnect | COMMENT |
| LOW | plans/gatekeeper-kit.md | 461 | // atomic triple under a non-"" identity (the source refuses a "" | COMMENT |
| LOW | plans/gatekeeper-kit.md | 481 | // "unavailable" or an internal "unadjudicated" answer → the | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKELETON.md | 341 | // Hook type — remove this section (and the HookController/HookInitiator/HookTargetMetadata | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKELETON.md | 421 | COMMENT | |
| LOW | .agents/skills/write-gatekeeper/SKELETON.md | 441 | type MyHookControllerImplProps = MyGatekeeperImplProps & MyHookProps; | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKELETON.md | 461 | } | COMMENT |
| LOW | scripts/map-concurrent.ts | 1 | // Runs an async operation over a list with a bounded number of them in flight. | COMMENT |
| LOW | scripts/relay-termination.test.ts | 241 | assert.ok(existsSync(cleaned), "the grandchild was SIGKILLed before it finished cleaning up"); | COMMENT |
| LOW | scripts/assert-workerd.ts | 1 | // Fails the suite unless it is genuinely executing inside workerd. | COMMENT |
| LOW | scripts/build-bundled-blueprints.test.ts | 141 | // Nothing was catching that. The module is gitignored, so `git status` stays clean, and the | COMMENT |
| LOW | scripts/with-timeout.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/with-timeout.ts | 21 | // other running task; were that child the watchdog, its tree would run on unbounded, and on Linux | COMMENT |
| LOW | scripts/clean-error-reporting-artifacts.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/build-gatekeeper-configurator.test.ts | 261 | const read = new Set( | COMMENT |
| LOW | scripts/pnpm-command.ts | 1 | // Spawn pnpm from a script without going through a shell. | COMMENT |
| LOW | scripts/run-dev-server.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/run-dev-server.ts | 221 | // The signal count is only an impatience shortcut on top of that grace deadline, and it is | COMMENT |
| LOW | scripts/run-dev-server.ts | 321 | // gatekeeper needs its `build:configurator` or `build:app:dev` task (declared in its | COMMENT |
| LOW | scripts/run-dev-server.ts | 401 | function bindingName(gk: Gatekeeper): string { | COMMENT |
| LOW | scripts/run-dev-server.ts | 501 | COMMENT | |
| LOW | scripts/run-dev-server.ts | 681 | }); | COMMENT |
| LOW | scripts/run-local.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/run-local.ts | 61 | // Known limitation, not worth the restructuring to fix: the pre-flight steps above are | COMMENT |
| LOW | scripts/vite.config.ts | 41 | // input, and racing whatever task owns that path. So the fixtures stay outside it: | COMMENT |
| LOW | scripts/relay-termination.ts | 1 | // Termination relay for the thin wrappers that exist only to spawn one child (`vp/run.ts`, | COMMENT |
| LOW | scripts/relay-termination.ts | 61 | const handler = () => onSignal(signal); | COMMENT |
| LOW | scripts/kill-process-tree.ts | 1 | // Signal a process and every descendant it has. | COMMENT |
| LOW | scripts/evals/eval-keys.ts | 1 | // Cache keys for Workshop eval results, read from git trees so no checkout is needed. The eval | COMMENT |
| LOW | scripts/release/upload-release.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/release/manifest-lib.ts | 1 | // Generates the release manifest: the contract between this repo's CI (which builds worker | COMMENT |
| LOW | scripts/release/manifest-lib.ts | 281 | "gatekeeper-mcp", // MCP OAuth uses dynamic client registration, not a static app | COMMENT |
| LOW | scripts/release/manifest-lib.ts | 301 | // 2. Nothing could distinguish two installs. A gatekeeper taking no inputs (see | COMMENT |
| LOW | scripts/release/manifest-lib.ts | 501 | // read from wrangler.jsonc): webFetch's toMarkdown conversion depends on it, and it is also | COMMENT |
| LOW | scripts/release/promote-release.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/release/build-release.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/release/build-release.ts | 41 | const FRONTEND_DIR = join(PACKAGES_DIR, "workshop-frontend"); | COMMENT |
| LOW | scripts/release/build-release.ts | 121 | // kill it. mapConcurrent makes this check before claiming an item, but an asset-serving bundle | COMMENT |
| LOW | scripts/release/build-release.ts | 161 | }); | COMMENT |
| LOW | scripts/release/build-release.ts | 241 | } | COMMENT |
| LOW | scripts/release/build-release.ts | 261 | // rejects with the abort reason, i.e. the root cause itself, which is what lets the failure summary | COMMENT |
| LOW | scripts/vp/concurrency.ts | 1 | // Picks the task concurrency for the `vp run` invocations this repo makes, from the machine it is | COMMENT |
| LOW | scripts/vp/concurrency.ts | 21 | // hang risk -- so memory, not CPU, caps the count on small machines: 8 GiB → 4, 16 GiB → 8, | COMMENT |
| LOW | scripts/vp/concurrency.ts | 41 | // formula, and the note says which of the sources the number came from, since a value that silently | COMMENT |
| LOW | scripts/vp/run.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/preview/staging-config.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/preview/preview.ts | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/preview/preview.ts | 21 | // Between tiers the next tier's `previews.services[].preview_id` is patched with the ids the | COMMENT |
| LOW | packages/gatekeeper-homeassistant/vite.config.ts | 1 | // Vite+ per-package settings. The build:configurator task definition is shared by all gatekeepers | COMMENT |
| LOW | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 10821 | returnRawResponse: true; | COMMENT |
| LOW | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 14121 | send(records: T[]): Promise<void>; | COMMENT |
| LOW | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 14241 | [I in keyof A]: Unstubify<A[I]>; | COMMENT |
| LOW | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 14261 | type MethodOrProperty<V> = V extends (...args: infer P) => infer R ? (...args: UnstubifyAll<P>) => Result<Awaited<R> | COMMENT |
| LOW | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 14281 | // Project-specific parameters used to inform types. | COMMENT |
| LOW | …ges/gatekeeper-homeassistant/worker-configuration.d.ts | 15461 | } | COMMENT |
| LOW | packages/gatekeeper-homeassistant/src/types.d.ts | 1 | // TypeScript interface for the Home Assistant gatekeeper. These types are exposed to gadgets | COMMENT |
| 392 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plans/gatekeeper-kit.md | 308 | export async function notifyCredentialsExpiredOnce( | CODE |
| LOW | plans/gatekeeper-kit.md | 310 | export function clearCredentialExpiryLatch(kv): void; | CODE |
| LOW | plans/gatekeeper-kit.md | 2358 | export function commitDetailsFromGitObject(oid: GitOid, payload: Uint8Array, | CODE |
| LOW | scripts/build-gatekeeper-configurator.test.ts | 61 | async function assertNoReportingArtifacts(directory: string): Promise<void> { | CODE |
| LOW | scripts/dev-server-config.ts | 5 | export function getWranglerPortFromBackendHost(backendHost: string): string | null { | CODE |
| LOW | scripts/kill-process-tree.ts | 120 | export async function killProcessTreeEscalating( | CODE |
| LOW | scripts/contribution-policy.ts | 109 | export function getContributionPolicyViolations(pullRequest: PolicyPullRequest): string[] { | CODE |
| LOW | scripts/contribution-policy.ts | 141 | export async function enforceContributionPolicy({ github, context, core }: { | CODE |
| LOW | scripts/preview/staging-config.ts | 291 | function backendGatekeeperServices(gatekeepers: string[], baseUrl: string): PreviewService[] { | CODE |
| LOW | scripts/preview/preview.ts | 498 | function patchPreviewServiceBindings( | CODE |
| LOW | packages/gatekeeper-homeassistant/src/homeassistant.ts | 802 | async function getResourceConfiguratorCreds(target: object): Promise<HomeAssistantCredentials> { | CODE |
| LOW | packages/gatekeeper-homeassistant/src/simulation.ts | 297 | export function sortActionsChronologically(actions: HomeAssistantAction[]): HomeAssistantAction[] { | CODE |
| LOW | packages/gatekeeper-mcp-portal/src/portal.ts | 207 | async function listAvailablePortalServers( | CODE |
| LOW | packages/gatekeeper-mcp-portal/src/config.ts | 55 | export function requirePortalServerVisible(env: Env, serverId: string): void { | CODE |
| LOW | packages/gatekeeper-mcp-portal/src/config.ts | 140 | export function portalCatalogValidationMode( | CODE |
| LOW | packages/gatekeeper-mcp-portal/src/config.ts | 206 | export function portalAuthRequiresReconnect( | CODE |
| LOW | packages/error-reporting/src/index.ts | 248 | export function normalizeFrontendErrorReport(input: unknown): FrontendErrorReportV1 | null { | CODE |
| LOW | packages/error-reporting/src/index.ts | 282 | export function extractFrontendFrameReport(value: unknown): FrontendFrameErrorReportV1 | null { | CODE |
| LOW | packages/mcp-shared/__tests__/schema-to-ts.test.ts | 68 | function expectTypeScriptToCompile(source: string): void { | CODE |
| LOW | packages/mcp-shared/__tests__/schema-to-ts.test.ts | 72 | function expectTypeScriptProgramToCompile(source: string): void { | CODE |
| LOW | packages/mcp-shared/src/scope.ts | 137 | export function requireCompleteCatalogForToolSelection(truncated: boolean): void { | CODE |
| LOW | packages/mcp-shared/src/scope.ts | 150 | export function validateToolScopeAgainstCatalog( | CODE |
| LOW | packages/gatekeeper-github/src/github.ts | 1013 | function commentTargetFromResponse(comment: GitHubPullRequestReviewCommentResponse): GitHubDiffCommentTarget { | CODE |
| LOW | packages/gatekeeper-github/src/github.ts | 1031 | function discussionCommentFromResponse(comment: GitHubIssueCommentResponse): GitHubDiscussionCommentEntry { | CODE |
| LOW | packages/gatekeeper-github/src/github.ts | 1043 | function submittedDiffCommentFromResponse(comment: GitHubPullRequestReviewCommentResponse): GitHubSubmittedDiffComment { | CODE |
| LOW | packages/gatekeeper-github/src/git-commits.ts | 102 | export function commitDetailsFromGitObject( | CODE |
| LOW | packages/gatekeeper-github/src/github-search.ts | 15 | export function assertIssueSearchResultsInRepo( | CODE |
| LOW | packages/gatekeeper-email/src/email.ts | 87 | function getSupportedResourcesList(env: Env): SupportedResource[] { | CODE |
| LOW | packages/gatekeeper-notion/src/notion-actions.ts | 327 | export function defaultPropertiesFromSchema(schema: NotionDatabaseSchema): Record<string, NotionPropertyValue> { | CODE |
| LOW | packages/gatekeeper-notion/src/notion-actions.ts | 495 | function normalizeAppendedMarkdown(markdown: string): string { | CODE |
| LOW | packages/gatekeeper-kit/src/preview-oauth.ts | 65 | function validatePreviewConfigurationUrl(url: URL, label: string): void { | CODE |
| LOW | packages/gatekeeper-kit/src/credential-expiry.ts | 50 | export async function notifyCredentialsExpiredOnce( | CODE |
| LOW | packages/gatekeeper-kit/src/credential-expiry.ts | 105 | export function clearCredentialExpiryLatch(kv: ExpiryLatchKv): void { | CODE |
| LOW | packages/gatekeeper-kit/src/git-objects.ts | 215 | export function commitDetailsFromGitObject( | CODE |
| LOW | …egration-tests/__tests__/workshop-prompt-cache.test.ts | 40 | function expectEachRequestExtendsThePrevious(requests: readonly unknown[]) { | CODE |
| LOW | …s/integration-tests/__tests__/workshop-sharing.test.ts | 86 | async function expectOpenDeniedAfterRestart( | CODE |
| LOW | …s/integration-tests/__tests__/workshop-sharing.test.ts | 107 | async function listShareLinksAfterRestart(username: string, workspaceId: string) { | CODE |
| LOW | packages/integration-tests/src/harness.ts | 255 | export function startTestGatekeeperHarness(options: { enableGadgetExecution?: boolean } = {}) | CODE |
| LOW | …ckages/workshop-backend/browser/browser-export-page.ts | 89 | export function getValidatedScreenshotClip(maxPixels: number) { | CODE |
| LOW | packages/workshop-backend/__tests__/fixtures.ts | 28 | export function makePreIndexActionStorage(mockStorage: DurableObjectStorage) { | CODE |
| LOW | …/workshop-backend/__tests__/restricted-actions.test.ts | 40 | function seedRestrictedObservation(impl: any, gatekeeperId: number, actionId: number): void { | CODE |
| LOW | …s/workshop-backend/scripts/import-bundled-blueprint.ts | 72 | function rejectIgnoredBlueprintPaths(name: string, files: Iterable<string>): void { | CODE |
| LOW | packages/workshop-backend/src/overseer.ts | 263 | function defaultBlueprintBindingTitle(record: GatekeeperRecord, bindingName?: string): string { | CODE |
| LOW | packages/workshop-backend/src/overseer.ts | 366 | function connectionTypeFromCreationSpec( | CODE |
| LOW | packages/workshop-backend/src/overseer.ts | 397 | function validateBlueprintScreenshotUpload(screenshot: BlueprintScreenshotUpload): BlueprintScreenshotUpload { | CODE |
| LOW | packages/workshop-backend/src/overseer.ts | 670 | export function sanitizeMessageFormatRefs( | CODE |
| LOW | packages/workshop-backend/src/admin-config.ts | 113 | export function deploymentOutputForBlueprint( | CODE |
| LOW | packages/workshop-backend/src/admin-config.ts | 336 | export function parseRestrictedWebFetchHosts(hosts: string[]): string[] { | CODE |
| LOW | packages/workshop-backend/src/admin-config.ts | 468 | export function formatInstanceInstructions(instructions: string): string { | CODE |
| LOW | packages/workshop-backend/src/anthropic-compaction.ts | 73 | export function supportsAnthropicCompaction(model: Model<Api>): boolean { | CODE |
| LOW | packages/workshop-backend/src/anthropic-compaction.ts | 88 | export async function requestAnthropicCompaction( | CODE |
| LOW | packages/workshop-backend/src/anthropic-compaction.ts | 129 | export function withAnthropicCompactionBlock( | CODE |
| LOW | packages/workshop-backend/src/agent.ts | 292 | export function makeStoredAssistantMessage(message: AssistantMessage): StoredAssistantMessage { | CODE |
| LOW | packages/workshop-backend/src/agent.ts | 929 | function formatCallableAgentPrompt({types, mainType}: SpawnCallableOptions): string { | CODE |
| LOW | packages/workshop-backend/src/agent.ts | 945 | export function formatMissingBlueprintBindings( | CODE |
| LOW | packages/workshop-backend/src/agent.ts | 1429 | export function rehydrateStoredAssistantMessage( | CODE |
| LOW | packages/workshop-backend/src/agent.ts | 1454 | function makeReplayAssistantMessage( | CODE |
| LOW | packages/workshop-backend/src/agent-compaction.ts | 180 | export function findProtectedFromSequence(messages: AiChatMessage[]): number | undefined { | CODE |
| LOW | packages/workshop-backend/src/blueprint-archive.ts | 132 | function encodeBlueprintArchivePrefix(metadata: BlueprintMetadata, contentLength: number): Uint8Array { | CODE |
| LOW | packages/workshop-backend/src/blueprint-archive.ts | 145 | export function buildBlueprintArchiveStream( | CODE |
| 236 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/gatekeeper-email/src/types.d.ts | 2 | /** Display name, e.g. "John Doe". Empty string if not provided. */ | COMMENT |
| LOW | packages/gatekeeper-email/src/types.txt | 2 | /** Display name, e.g. "John Doe". Empty string if not provided. */ | COMMENT |
| LOW | packages/workshop-backend/__tests__/code-change.test.ts | 472 | let c = content({ 1: { "f.txt": "placeholder" } }); | CODE |
| LOW⚡ | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1072 | "gateway.provider.test", admin => admin.testGatewayProvider(provider, "admin@example.com")); | CODE |
| LOW⚡ | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1074 | "gateway.model.test", admin => admin.testGatewayModel(modelId, "admin@example.com")); | CODE |
| LOW⚡ | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1076 | "gateway.model.test", admin => admin.testNewGatewayModel(model, "admin@example.com")); | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1097 | .toStrictEqual({ user: "admin@example.com" }); | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1246 | await expect(inDo(admin => admin.testGatewayProvider("ollama", "admin@example.com"))) | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1284 | const test = admin.testGatewayProvider("cloudflare", "admin@example.com"); | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1346 | .toStrictEqual({ user: "admin@example.com" }); | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1499 | await expect(inDo(admin => admin.testGatewayModel(id, "admin@example.com"))) | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1520 | const test = admin.testGatewayModel(GLM, "admin@example.com"); | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1570 | .toStrictEqual({ user: "admin@example.com" }); | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1696 | await expect(inDo(admin => admin.testNewGatewayModel(model, "admin@example.com"))) | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1709 | await expect(inDo(admin => admin.testNewGatewayModel(model, "admin@example.com"))) | CODE |
| LOW | …rkshop-backend/__tests__/admin-settings-models.test.ts | 1729 | const test = admin.testNewGatewayModel(STATED, "admin@example.com"); | CODE |
| LOW | packages/workshop-backend/src/worktree-binding.d.ts | 72 | /** Human-readable name, e.g. "Jane Doe". */ | COMMENT |
| LOW | packages/workshop-backend/src/worktree-binding.txt | 72 | /** Human-readable name, e.g. "Jane Doe". */ | COMMENT |
| LOW | …es/workshop-backend/src/storage-schema/user-storage.ts | 210 | id: "user@example.com", | CODE |
| LOW | packages/workshop-shared/src/gatekeeper.ts | 248 | /** User's display name, e.g. "John Doe". This is a non-unique name that is human-readable. */ | COMMENT |
| LOW | …urator-ui/src/runtime/HierarchyPicker.browser.test.tsx | 894 | await expect.element(search).toHaveAttribute("placeholder", "Search"); | CODE |
| LOW | …urator-ui/src/runtime/HierarchyPicker.browser.test.tsx | 899 | await expect.element(search).toHaveAttribute("placeholder", "Search Drive"); | CODE |
| LOW | …urator-ui/src/runtime/HierarchyPicker.browser.test.tsx | 1349 | await expect.element(search).toHaveAttribute("placeholder", "Search everything"); | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 59 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 82 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 665 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 700 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 733 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 815 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 824 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 926 | "placeholder": { | CODE |
| LOW | …es/gatekeeper-google/__tests__/slides-live-sample.json | 935 | "placeholder": { | CODE |
| LOW | …gatekeeper-google/__tests__/markdown-converter.test.ts | 786 | "Before ", { richLink: { title: "placeholder", uri: "https://example.com" } }, " after\n", | CODE |
| LOW | …s/gatekeeper-google/__tests__/slides-live-outline.json | 34 | "placeholder": { | CODE |
| LOW | …s/gatekeeper-google/__tests__/slides-live-outline.json | 51 | "placeholder": { | CODE |
| LOW | …s/gatekeeper-google/__tests__/slides-live-outline.json | 138 | "placeholder": { | CODE |
| LOW | …s/gatekeeper-google/__tests__/slides-live-outline.json | 192 | "placeholder": { | CODE |
| LOW | …s/gatekeeper-google/__tests__/slides-live-outline.json | 199 | "placeholder": { | CODE |
| LOW | …ges/gatekeeper-google/__tests__/slides-live-theme.json | 20 | "placeholder": { | CODE |
| LOW | …ges/gatekeeper-google/__tests__/slides-live-theme.json | 28 | "placeholder": { | CODE |
| LOW | …ges/gatekeeper-google/__tests__/slides-live-theme.json | 89 | "placeholder": { | CODE |
| LOW | …ges/gatekeeper-google/__tests__/slides-live-theme.json | 97 | "placeholder": { | CODE |
| LOW⚡ | packages/gatekeeper-google/src/blank-presentation.json | 205 | "placeholder": { | CODE |
| LOW⚡ | packages/gatekeeper-google/src/blank-presentation.json | 212 | "placeholder": { | CODE |
| LOW⚡ | packages/gatekeeper-google/src/blank-presentation.json | 219 | "placeholder": { | CODE |
| LOW⚡ | packages/gatekeeper-google/src/blank-presentation.json | 268 | "placeholder": { | CODE |
| LOW⚡ | packages/gatekeeper-google/src/blank-presentation.json | 275 | "placeholder": { | CODE |
| LOW⚡ | packages/gatekeeper-google/src/blank-presentation.json | 282 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 20 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 28 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 240 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 247 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 303 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 310 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 331 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 600 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 641 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 678 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 719 | "placeholder": { | CODE |
| LOW | packages/gatekeeper-google/src/blank-presentation.json | 764 | "placeholder": { | CODE |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/write-gatekeeper/SKILL.md | 36 | ### Step 1: Understand the external service | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKILL.md | 43 | ### Step 2: Design the Session types | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKILL.md | 65 | ### Step 3: STOP — Present API for review | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKILL.md | 73 | ### Step 4: Implement | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKILL.md | 91 | ### Step 5: Register | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKILL.md | 95 | ### Step 6: Add resource selection UI | COMMENT |
| LOW | .agents/skills/write-gatekeeper/SKILL.md | 146 | ### Step 7: STOP — Ask operator whether to proceed to phase 2 | COMMENT |
| LOW | packages/gatekeeper-github/README.md | 38 | ### Step 1: Create a GitHub OAuth App | COMMENT |
| LOW | packages/gatekeeper-github/README.md | 55 | ### Step 2: Generate a Client Secret | COMMENT |
| LOW | packages/gatekeeper-github/README.md | 62 | ### Step 3: Configure Your Local Environment | COMMENT |
| LOW | packages/gatekeeper-github/README.md | 85 | ### Step 5: Verify Setup | COMMENT |
| LOW | packages/gatekeeper-email/README.md | 95 | ### Step 1: Deploy the email gatekeeper and set env.BASE_URL | COMMENT |
| LOW | packages/gatekeeper-email/README.md | 109 | ### Step 2: Enable Email Routing | COMMENT |
| LOW | packages/gatekeeper-email/README.md | 114 | ### Step 3: Create an Email Worker Route | COMMENT |
| LOW | packages/gatekeeper-cloudflare/README.md | 118 | ### Step 1: Register the redirect URI | COMMENT |
| LOW | packages/gatekeeper-cloudflare/README.md | 138 | ### Step 2: Configure Your Local Environment | COMMENT |
| LOW | packages/gatekeeper-cloudflare/README.md | 168 | ### Step 4: Verify Setup | COMMENT |
| LOW | packages/gatekeeper-linear/src/linear.ts | 414 | // Step 1: user opens the connect link (<doId>/<nonce>) -> redirect to Linear's consent screen. | COMMENT |
| LOW | packages/gatekeeper-linear/src/linear.ts | 438 | // Step 2: Linear redirects back here with code + state. | COMMENT |
| LOW | packages/gatekeeper-google/README.md | 20 | ### Step 1: Create a Google Cloud Project | COMMENT |
| LOW | packages/gatekeeper-google/README.md | 30 | ### Step 2: Enable Required APIs | COMMENT |
| LOW | packages/gatekeeper-google/README.md | 61 | ### Step 3: Configure the OAuth Consent Screen | COMMENT |
| LOW | packages/gatekeeper-google/README.md | 98 | ### Step 4: Test Users | COMMENT |
| LOW | packages/gatekeeper-google/README.md | 108 | ### Step 5: Create OAuth Credentials | COMMENT |
| LOW | packages/gatekeeper-google/README.md | 120 | ### Step 6: Configure Your Local Environment | COMMENT |
| LOW | packages/gatekeeper-google/README.md | 146 | ### Step 8: Verify Setup | COMMENT |
| LOW | packages/gatekeeper-spotify/README.md | 25 | ### Step 1: Create a Spotify app | COMMENT |
| LOW | packages/gatekeeper-spotify/README.md | 42 | ### Step 2: Configure your local environment | COMMENT |
| LOW | packages/gatekeeper-spotify/README.md | 57 | ### Step 3: Add yourself as a user (development mode) | COMMENT |
| LOW | packages/gatekeeper-spotify/README.md | 67 | ### Step 4: Verify setup | COMMENT |
| LOW | packages/gatekeeper-gitlab/README.md | 45 | ### Step 1: Create a GitLab application | COMMENT |
| LOW | packages/gatekeeper-gitlab/README.md | 61 | ### Step 2: Configure your local environment | COMMENT |
| LOW | packages/gatekeeper-gitlab/README.md | 92 | ### Step 4: Verify setup | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | scripts/vitest-task.test.ts | 316 | assert.ok(config.run.tasks.test.dependsOn.includes("build:configurator")); | CODE |
| CRITICAL | packages/workshop-backend/src/overseer.ts | 11638 | let pending = [...this.impl.storage.actions.pendingByGatekeeper.get(gatekeeperId)]; | CODE |
| CRITICAL | packages/workshop-backend/src/overseer.ts | 11750 | this.impl.storage.actions.pendingByGatekeeper.get(action.gatekeeperId)); | CODE |
| CRITICAL | packages/workshop-backend/src/overseer.ts | 12238 | let response = this.impl.storage.gadgetResponseDeliveries.undeliveredByChatId.get(chatId); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | plans/x-gatekeeper.md | 507 | /** Set when an attached image was generated by AI; X then labels the post. */ | COMMENT |
| HIGH | packages/gatekeeper-x/src/types.d.ts | 215 | /** Set to true when an attached image was generated by AI; X then labels the post. */ | COMMENT |
| HIGH | packages/gatekeeper-x/src/types.txt | 215 | /** Set to true when an attached image was generated by AI; X then labels the post. */ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pnpm-workspace.yaml | 65 | # vitest-evals 0.17 declares `vitest >=4 <5`, but its harness, judges and reporter work unchanged | COMMENT |
| MEDIUM | packages/integration-tests/__tests__/google-fake.ts | 240 | return this.#push(harness, { | CODE |
| MEDIUM | packages/integration-tests/__tests__/google-fake.ts | 249 | return this.#push(harness, { | CODE |
| MEDIUM | packages/integration-tests/__tests__/google-fake.ts | 268 | async #push(harness: Harness, message: { attributes?: Record<string, string>; data: string }): Promise<number> { | CODE |
| MEDIUM | packages/workshop-backend/src/overseer.ts | 5949 | // seamless behavior the user opted into. | COMMENT |
| MEDIUM | …ckages/workshop-frontend/src/features/code/otClient.ts | 34 | // seamless; a destructive bump (revert / draft discard / turn abort) discards local edits | COMMENT |
| MEDIUM | .github/workflows/workshop-evals-pr.yml | 15 | # Eval CI and harness | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/gatekeeper-microsoft/scripts/office-render.ts | 110 | print(document.pageCount) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/workshop-backend/__tests__/ai-models.test.ts | 1649 | // A decision model binding is revoked as a language model binding is (see bindingConfig()). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/gatekeeper-linear/src/linear.ts | 414 | // Step 1: user opens the connect link (<doId>/<nonce>) -> redirect to Linear's consent screen. | COMMENT |
| LOW | packages/gatekeeper-linear/src/linear.ts | 438 | // Step 2: Linear redirects back here with code + state. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/workshop-backend/src/overseer.ts | 4715 | // TODO: Fix exception reporting it tail workers so we can remove this hack. | COMMENT |