docs: Add requirements specification for NiceGUI web interface integration#14
Conversation
|
Caution Review failedThe pull request is closed. WalkthroughAdds Agent API v2 scaffolding (router and endpoint modules), switches auth hashing to bcrypt with a 72-byte limit, updates docs/specs broadly (including NiceGUI interface design and SvelteKit removal plans), bumps tooling/dependencies, and applies numerous documentation/front-matter/formatting updates. Minor app scaffold notes, config tweaks, and frontend component hardening are included. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Agent as Agent (client)
participant API as FastAPI App
participant V2 as api/v2/api_router
participant ModA as endpoints/agents
participant ModT as endpoints/tasks
participant ModK as endpoints/attacks
participant ModR as endpoints/resources
participant Svc as Service Layer
participant DB as DB/Storage
Agent->>API: HTTP request /api/v2/client/...
API->>V2: Route dispatch
alt /client/agents/*
V2->>ModA: Delegate to Agents router
else /client/agents/tasks/*
V2->>ModT: Delegate to Tasks router
else /client/agents/attacks/*
V2->>ModK: Delegate to Attacks router
else /client/agents/resources/*
V2->>ModR: Delegate to Resources router
end
note over ModA,ModR: Endpoint handlers (TODO) call services
par Validate/Auth/RateLimit
ModA->>Svc: Service call
Svc->>DB: Query/Update/Presigned URL
DB-->>Svc: Result
Svc-->>ModA: Response DTO
end
ModA-->>API: JSON response
API-->>Agent: 2xx / 4xx JSON
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related issues
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yml Review profile: CHILL Plan: Pro Disabled knowledge base sources:
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (121)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.kiro/steering/code/sqlalchemy.md (1)
84-95: Restore the repository pattern code block fencesWhile converting the bullet list, the opening ```python fence was stripped and replaced with a literal
python, so the example now renders as plain text with broken indentation. Please reinstate the fenced code block to keep the snippet readable.-* __Repository Pattern:__ Centralizes data access logic, improving testability and maintainability. Example: - - python - class UserRepository: - def __init__(self, session: Session): - self.session = session - - ``` - def get_user_by_id(self, user_id: int) -> User | None: - return self.session.get(User, user_id) - ``` +* __Repository Pattern:__ Centralizes data access logic, improving testability and maintainability. Example: + +```python +class UserRepository: + def __init__(self, session: Session): + self.session = session + + def get_user_by_id(self, user_id: int) -> User | None: + return self.session.get(User, user_id) +```
🧹 Nitpick comments (7)
justfile (1)
330-342: Consider adding Windows variants for database tasks.The database tasks (
db-drop-test,db-migrate-test,db-reset) use Unix-specific shell syntax (@psql,@echo, environment variable substitution) and lack Windows variants. While these tasks might be primarily used in CI or Linux environments, Windows developers may encounter errors if they attempt to run them locally.If Windows support is desired for these tasks, consider adding Windows variants that use PowerShell equivalents or document that these tasks require WSL/Git Bash on Windows.
app/api/v2/endpoints/resources.py (1)
1-20: Scaffolding looks good. Remember the TODO for resource endpoint implementation.The router structure is properly configured with appropriate prefix and tags for the v2 API. The TODO comment clearly marks the pending implementation of the presigned URL endpoint with authorization and hash verification.
Do you want me to open a tracking issue for implementing the resource URL endpoint (Task 8.3)?
app/core/auth.py (3)
34-36: Consider moving the error message to the exception class.The error message is defined inline, which triggers Ruff's TRY003 rule. Consider defining it as a class attribute for better maintainability:
class PasswordTooLongError(ValueError): - """Raised when password exceeds bcrypt's 72-byte limit.""" + """Raised when password exceeds bcrypt's 72-byte limit.""" + + message = "Password exceeds maximum length of {limit} bytes when UTF-8 encoded"Then use it in the raise statement:
if len(password_bytes) > BCRYPT_MAX_PASSWORD_LENGTH: raise PasswordTooLongError( - f"Password exceeds maximum length of {BCRYPT_MAX_PASSWORD_LENGTH} bytes when UTF-8 encoded" + self.message.format(limit=BCRYPT_MAX_PASSWORD_LENGTH) )
12-13: Document the UTF-8 byte length consideration for users.The 72-byte limit applies to the UTF-8 encoded bytes, not the character count. Multi-byte UTF-8 characters (e.g., emojis, non-Latin scripts) will consume more bytes per character, potentially hitting this limit with fewer visible characters than users might expect. Consider adding a note in the module docstring or constant comment to clarify this for users and future maintainers.
-# Bcrypt has a maximum password length of 72 bytes +# Bcrypt has a maximum password length of 72 bytes (UTF-8 encoded) +# Note: Multi-byte UTF-8 characters count as multiple bytes toward this limit BCRYPT_MAX_PASSWORD_LENGTH = 72Also applies to: 32-36
44-60: Clarify duplicate verify_password implementations: Two distinct implementations exist at app/core/security.py:38 and app/core/auth.py:44; rename one (e.g.,verify_password_bcryptvsverify_password_passlib) to avoid confusion.README.md (1)
67-69: Consider adding NiceGUI deployment status.The documentation mentions "NiceGUI Interface: Python-native web interface integrated directly into the FastAPI backend" but doesn't clarify its current status. Given that the NiceGUI integration is described as planned work in the task specification documents, consider adding a status indicator (e.g., "Preview", "Planned", "Beta") to manage expectations.
Apply this diff to clarify status:
- **Dual Web Interface Options**: - **SvelteKit Frontend**: Modern, high-performance web UI with Flowbite Svelte and DaisyUI - - **NiceGUI Interface**: Python-native web interface integrated directly into the FastAPI backend + - **NiceGUI Interface** (Planned): Python-native web interface integrated directly into the FastAPI backenddocs/architecture/api.md (1)
15-28: Consider adding migration timeline or version support policy.The documentation describes Agent API v2 as "development preview" with a note that "breaking changes may occur during the development preview phase." Consider adding:
- Expected timeline for v2 to reach stable status
- Support policy for v1 after v2 stabilizes (e.g., "v1 will be supported for X months after v2 reaches stable")
- Deprecation policy and end-of-life timeline for v1
This would help users plan their integration strategy and migration timeline.
|
|
||
| All notable changes to this project will be documented in this file. | ||
|
|
||
| ## [2.0.0] - 2025-01-XX |
There was a problem hiding this comment.
Clarify the placeholder date and version designation.
The version entry uses a placeholder date "2025-01-XX" and declares version 2.0.0, which conflicts with the PR title "Minor fixes." This appears to be a major version release with significant features (Agent API v2, architectural changes, documentation updates).
Consider either:
- Updating the date to the actual release date if this is ready for release
- Marking this as a draft/preview section if the release date is not yet determined
- Aligning the PR title with the scope of changes (this is clearly not "minor fixes")
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
| ```python | ||
| # app/core/config.py | ||
| class Settings(BaseSettings): | ||
| ENABLE_AGENT_API_V2: bool = False | ||
| AGENT_V2_RATE_LIMIT_ENABLED: bool = True | ||
| AGENT_V2_TOKEN_EXPIRY_HOURS: int = 24 | ||
|
|
There was a problem hiding this comment.
🧩 Analysis chain
Verify feature flag configuration location.
The guide shows feature flags in app/core/config.py for enabling v2 functionality, but the current implementation status indicates v2 is in development preview. Confirm whether:
- These feature flags are already implemented in
app/core/config.py - The v2 router is conditionally included based on these flags
- The default values align with the preview status
🏁 Script executed:
#!/bin/bash
# Check for v2 feature flag configuration
echo "Checking for v2 feature flags in config..."
# Look for v2-related configuration settings
rg -n "ENABLE_AGENT_API_V2|AGENT_V2" app/core/config.py -C3
# Check main.py for conditional v2 router inclusion
rg -n "api_v2_router|/api/v2" app/main.py -C5Length of output: 452
Sync docs with code or implement missing v2 flags/router inclusion
The guide’s snippet shows ENABLE_AGENT_API_V2 and AGENT_V2_* settings in app/core/config.py and conditional registration of api_v2_router in app/main.py, but these aren’t present in the code. Either add those feature flags and wrap the v2 router import/registration behind them, or update the documentation to reflect that v2 remains in preview and isn’t yet enabled.
🤖 Prompt for AI Agents
In docs/development/agent-api-v2-development.md around lines 336 to 342, the
docs reference Settings flags (ENABLE_AGENT_API_V2, AGENT_V2_RATE_LIMIT_ENABLED,
AGENT_V2_TOKEN_EXPIRY_HOURS) and conditional router registration that don't
exist in code; either add those config fields to app/core/config.py and wrap the
import/registration of api_v2_router in app/main.py behind ENABLE_AGENT_API_V2
(and ensure any rate-limit/token-expiry logic uses the AGENT_V2_* flags), or
update the documentation to state that v2 is still preview-only and remove the
code snippet — choose one approach and make the code and docs consistent.
| **Development Structure:** | ||
|
|
||
| ``` | ||
| app/ui/ | ||
| ├── __init__.py # NiceGUI app initialization | ||
| ├── auth/ # Authentication components | ||
| ├── components/ # Reusable UI components | ||
| ├── pages/ # Page components | ||
| └── services/ # UI-specific services | ||
| ``` | ||
|
|
||
| **Hot Reload:** | ||
|
|
||
| NiceGUI supports hot reload for rapid development: | ||
|
|
||
| ```python | ||
| # Enable hot reload in development | ||
| if settings.DEBUG: | ||
| ui.run_with(app, mount_path="/ui", reload=True, debug=True) | ||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
Convert emphasized labels into proper headings.
markdownlint (MD036) is flagging the bolded labels (e.g., "NiceGUI Development Benefits:", "Development Structure:", "Hot Reload:") because they are being used as headings. Please rewrite them as actual Markdown headings to keep docs lint‑clean. For example:
-**NiceGUI Development Benefits:**
+#### NiceGUI Development BenefitsApply the same pattern to the other bolded labels in this section.
As per markdownlint-cli2 hint
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
217-217: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
216-216: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In docs/development/setup.md around lines 214 to 233, several labels are bolded
but intended as section headings (e.g., "**Development Structure:**", "**Hot
Reload:**"); replace those bolded labels with proper Markdown headings (choose a
consistent level such as "##" or "###" for this section), remove the surrounding
bold markup, and ensure the heading text remains identical and followed by a
blank line; apply the same conversion to any other similarly bolded labels in
this section so the file conforms to markdownlint MD036.
| ``` | ||
| app/ui/ | ||
| ├── __init__.py # NiceGUI app initialization | ||
| ├── auth/ # Authentication components | ||
| ├── components/ # Reusable UI components | ||
| ├── pages/ # Page components | ||
| └── services/ # UI-specific services | ||
| ``` | ||
|
|
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
Add a fenced code language for the directory layout block.
markdownlint (MD040) requires a language tag on fenced blocks. Tag this tree snippet (for example with text) so lint passes:
-```
+```text
app/ui/
├── __init__.py # NiceGUI app initialization
...As per markdownlint-cli2 hint
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
217-217: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
216-216: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In docs/development/setup.md around lines 216 to 224, the fenced code block
showing the app/ui directory tree lacks a language tag which triggers
markdownlint MD040; edit the opening fence to include a language (e.g., change
``` to ```text) so the snippet is ```text and leave the contents unchanged to
satisfy the linter.
| [windows] | ||
| install-git-cliff: | ||
| if (-not (Get-Command git-cliff -ErrorAction SilentlyContinue)) { | ||
| cargo install git-cliff --locked | ||
| if ($LASTEXITCODE -ne 0) { | ||
| Write-Host "Make sure git-cliff is installed manually" | ||
| $global:LASTEXITCODE = 0 | ||
| } | ||
| cargo install git-cliff --locked | ||
| if ($LASTEXITCODE -ne 0) { | ||
| Write-Host "Make sure git-cliff is installed manually" | ||
| exit $LASTEXITCODE | ||
| } | ||
|
|
There was a problem hiding this comment.
Inconsistent error handling between Unix and Windows variants.
The Unix variant of install-git-cliff continues execution with a warning message on failure (|| echo "Make sure git-cliff is installed manually"), while the Windows variant now exits with the original error code. This behavioral difference could cause CI/automation scripts to behave differently across platforms.
For consistency, consider matching the Unix behavior on Windows:
[windows]
install-git-cliff:
if (-not (Get-Command git-cliff -ErrorAction SilentlyContinue)) {
cargo install git-cliff --locked
if ($LASTEXITCODE -ne 0) {
Write-Host "Make sure git-cliff is installed manually"
- exit $LASTEXITCODE
}Alternatively, if failing fast is preferred, update the Unix variant to also exit on error for consistency.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| [windows] | |
| install-git-cliff: | |
| if (-not (Get-Command git-cliff -ErrorAction SilentlyContinue)) { | |
| cargo install git-cliff --locked | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Host "Make sure git-cliff is installed manually" | |
| $global:LASTEXITCODE = 0 | |
| } | |
| cargo install git-cliff --locked | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Host "Make sure git-cliff is installed manually" | |
| exit $LASTEXITCODE | |
| } | |
| [windows] | |
| install-git-cliff: | |
| if (-not (Get-Command git-cliff -ErrorAction SilentlyContinue)) { | |
| cargo install git-cliff --locked | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Host "Make sure git-cliff is installed manually" | |
| } |
🤖 Prompt for AI Agents
In justfile around lines 178 to 186, the Windows `install-git-cliff` step
currently exits with the original error code on failure, making behavior
inconsistent with the Unix variant which only prints a warning and continues;
change the Windows branch to mirror the Unix behavior by removing the `exit
$LASTEXITCODE` and instead printing the same "Make sure git-cliff is installed
manually" warning (using Write-Host) so the script continues on failure, or if
you prefer failing fast across platforms instead update the Unix variant to exit
with the command's exit code; implement whichever approach you choose so both
platforms behave identically.
| [project] | ||
| name = "cipherswarm" | ||
| version = "0.1.0" | ||
| version = "2.0.0" |
There was a problem hiding this comment.
Major version bump from 0.1.0 to 2.0.0.
This is a significant version jump that typically indicates breaking changes and major new features. This aligns with the Agent API v2 implementation and architectural changes described in the CHANGELOG, but conflicts with the PR title "Minor fixes."
Ensure:
- All breaking changes are documented in the CHANGELOG
- Migration guides are provided for users upgrading from 0.1.0
- The version bump follows semantic versioning principles
🤖 Prompt for AI Agents
In pyproject.toml around line 3, the version was changed to "2.0.0" which is a
major bump inconsistent with the PR title "Minor fixes"; either revert to an
appropriate semver (e.g., 0.1.x or 1.0.0) if there are no breaking changes, or
keep 2.0.0 but update documentation: add explicit entries for all breaking
changes to CHANGELOG, create a migration guide detailing steps for users
upgrading from 0.1.0 (API changes, configuration, and examples), and update the
PR title/description to justify the major version bump and reference the
CHANGELOG and migration guide.
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (14)
.kiro/steering/pipeline.md (1)
27-31: Add a language hint to the fenced block.markdownlint (MD040) flags this fence because it lacks a language identifier. Please annotate it, e.g., with
text, to keep CI clean.-``` +```text pyproject.toml # Python dependencies and tool config .pre-commit-config.yaml # Pre-commit hooks pytest.ini # Test configuration.cursor/rules/code/fastapi-guidelines.mdc (1)
37-212: Replace FastAPICache example with Cashews-based caching.These bullets mandate Cashews as the exclusive caching mechanism, yet the example block still demonstrates
fastapi_cache.FastAPICache. That guidance is contradictory and will mislead readers into wiring the wrong library. Swap in a Cashews example (e.g.,from cashews import cache,@cache(ttl=60)) or explicitly relax the constraint so the narrative and sample code match..cursor/rules/frontend/sse-implementation.mdc (1)
259-268: Fix undefined state in reconnection snippet.The reconnection example references
this.reconnectAttemptsandthis.maxReconnectAttempts, but the class snippet above only definesconnectionStatus.reconnectAttempts. As written, this throws and misleads readers. Please align the example—either store the counters onconnectionStatusor declare the missing fields on the class—so the documented pattern actually runs..kiro/steering/testing/test-organization.md (1)
15-34: Add languages to directory structure code fences.markdownlint (MD040) is flagging the two structure snippets because they use bare fences. Prefix them with a language identifier (e.g.,
text) so the lint job passes.-``` +```text ... -``` +```text ...Apply the same fix to both directory tree blocks.
Also applies to: 39-57
.cursor/rules/frontend/sveltekit5-runes.mdc (1)
145-151: Align mock shape with documented store getters.Line 145 shows the mock exposing
getCampaigns()andloading()functions, but everywhere else in this guide we instruct consumers to readcampaignsStore.campaigns/campaignsStore.loadingvia getters. Following this snippet would therefore produce tests that break at runtime. Please update the example to mirror the getter-based shape.vi.mock('$lib/stores/campaigns.svelte', () => ({ campaignsStore: { - getCampaigns: vi.fn(), - loading: vi.fn(), - // ... other methods + get campaigns() { + return mockCampaigns; + }, + get loading() { + return false; + }, + loadCampaigns: vi.fn(), + // ... other actions } }));.cursor/rules/frontend/ssr-authentication.mdc (1)
81-113: Fix the server API client file extension.The guidance now points to
src/lib/server/api.js, but the snippet still relies on TypeScript features (import type, typed params,privatefields). Dropping this into a.jsfile will fail to compile. Please keep the reference and filename as.ts.docs/development/developer_guide.md (1)
272-278: Update password hashing reference to bcryptLine 276 still claims the Web UI uses Argon2, but this PR migrated password hashing to bcrypt. Leaving the doc incorrect makes it easy for future work to apply the wrong algorithm and weakens security guidance. Please update the reference.
- - Web UI: OAuth2 (password flow), session cookies, CSRF, Argon2 passwords, project context management + - Web UI: OAuth2 (password flow), session cookies, CSRF, bcrypt passwords, project context management.cursor/rules/frontend/schema-integration.mdc (2)
47-58: Fix schema example to includeis_unavailable.Line [58] shows the
CampaignReadSchemaexample, but the adapter on Line [164] readscampaign.is_unavailable. As written, the schema does not declare that field, so the TypeScript example will fail to type-check and the documentation becomes misleading. Please add the optional boolean to the schema (or drop it from the adapter) so both snippets stay consistent.export const CampaignReadSchema = z.object({ id: z.number().int(), name: z.string(), description: z.string().nullable(), status: z.enum(['pending', 'running', 'paused', 'completed', 'failed']), priority: z.number().int().optional(), // Match OpenAPI optional fields created_at: z.string().datetime(), updated_at: z.string().datetime(), project_id: z.number().int(), - hash_list_id: z.number().int().nullable(), + hash_list_id: z.number().int().nullable(), + is_unavailable: z.boolean().optional(), });
305-320: Correct mock status to match the schema enum.Line [311] sets
status: 'active', but the same document defines the enum as['pending','running','paused','completed','failed']. Parsing this mock withCampaignReadSchemawould throw. Please switch the example to a valid status so the guidance remains trustworthy.- status: 'active' as const, + status: 'pending' as const,.kiro/steering/frontend/sse-implementation.md (1)
257-266: Restore defined reconnect state access
this.reconnectAttemptsandthis.maxReconnectAttemptsaren’t defined anywhere in the class, so the sample code no longer compiles. Please switch the logic back to the documented state object (e.g.,this.connectionStatus.reconnectAttempts) or add the missing members so the snippet is self-consistent again..kiro/specs/phase-3c-advanced-features-realtime/requirements.md (1)
13-40: Use “an” before “Ouroboros”.The updated user stories now read “As a Ouroboros …”, which is grammatically off. Please change them to “As an Ouroboros …” (operator in Requirement 1 and user in Requirement 3).
Apply this diff:
-**User Story:** As a Ouroboros operator, I want real-time updates on system status and campaign progress, so that I can monitor operations without manually refreshing pages. +**User Story:** As an Ouroboros operator, I want real-time updates on system status and campaign progress, so that I can monitor operations without manually refreshing pages. -**User Story:** As a Ouroboros user, I want informative notifications about system events and crack discoveries, so that I can stay informed without constantly monitoring the interface. +**User Story:** As an Ouroboros user, I want informative notifications about system events and crack discoveries, so that I can stay informed without constantly monitoring the interface..kiro/steering/architecture.md (1)
215-327: Remove duplicated Docker content.Lines 215-327 contain Docker best practices that appear to be duplicated from
.kiro/steering/architecture/docker-guidelines.md. This creates maintenance overhead and content drift risk. The section starting at line 215 with "Single command deployment:docker compose up -desources." appears to be a merge artifact (note the broken sentence).This duplication should be removed. The architecture.md file should reference the docker-guidelines.md file instead:
-- Single command deployment: `docker compose up -d`esources. - - Monitor memory usage and optimize your application accordingly. -... -(remove lines 216-327) + +For detailed Docker guidelines, see [docker-guidelines.md](architecture/docker-guidelines.md)..kiro/specs/phase-2b-agent-api-v2/design.md (1)
232-239: Add missing v2 fields and migrations for Agent model
- Add
capabilities = Column(JSON, nullable=True),last_heartbeat_at = Column(DateTime(timezone=True), nullable=True)andmissed_heartbeats = Column(Integer, nullable=False, default=0, server_default="0")to app/models/agent.py.- Create a new Alembic migration under alembic/versions to add these columns to the agents table.
AGENTS.md (1)
652-668: Rename the base exception in the docs to match the Ouroboros naming.This snippet still declares
CipherSwarmExceptioneven though the surrounding text now positions it as the Ouroboros base exception. The mismatch is confusing for readers following the updated branding. Please update the example (and any related narrative) to use the currently supported base exception name—e.g.,OuroborosException—to stay consistent with the rest of the guide.
♻️ Duplicate comments (2)
CHANGELOG.md (1)
5-46: Clarify the release metadata before mergingThe 2.0.0 entry still carries a placeholder date (“2025-01-XX”) and reads like a major launch, which clashes with the PR’s “Minor fixes” framing. Please either supply the real release metadata or mark this section as draft/preview so it doesn’t look final in
main..kiro/specs/nicegui-web-interface/design.md (1)
544-566: Fix the broken pagination example (still double-defining_change_page).The snippet still leaves the
with self.pagination_container:block empty and keeps two_change_pageimplementations, so the documented example doesn't even parse. Please populate the block and collapse to a single helper so readers can rely on it.def _create_pagination(self): if not self.pagination_container: return - total_pages = (len(self.filtered_data) + self.page_size - 1) // self.page_size - - with self.pagination_container: - def _change_page(self, new_page: int): - total_pages = (len(self.filtered_data) + self.page_size - 1) // self.page_size if len(self.filtered_data) > 0 else 1 - if 1 <= new_page <= total_pages: - self.page = new_page - self._update_table() - self._create_pagination() # Refresh pagination controls - - ui.label(f'Page {self.page} of {total_pages}').classes('mx-4') - - ui.button('Next', - on_click=lambda: self._change_page(self.page + 1), - enabled=self.page < total_pages) - - def _change_page(self, new_page: int): - self.page = new_page - self._update_table() + total_pages = max( + 1, (len(self.filtered_data) + self.page_size - 1) // self.page_size + ) + + self.pagination_container.clear() + with self.pagination_container: + ui.button( + 'Previous', + on_click=lambda: self._change_page(self.page - 1), + enabled=self.page > 1, + ) + ui.label(f'Page {self.page} of {total_pages}').classes('mx-4') + ui.button( + 'Next', + on_click=lambda: self._change_page(self.page + 1), + enabled=self.page < total_pages, + ) + + def _change_page(self, new_page: int): + total_pages = max( + 1, (len(self.filtered_data) + self.page_size - 1) // self.page_size + ) + if 1 <= new_page <= total_pages: + self.page = new_page + self._update_table() + self._create_pagination()
🧹 Nitpick comments (10)
app/core/openapi_customization.py (1)
48-48: Consider updating this description when NiceGUI is implemented.The description references "SvelteKit web application," which may become outdated once the planned NiceGUI interface (mentioned in the PR objectives) is fully integrated. This can be addressed in a future update when the new interface is live.
.kiro/specs/phase-4-containerization-deployment/design.md (1)
168-195: Align dev database naming with the Ouroboros rebrand.Production values now use
ouroboros, but the development compose snippet earlier in this document still referencescipherswarm_dev. That mismatch in the same doc is confusing during environment setup. Please rename the dev database (DB name and connection string) to the Ouroboros convention as well.- - DATABASE_URL=postgresql://dev:dev@db:5432/cipherswarm_dev + - DATABASE_URL=postgresql://dev:dev@db:5432/ouroboros_dev ... - - POSTGRES_DB=cipherswarm_dev + - POSTGRES_DB=ouroboros_dev.kiro/specs/nicegui-web-interface/requirements.md (1)
11-22: Clarify relationship with existing SvelteKit frontend.The requirement states the NiceGUI interface will be "integrated into the FastAPI backend" at
/ui/path, but should clarify how this coexists with the existing SvelteKit frontend. Consider adding an acceptance criterion:5. WHEN the NiceGUI interface is active THEN it SHALL use the same authentication system as the existing APIs +6. WHEN both interfaces are deployed THEN the NiceGUI interface at `/ui/` SHALL NOT conflict with the SvelteKit frontend pathsThis would help deployment planning and prevent path conflicts.
README.md (1)
19-26: Consider providing getting started instructions.The previous README likely included getting started, installation, and usage instructions. The new architecture-focused README is excellent for developers but may leave new users without practical guidance on how to deploy or use the system.
Consider adding a "Quick Start" or "Getting Started" section, or prominently link to installation/deployment documentation if it exists elsewhere (e.g.,
docs/getting-started/).app/core/config.py (1)
80-80: Weak default passwords remain unchanged (existing issue).While rebranding the defaults, the passwords remain weak ("ouroboros"). This is an existing issue but worth noting for new deployments. The field descriptions correctly note these are defaults, but consider adding more prominent security warnings.
Consider adding a startup warning if default passwords are detected in production environment:
def validate_production_config(self) -> None: """Warn if using default passwords in production.""" if self.ENVIRONMENT.lower() == "production": if self.POSTGRES_PASSWORD == "ouroboros": logger.warning("Using default database password in production!") if self.FIRST_SUPERUSER_PASSWORD == "ouroboros": logger.warning("Using default superuser password in production!")Also applies to: 94-94
.cursor/rules/architecture/core-concepts.mdc (3)
392-395: Fix truncated monitoring bullet.The bullet currently reads “Application me - Resource usage,” which looks like a copy/paste truncation and isn’t actionable. Please restore the intended text (likely “Application metrics – resource usage”) so the monitoring checklist remains clear.
452-466: Clean up garbled authentication bullet.The Control API section shows “See @core-concepts-appendix.mdc for authentic*TUI API Authentication**,” which appears to be mangled markdown. It obscures the reference and breaks readability—can you fix the phrasing/link so the required headers guidance renders correctly?
54-56: Correct the Cashews reference.The cache library is spelled “Cashews,” but the line currently says “Cachews.” Please fix the typo so the requirement points to the right dependency.
docs/architecture/components.md (1)
860-1023: Rename code samples to match the Ouroboros brandingThis section still defines
CipherSwarmMonitorandCipherSwarmCLIMonitor, which contradicts the rest of the document’s Ouroboros terminology. Rename the classes and related identifiers to keep the examples consistent with the project’s new name.Also applies to: 1038-1179
docs/api/error-responses.md (1)
428-491: Update the client helper example to use Ouroboros namingThe Python sample still defines
CipherSwarmAPIErrorand related wording. Rename these identifiers toOuroboros…(and adjust the surrounding text) so the error-handling guidance matches the current branding.
| --- | ||
| description: | ||
| description: | ||
| globs: **/api/**/*.py,**/routes/**/*.py,**/endpoints/**/*.py,**/schemas/**/*.py,**/models/**/*.py | ||
| alwaysApply: false | ||
| --- |
There was a problem hiding this comment.
Align alwaysApply metadata with section content.
Front matter sets alwaysApply: false, but the “## Always Apply” section below states true. This contradiction makes it unclear how the rule should behave in Cursor contexts. Please update one of them so both reflect the same value, then re-run whatever tooling consumes this metadata to ensure it picks up the intended setting.
🤖 Prompt for AI Agents
In .cursor/rules/code/fastapi-guidelines.mdc around lines 1 to 5, the
front-matter sets alwaysApply: false but the document's “## Always Apply”
section claims true; update one of them so both match (either set front-matter
to true or change the section text to false), ensure any descriptive text or
examples reflect the chosen value, then re-run the Cursor tooling or CI that
consumes this metadata so the new setting is picked up.
| - All list endpoints MUST use `PaginatedResponse[T]` from [app/schemas/shared.py](mdc:Ouroboros/app/schemas/shared.py) | ||
|
|
There was a problem hiding this comment.
Correct the mdc: link to app/schemas/shared.py.
Adding the Ouroboros/ segment to the mdc: target breaks the in-editor link. The file still lives at app/schemas/shared.py, so the link should remain relative.
-- All list endpoints MUST use `PaginatedResponse[T]` from [app/schemas/shared.py](mdc:Ouroboros/app/schemas/shared.py)
+- All list endpoints MUST use `PaginatedResponse[T]` from [app/schemas/shared.py](mdc:app/schemas/shared.py)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - All list endpoints MUST use `PaginatedResponse[T]` from [app/schemas/shared.py](mdc:Ouroboros/app/schemas/shared.py) | |
| - All list endpoints MUST use `PaginatedResponse[T]` from [app/schemas/shared.py](mdc:app/schemas/shared.py) |
🤖 Prompt for AI Agents
In .cursor/rules/code/fastapi-patterns.mdc around lines 32-33, the mdc link
target incorrectly includes the "Ouroboros/" segment which breaks the in-editor
link; edit the line to remove "Ouroboros/" so the link target is
mdc:app/schemas/shared.py (i.e., change mdc:Ouroboros/app/schemas/shared.py to
mdc:app/schemas/shared.py) and keep the surrounding text unchanged.
| - Start development environment: `just docker-dev-up-watch` | ||
| - Use Playwright MCP tools to navigate to `http://localhost:5173` | ||
| - Verify functionality through direct interaction with the UI | ||
| - Test authentication flows and authenticated API calls | ||
| - Confirm UI components match design specifications | ||
| * Use Playwright MCP tools to navigate to `http://localhost:5173` | ||
| * Verify functionality through direct interaction with the UI | ||
| * Test authentication flows and authenticated API calls | ||
| * Confirm UI components match design specifications | ||
|
|
||
| #### Code Review (When Needed) | ||
|
|
||
| - Review relevant source files for implementation completeness | ||
| - Check SSR load functions in `+page.server.ts` files | ||
| - Verify component usage of Shadcn-Svelte patterns | ||
| - Confirm SvelteKit 5 runes implementation | ||
| * Check SSR load functions in `+page.server.ts` files | ||
| * Verify component usage of Shadcn-Svelte patterns | ||
| * Confirm SvelteKit 5 runes implementation | ||
|
|
||
| ### 3. Task Completion Criteria | ||
|
|
||
| #### For Verification Tasks | ||
|
|
||
| - Functionality works as specified through direct observation | ||
| - No code changes required if implementation is correct | ||
| - Mark task complete in checklist | ||
| - Provide brief summary of what was verified | ||
| * No code changes required if implementation is correct | ||
| * Mark task complete in checklist | ||
| * Provide brief summary of what was verified | ||
|
|
||
| #### For Implementation Tasks | ||
|
|
||
| - Make necessary code changes using idiomatic patterns | ||
| - Run formatting: `just format` | ||
| - Add or update tests for correctness | ||
| - Run test suites: `just test` and `just frontend-test` | ||
| - Fix failing tests | ||
| - Run linters: `just check` and `just frontend-lint` | ||
| - Fix all linter issues | ||
| - Run final validation: `just ci-check` | ||
| * Run formatting: `just format` | ||
| * Add or update tests for correctness | ||
| * Run test suites: `just test` and `just frontend-test` | ||
| * Fix failing tests | ||
| * Run linters: `just check` and `just frontend-lint` | ||
| * Fix all linter issues | ||
| * Run final validation: `just ci-check` | ||
|
|
||
| ### 4. Design Compliance | ||
|
|
||
| #### UI Component Requirements | ||
|
|
||
| - Use idiomatic Shadcn-Svelte components | ||
| - Follow SvelteKit 5 patterns with runes ($state, $derived, $effect) | ||
| - Implement proper SSR load functions with authenticated API calls | ||
| - Use Superforms v2 for all form handling | ||
| - Apply consistent responsive design patterns | ||
| * Follow SvelteKit 5 patterns with runes ($state, $derived, $effect) | ||
| * Implement proper SSR load functions with authenticated API calls | ||
| * Use Superforms v2 for all form handling | ||
| * Apply consistent responsive design patterns | ||
|
|
||
| #### Authentication Integration | ||
|
|
||
| - All pages must work with authenticated API calls | ||
| - Handle 401 redirects to login appropriately | ||
| - Show proper loading states during authentication | ||
| - Display user context and role-based permissions | ||
| * Handle 401 redirects to login appropriately | ||
| * Show proper loading states during authentication | ||
| * Display user context and role-based permissions | ||
|
|
||
| ### 5. Testing Requirements | ||
|
|
||
| #### Test Structure | ||
|
|
||
| - Mock E2E tests in `frontend/e2e/` (fast, no backend) | ||
| - Full E2E tests in `frontend/tests/e2e/` (slower, real backend) | ||
| - Use existing test utilities in `frontend/tests/test-utils.ts` | ||
| * Full E2E tests in `frontend/tests/e2e/` (slower, real backend) | ||
| * Use existing test utilities in `frontend/tests/test-utils.ts` | ||
|
|
There was a problem hiding this comment.
Update verification guidance to match the NiceGUI stack.
The updated NiceGUI spec serves the interface through FastAPI at /ui, yet this rule still instructs reviewers to spin up the SvelteKit stack (just docker-dev-up-watch, http://localhost:5173) and to validate Shadcn/Superforms/SvelteKit rune usage. That guidance is now stale and will walk reviewers through the wrong application. Please realign the Direct Observation, Code Review, Testing, and UI requirements sections with the NiceGUI-based workflow (FastAPI integration, NiceGUI component patterns, updated test locations/commands) so Phase 3 verification matches the new implementation path.
Would you like help drafting the NiceGUI-aligned checklist wording?
🤖 Prompt for AI Agents
In .cursor/rules/phase-3-task-verification.mdc around lines 25 to 82, the
verification checklist still references the SvelteKit/Shadcn/Superforms workflow
(commands, localhost:5173, runes, SSR load functions, test paths) which is now
stale; update all Direct Observation, Code Review, Testing, UI Component,
Authentication, and Test Structure sections to reflect the NiceGUI/FastAPI
stack: instruct reviewers to start the NiceGUI server (project-specific command)
and validate the UI at /ui, use NiceGUI component patterns and FastAPI endpoint
checks instead of Shadcn/SvelteKit runes, verify server-side authenticated API
flows via FastAPI routes and proper 401 behavior, replace SvelteKit test
commands and paths with the NiceGUI test commands and updated test directories
(mock and full E2E locations), and update linters/format/CI commands to the
current project scripts so the phase-3 checklist guides reviewers to the
NiceGUI-based workflow.
| from sqlalchemy import Column, BigInteger, DateTime, Float, CheckConstraint | ||
|
|
||
|
|
||
| class Task(Base): | ||
| # Existing fields... | ||
| keyspace_start = Column(BigInteger, nullable=False) | ||
| keyspace_end = Column(BigInteger, nullable=False) | ||
| estimated_completion = Column(DateTime(timezone=True), nullable=True) | ||
| current_speed = Column(Float, nullable=True) | ||
|
|
||
| __table_args__ = ( | ||
| CheckConstraint('keyspace_end >= keyspace_start', name='valid_keyspace_range'), | ||
| {'comment': 'Tasks with BigInteger keyspace support and range validation'} | ||
| CheckConstraint("keyspace_end >= keyspace_start", name="valid_keyspace_range"), | ||
| {"comment": "Tasks with BigInteger keyspace support and range validation"}, | ||
| ) | ||
| ``` |
There was a problem hiding this comment.
🧩 Analysis chain
Verify Task model CheckConstraint implementation.
The Task model now includes a CheckConstraint validating keyspace_end >= keyspace_start, which is a good data integrity measure. Verify this constraint exists in the actual model and that appropriate database migration handles existing data if any.
🏁 Script executed:
#!/bin/bash
# Verify Task model CheckConstraint implementation
echo "=== Checking Task model definition ==="
rg -A 5 'class Task\(Base\):' app/models/
echo -e "\n=== Looking for keyspace CheckConstraint ==="
rg -n 'CheckConstraint.*keyspace|keyspace.*CheckConstraint' app/models/
echo -e "\n=== Checking for Task-related migrations with keyspace changes ==="
fd -e py . alembic/versions/ --exec rg -l 'task.*keyspace|CheckConstraint.*keyspace'Length of output: 506
Add missing keyspace_end >= keyspace_start CheckConstraint and DB migration
app/models/task.py doesn’t include the range constraint and no Alembic migration was found—add the CheckConstraint("keyspace_end >= keyspace_start") to the model and scaffold a migration to enforce it (migrate existing records).
🤖 Prompt for AI Agents
In .kiro/specs/phase-2b-agent-api-v2/design.md around lines 246 to 260, the
model and DB lack the CheckConstraint enforcing keyspace_end >= keyspace_start;
update app/models/task.py to add CheckConstraint("keyspace_end >=
keyspace_start", name="valid_keyspace_range") to __table_args__ next to the
BigInteger keyspace_start/keyspace_end fields, then scaffold an Alembic
migration that: (1) adds the same CHECK constraint to the tasks table in the
database (using conditional SQL if the DB requires it), (2) includes a
pre-migration validation step that detects rows violating the constraint and
either repairs them (apply a deterministic fix or set keyspace_end =
keyspace_start) or aborts with a clear error so the operator can resolve data,
and (3) updates the model version/metadata; run the migration locally and ensure
tests and CI migrations pass.
| ### Requirement 1 | ||
|
|
||
| **User Story:** As a CipherSwarm agent, I want to register with the server and receive authentication credentials, so that I can securely communicate with the server for task assignments. | ||
| **User Story:** As a Ouroboros agent, I want to register with the server and receive authentication credentials, so that I can securely communicate with the server for task assignments. |
There was a problem hiding this comment.
Correct the article before “Ouroboros agent”.
Please switch the indefinite article to “an” (e.g., “As an Ouroboros agent”). The current wording sounds unnatural; adjust here and in the other user stories that now use “a Ouroboros …”.
Apply this diff:
-**User Story:** As a Ouroboros agent, I want to register with the server and receive authentication credentials, so that I can securely communicate with the server for task assignments.
+**User Story:** As an Ouroboros agent, I want to register with the server and receive authentication credentials, so that I can securely communicate with the server for task assignments.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| **User Story:** As a Ouroboros agent, I want to register with the server and receive authentication credentials, so that I can securely communicate with the server for task assignments. | |
| **User Story:** As an Ouroboros agent, I want to register with the server and receive authentication credentials, so that I can securely communicate with the server for task assignments. |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
13-13: Link fragments should be valid
(MD051, link-fragments)
🤖 Prompt for AI Agents
In .kiro/specs/phase-2b-agent-api-v2/requirements.md around line 13, change the
indefinite article before "Ouroboros agent" from "a" to "an" (e.g., "As an
Ouroboros agent..."); scan the file for other user stories that read "a
Ouroboros ..." and update them likewise to "an Ouroboros ..." to ensure
consistent, natural wording.
| - Store examples: [campaigns.svelte.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts) | ||
| - Component usage: [CampaignProgress.svelte](mdc:Ouroboros/Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.svelte) | ||
| - SSR integration: [+page.svelte](mdc:Ouroboros/Ouroboros/frontend/src/routes/campaigns/+page.svelte) |
There was a problem hiding this comment.
Fix broken mdc: link paths
The mdc: references now repeat the repo segment (Ouroboros/Ouroboros/...), breaking the cross-file links. Please drop the duplicate Ouroboros/ so the paths resolve correctly.
-- Store examples: [campaigns.svelte.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts)
-- Component usage: [CampaignProgress.svelte](mdc:Ouroboros/Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.svelte)
-- SSR integration: [+page.svelte](mdc:Ouroboros/Ouroboros/frontend/src/routes/campaigns/+page.svelte)
+- Store examples: [campaigns.svelte.ts](mdc:Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts)
+- Component usage: [CampaignProgress.svelte](mdc:Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.svelte)
+- SSR integration: [+page.svelte](mdc:Ouroboros/frontend/src/routes/campaigns/+page.svelte)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - Store examples: [campaigns.svelte.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts) | |
| - Component usage: [CampaignProgress.svelte](mdc:Ouroboros/Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.svelte) | |
| - SSR integration: [+page.svelte](mdc:Ouroboros/Ouroboros/frontend/src/routes/campaigns/+page.svelte) | |
| - Store examples: [campaigns.svelte.ts](mdc:Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts) | |
| - Component usage: [CampaignProgress.svelte](mdc:Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.svelte) | |
| - SSR integration: [+page.svelte](mdc:Ouroboros/frontend/src/routes/campaigns/+page.svelte) |
🤖 Prompt for AI Agents
In .kiro/steering/frontend/sveltekit5-runes.md around lines 224 to 226 the
`mdc:` links include a duplicated repo segment (`Ouroboros/Ouroboros/...`) which
breaks cross-file resolution; remove the extra `Ouroboros/` from each `mdc:`
path so they read `mdc:Ouroboros/frontend/src/...` (e.g., change
`mdc:Ouroboros/Ouroboros/frontend/...` to `mdc:Ouroboros/frontend/...`) for the
three entries (campaigns.svelte.ts, CampaignProgress.svelte, +page.svelte).
| - Test configuration: [playwright.config.ts](mdc:Ouroboros/Ouroboros/frontend/playwright.config.ts) | ||
| - Component tests: [CampaignProgress.spec.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.spec.ts) | ||
| - E2E tests: [campaigns-list.test.ts](mdc:Ouroboros/Ouroboros/frontend/e2e/campaigns-list.test.ts) | ||
| - Store mocking: [campaigns.svelte.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts) |
There was a problem hiding this comment.
Fix the mdc: link prefixes for frontend references.
The new links point to mdc:Ouroboros/Ouroboros/..., which doesn’t match the repository layout and breaks editor deep-linking. Please point them at the actual paths under frontend/….
- - Test configuration: [playwright.config.ts](mdc:Ouroboros/Ouroboros/frontend/playwright.config.ts)
- - Component tests: [CampaignProgress.spec.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.spec.ts)
- - E2E tests: [campaigns-list.test.ts](mdc:Ouroboros/Ouroboros/frontend/e2e/campaigns-list.test.ts)
- - Store mocking: [campaigns.svelte.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts)
+ - Test configuration: [playwright.config.ts](mdc:frontend/playwright.config.ts)
+ - Component tests: [CampaignProgress.spec.ts](mdc:frontend/src/lib/components/campaigns/CampaignProgress.spec.ts)
+ - E2E tests: [campaigns-list.test.ts](mdc:frontend/e2e/campaigns-list.test.ts)
+ - Store mocking: [campaigns.svelte.ts](mdc:frontend/src/lib/stores/campaigns.svelte.ts)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - Test configuration: [playwright.config.ts](mdc:Ouroboros/Ouroboros/frontend/playwright.config.ts) | |
| - Component tests: [CampaignProgress.spec.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/components/campaigns/CampaignProgress.spec.ts) | |
| - E2E tests: [campaigns-list.test.ts](mdc:Ouroboros/Ouroboros/frontend/e2e/campaigns-list.test.ts) | |
| - Store mocking: [campaigns.svelte.ts](mdc:Ouroboros/Ouroboros/frontend/src/lib/stores/campaigns.svelte.ts) | |
| - Test configuration: [playwright.config.ts](mdc:frontend/playwright.config.ts) | |
| - Component tests: [CampaignProgress.spec.ts](mdc:frontend/src/lib/components/campaigns/CampaignProgress.spec.ts) | |
| - E2E tests: [campaigns-list.test.ts](mdc:frontend/e2e/campaigns-list.test.ts) | |
| - Store mocking: [campaigns.svelte.ts](mdc:frontend/src/lib/stores/campaigns.svelte.ts) |
🤖 Prompt for AI Agents
.kiro/steering/testing/testing-patterns.md around lines 316 to 319: the four
reference links use an incorrect mdc: prefix ("mdc:Ouroboros/Ouroboros/...")
which breaks editor deep-linking; update each link target to point to the
correct frontend paths under the repository (e.g., remove the extra
"Ouroboros/Ouroboros" segment and use paths like frontend/playwright.config.ts,
frontend/src/lib/components/campaigns/CampaignProgress.spec.ts,
frontend/e2e/campaigns-list.test.ts, and
frontend/src/lib/stores/campaigns.svelte.ts) so the links resolve to the actual
files.
| """ | ||
|
|
||
| PROJECT_NAME: str = "CipherSwarm" | ||
| PROJECT_NAME: str = "Ouroboros" |
There was a problem hiding this comment.
🧩 Analysis chain
Document breaking configuration changes for existing deployments.
The default values for database configuration have changed from "cipherswarm" to "ouroboros" across multiple settings:
PROJECT_NAMEPOSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DBFIRST_SUPERUSER,FIRST_SUPERUSER_PASSWORDMINIO_BUCKET
These changes won't affect deployments using environment variables but could break fresh deployments expecting the old defaults or deployments that relied on these defaults.
Actions needed:
- Document this breaking change in CHANGELOG.md or migration notes
- Provide migration guidance for existing deployments
- Consider whether a database migration script is needed for the bucket name change
Run the following to check for any hardcoded references to old values:
Also applies to: 76-84, 90-94, 177-177
🏁 Script executed:
#!/bin/bash
# Search for hardcoded references to old configuration values
echo "Checking for hardcoded 'cipherswarm' references..."
rg -i 'cipherswarm' --type py --type yaml --type json -g '!CHANGELOG*' -g '!*.md' -C2
echo "Checking docker-compose and CI files..."
rg -i 'cipherswarm' -g 'docker-compose*.yml' -g '.github/**/*.yml' -C2Length of output: 2451
Update and document breaking configuration changes
- Replace hardcoded
cipherswarm_e2ein docker-compose.e2e.yml and scripts/seed_e2e_data.py with the new default (ouroboros_e2e) or expose it via environment variables. - Document all default value changes (PROJECT_NAME, POSTGRES_, FIRST_SUPERUSER_, MINIO_BUCKET) in CHANGELOG.md or migration notes and provide guidance for existing deployments.
🤖 Prompt for AI Agents
In app/core/config.py around line 47, PROJECT_NAME is hardcoded to "Ouroboros"
while other default values (cipherswarm_e2e) were changed to ouroboros_e2e and
not propagated or documented; update docker-compose.e2e.yml and
scripts/seed_e2e_data.py to use the new default value ouroboros_e2e or,
preferably, read the value from an environment variable (with a sensible
default) instead of hardcoding; then add a concise entry in CHANGELOG.md or
migration notes listing all default changes (PROJECT_NAME, POSTGRES_*,
FIRST_SUPERUSER_*, MINIO_BUCKET) and include explicit upgrade steps and guidance
for existing deployments (which env vars to set, how to rename buckets or DBs if
needed) so operators can migrate without surprises.
There was a problem hiding this comment.
Actionable comments posted: 5
♻️ Duplicate comments (1)
app/core/config.py (1)
47-47: Breaking configuration changes remain undocumented.The default values for critical configuration settings have been changed as part of the Ouroboros rebranding:
PROJECT_NAME: "CipherSwarm" → "Ouroboros"POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB: "cipherswarm" → "ouroboros"FIRST_SUPERUSER: "admin@cipherswarm.org" → "admin@ouroboros.local"FIRST_SUPERUSER_PASSWORD: "cipherswarm" → "ouroboros"MINIO_BUCKET: "cipherswarm-resources" → "ouroboros-resources"These changes won't affect deployments using environment variables, but will impact fresh deployments or those relying on defaults. The previously raised concern about documenting these breaking changes and providing migration guidance appears unresolved.
Run the following script to check if migration documentation has been added:
#!/bin/bash # Check for migration documentation echo "Checking for CHANGELOG or migration docs..." fd -e md -e txt CHANGELOG MIGRATION --max-depth 2 echo -e "\nSearching for migration guidance..." rg -i "migration|upgrade|breaking.*change" -g "CHANGELOG*" -g "MIGRATION*" -g "docs/**/*.md" -C3Also applies to: 76-84, 90-94, 178-178
🧹 Nitpick comments (3)
.cursor/rules/testing/backend-testing.mdc (1)
58-71: Remove duplicated Polyfactory bullet listLines 58‑71 repeat the same checklist twice. Please drop the duplicate block so the section stays concise and avoids confusion about whether any extra action is required.
.kiro/steering/frontend.md (1)
26-34: Add language identifiers to fenced blocks.The fenced block listing the schema directory (and other similar blocks below) lacks a language tag, which trips MD040 (fenced-code-language). Add an explicit language such as
```text(or```bash/```typescriptas appropriate) to satisfy linting and aid syntax highlighting. Based on static analysis hints..kiro/steering/architecture/core-concepts.md (1)
1-574: Consider adding language identifiers to fenced code blocks.Multiple fenced code blocks throughout the document lack language identifiers, which can affect syntax highlighting and rendering. While not critical, adding language identifiers (e.g.,
bash,python,yaml) would improve documentation quality.This is flagged by markdownlint at several locations throughout the file. Consider addressing this in a follow-up documentation cleanup pass.
📜 Review details
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (1)
frontend/pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (12)
.cursor/rules/testing/backend-testing.mdc(7 hunks).github/workflows/ci.yml(3 hunks).kiro/steering/architecture/core-concepts.md(5 hunks).kiro/steering/code/fastapi-patterns.md(2 hunks).kiro/steering/frontend.md(1 hunks).mdformat.toml(1 hunks).prettierignore(1 hunks)README.md(1 hunks)app/core/config.py(5 hunks)app/core/openapi_customization.py(11 hunks)app/main.py(10 hunks)docker-compose.e2e.yml(2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- .prettierignore
- app/main.py
🧰 Additional context used
🪛 Checkov (3.2.334)
.github/workflows/ci.yml
[medium] 83-84: Basic Auth Credentials
(CKV_SECRET_4)
docker-compose.e2e.yml
[medium] 59-60: Basic Auth Credentials
(CKV_SECRET_4)
🪛 markdownlint-cli2 (0.18.1)
.kiro/steering/architecture/core-concepts.md
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
14-14: Multiple headings with the same content
(MD024, no-duplicate-heading)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
18-18: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
24-24: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
21-21: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
13-13: Link fragments should be valid
(MD051, link-fragments)
15-15: Link fragments should be valid
(MD051, link-fragments)
16-16: Link fragments should be valid
(MD051, link-fragments)
23-23: Link fragments should be valid
(MD051, link-fragments)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.kiro/steering/code/fastapi-patterns.md
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
14-14: Multiple headings with the same content
(MD024, no-duplicate-heading)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
13-13: Link fragments should be valid
(MD051, link-fragments)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
36-36: Link fragments should be valid
(MD051, link-fragments)
.kiro/steering/frontend.md
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🔇 Additional comments (7)
docker-compose.e2e.yml (1)
6-6: LGTM! Database name consistently updated across E2E configuration.The database name changes from
cipherswarm_e2etoouroboros_e2eare applied consistently across all three references (postgres service environment, backend DATABASE_URL, and backend POSTGRES_DB). This aligns with the project rebranding.Note: The static analysis warning about hardcoded credentials is a false positive—these test credentials are appropriate for E2E environments and don't pose a security risk.
Also applies to: 59-59, 64-64
.github/workflows/ci.yml (2)
19-21: LGTM! CI credentials consistently updated for Ouroboros.All Postgres credentials have been updated from
cipherswarmtoouroborosacross both the service definition (lines 19-21) and the environment variables (lines 83-93), including legacy variable names. This ensures backward compatibility while supporting the rebranding.Note: The static analysis warning about hardcoded credentials is a false positive—these are CI test credentials and don't pose a security risk.
Also applies to: 83-93
44-49: LGTM! Node.js setup properly configured with pnpm caching.The new Node.js setup step includes proper pnpm cache configuration with the correct cache-dependency-path pointing to
frontend/pnpm-lock.yaml. This will improve CI performance by caching dependencies between runs.README.md (1)
1-50: LGTM! README effectively communicates project status and rebranding.The restructured README clearly positions Ouroboros as an experimental rewrite of CipherSwarm, with appropriate emphasis on its development status. The new structure (Purpose → Architecture Overview → Status → Symbolism) is well-organized and sets proper expectations for users and contributors.
The removal of detailed setup instructions suggests they've been moved to dedicated documentation, which is a good practice for a project of this scope.
app/core/openapi_customization.py (3)
1-1: LGTM! Consistent rebranding to Ouroboros.The rebranding from CipherSwarm to Ouroboros is applied consistently across docstrings, URLs, examples, and descriptions. Using
ouroboros.example.comas a placeholder domain is appropriate for documentation.Also applies to: 24-25, 35-35, 40-40, 43-43, 51-51, 59-59, 167-167, 227-227, 254-254
122-122: LGTM! Trailing commas improve maintainability.Adding trailing commas to dictionaries and lists follows Python best practices and produces cleaner diffs when new items are added.
Also applies to: 153-154, 248-248, 264-264
303-308: LGTM! Improved error response descriptions.The updated descriptions for 401 and 403 responses are clearer and more informative for API consumers.
| # Ouroboros Core Concepts | ||
|
|
||
| # CipherSwarm Core Concepts | ||
| # Ouroboros Core Concepts |
There was a problem hiding this comment.
Remove duplicate heading.
The heading "Ouroboros Core Concepts" appears twice consecutively (lines 5 and 7). Remove one of them to fix the duplicate heading issue.
Apply this diff to remove the duplicate:
---
inclusion: always
---
# Ouroboros Core Concepts
-# Ouroboros Core Concepts
## Project Overview📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # Ouroboros Core Concepts | |
| # CipherSwarm Core Concepts | |
| # Ouroboros Core Concepts | |
| --- | |
| inclusion: always | |
| --- | |
| # Ouroboros Core Concepts | |
| ## Project Overview |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In .kiro/steering/architecture/core-concepts.md around lines 5 to 7, there's a
duplicated heading "Ouroboros Core Concepts" on consecutive lines; remove one of
the duplicate heading lines so only a single "# Ouroboros Core Concepts" heading
remains at the top of the document, preserving surrounding whitespace and line
breaks.
| # Ouroboros Frontend Development Guide | ||
|
|
||
| # CipherSwarm Frontend Development Guide | ||
| # Ouroboros Frontend Development Guide | ||
|
|
There was a problem hiding this comment.
Remove the duplicate H1 heading.
Lines 9 and 11 both declare # Ouroboros Frontend Development Guide. The second occurrence is redundant and triggers MD024 (no-duplicate-heading). Please drop the duplicate line to keep the document valid and lint-clean. Based on static analysis hints.
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In .kiro/steering/frontend.md around lines 9 to 12, there are two identical H1
headings ("# Ouroboros Frontend Development Guide"); remove the second
(duplicate) heading so only one H1 remains at the top of the document, then save
the file to resolve the MD024 duplicate-heading lint error.
| if path not in [ | ||
| "/api/v1/client/authenticate" | ||
| "/api/v1/client/authenticate", | ||
| ]: # Exclude auth endpoints | ||
| operation["security"] = [{"AgentBearer": []}] |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
🧩 Analysis chain
Verify the authentication endpoint exclusion logic.
The comment states "Exclude auth endpoints" (plural), but only a single endpoint /api/v1/client/authenticate is excluded from security requirements. Confirm whether other Agent API authentication endpoints should be excluded, similar to how the Web UI API excludes multiple patterns (/auth/login and /health at Lines 290-292).
Run the following script to check for additional authentication-related endpoints in the Agent API:
🏁 Script executed:
#!/bin/bash
# Description: Find authentication-related endpoints in Agent API routes
# Expected: Verify if other auth endpoints exist that should be excluded from security
# Search for Agent API route definitions with auth-related names
rg -nP --type=py -C3 'api/v1/(client|agent).*auth|authenticate|login|register' app/api/Length of output: 13375
Expand auth endpoint exclusions
Add /api/v1/agent/authenticate to the exclusion list in app/core/openapi_customization.py so both Agent API authentication endpoints are exempt from security requirements.
🤖 Prompt for AI Agents
In app/core/openapi_customization.py around lines 285 to 288, the exclusion list
for authentication endpoints only contains "/api/v1/client/authenticate" so the
Agent API auth endpoint is still getting security applied; update the list to
also include "/api/v1/agent/authenticate" (i.e., extend the list literal or its
source to include that path) so both auth endpoints are exempt from adding
operation["security"] = [{"AgentBearer": []}].
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
.kiro/steering/frontend/sse-implementation.md (1)
253-261: Fix reconnect attempt counters in example.
this.reconnectAttemptsandthis.maxReconnectAttemptsare never defined on the class, so this sample will throw at runtime (and the exponential backoff never works). Please reference the state object you declared earlier and introduce a defined limit, e.g.:- const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000); + const attempts = this.connectionStatus.reconnectAttempts; + const delay = Math.min(1000 * Math.pow(2, attempts), 30000); @@ - if (this.reconnectAttempts < this.maxReconnectAttempts) { - this.reconnectAttempts++; + if (attempts < this.maxReconnectAttempts) { + this.connectionStatus.reconnectAttempts = attempts + 1; this.connect(endpoint, onMessage); }…and document/declare
private readonly maxReconnectAttempts = 5;(or similar) near the top of the class..kiro/steering/code/sqlalchemy.md (1)
51-56: Fix the broken Python code fence.The opening ```python fence was replaced by plain text, so the class definition now renders outside the code block and the snippet loses syntax highlighting. Restore the fenced block to keep the example intact.
- python class UserRepository: def __init__(self, session: Session): self.session = session - - ``` - def get_user_by_id(self, user_id: int) -> User | None: - return self.session.get(User, user_id) - ``` + ```python + class UserRepository: + def __init__(self, session: Session): + self.session = session + + def get_user_by_id(self, user_id: int) -> User | None: + return self.session.get(User, user_id) + ```docs/api/error-responses.md (1)
428-492: Rename the sample exception to match Ouroboros branding.Everything else in this doc now references Ouroboros, but the example still defines
CipherSwarmAPIError, which is confusing. Please rename the class and its usages (and adjust the error messages if desired) so the sample matches the new project name.-class CipherSwarmAPIError(Exception): +class OuroborosAPIError(Exception): @@ - raise CipherSwarmAPIError(401, "Authentication failed", response.json()) + raise OuroborosAPIError(401, "Authentication failed", response.json()) @@ - raise CipherSwarmAPIError(403, "Access denied", response.json()) + raise OuroborosAPIError(403, "Access denied", response.json()) @@ - raise CipherSwarmAPIError(404, "Resource not found", response.json()) + raise OuroborosAPIError(404, "Resource not found", response.json()) @@ - raise CipherSwarmAPIError(409, "Resource conflict", response.json()) + raise OuroborosAPIError(409, "Resource conflict", response.json()) @@ - raise CipherSwarmAPIError(422, "Validation error", error_data) + raise OuroborosAPIError(422, "Validation error", error_data) @@ - continue - raise CipherSwarmAPIError(429, "Rate limit exceeded", response.json()) + continue + raise OuroborosAPIError(429, "Rate limit exceeded", response.json()) @@ - raise CipherSwarmAPIError( + raise OuroborosAPIError( @@ - raise CipherSwarmAPIError( + raise OuroborosAPIError( @@ - raise CipherSwarmAPIError(0, f"Network error: {e}") + raise OuroborosAPIError(0, f"Network error: {e}") @@ - raise CipherSwarmAPIError(0, "Max retries exceeded") + raise OuroborosAPIError(0, "Max retries exceeded")
♻️ Duplicate comments (1)
.kiro/steering/architecture/core-concepts.md (1)
5-7: Remove duplicate H1 headingThe second
# Ouroboros Core Conceptson Line 7 still duplicates the H1, tripping MD024. Drop the extra heading so only one H1 remains.
🧹 Nitpick comments (4)
.kiro/steering/architecture/docker-guidelines.md (1)
51-53: Restore multi-line directory example in a fenced blockThe directory tree collapsed into a single line, which hurts readability and still triggers markdownlint (MD040) because the example isn’t in a language-tagged fence. Let’s keep the multi-line tree inside a fenced block (e.g., ```text) to preserve formatting and satisfy lint.
Apply this diff:
- - Organize your project with a clear separation of concerns. For example: project-root/ ├── Dockerfile # Dockerfile for building the image ├── docker-compose.yml # Docker Compose file for multi-container setup ├── .dockerignore # Specifies intentionally untracked files that Docker should ignore ├── app/ # Application source code │ ├── ... ├── config/ # Configuration files │ ├── ... ├── data/ # Data files (if any, though consider volumes) │ ├── ... ├── scripts/ # Scripts for building, deploying, or managing the container │ ├── ... + - Organize your project with a clear separation of concerns. For example: + + ```text + project-root/ + ├── Dockerfile # Build the application image + ├── docker-compose.yml # Multi-container orchestration + ├── .dockerignore # Exclude unnecessary build context + ├── app/ # Application source code + │ └── ... + ├── config/ # Configuration files + │ └── ... + ├── data/ # Persistent data (prefer volumes) + │ └── ... + ├── scripts/ # Build/deploy/maintenance scripts + │ └── ... + ```.kiro/specs/phase-1-core-infrastructure/design.md (2)
35-41: Clarify howupdated_atstays in syncGood call adding
updated_at, but spell out the mechanism (e.g., SQLAlchemyonupdate=func.now()or trigger) so implementors don’t ship stale timestamps.
379-381: Rename the base exception for consistencyWith the docstring now targeting Ouroboros, consider renaming
CipherSwarmExceptiontoOuroborosException(and aligning references) to finish the rebrand and prevent mixed terminology.README.md (1)
25-49: Deduplicate repeated bullets/quotes for clarity.The SvelteKit “Frontend” bullet appears twice, and the “From its own code…” quote is repeated a few lines apart. Consider trimming the duplicates to keep the intro tight.
📜 Review details
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (1)
frontend/pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (17)
.github/PULL_REQUEST_TEMPLATE.md(2 hunks).github/prompts/next_task.prompt.md(2 hunks).kiro/specs/phase-1-core-infrastructure/design.md(3 hunks).kiro/steering/architecture.md(5 hunks).kiro/steering/architecture/core-concepts.md(6 hunks).kiro/steering/architecture/docker-guidelines.md(2 hunks).kiro/steering/code/github-actions.md(2 hunks).kiro/steering/code/mkdocs.md(2 hunks).kiro/steering/code/pydantic.md(2 hunks).kiro/steering/code/sqlalchemy.md(3 hunks).kiro/steering/frontend/sse-implementation.md(9 hunks).mdformat.toml(1 hunks)README.md(1 hunks)docs/api/README.md(4 hunks)docs/api/agent.md(3 hunks)docs/api/control.md(7 hunks)docs/api/error-responses.md(8 hunks)
✅ Files skipped from review due to trivial changes (1)
- .github/prompts/next_task.prompt.md
🚧 Files skipped from review as they are similar to previous changes (5)
- .kiro/steering/code/pydantic.md
- .mdformat.toml
- .kiro/steering/architecture.md
- docs/api/README.md
- .kiro/steering/code/github-actions.md
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
.kiro/steering/code/sqlalchemy.md
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.github/PULL_REQUEST_TEMPLATE.md
71-71: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
102-102: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
102-102: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.kiro/specs/phase-1-core-infrastructure/design.md
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
35-35: Link fragments should be valid
(MD051, link-fragments)
.kiro/steering/architecture/core-concepts.md
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
14-14: Multiple headings with the same content
(MD024, no-duplicate-heading)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
18-18: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
24-24: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
21-21: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
13-13: Link fragments should be valid
(MD051, link-fragments)
15-15: Link fragments should be valid
(MD051, link-fragments)
16-16: Link fragments should be valid
(MD051, link-fragments)
23-23: Link fragments should be valid
(MD051, link-fragments)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
92-92: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
91-91: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
513-513: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
.kiro/steering/architecture/docker-guidelines.md
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.kiro/steering/code/mkdocs.md
26-26: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
26-26: Link fragments should be valid
(MD051, link-fragments)
.kiro/steering/frontend/sse-implementation.md
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
106-106: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
132-132: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
158-158: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
155-155: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
README.md
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
14-14: Multiple headings with the same content
(MD024, no-duplicate-heading)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
26-26: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
18-18: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
24-24: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
27-27: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
38-38: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
21-21: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
46-46: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
13-13: Link fragments should be valid
(MD051, link-fragments)
15-15: Link fragments should be valid
(MD051, link-fragments)
16-16: Link fragments should be valid
(MD051, link-fragments)
23-23: Link fragments should be valid
(MD051, link-fragments)
26-26: Link fragments should be valid
(MD051, link-fragments)
27-27: Link fragments should be valid
(MD051, link-fragments)
28-28: Link fragments should be valid
(MD051, link-fragments)
29-29: Link fragments should be valid
(MD051, link-fragments)
33-33: Link fragments should be valid
(MD051, link-fragments)
34-34: Link fragments should be valid
(MD051, link-fragments)
35-35: Link fragments should be valid
(MD051, link-fragments)
36-36: Link fragments should be valid
(MD051, link-fragments)
38-38: Link fragments should be valid
(MD051, link-fragments)
40-40: Link fragments should be valid
(MD051, link-fragments)
43-43: Link fragments should be valid
(MD051, link-fragments)
45-45: Link fragments should be valid
(MD051, link-fragments)
46-46: Link fragments should be valid
(MD051, link-fragments)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
40-40: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
docs/api/agent.md
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
249-249: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
238-238: Link fragments should be valid
(MD051, link-fragments)
docs/api/control.md
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
35-35: Link fragments should be valid
(MD051, link-fragments)
215-215: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
214-214: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
docs/api/error-responses.md
53-53: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🔇 Additional comments (2)
.kiro/steering/architecture/docker-guidelines.md (1)
2-6: Front matter update looks alignedThe YAML structure and inclusion patterns match the conventions used elsewhere in the steering docs. No concerns here.
.kiro/specs/phase-1-core-infrastructure/design.md (1)
5-5: Overview rebrand looks goodUpdated overview cleanly reflects the Ouroboros v2 focus with no gaps.
| Ouroboros uses Cashews as the primary caching library f-compatible TTL caching across internal services and web UI endpoints. | ||
|
|
There was a problem hiding this comment.
Fix typo in Cashews sentence
Line 513 reads “f-compatible TTL caching,” which looks like a truncated edit. Please restore it to “FastAPI-compatible TTL caching” (or similar) so the guidance remains clear.
-Ouroboros uses Cashews as the primary caching library f-compatible TTL caching across internal services and web UI endpoints.
+Ouroboros uses Cashews as the primary caching library for FastAPI-compatible TTL caching across internal services and web UI endpoints.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Ouroboros uses Cashews as the primary caching library f-compatible TTL caching across internal services and web UI endpoints. | |
| Ouroboros uses Cashews as the primary caching library for FastAPI-compatible TTL caching across internal services and web UI endpoints. |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
513-513: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
🤖 Prompt for AI Agents
In .kiro/steering/architecture/core-concepts.md around lines 513-514, the phrase
"f-compatible TTL caching" is a typo from a truncated edit; replace it with
"FastAPI-compatible TTL caching" (or an equivalent clear phrase) so the sentence
reads: "Ouroboros uses Cashews as the primary caching library for
FastAPI-compatible TTL caching across internal services and web UI endpoints."
Ensure spacing and punctuation match surrounding text.
| ├── requirements.txt | ||
| ├── pyproject.toml # Define project dependencies | ||
| └── README.md | ||
| project_name/ ├── app/ │ ├── __init__.py │ ├── models/ │ │ ├── __init__.py │ │ ├── user.py │ │ ├── product.py │ │ └── ... │ ├── database.py # SQLAlchemy engine and session setup │ ├── routes/ │ │ ├── __init__.py │ │ ├── user_routes.py │ │ ├── product_routes.py │ │ └── ... │ ├── schemas/ │ │ ├── __init__.py │ │ ├── user_schema.py │ │ ├── product_schema.py │ │ └── ... │ ├── utils.py │ └── main.py # Entry point for the application ├── tests/ │ ├── __init__.py │ ├── conftest.py # Fixtures for testing │ ├── test_models.py │ ├── test_routes.py │ └── ... ├── migrations/ │ ├── versions/ │ │ ├── ... (Alembic migration scripts) │ ├── alembic.ini │ └── env.py ├── .env # Environment variables ├── requirements.txt ├── pyproject.toml # Define project dependencies └── README.md |
There was a problem hiding this comment.
Restore the directory tree as a fenced block.
The entire directory structure example has been flattened into a single line, making it unreadable. Please revert it to a multi-line fenced block (e.g., text … ) so the hierarchy renders correctly.
🤖 Prompt for AI Agents
.kiro/steering/code/sqlalchemy.md around line 17: the example directory tree was
flattened into one line; restore it to a multi-line fenced code block by
replacing the single-line entry with a properly indented, multi-line block
wrapped in triple backticks (```text) containing the directory hierarchy and
then closing the backticks, ensuring each folder/file appears on its own line
with correct indentation.
| options: | ||
| show_root_heading: true | ||
| show_source: false | ||
| ::: app.schemas.shared.PaginatedResponse options: show_root_heading: true show_source: false |
There was a problem hiding this comment.
Revert to the supported mkdocstrings options block.
options: show_root_heading: true show_source: false on a single line isn’t valid YAML, so mkdocstrings will choke during the docs build. Please restore the nested mapping format.
-::: app.schemas.shared.PaginatedResponse options: show_root_heading: true show_source: false
+::: app.schemas.shared.PaginatedResponse
+ options:
+ show_root_heading: true
+ show_source: false📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ::: app.schemas.shared.PaginatedResponse options: show_root_heading: true show_source: false | |
| ::: app.schemas.shared.PaginatedResponse | |
| options: | |
| show_root_heading: true | |
| show_source: false |
🤖 Prompt for AI Agents
In docs/api/control.md around line 258, the mkdocstrings options were placed on
a single line (`options: show_root_heading: true show_source: false`) which is
invalid YAML; change the options block back to the supported nested mapping form
by replacing the single-line options with a properly indented mapping (each
option on its own line under `options:`) so mkdocstrings can parse the YAML
correctly.
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
.kiro/specs/nicegui-web-interface/design.md (1)
562-576: Clear pagination container before rebuilding controlsEach call to
_create_pagination()nests another set of buttons in the existing container because nothing clearsself.pagination_containerbefore re-entering thewithblock. Any search/sort/change-page action will keep duplicating controls. Please clear the container first.- with self.pagination_container: + self.pagination_container.clear() + with self.pagination_container: ui.button( "Previous",
🧹 Nitpick comments (1)
README.md (1)
41-47: Drop the duplicate quote.The symbolism section repeats the same quote twice back-to-back. Please keep a single instance to avoid distracting duplication.
📜 Review details
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (3)
.kiro/specs/nicegui-web-interface/design.md(1 hunks).kiro/specs/sveltekit-frontend-removal/design.md(1 hunks)README.md(1 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
README.md
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
26-26: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
18-18: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
24-24: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
27-27: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
38-38: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
21-21: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
46-46: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
13-13: Link fragments should be valid
(MD051, link-fragments)
15-15: Link fragments should be valid
(MD051, link-fragments)
16-16: Link fragments should be valid
(MD051, link-fragments)
23-23: Link fragments should be valid
(MD051, link-fragments)
26-26: Link fragments should be valid
(MD051, link-fragments)
27-27: Link fragments should be valid
(MD051, link-fragments)
28-28: Link fragments should be valid
(MD051, link-fragments)
29-29: Link fragments should be valid
(MD051, link-fragments)
33-33: Link fragments should be valid
(MD051, link-fragments)
34-34: Link fragments should be valid
(MD051, link-fragments)
35-35: Link fragments should be valid
(MD051, link-fragments)
36-36: Link fragments should be valid
(MD051, link-fragments)
38-38: Link fragments should be valid
(MD051, link-fragments)
40-40: Link fragments should be valid
(MD051, link-fragments)
43-43: Link fragments should be valid
(MD051, link-fragments)
45-45: Link fragments should be valid
(MD051, link-fragments)
46-46: Link fragments should be valid
(MD051, link-fragments)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
40-40: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.kiro/specs/sveltekit-frontend-removal/design.md
137-137: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
60-60: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
503-503: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
83-83: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
80-80: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
84-84: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
106-106: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
182-182: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
225-225: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
291-291: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
335-335: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
418-418: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
523-523: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
570-570: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
7-7: Multiple headings with the same content
(MD024, no-duplicate-heading)
53-53: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Multiple headings with the same content
(MD024, no-duplicate-heading)
26-26: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
18-18: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
24-24: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
27-27: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
5-5: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
23-23: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
71-71: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
92-92: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
102-102: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
308-308: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
38-38: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
269-269: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
21-21: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
91-91: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
102-102: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
108-108: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
118-118: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
132-132: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
146-146: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
158-158: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
46-46: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
107-107: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
155-155: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
249-249: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
11-11: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
152-152: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
13-13: Link fragments should be valid
(MD051, link-fragments)
15-15: Link fragments should be valid
(MD051, link-fragments)
16-16: Link fragments should be valid
(MD051, link-fragments)
23-23: Link fragments should be valid
(MD051, link-fragments)
26-26: Link fragments should be valid
(MD051, link-fragments)
27-27: Link fragments should be valid
(MD051, link-fragments)
28-28: Link fragments should be valid
(MD051, link-fragments)
29-29: Link fragments should be valid
(MD051, link-fragments)
33-33: Link fragments should be valid
(MD051, link-fragments)
34-34: Link fragments should be valid
(MD051, link-fragments)
35-35: Link fragments should be valid
(MD051, link-fragments)
36-36: Link fragments should be valid
(MD051, link-fragments)
38-38: Link fragments should be valid
(MD051, link-fragments)
40-40: Link fragments should be valid
(MD051, link-fragments)
43-43: Link fragments should be valid
(MD051, link-fragments)
45-45: Link fragments should be valid
(MD051, link-fragments)
46-46: Link fragments should be valid
(MD051, link-fragments)
214-214: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
40-40: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
238-238: Link fragments should be valid
(MD051, link-fragments)
…dates Bumps the npm_and_yarn group with 2 updates in the /frontend directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) and [devalue](https://github.com/sveltejs/devalue). Updates `vite` from 7.1.2 to 7.1.5 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.1.5/packages/vite) Updates `devalue` from 5.1.1 to 5.3.2 - [Release notes](https://github.com/sveltejs/devalue/releases) - [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md) - [Commits](sveltejs/devalue@v5.1.1...v5.3.2) --- updated-dependencies: - dependency-name: vite dependency-version: 7.1.5 dependency-type: direct:development dependency-group: npm_and_yarn - dependency-name: devalue dependency-version: 5.3.2 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com>
Adds AI agent development guide Introduces a comprehensive development guide to align AI coding assistants with project architecture and standards, improving onboarding and reducing mismatches. Details architecture boundaries (three-API separation), coding conventions (logging, caching, datetime, typing), API error format, SvelteKit patterns, database and testing practices, security/multi-tenancy requirements, package management, and protected areas. Encourages consistent workflows and fewer CI issues by documenting required commands and guardrails for safe contributions. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
…contain permissions Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
… Node caching and use setup-just
- Bump @types/node from 24.3.0 to 24.3.3 - Upgrade chalk from 5.6.0 to 5.6.2 - Upgrade fast-uri from 3.0.6 to 3.1.0 - Upgrade import-meta-resolve from 4.1.0 to 4.2.0 - Update commitlint dependencies to reflect new @types/node version
- Refactor .editorconfig to streamline whitespace rules. - Modify justfile to enhance task definitions and add pre-commit autoupdate. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
…t.toml and uv.lock - Updated Python version requirement to >=3.12,<3.14. - Updated various dependencies to their latest compatible versions. - Adjusted lock file to reflect changes in dependency versions and constraints. - Ensured consistency in formatting across configuration files.
- Added alias for `test-backend` to simplify command usage. - Updated `test-backend` command to utilize `pytest` with automatic parallelization. - Refined `lint` command to streamline the linting process. - Ensured consistent usage of `uv run` for command execution across tasks.
- Changed the command in `justfile` to use `basedpyright` for better integration with the project. - Added a new temporary ignore rule for `ruff` in `pyproject.toml` to accommodate ongoing changes. - Removed unused variable reports from `baseline.json` to clean up the baseline for `basedpyright`.
Standardizes inclusion metadata across steering documentation by converting header-style inclusion notes into proper YAML front-matter keys, normalizing glob patterns and list formatting, and ensuring consistent front-matter delimiters. Improves machine parsing and maintainability of steering rules, prevents misinterpreted or escaped patterns, and makes file-matching configuration uniform for tooling and future updates.
…tion plan Adds a comprehensive specification set for implementing a NiceGUI-based web UI integrated into the FastAPI backend, including design, requirements, and a step-by-step implementation task list. Motivation: provide a Python-native alternative to the existing SvelteKit frontend that ships with the backend as a single deployable app, reuses existing authentication and services, and simplifies deployment and middleware sharing by using ui.run_with() integration. Benefits: - Defines component architecture, UI data models, error/notification strategies, and real-time (SSE) patterns. - Provides acceptance criteria and UX-driven requirements for dashboards, campaigns, agents, attacks, resources, and user management. - Supplies an implementation roadmap and testing strategy (component tests + Playwright E2E) to enable incremental, verifiable development. No issue reference.
Adds comprehensive documentation and guide for an integrated Python-native NiceGUI web interface. Updates README, architecture overview, installation/setup instructions, development setup, and site navigation to present NiceGUI as an alternative to the existing SvelteKit frontend. Explains enabling, development workflow, deployment benefits (single-container, Python-only), real-time features, and feature parity to help Python-focused teams and simplify deployments.
Adds comprehensive specifications (design, requirements and implementation tasks) to remove the separate SvelteKit frontend and consolidate the NiceGUI interface into the FastAPI application. Provides rationale and validation criteria to simplify the architecture, eliminate Node.js/tooling and web-API indirection, and reduce maintenance and CI/CD overhead. Defines route migration and redirect middleware, Docker/Nginx and CI updates, removal of web UI API routes and frontend artifacts, testing and validation steps, and rollback/safety measures to ensure a safe migration.
- Introduced the new Agent API v2, including improved authentication, state management, and task distribution capabilities while maintaining backward compatibility with v1. - Added routing structure and endpoint modules for agents, attacks, resources, and tasks. - Updated `pyproject.toml` for version bump to 2.0.0 and dependency upgrades. - Adjusted user factory to ensure valid bcrypt hash length for passwords. - Comprehensive documentation added for the new API structure and endpoints. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
- Modified multiple configuration files including `.gitignore`, `.markdownlint-cli2.jsonc`, `.mdformat.toml`, and `.prettierignore` for improved project setup. - Updated `AGENTS.md` and other documentation files to reflect recent changes and enhance clarity. - Adjusted `CHANGELOG.md` to include recent updates and maintain accurate project history. - Ensured consistency across various project specifications and requirements documents. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
…dates Bumps the npm_and_yarn group with 2 updates in the /frontend directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) and [devalue](https://github.com/sveltejs/devalue). Updates `vite` from 7.1.2 to 7.1.5 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.1.5/packages/vite) Updates `devalue` from 5.1.1 to 5.3.2 - [Release notes](https://github.com/sveltejs/devalue/releases) - [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md) - [Commits](sveltejs/devalue@v5.1.1...v5.3.2) --- updated-dependencies: - dependency-name: vite dependency-version: 7.1.5 dependency-type: direct:development dependency-group: npm_and_yarn - dependency-name: devalue dependency-version: 5.3.2 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com>
- Bump @types/node from 24.3.0 to 24.3.3 - Upgrade chalk from 5.6.0 to 5.6.2 - Upgrade fast-uri from 3.0.6 to 3.1.0 - Upgrade import-meta-resolve from 4.1.0 to 4.2.0 - Update commitlint dependencies to reflect new @types/node version
- Refactor .editorconfig to streamline whitespace rules. - Modify justfile to enhance task definitions and add pre-commit autoupdate. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
…t.toml and uv.lock - Updated Python version requirement to >=3.12,<3.14. - Updated various dependencies to their latest compatible versions. - Adjusted lock file to reflect changes in dependency versions and constraints. - Ensured consistency in formatting across configuration files.
- Added alias for `test-backend` to simplify command usage. - Updated `test-backend` command to utilize `pytest` with automatic parallelization. - Refined `lint` command to streamline the linting process. - Ensured consistent usage of `uv run` for command execution across tasks.
- Changed the command in `justfile` to use `basedpyright` for better integration with the project. - Added a new temporary ignore rule for `ruff` in `pyproject.toml` to accommodate ongoing changes. - Removed unused variable reports from `baseline.json` to clean up the baseline for `basedpyright`.
Standardizes inclusion metadata across steering documentation by converting header-style inclusion notes into proper YAML front-matter keys, normalizing glob patterns and list formatting, and ensuring consistent front-matter delimiters. Improves machine parsing and maintainability of steering rules, prevents misinterpreted or escaped patterns, and makes file-matching configuration uniform for tooling and future updates.
Adds comprehensive documentation and guide for an integrated Python-native NiceGUI web interface. Updates README, architecture overview, installation/setup instructions, development setup, and site navigation to present NiceGUI as an alternative to the existing SvelteKit frontend. Explains enabling, development workflow, deployment benefits (single-container, Python-only), real-time features, and feature parity to help Python-focused teams and simplify deployments.
- Introduced the new Agent API v2, including improved authentication, state management, and task distribution capabilities while maintaining backward compatibility with v1. - Added routing structure and endpoint modules for agents, attacks, resources, and tasks. - Updated `pyproject.toml` for version bump to 2.0.0 and dependency upgrades. - Adjusted user factory to ensure valid bcrypt hash length for passwords. - Comprehensive documentation added for the new API structure and endpoints. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
- Updated the NiceGUI integration to streamline application initialization and authentication middleware, improving user session management. - Refactored login page to utilize NiceGUI's app.storage for session handling, enhancing security and user experience. - Revised table and pagination components to follow NiceGUI's reactive patterns, ensuring better performance and maintainability. - Removed the obsolete Web UI API v1 specifications and requirements, consolidating the architecture for a more efficient deployment. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
…ture - Added comprehensive documentation for the new Agent API v2, detailing enhanced features, authentication improvements, and error handling. - Updated the changelog to reflect the major version bump to 2.0.0 and the introduction of dual API support for v1 and v2. - Revised API architecture documentation to include the new modular endpoint organization and routing structure. - Included a development guide for Agent API v2 implementation, outlining project structure and planned features. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
Upgraded various dependencies in frontend/package.json and pnpm-lock.yaml, including axios, zod, Svelte, ESLint, Playwright, and others. Updated pre-commit hooks in .pre-commit-config.yaml to use newer versions of ruff, commitizen, and uv. Also updated justfile and pytest.ini to reflect these changes. This ensures the project uses the latest features, bug fixes, and security patches from upstream packages.
…larity - Revised multiple documentation files to enhance clarity and ensure consistency across the project. - Updated API reference documents, user guides, and development notes to reflect recent changes and improvements. - Improved formatting and structure in several markdown files for better readability and navigation. - Ensured that all documentation aligns with the latest project standards and guidelines. This update aims to provide a clearer understanding of the project's architecture and usage for developers and users alike. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
…documentation - Updated the project name from CipherSwarm to Ouroboros throughout the README.md file to reflect the new branding. - Revised the introduction to clarify the purpose of Ouroboros as a modern rewrite of CipherSwarm using FastAPI and SvelteKit. - Enhanced the architecture overview and purpose sections to provide a clearer understanding of the project's goals and design. - Removed outdated sections related to the previous version and streamlined the content for better readability. This update aims to align the documentation with the current state of the project and improve clarity for new contributors and users. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
- Updated various dependencies in the project, including pre-commit hooks in .pre-commit-config.yaml to use newer versions. - Revised environment example files and configuration files to reflect the updated project structure and naming conventions. - Ensured consistency in naming across the project, particularly in references to "Ouroboros" in documentation and code comments. This update aims to maintain the project's alignment with the latest standards and improve overall maintainability. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
- Enhanced the .mdformat.toml file by adding exclusions for various file types and directories to streamline markdown formatting. - Simplified the ci-check command in the justfile to improve clarity and efficiency in running checks. - Updated README.md to consolidate badge information for better presentation. - Revised multiple documentation files to improve formatting and ensure consistency in presentation. This update aims to enhance project maintainability and improve the clarity of documentation for contributors. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
- Enhanced the formatting of various documentation files to ensure clarity and uniformity across the project. - Updated the justfile to improve the installation process for git-cliff, ensuring error handling is clear and user-friendly. - Revised multiple sections in core-concepts.mdc to maintain consistent bullet point formatting and improve readability. - Corrected minor typographical errors in implementation plan documents to enhance overall professionalism. This update aims to streamline documentation for better contributor experience and maintainability. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
- Updated the justfile to refine the markdown formatting check command, ensuring it includes all relevant markdown files in the docs directory. - Revised README.md to remove outdated frontend technology references, streamlining the content for better clarity. - Improved the PULL_REQUEST_TEMPLATE.md to clarify the structure for linking related issues. - Enhanced design documentation for the NiceGUI web interface by adding detailed usage instructions for middleware creation. - Adjusted various markdown files for consistent formatting and improved readability. This update aims to enhance the overall documentation quality and maintainability for contributors and users. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
397f270 to
295ed2b
Compare
This pull request adds a comprehensive requirements specification for the planned NiceGUI-based web interface, which will be integrated directly into the CipherSwarm FastAPI backend. The document outlines the functional and non-functional requirements necessary to replicate and enhance the SvelteKit frontend experience in a Python-native environment, focusing on deployment simplicity, feature parity, and extensibility.
Requirements specification:
.kiro/specs/nicegui-web-interface/requirements.md) detailing user stories and acceptance criteria for all major features of the NiceGUI web interface, including dashboard, campaign management, agent management, attack configuration, resource management, user management, authentication, real-time updates, and responsive design.Deployment and integration:
/ui/path, fully integrated with FastAPI, eliminating the need for a separate frontend server and simplifying deployment.Feature parity and usability:
Security and authentication:
Real-time
Summary by CodeRabbit