sourcecode 1.7.0__tar.gz → 1.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sourcecode-1.7.0 → sourcecode-1.9.0}/PKG-INFO +1 -1
- {sourcecode-1.7.0 → sourcecode-1.9.0}/pyproject.toml +1 -1
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/__init__.py +1 -1
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/cli.py +53 -74
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/serializer.py +7 -1
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_cli.py +11 -6
- {sourcecode-1.7.0 → sourcecode-1.9.0}/.agents/skills/source-command-gsd-join-discord/SKILL.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/.agents/skills/source-command-gsd-review-backlog/SKILL.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/.agents/skills/source-command-gsd-workstreams/SKILL.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/.continue-here.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/.gitignore +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/.ruff.toml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/CONTRIBUTING.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/LICENSE +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/README.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/SECURITY.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/docs/privacy.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/docs/schema.md +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/raw +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/run_cli.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/progress.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/schema.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/__init__.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/conftest.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/coverage.xml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/go_service/go.mod +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/jacoco.xml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/lcov.info +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/nextjs_app/package.json +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/pom.xml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/application/service/FindAusenteService.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/domain/entities/Ausente.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/infrastructure/rest/AusenteRestController.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/application/service/FindAutocoberturasService.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/domain/entities/Autocoberturas.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/infrastructure/rest/AutocoberturasRestController.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/application/service/FindCalendarioTrabajadorService.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/domain/entities/CalendarioTrabajador.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/infrastructure/rest/CalendarioTrabajadorRestController.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/application/service/FindDepartamentoService.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/domain/entities/Departamento.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/infrastructure/rest/DepartamentoRestController.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/application/service/FindEmpleadoService.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/domain/entities/Empleado.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/infrastructure/rest/EmpleadoRestController.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/DemoApplication.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/domain/Health.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/mapper/HealthMapper.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/repository/HealthRepository.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/service/HealthService.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/HealthRestController.java +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/resources/application-dev.yml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/spring_boot_minimal/src/main/resources/application.yml +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_architecture_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_architecture_summary.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_ast_extractor.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_block1_reliability.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_block2_coverage.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_block5_quality.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_bug_fixes_v16.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_classifier.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_code_notes_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_context_scorer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_contract_pipeline.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_coverage_parser.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_cross_consistency.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_dependency_analyzer_node_python.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_dependency_analyzer_polyglot.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_dependency_schema.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detector_dotnet.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detector_go_rust_java.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detector_nodejs.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detector_php_ruby_dart.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detector_python.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detector_universal_managed.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detector_universal_systems.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_detectors_base.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_doc_analyzer_jsdom.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_doc_analyzer_python.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_graph_analyzer_polyglot.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_graph_analyzer_python_node.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_graph_schema.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_hybrid_inference.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_dependencies.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_detection.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_docs.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_graph_modules.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_lqn.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_metrics.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_multistack.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_semantics.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_integration_universal.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_java_spring_integration.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_metrics_analyzer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_packaging.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_phase1_improvements.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_pipeline_integrity.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_real_projects.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_redactor.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_scanner.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_schema.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_schema_normalization.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_semantic_analyzer_node.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_semantic_analyzer_python.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_semantic_import_resolution.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_semantic_schema.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_signal_hierarchy.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_summarizer.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_telemetry.py +0 -0
- {sourcecode-1.7.0 → sourcecode-1.9.0}/tests/test_workspace_analyzer.py +0 -0
|
@@ -354,32 +354,29 @@ def main(
|
|
|
354
354
|
"json",
|
|
355
355
|
"--format",
|
|
356
356
|
"-f",
|
|
357
|
-
help="Output format: json (default) or yaml.
|
|
357
|
+
help="Output format: json (default) or yaml.",
|
|
358
358
|
show_default=True,
|
|
359
359
|
),
|
|
360
360
|
output: Optional[Path] = typer.Option(
|
|
361
361
|
None,
|
|
362
362
|
"--output",
|
|
363
363
|
"-o",
|
|
364
|
-
help="Write output to a file instead of stdout.
|
|
364
|
+
help="Write output to a file instead of stdout.",
|
|
365
365
|
),
|
|
366
366
|
compact: bool = typer.Option(
|
|
367
367
|
False,
|
|
368
368
|
"--compact",
|
|
369
369
|
help=(
|
|
370
|
-
"
|
|
371
|
-
"dependency summary, confidence
|
|
372
|
-
"
|
|
373
|
-
"Designed for agent context windows. Automatically enables --dependencies, --env-map, and --code-notes."
|
|
370
|
+
"High-signal summary (~600–800 tokens): stacks, entry points, "
|
|
371
|
+
"dependency summary, confidence, and gaps. "
|
|
372
|
+
"Optimized for agent context windows."
|
|
374
373
|
),
|
|
375
374
|
),
|
|
376
375
|
dependencies: bool = typer.Option(
|
|
377
376
|
False,
|
|
378
377
|
"--dependencies",
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
"and lockfiles when available. Adds dependency_summary and key_dependencies to output."
|
|
382
|
-
),
|
|
378
|
+
hidden=True,
|
|
379
|
+
help="Analyze direct dependencies from manifests and lockfiles.",
|
|
383
380
|
),
|
|
384
381
|
graph_modules: bool = typer.Option(
|
|
385
382
|
False,
|
|
@@ -422,10 +419,7 @@ def main(
|
|
|
422
419
|
no_redact: bool = typer.Option(
|
|
423
420
|
False,
|
|
424
421
|
"--no-redact",
|
|
425
|
-
help=
|
|
426
|
-
"Disable automatic secret redaction. By default, potential secrets (API keys, tokens, passwords) "
|
|
427
|
-
"are replaced with [REDACTED]. Use with caution — output may contain sensitive values."
|
|
428
|
-
),
|
|
422
|
+
help="Disable secret redaction. Use with caution — output may contain sensitive values.",
|
|
429
423
|
),
|
|
430
424
|
version: Optional[bool] = typer.Option(
|
|
431
425
|
None,
|
|
@@ -438,10 +432,7 @@ def main(
|
|
|
438
432
|
depth: int = typer.Option(
|
|
439
433
|
4,
|
|
440
434
|
"--depth",
|
|
441
|
-
help=(
|
|
442
|
-
"Maximum depth for file tree traversal (default: 4, range: 1–20). "
|
|
443
|
-
"Increase for deeply nested projects — Maven/Java requires at least 8 (src/main/java/...)."
|
|
444
|
-
),
|
|
435
|
+
help="File tree traversal depth (default: 4). Java/Maven projects auto-adjust to 12.",
|
|
445
436
|
min=1,
|
|
446
437
|
max=20,
|
|
447
438
|
),
|
|
@@ -480,72 +471,58 @@ def main(
|
|
|
480
471
|
False,
|
|
481
472
|
"--git-context",
|
|
482
473
|
"-g",
|
|
483
|
-
help="Include git activity: recent commits, change hotspots
|
|
474
|
+
help="Include git activity: recent commits, change hotspots, and uncommitted changes.",
|
|
484
475
|
),
|
|
485
476
|
git_depth: int = typer.Option(
|
|
486
477
|
20,
|
|
487
478
|
"--git-depth",
|
|
488
|
-
|
|
479
|
+
hidden=True,
|
|
480
|
+
help="Number of recent commits to include with --git-context (default: 20).",
|
|
489
481
|
min=1,
|
|
490
482
|
max=100,
|
|
491
483
|
),
|
|
492
484
|
git_days: int = typer.Option(
|
|
493
485
|
90,
|
|
494
486
|
"--git-days",
|
|
495
|
-
|
|
487
|
+
hidden=True,
|
|
488
|
+
help="Time window in days for change hotspot detection (default: 90).",
|
|
496
489
|
min=1,
|
|
497
490
|
max=3650,
|
|
498
491
|
),
|
|
499
492
|
env_map: bool = typer.Option(
|
|
500
493
|
False,
|
|
501
494
|
"--env-map",
|
|
502
|
-
|
|
495
|
+
hidden=True,
|
|
496
|
+
help="Map environment variables referenced across the codebase.",
|
|
503
497
|
),
|
|
504
498
|
code_notes: bool = typer.Option(
|
|
505
499
|
False,
|
|
506
500
|
"--code-notes",
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
"with file location and enclosing symbol. "
|
|
510
|
-
"Also detects Architecture Decision Records (ADRs) in docs/decisions/, docs/adr/, and similar paths."
|
|
511
|
-
),
|
|
501
|
+
hidden=True,
|
|
502
|
+
help="Extract inline annotations: TODO, FIXME, HACK, DEPRECATED, ADRs.",
|
|
512
503
|
),
|
|
513
504
|
agent: bool = typer.Option(
|
|
514
505
|
False,
|
|
515
506
|
"--agent",
|
|
516
|
-
help=
|
|
517
|
-
"Agent-optimized output: structured, noise-free JSON for AI consumption. "
|
|
518
|
-
"Automatically enables --dependencies, --env-map, and --code-notes. Suppresses file tree. "
|
|
519
|
-
"Output includes: identity, entry points, architecture, runtime dependencies, "
|
|
520
|
-
"operational signals, confidence summary, and analysis gaps. No empty sections."
|
|
521
|
-
),
|
|
507
|
+
help="Structured noise-free JSON for AI agents: identity, entry points, dependencies, confidence, gaps.",
|
|
522
508
|
),
|
|
523
509
|
trace_pipeline: bool = typer.Option(
|
|
524
510
|
False,
|
|
525
511
|
"--trace-pipeline",
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
"and data origin across all pipeline stages. "
|
|
529
|
-
"Use to diagnose unexpected or contaminated results. Not intended for normal agent use."
|
|
530
|
-
),
|
|
512
|
+
hidden=True,
|
|
513
|
+
help="Diagnostic: include full pipeline trace in output.",
|
|
531
514
|
),
|
|
532
515
|
mode: str = typer.Option(
|
|
533
516
|
"contract",
|
|
534
517
|
"--mode",
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
"contract: minimal per-file contracts — exports, signatures, deps. "
|
|
538
|
-
"Smallest output, recommended for AI agents. "
|
|
539
|
-
"minimal is accepted as an alias for contract. "
|
|
540
|
-
"standard: full per-file detail with imports, relevance scores, extraction method. "
|
|
541
|
-
"raw: project-level analysis only (stacks, entry points, dependency summary). "
|
|
542
|
-
"No per-file contracts."
|
|
543
|
-
),
|
|
518
|
+
hidden=True,
|
|
519
|
+
help="Output mode: contract (default) | standard | raw.",
|
|
544
520
|
),
|
|
545
521
|
max_symbols: Optional[int] = typer.Option(
|
|
546
522
|
None,
|
|
547
523
|
"--max-symbols",
|
|
548
|
-
|
|
524
|
+
hidden=True,
|
|
525
|
+
help="Limit total exported semantic nodes across all file contracts.",
|
|
549
526
|
min=1,
|
|
550
527
|
),
|
|
551
528
|
dependency_depth: int = typer.Option(
|
|
@@ -559,22 +536,25 @@ def main(
|
|
|
559
536
|
entrypoints_only: bool = typer.Option(
|
|
560
537
|
False,
|
|
561
538
|
"--entrypoints-only",
|
|
562
|
-
|
|
539
|
+
hidden=True,
|
|
540
|
+
help="Include only files with exported symbols or runtime entrypoints.",
|
|
563
541
|
),
|
|
564
542
|
changed_only: bool = typer.Option(
|
|
565
543
|
False,
|
|
566
544
|
"--changed-only",
|
|
567
|
-
help="
|
|
545
|
+
help="Limit output to git-modified files (staged, unstaged, untracked).",
|
|
568
546
|
),
|
|
569
547
|
rank_by: str = typer.Option(
|
|
570
548
|
"relevance",
|
|
571
549
|
"--rank-by",
|
|
550
|
+
hidden=True,
|
|
572
551
|
help="Contract ranking strategy: relevance (default) | centrality | git-churn.",
|
|
573
552
|
),
|
|
574
553
|
emit_graph: bool = typer.Option(
|
|
575
554
|
False,
|
|
576
555
|
"--emit-graph",
|
|
577
|
-
|
|
556
|
+
hidden=True,
|
|
557
|
+
help="Include a compact dependency graph in contract output.",
|
|
578
558
|
),
|
|
579
559
|
compress_types: bool = typer.Option(
|
|
580
560
|
False,
|
|
@@ -585,16 +565,13 @@ def main(
|
|
|
585
565
|
symbol: Optional[str] = typer.Option(
|
|
586
566
|
None,
|
|
587
567
|
"--symbol",
|
|
588
|
-
help="
|
|
568
|
+
help="Extract context for a specific symbol: defining file + all importers.",
|
|
589
569
|
),
|
|
590
570
|
max_importers: int = typer.Option(
|
|
591
571
|
50,
|
|
592
572
|
"--max-importers",
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
"Popular symbols can have hundreds of importers — this prevents output explosion. "
|
|
596
|
-
"Defining files are never truncated. Override: --symbol Foo --max-importers 200."
|
|
597
|
-
),
|
|
573
|
+
hidden=True,
|
|
574
|
+
help="Maximum importer files returned by --symbol (default: 50).",
|
|
598
575
|
min=1,
|
|
599
576
|
max=10000,
|
|
600
577
|
),
|
|
@@ -789,22 +766,9 @@ def main(
|
|
|
789
766
|
env_map = True
|
|
790
767
|
code_notes = True
|
|
791
768
|
no_tree = True # agents never need the raw file tree
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
if full_metrics:
|
|
796
|
-
_agent_suppressed.append("--full-metrics")
|
|
797
|
-
if graph_modules:
|
|
798
|
-
_agent_suppressed.append("--graph-modules")
|
|
799
|
-
if docs:
|
|
800
|
-
_agent_suppressed.append("--docs")
|
|
801
|
-
if _agent_suppressed:
|
|
802
|
-
typer.echo(
|
|
803
|
-
f"[agent] warning: {', '.join(_agent_suppressed)} computed but excluded "
|
|
804
|
-
"from --agent output — agent_view does not include these sections. "
|
|
805
|
-
"Remove these flags to skip unnecessary computation.",
|
|
806
|
-
err=True,
|
|
807
|
-
)
|
|
769
|
+
|
|
770
|
+
_progress = Progress()
|
|
771
|
+
_progress.start("scanning files")
|
|
808
772
|
|
|
809
773
|
scanner = AdaptiveScanner(target, topology=_topology, base_depth=effective_depth)
|
|
810
774
|
raw_tree = scanner.scan_tree()
|
|
@@ -842,6 +806,7 @@ def main(
|
|
|
842
806
|
node = child
|
|
843
807
|
return pruned
|
|
844
808
|
|
|
809
|
+
_progress.update("parsing manifests")
|
|
845
810
|
file_tree = filter_sensitive_files(raw_tree)
|
|
846
811
|
detector = ProjectDetector(build_default_detectors())
|
|
847
812
|
workspace_analysis = WorkspaceAnalyzer().analyze(target, manifests)
|
|
@@ -1310,6 +1275,7 @@ def main(
|
|
|
1310
1275
|
|
|
1311
1276
|
# Git Context (--git-context flag)
|
|
1312
1277
|
if git_context:
|
|
1278
|
+
_progress.update("git analysis")
|
|
1313
1279
|
from sourcecode.git_analyzer import GitAnalyzer
|
|
1314
1280
|
sm.git_context = GitAnalyzer().analyze(target, depth=git_depth, days=git_days)
|
|
1315
1281
|
|
|
@@ -1417,6 +1383,7 @@ def main(
|
|
|
1417
1383
|
changed_only = False
|
|
1418
1384
|
|
|
1419
1385
|
# Contract pipeline — runs for mode=contract|standard|deep|hybrid (skip for raw)
|
|
1386
|
+
_progress.update("extracting contracts")
|
|
1420
1387
|
_is_contract_mode = mode in ("contract", "standard")
|
|
1421
1388
|
_pipeline_error = False
|
|
1422
1389
|
if _is_contract_mode:
|
|
@@ -1487,6 +1454,7 @@ def main(
|
|
|
1487
1454
|
)
|
|
1488
1455
|
|
|
1489
1456
|
# 4. Serialize
|
|
1457
|
+
_progress.update("serializing output")
|
|
1490
1458
|
if _is_contract_mode and not agent:
|
|
1491
1459
|
from sourcecode.serializer import contract_view as _contract_view
|
|
1492
1460
|
_depth = _CONTRACT_DEPTH.get(mode, "minimal")
|
|
@@ -1517,7 +1485,17 @@ def main(
|
|
|
1517
1485
|
if _is_contract_mode and sm.file_contracts:
|
|
1518
1486
|
from sourcecode.serializer import _serialize_contract_minimal
|
|
1519
1487
|
data.pop("file_relevance", None)
|
|
1520
|
-
|
|
1488
|
+
_MAX_AGENT_CONTRACTS = 10
|
|
1489
|
+
_all_contracts = sm.file_contracts
|
|
1490
|
+
_sorted = sorted(_all_contracts, key=lambda c: getattr(c, "relevance_score", 0.0), reverse=True)
|
|
1491
|
+
_sampled = _sorted[:_MAX_AGENT_CONTRACTS]
|
|
1492
|
+
_total_contracts = len(_all_contracts)
|
|
1493
|
+
data["contracts"] = [_serialize_contract_minimal(c) for c in _sampled]
|
|
1494
|
+
data["contracts_meta"] = {
|
|
1495
|
+
"total": _total_contracts,
|
|
1496
|
+
"shown": len(_sampled),
|
|
1497
|
+
"truncated": _total_contracts > _MAX_AGENT_CONTRACTS,
|
|
1498
|
+
}
|
|
1521
1499
|
if sm.contract_summary is not None:
|
|
1522
1500
|
cs = sm.contract_summary
|
|
1523
1501
|
data["contract_summary"] = {
|
|
@@ -1578,6 +1556,7 @@ def main(
|
|
|
1578
1556
|
pass
|
|
1579
1557
|
|
|
1580
1558
|
# 6. Write output (CLI-04)
|
|
1559
|
+
_progress.finish()
|
|
1581
1560
|
write_output(content, output=output)
|
|
1582
1561
|
|
|
1583
1562
|
if _pipeline_error:
|
|
@@ -958,7 +958,13 @@ def agent_view(sm: SourceMap) -> dict[str, Any]:
|
|
|
958
958
|
"sections": _section_confidence(sm),
|
|
959
959
|
}
|
|
960
960
|
if cs.hard_signals:
|
|
961
|
-
|
|
961
|
+
_MAX_HARD_SIGNALS = 20
|
|
962
|
+
_hs = cs.hard_signals
|
|
963
|
+
_hs_total = len(_hs)
|
|
964
|
+
conf["hard_signals"] = _hs[:_MAX_HARD_SIGNALS]
|
|
965
|
+
if _hs_total > _MAX_HARD_SIGNALS:
|
|
966
|
+
conf["hard_signals_truncated"] = True
|
|
967
|
+
conf["hard_signals_total"] = _hs_total
|
|
962
968
|
if cs.soft_signals:
|
|
963
969
|
conf["soft_signals"] = cs.soft_signals
|
|
964
970
|
if cs.ignored_signals:
|
|
@@ -42,18 +42,23 @@ def test_telemetry_status():
|
|
|
42
42
|
assert "Telemetry" in result.output
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def
|
|
45
|
+
def test_help_contains_core_flags():
|
|
46
46
|
result = invoke(["--help"])
|
|
47
47
|
assert result.exit_code == 0
|
|
48
|
+
# Core visible flags
|
|
48
49
|
assert "--format" in result.output
|
|
49
50
|
assert "--output" in result.output
|
|
50
51
|
assert "--compact" in result.output
|
|
51
|
-
assert "--
|
|
52
|
-
assert "--
|
|
53
|
-
assert "--
|
|
54
|
-
assert "--
|
|
55
|
-
assert "--graph-edges" in result.output
|
|
52
|
+
assert "--git-context" in result.output
|
|
53
|
+
assert "--agent" in result.output
|
|
54
|
+
assert "--changed-only" in result.output
|
|
55
|
+
assert "--symbol" in result.output
|
|
56
56
|
assert "--no-redact" in result.output
|
|
57
|
+
# Hidden flags must not appear in default help
|
|
58
|
+
assert "--dependencies" not in result.output
|
|
59
|
+
assert "--graph-modules" not in result.output
|
|
60
|
+
assert "--semantics" not in result.output
|
|
61
|
+
assert "--architecture" not in result.output
|
|
57
62
|
|
|
58
63
|
|
|
59
64
|
def test_no_args_runs_without_exception(tmp_project: Path):
|
{sourcecode-1.7.0 → sourcecode-1.9.0}/.agents/skills/source-command-gsd-join-discord/SKILL.md
RENAMED
|
File without changes
|
{sourcecode-1.7.0 → sourcecode-1.9.0}/.agents/skills/source-command-gsd-review-backlog/SKILL.md
RENAMED
|
File without changes
|
{sourcecode-1.7.0 → sourcecode-1.9.0}/.agents/skills/source-command-gsd-workstreams/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-1.7.0 → sourcecode-1.9.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|