A general-purpose AIGC video engine: script to finished film in one pipeline — dramas, ads, product videos, otome games, and more. | 通用 AIGC 视频引擎 —— 从剧本到成片一条流水线,漫剧、广告、电商、乙游皆可
This report summarizes scanner evidence for dramaclaw/dramaclaw, a Python project with 6,846 GitHub stars. SynthScan examined 930,418 lines of code across 2684 source files, recording 12394 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 13.9 (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.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 9774 finding(s).
Are imports declared and package/API names verified? 1029 finding(s).
Are wrappers, guards, and repeated structures necessary? 10842 finding(s).
Which changes need focused human review? 12394 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 12394 distinct pattern matches across 21 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 | …end/src/features/viewer-kit/three-d/sourceTransform.ts | 37 | export function normalizeDirectorWorldSourceTransform( | CODE |
| LOW | …end/src/features/viewer-kit/three-d/sourceTransform.ts | 53 | export function constrainSourceTransformForType( | CODE |
| LOW | …end/src/features/viewer-kit/three-d/sourceTransform.ts | 60 | export function sourceTransformFromLegacyWorld( | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/directorManifest.ts | 182 | export function directorPlacementSpaceForSource(source: { source_type?: DirectorWorldSourceType }): DirectorPlacementSpa | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/directorManifest.ts | 306 | export function buildStandaloneWorldManifest(params: { | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 156 | function blankDirectorWorldManifest(displayName: string): DirectorStageManifest { | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 261 | function normalizeLegacySourceOption( | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 317 | function directorSourcesFromManifest(manifest: DirectorStageManifest): NormalizedDirectorSource[] { | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 374 | function markerSnapshotFromOverlayItem(item: unknown, fallbackColor: string): MarkerSnapshot { | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 390 | function actorSnapshotFromOverlayItem(item: unknown, fallbackColor: string): MarkerSnapshot { | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 409 | function propSnapshotFromOverlayItem(item: unknown, fallbackColor: string): MarkerSnapshot { | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 417 | function stagingSnapshotFromOverlayItem(item: unknown, fallbackColor: string): MarkerSnapshot { | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 483 | function snapshotToDirectorObjectLayer( | CODE |
| LOW | …c/features/viewer-kit/three-d/ThreeDDirectorDialog.tsx | 678 | function sceneSnapshotForPersistence( | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/flyCamera.ts | 85 | export function createFlyCameraController(options: FlyCameraControllerOptions): FlyCameraController { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 87 | export function calculateFrameCaptureRect(input: { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 145 | export function shouldHideEditorOverlaysForCapture( | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 406 | export function resolveViewerDevicePixelRatio(rawDpr: number | null | undefined): number { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 413 | export function resolveSnapshotWorldTransform(snap: ThreeDMarkerSnapshot): { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 443 | export function sampleActorAnimationPoseFrame( | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 680 | function pickSplatOrientationEuler( | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 709 | function applySourceViewDefaultCamera(url: string): boolean { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 721 | function applyDefaultCameraForSplat(url: string): void { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 1172 | function instantiateActorProxyModel(color: pc.Color): pc.Entity { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 1212 | function setActorAnimationPlayback(actor: pc.Entity, playing: boolean): void { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 1258 | function raycastRayToHorizontalPlane(ray: pc.Ray, planeY: number): pc.Vec3 | null { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 1677 | function updateTranslateGizmoAttachment(): void { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 1719 | function syncMountedActorsForSelection(): void { | CODE |
| LOW | …nd/src/features/viewer-kit/three-d/engine/viewerApp.ts | 1862 | function getSelectionScreenPosition(): SelectionScreenPosition | null { | CODE |
| LOW | frontend/src/features/viewer-kit/pano/panoManifest.ts | 73 | export function legacyPanoInputToManifest(input: LegacyPanoManifestInput): PanoViewerManifest { | CODE |
| LOW | frontend/src/features/app/errorDialogEvents.ts | 28 | export function subscribeOpenGlobalErrorDialog( | CODE |
| LOW | …d/src/features/version-update/version-update-events.ts | 9 | export function subscribeOpenVersionUpdateDialog(listener: () => void) { | CODE |
| LOW | frontend/src/features/superchat/message-presentation.ts | 7 | export function resolveMessagePresentation({ | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 90 | function isInternalHiddenToolStatusName(name: string): boolean { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 138 | function freezoneCanvasCommandExecutionMode(): "manual_confirm" | "auto_execute" { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 200 | function updateCachedMessagesForScope( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 243 | function isFreezoneCanvasReferenceAttachmentLike(value: unknown): value is Record<string, unknown> { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 252 | function normalizeFreezoneCanvasReferenceAttachment(value: unknown): ChatAttachment | null { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 273 | function collectFreezoneCanvasReferenceAttachments(source: unknown, depth = 0): ChatAttachment[] { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 301 | function sameFreezoneCanvasReference(left: ChatAttachment, right: ChatAttachment): boolean { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 306 | function hydrateFreezoneCanvasReferences(message: ChatMessage, source: unknown): ChatMessage { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 543 | export function shouldKeepActiveTurnAfterScopeSync( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 643 | function hasEquivalentHistoryMessage( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 652 | function hasCompletedTurnInHistory( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 746 | function assistantPartsWithFinalText( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 781 | function assistantPartsForPersistence( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 811 | function isRealSkillStudioProgressStatusEvent(event: unknown): boolean { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 819 | function removeSkillStudioStatusParts( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 831 | function removeTransientSkillStudioStatusUiEvents(events: unknown[] | undefined): unknown[] | undefined { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 839 | function assistantPartsWithUiEvent( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 868 | function assistantPartsWithSequencedUiEvent( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 913 | function assistantPartsWithoutPart( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 927 | function mergeAssistantMessageParts( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 967 | function isRecoverableUiEventState(event: unknown): boolean { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 975 | function mergeRecoverableUiEventsFromCurrent(history: ChatMessage[], current: ChatMessage[]): ChatMessage[] { | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 1191 | function upsertServerAssistantMessage( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 1241 | function removeSkillStudioStatusForTurn( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 1268 | function removeAllSkillStudioStatusForTurn( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 1312 | function updatePendingSkillStudioDraftChunksFromToolFrame( | CODE |
| LOW | frontend/src/features/superchat/use-superchat.ts | 1371 | function hasSkillStudioDraftForTurn(messages: ChatMessage[], turnId: string): boolean { | CODE |
| 9123 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ce-allowlist.toml | 19 | # ── ee-terms 守栏豁免 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | ce-allowlist.toml | 80 | # ── banned-words 守栏豁免 ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 819 | // ── history (undo / redo) ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 845 | // ── duration probing (no history) ──────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 872 | // ── clip mutations (history-tracked) ───────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 1225 | // ── selected clip + playhead-relative source position ──────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 1346 | // ── 复制 / 粘贴 / 副本 ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 1431 | // ── snapping ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 1462 | // ── trim drag ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 1541 | // ── playhead seek / drag ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 1604 | // ── zoom ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …tend/src/features/canvas/compose/VideoComposeModal.tsx | 1614 | // ── export ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/features/canvas/application/imageData.ts | 244 | // ── 节点主体图:喂降采样副本 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/features/companion/petdex/petdex-pets.ts | 83 | // ─── 本地宠物目录 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/stores/save-status-store.ts | 77 | // ─── aggregation ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/stores/save-status-store.ts | 201 | // ─── scope key helpers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/skeletons.tsx | 32 | // ─── Episodes grid (4-col card grid mimicking the real list) ──────────────── | COMMENT |
| MEDIUM | frontend/src/components/skeletons.tsx | 53 | // ─── Tasks (vertical rows with status pill + metadata) ────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/skeletons.tsx | 100 | // ─── Detail pane skeleton (header + paragraph + grid of tiles) ────────────── | COMMENT |
| MEDIUM | …nd/src/components/episode/task-controller-provider.tsx | 75 | // ─── Public types ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/components/episode/task-controller-provider.tsx | 169 | // ─── Serialization ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/components/episode/task-controller-provider.tsx | 200 | // ─── Registry (mutable, ref-held) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/components/episode/task-controller-provider.tsx | 234 | // ─── Context ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nd/src/components/episode/task-controller-provider.tsx | 309 | // ─── Owner-internal helpers (used by useTaskController) ───────────────────── | COMMENT |
| MEDIUM | …_/components/episode/task-controller-provider.test.tsx | 21 | // ─── Module mocks ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …_/components/episode/task-controller-provider.test.tsx | 54 | // ─── serializeKey: pure key-dedup logic ──────────────────────────────────── | COMMENT |
| MEDIUM | …_/components/episode/task-controller-provider.test.tsx | 123 | // ─── isActiveStatus ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …_/components/episode/task-controller-provider.test.tsx | 138 | // ─── claimOwnership / releaseOwnership: deterministic ownership flow ────── | COMMENT |
| MEDIUM | …_/components/episode/task-controller-provider.test.tsx | 194 | // ─── claim/release propagate hasOwner into the snapshot ──────────────────── | COMMENT |
| MEDIUM | …_/components/episode/task-controller-provider.test.tsx | 284 | // ─── Integration tests: provider + useTaskController ─────────────────────── | COMMENT |
| MEDIUM | …nts/episode/beat-workbench/render-plan-dialog.test.tsx | 9 | // ─── react-i18next: return the key so assertions can read stable text ────── | COMMENT |
| MEDIUM | …nts/episode/beat-workbench/render-plan-dialog.test.tsx | 22 | // ─── sonner: capture toast fires ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …nts/episode/beat-workbench/render-plan-dialog.test.tsx | 31 | // ─── /lib/queries/render-plan: manual mutations with per-test handlers ───── | COMMENT |
| MEDIUM | frontend/src/hooks/use-task-controller.ts | 161 | // ─── Reconcile once against /tasks list (owner-only) ───────────────────── | COMMENT |
| MEDIUM | frontend/src/hooks/use-task-controller.ts | 267 | // ─── Stream (owner-only) ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/hooks/use-task-controller.ts | 411 | // ─── Logs rolling buffer (per-consumer; kept local) ────────────────────── | COMMENT |
| MEDIUM | frontend/src/hooks/use-task-controller.ts | 517 | // ─── Cancel mutation ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/lib/queries/projects.ts | 64 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/lib/queries/projects.ts | 70 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/ingest.tsx | 91 | // ─── form schema ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/ingest.tsx | 276 | // ─── helpers ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/ingest.tsx | 393 | // ─── subcomponents ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/ingest.tsx | 980 | // ─── main component ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 57 | // ─── style constants (aligned with characters page) ───────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 71 | // ─── helpers ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 156 | // ─── small components ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 236 | // ─── Top bar ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 276 | // ─── Style list item ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 340 | // ─── Preview box ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 383 | // ─── Detail panel ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 734 | // ─── Empty detail ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 774 | // ─── Create dialog ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/styles.tsx | 1049 | // ─── Main ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/episodes.tsx | 84 | // ─── stage descriptor (shared) ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/episodes.tsx | 96 | // ─── helpers ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/episodes.tsx | 116 | // ─── Episode header 2-column layout ───────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/episodes.tsx | 145 | // ─── Top bar ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/episodes.tsx | 537 | // ─── Episode list item ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/_app/projects.$project/episodes.tsx | 830 | // ─── Main ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/src/routes/_app/projects.$project/characters.lazy.tsx | 152 | // ─── constants ─────────────────────────────────────────────────────────────── | COMMENT |
| 443 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | deploy/patch_hermes_acp_toolsets.py | 13 | CODE | |
| LOW | deploy/verify_hermes_fork.py | 15 | CODE | |
| LOW | tests/test_p0_gray_execution_boundaries.py | 1 | CODE | |
| LOW | tests/test_fanout_partial_dispatch.py | 28 | CODE | |
| LOW | tests/test_freezone_mark_detect_egress.py | 19 | CODE | |
| LOW | tests/test_sketch_edit_execute_celery.py | 1 | CODE | |
| LOW | tests/test_hermes_events.py | 3 | CODE | |
| LOW | tests/test_chat_error_persistence.py | 1 | CODE | |
| LOW | tests/test_freezone_paths.py | 1 | CODE | |
| LOW | tests/test_superpower_model_config.py | 1 | CODE | |
| LOW | tests/test_frontend_i18n_scanner.py | 6 | CODE | |
| LOW | tests/test_api_sketch_pose_editor.py | 1 | CODE | |
| LOW | tests/test_p0g4t_service_operation_exclusion.py | 3 | CODE | |
| LOW | tests/test_hermes_worker_slot_construction.py | 13 | CODE | |
| LOW | tests/test_project_embedding_models.py | 1 | CODE | |
| LOW | tests/test_batch_render_video_actions_removed.py | 1 | CODE | |
| LOW | tests/test_api_freezone_projection.py | 1 | CODE | |
| LOW | tests/test_billing_fatal_predicate_invariant.py | 1 | CODE | |
| LOW | tests/test_brainclaw_control_context.py | 5 | CODE | |
| LOW | tests/test_cognee_pipeline_concurrency.py | 692 | CODE | |
| LOW | tests/test_media_relay.py | 1 | CODE | |
| LOW | tests/test_workflow_mcp.py | 1 | CODE | |
| LOW | tests/test_brainclaw_non_regression.py | 16 | CODE | |
| LOW | tests/test_freezone_canvas_generation_history.py | 9 | CODE | |
| LOW | tests/test_episode_patch_concurrency.py | 10 | CODE | |
| LOW | tests/conftest.py | 1 | CODE | |
| LOW | tests/test_p0g4l_scene_360_subprocess_egress.py | 17 | CODE | |
| LOW | tests/test_egress_dispatching_leak_diagnosability.py | 29 | CODE | |
| LOW | tests/test_p0g4g_ambient_egress_fallback.py | 12 | CODE | |
| LOW | tests/test_batch_render_removed.py | 1 | CODE | |
| LOW | tests/test_authz_error_http_contract.py | 15 | CODE | |
| LOW | tests/test_brainclaw_contract.py | 1 | CODE | |
| LOW | tests/test_p0g4a_model_core.py | 1 | CODE | |
| LOW | tests/test_task_envelope_consumer.py | 1 | CODE | |
| LOW | tests/test_api_auth_ports.py | 1 | CODE | |
| LOW | tests/test_hermes_operation_ledger.py | 8 | CODE | |
| LOW | tests/test_docker_persistence_config.py | 1 | CODE | |
| LOW | tests/test_freezone_canvas_lock_timing.py | 12 | CODE | |
| LOW | tests/test_p0g4c_video_egress.py | 3 | CODE | |
| LOW | tests/test_episode_optimizer_colors.py | 1 | CODE | |
| LOW | tests/test_scene_task_start_errors.py | 1 | CODE | |
| LOW | tests/test_media_thumbnails.py | 3 | CODE | |
| LOW | tests/test_api_generation_sketches.py | 1 | CODE | |
| LOW | tests/test_project_static_auth.py | 1 | CODE | |
| LOW | tests/test_p0g4k_grid_family_image_egress.py | 15 | CODE | |
| LOW | tests/test_api_asset_upload_offload.py | 1 | CODE | |
| LOW | tests/test_director_world_service.py | 1 | CODE | |
| LOW | tests/test_hermes_fork_pairing.py | 22 | CODE | |
| LOW | tests/test_evidence_metrics.py | 7 | CODE | |
| LOW | tests/test_p0_gray_shared_egress_seam.py | 1 | CODE | |
| LOW | tests/test_video_prompt_language.py | 1 | CODE | |
| LOW | tests/test_freezone_video_route_modes.py | 1 | CODE | |
| LOW | tests/test_api_gunicorn_worker.py | 8 | CODE | |
| LOW | tests/test_project_scope_split.py | 8 | CODE | |
| LOW | tests/test_task_runner_home_node_placement.py | 3 | CODE | |
| LOW | tests/test_task_runner_home_node_placement.py | 87 | CODE | |
| LOW | tests/test_task_runner_home_node_placement.py | 273 | CODE | |
| LOW | tests/test_content_adapter.py | 1 | CODE | |
| LOW | tests/test_api_render_settings.py | 1 | CODE | |
| LOW | tests/test_task_backend_queues.py | 9 | CODE | |
| 888 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_freezone_canvas_save_to_thread.py | 101 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_structured_builders.py | 2720 | except RuntimeError: | CODE |
| HIGH | tests/test_wysiwyg_consistency.py | 94 | except Exception: | CODE |
| HIGH | tests/test_wysiwyg_consistency.py | 106 | except Exception: | CODE |
| HIGH | tests/test_wysiwyg_consistency.py | 126 | except Exception: | CODE |
| HIGH | tests/test_wysiwyg_neo4j.py | 141 | except Exception: | CODE |
| HIGH | tests/test_wysiwyg_neo4j.py | 107 | except Exception: | CODE |
| HIGH | tests/test_wysiwyg_neo4j.py | 128 | except Exception: | CODE |
| HIGH | tests/test_wysiwyg_neo4j.py | 134 | except Exception: | CODE |
| HIGH | tests/test_wysiwyg_neo4j.py | 270 | except ImportError: | CODE |
| HIGH | tests/test_freezone_canvas_route_to_thread.py | 134 | except asyncio.CancelledError: | CODE |
| HIGH | scripts/backfill_thumbnails.py | 112 | except OSError: | CODE |
| HIGH | scripts/backfill_thumbnails.py | 141 | except OSError: | CODE |
| HIGH | .hermes/plugins/dramaclaw/__init__.py | 1921 | except Exception: | CODE |
| HIGH | .hermes/plugins/freezone/__init__.py | 5131 | except OSError: | CODE |
| HIGH | .hermes/plugins/freezone/__init__.py | 5178 | except OSError: | CODE |
| HIGH | .hermes/plugins/freezone/__init__.py | 5107 | except OSError: | CODE |
| HIGH | src/novelvideo/manual_shots.py | 83 | except (TypeError, ValueError): | CODE |
| HIGH | src/novelvideo/manual_shots.py | 209 | except (TypeError, ValueError): | CODE |
| HIGH | src/novelvideo/manual_shots.py | 216 | except (TypeError, ValueError): | CODE |
| HIGH | src/novelvideo/manual_shots.py | 483 | except OSError: | CODE |
| HIGH | src/novelvideo/manual_shots.py | 497 | except OSError: | CODE |
| HIGH | src/novelvideo/project_config.py | 278 | except FileNotFoundError: | CODE |
| HIGH | src/novelvideo/llm_instrumentation.py | 299 | except Exception: | CODE |
| HIGH | src/novelvideo/llm_instrumentation.py | 364 | except Exception: | CODE |
| HIGH | src/novelvideo/llm_instrumentation.py | 411 | except Exception: | CODE |
| HIGH | src/novelvideo/llm_instrumentation.py | 633 | except Exception: | CODE |
| HIGH | src/novelvideo/image_request_usage.py | 81 | except ValueError: | CODE |
| HIGH | src/novelvideo/stage_asset_tasks.py | 570 | except OSError: | CODE |
| HIGH | src/novelvideo/stage_asset_tasks.py | 578 | except OSError: | CODE |
| HIGH | src/novelvideo/stage_asset_tasks.py | 653 | except OSError: | CODE |
| HIGH | src/novelvideo/stage_asset_tasks.py | 658 | except OSError: | CODE |
| HIGH | src/novelvideo/stage_asset_tasks.py | 768 | except Exception: | CODE |
| HIGH | src/novelvideo/brainclaw_control_capability.py | 243 | except FileExistsError: | CODE |
| HIGH | src/novelvideo/model_gateway_settings.py | 696 | except RuntimeError: | CODE |
| HIGH | src/novelvideo/cognee/config.py | 407 | except Exception: | CODE |
| HIGH | src/novelvideo/cognee/config.py | 421 | except Exception: | CODE |
| HIGH | src/novelvideo/cognee/config.py | 655 | except Exception: | CODE |
| HIGH | src/novelvideo/cognee/config.py | 983 | except Exception: | CODE |
| HIGH | src/novelvideo/cognee/config.py | 108 | except Exception: | CODE |
| HIGH | src/novelvideo/cognee/config.py | 952 | except Exception: | CODE |
| HIGH | src/novelvideo/cognee/config.py | 959 | except Exception: | CODE |
| HIGH | src/novelvideo/cognee/ladybug_access.py | 236 | except BaseException: | CODE |
| HIGH | src/novelvideo/chat/backend_sdk.py | 949 | except Exception: | CODE |
| HIGH | src/novelvideo/chat/service.py | 1609 | except (OSError, TypeError, ValueError, json.JSONDecodeError): | CODE |
| HIGH | src/novelvideo/chat/service.py | 3581 | except asyncio.CancelledError: | CODE |
| HIGH | src/novelvideo/chat/hermes_events.py | 77 | except json.JSONDecodeError: | CODE |
| HIGH | src/novelvideo/chat/hermes_egress.py | 164 | except Exception: | CODE |
| HIGH | src/novelvideo/chat/hermes_workspace.py | 509 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/hermes_workspace.py | 517 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/hermes_workspace.py | 560 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/hermes_workspace.py | 602 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/hermes_workspace.py | 903 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/hermes_workspace.py | 1367 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/dramaclaw_mcp.py | 808 | except ValidationError: | CODE |
| HIGH | src/novelvideo/chat/message_repository.py | 37 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/codex_app_server.py | 352 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/codex_app_server.py | 252 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/codex_app_server.py | 320 | except OSError: | CODE |
| HIGH | src/novelvideo/chat/hermes_sdk.py | 1563 | except Exception: | CODE |
| 101 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_egress_dispatching_leak_diagnosability.py | 5 | except Exception: | STRING |
| LOW | tests/test_egress_dispatching_leak_diagnosability.py | 8 | except Exception: | STRING |
| LOW⚡ | tests/test_wysiwyg_consistency.py | 126 | except Exception: | CODE |
| LOW⚡ | tests/test_wysiwyg_consistency.py | 468 | except Exception as e: | CODE |
| LOW | tests/test_wysiwyg_consistency.py | 94 | except Exception: | CODE |
| LOW | tests/test_wysiwyg_consistency.py | 106 | except Exception: | CODE |
| LOW⚡ | tests/test_wysiwyg_neo4j.py | 128 | except Exception: | CODE |
| LOW⚡ | tests/test_wysiwyg_neo4j.py | 134 | except Exception: | CODE |
| LOW⚡ | tests/test_wysiwyg_neo4j.py | 141 | except Exception: | CODE |
| LOW | tests/test_wysiwyg_neo4j.py | 107 | except Exception: | CODE |
| LOW | tests/test_wysiwyg_neo4j.py | 495 | except Exception as e: | CODE |
| LOW | examples/seedance2_fast_demo.py | 592 | except Exception as exc: | CODE |
| LOW | scripts/migrate_docker_output.py | 87 | except Exception: | CODE |
| LOW | scripts/convert_canvas_voice_refs.py | 309 | except Exception as exc: # noqa: BLE001 - 一个项目失败不该中断整批 | CODE |
| LOW | scripts/setup-hermes.sh | 42 | except Exception: | CODE |
| LOW | scripts/check_workflow_agent_contracts.py | 428 | except Exception as exc: | CODE |
| LOW | scripts/check_workflow_agent_contracts.py | 432 | except Exception as exc: | CODE |
| LOW | scripts/check_ce_port_closure.py | 69 | except Exception as exc: # noqa: BLE001 — 启动失败本身即闭合失败 | CODE |
| LOW | scripts/check_ce_port_closure.py | 81 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 826 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 833 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 840 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 847 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 863 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 912 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 923 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 1113 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 1122 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 1346 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 1354 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 1362 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 1478 | except Exception as exc: | CODE |
| LOW⚡ | .hermes/plugins/dramaclaw/__init__.py | 1490 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 284 | except Exception: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 897 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 953 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1016 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1032 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1075 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1084 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1097 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1196 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1214 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1237 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1271 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1295 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1328 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1379 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1396 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1455 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1502 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1524 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1641 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1707 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1757 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1844 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1921 | except Exception: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 2002 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 2092 | except Exception as exc: | CODE |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 2190 | except Exception as exc: | CODE |
| 734 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_episode_patch_concurrency.py | 320 | CODE | |
| LOW | tests/test_p0g4c_video_egress.py | 213 | CODE | |
| LOW | tests/test_skill_import_capabilities.py | 59 | CODE | |
| LOW | tests/test_freezone_image_backend.py | 68 | CODE | |
| LOW | tests/test_queue_kind_literal_lanes.py | 202 | CODE | |
| LOW | tests/test_workflow_plan.py | 2274 | CODE | |
| LOW | tests/test_wysiwyg_consistency.py | 140 | CODE | |
| LOW | tests/test_wysiwyg_consistency.py | 288 | CODE | |
| LOW | tests/test_api_model_credit_cost.py | 29 | CODE | |
| LOW | tests/test_task_backend_registry.py | 39 | CODE | |
| LOW | tests/test_wysiwyg_neo4j.py | 80 | CODE | |
| LOW | tests/test_wysiwyg_neo4j.py | 159 | CODE | |
| LOW | tests/test_wysiwyg_neo4j.py | 340 | CODE | |
| LOW | tests/test_feature_models_cover_official_defaults.py | 25 | CODE | |
| LOW | tests/test_chat_service_user_agent_scope.py | 1656 | CODE | |
| LOW | tests/test_chat_service_user_agent_scope.py | 2362 | CODE | |
| LOW | tests/test_chat_service_user_agent_scope.py | 1682 | CODE | |
| LOW | tests/ports/test_registry.py | 344 | CODE | |
| LOW | scripts/check_frontend_i18n.py | 50 | CODE | |
| LOW | scripts/check_env_config.py | 321 | CODE | |
| LOW | scripts/check_env_config.py | 426 | CODE | |
| LOW | scripts/check_env_config.py | 474 | CODE | |
| LOW | scripts/backfill_thumbnails.py | 54 | CODE | |
| LOW | scripts/backfill_thumbnails.py | 94 | CODE | |
| LOW | scripts/lint_ce_imports.py | 85 | CODE | |
| LOW | scripts/lint_ce_imports.py | 116 | CODE | |
| LOW | scripts/check_workflow_agent_contracts.py | 78 | CODE | |
| LOW | scripts/check_workflow_agent_contracts.py | 117 | CODE | |
| LOW | scripts/analyze_hermes_requests.py | 38 | CODE | |
| LOW | scripts/analyze_hermes_requests.py | 92 | CODE | |
| LOW | scripts/check_dependency_licenses.py | 83 | CODE | |
| LOW | scripts/compliance/generate_p0b_artifacts.py | 293 | CODE | |
| LOW | scripts/benchmarks/skill_import_search.py | 130 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 554 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 748 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 762 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1573 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1645 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1761 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 1848 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 2006 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 2212 | CODE | |
| LOW | .hermes/plugins/dramaclaw/__init__.py | 570 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 518 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 2429 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 2889 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 3562 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 3817 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 3973 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 4140 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 4578 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 5308 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 6541 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 7301 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 7387 | CODE | |
| LOW | .hermes/plugins/freezone/__init__.py | 7477 | CODE | |
| LOW | src/novelvideo/brainclaw_outcome_runtime.py | 98 | CODE | |
| LOW | src/novelvideo/release_notes.py | 73 | CODE | |
| LOW | src/novelvideo/release_notes.py | 119 | CODE | |
| LOW | src/novelvideo/release_notes.py | 188 | CODE | |
| 347 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_chat_error_persistence.py | 12 | '({"provider_name":null})' | CODE |
| HIGH | tests/test_p0g4c_video_egress.py | 1455 | return '{"type":"executing","data":{"prompt_id":"prompt-1","node":null}}' | CODE |
| HIGH | tests/test_chat_session_registry.py | 87 | assert codex_scope_key("", **options) == '["main","home",null,"main-v1"]' | CODE |
| HIGH | tests/test_chat_session_registry.py | 104 | == '["other","project","project-a",null,"canvas-v2"]' | CODE |
| HIGH⚡ | tests/test_html_artifacts.py | 394 | @pytest.mark.parametrize('payload', ['[]', '{"version": 1}', '{"file": null}', '{']) | CODE |
| HIGH⚡ | tests/test_chat_service_user_agent_scope.py | 970 | assert chat_service._codex_scope_key("") == f'["main","home",null,"{protocol}"]' | CODE |
| HIGH | tests/test_chat_service_user_agent_scope.py | 836 | f'["main","home",null,"{chat_service._CODEX_THREAD_PROTOCOL_VERSION}"]': ( | CODE |
| HIGH | src/novelvideo/chat/canvas_outcome.py | 15 | "{\"bridge_key\":\"actual returned key\",\"revision\":null}, or " | CODE |
| HIGH | src/novelvideo/chat/canvas_outcome.py | 16 | "{\"bridge_key\":null,\"revision\":actual_returned_integer} for direct apply. " | CODE |
| HIGH⚡ | src/novelvideo/seedance2_i2v/character_voice_storage.py | 337 | stream: null, | CODE |
| HIGH⚡ | src/novelvideo/seedance2_i2v/character_voice_storage.py | 338 | recorder: null, | CODE |
| HIGH⚡ | src/novelvideo/seedance2_i2v/character_voice_storage.py | 385 | this.stream = null; | CODE |
| HIGH⚡ | src/novelvideo/seedance2_i2v/character_voice_storage.py | 386 | this.recorder = null; | CODE |
| HIGH⚡ | src/novelvideo/seedance2_i2v/character_voice_storage.py | 391 | if (this.recorder && this.recorder.state !== 'inactive') this.recorder.stop(); | CODE |
| HIGH⚡ | src/novelvideo/seedance2_i2v/character_voice_storage.py | 393 | this.stream = null; | CODE |
| HIGH⚡ | src/novelvideo/seedance2_i2v/character_voice_storage.py | 394 | this.recorder = null; | CODE |
| HIGH | src/novelvideo/seedance2_i2v/character_voice_storage.py | 358 | if (event.data && event.data.size > 0) this.chunks.push(event.data); | CODE |
| HIGH | src/novelvideo/seedance2_i2v/character_voice_storage.py | 358 | if (event.data && event.data.size > 0) this.chunks.push(event.data); | CODE |
| HIGH | src/novelvideo/director_world/block_world_builder.py | 90 | if (value == null) { | CODE |
| HIGH | src/novelvideo/director_world/block_world_builder.py | 104 | operations.push(op); | CODE |
| HIGH | src/novelvideo/director_world/block_world_builder.py | 123 | undefined, | CODE |
| HIGH | src/novelvideo/director_world/block_world_builder.py | 135 | if (args.length === 6 && typeof args[5] === 'string') { | CODE |
| HIGH | src/novelvideo/director_world/block_world_builder.py | 188 | return undefined; | CODE |
| HIGH | src/novelvideo/director_world/block_world_builder.py | 214 | process.stderr.write((error && error.stack) ? error.stack : String(error)); | CODE |
| HIGH | src/novelvideo/director_world/stage_manifest.py | 192 | # active field is null, so fall back to the available concrete source. | COMMENT |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 17 | "pano_path": "pano_360.png" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 20 | | "master_sharp.sog" | "reverse_sharp.sog" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 21 | "pano_ply_path": "pano_depth.sog" | "pano_sharp_merged.sog" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 22 | "pano_depth_ply_path": "pano_depth.sog" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 23 | "master_ply_path": "master_sharp.sog" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 24 | "reverse_ply_path": "reverse_sharp.sog" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 26 | | "custom.ksplat" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 27 | "collision_glb_path": "scene.collision.glb" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 28 | "voxel_json_path": "scene.voxel.json" | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 31 | "pano_sharp_args": {...} | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 35 | } | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 36 | "single_face_sharp_args": {...} | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 37 | "master_sharp_args": {...} | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 38 | "reverse_sharp_args": {...} | null, | STRING |
| HIGH⚡ | src/novelvideo/director_world/stage_manifest.py | 39 | "scene_360_args": {...} | null, | STRING |
| HIGH | src/novelvideo/freezone/jobs.py | 1922 | "duration": 数字秒或 null, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_p0g4l_scene_360_subprocess_egress.py | 560 | def update_progress_for_project(self, *_args, **_kwargs) -> None: | CODE |
| LOW⚡ | tests/test_p0g4c_video_egress.py | 1659 | def update_progress_for_project(self, *_args, **_kwargs) -> None: | CODE |
| LOW | tests/test_p0g4c_video_egress.py | 1536 | def update_progress_for_project(self, *_args, **_kwargs) -> None: | CODE |
| LOW⚡ | tests/test_p0_gray_shared_egress_seam.py | 20 | def update_progress_for_project(self, *_args, **_kwargs) -> None: | CODE |
| LOW | tests/test_p0_gray_shared_egress_seam.py | 342 | def update_progress_for_project(self, *_args, **_kwargs) -> None: | CODE |
| LOW | tests/test_p0_gray_shared_egress_seam.py | 430 | def update_progress_for_project(self, *_args, **_kwargs) -> None: | CODE |
| LOW⚡ | tests/test_task_runner_home_node_placement.py | 148 | def update_progress_for_project(self, *_args, **kwargs) -> None: | CODE |
| LOW | tests/test_content_adapter.py | 115 | async def update_episode(self, episode_number: int, **updates) -> None: | CODE |
| LOW | tests/test_task_runner_state_dir.py | 17 | def update_progress_for_project(self, *args, **kwargs) -> None: | CODE |
| LOW⚡ | tests/test_p0g4i_freezone_leaf_classification.py | 117 | def update_progress_for_project(self, *_args, **_kwargs) -> None: | CODE |
| LOW | tests/test_task_script_runner_store_lifecycle.py | 13 | def update_progress_for_project(self, *args, **kwargs) -> None: | CODE |
| LOW | tests/test_asset_compiler_prop_planning.py | 47 | async def update_episode(self, episode_number: int, **updates) -> None: | STRING |
| LOW | tests/test_seedance2_panel_voice_offload.py | 18 | async def update_beat_asset(self, **kwargs) -> None: | CODE |
| LOW | tests/test_seedance2_panel_voice_offload.py | 227 | async def update_beat_asset(self, **kwargs) -> None: | CODE |
| LOW | tests/test_seedance2_panel_voice_offload.py | 270 | async def update_beat_asset(self, **kwargs) -> None: | CODE |
| LOW | tests/test_seedance2_panel_voice_offload.py | 770 | async def update_beat_asset(self, **kwargs) -> None: | CODE |
| LOW | tests/test_seedance2_panel_voice_offload.py | 818 | async def update_beat_asset(self, **kwargs) -> None: | CODE |
| LOW⚡ | tests/test_task_timeout.py | 21 | def update_progress_for_project(self, *_args, **kwargs) -> None: | CODE |
| LOW | tests/contract/test_m08_chat_agent.py | 30 | def _set_task_signing_env(monkeypatch) -> None: | CODE |
| LOW | scripts/compliance/generate_p0b_artifacts.py | 700 | def update_readme_notice_reference() -> None: | CODE |
| LOW | src/novelvideo/sqlite_store.py | 65 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/novelvideo/sqlite_store.py | 907 | async def update_character(self, name: str, **updates) -> None: | CODE |
| LOW | src/novelvideo/sqlite_store.py | 2018 | async def update_episode(self, episode_number: int, **updates) -> None: | CODE |
| LOW | src/novelvideo/sqlite_store.py | 2399 | async def set_sketch_colors(self, episode_number: int, colors: dict) -> None: | CODE |
| LOW | src/novelvideo/llm_instrumentation.py | 63 | def set_project_context(project_id: Optional[str]) -> None: | CODE |
| LOW | src/novelvideo/media_model_request_schema.py | 702 | def _set_path(target: dict[str, Any], path: str, value: Any) -> None: | CODE |
| LOW | src/novelvideo/task_state.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/novelvideo/task_state.py | 1756 | def set_task_manager(manager: Optional[TaskStateManager]) -> None: | CODE |
| LOW | src/novelvideo/stage_asset_tasks.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/novelvideo/structured_builders.py | 263 | def _settle_narrator(store: Any, appearances: dict) -> None: | CODE |
| LOW | src/novelvideo/i18n_message.py | 26 | __all__ = [ | CODE |
| LOW⚡ | src/novelvideo/model_gateway_settings.py | 234 | def set_model_gateway_mode(mode: str) -> None: | CODE |
| LOW⚡ | src/novelvideo/model_gateway_settings.py | 238 | def set_custom_llm_mode(mode: str) -> None: | CODE |
| LOW | src/novelvideo/ui/__init__.py | 17 | __all__ = ["run_nicegui_app"] | CODE |
| LOW⚡ | src/novelvideo/cognee/store.py | 1550 | async def update_character(self, name: str, **updates) -> None: | CODE |
| LOW | src/novelvideo/cognee/store.py | 1698 | async def update_episode(self, episode_number: int, **updates) -> None: | CODE |
| LOW | src/novelvideo/cognee/store.py | 1754 | async def set_sketch_colors(self, episode_number: int, colors: dict) -> None: | CODE |
| LOW | src/novelvideo/cognee/config.py | 68 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/novelvideo/cognee/config.py | 388 | def _set_or_clear_env(key: str, value: str) -> None: | CODE |
| LOW | src/novelvideo/cognee/concurrency.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/novelvideo/cognee/__init__.py | 38 | __all__ = [ | CODE |
| LOW | src/novelvideo/chat/backend_sdk.py | 18 | __all__ = [ | CODE |
| LOW⚡ | src/novelvideo/chat/service.py | 2370 | def _set_active_agent_session_id(username: str, backend: str, thread_id: str) -> None: | CODE |
| LOW | src/novelvideo/chat/service.py | 1827 | def _set_setting(conn: sqlite3.Connection, key: str, value: str) -> None: | CODE |
| LOW | src/novelvideo/chat/service.py | 2385 | def _set_claude_session_id(username: str, project: str, session_id: str) -> None: | CODE |
| LOW | src/novelvideo/chat/service.py | 3898 | async def _settle_turn_operation() -> None: | CODE |
| LOW | src/novelvideo/chat/hermes_pool.py | 1343 | __all__ = [ | CODE |
| LOW | src/novelvideo/chat/hermes_egress.py | 238 | __all__ = [ | CODE |
| LOW | src/novelvideo/chat/director_auto.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/novelvideo/chat/hermes_workspace.py | 1371 | __all__ = [ | STRING |
| LOW | src/novelvideo/chat/hermes_sdk.py | 1579 | __all__ = ["HermesSdkClient", "HermesSdkThread", "HermesSessionUnavailableError"] | CODE |
| LOW | src/novelvideo/security/operator_auth.py | 18 | __all__ = ["get_prompt_export_password"] | CODE |
| LOW | src/novelvideo/security/__init__.py | 20 | __all__ = [ | CODE |
| LOW | src/novelvideo/security/project_storage.py | 180 | __all__ = [ | CODE |
| LOW | src/novelvideo/seedance2_i2v/panel_service.py | 1187 | __all__ = [ | CODE |
| LOW | src/novelvideo/seedance2_i2v/__init__.py | 26 | __all__ = [ | CODE |
| LOW | src/novelvideo/seedance2_i2v/voice_reference_service.py | 270 | __all__ = [ | CODE |
| LOW | src/novelvideo/workflows/__init__.py | 12 | __all__ = [ | CODE |
| LOW | src/novelvideo/workflows/script_writing.py | 51 | __all__ = [ | CODE |
| LOW | src/novelvideo/agents/__init__.py | 10 | __all__ = [ | CODE |
| 63 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ce-allowlist.toml | 1 | # 守栏统一白名单(豁免清单)。 | COMMENT |
| LOW | docker-compose.brainclaw-evidence.yml | 1 | # DramaClaw with the BrainClaw evidence plane wired. | COMMENT |
| LOW | .gitleaks.toml | 1 | # gitleaks 配置 — dramaclaw-ce | COMMENT |
| LOW | frontend/scripts/build-public-mirror.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | frontend/src/main.tsx | 41 | // hooks that need freshness (tasks, SSE-driven stages) either set | COMMENT |
| LOW | frontend/src/features/canvas/ui/NodeActionToolbar.tsx | 1401 | // nodes still need access to **spawn-style** edit tools (relight / | COMMENT |
| LOW | …/src/features/canvas/ui/asset-board/AssetBoardView.tsx | 221 | // 打开时把节点 id 传给顶栏 → 自动切到音频标签并高亮该 chip;左栏则退回可切换的文本 | COMMENT |
| LOW | frontend/src/features/canvas/nodes/VideoNode.tsx | 1581 | id, | COMMENT |
| LOW | frontend/src/features/canvas/nodes/VideoNode.tsx | 1721 | }, [ | COMMENT |
| LOW | frontend/src/features/canvas/nodes/AudioNode.tsx | 261 | // 节点挂载后若没有显式音色,则拉一次音色库 references 并落到第一条。 | COMMENT |
| LOW | …features/canvas/nodes/shared/useImageGenerationForm.ts | 201 | const [referenceErrorsOpen, setReferenceErrorsOpen] = useState(false); | COMMENT |
| LOW | …d/src/features/canvas/nodes/shared/videoFormOptions.ts | 21 | "21:9", | COMMENT |
| LOW | frontend/src/features/canvas/application/matteWorker.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …nd/src/features/canvas/application/resumeGeneration.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …rc/features/canvas/application/videoStoryNormalizer.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/features/canvas/application/imageData.ts | 201 | // fetched with CORS, otherwise the canvas taints and export throws. This | COMMENT |
| LOW | frontend/src/features/canvas/application/imageData.ts | 241 | return hash ? `${busted}#${hash}` : busted; | COMMENT |
| LOW | …rc/features/canvas/infrastructure/freezoneAiGateway.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/features/canvas/domain/nodeRegistry.ts | 701 | // DOWNSTREAM_TARGET_WHITELIST 一起,是建边规则的单一事实来源:UI 层(连线菜单 / | COMMENT |
| LOW | …nd/src/features/canvas/domain/cameraMovementPresets.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/features/canvas/domain/storyboardGroup.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/features/freezone/AssetLibraryBrowser.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/features/freezone/useCanvasSync.ts | 741 | ); | COMMENT |
| LOW | frontend/src/features/freezone/useCanvasSync.ts | 761 | const statusRef = useRef<CanvasSyncStatus>("loading"); | COMMENT |
| LOW | frontend/src/features/freezone/useCanvasSync.ts | 1241 | // | COMMENT |
| LOW | frontend/src/features/freezone/useCanvasSync.ts | 1261 | // 这一次挂载的节点先出 shell,再由升级队列每帧 3 个补成完整组件。 | COMMENT |
| LOW | frontend/src/stores/canvasStore.ts | 3121 | if (!enclosing) { | COMMENT |
| LOW | …/features/canvas/video-node-generation-matrix.test.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …s__/features/canvas/catalog-image-model-params.test.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …eatures/canvas/image-gen-node-context-palette.test.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …atures/canvas/asset-board-generating-progress.test.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …atures/canvas/catalog-image-model-mode-wiring.test.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …/features/canvas/image-node-generation-matrix.test.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …ts__/features/canvas/natural-size-record-write.test.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …_/components/episode/task-controller-provider.test.tsx | 281 | }); | COMMENT |
| LOW | …sode/beat-workbench/render-plan-partial-retry.test.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | …s__/lib/queries/sketches-missing-manual-retry.test.tsx | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/hooks/use-task-controller.ts | 101 | // fresh object refs per render. | COMMENT |
| LOW | frontend/src/hooks/use-task-controller.ts | 121 | // registry entry. This is intentional — we want `isOwner` to flip during | COMMENT |
| LOW | frontend/src/hooks/use-task-controller.ts | 201 | if (tasksRes === undefined) return; | COMMENT |
| LOW | frontend/src/lib/mention-markers.ts | 21 | return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); | COMMENT |
| LOW | frontend/src/lib/audioTranscode.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/lib/version-update-watch.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/lib/dom-reconciliation-guard.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/lib/app-router.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/lib/media-url.ts | 1 | // SPDX-License-Identifier: Elastic-2.0 | COMMENT |
| LOW | frontend/src/lib/media-url.ts | 61 | } | COMMENT |
| LOW | tests/sandbox_linux_check.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/sandbox_smoke.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/test_transport_retry_disabled.py | 301 | assert built, "the gateway never built a transport" | COMMENT |
| LOW | scripts/setup-hermes.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | src/novelvideo/config.py | 1081 | # 竖屏 Panel 模式(每格竖屏,适合 I2V): | COMMENT |
| LOW | src/novelvideo/structured_extraction.py | 981 | COMMENT | |
| LOW | src/novelvideo/chat/service.py | 821 | # Skill Studio authors catalog configuration. Media words inside a Skill | COMMENT |
| LOW | src/novelvideo/agents/video_prompt_builder.py | 421 | # ============================================================================= | COMMENT |
| LOW | src/novelvideo/utils/thumbnails.py | 41 | from typing import Optional | COMMENT |
| LOW | src/novelvideo/utils/thumbnails.py | 61 | # 5504x3072 source from 16.9MP of decode to 1.4MP. Nodes are shown at | COMMENT |
| LOW | src/novelvideo/utils/thumbnails.py | 81 | # Two independent ceilings, because neither one implies the other. A 200MB TIFF | COMMENT |
| LOW | src/novelvideo/utils/thumbnails.py | 321 | raise _ThumbnailDeclined | COMMENT |
| LOW | src/novelvideo/utils/thumbnails.py | 361 | # Preserve exact source freshness where supported. Object-store FUSE | COMMENT |
| 7 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_freezone_mark_detect_egress.py | 0 | echoes the caller's identity back, like both production implementations (ee `authz/port.py:169`, ce `ports/local/__init_ | STRING |
| HIGH | tests/test_chat_ws_project_egress.py | 0 | echoes the caller's identity back, like both production implementations (ee `authz/port.py:169`, ce `ports/local/__init_ | STRING |
| HIGH | tests/test_chat_ws_home_egress.py | 0 | echoes the caller's identity back, like both production implementations (ee `authz/port.py:169`, ce `ports/local/__init_ | STRING |
| HIGH | src/novelvideo/model_gateway_settings.py | 0 | create table if not exists chat_settings ( key text primary key, value text not null, updated_at text not null ) | STRING |
| HIGH | src/novelvideo/chat/store.py | 0 | create table if not exists chat_settings ( key text primary key, value text not null, updated_at text not null ) | STRING |
| HIGH | src/novelvideo/chat/message_repository.py | 0 | create table if not exists chat_settings ( key text primary key, value text not null, updated_at text not null ) | STRING |
| HIGH | src/novelvideo/verification/failure_registry.py | 0 | insert into sketch_failure_mode_defs ( code, layer, detection, prevention_rule, correction_template, negative_prompt_cla | STRING |
| HIGH | src/novelvideo/verification/global_registry_db.py | 0 | insert into sketch_failure_mode_defs ( code, layer, detection, prevention_rule, correction_template, negative_prompt_cla | STRING |
| HIGH | …ovelvideo/verification/cli/migrate_to_global_shared.py | 0 | insert into sketch_failure_mode_defs ( code, layer, detection, prevention_rule, correction_template, negative_prompt_cla | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/novelvideo/manual_shots.py | 334 | CODE | |
| LOW | src/novelvideo/sqlite_store.py | 2561 | CODE | |
| LOW | src/novelvideo/structured_extraction.py | 355 | CODE | |
| LOW | src/novelvideo/newapi_provisioner.py | 899 | CODE | |
| LOW | src/novelvideo/task_state.py | 981 | CODE | |
| LOW | src/novelvideo/task_state.py | 1111 | CODE | |
| LOW | src/novelvideo/task_state.py | 1231 | CODE | |
| LOW | src/novelvideo/stage_asset_tasks.py | 672 | CODE | |
| LOW | src/novelvideo/stage_asset_tasks.py | 940 | CODE | |
| LOW | src/novelvideo/stage_asset_tasks.py | 1191 | CODE | |
| LOW | src/novelvideo/model_gateway_settings.py | 991 | CODE | |
| LOW | src/novelvideo/model_gateway_settings.py | 1184 | CODE | |
| LOW | src/novelvideo/model_gateway_settings.py | 1510 | CODE | |
| LOW | src/novelvideo/cognee/store.py | 2303 | CODE | |
| LOW | src/novelvideo/cognee/pipeline.py | 857 | CODE | |
| LOW | src/novelvideo/chat/service.py | 2947 | CODE | |
| LOW | src/novelvideo/chat/service.py | 3274 | CODE | |
| LOW | src/novelvideo/chat/service.py | 3452 | CODE | |
| LOW | src/novelvideo/chat/service.py | 3776 | CODE | |
| LOW | src/novelvideo/chat/service.py | 4547 | CODE | |
| LOW | src/novelvideo/chat/hermes_pool.py | 331 | CODE | |
| LOW | src/novelvideo/chat/hermes_pool.py | 995 | CODE | |
| LOW | src/novelvideo/seedance2_i2v/panel_service.py | 98 | CODE | |
| LOW | src/novelvideo/agents/video_prompt_builder.py | 152 | CODE | |
| LOW | src/novelvideo/utils/asset_resolver.py | 135 | CODE | |
| LOW | …c/novelvideo/director_world/control_frame_to_sketch.py | 414 | CODE | |
| LOW | src/novelvideo/director_world/scene_360_builder.py | 113 | CODE | |
| LOW | src/novelvideo/task_backend/subprocesses.py | 408 | CODE | |
| LOW | src/novelvideo/api/routes/freezone.py | 750 | CODE | |
| LOW | src/novelvideo/api/routes/freezone.py | 998 | CODE | |
| LOW | src/novelvideo/api/routes/freezone.py | 1958 | CODE | |
| LOW | src/novelvideo/api/routes/freezone.py | 2219 | CODE | |
| LOW | src/novelvideo/api/routes/freezone.py | 2766 | CODE | |
| LOW | src/novelvideo/api/routes/model_credits.py | 898 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 374 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 2470 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 3601 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 7804 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 4368 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 5797 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 6262 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 6462 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_grid.py | 7732 | CODE | |
| LOW | src/novelvideo/generators/prompt_builder.py | 3826 | CODE | |
| LOW | src/novelvideo/generators/pool_indexer.py | 257 | CODE | |
| LOW | src/novelvideo/generators/pool_indexer.py | 850 | CODE | |
| LOW | src/novelvideo/generators/voxel_restyle.py | 120 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_character.py | 207 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_character.py | 396 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_character.py | 430 | CODE | |
| LOW | src/novelvideo/generators/nanobanana_character.py | 1354 | CODE | |
| LOW | src/novelvideo/generators/video_generator.py | 921 | CODE | |
| LOW | src/novelvideo/generators/video_generator.py | 1935 | CODE | |
| LOW | src/novelvideo/generators/image_generator.py | 1149 | CODE | |
| LOW | src/novelvideo/generators/image_generator.py | 1325 | CODE | |
| LOW | src/novelvideo/generators/image_generator.py | 269 | CODE | |
| LOW | src/novelvideo/ports/usage.py | 140 | CODE | |
| LOW | src/novelvideo/ports/local/usage.py | 54 | CODE | |
| LOW | src/novelvideo/freezone/audio_node.py | 578 | CODE | |
| LOW | src/novelvideo/freezone/audio_node.py | 746 | CODE | |
| 8 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ntend/src/features/canvas/application/audioDownload.ts | 33 | // downloadUrlAsFile (robust cross-origin fallback + correct extension), | COMMENT |
| MEDIUM | frontend/src/components/episode/header-collapse.tsx | 101 | // animation rather than a guessed duration (robust to transition-length | COMMENT |
| MEDIUM | frontend/src/components/login/poster-column.tsx | 26 | // Duplicate once for seamless marquee loop. | COMMENT |
| MEDIUM⚡ | tests/test_fanout_partial_dispatch.py | 123 | # harness 照 tests/test_api_generation_sketches.py:29-116 | COMMENT |
| MEDIUM⚡ | tests/test_fanout_partial_dispatch.py | 391 | # harness 照 tests/test_api_render_regenerate.py:32-104 | COMMENT |
| MEDIUM⚡ | tests/test_freezone_mark_detect_egress.py | 138 | # --- harness --------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_chat_ws_project_egress.py | 195 | # --- harness --------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_chat_ws_project_egress.py | 735 | # --- guard: the harness must really be going through the WS route ---------- | COMMENT |
| LOW⚡ | tests/test_wysiwyg_consistency.py | 384 | # We need to check identity — but for label matching we just use the tag | COMMENT |
| MEDIUM⚡ | tests/test_channel_task_limit_error_surface.py | 261 | # harness 照 tests/test_freezone_image_backend.py:224-253 | COMMENT |
| MEDIUM | tests/test_chat_ws_home_egress.py | 209 | # --- harness --------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_chat_ws_home_egress.py | 943 | # --- guard: the harness must really be going through the WS route ---------- | COMMENT |
| MEDIUM | src/novelvideo/generators/prompt_builder.py | 1143 | return f"""Generate a {rows}×{cols} storyboard grid. Each panel MUST be {panel_hint}. Full-color continuous imag | CODE |
| MEDIUM | src/novelvideo/generators/prompt_builder.py | 2591 | render_opening = f"""Colorize this {rows}×{cols} storyboard SKETCH (first attached image / Image 1) into a full- | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/public/locales/vi/translation.json | 796 | "placeholder": "Sau khi tải kịch bản lên, hãy nhờ Xia Director đẩy tiến độ tập phim, hình ảnh, âm thanh hoặc video h | CODE |
| LOW | frontend/public/locales/vi/translation.json | 2871 | "placeholder": { | CODE |
| LOW | frontend/public/locales/vi/translation.json | 3232 | "placeholder": "Chưa có log nào." | CODE |
| LOW | frontend/public/locales/vi/translation.json | 4550 | "placeholder": "Chọn một khu vực", | CODE |
| LOW | frontend/public/locales/vi/translation.json | 4902 | "placeholder": "Nhập tên thư mục", | CODE |
| LOW | frontend/public/locales/vi/translation.json | 6093 | "placeholder": "Viết một câu chuyện, một cảnh hoặc ý tưởng nhân vật. Ví dụ: trong một nhà ga cũ giữa đêm mưa, một | CODE |
| LOW | frontend/public/locales/vi/translation.json | 6110 | "placeholder": "Thiết lập các tham số bên dưới để tạo video HD", | CODE |
| LOW | frontend/public/locales/vi/translation.json | 6153 | "placeholder": "Mô tả video bạn muốn tạo.", | CODE |
| LOW | frontend/public/locales/zh/translation.json | 814 | "placeholder": "上传剧本后,说出要推进的分集、画面、配音或成片任务", | CODE |
| LOW | frontend/public/locales/zh/translation.json | 2985 | "placeholder": { | CODE |
| LOW | frontend/public/locales/zh/translation.json | 3433 | "placeholder": "暂无日志输出。" | CODE |
| LOW | frontend/public/locales/zh/translation.json | 4664 | "placeholder": "请选择区域", | CODE |
| LOW | frontend/public/locales/zh/translation.json | 5016 | "placeholder": "请输入文件夹名称", | CODE |
| LOW | frontend/public/locales/zh/translation.json | 6216 | "placeholder": "写下故事、场景或角色灵感。例如:雨夜旧车站里,一封迟到的信改变了所有人的选择。", | CODE |
| LOW | frontend/public/locales/zh/translation.json | 6233 | "placeholder": "在下方配置参数生成高清视频", | CODE |
| LOW | frontend/public/locales/zh/translation.json | 6276 | "placeholder": "根据文字描述生成视频。", | CODE |
| LOW | frontend/public/locales/en/translation.json | 814 | "placeholder": "After uploading a script, ask Xia Director to advance episodes, visuals, audio, or final video", | CODE |
| LOW | frontend/public/locales/en/translation.json | 2985 | "placeholder": { | CODE |
| LOW | frontend/public/locales/en/translation.json | 3433 | "placeholder": "No log output yet." | CODE |
| LOW | frontend/public/locales/en/translation.json | 4664 | "placeholder": "Select a region", | CODE |
| LOW | frontend/public/locales/en/translation.json | 5016 | "placeholder": "Enter a folder name", | CODE |
| LOW | frontend/public/locales/en/translation.json | 6216 | "placeholder": "Write a story, scene, or character idea. For example: in an old station on a rainy night, a late l | CODE |
| LOW | frontend/public/locales/en/translation.json | 6233 | "placeholder": "Configure the parameters below to generate the HD video", | CODE |
| LOW | frontend/public/locales/en/translation.json | 6276 | "placeholder": "Describe the video to generate.", | CODE |
| LOW | …src/__tests__/features/superchat/use-superchat.test.ts | 3050 | expect(JSON.stringify(draft)).not.toContain("placeholder"); | CODE |
| LOW | …/__tests__/components/assets/character-search.test.tsx | 77 | expect(input).toHaveAttribute("placeholder", "Search cast"); | CODE |
| LOW | tests/test_cognee_pipeline_concurrency.py | 626 | monkeypatch.setattr(config, "_resolve_llm_api_key", lambda *_args: "fake-key") | CODE |
| LOW | tests/test_cognee_pipeline_concurrency.py | 631 | lambda _provider, _key: ("openai", "embedding", "1024", "fake-key"), | CODE |
| LOW | tests/test_freezone_image_backend.py | 459 | async def fake_user(): | CODE |
| LOW | tests/test_freezone_image_backend.py | 462 | app.dependency_overrides[freezone_routes.get_api_user] = fake_user | CODE |
| LOW | tests/test_freezone_image_backend.py | 3644 | async def fake_user(): | CODE |
| LOW | tests/test_freezone_image_backend.py | 3647 | app.dependency_overrides[freezone_routes.get_api_user] = fake_user | CODE |
| LOW | tests/test_workflow_plan.py | 2025 | assert "placeholder" in result["errors"][0]["message"] | CODE |
| LOW | tests/test_indextts2_fal_smoke.py | 74 | client = IndexTTS2FalClient(api_key="dummy-key-not-used") | CODE |
| LOW | tests/test_channel_task_limit_error_surface.py | 320 | async def fake_user(): | CODE |
| LOW | tests/test_channel_task_limit_error_surface.py | 323 | app.dependency_overrides[freezone_routes.get_api_user] = fake_user | CODE |
| LOW | assets/readme/ASSET-LAYOUT-REVISION.md | 7 | Use case: ui-mockup. Recreate the asset-library feature illustration using Image 1 ONLY as LAYOUT reference, NOT its dis | CODE |
| LOW | src/novelvideo/freezone/html_artifacts.py | 674 | entry = {'placeholder': placeholder, 'path': path} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 23 | ### Step 1: 上传小说 [SYNC] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 30 | ### Step 2: 摄入 [ASYNC -> ingest_fast, ep=0] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 43 | ### Step 3: 配置项目 [SYNC] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 50 | ### Step 4: 角色提取 [ASYNC -> build_characters, ep=0] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 75 | ### Step 5: 角色 face_prompt 检查/补齐 [SYNC] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 93 | ### Step 6: 分集规划 [ASYNC -> build_episodes, ep=0] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 109 | ### Step 7: 肖像生成 [SYNC] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 120 | ### Step 8: 身份规划 [SYNC] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 126 | ### Step 9: 身份图生成 [SYNC] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 176 | ### Step 11: 场景 / 道具上下文 [SYNC/ASYNC] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 204 | ### Step 12: 草图生成 [ASYNC -> sketch_generation] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 240 | ### Step 13: 首帧生成 [ASYNC -> selected_regen] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 254 | ### Step 14: 音频生成 [ASYNC -> audio_generation_indextts2] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 272 | ### Step 15: 视频生成 [ASYNC -> single_video] | COMMENT |
| LOW | …rmes/skills/dramaclaw/references/step-api-reference.md | 292 | ### Step 16: 合成 [ASYNC -> compose_episode] | COMMENT |
| LOW | src/novelvideo/cognee/store.py | 675 | # Step 1: 添加原文到 Cognee | COMMENT |
| LOW | src/novelvideo/cognee/store.py | 687 | # Step 2: 构建知识图谱 | COMMENT |
| LOW | src/novelvideo/cognee/store.py | 702 | # Step 3: 创建向量索引(memify) | COMMENT |
| LOW | src/novelvideo/cognee/pipeline.py | 340 | # Step 1: 通过 cognee.search 获取图谱上下文 | COMMENT |
| LOW | src/novelvideo/cognee/pipeline.py | 387 | # Step 2: LLM 结构化提取 | COMMENT |
| LOW | src/novelvideo/cognee/pipeline.py | 1774 | # Step 3: LLM 逐场景生成 environment_prompt | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 369 | Provider adapters shipped in the gateway today (see the [channel support matrix](https://github.com/dramaclaw/dramaclaw- | CODE |
| MEDIUM | tests/contract/test_m01_auth.py | 190 | # to an embedding model. The binding is permanent once written, so this | COMMENT |
| MEDIUM | readme/README_th.md | 364 | adapter ของผู้ให้บริการที่มากับ gateway ในวันนี้ (ดูสถานะการตรวจสอบใน [ตารางรองรับ channel](https://github.com/dramaclaw | CODE |
| MEDIUM | readme/README_vi.md | 364 | Các adapter nhà cung cấp có sẵn trong gateway hiện nay (xem [ma trận hỗ trợ kênh](https://github.com/dramaclaw/dramaclaw | CODE |
| MEDIUM⚡ | src/novelvideo/api/routes/projects.py | 758 | # embedding model. The binding is permanent once written, which is why | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …eatures/canvas/application/workflowHtmlRuntime.test.ts | 140 | expect(mocks.state.updateNodeData.mock.calls.some(([, patch]) => "artifactId" in patch)).toBe(false); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/novelvideo/cognee/store.py | 675 | # Step 1: 添加原文到 Cognee | COMMENT |
| LOW | src/novelvideo/cognee/store.py | 687 | # Step 2: 构建知识图谱 | COMMENT |
| LOW | src/novelvideo/cognee/store.py | 702 | # Step 3: 创建向量索引(memify) | COMMENT |
| LOW | src/novelvideo/cognee/pipeline.py | 340 | # Step 1: 通过 cognee.search 获取图谱上下文 | COMMENT |
| LOW | src/novelvideo/cognee/pipeline.py | 387 | # Step 2: LLM 结构化提取 | COMMENT |
| LOW | src/novelvideo/cognee/pipeline.py | 1774 | # Step 3: LLM 逐场景生成 environment_prompt | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/novelvideo/model_gateway_settings.py | 49 | "your_api_key", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/scripts/build-public-mirror.sh | 18 | # Usage: | COMMENT |
| LOW | tests/sandbox_smoke.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/sandbox_smoke.sh | 98 | # Create a fake "other" user | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_chat_service_user_agent_scope.py | 5403 | CODE |