diff --git a/unoplat-code-confluence-cli/AGENTS.md b/unoplat-code-confluence-cli/AGENTS.md index 36d93c6f..5d9e8cb3 100644 --- a/unoplat-code-confluence-cli/AGENTS.md +++ b/unoplat-code-confluence-cli/AGENTS.md @@ -1,7 +1,7 @@ -> Generated from branch `dev` at commit `3bbc2c8ae5f6fc7e94628c3b07a936ca5bdbcd02` (2026-06-09). Content may become stale as new commits land. +> Generated from branch `dev` at commit `05234b1efe5762f633f9b3367f217c3b0fe2659b` (2026-07-15). Content may become stale as new commits land. @@ -13,7 +13,7 @@ - `uv build` — `pyproject.toml` ### Dev -- `uv run unoplat` — `pyproject.toml` (project script entry point) +- `uv run ucc` — `pyproject.toml` (project script entry point) ### Test - Not detected @@ -29,7 +29,8 @@ See [`dependencies_overview.md`](./dependencies_overview.md) for the full depend ## Business Domain ### Description -Unoplat Code Confluence CLI manages the local Code Confluence Docker Compose stack: it fetches and pins GitHub releases, installs or repairs release assets, starts the Flow Bridge/query engine/frontend services, and opens browser setup pages for repository token and model-provider configuration. + +Unoplat Code Confluence CLI manages the Code Confluence platform’s local Docker Compose deployment, including versioned release manifests and the Flow Bridge, query engine, and frontend components. It registers and refreshes Git repositories for automated AGENTS.md generation, while checking repository-provider credentials and AI model-provider configuration and reporting application lifecycle results. ### References diff --git a/unoplat-code-confluence-cli/app_interfaces.md b/unoplat-code-confluence-cli/app_interfaces.md index f81f3f71..3ad157fb 100644 --- a/unoplat-code-confluence-cli/app_interfaces.md +++ b/unoplat-code-confluence-cli/app_interfaces.md @@ -10,6 +10,10 @@ No inbound constructs detected. No outbound constructs detected. +## Bidirectional Constructs + +No bidirectional constructs detected. + ## Internal Constructs No internal constructs detected. diff --git a/unoplat-code-confluence-cli/business_domain_references.md b/unoplat-code-confluence-cli/business_domain_references.md index f77f2e5b..7d7f244f 100644 --- a/unoplat-code-confluence-cli/business_domain_references.md +++ b/unoplat-code-confluence-cli/business_domain_references.md @@ -1,20 +1,43 @@ # Business Domain References ## Domain Summary -This codebase is a CLI for running and maintaining the local Unoplat Code Confluence application. It manages GitHub release discovery, pins and repairs Docker Compose assets for the Flow Bridge, query engine, and frontend services, and opens browser-based setup pages for repository token and model-provider configuration. +Unoplat Code Confluence CLI manages the Code Confluence platform’s local Docker Compose deployment, including versioned release manifests and the Flow Bridge, query engine, and frontend components. It registers and refreshes Git repositories for automated AGENTS.md generation, while checking repository-provider credentials and AI model-provider configuration and reporting application lifecycle results. ## Data Model References -### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L27-L32` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L35-L40` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L43-L46` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L49-L53` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L56-L61` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L64-L70` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L73-L80` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L83-L97` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L100-L114` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/app_runtime.py#L117-L120` - -### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/setup_runtime.py` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/setup_runtime.py#L11-L18` +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/backend/flow_bridge_client.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/backend/flow_bridge_client.py#L16-L20` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/backend/flow_bridge_client.py#L23-L29` + +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/cli_app/context.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/cli_app/context.py#L19-L23` + +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L14-L19` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L22-L27` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L30-L33` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L36-L40` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L43-L48` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L51-L57` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L60-L67` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L70-L73` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/release.py#L76-L79` + +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/repository.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/repository.py#L10-L72` + +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L9-L18` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L21-L29` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L32-L38` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L41-L51` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L54-L66` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L69-L75` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L78-L86` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L89-L95` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/results.py#L98-L105` + +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/setup.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/domain/setup.py#L6-L11` + +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/ports/http_client.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-cli/src/unoplat_code_confluence_cli/ports/http_client.py#L8-L15` diff --git a/unoplat-code-confluence-cli/dependencies_overview.md b/unoplat-code-confluence-cli/dependencies_overview.md index 60f7e3b5..5b713fae 100644 --- a/unoplat-code-confluence-cli/dependencies_overview.md +++ b/unoplat-code-confluence-cli/dependencies_overview.md @@ -3,7 +3,7 @@ - **Package management**: Use `uv` as the package manager for this codebase. - **click**: Purpose: A Python package for building composable command-line interfaces with minimal code. It provides automatic help-page generation, nested commands, and support for lazy-loaded subcommands. - **httpx2**: Purpose: A next-generation HTTP client for Python. It provides synchronous and asynchronous APIs, with support for both HTTP/1.1 and HTTP/2. Official docs: https://httpx2.pydantic.dev/ ; PyPI: https://pypi.org/project/httpx2/ -- **platformdirs**: Purpose: A Python library for determining platform-specific system directories, such as user data, configuration, cache, and log locations. It resolves the correct paths for macOS, Windows, Linux/Unix, and Android, with `_dir` and `_path` variants for each directory. +- **platformdirs**: Purpose: A Python library for determining platform-specific system directories, such as user data, configuration, cache, and log locations. It resolves the correct paths for macOS, Windows, Linux/Unix, and Android, with _dir and _path variants for each directory. - **pydantic**: Purpose: Python data validation and settings management library built around type hints. It validates, parses, and serializes structured data using Python models and can generate JSON Schema. -- **pydantic-settings**: Purpose: Provides Pydantic’s settings management via `BaseSettings`, letting you load configuration from environment variables, dotenv files, and secrets files. It also supports custom settings sources and priority control for how values are resolved. +- **pydantic-settings**: Purpose: Provides Pydantic’s settings management via BaseSettings, letting you load configuration from environment variables, dotenv files, and secrets files. It also supports custom settings sources and priority control for how values are resolved. - **python-on-whales**: Purpose: A Docker client for Python with a 1:1 mapping to the Docker CLI. It provides a typed, object-oriented API for common Docker operations like run, build, compose, and swarm management. diff --git a/unoplat-code-confluence-commons/AGENTS.md b/unoplat-code-confluence-commons/AGENTS.md index b1964614..64938cc1 100644 --- a/unoplat-code-confluence-commons/AGENTS.md +++ b/unoplat-code-confluence-commons/AGENTS.md @@ -30,7 +30,7 @@ This project uses Backlog.md MCP for all task and project management. Before cre -> Generated from branch `dev` at commit `3bbc2c8ae5f6fc7e94628c3b07a936ca5bdbcd02` (2026-06-09). Content may become stale as new commits land. +> Generated from branch `dev` at commit `05234b1efe5762f633f9b3367f217c3b0fe2659b` (2026-07-15). Content may become stale as new commits land. @@ -44,7 +44,7 @@ This project uses Backlog.md MCP for all task and project management. Before cre ### Test - `uv run pytest -v tests/` (config: `pyproject.toml`, `Taskfile.yml`) ### Lint -- Not detected +- `uv run ruff check src/` (config: `ruff.toml`) ### Type Check - `uv run --group dev pyrefly check src/` (config: `pyproject.toml`, `Taskfile.yml`) diff --git a/unoplat-code-confluence-commons/app_interfaces.md b/unoplat-code-confluence-commons/app_interfaces.md index f81f3f71..3ad157fb 100644 --- a/unoplat-code-confluence-commons/app_interfaces.md +++ b/unoplat-code-confluence-commons/app_interfaces.md @@ -10,6 +10,10 @@ No inbound constructs detected. No outbound constructs detected. +## Bidirectional Constructs + +No bidirectional constructs detected. + ## Internal Constructs No internal constructs detected. diff --git a/unoplat-code-confluence-commons/business_domain_references.md b/unoplat-code-confluence-commons/business_domain_references.md index 78c29754..8a148f1d 100644 --- a/unoplat-code-confluence-commons/business_domain_references.md +++ b/unoplat-code-confluence-commons/business_domain_references.md @@ -1,19 +1,19 @@ # Business Domain References ## Domain Summary -This codebase supports Code Confluence, a repository ingestion and code-intelligence platform. It centers on persisting Git repositories, codebases, workflow runs, and agent execution state while cataloging framework features, language/package-manager metadata, and detected source-code spans. It also includes supporting operational models for credentials, feature flags, and AGENTS.md PR/publication tracking. +This package supports Code Confluence, a repository ingestion and code-intelligence platform that models Git repositories, codebases, source files, programming-language and package-manager metadata, and framework relationships. It detects configurable framework features and data-model locations in source code, recording matched spans, confidence, validation evidence, and detection outcomes. It also tracks repository and codebase workflow execution, agent progress and events, generated AGENTS.md snapshots and PR metadata, credentials, and feature flags. ## Data Model References ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/data_model_position.py` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/data_model_position.py#L8-L14` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L51-L76` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L99-L169` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L172-L218` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L221-L239` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L242-L268` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L271-L290` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L58-L99` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L135-L206` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L209-L256` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L259-L277` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L280-L306` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/engine_models.py#L309-L328` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/framework_models.py` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/framework_models.py#L32-L54` diff --git a/unoplat-code-confluence-docs/AGENTS.md b/unoplat-code-confluence-docs/AGENTS.md index 88b6ab09..30c9b6c0 100644 --- a/unoplat-code-confluence-docs/AGENTS.md +++ b/unoplat-code-confluence-docs/AGENTS.md @@ -31,7 +31,7 @@ Reference details: see `business_logic_references.md`. -> Generated from branch `dev` at commit `3bbc2c8ae5f6fc7e94628c3b07a936ca5bdbcd02` (2026-06-09). Content may become stale as new commits land. +> Generated from branch `dev` at commit `05234b1efe5762f633f9b3367f217c3b0fe2659b` (2026-07-15). Content may become stale as new commits land. diff --git a/unoplat-code-confluence-docs/app_interfaces.md b/unoplat-code-confluence-docs/app_interfaces.md index f81f3f71..3ad157fb 100644 --- a/unoplat-code-confluence-docs/app_interfaces.md +++ b/unoplat-code-confluence-docs/app_interfaces.md @@ -10,6 +10,10 @@ No inbound constructs detected. No outbound constructs detected. +## Bidirectional Constructs + +No bidirectional constructs detected. + ## Internal Constructs No internal constructs detected. diff --git a/unoplat-code-confluence-docs/business_domain_references.md b/unoplat-code-confluence-docs/business_domain_references.md index e4b37344..ef69c618 100644 --- a/unoplat-code-confluence-docs/business_domain_references.md +++ b/unoplat-code-confluence-docs/business_domain_references.md @@ -1,7 +1,7 @@ # Business Domain References ## Domain Summary -This codebase powers the documentation site for Unoplat Code Confluence, a developer tool for AI-assisted code understanding and AGENTS.md generation. Its data models mostly cover docs-site content and presentation metadata—changelog entries, announcement banners, SEO settings, route definitions, and framework catalog rows—plus reusable data-table filtering primitives used to navigate that content. The dominant domain is product documentation and release communication for a code-context engine aimed at Python and TypeScript codebases. +This codebase supports a developer documentation site for Unoplat Code Confluence, a code-understanding and developer tooling product. Its models manage framework catalog entries, searchable and faceted data tables, release changelogs, announcement banners, SEO metadata, and documentation routes, emphasizing product education and release communication. ## Data Model References ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-docs/src/components/data-table-filter/core/filters.ts` diff --git a/unoplat-code-confluence-docs/dependencies_overview.md b/unoplat-code-confluence-docs/dependencies_overview.md index fdb633b6..377d902a 100644 --- a/unoplat-code-confluence-docs/dependencies_overview.md +++ b/unoplat-code-confluence-docs/dependencies_overview.md @@ -21,8 +21,8 @@ - **postcss**: Purpose: A tool for transforming CSS with JavaScript. It uses plugins to lint, transpile, and otherwise transform CSS. - **Radix UI React Primitives**: Purpose: An open-source low-level UI component library for building accessible, unstyled, customizable design systems and web apps. It includes primitives such as Separator for visual/semantic separation and Slot for merging props onto a child element. - **radix-ui**: Purpose: An open-source, low-level UI component library for building accessible, customizable design systems and web apps. It provides fully typed, unstyled primitives with built-in WAI-ARIA behavior and incremental adoption via import { ... } from "radix-ui". +- **react**: Purpose: A JavaScript library for building user interfaces from reusable components. It uses JSX and state to create interactive screens, and supports TypeScript via @types/react and @types/react-dom. - **react-day-picker**: Purpose: React DayPicker is a React component for creating date pickers, calendars, and date inputs for web applications. It provides a minimal, customizable UI and supports single, multiple, range, or custom selections. - **react-dom**: Purpose: The react-dom package contains methods supported only for web applications running in the browser DOM environment, not React Native. It provides client/server entry points and APIs such as createRoot, hydrateRoot, createPortal, flushSync, and resource preloading. - **tailwind-merge**: Purpose: Utility function to efficiently merge Tailwind CSS classes in JavaScript/TypeScript without style conflicts. It ships with TypeScript declarations and provides twMerge. - **vite**: Purpose: Vite is a blazing fast frontend build tool for modern web applications. It provides an instant dev server with native ESM and fast HMR, plus an optimized production build with full TypeScript typing support. -- **react**: Purpose: A JavaScript library for building user interfaces from reusable components. It uses JSX and state to create interactive screens, and supports TypeScript via @types/react and @types/react-dom. diff --git a/unoplat-code-confluence-frontend/AGENTS.md b/unoplat-code-confluence-frontend/AGENTS.md index 49f253fd..c6f142da 100644 --- a/unoplat-code-confluence-frontend/AGENTS.md +++ b/unoplat-code-confluence-frontend/AGENTS.md @@ -77,7 +77,7 @@ Before substantial work: -> Generated from branch `dev` at commit `3bbc2c8ae5f6fc7e94628c3b07a936ca5bdbcd02` (2026-06-09). Content may become stale as new commits land. +> Generated from branch `dev` at commit `05234b1efe5762f633f9b3367f217c3b0fe2659b` (2026-07-15). Content may become stale as new commits land. diff --git a/unoplat-code-confluence-frontend/app_interfaces.md b/unoplat-code-confluence-frontend/app_interfaces.md index 1d708965..bb4e23bb 100644 --- a/unoplat-code-confluence-frontend/app_interfaces.md +++ b/unoplat-code-confluence-frontend/app_interfaces.md @@ -8,14 +8,61 @@ No inbound constructs detected. ## Outbound Constructs -No outbound constructs detected. +### http_client (axios) + +- `src/features/agent-feedback/api.ts`: L75: apiClient.post( "/code-confluence/feedback", payload, ) +- `src/features/app-feedback/api.ts`: L42: queryEngineClient.post("/v1/app-feedback", payload) +- `src/lib/api.ts`: L142: apiClient.post( "/ingest-token", null, { params: queryParams, headers: { Authorization: `Bearer ${token}`, "Content-Type": undefined, }, }, ) +- `src/lib/api.ts`: L219: apiClient.get("/repos", { params }) +- `src/lib/api.ts`: L236: apiClient.post( "/repositories", repository, ) +- `src/lib/api.ts`: L267: apiClient.put( "/update-token", null, { params: queryParams, headers: { Authorization: `Bearer ${token}`, "Content-Type": undefined, }, }, ) +- `src/lib/api.ts`: L319: apiClient.delete( "/delete-token", { params: queryParams }, ) +- `src/lib/api.ts`: L333: apiClient.get( `/flags/${flagName}`, ) +- `src/lib/api.ts`: L362: apiClient.post( "/repository-data", config, ) +- `src/lib/api.ts`: L400: apiClient.get("/repository-data", { params: { repository_name: repositoryName, repository_owner_name: ownerName, }, }) +- `src/lib/api.ts`: L437: apiClient.get( "/user-details", { params: { provider_key: providerKey }, }, ) +- `src/lib/api.ts`: L456: apiClient.get("/parent-workflow-jobs") +- `src/lib/api.ts`: L489: apiClient.get( "/repository-status", { params }, ) +- `src/lib/api.ts`: L537: apiClient.post( "/code-confluence/issues", requestData, ) +- `src/lib/api.ts`: L557: apiClient.get( "/codebase-metadata", { params }, ) +- `src/lib/api.ts`: L576: apiClient.get("/get/ingestedRepositories") +- `src/lib/api.ts`: L597: apiClient.post("/refresh-repository", repository) +- `src/lib/api.ts`: L614: apiClient.delete( "/delete-repository", { data: repository }, ) +- `src/lib/api.ts`: L667: queryEngineClient.get("/v1/codebase-agent-rules", { params, }) +- `src/lib/api.ts`: L690: queryEngineClient.post("/v1/repository-agent-run/cancel", null, { params, }) +- `src/lib/api.ts`: L705: queryEngineClient.post("/v1/repository-agent-md-pr", payload) +- `src/lib/api.ts`: L724: queryEngineClient.get("/v1/repository-agent-md-pr", { params }) +- `src/lib/api.ts`: L765: queryEngineClient.get("/v1/repository-agent-snapshot", { params, }) +- `src/lib/api.ts`: L862: queryEngineClient.get("/v1/providers") +- `src/lib/api.ts`: L889: queryEngineClient.get("/v1/model-config") +- `src/lib/api.ts`: L925: queryEngineClient.put( "/v1/model-config", bodyConfig, { headers }, ) +- `src/lib/api.ts`: L945: queryEngineClient.delete("/v1/model-config") +- `src/lib/api.ts`: L957: queryEngineClient.post( "/v1/model-config/codex-openai/oauth/authorize", payload, ) +- `src/lib/api.ts`: L972: queryEngineClient.get( `/v1/model-config/codex-openai/oauth/flows/${flowId}`, ) +- `src/lib/api.ts`: L985: queryEngineClient.get( "/v1/model-config/codex-openai/oauth/status", ) +- `src/lib/api.ts`: L998: queryEngineClient.delete("/v1/model-config/codex-openai/oauth") +- `src/lib/api/repositories-api.ts`: L29: apiClient.get>( "/repos", { params: { provider_key: providerKey, per_page: perPage, cursor: cursor ?? undefined, filterValues, }, }, ) +- `src/lib/api/repository-provider-api.ts`: L17: apiClient.get( "/repository-providers", ) +- `src/lib/api/repository-provider-api.ts`: L67: apiClient.post( "/ingest-token", null, { params: queryParams, headers: { Authorization: `Bearer ${patToken}`, }, }, ) +- `src/lib/api/tool-config-api.ts`: L19: queryEngineClient.get("/v1/tool-config") +- `src/lib/api/tool-config-api.ts`: L32: queryEngineClient.get(`/v1/tool-config/${provider}`) +- `src/lib/api/tool-config-api.ts`: L55: queryEngineClient.put( `/v1/tool-config/${provider}`, null, { headers: { Authorization: `Bearer ${sanitizedApiKey}` }, }, ) +- `src/lib/api/tool-config-api.ts`: L73: queryEngineClient.delete( `/v1/tool-config/${provider}`, ) + +## Bidirectional Constructs + +### realtime_sync (@tanstack/react-db) + +- `src/features/repository-agent-snapshots/hooks.ts`: L133: useLiveInfiniteQuery( (q) => q .from({ events: collection }) .orderBy(({ events }) => events.event_id, "desc"), { pageSize, }, [scope.owner, scope.repository, scope.runId, normalizedCodebaseName, pageSize], ) +- `src/features/repository-agent-snapshots/hooks.ts`: L64: useLiveQuery( (q) => { if (!collection) { return undefined; } return q.from({ snapshots: collection }); }, [collection], ) +- `src/features/repository-agent-snapshots/hooks.ts`: L96: useLiveQuery( (q) => { if (!collection) { return undefined; } return q .from({ progress: collection }) .orderBy(({ progress }) => progress.codebase_name, "asc"); }, [collection], ) ## Internal Constructs ### key_value_store.store_definition (zustand) - `src/features/agent-feedback/store.ts`: L59: create() -- `src/features/app-feedback/store.ts`: L10: export const useAppFeedbackSheetStore = create()( (set) => ({ isOpen: false, open: () => set({ isOpen: true }), close: () => set({ isOpen: false }), toggle: () => set((state) => ({ isOpen: !state.isOpen })), }), ); +- `src/features/app-feedback/store.ts`: L10: create() - `src/stores/useAuthStore.ts`: L11: create() - `src/stores/useCommandPaletteStore.ts`: L10: create() - `src/stores/useDevModeStore.ts`: L9: create() diff --git a/unoplat-code-confluence-frontend/business_domain_references.md b/unoplat-code-confluence-frontend/business_domain_references.md index 612ea514..53c28348 100644 --- a/unoplat-code-confluence-frontend/business_domain_references.md +++ b/unoplat-code-confluence-frontend/business_domain_references.md @@ -1,7 +1,7 @@ # Business Domain References ## Domain Summary -This frontend is for an AI-powered code analysis and repository operations platform that onboards GitHub/GitLab repositories, ingests them into workflow runs, and presents generated Agent MD outputs such as engineering workflows, dependency guides, business logic summaries, and app interface scans. It also manages model-provider and tool configuration, OAuth and credential flows, and feedback capture that can turn run-specific comments into GitHub issues. +This frontend supports a code analysis and repository operations platform that onboards GitHub/GitLab repositories, ingests codebases, tracks workflow runs, and presents AI-generated snapshots covering engineering workflows, dependencies, business logic, and application interfaces. It also manages model providers, tools, credentials and OAuth, while capturing agent and application feedback associated with analysis runs and GitHub issue reporting. ## Data Model References ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/agent-feedback/api.ts` @@ -92,28 +92,28 @@ This frontend is for an AI-powered code analysis and repository operations platf - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/agent-md-to-markdown.ts#L8-L10` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L52-L55` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L58-L60` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L66-L71` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L186-L191` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L416-L422` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L500-L510` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L515-L521` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L623-L625` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L627-L631` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L633-L637` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L639-L646` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L648-L651` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L728-L734` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L739-L743` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L785-L802` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L804-L807` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L809-L814` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L816-L818` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L820-L823` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L825-L830` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L832-L835` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L840-L845` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L55-L58` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L61-L63` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L69-L74` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L189-L194` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L419-L425` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L503-L513` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L518-L524` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L626-L628` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L630-L634` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L636-L640` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L642-L649` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L651-L654` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L731-L737` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L742-L746` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L788-L805` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L807-L810` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L812-L817` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L819-L821` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L823-L826` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L828-L833` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L835-L838` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api.ts#L843-L848` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api/repositories-api.ts` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/api/repositories-api.ts#L5-L10` @@ -172,28 +172,30 @@ This frontend is for an AI-powered code analysis and repository operations platf - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L71-L78` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L80-L88` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L91-L93` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L96-L102` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L108-L117` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L119-L124` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L126-L128` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L135-L138` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L141-L145` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L151-L159` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L162-L165` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L168-L180` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L183-L185` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L190-L196` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L207-L211` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L216-L232` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L235-L242` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L245-L253` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L256-L259` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L262-L265` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L268-L270` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L273-L284` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L300-L304` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L306-L308` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L311-L316` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L96-L99` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L101-L104` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L106-L113` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L119-L128` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L130-L135` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L137-L139` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L146-L149` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L152-L156` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L162-L170` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L173-L176` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L179-L191` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L194-L196` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L201-L207` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L218-L222` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L227-L243` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L246-L253` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L256-L264` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L267-L270` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L273-L276` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L279-L281` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L284-L295` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L311-L315` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L317-L319` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L322-L327` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types/agent-events.ts` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types/agent-events.ts#L6-L12` diff --git a/unoplat-code-confluence-frontend/dependencies_overview.md b/unoplat-code-confluence-frontend/dependencies_overview.md index 12edb3c5..eb8fe56d 100644 --- a/unoplat-code-confluence-frontend/dependencies_overview.md +++ b/unoplat-code-confluence-frontend/dependencies_overview.md @@ -38,7 +38,7 @@ - **react-icons**: Purpose: React Icons provides popular icon packs as React SVG components, with ES6 imports so you can import only the icons your project uses. TypeScript support is built in, so you do not need separate @types packages. - **react-markdown**: Purpose: React component that takes a string of markdown and safely renders it to React elements. Supports remark/rehype plugins and component overrides to customize how markdown is transformed and displayed. - **shadcn-ui**: Purpose: shadcn/ui is a set of beautifully-designed, accessible components and a code distribution platform. It’s an open-code approach for building your own component library with composable UI primitives and a CLI for distributing components. -- **sonner**: Purpose: An opinionated toast component for React. Render in your app and call toast() from anywhere to show notifications. Sources: https://sonner.emilkowal.ski/ ; https://github.com/emilkowalski/sonner +- **sonner**: Purpose: An opinionated toast component for React. Render in your app and call toast() from anywhere to show notifications. Sources: https://sonner.emilkowal.ski/ ; https://github.com/emilkowalski/sonner - **tailwind-merge**: Purpose: A TypeScript utility for merging Tailwind CSS class strings without style conflicts. It exposes helpers like twMerge and extendTailwindMerge to resolve conflicting classes and customize merge behavior. - **vaul**: Purpose: A drawer component for React. Vaul is an unstyled drawer that can act as a Dialog replacement on tablet and mobile devices. - **wicg-inert**: Purpose: Polyfill for the inert attribute/property, letting you mark parts of the DOM as inert so they don’t receive user interaction and should be hidden from assistive technology. Import it as a side effect in your app (import "wicg-inert";). diff --git a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/AGENTS.md b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/AGENTS.md index ce433879..0c2803d2 100644 --- a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/AGENTS.md +++ b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/AGENTS.md @@ -103,7 +103,7 @@ task code-quality # Run all checks (lint + typecheck + schema va -> Generated from branch `dev` at commit `3bbc2c8ae5f6fc7e94628c3b07a936ca5bdbcd02` (2026-06-09). Content may become stale as new commits land. +> Generated from branch `dev` at commit `05234b1efe5762f633f9b3367f217c3b0fe2659b` (2026-07-15). Content may become stale as new commits land. diff --git a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/app_interfaces.md b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/app_interfaces.md index 5c7d76b2..4247cd83 100644 --- a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/app_interfaces.md +++ b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/app_interfaces.md @@ -9,7 +9,7 @@ Format: `path: L: ` where path is codebase-relative. - `src/code_confluence_flow_bridge/github_app/router.py`: L144: @router.get( "/app-manifest/callback", response_model=ManifestConversionResponse, status_code=status.HTTP_200_OK, ) - `src/code_confluence_flow_bridge/github_app/router.py`: L245: @router.post( "/webhook", status_code=status.HTTP_202_ACCEPTED, ) - `src/code_confluence_flow_bridge/github_app/router.py`: L55: @router.post( "/app-manifest", response_model=ManifestGenerationResponse, status_code=status.HTTP_201_CREATED, ) -- `src/code_confluence_flow_bridge/main.py`: L415: @app.post("/start-ingestion", status_code=201) +- `src/code_confluence_flow_bridge/main.py`: L419: @app.post("/start-ingestion", status_code=201) - `src/code_confluence_flow_bridge/routers/credentials/router.py`: L23: @router.post("/ingest-token", status_code=201) - `src/code_confluence_flow_bridge/routers/credentials/router.py`: L55: @router.put("/update-token", status_code=200) - `src/code_confluence_flow_bridge/routers/credentials/router.py`: L87: @router.delete("/delete-token", status_code=200) @@ -18,20 +18,103 @@ Format: `path: L: ` where path is codebase-relative. - `src/code_confluence_flow_bridge/routers/flags/router.py`: L48: @router.put("/flags/{flag_name}", status_code=200) - `src/code_confluence_flow_bridge/routers/github_issues/router.py`: L203: @router.post("/feedback", response_model=IssueTracking) - `src/code_confluence_flow_bridge/routers/github_issues/router.py`: L49: @router.post("/issues", response_model=IssueTracking) +- `src/code_confluence_flow_bridge/routers/health/router.py`: L13: @router.get("/health") +- `src/code_confluence_flow_bridge/routers/health/router.py`: L26: @router.get("/ready") - `src/code_confluence_flow_bridge/routers/operations/router.py`: L32: @router.get( "/parent-workflow-jobs", response_model=ParentWorkflowJobListResponse, description="Get all parent workflow jobs data without pagination", ) - `src/code_confluence_flow_bridge/routers/operations/router.py`: L84: @router.get( "/get/ingestedRepositories", response_model=IngestedRepositoriesListResponse, description="Get all ingested repositories without pagination", ) - `src/code_confluence_flow_bridge/routers/providers/router.py`: L22: @router.get("/repository-providers", response_model=RepositoryProvidersResponse) - `src/code_confluence_flow_bridge/routers/providers/router.py`: L36: @router.get("/repos", response_model=PaginatedResponse) - `src/code_confluence_flow_bridge/routers/providers/router.py`: L63: @router.get("/user-details", status_code=200) -- `src/code_confluence_flow_bridge/routers/repository/router.py`: L154: @router.get( "/repository-data", response_model=GitHubRepoResponseConfiguration, ) -- `src/code_confluence_flow_bridge/routers/repository/router.py`: L212: @router.get( "/codebase-metadata", response_model=CodebaseMetadataListResponse, ) -- `src/code_confluence_flow_bridge/routers/repository/router.py`: L276: @router.delete("/delete-repository", status_code=200) -- `src/code_confluence_flow_bridge/routers/repository/router.py`: L366: @router.post( "/refresh-repository", response_model=RefreshRepositoryResponse, status_code=201 ) -- `src/code_confluence_flow_bridge/routers/repository/router.py`: L79: @router.get( "/repository-status", response_model=GithubRepoStatus, ) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L160: @router.get( "/repository-data", response_model=GitHubRepoResponseConfiguration, ) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L218: @router.get( "/codebase-metadata", response_model=CodebaseMetadataListResponse, ) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L282: @router.delete("/delete-repository", status_code=200) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L372: @router.post("/repositories", response_model=RepositoryAddResponse, status_code=201) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L467: @router.post( "/refresh-repository", response_model=RefreshRepositoryResponse, status_code=201 ) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L85: @router.get( "/repository-status", response_model=GithubRepoStatus, ) ## Outbound Constructs -No outbound constructs detected. +### db_sql (sqlalchemy) + +- `src/code_confluence_flow_bridge/github_app/service.py`: L192: session.execute( delete(GithubAppManifestRecord).where(GithubAppManifestRecord.state == state) ) +- `src/code_confluence_flow_bridge/github_app/service.py`: L193: delete(GithubAppManifestRecord) +- `src/code_confluence_flow_bridge/github_app/service.py`: L195: session.add(record) +- `src/code_confluence_flow_bridge/github_app/service.py`: L214: session.delete(record) +- `src/code_confluence_flow_bridge/github_app/service.py`: L221: delete(GithubAppManifestRecord) +- `src/code_confluence_flow_bridge/github_app/service.py`: L225: session.execute(stmt) +- `src/code_confluence_flow_bridge/github_app/service.py`: L258: session.add(credential) +- `src/code_confluence_flow_bridge/github_app/service.py`: L260: session.add( Credentials( credential_key=key, token_hash=encrypted_value, created_at=current_time, updated_at=current_time, ) ) +- `src/code_confluence_flow_bridge/processor/db/postgres/child_workflow_db_activity.py`: L126: session.add(workflow_run) +- `src/code_confluence_flow_bridge/processor/db/postgres/child_workflow_db_activity.py`: L141: session.add(workflow_run) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L106: insert(UnoplatCodeConfluenceGitRepository) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L111: self.session.execute(stmt) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L136: insert(UnoplatCodeConfluenceCodebase) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L141: self.session.execute(stmt) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L156: insert(UnoplatCodeConfluencePackageManagerMetadata) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L164: self.session.execute(stmt) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L181: insert(UnoplatCodeConfluenceFile) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L186: self.session.execute(stmt) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L199: insert(UnoplatCodeConfluenceCodebaseFramework) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L207: self.session.execute(stmt) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L229: insert(UnoplatCodeConfluenceFileFrameworkFeature) +- `src/code_confluence_flow_bridge/processor/db/postgres/code_confluence_relational_ingestion.py`: L241: self.session.execute(stmt) +- `src/code_confluence_flow_bridge/processor/db/postgres/framework_loader.py`: L298: session.execute(delete(FeatureAbsolutePath)) +- `src/code_confluence_flow_bridge/processor/db/postgres/framework_loader.py`: L299: session.execute(delete(FrameworkFeature)) +- `src/code_confluence_flow_bridge/processor/db/postgres/framework_loader.py`: L300: session.execute(delete(Framework) ) +- `src/code_confluence_flow_bridge/processor/db/postgres/framework_loader.py`: L304: session.add_all(frameworks) +- `src/code_confluence_flow_bridge/processor/db/postgres/framework_loader.py`: L305: session.add_all(features) +- `src/code_confluence_flow_bridge/processor/db/postgres/framework_loader.py`: L306: session.add_all(absolute_paths) +- `src/code_confluence_flow_bridge/processor/db/postgres/parent_workflow_db_activity.py`: L122: session.add(workflow_run) +- `src/code_confluence_flow_bridge/processor/db/postgres/parent_workflow_db_activity.py`: L157: session.add(workflow_run) +- `src/code_confluence_flow_bridge/processor/db/postgres/parent_workflow_db_activity.py`: L192: session.add(repository) +- `src/code_confluence_flow_bridge/processor/db/postgres/parent_workflow_db_activity.py`: L91: session.add(config) +- `src/code_confluence_flow_bridge/processor/db/postgres/parent_workflow_db_activity.py`: L96: session.add(existing_config) +- `src/code_confluence_flow_bridge/routers/credentials/service.py`: L119: session.add(credential) +- `src/code_confluence_flow_bridge/routers/credentials/service.py`: L139: session.delete(credential) +- `src/code_confluence_flow_bridge/routers/credentials/service.py`: L57: session.add(token_flag) +- `src/code_confluence_flow_bridge/routers/credentials/service.py`: L80: session.add( Credentials( namespace=namespace, provider_key=provider_key, secret_kind=secret_kind, token_hash=encrypt_token(token), metadata_json=build_credential_metadata(url), created_at=current_time, updated_at=current_time, ) ) +- `src/code_confluence_flow_bridge/routers/flags/router.py`: L62: session.add(flag) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L324: session.delete(db_obj) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L327: session.delete(relational_repo) +- `src/code_confluence_flow_bridge/routers/repository/router.py`: L425: session.add(repository) +- `tests/integration/test_framework_definitions_ingestion.py`: L57: session.execute(delete(FeatureAbsolutePath)) +- `tests/integration/test_framework_definitions_ingestion.py`: L58: session.execute(delete(FrameworkFeature)) +- `tests/integration/test_framework_definitions_ingestion.py`: L59: session.execute(delete(Framework)) +- `tests/integration/test_framework_definitions_ingestion.py`: L61: session.add_all(frameworks) +- `tests/integration/test_framework_definitions_ingestion.py`: L62: session.add_all(features) +- `tests/integration/test_framework_definitions_ingestion.py`: L63: session.add_all(absolute_paths) +- `tests/processor/db/test_framework_query_service.py`: L39: session.execute(delete(FeatureAbsolutePath)) +- `tests/processor/db/test_framework_query_service.py`: L40: session.execute(delete(FrameworkFeature)) +- `tests/processor/db/test_framework_query_service.py`: L41: session.execute(delete(Framework)) +- `tests/processor/db/test_framework_query_service.py`: L42: session.add_all(frameworks) +- `tests/processor/db/test_framework_query_service.py`: L43: session.add_all(features) +- `tests/processor/db/test_framework_query_service.py`: L44: session.add_all(absolute_paths) +- `tests/utils/sync_db_cleanup.py`: L30: session.execute(text("TRUNCATE TABLE repository CASCADE")) +- `tests/utils/sync_db_cleanup.py`: L31: session.execute(text("TRUNCATE TABLE code_confluence_git_repository CASCADE")) + +### graphql_client (gql) + +- `src/code_confluence_flow_bridge/routers/providers/service.py`: L211: GQLClient( transport=transport, fetch_schema_from_transport=False, ) + +### task_queue_enqueue (temporalio) + +- `src/code_confluence_flow_bridge/processor/codebase_child_workflow.py`: L123: workflow.execute_activity( activity=GenericCodebaseProcessingActivity.process_codebase_generic, args=[codebase_processing_envelope], start_to_close_timeout=timedelta(weeks=1), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/codebase_child_workflow.py`: L81: workflow.execute_activity( activity=PackageMetadataActivity.get_package_metadata, args=[package_metadata_envelope], start_to_close_timeout=timedelta(minutes=10), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/codebase_child_workflow.py`: L97: workflow.execute_activity( activity=PackageManagerMetadataIngestion.insert_package_manager_metadata, args=[package_manager_metadata_envelope], start_to_close_timeout=timedelta(minutes=10), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/parent_workflow_interceptor.py`: L122: workflow.execute_activity( activity=ParentWorkflowDbActivity.update_repository_workflow_status, args=[running_env], start_to_close_timeout=timedelta(minutes=1), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/parent_workflow_interceptor.py`: L199: workflow.execute_activity( activity=ParentWorkflowDbActivity.update_repository_workflow_status, args=[final_env], start_to_close_timeout=timedelta(minutes=1), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/parent_workflow_interceptor.py`: L263: workflow.execute_activity( activity=ChildWorkflowDbActivity.update_codebase_workflow_status, args=[running_child_env], start_to_close_timeout=timedelta(minutes=1), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/parent_workflow_interceptor.py`: L345: workflow.execute_activity( activity=ChildWorkflowDbActivity.update_codebase_workflow_status, args=[final_child_env], start_to_close_timeout=timedelta(minutes=1), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/parent_workflow_interceptor.py`: L368: workflow.execute_activity( activity=ParentWorkflowDbActivity.update_repository_workflow_status, args=[parent_failed_env], start_to_close_timeout=timedelta(minutes=1), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/repo_workflow.py`: L142: workflow.start_child_workflow( CodebaseChildWorkflow.run, args=[child_workflow_envelope], id=child_workflow_id, parent_close_policy=ParentClosePolicy.TERMINATE, ) +- `src/code_confluence_flow_bridge/processor/repo_workflow.py`: L188: workflow.execute_activity( activity=AgentMdUpdateActivity.trigger_agent_md_update, args=[agent_md_update_envelope], start_to_close_timeout=timedelta(seconds=30), retry_policy=RetryPolicy( maximum_attempts=8, initial_interval=timedelta(seconds=5), backoff_coefficient=2.0, maximum_interval=timedelta(minutes=2), ), ) +- `src/code_confluence_flow_bridge/processor/repo_workflow.py`: L80: workflow.execute_activity( activity=GitActivity.process_git_activity, args=[git_activity_envelope], start_to_close_timeout=timedelta(minutes=10), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/processor/repo_workflow.py`: L96: workflow.execute_activity( activity=ConfluenceGitGraph.insert_git_repo_into_graph_db, args=[git_graph_envelope], start_to_close_timeout=timedelta(minutes=10), retry_policy=ActivityRetriesConfig.DEFAULT, ) +- `src/code_confluence_flow_bridge/utility/workflow_helpers.py`: L58: temporal_client.start_workflow( RepoWorkflow.run, arg=envelope, id=workflow_id, task_queue="unoplat-code-confluence-repository-context-ingestion", ) + +## Bidirectional Constructs + +No bidirectional constructs detected. ## Internal Constructs diff --git a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/business_domain_references.md b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/business_domain_references.md index 7d984ff6..c6889dcd 100644 --- a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/business_domain_references.md +++ b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/business_domain_references.md @@ -1,7 +1,7 @@ # Business Domain References ## Domain Summary -This codebase is centered on GitHub repository ingestion and code intelligence for multi-codebase projects. It parses source files and package manifests, extracts imports and structural signals, and detects programming languages, frameworks, package managers, and workspace layouts to build rich repository/codebase metadata. It also manages the surrounding workflow orchestration, GitHub App onboarding, and issue/feedback tracking used by the ingestion pipeline. +This service manages repository ingestion and code intelligence for GitHub projects. It models repositories, codebases, packages, files, imports, source structures, dependencies, package managers, and workspace layouts across Python and TypeScript codebases. It also coordinates workflow execution, GitHub App onboarding, repository lifecycle operations, and issue or feedback tracking. ## Data Model References ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/engine/programming_language/common/language_service.py` @@ -94,30 +94,35 @@ This codebase is centered on GitHub repository ingestion and code intelligence f - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/detection/typescript/rules.py#L43-L46` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L15-L25` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L28-L35` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L38-L84` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L87-L94` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L97-L103` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L111-L126` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L129-L148` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L151-L157` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L160-L164` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L167-L170` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L173-L185` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L188-L199` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L202-L209` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L212-L230` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L233-L262` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L265-L296` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L299-L304` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L312-L326` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L329-L334` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L337-L342` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L345-L351` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L354-L362` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L365-L372` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L375-L380` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L19-L29` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L32-L39` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L42-L88` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L91-L98` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L101-L107` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L115-L130` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L133-L152` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L155-L161` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L164-L168` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L171-L174` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L177-L219` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L222-L229` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L232-L242` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L245-L256` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L259-L266` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L269-L287` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L290-L319` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L322-L353` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L356-L361` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L369-L383` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L386-L391` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L394-L399` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L402-L408` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L411-L419` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L422-L429` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/github_repo.py#L432-L437` + +### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/repository_git_url.py` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/github/repository_git_url.py#L10-L19` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/workflow/parent_child_clone_metadata.py` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/src/code_confluence_flow_bridge/models/workflow/parent_child_clone_metadata.py#L4-L6` diff --git a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/dependencies_overview.md b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/dependencies_overview.md index 8cbf4a95..88e27a5e 100644 --- a/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/dependencies_overview.md +++ b/unoplat-code-confluence-ingestion/code-confluence-flow-bridge/dependencies_overview.md @@ -8,6 +8,7 @@ - **gql**: Purpose: GraphQL client for Python that plays nicely with other GraphQL implementations compatible with the spec. Supports multiple transports for communicating with the backend, with sync and async usage patterns. - **greenlet**: Purpose: Greenlet provides lightweight coroutines for in-process sequential concurrent programming. It can be used on its own or with frameworks like gevent to build cooperative control flow and asynchronous I/O. - **grpcio**: Purpose: Python package for gRPC. It provides the runtime APIs used to build gRPC clients and servers, with protocol-buffer-generated code split into _pb2.py and _pb2_grpc.py files. +- **httpx2**: Purpose: HTTPX2 is a fully featured HTTP client library for Python 3 with both synchronous and asynchronous APIs, plus support for HTTP/1.1, HTTP/2, and an integrated command-line client. - **loguru**: Purpose: A Python logging library that provides a pre-instanced logger for easy use and aims to make logging less painful by simplifying configuration. It adds useful logging functionality while keeping usage as simple as from loguru import logger. - **opentelemetry-api**: Purpose: Provides the OpenTelemetry API for Python: abstract classes and no-op implementations that follow the OpenTelemetry specification. Libraries should depend on this API and let applications choose the SDK implementation. - **opentelemetry-exporter-otlp**: Purpose: Convenience package for OpenTelemetry Collector exporters in Python. It installs the OTLP exporters for gRPC and HTTP/protobuf so telemetry can be sent to an OpenTelemetry Collector or other OTLP endpoint. @@ -28,6 +29,5 @@ - **tomlkit**: Purpose: Style-preserving TOML library for Python. Parses, edits, and writes TOML 1.0.0 documents while preserving comments, whitespace, indentation, and ordering. - **tree-sitter-language-pack**: Purpose: Python bindings for tree-sitter-language-pack, providing access to 305 pre-compiled tree-sitter parsers with on-demand downloads. Also exposes helpers to get languages/parsers and run structured source-code analysis via process(). - **typing-extensions**: Purpose: Backports and experimental type hints for Python. It complements the standard typing module by adding runtime support for newer typing features on older Python versions and for experimental PEP-based features. -- **validate-pyproject**: Purpose: Command-line tool and Python library for validating pyproject.toml files with JSON Schema. Includes checks for PEP 517, PEP 518, PEP 621, PEP 639, and PEP 735. -- **httpx2**: Purpose: HTTPX2 is a fully featured HTTP client library for Python 3 with both synchronous and asynchronous APIs, plus support for HTTP/1.1, HTTP/2, and an integrated command-line client. - **unoplat-code-confluence-commons**: Purpose: internal_dependency +- **validate-pyproject**: Purpose: Command-line tool and Python library for validating pyproject.toml files with JSON Schema. Includes checks for PEP 517, PEP 518, PEP 621, PEP 639, and PEP 735. diff --git a/unoplat-code-confluence-openmetadata/AGENTS.md b/unoplat-code-confluence-openmetadata/AGENTS.md index 129fb481..1bc7b683 100644 --- a/unoplat-code-confluence-openmetadata/AGENTS.md +++ b/unoplat-code-confluence-openmetadata/AGENTS.md @@ -1,13 +1,13 @@ -> Generated from branch `dev` at commit `3bbc2c8ae5f6fc7e94628c3b07a936ca5bdbcd02` (2026-06-09). Content may become stale as new commits land. +> Generated from branch `dev` at commit `05234b1efe5762f633f9b3367f217c3b0fe2659b` (2026-07-15). Content may become stale as new commits land. ## Engineering Workflow ### Install -- `uv sync` — run from the repository root using `pyproject.toml`. +- `uv sync --group dev --group test` — run from the repository root using `pyproject.toml`. ### Build - `uv build --package unoplat-code-confluence-openmetadata` — run from the repository root using `pyproject.toml`. @@ -16,19 +16,20 @@ - Not detected. ### Test -- `uv run pytest` — run from the repository root using `pyproject.toml`. +- `uv run --group test pytest -v tests/` — run from the repository root using `pyproject.toml`. ### Lint -- `uv run ruff check src tests` — run from the repository root using `pyproject.toml`. +- `uv run --group dev ruff check src/` — run from the repository root using `pyproject.toml`. ### Type Check -- `uv run basedpyright` — run from the repository root using `pyproject.toml`. +- `uv run --group dev pyrefly check src/` — run from the repository root using `pyproject.toml`. ## Dependency Guide See [`dependencies_overview.md`](./dependencies_overview.md) for the full dependency catalog and usage notes. ## Business Domain ### Description + This project is an OpenMetadata ingestion connector for Code Confluence, a repository-analysis system that turns query-engine snapshots into catalog assets. It publishes a developer-tooling domain and data product, then maps each codebase into API services, collections, and route-level endpoints enriched with engineering workflow, dependency, business-logic, and interface metadata. The core business focus is capturing deterministic source-code context and evidence so developers and AI agents can navigate repository behavior inside OpenMetadata. ### References diff --git a/unoplat-code-confluence-openmetadata/app_interfaces.md b/unoplat-code-confluence-openmetadata/app_interfaces.md index f81f3f71..1be273be 100644 --- a/unoplat-code-confluence-openmetadata/app_interfaces.md +++ b/unoplat-code-confluence-openmetadata/app_interfaces.md @@ -8,7 +8,13 @@ No inbound constructs detected. ## Outbound Constructs -No outbound constructs detected. +### http_client (httpx) + +- `src/unoplat_code_confluence_openmetadata/client.py`: L47: self._client.get( SNAPSHOT_ENDPOINT_PATH, params=params, ) + +## Bidirectional Constructs + +No bidirectional constructs detected. ## Internal Constructs diff --git a/unoplat-code-confluence-openmetadata/business_domain_references.md b/unoplat-code-confluence-openmetadata/business_domain_references.md index a45f7c02..8b73c6ef 100644 --- a/unoplat-code-confluence-openmetadata/business_domain_references.md +++ b/unoplat-code-confluence-openmetadata/business_domain_references.md @@ -1,7 +1,7 @@ # Business Domain References ## Domain Summary -This repository is an OpenMetadata ingestion connector for Code Confluence, a repository-analysis system that turns query-engine snapshots into catalog assets. It publishes a developer-tooling domain and data product, then maps each codebase into API services, collections, and route-level endpoints enriched with engineering workflow, dependency, business-logic, and interface metadata. The core business focus is capturing deterministic source-code context and evidence so developers and AI agents can navigate repository behavior inside OpenMetadata. +This project is an OpenMetadata ingestion connector for Code Confluence, a repository-analysis system that retrieves validated query-engine snapshots for repositories and codebases. Its data models capture business logic, source-file evidence, engineering workflows, dependencies, application interfaces, glossary terms, and programming-language metadata. These snapshots are transformed into developer-tooling catalog assets such as API services, codebase collections, and route-level endpoints for repository discovery and AI-assisted code understanding. ## Data Model References ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-openmetadata/src/unoplat_code_confluence_openmetadata/config.py` diff --git a/unoplat-code-confluence-openmetadata/dependencies_overview.md b/unoplat-code-confluence-openmetadata/dependencies_overview.md index 3930f42d..6b602dfa 100644 --- a/unoplat-code-confluence-openmetadata/dependencies_overview.md +++ b/unoplat-code-confluence-openmetadata/dependencies_overview.md @@ -1,7 +1,7 @@ # Dependencies Overview - **Package management**: Use `uv` as the package manager for this codebase. -- **cachetools**: Purpose: Provides memoizing cache collections and decorators for Python, including LRU/LFU/FIFO/TTL caches and `cached`/`cachedmethod` helpers. Official docs: https://cachetools.readthedocs.io/en/latest/index.html +- **cachetools**: Purpose: Provides memoizing cache collections and decorators for Python, including LRU/LFU/FIFO/TTL caches and cached/cachedmethod helpers. Official docs: https://cachetools.readthedocs.io/en/latest/index.html - **httpx**: Purpose: A next-generation HTTP client for Python 3 with both sync and async APIs. It provides a broadly requests-compatible interface and supports HTTP/1.1 and HTTP/2. - **openmetadata-ingestion**: Purpose: Python package for OpenMetadata’s ingestion framework and Python SDK. It provides the high-level API and connector extras used to build and run metadata ingestion pipelines against an OpenMetadata server. - **pydantic**: Purpose: Pydantic is a Python library for data validation and serialization built around type hints. It lets you define models in pure Python, validate input data, and generate JSON Schema. diff --git a/unoplat-code-confluence-query-engine/AGENTS.md b/unoplat-code-confluence-query-engine/AGENTS.md index 678d6c84..848f1689 100644 --- a/unoplat-code-confluence-query-engine/AGENTS.md +++ b/unoplat-code-confluence-query-engine/AGENTS.md @@ -55,7 +55,7 @@ This project uses Backlog.md MCP for all task and project management. Before cre -> Generated from branch `dev` at commit `3bbc2c8ae5f6fc7e94628c3b07a936ca5bdbcd02` (2026-06-09). Content may become stale as new commits land. +> Generated from branch `dev` at commit `05234b1efe5762f633f9b3367f217c3b0fe2659b` (2026-07-15). Content may become stale as new commits land. @@ -63,7 +63,8 @@ This project uses Backlog.md MCP for all task and project management. Before cre ### Install - `task sync` (repo root; `Taskfile.yml` -> `uv sync`) ### Build -- Not detected +- `docker build -f Dockerfile .` (repo root; `Dockerfile`) +- `docker build -f Dockerfile.dev .` (repo root; `Dockerfile.dev`) ### Dev - `task run-query-engine-backend-dev` (repo root; `Taskfile.yml` -> `uv run fastapi dev --port 8001` in `src/unoplat_code_confluence_query_engine`) ### Test diff --git a/unoplat-code-confluence-query-engine/app_interfaces.md b/unoplat-code-confluence-query-engine/app_interfaces.md index e8465d70..e7eee7e3 100644 --- a/unoplat-code-confluence-query-engine/app_interfaces.md +++ b/unoplat-code-confluence-query-engine/app_interfaces.md @@ -18,15 +18,17 @@ Format: `path: L: ` where path is codebase-relative. - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/ai_model_config.py`: L591: @router.get( "/model-config/codex-openai/oauth/status", response_model=CodexOAuthConnectionStatusResponse, ) - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/ai_model_config.py`: L610: @router.delete( "/model-config/codex-openai/oauth", response_model=CodexOAuthDeleteResponse, ) - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/app_feedback.py`: L35: @router.post("", response_model=AppFeedbackResponse) -- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L1054: @router.get("/repository-agent-md-pr") -- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L319: @router.get("/codebase-agent-rules") -- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L444: @router.post("/repository-agent-run/cancel") -- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L578: @router.get("/repository-agent-snapshot") -- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L692: @router.post("/repository-agent-md-pr") +- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L130: @router.get("/codebase-agent-rules") +- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L268: @router.post("/repository-agent-run/cancel") +- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L402: @router.get("/repository-agent-snapshot") +- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L500: @router.post("/repository-agent-md-pr") +- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py`: L560: @router.get("/repository-agent-md-pr") - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/flags.py`: L124: @router.delete("/flags/{flag_name}") - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/flags.py`: L21: @router.get("/flags", response_model=List[Dict[str, Any]]) - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/flags.py`: L47: @router.get("/flags/{flag_name}", response_model=Dict[str, Any]) - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/flags.py`: L87: @router.put("/flags/{flag_name}", response_model=Dict[str, Any]) +- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/health.py`: L13: @router.get("/health") +- `src/unoplat_code_confluence_query_engine/api/v1/endpoints/health.py`: L26: @router.get("/ready") - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/tool_config.py`: L101: @router.put("/{provider}", response_model=ToolConfigResponse) - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/tool_config.py`: L129: @router.get("/{provider}", response_model=ToolConfigResponse) - `src/unoplat_code_confluence_query_engine/api/v1/endpoints/tool_config.py`: L149: @router.get("", response_model=ToolConfigListResponse) @@ -34,11 +36,54 @@ Format: `path: L: ` where path is codebase-relative. ## Outbound Constructs +### db_sql (sqlalchemy) + +- `src/unoplat_code_confluence_query_engine/services/flags/flag_service.py`: L132: session.delete(flag) +- `src/unoplat_code_confluence_query_engine/services/flags/flag_service.py`: L95: session.add(flag) + +### http_client (ghapi) + +- `src/unoplat_code_confluence_query_engine/services/feedback/app_feedback_service.py`: L101: api.issues.create( # pyright: ignore[reportUnknownVariableType,reportUnknownMemberType,reportAttributeAccessIssue] title=title, body=body, labels=labels, ) +- `src/unoplat_code_confluence_query_engine/services/feedback/app_feedback_service.py`: L91: GhApi( owner=_TARGET_OWNER, repo=_TARGET_REPO, token=token, gh_host=_GITHUB_HOST, ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L103: new_commit = api.git.create_commit( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] owner=owner_name, repo=repo_name, message=f"Update codebase artifacts from run {repository_workflow_run_id}", tree=new_tree_sha, parents=[head_sha], ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L113: api.git.create_ref( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue] owner=owner_name, repo=repo_name, ref=f"refs/heads/{branch_name}", sha=new_commit_sha, ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L122: api.git.update_ref( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue] owner=owner_name, repo=repo_name, ref=f"heads/{branch_name}", sha=new_commit_sha, force=True, ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L139: created_pr = api.pulls.create( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] owner=owner_name, repo=repo_name, title=pr_title, head=branch_name, base=default_branch, body="\n".join(pr_body_lines), ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L29: repo_info = api.repos.get(owner=owner_name, repo=repo_name) # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L34: base_commit = api.repos.get_commit( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] owner=owner_name, repo=repo_name, ref=default_branch, ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L54: pulls = api.pulls.list( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] owner=owner_name, repo=repo_name, state="open", head=f"{owner_name}:{branch_name}", base=default_branch, per_page=1, page=1, ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_publisher.py`: L89: new_tree = api.git.create_tree( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] owner=owner_name, repo=repo_name, base_tree=base_tree_sha, tree=tree_entries, ) +- `src/unoplat_code_confluence_query_engine/services/github/agent_md_pr_service.py`: L389: GhApi( owner=owner_name, repo=repo_name, token=repository_pat, gh_host=github_host, ) +- `src/unoplat_code_confluence_query_engine/services/github/git_ref_resolver.py`: L28: repo_info = api.repos.get(owner=owner, repo=repo) # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] +- `src/unoplat_code_confluence_query_engine/services/github/git_ref_resolver.py`: L33: ref_info = api.git.get_ref( # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue, reportUnknownVariableType] owner=owner, repo=repo, ref=f"heads/{default_branch}", ) +- `src/unoplat_code_confluence_query_engine/services/temporal/activities/git_ref_resolution_activity.py`: L101: GhApi( owner=owner_name, repo=repo_name, token=repository_pat, gh_host=github_host, ) +- `src/unoplat_code_confluence_query_engine/services/temporal/activities/repository_workflow_run/git_ref_resolution_activity.py`: L101: GhApi( owner=owner_name, repo=repo_name, token=repository_pat, gh_host=github_host, ) + +### http_client (httpx) + +- `src/unoplat_code_confluence_query_engine/services/config/codex_oauth_service.py`: L284: client.post( f"{self._settings.codex_openai_issuer}/oauth/token", headers={"Content-Type": "application/x-www-form-urlencoded"}, data={ "grant_type": "authorization_code", "code": code, "redirect_uri": redirect_uri, "client_id": self._settings.codex_openai_client_id, "code_verifier": verifier, }, ) +- `src/unoplat_code_confluence_query_engine/services/config/codex_oauth_service.py`: L302: client.post( f"{self._settings.codex_openai_issuer}/oauth/token", headers={"Content-Type": "application/x-www-form-urlencoded"}, data={ "grant_type": "refresh_token", "refresh_token": refresh_token, "client_id": self._settings.codex_openai_client_id, }, ) +- `src/unoplat_code_confluence_query_engine/utils/retry_http_client.py`: L122: AsyncClient( transport=transport, timeout=settings.retry_timeout, ) + +### llm_inference (pydantic_ai) + +- `src/unoplat_code_confluence_query_engine/services/temporal/agent_assembly/agents/business_domain.py`: L50: Agent( context.model, name="business_domain_guide", instructions=build_business_domain_instructions(), deps_type=AgentDependencies, tools=tuple(function_tools), capabilities=[console_capability], output_type=str, output_retries=3, model_settings=context.model_settings, event_stream_handler=event_stream_handler, ) +- `src/unoplat_code_confluence_query_engine/services/temporal/agent_assembly/agents/call_expression_validator.py`: L88: Agent( context.model, name="call_expression_validator", instructions=build_call_expression_validator_instructions(), deps_type=AgentDependencies, tools=tuple(function_tools), toolsets=tuple(toolsets), capabilities=capabilities, output_type=CallExpressionValidationAgentOutput, output_retries=2, model_settings=context.model_settings, event_stream_handler=event_stream_handler, ) +- `src/unoplat_code_confluence_query_engine/services/temporal/agent_assembly/agents/dependency_guide.py`: L83: Agent( context.model, name="dependency_guide", instructions=build_dependency_guide_instructions(), deps_type=AgentDependencies, tools=tuple(function_tools), toolsets=tuple(toolsets), capabilities=capabilities, output_type=DependencyGuideEntry, output_retries=2, model_settings=context.model_settings, event_stream_handler=event_stream_handler, ) +- `src/unoplat_code_confluence_query_engine/services/temporal/agent_assembly/agents/development_workflow.py`: L106: Agent( context.model, name="development_workflow_guide", instructions=build_development_workflow_instructions(), deps_type=AgentDependencies, toolsets=tuple(toolsets), capabilities=capabilities, output_type=EngineeringWorkflowAgentOutput, output_retries=2, model_settings=context.model_settings, event_stream_handler=event_stream_handler, ) +- `src/unoplat_code_confluence_query_engine/services/temporal/agent_assembly/assembler.py`: L94: TemporalAgent( build_result.agent, activity_config=activity_config.activity_config, model_activity_config=activity_config.model_activity_config, toolset_activity_config=activity_config.toolset_activity_config, tool_activity_config=activity_config.tool_activity_config, ) +- `tests/services/test_development_workflow_runtime.py`: L170: Agent( model, deps_type=AgentDependencies, output_type=EngineeringWorkflowAgentOutput, output_retries=1, ) +- `tests/services/test_development_workflow_runtime.py`: L252: Agent( model, deps_type=AgentDependencies, output_type=PromptedOutput(EngineeringWorkflowAgentOutput), output_retries=1, ) + ### mcp_client (fastmcp) - `src/unoplat_code_confluence_query_engine/services/mcp/mcp_server_manager.py`: L125: FastMCPToolset(mcp_config, id=id_value) - `src/unoplat_code_confluence_query_engine/services/mcp/mcp_server_manager.py`: L188: FastMCPToolset(mcp_config, id=id_value) +## Bidirectional Constructs + +No bidirectional constructs detected. + ## Internal Constructs No internal constructs detected. diff --git a/unoplat-code-confluence-query-engine/business_domain_references.md b/unoplat-code-confluence-query-engine/business_domain_references.md index b70e31ba..7cd93681 100644 --- a/unoplat-code-confluence-query-engine/business_domain_references.md +++ b/unoplat-code-confluence-query-engine/business_domain_references.md @@ -1,7 +1,7 @@ # Business Domain References ## Domain Summary -This codebase is an AI-assisted codebase analysis and repository automation engine. It configures LLM providers, MCP/tool servers, and OAuth credentials, then runs Temporal-driven agents that inspect repositories, validate framework usage, and generate structured outputs such as engineering workflows, dependency guides, AGENTS.md content, and pull requests. It also tracks agent events, progress, and usage/cost statistics across codebases. +This service is an AI-powered codebase intelligence and repository documentation automation platform. It ingests repository metadata and source-level model and framework references, orchestrates Temporal agents with configurable LLM providers and MCP/tool integrations, and produces structured business logic, dependency, workflow, and interface documentation. It also tracks agent progress, usage costs, validation results, and snapshots while automating AGENTS.md updates through pull requests. ## Data Model References ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/ai_model_config.py` @@ -16,11 +16,11 @@ This codebase is an AI-assisted codebase analysis and repository automation engi - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/app_feedback.py#L30-L32` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L72-L76` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L79-L84` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L87-L94` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L97-L105` -- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L108-L112` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L59-L63` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L66-L71` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L74-L81` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L84-L92` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/codebase_agent_rules.py#L95-L99` ### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/flags.py` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/api/v1/endpoints/flags.py#L15-L18` @@ -146,3 +146,4 @@ This codebase is an AI-assisted codebase analysis and repository automation engi - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/services/temporal/workflow_envelopes.py#L13-L30` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/services/temporal/workflow_envelopes.py#L33-L51` - `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/services/temporal/workflow_envelopes.py#L54-L78` +- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-query-engine/src/unoplat_code_confluence_query_engine/services/temporal/workflow_envelopes.py#L81-L91` diff --git a/unoplat-code-confluence-query-engine/dependencies_overview.md b/unoplat-code-confluence-query-engine/dependencies_overview.md index 66097641..ea203e05 100644 --- a/unoplat-code-confluence-query-engine/dependencies_overview.md +++ b/unoplat-code-confluence-query-engine/dependencies_overview.md @@ -6,9 +6,12 @@ - **asyncpg**: Purpose: A PostgreSQL database interface library built specifically for Python’s asyncio, offering an efficient binary-protocol client implementation. Source: https://magicstack.github.io/asyncpg/current/ - **fastapi**: Purpose: FastAPI is a modern, high-performance Python web framework for building APIs with standard Python type hints. It provides automatic validation and interactive API documentation, including Swagger UI and ReDoc. - **ghapi**: Purpose: Python client and command-line interface for GitHub’s REST API. It auto-generates a Pythonic interface from GitHub’s OpenAPI spec and provides broad, up-to-date coverage of GitHub endpoints. +- **jinja2**: Purpose: Fast, expressive, extensible templating engine for Python that renders templates using Python-like syntax. Includes template inheritance, macros, autoescaping, sandboxing, and async support. - **logfire**: Purpose: Logfire is an OpenTelemetry-based observability platform for logs, traces, and metrics, with especially deep support for Python applications. It provides auto-instrumentation and integrations for common Python frameworks and Pydantic, plus strong support for AI/LLM observability. - **loguru**: Purpose: Loguru is a Python logging library that provides a pre-instanced, ready-to-use logger with minimal configuration. It adds features like flexible sinks, file rotation/retention/compression, colors, structured logging, and exception catching while staying compatible with standard logging. +- **markdown-it-py**: Purpose: Python port of markdown-it: a fast, configurable Markdown parser that follows CommonMark and supports plugin-based syntax extensions. - **pydantic-ai**: Purpose: Pydantic AI is a Python agent framework for building GenAI applications and agents. It uses Pydantic for structured outputs, dependency injection, tool calling, and composable agent capabilities. +- **pydantic-ai-backend**: Purpose: File storage and sandbox backends for Pydantic AI agents. It provides a console toolset for file operations, Docker-isolated execution, and permission controls for safer agent workflows. - **pydantic-ai-skills**: Purpose: A Python framework for building and managing Agent Skills in Pydantic AI. It provides SkillsToolset/SkillsCapability for progressive disclosure, loading filesystem or programmatic skills on demand and staying compatible with the Agent Skills spec. - **pydantic-ai-slim**: Purpose: Slim install variant of Pydantic AI for Python. It gives you the core agent framework and lets you add only the optional provider/tool extras you need. - **qs-codec**: Purpose: Query string encoding and decoding for Python. A Python port of the JavaScript qs library, supporting nested objects/lists, configurable list formats, duplicate-key handling, and charset/encoding options. @@ -16,6 +19,3 @@ - **sqlmodel**: Purpose: A Python library for interacting with SQL databases using standard type annotations. It combines Pydantic’s data validation/serialization with SQLAlchemy’s ORM features and is designed to work especially well with FastAPI. - **sse-starlette**: Purpose: Production-ready Server-Sent Events (SSE) support for Starlette and FastAPI, following the W3C SSE specification. It provides EventSourceResponse plus ServerSentEvent and JSONServerSentEvent helpers for streaming events over HTTP. - **unoplat-code-confluence-commons**: Purpose: Shared common operations and data models used across the Code Confluence ingestion and query utilities. It provides reusable Pydantic/SQLModel-based schemas and related helpers for the package. -- **jinja2**: Purpose: Fast, expressive, extensible templating engine for Python that renders templates using Python-like syntax. Includes template inheritance, macros, autoescaping, sandboxing, and async support. -- **markdown-it-py**: Purpose: Python port of markdown-it: a fast, configurable Markdown parser that follows CommonMark and supports plugin-based syntax extensions. -- **pydantic-ai-backend**: Purpose: File storage and sandbox backends for Pydantic AI agents. It provides a console toolset for file operations, Docker-isolated execution, and permission controls for safer agent workflows.